summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--asm/battle_bg.s4
-rw-r--r--asm/berry_crush.s8
-rw-r--r--asm/berry_crush_2.s34
-rw-r--r--asm/berry_crush_3.s30
-rw-r--r--asm/cable_club.s34
-rw-r--r--asm/dodrio_berry_picking.s16
-rw-r--r--asm/dodrio_berry_picking_2.s6
-rw-r--r--asm/easy_chat_2.s6
-rw-r--r--asm/event_object_80688E4.s1503
-rw-r--r--asm/event_object_movement.s10
-rw-r--r--asm/field_control_avatar.s4
-rw-r--r--asm/field_effect_helpers.s26
-rw-r--r--asm/field_screen_effect.s306
-rw-r--r--asm/librfu_intr.s697
-rw-r--r--asm/macros.inc1
-rw-r--r--asm/macros/event.inc8
-rw-r--r--asm/macros/trainer_tower.inc133
-rw-r--r--asm/overworld.s148
-rw-r--r--asm/pokedex_screen.s2
-rw-r--r--asm/pokemon_jump.s2
-rw-r--r--asm/pokemon_jump_2.s37
-rw-r--r--asm/pokemon_summary_screen.s2
-rw-r--r--asm/smokescreen.s225
-rw-r--r--asm/union_room_chat.s5973
-rw-r--r--common_syms/AgbRfu_LinkManager.txt1
-rw-r--r--common_syms/help_system_812B1E0.txt2
-rw-r--r--common_syms/link.txt8
-rw-r--r--common_syms/link_rfu.txt1
-rw-r--r--common_syms/mevent.txt2
-rw-r--r--data/berry_crush.s32
-rw-r--r--data/data_8479668.s102
-rw-r--r--data/event_object_80688E4.s97
-rw-r--r--data/event_scripts.s72
-rw-r--r--data/field_screen_effect.s15
-rw-r--r--data/graphics.s14
-rw-r--r--data/layouts/TrainerTower_1F/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_1F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_1F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_1F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_1F_Doubles/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_2F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_1F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834BC2C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_1F_Knockout/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_3F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_1F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834D06C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_2F/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_4F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_2F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_2F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_2F_Doubles/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_5F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_2F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834BEB4/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_2F_Knockout/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_6F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_2F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834D2F4/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_3F/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_7F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_3F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_3F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_3F_Doubles/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_8F/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_3F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834C13C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_3F_Knockout/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_Elevator/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_3F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834D57C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_4F/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_Lobby/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_4F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_4F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_4F_Doubles/border.bin (renamed from data/layouts/UnusedLayout_834BC2C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_4F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834C3C4/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_4F_Knockout/border.bin (renamed from data/layouts/UnusedLayout_834BEB4/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_4F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834D804/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_5F/border.bin (renamed from data/layouts/UnusedLayout_834C13C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_5F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_5F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_5F_Doubles/border.bin (renamed from data/layouts/UnusedLayout_834C3C4/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_5F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834C64C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_5F_Knockout/border.bin (renamed from data/layouts/UnusedLayout_834C64C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_5F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834DA8C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_6F/border.bin (renamed from data/layouts/UnusedLayout_834C8D4/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_6F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_6F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_6F_Doubles/border.bin (renamed from data/layouts/UnusedLayout_834CB5C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_6F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834C8D4/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_6F_Knockout/border.bin (renamed from data/layouts/UnusedLayout_834CDE4/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_6F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834DD14/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_7F/border.bin (renamed from data/layouts/UnusedLayout_834D06C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_7F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_7F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_7F_Doubles/border.bin (renamed from data/layouts/UnusedLayout_834D2F4/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_7F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834CB5C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_7F_Knockout/border.bin (renamed from data/layouts/UnusedLayout_834D57C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_7F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834DF9C/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_8F/border.bin (renamed from data/layouts/UnusedLayout_834D804/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_8F/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_8F/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_8F_Doubles/border.bin (renamed from data/layouts/UnusedLayout_834DA8C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_8F_Doubles/map.bin (renamed from data/layouts/UnusedLayout_834CDE4/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_8F_Knockout/border.bin (renamed from data/layouts/UnusedLayout_834DD14/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_8F_Knockout/map.bin (renamed from data/layouts/UnusedLayout_834E224/map.bin)bin612 -> 612 bytes
-rw-r--r--data/layouts/TrainerTower_Elevator/border.bin (renamed from data/layouts/UnusedLayout_834DF9C/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_Elevator/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_Elevator/map.bin)0
-rw-r--r--data/layouts/TrainerTower_Lobby/border.bin (renamed from data/layouts/UnusedLayout_834E224/border.bin)bin8 -> 8 bytes
-rw-r--r--data/layouts/TrainerTower_Lobby/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_Lobby/map.bin)0
-rw-r--r--data/layouts/TrainerTower_Roof/border.bin (renamed from data/layouts/SevenIsland_TrainerTower_Roof/border.bin)0
-rw-r--r--data/layouts/TrainerTower_Roof/map.bin (renamed from data/layouts/SevenIsland_TrainerTower_Roof/map.bin)0
-rw-r--r--data/layouts/layouts.json216
-rw-r--r--data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc6
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/text.inc3
-rw-r--r--data/maps/RocketHideout_Elevator/scripts.inc2
-rw-r--r--data/maps/Route1/map.json6
-rw-r--r--data/maps/Route1/scripts.inc20
-rw-r--r--data/maps/Route1/text.inc10
-rw-r--r--data/maps/Route10_PokemonCenter_1F/scripts.inc6
-rw-r--r--data/maps/Route11_EastEntrance_2F/scripts.inc6
-rw-r--r--data/maps/Route15_WestEntrance_2F/scripts.inc6
-rw-r--r--data/maps/Route16_NorthEntrance_2F/scripts.inc6
-rw-r--r--data/maps/Route2/map.json4
-rw-r--r--data/maps/Route2/scripts.inc8
-rw-r--r--data/maps/Route2/text.inc4
-rw-r--r--data/maps/Route21_North/text.inc48
-rw-r--r--data/maps/Route21_South/text.inc87
-rw-r--r--data/maps/Route22/map.json14
-rw-r--r--data/maps/Route22/scripts.inc150
-rw-r--r--data/maps/Route22/text.inc265
-rw-r--r--data/maps/Route2_EastBuilding/map.json4
-rw-r--r--data/maps/Route2_EastBuilding/scripts.inc38
-rw-r--r--data/maps/Route2_EastBuilding/text.inc10
-rw-r--r--data/maps/Route2_House/map.json4
-rw-r--r--data/maps/Route2_House/scripts.inc20
-rw-r--r--data/maps/Route2_House/text.inc2
-rw-r--r--data/maps/Route2_ViridianForest_NorthEntrance/map.json6
-rw-r--r--data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc12
-rw-r--r--data/maps/Route2_ViridianForest_NorthEntrance/text.inc6
-rw-r--r--data/maps/Route2_ViridianForest_SouthEntrance/map.json4
-rw-r--r--data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc8
-rw-r--r--data/maps/Route2_ViridianForest_SouthEntrance/text.inc4
-rw-r--r--data/maps/SevenIsland_TrainerTower/map.json2
-rw-r--r--data/maps/SevenIsland_TrainerTower_1F/scripts.inc60
-rw-r--r--data/maps/SevenIsland_TrainerTower_2F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_3F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_4F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_5F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_6F/map.json135
-rw-r--r--data/maps/SevenIsland_TrainerTower_6F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_7F/map.json135
-rw-r--r--data/maps/SevenIsland_TrainerTower_7F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_8F/map.json135
-rw-r--r--data/maps/SevenIsland_TrainerTower_8F/scripts.inc25
-rw-r--r--data/maps/SevenIsland_TrainerTower_Elevator/scripts.inc80
-rw-r--r--data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc235
-rw-r--r--data/maps/SevenIsland_TrainerTower_Roof/scripts.inc8
-rw-r--r--data/maps/SilphCo_Elevator/scripts.inc2
-rw-r--r--data/maps/TrainerTower_1F/map.json (renamed from data/maps/SevenIsland_TrainerTower_1F/map.json)24
-rw-r--r--data/maps/TrainerTower_1F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_2F/map.json (renamed from data/maps/SevenIsland_TrainerTower_5F/map.json)28
-rw-r--r--data/maps/TrainerTower_2F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_3F/map.json (renamed from data/maps/SevenIsland_TrainerTower_2F/map.json)28
-rw-r--r--data/maps/TrainerTower_3F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_4F/map.json (renamed from data/maps/SevenIsland_TrainerTower_3F/map.json)28
-rw-r--r--data/maps/TrainerTower_4F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_5F/map.json (renamed from data/maps/SevenIsland_TrainerTower_4F/map.json)28
-rw-r--r--data/maps/TrainerTower_5F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_6F/map.json135
-rw-r--r--data/maps/TrainerTower_6F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_7F/map.json135
-rw-r--r--data/maps/TrainerTower_7F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_8F/map.json135
-rw-r--r--data/maps/TrainerTower_8F/scripts.inc27
-rw-r--r--data/maps/TrainerTower_Elevator/map.json (renamed from data/maps/SevenIsland_TrainerTower_Elevator/map.json)8
-rw-r--r--data/maps/TrainerTower_Elevator/scripts.inc80
-rw-r--r--data/maps/TrainerTower_Lobby/map.json (renamed from data/maps/SevenIsland_TrainerTower_Lobby/map.json)24
-rw-r--r--data/maps/TrainerTower_Lobby/scripts.inc226
-rw-r--r--data/maps/TrainerTower_Lobby/text.inc (renamed from data/maps/SevenIsland_TrainerTower_Lobby/text.inc)44
-rw-r--r--data/maps/TrainerTower_Roof/map.json (renamed from data/maps/SevenIsland_TrainerTower_Roof/map.json)12
-rw-r--r--data/maps/TrainerTower_Roof/scripts.inc10
-rw-r--r--data/maps/ViridianCity/map.json28
-rw-r--r--data/maps/ViridianCity/scripts.inc169
-rw-r--r--data/maps/ViridianCity/text.inc42
-rw-r--r--data/maps/ViridianCity_Gym/map.json24
-rw-r--r--data/maps/ViridianCity_Gym/scripts.inc94
-rw-r--r--data/maps/ViridianCity_Gym/text.inc70
-rw-r--r--data/maps/ViridianCity_House1/map.json8
-rw-r--r--data/maps/ViridianCity_House1/scripts.inc16
-rw-r--r--data/maps/ViridianCity_House1/text.inc8
-rw-r--r--data/maps/ViridianCity_House2/map.json14
-rw-r--r--data/maps/ViridianCity_House2/scripts.inc90
-rw-r--r--data/maps/ViridianCity_House2/text.inc30
-rw-r--r--data/maps/ViridianCity_Mart/map.json6
-rw-r--r--data/maps/ViridianCity_Mart/scripts.inc46
-rw-r--r--data/maps/ViridianCity_Mart/text.inc12
-rw-r--r--data/maps/ViridianCity_PokemonCenter_1F/map.json8
-rw-r--r--data/maps/ViridianCity_PokemonCenter_1F/scripts.inc14
-rw-r--r--data/maps/ViridianCity_PokemonCenter_1F/text.inc6
-rw-r--r--data/maps/ViridianForest/map.json26
-rw-r--r--data/maps/ViridianForest/scripts.inc62
-rw-r--r--data/maps/ViridianForest/text.inc46
-rw-r--r--data/maps/map_groups.json22
-rw-r--r--data/scripts/aide.inc14
-rw-r--r--data/scripts/cable_club.inc2
-rw-r--r--data/scripts/fame_checker.inc8
-rw-r--r--data/scripts/mystery_event_club.inc2
-rw-r--r--data/scripts/trainer_tower.inc588
-rw-r--r--data/smokescreen.s8
-rw-r--r--data/specials.inc8
-rw-r--r--data/strings.s98
-rw-r--r--data/text/aide.inc15
-rw-r--r--data/text/fame_checker.inc2
-rw-r--r--data/trainer_tower/trainers.inc40
-rw-r--r--data/union_room_chat.s358
-rw-r--r--include/AgbRfu_LinkManager.h245
-rw-r--r--include/battle_setup.h2
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/berry_crush.h2
-rw-r--r--include/cereader_tool.h20
-rw-r--r--include/constants/battle.h5
-rw-r--r--include/constants/battle_setup.h2
-rw-r--r--include/constants/easy_chat.h17
-rw-r--r--include/constants/flags.h2
-rw-r--r--include/constants/global.h7
-rw-r--r--include/constants/layouts.h54
-rw-r--r--include/constants/map_groups.h22
-rw-r--r--include/constants/metatile_labels.h7
-rw-r--r--include/constants/object_events.h2
-rw-r--r--include/constants/party_menu.h1
-rw-r--r--include/constants/trainer_tower.h46
-rw-r--r--include/constants/union_room.h45
-rw-r--r--include/data_8479668.h35
-rw-r--r--include/digit_obj_util.h24
-rw-r--r--include/dodrio_berry_picking.h2
-rw-r--r--include/ereader_helpers.h36
-rw-r--r--include/event_data.h4
-rw-r--r--include/event_object_80688E4.h12
-rw-r--r--include/event_object_lock.h2
-rw-r--r--include/event_object_movement.h3
-rw-r--r--include/event_scripts.h4
-rw-r--r--include/field_effect.h2
-rw-r--r--include/field_fadetransition.h1
-rw-r--r--include/field_screen_effect.h1
-rw-r--r--include/fieldmap.h2
-rw-r--r--include/global.fieldmap.h108
-rw-r--r--include/global.h175
-rw-r--r--include/graphics.h11
-rw-r--r--include/heal_location.h4
-rw-r--r--include/help_system.h33
-rw-r--r--include/librfu.h55
-rw-r--r--include/link.h22
-rw-r--r--include/link_rfu.h339
-rw-r--r--include/main.h1
-rw-r--r--include/menu.h2
-rw-r--r--include/mevent.h41
-rw-r--r--include/mevent_server.h1
-rw-r--r--include/overworld.h4
-rw-r--r--include/pokemon_jump.h2
-rw-r--r--include/renewable_hidden_items.h1
-rw-r--r--include/rfu_union_tool.h17
-rw-r--r--include/script.h4
-rw-r--r--include/sprite.h2
-rw-r--r--include/strings.h79
-rw-r--r--include/text.h14
-rw-r--r--include/text_window.h1
-rw-r--r--include/trade.h4
-rw-r--r--include/trainer_card.h2
-rw-r--r--include/trainer_tower.h6
-rw-r--r--include/union_room.h82
-rw-r--r--include/union_room_battle.h6
-rw-r--r--include/union_room_chat.h28
-rw-r--r--include/union_room_chat_display.h34
-rw-r--r--include/union_room_chat_objects.h16
-rw-r--r--include/union_room_message.h40
-rw-r--r--include/unk_810c3a4.h26
-rw-r--r--include/unk_815C980.h24
-rw-r--r--include/unk_815c27c.h11
-rw-r--r--include/vs_seeker.h3
-rw-r--r--ld_script.txt34
-rw-r--r--src/AgbRfu_LinkManager.c1398
-rw-r--r--src/battle_controller_player.c4
-rw-r--r--src/battle_controllers.c4
-rw-r--r--src/battle_main.c14
-rw-r--r--src/battle_message.c21
-rw-r--r--src/battle_setup.c27
-rw-r--r--src/cereader_tool.c34
-rw-r--r--src/daycare.c30
-rw-r--r--src/digit_obj_util.c449
-rw-r--r--src/dodrio_berry_picking_2.c2
-rw-r--r--src/dynamic_placeholder_text_util.c85
-rw-r--r--src/ereader_helpers.c159
-rw-r--r--src/event_data.c4
-rw-r--r--src/event_object_80688E4.c653
-rw-r--r--src/event_object_lock.c6
-rw-r--r--src/field_fadetransition.c10
-rw-r--r--src/field_screen_effect.c125
-rw-r--r--src/field_specials.c58
-rw-r--r--src/fieldmap.c18
-rw-r--r--src/heal_location.c8
-rw-r--r--src/help_system.c60
-rw-r--r--src/help_system_812B1E0.c423
-rw-r--r--src/intro.c4
-rw-r--r--src/learn_move.c2
-rw-r--r--src/librfu_intr.c402
-rw-r--r--src/librfu_rfu.c1758
-rw-r--r--src/librfu_sio32id.c142
-rw-r--r--src/librfu_stwi.c81
-rw-r--r--src/link.c134
-rw-r--r--src/link_rfu.c1381
-rw-r--r--src/link_rfu_2.c1558
-rw-r--r--src/link_rfu_3.c211
-rw-r--r--src/list_menu.c2
-rw-r--r--src/load_save.c4
-rw-r--r--src/mail_data.c4
-rw-r--r--src/mevent.c449
-rw-r--r--src/mevent_8145654.c793
-rw-r--r--src/mevent_client.c9
-rw-r--r--src/mevent_server.c4
-rw-r--r--src/mevent_show_card.c459
-rw-r--r--src/mevent_show_news.c357
-rw-r--r--src/minigame_countdown.c (renamed from src/unk_815F138.c)171
-rw-r--r--src/mystery_gift_menu.c17
-rw-r--r--src/new_game.c6
-rw-r--r--src/oak_speech.c4
-rw-r--r--src/party_menu.c4
-rw-r--r--src/pokedex_screen.c8
-rw-r--r--src/pokemon.c19
-rw-r--r--src/quest_log.c70
-rw-r--r--src/quest_log_objects.c64
-rw-r--r--src/quest_log_player.c2
-rw-r--r--src/region_map.c2
-rw-r--r--src/renewable_hidden_items.c6
-rw-r--r--src/rfu_union_tool.c212
-rw-r--r--src/save.c6
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/script.c4
-rw-r--r--src/smokescreen.c73
-rw-r--r--src/sprite.c120
-rw-r--r--src/tm_case.c2
-rw-r--r--src/trade.c81
-rw-r--r--src/trade_scene.c12
-rw-r--r--src/trainer_card.c2
-rw-r--r--src/trainer_tower.c649
-rw-r--r--src/union_room.c2640
-rw-r--r--src/union_room_battle.c53
-rw-r--r--src/union_room_chat.c1452
-rw-r--r--src/union_room_chat_display.c1339
-rw-r--r--src/union_room_chat_objects.c318
-rw-r--r--src/union_room_message.c71
-rw-r--r--src/unk_815C980.c437
-rw-r--r--src/vs_seeker.c3
-rw-r--r--src/wireless_communication_status_screen.c280
-rw-r--r--sym_bss.txt14
-rw-r--r--sym_common.txt2
-rw-r--r--sym_ewram.txt21
336 files changed, 16083 insertions, 19933 deletions
diff --git a/Makefile b/Makefile
index 8a739ccf4..37c3d936a 100644
--- a/Makefile
+++ b/Makefile
@@ -173,6 +173,9 @@ $(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork
$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding
$(C_BUILDDIR)/flying.o: CFLAGS += -ffreestanding
+$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm
+$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
+
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep :=
else
diff --git a/asm/battle_bg.s b/asm/battle_bg.s
index 96f33cb3c..e21617e70 100644
--- a/asm/battle_bg.s
+++ b/asm/battle_bg.s
@@ -1270,7 +1270,7 @@ _0800FBF8:
_0800FC00: .4byte gTrainers
_0800FC04: .4byte gTrainerBattleOpponent_A
_0800FC08:
- bl sav1_map_get_battletype
+ bl GetCurrentMapBattleScene
lsls r0, 24
cmp r0, 0
bne _0800FC20
@@ -1341,7 +1341,7 @@ _0800FC88:
movs r0, 0x13
b _0800FCAA
_0800FC90:
- bl sav1_map_get_battletype
+ bl GetCurrentMapBattleScene
lsls r0, 24
lsrs r0, 24
cmp r0, 0
diff --git a/asm/berry_crush.s b/asm/berry_crush.s
index 6502fc916..728e87128 100644
--- a/asm/berry_crush.s
+++ b/asm/berry_crush.s
@@ -45,7 +45,7 @@ _0814B716:
ldr r0, _0814B74C @ =0x0000012f
bl PlayNewMapMusic
ldr r0, _0814B750 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
_0814B73E:
movs r0, 0
_0814B740:
@@ -58,8 +58,8 @@ _0814B74C: .4byte 0x0000012f
_0814B750: .4byte sub_8056534
thumb_func_end sub_814B6FC
- thumb_func_start sub_814B754
-sub_814B754: @ 814B754
+ thumb_func_start StartBerryCrush
+StartBerryCrush: @ 814B754
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -183,7 +183,7 @@ _0814B84C:
.align 2, 0
_0814B858: .4byte sub_814BA80
_0814B85C: .4byte sub_814BA98
- thumb_func_end sub_814B754
+ thumb_func_end StartBerryCrush
thumb_func_start sub_814B860
sub_814B860: @ 814B860
diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s
index 7495c8519..e5079a5a9 100644
--- a/asm/berry_crush_2.s
+++ b/asm/berry_crush_2.s
@@ -143,7 +143,7 @@ _0814BC30:
movs r0, 0x3
b _0814BC6A
_0814BC44:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814BC66
_0814BC4A:
bl IsLinkTaskFinished
@@ -359,7 +359,7 @@ sub_814BDBC: @ 814BDBC
beq _0814BDD2
b _0814BDFC
_0814BDCC:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814BDFC
_0814BDD2:
bl IsLinkTaskFinished
@@ -494,7 +494,7 @@ _0814BEB4:
bl sub_814BB4C
b _0814BFC6
_0814BED4:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814BFC0
_0814BEDA:
bl IsLinkTaskFinished
@@ -650,7 +650,7 @@ _0814C008:
adds r1, r4, r0
adds r0, r4, 0
bl sub_814DA24
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814C108
_0814C01A:
bl IsLinkTaskFinished
@@ -720,7 +720,7 @@ _0814C080:
ldrb r0, [r2]
adds r0, 0x1
strb r0, [r2]
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814C108
.align 2, 0
_0814C0AC: .4byte sub_814DB84
@@ -748,7 +748,7 @@ _0814C0D2:
adds r1, r4, r3
adds r0, r4, 0
bl sub_814DC24
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814C108
_0814C0E4:
bl IsLinkTaskFinished
@@ -904,7 +904,7 @@ _0814C1FC:
movs r0, 0x1E
movs r1, 0
bl SetGpuReg
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814C23C
_0814C21E:
bl IsLinkTaskFinished
@@ -962,14 +962,14 @@ _0814C26C:
adds r0, r1, 0
movs r2, 0x78
movs r3, 0x50
- bl sub_815F138
+ bl StartMinigameCountdown
b _0814C2EC
_0814C28A:
- bl sub_815F198
+ bl IsMinigameCountdownRunning
cmp r0, 0
bne _0814C2F2
_0814C292:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814C2EC
_0814C298:
bl IsLinkTaskFinished
@@ -1655,7 +1655,7 @@ _0814C77A:
movs r2, 0xC
bl memcpy
adds r0, r4, 0
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
_0814C7AC:
pop {r3}
mov r8, r3
@@ -2065,7 +2065,7 @@ _0814CADA:
bl sub_814DE50
cmp r0, 0
beq _0814CB18
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
movs r0, 0
strh r0, [r4, 0x10]
b _0814CB12
@@ -2158,7 +2158,7 @@ _0814CB8A:
bl sub_814DE50
cmp r0, 0
beq _0814CC02
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
movs r0, 0
strh r0, [r5, 0x10]
movs r0, 0x12
@@ -2846,7 +2846,7 @@ _0814D0D6:
.align 2, 0
_0814D0FC: .4byte 0x00008c9f
_0814D100:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814D178
_0814D106:
bl IsLinkTaskFinished
@@ -3028,7 +3028,7 @@ _0814D256:
beq _0814D296
b _0814D30C
_0814D260:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814D30C
_0814D266:
bl IsLinkTaskFinished
@@ -3316,14 +3316,14 @@ _0814D47C:
beq _0814D498
b _0814D4B8
_0814D482:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814D4B8
_0814D488:
bl IsLinkTaskFinished
lsls r0, 24
cmp r0, 0
beq _0814D4BE
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
b _0814D4B8
_0814D498:
ldr r0, _0814D4B4 @ =gReceivedRemoteLinkPlayers
diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s
index 9e3334a7f..dfed93396 100644
--- a/asm/berry_crush_3.s
+++ b/asm/berry_crush_3.s
@@ -63,7 +63,7 @@ _0814D63A:
ldr r0, _0814D65C @ =gReservedSpritePaletteCount
strb r4, [r0]
movs r0, 0x3
- bl sub_815C980
+ bl DigitObjUtil_Init
b _0814D878
.align 2, 0
_0814D658: .4byte 0x01000200
@@ -338,7 +338,7 @@ _0814D8B4:
.4byte _0814D9A2
.4byte _0814D9B2
_0814D8D4:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _0814D9BA
_0814D8DA:
bl IsLinkTaskFinished
@@ -427,7 +427,7 @@ _0814D9A2:
bl DestroyWirelessStatusIndicatorSprite
adds r0, r5, 0
bl sub_814EF10
- bl sub_815C9F4
+ bl DigitObjUtil_Teardown
b _0814D9BA
_0814D9B2:
movs r0, 0
@@ -2578,15 +2578,15 @@ sub_814EAD4: @ 814EAD4
movs r0, 0x4
ldrsh r1, [r4, r0]
movs r0, 0
- bl sub_815CD70
+ bl DigitObjUtil_PrintNumOn
movs r0, 0x6
ldrsh r1, [r4, r0]
movs r0, 0x1
- bl sub_815CD70
+ bl DigitObjUtil_PrintNumOn
movs r0, 0x8
ldrsh r1, [r4, r0]
movs r0, 0x2
- bl sub_815CD70
+ bl DigitObjUtil_PrintNumOn
pop {r4}
pop {r0}
bx r0
@@ -2608,13 +2608,13 @@ sub_814EB04: @ 814EB04
strb r0, [r1]
movs r0, 0x2
movs r1, 0x1
- bl sub_815D1A8
+ bl DigitObjUtil_HideOrShow
movs r0, 0x1
movs r1, 0x1
- bl sub_815D1A8
+ bl DigitObjUtil_HideOrShow
movs r0, 0
movs r1, 0x1
- bl sub_815D1A8
+ bl DigitObjUtil_HideOrShow
pop {r0}
bx r0
thumb_func_end sub_814EB04
@@ -3060,17 +3060,17 @@ _0814EE3E:
movs r0, 0
movs r1, 0
adds r2, r4, 0
- bl sub_815CA40
+ bl DigitObjUtil_CreatePrinter
adds r2, r4, 0
adds r2, 0x10
movs r0, 0x1
movs r1, 0
- bl sub_815CA40
+ bl DigitObjUtil_CreatePrinter
adds r4, 0x20
movs r0, 0x2
movs r1, 0
adds r2, r4, 0
- bl sub_815CA40
+ bl DigitObjUtil_CreatePrinter
ldrh r0, [r6, 0x12]
cmp r0, 0x1
bne _0814EED8
@@ -3130,11 +3130,11 @@ _0814EF46:
cmp r4, 0x1
bls _0814EF46
movs r0, 0x2
- bl sub_815D108
+ bl DigitObjUtil_DeletePrinter
movs r0, 0x1
- bl sub_815D108
+ bl DigitObjUtil_DeletePrinter
movs r0, 0
- bl sub_815D108
+ bl DigitObjUtil_DeletePrinter
movs r4, 0
movs r1, 0xC2
lsls r1, 1
diff --git a/asm/cable_club.s b/asm/cable_club.s
index 27a3d93f4..92f14461a 100644
--- a/asm/cable_club.s
+++ b/asm/cable_club.s
@@ -751,7 +751,7 @@ sub_8080CDC: @ 8080CDC
lsrs r0, 16
cmp r0, 0x1
bhi _08080D3C
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
bl HideFieldMessageBox
ldr r0, _08080D38 @ =sub_8080F78
b _08080D72
@@ -845,14 +845,14 @@ sub_8080DC0: @ 8080DC0
bl sub_8080D8C
cmp r0, 0x1
beq _08080DFE
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
b _08080E02
.align 2, 0
_08080DE8: .4byte gSpecialVar_Result
_08080DEC:
cmp r0, 0x3
bne _08080DF6
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
b _08080E02
_08080DF6:
cmp r0, 0x7
@@ -1010,7 +1010,7 @@ _08080F48: .4byte gLinkType
_08080F4C: .4byte 0x00004411
_08080F50: .4byte gTasks
_08080F54:
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
ldr r0, _08080F70 @ =gTasks
mov r2, r8
adds r1, r2, r7
@@ -1564,7 +1564,7 @@ _0808138C:
ble _0808143A
b _080813AA
_0808139C:
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
b _080813AA
_080813A2:
ldr r0, _080813B4 @ =gReceivedRemoteLinkPlayers
@@ -1756,7 +1756,7 @@ _08081510:
ldr r1, [r1]
str r1, [r0]
adds r0, r5, 0
- bl sub_800B284
+ bl IntlConvertLinkPlayerName
lsls r0, r4, 24
lsrs r0, 24
bl ResetBlockReceivedFlag
@@ -1785,7 +1785,7 @@ _0808154C:
strh r0, [r6]
b _0808160A
_08081560:
- bl sub_800AB9C
+ bl PrepareSendLinkCmd2FFE_or_RfuCmd6600
movs r0, 0x6
strh r0, [r6]
b _0808160A
@@ -1895,7 +1895,7 @@ sub_8081624: @ 8081624
.align 2, 0
_0808163C: .4byte gMain
_08081640:
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
ldrb r0, [r4]
adds r0, 0x1
strb r0, [r4]
@@ -1942,9 +1942,9 @@ sub_8081668: @ 8081668
beq _0808170A
ldr r0, _080816C4 @ =gBattleOutcome
ldrb r0, [r0]
- cmp r0, 0x1
+ cmp r0, 0x1 @ B_OUTCOME_WON
beq _080816C8
- cmp r0, 0x2
+ cmp r0, 0x2 @ B_OUTCOME_LOST
beq _080816EC
b _0808170A
.align 2, 0
@@ -1955,6 +1955,7 @@ _080816BC: .4byte gLocalLinkPlayerId
_080816C0: .4byte gWirelessCommType
_080816C4: .4byte gBattleOutcome
_080816C8:
+ @ MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
ldr r4, _080816E8 @ =gLinkPlayers
bl GetMultiplayerId
eors r0, r5
@@ -1967,11 +1968,12 @@ _080816C8:
adds r1, r4
ldr r1, [r1]
movs r0, 0
- bl sub_8144714
+ bl MEvent_RecordIdOfWonderCardSenderByEventType
b _0808170A
.align 2, 0
_080816E8: .4byte gLinkPlayers
_080816EC:
+ @ MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
ldr r4, _08081718 @ =gLinkPlayers
bl GetMultiplayerId
eors r0, r5
@@ -1984,7 +1986,7 @@ _080816EC:
adds r1, r4
ldr r1, [r1]
movs r0, 0x1
- bl sub_8144714
+ bl MEvent_RecordIdOfWonderCardSenderByEventType
_0808170A:
bl InUnionRoom
cmp r0, 0x1
@@ -2198,7 +2200,7 @@ _080818A8:
strb r0, [r1]
strb r0, [r1, 0x1]
bl m4aMPlayAllStop
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
_080818B8:
ldrh r0, [r4, 0x8]
adds r0, 0x1
@@ -2274,7 +2276,7 @@ _08081940:
strb r0, [r1]
strb r0, [r1, 0x1]
bl m4aMPlayAllStop
- bl sub_800AB9C
+ bl PrepareSendLinkCmd2FFE_or_RfuCmd6600
_08081950:
ldrh r0, [r4]
adds r0, 0x1
@@ -2287,7 +2289,7 @@ _0808195C:
lsls r0, 24
cmp r0, 0
beq _08081970
- bl sub_8117118
+ bl UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade
adds r0, r5, 0
bl DestroyTask
_08081970:
@@ -2507,7 +2509,7 @@ sub_8081B08: @ 8081B08
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
ldr r1, _08081B28 @ =gTasks
lsls r0, r4, 2
adds r0, r4
diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s
index 3e9c18491..eca27fd8d 100644
--- a/asm/dodrio_berry_picking.s
+++ b/asm/dodrio_berry_picking.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_81507FC
-sub_81507FC: @ 81507FC
+ thumb_func_start StartDodrioBerryPicking
+StartDodrioBerryPicking: @ 81507FC
push {r4-r6,lr}
adds r5, r1, 0
lsls r0, 16
@@ -97,7 +97,7 @@ _081508D2:
pop {r4-r6}
pop {r0}
bx r0
- thumb_func_end sub_81507FC
+ thumb_func_end StartDodrioBerryPicking
thumb_func_start sub_81508D8
sub_81508D8: @ 81508D8
@@ -382,7 +382,7 @@ _08150B08:
bl sub_8155E68
cmp r0, 0
bne _08150BFC
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
b _08150BDC
_08150B16:
bl IsLinkTaskFinished
@@ -649,7 +649,7 @@ _08150D28:
movs r1, 0x8
movs r2, 0x78
movs r3, 0x50
- bl sub_815F138
+ bl StartMinigameCountdown
b _08150D52
_08150D3A:
bl IsLinkTaskFinished
@@ -658,11 +658,11 @@ _08150D3A:
beq _08150D74
b _08150D52
_08150D46:
- bl sub_815F198
+ bl IsMinigameCountdownRunning
cmp r0, 0
bne _08150D74
_08150D4E:
- bl sub_80FA42C
+ bl LinkRfu_SetRfuFuncToSend6600
_08150D52:
ldr r0, _08150D60 @ =gUnknown_203F3E0
ldr r1, [r0]
@@ -1611,7 +1611,7 @@ _081514A4:
beq _081514C0
b _081514D6
_081514AA:
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
movs r0, 0x7
bl sub_81549D4
b _081514CC
diff --git a/asm/dodrio_berry_picking_2.s b/asm/dodrio_berry_picking_2.s
index 792dc4b0f..91594c7a8 100644
--- a/asm/dodrio_berry_picking_2.s
+++ b/asm/dodrio_berry_picking_2.s
@@ -407,7 +407,7 @@ sub_815A61C: @ 815A61C
ands r5, r7
orrs r5, r4
strb r5, [r0, 0xB]
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0x20
pop {r3-r5}
mov r8, r3
@@ -637,7 +637,7 @@ sub_815AAD8: @ 815AAD8
orrs r1, r0
str r1, [sp, 0x4]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0x8
pop {r0}
bx r0
@@ -692,7 +692,7 @@ sub_815AB3C: @ 815AB3C
str r1, [sp]
str r0, [sp, 0x4]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0x8
pop {r0}
bx r0
diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s
index c88c5deeb..40b0eeb1f 100644
--- a/asm/easy_chat_2.s
+++ b/asm/easy_chat_2.s
@@ -334,8 +334,8 @@ sub_80FEE24: @ 80FEE24
bx r0
thumb_func_end sub_80FEE24
- thumb_func_start sub_80FEE44
-sub_80FEE44: @ 80FEE44
+ thumb_func_start ShowEasyChatScreen
+ShowEasyChatScreen: @ 80FEE44
push {lr}
ldr r0, _080FEE58 @ =gSpecialVar_0x8004
ldrh r0, [r0]
@@ -431,7 +431,7 @@ _080FEF1C: .4byte gSpecialVar_0x8005
_080FEF20: .4byte 0x00002cd0
_080FEF24: .4byte gSpecialVar_0x8004
_080FEF28: .4byte sub_80568C4
- thumb_func_end sub_80FEE44
+ thumb_func_end ShowEasyChatScreen
thumb_func_start sub_80FEF2C
sub_80FEF2C: @ 80FEF2C
diff --git a/asm/event_object_80688E4.s b/asm/event_object_80688E4.s
deleted file mode 100644
index 93309a80d..000000000
--- a/asm/event_object_80688E4.s
+++ /dev/null
@@ -1,1503 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start FreezeObjectEvent
-FreezeObjectEvent: @ 80688E4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5]
- movs r0, 0xA0
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- bne _0806896C
- ldrb r0, [r5, 0x1]
- movs r4, 0x1
- orrs r0, r4
- strb r0, [r5, 0x1]
- ldr r3, _08068968 @ =gSprites
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x2C
- ldrb r1, [r0]
- lsls r1, 25
- lsrs r1, 31
- lsls r1, 7
- ldrb r2, [r5, 0x2]
- movs r0, 0x7F
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x2]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x2C
- ldrb r1, [r0]
- lsrs r1, 7
- ands r1, r4
- ldrb r2, [r5, 0x3]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x2C
- ldrb r1, [r0]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x2C
- ldrb r1, [r0]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0]
- movs r0, 0
- b _0806896E
- .align 2, 0
-_08068968: .4byte gSprites
-_0806896C:
- movs r0, 0x1
-_0806896E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FreezeObjectEvent
-
- thumb_func_start FreezeObjectEvents
-FreezeObjectEvents: @ 8068974
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _080689A8 @ =gObjectEvents
-_0806897A:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _08068998
- ldr r0, _080689AC @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- cmp r4, r0
- beq _08068998
- adds r0, r1, 0
- bl FreezeObjectEvent
-_08068998:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0806897A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080689A8: .4byte gObjectEvents
-_080689AC: .4byte gPlayerAvatar
- thumb_func_end FreezeObjectEvents
-
- thumb_func_start FreezeObjectEventsExceptOne
-FreezeObjectEventsExceptOne: @ 80689B0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r6, _080689EC @ =gObjectEvents
-_080689BA:
- cmp r4, r5
- beq _080689DC
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r6
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _080689DC
- ldr r0, _080689F0 @ =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- cmp r4, r0
- beq _080689DC
- adds r0, r1, 0
- bl FreezeObjectEvent
-_080689DC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _080689BA
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080689EC: .4byte gObjectEvents
-_080689F0: .4byte gPlayerAvatar
- thumb_func_end FreezeObjectEventsExceptOne
-
- thumb_func_start UnfreezeObjectEvent
-UnfreezeObjectEvent: @ 80689F4
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r2, [r5]
- ldr r1, _08068A54 @ =0x00000101
- adds r0, r1, 0
- ands r0, r2
- cmp r0, r1
- bne _08068A4C
- ldrb r1, [r5, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x1]
- ldr r4, _08068A58 @ =gSprites
- ldrb r0, [r5, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r5, 0x2]
- adds r1, 0x2C
- lsrs r2, 7
- lsls r2, 6
- ldrb r3, [r1]
- movs r0, 0x41
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1]
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r4
- ldrb r1, [r5, 0x3]
- lsls r1, 31
- lsrs r1, 31
- adds r2, 0x2C
- lsls r1, 7
- ldrb r3, [r2]
- movs r0, 0x7F
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
-_08068A4C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068A54: .4byte 0x00000101
-_08068A58: .4byte gSprites
- thumb_func_end UnfreezeObjectEvent
-
- thumb_func_start UnfreezeObjectEvents
-UnfreezeObjectEvents: @ 8068A5C
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _08068A88 @ =gObjectEvents
-_08068A62:
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _08068A78
- adds r0, r1, 0
- bl UnfreezeObjectEvent
-_08068A78:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08068A62
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08068A88: .4byte gObjectEvents
- thumb_func_end UnfreezeObjectEvents
-
- thumb_func_start little_step
-little_step: @ 8068A8C
- lsls r1, 24
- ldr r2, _08068AA8 @ =gUnknown_83A64C8
- lsrs r1, 22
- adds r1, r2
- ldrh r2, [r1]
- ldrh r3, [r0, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x2]
- ldrh r2, [r0, 0x22]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08068AA8: .4byte gUnknown_83A64C8
- thumb_func_end little_step
-
- thumb_func_start double_little_steps
-double_little_steps: @ 8068AAC
- lsls r1, 24
- ldr r2, _08068ACC @ =gUnknown_83A64C8
- lsrs r1, 22
- adds r1, r2
- ldrh r2, [r1]
- lsls r2, 1
- ldrh r3, [r0, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x2]
- lsls r1, 1
- ldrh r2, [r0, 0x22]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08068ACC: .4byte gUnknown_83A64C8
- thumb_func_end double_little_steps
-
- thumb_func_start triple_little_steps
-triple_little_steps: @ 8068AD0
- lsls r1, 24
- ldr r2, _08068AF4 @ =gUnknown_83A64C8
- lsrs r1, 22
- adds r1, r2
- ldrh r2, [r1]
- lsls r3, r2, 1
- adds r2, r3
- ldrh r3, [r0, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x2]
- lsls r2, r1, 1
- adds r1, r2
- ldrh r2, [r0, 0x22]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08068AF4: .4byte gUnknown_83A64C8
- thumb_func_end triple_little_steps
-
- thumb_func_start quad_little_steps
-quad_little_steps: @ 8068AF8
- lsls r1, 24
- ldr r2, _08068B18 @ =gUnknown_83A64C8
- lsrs r1, 22
- adds r1, r2
- ldrh r2, [r1]
- lsls r2, 2
- ldrh r3, [r0, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x2]
- lsls r1, 2
- ldrh r2, [r0, 0x22]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08068B18: .4byte gUnknown_83A64C8
- thumb_func_end quad_little_steps
-
- thumb_func_start oct_little_steps
-oct_little_steps: @ 8068B1C
- lsls r1, 24
- ldr r2, _08068B3C @ =gUnknown_83A64C8
- lsrs r1, 22
- adds r1, r2
- ldrh r2, [r1]
- lsls r2, 3
- ldrh r3, [r0, 0x20]
- adds r2, r3
- strh r2, [r0, 0x20]
- ldrh r1, [r1, 0x2]
- lsls r1, 3
- ldrh r2, [r0, 0x22]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_08068B3C: .4byte gUnknown_83A64C8
- thumb_func_end oct_little_steps
-
- thumb_func_start oamt_npc_ministep_reset
-oamt_npc_ministep_reset: @ 8068B40
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r3, [r0, 0x38]
- bx lr
- thumb_func_end oamt_npc_ministep_reset
-
- thumb_func_start obj_npc_ministep
-obj_npc_ministep: @ 8068B54
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _08068BAC @ =gUnknown_83A71B0
- movs r0, 0x36
- ldrsh r2, [r4, r0]
- lsls r0, r2, 1
- adds r0, r5
- movs r3, 0x38
- ldrsh r1, [r4, r3]
- movs r3, 0
- ldrsh r0, [r0, r3]
- cmp r1, r0
- bge _08068BB4
- ldr r1, _08068BB0 @ =gUnknown_83A719C
- lsls r0, r2, 2
- adds r0, r1
- movs r1, 0x38
- ldrsh r2, [r4, r1]
- ldr r0, [r0]
- lsls r2, 2
- adds r2, r0
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- lsls r1, 1
- adds r1, r5
- lsls r0, 16
- asrs r0, 16
- movs r3, 0
- ldrsh r1, [r1, r3]
- cmp r0, r1
- blt _08068BB4
- movs r0, 0x1
- b _08068BB6
- .align 2, 0
-_08068BAC: .4byte gUnknown_83A71B0
-_08068BB0: .4byte gUnknown_83A719C
-_08068BB4:
- movs r0, 0
-_08068BB6:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end obj_npc_ministep
-
- thumb_func_start sub_8068BBC
-sub_8068BBC: @ 8068BBC
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r2, [r0, 0x38]
- bx lr
- thumb_func_end sub_8068BBC
-
- thumb_func_start sub_8068BCC
-sub_8068BCC: @ 8068BCC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x36]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08068BEC
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl little_step
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
-_08068BEC:
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bgt _08068BFE
- movs r0, 0
- b _08068C00
-_08068BFE:
- movs r0, 0x1
-_08068C00:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8068BCC
-
- thumb_func_start sub_8068C08
-sub_8068C08: @ 8068C08
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r2, [r0, 0x38]
- bx lr
- thumb_func_end sub_8068C08
-
- thumb_func_start sub_8068C18
-sub_8068C18: @ 8068C18
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bgt _08068C3E
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl little_step
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- b _08068C42
-_08068C3E:
- movs r0, 0
- strh r0, [r4, 0x36]
-_08068C42:
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bgt _08068C4E
- movs r0, 0
- b _08068C50
-_08068C4E:
- movs r0, 0x1
-_08068C50:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8068C18
-
- thumb_func_start sub_8068C58
-sub_8068C58: @ 8068C58
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r2, [r0, 0x38]
- bx lr
- thumb_func_end sub_8068C58
-
- thumb_func_start sub_8068C68
-sub_8068C68: @ 8068C68
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _08068C90
- movs r0, 0
- strh r0, [r4, 0x36]
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl little_step
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
-_08068C90:
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bgt _08068C9C
- movs r0, 0
- b _08068C9E
-_08068C9C:
- movs r0, 0x1
-_08068C9E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8068C68
-
- thumb_func_start sub_8068CA4
-sub_8068CA4: @ 8068CA4
- lsls r1, 24
- lsrs r1, 24
- movs r2, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r2, [r0, 0x38]
- bx lr
- thumb_func_end sub_8068CA4
-
- thumb_func_start sub_8068CB4
-sub_8068CB4: @ 8068CB4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x36]
- adds r0, 0x1
- strh r0, [r4, 0x36]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08068CD8
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl little_step
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- b _08068CE8
-_08068CD8:
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl double_little_steps
- ldrh r0, [r4, 0x38]
- adds r0, 0x2
-_08068CE8:
- strh r0, [r4, 0x38]
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- bgt _08068CF6
- movs r0, 0
- b _08068CF8
-_08068CF6:
- movs r0, 0x1
-_08068CF8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8068CB4
-
- thumb_func_start sub_8068D00
-sub_8068D00: @ 8068D00
- lsls r1, 24
- ldr r2, _08068D18 @ =gUnknown_83A71EC
- lsrs r1, 22
- adds r1, r2
- lsls r0, 16
- asrs r0, 16
- ldr r1, [r1]
- adds r1, r0
- movs r0, 0
- ldrsb r0, [r1, r0]
- bx lr
- .align 2, 0
-_08068D18: .4byte gUnknown_83A71EC
- thumb_func_end sub_8068D00
-
- thumb_func_start sub_8068D1C
-sub_8068D1C: @ 8068D1C
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- movs r4, 0
- strh r1, [r0, 0x34]
- strh r2, [r0, 0x36]
- strh r3, [r0, 0x38]
- strh r4, [r0, 0x3A]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8068D1C
-
- thumb_func_start sub_8068D3C
-sub_8068D3C: @ 8068D3C
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r1, _08068DBC @ =gUnknown_83A71F8
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- add r5, sp, 0x8
- ldr r1, _08068DC0 @ =gUnknown_83A71FE
- adds r0, r5, 0
- movs r2, 0x3
- bl memcpy
- movs r6, 0
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08068D6E
- ldrh r1, [r4, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl little_step
-_08068D6E:
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- adds r1, r5, r1
- ldrb r1, [r1]
- asrs r0, r1
- ldrh r1, [r4, 0x38]
- lsls r1, 24
- lsrs r1, 24
- bl sub_8068D00
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x3A]
- adds r1, 0x1
- strh r1, [r4, 0x3A]
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- lsls r0, 16
- asrs r2, r0, 16
- lsls r1, 16
- asrs r1, 16
- asrs r0, 17
- cmp r1, r0
- bne _08068DA8
- movs r6, 0x1
-_08068DA8:
- cmp r1, r2
- blt _08068DB2
- movs r0, 0
- strh r0, [r4, 0x26]
- movs r6, 0xFF
-_08068DB2:
- adds r0, r6, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08068DBC: .4byte gUnknown_83A71F8
-_08068DC0: .4byte gUnknown_83A71FE
- thumb_func_end sub_8068D3C
-
- thumb_func_start sub_8068DC4
-sub_8068DC4: @ 8068DC4
- push {r4-r6,lr}
- sub sp, 0xC
- adds r5, r0, 0
- ldr r1, _08068E50 @ =gUnknown_83A7202
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- add r4, sp, 0x8
- ldr r1, _08068E54 @ =gUnknown_83A7208
- adds r0, r4, 0
- movs r2, 0x3
- bl memcpy
- movs r6, 0
- movs r1, 0x36
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08068E00
- ldrh r1, [r5, 0x3A]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08068E00
- ldrh r1, [r5, 0x34]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl little_step
-_08068E00:
- movs r2, 0x3A
- ldrsh r0, [r5, r2]
- movs r2, 0x36
- ldrsh r1, [r5, r2]
- adds r1, r4, r1
- ldrb r1, [r1]
- asrs r0, r1
- ldrh r1, [r5, 0x38]
- lsls r1, 24
- lsrs r1, 24
- bl sub_8068D00
- strh r0, [r5, 0x26]
- ldrh r1, [r5, 0x3A]
- adds r1, 0x1
- strh r1, [r5, 0x3A]
- movs r2, 0x36
- ldrsh r0, [r5, r2]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- lsls r0, 16
- asrs r2, r0, 16
- lsls r1, 16
- asrs r1, 16
- asrs r0, 17
- cmp r1, r0
- bne _08068E3A
- movs r6, 0x1
-_08068E3A:
- cmp r1, r2
- blt _08068E44
- movs r0, 0
- strh r0, [r5, 0x26]
- movs r6, 0xFF
-_08068E44:
- adds r0, r6, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08068E50: .4byte gUnknown_83A7202
-_08068E54: .4byte gUnknown_83A7208
- thumb_func_end sub_8068DC4
-
- thumb_func_start SetObjectEventStepTimer
-SetObjectEventStepTimer: @ 8068E58
- strh r1, [r0, 0x34]
- bx lr
- thumb_func_end SetObjectEventStepTimer
-
- thumb_func_start RunObjectEventStepTimer
-RunObjectEventStepTimer: @ 8068E5C
- push {lr}
- ldrh r1, [r0, 0x34]
- subs r1, 0x1
- strh r1, [r0, 0x34]
- lsls r1, 16
- cmp r1, 0
- beq _08068E6E
- movs r0, 0
- b _08068E70
-_08068E6E:
- movs r0, 0x1
-_08068E70:
- pop {r1}
- bx r1
- thumb_func_end RunObjectEventStepTimer
-
- thumb_func_start obj_anim_image_set_and_seek
-obj_anim_image_set_and_seek: @ 8068E74
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- adds r3, r0, 0
- adds r3, 0x2A
- strb r1, [r3]
- adds r4, r0, 0
- adds r4, 0x2C
- ldrb r3, [r4]
- movs r1, 0x41
- negs r1, r1
- ands r1, r3
- strb r1, [r4]
- adds r1, r2, 0
- bl SeekSpriteAnim
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end obj_anim_image_set_and_seek
-
- thumb_func_start sub_8068E9C
-sub_8068E9C: @ 8068E9C
- push {lr}
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08068EAE
- movs r0, 0
- b _08068EB0
-_08068EAE:
- movs r0, 0x1
-_08068EB0:
- pop {r1}
- bx r1
- thumb_func_end sub_8068E9C
-
- thumb_func_start sub_8068EB4
-sub_8068EB4: @ 8068EB4
- push {r4-r6,lr}
- mov r12, r0
- lsls r1, 24
- lsrs r1, 24
- mov r3, r12
- adds r3, 0x3E
- movs r0, 0x1
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08068F1C
- mov r0, r12
- ldrh r1, [r0, 0x24]
- ldrh r2, [r0, 0x20]
- adds r1, r2
- mov r4, r12
- adds r4, 0x28
- movs r0, 0
- ldrsb r0, [r4, r0]
- ldr r2, _08068F14 @ =gSpriteCoordOffsetX
- adds r0, r1
- ldrh r2, [r2]
- adds r0, r2
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r12
- ldrh r1, [r0, 0x26]
- ldrh r2, [r0, 0x22]
- adds r1, r2
- subs r3, 0x15
- movs r0, 0
- ldrsb r0, [r3, r0]
- ldr r2, _08068F18 @ =gSpriteCoordOffsetY
- adds r0, r1
- ldrh r2, [r2]
- adds r0, r2
- lsls r0, 16
- lsrs r5, r0, 16
- adds r2, r3, 0
- b _08068F4A
- .align 2, 0
-_08068F14: .4byte gSpriteCoordOffsetX
-_08068F18: .4byte gSpriteCoordOffsetY
-_08068F1C:
- mov r0, r12
- ldrh r1, [r0, 0x24]
- ldrh r2, [r0, 0x20]
- adds r1, r2
- mov r3, r12
- adds r3, 0x28
- movs r0, 0
- ldrsb r0, [r3, r0]
- adds r0, r1
- lsls r0, 16
- lsrs r6, r0, 16
- mov r0, r12
- ldrh r1, [r0, 0x26]
- ldrh r2, [r0, 0x22]
- adds r1, r2
- mov r2, r12
- adds r2, 0x29
- movs r0, 0
- ldrsb r0, [r2, r0]
- adds r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r4, r3, 0
-_08068F4A:
- ldrb r0, [r4]
- lsls r0, 24
- asrs r0, 25
- subs r0, r6, r0
- lsls r0, 16
- lsrs r3, r0, 16
- ldrb r0, [r2]
- lsls r0, 24
- asrs r0, 25
- subs r0, r5, r0
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r0, r6, 16
- asrs r0, 16
- cmp r0, 0xFF
- bgt _08068F76
- lsls r0, r3, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _08068F82
-_08068F76:
- mov r4, r12
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
-_08068F82:
- lsls r0, r5, 16
- asrs r0, 16
- cmp r0, 0xAF
- bgt _08068F96
- lsls r0, r2, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _08068FA2
-_08068F96:
- mov r0, r12
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_08068FA2:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8068EB4
-
- thumb_func_start sub_8068FA8
-sub_8068FA8: @ 8068FA8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8069248
- ldrh r0, [r4, 0x30]
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
- ldrh r1, [r4, 0x32]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl sub_8068EB4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8068FA8
-
- thumb_func_start sub_8068FD0
-sub_8068FD0: @ 8068FD0
- push {r4,r5,lr}
- movs r5, 0
- movs r4, 0x3F
-_08068FD6:
- ldr r0, _08069004 @ =gSprites
- adds r2, r5, r0
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08068FF6
- ldr r1, [r2, 0x1C]
- ldr r0, _08069008 @ =sub_8068FA8
- cmp r1, r0
- bne _08068FF6
- adds r0, r2, 0
- bl DestroySprite
-_08068FF6:
- adds r5, 0x44
- subs r4, 0x1
- cmp r4, 0
- bge _08068FD6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08069004: .4byte gSprites
-_08069008: .4byte sub_8068FA8
- thumb_func_end sub_8068FD0
-
- thumb_func_start sub_806900C
-sub_806900C: @ 806900C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r3, 0
- ldr r6, _08069040 @ =gSprites
- movs r4, 0
-_08069018:
- adds r2, r4, r6
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08069048
- ldr r1, [r2, 0x1C]
- ldr r0, _08069044 @ =sub_8068FA8
- cmp r1, r0
- bne _08069048
- ldrh r0, [r2, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, r5
- bne _08069048
- adds r0, r3, 0
- b _08069052
- .align 2, 0
-_08069040: .4byte gSprites
-_08069044: .4byte sub_8068FA8
-_08069048:
- adds r4, 0x44
- adds r3, 0x1
- cmp r3, 0x3F
- ble _08069018
- movs r0, 0x40
-_08069052:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_806900C
-
- thumb_func_start sub_8069058
-sub_8069058: @ 8069058
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- bl sub_806900C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0806908A
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _08069090 @ =gSprites
- adds r4, r0
- adds r0, r5, 0
- bl ObjectEventDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
-_0806908A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08069090: .4byte gSprites
- thumb_func_end sub_8069058
-
- thumb_func_start sub_8069094
-sub_8069094: @ 8069094
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- bl sub_806900C
- adds r1, r0, 0
- cmp r1, 0x40
- beq _0806911E
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080690F8 @ =gSprites
- adds r4, r0, r1
- adds r0, r5, 0
- bl GetObjectEventGraphicsInfo
- ldrh r3, [r4, 0x4]
- lsls r3, 22
- ldr r1, [r0, 0x10]
- ldr r2, [r1, 0x4]
- ldr r1, [r1]
- str r1, [r4]
- str r2, [r4, 0x4]
- lsrs r3, 22
- ldrh r2, [r4, 0x4]
- ldr r1, _080690FC @ =0xfffffc00
- ands r1, r2
- orrs r1, r3
- strh r1, [r4, 0x4]
- ldrb r2, [r0, 0xC]
- lsls r2, 28
- lsrs r2, 24
- ldrb r3, [r4, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r2
- strb r1, [r4, 0x5]
- ldr r1, [r0, 0x1C]
- str r1, [r4, 0xC]
- ldr r1, [r0, 0x14]
- cmp r1, 0
- bne _08069100
- str r1, [r4, 0x18]
- adds r0, r4, 0
- adds r0, 0x42
- strb r1, [r0]
- b _08069116
- .align 2, 0
-_080690F8: .4byte gSprites
-_080690FC: .4byte 0xfffffc00
-_08069100:
- adds r0, r4, 0
- bl SetSubspriteTables
- adds r2, r4, 0
- adds r2, 0x42
- ldrb r0, [r2]
- movs r1, 0x3F
- ands r1, r0
- movs r0, 0x80
- orrs r1, r0
- strb r1, [r2]
-_08069116:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_0806911E:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8069094
-
- thumb_func_start sub_8069124
-sub_8069124: @ 8069124
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- bl sub_806900C
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- cmp r2, 0x40
- beq _08069160
- cmp r4, 0
- beq _08069154
- ldr r0, _08069150 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x32]
- b _08069160
- .align 2, 0
-_08069150: .4byte gSprites
-_08069154:
- ldr r1, _08069168 @ =gSprites
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- strh r4, [r0, 0x32]
-_08069160:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08069168: .4byte gSprites
- thumb_func_end sub_8069124
-
- thumb_func_start sub_806916C
-sub_806916C: @ 806916C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_806900C
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- bne _08069182
- movs r0, 0
- b _0806919A
-_08069182:
- movs r3, 0
- ldr r0, _080691A0 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r2, 0x32
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- bne _08069198
- movs r3, 0x1
-_08069198:
- adds r0, r3, 0
-_0806919A:
- pop {r1}
- bx r1
- .align 2, 0
-_080691A0: .4byte gSprites
- thumb_func_end sub_806916C
-
- thumb_func_start sub_80691A4
-sub_80691A4: @ 80691A4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- bl sub_806900C
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080691CA
- ldr r0, _080691D0 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r0, 0
- strh r4, [r1, 0x34]
- strh r0, [r1, 0x36]
-_080691CA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080691D0: .4byte gSprites
- thumb_func_end sub_80691A4
-
- thumb_func_start sub_80691D4
-sub_80691D4: @ 80691D4
- push {lr}
- adds r2, r0, 0
- movs r1, 0x36
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _080691E6
- cmp r0, 0x1
- beq _080691EE
- b _0806920C
-_080691E6:
- strh r0, [r2, 0x26]
- ldrh r0, [r2, 0x36]
- adds r0, 0x1
- strh r0, [r2, 0x36]
-_080691EE:
- ldrh r0, [r2, 0x26]
- subs r0, 0x8
- movs r3, 0
- strh r0, [r2, 0x26]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0xA0
- negs r1, r1
- cmp r0, r1
- bne _0806920C
- strh r3, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r2, 0x32]
- strh r3, [r2, 0x34]
- strh r3, [r2, 0x36]
-_0806920C:
- pop {r0}
- bx r0
- thumb_func_end sub_80691D4
-
- thumb_func_start sub_8069210
-sub_8069210: @ 8069210
- push {lr}
- adds r1, r0, 0
- movs r2, 0x36
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08069222
- cmp r0, 0x1
- beq _0806922C
- b _0806923E
-_08069222:
- ldr r0, _08069244 @ =0x0000ff60
- strh r0, [r1, 0x26]
- ldrh r0, [r1, 0x36]
- adds r0, 0x1
- strh r0, [r1, 0x36]
-_0806922C:
- ldrh r0, [r1, 0x26]
- adds r0, 0x8
- strh r0, [r1, 0x26]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bne _0806923E
- strh r0, [r1, 0x34]
- strh r0, [r1, 0x36]
-_0806923E:
- pop {r0}
- bx r0
- .align 2, 0
-_08069244: .4byte 0x0000ff60
- thumb_func_end sub_8069210
-
- thumb_func_start sub_8069248
-sub_8069248: @ 8069248
- push {lr}
- adds r1, r0, 0
- movs r2, 0x34
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- beq _08069264
- cmp r0, 0x1
- bgt _0806925E
- cmp r0, 0
- beq _08069284
- b _08069274
-_0806925E:
- cmp r0, 0x2
- beq _0806926C
- b _08069274
-_08069264:
- adds r0, r1, 0
- bl sub_8069210
- b _08069284
-_0806926C:
- adds r0, r1, 0
- bl sub_80691D4
- b _08069284
-_08069274:
- movs r0, 0
- strh r0, [r1, 0x34]
- ldr r0, _08069288 @ =gUnknown_83A720C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/evobjmv.c"
- ldr r1, _0806928C @ =0x00003413
- ldr r2, _08069290 @ =gUnknown_83A7240 "0"
- movs r3, 0x1
- bl AGBAssert
-_08069284:
- pop {r0}
- bx r0
- .align 2, 0
-_08069288: .4byte gUnknown_83A720C
-_0806928C: .4byte 0x00003413
-_08069290: .4byte gUnknown_83A7240
- thumb_func_end sub_8069248
-
- thumb_func_start sub_8069294
-sub_8069294: @ 8069294
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_806900C
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080692B8
- ldr r0, _080692BC @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r2, 0x34
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080692C0
-_080692B8:
- movs r0, 0
- b _080692C2
- .align 2, 0
-_080692BC: .4byte gSprites
-_080692C0:
- movs r0, 0x1
-_080692C2:
- pop {r1}
- bx r1
- thumb_func_end sub_8069294
-
- thumb_func_start oe_exec_and_other_stuff
-oe_exec_and_other_stuff: @ 80692C8
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _080692EC @ =gFieldEffectArguments
- adds r2, r1, 0x4
- adds r3, r1, 0
- adds r3, 0x8
- bl ObjectEventGetLocalIdAndMap
- adds r0, r4, 0
- bl FieldEffectStart
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080692EC: .4byte gFieldEffectArguments
- thumb_func_end oe_exec_and_other_stuff
-
- thumb_func_start DoShadowFieldEffect
-DoShadowFieldEffect: @ 80692F0
- push {lr}
- adds r1, r0, 0
- ldrb r2, [r1, 0x2]
- lsls r0, r2, 25
- cmp r0, 0
- blt _08069308
- movs r0, 0x40
- orrs r0, r2
- strb r0, [r1, 0x2]
- movs r0, 0x3
- bl oe_exec_and_other_stuff
-_08069308:
- pop {r0}
- bx r0
- thumb_func_end DoShadowFieldEffect
-
- thumb_func_start DoRippleFieldEffect
-DoRippleFieldEffect: @ 806930C
- push {r4,lr}
- adds r4, r1, 0
- ldrb r0, [r0, 0x5]
- bl GetObjectEventGraphicsInfo
- ldr r2, _08069344 @ =gFieldEffectArguments
- movs r3, 0x20
- ldrsh r1, [r4, r3]
- str r1, [r2]
- movs r3, 0x22
- ldrsh r1, [r4, r3]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- adds r1, r0
- subs r1, 0x2
- str r1, [r2, 0x4]
- movs r0, 0x97
- str r0, [r2, 0x8]
- movs r0, 0x3
- str r0, [r2, 0xC]
- movs r0, 0x5
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08069344: .4byte gFieldEffectArguments
- thumb_func_end DoRippleFieldEffect
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s
index 30af8949b..f585a60bc 100644
--- a/asm/event_object_movement.s
+++ b/asm/event_object_movement.s
@@ -1645,7 +1645,7 @@ sprite_new: @ 805E9F8
adds r0, r5, 0
bl GetObjectEventGraphicsInfo
adds r4, r0, 0
- ldr r1, _0805EB38 @ =sub_8068FA8
+ ldr r1, _0805EB38 @ =UpdateObjectEventSpriteSubpriorityAndVisibility
add r3, sp, 0x1C
adds r0, r5, 0
mov r2, sp
@@ -1769,7 +1769,7 @@ _0805EB24:
pop {r1}
bx r1
.align 2, 0
-_0805EB38: .4byte sub_8068FA8
+_0805EB38: .4byte UpdateObjectEventSpriteSubpriorityAndVisibility
_0805EB3C: .4byte 0x0000ffff
_0805EB40: .4byte gSprites
thumb_func_end sprite_new
@@ -18285,7 +18285,7 @@ sub_8066108: @ 8066108
push {r4,lr}
adds r4, r1, 0
adds r0, r4, 0
- bl sub_8068E9C
+ bl SpriteAnimEnded
lsls r0, 24
cmp r0, 0
bne _0806611C
@@ -19637,7 +19637,7 @@ sub_8066A54: @ 8066A54
push {r4,lr}
adds r4, r1, 0
adds r0, r4, 0
- bl sub_8068E9C
+ bl SpriteAnimEnded
lsls r0, 24
cmp r0, 0
beq _08066A70
@@ -19707,7 +19707,7 @@ sub_8066AD0: @ 8066AD0
push {r4,lr}
adds r4, r1, 0
adds r0, r4, 0
- bl sub_8068E9C
+ bl SpriteAnimEnded
lsls r0, 24
cmp r0, 0
beq _08066AEC
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index 83f9a5700..b74e60d1f 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -1330,10 +1330,10 @@ _0806D2F0:
lsrs r0, 24
cmp r0, 0x1
bne _0806D308
- ldr r0, _0806D304 @ =EventScript_1C549C
+ ldr r0, _0806D304 @ =TrainerTower_EventScript_ShowTime
b _0806D53E
.align 2, 0
-_0806D304: .4byte EventScript_1C549C
+_0806D304: .4byte TrainerTower_EventScript_ShowTime
_0806D308:
adds r0, r4, 0
adds r1, r5, 0
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index 2797accf4..db64b77db 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -951,7 +951,7 @@ _080DB4C0:
_080DB4CE:
adds r0, r5, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldrh r1, [r5, 0x2E]
lsls r1, 24
lsrs r1, 24
@@ -1294,7 +1294,7 @@ _080DB750:
_080DB770:
adds r0, r5, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldrh r1, [r5, 0x2E]
lsls r1, 24
lsrs r1, 24
@@ -1564,7 +1564,7 @@ _080DB94E:
lsls r1, 29
lsrs r1, 31
adds r0, r4, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
_080DB98E:
add sp, 0x4
pop {r3}
@@ -1781,7 +1781,7 @@ sub_80DBB18: @ 80DBB18
_080DBB2E:
adds r0, r1, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
pop {r0}
bx r0
thumb_func_end sub_80DBB18
@@ -1810,7 +1810,7 @@ sub_80DBB3C: @ 80DBB3C
lsls r1, 29
lsrs r1, 31
adds r0, r4, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
movs r1, 0x30
ldrsh r0, [r4, r1]
cmp r0, 0x38
@@ -1966,7 +1966,7 @@ _080DBC66:
strh r0, [r4, 0x22]
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
_080DBCA6:
add sp, 0x4
pop {r4}
@@ -2233,7 +2233,7 @@ _080DBE98:
strb r0, [r1]
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldr r1, [r5, 0x10]
ldr r0, [r4, 0x34]
cmp r1, r0
@@ -2461,7 +2461,7 @@ _080DC03C:
strb r0, [r1]
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
_080DC080:
add sp, 0x4
pop {r4,r5}
@@ -2889,7 +2889,7 @@ sub_80DC3A8: @ 80DC3A8
push {r4,lr}
adds r4, r0, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
adds r0, r4, 0
adds r0, 0x3F
ldrb r1, [r0]
@@ -3627,7 +3627,7 @@ _080DC8F6:
strb r0, [r1]
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
_080DC926:
add sp, 0x4
pop {r4-r6}
@@ -3706,7 +3706,7 @@ sub_80DC99C: @ 80DC99C
strh r1, [r4, 0x22]
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldrh r1, [r4, 0x3E]
ldr r0, _080DC9D8 @ =0x00001004
ands r0, r1
@@ -4163,7 +4163,7 @@ sub_80DCCE0: @ 80DCCE0
_080DCCFE:
adds r0, r4, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldrh r0, [r4, 0x2E]
lsls r0, 24
lsrs r0, 24
@@ -4195,7 +4195,7 @@ sub_80DCD1C: @ 80DCD1C
_080DCD3A:
adds r0, r2, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
_080DCD42:
pop {r0}
bx r0
diff --git a/asm/field_screen_effect.s b/asm/field_screen_effect.s
deleted file mode 100644
index f0ca0f77e..000000000
--- a/asm/field_screen_effect.s
+++ /dev/null
@@ -1,306 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_807F3A4
-sub_807F3A4: @ 807F3A4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- mov r8, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldr r2, _0807F3DC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrb r7, [r4, 0xA]
- movs r0, 0xC
- ldrsh r6, [r4, r0]
- cmp r6, 0
- beq _0807F3E0
- cmp r6, 0x1
- beq _0807F430
- b _0807F448
- .align 2, 0
-_0807F3DC: .4byte gTasks
-_0807F3E0:
- adds r0, r7, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r5, _0807F424 @ =gStringVar4
- adds r0, r5, 0
- mov r1, r8
- bl StringExpandPlaceholders
- movs r0, 0x1
- mov r8, r0
- str r0, [sp]
- str r6, [sp, 0x4]
- ldr r0, _0807F428 @ =gUnknown_83C68EC
- str r0, [sp, 0x8]
- mov r0, r8
- str r0, [sp, 0xC]
- str r5, [sp, 0x10]
- adds r0, r7, 0
- movs r1, 0x2
- mov r2, r10
- mov r3, r9
- bl AddTextPrinterParameterized4
- ldr r2, _0807F42C @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- mov r0, r8
- strh r0, [r4, 0xC]
- b _0807F448
- .align 2, 0
-_0807F424: .4byte gStringVar4
-_0807F428: .4byte gUnknown_83C68EC
-_0807F42C: .4byte gTextFlags
-_0807F430:
- bl RunTextPrinters
- adds r0, r7, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _0807F448
- strh r0, [r4, 0xC]
- movs r0, 0x1
- b _0807F44A
-_0807F448:
- movs r0, 0
-_0807F44A:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_807F3A4
-
- thumb_func_start sub_807F45C
-sub_807F45C: @ 807F45C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0807F484 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r2, r1, 0
- cmp r0, 0x6
- bls _0807F478
- b _0807F5E4
-_0807F478:
- lsls r0, 2
- ldr r1, _0807F488 @ =_0807F48C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807F484: .4byte gTasks
-_0807F488: .4byte _0807F48C
- .align 2, 0
-_0807F48C:
- .4byte _0807F4A8
- .4byte _0807F538
- .4byte _0807F588
- .4byte _0807F5B6
- .4byte _0807F540
- .4byte _0807F588
- .4byte _0807F5D0
-_0807F4A8:
- ldr r0, _0807F518 @ =gUnknown_83C68E4
- bl AddWindow
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0807F51C @ =gTasks
- lsls r4, r6, 2
- adds r0, r4, r6
- lsls r0, 3
- adds r7, r0, r1
- strh r5, [r7, 0xA]
- movs r0, 0xF0
- bl Menu_LoadStdPalAt
- adds r0, r5, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl PutWindowTilemap
- adds r0, r5, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1
- bl GetHealLocationPointer
- adds r3, r0, 0
- ldr r0, _0807F520 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r0, [r2, 0x1C]
- ldrh r5, [r3]
- cmp r0, r5
- bne _0807F524
- movs r1, 0x1E
- ldrsb r1, [r2, r1]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _0807F524
- movs r0, 0x20
- ldrsh r1, [r2, r0]
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- cmp r1, r0
- bne _0807F524
- movs r0, 0x22
- ldrsh r1, [r2, r0]
- movs r2, 0x4
- ldrsh r0, [r3, r2]
- cmp r1, r0
- bne _0807F524
- movs r0, 0x4
- strh r0, [r7, 0x8]
- b _0807F5E4
- .align 2, 0
-_0807F518: .4byte gUnknown_83C68E4
-_0807F51C: .4byte gTasks
-_0807F520: .4byte gSaveBlock1Ptr
-_0807F524:
- ldr r0, _0807F534 @ =gTasks
- adds r1, r4, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0x8]
- b _0807F5E4
- .align 2, 0
-_0807F534: .4byte gTasks
-_0807F538:
- ldr r1, _0807F53C @ =gUnknown_841B554
- b _0807F542
- .align 2, 0
-_0807F53C: .4byte gUnknown_841B554
-_0807F540:
- ldr r1, _0807F578 @ =gUnknown_841B5B6
-_0807F542:
- adds r0, r6, 0
- movs r2, 0x2
- movs r3, 0x8
- bl sub_807F3A4
- lsls r0, 24
- cmp r0, 0
- beq _0807F5E4
- ldr r0, _0807F57C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0807F580 @ =gObjectEvents
- adds r0, r1
- movs r1, 0x2
- bl ObjectEventTurn
- ldr r1, _0807F584 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _0807F5E4
- .align 2, 0
-_0807F578: .4byte gUnknown_841B5B6
-_0807F57C: .4byte gPlayerAvatar
-_0807F580: .4byte gObjectEvents
-_0807F584: .4byte gTasks
-_0807F588:
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r2
- ldrb r5, [r4, 0xA]
- adds r0, r5, 0
- bl ClearWindowTilemap
- adds r0, r5, 0
- movs r1, 0x1
- bl CopyWindowToVram
- adds r0, r5, 0
- bl RemoveWindow
- bl palette_bg_faded_fill_black
- bl sub_807DC00
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0807F5E4
-_0807F5B6:
- bl sub_807E418
- cmp r0, 0x1
- bne _0807F5E4
- adds r0, r6, 0
- bl DestroyTask
- ldr r0, _0807F5CC @ =EventScript_AfterWhiteOutHeal
- bl ScriptContext1_SetupScript
- b _0807F5E4
- .align 2, 0
-_0807F5CC: .4byte EventScript_AfterWhiteOutHeal
-_0807F5D0:
- bl sub_807E418
- cmp r0, 0x1
- bne _0807F5E4
- adds r0, r6, 0
- bl DestroyTask
- ldr r0, _0807F5EC @ =EventScript_MomHeal
- bl ScriptContext1_SetupScript
-_0807F5E4:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807F5EC: .4byte EventScript_MomHeal
- thumb_func_end sub_807F45C
-
- thumb_func_start sub_807F5F0
-sub_807F5F0: @ 807F5F0
- push {lr}
- bl ScriptContext2_Enable
- bl palette_bg_faded_fill_black
- ldr r0, _0807F618 @ =sub_807F45C
- movs r1, 0xA
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0807F61C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0807F618: .4byte sub_807F45C
-_0807F61C: .4byte gTasks
- thumb_func_end sub_807F5F0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s
deleted file mode 100644
index 2cc761554..000000000
--- a/asm/librfu_intr.s
+++ /dev/null
@@ -1,697 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- arm_func_start IntrSIO32
-IntrSIO32: @ 81DFC50
- mov r12, sp
- stmdb sp!, {r11,r12,lr,pc}
- ldr r3, _081DFCB0 @ =gSTWIStatus
- ldr r0, [r3]
- ldr r2, [r0]
- sub r11, r12, 0x4
- cmp r2, 0xA
- bne _081DFC8C
- ldr r0, [r0, 0x20]
- cmp r0, 0
- ldmdbeq r11, {r11,sp,lr}
- bxeq lr
- bl Callback_Dummy_ID
- ldmdb r11, {r11,sp,lr}
- bx lr
-_081DFC8C:
- ldrb r3, [r0, 0x14]
- cmp r3, 0x1
- bne _081DFCA4
- bl sio32intr_clock_master
- ldmdb r11, {r11,sp,lr}
- bx lr
-_081DFCA4:
- bl sio32intr_clock_slave
- ldmdb r11, {r11,sp,lr}
- bx lr
- .align 2, 0
-_081DFCB0: .4byte gSTWIStatus
- arm_func_end IntrSIO32
-
- arm_func_start sio32intr_clock_master
-sio32intr_clock_master: @ 81DFCB4
- mov r12, sp
- stmdb sp!, {r4-r6,r11,r12,lr,pc}
- mov r0, 0x50
- sub r11, r12, 0x4
- bl STWI_set_timer_in_RAM
- mov r4, 0x120
- ldr r2, _081DFF28 @ =gSTWIStatus
- add r4, r4, 0x4000000
- ldr lr, [r4]
- ldr r12, [r2]
- ldr r3, [r12]
- mov r6, r2
- cmp r3, 0
- bne _081DFD34
- cmp lr, 0x80000000
- bne _081DFDB4
- ldrb r2, [r12, 0x5]
- ldrb r3, [r12, 0x4]
- cmp r2, r3
- bhi _081DFD24
- ldr r3, [r12, 0x24]
- mov r1, r2
- ldr r2, [r3, r1, lsl 2]
- str r2, [r4]
- ldrb r3, [r12, 0x5]
- add r3, r3, 0x1
- strb r3, [r12, 0x5]
- b _081DFE10
-_081DFD24:
- mov r3, 0x1
- str r3, [r12]
- str lr, [r4]
- b _081DFE10
-_081DFD34:
- ldr r3, [r12]
- cmp r3, 0x1
- bne _081DFDC4
- mov r3, 0x99000000
- add r3, r3, 0x660000
- mov r5, 0x80000000
- and r2, lr, r5, asr 15
- cmp r2, r3
- bne _081DFDB4
- mov r3, 0
- strb r3, [r12, 0x8]
- ldr r1, [r6]
- ldrb r0, [r1, 0x8]
- ldr r2, [r1, 0x28]
- str lr, [r2, r0, lsl 2]
- ldrb r3, [r1, 0x8]
- add r3, r3, 0x1
- strb r3, [r1, 0x8]
- ldr r2, [r6]
- strb lr, [r2, 0x9]
- ldr r3, [r6]
- mov r2, lr, lsr 8
- strb r2, [r3, 0x7]
- ldr r1, [r6]
- ldrb r2, [r1, 0x7]
- ldrb r3, [r1, 0x8]
- cmp r2, r3
- bcc _081DFDFC
- mov r3, 0x2
- str r3, [r1]
- str r5, [r4]
- b _081DFE10
-_081DFDB4:
- bl STWI_stop_timer_in_RAM
- mov r0, 0x82
- bl STWI_set_timer_in_RAM
- b _081DFF3C
-_081DFDC4:
- ldr r3, [r12]
- cmp r3, 0x2
- bne _081DFE10
- ldrb r1, [r12, 0x8]
- ldr r2, [r12, 0x28]
- str lr, [r2, r1, lsl 2]
- ldrb r3, [r12, 0x8]
- add r3, r3, 0x1
- strb r3, [r12, 0x8]
- ldr r1, [r6]
- ldrb r2, [r1, 0x7]
- ldrb r3, [r1, 0x8]
- cmp r2, r3
- bcs _081DFE08
-_081DFDFC:
- mov r3, 0x3
- str r3, [r1]
- b _081DFE10
-_081DFE08:
- mov r3, 0x80000000
- str r3, [r4]
-_081DFE10:
- mov r0, 0x1
- bl handshake_wait
- mov r0, r0, lsl 16
- cmp r0, 0x10000
- beq _081DFF3C
- mov r4, 0x128
- add r4, r4, 0x4000000
- mov r5, 0x5000
- add r3, r5, 0xB
- strh r3, [r4]
- mov r0, 0
- bl handshake_wait
- mov r0, r0, lsl 16
- cmp r0, 0x10000
- beq _081DFF3C
- bl STWI_stop_timer_in_RAM
- ldr r1, [r6]
- ldr r0, [r1]
- cmp r0, 0x3
- bne _081DFF2C
- ldrb r3, [r1, 0x9]
- cmp r3, 0xA5
- cmpne r3, 0xA7
- beq _081DFE84
- and r3, r3, 0xFF
- cmp r3, 0xB5
- beq _081DFE84
- cmp r3, 0xB7
- bne _081DFECC
-_081DFE84:
- mov r1, 0x120
- add r1, r1, 0x4000000
- mov r12, 0x128
- add r12, r12, 0x4000000
- ldr r0, [r6]
- mov r3, 0
- strb r3, [r0, 0x14]
- mov r2, 0x80000000
- str r2, [r1]
- add r3, r3, 0x5000
- add r2, r3, 0x2
- strh r2, [r12]
- add r3, r3, 0x82
- strh r3, [r12]
- ldr r2, [r6]
- mov r3, 0x5
- str r3, [r2]
- b _081DFEFC
-_081DFECC:
- cmp r3, 0xEE
- bne _081DFEEC
- add r3, r5, 0x3
- strh r3, [r4]
- mov r2, 0x4
- str r2, [r1]
- strh r0, [r1, 0x12]
- b _081DFEFC
-_081DFEEC:
- add r3, r5, 0x3
- strh r3, [r4]
- mov r2, 0x4
- str r2, [r1]
-_081DFEFC:
- ldr r2, [r6]
- mov r3, 0
- strb r3, [r2, 0x2C]
- ldr r0, [r6]
- ldr r2, [r0, 0x18]
- cmp r2, r3
- beq _081DFF3C
- ldrh r1, [r0, 0x12]
- ldrb r0, [r0, 0x6]
- bl Callback_Dummy_M
- b _081DFF3C
- .align 2, 0
-_081DFF28: .4byte gSTWIStatus
-_081DFF2C:
- add r3, r5, 0x3
- strh r3, [r4]
- add r2, r5, 0x83
- strh r2, [r4]
-_081DFF3C:
- ldmdb r11, {r4-r6,r11,sp,lr}
- bx lr
- arm_func_end sio32intr_clock_master
-
- arm_func_start sio32intr_clock_slave
-sio32intr_clock_slave: @ 81DFF44
- mov r12, sp
- stmdb sp!, {r4-r6,r11,r12,lr,pc}
- ldr r4, _081E02F0 @ =gSTWIStatus
- mov r0, 0x64
- ldr r3, [r4]
- mov r6, 0
- strb r6, [r3, 0x10]
- sub r11, r12, 0x4
- bl STWI_set_timer_in_RAM
- mov r0, r6
- bl handshake_wait
- mov r0, r0, lsl 16
- cmp r0, 0x10000
- mov r5, r4
- beq _081E0348
- mov r3, 0x128
- add r3, r3, 0x4000000
- mov r2, 0x5000
- add r2, r2, 0xA
- strh r2, [r3]
- mov lr, 0x120
- ldr r0, [r5]
- add lr, lr, 0x4000000
- ldr r12, [lr]
- ldr r3, [r0]
- cmp r3, 0x5
- bne _081E0074
- ldr r3, [r0, 0x28]
- mov r4, 0x1
- mov r0, 0x99000000
- str r12, [r3]
- add r0, r0, 0x660000
- ldr r2, [r5]
- mov r3, r0, lsr 16
- strb r4, [r2, 0x5]
- cmp r3, r12, lsr 16
- bne _081E01C0
- ldr r3, [r5]
- mov r2, r12, lsr 8
- strb r2, [r3, 0x4]
- ldr r2, [r5]
- strb r12, [r2, 0x6]
- ldr r1, [r5]
- ldrb r3, [r1, 0x4]
- cmp r3, r6
- bne _081E0058
- ldrb r2, [r1, 0x6]
- sub r3, r2, 0x27
- cmp r2, 0x36
- cmpne r3, 0x2
- bhi _081E002C
- add r3, r2, 0x80
- strb r3, [r1, 0x9]
- ldr r2, [r5]
- ldrb r3, [r2, 0x9]
- ldr r1, [r2, 0x24]
- add r3, r3, r0
- b _081E00DC
-_081E002C:
- ldr r2, [r1, 0x24]
- ldr r3, _081E02F4 @ =0x996601ee
- str r3, [r2]
- ldr r2, [r5]
- ldrb r3, [r2, 0x6]
- sub r3, r3, 0x10
- cmp r3, 0x2D
- bhi _081E0114
- ldr r3, [r2, 0x24]
- str r4, [r3, 0x4]
- b _081E0120
-_081E0058:
- mov r3, 0x80000000
- str r3, [lr]
- strb r4, [r1, 0x5]
- ldr r2, [r5]
- add r3, r3, 0x80000006
- str r3, [r2]
- b _081E01D0
-_081E0074:
- ldr r3, [r0]
- cmp r3, 0x6
- bne _081E0174
- ldrb r1, [r0, 0x5]
- ldr r2, [r0, 0x28]
- str r12, [r2, r1, lsl 2]
- ldrb r3, [r0, 0x5]
- add r3, r3, 0x1
- strb r3, [r0, 0x5]
- ldr r1, [r5]
- ldrb r2, [r1, 0x4]
- ldrb r3, [r1, 0x5]
- cmp r2, r3
- bcs _081E0168
- ldrb r2, [r1, 0x6]
- sub r3, r2, 0x28
- cmp r2, 0x36
- cmpne r3, 0x1
- bhi _081E00EC
- add r3, r2, 0x80
- strb r3, [r1, 0x9]
- ldr r2, [r5]
- ldrb r3, [r2, 0x9]
- ldr r1, [r2, 0x24]
- orr r3, r3, 0x99000000
- orr r3, r3, 0x660000
-_081E00DC:
- str r3, [r1]
- ldr r2, [r5]
- strb r6, [r2, 0x7]
- b _081E0138
-_081E00EC:
- ldr r2, [r1, 0x24]
- ldr r3, _081E02F4 @ =0x996601ee
- str r3, [r2]
- ldr r2, [r5]
- ldrb r3, [r2, 0x6]
- sub r3, r3, 0x10
- cmp r3, 0x2D
- ldrls r2, [r2, 0x24]
- movls r3, 0x1
- bls _081E011C
-_081E0114:
- ldr r2, [r2, 0x24]
- mov r3, 0x2
-_081E011C:
- str r3, [r2, 0x4]
-_081E0120:
- ldr r2, [r5]
- mov r3, 0x1
- strb r3, [r2, 0x7]
- ldr r1, [r5]
- add r3, r3, 0x2
- strh r3, [r1, 0x12]
-_081E0138:
- ldr r0, [r5]
- ldr r2, [r0, 0x24]
- mov r3, 0x120
- ldr r1, [r2]
- add r3, r3, 0x4000000
- str r1, [r3]
- mov r2, 0x1
- strb r2, [r0, 0x8]
- ldr r1, [r5]
- mov r3, 0x7
- str r3, [r1]
- b _081E01D0
-_081E0168:
- mov r3, 0x80000000
- str r3, [lr]
- b _081E01D0
-_081E0174:
- ldr r3, [r0]
- cmp r3, 0x7
- bne _081E01D0
- cmp r12, 0x80000000
- bne _081E01C0
- ldrb r2, [r0, 0x7]
- ldrb r3, [r0, 0x8]
- cmp r2, r3
- movcc r3, 0x8
- strcc r3, [r0]
- bcc _081E01D0
- ldrb r1, [r0, 0x8]
- ldr r3, [r0, 0x24]
- ldr r2, [r3, r1, lsl 2]
- str r2, [lr]
- ldrb r3, [r0, 0x8]
- add r3, r3, 0x1
- strb r3, [r0, 0x8]
- b _081E01D0
-_081E01C0:
- bl STWI_stop_timer_in_RAM
- mov r0, 0x64
- bl STWI_set_timer_in_RAM
- b _081E0348
-_081E01D0:
- mov r0, 0x1
- bl handshake_wait
- mov r0, r0, lsl 16
- cmp r0, 0x10000
- beq _081E0348
- mov r6, r5
- ldr r3, [r6]
- ldr r2, [r3]
- cmp r2, 0x8
- bne _081E0298
- mov r4, 0x128
- add r4, r4, 0x4000000
- mov r3, 0x5000
- add r3, r3, 0x2
- strh r3, [r4]
- bl STWI_stop_timer_in_RAM
- ldr r0, [r6]
- ldrh r3, [r0, 0x12]
- cmp r3, 0x3
- bne _081E0244
- bl STWI_init_slave
- ldr r3, [r6]
- ldr r1, [r3, 0x1C]
- cmp r1, 0
- beq _081E0348
- mov r0, 0x1EC
- add r0, r0, 0x2
- bl Callback_Dummy_S
- b _081E0348
-_081E0244:
- mov r3, 0x120
- add r3, r3, 0x4000000
- mov r1, 0
- str r1, [r3]
- mov r2, 0x5000
- strh r1, [r4]
- add r2, r2, 0x3
- strh r2, [r4]
- mov r3, 0x1
- strb r3, [r0, 0x14]
- ldr r0, [r5]
- ldr r2, [r0, 0x1C]
- str r1, [r0]
- cmp r2, r1
- beq _081E0348
- ldrb r3, [r0, 0x4]
- ldrb r0, [r0, 0x6]
- mov r1, r2
- orr r0, r0, r3, lsl 8
- bl Callback_Dummy_S
- b _081E0348
-_081E0298:
- mov r3, 0x208
- add r3, r3, 0x4000000
- mov r2, 0
- strh r2, [r3]
- mov r1, 0x100
- add r2, r1, 0x4000002
- ldrh r3, [r2]
- tst r3, 0x80
- beq _081E031C
- ldrh r3, [r2]
- tst r3, 0x3
- bne _081E02F8
- mov r2, 0xFF00
- add r1, r1, 0x4000000
- ldrh r3, [r1]
- add r2, r2, 0x9B
- cmp r3, r2
- bls _081E031C
-_081E02E0:
- ldrh r3, [r1]
- cmp r3, r2
- bhi _081E02E0
- b _081E031C
- .align 2, 0
-_081E02F0: .4byte gSTWIStatus
-_081E02F4: .4byte 0x996601ee
-_081E02F8:
- mov r2, 0xFF00
- add r1, r1, 0x4000000
- ldrh r3, [r1]
- add r2, r2, 0xFE
- cmp r3, r2
- bls _081E031C
-_081E0310:
- ldrh r3, [r1]
- cmp r3, r2
- bhi _081E0310
-_081E031C:
- mov r1, 0x128
- add r1, r1, 0x4000000
- mov r0, 0x208
- add r0, r0, 0x4000000
- mov r3, 0x5000
- add r2, r3, 0x2
- strh r2, [r1]
- add r3, r3, 0x82
- strh r3, [r1]
- mov r2, 0x1
- strh r2, [r0]
-_081E0348:
- ldmdb r11, {r4-r6,r11,sp,lr}
- bx lr
- arm_func_end sio32intr_clock_slave
-
- arm_func_start handshake_wait
-handshake_wait: @ 81E0350
- mov r12, sp
- stmdb sp!, {r11,r12,lr,pc}
- mov r1, 0x128
- add r1, r1, 0x4000000
- mov r0, r0, lsl 16
- ldr r2, _081E03B4 @ =gSTWIStatus
- sub r11, r12, 0x4
- mov lr, r0, lsr 14
- ldr r12, [r2]
-_081E0374:
- ldrb r3, [r12, 0x10]
- and r0, r3, 0xFF
- cmp r0, 0x1
- beq _081E03A0
- ldrh r3, [r1]
- and r3, r3, 0x4
- cmp r3, lr
- bne _081E0374
- mov r0, 0
- ldmdb r11, {r11,sp,lr}
- bx lr
-_081E03A0:
- ldr r2, [r2]
- mov r3, 0
- strb r3, [r2, 0x10]
- ldmdb r11, {r11,sp,lr}
- bx lr
- .align 2, 0
-_081E03B4: .4byte gSTWIStatus
- arm_func_end handshake_wait
-
- arm_func_start STWI_set_timer_in_RAM
-STWI_set_timer_in_RAM: @ 81E03B8
- mov r12, sp
- stmdb sp!, {r4,r5,r11,r12,lr,pc}
- mov r1, 0x208
- add r1, r1, 0x4000000
- mov r3, 0
- sub r11, r12, 0x4
- ldr r12, _081E0470 @ =gSTWIStatus
- and lr, r0, 0xFF
- ldr r2, [r12]
- cmp lr, 0x50
- ldrb r0, [r2, 0xA]
- mov r4, r12
- mov r2, lr
- strh r3, [r1]
- mov r0, r0, lsl 2
- add r3, r3, 0x100
- add r1, r3, 0x4000000
- add r3, r3, 0x4000002
- add r5, r0, r3
- beq _081E0440
- bgt _081E0418
- cmp lr, 0x32
- beq _081E042C
- b _081E048C
-_081E0418:
- cmp r2, 0x64
- beq _081E0458
- cmp r2, 0x82
- beq _081E0474
- b _081E048C
-_081E042C:
- mvn r3, 0x334
- strh r3, [r0, r1]
- ldr r2, [r4]
- mov r3, 0x1
- b _081E0488
-_081E0440:
- mov r3, 0xAE000000
- mov r3, r3, asr 20
- strh r3, [r0, r1]
- ldr r2, [r4]
- mov r3, 0x2
- b _081E0488
-_081E0458:
- mvn r3, 0x660
- sub r3, r3, 0x9
- strh r3, [r0, r1]
- ldr r2, [r4]
- mov r3, 0x3
- b _081E0488
- .align 2, 0
-_081E0470: .4byte gSTWIStatus
-_081E0474:
- mvn r3, 0x850
- sub r3, r3, 0x2
- strh r3, [r0, r1]
- ldr r2, [r4]
- mov r3, 0x4
-_081E0488:
- str r3, [r2, 0xC]
-_081E048C:
- mov r12, 0x200
- add r12, r12, 0x4000002
- mov r3, 0xC3
- strh r3, [r5]
- mov r1, 0x208
- ldr r2, [r4]
- add r1, r1, 0x4000000
- ldrb r0, [r2, 0xA]
- sub r3, r3, 0xBB
- mov r3, r3, lsl r0
- strh r3, [r12]
- mov r2, 0x1
- strh r2, [r1]
- ldmdb r11, {r4,r5,r11,sp,lr}
- bx lr
- arm_func_end STWI_set_timer_in_RAM
-
- arm_func_start STWI_stop_timer_in_RAM
-STWI_stop_timer_in_RAM: @ 81E04C8
- mov r12, sp
- stmdb sp!, {r11,r12,lr,pc}
- mov r1, 0x100
- ldr lr, _081E0514 @ =gSTWIStatus
- add r0, r1, 0x4000000
- ldr r2, [lr]
- sub r11, r12, 0x4
- ldrb r3, [r2, 0xA]
- mov r12, 0
- str r12, [r2, 0xC]
- mov r3, r3, lsl 2
- strh r12, [r3, r0]
- ldr r2, [lr]
- ldrb r3, [r2, 0xA]
- add r1, r1, 0x4000002
- mov r3, r3, lsl 2
- strh r12, [r3, r1]
- ldmdb r11, {r11,sp,lr}
- bx lr
- .align 2, 0
-_081E0514: .4byte gSTWIStatus
- arm_func_end STWI_stop_timer_in_RAM
-
- arm_func_start STWI_init_slave
-STWI_init_slave: @ 81E0518
- mov r12, sp
- stmdb sp!, {r11,r12,lr,pc}
- ldr r0, _081E05A0 @ =gSTWIStatus
- ldr r2, [r0]
- mov r3, 0x5
- str r3, [r2]
- mov r1, 0
- strb r1, [r2, 0x14]
- ldr r3, [r0]
- strb r1, [r3, 0x4]
- ldr r2, [r0]
- strb r1, [r2, 0x5]
- ldr r3, [r0]
- strb r1, [r3, 0x6]
- ldr r2, [r0]
- strb r1, [r2, 0x7]
- ldr r3, [r0]
- strb r1, [r3, 0x8]
- ldr r2, [r0]
- strb r1, [r2, 0x9]
- ldr r3, [r0]
- str r1, [r3, 0xC]
- sub r11, r12, 0x4
- strb r1, [r3, 0x10]
- mov r2, 0x128
- ldr r12, [r0]
- add r2, r2, 0x4000000
- strh r1, [r12, 0x12]
- mov r3, 0x5000
- strb r1, [r12, 0x15]
- add r3, r3, 0x82
- strh r3, [r2]
- ldmdb r11, {r11,sp,lr}
- bx lr
- .align 2, 0
-_081E05A0: .4byte gSTWIStatus
- arm_func_end STWI_init_slave
-
- arm_func_start Callback_Dummy_M
-Callback_Dummy_M: @ 81E05A4
- bx r2
- arm_func_end Callback_Dummy_M
-
- arm_func_start Callback_Dummy_S
-Callback_Dummy_S: @ 81E05A8
- bx r1
- arm_func_end Callback_Dummy_S
-
- arm_func_start Callback_Dummy_ID
-Callback_Dummy_ID: @ 81E05AC
- bx r0
- arm_func_end Callback_Dummy_ID
diff --git a/asm/macros.inc b/asm/macros.inc
index ffbe3db29..0e53dc2a2 100644
--- a/asm/macros.inc
+++ b/asm/macros.inc
@@ -5,6 +5,7 @@
.include "asm/macros/ec.inc"
.include "asm/macros/map.inc"
.include "asm/macros/m4a.inc"
+ .include "asm/macros/trainer_tower.inc"
.macro region_map_location x, y, width, height, name
.byte \x
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index 7e95af9f4..51f8e7330 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -652,7 +652,7 @@
.4byte \pointer2 @ text
.4byte \pointer3 @ text
.4byte \pointer4 @ event script
- .elseif \type == TRAINER_BATTLE_TUTORIAL
+ .elseif \type == TRAINER_BATTLE_EARLY_RIVAL
.4byte \pointer1 @ text
.4byte \pointer2 @ text
.endif
@@ -699,9 +699,9 @@
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text
.endm
- @
- .macro trainerbattle_tutorial trainer:req, unk:req, intro_text:req, lose_text:req
- trainerbattle TRAINER_BATTLE_TUTORIAL, \trainer, \unk, \intro_text, \lose_text
+ @ Starts a trainer battle with victory text if the player loses. If flags is nonzero, the player will be healed after battle (and its assumed to be the tutorial battle)
+ .macro trainerbattle_earlyrival trainer:req, flags:req, defeat_text:req, victory_text:req
+ trainerbattle TRAINER_BATTLE_EARLY_RIVAL, \trainer, \flags, \defeat_text, \victory_text
.endm
@ Starts a trainer battle using the battle information stored in RAM (usually by trainerbattle, which actually calls this command behind-the-scenes), and blocks script execution until the battle finishes.
diff --git a/asm/macros/trainer_tower.inc b/asm/macros/trainer_tower.inc
new file mode 100644
index 000000000..8e5f606ee
--- /dev/null
+++ b/asm/macros/trainer_tower.inc
@@ -0,0 +1,133 @@
+ @ Sets NPC gfx and the floor layout depending on current challenge and floor
+ .macro ttower_initfloor
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_INIT_FLOOR
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Buffers the opponents battle speech to gStringVar4. speech is any TRAINER_TOWER_TEXT_*.
+ .macro ttower_getspeech speech:req, trainer=0xFF
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_SPEECH
+ setvar VAR_0x8005, \speech
+ .if \trainer >= VARS_START && \trainer != 0xFF
+ copyvar VAR_0x8006, \trainer
+ .elseif \trainer != 0xFF
+ setvar VAR_0x8006, \trainer
+ .endif
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Starts a trainer tower battle. VAR_0x8005 is unused
+ .macro ttower_dobattle
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_DO_BATTLE
+ setvar VAR_0x8005, 0
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Returns the current challenge type (CHALLENGE_TYPE_*). Mixed challenges use different types for each floor. If VAR_0x8005 is != FALSE, does nothing
+ .macro ttower_getchallengetype
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_CHALLENGE_TYPE
+ setvar VAR_0x8005, FALSE
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Adds 1 to the number of floors cleared (all trainers on floor defeated)
+ .macro ttower_clearedfloor
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_CLEARED_FLOOR
+ special CallTrainerTowerFunc
+ .endm
+
+ @ TRUE if the trainers on this floor were already beaten, FALSE otherwise
+ .macro ttower_isfloorcleared
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_FLOOR_CLEARED
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Initializes the Trainer Tower challenge and starts the timer
+ .macro ttower_startchallenge
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_START_CHALLENGE
+ special CallTrainerTowerFunc
+ .endm
+
+ @ 0 if not spoken to yet, 1 if spoken to but not received prize, 2 if received prize
+ .macro ttower_getownerstate
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_OWNER_STATE
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Tries to give prize. 0 if given successfully, 1 if no room for prize, 2 if giving prize should be skipped
+ .macro ttower_giveprize
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GIVE_PRIZE
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Checks the final challenge time. 0 if new record, 1 if not, 2 if time has already been checked
+ .macro ttower_checkfinaltime
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_CHECK_FINAL_TIME
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Resumes the challenge timer (or starts, if the timer is 0)
+ .macro ttower_resumetimer
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_RESUME_TIMER
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Sets that the player lost the challenge
+ .macro ttower_setlost
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_SET_LOST
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Returns the status of the current Trainer Tower challenge (CHALLENGE_STATUS_*)
+ .macro ttower_getchallengestatus
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_CHALLENGE_STATUS
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Buffers the current challenge time (min in gStringVar1, sec in gStringVar2, fraction sec in gStringVar3)
+ .macro ttower_gettime
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_TIME
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Unused. Displays Trainer Tower results. Handled by Special_BattleRecords instead
+ .macro ttower_showresults
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_SHOW_RESULTS
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Unused. See above
+ .macro ttower_closeresults
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_CLOSE_RESULTS
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Returns the eligibility of the players party for a double battle (using GetMonsStateToDoubles)
+ .macro ttower_checkdoubles
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_CHECK_DOUBLES
+ special CallTrainerTowerFunc
+ .endm
+
+ @ For the unused E-Reader challenges, gets the number of floors used. Otherwise returns FALSE (all floors used)
+ .macro ttower_getnumfloors
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_NUM_FLOORS
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Dummied, always returns FALSE
+ .macro ttower_shouldexit
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_SHOULD_WARP_TO_COUNTER
+ special CallTrainerTowerFunc
+ .endm
+
+ @ Plays the encounter music for the trainer number in VAR_TEMP_1
+ .macro ttower_encountermusic
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_ENCOUNTER_MUSIC
+ special CallTrainerTowerFunc
+ .endm
+
+ @ TRUE if the player reached the Battle Tower owner, FALSE otherwise
+ .macro ttower_getbeatchallenge
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_BEAT_CHALLENGE
+ special CallTrainerTowerFunc
+ .endm
diff --git a/asm/overworld.s b/asm/overworld.s
index 92ffbd038..5b3c01652 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1718,7 +1718,7 @@ sub_8055864: @ 8055864
bl sav1_reset_battle_music_maybe
bl mapheader_run_script_with_tag_x3
bl TryRegenerateRenewableHiddenItems
- bl not_trainer_hill_battle_pyramid
+ bl InitMap
ldr r4, _0805591C @ =gMapHeader
ldr r0, [r4]
bl copy_map_tileset2_to_vram_2
@@ -1798,7 +1798,7 @@ _08055974:
bl UpdateLocationHistoryForRoamer
bl RoamerMoveToOtherLocationSet
bl sub_8110920
- bl not_trainer_hill_battle_pyramid
+ bl InitMap
pop {r4}
pop {r0}
bx r0
@@ -1823,7 +1823,7 @@ sub_80559A8: @ 80559A8
bl sub_8110920
bl sub_8111708
bl set_current_map_header_from_sav1
- bl not_trainer_hill_battle_pyramid
+ bl InitMap
pop {r0}
bx r0
.align 2, 0
@@ -2247,7 +2247,7 @@ _08055CEC: .4byte gSaveBlock1Ptr
_08055CF0:
ldr r0, _08055D00 @ =gSaveBlock1Ptr
ldr r0, [r0]
- ldr r1, _08055D04 @ =gUnknown_83C68E0
+ ldr r1, _08055D04 @ =gMaxFlashLevel
ldr r1, [r1]
_08055CF8:
adds r0, 0x30
@@ -2257,7 +2257,7 @@ _08055CFA:
bx r0
.align 2, 0
_08055D00: .4byte gSaveBlock1Ptr
-_08055D04: .4byte gUnknown_83C68E0
+_08055D04: .4byte gMaxFlashLevel
thumb_func_end sub_8055CB8
thumb_func_start Overworld_SetFlashLevel
@@ -2266,7 +2266,7 @@ Overworld_SetFlashLevel: @ 8055D08
adds r1, r0, 0
cmp r1, 0
blt _08055D18
- ldr r0, _08055D28 @ =gUnknown_83C68E0
+ ldr r0, _08055D28 @ =gMaxFlashLevel
ldr r0, [r0]
cmp r1, r0
ble _08055D1A
@@ -2280,7 +2280,7 @@ _08055D1A:
pop {r0}
bx r0
.align 2, 0
-_08055D28: .4byte gUnknown_83C68E0
+_08055D28: .4byte gMaxFlashLevel
_08055D2C: .4byte gSaveBlock1Ptr
thumb_func_end Overworld_SetFlashLevel
@@ -2597,7 +2597,7 @@ GetMapMusicFadeoutSpeed: @ 8055F68
push {lr}
bl warp1_get_mapheader
ldrb r0, [r0, 0x17]
- bl is_light_level_8_or_9
+ bl IsMapTypeIndoors
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -2981,8 +2981,8 @@ _08056218:
bx r1
thumb_func_end Overworld_MapTypeAllowsTeleportAndFly
- thumb_func_start is_light_level_8_or_9
-is_light_level_8_or_9: @ 805621C
+ thumb_func_start IsMapTypeIndoors
+IsMapTypeIndoors: @ 805621C
push {lr}
lsls r0, 24
movs r1, 0xF8
@@ -2998,10 +2998,10 @@ _08056230:
_08056232:
pop {r1}
bx r1
- thumb_func_end is_light_level_8_or_9
+ thumb_func_end IsMapTypeIndoors
- thumb_func_start sav1_saved_warp2_map_get_name
-sav1_saved_warp2_map_get_name: @ 8056238
+ thumb_func_start GetSavedWarpRegionMapSectionId
+GetSavedWarpRegionMapSectionId: @ 8056238
push {lr}
ldr r0, _0805625C @ =gSaveBlock1Ptr
ldr r1, [r0]
@@ -3020,7 +3020,7 @@ sav1_saved_warp2_map_get_name: @ 8056238
bx r1
.align 2, 0
_0805625C: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_saved_warp2_map_get_name
+ thumb_func_end GetSavedWarpRegionMapSectionId
thumb_func_start GetCurrentRegionMapSectionId
GetCurrentRegionMapSectionId: @ 8056260
@@ -3044,8 +3044,8 @@ GetCurrentRegionMapSectionId: @ 8056260
_08056284: .4byte gSaveBlock1Ptr
thumb_func_end GetCurrentRegionMapSectionId
- thumb_func_start sav1_map_get_battletype
-sav1_map_get_battletype: @ 8056288
+ thumb_func_start GetCurrentMapBattleScene
+GetCurrentMapBattleScene: @ 8056288
push {lr}
ldr r0, _080562AC @ =gSaveBlock1Ptr
ldr r1, [r0]
@@ -3064,10 +3064,10 @@ sav1_map_get_battletype: @ 8056288
bx r1
.align 2, 0
_080562AC: .4byte gSaveBlock1Ptr
- thumb_func_end sav1_map_get_battletype
+ thumb_func_end GetCurrentMapBattleScene
- thumb_func_start sub_80562B0
-sub_80562B0: @ 80562B0
+ thumb_func_start InitOverworldBgs
+InitOverworldBgs: @ 80562B0
push {r4-r6,lr}
mov r6, r8
push {r6}
@@ -3130,7 +3130,7 @@ _08056344: .4byte gUnknown_826D320
_08056348: .4byte gUnknown_3005018
_0805634C: .4byte gUnknown_3005014
_08056350: .4byte gUnknown_300501C
- thumb_func_end sub_80562B0
+ thumb_func_end InitOverworldBgs
thumb_func_start sub_8056354
sub_8056354: @ 8056354
@@ -3430,14 +3430,14 @@ _080565D4:
_080565DC: .4byte gPaletteFade
thumb_func_end sub_80565B4
- thumb_func_start sub_80565E0
-sub_80565E0: @ 80565E0
+ thumb_func_start SetMainCallback1
+SetMainCallback1: @ 80565E0
ldr r1, _080565E8 @ =gMain
str r0, [r1]
bx lr
.align 2, 0
_080565E8: .4byte gMain
- thumb_func_end sub_80565E0
+ thumb_func_end SetMainCallback1
thumb_func_start map_post_load_hook_exec
map_post_load_hook_exec: @ 80565EC
@@ -3490,7 +3490,7 @@ _08056640: .4byte gFieldCallback
thumb_func_start CB2_NewGame
CB2_NewGame: @ 8056644
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl StopMapMusic
bl sub_8056420
bl NewGameInitData
@@ -3508,7 +3508,7 @@ CB2_NewGame: @ 8056644
bl do_load_map_stuff_loop
bl SetFieldVBlankCallback
ldr r0, _0805669C @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _080566A0 @ =sub_80565B4
bl SetMainCallback2
pop {r0}
@@ -3537,7 +3537,7 @@ CB2_WhiteOut: @ 80566A4
lsrs r0, 24
cmp r0, 0x77
bls _08056702
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl StopMapMusic
bl sub_8056420
bl sub_8054BC8
@@ -3556,7 +3556,7 @@ CB2_WhiteOut: @ 80566A4
bl sub_8112364
bl SetFieldVBlankCallback
ldr r0, _08056714 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _08056718 @ =sub_80565B4
bl SetMainCallback2
_08056702:
@@ -3574,11 +3574,11 @@ _08056718: .4byte sub_80565B4
thumb_func_start CB2_LoadMap
CB2_LoadMap: @ 805671C
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl ScriptContext1_Init
bl ScriptContext2_Disable
movs r0, 0
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _08056740 @ =sub_80C9BFC
bl SetMainCallback2
ldr r1, _08056744 @ =gMain
@@ -3609,7 +3609,7 @@ _08056768: .4byte gMain + 0x438
_0805676C:
bl SetFieldVBlankCallback
ldr r0, _08056780 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _08056784 @ =sub_80565B4
bl SetMainCallback2
_0805677C:
@@ -3620,12 +3620,12 @@ _08056780: .4byte sub_8056534
_08056784: .4byte sub_80565B4
thumb_func_end sub_805674C
- thumb_func_start sub_8056788
-sub_8056788: @ 8056788
+ thumb_func_start CB2_ReturnToFieldCableClub
+CB2_ReturnToFieldCableClub: @ 8056788
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r0, _080567A0 @ =gFieldCallback
- ldr r1, _080567A4 @ =sub_807DE58
+ ldr r1, _080567A4 @ =FieldCB_ReturnToFieldWirelessLink
str r1, [r0]
ldr r0, _080567A8 @ =c2_80567AC
bl SetMainCallback2
@@ -3633,20 +3633,20 @@ sub_8056788: @ 8056788
bx r0
.align 2, 0
_080567A0: .4byte gFieldCallback
-_080567A4: .4byte sub_807DE58
+_080567A4: .4byte FieldCB_ReturnToFieldWirelessLink
_080567A8: .4byte c2_80567AC
- thumb_func_end sub_8056788
+ thumb_func_end CB2_ReturnToFieldCableClub
thumb_func_start c2_80567AC
c2_80567AC: @ 80567AC
push {lr}
ldr r0, _080567D0 @ =gMain + 0x438
- bl sub_8056A5C
+ bl map_loading_iteration_3
cmp r0, 0
beq _080567CC
bl SetFieldVBlankCallback
ldr r0, _080567D4 @ =c1_link_related
- bl sub_80565E0
+ bl SetMainCallback1
bl sub_80578D8
ldr r0, _080567D8 @ =sub_80565B4
bl SetMainCallback2
@@ -3671,7 +3671,7 @@ CB2_ReturnToField: @ 80567DC
.align 2, 0
_080567F0: .4byte c2_exit_to_overworld_2_link
_080567F4:
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r0, _08056804 @ =c2_exit_to_overworld_2_local
bl SetMainCallback2
_080567FE:
@@ -3722,23 +3722,23 @@ _08056850: .4byte sub_80565B4
thumb_func_start c2_8056854
c2_8056854: @ 8056854
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl StopMapMusic
ldr r0, _08056878 @ =c1_link_related
- bl sub_80565E0
+ bl SetMainCallback1
bl sub_80578D8
ldr r0, _0805687C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08056888
ldr r1, _08056880 @ =gFieldCallback
- ldr r0, _08056884 @ =sub_807DE58
+ ldr r0, _08056884 @ =FieldCB_ReturnToFieldWirelessLink
b _0805688C
.align 2, 0
_08056878: .4byte c1_link_related
_0805687C: .4byte gWirelessCommType
_08056880: .4byte gFieldCallback
-_08056884: .4byte sub_807DE58
+_08056884: .4byte FieldCB_ReturnToFieldWirelessLink
_08056888:
ldr r1, _080568A0 @ =gFieldCallback
ldr r0, _080568A4 @ =sub_807DDD0
@@ -3757,7 +3757,7 @@ _080568A4: .4byte sub_807DDD0
thumb_func_start CB2_ReturnToFieldWithOpenMenu
CB2_ReturnToFieldWithOpenMenu: @ 80568A8
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r1, _080568BC @ =gFieldCallback2
ldr r0, _080568C0 @ =FieldCB2_ReturnToStartMenuInit
str r0, [r1]
@@ -3772,7 +3772,7 @@ _080568C0: .4byte FieldCB2_ReturnToStartMenuInit
thumb_func_start sub_80568C4
sub_80568C4: @ 80568C4
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r1, _080568D8 @ =gFieldCallback
ldr r0, _080568DC @ =sub_807DD44
str r0, [r1]
@@ -3787,7 +3787,7 @@ _080568DC: .4byte sub_807DD44
thumb_func_start CB2_ReturnToFieldContinueScriptPlayMapMusic
CB2_ReturnToFieldContinueScriptPlayMapMusic: @ 80568E0
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r1, _080568F4 @ =gFieldCallback
ldr r0, _080568F8 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
@@ -3802,7 +3802,7 @@ _080568F8: .4byte FieldCallback_ReturnToEventScript2
thumb_func_start CB2_Overworld
CB2_Overworld: @ 80568FC
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r1, _08056910 @ =gFieldCallback
ldr r0, _08056914 @ =sub_807DF7C
str r0, [r1]
@@ -3836,14 +3836,14 @@ _08056934: .4byte gMapHeader
thumb_func_start CB2_ContinueSavedGame
CB2_ContinueSavedGame: @ 8056938
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl StopMapMusic
bl sub_8056420
bl set_current_map_header_from_sav1
bl sub_80550A8
bl UnfreezeObjectEvents
bl sub_8054E40
- bl sub_80589E8
+ bl InitMapFromSavedGame
bl PlayTimeCounter_Start
bl ScriptContext1_Init
bl ScriptContext2_Disable
@@ -3871,7 +3871,7 @@ _0805699C:
ldr r1, _080569B4 @ =sub_8056918
str r1, [r0]
ldr r0, _080569B8 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
bl CB2_ReturnToField
_080569AC:
pop {r0}
@@ -3882,8 +3882,8 @@ _080569B4: .4byte sub_8056918
_080569B8: .4byte sub_8056534
thumb_func_end CB2_ContinueSavedGame
- thumb_func_start sub_80569BC
-sub_80569BC: @ 80569BC
+ thumb_func_start FieldClearVBlankHBlankCallbacks
+FieldClearVBlankHBlankCallbacks: @ 80569BC
push {lr}
bl sub_80CC87C
lsls r0, 24
@@ -3915,7 +3915,7 @@ _080569F4:
bl SetHBlankCallback
pop {r0}
bx r0
- thumb_func_end sub_80569BC
+ thumb_func_end FieldClearVBlankHBlankCallbacks
thumb_func_start SetFieldVBlankCallback
SetFieldVBlankCallback: @ 8056A04
@@ -3962,8 +3962,8 @@ _08056A52:
_08056A58: .4byte gFlashEffectParams
thumb_func_end InitCurrentFlashLevelScanlineEffect
- thumb_func_start sub_8056A5C
-sub_8056A5C: @ 8056A5C
+ thumb_func_start map_loading_iteration_3
+map_loading_iteration_3: @ 8056A5C
push {r4,lr}
adds r4, r0, 0
ldrb r0, [r4]
@@ -3995,7 +3995,7 @@ _08056A78:
.4byte _08056B58
.4byte _08056B6A
_08056AB0:
- bl sub_80562B0
+ bl InitOverworldBgs
bl ScriptContext1_Init
bl ScriptContext2_Disable
b _08056B62
@@ -4084,7 +4084,7 @@ _08056B70:
pop {r4}
pop {r1}
bx r1
- thumb_func_end sub_8056A5C
+ thumb_func_end map_loading_iteration_3
thumb_func_start sub_8056B78
sub_8056B78: @ 8056B78
@@ -4121,8 +4121,8 @@ _08056B94:
.4byte _08056CC0
.4byte _08056BFA
_08056BD0:
- bl sub_80562B0
- bl sub_80569BC
+ bl InitOverworldBgs
+ bl FieldClearVBlankHBlankCallbacks
adds r0, r5, 0
bl sub_8055920
b _08056CCA
@@ -4266,7 +4266,7 @@ _08056CF0:
.4byte _08056D26
.4byte _08056D38
_08056D04:
- bl sub_80562B0
+ bl InitOverworldBgs
bl sub_8111F14
movs r0, 0
bl sub_8057024
@@ -4331,8 +4331,8 @@ _08056D60:
.4byte _08056E34
.4byte _08056E46
_08056D98:
- bl sub_80562B0
- bl sub_80569BC
+ bl InitOverworldBgs
+ bl FieldClearVBlankHBlankCallbacks
b _08056E3E
_08056DA2:
bl sub_8111F14
@@ -4914,14 +4914,14 @@ _08057268: .4byte gLinkPlayers
thumb_func_start sub_805726C
sub_805726C: @ 805726C
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r1, _08057298 @ =gUnknown_2036E28
movs r0, 0x1
strb r0, [r1]
bl ScriptContext1_Init
bl ScriptContext2_Disable
movs r0, 0
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _0805729C @ =sub_80C9BFC
bl SetMainCallback2
ldr r1, _080572A0 @ =gMain
@@ -4939,7 +4939,7 @@ _080572A4: .4byte sub_80572D8
thumb_func_start sub_80572A8
sub_80572A8: @ 80572A8
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
ldr r0, _080572D0 @ =gUnknown_2036E28
movs r1, 0x1
strb r1, [r0]
@@ -4947,7 +4947,7 @@ sub_80572A8: @ 80572A8
bl ScriptContext1_Init
bl ScriptContext2_Disable
movs r0, 0
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _080572D4 @ =sub_80572D8
bl SetMainCallback2
pop {r0}
@@ -4964,7 +4964,7 @@ sub_80572D8: @ 80572D8
bl sub_8057300
bl SetFieldVBlankCallback
ldr r0, _080572F8 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
ldr r0, _080572FC @ =sub_80565B4
bl SetMainCallback2
pop {r0}
@@ -5019,8 +5019,8 @@ _08057330:
.4byte _08057404
.4byte _0805740A
_0805735C:
- bl sub_80562B0
- bl sub_80569BC
+ bl InitOverworldBgs
+ bl FieldClearVBlankHBlankCallbacks
bl sub_8111F14
bl sub_81113E4
bl sub_8111438
@@ -5118,7 +5118,7 @@ _0805742A:
thumb_func_start sub_8057430
sub_8057430: @ 8057430
push {lr}
- bl sub_80569BC
+ bl FieldClearVBlankHBlankCallbacks
bl StopMapMusic
ldr r1, _08057484 @ =gUnknown_2036E28
movs r0, 0x3
@@ -5128,7 +5128,7 @@ sub_8057430: @ 8057430
bl sub_80550A8
bl UnfreezeObjectEvents
bl sub_8054E40
- bl sub_80589E8
+ bl InitMapFromSavedGame
bl PlayTimeCounter_Start
bl ScriptContext1_Init
ldr r1, _08057488 @ =gUnknown_2031DE0
@@ -5149,7 +5149,7 @@ _08057488: .4byte gUnknown_2031DE0
_0805748C: .4byte CB2_LoadMap
_08057490:
ldr r0, _080574A0 @ =sub_8056534
- bl sub_80565E0
+ bl SetMainCallback1
bl CB2_ReturnToField
_0805749A:
pop {r0}
@@ -5313,7 +5313,7 @@ _08057560:
bl ScriptContext1_Init
bl ScriptContext2_Disable
movs r0, 0
- bl sub_80565E0
+ bl SetMainCallback1
ldr r1, _08057614 @ =gFieldCallback2
ldr r0, _08057618 @ =sub_80574EC
str r0, [r1]
@@ -7979,7 +7979,7 @@ _08058978:
_0805898A:
adds r0, r5, 0
movs r1, 0
- bl sub_8068EB4
+ bl UpdateObjectEventSpriteVisibility
ldrb r0, [r6]
lsls r0, 29
cmp r0, 0
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s
index 345f3c83c..9dbbabd6f 100644
--- a/asm/pokedex_screen.s
+++ b/asm/pokedex_screen.s
@@ -1839,7 +1839,7 @@ _08106478:
bl FillWindowPixelBuffer
movs r0, 0xB0
movs r1, 0x1
- bl sub_8107D38
+ bl ListMenuLoadStdPalAt
mov r0, r10
cmp r0, 0
beq _08106504
diff --git a/asm/pokemon_jump.s b/asm/pokemon_jump.s
index d94a5c8db..1644bb3d8 100644
--- a/asm/pokemon_jump.s
+++ b/asm/pokemon_jump.s
@@ -621,7 +621,7 @@ _08147A5C:
ldrh r0, [r4, 0x18]
strh r0, [r1, 0x2]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
b _08147A9E
.align 2, 0
_08147A88: .4byte gTasks+0x8
diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s
index 5e6327c81..ff6757630 100644
--- a/asm/pokemon_jump_2.s
+++ b/asm/pokemon_jump_2.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_8147AA8
-sub_8147AA8: @ 8147AA8
+ thumb_func_start StartPokemonJump
+StartPokemonJump: @ 8147AA8
push {r4-r7,lr}
adds r6, r1, 0
lsls r0, 16
@@ -73,7 +73,7 @@ _08147B42:
pop {r4-r7}
pop {r0}
bx r0
- thumb_func_end sub_8147AA8
+ thumb_func_end StartPokemonJump
thumb_func_start sub_8147B48
sub_8147B48: @ 8147B48
@@ -2535,7 +2535,7 @@ _08148DEA:
ands r0, r1
cmp r0, 0
bne _08148E20
- bl sub_800AAC0
+ bl Link_TryStartSend5FFF
_08148DFA:
ldr r0, _08148E0C @ =gUnknown_203F3D4
ldr r1, [r0]
@@ -4302,7 +4302,7 @@ sub_8149A6C: @ 8149A6C
ldr r0, [r0, 0x8]
str r0, [sp, 0x4]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0xC
pop {r0}
bx r0
@@ -4363,7 +4363,7 @@ sub_8149AE0: @ 8149AE0
strb r1, [r2]
str r0, [sp, 0x4]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0xC
pop {r0}
bx r0
@@ -4425,7 +4425,7 @@ sub_8149AF8: @ 8149AF8
ldrh r0, [r0, 0xE]
strh r0, [r1, 0x4]
mov r0, sp
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0xC
pop {r3}
mov r8, r3
@@ -4520,7 +4520,7 @@ sub_8149BF4: @ 8149BF4
mov r0, sp
strb r1, [r0, 0x6]
strh r2, [r0, 0x8]
- bl sub_80F9E2C
+ bl RfuPrepareSend0x2f00
add sp, 0xC
pop {r4}
pop {r0}
@@ -4665,7 +4665,7 @@ _08149D20: .4byte sub_8149DC8
sub_8149D24: @ 8149D24
push {lr}
bl FreeAllWindowBuffers
- bl sub_815C9F4
+ bl DigitObjUtil_Teardown
pop {r0}
bx r0
thumb_func_end sub_8149D24
@@ -6284,7 +6284,10 @@ sub_814A9C8: @ 814A9C8
push {r4,lr}
sub sp, 0x10
mov r1, sp
- movs r0, 0x40
+ movs r0, 0x40 @ strConvMode = 0
+ @ shape = SPRITE_SHAPE(8x8)
+ @ size = SPRITE_SIZE(8x8)
+ @ priority = 1
strb r0, [r1]
movs r0, 0x5
strb r0, [r1, 0x1]
@@ -6299,11 +6302,11 @@ sub_814A9C8: @ 814A9C8
ldr r0, _0814AA20 @ =gUnknown_846D968
str r0, [sp, 0xC]
movs r0, 0x2
- bl sub_815C980
+ bl DigitObjUtil_Init
movs r0, 0
movs r1, 0
mov r2, sp
- bl sub_815CA40
+ bl DigitObjUtil_CreatePrinter
mov r1, sp
movs r0, 0x4
strb r0, [r1, 0x1]
@@ -6314,7 +6317,7 @@ sub_814A9C8: @ 814A9C8
movs r0, 0x1
movs r1, 0
mov r2, sp
- bl sub_815CA40
+ bl DigitObjUtil_CreatePrinter
add sp, 0x10
pop {r4}
pop {r0}
@@ -6329,7 +6332,7 @@ sub_814AA24: @ 814AA24
push {lr}
adds r1, r0, 0
movs r0, 0
- bl sub_815CD70
+ bl DigitObjUtil_PrintNumOn
pop {r0}
bx r0
thumb_func_end sub_814AA24
@@ -6341,7 +6344,7 @@ sub_814AA34: @ 814AA34
lsls r1, 16
lsrs r1, 16
movs r0, 0x1
- bl sub_815CD70
+ bl DigitObjUtil_PrintNumOn
pop {r0}
bx r0
thumb_func_end sub_814AA34
@@ -7699,7 +7702,7 @@ sub_814B43C: @ 814B43C
movs r1, 0x7
movs r2, 0x78
movs r3, 0x50
- bl sub_815F138
+ bl StartMinigameCountdown
adds r0, r4, 0
bl sub_814B134
add sp, 0x4
@@ -7711,7 +7714,7 @@ sub_814B43C: @ 814B43C
thumb_func_start sub_814B460
sub_814B460: @ 814B460
push {lr}
- bl sub_815F198
+ bl IsMinigameCountdownRunning
pop {r1}
bx r1
thumb_func_end sub_814B460
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index d6c3f548f..19b838f47 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -3187,7 +3187,7 @@ _08135FC8: .4byte gUnknown_8E9B310
_08135FCC:
movs r0, 0x60
movs r1, 0x1
- bl sub_8107D38
+ bl ListMenuLoadStdPalAt
ldr r0, _08135FE0 @ =gUnknown_84636C0
movs r1, 0x70
_08135FD8:
diff --git a/asm/smokescreen.s b/asm/smokescreen.s
deleted file mode 100644
index e0d137767..000000000
--- a/asm/smokescreen.s
+++ /dev/null
@@ -1,225 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SmokescreenImpact
-SmokescreenImpact: @ 804A76C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- ldr r5, _0804A8A4 @ =gUnknown_825098C
- ldrh r0, [r5, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, _0804A8A8 @ =0xffff0000
- cmp r0, r1
- bne _0804A79E
- adds r0, r5, 0
- bl LoadCompressedSpriteSheetUsingHeap
- ldr r0, _0804A8AC @ =gUnknown_8250994
- bl LoadCompressedSpritePaletteUsingHeap
-_0804A79E:
- ldr r0, _0804A8B0 @ =sub_804A8C0
- bl CreateInvisibleSpriteWithCallback
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r5, r0, 4
- add r5, r8
- lsls r5, 2
- ldr r0, _0804A8B4 @ =gSprites
- adds r5, r0
- strh r4, [r5, 0x30]
- ldr r0, _0804A8B8 @ =gUnknown_82509F4
- mov r9, r0
- lsls r6, 16
- asrs r0, r6, 16
- mov r10, r0
- ldr r0, _0804A8BC @ =0xfff00000
- adds r6, r0
- asrs r6, 16
- lsls r4, r7, 16
- asrs r7, r4, 16
- adds r4, r0
- asrs r4, 16
- mov r0, r9
- adds r1, r6, 0
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0804A8B4 @ =gSprites
- adds r1, r0
- mov r0, r8
- strh r0, [r1, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r1, 0
- bl AnimateSprite
- mov r0, r9
- mov r1, r10
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0804A8B4 @ =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r9
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0804A8B4 @ =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r9
- mov r1, r10
- adds r2, r7, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _0804A8B4 @ =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0804A8A4: .4byte gUnknown_825098C
-_0804A8A8: .4byte 0xffff0000
-_0804A8AC: .4byte gUnknown_8250994
-_0804A8B0: .4byte sub_804A8C0
-_0804A8B4: .4byte gSprites
-_0804A8B8: .4byte gUnknown_82509F4
-_0804A8BC: .4byte 0xfff00000
- thumb_func_end SmokescreenImpact
-
- thumb_func_start sub_804A8C0
-sub_804A8C0: @ 804A8C0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0804A8F8
- ldr r0, _0804A8EC @ =gUnknown_825098C
- ldrh r0, [r0, 0x6]
- bl FreeSpriteTilesByTag
- ldr r0, _0804A8F0 @ =gUnknown_8250994
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0804A8F4
- adds r0, r4, 0
- bl DestroySprite
- b _0804A8F8
- .align 2, 0
-_0804A8EC: .4byte gUnknown_825098C
-_0804A8F0: .4byte gUnknown_8250994
-_0804A8F4:
- ldr r0, _0804A900 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_0804A8F8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0804A900: .4byte SpriteCallbackDummy
- thumb_func_end sub_804A8C0
-
- thumb_func_start sub_804A904
-sub_804A904: @ 804A904
- push {lr}
- adds r3, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0804A92E
- ldr r2, _0804A934 @ =gSprites
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x2E]
- subs r1, 0x1
- strh r1, [r0, 0x2E]
- adds r0, r3, 0
- bl DestroySprite
-_0804A92E:
- pop {r0}
- bx r0
- .align 2, 0
-_0804A934: .4byte gSprites
- thumb_func_end sub_804A904
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
deleted file mode 100644
index adfd66b5d..000000000
--- a/asm/union_room_chat.s
+++ /dev/null
@@ -1,5973 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8128420
-sub_8128420: @ 8128420
- push {r4,lr}
- ldr r4, _08128450 @ =gUnknown_203B0E0
- movs r0, 0xDC
- lsls r0, 1
- bl Alloc
- str r0, [r4]
- bl sub_812845C
- ldr r1, _08128454 @ =gKeyRepeatStartDelay
- movs r0, 0x14
- strh r0, [r1]
- bl sub_812B4AC
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, _08128458 @ =c2_081284E0
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128450: .4byte gUnknown_203B0E0
-_08128454: .4byte gKeyRepeatStartDelay
-_08128458: .4byte c2_081284E0
- thumb_func_end sub_8128420
-
- thumb_func_start sub_812845C
-sub_812845C: @ 812845C
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r5, 0
- movs r0, 0
- strh r0, [r4, 0x4]
- strh r0, [r4, 0x6]
- strb r5, [r4, 0x10]
- strb r5, [r4, 0x11]
- strb r5, [r4, 0x12]
- strb r5, [r4, 0x14]
- strb r5, [r4, 0x15]
- strb r5, [r4, 0x16]
- movs r0, 0xFF
- strb r0, [r4, 0x1A]
- bl GetLinkPlayerCount
- strb r0, [r4, 0xD]
- bl GetMultiplayerId
- strb r0, [r4, 0x13]
- strb r5, [r4, 0x17]
- strb r5, [r4, 0x18]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r4, r1
- bl sub_8129560
- ldr r7, _081284B4 @ =gSaveBlock1Ptr
- ldr r6, _081284B8 @ =0x00003ad4
- adds r4, 0xB9
- movs r5, 0x9
-_0812849A:
- ldr r1, [r7]
- adds r1, r6
- adds r0, r4, 0
- bl StringCopy
- adds r6, 0x15
- adds r4, 0x15
- subs r5, 0x1
- cmp r5, 0
- bge _0812849A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081284B4: .4byte gSaveBlock1Ptr
-_081284B8: .4byte 0x00003ad4
- thumb_func_end sub_812845C
-
- thumb_func_start sub_81284BC
-sub_81284BC: @ 81284BC
- push {r4,lr}
- ldr r4, _081284DC @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0xE]
- bl DestroyTask
- ldr r0, [r4]
- ldrb r0, [r0, 0xF]
- bl DestroyTask
- ldr r0, [r4]
- bl Free
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081284DC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81284BC
-
- thumb_func_start c2_081284E0
-c2_081284E0: @ 81284E0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _081284FC @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r6, r0, r1
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08128518
- cmp r0, 0x1
- bgt _08128500
- cmp r0, 0
- beq _08128506
- b _08128598
- .align 2, 0
-_081284FC: .4byte gMain
-_08128500:
- cmp r0, 0x2
- beq _08128554
- b _08128598
-_08128506:
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl sub_8129B14
- b _08128548
-_08128518:
- bl sub_8129BFC
- bl sub_8129B78
- adds r5, r0, 0
- cmp r5, 0
- bne _08128598
- movs r4, 0x1
- negs r4, r4
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r4, 0
- adds r1, r4, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _08128550 @ =sub_81285B4
- bl SetVBlankCallback
-_08128548:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- b _08128598
- .align 2, 0
-_08128550: .4byte sub_81285B4
-_08128554:
- bl UpdatePaletteFade
- ldr r0, _081285A0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08128598
- ldr r0, _081285A4 @ =sub_81285CC
- bl SetMainCallback2
- movs r0, 0x11
- movs r1, 0
- bl SetQuestLogEvent
- ldr r0, _081285A8 @ =sub_81285E8
- movs r1, 0x8
- bl CreateTask
- ldr r4, _081285AC @ =gUnknown_203B0E0
- ldr r1, [r4]
- strb r0, [r1, 0xE]
- ldr r0, _081285B0 @ =sub_81298F8
- movs r1, 0x7
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1, 0xF]
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0xE8
- movs r1, 0x96
- bl CreateWirelessStatusIndicatorSprite
-_08128598:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081285A0: .4byte gPaletteFade
-_081285A4: .4byte sub_81285CC
-_081285A8: .4byte sub_81285E8
-_081285AC: .4byte gUnknown_203B0E0
-_081285B0: .4byte sub_81298F8
- thumb_func_end c2_081284E0
-
- thumb_func_start sub_81285B4
-sub_81285B4: @ 81285B4
- push {lr}
- bl TransferPlttBuffer
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- thumb_func_end sub_81285B4
-
- thumb_func_start sub_81285CC
-sub_81285CC: @ 81285CC
- push {lr}
- bl RunTasks
- bl sub_8129BFC
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_81285CC
-
- thumb_func_start sub_81285E8
-sub_81285E8: @ 81285E8
- push {r4,lr}
- ldr r4, _08128600 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r0, 0x2
- beq _0812860E
- cmp r0, 0x2
- bgt _08128604
- cmp r0, 0x1
- beq _0812860A
- b _0812861E
- .align 2, 0
-_08128600: .4byte gUnknown_203B0E0
-_08128604:
- cmp r0, 0x3
- beq _08128612
- b _0812861E
-_0812860A:
- movs r0, 0x6
- b _08128614
-_0812860E:
- movs r0, 0x7
- b _08128614
-_08128612:
- movs r0, 0x8
-_08128614:
- bl sub_8129218
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x17]
-_0812861E:
- ldr r1, _08128638 @ =gUnknown_845A880
- ldr r0, _0812863C @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x4]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128638: .4byte gUnknown_845A880
-_0812863C: .4byte gUnknown_203B0E0
- thumb_func_end sub_81285E8
-
- thumb_func_start sub_8128640
-sub_8128640: @ 8128640
- push {r4,lr}
- ldr r4, _08128658 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrh r1, [r0, 0x6]
- cmp r1, 0x1
- beq _08128674
- cmp r1, 0x1
- bgt _0812865C
- cmp r1, 0
- beq _08128662
- b _081286BC
- .align 2, 0
-_08128658: .4byte gUnknown_203B0E0
-_0812865C:
- cmp r1, 0x2
- beq _081286AC
- b _081286BC
-_08128662:
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129568
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
-_08128674:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- bl sub_80FBA1C
- cmp r0, 0
- bne _081286BC
- ldr r4, _081286A8 @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _081286BC
- .align 2, 0
-_081286A8: .4byte gUnknown_203B0E0
-_081286AC:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- movs r0, 0x1
- bl sub_8129218
-_081286BC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128640
-
- thumb_func_start sub_81286C4
-sub_81286C4: @ 81286C4
- push {r4,r5,lr}
- ldr r5, _081286D8 @ =gUnknown_203B0E0
- ldr r3, [r5]
- ldrh r0, [r3, 0x6]
- cmp r0, 0
- beq _081286DC
- cmp r0, 0x1
- beq _0812878A
- b _081287AC
- .align 2, 0
-_081286D8: .4byte gUnknown_203B0E0
-_081286DC:
- ldr r1, _081286F8 @ =gMain
- ldrh r2, [r1, 0x2E]
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _081286FC
- ldrb r0, [r3, 0x15]
- cmp r0, 0
- beq _081287AC
- movs r0, 0x4
- bl sub_8129218
- b _081287AC
- .align 2, 0
-_081286F8: .4byte gMain
-_081286FC:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _0812870C
- movs r0, 0x2
- bl sub_8129218
- b _081287AC
-_0812870C:
- ldrh r1, [r1, 0x30]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08128738
- ldrb r0, [r3, 0x15]
- cmp r0, 0
- beq _08128730
- bl sub_81293AC
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r5]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _081287AC
-_08128730:
- movs r0, 0x3
- bl sub_8129218
- b _081287AC
-_08128738:
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r2
- cmp r0, 0
- beq _08128754
- bl sub_81292D8
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- movs r0, 0x2
- movs r1, 0x1
- b _08128780
-_08128754:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _08128774
- ldrb r0, [r3, 0x10]
- cmp r0, 0x3
- beq _0812876C
- bl sub_81293D8
- movs r0, 0x8
- b _0812877E
-_0812876C:
- movs r0, 0x5
- bl sub_8129218
- b _081287AC
-_08128774:
- bl sub_8129228
- cmp r0, 0
- beq _081287AC
- movs r0, 0x1
-_0812877E:
- movs r1, 0
-_08128780:
- bl sub_8129C34
- ldr r0, [r5]
- strh r4, [r0, 0x6]
- b _081287AC
-_0812878A:
- movs r0, 0
- bl sub_8129C8C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- bl sub_8129C8C
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r4, 0
- bne _081287AC
- cmp r1, 0
- bne _081287AC
- ldr r0, [r5]
- strh r1, [r0, 0x6]
-_081287AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81286C4
-
- thumb_func_start sub_81287B4
-sub_81287B4: @ 81287B4
- push {r4-r6,lr}
- ldr r0, _081287CC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0x4
- bls _081287C2
- b _081288CE
-_081287C2:
- lsls r0, 2
- ldr r1, _081287D0 @ =_081287D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081287CC: .4byte gUnknown_203B0E0
-_081287D0: .4byte _081287D4
- .align 2, 0
-_081287D4:
- .4byte _081287E8
- .4byte _081287F2
- .4byte _08128810
- .4byte _0812889C
- .4byte _081288B0
-_081287E8:
- movs r0, 0x3
- movs r1, 0
- bl sub_8129C34
- b _081287FE
-_081287F2:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
-_081287FE:
- ldr r0, _0812880C @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _081288CE
- .align 2, 0
-_0812880C: .4byte gUnknown_203B0E0
-_08128810:
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r0, 8
- lsrs r6, r0, 16
- asrs r4, r0, 16
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _08128848
- adds r0, 0x1
- cmp r4, r0
- beq _08128868
- movs r0, 0x4
- movs r1, 0
- bl sub_8129C34
- ldr r5, _08128844 @ =gUnknown_203B0E0
- ldr r2, [r5]
- ldrb r0, [r2, 0x10]
- cmp r0, r4
- beq _08128870
- cmp r4, 0x3
- ble _08128880
- b _08128870
- .align 2, 0
-_08128844: .4byte gUnknown_203B0E0
-_08128848:
- ldr r0, _08128864 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081288CE
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl Menu_MoveCursor
- b _081288CE
- .align 2, 0
-_08128864: .4byte gMain
-_08128868:
- movs r0, 0x4
- movs r1, 0
- bl sub_8129C34
-_08128870:
- ldr r0, _0812887C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _081288CE
- .align 2, 0
-_0812887C: .4byte gUnknown_203B0E0
-_08128880:
- movs r1, 0
- strb r1, [r2, 0x11]
- ldr r0, [r5]
- strb r1, [r0, 0x12]
- movs r0, 0x5
- movs r1, 0x1
- bl sub_8129C34
- ldr r0, [r5]
- strb r6, [r0, 0x10]
- ldr r1, [r5]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _081288CE
-_0812889C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129218
- b _081288CE
-_081288B0:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129218
-_081288CE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81287B4
-
- thumb_func_start sub_81288D4
-sub_81288D4: @ 81288D4
- push {r4,lr}
- ldr r0, _081288EC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0xA
- bls _081288E2
- b _08128A94
-_081288E2:
- lsls r0, 2
- ldr r1, _081288F0 @ =_081288F4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081288EC: .4byte gUnknown_203B0E0
-_081288F0: .4byte _081288F4
- .align 2, 0
-_081288F4:
- .4byte _08128920
- .4byte _08128938
- .4byte _08128954
- .4byte _0812899C
- .4byte _08128A44
- .4byte _08128A86
- .4byte _08128A94
- .4byte _08128A94
- .4byte _081289F0
- .4byte _081289B0
- .4byte _081289D4
-_08128920:
- movs r0, 0x6
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128934 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128934: .4byte gUnknown_203B0E0
-_08128938:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _08128946
- b _08128A94
-_08128946:
- ldr r0, _08128950 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128950: .4byte gUnknown_203B0E0
-_08128954:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08128966
- cmp r1, 0
- ble _08128A00
- b _08128A0A
-_08128966:
- ldr r4, _0812898C @ =gUnknown_203B0E0
- ldr r1, [r4]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08128990
- movs r2, 0xC8
- lsls r2, 1
- adds r0, r1, r2
- bl sub_8129614
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r4]
- movs r0, 0x9
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_0812898C: .4byte gUnknown_203B0E0
-_08128990:
- movs r2, 0xC8
- lsls r2, 1
- adds r0, r1, r2
- bl sub_81295C0
- b _08128A36
-_0812899C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- movs r0, 0x1
- bl sub_8129218
- b _08128A94
-_081289B0:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- movs r0, 0x14
- movs r1, 0
- bl sub_8129C34
- ldr r0, _081289D0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xA
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_081289D0: .4byte gUnknown_203B0E0
-_081289D4:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- ldr r0, _081289EC @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x8
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_081289EC: .4byte gUnknown_203B0E0
-_081289F0:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08128A24
- cmp r1, 0
- bgt _08128A0A
-_08128A00:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08128A0E
- b _08128A94
-_08128A0A:
- cmp r1, 0x1
- bne _08128A94
-_08128A0E:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128A20 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A20: .4byte gUnknown_203B0E0
-_08128A24:
- bl sub_80FA4A8
- ldr r4, _08128A40 @ =gUnknown_203B0E0
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129614
-_08128A36:
- ldr r1, [r4]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A40: .4byte gUnknown_203B0E0
-_08128A44:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128A94
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128A94
- ldr r4, _08128A7C @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r2, 0xC8
- lsls r2, 1
- adds r1, r2
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128A94
- ldr r1, [r4]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08128A80
- movs r0, 0x6
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A7C: .4byte gUnknown_203B0E0
-_08128A80:
- movs r0, 0x5
- strh r0, [r1, 0x6]
- b _08128A94
-_08128A86:
- ldr r0, _08128A9C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128A94
- movs r0, 0x9
- bl sub_8129218
-_08128A94:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128A9C: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_81288D4
-
- thumb_func_start sub_8128AA0
-sub_8128AA0: @ 8128AA0
- push {r4,lr}
- ldr r1, _08128ABC @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r2, r1, 0
- cmp r0, 0x7
- bls _08128AB0
- b _08128BFC
-_08128AB0:
- lsls r0, 2
- ldr r1, _08128AC0 @ =_08128AC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128ABC: .4byte gUnknown_203B0E0
-_08128AC0: .4byte _08128AC4
- .align 2, 0
-_08128AC4:
- .4byte _08128AE4
- .4byte _08128B08
- .4byte _08128B28
- .4byte _08128B4C
- .4byte _08128B80
- .4byte _08128BA0
- .4byte _08128BC4
- .4byte _08128BE8
-_08128AE4:
- ldr r0, _08128B00 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _08128AF2
- b _08128BFC
-_08128AF2:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128B04 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B00: .4byte sub_81298F8
-_08128B04: .4byte gUnknown_203B0E0
-_08128B08:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128BFC
- movs r0, 0x12
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128B24 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B24: .4byte gUnknown_203B0E0
-_08128B28:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128BFC
- ldr r4, _08128B48 @ =gUnknown_203B0E0
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_81295EC
- ldr r1, [r4]
- b _08128BDA
- .align 2, 0
-_08128B48: .4byte gUnknown_203B0E0
-_08128B4C:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128BFC
- ldr r4, _08128B7C @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- ldr r1, [r4]
- b _08128BDA
- .align 2, 0
-_08128B7C: .4byte gUnknown_203B0E0
-_08128B80:
- bl GetBlockReceivedStatus
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08128BFC
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128BFC
- ldr r0, _08128B9C @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B9C: .4byte gUnknown_203B0E0
-_08128BA0:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128BFC
- bl sub_800AAC0
- ldr r0, _08128BC0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- strh r4, [r1, 0xA]
- b _08128BDA
- .align 2, 0
-_08128BC0: .4byte gUnknown_203B0E0
-_08128BC4:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128BD0
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128BD0:
- ldr r0, _08128BE4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128BFC
- ldr r1, [r2]
-_08128BDA:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128BFC
- .align 2, 0
-_08128BE4: .4byte gReceivedRemoteLinkPlayers
-_08128BE8:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128BF8
- movs r0, 0x9
- bl sub_8129218
- b _08128BFC
-_08128BF8:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128BFC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128AA0
-
- thumb_func_start sub_8128C04
-sub_8128C04: @ 8128C04
- push {r4,r5,lr}
- ldr r5, _08128C1C @ =gUnknown_203B0E0
- ldr r1, [r5]
- ldrh r0, [r1, 0x6]
- cmp r0, 0x1
- beq _08128C44
- cmp r0, 0x1
- bgt _08128C20
- cmp r0, 0
- beq _08128C2A
- b _08128CA2
- .align 2, 0
-_08128C1C: .4byte gUnknown_203B0E0
-_08128C20:
- cmp r0, 0x2
- beq _08128C6E
- cmp r0, 0x3
- beq _08128C90
- b _08128CA2
-_08128C2A:
- ldr r0, _08128C40 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08128CA2
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- b _08128C80
- .align 2, 0
-_08128C40: .4byte sub_81298F8
-_08128C44:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128CA2
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128CA2
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128CA2
- bl sub_800AAC0
- ldr r1, [r5]
- strh r4, [r1, 0xA]
- b _08128C82
-_08128C6E:
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128C78
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128C78:
- ldr r0, _08128C8C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128CA2
-_08128C80:
- ldr r1, [r5]
-_08128C82:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128CA2
- .align 2, 0
-_08128C8C: .4byte gReceivedRemoteLinkPlayers
-_08128C90:
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128C9E
- movs r0, 0x9
- bl sub_8129218
- b _08128CA2
-_08128C9E:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128CA2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8128C04
-
- thumb_func_start sub_8128CA8
-sub_8128CA8: @ 8128CA8
- push {r4,lr}
- ldr r1, _08128CC0 @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _08128D9C
- lsls r0, 2
- ldr r1, _08128CC4 @ =_08128CC8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128CC0: .4byte gUnknown_203B0E0
-_08128CC4: .4byte _08128CC8
- .align 2, 0
-_08128CC8:
- .4byte _08128CDC
- .4byte _08128D08
- .4byte _08128D30
- .4byte _08128D64
- .4byte _08128D88
-_08128CDC:
- ldr r0, _08128D00 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08128D9C
- ldr r4, _08128D04 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08128CFA
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
-_08128CFA:
- ldr r1, [r4]
- b _08128D7A
- .align 2, 0
-_08128D00: .4byte sub_81298F8
-_08128D04: .4byte gUnknown_203B0E0
-_08128D08:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128D9C
- ldr r4, _08128D2C @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08128D26
- movs r0, 0x13
- movs r1, 0
- bl sub_8129C34
-_08128D26:
- ldr r1, [r4]
- b _08128D7A
- .align 2, 0
-_08128D2C: .4byte gUnknown_203B0E0
-_08128D30:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08128D9C
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128D9C
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128D9C
- bl sub_800AAC0
- ldr r0, _08128D60 @ =gUnknown_203B0E0
- ldr r1, [r0]
- strh r4, [r1, 0xA]
- b _08128D7A
- .align 2, 0
-_08128D60: .4byte gUnknown_203B0E0
-_08128D64:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128D70
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128D70:
- ldr r0, _08128D84 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128D9C
- ldr r1, [r2]
-_08128D7A:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128D9C
- .align 2, 0
-_08128D84: .4byte gReceivedRemoteLinkPlayers
-_08128D88:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128D98
- movs r0, 0x9
- bl sub_8129218
- b _08128D9C
-_08128D98:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128D9C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128CA8
-
- thumb_func_start sub_8128DA4
-sub_8128DA4: @ 8128DA4
- push {r4,lr}
- ldr r1, _08128DBC @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r4, r1, 0
- cmp r0, 0x4
- bhi _08128E70
- lsls r0, 2
- ldr r1, _08128DC0 @ =_08128DC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128DBC: .4byte gUnknown_203B0E0
-_08128DC0: .4byte _08128DC4
- .align 2, 0
-_08128DC4:
- .4byte _08128DD8
- .4byte _08128E00
- .4byte _08128E34
- .4byte _08128E42
- .4byte _08128E60
-_08128DD8:
- ldr r0, _08128DE8 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128DEC
- movs r0, 0x1
- bl sub_8129218
- b _08128E70
- .align 2, 0
-_08128DE8: .4byte gReceivedRemoteLinkPlayers
-_08128DEC:
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129590
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
-_08128E00:
- bl IsLinkTaskFinished
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08128E70
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128E70
- ldr r4, _08128E30 @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128E70
- ldr r1, [r4]
- b _08128E52
- .align 2, 0
-_08128E30: .4byte gUnknown_203B0E0
-_08128E34:
- bl sub_8129454
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- b _08128E4E
-_08128E42:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128E70
-_08128E4E:
- ldr r0, _08128E5C @ =gUnknown_203B0E0
- ldr r1, [r0]
-_08128E52:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128E70
- .align 2, 0
-_08128E5C: .4byte gUnknown_203B0E0
-_08128E60:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128E70
- movs r0, 0x1
- bl sub_8129218
-_08128E70:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128DA4
-
- thumb_func_start sub_8128E78
-sub_8128E78: @ 8128E78
- push {r4,lr}
- ldr r0, _08128E90 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0x6
- bls _08128E86
- b _08128FA8
-_08128E86:
- lsls r0, 2
- ldr r1, _08128E94 @ =_08128E98
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128E90: .4byte gUnknown_203B0E0
-_08128E94: .4byte _08128E98
- .align 2, 0
-_08128E98:
- .4byte _08128EB4
- .4byte _08128EE4
- .4byte _08128F38
- .4byte _08128F50
- .4byte _08128F60
- .4byte _08128F74
- .4byte _08128F8C
-_08128EB4:
- bl sub_8129408
- cmp r0, 0
- beq _08128ED0
- movs r0, 0x9
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128ECC @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- b _08128FA6
- .align 2, 0
-_08128ECC: .4byte gUnknown_203B0E0
-_08128ED0:
- movs r0, 0xD
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128EE0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x5
- b _08128FA6
- .align 2, 0
-_08128EE0: .4byte gUnknown_203B0E0
-_08128EE4:
- ldr r0, _08128F04 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08128F0C
- bl sub_8129424
- movs r0, 0xB
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128F08 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- b _08128FA6
- .align 2, 0
-_08128F04: .4byte gMain
-_08128F08: .4byte gUnknown_203B0E0
-_08128F0C:
- movs r4, 0x2
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08128F1A
- movs r0, 0xA
- b _08128F9A
-_08128F1A:
- bl sub_8129228
- cmp r0, 0
- beq _08128FA8
- movs r0, 0x1
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128F34 @ =gUnknown_203B0E0
- ldr r0, [r0]
- strh r4, [r0, 0x6]
- b _08128FA8
- .align 2, 0
-_08128F34: .4byte gUnknown_203B0E0
-_08128F38:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- ldr r0, _08128F4C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x1
- b _08128FA6
- .align 2, 0
-_08128F4C: .4byte gUnknown_203B0E0
-_08128F50:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- movs r0, 0xA
- b _08128F9A
-_08128F60:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- movs r0, 0x1
- bl sub_8129218
- b _08128FA8
-_08128F74:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- ldr r0, _08128F88 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x6
- b _08128FA6
- .align 2, 0
-_08128F88: .4byte gUnknown_203B0E0
-_08128F8C:
- ldr r0, _08128FB0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08128FA8
- movs r0, 0x7
-_08128F9A:
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128FB4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x4
-_08128FA6:
- strh r0, [r1, 0x6]
-_08128FA8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128FB0: .4byte gMain
-_08128FB4: .4byte gUnknown_203B0E0
- thumb_func_end sub_8128E78
-
- thumb_func_start sub_8128FB8
-sub_8128FB8: @ 8128FB8
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08128FD4 @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r4, r1, 0
- cmp r0, 0xD
- bls _08128FCA
- b _08129206
-_08128FCA:
- lsls r0, 2
- ldr r1, _08128FD8 @ =_08128FDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128FD4: .4byte gUnknown_203B0E0
-_08128FD8: .4byte _08128FDC
- .align 2, 0
-_08128FDC:
- .4byte _08129014
- .4byte _0812902E
- .4byte _08129054
- .4byte _08129098
- .4byte _081290BC
- .4byte _081290D8
- .4byte _0812911C
- .4byte _08129144
- .4byte _08129168
- .4byte _08129180
- .4byte _081291A4
- .4byte _081291B2
- .4byte _081291C8
- .4byte _081291E8
-_08129014:
- ldr r1, [r4]
- ldrb r0, [r1, 0x18]
- cmp r0, 0
- bne _0812901E
- b _081291C2
-_0812901E:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r4]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _08129206
-_0812902E:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _0812903C
- b _08129206
-_0812903C:
- movs r0, 0xE
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129050 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129050: .4byte gUnknown_203B0E0
-_08129054:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08129080
- cmp r1, 0
- bgt _0812906E
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08129074
- b _08129206
-_0812906E:
- cmp r1, 0x1
- beq _08129074
- b _08129206
-_08129074:
- ldr r0, _0812907C @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _081291C2
- .align 2, 0
-_0812907C: .4byte gUnknown_203B0E0
-_08129080:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129094 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129094: .4byte gUnknown_203B0E0
-_08129098:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _081290A6
- b _08129206
-_081290A6:
- movs r0, 0xF
- movs r1, 0
- bl sub_8129C34
- ldr r0, _081290B8 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081290B8: .4byte gUnknown_203B0E0
-_081290BC:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _081290CA
- b _08129206
-_081290CA:
- ldr r0, _081290D4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x5
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081290D4: .4byte gUnknown_203B0E0
-_081290D8:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08129104
- cmp r1, 0
- bgt _081290F2
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _081290F8
- b _08129206
-_081290F2:
- cmp r1, 0x1
- beq _081290F8
- b _08129206
-_081290F8:
- ldr r0, _08129100 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _081291C2
- .align 2, 0
-_08129100: .4byte gUnknown_203B0E0
-_08129104:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129118 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x6
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129118: .4byte gUnknown_203B0E0
-_0812911C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- movs r0, 0x10
- movs r1, 0
- bl sub_8129C34
- bl sub_8129470
- ldr r0, _08129140 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x7
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129140: .4byte gUnknown_203B0E0
-_08129144:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- bl SetContinueGameWarpStatusToDynamicWarp
- movs r0, 0
- bl TrySavingData
- ldr r0, _08129164 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x8
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129164: .4byte gUnknown_203B0E0
-_08129168:
- movs r0, 0x11
- movs r1, 0
- bl sub_8129C34
- ldr r0, _0812917C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x9
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_0812917C: .4byte gUnknown_203B0E0
-_08129180:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- movs r0, 0x30
- bl PlaySE
- bl ClearContinueGameWarpStatus2
- ldr r0, _081291A0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xA
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081291A0: .4byte gUnknown_203B0E0
-_081291A4:
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x19]
- ldr r1, [r4]
- movs r0, 0xB
- strh r0, [r1, 0x6]
- b _08129206
-_081291B2:
- ldr r0, [r4]
- ldrb r1, [r0, 0x19]
- adds r1, 0x1
- strb r1, [r0, 0x19]
- ldr r1, [r4]
- ldrb r0, [r1, 0x19]
- cmp r0, 0x78
- bls _08129206
-_081291C2:
- movs r0, 0xC
- strh r0, [r1, 0x6]
- b _08129206
-_081291C8:
- movs r1, 0x1
- negs r1, r1
- movs r0, 0
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _081291E4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xD
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081291E4: .4byte gUnknown_203B0E0
-_081291E8:
- ldr r0, _08129210 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08129206
- bl sub_812B4B8
- bl sub_8129B88
- bl sub_81284BC
- ldr r0, _08129214 @ =CB2_ReturnToField
- bl SetMainCallback2
-_08129206:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129210: .4byte gPaletteFade
-_08129214: .4byte CB2_ReturnToField
- thumb_func_end sub_8128FB8
-
- thumb_func_start sub_8129218
-sub_8129218: @ 8129218
- ldr r1, _08129224 @ =gUnknown_203B0E0
- ldr r1, [r1]
- movs r2, 0
- strh r0, [r1, 0x4]
- strh r2, [r1, 0x6]
- bx lr
- .align 2, 0
-_08129224: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129218
-
- thumb_func_start sub_8129228
-sub_8129228: @ 8129228
- push {lr}
- ldr r0, _08129258 @ =gMain
- ldrh r2, [r0, 0x30]
- movs r0, 0x40
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- bne _081292B2
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08129268
- ldr r0, _0812925C @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldr r1, _08129260 @ =gUnknown_845A8A8
- ldrb r0, [r2, 0x10]
- adds r0, r1
- ldrb r1, [r2, 0x12]
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08129264
- adds r0, r1, 0x1
- b _081292CC
- .align 2, 0
-_08129258: .4byte gMain
-_0812925C: .4byte gUnknown_203B0E0
-_08129260: .4byte gUnknown_845A8A8
-_08129264:
- strb r3, [r2, 0x12]
- b _081292CE
-_08129268:
- ldr r0, _0812928C @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x10]
- cmp r0, 0x3
- beq _081292AE
- movs r0, 0x20
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- beq _08129296
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _08129290
- subs r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
- .align 2, 0
-_0812928C: .4byte gUnknown_203B0E0
-_08129290:
- movs r0, 0x4
- strb r0, [r1, 0x11]
- b _081292CE
-_08129296:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _081292AE
- ldrb r0, [r1, 0x11]
- cmp r0, 0x3
- bhi _081292AA
- adds r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
-_081292AA:
- strb r3, [r1, 0x11]
- b _081292CE
-_081292AE:
- movs r0, 0
- b _081292D0
-_081292B2:
- ldr r0, _081292C0 @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldrb r0, [r2, 0x12]
- cmp r0, 0
- beq _081292C4
- subs r0, 0x1
- b _081292CC
- .align 2, 0
-_081292C0: .4byte gUnknown_203B0E0
-_081292C4:
- ldr r0, _081292D4 @ =gUnknown_845A8A8
- ldrb r1, [r2, 0x10]
- adds r1, r0
- ldrb r0, [r1]
-_081292CC:
- strb r0, [r2, 0x12]
-_081292CE:
- movs r0, 0x1
-_081292D0:
- pop {r1}
- bx r1
- .align 2, 0
-_081292D4: .4byte gUnknown_845A8A8
- thumb_func_end sub_8129228
-
- thumb_func_start sub_81292D8
-sub_81292D8: @ 81292D8
- push {r4-r6,lr}
- sub sp, 0x18
- ldr r0, _08129318 @ =gUnknown_203B0E0
- ldr r5, [r0]
- ldrb r0, [r5, 0x10]
- cmp r0, 0x3
- beq _08129320
- ldr r3, _0812931C @ =gUnknown_845A9AC
- ldrb r1, [r5, 0x12]
- lsls r1, 2
- adds r2, r0, 0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r1, r3
- ldr r4, [r1]
- ldrb r0, [r5, 0x11]
- cmp r0, 0
- beq _08129312
- adds r1, r0, 0
-_08129302:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _0812930A
- adds r4, 0x1
-_0812930A:
- adds r4, 0x1
- subs r1, 0x1
- cmp r1, 0
- bne _08129302
-_08129312:
- movs r5, 0x1
- b _08129346
- .align 2, 0
-_08129318: .4byte gUnknown_203B0E0
-_0812931C: .4byte gUnknown_845A9AC
-_08129320:
- ldrb r0, [r5, 0x12]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- adds r1, r5, r1
- mov r0, sp
- bl StringCopy
- movs r1, 0
- strb r1, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x1]
- mov r4, sp
- mov r0, sp
- bl StringLength_Multibyte
- adds r5, r0, 0
-_08129346:
- ldr r6, _081293A8 @ =gUnknown_203B0E0
- ldr r1, [r6]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- cmp r4, 0
- beq _0812939E
- bl sub_81294C8
- adds r2, r0, 0
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r6]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bhi _0812939A
- adds r3, r6, 0
-_0812936C:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _08129378
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
-_08129378:
- ldrb r0, [r4]
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
- ldr r1, [r3]
- ldrb r0, [r1, 0x15]
- adds r0, 0x1
- strb r0, [r1, 0x15]
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r3]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bls _0812936C
-_0812939A:
- movs r0, 0xFF
- strb r0, [r2]
-_0812939E:
- add sp, 0x18
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081293A8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81292D8
-
- thumb_func_start sub_81293AC
-sub_81293AC: @ 81293AC
- push {r4,lr}
- ldr r4, _081293D4 @ =gUnknown_203B0E0
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- ldr r0, [r4]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- beq _081293CE
- bl sub_81294EC
- movs r1, 0xFF
- strb r1, [r0]
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x15]
-_081293CE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081293D4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81293AC
-
- thumb_func_start sub_81293D8
-sub_81293D8: @ 81293D8
- push {lr}
- ldr r0, _08129400 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x14]
- bl sub_81294EC
- adds r2, r0, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- beq _081293FC
- ldr r1, _08129404 @ =gUnknown_845A8AC
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _081293FC
- strb r0, [r2]
-_081293FC:
- pop {r0}
- bx r0
- .align 2, 0
-_08129400: .4byte gUnknown_203B0E0
-_08129404: .4byte gUnknown_845A8AC
- thumb_func_end sub_81293D8
-
- thumb_func_start sub_8129408
-sub_8129408: @ 8129408
- push {lr}
- ldr r0, _08129418 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- bne _0812941C
- movs r0, 0
- b _0812941E
- .align 2, 0
-_08129418: .4byte gUnknown_203B0E0
-_0812941C:
- movs r0, 0x1
-_0812941E:
- pop {r1}
- bx r1
- thumb_func_end sub_8129408
-
- thumb_func_start sub_8129424
-sub_8129424: @ 8129424
- push {r4,lr}
- bl sub_8129758
- adds r1, r0, 0
- ldr r4, _08129450 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r3, [r0, 0x12]
- lsls r2, r3, 2
- adds r2, r3
- lsls r2, 2
- adds r2, r3
- adds r2, 0xB9
- adds r0, r2
- bl StringCopy
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0x18]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129450: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129424
-
- thumb_func_start sub_8129454
-sub_8129454: @ 8129454
- ldr r1, _0812946C @ =gUnknown_203B0E0
- ldr r2, [r1]
- movs r0, 0xFF
- strb r0, [r2, 0x1A]
- ldr r2, [r1]
- movs r3, 0
- movs r0, 0xF
- strb r0, [r2, 0x14]
- ldr r0, [r1]
- strb r3, [r0, 0x15]
- bx lr
- .align 2, 0
-_0812946C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129454
-
- thumb_func_start sub_8129470
-sub_8129470: @ 8129470
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _081294A4 @ =gSaveBlock1Ptr
- mov r8, r0
- ldr r7, _081294A8 @ =gUnknown_203B0E0
- movs r6, 0xB9
- ldr r5, _081294AC @ =0x00003ad4
- movs r4, 0x9
-_08129482:
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
- ldr r1, [r7]
- adds r1, r6
- bl StringCopy
- adds r6, 0x15
- adds r5, 0x15
- subs r4, 0x1
- cmp r4, 0
- bge _08129482
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081294A4: .4byte gSaveBlock1Ptr
-_081294A8: .4byte gUnknown_203B0E0
-_081294AC: .4byte 0x00003ad4
- thumb_func_end sub_8129470
-
- thumb_func_start sub_81294B0
-sub_81294B0: @ 81294B0
- ldr r2, _081294C4 @ =gUnknown_203B0E0
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- ldr r0, [r2]
- adds r0, r1
- bx lr
- .align 2, 0
-_081294C4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294B0
-
- thumb_func_start sub_81294C8
-sub_81294C8: @ 81294C8
- push {lr}
- ldr r0, _081294E8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _081294E0
-_081294D8:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294D8
-_081294E0:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_081294E8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294C8
-
- thumb_func_start sub_81294EC
-sub_81294EC: @ 81294EC
- push {lr}
- ldr r0, _08129518 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0x1A
- adds r1, r2, 0
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _08129510
-_081294FE:
- adds r2, r1, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- bne _08129508
- adds r1, r2, 0x1
-_08129508:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294FE
-_08129510:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08129518: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294EC
-
- thumb_func_start sub_812951C
-sub_812951C: @ 812951C
- push {r4,lr}
- ldr r4, _0812955C @ =gUnknown_203B0E0
- ldr r0, [r4]
- adds r0, 0x1A
- bl StringLength_Multibyte
- adds r2, r0, 0
- ldr r0, [r4]
- adds r1, r0, 0
- adds r1, 0x1A
- movs r4, 0
- cmp r2, 0xA
- bls _08129550
- subs r2, 0xA
- movs r3, 0
- cmp r4, r2
- bcs _08129550
-_0812953E:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _08129546
- adds r1, 0x1
-_08129546:
- adds r1, 0x1
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- bcc _0812953E
-_08129550:
- lsls r0, r4, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812955C: .4byte gUnknown_203B0E0
- thumb_func_end sub_812951C
-
- thumb_func_start sub_8129560
-sub_8129560: @ 8129560
- movs r1, 0
- strb r1, [r0]
- bx lr
- thumb_func_end sub_8129560
-
- thumb_func_start sub_8129568
-sub_8129568: @ 8129568
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _08129588 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _0812958C @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129588: .4byte gSaveBlock2Ptr
-_0812958C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129568
-
- thumb_func_start sub_8129590
-sub_8129590: @ 8129590
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _081295B8 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- adds r4, 0x9
- ldr r0, _081295BC @ =gUnknown_203B0E0
- ldr r1, [r0]
- adds r1, 0x1A
- adds r0, r4, 0
- bl StringCopy
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081295B8: .4byte gSaveBlock2Ptr
-_081295BC: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129590
-
- thumb_func_start sub_81295C0
-sub_81295C0: @ 81295C0
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x3
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _081295E4 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _081295E8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- bl sub_80FB9D0
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081295E4: .4byte gSaveBlock2Ptr
-_081295E8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81295C0
-
- thumb_func_start sub_81295EC
-sub_81295EC: @ 81295EC
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x4
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _0812960C @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _08129610 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812960C: .4byte gSaveBlock2Ptr
-_08129610: .4byte gUnknown_203B0E0
- thumb_func_end sub_81295EC
-
- thumb_func_start sub_8129614
-sub_8129614: @ 8129614
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _08129634 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _08129638 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129634: .4byte gSaveBlock2Ptr
-_08129638: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129614
-
- thumb_func_start sub_812963C
-sub_812963C: @ 812963C
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- ldrb r0, [r5]
- adds r1, r0, 0
- adds r4, r5, 0x1
- adds r5, r4, 0
- adds r5, 0x8
- cmp r0, 0x2
- beq _08129664
- cmp r0, 0x2
- bgt _0812965A
- cmp r0, 0x1
- beq _08129688
- b _081296EC
-_0812965A:
- cmp r1, 0x3
- beq _081296BE
- cmp r1, 0x5
- beq _081296B2
- b _081296EC
-_08129664:
- ldr r0, _08129680 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- ldrb r1, [r4, 0x8]
- cmp r0, r1
- beq _081296EC
- bl DynamicPlaceholderTextUtil_Reset
- movs r0, 0
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- ldr r1, _08129684 @ =gUnknown_841B3AA
- b _081296D8
- .align 2, 0
-_08129680: .4byte gUnknown_203B0E0
-_08129684: .4byte gUnknown_841B3AA
-_08129688:
- adds r0, r6, 0
- adds r1, r4, 0
- bl StringCopy
- movs r1, 0xFC
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x13
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x2A
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0xF0
- strb r1, [r0]
- adds r0, 0x1
- adds r1, r5, 0
- bl StringCopy
- movs r0, 0x1
- b _081296EE
-_081296B2:
- ldr r0, _081296E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x79
- adds r1, r4, 0
- bl StringCopy
-_081296BE:
- ldr r0, _081296E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- ldrb r5, [r5]
- cmp r0, r5
- beq _081296EC
- bl DynamicPlaceholderTextUtil_Reset
- movs r0, 0
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- ldr r1, _081296E8 @ =gUnknown_841B3BE
-_081296D8:
- adds r0, r6, 0
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- movs r0, 0x1
- b _081296EE
- .align 2, 0
-_081296E4: .4byte gUnknown_203B0E0
-_081296E8: .4byte gUnknown_841B3BE
-_081296EC:
- movs r0, 0
-_081296EE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_812963C
-
- thumb_func_start sub_81296F4
-sub_81296F4: @ 81296F4
- ldr r0, _081296FC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x10]
- bx lr
- .align 2, 0
-_081296FC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81296F4
-
- thumb_func_start sub_8129700
-sub_8129700: @ 8129700
- ldr r2, _08129710 @ =gUnknown_203B0E0
- ldr r3, [r2]
- ldrb r2, [r3, 0x11]
- strb r2, [r0]
- ldrb r0, [r3, 0x12]
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08129710: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129700
-
- thumb_func_start sub_8129714
-sub_8129714: @ 8129714
- ldr r0, _0812971C @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x1A
- bx lr
- .align 2, 0
-_0812971C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129714
-
- thumb_func_start sub_8129720
-sub_8129720: @ 8129720
- push {lr}
- bl sub_8129714
- bl StringLength_Multibyte
- pop {r1}
- bx r1
- thumb_func_end sub_8129720
-
- thumb_func_start sub_8129730
-sub_8129730: @ 8129730
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08129748 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r3, [r0, 0x15]
- ldrb r2, [r0, 0x14]
- subs r0, r3, r2
- cmp r0, 0
- bge _0812974C
- negs r0, r0
- str r3, [r4]
- b _0812974E
- .align 2, 0
-_08129748: .4byte gUnknown_203B0E0
-_0812974C:
- str r2, [r4]
-_0812974E:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8129730
-
- thumb_func_start sub_8129758
-sub_8129758: @ 8129758
- push {lr}
- bl sub_812951C
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _08129784 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- cmp r2, 0
- beq _0812977E
-_0812976E:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _08129776
- adds r1, 0x1
-_08129776:
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bne _0812976E
-_0812977E:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08129784: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129758
-
- thumb_func_start sub_8129788
-sub_8129788: @ 8129788
- push {r4,lr}
- bl sub_812951C
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _081297C0 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- movs r2, 0
- movs r3, 0
- cmp r2, r4
- bcs _081297B8
-_081297A2:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _081297AA
- adds r1, 0x1
-_081297AA:
- adds r1, 0x1
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- adds r3, 0x1
- cmp r3, r4
- bcc _081297A2
-_081297B8:
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081297C0: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129788
-
- thumb_func_start sub_81297C4
-sub_81297C4: @ 81297C4
- ldr r0, _081297CC @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x39
- bx lr
- .align 2, 0
-_081297CC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297C4
-
- thumb_func_start sub_81297D0
-sub_81297D0: @ 81297D0
- ldr r0, _081297D8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x16]
- bx lr
- .align 2, 0
-_081297D8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297D0
-
- thumb_func_start sub_81297DC
-sub_81297DC: @ 81297DC
- ldr r0, _081297E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- bx lr
- .align 2, 0
-_081297E4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297DC
-
- thumb_func_start sub_81297E8
-sub_81297E8: @ 81297E8
- push {lr}
- bl sub_81294EC
- ldrb r1, [r0]
- cmp r1, 0xFF
- bhi _08129802
- ldr r0, _08129808 @ =gUnknown_845A8AC
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, r1
- beq _08129802
- cmp r0, 0
- bne _0812980C
-_08129802:
- movs r0, 0x3
- b _0812980E
- .align 2, 0
-_08129808: .4byte gUnknown_845A8AC
-_0812980C:
- movs r0, 0
-_0812980E:
- pop {r1}
- bx r1
- thumb_func_end sub_81297E8
-
- thumb_func_start sub_8129814
-sub_8129814: @ 8129814
- ldr r0, _0812981C @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x79
- bx lr
- .align 2, 0
-_0812981C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129814
-
- thumb_func_start copy_strings_to_sav1
-copy_strings_to_sav1: @ 8129820
- push {r4,lr}
- ldr r4, _081298A4 @ =gSaveBlock1Ptr
- ldr r0, [r4]
- ldr r1, _081298A8 @ =0x00003ad4
- adds r0, r1
- ldr r1, _081298AC @ =gUnknown_841B510
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298B0 @ =0x00003ae9
- adds r0, r1
- ldr r1, _081298B4 @ =gUnknown_841B516
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298B8 @ =0x00003afe
- adds r0, r1
- ldr r1, _081298BC @ =gUnknown_841B51E
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298C0 @ =0x00003b13
- adds r0, r1
- ldr r1, _081298C4 @ =gUnknown_841B524
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298C8 @ =0x00003b28
- adds r0, r1
- ldr r1, _081298CC @ =gUnknown_841B52B
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298D0 @ =0x00003b3d
- adds r0, r1
- ldr r1, _081298D4 @ =gUnknown_841B531
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298D8 @ =0x00003b52
- adds r0, r1
- ldr r1, _081298DC @ =gUnknown_841B535
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298E0 @ =0x00003b67
- adds r0, r1
- ldr r1, _081298E4 @ =gUnknown_841B53B
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298E8 @ =0x00003b7c
- adds r0, r1
- ldr r1, _081298EC @ =gUnknown_841B541
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298F0 @ =0x00003b91
- adds r0, r1
- ldr r1, _081298F4 @ =gUnknown_841B54B
- bl StringCopy
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081298A4: .4byte gSaveBlock1Ptr
-_081298A8: .4byte 0x00003ad4
-_081298AC: .4byte gUnknown_841B510
-_081298B0: .4byte 0x00003ae9
-_081298B4: .4byte gUnknown_841B516
-_081298B8: .4byte 0x00003afe
-_081298BC: .4byte gUnknown_841B51E
-_081298C0: .4byte 0x00003b13
-_081298C4: .4byte gUnknown_841B524
-_081298C8: .4byte 0x00003b28
-_081298CC: .4byte gUnknown_841B52B
-_081298D0: .4byte 0x00003b3d
-_081298D4: .4byte gUnknown_841B531
-_081298D8: .4byte 0x00003b52
-_081298DC: .4byte gUnknown_841B535
-_081298E0: .4byte 0x00003b67
-_081298E4: .4byte gUnknown_841B53B
-_081298E8: .4byte 0x00003b7c
-_081298EC: .4byte gUnknown_841B541
-_081298F0: .4byte 0x00003b91
-_081298F4: .4byte gUnknown_841B54B
- thumb_func_end copy_strings_to_sav1
-
- thumb_func_start sub_81298F8
-sub_81298F8: @ 81298F8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0812991C @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bls _08129912
- b _08129B08
-_08129912:
- lsls r0, 2
- ldr r1, _08129920 @ =_08129924
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0812991C: .4byte gTasks+0x8
-_08129920: .4byte _08129924
- .align 2, 0
-_08129924:
- .4byte _08129944
- .4byte _08129952
- .4byte _08129AEC
- .4byte _081299A0
- .4byte _08129A8C
- .4byte _08129AC4
- .4byte _08129AD8
- .4byte _08129A7C
-_08129944:
- ldr r0, _08129978 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0812994E
- b _08129AE0
-_0812994E:
- movs r0, 0x1
- strh r0, [r4]
-_08129952:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- strh r0, [r4, 0x8]
- ldr r3, _0812997C @ =gUnknown_203B0E0
- ldr r0, [r3]
- ldrb r1, [r0, 0xD]
- movs r5, 0x8
- ldrsh r0, [r4, r5]
- cmp r1, r0
- beq _08129980
- movs r0, 0x2
- strh r0, [r4]
- ldr r0, [r3]
- strb r2, [r0, 0xD]
- b _08129B08
- .align 2, 0
-_08129978: .4byte gReceivedRemoteLinkPlayers
-_0812997C: .4byte gUnknown_203B0E0
-_08129980:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x6]
- cmp r0, 0
- bne _08129998
- bl sub_80FBA1C
- cmp r0, 0
- beq _08129998
- b _08129B08
-_08129998:
- movs r0, 0
- strh r0, [r4, 0x2]
- movs r0, 0x3
- strh r0, [r4]
-_081299A0:
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bgt _081299DA
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- movs r3, 0x2
- ldrsh r1, [r4, r3]
- asrs r0, r1
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081299DA
- movs r2, 0x1
-_081299BC:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bgt _081299DA
- movs r5, 0x6
- ldrsh r0, [r4, r5]
- movs r3, 0x2
- ldrsh r1, [r4, r3]
- asrs r0, r1
- ands r0, r2
- cmp r0, 0
- beq _081299BC
-_081299DA:
- ldrh r1, [r4, 0x2]
- movs r5, 0x2
- ldrsh r0, [r4, r5]
- cmp r0, 0x5
- bne _081299E6
- b _08129B04
-_081299E6:
- strh r1, [r4, 0x4]
- lsls r0, r1, 24
- lsrs r0, 24
- bl ResetBlockReceivedFlag
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- lsls r0, 8
- ldr r1, _08129A0C @ =gBlockRecvBuffer
- adds r0, r1
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0x4
- bhi _08129A28
- lsls r0, 2
- ldr r1, _08129A10 @ =_08129A14
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08129A0C: .4byte gBlockRecvBuffer
-_08129A10: .4byte _08129A14
- .align 2, 0
-_08129A14:
- .4byte _08129A28
- .4byte _08129A2C
- .4byte _08129A30
- .4byte _08129A34
- .4byte _08129A38
-_08129A28:
- movs r0, 0x3
- b _08129A3A
-_08129A2C:
- movs r0, 0x3
- b _08129A3A
-_08129A30:
- movs r0, 0x4
- b _08129A3A
-_08129A34:
- movs r0, 0x5
- b _08129A3A
-_08129A38:
- movs r0, 0x6
-_08129A3A:
- strh r0, [r4, 0xA]
- ldr r5, _08129A68 @ =gUnknown_203B0E0
- ldr r0, [r5]
- adds r0, 0x39
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- lsls r1, 8
- ldr r2, _08129A6C @ =gBlockRecvBuffer
- adds r1, r2
- bl sub_812963C
- cmp r0, 0
- beq _08129A70
- ldr r0, [r5]
- ldrh r1, [r4, 0x2]
- strb r1, [r0, 0x16]
- movs r0, 0xC
- movs r1, 0x2
- bl sub_8129C34
- movs r0, 0x7
- b _08129A72
- .align 2, 0
-_08129A68: .4byte gUnknown_203B0E0
-_08129A6C: .4byte gBlockRecvBuffer
-_08129A70:
- ldrh r0, [r4, 0xA]
-_08129A72:
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- b _08129B08
-_08129A7C:
- movs r0, 0x2
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129B08
- ldrh r0, [r4, 0xA]
- b _08129B06
-_08129A8C:
- ldr r6, _08129AB4 @ =gUnknown_203B0E0
- ldr r0, [r6]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- bne _08129AC0
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _08129AC0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08129AB8
- bl sub_80FA4A8
- ldr r1, [r6]
- movs r0, 0x1
- b _08129ADE
- .align 2, 0
-_08129AB4: .4byte gUnknown_203B0E0
-_08129AB8:
- movs r5, 0x4
- ldrsh r0, [r4, r5]
- bl sub_80FBD6C
-_08129AC0:
- movs r0, 0x3
- b _08129B06
-_08129AC4:
- ldr r0, _08129AD4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _08129AE0
- movs r0, 0x2
- b _08129ADE
- .align 2, 0
-_08129AD4: .4byte gUnknown_203B0E0
-_08129AD8:
- ldr r0, _08129AE8 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
-_08129ADE:
- strb r0, [r1, 0x17]
-_08129AE0:
- adds r0, r5, 0
- bl DestroyTask
- b _08129B08
- .align 2, 0
-_08129AE8: .4byte gUnknown_203B0E0
-_08129AEC:
- bl sub_80FBA1C
- cmp r0, 0
- bne _08129B08
- ldr r0, _08129B10 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08129B04
- ldrb r0, [r1, 0xD]
- bl sub_80FB030
-_08129B04:
- movs r0, 0x1
-_08129B06:
- strh r0, [r4]
-_08129B08:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08129B10: .4byte gUnknown_203B0E0
- thumb_func_end sub_81298F8
-
- thumb_func_start sub_8129B14
-sub_8129B14: @ 8129B14
- push {r4,lr}
- ldr r4, _08129B60 @ =gUnknown_203B0E4
- ldr r0, _08129B64 @ =0x00002168
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _08129B70
- bl sub_812AE70
- cmp r0, 0
- beq _08129B70
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08129B68 @ =gUnknown_845AA84
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- ldr r0, _08129B6C @ =gUnknown_845AA94
- bl InitWindows
- bl ResetTempTileDataBuffers
- bl sub_812AD50
- ldr r0, [r4]
- bl sub_8129BB8
- bl sub_8129BC4
- movs r0, 0
- movs r1, 0
- bl sub_8129C34
- movs r0, 0x1
- b _08129B72
- .align 2, 0
-_08129B60: .4byte gUnknown_203B0E4
-_08129B64: .4byte 0x00002168
-_08129B68: .4byte gUnknown_845AA84
-_08129B6C: .4byte gUnknown_845AA94
-_08129B70:
- movs r0, 0
-_08129B72:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129B14
-
- thumb_func_start sub_8129B78
-sub_8129B78: @ 8129B78
- push {lr}
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8129B78
-
- thumb_func_start sub_8129B88
-sub_8129B88: @ 8129B88
- push {r4,lr}
- bl sub_812AEB0
- ldr r4, _08129BB0 @ =gUnknown_203B0E4
- ldr r0, [r4]
- cmp r0, 0
- beq _08129B9E
- bl Free
- movs r0, 0
- str r0, [r4]
-_08129B9E:
- bl FreeAllWindowBuffers
- ldr r1, _08129BB4 @ =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129BB0: .4byte gUnknown_203B0E4
-_08129BB4: .4byte gScanlineEffect
- thumb_func_end sub_8129B88
-
- thumb_func_start sub_8129BB8
-sub_8129BB8: @ 8129BB8
- movs r2, 0
- movs r1, 0xFF
- strh r1, [r0, 0x18]
- strh r1, [r0, 0x1E]
- strh r2, [r0, 0x1A]
- bx lr
- thumb_func_end sub_8129BB8
-
- thumb_func_start sub_8129BC4
-sub_8129BC4: @ 8129BC4
- push {r4,r5,lr}
- ldr r1, _08129BF4 @ =gUnknown_203B0E4
- ldr r0, [r1]
- cmp r0, 0
- beq _08129BEC
- movs r2, 0
- adds r4, r1, 0
- ldr r5, _08129BF8 @ =sub_812A420
- movs r3, 0
-_08129BD6:
- ldr r0, [r4]
- lsls r1, r2, 3
- adds r0, r1
- str r5, [r0]
- strb r3, [r0, 0x4]
- ldr r0, [r4]
- adds r0, r1
- strb r3, [r0, 0x5]
- adds r2, 0x1
- cmp r2, 0x2
- ble _08129BD6
-_08129BEC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08129BF4: .4byte gUnknown_203B0E4
-_08129BF8: .4byte sub_812A420
- thumb_func_end sub_8129BC4
-
- thumb_func_start sub_8129BFC
-sub_8129BFC: @ 8129BFC
- push {r4-r6,lr}
- ldr r1, _08129C30 @ =gUnknown_203B0E4
- ldr r0, [r1]
- cmp r0, 0
- beq _08129C2A
- movs r5, 0
- adds r6, r1, 0
-_08129C0A:
- ldr r0, [r6]
- lsls r4, r5, 3
- adds r1, r0, r4
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08129C24
- adds r0, r1, 0x5
- ldr r1, [r1]
- bl _call_via_r1
- ldr r1, [r6]
- adds r1, r4
- strb r0, [r1, 0x4]
-_08129C24:
- adds r5, 0x1
- cmp r5, 0x2
- ble _08129C0A
-_08129C2A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08129C30: .4byte gUnknown_203B0E4
- thumb_func_end sub_8129BFC
-
- thumb_func_start sub_8129C34
-sub_8129C34: @ 8129C34
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- ldr r3, _08129C70 @ =gUnknown_203B0E4
- ldr r0, [r3]
- lsrs r1, 21
- adds r0, r1
- ldr r2, _08129C74 @ =sub_812A420
- str r2, [r0]
- movs r4, 0
- adds r5, r3, 0
- adds r3, r1, 0
- mov r12, r4
- ldr r1, _08129C78 @ =gUnknown_845AABC
- movs r7, 0x1
- adds r2, r1, 0x4
-_08129C56:
- ldrh r0, [r1]
- cmp r0, r6
- bne _08129C7C
- ldr r1, [r5]
- adds r1, r3
- ldr r0, [r2]
- str r0, [r1]
- strb r7, [r1, 0x4]
- ldr r0, [r5]
- adds r0, r3
- mov r1, r12
- strb r1, [r0, 0x5]
- b _08129C86
- .align 2, 0
-_08129C70: .4byte gUnknown_203B0E4
-_08129C74: .4byte sub_812A420
-_08129C78: .4byte gUnknown_845AABC
-_08129C7C:
- adds r1, 0x8
- adds r2, 0x8
- adds r4, 0x1
- cmp r4, 0x14
- bls _08129C56
-_08129C86:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8129C34
-
- thumb_func_start sub_8129C8C
-sub_8129C8C: @ 8129C8C
- lsls r0, 24
- ldr r1, _08129C9C @ =gUnknown_203B0E4
- ldr r1, [r1]
- lsrs r0, 21
- adds r1, r0
- ldrb r0, [r1, 0x4]
- bx lr
- .align 2, 0
-_08129C9C: .4byte gUnknown_203B0E4
- thumb_func_end sub_8129C8C
-
- thumb_func_start sub_8129CA0
-sub_8129CA0: @ 8129CA0
- push {r4,lr}
- adds r4, r0, 0
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08129D36
- ldrb r0, [r4]
- cmp r0, 0x6
- bhi _08129D2C
- lsls r0, 2
- ldr r1, _08129CC0 @ =_08129CC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08129CC0: .4byte _08129CC4
- .align 2, 0
-_08129CC4:
- .4byte _08129CE0
- .4byte _08129CEA
- .4byte _08129CF0
- .4byte _08129CF6
- .4byte _08129CFC
- .4byte _08129D02
- .4byte _08129D14
-_08129CE0:
- bl sub_812AAD4
- bl sub_812AB8C
- b _08129D30
-_08129CEA:
- bl sub_812ABD8
- b _08129D30
-_08129CF0:
- bl sub_812AC08
- b _08129D30
-_08129CF6:
- bl sub_812AC58
- b _08129D30
-_08129CFC:
- bl sub_812AC9C
- b _08129D30
-_08129D02:
- bl sub_812ACC0
- bl sub_812ACEC
- bl sub_812AD20
- bl sub_812AD04
- b _08129D30
-_08129D14:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129D30
- bl sub_812AEC8
- bl sub_812B048
- bl sub_812B100
- b _08129D30
-_08129D2C:
- movs r0, 0
- b _08129D38
-_08129D30:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129D36:
- movs r0, 0x1
-_08129D38:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129CA0
-
- thumb_func_start sub_8129D40
-sub_8129D40: @ 8129D40
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129D50
- cmp r0, 0x1
- beq _08129D5E
- b _08129D68
-_08129D50:
- bl sub_812AA10
- movs r0, 0x3
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129D68
-_08129D5E:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129D70
-_08129D68:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129D70:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129D40
-
- thumb_func_start sub_8129D78
-sub_8129D78: @ 8129D78
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129D88
- cmp r0, 0x1
- beq _08129D96
- b _08129DA0
-_08129D88:
- bl sub_812AA64
- movs r0, 0x3
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129DA0
-_08129D96:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129DA8
-_08129DA0:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129DA8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129D78
-
- thumb_func_start sub_8129DB0
-sub_8129DB0: @ 8129DB0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x1
- beq _08129DE6
- cmp r0, 0x1
- bgt _08129DC4
- cmp r0, 0
- beq _08129DCA
- b _08129E0C
-_08129DC4:
- cmp r0, 0x2
- beq _08129DF2
- b _08129E0C
-_08129DCA:
- movs r0, 0x1
- bl sub_812AEFC
- bl sub_812A980
- cmp r0, 0
- bne _08129E12
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129E0C
-_08129DE6:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- beq _08129E0C
- b _08129E12
-_08129DF2:
- bl sub_812A9C8
- cmp r0, 0
- bne _08129E12
- bl sub_812AF1C
- movs r0, 0
- bl sub_812AEFC
- bl sub_812B160
- movs r0, 0
- b _08129E14
-_08129E0C:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129E12:
- movs r0, 0x1
-_08129E14:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129DB0
-
- thumb_func_start sub_8129E1C
-sub_8129E1C: @ 8129E1C
- push {lr}
- bl sub_812AF1C
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8129E1C
-
- thumb_func_start sub_8129E28
-sub_8129E28: @ 8129E28
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129E38
- cmp r0, 0x1
- beq _08129E5C
- b _08129E66
-_08129E38:
- movs r0, 0
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xB
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _08129E58 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129E66
- .align 2, 0
-_08129E58: .4byte gUnknown_203B0E4
-_08129E5C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129E6E
-_08129E66:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129E6E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129E28
-
- thumb_func_start sub_8129E74
-sub_8129E74: @ 8129E74
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129E84
- cmp r0, 0x1
- beq _08129E94
- b _08129EAA
-_08129E84:
- bl sub_812A6F4
- bl sub_812A51C
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- b _08129EAA
-_08129E94:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129EB0
- bl sub_812A728
- bl sub_812A544
- movs r0, 0
- b _08129EB2
-_08129EAA:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129EB0:
- movs r0, 0x1
-_08129EB2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129E74
-
- thumb_func_start sub_8129EB8
-sub_8129EB8: @ 8129EB8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129ECA
- cmp r0, 0x1
- beq _08129F02
- b _08129F14
-_08129ECA:
- add r1, sp, 0x8
- add r0, sp, 0x4
- bl sub_8129730
- ldr r0, [sp, 0x4]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp, 0x8]
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0
- bl sub_812A74C
- bl sub_8129714
- adds r1, r0, 0
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- movs r2, 0x3
- movs r3, 0x1
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129F14
-_08129F02:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129F1A
- bl sub_812B160
- movs r0, 0
- b _08129F1C
-_08129F14:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129F1A:
- movs r0, 0x1
-_08129F1C:
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129EB8
-
- thumb_func_start sub_8129F24
-sub_8129F24: @ 8129F24
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08129F80
- cmp r0, 0x1
- bgt _08129F3A
- cmp r0, 0
- beq _08129F44
- b _08129FBA
-_08129F3A:
- cmp r0, 0x2
- beq _08129FA4
- cmp r0, 0x3
- beq _08129FB6
- b _08129FBA
-_08129F44:
- bl sub_8129788
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8129758
- adds r5, r0, 0
- bl StringLength_Multibyte
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0x66
- bl sub_812A74C
- movs r0, 0x5
- str r0, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x4
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129FBA
-_08129F80:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129FC0
- movs r0, 0x1
- movs r1, 0x10
- bl sub_812A578
- ldr r0, _08129FA0 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129FBA
- .align 2, 0
-_08129FA0: .4byte gUnknown_203B0E4
-_08129FA4:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129FC0
- movs r0, 0x1
- bl sub_812AF8C
- b _08129FBA
-_08129FB6:
- movs r0, 0
- b _08129FC2
-_08129FBA:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_08129FC0:
- movs r0, 0x1
-_08129FC2:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8129F24
-
- thumb_func_start sub_8129FCC
-sub_8129FCC: @ 8129FCC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _0812A028
- cmp r0, 0x1
- bgt _08129FE2
- cmp r0, 0
- beq _08129FEC
- b _0812A062
-_08129FE2:
- cmp r0, 0x2
- beq _0812A048
- cmp r0, 0x3
- beq _0812A05E
- b _0812A062
-_08129FEC:
- bl sub_8129788
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8129758
- adds r5, r0, 0
- bl StringLength_Multibyte
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_812A74C
- movs r0, 0x2
- str r0, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x3
- movs r3, 0x1
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _0812A062
-_0812A028:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A068
- bl sub_812A6F4
- ldr r0, _0812A044 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _0812A062
- .align 2, 0
-_0812A044: .4byte gUnknown_203B0E4
-_0812A048:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A068
- movs r0, 0
- bl sub_812AF8C
- bl sub_812A728
- b _0812A062
-_0812A05E:
- movs r0, 0
- b _0812A06A
-_0812A062:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A068:
- movs r0, 0x1
-_0812A06A:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8129FCC
-
- thumb_func_start sub_812A074
-sub_812A074: @ 812A074
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A084
- cmp r0, 0x1
- beq _0812A098
- b _0812A0A6
-_0812A084:
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A0A6
-_0812A098:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A0A6
- movs r0, 0
- b _0812A0A8
-_0812A0A6:
- movs r0, 0x1
-_0812A0A8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A074
-
- thumb_func_start sub_812A0B0
-sub_812A0B0: @ 812A0B0
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x4
- bhi _0812A182
- lsls r0, 2
- ldr r1, _0812A0C4 @ =_0812A0C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0812A0C4: .4byte _0812A0C8
- .align 2, 0
-_0812A0C8:
- .4byte _0812A0DC
- .4byte _0812A108
- .4byte _0812A138
- .4byte _0812A15C
- .4byte _0812A126
-_0812A0DC:
- ldr r0, _0812A104 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrh r5, [r0, 0x1A]
- bl sub_81297C4
- adds r4, r0, 0
- bl sub_81297D0
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_812AA78
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- b _0812A17C
- .align 2, 0
-_0812A104: .4byte gUnknown_203B0E4
-_0812A108:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _0812A182
- ldr r0, _0812A12C @ =gUnknown_203B0E4
- ldr r1, [r0]
- ldrh r0, [r1, 0x1A]
- cmp r0, 0x8
- bhi _0812A130
- adds r0, 0x1
- strh r0, [r1, 0x1A]
- movs r0, 0x4
- strb r0, [r6]
-_0812A126:
- movs r0, 0
- b _0812A184
- .align 2, 0
-_0812A12C: .4byte gUnknown_203B0E4
-_0812A130:
- strh r2, [r1, 0x1C]
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A138:
- movs r0, 0
- movs r1, 0
- movs r2, 0x5
- movs r3, 0x11
- bl ScrollWindow
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, _0812A178 @ =gUnknown_203B0E4
- ldr r1, [r0]
- ldrh r0, [r1, 0x1C]
- adds r0, 0x1
- strh r0, [r1, 0x1C]
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A15C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A182
- ldr r0, _0812A178 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrh r0, [r0, 0x1C]
- cmp r0, 0x2
- bhi _0812A17C
- ldrb r0, [r6]
- subs r0, 0x1
- b _0812A180
- .align 2, 0
-_0812A178: .4byte gUnknown_203B0E4
-_0812A17C:
- ldrb r0, [r6]
- adds r0, 0x1
-_0812A180:
- strb r0, [r6]
-_0812A182:
- movs r0, 0x1
-_0812A184:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_812A0B0
-
- thumb_func_start sub_812A18C
-sub_812A18C: @ 812A18C
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A19C
- cmp r0, 0x1
- beq _0812A1A8
- b _0812A1AE
-_0812A19C:
- bl sub_812AFC0
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A1AE
-_0812A1A8:
- bl sub_812AFFC
- b _0812A1B0
-_0812A1AE:
- movs r0, 0x1
-_0812A1B0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A18C
-
- thumb_func_start sub_812A1B8
-sub_812A1B8: @ 812A1B8
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A1C8
- cmp r0, 0x1
- beq _0812A1E8
- b _0812A1F2
-_0812A1C8:
- movs r0, 0x3
- movs r1, 0x10
- bl sub_812A578
- ldr r0, _0812A1E4 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A1F2
- .align 2, 0
-_0812A1E4: .4byte gUnknown_203B0E4
-_0812A1E8:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A1F4
-_0812A1F2:
- movs r0, 0x1
-_0812A1F4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A1B8
-
- thumb_func_start sub_812A1FC
-sub_812A1FC: @ 812A1FC
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A20C
- cmp r0, 0x1
- beq _0812A22C
- b _0812A236
-_0812A20C:
- movs r0, 0x4
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A228 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A236
- .align 2, 0
-_0812A228: .4byte gUnknown_203B0E4
-_0812A22C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A238
-_0812A236:
- movs r0, 0x1
-_0812A238:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A1FC
-
- thumb_func_start sub_812A240
-sub_812A240: @ 812A240
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A250
- cmp r0, 0x1
- beq _0812A280
- b _0812A28A
-_0812A250:
- bl DynamicPlaceholderTextUtil_Reset
- bl sub_8129814
- adds r1, r0, 0
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- movs r0, 0x5
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A27C @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A28A
- .align 2, 0
-_0812A27C: .4byte gUnknown_203B0E4
-_0812A280:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A28C
-_0812A28A:
- movs r0, 0x1
-_0812A28C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A240
-
- thumb_func_start sub_812A294
-sub_812A294: @ 812A294
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A2A4
- cmp r0, 0x1
- beq _0812A2D0
- b _0812A2DA
-_0812A2A4:
- movs r0, 0x6
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A2CC @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A2DA
- .align 2, 0
-_0812A2CC: .4byte gUnknown_203B0E4
-_0812A2D0:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A2DC
-_0812A2DA:
- movs r0, 0x1
-_0812A2DC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A294
-
- thumb_func_start sub_812A2E4
-sub_812A2E4: @ 812A2E4
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A2F4
- cmp r0, 0x1
- beq _0812A320
- b _0812A32A
-_0812A2F4:
- movs r0, 0x7
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A31C @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A32A
- .align 2, 0
-_0812A31C: .4byte gUnknown_203B0E4
-_0812A320:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A32C
-_0812A32A:
- movs r0, 0x1
-_0812A32C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A2E4
-
- thumb_func_start sub_812A334
-sub_812A334: @ 812A334
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A344
- cmp r0, 0x1
- beq _0812A364
- b _0812A36E
-_0812A344:
- movs r0, 0x8
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A360 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A36E
- .align 2, 0
-_0812A360: .4byte gUnknown_203B0E4
-_0812A364:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A370
-_0812A36E:
- movs r0, 0x1
-_0812A370:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A334
-
- thumb_func_start sub_812A378
-sub_812A378: @ 812A378
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A388
- cmp r0, 0x1
- beq _0812A3BC
- b _0812A3C6
-_0812A388:
- bl DynamicPlaceholderTextUtil_Reset
- ldr r0, _0812A3B4 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- movs r0, 0x9
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A3B8 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A3C6
- .align 2, 0
-_0812A3B4: .4byte gSaveBlock2Ptr
-_0812A3B8: .4byte gUnknown_203B0E4
-_0812A3BC:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A3C8
-_0812A3C6:
- movs r0, 0x1
-_0812A3C8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A378
-
- thumb_func_start sub_812A3D0
-sub_812A3D0: @ 812A3D0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A3E0
- cmp r0, 0x1
- beq _0812A40C
- b _0812A416
-_0812A3E0:
- movs r0, 0xA
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A408 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A416
- .align 2, 0
-_0812A408: .4byte gUnknown_203B0E4
-_0812A40C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A418
-_0812A416:
- movs r0, 0x1
-_0812A418:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A3D0
-
- thumb_func_start sub_812A420
-sub_812A420: @ 812A420
- movs r0, 0
- bx lr
- thumb_func_end sub_812A420
-
- thumb_func_start sub_812A424
-sub_812A424: @ 812A424
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- lsls r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r4, _0812A4FC @ =0xffffff00
- ldr r2, [sp, 0xC]
- ands r2, r4
- lsrs r0, 16
- ldr r3, _0812A500 @ =0xffff00ff
- ands r2, r3
- orrs r2, r0
- lsrs r1, 8
- ldr r0, _0812A504 @ =0xff00ffff
- ands r2, r0
- orrs r2, r1
- ldr r0, _0812A508 @ =0x00ffffff
- ands r2, r0
- movs r0, 0xC0
- lsls r0, 19
- orrs r2, r0
- str r2, [sp, 0xC]
- ldr r0, [sp, 0x10]
- ands r0, r4
- movs r1, 0x4
- orrs r0, r1
- ands r0, r3
- movs r1, 0xE0
- lsls r1, 4
- orrs r0, r1
- ldr r1, _0812A50C @ =0x0000ffff
- ands r0, r1
- movs r1, 0xA4
- lsls r1, 15
- orrs r0, r1
- str r0, [sp, 0x10]
- add r0, sp, 0xC
- bl AddWindow
- adds r1, r0, 0
- ldr r6, _0812A510 @ =gUnknown_203B0E4
- ldr r0, [r6]
- movs r7, 0
- strh r1, [r0, 0x18]
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- beq _0812A4F0
- lsls r0, r1, 24
- lsrs r0, 24
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- bl PutWindowTilemap
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- ldr r2, _0812A514 @ =gText_Yes
- movs r5, 0x2
- str r5, [sp]
- movs r4, 0xFF
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- ldr r2, _0812A518 @ =gText_No
- movs r1, 0x10
- str r1, [sp]
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- movs r1, 0x1
- movs r2, 0xD
- bl DrawTextBorderOuter
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- movs r1, 0xE
- str r1, [sp]
- str r5, [sp, 0x4]
- mov r1, r8
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
-_0812A4F0:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A4FC: .4byte 0xffffff00
-_0812A500: .4byte 0xffff00ff
-_0812A504: .4byte 0xff00ffff
-_0812A508: .4byte 0x00ffffff
-_0812A50C: .4byte 0x0000ffff
-_0812A510: .4byte gUnknown_203B0E4
-_0812A514: .4byte gText_Yes
-_0812A518: .4byte gText_No
- thumb_func_end sub_812A424
-
- thumb_func_start sub_812A51C
-sub_812A51C: @ 812A51C
- push {r4,lr}
- ldr r4, _0812A540 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x18]
- cmp r0, 0xFF
- beq _0812A53A
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldr r0, [r4]
- ldrb r0, [r0, 0x18]
- bl ClearWindowTilemap
-_0812A53A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A540: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A51C
-
- thumb_func_start sub_812A544
-sub_812A544: @ 812A544
- push {r4,lr}
- ldr r4, _0812A564 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x18]
- cmp r0, 0xFF
- beq _0812A55E
- lsls r0, 24
- lsrs r0, 24
- bl RemoveWindow
- ldr r1, [r4]
- movs r0, 0xFF
- strh r0, [r1, 0x18]
-_0812A55E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A564: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A544
-
- thumb_func_start sub_812A568
-sub_812A568: @ 812A568
- push {lr}
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_812A568
-
- thumb_func_start sub_812A578
-sub_812A578: @ 812A578
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x1C
- adds r7, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldr r1, _0812A624 @ =0xffffff00
- ldr r3, [sp, 0x14]
- ands r3, r1
- ldr r2, _0812A628 @ =0xffff00ff
- ands r3, r2
- movs r0, 0x80
- lsls r0, 4
- orrs r3, r0
- ldr r0, _0812A62C @ =0xff00ffff
- ands r3, r0
- movs r0, 0x80
- lsls r0, 13
- orrs r3, r0
- ldr r5, _0812A630 @ =0x00ffffff
- ands r3, r5
- movs r0, 0xA8
- lsls r0, 21
- orrs r3, r0
- str r3, [sp, 0x14]
- ldr r0, [sp, 0x18]
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- ands r0, r2
- movs r1, 0xE0
- lsls r1, 4
- orrs r0, r1
- ldr r1, _0812A634 @ =0x0000ffff
- ands r0, r1
- movs r1, 0xD4
- lsls r1, 15
- orrs r0, r1
- str r0, [sp, 0x18]
- ldr r1, _0812A638 @ =gUnknown_845AB64
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4, 0xA]
- cmp r0, 0
- beq _0812A5F8
- lsls r0, r3, 16
- movs r1, 0xF9
- lsls r1, 24
- adds r0, r1
- lsrs r0, 16
- ands r2, r3
- orrs r2, r0
- lsrs r1, r2, 24
- adds r1, 0x7
- lsls r1, 24
- adds r0, r5, 0
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
-_0812A5F8:
- add r0, sp, 0x14
- bl AddWindow
- ldr r5, _0812A63C @ =gUnknown_203B0E4
- ldr r1, [r5]
- strh r0, [r1, 0x1E]
- ldrh r0, [r1, 0x1E]
- mov r8, r0
- cmp r0, 0xFF
- beq _0812A6E2
- ldrb r0, [r4, 0x9]
- cmp r0, 0
- beq _0812A640
- adds r0, r1, 0
- adds r0, 0x22
- ldr r1, [r4]
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- ldr r0, [r5]
- adds r6, r0, 0
- adds r6, 0x22
- b _0812A642
- .align 2, 0
-_0812A624: .4byte 0xffffff00
-_0812A628: .4byte 0xffff00ff
-_0812A62C: .4byte 0xff00ffff
-_0812A630: .4byte 0x00ffffff
-_0812A634: .4byte 0x0000ffff
-_0812A638: .4byte gUnknown_845AB64
-_0812A63C: .4byte gUnknown_203B0E4
-_0812A640:
- ldr r6, [r4]
-_0812A642:
- mov r0, r9
- lsls r1, r0, 8
- movs r0, 0
- movs r2, 0
- bl ChangeBgY
- mov r1, r8
- lsls r0, r1, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl PutWindowTilemap
- ldr r1, _0812A6AC @ =gUnknown_845AB64
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- cmp r0, 0x1
- bne _0812A6B0
- adds r0, r5, 0
- movs r1, 0xA
- movs r2, 0x2
- bl DrawTextBorderInner
- ldrb r3, [r4, 0x5]
- adds r3, 0x8
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x6]
- adds r0, 0x8
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- ldrb r0, [r4, 0x7]
- str r0, [sp, 0xC]
- ldrb r0, [r4, 0x8]
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x2
- adds r2, r6, 0
- bl AddTextPrinterParameterized5
- b _0812A6DA
- .align 2, 0
-_0812A6AC: .4byte gUnknown_845AB64
-_0812A6B0:
- adds r0, r5, 0
- movs r1, 0xA
- movs r2, 0x2
- bl DrawTextBorderOuter
- ldrb r3, [r4, 0x5]
- ldrb r0, [r4, 0x6]
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- ldrb r0, [r4, 0x7]
- str r0, [sp, 0xC]
- ldrb r0, [r4, 0x8]
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x2
- adds r2, r6, 0
- bl AddTextPrinterParameterized5
-_0812A6DA:
- ldr r0, _0812A6F0 @ =gUnknown_203B0E4
- ldr r0, [r0]
- mov r1, r8
- strh r1, [r0, 0x1E]
-_0812A6E2:
- add sp, 0x1C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A6F0: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A578
-
- thumb_func_start sub_812A6F4
-sub_812A6F4: @ 812A6F4
- push {r4,lr}
- ldr r4, _0812A724 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x1E]
- cmp r0, 0xFF
- beq _0812A712
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldr r0, [r4]
- ldrb r0, [r0, 0x1E]
- bl ClearWindowTilemap
-_0812A712:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A724: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A6F4
-
- thumb_func_start sub_812A728
-sub_812A728: @ 812A728
- push {r4,lr}
- ldr r4, _0812A748 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x1E]
- cmp r0, 0xFF
- beq _0812A742
- lsls r0, 24
- lsrs r0, 24
- bl RemoveWindow
- ldr r1, [r4]
- movs r0, 0xFF
- strh r0, [r1, 0x1E]
-_0812A742:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A748: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A728
-
- thumb_func_start sub_812A74C
-sub_812A74C: @ 812A74C
- push {lr}
- sub sp, 0x8
- adds r3, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 19
- lsrs r3, 16
- lsls r1, 19
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0xE
- str r0, [sp, 0x4]
- movs r0, 0x1
- adds r1, r2, 0
- adds r2, r3, 0
- movs r3, 0x1
- bl FillWindowPixelRect
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_812A74C
-
- thumb_func_start sub_812A778
-sub_812A778: @ 812A778
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- mov r10, r1
- ldr r1, [sp, 0x54]
- lsls r0, 16
- lsrs r5, r0, 16
- mov r9, r5
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r1, 24
- lsrs r6, r1, 24
- cmp r4, 0
- beq _0812A7B4
- bl sub_81297DC
- adds r1, r0, 0
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- adds r2, r4, 0
- bl sub_812A74C
-_0812A7B4:
- add r0, sp, 0xC
- mov r1, r8
- strb r1, [r0]
- strb r7, [r0, 0x1]
- strb r6, [r0, 0x2]
- add r4, sp, 0x10
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x14
- strb r0, [r4, 0x1]
- movs r0, 0x8
- strb r0, [r4, 0x2]
- mov r0, sp
- adds r0, 0x13
- mov r1, r10
- bl StringCopy
- mov r0, r9
- lsls r2, r0, 27
- lsrs r2, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized3
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812A778
-
- thumb_func_start sub_812A804
-sub_812A804: @ 812A804
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4C
- movs r0, 0x2
- movs r1, 0xFF
- bl FillWindowPixelBuffer
- bl sub_81296F4
- lsls r0, 24
- lsrs r2, r0, 24
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xE
- strb r0, [r1, 0x1]
- movs r0, 0xD
- strb r0, [r1, 0x2]
- cmp r2, 0x3
- beq _0812A8A0
- add r1, sp, 0x10
- movs r0, 0xFC
- strb r0, [r1]
- movs r0, 0x14
- strb r0, [r1, 0x1]
- movs r0, 0x8
- strb r0, [r1, 0x2]
- str r0, [sp, 0x40]
- str r1, [sp, 0x44]
- cmp r2, 0x2
- bne _0812A84C
- movs r1, 0x6
- str r1, [sp, 0x40]
-_0812A84C:
- movs r7, 0
- movs r6, 0
- lsls r0, r2, 2
- ldr r1, _0812A89C @ =gUnknown_845A9AC
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- ldr r0, [sp, 0x40]
- lsls r5, r0, 24
-_0812A85E:
- ldr r1, [r4]
- cmp r1, 0
- bne _0812A866
- b _0812A96C
-_0812A866:
- mov r0, sp
- adds r0, 0x13
- bl StringCopy
- lsls r3, r6, 24
- lsrs r3, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, [sp, 0x44]
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- lsrs r2, r5, 24
- bl AddTextPrinterParameterized3
- adds r4, 0x4
- adds r7, 0x1
- adds r0, r6, 0
- adds r0, 0xC
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r7, 0x9
- ble _0812A85E
- b _0812A96C
- .align 2, 0
-_0812A89C: .4byte gUnknown_845A9AC
-_0812A8A0:
- movs r1, 0x4
- str r1, [sp, 0x40]
- movs r7, 0
- movs r6, 0
-_0812A8A8:
- adds r0, r7, 0
- bl sub_81294B0
- adds r5, r0, 0
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- cmp r0, 0x28
- bgt _0812A8E6
- lsls r3, r6, 24
- lsrs r3, 24
- add r4, sp, 0xC
- str r4, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- movs r4, 0x80
- lsls r4, 19
- lsrs r2, r4, 24
- bl AddTextPrinterParameterized3
- adds r0, r7, 0x1
- str r0, [sp, 0x48]
- adds r6, 0xC
- mov r10, r6
- b _0812A960
-_0812A8E6:
- adds r0, r5, 0
- bl StringLength_Multibyte
- adds r4, r0, 0
- mov r1, sp
- adds r1, 0x10
- str r1, [sp, 0x44]
- ldr r0, [sp, 0x40]
- lsls r0, 24
- mov r8, r0
- lsls r1, r6, 24
- mov r9, r1
- adds r0, r7, 0x1
- str r0, [sp, 0x48]
- adds r6, 0xC
- mov r10, r6
- ldr r7, [sp, 0x40]
- adds r7, 0x23
- ldr r6, [sp, 0x44]
-_0812A90C:
- subs r4, 0x1
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl StringCopyN_Multibyte
- movs r0, 0
- adds r1, r6, 0
- movs r2, 0
- bl GetStringWidth
- cmp r0, 0x23
- bgt _0812A90C
- mov r1, r8
- lsrs r2, r1, 24
- mov r0, r9
- lsrs r4, r0, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r1, [sp, 0x44]
- str r1, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
- adds r2, r7, 0
- add r0, sp, 0xC
- str r0, [sp]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp, 0x4]
- ldr r0, _0812A97C @ =gUnknown_845ABE8
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
-_0812A960:
- ldr r7, [sp, 0x48]
- mov r4, r10
- lsls r0, r4, 16
- lsrs r6, r0, 16
- cmp r7, 0x9
- ble _0812A8A8
-_0812A96C:
- add sp, 0x4C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A97C: .4byte gUnknown_845ABE8
- thumb_func_end sub_812A804
-
- thumb_func_start sub_812A980
-sub_812A980: @ 812A980
- push {r4,lr}
- ldr r1, _0812A9A4 @ =gUnknown_203B0E4
- ldr r2, [r1]
- ldrh r3, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, 0x37
- bgt _0812A9B4
- adds r0, r3, 0
- adds r0, 0xC
- strh r0, [r2, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x37
- ble _0812A9A8
- movs r0, 0x38
- strh r0, [r2, 0x20]
- b _0812A9B4
- .align 2, 0
-_0812A9A4: .4byte gUnknown_203B0E4
-_0812A9A8:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- bl sub_812ADA0
- movs r0, 0x1
- b _0812A9C0
-_0812A9B4:
- ldr r0, [r1]
- movs r4, 0x20
- ldrsh r0, [r0, r4]
- bl sub_812ADF8
- movs r0, 0
-_0812A9C0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A980
-
- thumb_func_start sub_812A9C8
-sub_812A9C8: @ 812A9C8
- push {r4,lr}
- ldr r1, _0812A9EC @ =gUnknown_203B0E4
- ldr r2, [r1]
- ldrh r3, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, 0
- ble _0812A9FC
- adds r0, r3, 0
- subs r0, 0xC
- strh r0, [r2, 0x20]
- lsls r0, 16
- cmp r0, 0
- bgt _0812A9F0
- movs r0, 0
- strh r0, [r2, 0x20]
- b _0812A9FC
- .align 2, 0
-_0812A9EC: .4byte gUnknown_203B0E4
-_0812A9F0:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- bl sub_812ADA0
- movs r0, 0x1
- b _0812AA08
-_0812A9FC:
- ldr r0, [r1]
- movs r4, 0x20
- ldrsh r0, [r0, r4]
- bl sub_812ADF8
- movs r0, 0
-_0812AA08:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A9C8
-
- thumb_func_start sub_812AA10
-sub_812AA10: @ 812AA10
- push {lr}
- sub sp, 0xC
- movs r0, 0x3
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0xD
- bl DrawTextBorderOuter
- ldr r0, _0812AA60 @ =gUnknown_845ABEC
- str r0, [sp]
- movs r0, 0x3
- movs r1, 0x2
- movs r2, 0xE
- movs r3, 0x5
- bl UnionRoomAndTradeMenuPrintOptions
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xE
- str r1, [sp]
- movs r1, 0x5
- str r1, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x2
- movs r2, 0
- movs r3, 0
- bl Menu_InitCursor
- movs r0, 0x3
- bl PutWindowTilemap
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_0812AA60: .4byte gUnknown_845ABEC
- thumb_func_end sub_812AA10
-
- thumb_func_start sub_812AA64
-sub_812AA64: @ 812AA64
- push {lr}
- movs r0, 0x3
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x3
- bl ClearWindowTilemap
- pop {r0}
- bx r0
- thumb_func_end sub_812AA64
-
- thumb_func_start sub_812AA78
-sub_812AA78: @ 812AA78
- push {r4,r5,lr}
- sub sp, 0x10
- adds r5, r1, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 24
- add r3, sp, 0xC
- movs r1, 0x1
- strb r1, [r3]
- lsrs r2, 23
- adds r1, r2, 0x2
- strb r1, [r3, 0x1]
- adds r1, r3, 0
- adds r2, 0x3
- strb r2, [r1, 0x2]
- lsls r4, r0, 4
- subs r4, r0
- lsls r3, r4, 16
- lsrs r3, 16
- movs r0, 0xA8
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x11
- movs r2, 0
- bl FillWindowPixelRect
- lsls r4, 24
- lsrs r4, 24
- add r0, sp, 0xC
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_812AA78
-
- thumb_func_start sub_812AAD4
-sub_812AAD4: @ 812AAD4
- push {lr}
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuRegBits
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r1, 0xE0
- lsls r1, 8
- movs r0, 0
- bl ClearGpuRegBits
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- ldr r1, _0812AB88 @ =0x000040f0
- movs r0, 0x40
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0x90
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3D
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x3F
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_0812AB88: .4byte 0x000040f0
- thumb_func_end sub_812AAD4
-
- thumb_func_start sub_812AB8C
-sub_812AB8C: @ 812AB8C
- push {r4,lr}
- ldr r4, _0812ABC8 @ =gUnknown_203B0E4
- ldr r1, [r4]
- movs r0, 0x94
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABCC @ =0x00000928
- adds r1, r0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABD0 @ =0x00001128
- adds r1, r0
- movs r0, 0x3
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABD4 @ =0x00001928
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812ABC8: .4byte gUnknown_203B0E4
-_0812ABCC: .4byte 0x00000928
-_0812ABD0: .4byte 0x00001128
-_0812ABD4: .4byte 0x00001928
- thumb_func_end sub_812AB8C
-
- thumb_func_start sub_812ABD8
-sub_812ABD8: @ 812ABD8
- push {lr}
- sub sp, 0x8
- movs r1, 0xC0
- lsls r1, 19
- movs r0, 0
- movs r2, 0x20
- movs r3, 0x1
- bl RequestDma3Fill
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_812ABD8
-
- thumb_func_start sub_812AC08
-sub_812AC08: @ 812AC08
- push {lr}
- sub sp, 0x4
- ldr r0, _0812AC48 @ =gUnknown_8EAA9F0
- movs r1, 0x70
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0812AC4C @ =gUnknown_845AA24
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812AC50 @ =gUnknown_8EAAA10
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _0812AC54 @ =gUnknown_8EAAA6C
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812AC48: .4byte gUnknown_8EAA9F0
-_0812AC4C: .4byte gUnknown_845AA24
-_0812AC50: .4byte gUnknown_8EAAA10
-_0812AC54: .4byte gUnknown_8EAAA6C
- thumb_func_end sub_812AC08
-
- thumb_func_start sub_812AC58
-sub_812AC58: @ 812AC58
- push {lr}
- sub sp, 0x4
- ldr r0, _0812AC90 @ =gUnknown_8EA1700
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812AC94 @ =gUnknown_8EA1720
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _0812AC98 @ =gUnknown_8EA1958
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812AC90: .4byte gUnknown_8EA1700
-_0812AC94: .4byte gUnknown_8EA1720
-_0812AC98: .4byte gUnknown_8EA1958
- thumb_func_end sub_812AC58
-
- thumb_func_start sub_812AC9C
-sub_812AC9C: @ 812AC9C
- push {lr}
- ldr r0, _0812ACB8 @ =gUnknown_845AA44
- movs r1, 0x80
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812ACBC @ =0x06004020
- movs r0, 0
- movs r2, 0x20
- movs r3, 0x1
- bl RequestDma3Fill
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACB8: .4byte gUnknown_845AA44
-_0812ACBC: .4byte 0x06004020
- thumb_func_end sub_812AC9C
-
- thumb_func_start sub_812ACC0
-sub_812ACC0: @ 812ACC0
- push {lr}
- ldr r0, _0812ACE8 @ =gUnknown_845AA64
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACE8: .4byte gUnknown_845AA64
- thumb_func_end sub_812ACC0
-
- thumb_func_start sub_812ACEC
-sub_812ACEC: @ 812ACEC
- push {lr}
- movs r0, 0x2
- bl PutWindowTilemap
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_812ACEC
-
- thumb_func_start sub_812AD04
-sub_812AD04: @ 812AD04
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_812AD04
-
- thumb_func_start sub_812AD20
-sub_812AD20: @ 812AD20
- push {lr}
- movs r0, 0x3
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0xD0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0x3
- movs r1, 0xA
- movs r2, 0x20
- bl TextWindow_SetStdFrame0_WithPal
- ldr r0, _0812AD4C @ =gTMCaseMainWindowPalette
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD4C: .4byte gTMCaseMainWindowPalette
- thumb_func_end sub_812AD20
-
- thumb_func_start sub_812AD50
-sub_812AD50: @ 812AD50
- push {lr}
- sub sp, 0x10
- ldr r0, _0812AD8C @ =0xa2600001
- str r0, [sp, 0x4]
- ldr r0, _0812AD90 @ =0x04000014
- str r0, [sp]
- mov r2, sp
- movs r1, 0
- movs r0, 0x1
- strb r0, [r2, 0x8]
- mov r0, sp
- strb r1, [r0, 0x9]
- ldr r0, _0812AD94 @ =gUnknown_203B0E4
- ldr r0, [r0]
- strh r1, [r0, 0x20]
- str r1, [sp, 0xC]
- add r0, sp, 0xC
- ldr r1, _0812AD98 @ =gScanlineEffectRegBuffers
- ldr r2, _0812AD9C @ =0x010003c0
- bl CpuFastSet
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD8C: .4byte 0xa2600001
-_0812AD90: .4byte 0x04000014
-_0812AD94: .4byte gUnknown_203B0E4
-_0812AD98: .4byte gScanlineEffectRegBuffers
-_0812AD9C: .4byte 0x010003c0
- thumb_func_end sub_812AD50
-
- thumb_func_start sub_812ADA0
-sub_812ADA0: @ 812ADA0
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- mov r1, sp
- strh r0, [r1]
- ldr r5, _0812ADE8 @ =gScanlineEffect
- ldrb r0, [r5, 0x14]
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 7
- ldr r4, _0812ADEC @ =gScanlineEffectRegBuffers
- adds r1, r4
- ldr r2, _0812ADF0 @ =0x01000090
- mov r0, sp
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- movs r1, 0
- strh r1, [r0]
- ldrb r2, [r5, 0x14]
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 7
- movs r2, 0x90
- lsls r2, 1
- adds r4, r2
- adds r1, r4
- ldr r2, _0812ADF4 @ =0x01000010
- bl CpuSet
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812ADE8: .4byte gScanlineEffect
-_0812ADEC: .4byte gScanlineEffectRegBuffers
-_0812ADF0: .4byte 0x01000090
-_0812ADF4: .4byte 0x01000010
- thumb_func_end sub_812ADA0
-
- thumb_func_start sub_812ADF8
-sub_812ADF8: @ 812ADF8
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, sp
- strh r4, [r0]
- ldr r5, _0812AE64 @ =gScanlineEffectRegBuffers
- ldr r0, _0812AE68 @ =0x01000090
- mov r9, r0
- mov r0, sp
- adds r1, r5, 0
- mov r2, r9
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- movs r6, 0
- strh r6, [r0]
- movs r2, 0x90
- lsls r2, 1
- adds r1, r5, r2
- ldr r2, _0812AE6C @ =0x01000010
- mov r8, r2
- bl CpuSet
- add r0, sp, 0x4
- strh r4, [r0]
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r5, r2
- mov r2, r9
- bl CpuSet
- mov r0, sp
- adds r0, 0x6
- strh r6, [r0]
- movs r1, 0x8A
- lsls r1, 4
- adds r5, r1
- adds r1, r5, 0
- mov r2, r8
- bl CpuSet
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AE64: .4byte gScanlineEffectRegBuffers
-_0812AE68: .4byte 0x01000090
-_0812AE6C: .4byte 0x01000010
- thumb_func_end sub_812ADF8
-
- thumb_func_start sub_812AE70
-sub_812AE70: @ 812AE70
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _0812AE9C @ =gUnknown_845AF58
-_0812AE76:
- adds r0, r4, 0
- bl LoadCompressedSpriteSheet
- adds r4, 0x8
- adds r5, 0x1
- cmp r5, 0x4
- bls _0812AE76
- ldr r0, _0812AEA0 @ =gUnknown_845AF80
- bl LoadSpritePalette
- ldr r4, _0812AEA4 @ =gUnknown_203B0E8
- movs r0, 0x18
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0812AEA8
- movs r0, 0x1
- b _0812AEAA
- .align 2, 0
-_0812AE9C: .4byte gUnknown_845AF58
-_0812AEA0: .4byte gUnknown_845AF80
-_0812AEA4: .4byte gUnknown_203B0E8
-_0812AEA8:
- movs r0, 0
-_0812AEAA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_812AE70
-
- thumb_func_start sub_812AEB0
-sub_812AEB0: @ 812AEB0
- push {lr}
- ldr r0, _0812AEC4 @ =gUnknown_203B0E8
- ldr r0, [r0]
- cmp r0, 0
- beq _0812AEBE
- bl Free
-_0812AEBE:
- pop {r0}
- bx r0
- .align 2, 0
-_0812AEC4: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AEB0
-
- thumb_func_start sub_812AEC8
-sub_812AEC8: @ 812AEC8
- push {lr}
- ldr r0, _0812AEF0 @ =gUnknown_845AFC0
- movs r1, 0xA
- movs r2, 0x18
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0812AEF4 @ =gUnknown_203B0E8
- ldr r2, [r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0812AEF8 @ =gSprites
- adds r1, r0
- str r1, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_0812AEF0: .4byte gUnknown_845AFC0
-_0812AEF4: .4byte gUnknown_203B0E8
-_0812AEF8: .4byte gSprites
- thumb_func_end sub_812AEC8
-
- thumb_func_start sub_812AEFC
-sub_812AEFC: @ 812AEFC
- ldr r1, _0812AF18 @ =gUnknown_203B0E8
- ldr r1, [r1]
- ldr r2, [r1]
- adds r2, 0x3E
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- ldrb r3, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- bx lr
- .align 2, 0
-_0812AF18: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AEFC
-
- thumb_func_start sub_812AF1C
-sub_812AF1C: @ 812AF1C
- push {r4,r5,lr}
- sub sp, 0x4
- bl sub_81296F4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r5, sp
- adds r5, 0x1
- mov r0, sp
- adds r1, r5, 0
- bl sub_8129700
- cmp r4, 0x3
- beq _0812AF5C
- ldr r4, _0812AF58 @ =gUnknown_203B0E8
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- ldr r1, [r4]
- ldr r2, [r1]
- mov r0, sp
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, 0xA
- strh r0, [r2, 0x20]
- ldr r2, [r1]
- b _0812AF72
- .align 2, 0
-_0812AF58: .4byte gUnknown_203B0E8
-_0812AF5C:
- ldr r4, _0812AF88 @ =gUnknown_203B0E8
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- ldr r2, [r4]
- ldr r1, [r2]
- movs r0, 0x18
- strh r0, [r1, 0x20]
- ldr r2, [r2]
-_0812AF72:
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, 0x18
- strh r0, [r2, 0x22]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AF88: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AF1C
-
- thumb_func_start sub_812AF8C
-sub_812AF8C: @ 812AF8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 2
- ldr r0, _0812AFB8 @ =gUnknown_845AC14 + 2
- adds r4, r0
- movs r0, 0
- bl IndexOfSpritePaletteTag
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 4
- ldr r0, _0812AFBC @ =0x01010000
- adds r1, r0
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0x4
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AFB8: .4byte gUnknown_845AC14 + 2
-_0812AFBC: .4byte 0x01010000
- thumb_func_end sub_812AF8C
-
- thumb_func_start sub_812AFC0
-sub_812AFC0: @ 812AFC0
- push {lr}
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _0812AFE0
- ldr r0, _0812AFDC @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _0812AFEC
- .align 2, 0
-_0812AFDC: .4byte gUnknown_203B0E8
-_0812AFE0:
- ldr r0, _0812AFF8 @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
-_0812AFEC:
- ldr r0, _0812AFF8 @ =gUnknown_203B0E8
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x14]
- pop {r0}
- bx r0
- .align 2, 0
-_0812AFF8: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AFC0
-
- thumb_func_start sub_812AFFC
-sub_812AFFC: @ 812AFFC
- push {r4,lr}
- ldr r4, _0812B00C @ =gUnknown_203B0E8
- ldr r1, [r4]
- ldrh r0, [r1, 0x14]
- cmp r0, 0x3
- bls _0812B010
-_0812B008:
- movs r0, 0
- b _0812B042
- .align 2, 0
-_0812B00C: .4byte gUnknown_203B0E8
-_0812B010:
- adds r0, 0x1
- strh r0, [r1, 0x14]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0812B040
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _0812B034
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- b _0812B008
-_0812B034:
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- b _0812B008
-_0812B040:
- movs r0, 0x1
-_0812B042:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812AFFC
-
- thumb_func_start sub_812B048
-sub_812B048: @ 812B048
- push {r4,r5,lr}
- ldr r0, _0812B08C @ =gUnknown_845AFE0
- movs r1, 0x4C
- movs r2, 0x98
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0812B090 @ =gUnknown_203B0E8
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r4, _0812B094 @ =gSprites
- adds r1, r4
- str r1, [r2, 0x8]
- ldr r0, _0812B098 @ =gUnknown_845AFF8
- movs r1, 0x40
- movs r2, 0x98
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r2, 0x4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B08C: .4byte gUnknown_845AFE0
-_0812B090: .4byte gUnknown_203B0E8
-_0812B094: .4byte gSprites
-_0812B098: .4byte gUnknown_845AFF8
- thumb_func_end sub_812B048
-
- thumb_func_start sub_812B09C
-sub_812B09C: @ 812B09C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_81297DC
- adds r3, r0, 0
- cmp r3, 0xF
- bne _0812B0B8
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0812B0CC
-_0812B0B8:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- lsls r0, r3, 3
- adds r0, 0x4C
- strh r0, [r4, 0x20]
-_0812B0CC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_812B09C
-
- thumb_func_start sub_812B0D4
-sub_812B0D4: @ 812B0D4
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0812B0FA
- strh r2, [r1, 0x2E]
- ldrh r0, [r1, 0x24]
- adds r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0812B0FA
- strh r2, [r1, 0x24]
-_0812B0FA:
- pop {r0}
- bx r0
- thumb_func_end sub_812B0D4
-
- thumb_func_start sub_812B100
-sub_812B100: @ 812B100
- push {r4,r5,lr}
- ldr r0, _0812B150 @ =gUnknown_845B050
- movs r1, 0x8
- movs r2, 0x98
- movs r3, 0x3
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0812B154 @ =gUnknown_203B0E8
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r4, _0812B158 @ =gSprites
- adds r1, r4
- str r1, [r2, 0xC]
- ldr r0, _0812B15C @ =gUnknown_845B068
- movs r1, 0x20
- movs r2, 0x98
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r2, 0x10]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B150: .4byte gUnknown_845B050
-_0812B154: .4byte gUnknown_203B0E8
-_0812B158: .4byte gSprites
-_0812B15C: .4byte gUnknown_845B068
- thumb_func_end sub_812B100
-
- thumb_func_start sub_812B160
-sub_812B160: @ 812B160
- push {r4,lr}
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0812B198
- bl sub_8129720
- cmp r0, 0
- beq _0812B1A2
- ldr r3, _0812B194 @ =gUnknown_203B0E8
- ldr r0, [r3]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- ldr r0, [r0, 0x10]
- movs r1, 0x3
- bl StartSpriteAnim
- b _0812B1D6
- .align 2, 0
-_0812B194: .4byte gUnknown_203B0E8
-_0812B198:
- bl sub_81297E8
- adds r4, r0, 0
- cmp r4, 0x3
- bne _0812B1B8
-_0812B1A2:
- ldr r0, _0812B1B4 @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _0812B1D6
- .align 2, 0
-_0812B1B4: .4byte gUnknown_203B0E8
-_0812B1B8:
- ldr r3, _0812B1DC @ =gUnknown_203B0E8
- ldr r0, [r3]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- ldr r0, [r0, 0x10]
- lsls r1, r4, 24
- lsrs r1, 24
- bl StartSpriteAnim
-_0812B1D6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B1DC: .4byte gUnknown_203B0E8
- thumb_func_end sub_812B160
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt
new file mode 100644
index 000000000..7ff8cd53d
--- /dev/null
+++ b/common_syms/AgbRfu_LinkManager.txt
@@ -0,0 +1 @@
+lman
diff --git a/common_syms/help_system_812B1E0.txt b/common_syms/help_system_812B1E0.txt
index 5e56cc230..cd404504e 100644
--- a/common_syms/help_system_812B1E0.txt
+++ b/common_syms/help_system_812B1E0.txt
@@ -1,2 +1,2 @@
-gUnknown_3005E9C
+sHelpSystemState
gSomeVariableBackup
diff --git a/common_syms/link.txt b/common_syms/link.txt
index 32c25d708..82cf757a1 100644
--- a/common_syms/link.txt
+++ b/common_syms/link.txt
@@ -10,11 +10,11 @@ gFiller_3003EC0
gLinkHeldKeys
gRecvCmds
gLinkStatus
-gUnknown_3003F24
+gLinkAllAcked5FFF
gUnknown_3003F28
-gUnknown_3003F2C
-gUnknown_3003F30
-gUnknown_3003F34
+gLinkCommand2FFEAck
+gLinkCommand5FFFAck
+gLinkCmd5FFFparam
gSuppressLinkErrorMessage
gWirelessCommType
gSavedLinkPlayerCount
diff --git a/common_syms/link_rfu.txt b/common_syms/link_rfu.txt
deleted file mode 100644
index add61fde8..000000000
--- a/common_syms/link_rfu.txt
+++ /dev/null
@@ -1 +0,0 @@
-gUnknown_3005E10
diff --git a/common_syms/mevent.txt b/common_syms/mevent.txt
index cfaf59d33..af4db66e6 100644
--- a/common_syms/mevent.txt
+++ b/common_syms/mevent.txt
@@ -1 +1 @@
-gUnknown_3005ED0
+sMEventSendToEReaderManager
diff --git a/data/berry_crush.s b/data/berry_crush.s
index cc7ae23fd..417347801 100644
--- a/data/berry_crush.s
+++ b/data/berry_crush.s
@@ -339,22 +339,28 @@ gUnknown_846F458:: @ 846F458
gUnknown_846F470:: @ 846F470
spr_template 5, 5, gOamData_AffineDouble_ObjNormal_32x32, gUnknown_846F404, NULL, gUnknown_846F408, SpriteCallbackDummy
-gUnknown_846F488:: @ 846F488 struct UnkStruct3? perhaps not
- .byte 9, 2, 8
+gUnknown_846F488:: @ 846F488 DigitObjUtilTemplate
+ @ strConvMode, shape, size, priority
+ .byte 1 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 9
+ .byte 2, 8 @ ndigits, width
.align 2
- .2byte 0x9c, 0x00
- .4byte gUnknown_846F2F8 + 0x18
- .4byte gUnknown_846F320 + 0x10
- .byte 8, 2, 8
+ .2byte 0x9c, 0x00 @ x, y
+ .4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
+ .4byte gUnknown_846F320 + 0x10 @ spritePalette
+ @ strConvMode, shape, size, priority
+ .byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
+ .byte 2, 8 @ ndigits, width
.align 2
- .2byte 0xb4, 0x00
- .4byte gUnknown_846F2F8 + 0x18
- .4byte gUnknown_846F320 + 0x10
- .byte 8, 2, 8
+ .2byte 0xb4, 0x00 @ x, y
+ .4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
+ .4byte gUnknown_846F320 + 0x10 @ spritePalette
+ @ strConvMode, shape, size, priority
+ .byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
+ .byte 2, 8 @ ndigits, width
.align 2
- .2byte 0xcc, 0x00
- .4byte gUnknown_846F2F8 + 0x18
- .4byte gUnknown_846F320 + 0x10
+ .2byte 0xcc, 0x00 @ x, y
+ .4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
+ .4byte gUnknown_846F320 + 0x10 @ spritePalette
gUnknown_846F4B8:: @ 846F4B8
.4byte gUnknown_841D034
diff --git a/data/data_8479668.s b/data/data_8479668.s
index 8527b4f09..6d8a22898 100644
--- a/data/data_8479668.s
+++ b/data/data_8479668.s
@@ -75,64 +75,64 @@ gUnknown_847AA8F::
gUnknown_847AAA8::
.string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $"
-gUnknown_847AAC1::
+gText_UnionRoomChatKeyboard_ABCDE::
.string "ABCDE$"
-gUnknown_847AAC7::
+gText_UnionRoomChatKeyboard_FGHIJ::
.string "FGHIJ$"
-gUnknown_847AACD::
+gText_UnionRoomChatKeyboard_KLMNO::
.string "KLMNO$"
-gUnknown_847AAD3::
+gText_UnionRoomChatKeyboard_PQRST::
.string "PQRST$"
-gUnknown_847AAD9::
+gText_UnionRoomChatKeyboard_UVWXY::
.string "UVWXY$"
-gUnknown_847AADF::
+gText_UnionRoomChatKeyboard_Z::
.string "Z $"
-gUnknown_847AAE5::
+gText_UnionRoomChatKeyboard_01234Upper::
.string "01234$"
-gUnknown_847AAEB::
+gText_UnionRoomChatKeyboard_56789Upper::
.string "56789$"
-gUnknown_847AAF1::
+gText_UnionRoomChatKeyboard_PunctuationUpper::
.string ".,!? $"
-gUnknown_847AAF7::
+gText_UnionRoomChatKeyboard_SymbolsUpper::
.string "-/&… $"
-gUnknown_847AAFD::
+gText_UnionRoomChatKeyboard_abcde::
.string "abcde$"
-gUnknown_847AB03::
+gText_UnionRoomChatKeyboard_fghij::
.string "fghij$"
-gUnknown_847AB09::
+gText_UnionRoomChatKeyboard_klmno::
.string "klmno$"
-gUnknown_847AB0F::
+gText_UnionRoomChatKeyboard_pqrst::
.string "pqrst$"
-gUnknown_847AB15::
+gText_UnionRoomChatKeyboard_uvwxy::
.string "uvwxy$"
-gUnknown_847AB1B::
+gText_UnionRoomChatKeyboard_z::
.string "z $"
-gUnknown_847AB21::
+gText_UnionRoomChatKeyboard_01234Lower::
.string "01234$"
-gUnknown_847AB27::
+gText_UnionRoomChatKeyboard_56789Lower::
.string "56789$"
-gUnknown_847AB2D::
+gText_UnionRoomChatKeyboard_PunctuationLower::
.string ".,!? $"
-gUnknown_847AB33::
+gText_UnionRoomChatKeyboard_SymbolsLower::
.string "-/&… $"
.string "$"
@@ -144,82 +144,40 @@ gUnknown_847AB33::
.string "$"
.string "$"
-gUnknown_847AB41::
+gText_UnionRoomChatKeyboard_Emoji1::
.string "{EXTRA 245}{EXTRA 246}{EXTRA 247}{EXTRA 248}{EXTRA 254}$"
-gUnknown_847AB4C::
+gText_UnionRoomChatKeyboard_Emoji2::
.string "{EXTRA 249}{EXTRA 250}{EXTRA 252}{EXTRA 251}{EXTRA 253}$"
-gUnknown_847AB57::
+gText_UnionRoomChatKeyboard_Emoji3::
.string "{EXTRA 236}{EXTRA 237}{EXTRA 238}{EXTRA 235}{EXTRA 234}$"
-gUnknown_847AB62::
+gText_UnionRoomChatKeyboard_Emoji4::
.string "♂♀{EXTRA 212}{EXTRA 213}{EXTRA 211}$"
-gUnknown_847AB6B::
+gText_UnionRoomChatKeyboard_Emoji5::
.string "{EXTRA 216}{EXTRA 217}{EXTRA 242}{EXTRA 243}{EXTRA 244}$"
-gUnknown_847AB76::
+gText_UnionRoomChatKeyboard_Emoji6::
.string "{EXTRA 218}{EXTRA 241}{EXTRA 224}{EXTRA 226}{EXTRA 227}$"
-gUnknown_847AB81::
+gText_UnionRoomChatKeyboard_Emoji7::
.string "{EXTRA 240}{EXTRA 239}{EXTRA 225}{EXTRA 214}{EXTRA 215}$"
-gUnknown_847AB8C::
+gText_UnionRoomChatKeyboard_Emoji8::
.string "{EXTRA 228}{EXTRA 229}{EXTRA 230}{EXTRA 231}{EXTRA 232}$"
-gUnknown_847AB97::
+gText_UnionRoomChatKeyboard_Emoji9::
.string "{EXTRA 233}{EXTRA 220}{EXTRA 221}{EXTRA 222}{EXTRA 209}$"
-gUnknown_847ABA2::
+gText_UnionRoomChatKeyboard_Emoji10::
.string "{EXTRA 210}{EXTRA 208}ょ: $"
- // trainer_tower (again?)
-
@ 847ABAC
.align 2
.include "data/trainer_tower/trainers.inc"
- .align 2
-gUnknown_84827AC:: @ 84827AC
- .byte 0x08, 0x01
- .align 2
- .4byte 0
-
-gUnknown_84827B4:: @ 84827B4
- .4byte gUnknown_847F16C
- .4byte gUnknown_847D26C
- .4byte gUnknown_84808AC
- .4byte gUnknown_847ABAC
- .4byte gUnknown_847CAAC
- .4byte gUnknown_847E9AC
- .4byte gUnknown_847AF8C
- .4byte gUnknown_847CE8C
- .4byte gUnknown_847DA2C
- .4byte gUnknown_847BF0C
- .4byte gUnknown_847D64C
- .4byte gUnknown_847DE0C
- .4byte gUnknown_847B74C
- .4byte gUnknown_847BB2C
- .4byte gUnknown_848182C
- .4byte gUnknown_847F92C
- .4byte gUnknown_847C2EC
- .4byte gUnknown_847C6CC
- .4byte gUnknown_847E5CC
- .4byte gUnknown_84804CC
- .4byte gUnknown_84823CC
- .4byte gUnknown_8481FEC
- .4byte gUnknown_84800EC
- .4byte gUnknown_847E1EC
- .4byte gUnknown_847ED8C
- .4byte gUnknown_848106C
- .4byte gUnknown_8480C8C
- .4byte gUnknown_847F92C
- .4byte gUnknown_847F54C
- .4byte gUnknown_847E1EC
- .4byte gUnknown_847D64C
- .4byte gUnknown_847C6CC
-
.include "data/text/move_descriptions.inc"
.align 2, 0
diff --git a/data/event_object_80688E4.s b/data/event_object_80688E4.s
deleted file mode 100644
index 8d1917825..000000000
--- a/data/event_object_80688E4.s
+++ /dev/null
@@ -1,97 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_83A710C::
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
- .4byte little_step
-
-gUnknown_83A714C::
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
- .4byte double_little_steps
-
-gUnknown_83A716C::
- .4byte double_little_steps
- .4byte triple_little_steps
- .4byte triple_little_steps
- .4byte double_little_steps
- .4byte triple_little_steps
- .4byte triple_little_steps
-
-gUnknown_83A7184::
- .4byte quad_little_steps
- .4byte quad_little_steps
- .4byte quad_little_steps
- .4byte quad_little_steps
-
-gUnknown_83A7194::
- .4byte oct_little_steps
- .4byte oct_little_steps
-
-gUnknown_83A719C:: @ 83A719C
- .4byte gUnknown_83A710C
- .4byte gUnknown_83A714C
- .4byte gUnknown_83A716C
- .4byte gUnknown_83A7184
- .4byte gUnknown_83A7194
-
-gUnknown_83A71B0:: @ 83A71B0
- .2byte 0x0010, 0x0008, 0x0006, 0x0004, 0x0002
-
-gUnknown_83A71BA::
- .byte 0xfc, 0xfa, 0xf8, 0xf6, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x00, 0x00
-
-gUnknown_83A71CA::
- .byte 0x00, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, 0x00, 0x00
-
-gUnknown_83A71DA::
- .byte 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x00
-
- .align 2
-gUnknown_83A71EC:: @ 83A71EC
- .4byte gUnknown_83A71BA
- .4byte gUnknown_83A71CA
- .4byte gUnknown_83A71DA
-
- .align 1
-gUnknown_83A71F8:: @ 83A71F8
- .2byte 0x10, 0x10, 0x20
-
-gUnknown_83A71FE:: @ 83A71FE
- .byte 0, 0, 1
-
- .align 1
-gUnknown_83A7202:: @ 83A7202
- .2byte 0x20, 0x20, 0x40
-
-gUnknown_83A7208:: @ 83A7208
- .byte 1, 1, 2
-
- .align 2
-gUnknown_83A720C:: @ 83A720C
- abspath "evobjmv.c"
-
- .align 2
-gUnknown_83A7240:: @ 83A7240
- .asciz "0"
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 6b7b60349..d196a799e 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -17,6 +17,7 @@
#include "constants/spawn_points.h"
#include "constants/field_effects.h"
#include "constants/trainers.h"
+#include "constants/trainer_tower.h"
#include "constants/object_events.h"
#include "constants/fame_checker.h"
#include "constants/seagallop.h"
@@ -31,6 +32,7 @@
#include "constants/trade.h"
#include "constants/quest_log.h"
#include "constants/daycare.h"
+#include "constants/easy_chat.h"
.include "asm/macros.inc"
.include "asm/macros/event.inc"
.set FALSE, 0
@@ -209,17 +211,17 @@ gStdScriptsEnd::
.include "data/maps/SixIsland_PatternBush/scripts.inc"
.include "data/maps/SixIsland_AlteringCave/scripts.inc"
.include "data/maps/NavelRock_Exterior/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_1F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_2F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_3F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_4F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_5F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_6F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_7F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_8F/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_Roof/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc"
- .include "data/maps/SevenIsland_TrainerTower_Elevator/scripts.inc"
+ .include "data/maps/TrainerTower_1F/scripts.inc"
+ .include "data/maps/TrainerTower_2F/scripts.inc"
+ .include "data/maps/TrainerTower_3F/scripts.inc"
+ .include "data/maps/TrainerTower_4F/scripts.inc"
+ .include "data/maps/TrainerTower_5F/scripts.inc"
+ .include "data/maps/TrainerTower_6F/scripts.inc"
+ .include "data/maps/TrainerTower_7F/scripts.inc"
+ .include "data/maps/TrainerTower_8F/scripts.inc"
+ .include "data/maps/TrainerTower_Roof/scripts.inc"
+ .include "data/maps/TrainerTower_Lobby/scripts.inc"
+ .include "data/maps/TrainerTower_Elevator/scripts.inc"
.include "data/maps/FiveIsland_LostCave_Entrance/scripts.inc"
.include "data/maps/FiveIsland_LostCave_Room1/scripts.inc"
.include "data/maps/FiveIsland_LostCave_Room2/scripts.inc"
@@ -594,7 +596,7 @@ gStdScriptsEnd::
.include "data/maps/FiveIsland_RocketWarehouse/text.inc"
.include "data/maps/SixIsland_DottedHole_SapphireRoom/text.inc"
.include "data/maps/SixIsland_PatternBush/text.inc"
- .include "data/maps/SevenIsland_TrainerTower_Lobby/text.inc"
+ .include "data/maps/TrainerTower_Lobby/text.inc"
.include "data/maps/FiveIsland_LostCave_Room1/text.inc"
.include "data/maps/FiveIsland_LostCave_Room4/text.inc"
.include "data/maps/FiveIsland_LostCave_Room10/text.inc"
@@ -638,6 +640,8 @@ gStdScriptsEnd::
.include "data/maps/Route18/text.inc"
.include "data/maps/Route19/text.inc"
.include "data/maps/Route20/text.inc"
+ .include "data/maps/Route21_North/text.inc"
+ .include "data/maps/Route21_South/text.inc"
.include "data/maps/Route22/text.inc"
.include "data/maps/Route23/text.inc"
.include "data/maps/Route24/text.inc"
@@ -942,23 +946,7 @@ Text_DugUpItemFromGround:: @ 81A5700
.string "from deep in the ground.$"
.include "data/text/route23.inc"
-
-Text_1A58A7:: @ 81A58A7
- .string "Let's see…\n"
- .string "Uh-oh! You have caught only\l"
- .string "{STR_VAR_3} kinds of POKéMON!\p"
- .string "You need {STR_VAR_1} kinds\n"
- .string "if you want the {STR_VAR_2}.$"
-
-Text_1A5909:: @ 81A5909
- .string "…Oh. I see.\p"
- .string "When you get {STR_VAR_1} kinds of POKéMON,\n"
- .string "come back for the {STR_VAR_2}.$"
-
-Text_1A594D:: @ 81A594D
- .string "Oh! I see you don't have any\n"
- .string "room for the {STR_VAR_2}.$"
-
+ .include "data/text/aide.inc"
.include "data/text/ingame_trade.inc"
Text_CardKeyOpenedDoor:: @ 81A5B88
@@ -1184,10 +1172,9 @@ EventScript_ResetEliteFour:: @ 81A6551
.include "data/scripts/obtain_item.inc"
.include "data/scripts/pc.inc"
-@ DoEasyChatScreen?
-EventScript_1A6AC0:: @ 81A6AC0
+Common_ShowEasyChatScreen:: @ 81A6AC0
fadescreen FADE_TO_BLACK
- special sub_80FEE44
+ special ShowEasyChatScreen
fadescreen FADE_FROM_BLACK
return
@@ -1347,8 +1334,8 @@ gUnknown_81A7702:: @ 81A7702
msgbox Text_FillOutQuestionnaire, MSGBOX_YESNO
compare VAR_RESULT, NO
goto_if_eq EventScript_1A778A
- setvar VAR_0x8004, 14
- call EventScript_1A6AC0
+ setvar VAR_0x8004, EASY_CHAT_TYPE_QUESTIONNAIRE
+ call Common_ShowEasyChatScreen
lock
faceplayer
specialvar VAR_0x8008, Special_GetMartClerkObjectId
@@ -1422,24 +1409,11 @@ Route18_EastEntrance_1F_EventScript_1A77C1:: @ 81A77C1
.include "data/scripts/route23.inc"
-EventScript_1A7AB9:: @ 81A7AB9
+EventScript_GetElevatorFloor:: @ 81A7AB9
special Special_GetElevatorFloor
return
-EventScript_1A7ABD:: @ 81A7ABD
- msgbox Text_1A58A7
- release
- end
-
-EventScript_1A7AC7:: @ 81A7AC7
- msgbox Text_1A594D
- release
- end
-
-EventScript_1A7AD1:: @ 81A7AD1
- msgbox Text_1A5909
- release
- end
+ .include "data/scripts/aide.inc"
gUnknown_81A7ADB:: @ 81A7ADB
special sub_80CADC4
diff --git a/data/field_screen_effect.s b/data/field_screen_effect.s
deleted file mode 100644
index 92078287d..000000000
--- a/data/field_screen_effect.s
+++ /dev/null
@@ -1,15 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83C68E0:: @ 83C68E0
- .4byte 4
-
-gUnknown_83C68E4:: @ 83C68E4
- .byte 0, 0, 5, 30, 11, 15
- .2byte 0x001
-
-gUnknown_83C68EC:: @ 83C68EC
- .byte 0, 1, 2
diff --git a/data/graphics.s b/data/graphics.s
index 809385e49..247a5d230 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16374,16 +16374,16 @@ gFameCheckerBg3Tilemap:: @ 8EA0700
gFameCheckerBg2Tilemap:: @ 8EA0F00
.incbin "data/graphics/fame_checker_tilemap2.bin"
-gUnknown_8EA1700:: @ 8EA1700
+gLinkMiscMenu_Pal:: @ 8EA1700
.incbin "graphics/interface/union_room_chat.gbapal"
-gUnknown_8EA1720:: @ 8EA1720
+gLinkMiscMenu_Gfx:: @ 8EA1720
.incbin "graphics/interface/union_room_chat.4bpp.lz"
-gUnknown_8EA1958:: @ 8EA1958
+gLinkMiscMenu_Tilemap:: @ 8EA1958
.incbin "graphics/interface/union_room_chat.bin.lz"
-gUnknown_8EA1A50:: @ 8EA1A50
+gUnionRoomChatIcons:: @ 8EA1A50
.incbin "graphics/interface/union_room_chat_icons.4bpp.lz"
.align 2
@@ -16508,13 +16508,13 @@ gTilesetPalettes_8EA9D88:: @ 8EA9D88
gTilesetTiles_8EA9F88:: @ 8EA9F88
.incbin "data/tilesets/secondary/82D4E6C/tiles.4bpp.lz"
-gUnknown_8EAA9F0:: @ 8EAA9F0
+gUnionRoomChatPanelBgPal_7:: @ 8EAA9F0
.incbin "graphics/interface/union_room_chat_panel.gbapal"
-gUnknown_8EAAA10:: @ 8EAAA10
+gUnionRoomChatPanelBgTiles:: @ 8EAAA10
.incbin "graphics/interface/union_room_chat_panel.4bpp.lz"
-gUnknown_8EAAA6C:: @ 8EAAA6C
+gUnionRoomChatPanelBgMap:: @ 8EAAA6C
.incbin "graphics/interface/union_room_chat_panel.bin.lz"
gCreditsMonBackdropPals:: @ 8EAAB18
diff --git a/data/layouts/SevenIsland_TrainerTower_1F/border.bin b/data/layouts/TrainerTower_1F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_1F/border.bin
+++ b/data/layouts/TrainerTower_1F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_1F/map.bin b/data/layouts/TrainerTower_1F/map.bin
index 812cea451..812cea451 100644
--- a/data/layouts/SevenIsland_TrainerTower_1F/map.bin
+++ b/data/layouts/TrainerTower_1F/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_2F/border.bin b/data/layouts/TrainerTower_1F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_2F/border.bin
+++ b/data/layouts/TrainerTower_1F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834BC2C/map.bin b/data/layouts/TrainerTower_1F_Doubles/map.bin
index 891ae066e..891ae066e 100644
--- a/data/layouts/UnusedLayout_834BC2C/map.bin
+++ b/data/layouts/TrainerTower_1F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_3F/border.bin b/data/layouts/TrainerTower_1F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_3F/border.bin
+++ b/data/layouts/TrainerTower_1F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D06C/map.bin b/data/layouts/TrainerTower_1F_Knockout/map.bin
index 3e3ebcc94..3e3ebcc94 100644
--- a/data/layouts/UnusedLayout_834D06C/map.bin
+++ b/data/layouts/TrainerTower_1F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_4F/border.bin b/data/layouts/TrainerTower_2F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_4F/border.bin
+++ b/data/layouts/TrainerTower_2F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_2F/map.bin b/data/layouts/TrainerTower_2F/map.bin
index 7ae889af1..7ae889af1 100644
--- a/data/layouts/SevenIsland_TrainerTower_2F/map.bin
+++ b/data/layouts/TrainerTower_2F/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_5F/border.bin b/data/layouts/TrainerTower_2F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_5F/border.bin
+++ b/data/layouts/TrainerTower_2F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834BEB4/map.bin b/data/layouts/TrainerTower_2F_Doubles/map.bin
index ab44abb18..ab44abb18 100644
--- a/data/layouts/UnusedLayout_834BEB4/map.bin
+++ b/data/layouts/TrainerTower_2F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_6F/border.bin b/data/layouts/TrainerTower_2F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_6F/border.bin
+++ b/data/layouts/TrainerTower_2F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D2F4/map.bin b/data/layouts/TrainerTower_2F_Knockout/map.bin
index cfc96995c..cfc96995c 100644
--- a/data/layouts/UnusedLayout_834D2F4/map.bin
+++ b/data/layouts/TrainerTower_2F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_7F/border.bin b/data/layouts/TrainerTower_3F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_7F/border.bin
+++ b/data/layouts/TrainerTower_3F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_3F/map.bin b/data/layouts/TrainerTower_3F/map.bin
index c01e70c2f..c01e70c2f 100644
--- a/data/layouts/SevenIsland_TrainerTower_3F/map.bin
+++ b/data/layouts/TrainerTower_3F/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_8F/border.bin b/data/layouts/TrainerTower_3F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_8F/border.bin
+++ b/data/layouts/TrainerTower_3F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C13C/map.bin b/data/layouts/TrainerTower_3F_Doubles/map.bin
index 514cb7239..514cb7239 100644
--- a/data/layouts/UnusedLayout_834C13C/map.bin
+++ b/data/layouts/TrainerTower_3F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_Elevator/border.bin b/data/layouts/TrainerTower_3F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_Elevator/border.bin
+++ b/data/layouts/TrainerTower_3F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D57C/map.bin b/data/layouts/TrainerTower_3F_Knockout/map.bin
index da9cc3f75..da9cc3f75 100644
--- a/data/layouts/UnusedLayout_834D57C/map.bin
+++ b/data/layouts/TrainerTower_3F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_Lobby/border.bin b/data/layouts/TrainerTower_4F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/SevenIsland_TrainerTower_Lobby/border.bin
+++ b/data/layouts/TrainerTower_4F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_4F/map.bin b/data/layouts/TrainerTower_4F/map.bin
index 057d7f955..057d7f955 100644
--- a/data/layouts/SevenIsland_TrainerTower_4F/map.bin
+++ b/data/layouts/TrainerTower_4F/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834BC2C/border.bin b/data/layouts/TrainerTower_4F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834BC2C/border.bin
+++ b/data/layouts/TrainerTower_4F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C3C4/map.bin b/data/layouts/TrainerTower_4F_Doubles/map.bin
index d9a50b7a1..d9a50b7a1 100644
--- a/data/layouts/UnusedLayout_834C3C4/map.bin
+++ b/data/layouts/TrainerTower_4F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834BEB4/border.bin b/data/layouts/TrainerTower_4F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834BEB4/border.bin
+++ b/data/layouts/TrainerTower_4F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D804/map.bin b/data/layouts/TrainerTower_4F_Knockout/map.bin
index cf5e1e94e..cf5e1e94e 100644
--- a/data/layouts/UnusedLayout_834D804/map.bin
+++ b/data/layouts/TrainerTower_4F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C13C/border.bin b/data/layouts/TrainerTower_5F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834C13C/border.bin
+++ b/data/layouts/TrainerTower_5F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_5F/map.bin b/data/layouts/TrainerTower_5F/map.bin
index d580e7d2d..d580e7d2d 100644
--- a/data/layouts/SevenIsland_TrainerTower_5F/map.bin
+++ b/data/layouts/TrainerTower_5F/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C3C4/border.bin b/data/layouts/TrainerTower_5F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834C3C4/border.bin
+++ b/data/layouts/TrainerTower_5F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C64C/map.bin b/data/layouts/TrainerTower_5F_Doubles/map.bin
index 37b4aba85..37b4aba85 100644
--- a/data/layouts/UnusedLayout_834C64C/map.bin
+++ b/data/layouts/TrainerTower_5F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C64C/border.bin b/data/layouts/TrainerTower_5F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834C64C/border.bin
+++ b/data/layouts/TrainerTower_5F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DA8C/map.bin b/data/layouts/TrainerTower_5F_Knockout/map.bin
index 1f10bfff1..1f10bfff1 100644
--- a/data/layouts/UnusedLayout_834DA8C/map.bin
+++ b/data/layouts/TrainerTower_5F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C8D4/border.bin b/data/layouts/TrainerTower_6F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834C8D4/border.bin
+++ b/data/layouts/TrainerTower_6F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_6F/map.bin b/data/layouts/TrainerTower_6F/map.bin
index 3c2c3165c..3c2c3165c 100644
--- a/data/layouts/SevenIsland_TrainerTower_6F/map.bin
+++ b/data/layouts/TrainerTower_6F/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834CB5C/border.bin b/data/layouts/TrainerTower_6F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834CB5C/border.bin
+++ b/data/layouts/TrainerTower_6F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834C8D4/map.bin b/data/layouts/TrainerTower_6F_Doubles/map.bin
index 2df5cd891..2df5cd891 100644
--- a/data/layouts/UnusedLayout_834C8D4/map.bin
+++ b/data/layouts/TrainerTower_6F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834CDE4/border.bin b/data/layouts/TrainerTower_6F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834CDE4/border.bin
+++ b/data/layouts/TrainerTower_6F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DD14/map.bin b/data/layouts/TrainerTower_6F_Knockout/map.bin
index fe3d6f908..fe3d6f908 100644
--- a/data/layouts/UnusedLayout_834DD14/map.bin
+++ b/data/layouts/TrainerTower_6F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D06C/border.bin b/data/layouts/TrainerTower_7F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834D06C/border.bin
+++ b/data/layouts/TrainerTower_7F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_7F/map.bin b/data/layouts/TrainerTower_7F/map.bin
index d9bb110cf..d9bb110cf 100644
--- a/data/layouts/SevenIsland_TrainerTower_7F/map.bin
+++ b/data/layouts/TrainerTower_7F/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D2F4/border.bin b/data/layouts/TrainerTower_7F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834D2F4/border.bin
+++ b/data/layouts/TrainerTower_7F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834CB5C/map.bin b/data/layouts/TrainerTower_7F_Doubles/map.bin
index e977b7e26..e977b7e26 100644
--- a/data/layouts/UnusedLayout_834CB5C/map.bin
+++ b/data/layouts/TrainerTower_7F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D57C/border.bin b/data/layouts/TrainerTower_7F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834D57C/border.bin
+++ b/data/layouts/TrainerTower_7F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DF9C/map.bin b/data/layouts/TrainerTower_7F_Knockout/map.bin
index 241077797..241077797 100644
--- a/data/layouts/UnusedLayout_834DF9C/map.bin
+++ b/data/layouts/TrainerTower_7F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834D804/border.bin b/data/layouts/TrainerTower_8F/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834D804/border.bin
+++ b/data/layouts/TrainerTower_8F/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_8F/map.bin b/data/layouts/TrainerTower_8F/map.bin
index 6ba6588be..6ba6588be 100644
--- a/data/layouts/SevenIsland_TrainerTower_8F/map.bin
+++ b/data/layouts/TrainerTower_8F/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DA8C/border.bin b/data/layouts/TrainerTower_8F_Doubles/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834DA8C/border.bin
+++ b/data/layouts/TrainerTower_8F_Doubles/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834CDE4/map.bin b/data/layouts/TrainerTower_8F_Doubles/map.bin
index e358d2f3d..e358d2f3d 100644
--- a/data/layouts/UnusedLayout_834CDE4/map.bin
+++ b/data/layouts/TrainerTower_8F_Doubles/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DD14/border.bin b/data/layouts/TrainerTower_8F_Knockout/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834DD14/border.bin
+++ b/data/layouts/TrainerTower_8F_Knockout/border.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834E224/map.bin b/data/layouts/TrainerTower_8F_Knockout/map.bin
index bb5ccf05c..bb5ccf05c 100644
--- a/data/layouts/UnusedLayout_834E224/map.bin
+++ b/data/layouts/TrainerTower_8F_Knockout/map.bin
Binary files differ
diff --git a/data/layouts/UnusedLayout_834DF9C/border.bin b/data/layouts/TrainerTower_Elevator/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834DF9C/border.bin
+++ b/data/layouts/TrainerTower_Elevator/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_Elevator/map.bin b/data/layouts/TrainerTower_Elevator/map.bin
index 42e08c38d..42e08c38d 100644
--- a/data/layouts/SevenIsland_TrainerTower_Elevator/map.bin
+++ b/data/layouts/TrainerTower_Elevator/map.bin
diff --git a/data/layouts/UnusedLayout_834E224/border.bin b/data/layouts/TrainerTower_Lobby/border.bin
index a886cd764..a886cd764 100644
--- a/data/layouts/UnusedLayout_834E224/border.bin
+++ b/data/layouts/TrainerTower_Lobby/border.bin
Binary files differ
diff --git a/data/layouts/SevenIsland_TrainerTower_Lobby/map.bin b/data/layouts/TrainerTower_Lobby/map.bin
index b98077279..b98077279 100644
--- a/data/layouts/SevenIsland_TrainerTower_Lobby/map.bin
+++ b/data/layouts/TrainerTower_Lobby/map.bin
diff --git a/data/layouts/SevenIsland_TrainerTower_Roof/border.bin b/data/layouts/TrainerTower_Roof/border.bin
index f94adee61..f94adee61 100644
--- a/data/layouts/SevenIsland_TrainerTower_Roof/border.bin
+++ b/data/layouts/TrainerTower_Roof/border.bin
diff --git a/data/layouts/SevenIsland_TrainerTower_Roof/map.bin b/data/layouts/TrainerTower_Roof/map.bin
index 37d57f3fe..37d57f3fe 100644
--- a/data/layouts/SevenIsland_TrainerTower_Roof/map.bin
+++ b/data/layouts/TrainerTower_Roof/map.bin
diff --git a/data/layouts/layouts.json b/data/layouts/layouts.json
index 63fc06562..8f09ae939 100644
--- a/data/layouts/layouts.json
+++ b/data/layouts/layouts.json
@@ -3356,136 +3356,136 @@
"blockdata_filepath": "data/layouts/FourIsland_IcefallCave_Back/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY",
- "name": "SevenIsland_TrainerTower_Lobby_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_LOBBY",
+ "name": "TrainerTower_Lobby_Layout",
"width": 19,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_Lobby/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_Lobby/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_Lobby/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_Lobby/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F",
- "name": "SevenIsland_TrainerTower_1F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_1F",
+ "name": "TrainerTower_1F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_1F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_1F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_1F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_1F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_2F",
- "name": "SevenIsland_TrainerTower_2F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_2F",
+ "name": "TrainerTower_2F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_2F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_2F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_2F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_2F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_3F",
- "name": "SevenIsland_TrainerTower_3F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_3F",
+ "name": "TrainerTower_3F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_3F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_3F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_3F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_3F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_4F",
- "name": "SevenIsland_TrainerTower_4F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_4F",
+ "name": "TrainerTower_4F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_4F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_4F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_4F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_4F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_5F",
- "name": "SevenIsland_TrainerTower_5F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_5F",
+ "name": "TrainerTower_5F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_5F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_5F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_5F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_5F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_6F",
- "name": "SevenIsland_TrainerTower_6F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_6F",
+ "name": "TrainerTower_6F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_6F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_6F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_6F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_6F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_7F",
- "name": "SevenIsland_TrainerTower_7F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_7F",
+ "name": "TrainerTower_7F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_7F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_7F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_7F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_7F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_8F",
- "name": "SevenIsland_TrainerTower_8F_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_8F",
+ "name": "TrainerTower_8F_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_8F/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_8F/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_8F/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_8F/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ROOF",
- "name": "SevenIsland_TrainerTower_Roof_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_ROOF",
+ "name": "TrainerTower_Roof_Layout",
"width": 18,
"height": 16,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_Roof/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_Roof/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_Roof/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_Roof/map.bin"
},
{
- "id": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
- "name": "SevenIsland_TrainerTower_Elevator_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_ELEVATOR",
+ "name": "TrainerTower_Elevator_Layout",
"width": 5,
"height": 7,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D4ECC",
- "border_filepath": "data/layouts/SevenIsland_TrainerTower_Elevator/border.bin",
- "blockdata_filepath": "data/layouts/SevenIsland_TrainerTower_Elevator/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_Elevator/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_Elevator/map.bin"
},
{
"id": "LAYOUT_CERULEAN_CITY_HOUSE5",
@@ -4184,196 +4184,196 @@
"blockdata_filepath": "data/layouts/NavelRock_Fork/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834BC2C",
- "name": "UnusedLayout_834BC2C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_1F_DOUBLES",
+ "name": "TrainerTower_1F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834BC2C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834BC2C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_1F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_1F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834BEB4",
- "name": "UnusedLayout_834BEB4_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_2F_DOUBLES",
+ "name": "TrainerTower_2F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834BEB4/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834BEB4/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_2F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_2F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834C13C",
- "name": "UnusedLayout_834C13C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_3F_DOUBLES",
+ "name": "TrainerTower_3F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834C13C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834C13C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_3F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_3F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834C3C4",
- "name": "UnusedLayout_834C3C4_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_4F_DOUBLES",
+ "name": "TrainerTower_4F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834C3C4/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834C3C4/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_4F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_4F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834C64C",
- "name": "UnusedLayout_834C64C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_5F_DOUBLES",
+ "name": "TrainerTower_5F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834C64C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834C64C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_5F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_5F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834C8D4",
- "name": "UnusedLayout_834C8D4_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_6F_DOUBLES",
+ "name": "TrainerTower_6F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834C8D4/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834C8D4/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_6F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_6F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834CB5C",
- "name": "UnusedLayout_834CB5C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_7F_DOUBLES",
+ "name": "TrainerTower_7F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834CB5C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834CB5C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_7F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_7F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834CDE4",
- "name": "UnusedLayout_834CDE4_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_8F_DOUBLES",
+ "name": "TrainerTower_8F_Doubles_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834CDE4/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834CDE4/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_8F_Doubles/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_8F_Doubles/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834D06C",
- "name": "UnusedLayout_834D06C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_1F_KNOCKOUT",
+ "name": "TrainerTower_1F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834D06C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834D06C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_1F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_1F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834D2F4",
- "name": "UnusedLayout_834D2F4_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_2F_KNOCKOUT",
+ "name": "TrainerTower_2F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834D2F4/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834D2F4/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_2F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_2F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834D57C",
- "name": "UnusedLayout_834D57C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_3F_KNOCKOUT",
+ "name": "TrainerTower_3F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834D57C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834D57C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_3F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_3F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834D804",
- "name": "UnusedLayout_834D804_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_4F_KNOCKOUT",
+ "name": "TrainerTower_4F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834D804/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834D804/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_4F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_4F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834DA8C",
- "name": "UnusedLayout_834DA8C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_5F_KNOCKOUT",
+ "name": "TrainerTower_5F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834DA8C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834DA8C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_5F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_5F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834DD14",
- "name": "UnusedLayout_834DD14_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_6F_KNOCKOUT",
+ "name": "TrainerTower_6F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834DD14/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834DD14/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_6F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_6F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834DF9C",
- "name": "UnusedLayout_834DF9C_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_7F_KNOCKOUT",
+ "name": "TrainerTower_7F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834DF9C/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834DF9C/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_7F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_7F_Knockout/map.bin"
},
{
- "id": "LAYOUT_UNUSED_LAYOUT_834E224",
- "name": "UnusedLayout_834E224_Layout",
+ "id": "LAYOUT_TRAINER_TOWER_8F_KNOCKOUT",
+ "name": "TrainerTower_8F_Knockout_Layout",
"width": 18,
"height": 17,
"border_width": 2,
"border_height": 2,
"primary_tileset": "gTileset_82D4BB4",
"secondary_tileset": "gTileset_82D5094",
- "border_filepath": "data/layouts/UnusedLayout_834E224/border.bin",
- "blockdata_filepath": "data/layouts/UnusedLayout_834E224/map.bin"
+ "border_filepath": "data/layouts/TrainerTower_8F_Knockout/border.bin",
+ "blockdata_filepath": "data/layouts/TrainerTower_8F_Knockout/map.bin"
},
{
"id": "LAYOUT_SEVEN_ISLAND_HOUSE_ROOM1",
diff --git a/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc b/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc
index 7a3737610..9469abce4 100644
--- a/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc
+++ b/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc
@@ -4,7 +4,7 @@ CeladonCity_DepartmentStore_Elevator_MapScripts:: @ 816C152
CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelect:: @ 816C153
lockall
setvar VAR_0x8004, 3
- call_if_unset FLAG_TEMP_2, EventScript_1A7AB9
+ call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor
copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR
special Special_DrawElevatorCurrentFloorWindow
message Text_WantWhichFloor
diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index d28125f72..0e466abd3 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -346,7 +346,7 @@ EventScript_16939C:: @ 816939C
end
EventScript_1693AC:: @ 81693AC
- trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_SQUIRTLE, 3, Text_18DDEA, Text_18DE1A
+ trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_SQUIRTLE, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory
goto EventScript_1694C2
end
@@ -402,7 +402,7 @@ EventScript_169414:: @ 8169414
end
EventScript_169424:: @ 8169424
- trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_CHARMANDER, 3, Text_18DDEA, Text_18DE1A
+ trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_CHARMANDER, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory
goto EventScript_1694C2
end
@@ -461,7 +461,7 @@ EventScript_16948F:: @ 816948F
end
EventScript_16949F:: @ 816949F
- trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_BULBASAUR, 3, Text_18DDEA, Text_18DE1A
+ trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_BULBASAUR, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory
goto EventScript_1694C2
end
diff --git a/data/maps/PalletTown_ProfessorOaksLab/text.inc b/data/maps/PalletTown_ProfessorOaksLab/text.inc
index 3d0c7ba57..e437d4b39 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/text.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/text.inc
@@ -36,7 +36,8 @@ Text_18DDEA:: @ 818DDEA
.string "Unbelievable!\l"
.string "I picked the wrong POKéMON!$"
-Text_18DE1A:: @ 818DE1A
+@ Also used for early Route 22 battle
+Text_RivalVictory:: @ 818DE1A
.string "{RIVAL}: Yeah!\n"
.string "Am I great or what?$"
diff --git a/data/maps/RocketHideout_Elevator/scripts.inc b/data/maps/RocketHideout_Elevator/scripts.inc
index f649e5c40..e797e98a9 100644
--- a/data/maps/RocketHideout_Elevator/scripts.inc
+++ b/data/maps/RocketHideout_Elevator/scripts.inc
@@ -5,7 +5,7 @@ RocketHideout_Elevator_EventScript_1614D9:: @ 81614D9
lockall
goto_if_unset FLAG_CAN_USE_ROCKET_HIDEOUT_LIFT, EventScript_16161B
setvar VAR_0x8004, 2
- call_if_unset FLAG_TEMP_2, EventScript_1A7AB9
+ call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor
copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR
special Special_DrawElevatorCurrentFloorWindow
message Text_WantWhichFloor
diff --git a/data/maps/Route1/map.json b/data/maps/Route1/map.json
index 8d636de9a..1a2426066 100644
--- a/data/maps/Route1/map.json
+++ b/data/maps/Route1/map.json
@@ -34,7 +34,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route1_EventScript_167EFE",
+ "script": "Route1_EventScript_MartClerk",
"flag": "0"
},
{
@@ -47,7 +47,7 @@
"movement_range_y": 3,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route1_EventScript_167F52",
+ "script": "Route1_EventScript_Boy",
"flag": "0"
}
],
@@ -59,7 +59,7 @@
"x": 9,
"y": 31,
"elevation": 0,
- "script": "Route1_EventScript_167F5B"
+ "script": "Route1_EventScript_RouteSign"
}
]
}
diff --git a/data/maps/Route1/scripts.inc b/data/maps/Route1/scripts.inc
index 8d5617e3f..36a42f65e 100644
--- a/data/maps/Route1/scripts.inc
+++ b/data/maps/Route1/scripts.inc
@@ -1,11 +1,11 @@
Route1_MapScripts:: @ 8167EFD
.byte 0
-Route1_EventScript_167EFE:: @ 8167EFE
+Route1_EventScript_MartClerk:: @ 8167EFE
lock
faceplayer
- goto_if_set FLAG_GOT_POTION_ON_ROUTE_1, EventScript_167F48
- msgbox gUnknown_818329D
+ goto_if_set FLAG_GOT_POTION_ON_ROUTE_1, Route1_EventScript_AlreadyGotPotion
+ msgbox Route1_Text_WorkAtPokeMartTakeSample
textcolor 3
checkitemspace ITEM_POTION, 1
compare VAR_RESULT, FALSE
@@ -16,21 +16,21 @@ Route1_EventScript_167EFE:: @ 8167EFE
waitmessage
waitfanfare
additem ITEM_POTION
- msgbox gUnknown_8183387
+ msgbox Route1_Text_PutPotionAway
call EventScript_1A6675
setflag FLAG_GOT_POTION_ON_ROUTE_1
release
end
-EventScript_167F48:: @ 8167F48
- msgbox gUnknown_8183347
+Route1_EventScript_AlreadyGotPotion:: @ 8167F48
+ msgbox Route1_Text_ComeSeeUsIfYouNeedPokeBalls
release
end
-Route1_EventScript_167F52:: @ 8167F52
- msgbox gUnknown_81833B9, MSGBOX_NPC
+Route1_EventScript_Boy:: @ 8167F52
+ msgbox Route1_Text_CanJumpFromLedges, MSGBOX_NPC
end
-Route1_EventScript_167F5B:: @ 8167F5B
- msgbox gUnknown_818343A, MSGBOX_SIGN
+Route1_EventScript_RouteSign:: @ 8167F5B
+ msgbox Route1_Text_RouteSign, MSGBOX_SIGN
end
diff --git a/data/maps/Route1/text.inc b/data/maps/Route1/text.inc
index 7b4150b03..57ebecb86 100644
--- a/data/maps/Route1/text.inc
+++ b/data/maps/Route1/text.inc
@@ -1,4 +1,4 @@
-gUnknown_818329D:: @ 818329D
+Route1_Text_WorkAtPokeMartTakeSample:: @ 818329D
.string "Hi!\n"
.string "I work at a POKéMON MART.\p"
.string "It's part of a convenient chain\n"
@@ -7,22 +7,22 @@ gUnknown_818329D:: @ 818329D
.string "I know, I'll give you a sample.\n"
.string "Here you go!$"
-gUnknown_8183347:: @ 8183347
+Route1_Text_ComeSeeUsIfYouNeedPokeBalls:: @ 8183347
.string "Please come see us if you need\n"
.string "POKé BALLS for catching POKéMON.$"
-gUnknown_8183387:: @ 8183387
+Route1_Text_PutPotionAway:: @ 8183387
.string "{PLAYER} put the POTION away in\n"
.string "the BAG's ITEMS POCKET.$"
-gUnknown_81833B9:: @ 81833B9
+Route1_Text_CanJumpFromLedges:: @ 81833B9
.string "See those ledges along the road?\p"
.string "It's a bit scary, but you can jump\n"
.string "from them.\p"
.string "You can get back to PALLET TOWN\n"
.string "quicker that way.$"
-gUnknown_818343A:: @ 818343A
+Route1_Text_RouteSign:: @ 818343A
.string "ROUTE 1\n"
.string "PALLET TOWN - VIRIDIAN CITY$"
diff --git a/data/maps/Route10_PokemonCenter_1F/scripts.inc b/data/maps/Route10_PokemonCenter_1F/scripts.inc
index f81563b0c..56e0b448e 100644
--- a/data/maps/Route10_PokemonCenter_1F/scripts.inc
+++ b/data/maps/Route10_PokemonCenter_1F/scripts.inc
@@ -34,17 +34,17 @@ Route10_PokemonCenter_1F_EventScript_16FC65:: @ 816FC65
goto_if_set FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE, EventScript_16FCE7
msgbox gUnknown_819E5FB, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_1A7AD1
+ goto_if_eq Aide_EventScript_DeclineCheckMons
setvar VAR_0x8004, 0
specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_16FCF1
compare VAR_0x8006, 20
- goto_if_lt EventScript_1A7ABD
+ goto_if_lt Aide_EventScript_HaventCaughtEnough
msgbox gUnknown_819E733
checkitemspace ITEM_EVERSTONE, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_1A7AC7
+ goto_if_eq Aide_EventScript_NoRoomForItem
giveitem_msg gUnknown_819E786, ITEM_EVERSTONE
setflag FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE
msgbox gUnknown_819E7AF
diff --git a/data/maps/Route11_EastEntrance_2F/scripts.inc b/data/maps/Route11_EastEntrance_2F/scripts.inc
index 68b520e47..91a6d20bd 100644
--- a/data/maps/Route11_EastEntrance_2F/scripts.inc
+++ b/data/maps/Route11_EastEntrance_2F/scripts.inc
@@ -61,17 +61,17 @@ Route11_EastEntrance_2F_EventScript_16FDD8:: @ 816FDD8
goto_if_set FLAG_GOT_ITEMFINDER, EventScript_16FE5A
msgbox gUnknown_819E9E5, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_1A7AD1
+ goto_if_eq Aide_EventScript_DeclineCheckMons
setvar VAR_0x8004, 0
specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_16FE64
compare VAR_0x8006, 30
- goto_if_lt EventScript_1A7ABD
+ goto_if_lt Aide_EventScript_HaventCaughtEnough
msgbox gUnknown_819EAE4
checkitemspace ITEM_ITEMFINDER, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_1A7AC7
+ goto_if_eq Aide_EventScript_NoRoomForItem
giveitem_msg gUnknown_819EB37, ITEM_ITEMFINDER
setflag FLAG_GOT_ITEMFINDER
msgbox gUnknown_819EB59
diff --git a/data/maps/Route15_WestEntrance_2F/scripts.inc b/data/maps/Route15_WestEntrance_2F/scripts.inc
index c4cc4b6fd..088a65876 100644
--- a/data/maps/Route15_WestEntrance_2F/scripts.inc
+++ b/data/maps/Route15_WestEntrance_2F/scripts.inc
@@ -24,17 +24,17 @@ Route15_WestEntrance_2F_EventScript_1700B9:: @ 81700B9
goto_if_set FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE, EventScript_17013B
msgbox gUnknown_819F5AB, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_1A7AD1
+ goto_if_eq Aide_EventScript_DeclineCheckMons
setvar VAR_0x8004, 0
specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_170145
compare VAR_0x8006, 50
- goto_if_lt EventScript_1A7ABD
+ goto_if_lt Aide_EventScript_HaventCaughtEnough
msgbox gUnknown_819F6AA
checkitemspace ITEM_EXP_SHARE, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_1A7AC7
+ goto_if_eq Aide_EventScript_NoRoomForItem
giveitem_msg gUnknown_819F6FD, ITEM_EXP_SHARE
setflag FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE
msgbox gUnknown_819F71F
diff --git a/data/maps/Route16_NorthEntrance_2F/scripts.inc b/data/maps/Route16_NorthEntrance_2F/scripts.inc
index 2dfd8f1b0..7ccba34c8 100644
--- a/data/maps/Route16_NorthEntrance_2F/scripts.inc
+++ b/data/maps/Route16_NorthEntrance_2F/scripts.inc
@@ -24,17 +24,17 @@ Route16_NorthEntrance_2F_EventScript_1702E3:: @ 81702E3
goto_if_set FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE, EventScript_170365
msgbox gUnknown_819FB0E, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_1A7AD1
+ goto_if_eq Aide_EventScript_DeclineCheckMons
setvar VAR_0x8004, 0
specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_17036F
compare VAR_0x8006, 40
- goto_if_lt EventScript_1A7ABD
+ goto_if_lt Aide_EventScript_HaventCaughtEnough
msgbox gUnknown_819FC15
checkitemspace ITEM_AMULET_COIN, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_1A7AC7
+ goto_if_eq Aide_EventScript_NoRoomForItem
giveitem_msg gUnknown_819FC68, ITEM_AMULET_COIN
setflag FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE
msgbox gUnknown_819FC93
diff --git a/data/maps/Route2/map.json b/data/maps/Route2/map.json
index ac504faae..86be51055 100644
--- a/data/maps/Route2/map.json
+++ b/data/maps/Route2/map.json
@@ -195,14 +195,14 @@
"x": 14,
"y": 12,
"elevation": 0,
- "script": "Route2_EventScript_167F6E"
+ "script": "Route2_EventScript_DiglettsCaveSign"
},
{
"type": "bg_event_type_0",
"x": 7,
"y": 73,
"elevation": 0,
- "script": "Route2_EventScript_167F65"
+ "script": "Route2_EventScript_RouteSign"
}
]
}
diff --git a/data/maps/Route2/scripts.inc b/data/maps/Route2/scripts.inc
index 75a3dd87b..2ecb31d72 100644
--- a/data/maps/Route2/scripts.inc
+++ b/data/maps/Route2/scripts.inc
@@ -1,10 +1,10 @@
Route2_MapScripts:: @ 8167F64
.byte 0
-Route2_EventScript_167F65:: @ 8167F65
- msgbox gUnknown_818345E, MSGBOX_SIGN
+Route2_EventScript_RouteSign:: @ 8167F65
+ msgbox Route2_Text_RouteSign, MSGBOX_SIGN
end
-Route2_EventScript_167F6E:: @ 8167F6E
- msgbox gUnknown_8183482, MSGBOX_SIGN
+Route2_EventScript_DiglettsCaveSign:: @ 8167F6E
+ msgbox Route2_Text_DiglettsCave, MSGBOX_SIGN
end
diff --git a/data/maps/Route2/text.inc b/data/maps/Route2/text.inc
index 4197b7071..1ca497d6b 100644
--- a/data/maps/Route2/text.inc
+++ b/data/maps/Route2/text.inc
@@ -1,7 +1,7 @@
-gUnknown_818345E:: @ 818345E
+Route2_Text_RouteSign:: @ 818345E
.string "ROUTE 2\n"
.string "VIRIDIAN CITY - PEWTER CITY$"
-gUnknown_8183482:: @ 8183482
+Route2_Text_DiglettsCave:: @ 8183482
.string "DIGLETT'S CAVE$"
diff --git a/data/maps/Route21_North/text.inc b/data/maps/Route21_North/text.inc
new file mode 100644
index 000000000..e8fc3223a
--- /dev/null
+++ b/data/maps/Route21_North/text.inc
@@ -0,0 +1,48 @@
+Text_1882E1:: @ 81882E1
+ .string "Strong TRAINERS and WATER POKéMON\n"
+ .string "are common sights in these parts.\p"
+ .string "They say that MISTY of the\n"
+ .string "CERULEAN GYM trains here.$"
+
+Text_18835A:: @ 818835A
+ .string "You want to know if the fish are\n"
+ .string "biting?$"
+
+Text_188383:: @ 8188383
+ .string "Dang!$"
+
+Text_188389:: @ 8188389
+ .string "I can't catch anything good.\n"
+ .string "Not one good POKéMON to be had!$"
+
+Text_1883C6:: @ 81883C6
+ .string "I got a big haul!\n"
+ .string "Wanna go for it?$"
+
+Text_1883E9:: @ 81883E9
+ .string "Heheh, MAGIKARP just don't make\n"
+ .string "the grade, do they?$"
+
+Text_18841D:: @ 818841D
+ .string "I seem to only catch MAGIKARP!$"
+
+Text_18843C:: @ 818843C
+ .string "The sea cleanses my body and soul!$"
+
+Text_18845F:: @ 818845F
+ .string "Ayah!$"
+
+Text_188465:: @ 8188465
+ .string "The sea is great and all, but I\n"
+ .string "like the mountains, too.$"
+
+Text_18849E:: @ 818849E
+ .string "おれだって たまには\n"
+ .string "およぎに くるぜ!$"
+
+Text_1884B3:: @ 81884B3
+ .string "ぐわわ!$"
+
+Text_1884B8:: @ 81884B8
+ .string "うきやすそう だと?\n"
+ .string "うるせー おおきな おせわだッ!$"
diff --git a/data/maps/Route21_South/text.inc b/data/maps/Route21_South/text.inc
new file mode 100644
index 000000000..8700006ef
--- /dev/null
+++ b/data/maps/Route21_South/text.inc
@@ -0,0 +1,87 @@
+Text_1884D4:: @ 81884D4
+ .string "I caught my POKéMON at sea.$"
+
+Text_1884F0:: @ 81884F0
+ .string "Diver!!\n"
+ .string "Down!!$"
+
+Text_1884FF:: @ 81884FF
+ .string "Where'd you catch your POKéMON?$"
+
+Text_18851F:: @ 818851F
+ .string "Right now, I'm in a triathlon meet.$"
+
+Text_188543:: @ 8188543
+ .string "Pant…\n"
+ .string "Pant… Pant…$"
+
+Text_188555:: @ 8188555
+ .string "I'm beat! But, I still have the\n"
+ .string "bike race and marathon left!$"
+
+Text_188592:: @ 8188592
+ .string "Ahh!\n"
+ .string "Feel the sun and the wind!$"
+
+Text_1885B2:: @ 81885B2
+ .string "Yow!\n"
+ .string "I lost!$"
+
+Text_1885BF:: @ 81885BF
+ .string "I'm sunburnt to a crisp!$"
+
+Text_1885D8:: @ 81885D8
+ .string "Hey, don't scare away the fish!$"
+
+Text_1885F8:: @ 81885F8
+ .string "Sorry! I'm just so frustrated from\n"
+ .string "not catching anything.$"
+
+Text_188632:: @ 8188632
+ .string "Sheesh, I haven't caught a thing.\n"
+ .string "Could this place actually be a\l"
+ .string "giant pool or something?$"
+
+Text_18868C:: @ 818868C
+ .string "Keep me company till I get a hit.$"
+
+Text_1886AE:: @ 81886AE
+ .string "That burned some time.$"
+
+Text_1886C5:: @ 81886C5
+ .string "Oh wait!\n"
+ .string "I got a bite! Yeah!$"
+
+Text_1886E2:: @ 81886E2
+ .string "LIL: Huh? A battle?\n"
+ .string "IAN, can't you do it alone?$"
+
+Text_188712:: @ 8188712
+ .string "LIL: Oh, see?\n"
+ .string "We lost. Happy now?$"
+
+Text_188734:: @ 8188734
+ .string "LIL: I'm tired.\n"
+ .string "Can't we go home already?$"
+
+Text_18875E:: @ 818875E
+ .string "LIL: Huh? A battle?\n"
+ .string "I can't be bothered to do it alone.\l"
+ .string "Bring two POKéMON, won't you?$"
+
+Text_1887B4:: @ 81887B4
+ .string "IAN: My sis doesn't get enough\n"
+ .string "exercise, so I made her come.$"
+
+Text_1887F1:: @ 81887F1
+ .string "IAN: Awww, Sis!\n"
+ .string "Get it together!$"
+
+Text_188812:: @ 8188812
+ .string "IAN: Come on, Sis!\p"
+ .string "You're not going to lose weight\n"
+ .string "like this!$"
+
+Text_188850:: @ 8188850
+ .string "IAN: We want a two-on-two battle.\n"
+ .string "So can you bring two POKéMON?$"
diff --git a/data/maps/Route22/map.json b/data/maps/Route22/map.json
index c6f903acc..e8695121f 100644
--- a/data/maps/Route22/map.json
+++ b/data/maps/Route22/map.json
@@ -62,7 +62,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 1,
- "script": "Route22_EventScript_16828C"
+ "script": "Route22_EventScript_EarlyRivalTriggerTop"
},
{
"type": "trigger",
@@ -71,7 +71,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 1,
- "script": "Route22_EventScript_168298"
+ "script": "Route22_EventScript_EarlyRivalTriggerMid"
},
{
"type": "trigger",
@@ -80,7 +80,7 @@
"elevation": 0,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 1,
- "script": "Route22_EventScript_1682AB"
+ "script": "Route22_EventScript_EarlyRivalTriggerBottom"
},
{
"type": "trigger",
@@ -89,7 +89,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 3,
- "script": "Route22_EventScript_1683ED"
+ "script": "Route22_EventScript_LateRivalTriggerTop"
},
{
"type": "trigger",
@@ -98,7 +98,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 3,
- "script": "Route22_EventScript_1683F9"
+ "script": "Route22_EventScript_LateRivalTriggerMid"
},
{
"type": "trigger",
@@ -107,7 +107,7 @@
"elevation": 0,
"var": "VAR_MAP_SCENE_ROUTE22",
"var_value": 3,
- "script": "Route22_EventScript_16840C"
+ "script": "Route22_EventScript_LateRivalTriggerBottom"
}
],
"bg_events": [
@@ -116,7 +116,7 @@
"x": 7,
"y": 12,
"elevation": 0,
- "script": "Route22_EventScript_1684E2"
+ "script": "Route22_EventScript_LeagueGateSign"
}
]
}
diff --git a/data/maps/Route22/scripts.inc b/data/maps/Route22/scripts.inc
index 8036883f3..dbc10e129 100644
--- a/data/maps/Route22/scripts.inc
+++ b/data/maps/Route22/scripts.inc
@@ -1,100 +1,94 @@
Route22_MapScripts:: @ 816828B
.byte 0
-Route22_EventScript_16828C:: @ 816828C
+Route22_EventScript_EarlyRivalTriggerTop:: @ 816828C
lockall
setvar VAR_TEMP_1, 0
- goto EventScript_1682BE
-
-EventScript_168297:: @ 8168297
+ goto Route22_EventScript_EarlyRival
end
-Route22_EventScript_168298:: @ 8168298
+Route22_EventScript_EarlyRivalTriggerMid:: @ 8168298
lockall
setvar VAR_TEMP_1, 1
setobjectxyperm 1, 25, 5
- goto EventScript_1682BE
-
-EventScript_1682AA:: @ 81682AA
+ goto Route22_EventScript_EarlyRival
end
-Route22_EventScript_1682AB:: @ 81682AB
+Route22_EventScript_EarlyRivalTriggerBottom:: @ 81682AB
lockall
setvar VAR_TEMP_1, 2
setobjectxyperm 1, 25, 5
- goto EventScript_1682BE
-
-EventScript_1682BD:: @ 81682BD
+ goto Route22_EventScript_EarlyRival
end
-EventScript_1682BE:: @ 81682BE
+Route22_EventScript_EarlyRival:: @ 81682BE
textcolor 0
playbgm MUS_RIVAL1, 0
addobject 1
compare VAR_TEMP_1, 0
- call_if_eq EventScript_168350
+ call_if_eq Route22_EventScript_EarlyRivalApproach
compare VAR_TEMP_1, 1
- call_if_eq EventScript_168350
+ call_if_eq Route22_EventScript_EarlyRivalApproach
compare VAR_TEMP_1, 2
- call_if_eq EventScript_16835B
+ call_if_eq Route22_EventScript_EarlyRivalApproachBottom
delay 6
- msgbox gUnknown_8188890
+ msgbox Route22_Text_EarlyRivalIntro
compare VAR_STARTER_MON, 2
- call_if_eq EventScript_16836D
+ call_if_eq Route22_EventScript_EarlyRivalSquirtle
compare VAR_STARTER_MON, 1
- call_if_eq EventScript_16837C
+ call_if_eq Route22_EventScript_EarlyRivalBulbasaur
compare VAR_STARTER_MON, 0
- call_if_eq EventScript_16838B
- msgbox gUnknown_8188974
+ call_if_eq Route22_EventScript_EarlyRivalCharmander
+ msgbox Route22_Text_EarlyRivalPostBattle
closemessage
delay 10
playbgm MUS_RIVAL2, 0
compare VAR_TEMP_1, 0
- call_if_eq EventScript_16839A
+ call_if_eq Route22_EventScript_EarlyRivalExit
compare VAR_TEMP_1, 1
- call_if_eq EventScript_16839A
+ call_if_eq Route22_EventScript_EarlyRivalExit
compare VAR_TEMP_1, 2
- call_if_eq EventScript_1683A5
+ call_if_eq Route22_EventScript_EarlyRivalExitBottom
fadedefaultbgm
removeobject 1
setvar VAR_MAP_SCENE_ROUTE22, 2
releaseall
end
-EventScript_168350:: @ 8168350
- applymovement 1, Movement_1683D1
+Route22_EventScript_EarlyRivalApproach:: @ 8168350
+ applymovement 1, Route22_Movement_RivalApproach
waitmovement 0
return
-EventScript_16835B:: @ 816835B
- applymovement 1, Movement_1683D9
- applymovement OBJ_EVENT_ID_PLAYER, Movement_1683E3
+Route22_EventScript_EarlyRivalApproachBottom:: @ 816835B
+ applymovement 1, Route22_Movement_RivalApproachBottom
+ applymovement OBJ_EVENT_ID_PLAYER, Route22_Movement_PlayerFaceRival
waitmovement 0
return
-EventScript_16836D:: @ 816836D
- trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE, 0, Text_188959, Text_18DE1A
+Route22_EventScript_EarlyRivalSquirtle:: @ 816836D
+ trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory
return
-EventScript_16837C:: @ 816837C
- trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR, 0, Text_188959, Text_18DE1A
+Route22_EventScript_EarlyRivalBulbasaur:: @ 816837C
+ trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory
return
-EventScript_16838B:: @ 816838B
- trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER, 0, Text_188959, Text_18DE1A
+Route22_EventScript_EarlyRivalCharmander:: @ 816838B
+ trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory
return
-EventScript_16839A:: @ 816839A
- applymovement 1, Movement_1683B8
+Route22_EventScript_EarlyRivalExit:: @ 816839A
+ applymovement 1, Route22_Movement_EarlyRivalExit
waitmovement 0
return
-EventScript_1683A5:: @ 81683A5
- applymovement 1, Movement_1683C5
+Route22_EventScript_EarlyRivalExitBottom:: @ 81683A5
+ applymovement 1, Route22_Movement_EarlyRivalExitBottom
waitmovement 0
return
-Movement_1683B0:: @ 8
+Route22_Movement_UnusedRivalExit:: @ 8
walk_right
walk_right
walk_right
@@ -104,7 +98,7 @@ Movement_1683B0:: @ 8
walk_right
step_end
-Movement_1683B8:: @ 81683B8
+Route22_Movement_EarlyRivalExit:: @ 81683B8
walk_down
walk_right
walk_right
@@ -119,7 +113,7 @@ Movement_1683B8:: @ 81683B8
walk_down
step_end
-Movement_1683C5:: @ 81683C5
+Route22_Movement_EarlyRivalExitBottom:: @ 81683C5
walk_right
walk_right
walk_right
@@ -133,7 +127,7 @@ Movement_1683C5:: @ 81683C5
walk_down
step_end
-Movement_1683D1:: @ 81683D1
+Route22_Movement_RivalApproach:: @ 81683D1
walk_right
walk_right
walk_right
@@ -143,7 +137,7 @@ Movement_1683D1:: @ 81683D1
walk_right
step_end
-Movement_1683D9:: @ 81683D9
+Route22_Movement_RivalApproachBottom:: @ 81683D9
walk_right
walk_right
walk_right
@@ -155,7 +149,7 @@ Movement_1683D9:: @ 81683D9
walk_in_place_fastest_down
step_end
-Movement_1683E3:: @ 81683E3
+Route22_Movement_PlayerFaceRival:: @ 81683E3
delay_16
delay_16
delay_16
@@ -167,55 +161,49 @@ Movement_1683E3:: @ 81683E3
walk_in_place_fastest_up
step_end
-Route22_EventScript_1683ED:: @ 81683ED
+Route22_EventScript_LateRivalTriggerTop:: @ 81683ED
lockall
setvar VAR_TEMP_1, 0
- goto EventScript_16841F
-
-EventScript_1683F8:: @ 81683F8
+ goto Route22_EventScript_LateRival
end
-Route22_EventScript_1683F9:: @ 81683F9
+Route22_EventScript_LateRivalTriggerMid:: @ 81683F9
lockall
setvar VAR_TEMP_1, 1
setobjectxyperm 1, 25, 5
- goto EventScript_16841F
-
-EventScript_16840B:: @ 816840B
+ goto Route22_EventScript_LateRival
end
-Route22_EventScript_16840C:: @ 816840C
+Route22_EventScript_LateRivalTriggerBottom:: @ 816840C
lockall
setvar VAR_TEMP_1, 2
setobjectxyperm 1, 25, 5
- goto EventScript_16841F
-
-EventScript_16841E:: @ 816841E
+ goto Route22_EventScript_LateRival
end
-EventScript_16841F:: @ 816841F
+Route22_EventScript_LateRival:: @ 816841F
textcolor 0
playbgm MUS_RIVAL1, 0
addobject 1
compare VAR_TEMP_1, 0
- call_if_eq EventScript_16849C
+ call_if_eq Route22_EventScript_LateRivalApproach
compare VAR_TEMP_1, 1
- call_if_eq EventScript_16849C
+ call_if_eq Route22_EventScript_LateRivalApproach
compare VAR_TEMP_1, 2
- call_if_eq EventScript_1684A7
- msgbox gUnknown_8188A3C
+ call_if_eq Route22_EventScript_LateRivalApproachBottom
+ msgbox Route22_Text_LateRivalIntro
setvar VAR_LAST_TALKED, 1
compare VAR_STARTER_MON, 2
- call_if_eq EventScript_1684B9
+ call_if_eq Route22_EventScript_LateRivalSquirtle
compare VAR_STARTER_MON, 1
- call_if_eq EventScript_1684C4
+ call_if_eq Route22_EventScript_LateRivalBulbasaur
compare VAR_STARTER_MON, 0
- call_if_eq EventScript_1684CF
- msgbox gUnknown_8188B29
+ call_if_eq Route22_EventScript_LateRivalCharmander
+ msgbox Route22_Text_LateRivalPostBattle
closemessage
delay 10
playbgm MUS_RIVAL2, 0
- applymovement 1, Movement_1684DA
+ applymovement 1, Route22_Movement_LateRivalExit
waitmovement 0
fadedefaultbgm
removeobject 1
@@ -223,30 +211,30 @@ EventScript_16841F:: @ 816841F
releaseall
end
-EventScript_16849C:: @ 816849C
- applymovement 1, Movement_1683D1
+Route22_EventScript_LateRivalApproach:: @ 816849C
+ applymovement 1, Route22_Movement_RivalApproach
waitmovement 0
return
-EventScript_1684A7:: @ 81684A7
- applymovement 1, Movement_1683D9
- applymovement OBJ_EVENT_ID_PLAYER, Movement_1683E3
+Route22_EventScript_LateRivalApproachBottom:: @ 81684A7
+ applymovement 1, Route22_Movement_RivalApproachBottom
+ applymovement OBJ_EVENT_ID_PLAYER, Route22_Movement_PlayerFaceRival
waitmovement 0
return
-EventScript_1684B9:: @ 81684B9
- trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE, Text_188B08
+Route22_EventScript_LateRivalSquirtle:: @ 81684B9
+ trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE, Route22_Text_LateRivalDefeat
return
-EventScript_1684C4:: @ 81684C4
- trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR, Text_188B08
+Route22_EventScript_LateRivalBulbasaur:: @ 81684C4
+ trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR, Route22_Text_LateRivalDefeat
return
-EventScript_1684CF:: @ 81684CF
- trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER, Text_188B08
+Route22_EventScript_LateRivalCharmander:: @ 81684CF
+ trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER, Route22_Text_LateRivalDefeat
return
-Movement_1684DA:: @ 81684DA
+Route22_Movement_LateRivalExit:: @ 81684DA
walk_left
walk_left
walk_left
@@ -256,6 +244,6 @@ Movement_1684DA:: @ 81684DA
walk_left
step_end
-Route22_EventScript_1684E2:: @ 81684E2
- msgbox gUnknown_8188BFF, MSGBOX_SIGN
+Route22_EventScript_LeagueGateSign:: @ 81684E2
+ msgbox Route22_Text_LeagueGateSign, MSGBOX_SIGN
end
diff --git a/data/maps/Route22/text.inc b/data/maps/Route22/text.inc
index 7bfe6931b..72b4ca28b 100644
--- a/data/maps/Route22/text.inc
+++ b/data/maps/Route22/text.inc
@@ -1,201 +1,66 @@
-Text_1882E1:: @ 81882E1
- .string "Strong TRAINERS and WATER POKéMON\n"
- .string "are common sights in these parts.\p"
- .string "They say that MISTY of the\n"
- .string "CERULEAN GYM trains here.$"
-
-Text_18835A:: @ 818835A
- .string "You want to know if the fish are\n"
- .string "biting?$"
-
-Text_188383:: @ 8188383
- .string "Dang!$"
-
-Text_188389:: @ 8188389
- .string "I can't catch anything good.\n"
- .string "Not one good POKéMON to be had!$"
-
-Text_1883C6:: @ 81883C6
- .string "I got a big haul!\n"
- .string "Wanna go for it?$"
-
-Text_1883E9:: @ 81883E9
- .string "Heheh, MAGIKARP just don't make\n"
- .string "the grade, do they?$"
-
-Text_18841D:: @ 818841D
- .string "I seem to only catch MAGIKARP!$"
-
-Text_18843C:: @ 818843C
- .string "The sea cleanses my body and soul!$"
-
-Text_18845F:: @ 818845F
- .string "Ayah!$"
-
-Text_188465:: @ 8188465
- .string "The sea is great and all, but I\n"
- .string "like the mountains, too.$"
-
-Text_18849E:: @ 818849E
- .string "おれだって たまには\n"
- .string "およぎに くるぜ!$"
-
-Text_1884B3:: @ 81884B3
- .string "ぐわわ!$"
-
-Text_1884B8:: @ 81884B8
- .string "うきやすそう だと?\n"
- .string "うるせー おおきな おせわだッ!$"
-
-Text_1884D4:: @ 81884D4
- .string "I caught my POKéMON at sea.$"
-
-Text_1884F0:: @ 81884F0
- .string "Diver!!\n"
- .string "Down!!$"
-
-Text_1884FF:: @ 81884FF
- .string "Where'd you catch your POKéMON?$"
-
-Text_18851F:: @ 818851F
- .string "Right now, I'm in a triathlon meet.$"
-
-Text_188543:: @ 8188543
- .string "Pant…\n"
- .string "Pant… Pant…$"
-
-Text_188555:: @ 8188555
- .string "I'm beat! But, I still have the\n"
- .string "bike race and marathon left!$"
-
-Text_188592:: @ 8188592
- .string "Ahh!\n"
- .string "Feel the sun and the wind!$"
-
-Text_1885B2:: @ 81885B2
- .string "Yow!\n"
- .string "I lost!$"
-
-Text_1885BF:: @ 81885BF
- .string "I'm sunburnt to a crisp!$"
-
-Text_1885D8:: @ 81885D8
- .string "Hey, don't scare away the fish!$"
-
-Text_1885F8:: @ 81885F8
- .string "Sorry! I'm just so frustrated from\n"
- .string "not catching anything.$"
-
-Text_188632:: @ 8188632
- .string "Sheesh, I haven't caught a thing.\n"
- .string "Could this place actually be a\l"
- .string "giant pool or something?$"
-
-Text_18868C:: @ 818868C
- .string "Keep me company till I get a hit.$"
-
-Text_1886AE:: @ 81886AE
- .string "That burned some time.$"
-
-Text_1886C5:: @ 81886C5
- .string "Oh wait!\n"
- .string "I got a bite! Yeah!$"
-
-Text_1886E2:: @ 81886E2
- .string "LIL: Huh? A battle?\n"
- .string "IAN, can't you do it alone?$"
-
-Text_188712:: @ 8188712
- .string "LIL: Oh, see?\n"
- .string "We lost. Happy now?$"
-
-Text_188734:: @ 8188734
- .string "LIL: I'm tired.\n"
- .string "Can't we go home already?$"
-
-Text_18875E:: @ 818875E
- .string "LIL: Huh? A battle?\n"
- .string "I can't be bothered to do it alone.\l"
- .string "Bring two POKéMON, won't you?$"
-
-Text_1887B4:: @ 81887B4
- .string "IAN: My sis doesn't get enough\n"
- .string "exercise, so I made her come.$"
-
-Text_1887F1:: @ 81887F1
- .string "IAN: Awww, Sis!\n"
- .string "Get it together!$"
-
-Text_188812:: @ 8188812
- .string "IAN: Come on, Sis!\p"
- .string "You're not going to lose weight\n"
- .string "like this!$"
-
-Text_188850:: @ 8188850
- .string "IAN: We want a two-on-two battle.\n"
- .string "So can you bring two POKéMON?$"
-
-gUnknown_8188890:: @ 8188890
- .string "{RIVAL}: Hey! {PLAYER}!\p"
- .string "You're off to the POKéMON LEAGUE?\n"
- .string "Forget about it!\p"
- .string "You probably don't have any\n"
- .string "BADGES, do you?\p"
- .string "The guard won't let you through\n"
- .string "without them.\p"
- .string "By the way, did your POKéMON get\n"
- .string "any stronger?$"
-
-Text_188959:: @ 8188959
- .string "Awww!\n"
- .string "You just lucked out!$"
-
-gUnknown_8188974:: @ 8188974
- .string "I heard the POKéMON LEAGUE is\n"
- .string "crawling with tough TRAINERS.\p"
- .string "I have to figure out how to get\n"
- .string "past them.\p"
- .string "You should quit dawdling and get a\n"
- .string "move on!$"
-
-Text_188A07:: @ 8188A07
- .string "{RIVAL}“なんだ?\n"
- .string "ポケモン 2ひきも\l"
- .string "もってるの なぜか だって?\p"
- .string "おまえも\n"
- .string "つかまえれば いい じゃん!$"
-
-gUnknown_8188A3C:: @ 8188A3C
- .string "{RIVAL}: What? {PLAYER}!\n"
- .string "What a surprise to see you here!\p"
- .string "So you're going to the POKéMON\n"
- .string "LEAGUE?\p"
- .string "You collected all the BADGES, too?\n"
- .string "That's cool!\p"
- .string "Then I'll whip you, {PLAYER}, as a\n"
- .string "warm-up for the POKéMON LEAGUE!\p"
- .string "Come on!$"
-
-Text_188B08:: @ 8188B08
- .string "What!?\p"
- .string "I was just careless, you!$"
-
-gUnknown_8188B29:: @ 8188B29
- .string "That loosened me up.\n"
- .string "I'm ready for the POKéMON LEAGUE!\p"
- .string "{PLAYER}, you need more practice.\p"
- .string "But hey, you know that!\n"
- .string "I'm out of here. Smell ya!$"
-
-Text_188BAF:: @ 8188BAF
- .string "{RIVAL}“ひゃははッ {PLAYER}ー!\n"
- .string "それで がんばってるのかよ!\l"
- .string "おれの さいのうに くらべりゃ\l"
- .string "{PLAYER}は まだまだ だな!\p"
- .string "もっと れんしゅう こいよ!\n"
- .string "あははーッ!$"
-
-gUnknown_8188BFF:: @ 8188BFF
- .string "POKéMON LEAGUE\n"
- .string "Front Gate$"
+Route22_Text_EarlyRivalIntro:: @ 8188890
+ .string "{RIVAL}: Hey! {PLAYER}!\p"
+ .string "You're off to the POKéMON LEAGUE?\n"
+ .string "Forget about it!\p"
+ .string "You probably don't have any\n"
+ .string "BADGES, do you?\p"
+ .string "The guard won't let you through\n"
+ .string "without them.\p"
+ .string "By the way, did your POKéMON get\n"
+ .string "any stronger?$"
+
+Route22_Text_EarlyRivalDefeat:: @ 8188959
+ .string "Awww!\n"
+ .string "You just lucked out!$"
+
+Route22_Text_EarlyRivalPostBattle:: @ 8188974
+ .string "I heard the POKéMON LEAGUE is\n"
+ .string "crawling with tough TRAINERS.\p"
+ .string "I have to figure out how to get\n"
+ .string "past them.\p"
+ .string "You should quit dawdling and get a\n"
+ .string "move on!$"
+
+@ Translated in RB as "{RIVAL}: What? Why do I have 2 POKéMON? You should catch some more too!"
+Route22_Text_RivalShouldCatchSomeMons:: @ 8188A07
+ .string "{RIVAL}“なんだ?\n"
+ .string "ポケモン 2ひきも\l"
+ .string "もってるの なぜか だって?\p"
+ .string "おまえも\n"
+ .string "つかまえれば いい じゃん!$"
+
+Route22_Text_LateRivalIntro:: @ 8188A3C
+ .string "{RIVAL}: What? {PLAYER}!\n"
+ .string "What a surprise to see you here!\p"
+ .string "So you're going to the POKéMON\n"
+ .string "LEAGUE?\p"
+ .string "You collected all the BADGES, too?\n"
+ .string "That's cool!\p"
+ .string "Then I'll whip you, {PLAYER}, as a\n"
+ .string "warm-up for the POKéMON LEAGUE!\p"
+ .string "Come on!$"
+
+Route22_Text_LateRivalDefeat:: @ 8188B08
+ .string "What!?\p"
+ .string "I was just careless, you!$"
+
+Route22_Text_LateRivalPostBattle:: @ 8188B29
+ .string "That loosened me up.\n"
+ .string "I'm ready for the POKéMON LEAGUE!\p"
+ .string "{PLAYER}, you need more practice.\p"
+ .string "But hey, you know that!\n"
+ .string "I'm out of here. Smell ya!$"
+
+@ Translated in RB as "{RIVAL}: Hahaha! {PLAYER}! That's your best? You're nowhere near as good as me, pal! Go train some more! You loser!"
+Route22_Text_LateRivalVictory:: @ 8188BAF
+ .string "{RIVAL}“ひゃははッ {PLAYER}ー!\n"
+ .string "それで がんばってるのかよ!\l"
+ .string "おれの さいのうに くらべりゃ\l"
+ .string "{PLAYER}は まだまだ だな!\p"
+ .string "もっと れんしゅう こいよ!\n"
+ .string "あははーッ!$"
+
+Route22_Text_LeagueGateSign:: @ 8188BFF
+ .string "POKéMON LEAGUE\n"
+ .string "Front Gate$"
diff --git a/data/maps/Route2_EastBuilding/map.json b/data/maps/Route2_EastBuilding/map.json
index 2367b0b91..e966962c6 100644
--- a/data/maps/Route2_EastBuilding/map.json
+++ b/data/maps/Route2_EastBuilding/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_EastBuilding_EventScript_16F67F",
+ "script": "Route2_EastBuilding_EventScript_Aide",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_EastBuilding_EventScript_16F714",
+ "script": "Route2_EastBuilding_EventScript_Rocker",
"flag": "0"
}
],
diff --git a/data/maps/Route2_EastBuilding/scripts.inc b/data/maps/Route2_EastBuilding/scripts.inc
index cba95dc0b..a94d72fd7 100644
--- a/data/maps/Route2_EastBuilding/scripts.inc
+++ b/data/maps/Route2_EastBuilding/scripts.inc
@@ -1,40 +1,42 @@
+.equ REQUIRED_SEEN_MONS, 10
+
Route2_EastBuilding_MapScripts:: @ 816F67E
.byte 0
-Route2_EastBuilding_EventScript_16F67F:: @ 816F67F
+Route2_EastBuilding_EventScript_Aide:: @ 816F67F
lock
faceplayer
- call EventScript_16F70B
- goto_if_set FLAG_GOT_HM05, EventScript_16F701
- msgbox gUnknown_819D64F, MSGBOX_YESNO
+ call Route2_EastBuilding_EventScript_GetAideRequestInfo
+ goto_if_set FLAG_GOT_HM05, Route2_EastBuilding_EventScript_AlreadyGotHM05
+ msgbox Route2_EastBuilding_Text_GiveHM05IfSeen10Mons, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_1A7AD1
+ goto_if_eq Aide_EventScript_DeclineCheckMons
setvar VAR_0x8004, 0
specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
- call EventScript_16F70B
- compare VAR_0x8006, 10
- goto_if_lt EventScript_1A7ABD
- msgbox gUnknown_819D74E
+ call Route2_EastBuilding_EventScript_GetAideRequestInfo
+ compare VAR_0x8006, REQUIRED_SEEN_MONS
+ goto_if_lt Aide_EventScript_HaventCaughtEnough
+ msgbox Route2_EastBuilding_Text_GreatHereYouGo
checkitemspace ITEM_HM05, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_1A7AC7
- giveitem_msg gUnknown_819D7A1, ITEM_HM05
+ goto_if_eq Aide_EventScript_NoRoomForItem
+ giveitem_msg Route2_EastBuilding_Text_ReceivedHM05FromAide, ITEM_HM05
setflag FLAG_GOT_HM05
- msgbox gUnknown_819D7C1
+ msgbox Route2_EastBuilding_Text_ExplainHM05
release
end
-EventScript_16F701:: @ 816F701
- msgbox gUnknown_819D7C1
+Route2_EastBuilding_EventScript_AlreadyGotHM05:: @ 816F701
+ msgbox Route2_EastBuilding_Text_ExplainHM05
release
end
-EventScript_16F70B:: @ 816F70B
- getnumberstring 0, 10
+Route2_EastBuilding_EventScript_GetAideRequestInfo:: @ 816F70B
+ getnumberstring 0, REQUIRED_SEEN_MONS
getitemname 1, ITEM_HM05
return
-Route2_EastBuilding_EventScript_16F714:: @ 816F714
- msgbox gUnknown_819D81E, MSGBOX_NPC
+Route2_EastBuilding_EventScript_Rocker:: @ 816F714
+ msgbox Route2_EastBuilding_Text_CanGetThroughRockTunnel, MSGBOX_NPC
end
diff --git a/data/maps/Route2_EastBuilding/text.inc b/data/maps/Route2_EastBuilding/text.inc
index 228cf3c4d..1de4b8fc7 100644
--- a/data/maps/Route2_EastBuilding/text.inc
+++ b/data/maps/Route2_EastBuilding/text.inc
@@ -1,4 +1,4 @@
-gUnknown_819D64F:: @ 819D64F
+Route2_EastBuilding_Text_GiveHM05IfSeen10Mons:: @ 819D64F
.string "Hi! Remember me?\n"
.string "I'm one of PROF. OAK's AIDES.\p"
.string "If your POKéDEX has complete data\n"
@@ -10,23 +10,23 @@ gUnknown_819D64F:: @ 819D64F
.string "Have you gathered data on at least\n"
.string "ten kinds of POKéMON?$"
-gUnknown_819D74E:: @ 819D74E
+Route2_EastBuilding_Text_GreatHereYouGo:: @ 819D74E
.string "Great! You have caught or owned\n"
.string "{STR_VAR_3} kinds of POKéMON!\p"
.string "Congratulations!\n"
.string "Here you go!$"
-gUnknown_819D7A1:: @ 819D7A1
+Route2_EastBuilding_Text_ReceivedHM05FromAide:: @ 819D7A1
.string "{PLAYER} received HM05\n"
.string "from the AIDE.$"
-gUnknown_819D7C1:: @ 819D7C1
+Route2_EastBuilding_Text_ExplainHM05:: @ 819D7C1
.string "HM05 contains the hidden move\n"
.string "FLASH.\p"
.string "FLASH lights up even the darkest\n"
.string "of caves and dungeons.$"
-gUnknown_819D81E:: @ 819D81E
+Route2_EastBuilding_Text_CanGetThroughRockTunnel:: @ 819D81E
.string "Once a POKéMON learns FLASH, you\n"
.string "can get through ROCK TUNNEL.$"
diff --git a/data/maps/Route2_House/map.json b/data/maps/Route2_House/map.json
index 4c4b7e790..8f9785c33 100644
--- a/data/maps/Route2_House/map.json
+++ b/data/maps/Route2_House/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_House_EventScript_16F5F9",
+ "script": "Route2_House_EventScript_Scientist",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_House_EventScript_16F602",
+ "script": "Route2_House_EventScript_Reyley",
"flag": "0"
}
],
diff --git a/data/maps/Route2_House/scripts.inc b/data/maps/Route2_House/scripts.inc
index 2cdc2d8ec..6c442958c 100644
--- a/data/maps/Route2_House/scripts.inc
+++ b/data/maps/Route2_House/scripts.inc
@@ -1,43 +1,43 @@
Route2_House_MapScripts:: @ 816F5F8
.byte 0
-Route2_House_EventScript_16F5F9:: @ 816F5F9
- msgbox gUnknown_819D5E7, MSGBOX_NPC
+Route2_House_EventScript_Scientist:: @ 816F5F9
+ msgbox Route2_House_Text_FaintedMonsCanUseFieldMoves, MSGBOX_NPC
end
-Route2_House_EventScript_16F602:: @ 816F602
+Route2_House_EventScript_Reyley:: @ 816F602
lock
faceplayer
setvar VAR_0x8008, INGAME_TRADE_MR_MIME
call EventScript_GetInGameTradeSpeciesInfo
- goto_if_set FLAG_DID_MIMIEN_TRADE, EventScript_16F674
+ goto_if_set FLAG_DID_MIMIEN_TRADE, Route2_House_EventScript_AlreadyTraded
msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_16F65C
+ goto_if_eq Route2_House_EventScript_DeclineTrade
call EventScript_ChooseMonForInGameTrade
compare VAR_0x8004, PARTY_SIZE
- goto_if_ge EventScript_16F65C
+ goto_if_ge Route2_House_EventScript_DeclineTrade
call EventScript_GetInGameTradeSpecies
compare VAR_RESULT, VAR_0x8009
- goto_if_ne EventScript_16F666
+ goto_if_ne Route2_House_EventScript_NotRequestedMon
call EventScript_DoInGameTrade
msgbox Trade_Text_HeyThanks
setflag FLAG_DID_MIMIEN_TRADE
release
end
-EventScript_16F65C:: @ 816F65C
+Route2_House_EventScript_DeclineTrade:: @ 816F65C
msgbox Trade_Text_AwwOhWell
release
end
-EventScript_16F666:: @ 816F666
+Route2_House_EventScript_NotRequestedMon:: @ 816F666
getspeciesname 0, VAR_0x8009
msgbox Trade_Text_WhatThatsNoMon
release
end
-EventScript_16F674:: @ 816F674
+Route2_House_EventScript_AlreadyTraded:: @ 816F674
msgbox Trade_Text_IsntMyOldMonGreat
release
end
diff --git a/data/maps/Route2_House/text.inc b/data/maps/Route2_House/text.inc
index 5fde449d3..76267c113 100644
--- a/data/maps/Route2_House/text.inc
+++ b/data/maps/Route2_House/text.inc
@@ -1,4 +1,4 @@
-gUnknown_819D5E7:: @ 819D5E7
+Route2_House_Text_FaintedMonsCanUseFieldMoves:: @ 819D5E7
.string "A fainted POKéMON just has no\n"
.string "energy left to battle.\p"
.string "It can still use moves like CUT\n"
diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/map.json b/data/maps/Route2_ViridianForest_NorthEntrance/map.json
index 1d73befbd..7f4225d23 100644
--- a/data/maps/Route2_ViridianForest_NorthEntrance/map.json
+++ b/data/maps/Route2_ViridianForest_NorthEntrance/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F71E",
+ "script": "Route2_ViridianForest_NorthEntrance_EventScript_Youngster",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F727",
+ "script": "Route2_ViridianForest_NorthEntrance_EventScript_OldMan",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F730",
+ "script": "Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF",
"flag": "0"
}
],
diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc
index 29e6bd757..756cf31d9 100644
--- a/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc
+++ b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc
@@ -1,14 +1,14 @@
Route2_ViridianForest_NorthEntrance_MapScripts:: @ 816F71D
.byte 0
-Route2_ViridianForest_NorthEntrance_EventScript_16F71E:: @ 816F71E
- msgbox gUnknown_819D85C, MSGBOX_NPC
+Route2_ViridianForest_NorthEntrance_EventScript_Youngster:: @ 816F71E
+ msgbox Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests, MSGBOX_NPC
end
-Route2_ViridianForest_NorthEntrance_EventScript_16F727:: @ 816F727
- msgbox gUnknown_819D8D0, MSGBOX_NPC
+Route2_ViridianForest_NorthEntrance_EventScript_OldMan:: @ 816F727
+ msgbox Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees, MSGBOX_NPC
end
-Route2_ViridianForest_NorthEntrance_EventScript_16F730:: @ 816F730
- msgbox gUnknown_819D93B, MSGBOX_NPC
+Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF:: @ 816F730
+ msgbox Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution, MSGBOX_NPC
end
diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/text.inc b/data/maps/Route2_ViridianForest_NorthEntrance/text.inc
index 630d39fc9..9fec461a8 100644
--- a/data/maps/Route2_ViridianForest_NorthEntrance/text.inc
+++ b/data/maps/Route2_ViridianForest_NorthEntrance/text.inc
@@ -1,16 +1,16 @@
-gUnknown_819D85C:: @ 819D85C
+Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests:: @ 819D85C
.string "Many POKéMON live only in forests \n"
.string "and caves.\p"
.string "You need to be persistent and look\n"
.string "everywhere to get different kinds.$"
-gUnknown_819D8D0:: @ 819D8D0
+Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees:: @ 819D8D0
.string "Have you noticed the skinny trees\n"
.string "on the roadside?\p"
.string "They can be cut down by a special\n"
.string "POKéMON move, I hear.$"
-gUnknown_819D93B:: @ 819D93B
+Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution:: @ 819D93B
.string "Do you know the evolution-cancel\n"
.string "technique?\p"
.string "When a POKéMON is evolving, you\n"
diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/map.json b/data/maps/Route2_ViridianForest_SouthEntrance/map.json
index 8d85f8f46..4e0ad0164 100644
--- a/data/maps/Route2_ViridianForest_SouthEntrance/map.json
+++ b/data/maps/Route2_ViridianForest_SouthEntrance/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_ViridianForest_SouthEntrance_EventScript_16F5E6",
+ "script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman1",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "Route2_ViridianForest_SouthEntrance_EventScript_16F5EF",
+ "script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman2",
"flag": "0"
}
],
diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc
index aea8bfaa4..2a60a3772 100644
--- a/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc
+++ b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc
@@ -1,10 +1,10 @@
Route2_ViridianForest_SouthEntrance_MapScripts:: @ 816F5E5
.byte 0
-Route2_ViridianForest_SouthEntrance_EventScript_16F5E6:: @ 816F5E6
- msgbox gUnknown_819D52C, MSGBOX_NPC
+Route2_ViridianForest_SouthEntrance_EventScript_Woman1:: @ 816F5E6
+ msgbox Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze, MSGBOX_NPC
end
-Route2_ViridianForest_SouthEntrance_EventScript_16F5EF:: @ 816F5EF
- msgbox gUnknown_819D58B, MSGBOX_NPC
+Route2_ViridianForest_SouthEntrance_EventScript_Woman2:: @ 816F5EF
+ msgbox Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite, MSGBOX_NPC
end
diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/text.inc b/data/maps/Route2_ViridianForest_SouthEntrance/text.inc
index c92538340..20e25429f 100644
--- a/data/maps/Route2_ViridianForest_SouthEntrance/text.inc
+++ b/data/maps/Route2_ViridianForest_SouthEntrance/text.inc
@@ -1,9 +1,9 @@
-gUnknown_819D52C:: @ 819D52C
+Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze:: @ 819D52C
.string "Are you going to VIRIDIAN FOREST?\n"
.string "It's a natural maze in there.\l"
.string "Be careful you don't get lost.$"
-gUnknown_819D58B:: @ 819D58B
+Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite:: @ 819D58B
.string "RATTATA may be small, but don't\n"
.string "underestimate its wicked bite.\p"
.string "Have you caught one already?$"
diff --git a/data/maps/SevenIsland_TrainerTower/map.json b/data/maps/SevenIsland_TrainerTower/map.json
index 47fb5fa98..31a250297 100644
--- a/data/maps/SevenIsland_TrainerTower/map.json
+++ b/data/maps/SevenIsland_TrainerTower/map.json
@@ -51,7 +51,7 @@
"x": 58,
"y": 7,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY",
+ "dest_map": "MAP_TRAINER_TOWER_LOBBY",
"dest_warp_id": 1
}
],
diff --git a/data/maps/SevenIsland_TrainerTower_1F/scripts.inc b/data/maps/SevenIsland_TrainerTower_1F/scripts.inc
deleted file mode 100644
index 4987c1142..000000000
--- a/data/maps/SevenIsland_TrainerTower_1F/scripts.inc
+++ /dev/null
@@ -1,60 +0,0 @@
-SevenIsland_TrainerTower_1F_MapScripts:: @ 81646B8
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_1F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_1F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_1F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_2F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_4F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_6F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_8F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_5F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_7F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_3F_EventScript_1646C8:: @ 81646C8
-SevenIsland_TrainerTower_1F_EventScript_1646C8:: @ 81646C8
- call EventScript_1C52F4
- end
-
-SevenIsland_TrainerTower_2F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_4F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_6F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_8F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_5F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_7F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_3F_EventScript_1646CE:: @ 81646CE
-SevenIsland_TrainerTower_1F_EventScript_1646CE:: @ 81646CE
- call EventScript_1C533B
- end
-
-SevenIsland_TrainerTower_2F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_4F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_6F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_8F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_5F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_7F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_3F_EventScript_1646D4:: @ 81646D4
-SevenIsland_TrainerTower_1F_EventScript_1646D4:: @ 81646D4
- call EventScript_1C5382
- end
-
-SevenIsland_TrainerTower_2F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_4F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_6F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_8F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_5F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_7F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_3F_EventScript_1646DA:: @ 81646DA
-SevenIsland_TrainerTower_1F_EventScript_1646DA:: @ 81646DA
- call EventScript_1C538C
- end
-
-SevenIsland_TrainerTower_2F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_4F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_6F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_8F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_7F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_Roof_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_5F_EventScript_1646E0:: @ 81646E0
-SevenIsland_TrainerTower_3F_EventScript_1646E0:: @ 81646E0
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_2F/scripts.inc b/data/maps/SevenIsland_TrainerTower_2F/scripts.inc
deleted file mode 100644
index 9e61d0dfd..000000000
--- a/data/maps/SevenIsland_TrainerTower_2F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_2F_MapScripts:: @ 81646E6
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_2F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_2F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_2F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_2F_EventScript_1646F6:: @ 81646F6
- call EventScript_1C52F4
- end
-
-EventScript_1646FC:: @ 81646FC
- call EventScript_1C533B
- end
-
-EventScript_164702:: @ 8164702
- call EventScript_1C5382
- end
-
-EventScript_164708:: @ 8164708
- call EventScript_1C538C
- end
-
-EventScript_16470E:: @ 816470E
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_3F/scripts.inc b/data/maps/SevenIsland_TrainerTower_3F/scripts.inc
deleted file mode 100644
index e9afcff6c..000000000
--- a/data/maps/SevenIsland_TrainerTower_3F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_3F_MapScripts:: @ 8164714
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_3F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_3F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_3F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_3F_EventScript_164724:: @ 8164724
- call EventScript_1C52F4
- end
-
-EventScript_16472A:: @ 816472A
- call EventScript_1C533B
- end
-
-EventScript_164730:: @ 8164730
- call EventScript_1C5382
- end
-
-EventScript_164736:: @ 8164736
- call EventScript_1C538C
- end
-
-EventScript_16473C:: @ 816473C
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_4F/scripts.inc b/data/maps/SevenIsland_TrainerTower_4F/scripts.inc
deleted file mode 100644
index cfa0be11b..000000000
--- a/data/maps/SevenIsland_TrainerTower_4F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_4F_MapScripts:: @ 8164742
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_4F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_4F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_4F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_4F_EventScript_164752:: @ 8164752
- call EventScript_1C52F4
- end
-
-EventScript_164758:: @ 8164758
- call EventScript_1C533B
- end
-
-EventScript_16475E:: @ 816475E
- call EventScript_1C5382
- end
-
-EventScript_164764:: @ 8164764
- call EventScript_1C538C
- end
-
-EventScript_16476A:: @ 816476A
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_5F/scripts.inc b/data/maps/SevenIsland_TrainerTower_5F/scripts.inc
deleted file mode 100644
index 35ccdf129..000000000
--- a/data/maps/SevenIsland_TrainerTower_5F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_5F_MapScripts:: @ 8164770
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_5F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_5F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_5F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_5F_EventScript_164780:: @ 8164780
- call EventScript_1C52F4
- end
-
-EventScript_164786:: @ 8164786
- call EventScript_1C533B
- end
-
-EventScript_16478C:: @ 816478C
- call EventScript_1C5382
- end
-
-EventScript_164792:: @ 8164792
- call EventScript_1C538C
- end
-
-EventScript_164798:: @ 8164798
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_6F/map.json b/data/maps/SevenIsland_TrainerTower_6F/map.json
deleted file mode 100644
index abaab80d6..000000000
--- a/data/maps/SevenIsland_TrainerTower_6F/map.json
+++ /dev/null
@@ -1,135 +0,0 @@
-{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_6F",
- "name": "SevenIsland_TrainerTower_6F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_6F",
- "music": "MUS_T_TOWER",
- "region_map_section": "MAPSEC_TRAINER_TOWER_2",
- "requires_flash": false,
- "weather": "WEATHER_NONE",
- "map_type": "MAP_TYPE_8",
- "unknown_18": 0,
- "unknown_19": 2,
- "elevator_flag": 0,
- "battle_scene": "BATTLE_SCENE_0",
- "connections": null,
- "object_events": [
- {
- "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
- "x": 9,
- "y": 7,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1646E0",
- "flag": "FLAG_TEMP_6"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
- "x": 10,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1646C8",
- "flag": "FLAG_TEMP_2"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
- "x": 15,
- "y": 13,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1646CE",
- "flag": "FLAG_TEMP_3"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
- "x": 10,
- "y": 16,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_UP",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1646D4",
- "flag": "FLAG_TEMP_4"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
- "x": 11,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1646DA",
- "flag": "FLAG_TEMP_5"
- }
- ],
- "warp_events": [
- {
- "x": 15,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_7F",
- "dest_warp_id": 1
- },
- {
- "x": 4,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_5F",
- "dest_warp_id": 0
- },
- {
- "x": 13,
- "y": 5,
- "elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
- "dest_warp_id": 0
- }
- ],
- "coord_events": [
- {
- "type": "trigger",
- "x": 10,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_E",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1C54AF"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 12,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1C54B4"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_6F_EventScript_1C54EA"
- }
- ],
- "bg_events": []
-}
diff --git a/data/maps/SevenIsland_TrainerTower_6F/scripts.inc b/data/maps/SevenIsland_TrainerTower_6F/scripts.inc
deleted file mode 100644
index 361c92749..000000000
--- a/data/maps/SevenIsland_TrainerTower_6F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_6F_MapScripts:: @ 816479E
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_6F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_6F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_6F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_6F_EventScript_1647AE:: @ 81647AE
- call EventScript_1C52F4
- end
-
-EventScript_1647B4:: @ 81647B4
- call EventScript_1C533B
- end
-
-EventScript_1647BA:: @ 81647BA
- call EventScript_1C5382
- end
-
-EventScript_1647C0:: @ 81647C0
- call EventScript_1C538C
- end
-
-EventScript_1647C6:: @ 81647C6
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_7F/map.json b/data/maps/SevenIsland_TrainerTower_7F/map.json
deleted file mode 100644
index 827c6c9ca..000000000
--- a/data/maps/SevenIsland_TrainerTower_7F/map.json
+++ /dev/null
@@ -1,135 +0,0 @@
-{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_7F",
- "name": "SevenIsland_TrainerTower_7F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_7F",
- "music": "MUS_T_TOWER",
- "region_map_section": "MAPSEC_TRAINER_TOWER_2",
- "requires_flash": false,
- "weather": "WEATHER_NONE",
- "map_type": "MAP_TYPE_8",
- "unknown_18": 0,
- "unknown_19": 2,
- "elevator_flag": 0,
- "battle_scene": "BATTLE_SCENE_0",
- "connections": null,
- "object_events": [
- {
- "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
- "x": 9,
- "y": 7,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1646E0",
- "flag": "FLAG_TEMP_6"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
- "x": 10,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1646C8",
- "flag": "FLAG_TEMP_2"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
- "x": 15,
- "y": 13,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1646CE",
- "flag": "FLAG_TEMP_3"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
- "x": 10,
- "y": 16,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_UP",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1646D4",
- "flag": "FLAG_TEMP_4"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
- "x": 11,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1646DA",
- "flag": "FLAG_TEMP_5"
- }
- ],
- "warp_events": [
- {
- "x": 15,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_8F",
- "dest_warp_id": 1
- },
- {
- "x": 4,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_6F",
- "dest_warp_id": 0
- },
- {
- "x": 13,
- "y": 5,
- "elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
- "dest_warp_id": 0
- }
- ],
- "coord_events": [
- {
- "type": "trigger",
- "x": 10,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_E",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1C54AF"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 12,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1C54B4"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_7F_EventScript_1C54EA"
- }
- ],
- "bg_events": []
-}
diff --git a/data/maps/SevenIsland_TrainerTower_7F/scripts.inc b/data/maps/SevenIsland_TrainerTower_7F/scripts.inc
deleted file mode 100644
index be0036605..000000000
--- a/data/maps/SevenIsland_TrainerTower_7F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_7F_MapScripts:: @ 81647CC
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_7F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_7F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_7F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_7F_EventScript_1647DC:: @ 81647DC
- call EventScript_1C52F4
- end
-
-EventScript_1647E2:: @ 81647E2
- call EventScript_1C533B
- end
-
-EventScript_1647E8:: @ 81647E8
- call EventScript_1C5382
- end
-
-EventScript_1647EE:: @ 81647EE
- call EventScript_1C538C
- end
-
-EventScript_1647F4:: @ 81647F4
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_8F/map.json b/data/maps/SevenIsland_TrainerTower_8F/map.json
deleted file mode 100644
index ed9ba908f..000000000
--- a/data/maps/SevenIsland_TrainerTower_8F/map.json
+++ /dev/null
@@ -1,135 +0,0 @@
-{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_8F",
- "name": "SevenIsland_TrainerTower_8F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_8F",
- "music": "MUS_T_TOWER",
- "region_map_section": "MAPSEC_TRAINER_TOWER_2",
- "requires_flash": false,
- "weather": "WEATHER_NONE",
- "map_type": "MAP_TYPE_8",
- "unknown_18": 0,
- "unknown_19": 2,
- "elevator_flag": 0,
- "battle_scene": "BATTLE_SCENE_0",
- "connections": null,
- "object_events": [
- {
- "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
- "x": 9,
- "y": 7,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1646E0",
- "flag": "FLAG_TEMP_6"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
- "x": 10,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1646C8",
- "flag": "FLAG_TEMP_2"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
- "x": 15,
- "y": 13,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1646CE",
- "flag": "FLAG_TEMP_3"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
- "x": 10,
- "y": 16,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_UP",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1646D4",
- "flag": "FLAG_TEMP_4"
- },
- {
- "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
- "x": 11,
- "y": 10,
- "elevation": 3,
- "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
- "movement_range_x": 1,
- "movement_range_y": 1,
- "trainer_type": 0,
- "trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1646DA",
- "flag": "FLAG_TEMP_5"
- }
- ],
- "warp_events": [
- {
- "x": 15,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ROOF",
- "dest_warp_id": 1
- },
- {
- "x": 4,
- "y": 6,
- "elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_7F",
- "dest_warp_id": 0
- },
- {
- "x": 13,
- "y": 5,
- "elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
- "dest_warp_id": 0
- }
- ],
- "coord_events": [
- {
- "type": "trigger",
- "x": 10,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_E",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1C54AF"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 12,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1C54B4"
- },
- {
- "type": "trigger",
- "x": 9,
- "y": 13,
- "elevation": 3,
- "var": "VAR_TEMP_F",
- "var_value": 0,
- "script": "SevenIsland_TrainerTower_8F_EventScript_1C54EA"
- }
- ],
- "bg_events": []
-}
diff --git a/data/maps/SevenIsland_TrainerTower_8F/scripts.inc b/data/maps/SevenIsland_TrainerTower_8F/scripts.inc
deleted file mode 100644
index b51982f48..000000000
--- a/data/maps/SevenIsland_TrainerTower_8F/scripts.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-SevenIsland_TrainerTower_8F_MapScripts:: @ 81647FA
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_8F_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_8F_MapScript2_1C4F62
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_8F_MapScript3_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_8F_EventScript_16480A:: @ 816480A
- call EventScript_1C52F4
- end
-
-EventScript_164810:: @ 8164810
- call EventScript_1C533B
- end
-
-EventScript_164816:: @ 8164816
- call EventScript_1C5382
- end
-
-EventScript_16481C:: @ 816481C
- call EventScript_1C538C
- end
-
-EventScript_164822:: @ 8164822
- call EventScript_1C53AA
- end
diff --git a/data/maps/SevenIsland_TrainerTower_Elevator/scripts.inc b/data/maps/SevenIsland_TrainerTower_Elevator/scripts.inc
deleted file mode 100644
index f84c67295..000000000
--- a/data/maps/SevenIsland_TrainerTower_Elevator/scripts.inc
+++ /dev/null
@@ -1,80 +0,0 @@
-SevenIsland_TrainerTower_Elevator_MapScripts:: @ 8164AF8
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_Elevator_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_Elevator_MapScript2_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_Elevator_EventScript_164B03:: @ 8164B03
- lockall
- setvar VAR_0x8004, 6
- call_if_unset FLAG_TEMP_2, EventScript_1A7AB9
- copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR
- special Special_DrawElevatorCurrentFloorWindow
- message Text_WantWhichFloor
- waitmessage
- setvar VAR_0x8004, 6
- specialvar VAR_RESULT, Special_InitElevatorFloorSelectMenuPos
- switch VAR_RESULT
- case 0, EventScript_164B46
- case 1, EventScript_164B52
- end
-
-EventScript_164B46:: @ 8164B46
- multichoicedefault 0, 0, MULTICHOICE_ROOFTOP_B1F, 0, FALSE
- goto EventScript_164B5E
- end
-
-EventScript_164B52:: @ 8164B52
- multichoicedefault 0, 0, MULTICHOICE_ROOFTOP_B1F, 1, FALSE
- goto EventScript_164B5E
- end
-
-EventScript_164B5E:: @ 8164B5E
- switch VAR_RESULT
- case 0, EventScript_164BCD
- case 1, EventScript_164B90
- case 2, EventScript_164BD3
- case 127, EventScript_164BD3
- end
-
-EventScript_164B90:: @ 8164B90
- setvar VAR_0x8006, 3
- setdynamicwarp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 17, 8
- compare VAR_ELEVATOR_FLOOR, 3
- goto_if_eq EventScript_164BD3
- call EventScript_164BD8
- setvar VAR_ELEVATOR_FLOOR, 3
- special Special_CloseElevatorCurrentFloorWindow
- delay 25
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164BE5
- waitmovement 0
- warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 17, 8
- waitstate
- releaseall
- end
-
-EventScript_164BCD:: @ 8164BCD
- goto EventScript_164BD3
- end
-
-EventScript_164BD3:: @ 8164BD3
- special Special_CloseElevatorCurrentFloorWindow
- releaseall
- end
-
-EventScript_164BD8:: @ 8164BD8
- special Special_CloseElevatorCurrentFloorWindow
- closemessage
- waitse
- special Special_AnimateElevator
- waitstate
- setflag FLAG_TEMP_2
- return
-
-Movement_164BE5:: @ 8164BE5
- walk_in_place_fastest_down
- delay_16
- walk_down
- walk_right
- walk_right
- walk_down
- step_end
diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc b/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc
deleted file mode 100644
index 0558b5a8b..000000000
--- a/data/maps/SevenIsland_TrainerTower_Lobby/scripts.inc
+++ /dev/null
@@ -1,235 +0,0 @@
-SevenIsland_TrainerTower_Lobby_MapScripts:: @ 8164839
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_Lobby_OnResume
- map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, SevenIsland_TrainerTower_Lobby_OnReturnToField
- map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_Lobby_OnTransition
- map_script MAP_SCRIPT_ON_LOAD, SevenIsland_TrainerTower_Lobby_OnLoad
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_Lobby_OnFrame
- .byte 0
-
-SevenIsland_TrainerTower_Lobby_OnResume:: @ 8164853
- setvar VAR_TEMP_2, 0
- setvar VAR_0x8004, 10
- special sub_815D9E8
- setvar VAR_0x8004, 18
- special sub_815D9E8
- compare VAR_RESULT, 0
- goto_if_eq EventScript_164886
- setvar VAR_TEMP_0, 0
- setobjectxy OBJ_EVENT_ID_PLAYER, 9, 7
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD4
-
-EventScript_164886:: @ 8164886
- end
-
-SevenIsland_TrainerTower_Lobby_OnReturnToField:: @ 8164887
- addobject 1
- addobject 2
- addobject 3
- addobject 4
- addobject 5
- end
-
-SevenIsland_TrainerTower_Lobby_OnLoad:: @ 8164897
- compare VAR_TEMP_D, 17
- call_if_eq EventScript_1648A3
- end
-
-EventScript_1648A3:: @ 81648A3
- setmetatile 17, 10, 647, 0
- return
-
-SevenIsland_TrainerTower_Lobby_OnTransition:: @ 81648AD
- setworldmapflag FLAG_WORLD_MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY
- getplayerxy VAR_TEMP_D, VAR_RESULT
- end
-
-SevenIsland_TrainerTower_Lobby_OnFrame:: @ 81648B6
- map_script_2 VAR_TEMP_0, 0, EventScript_1648ED
- map_script_2 VAR_TEMP_D, 0x11, EventScript_1648C8
- .2byte 0
-
-EventScript_1648C8:: @ 81648C8
- lockall
- applymovement OBJ_EVENT_ID_PLAYER, Movement_1648EA
- waitmovement 0
- setmetatile 17, 10, 692, 1
- special DrawWholeMapView
- playse SE_TK_KASYA
- waitse
- setvar VAR_TEMP_D, 0
- releaseall
- end
-
-Movement_1648EA:: @ 81648EA
- walk_down
- walk_down
- step_end
-
-EventScript_1648ED:: @ 81648ED
- setvar VAR_TEMP_0, 1
- setvar VAR_0x8004, 12
- special sub_815D9E8
- switch VAR_RESULT
- case 0, EventScript_164920
- case 1, EventScript_164938
- case 2, EventScript_16495C
-
-EventScript_164920:: @ 8164920
- lock
- faceplayer
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD4
- textcolor 1
- msgbox gUnknown_817C937
- goto EventScript_16494B
-
-EventScript_164938:: @ 8164938
- lock
- faceplayer
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD4
- textcolor 1
- msgbox gUnknown_817C9C0
-
-EventScript_16494B:: @ 816494B
- closemessage
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD6
- waitmovement 0
- setvar VAR_MAP_SCENE_TRAINER_TOWER, 0
- release
-
-EventScript_16495C:: @ 816495C
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_16495D:: @ 816495D
- lock
- faceplayer
- call EventScript_PkmnCenterNurse
- release
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_164966:: @ 8164966
- lock
- faceplayer
- setvar VAR_0x8004, 20
- special sub_815D9E8
- compare VAR_RESULT, 1
- goto_if_eq EventScript_164988
- msgbox gUnknown_817C9A2
- goto EventScript_164990
-
-EventScript_164988:: @ 8164988
- msgbox gUnknown_817CE1F
-
-EventScript_164990:: @ 8164990
- release
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_164992:: @ 8164992
- goto_if_questlog EventScript_ReleaseEnd
- lock
- faceplayer
- message Text_MayIHelpYou
- waitmessage
- pokemart Items_1649B8
- msgbox Text_PleaseComeAgain
- release
- end
-
- .align 2
-Items_1649B8:: @ 81649B8
- .2byte ITEM_ULTRA_BALL
- .2byte ITEM_GREAT_BALL
- .2byte ITEM_FULL_RESTORE
- .2byte ITEM_MAX_POTION
- .2byte ITEM_HYPER_POTION
- .2byte ITEM_REVIVE
- .2byte ITEM_FULL_HEAL
- .2byte ITEM_ESCAPE_ROPE
- .2byte ITEM_MAX_REPEL
- .2byte ITEM_NONE
- release
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_1649CE:: @ 81649CE
- lockall
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD4
- textcolor 1
- msgbox gUnknown_817C794
- setvar VAR_0x8004, 17
- special sub_815D9E8
- compare VAR_RESULT, 0
- goto_if_eq EventScript_164A00
- msgbox gUnknown_817C7D9
- goto EventScript_164A08
-
-EventScript_164A00:: @ 8164A00
- msgbox gUnknown_817C850
-
-EventScript_164A08:: @ 8164A08
- message Text_17C88D
- waitmessage
- multichoice 18, 6, MULTICHOICE_YES_NO_INFO, FALSE
- switch VAR_RESULT
- case 0, EventScript_164A53
- case 1, EventScript_164ABF
- case 2, EventScript_164A45
- case 127, EventScript_164ABF
- end
-
-EventScript_164A45:: @ 8164A45
- msgbox gUnknown_817CCC9
- goto EventScript_164A08
- end
-
-EventScript_164A53:: @ 8164A53
- multichoice 13, 3, MULTICHOICE_TRAINER_TOWER_MODE, FALSE
- switch VAR_RESULT
- case 0, EventScript_164AA0
- case 1, EventScript_164AA0
- case 2, EventScript_164AA0
- case 3, EventScript_164AA0
- case 4, EventScript_164ABF
- case 127, EventScript_164ABF
- end
-
-EventScript_164AA0:: @ 8164AA0
- copyvar VAR_0x8005, VAR_RESULT
- setvar VAR_MAP_SCENE_TRAINER_TOWER, 1
- special HealPlayerParty
- msgbox gUnknown_817C8BF
- setvar VAR_0x8004, 6
- special sub_815D9E8
- releaseall
- end
-
-EventScript_164ABF:: @ 8164ABF
- msgbox gUnknown_817C91D
- closemessage
- applymovement OBJ_EVENT_ID_PLAYER, Movement_164AD6
- waitmovement 0
- releaseall
- end
-
-Movement_164AD4:: @ 8164AD4
- face_right
- step_end
-
-Movement_164AD6:: @ 8164AD6
- walk_down
- step_end
-
-SevenIsland_TrainerTower_Lobby_EventScript_164AD8:: @ 8164AD8
- lockall
- fadescreen FADE_TO_BLACK
- setvar VAR_0x8004, 1
- special Special_BattleRecords
- waitstate
- releaseall
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_164AE6:: @ 8164AE6
- msgbox gUnknown_817CE38, MSGBOX_NPC
- end
-
-SevenIsland_TrainerTower_Lobby_EventScript_164AEF:: @ 8164AEF
- msgbox gUnknown_817CE9F, MSGBOX_NPC
- end
diff --git a/data/maps/SevenIsland_TrainerTower_Roof/scripts.inc b/data/maps/SevenIsland_TrainerTower_Roof/scripts.inc
deleted file mode 100644
index 6ae4ed2be..000000000
--- a/data/maps/SevenIsland_TrainerTower_Roof/scripts.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-SevenIsland_TrainerTower_Roof_MapScripts:: @ 8164828
- map_script MAP_SCRIPT_ON_RESUME, SevenIsland_TrainerTower_Roof_MapScript1_1C4F54
- map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_TrainerTower_Roof_MapScript2_1C5046
- .byte 0
-
-SevenIsland_TrainerTower_Roof_EventScript_164833:: @ 8164833
- call EventScript_1C53AA
- end
diff --git a/data/maps/SilphCo_Elevator/scripts.inc b/data/maps/SilphCo_Elevator/scripts.inc
index 87ed62c9b..abc60756a 100644
--- a/data/maps/SilphCo_Elevator/scripts.inc
+++ b/data/maps/SilphCo_Elevator/scripts.inc
@@ -4,7 +4,7 @@ SilphCo_Elevator_MapScripts:: @ 8161F6E
SilphCo_Elevator_EventScript_161F6F:: @ 8161F6F
lockall
setvar VAR_0x8004, 1
- call_if_unset FLAG_TEMP_2, EventScript_1A7AB9
+ call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor
copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR
special Special_DrawElevatorCurrentFloorWindow
message Text_WantWhichFloor
diff --git a/data/maps/SevenIsland_TrainerTower_1F/map.json b/data/maps/TrainerTower_1F/map.json
index 924dbbcba..925dbdd69 100644
--- a/data/maps/SevenIsland_TrainerTower_1F/map.json
+++ b/data/maps/TrainerTower_1F/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_1F",
- "name": "SevenIsland_TrainerTower_1F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F",
+ "id": "MAP_TRAINER_TOWER_1F",
+ "name": "TrainerTower_1F",
+ "layout": "LAYOUT_TRAINER_TOWER_1F",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1646C8",
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
"flag": "FLAG_TEMP_2"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1646CE",
+ "script": "TrainerTower_EventScript_SinglesTrainer",
"flag": "FLAG_TEMP_3"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1646D4",
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
"flag": "FLAG_TEMP_4"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1646DA",
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
"flag": "FLAG_TEMP_5"
}
],
@@ -84,14 +84,14 @@
"x": 15,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_2F",
+ "dest_map": "MAP_TRAINER_TOWER_2F",
"dest_warp_id": 1
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY",
+ "dest_map": "MAP_TRAINER_TOWER_LOBBY",
"dest_warp_id": 0
}
],
@@ -103,7 +103,7 @@
"elevation": 3,
"var": "VAR_TEMP_E",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1C54AF"
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
},
{
"type": "trigger",
@@ -112,7 +112,7 @@
"elevation": 0,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1C54B4"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
},
{
"type": "trigger",
@@ -121,7 +121,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_1F_EventScript_1C54EA"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
}
],
"bg_events": []
diff --git a/data/maps/TrainerTower_1F/scripts.inc b/data/maps/TrainerTower_1F/scripts.inc
new file mode 100644
index 000000000..77917c4a4
--- /dev/null
+++ b/data/maps/TrainerTower_1F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_1F_MapScripts:: @ 81646B8
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ All Trainer Tower floors/roof share these scripts for their object events
+
+TrainerTower_EventScript_DoublesTrainer1:: @ 81646C8
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_EventScript_SinglesTrainer:: @ 81646CE
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_EventScript_KnockoutTrainer:: @ 81646D4
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_EventScript_DoublesTrainer2:: @ 81646DA
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_EventScript_Owner:: @ 81646E0
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_5F/map.json b/data/maps/TrainerTower_2F/map.json
index 1ee41e1b4..e2e2f4c97 100644
--- a/data/maps/SevenIsland_TrainerTower_5F/map.json
+++ b/data/maps/TrainerTower_2F/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_5F",
- "name": "SevenIsland_TrainerTower_5F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_5F",
+ "id": "MAP_TRAINER_TOWER_2F",
+ "name": "TrainerTower_2F",
+ "layout": "LAYOUT_TRAINER_TOWER_2F",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1646E0",
+ "script": "TrainerTower_EventScript_Owner",
"flag": "FLAG_TEMP_6"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1646C8",
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
"flag": "FLAG_TEMP_2"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1646CE",
+ "script": "TrainerTower_EventScript_SinglesTrainer",
"flag": "FLAG_TEMP_3"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1646D4",
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
"flag": "FLAG_TEMP_4"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1646DA",
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
"flag": "FLAG_TEMP_5"
}
],
@@ -84,21 +84,21 @@
"x": 15,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_6F",
+ "dest_map": "MAP_TRAINER_TOWER_3F",
"dest_warp_id": 1
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_4F",
+ "dest_map": "MAP_TRAINER_TOWER_1F",
"dest_warp_id": 0
},
{
"x": 13,
"y": 5,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
}
],
@@ -110,7 +110,7 @@
"elevation": 3,
"var": "VAR_TEMP_E",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1C54AF"
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
},
{
"type": "trigger",
@@ -119,7 +119,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1C54B4"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
},
{
"type": "trigger",
@@ -128,7 +128,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_5F_EventScript_1C54EA"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
}
],
"bg_events": []
diff --git a/data/maps/TrainerTower_2F/scripts.inc b/data/maps/TrainerTower_2F/scripts.inc
new file mode 100644
index 000000000..c34f36a34
--- /dev/null
+++ b/data/maps/TrainerTower_2F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_2F_MapScripts:: @ 81646E6
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_2F_EventScript_DoublesTrainer1:: @ 81646F6
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_2F_EventScript_SinglesTrainer:: @ 81646FC
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_2F_EventScript_KnockoutTrainer:: @ 8164702
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_2F_EventScript_DoublesTrainer2:: @ 8164708
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_2F_EventScript_Owner:: @ 816470E
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_2F/map.json b/data/maps/TrainerTower_3F/map.json
index 6d0fbaa4c..8db22b61d 100644
--- a/data/maps/SevenIsland_TrainerTower_2F/map.json
+++ b/data/maps/TrainerTower_3F/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_2F",
- "name": "SevenIsland_TrainerTower_2F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_2F",
+ "id": "MAP_TRAINER_TOWER_3F",
+ "name": "TrainerTower_3F",
+ "layout": "LAYOUT_TRAINER_TOWER_3F",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1646E0",
+ "script": "TrainerTower_EventScript_Owner",
"flag": "FLAG_TEMP_6"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1646C8",
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
"flag": "FLAG_TEMP_2"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1646CE",
+ "script": "TrainerTower_EventScript_SinglesTrainer",
"flag": "FLAG_TEMP_3"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1646D4",
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
"flag": "FLAG_TEMP_4"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1646DA",
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
"flag": "FLAG_TEMP_5"
}
],
@@ -84,21 +84,21 @@
"x": 15,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_3F",
+ "dest_map": "MAP_TRAINER_TOWER_4F",
"dest_warp_id": 1
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_1F",
+ "dest_map": "MAP_TRAINER_TOWER_2F",
"dest_warp_id": 0
},
{
"x": 13,
"y": 5,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
}
],
@@ -110,7 +110,7 @@
"elevation": 3,
"var": "VAR_TEMP_E",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1C54AF"
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
},
{
"type": "trigger",
@@ -119,7 +119,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1C54B4"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
},
{
"type": "trigger",
@@ -128,7 +128,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_2F_EventScript_1C54EA"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
}
],
"bg_events": []
diff --git a/data/maps/TrainerTower_3F/scripts.inc b/data/maps/TrainerTower_3F/scripts.inc
new file mode 100644
index 000000000..0c8d434eb
--- /dev/null
+++ b/data/maps/TrainerTower_3F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_3F_MapScripts:: @ 8164714
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_3F_EventScript_DoublesTrainer1:: @ 8164724
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_3F_EventScript_SinglesTrainer:: @ 816472A
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_3F_EventScript_KnockoutTrainer:: @ 8164730
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_3F_EventScript_DoublesTrainer2:: @ 8164736
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_3F_EventScript_Owner:: @ 816473C
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_3F/map.json b/data/maps/TrainerTower_4F/map.json
index 780878898..32c868e91 100644
--- a/data/maps/SevenIsland_TrainerTower_3F/map.json
+++ b/data/maps/TrainerTower_4F/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_3F",
- "name": "SevenIsland_TrainerTower_3F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_3F",
+ "id": "MAP_TRAINER_TOWER_4F",
+ "name": "TrainerTower_4F",
+ "layout": "LAYOUT_TRAINER_TOWER_4F",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1646E0",
+ "script": "TrainerTower_EventScript_Owner",
"flag": "FLAG_TEMP_6"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1646C8",
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
"flag": "FLAG_TEMP_2"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1646CE",
+ "script": "TrainerTower_EventScript_SinglesTrainer",
"flag": "FLAG_TEMP_3"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1646D4",
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
"flag": "FLAG_TEMP_4"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1646DA",
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
"flag": "FLAG_TEMP_5"
}
],
@@ -84,21 +84,21 @@
"x": 15,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_4F",
+ "dest_map": "MAP_TRAINER_TOWER_5F",
"dest_warp_id": 1
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_2F",
+ "dest_map": "MAP_TRAINER_TOWER_3F",
"dest_warp_id": 0
},
{
"x": 13,
"y": 5,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
}
],
@@ -110,7 +110,7 @@
"elevation": 3,
"var": "VAR_TEMP_E",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1C54AF"
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
},
{
"type": "trigger",
@@ -119,7 +119,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1C54B4"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
},
{
"type": "trigger",
@@ -128,7 +128,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_3F_EventScript_1C54EA"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
}
],
"bg_events": []
diff --git a/data/maps/TrainerTower_4F/scripts.inc b/data/maps/TrainerTower_4F/scripts.inc
new file mode 100644
index 000000000..6e0e7e09f
--- /dev/null
+++ b/data/maps/TrainerTower_4F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_4F_MapScripts:: @ 8164742
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_4F_EventScript_DoublesTrainer1:: @ 8164752
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_4F_EventScript_SinglesTrainer:: @ 8164758
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_4F_EventScript_KnockoutTrainer:: @ 816475E
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_4F_EventScript_DoublesTrainer2:: @ 8164764
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_4F_EventScript_Owner:: @ 816476A
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_4F/map.json b/data/maps/TrainerTower_5F/map.json
index d4a021ff3..7a32b597c 100644
--- a/data/maps/SevenIsland_TrainerTower_4F/map.json
+++ b/data/maps/TrainerTower_5F/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_4F",
- "name": "SevenIsland_TrainerTower_4F",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_4F",
+ "id": "MAP_TRAINER_TOWER_5F",
+ "name": "TrainerTower_5F",
+ "layout": "LAYOUT_TRAINER_TOWER_5F",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1646E0",
+ "script": "TrainerTower_EventScript_Owner",
"flag": "FLAG_TEMP_6"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1646C8",
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
"flag": "FLAG_TEMP_2"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1646CE",
+ "script": "TrainerTower_EventScript_SinglesTrainer",
"flag": "FLAG_TEMP_3"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1646D4",
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
"flag": "FLAG_TEMP_4"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1646DA",
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
"flag": "FLAG_TEMP_5"
}
],
@@ -84,21 +84,21 @@
"x": 15,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_5F",
+ "dest_map": "MAP_TRAINER_TOWER_6F",
"dest_warp_id": 1
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_3F",
+ "dest_map": "MAP_TRAINER_TOWER_4F",
"dest_warp_id": 0
},
{
"x": 13,
"y": 5,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
}
],
@@ -110,7 +110,7 @@
"elevation": 3,
"var": "VAR_TEMP_E",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1C54AF"
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
},
{
"type": "trigger",
@@ -119,7 +119,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1C54B4"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
},
{
"type": "trigger",
@@ -128,7 +128,7 @@
"elevation": 3,
"var": "VAR_TEMP_F",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_4F_EventScript_1C54EA"
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
}
],
"bg_events": []
diff --git a/data/maps/TrainerTower_5F/scripts.inc b/data/maps/TrainerTower_5F/scripts.inc
new file mode 100644
index 000000000..71af237be
--- /dev/null
+++ b/data/maps/TrainerTower_5F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_5F_MapScripts:: @ 8164770
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_5F_EventScript_DoublesTrainer1:: @ 8164780
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_5F_EventScript_SinglesTrainer:: @ 8164786
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_5F_EventScript_KnockoutTrainer:: @ 816478C
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_5F_EventScript_DoublesTrainer2:: @ 8164792
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_5F_EventScript_Owner:: @ 8164798
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/TrainerTower_6F/map.json b/data/maps/TrainerTower_6F/map.json
new file mode 100644
index 000000000..05491cf05
--- /dev/null
+++ b/data/maps/TrainerTower_6F/map.json
@@ -0,0 +1,135 @@
+{
+ "id": "MAP_TRAINER_TOWER_6F",
+ "name": "TrainerTower_6F",
+ "layout": "LAYOUT_TRAINER_TOWER_6F",
+ "music": "MUS_T_TOWER",
+ "region_map_section": "MAPSEC_TRAINER_TOWER_2",
+ "requires_flash": false,
+ "weather": "WEATHER_NONE",
+ "map_type": "MAP_TYPE_8",
+ "unknown_18": 0,
+ "unknown_19": 2,
+ "elevator_flag": 0,
+ "battle_scene": "BATTLE_SCENE_0",
+ "connections": null,
+ "object_events": [
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
+ "x": 9,
+ "y": 7,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_Owner",
+ "flag": "FLAG_TEMP_6"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
+ "x": 10,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
+ "flag": "FLAG_TEMP_2"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
+ "x": 15,
+ "y": 13,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_SinglesTrainer",
+ "flag": "FLAG_TEMP_3"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
+ "x": 10,
+ "y": 16,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_UP",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
+ "flag": "FLAG_TEMP_4"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
+ "x": 11,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
+ "flag": "FLAG_TEMP_5"
+ }
+ ],
+ "warp_events": [
+ {
+ "x": 15,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_7F",
+ "dest_warp_id": 1
+ },
+ {
+ "x": 4,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_5F",
+ "dest_warp_id": 0
+ },
+ {
+ "x": 13,
+ "y": 5,
+ "elevation": 0,
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
+ "dest_warp_id": 0
+ }
+ ],
+ "coord_events": [
+ {
+ "type": "trigger",
+ "x": 10,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_E",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 12,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
+ }
+ ],
+ "bg_events": []
+}
diff --git a/data/maps/TrainerTower_6F/scripts.inc b/data/maps/TrainerTower_6F/scripts.inc
new file mode 100644
index 000000000..8b9e1dd38
--- /dev/null
+++ b/data/maps/TrainerTower_6F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_6F_MapScripts:: @ 816479E
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_6F_EventScript_DoublesTrainer1:: @ 81647AE
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_6F_EventScript_SinglesTrainer:: @ 81647B4
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_6F_EventScript_KnockoutTrainer:: @ 81647BA
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_6F_EventScript_DoublesTrainer2:: @ 81647C0
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_6F_EventScript_Owner:: @ 81647C6
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/TrainerTower_7F/map.json b/data/maps/TrainerTower_7F/map.json
new file mode 100644
index 000000000..76f2a53f4
--- /dev/null
+++ b/data/maps/TrainerTower_7F/map.json
@@ -0,0 +1,135 @@
+{
+ "id": "MAP_TRAINER_TOWER_7F",
+ "name": "TrainerTower_7F",
+ "layout": "LAYOUT_TRAINER_TOWER_7F",
+ "music": "MUS_T_TOWER",
+ "region_map_section": "MAPSEC_TRAINER_TOWER_2",
+ "requires_flash": false,
+ "weather": "WEATHER_NONE",
+ "map_type": "MAP_TYPE_8",
+ "unknown_18": 0,
+ "unknown_19": 2,
+ "elevator_flag": 0,
+ "battle_scene": "BATTLE_SCENE_0",
+ "connections": null,
+ "object_events": [
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
+ "x": 9,
+ "y": 7,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_Owner",
+ "flag": "FLAG_TEMP_6"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
+ "x": 10,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
+ "flag": "FLAG_TEMP_2"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
+ "x": 15,
+ "y": 13,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_SinglesTrainer",
+ "flag": "FLAG_TEMP_3"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
+ "x": 10,
+ "y": 16,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_UP",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
+ "flag": "FLAG_TEMP_4"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
+ "x": 11,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
+ "flag": "FLAG_TEMP_5"
+ }
+ ],
+ "warp_events": [
+ {
+ "x": 15,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_8F",
+ "dest_warp_id": 1
+ },
+ {
+ "x": 4,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_6F",
+ "dest_warp_id": 0
+ },
+ {
+ "x": 13,
+ "y": 5,
+ "elevation": 0,
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
+ "dest_warp_id": 0
+ }
+ ],
+ "coord_events": [
+ {
+ "type": "trigger",
+ "x": 10,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_E",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 12,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
+ }
+ ],
+ "bg_events": []
+}
diff --git a/data/maps/TrainerTower_7F/scripts.inc b/data/maps/TrainerTower_7F/scripts.inc
new file mode 100644
index 000000000..de47276ca
--- /dev/null
+++ b/data/maps/TrainerTower_7F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_7F_MapScripts:: @ 81647CC
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_7F_EventScript_DoublesTrainer1:: @ 81647DC
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_7F_EventScript_SinglesTrainer:: @ 81647E2
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_7F_EventScript_KnockoutTrainer:: @ 81647E8
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_7F_EventScript_DoublesTrainer2:: @ 81647EE
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_7F_EventScript_Owner:: @ 81647F4
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/TrainerTower_8F/map.json b/data/maps/TrainerTower_8F/map.json
new file mode 100644
index 000000000..26cabfb06
--- /dev/null
+++ b/data/maps/TrainerTower_8F/map.json
@@ -0,0 +1,135 @@
+{
+ "id": "MAP_TRAINER_TOWER_8F",
+ "name": "TrainerTower_8F",
+ "layout": "LAYOUT_TRAINER_TOWER_8F",
+ "music": "MUS_T_TOWER",
+ "region_map_section": "MAPSEC_TRAINER_TOWER_2",
+ "requires_flash": false,
+ "weather": "WEATHER_NONE",
+ "map_type": "MAP_TYPE_8",
+ "unknown_18": 0,
+ "unknown_19": 2,
+ "elevator_flag": 0,
+ "battle_scene": "BATTLE_SCENE_0",
+ "connections": null,
+ "object_events": [
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE",
+ "x": 9,
+ "y": 7,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_Owner",
+ "flag": "FLAG_TEMP_6"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_0",
+ "x": 10,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer1",
+ "flag": "FLAG_TEMP_2"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_1",
+ "x": 15,
+ "y": 13,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_LEFT",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_SinglesTrainer",
+ "flag": "FLAG_TEMP_3"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_2",
+ "x": 10,
+ "y": 16,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_UP",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_KnockoutTrainer",
+ "flag": "FLAG_TEMP_4"
+ },
+ {
+ "graphics_id": "OBJECT_EVENT_GFX_VAR_3",
+ "x": 11,
+ "y": 10,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_FACE_DOWN",
+ "movement_range_x": 1,
+ "movement_range_y": 1,
+ "trainer_type": 0,
+ "trainer_sight_or_berry_tree_id": 0,
+ "script": "TrainerTower_EventScript_DoublesTrainer2",
+ "flag": "FLAG_TEMP_5"
+ }
+ ],
+ "warp_events": [
+ {
+ "x": 15,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_ROOF",
+ "dest_warp_id": 1
+ },
+ {
+ "x": 4,
+ "y": 6,
+ "elevation": 3,
+ "dest_map": "MAP_TRAINER_TOWER_7F",
+ "dest_warp_id": 0
+ },
+ {
+ "x": 13,
+ "y": 5,
+ "elevation": 0,
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
+ "dest_warp_id": 0
+ }
+ ],
+ "coord_events": [
+ {
+ "type": "trigger",
+ "x": 10,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_E",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_SingleBattleTrigger"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 12,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerTop"
+ },
+ {
+ "type": "trigger",
+ "x": 9,
+ "y": 13,
+ "elevation": 3,
+ "var": "VAR_TEMP_F",
+ "var_value": 0,
+ "script": "TrainerTower_EventScript_DoubleBattleTriggerBottom"
+ }
+ ],
+ "bg_events": []
+}
diff --git a/data/maps/TrainerTower_8F/scripts.inc b/data/maps/TrainerTower_8F/scripts.inc
new file mode 100644
index 000000000..fc168780b
--- /dev/null
+++ b/data/maps/TrainerTower_8F/scripts.inc
@@ -0,0 +1,27 @@
+TrainerTower_8F_MapScripts:: @ 81647FA
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below scripts are unused, the identical versions in the 1F script are used instead
+
+TrainerTower_8F_EventScript_DoublesTrainer1:: @ 816480A
+ call TrainerTower_EventScript_SpeakToDoublesTrainer1
+ end
+
+TrainerTower_8F_EventScript_SinglesTrainer:: @ 8164810
+ call TrainerTower_EventScript_SpeakToSinglesTrainer
+ end
+
+TrainerTower_8F_EventScript_KnockoutTrainer:: @ 8164816
+ call TrainerTower_EventScript_SpeakToKnockoutTrainer
+ end
+
+TrainerTower_8F_EventScript_DoublesTrainer2:: @ 816481C
+ call TrainerTower_EventScript_SpeakToDoublesTrainer2
+ end
+
+TrainerTower_8F_EventScript_Owner:: @ 8164822
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_Elevator/map.json b/data/maps/TrainerTower_Elevator/map.json
index fef686312..7d004c2df 100644
--- a/data/maps/SevenIsland_TrainerTower_Elevator/map.json
+++ b/data/maps/TrainerTower_Elevator/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
- "name": "SevenIsland_TrainerTower_Elevator",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "id": "MAP_TRAINER_TOWER_ELEVATOR",
+ "name": "TrainerTower_Elevator",
+ "layout": "LAYOUT_TRAINER_TOWER_ELEVATOR",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -29,7 +29,7 @@
"x": 0,
"y": 2,
"elevation": 0,
- "script": "SevenIsland_TrainerTower_Elevator_EventScript_164B03"
+ "script": "TrainerTower_Elevator_EventScript_FloorSelect"
}
]
}
diff --git a/data/maps/TrainerTower_Elevator/scripts.inc b/data/maps/TrainerTower_Elevator/scripts.inc
new file mode 100644
index 000000000..349667102
--- /dev/null
+++ b/data/maps/TrainerTower_Elevator/scripts.inc
@@ -0,0 +1,80 @@
+TrainerTower_Elevator_MapScripts:: @ 8164AF8
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+TrainerTower_Elevator_EventScript_FloorSelect:: @ 8164B03
+ lockall
+ setvar VAR_0x8004, 6
+ call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor
+ copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR
+ special Special_DrawElevatorCurrentFloorWindow
+ message Text_WantWhichFloor
+ waitmessage
+ setvar VAR_0x8004, 6
+ specialvar VAR_RESULT, Special_InitElevatorFloorSelectMenuPos
+ switch VAR_RESULT
+ case 0, TrainerTower_Elevator_EventScript_FloorSelectFromRoof
+ case 1, TrainerTower_Elevator_EventScript_FloorSelectFromLobby
+ end
+
+TrainerTower_Elevator_EventScript_FloorSelectFromRoof:: @ 8164B46
+ multichoicedefault 0, 0, MULTICHOICE_ROOFTOP_B1F, 0, FALSE
+ goto TrainerTower_Elevator_EventScript_ChooseFloor
+ end
+
+TrainerTower_Elevator_EventScript_FloorSelectFromLobby:: @ 8164B52
+ multichoicedefault 0, 0, MULTICHOICE_ROOFTOP_B1F, 1, FALSE
+ goto TrainerTower_Elevator_EventScript_ChooseFloor
+ end
+
+TrainerTower_Elevator_EventScript_ChooseFloor:: @ 8164B5E
+ switch VAR_RESULT
+ case 0, TrainerTower_Elevator_EventScript_SelectRoof
+ case 1, TrainerTower_Elevator_EventScript_SelectLobby
+ case 2, TrainerTower_Elevator_EventScript_CloseFloorSelect
+ case SCR_MENU_CANCEL, TrainerTower_Elevator_EventScript_CloseFloorSelect
+ end
+
+TrainerTower_Elevator_EventScript_SelectLobby:: @ 8164B90
+ setvar VAR_0x8006, 3
+ setdynamicwarp MAP_TRAINER_TOWER_LOBBY, 255, 17, 8
+ compare VAR_ELEVATOR_FLOOR, 3
+ goto_if_eq TrainerTower_Elevator_EventScript_CloseFloorSelect
+ call TrainerTower_Elevator_EventScript_MoveElevator
+ setvar VAR_ELEVATOR_FLOOR, 3
+ special Special_CloseElevatorCurrentFloorWindow
+ delay 25
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Elevator_Movement_ExitElevator
+ waitmovement 0
+ warp MAP_TRAINER_TOWER_LOBBY, 255, 17, 8
+ waitstate
+ releaseall
+ end
+
+TrainerTower_Elevator_EventScript_SelectRoof:: @ 8164BCD
+ goto TrainerTower_Elevator_EventScript_CloseFloorSelect
+ end
+
+TrainerTower_Elevator_EventScript_CloseFloorSelect:: @ 8164BD3
+ special Special_CloseElevatorCurrentFloorWindow
+ releaseall
+ end
+
+TrainerTower_Elevator_EventScript_MoveElevator:: @ 8164BD8
+ special Special_CloseElevatorCurrentFloorWindow
+ closemessage
+ waitse
+ special Special_AnimateElevator
+ waitstate
+ setflag FLAG_TEMP_2
+ return
+
+TrainerTower_Elevator_Movement_ExitElevator:: @ 8164BE5
+ walk_in_place_fastest_down
+ delay_16
+ walk_down
+ walk_right
+ walk_right
+ walk_down
+ step_end
diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/map.json b/data/maps/TrainerTower_Lobby/map.json
index 3f553ce47..23e8456c0 100644
--- a/data/maps/SevenIsland_TrainerTower_Lobby/map.json
+++ b/data/maps/TrainerTower_Lobby/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY",
- "name": "SevenIsland_TrainerTower_Lobby",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY",
+ "id": "MAP_TRAINER_TOWER_LOBBY",
+ "name": "TrainerTower_Lobby",
+ "layout": "LAYOUT_TRAINER_TOWER_LOBBY",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_16495D",
+ "script": "TrainerTower_Lobby_EventScript_Nurse",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_164992",
+ "script": "TrainerTower_Lobby_EventScript_MartClerk",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_164966",
+ "script": "TrainerTower_Lobby_EventScript_Receptionist",
"flag": "0"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_164AE6",
+ "script": "TrainerTower_Lobby_EventScript_CooltrainerF",
"flag": "0"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_164AEF",
+ "script": "TrainerTower_Lobby_EventScript_BaldingMan",
"flag": "0"
}
],
@@ -84,7 +84,7 @@
"x": 9,
"y": 2,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_1F",
+ "dest_map": "MAP_TRAINER_TOWER_1F",
"dest_warp_id": 1
},
{
@@ -98,7 +98,7 @@
"x": 17,
"y": 8,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
}
],
@@ -110,7 +110,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_TRAINER_TOWER",
"var_value": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_1649CE"
+ "script": "TrainerTower_Lobby_EventScript_EntryTrigger"
}
],
"bg_events": [
@@ -119,7 +119,7 @@
"x": 8,
"y": 10,
"elevation": 0,
- "script": "SevenIsland_TrainerTower_Lobby_EventScript_164AD8"
+ "script": "TrainerTower_Lobby_EventScript_ShowRecords"
}
]
}
diff --git a/data/maps/TrainerTower_Lobby/scripts.inc b/data/maps/TrainerTower_Lobby/scripts.inc
new file mode 100644
index 000000000..0fc2422b6
--- /dev/null
+++ b/data/maps/TrainerTower_Lobby/scripts.inc
@@ -0,0 +1,226 @@
+TrainerTower_Lobby_MapScripts:: @ 8164839
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_Lobby_OnResume
+ map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, TrainerTower_Lobby_OnReturnToField
+ map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_Lobby_OnTransition
+ map_script MAP_SCRIPT_ON_LOAD, TrainerTower_Lobby_OnLoad
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_Lobby_OnFrame
+ .byte 0
+
+TrainerTower_Lobby_OnResume:: @ 8164853
+ setvar VAR_TEMP_2, 0
+ ttower_resumetimer
+ ttower_shouldexit
+ compare VAR_RESULT, FALSE
+ goto_if_eq TrainerTower_Lobby_OnResumeEnd
+ @ Never reached, above always FALSE
+ setvar VAR_TEMP_0, 0
+ setobjectxy OBJ_EVENT_ID_PLAYER, 9, 7
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist
+TrainerTower_Lobby_OnResumeEnd:: @ 8164886
+ end
+
+TrainerTower_Lobby_OnReturnToField:: @ 8164887
+ addobject 1
+ addobject 2
+ addobject 3
+ addobject 4
+ addobject 5
+ end
+
+TrainerTower_Lobby_OnLoad:: @ 8164897
+ compare VAR_TEMP_D, 17
+ call_if_eq TrainerTower_Lobby_OpenCounterBarrier
+ end
+
+TrainerTower_Lobby_OpenCounterBarrier:: @ 81648A3
+ setmetatile 17, 10, METATILE_TrainerTower_Floor_ShadeBottomLeft, 0
+ return
+
+TrainerTower_Lobby_OnTransition:: @ 81648AD
+ setworldmapflag FLAG_WORLD_MAP_TRAINER_TOWER_LOBBY
+ getplayerxy VAR_TEMP_D, VAR_RESULT
+ end
+
+TrainerTower_Lobby_OnFrame:: @ 81648B6
+ map_script_2 VAR_TEMP_0, 0, TrainerTower_Lobby_EventScript_Enter
+ map_script_2 VAR_TEMP_D, 17, TrainerTower_Lobby_EventScript_ExitElevator
+ .2byte 0
+
+TrainerTower_Lobby_EventScript_ExitElevator:: @ 81648C8
+ lockall
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_ExitElevator
+ waitmovement 0
+ setmetatile 17, 10, METATILE_TrainerTower_CounterBarrier, 1
+ special DrawWholeMapView
+ playse SE_TK_KASYA
+ waitse
+ setvar VAR_TEMP_D, 0
+ releaseall
+ end
+
+TrainerTower_Lobby_Movement_ExitElevator:: @ 81648EA
+ walk_down
+ walk_down
+ step_end
+
+TrainerTower_Lobby_EventScript_Enter:: @ 81648ED
+ setvar VAR_TEMP_0, 1
+ ttower_getchallengestatus
+ switch VAR_RESULT
+ case CHALLENGE_STATUS_LOST, TrainerTower_Lobby_EventScript_LostChallenge
+ case CHALLENGE_STATUS_UNK, TrainerTower_Lobby_EventScript_164938
+ case CHALLENGE_STATUS_NORMAL, TrainerTower_Lobby_EventScript_EnterEnd
+
+TrainerTower_Lobby_EventScript_LostChallenge:: @ 8164920
+ lock
+ faceplayer
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist
+ textcolor 1
+ msgbox TrainerTower_Lobby_Text_TooBadComeBackTryAgain
+ goto TrainerTower_Lobby_EventScript_ExitChallenge
+
+@ Presumably E-Reader related
+TrainerTower_Lobby_EventScript_164938:: @ 8164938
+ lock
+ faceplayer
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist
+ textcolor 1
+ msgbox TrainerTower_Lobby_Text_MoveCounterHereWhenTrainersSwitch
+TrainerTower_Lobby_EventScript_ExitChallenge:: @ 816494B
+ closemessage
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_WalkDown
+ waitmovement 0
+ setvar VAR_MAP_SCENE_TRAINER_TOWER, 0
+ release
+TrainerTower_Lobby_EventScript_EnterEnd:: @ 816495C
+ end
+
+TrainerTower_Lobby_EventScript_Nurse:: @ 816495D
+ lock
+ faceplayer
+ call EventScript_PkmnCenterNurse
+ release
+ end
+
+TrainerTower_Lobby_EventScript_Receptionist:: @ 8164966
+ lock
+ faceplayer
+ ttower_getbeatchallenge
+ compare VAR_RESULT, TRUE
+ goto_if_eq TrainerTower_Lobby_EventScript_ThanksForCompeting
+ msgbox TrainerTower_Lobby_Text_GiveItYourBest
+ goto TrainerTower_Lobby_EventScript_ReceptionistEnd
+
+TrainerTower_Lobby_EventScript_ThanksForCompeting:: @ 8164988
+ msgbox TrainerTower_Lobby_Text_ThanksForCompeting
+TrainerTower_Lobby_EventScript_ReceptionistEnd:: @ 8164990
+ release
+ end
+
+TrainerTower_Lobby_EventScript_MartClerk:: @ 8164992
+ goto_if_questlog EventScript_ReleaseEnd
+ lock
+ faceplayer
+ message Text_MayIHelpYou
+ waitmessage
+ pokemart TrainerTower_Lobby_Mart_Items
+ msgbox Text_PleaseComeAgain
+ release
+ end
+
+ .align 2
+TrainerTower_Lobby_Mart_Items:: @ 81649B8
+ .2byte ITEM_ULTRA_BALL
+ .2byte ITEM_GREAT_BALL
+ .2byte ITEM_FULL_RESTORE
+ .2byte ITEM_MAX_POTION
+ .2byte ITEM_HYPER_POTION
+ .2byte ITEM_REVIVE
+ .2byte ITEM_FULL_HEAL
+ .2byte ITEM_ESCAPE_ROPE
+ .2byte ITEM_MAX_REPEL
+ .2byte ITEM_NONE
+ release
+ end
+
+TrainerTower_Lobby_EventScript_EntryTrigger:: @ 81649CE
+ lockall
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist
+ textcolor 1
+ msgbox TrainerTower_Lobby_Text_WelcomeToTrainerTower
+ ttower_getnumfloors
+ compare VAR_RESULT, FALSE
+ goto_if_eq TrainerTower_Lobby_EventScript_AllFloorsUsed
+ msgbox TrainerTower_Lobby_Text_TrainersUpToFloorNum
+ goto TrainerTower_Lobby_EventScript_AskEnterChallenge
+
+TrainerTower_Lobby_EventScript_AllFloorsUsed:: @ 8164A00
+ msgbox TrainerTower_Lobby_Text_TrainersUpEighthFloor
+TrainerTower_Lobby_EventScript_AskEnterChallenge:: @ 8164A08
+ message TrainerTower_Lobby_Text_LikeToChallengeTrainers
+ waitmessage
+ multichoice 18, 6, MULTICHOICE_YES_NO_INFO, FALSE
+ switch VAR_RESULT
+ case 0, TrainerTower_Lobby_EventScript_ChooseChallenge
+ case 1, TrainerTower_Lobby_EventScript_DeclineChallenge
+ case 2, TrainerTower_Lobby_EventScript_ChallengeInfo
+ case SCR_MENU_CANCEL, TrainerTower_Lobby_EventScript_DeclineChallenge
+ end
+
+TrainerTower_Lobby_EventScript_ChallengeInfo:: @ 8164A45
+ msgbox TrainerTower_Lobby_Text_ExplainTrainerTower
+ goto TrainerTower_Lobby_EventScript_AskEnterChallenge
+ end
+
+TrainerTower_Lobby_EventScript_ChooseChallenge:: @ 8164A53
+ multichoice 13, 3, MULTICHOICE_TRAINER_TOWER_MODE, FALSE
+ switch VAR_RESULT
+ case 0, TrainerTower_Lobby_EventScript_BeginChallenge
+ case 1, TrainerTower_Lobby_EventScript_BeginChallenge
+ case 2, TrainerTower_Lobby_EventScript_BeginChallenge
+ case 3, TrainerTower_Lobby_EventScript_BeginChallenge
+ case 4, TrainerTower_Lobby_EventScript_DeclineChallenge
+ case SCR_MENU_CANCEL, TrainerTower_Lobby_EventScript_DeclineChallenge
+ end
+
+TrainerTower_Lobby_EventScript_BeginChallenge:: @ 8164AA0
+ copyvar VAR_0x8005, VAR_RESULT
+ setvar VAR_MAP_SCENE_TRAINER_TOWER, 1
+ special HealPlayerParty
+ msgbox TrainerTower_Lobby_Text_StartClockGetSetGo
+ ttower_startchallenge
+ releaseall
+ end
+
+TrainerTower_Lobby_EventScript_DeclineChallenge:: @ 8164ABF
+ msgbox TrainerTower_Lobby_Text_PleaseVisitUsAgain
+ closemessage
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Lobby_Movement_WalkDown
+ waitmovement 0
+ releaseall
+ end
+
+TrainerTower_Lobby_Movement_FaceReceptionist:: @ 8164AD4
+ face_right
+ step_end
+
+TrainerTower_Lobby_Movement_WalkDown:: @ 8164AD6
+ walk_down
+ step_end
+
+TrainerTower_Lobby_EventScript_ShowRecords:: @ 8164AD8
+ lockall
+ fadescreen FADE_TO_BLACK
+ setvar VAR_0x8004, 1
+ special Special_BattleRecords
+ waitstate
+ releaseall
+ end
+
+TrainerTower_Lobby_EventScript_CooltrainerF:: @ 8164AE6
+ msgbox TrainerTower_Lobby_Text_WonderWhatKindsOfTrainers, MSGBOX_NPC
+ end
+
+TrainerTower_Lobby_EventScript_BaldingMan:: @ 8164AEF
+ msgbox TrainerTower_Lobby_Text_StairsTougherThanAnyBattle, MSGBOX_NPC
+ end
diff --git a/data/maps/SevenIsland_TrainerTower_Lobby/text.inc b/data/maps/TrainerTower_Lobby/text.inc
index bf1e73b91..4e6bb8b07 100644
--- a/data/maps/SevenIsland_TrainerTower_Lobby/text.inc
+++ b/data/maps/TrainerTower_Lobby/text.inc
@@ -1,50 +1,52 @@
-gUnknown_817C794:: @ 817C794
+@ All Trainer Tower text (Lobby and Roof) is interleaved here
+
+TrainerTower_Lobby_Text_WelcomeToTrainerTower:: @ 817C794
.string "Hello!\p"
.string "Welcome to TRAINER TOWER where\n"
.string "TRAINERS gather from all over!$"
-gUnknown_817C7D9:: @ 817C7D9
+TrainerTower_Lobby_Text_TrainersUpToFloorNum:: @ 817C7D9
.string "TRAINERS from all over the world\n"
.string "gather here to battle.\p"
.string "Let me see…\p"
.string "Right now, there are TRAINERS only\n"
.string "up to Floor {STR_VAR_1}.$"
-gUnknown_817C850:: @ 817C850
+TrainerTower_Lobby_Text_TrainersUpEighthFloor:: @ 817C850
.string "TRAINERS are awaiting your\n"
.string "challenge up to the eighth floor.$"
-Text_17C88D:: @ 817C88D
+TrainerTower_Lobby_Text_LikeToChallengeTrainers:: @ 817C88D
.string "Would you like to challenge the\n"
.string "waiting TRAINERS?$"
-gUnknown_817C8BF:: @ 817C8BF
+TrainerTower_Lobby_Text_StartClockGetSetGo:: @ 817C8BF
.string "Okay, I'll get the clock started,\n"
.string "so give it everything you have.\p"
.string "On your marks…\p"
.string "Get set…\p"
.string "Go!$"
-gUnknown_817C91D:: @ 817C91D
+TrainerTower_Lobby_Text_PleaseVisitUsAgain:: @ 817C91D
.string "Please do visit us again!$"
-gUnknown_817C937:: @ 817C937
+TrainerTower_Lobby_Text_TooBadComeBackTryAgain:: @ 817C937
.string "That was too bad.\p"
.string "I think you put in a tremendous\n"
.string "effort in your battling.\p"
.string "Please come back and try again!$"
-gUnknown_817C9A2:: @ 817C9A2
+TrainerTower_Lobby_Text_GiveItYourBest:: @ 817C9A2
.string "I hope you give it your best.$"
-gUnknown_817C9C0:: @ 817C9C0
+TrainerTower_Lobby_Text_MoveCounterHereWhenTrainersSwitch:: @ 817C9C0
.string "When the TRAINERS switch places,\n"
.string "the movement can be hectic.\p"
.string "To avoid the stampede, we moved\n"
.string "the reception counter here.\p"
.string "I'm sorry for the inconvenience.$"
-Text_17CA5A:: @ 817CA5A
+TrainerTower_Roof_Text_ImOwnerBattledPerfectly:: @ 817CA5A
.string "Hello…\p"
.string "I am the owner of this TOWER…\p"
.string "How the sky soars above this\n"
@@ -54,10 +56,10 @@ Text_17CA5A:: @ 817CA5A
.string "The way you battled…\n"
.string "It, too, was perfection…$"
-Text_17CB09:: @ 817CB09
+TrainerTower_Roof_Text_ThisIsForYou:: @ 817CB09
.string "This is for you…$"
-Text_17CB1A:: @ 817CB1A
+TrainerTower_Roof_Text_DoneItInRecordTime:: @ 817CB1A
.string "Oh!\n"
.string "Stupendous!\p"
.string "It's marvelous how you've come up\n"
@@ -67,28 +69,28 @@ Text_17CB1A:: @ 817CB1A
.string "I'll have your record posted at\n"
.string "the reception counter.$"
-Text_17CBC0:: @ 817CBC0
+TrainerTower_Roof_Text_TookSweetTimeGettingHere:: @ 817CBC0
.string "You seem to have taken your sweet\n"
.string "time getting here…$"
-Text_17CBF5:: @ 817CBF5
+TrainerTower_Roof_Text_IdLikeToSeeBetterTime:: @ 817CBF5
.string "What I would like to see is a\n"
.string "better time out of you…\p"
.string "I'm counting on you.\p"
.string "Until then, farewell…$"
-Text_17CC56:: @ 817CC56
+TrainerTower_Text_XMinYZSec:: @ 817CC56
.string "{STR_VAR_1} min. {STR_VAR_2}.{STR_VAR_3} sec.$"
-Text_17CC69:: @ 817CC69
+TrainerTower_Lobby_Text_HereAreTheResults:: @ 817CC69
.string "せいせきひょうです$"
-Text_17CC73:: @ 817CC73
+TrainerTower_Lobby_Text_NeedTwoMonsForDouble:: @ 817CC73
.string "This is a two-on-two battle.\p"
.string "You may not battle unless you have\n"
.string "at least two POKéMON.$"
-gUnknown_817CCC9:: @ 817CCC9
+TrainerTower_Lobby_Text_ExplainTrainerTower:: @ 817CCC9
.string "Here at TRAINER TOWER, there is an\n"
.string "event called TIME ATTACK.\p"
.string "You will be timed on how quickly\n"
@@ -101,16 +103,16 @@ gUnknown_817CCC9:: @ 817CCC9
.string "You will not earn any EXP. Points\n"
.string "or money by beating TRAINERS here.$"
-gUnknown_817CE1F:: @ 817CE1F
+TrainerTower_Lobby_Text_ThanksForCompeting:: @ 817CE1F
.string "Thank you for competing!$"
-gUnknown_817CE38:: @ 817CE38
+TrainerTower_Lobby_Text_WonderWhatKindsOfTrainers:: @ 817CE38
.string "I'm here to see how good I am.\p"
.string "I wonder what kinds of TRAINERS\n"
.string "are waiting for me?\p"
.string "It's nerve-racking!$"
-gUnknown_817CE9F:: @ 817CE9F
+TrainerTower_Lobby_Text_StairsTougherThanAnyBattle:: @ 817CE9F
.string "Gasp, gasp…\n"
.string "Gasp…\p"
.string "Never mind battling! These stairs…\n"
diff --git a/data/maps/SevenIsland_TrainerTower_Roof/map.json b/data/maps/TrainerTower_Roof/map.json
index ee3dbe4c0..c9a98a144 100644
--- a/data/maps/SevenIsland_TrainerTower_Roof/map.json
+++ b/data/maps/TrainerTower_Roof/map.json
@@ -1,7 +1,7 @@
{
- "id": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ROOF",
- "name": "SevenIsland_TrainerTower_Roof",
- "layout": "LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ROOF",
+ "id": "MAP_TRAINER_TOWER_ROOF",
+ "name": "TrainerTower_Roof",
+ "layout": "LAYOUT_TRAINER_TOWER_ROOF",
"music": "MUS_T_TOWER",
"region_map_section": "MAPSEC_TRAINER_TOWER_2",
"requires_flash": false,
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "SevenIsland_TrainerTower_Roof_EventScript_1646E0",
+ "script": "TrainerTower_EventScript_Owner",
"flag": "FLAG_TEMP_6"
}
],
@@ -32,14 +32,14 @@
"x": 13,
"y": 5,
"elevation": 0,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR",
+ "dest_map": "MAP_TRAINER_TOWER_ELEVATOR",
"dest_warp_id": 0
},
{
"x": 4,
"y": 6,
"elevation": 3,
- "dest_map": "MAP_SEVEN_ISLAND_TRAINER_TOWER_8F",
+ "dest_map": "MAP_TRAINER_TOWER_8F",
"dest_warp_id": 0
}
],
diff --git a/data/maps/TrainerTower_Roof/scripts.inc b/data/maps/TrainerTower_Roof/scripts.inc
new file mode 100644
index 000000000..b338e3a62
--- /dev/null
+++ b/data/maps/TrainerTower_Roof/scripts.inc
@@ -0,0 +1,10 @@
+TrainerTower_Roof_MapScripts:: @ 8164828
+ map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume
+ map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame
+ .byte 0
+
+@ Below script is unused, the identical version in the 1F script is used instead
+
+TrainerTower_Roof_EventScript_Owner:: @ 8164833
+ call TrainerTower_EventScript_SpeakToOwner
+ end
diff --git a/data/maps/ViridianCity/map.json b/data/maps/ViridianCity/map.json
index ca30e0c6e..a83f47f5a 100644
--- a/data/maps/ViridianCity/map.json
+++ b/data/maps/ViridianCity/map.json
@@ -65,7 +65,7 @@
"movement_range_y": 0,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_EventScript_1659CA",
+ "script": "ViridianCity_EventScript_OldMan",
"flag": "0"
},
{
@@ -78,7 +78,7 @@
"movement_range_y": 3,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_EventScript_1659F6",
+ "script": "ViridianCity_EventScript_TutorialOldMan",
"flag": "0"
},
{
@@ -91,7 +91,7 @@
"movement_range_y": 3,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_EventScript_165AC4",
+ "script": "ViridianCity_EventScript_Woman",
"flag": "0"
},
{
@@ -104,7 +104,7 @@
"movement_range_y": 2,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_EventScript_165A8F",
+ "script": "ViridianCity_EventScript_Youngster",
"flag": "0"
},
{
@@ -117,7 +117,7 @@
"movement_range_y": 2,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_EventScript_1659C1",
+ "script": "ViridianCity_EventScript_Boy",
"flag": "0"
},
{
@@ -192,7 +192,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN",
"var_value": 0,
- "script": "ViridianCity_EventScript_165AF6"
+ "script": "ViridianCity_EventScript_RoadBlocked"
},
{
"type": "trigger",
@@ -201,7 +201,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR",
"var_value": 0,
- "script": "ViridianCity_EventScript_16596D"
+ "script": "ViridianCity_EventScript_GymDoorLocked"
},
{
"type": "trigger",
@@ -210,7 +210,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN",
"var_value": 1,
- "script": "ViridianCity_EventScript_165B10"
+ "script": "ViridianCity_EventScript_TutorialTriggerLeft"
},
{
"type": "trigger",
@@ -219,7 +219,7 @@
"elevation": 3,
"var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN",
"var_value": 1,
- "script": "ViridianCity_EventScript_165B2E"
+ "script": "ViridianCity_EventScript_TutorialTriggerRight"
}
],
"bg_events": [
@@ -228,35 +228,35 @@
"x": 23,
"y": 1,
"elevation": 3,
- "script": "ViridianCity_EventScript_16599D"
+ "script": "ViridianCity_EventScript_TrainerTips1"
},
{
"type": "bg_event_type_0",
"x": 32,
"y": 10,
"elevation": 0,
- "script": "ViridianCity_EventScript_1659AF"
+ "script": "ViridianCity_EventScript_GymSign"
},
{
"type": "bg_event_type_0",
"x": 20,
"y": 31,
"elevation": 0,
- "script": "ViridianCity_EventScript_1659A6"
+ "script": "ViridianCity_EventScript_TrainerTips2"
},
{
"type": "bg_event_type_0",
"x": 20,
"y": 16,
"elevation": 0,
- "script": "ViridianCity_EventScript_165994"
+ "script": "ViridianCity_EventScript_CitySign"
},
{
"type": "bg_event_type_0",
"x": 36,
"y": 10,
"elevation": 0,
- "script": "ViridianCity_EventScript_1659B8"
+ "script": "ViridianCity_EventScript_GymDoor"
}
]
}
diff --git a/data/maps/ViridianCity/scripts.inc b/data/maps/ViridianCity/scripts.inc
index c317a92eb..4fb140b24 100644
--- a/data/maps/ViridianCity/scripts.inc
+++ b/data/maps/ViridianCity/scripts.inc
@@ -1,3 +1,5 @@
+.equ LOCALID_TUTORIAL_MAN, 4
+
ViridianCity_MapScripts:: @ 81658D3
map_script MAP_SCRIPT_ON_TRANSITION, ViridianCity_OnTransition
.byte 0
@@ -5,32 +7,32 @@ ViridianCity_MapScripts:: @ 81658D3
ViridianCity_OnTransition:: @ 81658D9
setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_CITY
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0
- call_if_eq EventScript_165920
+ call_if_eq ViridianCity_EventScript_SetOldManBlockingRoad
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1
- call_if_eq EventScript_16590F
+ call_if_eq ViridianCity_EventScript_SetOldManStandingByRoad
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2
- call_if_ge EventScript_165909
+ call_if_ge ViridianCity_EventScript_SetOldManNormal
compare VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 0
- call_if_eq EventScript_165931
+ call_if_eq ViridianCity_EventScript_TryUnlockGym
end
-EventScript_165909:: @ 8165909
+ViridianCity_EventScript_SetOldManNormal:: @ 8165909
setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_1
return
-EventScript_16590F:: @ 816590F
+ViridianCity_EventScript_SetOldManStandingByRoad:: @ 816590F
setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_1
- setobjectxyperm 4, 21, 8
- setobjectmovementtype 4, 1
+ setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 8
+ setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_LOOK_AROUND
return
-EventScript_165920:: @ 8165920
- setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_VIRIDIAN_DRUNK
- setobjectxyperm 4, 21, 11
- setobjectmovementtype 4, 8
+ViridianCity_EventScript_SetOldManBlockingRoad:: @ 8165920
+ setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN
+ setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 11
+ setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_FACE_DOWN
return
-EventScript_165931:: @ 8165931
+ViridianCity_EventScript_TryUnlockGym:: @ 8165931
goto_if_unset FLAG_BADGE02_GET, EventScript_Return
goto_if_unset FLAG_BADGE03_GET, EventScript_Return
goto_if_unset FLAG_BADGE04_GET, EventScript_Return
@@ -40,106 +42,109 @@ EventScript_165931:: @ 8165931
setvar VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1
return
-ViridianCity_EventScript_16596D:: @ 816596D
+ViridianCity_EventScript_GymDoorLocked:: @ 816596D
lockall
textcolor 3
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestUp
waitmovement 0
delay 20
- msgbox gUnknown_817E2F5
+ msgbox ViridianCity_Text_GymDoorsAreLocked
closemessage
- applymovement OBJ_EVENT_ID_PLAYER, Movement_165992
+ applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Movement_JumpDownLedge
waitmovement 0
releaseall
end
-Movement_165992:: @ 8165992
+ViridianCity_Movement_JumpDownLedge:: @ 8165992
jump_2_down
step_end
-ViridianCity_EventScript_165994:: @ 8165994
- msgbox gUnknown_817E1BB, MSGBOX_SIGN
+ViridianCity_EventScript_CitySign:: @ 8165994
+ msgbox ViridianCity_Text_CitySign, MSGBOX_SIGN
end
-ViridianCity_EventScript_16599D:: @ 816599D
- msgbox gUnknown_817E1E7, MSGBOX_SIGN
+ViridianCity_EventScript_TrainerTips1:: @ 816599D
+ msgbox ViridianCity_Text_CatchMonsForEasierBattles, MSGBOX_SIGN
end
-ViridianCity_EventScript_1659A6:: @ 81659A6
- msgbox gUnknown_817E24D, MSGBOX_SIGN
+ViridianCity_EventScript_TrainerTips2:: @ 81659A6
+ msgbox ViridianCity_Text_MovesLimitedByPP, MSGBOX_SIGN
end
-ViridianCity_EventScript_1659AF:: @ 81659AF
- msgbox gUnknown_817E2DB, MSGBOX_SIGN
+ViridianCity_EventScript_GymSign:: @ 81659AF
+ msgbox ViridianCity_Text_GymSign, MSGBOX_SIGN
end
-ViridianCity_EventScript_1659B8:: @ 81659B8
- msgbox gUnknown_817E2F5, MSGBOX_SIGN
+ViridianCity_EventScript_GymDoor:: @ 81659B8
+ msgbox ViridianCity_Text_GymDoorsAreLocked, MSGBOX_SIGN
end
-ViridianCity_EventScript_1659C1:: @ 81659C1
- msgbox gUnknown_817DABB, MSGBOX_NPC
+ViridianCity_EventScript_Boy:: @ 81659C1
+ msgbox ViridianCity_Text_CanCarryMonsAnywhere, MSGBOX_NPC
end
-ViridianCity_EventScript_1659CA:: @ 81659CA
+@ Other old man, not the tutorial old man
+ViridianCity_EventScript_OldMan:: @ 81659CA
lock
faceplayer
compare VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1
- goto_if_eq EventScript_1659EC
- msgbox gUnknown_817DB39
+ goto_if_eq ViridianCity_EventScript_OldManGymLeaderReturned
+ msgbox ViridianCity_Text_GymClosedWonderWhoLeaderIs
closemessage
applymovement 3, Movement_FaceOriginalDirection
waitmovement 0
release
end
-EventScript_1659EC:: @ 81659EC
- msgbox gUnknown_817DB78
+ViridianCity_EventScript_OldManGymLeaderReturned:: @ 81659EC
+ msgbox ViridianCity_Text_ViridiansGymLeaderReturned
release
end
-ViridianCity_EventScript_1659F6:: @ 81659F6
+ViridianCity_EventScript_TutorialOldMan:: @ 81659F6
lock
faceplayer
- goto_if_set FLAG_BADGE01_GET, EventScript_165A23
+ goto_if_set FLAG_BADGE01_GET, ViridianCity_EventScript_AskIfTeachyTVHelpful
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2
- goto_if_ge EventScript_165A4A
+ goto_if_ge ViridianCity_EventScript_TutorialCompleted
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1
- goto_if_eq EventScript_165A54
+ goto_if_eq ViridianCity_EventScript_TutorialStart
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0
- goto_if_eq EventScript_165A84
+ goto_if_eq ViridianCity_EventScript_TutorialNotReady
end
-EventScript_165A23:: @ 8165A23
- msgbox gUnknown_817E046, MSGBOX_YESNO
+ViridianCity_EventScript_AskIfTeachyTVHelpful:: @ 8165A23
+ msgbox ViridianCity_Text_HowsTeachyTVHelping, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_165A40
- msgbox gUnknown_817E0EA
+ goto_if_eq ViridianCity_EventScript_TeachyTVNotHelpful
+ msgbox ViridianCity_Text_MyGrandsonOnTheShow
release
end
-EventScript_165A40:: @ 8165A40
- msgbox gUnknown_817E14E
+ViridianCity_EventScript_TeachyTVNotHelpful:: @ 8165A40
+ msgbox ViridianCity_Text_TooBusyForTeachyTV
release
end
-EventScript_165A4A:: @ 8165A4A
- msgbox gUnknown_817DF61
+ViridianCity_EventScript_TutorialCompleted:: @ 8165A4A
+ msgbox ViridianCity_Text_WeakenMonsFirstToCatch
release
end
-EventScript_165A54:: @ 8165A54
- call EventScript_165B4C
+ViridianCity_EventScript_TutorialStart:: @ 8165A54
+ call ViridianCity_EventScript_DoTutorialBattle
release
end
-EventScript_165A5B:: @ 8165A5B
- msgbox gUnknown_817DEEB
+@ Unused
+ViridianCity_EventScript_WatchToLearnBasics:: @ 8165A5B
+ msgbox ViridianCity_Text_WatchThatToLearnBasics
release
end
-EventScript_165A65:: @ 8165A65
- msgbox gUnknown_817DE9B
+@ Unused. Starts battle after the post battle text, which is odd.
+ViridianCity_EventScript_TutorialUnused:: @ 8165A65
+ msgbox ViridianCity_Text_ThatWasEducationalTakeThis
goto_if_questlog EventScript_ReleaseEnd
special sub_8112364
special ScrSpecial_StartOldManTutorialBattle
@@ -147,43 +152,43 @@ EventScript_165A65:: @ 8165A65
release
end
-EventScript_165A84:: @ 8165A84
- msgbox gUnknown_817DD03
+ViridianCity_EventScript_TutorialNotReady:: @ 8165A84
+ msgbox ViridianCity_Text_ThisIsPrivateProperty
closemessage
release
end
-ViridianCity_EventScript_165A8F:: @ 8165A8F
+ViridianCity_EventScript_Youngster:: @ 8165A8F
lock
faceplayer
- msgbox gUnknown_817DB98, MSGBOX_YESNO
+ msgbox ViridianCity_Text_WantToKnowAboutCaterpillarMons, MSGBOX_YESNO
compare VAR_RESULT, YES
- goto_if_eq EventScript_165AB0
+ goto_if_eq ViridianCity_EventScript_YoungsterExplainCaterpillars
compare VAR_RESULT, NO
- goto_if_eq EventScript_165ABA
+ goto_if_eq ViridianCity_EventScript_YoungsterDeclineExplanation
end
-EventScript_165AB0:: @ 8165AB0
- msgbox gUnknown_817DBE4
+ViridianCity_EventScript_YoungsterExplainCaterpillars:: @ 8165AB0
+ msgbox ViridianCity_Text_ExplainCaterpieWeedle
release
end
-EventScript_165ABA:: @ 8165ABA
- msgbox gUnknown_817DBD5
+ViridianCity_EventScript_YoungsterDeclineExplanation:: @ 8165ABA
+ msgbox ViridianCity_Text_OhOkayThen
release
end
-ViridianCity_EventScript_165AC4:: @ 8165AC4
+ViridianCity_EventScript_Woman:: @ 8165AC4
lock
faceplayer
compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0
- goto_if_eq EventScript_165ADB
- msgbox gUnknown_817DC99
+ goto_if_eq ViridianCity_EventScript_WomanRoadBlocked
+ msgbox ViridianCity_Text_GoShoppingInPewterOccasionally
release
end
-EventScript_165ADB:: @ 8165ADB
- msgbox gUnknown_817DC4E
+ViridianCity_EventScript_WomanRoadBlocked:: @ 8165ADB
+ msgbox ViridianCity_Text_GrandpaHasntHadCoffeeYet
closemessage
applymovement 5, Movement_FaceOriginalDirection
waitmovement 0
@@ -194,44 +199,44 @@ ViridianCity_EventScript_DreamEaterTutor:: @ 8165AF0
goto EventScript_DreamEaterTutor
end
-ViridianCity_EventScript_165AF6:: @ 8165AF6
+ViridianCity_EventScript_RoadBlocked:: @ 8165AF6
lockall
textcolor 0
- msgbox gUnknown_817DD03
+ msgbox ViridianCity_Text_ThisIsPrivateProperty
closemessage
- applymovement OBJ_EVENT_ID_PLAYER, Movement_165B0E
+ applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Movement_WalkDown
waitmovement 0
releaseall
end
-Movement_165B0E:: @ 8165B0E
+ViridianCity_Movement_WalkDown:: @ 8165B0E
walk_down
step_end
-ViridianCity_EventScript_165B10:: @ 8165B10
+ViridianCity_EventScript_TutorialTriggerLeft:: @ 8165B10
lockall
textcolor 0
- applymovement 4, Movement_WalkInPlaceFastestLeft
+ applymovement LOCALID_TUTORIAL_MAN, Movement_WalkInPlaceFastestLeft
waitmovement 0
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestRight
waitmovement 0
- call EventScript_165B4C
+ call ViridianCity_EventScript_DoTutorialBattle
release
end
-ViridianCity_EventScript_165B2E:: @ 8165B2E
+ViridianCity_EventScript_TutorialTriggerRight:: @ 8165B2E
lockall
textcolor 0
- applymovement 4, Movement_WalkInPlaceFastestRight
+ applymovement LOCALID_TUTORIAL_MAN, Movement_WalkInPlaceFastestRight
waitmovement 0
applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestLeft
waitmovement 0
- call EventScript_165B4C
+ call ViridianCity_EventScript_DoTutorialBattle
release
end
-EventScript_165B4C:: @ 8165B4C
- msgbox gUnknown_817DD4E
+ViridianCity_EventScript_DoTutorialBattle:: @ 8165B4C
+ msgbox ViridianCity_Text_ShowYouHowToCatchMons
closemessage
goto_if_questlog EventScript_ReleaseEnd
special sub_8112364
@@ -239,8 +244,8 @@ EventScript_165B4C:: @ 8165B4C
waitstate
lock
faceplayer
- msgbox gUnknown_817DE9B
+ msgbox ViridianCity_Text_ThatWasEducationalTakeThis
setvar VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2
giveitem ITEM_TEACHY_TV
- msgbox gUnknown_817DEEB
+ msgbox ViridianCity_Text_WatchThatToLearnBasics
return
diff --git a/data/maps/ViridianCity/text.inc b/data/maps/ViridianCity/text.inc
index 37b1d3c55..d029c942d 100644
--- a/data/maps/ViridianCity/text.inc
+++ b/data/maps/ViridianCity/text.inc
@@ -1,47 +1,47 @@
-gUnknown_817DABB:: @ 817DABB
+ViridianCity_Text_CanCarryMonsAnywhere:: @ 817DABB
.string "Those POKé BALLS at your waist!\n"
.string "You have POKéMON, don't you?\p"
.string "It's great that you can carry and\n"
.string "use POKéMON anytime, anywhere.$"
-gUnknown_817DB39:: @ 817DB39
+ViridianCity_Text_GymClosedWonderWhoLeaderIs:: @ 817DB39
.string "This POKéMON GYM is always closed.\p"
.string "I wonder who the LEADER is?$"
-gUnknown_817DB78:: @ 817DB78
+ViridianCity_Text_ViridiansGymLeaderReturned:: @ 817DB78
.string "VIRIDIAN GYM's LEADER returned!$"
-gUnknown_817DB98:: @ 817DB98
+ViridianCity_Text_WantToKnowAboutCaterpillarMons:: @ 817DB98
.string "You want to know about the two\n"
.string "kinds of caterpillar POKéMON?$"
-gUnknown_817DBD5:: @ 817DBD5
+ViridianCity_Text_OhOkayThen:: @ 817DBD5
.string "Oh, okay then!$"
-gUnknown_817DBE4:: @ 817DBE4
+ViridianCity_Text_ExplainCaterpieWeedle:: @ 817DBE4
.string "CATERPIE has no poison,\n"
.string "but WEEDLE does.\p"
.string "Watch that your POKéMON aren't\n"
.string "stabbed by WEEDLE's POISON STING.$"
-gUnknown_817DC4E:: @ 817DC4E
+ViridianCity_Text_GrandpaHasntHadCoffeeYet:: @ 817DC4E
.string "Oh, Grandpa!\n"
.string "Don't be so mean!\p"
.string "I'm so sorry.\n"
.string "He hasn't had his coffee yet.$"
-gUnknown_817DC99:: @ 817DC99
+ViridianCity_Text_GoShoppingInPewterOccasionally:: @ 817DC99
.string "I go shopping in PEWTER CITY\n"
.string "occasionally.\p"
.string "I have to take the winding trail in\n"
.string "VIRIDIAN FOREST when I go.$"
-gUnknown_817DD03:: @ 817DD03
+ViridianCity_Text_ThisIsPrivateProperty:: @ 817DD03
.string "I absolutely forbid you from\n"
.string "going through here!\p"
.string "This is private property!$"
-gUnknown_817DD4E:: @ 817DD4E
+ViridianCity_Text_ShowYouHowToCatchMons:: @ 817DD4E
.string "Well, now, I've had my coffee, and\n"
.string "that's what I need to get going!\p"
.string "Hm?\n"
@@ -58,18 +58,18 @@ gUnknown_817DD4E:: @ 817DD4E
.string "I suppose I had better show you\n"
.string "then!$"
-gUnknown_817DE9B:: @ 817DE9B
+ViridianCity_Text_ThatWasEducationalTakeThis:: @ 817DE9B
.string "There! Now tell me, that was\n"
.string "educational, was it not?\p"
.string "And here, take this, too.$"
-gUnknown_817DEEB:: @ 817DEEB
+ViridianCity_Text_WatchThatToLearnBasics:: @ 817DEEB
.string "If there's something you don't\n"
.string "understand, watch that.\p"
.string "It will teach you about the basics\n"
.string "of being a POKéMON TRAINER.$"
-gUnknown_817DF61:: @ 817DF61
+ViridianCity_Text_WeakenMonsFirstToCatch:: @ 817DF61
.string "Well, now, I've had my coffee, and\n"
.string "that's what I need to get going!\p"
.string "But I made it too strong.\n"
@@ -79,7 +79,7 @@ gUnknown_817DF61:: @ 817DF61
.string "At first, focus on weakening the\n"
.string "POKéMON before trying to catch it.$"
-gUnknown_817E046:: @ 817E046
+ViridianCity_Text_HowsTeachyTVHelping:: @ 817E046
.string "Well, now, I've had my coffee, and\n"
.string "that's what I need to get going!\p"
.string "But I made it too strong.\n"
@@ -87,39 +87,39 @@ gUnknown_817E046:: @ 817E046
.string "Incidentally, is my old TEACHY TV\n"
.string "helping you?$"
-gUnknown_817E0EA:: @ 817E0EA
+ViridianCity_Text_MyGrandsonOnTheShow:: @ 817E0EA
.string "Wahaha!\n"
.string "It's my grandson on the show!\p"
.string "Since he's the one doing the\n"
.string "teaching, you're bound to learn.$"
-gUnknown_817E14E:: @ 817E14E
+ViridianCity_Text_TooBusyForTeachyTV:: @ 817E14E
.string "Hm… You're too busy to not even\n"
.string "have the time for TEACHY TV…\p"
.string "Time is money, and neither should\n"
.string "be ill spent…$"
-gUnknown_817E1BB:: @ 817E1BB
+ViridianCity_Text_CitySign:: @ 817E1BB
.string "VIRIDIAN CITY \n"
.string "The Eternally Green Paradise$"
-gUnknown_817E1E7:: @ 817E1E7
+ViridianCity_Text_CatchMonsForEasierBattles:: @ 817E1E7
.string "TRAINER TIPS\p"
.string "Catch POKéMON and expand your\n"
.string "collection.\p"
.string "The more you have, the easier it\n"
.string "is to battle.$"
-gUnknown_817E24D:: @ 817E24D
+ViridianCity_Text_MovesLimitedByPP:: @ 817E24D
.string "TRAINER TIPS\p"
.string "The battle moves of POKéMON are\n"
.string "limited by their POWER POINTS, PP.\p"
.string "To replenish PP, rest your tired\n"
.string "POKéMON at a POKéMON CENTER.$"
-gUnknown_817E2DB:: @ 817E2DB
+ViridianCity_Text_GymSign:: @ 817E2DB
.string "VIRIDIAN CITY POKéMON GYM$"
-gUnknown_817E2F5:: @ 817E2F5
+ViridianCity_Text_GymDoorsAreLocked:: @ 817E2F5
.string "VIRIDIAN GYM's doors are locked…$"
diff --git a/data/maps/ViridianCity_Gym/map.json b/data/maps/ViridianCity_Gym/map.json
index 0297a31b1..b4c9a93e4 100644
--- a/data/maps/ViridianCity_Gym/map.json
+++ b/data/maps/ViridianCity_Gym/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_169FD6",
+ "script": "ViridianCity_Gym_EventScript_Takashi",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_16A004",
+ "script": "ViridianCity_Gym_EventScript_Yuji",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_169FA8",
+ "script": "ViridianCity_Gym_EventScript_Atsushi",
"flag": "0"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_169F7A",
+ "script": "ViridianCity_Gym_EventScript_Jason",
"flag": "0"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 2,
- "script": "ViridianCity_Gym_EventScript_169F91",
+ "script": "ViridianCity_Gym_EventScript_Cole",
"flag": "0"
},
{
@@ -88,7 +88,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 2,
- "script": "ViridianCity_Gym_EventScript_169FBF",
+ "script": "ViridianCity_Gym_EventScript_Kiyo",
"flag": "0"
},
{
@@ -101,7 +101,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_169FED",
+ "script": "ViridianCity_Gym_EventScript_Samuel",
"flag": "0"
},
{
@@ -114,7 +114,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_Gym_EventScript_169ECA",
+ "script": "ViridianCity_Gym_EventScript_Giovanni",
"flag": "FLAG_HIDE_VIRIDIAN_GIOVANNI"
},
{
@@ -127,7 +127,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 3,
- "script": "ViridianCity_Gym_EventScript_16A01B",
+ "script": "ViridianCity_Gym_EventScript_Warren",
"flag": "0"
},
{
@@ -140,7 +140,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_Gym_EventScript_16A032",
+ "script": "ViridianCity_Gym_EventScript_GymGuy",
"flag": "0"
}
],
@@ -174,14 +174,14 @@
"x": 15,
"y": 20,
"elevation": 0,
- "script": "ViridianCity_Gym_EventScript_16A05E"
+ "script": "ViridianCity_Gym_EventScript_GymStatue"
},
{
"type": "bg_event_type_0",
"x": 19,
"y": 20,
"elevation": 0,
- "script": "ViridianCity_Gym_EventScript_16A05E"
+ "script": "ViridianCity_Gym_EventScript_GymStatue"
},
{
"type": "hidden_item",
diff --git a/data/maps/ViridianCity_Gym/scripts.inc b/data/maps/ViridianCity_Gym/scripts.inc
index 0579e9e32..c14dceddf 100644
--- a/data/maps/ViridianCity_Gym/scripts.inc
+++ b/data/maps/ViridianCity_Gym/scripts.inc
@@ -1,11 +1,11 @@
ViridianCity_Gym_MapScripts:: @ 8169EC9
.byte 0
-ViridianCity_Gym_EventScript_169ECA:: @ 8169ECA
+ViridianCity_Gym_EventScript_Giovanni:: @ 8169ECA
famechecker FAMECHECKER_GIOVANNI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005
- trainerbattle_single TRAINER_LEADER_GIOVANNI, Text_18F352, Text_18F43F, EventScript_169F04, NO_MUSIC
- goto_if_unset FLAG_GOT_TM26_FROM_GIOVANNI, EventScript_169F2F
- msgbox gUnknown_818F4A2
+ trainerbattle_single TRAINER_LEADER_GIOVANNI, ViridianCity_Gym_Text_GiovanniIntro, ViridianCity_Gym_Text_GiovanniDefeat, ViridianCity_Gym_EventScript_DefeatedGiovanni, NO_MUSIC
+ goto_if_unset FLAG_GOT_TM26_FROM_GIOVANNI, ViridianCity_Gym_EventScript_GiveTM26
+ msgbox ViridianCity_Gym_Text_GiovanniPostBattle
closemessage
fadescreen FADE_TO_BLACK
removeobject 8
@@ -13,94 +13,94 @@ ViridianCity_Gym_EventScript_169ECA:: @ 8169ECA
release
end
-EventScript_169F04:: @ 8169F04
+ViridianCity_Gym_EventScript_DefeatedGiovanni:: @ 8169F04
famechecker FAMECHECKER_GIOVANNI, 3
setflag FLAG_HIDE_MISC_KANTO_ROCKETS
setflag FLAG_DEFEATED_LEADER_GIOVANNI
setflag FLAG_BADGE08_GET
setvar VAR_MAP_SCENE_ROUTE22, 3
set_gym_trainers 8
- goto EventScript_169F2F
+ goto ViridianCity_Gym_EventScript_GiveTM26
end
-EventScript_169F2F:: @ 8169F2F
- msgbox gUnknown_818F586
+ViridianCity_Gym_EventScript_GiveTM26:: @ 8169F2F
+ msgbox ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis
checkitemspace ITEM_TM26, 1
compare VAR_RESULT, FALSE
- goto_if_eq EventScript_169F70
- giveitem_msg gUnknown_818F675, ITEM_TM26
+ goto_if_eq ViridianCity_Gym_EventScript_NoRoomForTM26
+ giveitem_msg ViridianCity_Gym_Text_ReceivedTM26FromGiovanni, ITEM_TM26
setflag FLAG_GOT_TM26_FROM_GIOVANNI
- msgbox gUnknown_818F695
+ msgbox ViridianCity_Gym_Text_ExplainTM26
release
end
-EventScript_169F70:: @ 8169F70
- msgbox gUnknown_818F71B
+ViridianCity_Gym_EventScript_NoRoomForTM26:: @ 8169F70
+ msgbox ViridianCity_Gym_Text_YouDoNotHaveSpace
release
end
-ViridianCity_Gym_EventScript_169F7A:: @ 8169F7A
- trainerbattle_single TRAINER_TAMER_JASON, Text_18F7F3, Text_18F824
- msgbox gUnknown_818F840, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Jason:: @ 8169F7A
+ trainerbattle_single TRAINER_TAMER_JASON, ViridianCity_Gym_Text_JasonIntro, ViridianCity_Gym_Text_JasonDefeat
+ msgbox ViridianCity_Gym_Text_JasonPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_169F91:: @ 8169F91
- trainerbattle_single TRAINER_TAMER_COLE, Text_18F98A, Text_18F9BB
- msgbox gUnknown_818F9CC, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Cole:: @ 8169F91
+ trainerbattle_single TRAINER_TAMER_COLE, ViridianCity_Gym_Text_ColeIntro, ViridianCity_Gym_Text_ColeDefeat
+ msgbox ViridianCity_Gym_Text_ColePostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_169FA8:: @ 8169FA8
- trainerbattle_single TRAINER_BLACK_BELT_ATSUSHI, Text_18F7AD, Text_18F7D6
- msgbox gUnknown_818F7DD, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Atsushi:: @ 8169FA8
+ trainerbattle_single TRAINER_BLACK_BELT_ATSUSHI, ViridianCity_Gym_Text_AtsushiIntro, ViridianCity_Gym_Text_AtsushiDefeat
+ msgbox ViridianCity_Gym_Text_AtsushiPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_169FBF:: @ 8169FBF
- trainerbattle_single TRAINER_BLACK_BELT_KIYO, Text_18F86C, Text_18F899
- msgbox gUnknown_818F8A0, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Kiyo:: @ 8169FBF
+ trainerbattle_single TRAINER_BLACK_BELT_KIYO, ViridianCity_Gym_Text_KiyoIntro, ViridianCity_Gym_Text_KiyoDefeat
+ msgbox ViridianCity_Gym_Text_KiyoPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_169FD6:: @ 8169FD6
- trainerbattle_single TRAINER_BLACK_BELT_TAKASHI, Text_18F92C, Text_18F95A
- msgbox gUnknown_818F960, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Takashi:: @ 8169FD6
+ trainerbattle_single TRAINER_BLACK_BELT_TAKASHI, ViridianCity_Gym_Text_TakashiIntro, ViridianCity_Gym_Text_TakashiDefeat
+ msgbox ViridianCity_Gym_Text_TakashiPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_169FED:: @ 8169FED
- trainerbattle_single TRAINER_COOLTRAINER_SAMUEL, Text_18F9E7, Text_18FA2D
- msgbox gUnknown_818FA3B, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Samuel:: @ 8169FED
+ trainerbattle_single TRAINER_COOLTRAINER_SAMUEL, ViridianCity_Gym_Text_SamuelIntro, ViridianCity_Gym_Text_SamuelDefeat
+ msgbox ViridianCity_Gym_Text_SamuelPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_16A004:: @ 816A004
- trainerbattle_single TRAINER_COOLTRAINER_YUJI, Text_18F73B, Text_18F769
- msgbox gUnknown_818F77B, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Yuji:: @ 816A004
+ trainerbattle_single TRAINER_COOLTRAINER_YUJI, ViridianCity_Gym_Text_YujiIntro, ViridianCity_Gym_Text_YujiDefeat
+ msgbox ViridianCity_Gym_Text_YujiPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_16A01B:: @ 816A01B
- trainerbattle_single TRAINER_COOLTRAINER_WARREN, Text_18F8CB, Text_18F8EE
- msgbox gUnknown_818F8FE, MSGBOX_AUTOCLOSE
+ViridianCity_Gym_EventScript_Warren:: @ 816A01B
+ trainerbattle_single TRAINER_COOLTRAINER_WARREN, ViridianCity_Gym_Text_WarrenIntro, ViridianCity_Gym_Text_WarrenDefeat
+ msgbox ViridianCity_Gym_Text_WarrenPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianCity_Gym_EventScript_16A032:: @ 816A032
+ViridianCity_Gym_EventScript_GymGuy:: @ 816A032
lock
faceplayer
- goto_if_set FLAG_DEFEATED_LEADER_GIOVANNI, EventScript_16A047
- msgbox gUnknown_818FA81
+ goto_if_set FLAG_DEFEATED_LEADER_GIOVANNI, ViridianCity_Gym_EventScript_GymGuyPostVictory
+ msgbox ViridianCity_Gym_Text_GymGuyAdvice
release
end
-EventScript_16A047:: @ 816A047
+ViridianCity_Gym_EventScript_GymGuyPostVictory:: @ 816A047
famechecker FAMECHECKER_GIOVANNI, 4
- msgbox gUnknown_818FB56
+ msgbox ViridianCity_Gym_Text_GymGuyPostVictory
release
end
-ViridianCity_Gym_EventScript_16A05E:: @ 816A05E
+ViridianCity_Gym_EventScript_GymStatue:: @ 816A05E
lockall
- goto_if_set FLAG_BADGE08_GET, EventScript_16A072
- msgbox gUnknown_818FB8D
+ goto_if_set FLAG_BADGE08_GET, ViridianCity_Gym_EventScript_GymStatuePostVictory
+ msgbox ViridianCity_Gym_Text_GymStatue
releaseall
end
-EventScript_16A072:: @ 816A072
- msgbox gUnknown_818FBC1
+ViridianCity_Gym_EventScript_GymStatuePostVictory:: @ 816A072
+ msgbox ViridianCity_Gym_Text_GymStatuePlayerWon
releaseall
end
diff --git a/data/maps/ViridianCity_Gym/text.inc b/data/maps/ViridianCity_Gym/text.inc
index 7372bd6d3..38561c011 100644
--- a/data/maps/ViridianCity_Gym/text.inc
+++ b/data/maps/ViridianCity_Gym/text.inc
@@ -1,4 +1,4 @@
-Text_18F352:: @ 818F352
+ViridianCity_Gym_Text_GiovanniIntro:: @ 818F352
.string "Fwahahaha!\n"
.string "Welcome to my hideout!\p"
.string "It shall be so until I can restore\n"
@@ -9,14 +9,14 @@ Text_18F352:: @ 818F352
.string "Once more, you shall face\n"
.string "GIOVANNI, the greatest TRAINER!{PLAY_BGM}{MUS_ROCKET}$"
-Text_18F43F:: @ 818F43F
+ViridianCity_Gym_Text_GiovanniDefeat:: @ 818F43F
.string "Ha!\n"
.string "That was a truly intense fight.\l"
.string "You have won!\p"
.string "As proof, here is the EARTHBADGE!\n"
.string "{PAUSE_MUSIC}{PLAY_BGM}{MUS_ME_BACHI}{PAUSE 0xFE}{PAUSE 0x56}{RESUME_MUSIC}$"
-gUnknown_818F4A2:: @ 818F4A2
+ViridianCity_Gym_Text_GiovanniPostBattle:: @ 818F4A2
.string "Having lost in this fashion, \n"
.string "I can't face my followers.\l"
.string "I have betrayed their trust.\p"
@@ -27,7 +27,7 @@ gUnknown_818F4A2:: @ 818F4A2
.string "Let us meet again someday!\n"
.string "Farewell!$"
-gUnknown_818F586:: @ 818F586
+ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis:: @ 818F586
.string "The EARTHBADGE makes POKéMON of\n"
.string "any level obey without question.\p"
.string "It is evidence of your mastery as\n"
@@ -38,111 +38,111 @@ gUnknown_818F586:: @ 818F586
.string "Consider it a gift for your POKéMON\n"
.string "LEAGUE challenge.$"
-gUnknown_818F675:: @ 818F675
+ViridianCity_Gym_Text_ReceivedTM26FromGiovanni:: @ 818F675
.string "{PLAYER} received TM26\n"
.string "from GIOVANNI.$"
-gUnknown_818F695:: @ 818F695
+ViridianCity_Gym_Text_ExplainTM26:: @ 818F695
.string "TM26 contains EARTHQUAKE.\p"
.string "It is a powerful attack that causes\n"
.string "a massive tremor.\p"
.string "I made it when I ran the GYM here,\n"
.string "far too long ago… $"
-gUnknown_818F71B:: @ 818F71B
+ViridianCity_Gym_Text_YouDoNotHaveSpace:: @ 818F71B
.string "You do not have space for this!$"
-Text_18F73B:: @ 818F73B
+ViridianCity_Gym_Text_YujiIntro:: @ 818F73B
.string "Heh!\n"
.string "You must be running out of steam\l"
.string "by now!$"
-Text_18F769:: @ 818F769
+ViridianCity_Gym_Text_YujiDefeat:: @ 818F769
.string "I ran out of gas!$"
-gUnknown_818F77B:: @ 818F77B
+ViridianCity_Gym_Text_YujiPostBattle:: @ 818F77B
.string "You'll need power to keep up with\n"
.string "our GYM LEADER.$"
-Text_18F7AD:: @ 818F7AD
+ViridianCity_Gym_Text_AtsushiIntro:: @ 818F7AD
.string "Rrrroar!\n"
.string "I'm working myself into a rage!$"
-Text_18F7D6:: @ 818F7D6
+ViridianCity_Gym_Text_AtsushiDefeat:: @ 818F7D6
.string "Wargh!$"
-gUnknown_818F7DD:: @ 818F7DD
+ViridianCity_Gym_Text_AtsushiPostBattle:: @ 818F7DD
.string "I'm still not worthy!$"
-Text_18F7F3:: @ 818F7F3
+ViridianCity_Gym_Text_JasonIntro:: @ 818F7F3
.string "POKéMON and I, we make wonderful\n"
.string "music together!$"
-Text_18F824:: @ 818F824
+ViridianCity_Gym_Text_JasonDefeat:: @ 818F824
.string "You are in perfect harmony!$"
-gUnknown_818F840:: @ 818F840
+ViridianCity_Gym_Text_JasonPostBattle:: @ 818F840
.string "Do you know the identity of our\n"
.string "GYM LEADER?$"
-Text_18F86C:: @ 818F86C
+ViridianCity_Gym_Text_KiyoIntro:: @ 818F86C
.string "Karate is the ultimate form of\n"
.string "martial arts!$"
-Text_18F899:: @ 818F899
+ViridianCity_Gym_Text_KiyoDefeat:: @ 818F899
.string "Aiyah!$"
-gUnknown_818F8A0:: @ 818F8A0
+ViridianCity_Gym_Text_KiyoPostBattle:: @ 818F8A0
.string "If my POKéMON were as good at\n"
.string "karate as I…$"
-Text_18F8CB:: @ 818F8CB
+ViridianCity_Gym_Text_WarrenIntro:: @ 818F8CB
.string "The truly talented win with style.$"
-Text_18F8EE:: @ 818F8EE
+ViridianCity_Gym_Text_WarrenDefeat:: @ 818F8EE
.string "I lost my grip!$"
-gUnknown_818F8FE:: @ 818F8FE
+ViridianCity_Gym_Text_WarrenPostBattle:: @ 818F8FE
.string "The LEADER will scold me for\n"
.string "losing this way…$"
-Text_18F92C:: @ 818F92C
+ViridianCity_Gym_Text_TakashiIntro:: @ 818F92C
.string "I'm the KARATE KING!\n"
.string "Your fate rests with me!$"
-Text_18F95A:: @ 818F95A
+ViridianCity_Gym_Text_TakashiDefeat:: @ 818F95A
.string "Ayah!$"
-gUnknown_818F960:: @ 818F960
+ViridianCity_Gym_Text_TakashiPostBattle:: @ 818F960
.string "The POKéMON LEAGUE?\n"
.string "You? Don't get cocky!$"
-Text_18F98A:: @ 818F98A
+ViridianCity_Gym_Text_ColeIntro:: @ 818F98A
.string "Your POKéMON will cower at the\n"
.string "crack of my whip!$"
-Text_18F9BB:: @ 818F9BB
+ViridianCity_Gym_Text_ColeDefeat:: @ 818F9BB
.string "Yowch!\n"
.string "Whiplash!$"
-gUnknown_818F9CC:: @ 818F9CC
+ViridianCity_Gym_Text_ColePostBattle:: @ 818F9CC
.string "Wait!\n"
.string "I was just careless!$"
-Text_18F9E7:: @ 818F9E7
+ViridianCity_Gym_Text_SamuelIntro:: @ 818F9E7
.string "VIRIDIAN GYM was closed for a\n"
.string "long time.\p"
.string "But now, our LEADER is back!$"
-Text_18FA2D:: @ 818FA2D
+ViridianCity_Gym_Text_SamuelDefeat:: @ 818FA2D
.string "I was beaten?$"
-gUnknown_818FA3B:: @ 818FA3B
+ViridianCity_Gym_Text_SamuelPostBattle:: @ 818FA3B
.string "You can go on to the POKéMON\n"
.string "LEAGUE only by defeating our GYM\l"
.string "LEADER!$"
-gUnknown_818FA81:: @ 818FA81
+ViridianCity_Gym_Text_GymGuyAdvice:: @ 818FA81
.string "Yo!\n"
.string "Champ in the making!\p"
.string "Even I don't know the VIRIDIAN\n"
@@ -153,17 +153,17 @@ gUnknown_818FA81:: @ 818FA81
.string "Also, I heard that the TRAINERS\n"
.string "here like GROUND-type POKéMON.$"
-gUnknown_818FB56:: @ 818FB56
+ViridianCity_Gym_Text_GymGuyPostVictory:: @ 818FB56
.string "Blow me away! GIOVANNI was the\n"
.string "GYM LEADER of VIRIDIAN?$"
-gUnknown_818FB8D:: @ 818FB8D
+ViridianCity_Gym_Text_GymStatue:: @ 818FB8D
.string "VIRIDIAN POKéMON GYM\n"
.string "LEADER: ?\p"
.string "WINNING TRAINERS:\n"
.string "{RIVAL}$"
-gUnknown_818FBC1:: @ 818FBC1
+ViridianCity_Gym_Text_GymStatuePlayerWon:: @ 818FBC1
.string "VIRIDIAN POKéMON GYM\n"
.string "LEADER: GIOVANNI\p"
.string "WINNING TRAINERS:\n"
diff --git a/data/maps/ViridianCity_House1/map.json b/data/maps/ViridianCity_House1/map.json
index 1a960169e..167069bc6 100644
--- a/data/maps/ViridianCity_House1/map.json
+++ b/data/maps/ViridianCity_House1/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_House1_EventScript_169E9B",
+ "script": "ViridianCity_House1_EventScript_BaldingMan",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 2,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_House1_EventScript_169EA4",
+ "script": "ViridianCity_House1_EventScript_LittleGirl",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_House1_EventScript_169EAD",
+ "script": "ViridianCity_House1_EventScript_Speary",
"flag": "0"
}
],
@@ -83,7 +83,7 @@
"x": 7,
"y": 1,
"elevation": 0,
- "script": "ViridianCity_House1_EventScript_169EC0"
+ "script": "ViridianCity_House1_EventScript_NicknameSign"
}
]
}
diff --git a/data/maps/ViridianCity_House1/scripts.inc b/data/maps/ViridianCity_House1/scripts.inc
index 446035efe..0af4621cf 100644
--- a/data/maps/ViridianCity_House1/scripts.inc
+++ b/data/maps/ViridianCity_House1/scripts.inc
@@ -1,24 +1,24 @@
ViridianCity_House1_MapScripts:: @ 8169E9A
.byte 0
-ViridianCity_House1_EventScript_169E9B:: @ 8169E9B
- msgbox gUnknown_818F292, MSGBOX_NPC
+ViridianCity_House1_EventScript_BaldingMan:: @ 8169E9B
+ msgbox ViridianCity_House1_Text_NicknamingIsFun, MSGBOX_NPC
end
-ViridianCity_House1_EventScript_169EA4:: @ 8169EA4
- msgbox gUnknown_818F30F, MSGBOX_NPC
+ViridianCity_House1_EventScript_LittleGirl:: @ 8169EA4
+ msgbox ViridianCity_House1_Text_MyDaddyLovesMonsToo, MSGBOX_NPC
end
-ViridianCity_House1_EventScript_169EAD:: @ 8169EAD
+ViridianCity_House1_EventScript_Speary:: @ 8169EAD
lock
faceplayer
waitse
playmoncry SPECIES_SPEAROW, 0
- msgbox gUnknown_818F32C
+ msgbox ViridianCity_House1_Text_Speary
waitmoncry
release
end
-ViridianCity_House1_EventScript_169EC0:: @ 8169EC0
- msgbox gUnknown_818F33D, MSGBOX_SIGN
+ViridianCity_House1_EventScript_NicknameSign:: @ 8169EC0
+ msgbox ViridianCity_House1_Text_SpearowNameSpeary, MSGBOX_SIGN
end
diff --git a/data/maps/ViridianCity_House1/text.inc b/data/maps/ViridianCity_House1/text.inc
index c1ec37238..15b066efa 100644
--- a/data/maps/ViridianCity_House1/text.inc
+++ b/data/maps/ViridianCity_House1/text.inc
@@ -1,16 +1,16 @@
-gUnknown_818F292:: @ 818F292
+ViridianCity_House1_Text_NicknamingIsFun:: @ 818F292
.string "Coming up with nicknames is fun,\n"
.string "but it's not so easy to do.\p"
.string "Clever names are nice, but simple\n"
.string "names are easier to remember.$"
-gUnknown_818F30F:: @ 818F30F
+ViridianCity_House1_Text_MyDaddyLovesMonsToo:: @ 818F30F
.string "My daddy loves POKéMON, too.$"
-gUnknown_818F32C:: @ 818F32C
+ViridianCity_House1_Text_Speary:: @ 818F32C
.string "SPEARY: Tetweet!$"
-gUnknown_818F33D:: @ 818F33D
+ViridianCity_House1_Text_SpearowNameSpeary:: @ 818F33D
.string "SPEAROW\n"
.string "Name: SPEARY$"
diff --git a/data/maps/ViridianCity_House2/map.json b/data/maps/ViridianCity_House2/map.json
index 5190a5d28..dc80606ec 100644
--- a/data/maps/ViridianCity_House2/map.json
+++ b/data/maps/ViridianCity_House2/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_House2_EventScript_16A094",
+ "script": "ViridianCity_House2_EventScript_Woman",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_House2_EventScript_16A07D",
+ "script": "ViridianCity_House2_EventScript_Lass",
"flag": "0"
}
],
@@ -70,35 +70,35 @@
"x": 4,
"y": 4,
"elevation": 0,
- "script": "ViridianCity_House2_EventScript_16A0AB"
+ "script": "ViridianCity_House2_EventScript_Notebook"
},
{
"type": "bg_event_type_0",
"x": 5,
"y": 1,
"elevation": 0,
- "script": "ViridianCity_House2_EventScript_16A11D"
+ "script": "ViridianCity_House2_EventScript_Blackboard"
},
{
"type": "bg_event_type_0",
"x": 4,
"y": 1,
"elevation": 0,
- "script": "ViridianCity_House2_EventScript_16A11D"
+ "script": "ViridianCity_House2_EventScript_Blackboard"
},
{
"type": "bg_event_type_1",
"x": 9,
"y": 2,
"elevation": 0,
- "script": "ViridianCity_House2_EventScript_1ACD65"
+ "script": "ViridianCity_House2_EventScript_PokemonJournal"
},
{
"type": "bg_event_type_1",
"x": 8,
"y": 2,
"elevation": 0,
- "script": "ViridianCity_House2_EventScript_1ACD65"
+ "script": "ViridianCity_House2_EventScript_PokemonJournal"
}
]
}
diff --git a/data/maps/ViridianCity_House2/scripts.inc b/data/maps/ViridianCity_House2/scripts.inc
index 6a0845622..0c08b447d 100644
--- a/data/maps/ViridianCity_House2/scripts.inc
+++ b/data/maps/ViridianCity_House2/scripts.inc
@@ -1,97 +1,97 @@
ViridianCity_House2_MapScripts:: @ 816A07C
.byte 0
-ViridianCity_House2_EventScript_16A07D:: @ 816A07D
+ViridianCity_House2_EventScript_Lass:: @ 816A07D
lock
faceplayer
- msgbox gUnknown_818FC00
+ msgbox ViridianCity_House2_Text_TryingToMemorizeNotes
closemessage
applymovement 2, Movement_WalkInPlaceFastestUp
waitmovement 0
release
end
-ViridianCity_House2_EventScript_16A094:: @ 816A094
+ViridianCity_House2_EventScript_Woman:: @ 816A094
lock
faceplayer
- msgbox gUnknown_818FC2B
+ msgbox ViridianCity_House2_Text_ReadBlackboardCarefully
closemessage
applymovement 1, Movement_FaceOriginalDirection
waitmovement 0
release
end
-ViridianCity_House2_EventScript_16A0AB:: @ 816A0AB
+ViridianCity_House2_EventScript_Notebook:: @ 816A0AB
lockall
- msgbox gUnknown_818FC65
- msgbox gUnknown_818FF19, MSGBOX_YESNO
+ msgbox ViridianCity_House2_Text_NotebookFirstPage
+ msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_16A11B
- msgbox gUnknown_818FD23
- msgbox gUnknown_818FF19, MSGBOX_YESNO
+ goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook
+ msgbox ViridianCity_House2_Text_NotebookSecondPage
+ msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_16A11B
- msgbox gUnknown_818FDA8
- msgbox gUnknown_818FF19, MSGBOX_YESNO
+ goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook
+ msgbox ViridianCity_House2_Text_NotebookThirdPage
+ msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO
compare VAR_RESULT, NO
- goto_if_eq EventScript_16A11B
- msgbox gUnknown_818FE5C
+ goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook
+ msgbox ViridianCity_House2_Text_NotebookFourthPage
applymovement 2, Movement_WalkInPlaceFastestUp
waitmovement 0
textcolor 1
- msgbox gUnknown_818FF28
+ msgbox ViridianCity_House2_Text_HeyDontLookAtMyNotes
releaseall
end
-EventScript_16A11B:: @ 816A11B
+ViridianCity_House2_EventScript_StopReadingNotebook:: @ 816A11B
releaseall
end
-ViridianCity_House2_EventScript_16A11D:: @ 816A11D
+ViridianCity_House2_EventScript_Blackboard:: @ 816A11D
lockall
- msgbox gUnknown_818FF4B
- goto EventScript_16A12C
+ msgbox ViridianCity_House2_Text_BlackboardListsStatusProblems
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A12C:: @ 816A12C
- message Text_18FF88
+ViridianCity_House2_EventScript_ChooseBlackboardTopic:: @ 816A12C
+ message ViridianCity_House2_Text_ReadWhichTopic
waitmessage
multichoicegrid 7, 1, MULTICHOICE_TRAINER_SCHOOL_WHITEBOARD, 3, FALSE
switch VAR_RESULT
- case 0, EventScript_16A18B
- case 1, EventScript_16A1A7
- case 2, EventScript_16A1C3
- case 3, EventScript_16A199
- case 4, EventScript_16A1B5
- case 5, EventScript_16A1D1
- case 127, EventScript_16A1D1
+ case 0, ViridianCity_House2_EventScript_ReadSleep
+ case 1, ViridianCity_House2_EventScript_ReadPoison
+ case 2, ViridianCity_House2_EventScript_ReadParalysis
+ case 3, ViridianCity_House2_EventScript_ReadBurn
+ case 4, ViridianCity_House2_EventScript_ReadFreeze
+ case 5, ViridianCity_House2_EventScript_ExitBlackboard
+ case 127, ViridianCity_House2_EventScript_ExitBlackboard
end
-EventScript_16A18B:: @ 816A18B
- msgbox gUnknown_818FFA9
- goto EventScript_16A12C
+ViridianCity_House2_EventScript_ReadSleep:: @ 816A18B
+ msgbox ViridianCity_House2_Text_ExplainSleep
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A199:: @ 816A199
- msgbox gUnknown_8190025
- goto EventScript_16A12C
+ViridianCity_House2_EventScript_ReadBurn:: @ 816A199
+ msgbox ViridianCity_House2_Text_ExplainBurn
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A1A7:: @ 816A1A7
- msgbox gUnknown_819009F
- goto EventScript_16A12C
+ViridianCity_House2_EventScript_ReadPoison:: @ 816A1A7
+ msgbox ViridianCity_House2_Text_ExplainPoison
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A1B5:: @ 816A1B5
- msgbox gUnknown_819010F
- goto EventScript_16A12C
+ViridianCity_House2_EventScript_ReadFreeze:: @ 816A1B5
+ msgbox ViridianCity_House2_Text_ExplainFreeze
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A1C3:: @ 816A1C3
- msgbox gUnknown_8190199
- goto EventScript_16A12C
+ViridianCity_House2_EventScript_ReadParalysis:: @ 816A1C3
+ msgbox ViridianCity_House2_Text_ExplainParalysis
+ goto ViridianCity_House2_EventScript_ChooseBlackboardTopic
end
-EventScript_16A1D1:: @ 816A1D1
+ViridianCity_House2_EventScript_ExitBlackboard:: @ 816A1D1
releaseall
end
diff --git a/data/maps/ViridianCity_House2/text.inc b/data/maps/ViridianCity_House2/text.inc
index a575c0f34..176bb713a 100644
--- a/data/maps/ViridianCity_House2/text.inc
+++ b/data/maps/ViridianCity_House2/text.inc
@@ -1,13 +1,13 @@
-gUnknown_818FC00:: @ 818FC00
+ViridianCity_House2_Text_TryingToMemorizeNotes:: @ 818FC00
.string "Whew! I'm trying to memorize all my\n"
.string "notes.$"
-gUnknown_818FC2B:: @ 818FC2B
+ViridianCity_House2_Text_ReadBlackboardCarefully:: @ 818FC2B
.string "Okay!\p"
.string "Be sure to read what's on the\n"
.string "blackboard carefully!$"
-gUnknown_818FC65:: @ 818FC65
+ViridianCity_House2_Text_NotebookFirstPage:: @ 818FC65
.string "Let's check out the notebook.\p"
.string "First page…\p"
.string "POKé BALLS are used to catch\n"
@@ -17,14 +17,14 @@ gUnknown_818FC65:: @ 818FC65
.string "People who raise and battle\n"
.string "with POKéMON are called TRAINERS.$"
-gUnknown_818FD23:: @ 818FD23
+ViridianCity_House2_Text_NotebookSecondPage:: @ 818FD23
.string "Second page…\p"
.string "A healthy POKéMON may be hard to\n"
.string "catch, so weaken it first.\p"
.string "Poison, burn, or cause another\n"
.string "status problem to weaken it.$"
-gUnknown_818FDA8:: @ 818FDA8
+ViridianCity_House2_Text_NotebookThirdPage:: @ 818FDA8
.string "Third page…\p"
.string "POKéMON TRAINERS seek others to\n"
.string "engage in POKéMON battles.\p"
@@ -33,7 +33,7 @@ gUnknown_818FDA8:: @ 818FDA8
.string "Battles are constantly waged at\n"
.string "POKéMON GYMS everywhere.$"
-gUnknown_818FE5C:: @ 818FE5C
+ViridianCity_House2_Text_NotebookFourthPage:: @ 818FE5C
.string "Fourth page…\p"
.string "The ultimate goal for all POKéMON\n"
.string "TRAINERS is simple.\p"
@@ -43,21 +43,21 @@ gUnknown_818FE5C:: @ 818FE5C
.string "The ELITE FOUR of the POKéMON\n"
.string "LEAGUE!$"
-gUnknown_818FF19:: @ 818FF19
+ViridianCity_House2_Text_TurnThePage:: @ 818FF19
.string "Turn the page?$"
-gUnknown_818FF28:: @ 818FF28
+ViridianCity_House2_Text_HeyDontLookAtMyNotes:: @ 818FF28
.string "GIRL: Hey!\n"
.string "Don't look at my notes!$"
-gUnknown_818FF4B:: @ 818FF4B
+ViridianCity_House2_Text_BlackboardListsStatusProblems:: @ 818FF4B
.string "The blackboard lists POKéMON\n"
.string "STATUS problems during battles.$"
-Text_18FF88:: @ 818FF88
+ViridianCity_House2_Text_ReadWhichTopic:: @ 818FF88
.string "Which topic do you want to read?$"
-gUnknown_818FFA9:: @ 818FFA9
+ViridianCity_House2_Text_ExplainSleep:: @ 818FFA9
.string "A POKéMON can't attack if it's\n"
.string "asleep.\p"
.string "POKéMON will stay asleep even\n"
@@ -65,19 +65,19 @@ gUnknown_818FFA9:: @ 818FFA9
.string "Use AWAKENING to awaken one\n"
.string "from sleep.$"
-gUnknown_8190025:: @ 8190025
+ViridianCity_House2_Text_ExplainBurn:: @ 8190025
.string "A burn reduces ATTACK power.\n"
.string "It also causes ongoing HP loss.\p"
.string "A burn remains after a battle.\n"
.string "Use BURN HEAL to cure a burn.$"
-gUnknown_819009F:: @ 819009F
+ViridianCity_House2_Text_ExplainPoison:: @ 819009F
.string "When poisoned, a POKéMON's health\n"
.string "steadily drops.\p"
.string "Poison lingers after battles.\n"
.string "Use an ANTIDOTE to cure poison!$"
-gUnknown_819010F:: @ 819010F
+ViridianCity_House2_Text_ExplainFreeze:: @ 819010F
.string "A frozen POKéMON becomes\n"
.string "helplessly immobile.\p"
.string "It stays frozen even after the\n"
@@ -85,7 +85,7 @@ gUnknown_819010F:: @ 819010F
.string "Use ICE HEAL to thaw out the\n"
.string "suffering POKéMON.$"
-gUnknown_8190199:: @ 8190199
+ViridianCity_House2_Text_ExplainParalysis:: @ 8190199
.string "Paralysis reduces SPEED and may\n"
.string "prevent the POKéMON from moving.\p"
.string "Paralysis remains after battles.\n"
diff --git a/data/maps/ViridianCity_Mart/map.json b/data/maps/ViridianCity_Mart/map.json
index 09f58a9d5..5a4ae7bc0 100644
--- a/data/maps/ViridianCity_Mart/map.json
+++ b/data/maps/ViridianCity_Mart/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_Mart_EventScript_16A268",
+ "script": "ViridianCity_Mart_EventScript_Clerk",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_Mart_EventScript_16A2B7",
+ "script": "ViridianCity_Mart_EventScript_Youngster",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_Mart_EventScript_16A2AE",
+ "script": "ViridianCity_Mart_EventScript_Woman",
"flag": "0"
}
],
diff --git a/data/maps/ViridianCity_Mart/scripts.inc b/data/maps/ViridianCity_Mart/scripts.inc
index 1f66937cf..5ad0d9a2f 100644
--- a/data/maps/ViridianCity_Mart/scripts.inc
+++ b/data/maps/ViridianCity_Mart/scripts.inc
@@ -4,36 +4,36 @@ ViridianCity_Mart_MapScripts:: @ 816A1D3
.byte 0
ViridianCity_Mart_OnLoad:: @ 816A1DE
- goto_if_unset FLAG_SYS_POKEDEX_GET, EventScript_16A1E8
+ goto_if_unset FLAG_SYS_POKEDEX_GET, ViridianCity_Mart_EventScript_HideQuestionnaire
end
-EventScript_16A1E8:: @ 816A1E8
- setmetatile 1, 3, 703, 1
- setmetatile 1, 4, 704, 1
+ViridianCity_Mart_EventScript_HideQuestionnaire:: @ 816A1E8
+ setmetatile 1, 3, METATILE_Shop_CounterMid_Top, 1
+ setmetatile 1, 4, METATILE_Shop_CounterMid_Bottom, 1
end
ViridianCity_Mart_OnFrame:: @ 816A1FB
- map_script_2 VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 0, EventScript_16A205
+ map_script_2 VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 0, ViridianCity_Mart_EventScript_ParcelScene
.2byte 0
-EventScript_16A205:: @ 816A205
+ViridianCity_Mart_EventScript_ParcelScene:: @ 816A205
lockall
textcolor 0
applymovement 1, Movement_WalkInPlaceFastestDown
waitmovement 0
- msgbox gUnknown_819021A
+ msgbox ViridianCity_Mart_Text_YouCameFromPallet
closemessage
- applymovement 1, Movement_16A262
- applymovement OBJ_EVENT_ID_PLAYER, Movement_16A25C
+ applymovement 1, ViridianCity_Mart_Movement_FacePlayer
+ applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Mart_Movement_ApproachCounter
waitmovement 0
- msgbox gUnknown_819023A
+ msgbox ViridianCity_Mart_Text_TakeThisToProfOak
setvar VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1
- giveitem_msg gUnknown_8190289, ITEM_OAKS_PARCEL, 1, MUS_FAN5
+ giveitem_msg ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk, ITEM_OAKS_PARCEL, 1, MUS_FAN5
setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 5
releaseall
end
-Movement_16A25C:: @ 816A25C
+ViridianCity_Mart_Movement_ApproachCounter:: @ 816A25C
walk_up
walk_up
walk_up
@@ -41,7 +41,7 @@ Movement_16A25C:: @ 816A25C
walk_in_place_fastest_left
step_end
-Movement_16A262:: @ 816A262
+ViridianCity_Mart_Movement_FacePlayer:: @ 816A262
delay_16
delay_16
delay_16
@@ -49,21 +49,21 @@ Movement_16A262:: @ 816A262
walk_in_place_fastest_right
step_end
-ViridianCity_Mart_EventScript_16A268:: @ 816A268
+ViridianCity_Mart_EventScript_Clerk:: @ 816A268
lock
faceplayer
compare VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1
- goto_if_eq EventScript_16A2A4
+ goto_if_eq ViridianCity_Mart_EventScript_SayHiToOak
goto_if_questlog EventScript_ReleaseEnd
message Text_MayIHelpYou
waitmessage
- pokemart Items_16A298
+ pokemart ViridianCity_Mart_Items
msgbox Text_PleaseComeAgain
release
end
.align 2
-Items_16A298:: @ 816A298
+ViridianCity_Mart_Items:: @ 816A298
.2byte ITEM_POKE_BALL
.2byte ITEM_POTION
.2byte ITEM_ANTIDOTE
@@ -72,15 +72,15 @@ Items_16A298:: @ 816A298
release
end
-EventScript_16A2A4:: @ 816A2A4
- msgbox Text_1902BF
+ViridianCity_Mart_EventScript_SayHiToOak:: @ 816A2A4
+ msgbox ViridianCity_Mart_Text_SayHiToOakForMe
release
end
-ViridianCity_Mart_EventScript_16A2AE:: @ 816A2AE
- msgbox gUnknown_81902F5, MSGBOX_NPC
+ViridianCity_Mart_EventScript_Woman:: @ 816A2AE
+ msgbox ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes, MSGBOX_NPC
end
-ViridianCity_Mart_EventScript_16A2B7:: @ 816A2B7
- msgbox gUnknown_819032C, MSGBOX_NPC
+ViridianCity_Mart_EventScript_Youngster:: @ 816A2B7
+ msgbox ViridianCity_Mart_Text_GotToBuySomePotions, MSGBOX_NPC
end
diff --git a/data/maps/ViridianCity_Mart/text.inc b/data/maps/ViridianCity_Mart/text.inc
index a610e83cd..c54f4220a 100644
--- a/data/maps/ViridianCity_Mart/text.inc
+++ b/data/maps/ViridianCity_Mart/text.inc
@@ -1,25 +1,25 @@
-gUnknown_819021A:: @ 819021A
+ViridianCity_Mart_Text_YouCameFromPallet:: @ 819021A
.string "Hey!\n"
.string "You came from PALLET TOWN?$"
-gUnknown_819023A:: @ 819023A
+ViridianCity_Mart_Text_TakeThisToProfOak:: @ 819023A
.string "You know PROF. OAK, right?\p"
.string "His order came in.\n"
.string "Can I get you to take it to him?$"
-gUnknown_8190289:: @ 8190289
+ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk:: @ 8190289
.string "{PLAYER} received OAK'S PARCEL\n"
.string "from the POKéMON MART clerk.$"
-Text_1902BF:: @ 81902BF
+ViridianCity_Mart_Text_SayHiToOakForMe:: @ 81902BF
.string "Okay, thanks! Please say hi to\n"
.string "PROF. OAK for me, too.$"
-gUnknown_81902F5:: @ 81902F5
+ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes:: @ 81902F5
.string "This shop does good business in\n"
.string "ANTIDOTES, I've heard.$"
-gUnknown_819032C:: @ 819032C
+ViridianCity_Mart_Text_GotToBuySomePotions:: @ 819032C
.string "I've got to buy some POTIONS.\p"
.string "You never know when your POKéMON\n"
.string "will need quick healing.$"
diff --git a/data/maps/ViridianCity_PokemonCenter_1F/map.json b/data/maps/ViridianCity_PokemonCenter_1F/map.json
index 3e5822608..c531d4b59 100644
--- a/data/maps/ViridianCity_PokemonCenter_1F/map.json
+++ b/data/maps/ViridianCity_PokemonCenter_1F/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2CF",
+ "script": "ViridianCity_PokemonCenter_1F_EventScript_Nurse",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2E1",
+ "script": "ViridianCity_PokemonCenter_1F_EventScript_Gentleman",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2D8",
+ "script": "ViridianCity_PokemonCenter_1F_EventScript_Boy",
"flag": "0"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2EA",
+ "script": "ViridianCity_PokemonCenter_1F_EventScript_Youngster",
"flag": "0"
}
],
diff --git a/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc
index 43e74ef4c..ca02e1113 100644
--- a/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc
+++ b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc
@@ -7,21 +7,21 @@ ViridianCity_PokemonCenter_1F_OnTransition:: @ 816A2CB
setrespawn SPAWN_VIRIDIAN_CITY
end
-ViridianCity_PokemonCenter_1F_EventScript_16A2CF:: @ 816A2CF
+ViridianCity_PokemonCenter_1F_EventScript_Nurse:: @ 816A2CF
lock
faceplayer
call EventScript_PkmnCenterNurse
release
end
-ViridianCity_PokemonCenter_1F_EventScript_16A2D8:: @ 816A2D8
- msgbox gUnknown_81903E5, MSGBOX_NPC
+ViridianCity_PokemonCenter_1F_EventScript_Boy:: @ 816A2D8
+ msgbox ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown, MSGBOX_NPC
end
-ViridianCity_PokemonCenter_1F_EventScript_16A2E1:: @ 816A2E1
- msgbox gUnknown_8190384, MSGBOX_NPC
+ViridianCity_PokemonCenter_1F_EventScript_Gentleman:: @ 816A2E1
+ msgbox ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC, MSGBOX_NPC
end
-ViridianCity_PokemonCenter_1F_EventScript_16A2EA:: @ 816A2EA
- msgbox gUnknown_8190450, MSGBOX_NPC
+ViridianCity_PokemonCenter_1F_EventScript_Youngster:: @ 816A2EA
+ msgbox ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons, MSGBOX_NPC
end
diff --git a/data/maps/ViridianCity_PokemonCenter_1F/text.inc b/data/maps/ViridianCity_PokemonCenter_1F/text.inc
index 18b535a45..f0e636704 100644
--- a/data/maps/ViridianCity_PokemonCenter_1F/text.inc
+++ b/data/maps/ViridianCity_PokemonCenter_1F/text.inc
@@ -1,16 +1,16 @@
-gUnknown_8190384:: @ 8190384
+ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC:: @ 8190384
.string "Please feel free to use that PC in\n"
.string "the corner.\p"
.string "The receptionist told me so.\n"
.string "It's so kind of her!$"
-gUnknown_81903E5:: @ 81903E5
+ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown:: @ 81903E5
.string "There's a POKéMON CENTER in every\n"
.string "town ahead.\p"
.string "They charge no money, so don't\n"
.string "be shy about healing POKéMON.$"
-gUnknown_8190450:: @ 8190450
+ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons:: @ 8190450
.string "POKéMON CENTERS heal your tired,\n"
.string "hurt, or fainted POKéMON.\p"
.string "They make all POKéMON completely\n"
diff --git a/data/maps/ViridianForest/map.json b/data/maps/ViridianForest/map.json
index 90f689a9f..463bc53f5 100644
--- a/data/maps/ViridianForest/map.json
+++ b/data/maps/ViridianForest/map.json
@@ -23,7 +23,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianForest_EventScript_160529",
+ "script": "ViridianForest_EventScript_Youngster",
"flag": "0"
},
{
@@ -36,7 +36,7 @@
"movement_range_y": 1,
"trainer_type": 0,
"trainer_sight_or_berry_tree_id": 0,
- "script": "ViridianForest_EventScript_160532",
+ "script": "ViridianForest_EventScript_Boy",
"flag": "0"
},
{
@@ -49,7 +49,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 5,
- "script": "ViridianForest_EventScript_160571",
+ "script": "ViridianForest_EventScript_Rick",
"flag": "0"
},
{
@@ -62,7 +62,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 4,
- "script": "ViridianForest_EventScript_160588",
+ "script": "ViridianForest_EventScript_Doug",
"flag": "0"
},
{
@@ -75,7 +75,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 4,
- "script": "ViridianForest_EventScript_16059F",
+ "script": "ViridianForest_EventScript_Sammy",
"flag": "0"
},
{
@@ -127,7 +127,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 1,
- "script": "ViridianForest_EventScript_1605B6",
+ "script": "ViridianForest_EventScript_Anthony",
"flag": "0"
},
{
@@ -140,7 +140,7 @@
"movement_range_y": 1,
"trainer_type": 1,
"trainer_sight_or_berry_tree_id": 1,
- "script": "ViridianForest_EventScript_1605CD",
+ "script": "ViridianForest_EventScript_Charlie",
"flag": "0"
},
{
@@ -208,42 +208,42 @@
"x": 39,
"y": 59,
"elevation": 3,
- "script": "ViridianForest_EventScript_16053B"
+ "script": "ViridianForest_EventScript_TrainerTips1"
},
{
"type": "bg_event_type_0",
"x": 43,
"y": 26,
"elevation": 0,
- "script": "ViridianForest_EventScript_16054D"
+ "script": "ViridianForest_EventScript_TrainerTips3"
},
{
"type": "bg_event_type_0",
"x": 9,
"y": 29,
"elevation": 0,
- "script": "ViridianForest_EventScript_160556"
+ "script": "ViridianForest_EventScript_TrainerTips4"
},
{
"type": "bg_event_type_0",
"x": 6,
"y": 12,
"elevation": 0,
- "script": "ViridianForest_EventScript_160568"
+ "script": "ViridianForest_EventScript_ExitSign"
},
{
"type": "bg_event_type_0",
"x": 28,
"y": 44,
"elevation": 0,
- "script": "ViridianForest_EventScript_160544"
+ "script": "ViridianForest_EventScript_TrainerTips2"
},
{
"type": "bg_event_type_0",
"x": 31,
"y": 60,
"elevation": 0,
- "script": "ViridianForest_EventScript_16055F"
+ "script": "ViridianForest_EventScript_TrainerTips5"
},
{
"type": "hidden_item",
diff --git a/data/maps/ViridianForest/scripts.inc b/data/maps/ViridianForest/scripts.inc
index 6fb97d075..a54fa1377 100644
--- a/data/maps/ViridianForest/scripts.inc
+++ b/data/maps/ViridianForest/scripts.inc
@@ -6,59 +6,59 @@ ViridianForest_OnTransition:: @ 8160525
setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_FOREST
end
-ViridianForest_EventScript_160529:: @ 8160529
- msgbox gUnknown_8172255, MSGBOX_NPC
+ViridianForest_EventScript_Youngster:: @ 8160529
+ msgbox ViridianForest_Text_FriendsItchingToBattle, MSGBOX_NPC
end
-ViridianForest_EventScript_160532:: @ 8160532
- msgbox gUnknown_8172559, MSGBOX_NPC
+ViridianForest_EventScript_Boy:: @ 8160532
+ msgbox ViridianForest_Text_RanOutOfPokeBalls, MSGBOX_NPC
end
-ViridianForest_EventScript_16053B:: @ 816053B
- msgbox gUnknown_81725C7, MSGBOX_SIGN
+ViridianForest_EventScript_TrainerTips1:: @ 816053B
+ msgbox ViridianForest_Text_AvoidGrassyAreasWhenWeak, MSGBOX_SIGN
end
-ViridianForest_EventScript_160544:: @ 8160544
- msgbox gUnknown_8172629, MSGBOX_SIGN
+ViridianForest_EventScript_TrainerTips2:: @ 8160544
+ msgbox ViridianForest_Text_UseAntidoteForPoison, MSGBOX_SIGN
end
-ViridianForest_EventScript_16054D:: @ 816054D
- msgbox gUnknown_817265C, MSGBOX_SIGN
+ViridianForest_EventScript_TrainerTips3:: @ 816054D
+ msgbox ViridianForest_Text_ContactOakViaPCToRatePokedex, MSGBOX_SIGN
end
-ViridianForest_EventScript_160556:: @ 8160556
- msgbox gUnknown_81726A3, MSGBOX_SIGN
+ViridianForest_EventScript_TrainerTips4:: @ 8160556
+ msgbox ViridianForest_Text_CantCatchOwnedMons, MSGBOX_SIGN
end
-ViridianForest_EventScript_16055F:: @ 816055F
- msgbox gUnknown_817271D, MSGBOX_SIGN
+ViridianForest_EventScript_TrainerTips5:: @ 816055F
+ msgbox ViridianForest_Text_WeakenMonsBeforeCapture, MSGBOX_SIGN
end
-ViridianForest_EventScript_160568:: @ 8160568
- msgbox gUnknown_8172773, MSGBOX_SIGN
+ViridianForest_EventScript_ExitSign:: @ 8160568
+ msgbox ViridianForest_Text_LeavingViridianForest, MSGBOX_SIGN
end
-ViridianForest_EventScript_160571:: @ 8160571
- trainerbattle_single TRAINER_BUG_CATCHER_RICK, Text_1722C7, Text_1722F9
- msgbox gUnknown_8172315, MSGBOX_AUTOCLOSE
+ViridianForest_EventScript_Rick:: @ 8160571
+ trainerbattle_single TRAINER_BUG_CATCHER_RICK, ViridianForest_Text_RickIntro, ViridianForest_Text_RickDefeat
+ msgbox ViridianForest_Text_RickPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianForest_EventScript_160588:: @ 8160588
- trainerbattle_single TRAINER_BUG_CATCHER_DOUG, Text_17234A, Text_17237D
- msgbox gUnknown_8172398, MSGBOX_AUTOCLOSE
+ViridianForest_EventScript_Doug:: @ 8160588
+ trainerbattle_single TRAINER_BUG_CATCHER_DOUG, ViridianForest_Text_DougIntro, ViridianForest_Text_DougDefeat
+ msgbox ViridianForest_Text_DougPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianForest_EventScript_16059F:: @ 816059F
- trainerbattle_single TRAINER_BUG_CATCHER_SAMMY, Text_1723D4, Text_172402
- msgbox gUnknown_817241F, MSGBOX_AUTOCLOSE
+ViridianForest_EventScript_Sammy:: @ 816059F
+ trainerbattle_single TRAINER_BUG_CATCHER_SAMMY, ViridianForest_Text_SammyIntro, ViridianForest_Text_SammyDefeat
+ msgbox ViridianForest_Text_SammyPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianForest_EventScript_1605B6:: @ 81605B6
- trainerbattle_single TRAINER_BUG_CATCHER_ANTHONY, Text_172482, Text_1724BF
- msgbox gUnknown_81724DC, MSGBOX_AUTOCLOSE
+ViridianForest_EventScript_Anthony:: @ 81605B6
+ trainerbattle_single TRAINER_BUG_CATCHER_ANTHONY, ViridianForest_Text_AnthonyIntro, ViridianForest_Text_AnthonyDefeat
+ msgbox ViridianForest_Text_AnthonyPostBattle, MSGBOX_AUTOCLOSE
end
-ViridianForest_EventScript_1605CD:: @ 81605CD
- trainerbattle_single TRAINER_BUG_CATCHER_CHARLIE, Text_1724F9, Text_17251B
- msgbox gUnknown_8172527, MSGBOX_AUTOCLOSE
+ViridianForest_EventScript_Charlie:: @ 81605CD
+ trainerbattle_single TRAINER_BUG_CATCHER_CHARLIE, ViridianForest_Text_CharlieIntro, ViridianForest_Text_CharlieDefeat
+ msgbox ViridianForest_Text_CharliePostBattle, MSGBOX_AUTOCLOSE
end
diff --git a/data/maps/ViridianForest/text.inc b/data/maps/ViridianForest/text.inc
index e3dc737a2..226d9f905 100644
--- a/data/maps/ViridianForest/text.inc
+++ b/data/maps/ViridianForest/text.inc
@@ -1,105 +1,105 @@
-gUnknown_8172255:: @ 8172255
+ViridianForest_Text_FriendsItchingToBattle:: @ 8172255
.string "I came here with some friends to\n"
.string "catch us some BUG POKéMON!\p"
.string "They're all itching to get into\n"
.string "some POKéMON battles!$"
-Text_1722C7:: @ 81722C7
+ViridianForest_Text_RickIntro:: @ 81722C7
.string "Hey! You have POKéMON!\n"
.string "Come on!\l"
.string "Let's battle 'em!$"
-Text_1722F9:: @ 81722F9
+ViridianForest_Text_RickDefeat:: @ 81722F9
.string "No!\nCATERPIE can't hack it!$"
-gUnknown_8172315:: @ 8172315
+ViridianForest_Text_RickPostBattle:: @ 8172315
.string "Ssh! You'll scare the bugs away.\n"
.string "Another time, okay?$"
-Text_17234A:: @ 817234A
+ViridianForest_Text_DougIntro:: @ 817234A
.string "Yo!\n"
.string "You can't jam out if you're a\l"
.string "POKéMON TRAINER!$"
-Text_17237D:: @ 817237D
+ViridianForest_Text_DougDefeat:: @ 817237D
.string "Huh?\n"
.string "I ran out of POKéMON!$"
-gUnknown_8172398:: @ 8172398
+ViridianForest_Text_DougPostBattle:: @ 8172398
.string "That totally stinks! I'm going to\n"
.string "catch some stronger ones!$"
-Text_1723D4:: @ 81723D4
+ViridianForest_Text_SammyIntro:: @ 81723D4
.string "Hey, wait up!\n"
.string "What's the hurry? Why the rush?$"
-Text_172402:: @ 8172402
+ViridianForest_Text_SammyDefeat:: @ 8172402
.string "I give!\n"
.string "You're good at this!$"
-gUnknown_817241F:: @ 817241F
+ViridianForest_Text_SammyPostBattle:: @ 817241F
.string "Sometimes, you can find stuff on\n"
.string "the ground.\p"
.string "I'm looking for the stuff I\n"
.string "dropped. Can you help me?$"
-Text_172482:: @ 8172482
+ViridianForest_Text_AnthonyIntro:: @ 8172482
.string "I might be little, but I won't like\n"
.string "it if you go easy on me!$"
-Text_1724BF:: @ 81724BF
+ViridianForest_Text_AnthonyDefeat:: @ 81724BF
.string "Oh, boo.\n"
.string "Nothing went right.$"
-gUnknown_81724DC:: @ 81724DC
+ViridianForest_Text_AnthonyPostBattle:: @ 81724DC
.string "I lost some of my allowance…$"
-Text_1724F9:: @ 81724F9
+ViridianForest_Text_CharlieIntro:: @ 81724F9
.string "Did you know that POKéMON evolve?$"
-Text_17251B:: @ 817251B
+ViridianForest_Text_CharlieDefeat:: @ 817251B
.string "Oh!\n"
.string "I lost!$"
-gUnknown_8172527:: @ 8172527
+ViridianForest_Text_CharliePostBattle:: @ 8172527
.string "BUG POKéMON evolve quickly.\n"
.string "They're a lot of fun!$"
-gUnknown_8172559:: @ 8172559
+ViridianForest_Text_RanOutOfPokeBalls:: @ 8172559
.string "I was throwing POKé BALLS to\n"
.string "catch POKéMON, and I ran out.\p"
.string "That's why you can never have too\n"
.string "many POKé BALLS.$"
-gUnknown_81725C7:: @ 81725C7
+ViridianForest_Text_AvoidGrassyAreasWhenWeak:: @ 81725C7
.string "TRAINER TIPS\p"
.string "If your POKéMON are weak and you\n"
.string "want to avoid battles, stay away\l"
.string "from grassy areas!$"
-gUnknown_8172629:: @ 8172629
+ViridianForest_Text_UseAntidoteForPoison:: @ 8172629
.string "For poison, use ANTIDOTE!\n"
.string "Get it at POKéMON MARTS!$"
-gUnknown_817265C:: @ 817265C
+ViridianForest_Text_ContactOakViaPCToRatePokedex:: @ 817265C
.string "TRAINER TIPS\p"
.string "Contact PROF. OAK via a PC to\n"
.string "get your POKéDEX evaluated!$"
-gUnknown_81726A3:: @ 81726A3
+ViridianForest_Text_CantCatchOwnedMons:: @ 81726A3
.string "TRAINER TIPS\p"
.string "You can't catch a POKéMON that\n"
.string "belongs to someone else.\p"
.string "Throw POKé BALLS only at wild\n"
.string "POKéMON to catch them!$"
-gUnknown_817271D:: @ 817271D
+ViridianForest_Text_WeakenMonsBeforeCapture:: @ 817271D
.string "TRAINER TIPS\p"
.string "Weaken POKéMON before attempting\n"
.string "capture!\p"
.string "When healthy, they may escape!$"
-gUnknown_8172773:: @ 8172773
+ViridianForest_Text_LeavingViridianForest:: @ 8172773
.string "LEAVING VIRIDIAN FOREST\n"
.string "PEWTER CITY AHEAD$"
diff --git a/data/maps/map_groups.json b/data/maps/map_groups.json
index 05f1cd544..3793fd9fc 100644
--- a/data/maps/map_groups.json
+++ b/data/maps/map_groups.json
@@ -178,17 +178,17 @@
],
"gMapGroup2": [
"NavelRock_Exterior",
- "SevenIsland_TrainerTower_1F",
- "SevenIsland_TrainerTower_2F",
- "SevenIsland_TrainerTower_3F",
- "SevenIsland_TrainerTower_4F",
- "SevenIsland_TrainerTower_5F",
- "SevenIsland_TrainerTower_6F",
- "SevenIsland_TrainerTower_7F",
- "SevenIsland_TrainerTower_8F",
- "SevenIsland_TrainerTower_Roof",
- "SevenIsland_TrainerTower_Lobby",
- "SevenIsland_TrainerTower_Elevator",
+ "TrainerTower_1F",
+ "TrainerTower_2F",
+ "TrainerTower_3F",
+ "TrainerTower_4F",
+ "TrainerTower_5F",
+ "TrainerTower_6F",
+ "TrainerTower_7F",
+ "TrainerTower_8F",
+ "TrainerTower_Roof",
+ "TrainerTower_Lobby",
+ "TrainerTower_Elevator",
"FiveIsland_LostCave_Entrance",
"FiveIsland_LostCave_Room1",
"FiveIsland_LostCave_Room2",
diff --git a/data/scripts/aide.inc b/data/scripts/aide.inc
new file mode 100644
index 000000000..3201de769
--- /dev/null
+++ b/data/scripts/aide.inc
@@ -0,0 +1,14 @@
+Aide_EventScript_HaventCaughtEnough:: @ 81A7ABD
+ msgbox Aide_Text_HaventCaughtEnoughMonsForItem
+ release
+ end
+
+Aide_EventScript_NoRoomForItem:: @ 81A7AC7
+ msgbox Aide_Text_DontHaveAnyRoomForItem
+ release
+ end
+
+Aide_EventScript_DeclineCheckMons:: @ 81A7AD1
+ msgbox Aide_Text_GetEnoughMonsComeBackForItem
+ release
+ end
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index c75ebdcfd..c174eaf41 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -1149,7 +1149,7 @@ CableClub_EventScript_81BBFD8:: @ 81BBFD8
goto_if_eq CableClub_EventScript_AdapterNotConnected
special HelpSystem_Disable
fadescreen FADE_TO_BLACK
- special sub_814F1D4
+ special Special_WirelessCommunicationScreen
waitstate
msgbox CableClub_Text_ParticipantsStepUpToCounter
special HelpSystem_Enable
diff --git a/data/scripts/fame_checker.inc b/data/scripts/fame_checker.inc
index 1564717c0..5c85d12c8 100644
--- a/data/scripts/fame_checker.inc
+++ b/data/scripts/fame_checker.inc
@@ -1,10 +1,10 @@
-ViridianCity_House2_EventScript_1ACD65:: @ 81ACD65
+ViridianCity_House2_EventScript_PokemonJournal:: @ 81ACD65
lock
faceplayer
famechecker FAMECHECKER_OAK, 3
famechecker FAMECHECKER_DAISY, 3
textcolor 3
- msgbox gUnknown_81B1AB9
+ msgbox PokemonJournal_Text_SpecialFeatureProfOak
release
end
@@ -14,7 +14,7 @@ EventScript_1ACD8D:: @ 81ACD8D
famechecker FAMECHECKER_DAISY, 1
famechecker FAMECHECKER_OAK, 4
textcolor 3
- msgbox gUnknown_81B1AB9
+ msgbox PokemonJournal_Text_SpecialFeatureProfOak
release
end
@@ -23,7 +23,7 @@ EventScript_1ACDB5:: @ 81ACDB5
faceplayer
famechecker FAMECHECKER_DAISY, 4
textcolor 3
- msgbox gUnknown_81B1AB9
+ msgbox PokemonJournal_Text_SpecialFeatureProfOak
release
end
diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc
index d47a2d06c..bfc9fbbbd 100644
--- a/data/scripts/mystery_event_club.inc
+++ b/data/scripts/mystery_event_club.inc
@@ -101,7 +101,7 @@ EventScript_GaveSpecialProfile: @ 81BEF3F
EventScript_GiveProfile: @ 81BEF5A
setvar VAR_0x8004, 0
- call EventScript_1A6AC0
+ call Common_ShowEasyChatScreen
lock
faceplayer
compare VAR_0x8004, 0
diff --git a/data/scripts/trainer_tower.inc b/data/scripts/trainer_tower.inc
index 2a5a84f72..45ffc285d 100644
--- a/data/scripts/trainer_tower.inc
+++ b/data/scripts/trainer_tower.inc
@@ -1,320 +1,297 @@
-SevenIsland_TrainerTower_1F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_2F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_3F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_4F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_5F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_6F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_7F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_8F_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_Elevator_MapScript1_1C4F54:: @ 81C4F54
-SevenIsland_TrainerTower_Roof_MapScript1_1C4F54:: @ 81C4F54
+@ Local IDs apply to all floors (not lobby or roof)
+.equ LOCALID_TRAINER_DOUBLES1, 2
+.equ LOCALID_TRAINER_SINGLES, 3
+.equ LOCALID_TRAINER_KNOCKOUT, 4
+.equ LOCALID_TRAINER_DOUBLES2, 5
+
+.equ HIDE_TRAINER_DOUBLES1, FLAG_TEMP_2
+.equ HIDE_TRAINER_SINGLES, FLAG_TEMP_3
+.equ HIDE_TRAINER_KNOCKOUT, FLAG_TEMP_4
+.equ HIDE_TRAINER_DOUBLES2, FLAG_TEMP_5
+.equ HIDE_OWNER, FLAG_TEMP_6
+
+.equ DISABLE_SINGLES_TRIGGER, VAR_TEMP_E
+.equ DISABLE_DOUBLES_TRIGGER, VAR_TEMP_F
+
+
+@@ Map scripts
+
+TrainerTower_OnResume:: @ 81C4F54
setvar VAR_TEMP_2, 0
- setvar VAR_0x8004, 10
- special sub_815D9E8
+ ttower_resumetimer
end
-SevenIsland_TrainerTower_1F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_2F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_3F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_4F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_5F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_6F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_7F_MapScript2_1C4F62:: @ 81C4F62
-SevenIsland_TrainerTower_8F_MapScript2_1C4F62:: @ 81C4F62
- setvar VAR_0x8004, 0
- special sub_815D9E8
+TrainerTower_OnTransition:: @ 81C4F62
+ ttower_initfloor
switch VAR_RESULT
- case 0, EventScript_1C4FA7
- case 1, EventScript_1C4FC5
- case 2, EventScript_1C5019
- setflag FLAG_TEMP_2
- setflag FLAG_TEMP_3
- setflag FLAG_TEMP_4
- setflag FLAG_TEMP_5
- setvar VAR_TEMP_E, 1
- setvar VAR_TEMP_F, 1
+ case CHALLENGE_TYPE_SINGLE, TrainerTower_EventScript_SetObjectsSingles
+ case CHALLENGE_TYPE_DOUBLE, TrainerTower_EventScript_SetObjectsDoubles
+ case CHALLENGE_TYPE_KNOCKOUT, TrainerTower_EventScript_SetObjectsKnockout
+ setflag HIDE_TRAINER_DOUBLES1
+ setflag HIDE_TRAINER_SINGLES
+ setflag HIDE_TRAINER_KNOCKOUT
+ setflag HIDE_TRAINER_DOUBLES2
+ setvar DISABLE_SINGLES_TRIGGER, TRUE
+ setvar DISABLE_DOUBLES_TRIGGER, TRUE
end
-EventScript_1C4FA7:: @ 81C4FA7
- setflag FLAG_TEMP_2
- setflag FLAG_TEMP_4
- setflag FLAG_TEMP_5
- setvar VAR_TEMP_F, 1
- setobjectxyperm 3, 15, 13
- setobjectmovementtype 3, 9
- goto EventScript_1C5042
-
-EventScript_1C4FC5:: @ 81C4FC5
- setflag FLAG_TEMP_3
- setflag FLAG_TEMP_4
- setvar VAR_TEMP_E, 1
- setvar VAR_0x8004, 5
- special sub_815D9E8
- compare VAR_RESULT, 1
- goto_if_eq EventScript_1C4FFE
- setobjectxyperm 2, 10, 12
- setobjectmovementtype 2, 9
- setobjectxyperm 5, 10, 13
- setobjectmovementtype 5, 9
- goto EventScript_1C5042
-
-EventScript_1C4FFE:: @ 81C4FFE
- setobjectxyperm 2, 10, 12
- setobjectmovementtype 2, 8
- setobjectxyperm 5, 11, 12
- setobjectmovementtype 5, 8
- goto EventScript_1C5042
-
-EventScript_1C5019:: @ 81C5019
- setflag FLAG_TEMP_5
- setvar VAR_TEMP_F, 1
- setobjectxyperm 2, 10, 10
- setobjectmovementtype 2, 8
- setobjectxyperm 3, 14, 13
- setobjectmovementtype 3, 9
- setobjectxyperm 4, 10, 16
- setobjectmovementtype 4, 7
-EventScript_1C5042:
- setflag FLAG_TEMP_6
+TrainerTower_EventScript_SetObjectsSingles:: @ 81C4FA7
+ setflag HIDE_TRAINER_DOUBLES1
+ setflag HIDE_TRAINER_KNOCKOUT
+ setflag HIDE_TRAINER_DOUBLES2
+ setvar DISABLE_DOUBLES_TRIGGER, TRUE
+ setobjectxyperm LOCALID_TRAINER_SINGLES, 15, 13
+ setobjectmovementtype LOCALID_TRAINER_SINGLES, MOVEMENT_TYPE_FACE_LEFT
+ goto TrainerTower_EventScript_HideOwner
+
+TrainerTower_EventScript_SetObjectsDoubles:: @ 81C4FC5
+ setflag HIDE_TRAINER_SINGLES
+ setflag HIDE_TRAINER_KNOCKOUT
+ setvar DISABLE_SINGLES_TRIGGER, TRUE
+ ttower_isfloorcleared
+ compare VAR_RESULT, TRUE
+ goto_if_eq TrainerTower_EventScript_SetObjectsDoublesAlreadyBeaten
+ setobjectxyperm LOCALID_TRAINER_DOUBLES1, 10, 12
+ setobjectmovementtype LOCALID_TRAINER_DOUBLES1, MOVEMENT_TYPE_FACE_LEFT
+ setobjectxyperm LOCALID_TRAINER_DOUBLES2, 10, 13
+ setobjectmovementtype LOCALID_TRAINER_DOUBLES2, MOVEMENT_TYPE_FACE_LEFT
+ goto TrainerTower_EventScript_HideOwner
+
+TrainerTower_EventScript_SetObjectsDoublesAlreadyBeaten:: @ 81C4FFE
+ setobjectxyperm LOCALID_TRAINER_DOUBLES1, 10, 12
+ setobjectmovementtype LOCALID_TRAINER_DOUBLES1, MOVEMENT_TYPE_FACE_DOWN
+ setobjectxyperm LOCALID_TRAINER_DOUBLES2, 11, 12
+ setobjectmovementtype LOCALID_TRAINER_DOUBLES2, MOVEMENT_TYPE_FACE_DOWN
+ goto TrainerTower_EventScript_HideOwner
+
+@ Knockout challenge re-uses trainer objects
+TrainerTower_EventScript_SetObjectsKnockout:: @ 81C5019
+ setflag HIDE_TRAINER_DOUBLES2
+ setvar DISABLE_DOUBLES_TRIGGER, TRUE
+ setobjectxyperm LOCALID_TRAINER_DOUBLES1, 10, 10
+ setobjectmovementtype LOCALID_TRAINER_DOUBLES1, MOVEMENT_TYPE_FACE_DOWN
+ setobjectxyperm LOCALID_TRAINER_SINGLES, 14, 13
+ setobjectmovementtype LOCALID_TRAINER_SINGLES, MOVEMENT_TYPE_FACE_LEFT
+ setobjectxyperm LOCALID_TRAINER_KNOCKOUT, 10, 16
+ setobjectmovementtype LOCALID_TRAINER_KNOCKOUT, MOVEMENT_TYPE_FACE_UP
+TrainerTower_EventScript_HideOwner:
+ setflag HIDE_OWNER
end
-SevenIsland_TrainerTower_1F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_2F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_3F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_4F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_5F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_6F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_7F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_8F_MapScript3_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_Elevator_MapScript2_1C5046:: @ 81C5046
-SevenIsland_TrainerTower_Roof_MapScript2_1C5046:: @ 81C5046
- map_script_2 VAR_TEMP_2, 0, EventScript_1C5050
+TrainerTower_OnFrame:: @ 81C5046
+ map_script_2 VAR_TEMP_2, 0, TrainerTower_EventScript_EnterFloor
.2byte 0
-EventScript_1C5050:: @ 81C5050
+TrainerTower_EventScript_EnterFloor:: @ 81C5050
setvar VAR_TEMP_2, 1
- setvar VAR_0x8004, 5
- special sub_815D9E8
- compare VAR_RESULT, 0
- goto_if_eq EventScript_1C5072
- setvar VAR_TEMP_E, 1
- setvar VAR_TEMP_F, 1
-EventScript_1C5072:
- setvar VAR_0x8004, 18
- special sub_815D9E8
- compare VAR_RESULT, 1
- goto_if_eq EventScript_1C5086
+ ttower_isfloorcleared
+ compare VAR_RESULT, FALSE
+ goto_if_eq TrainerTower_EventScript_EndEnterFloor
+ setvar DISABLE_SINGLES_TRIGGER, TRUE
+ setvar DISABLE_DOUBLES_TRIGGER, TRUE
+TrainerTower_EventScript_EndEnterFloor:
+ ttower_shouldexit
+ compare VAR_RESULT, TRUE
+ goto_if_eq TrainerTower_EventScript_WarpToLobby
end
-EventScript_1C5086:: @ 81C5086
- warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7
+@ Never reached
+TrainerTower_EventScript_WarpToLobby:: @ 81C5086
+ warp MAP_TRAINER_TOWER_LOBBY, 255, 9, 7
waitstate
-EventScript_1C508F::
- setvar VAR_0x8004, 3
- setvar VAR_0x8005, 0
- special sub_815D9E8
+
+
+@@ Battle scripts
+
+TrainerTower_EventScript_TriggerBattle::
+ ttower_getchallengetype
switch VAR_RESULT
- case 0, EventScript_1C50C2
- case 1, EventScript_1C510D
- case 2, EventScript_1C515C
-EventScript_1C50C2:
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 3, Movement_ExclamationMark
+ case CHALLENGE_TYPE_SINGLE, TrainerTower_EventScript_DoSingleBattle
+ case CHALLENGE_TYPE_DOUBLE, TrainerTower_EventScript_DoDoubleBattle
+ case CHALLENGE_TYPE_KNOCKOUT, TrainerTower_EventScript_DoKnockoutBattle
+
+TrainerTower_EventScript_DoSingleBattle:
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_SINGLES, Movement_ExclamationMark
waitmovement 0
- applymovement 3, Movement_Delay48
+ applymovement LOCALID_TRAINER_SINGLES, Movement_Delay48
waitmovement 0
- setvar VAR_TEMP_E, 1
- applymovement 3, Movement_1C5541
+ setvar DISABLE_SINGLES_TRIGGER, TRUE
+ applymovement LOCALID_TRAINER_SINGLES, TrainerTower_Movement_SingleTrainerApproach
waitmovement 0
- setvar VAR_0x8004, 1
- setvar VAR_0x8005, 2
- setvar VAR_0x8006, 0
- special sub_815D9E8
+ ttower_getspeech TRAINER_TOWER_TEXT_INTRO, 0
msgbox gStringVar4
closemessage
- goto EventScript_1C5219
+ goto TrainerTower_EventScript_DoBattle
-EventScript_1C510D:: @ 81C510D
- setvar VAR_0x8004, 1
- setvar VAR_0x8005, 2
- copyvar VAR_0x8006, VAR_TEMP_3
- special sub_815D9E8
+TrainerTower_EventScript_DoDoubleBattle:: @ 81C510D
+ ttower_getspeech TRAINER_TOWER_TEXT_INTRO, VAR_TEMP_3
msgbox gStringVar4
- setvar VAR_0x8004, 1
- setvar VAR_0x8005, 2
+ setvar VAR_0x8004, TRAINER_TOWER_FUNC_GET_SPEECH
+ setvar VAR_0x8005, TRAINER_TOWER_TEXT_INTRO
addvar VAR_TEMP_3, 1
compare VAR_TEMP_3, 1
- goto_if_eq EventScript_1C5146
+ goto_if_eq TrainerTower_EventScript_DoSecondTrainerIntro
setvar VAR_TEMP_3, 0
-EventScript_1C5146:
+TrainerTower_EventScript_DoSecondTrainerIntro:
copyvar VAR_0x8006, VAR_TEMP_3
- special sub_815D9E8
+ special CallTrainerTowerFunc
msgbox gStringVar4
closemessage
- goto EventScript_1C5219
+ goto TrainerTower_EventScript_DoBattle
-EventScript_1C515C:: @ 81C515C
+TrainerTower_EventScript_DoKnockoutBattle:: @ 81C515C
switch VAR_TEMP_1
- case 0, EventScript_1C5182
- case 1, EventScript_1C51AD
- case 2, EventScript_1C51D8
-EventScript_1C5182:
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 4, Movement_ExclamationMark
+ case 0, TrainerTower_EventScript_DoKnockoutBattle1
+ case 1, TrainerTower_EventScript_DoKnockoutBattle2
+ case 2, TrainerTower_EventScript_DoKnockoutBattle3
+
+TrainerTower_EventScript_DoKnockoutBattle1:
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_KNOCKOUT, Movement_ExclamationMark
waitmovement 0
- applymovement 4, Movement_Delay48
+ applymovement LOCALID_TRAINER_KNOCKOUT, Movement_Delay48
waitmovement 0
- applymovement 4, Movement_1C5546
+ applymovement LOCALID_TRAINER_KNOCKOUT, TrainerTower_Movement_BottomKnockoutTrainerApproach
waitmovement 0
- goto EventScript_1C51FE
+ goto TrainerTower_EventScript_DoKnockoutBattleIntro
-EventScript_1C51AD:: @ 81C51AD
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 2, Movement_ExclamationMark
+TrainerTower_EventScript_DoKnockoutBattle2:: @ 81C51AD
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_DOUBLES1, Movement_ExclamationMark
waitmovement 0
- applymovement 2, Movement_Delay48
+ applymovement LOCALID_TRAINER_DOUBLES1, Movement_Delay48
waitmovement 0
- applymovement 2, Movement_1C5549
+ applymovement LOCALID_TRAINER_DOUBLES1, TrainerTower_Movement_TopKnockoutTrainerApproach
waitmovement 0
- goto EventScript_1C51FE
+ goto TrainerTower_EventScript_DoKnockoutBattleIntro
-EventScript_1C51D8:: @ 81C51D8
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 3, Movement_ExclamationMark
+TrainerTower_EventScript_DoKnockoutBattle3:: @ 81C51D8
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_SINGLES, Movement_ExclamationMark
waitmovement 0
- applymovement 3, Movement_Delay48
+ applymovement LOCALID_TRAINER_SINGLES, Movement_Delay48
waitmovement 0
- applymovement 3, Movement_1C5542
+ applymovement LOCALID_TRAINER_SINGLES, TrainerTower_Movement_RightKnockoutTrainerApproach
waitmovement 0
-EventScript_1C51FE:
- setvar VAR_0x8004, 1
- setvar VAR_0x8005, 2
- copyvar VAR_0x8006, VAR_TEMP_1
- special sub_815D9E8
+TrainerTower_EventScript_DoKnockoutBattleIntro:
+ ttower_getspeech TRAINER_TOWER_TEXT_INTRO, VAR_TEMP_1
msgbox gStringVar4
closemessage
-EventScript_1C5219:
- setvar VAR_0x8004, 2
- setvar VAR_0x8005, 0
- special sub_815D9E8
+TrainerTower_EventScript_DoBattle:
+ ttower_dobattle
waitstate
switch VAR_RESULT
- case 1, EventScript_1C524D
- case 2, EventScript_1C52E0
- case 3, EventScript_1C52E0
-EventScript_1C524D:
- setvar VAR_0x8004, 3
- setvar VAR_0x8005, 0
- special sub_815D9E8
+ case B_OUTCOME_WON, TrainerTower_EventScript_WonBattle
+ case B_OUTCOME_LOST, TrainerTower_EventScript_WarpToLobbyLost
+ case B_OUTCOME_DREW, TrainerTower_EventScript_WarpToLobbyLost
+TrainerTower_EventScript_WonBattle:
+ ttower_getchallengetype
switch VAR_RESULT
- case 0, EventScript_1C52D7
- case 1, EventScript_1C52BA
- case 2, EventScript_1C5280
-EventScript_1C5280:
+ case CHALLENGE_TYPE_SINGLE, TrainerTower_EventScript_SetFloorCleared
+ case CHALLENGE_TYPE_DOUBLE, TrainerTower_EventScript_MoveDoublesTrainers
+ case CHALLENGE_TYPE_KNOCKOUT, TrainerTower_EventScript_CheckNextKnockoutBattle
+
+TrainerTower_EventScript_CheckNextKnockoutBattle:
switch VAR_TEMP_1
- case 0, EventScript_1C52A6
- case 1, EventScript_1C52B0
- case 2, EventScript_1C52D0
-EventScript_1C52A6:
+ case 0, TrainerTower_EventScript_DoSecondKnockoutBattle
+ case 1, TrainerTower_EventScript_DoThirdKnockoutBattle
+ case 2, TrainerTower_EventScript_MoveLastKnockoutTrainer
+
+TrainerTower_EventScript_DoSecondKnockoutBattle:
addvar VAR_TEMP_1, 1
- goto EventScript_1C515C
+ goto TrainerTower_EventScript_DoKnockoutBattle
-EventScript_1C52B0:: @ 81C52B0
+TrainerTower_EventScript_DoThirdKnockoutBattle:: @ 81C52B0
addvar VAR_TEMP_1, 1
- goto EventScript_1C515C
+ goto TrainerTower_EventScript_DoKnockoutBattle
-EventScript_1C52BA:: @ 81C52BA
- applymovement 5, Movement_1C554C
+TrainerTower_EventScript_MoveDoublesTrainers:: @ 81C52BA
+ applymovement LOCALID_TRAINER_DOUBLES2, TrainerTower_Movement_DoublesTrainer2OutOfWay
waitmovement 0
- applymovement 2, Movement_1C5550
- goto EventScript_1C52D7
-
-EventScript_1C52D0:: @ 81C52D0
- applymovement 3, Movement_1C554D
-EventScript_1C52D7:
- setvar VAR_0x8004, 4
- special sub_815D9E8
+ applymovement LOCALID_TRAINER_DOUBLES1, TrainerTower_Movement_DoublesTrainer1FaceDown
+ goto TrainerTower_EventScript_SetFloorCleared
+
+TrainerTower_EventScript_MoveLastKnockoutTrainer:: @ 81C52D0
+ applymovement LOCALID_TRAINER_SINGLES, TrainerTower_Movement_LastKnockoutTrainerOutOfWay
+TrainerTower_EventScript_SetFloorCleared:
+ ttower_clearedfloor
end
-EventScript_1C52E0:: @ 81C52E0
+TrainerTower_EventScript_WarpToLobbyLost:: @ 81C52E0
special HealPlayerParty
- setvar VAR_0x8004, 11
- special sub_815D9E8
- warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7
+ ttower_setlost
+ warp MAP_TRAINER_TOWER_LOBBY, 255, 9, 7
waitstate
-EventScript_1C52F4:: @ 81C52F4
- setvar VAR_0x8004, 3
- setvar VAR_0x8005, 0
- special sub_815D9E8
+
+@@ Speaking to trainers after battle
+
+TrainerTower_EventScript_SpeakToDoublesTrainer1:: @ 81C52F4
+ ttower_getchallengetype
switch VAR_RESULT
- case 0, EventScript_1C5327
- case 1, EventScript_1C5327
- case 2, EventScript_1C5331
-EventScript_1C5327:
+ case CHALLENGE_TYPE_SINGLE, TrainerTower_EventScript_DoublesTrainer1PostBattle
+ case CHALLENGE_TYPE_DOUBLE, TrainerTower_EventScript_DoublesTrainer1PostBattle
+ case CHALLENGE_TYPE_KNOCKOUT, TrainerTower_EventScript_KnockoutTrainer2PostBattle
+TrainerTower_EventScript_DoublesTrainer1PostBattle:
setvar VAR_0x8006, 0
- goto EventScript_1C5391
+ goto TrainerTower_EventScript_DoPostBattleText
-EventScript_1C5331:: @ 81C5331
+TrainerTower_EventScript_KnockoutTrainer2PostBattle:: @ 81C5331
setvar VAR_0x8006, 1
- goto EventScript_1C5391
+ goto TrainerTower_EventScript_DoPostBattleText
-EventScript_1C533B:: @ 81C533B
- setvar VAR_0x8004, 3
- setvar VAR_0x8005, 0
- special sub_815D9E8
+TrainerTower_EventScript_SpeakToSinglesTrainer:: @ 81C533B
+ ttower_getchallengetype
switch VAR_RESULT
- case 0, EventScript_1C536E
- case 1, EventScript_1C536E
- case 2, EventScript_1C5378
-EventScript_1C536E:
+ case CHALLENGE_TYPE_SINGLE, TrainerTower_EventScript_SinglesTrainerPostBattle
+ case CHALLENGE_TYPE_DOUBLE, TrainerTower_EventScript_SinglesTrainerPostBattle
+ case CHALLENGE_TYPE_KNOCKOUT, TrainerTower_EventScript_KnockoutTrainer3PostBattle
+TrainerTower_EventScript_SinglesTrainerPostBattle:
setvar VAR_0x8006, 0
- goto EventScript_1C5391
+ goto TrainerTower_EventScript_DoPostBattleText
-EventScript_1C5378:: @ 81C5378
+TrainerTower_EventScript_KnockoutTrainer3PostBattle:: @ 81C5378
setvar VAR_0x8006, 2
- goto EventScript_1C5391
+ goto TrainerTower_EventScript_DoPostBattleText
-EventScript_1C5382:: @ 81C5382
+TrainerTower_EventScript_SpeakToKnockoutTrainer:: @ 81C5382
setvar VAR_0x8006, 0
- goto EventScript_1C5391
+ goto TrainerTower_EventScript_DoPostBattleText
-EventScript_1C538C:: @ 81C538C
+TrainerTower_EventScript_SpeakToDoublesTrainer2:: @ 81C538C
setvar VAR_0x8006, 1
-EventScript_1C5391:
- setvar VAR_0x8004, 1
- setvar VAR_0x8005, 5
- special sub_815D9E8
+TrainerTower_EventScript_DoPostBattleText:
+ ttower_getspeech TRAINER_TOWER_TEXT_AFTER
lock
faceplayer
msgbox gStringVar4
release
return
-EventScript_1C53AA:: @ 81C53AA
+
+@@ Speaking to owner
+
+TrainerTower_EventScript_SpeakToOwner:: @ 81C53AA
lock
faceplayer
- setvar VAR_0x8004, 7
- special sub_815D9E8
+ ttower_getownerstate
switch VAR_RESULT
- case 0, EventScript_1C53DA
- case 1, EventScript_1C53E2
- case 2, EventScript_1C5492
-EventScript_1C53DA:
- msgbox Text_17CA5A
-EventScript_1C53E2:
- setvar VAR_0x8004, 8
- special sub_815D9E8
+ case 0, TrainerTower_Roof_EventScript_Arrived
+ case 1, TrainerTower_Roof_EventScript_GivePrize
+ case 2, TrainerTower_Roof_EventScript_OwnerEnd
+
+TrainerTower_Roof_EventScript_Arrived:
+ msgbox TrainerTower_Roof_Text_ImOwnerBattledPerfectly
+TrainerTower_Roof_EventScript_GivePrize:
+ ttower_giveprize
switch VAR_RESULT
- case 0, EventScript_1C5410
- case 1, EventScript_1C543A
- case 2, EventScript_1C544F
-EventScript_1C5410:
- msgbox Text_17CB09
+ case 0, TrainerTower_Roof_EventScript_ReceivePrize
+ case 1, TrainerTower_Roof_EventScript_NoRoomForPrize
+ case 2, TrainerTower_Roof_EventScript_CheckFinalTime
+
+TrainerTower_Roof_EventScript_ReceivePrize:
+ msgbox TrainerTower_Roof_Text_ThisIsForYou
textcolor 3
playfanfare MUS_FANFA1
message Text_ObtainedTheX
@@ -323,128 +300,105 @@ EventScript_1C5410:
getstdstring 2, STDSTRING_ITEMS_POCKET
msgbox Text_PutItemAway
call EventScript_1A6675
- goto EventScript_1C544F
+ goto TrainerTower_Roof_EventScript_CheckFinalTime
-EventScript_1C543A:: @ 81C543A
- msgbox Text_17CB09
+TrainerTower_Roof_EventScript_NoRoomForPrize:: @ 81C543A
+ msgbox TrainerTower_Roof_Text_ThisIsForYou
msgbox Text_BagIsFull
- goto EventScript_1C544F
+ goto TrainerTower_Roof_EventScript_CheckFinalTime
-EventScript_1C544F:: @ 81C544F
- setvar VAR_0x8004, 9
- special sub_815D9E8
+TrainerTower_Roof_EventScript_CheckFinalTime:: @ 81C544F
+ ttower_checkfinaltime
switch VAR_RESULT
- case 0, EventScript_1C547D
- case 1, EventScript_1C548A
- case 2, EventScript_1C5492
-EventScript_1C547D:
- msgbox Text_17CB1A
- goto EventScript_1C5492
-
-EventScript_1C548A:: @ 81C548A
- msgbox Text_17CBC0
-EventScript_1C5492:
- msgbox Text_17CBF5
+ case 0, TrainerTower_Roof_EventScript_NewRecord
+ case 1, TrainerTower_Roof_EventScript_NoNewRecord
+ case 2, TrainerTower_Roof_EventScript_OwnerEnd
+
+TrainerTower_Roof_EventScript_NewRecord:
+ msgbox TrainerTower_Roof_Text_DoneItInRecordTime
+ goto TrainerTower_Roof_EventScript_OwnerEnd
+
+TrainerTower_Roof_EventScript_NoNewRecord:: @ 81C548A
+ msgbox TrainerTower_Roof_Text_TookSweetTimeGettingHere
+TrainerTower_Roof_EventScript_OwnerEnd:
+ msgbox TrainerTower_Roof_Text_IdLikeToSeeBetterTime
release
return
-EventScript_1C549C:: @ 81C549C
+TrainerTower_EventScript_ShowTime:: @ 81C549C
lockall
- setvar VAR_0x8004, 13
- special sub_815D9E8
- msgbox Text_17CC56
+ ttower_gettime
+ msgbox TrainerTower_Text_XMinYZSec
releaseall
end
-SevenIsland_TrainerTower_2F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_4F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_6F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_8F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_5F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_7F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_3F_EventScript_1C54AF:: @ 81C54AF
-SevenIsland_TrainerTower_1F_EventScript_1C54AF:: @ 81C54AF
- goto EventScript_1C508F
-
-SevenIsland_TrainerTower_2F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_4F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_6F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_8F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_5F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_7F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_3F_EventScript_1C54B4:: @ 81C54B4
-SevenIsland_TrainerTower_1F_EventScript_1C54B4:: @ 81C54B4
+
+@@ Battle triggers
+
+TrainerTower_EventScript_SingleBattleTrigger:: @ 81C54AF
+ goto TrainerTower_EventScript_TriggerBattle
+
+TrainerTower_EventScript_DoubleBattleTriggerTop:: @ 81C54B4
setvar VAR_TEMP_3, 0
- setvar VAR_0x8004, 16
- special sub_815D9E8
- compare VAR_RESULT, 0
- goto_if_ne EventScript_1C5528
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 2, Movement_ExclamationMark
+ ttower_checkdoubles
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
+ goto_if_ne TrainerTower_EventScript_IneligibleForDoubleBattle
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_DOUBLES1, Movement_ExclamationMark
waitmovement 0
- applymovement 2, Movement_Delay48
- goto EventScript_1C551B
-
-SevenIsland_TrainerTower_2F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_4F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_6F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_8F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_5F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_7F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_3F_EventScript_1C54EA:: @ 81C54EA
-SevenIsland_TrainerTower_1F_EventScript_1C54EA:: @ 81C54EA
+ applymovement LOCALID_TRAINER_DOUBLES1, Movement_Delay48
+ goto TrainerTower_EventScript_TriggerDoubleBattle
+
+TrainerTower_EventScript_DoubleBattleTriggerBottom:: @ 81C54EA
setvar VAR_TEMP_3, 1
- setvar VAR_0x8004, 16
- special sub_815D9E8
- compare VAR_RESULT, 0
- goto_if_ne EventScript_1C5528
- setvar VAR_0x8004, 19
- special sub_815D9E8
- applymovement 5, Movement_ExclamationMark
+ ttower_checkdoubles
+ compare VAR_RESULT, PLAYER_HAS_TWO_USABLE_MONS
+ goto_if_ne TrainerTower_EventScript_IneligibleForDoubleBattle
+ ttower_encountermusic
+ applymovement LOCALID_TRAINER_DOUBLES2, Movement_ExclamationMark
waitmovement 0
- applymovement 5, Movement_Delay48
-EventScript_1C551B:
+ applymovement LOCALID_TRAINER_DOUBLES2, Movement_Delay48
+TrainerTower_EventScript_TriggerDoubleBattle:
waitmovement 0
- setvar VAR_TEMP_F, 1
- goto EventScript_1C508F
+ setvar DISABLE_DOUBLES_TRIGGER, TRUE
+ goto TrainerTower_EventScript_TriggerBattle
-EventScript_1C5528:: @ 81C5528
+TrainerTower_EventScript_IneligibleForDoubleBattle:: @ 81C5528
lockall
playse SE_PINPON
- msgbox Text_17CC73
+ msgbox TrainerTower_Lobby_Text_NeedTwoMonsForDouble
closemessage
- applymovement OBJ_EVENT_ID_PLAYER, Movement_1C5544
+ applymovement OBJ_EVENT_ID_PLAYER, TrainerTower_Movement_PushPlayerBack
waitmovement 0
releaseall
end
-Movement_1C5541:
+TrainerTower_Movement_SingleTrainerApproach:
walk_left
-Movement_1C5542:: @ 81C5542
+TrainerTower_Movement_RightKnockoutTrainerApproach:: @ 81C5542
walk_left
walk_left
-Movement_1C5544:
+TrainerTower_Movement_PushPlayerBack:
walk_left
step_end
-Movement_1C5546:: @ 81C5546
+TrainerTower_Movement_BottomKnockoutTrainerApproach:: @ 81C5546
walk_up
walk_up
step_end
-Movement_1C5549:: @ 81C5549
+TrainerTower_Movement_TopKnockoutTrainerApproach:: @ 81C5549
walk_down
walk_down
step_end
-Movement_1C554C:: @ 81C554C
+TrainerTower_Movement_DoublesTrainer2OutOfWay:: @ 81C554C
walk_right
-Movement_1C554D:
+TrainerTower_Movement_LastKnockoutTrainerOutOfWay:
walk_up
face_down
step_end
-Movement_1C5550:: @ 81C5550
+TrainerTower_Movement_DoublesTrainer1FaceDown:: @ 81C5550
face_down
step_end
diff --git a/data/smokescreen.s b/data/smokescreen.s
index 19dceec00..49b13847b 100644
--- a/data/smokescreen.s
+++ b/data/smokescreen.s
@@ -3,10 +3,10 @@
.section .rodata
.align 2
-gUnknown_825098C:: @ 825098C
+gSmokescreenImpactSpriteSheet:: @ 825098C
obj_tiles gFile_graphics_battle_anims_sprites_smokescreen_impact_sheet, 0x0180, 55019
-gUnknown_8250994:: @ 8250994
+gSmokescreenImpactSpritePalette:: @ 8250994
obj_pal gFile_graphics_battle_anims_sprites_smokescreen_impact_palette, 55019
gOamData_835099C::
@@ -42,8 +42,8 @@ gSpriteAnimTable_82509E4::
.4byte gAnimCmd_82509C4
.4byte gAnimCmd_82509D4
-gUnknown_82509F4:: @ 82509F4
- spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, sub_804A904
+gSmokescreenImpactSpriteTemplate:: @ 82509F4
+ spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, SpriteCB_DestroySprite
gSpriteSheet_EnemyShadow:: @ 8250A0C
obj_tiles gFile_graphics_battle_interface_enemy_mon_shadow_sheet, 0x0080, 55129
diff --git a/data/specials.inc b/data/specials.inc
index 39ce252a4..4ed38160d 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -103,7 +103,7 @@ gSpecials:: @ 815FD60
def_special sub_8081128
def_special Field_AskSaveTheGame
def_special nullsub_56
- def_special sub_80FEE44
+ def_special ShowEasyChatScreen
def_special Special_BufferEasyChatMessage
def_special nullsub_75
def_special nullsub_75
@@ -374,7 +374,7 @@ gSpecials:: @ 815FD60
def_special TryBecomeLinkLeader
def_special TryJoinLinkGroup
def_special UnionRoomSpecial
- def_special sub_814F1D4
+ def_special Special_WirelessCommunicationScreen
def_special EnableNationalPokedex
def_special sub_80699E0
def_special sub_80699BC
@@ -412,7 +412,7 @@ gSpecials:: @ 815FD60
def_special Special_SSAnneDepartureCutscene
def_special IsPokemonJumpSpeciesInParty
def_special IsNationalPokedexEnabled
- def_special sub_815D9E8
+ def_special CallTrainerTowerFunc
def_special ShowPokemonJumpRecords
def_special Special_ItemIsTM_GetMoveName
def_special Special_DaisyMassageServices
@@ -439,7 +439,7 @@ gSpecials:: @ 815FD60
def_special Special_SetDeoxysTriangleObjectPal
def_special IsPlayerLeftOfVermilionSailor
def_special Special_BadEggInParty
- def_special sub_815D834
+ def_special ReadTrainerTowerAndValidate
def_special HasAllMons
def_special Special_PlayerIsNotInTrainerTowerLobby
def_special Special_BrailleCursorToggle
diff --git a/data/strings.s b/data/strings.s
index e77730429..f595170ff 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -3093,40 +3093,40 @@ gUnknown_841B32E:: @ 841B32E
.string "{DYNAMIC 0x00} learned\n"
.string "{DYNAMIC 0x01}!$"
-gUnknown_841B33D:: @ 0x841B33D
+gText_Upper:: @ 0x841B33D
.string "UPPER$"
-gUnknown_841B343:: @ 0x841B343
+gText_Lower:: @ 0x841B343
.string "lower$"
-gUnknown_841B349:: @ 0x841B349
+gText_Others:: @ 0x841B349
.string "OTHERS$"
-gUnknown_841B350:: @ 0x841B350
+gText_Symbols:: @ 0x841B350
.string "SYMBOLS$"
-gUnknown_841B358:: @ 0x841B358
+gText_Register2:: @ 0x841B358
.string "REGISTER$"
-gUnknown_841B361:: @ 0x841B361
+gText_Exit:: @ 0x841B361
.string "EXIT$"
-gUnknown_841B366:: @ 0x841B366
+gText_QuitChatting:: @ 0x841B366
.string "Quit chatting?$"
-gUnknown_841B375:: @ 0x841B375
+gText_RegisterTextWhere:: @ 0x841B375
.string "Register text where?$"
-gUnknown_841B38A:: @ 0x841B38A
+gText_RegisterTextHere:: @ 0x841B38A
.string "Register text here?$"
-gUnknown_841B39E:: @ 0x841B39E
+gText_InputText:: @ 0x841B39E
.string "Input text.$"
-gUnknown_841B3AA:: @ 841B3AA
+gText_F700JoinedChat:: @ 841B3AA
.string "{DYNAMIC 0x00} joined the chat!$"
-gUnknown_841B3BE:: @ 841B3BE
+gText_F700LeftChat:: @ 841B3BE
.string "{DYNAMIC 0x00} left the chat.$"
gUnknown_841B3D0:: @ 0x841B3D0
@@ -3135,60 +3135,60 @@ gUnknown_841B3D0:: @ 0x841B3D0
gUnknown_841B3DA:: @ 0x841B3DA
.string "{DYNAMIC 0x00}の{DYNAMIC 0x01}ひきめは いません$"
-gUnknown_841B3E9:: @ 0x841B3E9
+gText_ExitingTheChat:: @ 0x841B3E9
.string "Exiting the chat‥$"
-gUnknown_841B3FB:: @ 0x841B3FB
+gText_LeaderHasLeftEndingChat:: @ 0x841B3FB
.string "The LEADER, {DYNAMIC 0x00}, has\n"
.string "left, ending the chat.$"
-gUnknown_841B426:: @ 0x841B426
+gText_RegisteredTextChanged_OKtoSave:: @ 0x841B426
.string "The registered text has been changed.\n"
.string "Is it okay to save the game?$"
-gUnknown_841B469:: @ 0x841B469
+gText_RegisteredTextChanged_AlreadySavedFile:: @ 0x841B469
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
-gUnknown_841B4A4:: @ 0x841B4A4
+gText_RegisteredTextChanged_SavingDontTurnOff:: @ 0x841B4A4
.string "SAVING‥\n"
.string "DON'T TURN OFF THE POWER.$"
-gUnknown_841B4C6:: @ 0x841B4C6
+gText_RegisteredTextChanged_SavedTheGame:: @ 0x841B4C6
.string "{DYNAMIC 0x00} saved the game.$"
-gUnknown_841B4D9:: @ 0x841B4D9
+gText_IfLeaderLeavesChatWillEnd:: @ 0x841B4D9
.string "If the LEADER leaves, the chat\n"
.string "will end. Is that okay?$"
-gUnknown_841B510:: @ 841B510
+gText_Hello:: @ 841B510
.string "HELLO$"
-gUnknown_841B516:: @ 841B516
+gText_Pokemon2:: @ 841B516
.string "POKéMON$"
-gUnknown_841B51E:: @ 841B51E
+gText_Trade:: @ 841B51E
.string "TRADE$"
-gUnknown_841B524:: @ 841B524
+gText_Battle:: @ 841B524
.string "BATTLE$"
-gUnknown_841B52B:: @ 841B52B
+gText_Lets:: @ 841B52B
.string "LET'S$"
-gUnknown_841B531:: @ 841B531
+gText_Ok:: @ 841B531
.string "OK!$"
-gUnknown_841B535:: @ 841B535
+gText_Sorry:: @ 841B535
.string "SORRY$"
-gUnknown_841B53B:: @ 841B53B
+gText_YaySmileEmoji:: @ 841B53B
.string "YAY{EXTRA 0xF9}$"
-gUnknown_841B541:: @ 841B541
+gText_ThankYou:: @ 841B541
.string "THANK YOU$"
-gUnknown_841B54B:: @ 841B54B
+gText_ByeBye:: @ 841B54B
.string "BYE-BYE!$"
gUnknown_841B554:: @ 841B554
@@ -4230,51 +4230,51 @@ gJPText_MysteryGift:: @ 841DE50
gJPText_DecideStop:: @ 841DE51
.string "$"
-gUnknown_841DE52:: @ 841DE52
+gJPText_ReceiveMysteryGiftWithEReader:: @ 841DE52
.string "$"
-gUnknown_841DE53:: @ 841DE53
+gJPText_SelectConnectFromEReaderMenu:: @ 841DE53
.string "$"
-gUnknown_841DE54:: @ 841DE54
+gJPText_SelectConnectWithGBA:: @ 841DE54
.string "$"
-gUnknown_841DE55:: @ 841DE55
+gJPText_SelectConnectAndPressA:: @ 841DE55
.string "カ-ドeリ-ダ-{PLUS}の ‘つうしん'を\n"
.string "えらんで Aボタンを おしてください$"
-gUnknown_841DE7C:: @ 841DE7C
+gJPText_LinkIsIncorrect:: @ 841DE7C
.string "$"
-gUnknown_841DE7D:: @ 841DE7D
+gJPText_CardReadingHasBeenHalted:: @ 841DE7D
.string "$"
-gUnknown_841DE7E:: @ 841DE7E
+gJPText_UnableConnectWithEReader:: @ 841DE7E
.string "カ-ドeリ-ダ-{PLUS}と\n"
.string "つうしん できません$"
-gUnknown_841DE95:: @ 841DE95
+gJPText_Connecting:: @ 841DE95
.string "$"
-gUnknown_841DE96:: @ 841DE96
+gJPText_ConnectionErrorCheckLink:: @ 841DE96
.string "$"
-gUnknown_841DE97:: @ 841DE97
+gJPText_ConnectionErrorTryAgain:: @ 841DE97
.string "$"
-gUnknown_841DE98:: @ 841DE98
+gJPText_AllowEReaderToLoadCard:: @ 841DE98
.string "$"
-gUnknown_841DE99:: @ 841DE99
+gJPText_ConnectionComplete:: @ 841DE99
.string "$"
-gUnknown_841DE9A:: @ 841DE9A
+gJPText_NewTrainerHasComeToSevii:: @ 841DE9A
.string "$"
-gUnknown_841DE9B:: @ 841DE9B
+gJPText_PleaseWaitAMoment:: @ 841DE9B
.string "$"
-gUnknown_841DE9C:: @ 841DE9C
+gJPText_WriteErrorUnableToSaveData:: @ 841DE9C
.string "$"
gText_CommErrorCheckConnections:: @ 841DE9D
@@ -4498,19 +4498,19 @@ gUnknown_841E243:: @ 841E243
gUnknown_841E244:: @ 841E244
.string "$"
-gUnknown_841E245:: @ 841E245
+gText_WirelessCommunicationStatus:: @ 841E245
.string "Wireless Communication Status$"
-gUnknown_841E263:: @ 841E263
+gText_PeopleTrading:: @ 841E263
.string "People trading:$"
-gUnknown_841E273:: @ 841E273
+gText_PeopleBattling:: @ 841E273
.string "People battling:$"
-gUnknown_841E284:: @ 841E284
+gText_PeopleInUnionRoom:: @ 841E284
.string "People in the UNION ROOM:$"
-gUnknown_841E29E:: @ 841E29E
+gText_PeopleCommunicating:: @ 841E29E
.string "People communicating:$"
gUnknown_841E2B4:: @ 841E2B4
diff --git a/data/text/aide.inc b/data/text/aide.inc
new file mode 100644
index 000000000..70bf4aa70
--- /dev/null
+++ b/data/text/aide.inc
@@ -0,0 +1,15 @@
+Aide_Text_HaventCaughtEnoughMonsForItem:: @ 81A58A7
+ .string "Let's see…\n"
+ .string "Uh-oh! You have caught only\l"
+ .string "{STR_VAR_3} kinds of POKéMON!\p"
+ .string "You need {STR_VAR_1} kinds\n"
+ .string "if you want the {STR_VAR_2}.$"
+
+Aide_Text_GetEnoughMonsComeBackForItem:: @ 81A5909
+ .string "…Oh. I see.\p"
+ .string "When you get {STR_VAR_1} kinds of POKéMON,\n"
+ .string "come back for the {STR_VAR_2}.$"
+
+Aide_Text_DontHaveAnyRoomForItem:: @ 81A594D
+ .string "Oh! I see you don't have any\n"
+ .string "room for the {STR_VAR_2}.$"
diff --git a/data/text/fame_checker.inc b/data/text/fame_checker.inc
index 252c5ce7d..88ab9558f 100644
--- a/data/text/fame_checker.inc
+++ b/data/text/fame_checker.inc
@@ -1461,7 +1461,7 @@ gUnknown_81B1A31:: @ 81B1A31
.string "be the elder of a famous clan of\l"
.string "dragon masters.$"
-gUnknown_81B1AB9:: @ 81B1AB9
+PokemonJournal_Text_SpecialFeatureProfOak:: @ 81B1AB9
.string "POKéMON JOURNAL\p"
.string "Special Feature: PROF. OAK,\n"
.string "the POKéMON Researcher!\p"
diff --git a/data/trainer_tower/trainers.inc b/data/trainer_tower/trainers.inc
index 5f9b0f49b..645a8a27e 100644
--- a/data/trainer_tower/trainers.inc
+++ b/data/trainer_tower/trainers.inc
@@ -5111,3 +5111,43 @@ gUnknown_84823CC::
.byte 255 @ friendship
.byte 0x80, 0x6b, 0x01
+
+ .align 2
+gUnknown_84827AC:: @ 84827AC
+ .byte 0x08, 0x01
+ .2byte 0
+ .4byte 0
+
+gUnknown_84827B4:: @ 84827B4
+ .4byte gUnknown_847F16C
+ .4byte gUnknown_847D26C
+ .4byte gUnknown_84808AC
+ .4byte gUnknown_847ABAC
+ .4byte gUnknown_847CAAC
+ .4byte gUnknown_847E9AC
+ .4byte gUnknown_847AF8C
+ .4byte gUnknown_847CE8C
+ .4byte gUnknown_847DA2C
+ .4byte gUnknown_847BF0C
+ .4byte gUnknown_847D64C
+ .4byte gUnknown_847DE0C
+ .4byte gUnknown_847B74C
+ .4byte gUnknown_847BB2C
+ .4byte gUnknown_848182C
+ .4byte gUnknown_847F92C
+ .4byte gUnknown_847C2EC
+ .4byte gUnknown_847C6CC
+ .4byte gUnknown_847E5CC
+ .4byte gUnknown_84804CC
+ .4byte gUnknown_84823CC
+ .4byte gUnknown_8481FEC
+ .4byte gUnknown_84800EC
+ .4byte gUnknown_847E1EC
+ .4byte gUnknown_847ED8C
+ .4byte gUnknown_848106C
+ .4byte gUnknown_8480C8C
+ .4byte gUnknown_847F92C
+ .4byte gUnknown_847F54C
+ .4byte gUnknown_847E1EC
+ .4byte gUnknown_847D64C
+ .4byte gUnknown_847C6CC
diff --git a/data/union_room_chat.s b/data/union_room_chat.s
deleted file mode 100644
index b61c5f44d..000000000
--- a/data/union_room_chat.s
+++ /dev/null
@@ -1,358 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_845A880:: @ 845A880
- .4byte sub_8128640
- .4byte sub_81286C4
- .4byte sub_81287B4
- .4byte sub_81288D4
- .4byte sub_8128DA4
- .4byte sub_8128E78
- .4byte sub_8128AA0
- .4byte sub_8128C04
- .4byte sub_8128CA8
- .4byte sub_8128FB8
-
-gUnknown_845A8A8:: @ 845A8A8
- .byte 0x09, 0x09, 0x09, 0x09
-
-gUnknown_845A8AC:: @ 845A8AC
- .byte 0x00, 0x16, 0x17, 0x68, 0x19, 0x1a, 0x1b, 0x1c
- .byte 0x1d, 0x1e, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24
- .byte 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02
- .byte 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00
- .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12
- .byte 0x13, 0x14, 0x2a, 0x2b, 0x2c, 0x2d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00
- .byte 0x00, 0x00, 0x6f, 0x5b, 0x5c, 0x5d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7
- .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf
- .byte 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7
- .byte 0xb8, 0xb9, 0xba, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9
- .byte 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1
- .byte 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9
- .byte 0xea, 0xeb, 0xec, 0xed, 0xee, 0xbb, 0xbc, 0xbd
- .byte 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5
- .byte 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd
- .byte 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xef
- .byte 0xf0, 0xf4, 0xf5, 0xf6, 0xf1, 0xf2, 0xf3, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
-gUnknown_845A9AC:: @ 845A9AC
- .4byte gUnknown_847AAC1
- .4byte gUnknown_847AAC7
- .4byte gUnknown_847AACD
- .4byte gUnknown_847AAD3
- .4byte gUnknown_847AAD9
- .4byte gUnknown_847AADF
- .4byte gUnknown_847AAE5
- .4byte gUnknown_847AAEB
- .4byte gUnknown_847AAF1
- .4byte gUnknown_847AAF7
- .4byte gUnknown_847AAFD
- .4byte gUnknown_847AB03
- .4byte gUnknown_847AB09
- .4byte gUnknown_847AB0F
- .4byte gUnknown_847AB15
- .4byte gUnknown_847AB1B
- .4byte gUnknown_847AB21
- .4byte gUnknown_847AB27
- .4byte gUnknown_847AB2D
- .4byte gUnknown_847AB33
- .4byte gUnknown_847AB41
- .4byte gUnknown_847AB4C
- .4byte gUnknown_847AB57
- .4byte gUnknown_847AB62
- .4byte gUnknown_847AB6B
- .4byte gUnknown_847AB76
- .4byte gUnknown_847AB81
- .4byte gUnknown_847AB8C
- .4byte gUnknown_847AB97
- .4byte gUnknown_847ABA2
-
-gUnknown_845AA24:: @ 845AA24
- .incbin "graphics/union_room_chat/unk_845AA24.gbapal"
-
-gUnknown_845AA44:: @ 845AA44
- .incbin "graphics/union_room_chat/unk_845AA44.gbapal"
-
-gUnknown_845AA64:: @ 845AA64
- .incbin "graphics/union_room_chat/unk_845AA64.gbapal"
-
-gUnknown_845AA84:: @ 845AA84
- .4byte 0x00000070
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 7,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000011fd
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 3,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x0000217a
- @ {
- @ .bg = 2,
- @ .charBaseIndex = 2,
- @ .mapBaseIndex = 23,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 2,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000070f7
- @ {
- @ .bg = 3,
- @ .charBaseIndex = 1,
- @ .mapBaseIndex = 15,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 3,
- @ .baseTile = 0x0001
- @ }
-
-gUnknown_845AA94:: @ 845AA94
- .byte 3, 8, 1, 21, 19, 15
- .2byte 0x0001
- .byte 1, 9, 18, 15, 2, 12
- .2byte 0x007a
- .byte 1, 0, 2, 6, 15, 7
- .2byte 0x0020
- .byte 0, 1, 2, 7, 9, 14
- .2byte 0x0013
- .byte 255, 0, 0, 0, 0, 0
- .2byte 0x0000
-
-gUnknown_845AABC:: @ 845AABC
- .2byte 0x00
- .align 2
- .4byte sub_8129CA0
- .2byte 0x03
- .align 2
- .4byte sub_8129D40
- .2byte 0x04
- .align 2
- .4byte sub_8129D78
- .2byte 0x05
- .align 2
- .4byte sub_8129DB0
- .2byte 0x01
- .align 2
- .4byte sub_8129E1C
- .2byte 0x06
- .align 2
- .4byte sub_8129E28
- .2byte 0x07
- .align 2
- .4byte sub_8129E74
- .2byte 0x08
- .align 2
- .4byte sub_8129EB8
- .2byte 0x09
- .align 2
- .4byte sub_8129F24
- .2byte 0x0a
- .align 2
- .4byte sub_8129FCC
- .2byte 0x0b
- .align 2
- .4byte sub_812A074
- .2byte 0x0c
- .align 2
- .4byte sub_812A0B0
- .2byte 0x02
- .align 2
- .4byte sub_812A18C
- .2byte 0x0d
- .align 2
- .4byte sub_812A1B8
- .2byte 0x12
- .align 2
- .4byte sub_812A1FC
- .2byte 0x13
- .align 2
- .4byte sub_812A240
- .2byte 0x0e
- .align 2
- .4byte sub_812A294
- .2byte 0x0f
- .align 2
- .4byte sub_812A2E4
- .2byte 0x10
- .align 2
- .4byte sub_812A334
- .2byte 0x11
- .align 2
- .4byte sub_812A378
- .2byte 0x14
- .align 2
- .4byte sub_812A3D0
-
-gUnknown_845AB64:: @ 845AB64
- .4byte gUnknown_841B366
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B375
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B38A
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B39E
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B3E9
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B3FB
- .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00
- .align 2
- .4byte gUnknown_841B426
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B469
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B4A4
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B4C6
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x01, 0x01
- .align 2
- .4byte gUnknown_841B4D9
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
-
-gUnknown_845ABE8:: @ 845ABE8
- .string "…$"
-
- .align 2
-gUnknown_845ABEC:: @ 845ABEC
- .4byte gUnknown_841B33D, 0
- .4byte gUnknown_841B343, 0
- .4byte gUnknown_841B350, 0
- .4byte gUnknown_841B358, 0
- .4byte gUnknown_841B361, 0
-
-gUnknown_845AC14:: @ 845AC14
- .incbin "graphics/union_room_chat/unk_845AC14.gbapal"
-
-gUnknown_845AC34::
- .incbin "graphics/union_room_chat/unk_845AC34.4bpp.lz"
-
-gUnknown_845AEB8::
- .incbin "graphics/union_room_chat/unk_845AEB8.4bpp.lz"
-
-gUnknown_845AED8::
- .incbin "graphics/union_room_chat/unk_845AED8.4bpp.lz"
-
-gUnknown_845AF04::
- .incbin "graphics/union_room_chat/unk_845AF04.4bpp.lz"
-
-gUnknown_845AF58:: @ 845AF58
- obj_tiles gUnknown_845AC34, 0x1000, 0
- obj_tiles gUnknown_845AED8, 0x0040, 1
- obj_tiles gUnknown_845AEB8, 0x0040, 2
- obj_tiles gUnknown_845AF04, 0x0080, 3
- obj_tiles gUnknown_8EA1A50, 0x0400, 4
-
-gUnknown_845AF80:: @ 845AF80
- obj_pal gUnknown_845AC14, 0
-
-gOamData_845AF88::
- .4byte 0xc0004000, 0x00000400
-
-gAnimCmd_845AF90::
- obj_image_anim_frame 0x0000, 30
- obj_image_anim_end
-
-gAnimCmd_845AF98::
- obj_image_anim_frame 0x0020, 30
- obj_image_anim_end
-
-gAnimCmd_845AFA0::
- obj_image_anim_frame 0x0040, 30
- obj_image_anim_end
-
-gAnimCmd_845AFA8::
- obj_image_anim_frame 0x0060, 30
- obj_image_anim_end
-
-gSpriteAnimTable_845AFB0::
- .4byte gAnimCmd_845AF90
- .4byte gAnimCmd_845AF98
- .4byte gAnimCmd_845AFA0
- .4byte gAnimCmd_845AFA8
-
-gUnknown_845AFC0:: @ 845AFC0
- spr_template 0, 0, gOamData_845AF88, gSpriteAnimTable_845AFB0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gOamData_845AFD8::
- .4byte 0x00008000, 0x00000800
-
-gUnknown_845AFE0:: @ 845AFE0
- spr_template 2, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B09C
-
-gUnknown_845AFF8:: @ 845AFF8
- spr_template 1, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B0D4
-
-gOamData_845B010::
- .4byte 0x40000000, 0x00000800
-
-gOamData_845B018::
- .4byte 0x80004000, 0x00000800
-
-gAnimCmd_845B020::
- obj_image_anim_frame 0x0000, 2
- obj_image_anim_end
-
-gAnimCmd_845B028::
- obj_image_anim_frame 0x0008, 2
- obj_image_anim_end
-
-gAnimCmd_845B030::
- obj_image_anim_frame 0x0010, 2
- obj_image_anim_end
-
-gAnimCmd_845B038::
- obj_image_anim_frame 0x0018, 2
- obj_image_anim_end
-
-gSpriteAnimTable_845B040::
- .4byte gAnimCmd_845B020
- .4byte gAnimCmd_845B028
- .4byte gAnimCmd_845B030
- .4byte gAnimCmd_845B038
-
-gUnknown_845B050:: @ 845B050
- spr_template 3, 0, gOamData_845B010, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_845B068:: @ 845B068
- spr_template 4, 0, gOamData_845B018, gSpriteAnimTable_845B040, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h
new file mode 100644
index 000000000..0970a4233
--- /dev/null
+++ b/include/AgbRfu_LinkManager.h
@@ -0,0 +1,245 @@
+#ifndef GUARD_LINKMANAGER_H
+#define GUARD_LINKMANAGER_H
+
+//-----------------------------------------------------------------
+// Constant definition
+//-----------------------------------------------------------------
+
+// Link Manager operation mode (specified by u8 parent_child argument of rfu_LMAN_establishConnection)
+//#define MODE_CHILD 0 // Start Link Manager in CHILD mode
+//#define MODE_PARENT 1 // Start Link Manager in PARENT mode
+//Note: This value uses the item defined by AgbRFU_LL.h.
+#define MODE_P_C_SWITCH 2 // Start Link Manager in parent-child switching mode.
+
+// Value of lman.p_c_switch_flag
+#define PCSWITCH_1ST_SC_START 0x01
+#define PCSWITCH_1ST_SC 0x02
+#define PCSWITCH_2ND_SP_START 0x03
+#define PCSWITCH_2ND_SP 0x04
+#define PCSWITCH_3RD_SC_START 0x05
+#define PCSWITCH_3RD_SC 0x06
+#define PCSWITCH_CP 0x07
+#define PCSWITCH_SC_LOCK 0x08
+#define PCSWITCH_FORCE_SP_START 0x09
+
+// Period for which parent-child switching search specified
+#define PCSWITCH_ALL_PERIOD 180 // Entire cycle 180 frames
+#define PCSWITCH_SP_PERIOD 40 // Child period 40 frames
+
+// Error code returned by Link Manager API (rfu_LMAN_...return value of function)
+#define LMAN_ERROR_MANAGER_BUSY 1 // Link Manager is already running.
+#define LMAN_ERROR_AGB_CLK_SLAVE 2 // AGB is clock slave so link manager cannot run.
+#define LMAN_ERROR_PID_NOT_FOUND 3 // Parent device information of the specified PID does not exist in rfuLinkStatus->partner[0-3].
+#define LMAN_ERROR_ILLEGAL_PARAMETER 4 // Specified argument is unusual.
+#define LMAN_ERROR_NOW_LINK_RECOVERY 5 // New settings were ignored because link recovery was under way when current link recovery was ON and new settings turned link recovery OFF.
+#define LMAN_ERROR_NOW_COMMUNICATION 6 // New settings were ignored because currently communicating with NI.
+#define LMAN_ERROR_NOW_SEARCH_PARENT 7 // Parent search currently under way, so ignore new setting.
+
+// Details of messages and the related parameters returned by the u8 msg, u8 param_count, and lman.param[0-1] arguments of the LMAN callback generated by the operation of the Link Manager.
+// msg name msg No. param qty param[0] param[1] Description
+#define LMAN_MSG_INITIALIZE_COMPLETED 0x00 // 0 - - Generated when RFU reset and initial settings are completed
+#define LMAN_MSG_NEW_CHILD_CONNECT_DETECTED 0x10 // 1 Bit indicating slot - Generated when new child device connection was detected at RFU level.
+// with detected connection
+#define LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED 0x11 // 1 Bit indicating slot - Generated when game identification information from child device connected at RFU level is received and accepted (game serial numbers match).
+// where connection was accepted
+#define LMAN_MSG_NEW_CHILD_CONNECT_REJECTED 0x12 // 1 Bit indicating slot - Generated when the connection from the child device connected at RFU level is rejected (game identification information reception failed or game serial numbers do not match).
+// where connection was rejected
+#define LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED 0x13 // 0 - - Generated when SearchChild operation time expires.
+#define LMAN_MSG_END_WAIT_CHILD_NAME 0x14 // 0 - - Generated when reception of game identification information from all child devices completes after the SearchChild operation time expires.
+#define LMAN_MSG_PARENT_FOUND 0x20 // 1 Bit indicating - Generated when valid (game serial numbers match) parent devices are found during SearchParent.
+// rfuLinkStatus->partner[x] index number storing the valid parent devices (game serial number matches) from among the discovered parent devices.
+#define LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED 0x21 // 0 - - Generated when SearchParent time expires.
+#define LMAN_MSG_CONNECT_PARENT_SUCCESSED 0x22 // 1 Connected slot number - Generated when connection with parent device at RFU level succeeds.
+#define LMAN_MSG_CONNECT_PARENT_FAILED 0x23 // 1 Connection failure reason - Generated when connection with parent device at RFU level fails.
+#define LMAN_MSG_CHILD_NAME_SEND_COMPLETED 0x24 // 0 - - Generated when transmission of the child's game identification information to the parent device succeeds after connection with parent device at RFU level succeeds.
+#define LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED 0x25 // 0 - - Generated when transmission of the child's game identification information to the parent device fails after connection with parent device at RFU level succeeds.
+#define LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED 0x30 // 1 Bit indicating slot - Generated when a link cut is detected and that slot disconnects. (Generated only when link recovery is OFF.)
+// that was disconnected and where link cut was detected but link recover not attempted
+#define LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY 0x31 // 1 Bit indicating slot - Generated when a link cut is detected and the link recovery process starts. (Generated only when link recovery is ON.)
+// where link cut was detected and link recovery was started
+#define LMAN_MSG_LINK_RECOVERY_SUCCESSED 0x32 // 1 Bit indicating slot - Generated when link recovery succeeds. (Generated only when link recovery is ON.)
+// where link recovery succeeded
+#define LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED 0x33 // 1 Bit indicating slot - Generated when link recovery fails and that slot disconnects. (Generated only when link recovery is ON.)
+// where link recovery failed and that disconnected
+#define LMAN_MSG_LINK_DISCONNECTED_BY_USER 0x40 // 1 Generated on disconnection by execution of rfu_REQ_disconnect by disconnected user.
+// Slot indicated in bits *Note: If rfu_REQ_disconnect is used for disconnection during link recovery in the child device, the link recovery is also suspended, but the only message returned is DISCONNECTED_BY_USER.
+#define LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE 0x41 // 0 - - Generated when the AGB-RFU clock switches to AGB clock slave after a successful connection or link recovery in the child device. (This message is not generated when the AGB switches to a clock slave when an MSC callback completes.)
+#define LMAN_MSG_CHANGE_AGB_CLOCK_MASTER 0x45 // 0 - - Generated when the AGB-RFU intercommunication clock is switched to the AGB clock master in the child device.
+#define LMAN_MSG_RFU_POWER_DOWN 0x42 // 0 - - Generated when the RFU enters power conservation mode with rfu_LMAN_powerDownRFU.
+#define LMAN_MSG_MANAGER_STOPPED 0x43 // 0 - - Generated when the Link Manager is halted by rfu_LMAN_stopLMAN(0). (This message is not generated during SearchChild, SearchParent, ConnectParent, and LinkRecovery. A message (-PERIOD_EXPIRED, -SUCCESSED, -FAILED) corresponding to the operation completion is returned.)
+#define LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET 0x44 // 0 - - Generates when the Link Manager is forcibly halted by rfu_LMAN_stopLMAN(1) and RFU is reset.
+
+#define LMAN_MSG_RECV_DATA_REQ_COMPLETED 0x50 // 0 - - Generated when the execution of rfu_REQ_recvData completes. (This message is not notification of data reception from a RFU.)
+
+#define LMAN_MSG_REQ_API_ERROR 0xf0 // 2 REQ_commandID REQ_result REQ-API resulted in error. This message is also generated by an REQ-API executed by either the link manager or the user.
+#define LMAN_MSG_WATCH_DOG_TIMER_ERROR 0xf1 // 0 - - Generated when a MSC callback does not occur even after 6 seconds pass when the AGB is the clock slave.
+#define LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA 0xf2 // 0 - - Generated when an automatic starting DMA, such as HDMA, is issued at the same time the RFU attempts to send notification and to return the AGB to the clock master while the AGB is the clock slave and the exchange of that information (REQ command) fails.
+#define LMAN_MSG_LMAN_API_ERROR_RETURN 0xf3 // 1 Return error code - Generated when LMAN-API execution returns an error.
+#define LMAN_MSG_RFU_FATAL_ERROR 0xff // 0 - - Generated when the Link Manager cannot recongize a RFU because of the execution of rfu_REQBN_softReset_and_checkID.
+
+
+// Value of lman.childClockSlave_flag
+#define RFU_CHILD_CLOCK_SLAVE_OFF 0 // The child device is not operating in AGB clock slave mode. (The child device is in this mode in cases such as when the child has not established a connection or during link recovery.)
+#define RFU_CHILD_CLOCK_SLAVE_ON 1 // The child device is operating in AGB clock slave mode. (Child automatically enters this mode when a connection is established.)
+#define RFU_CHILD_CLOCK_SLAVE_OFF_REQ 2 // The child device has requested that AGB clock slave mode be halted.
+
+// State of Link Manager (values of lman.state, lman.next_state)
+#define LMAN_STATE_READY 0x00 // Waiting
+#define LMAN_STATE_SOFT_RESET_AND_CHECK_ID 0x01 // Requesting execution of rfu_REQBN_softResetAndCheckID (same as below)
+#define LMAN_STATE_RESET 0x02 // rfu_REQ_reset
+#define LMAN_STATE_CONFIG_SYSTEM 0x03 // rfu_REQ_configSystem
+#define LMAN_STATE_CONFIG_GAME_DATA 0x04 // rfu_REQ_configGameData
+#define LMAN_STATE_START_SEARCH_CHILD 0x05 // rfu_REQ_startSearchChild
+#define LMAN_STATE_POLL_SEARCH_CHILD 0x06 // rfu_REQ_pollSearchChild
+#define LMAN_STATE_END_SEARCH_CHILD 0x07 // rfu_REQ_endSearchChild
+#define LMAN_STATE_WAIT_RECV_CHILD_NAME 0x08 // Awaiting reception of game name from connected child device.
+#define LMAN_STATE_START_SEARCH_PARENT 0x09 // rfu_REQ_startSearchParent
+#define LMAN_STATE_POLL_SEARCH_PARENT 0x0a // rfu_REQ_pollSearchParent
+#define LMAN_STATE_END_SEARCH_PARENT 0x0b // rfu_REQ_endSearchParent
+#define LMAN_STATE_START_CONNECT_PARENT 0x0c // rfu_REQ_startConnectParent
+#define LMAN_STATE_POLL_CONNECT_PARENT 0x0d // rfu_REQ_pollConnectParent
+#define LMAN_STATE_END_CONNECT_PARENT 0x0e // rfu_REQ_endConnectParent
+#define LMAN_STATE_SEND_CHILD_NAME 0x0f // Sending child game name.
+#define LMAN_STATE_START_LINK_RECOVERY 0x10 // rfu_REQ_CHILD_startConnectRecovery
+#define LMAN_STATE_POLL_LINK_RECOVERY 0x11 // rfu_REQ_CHILD_pollConnectRecovery
+#define LMAN_STATE_END_LINK_RECOVERY 0x12 // rfu_REQ_CHILD_endConnectRecovery
+#define LMAN_STATE_MS_CHANGE 0x13 // rfu_REQ_changeMasterSlave
+#define LMAN_STATE_WAIT_CLOCK_MASTER 0x14 // Waiting for AGB-RFU intercommunication clock to become AGB clock master.
+#define LMAN_STATE_STOP_MODE 0x15 // rfu_REQ_stopMode
+#define LMAN_STATE_BACK_STATE 0x16 // Following the completion of link-recovery processing, return the Link Manager state to the state present before link-recovery processing was initiated.
+#define LMAN_FORCED_STOP_AND_RFU_RESET 0x17 // Attempt to forcibly stop Link Manager using rfu_LMAN_stopLMAN(1).
+#define LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER 0x18 // Attempt to return to AGB clock master after child fails in sending game name.
+
+// RfuTgtData.gname is read as these structs.
+struct GFtgtGnameSub
+{
+ u16 language:4;
+ u16 hasNews:1;
+ u16 hasCard:1;
+ u16 unk_00_6:1;
+ u16 isChampion:1;
+ u16 hasNationalDex:1;
+ u16 gameClear:1;
+ u16 version:4;
+ u16 unk_01_6:2;
+ u8 playerTrainerId[2];
+};
+
+struct __attribute__((packed, aligned(2))) GFtgtGname
+{
+ struct GFtgtGnameSub unk_00;
+ u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3;
+ // u8 gender:1;
+ // u8 unk_4:3
+ // u8 active:1
+ u16 species:10;
+ u16 type:6;
+ u8 activity:7;
+ u8 started:1;
+ u8 playerGender:1;
+ u8 level:7;
+ u8 padding;
+}; // size: RFU_GNAME_SIZE
+
+struct Padded_U8
+{
+ u8 value;
+};
+
+// Parameter group used in initial setting run of the link manager (rfu_LMAN_initializeRFU)
+typedef struct InitializeParametersTag {
+ // rfu_REQ_configSystem argument
+ u8 maxMFrame; // Maximum number of times to re-transmit of RFU level
+ u8 MC_TimerCount; // MC_Timer count (x16.7ms)
+ u16 availSlot_flag; // Use RFU-API constant "AVAIL_SLOT1-4" to specify the maximum number of child devices (1 - 4) that can be connected to a parent device.
+
+ // rfu_REQB_configGameData argument
+ u8 mboot_flag; // Multiplayer boot flag
+ u16 serialNo; // Game serial number
+ u8 *gameName; // Game name
+ u8 *userName; // User name
+
+ // ON/OFF flag for parent fast search operation by child.
+ u8 fastSearchParent_flag; // Flag indicating whether parent fast search operation to be performed by child.
+
+ // Link recovery settings
+ u8 linkRecovery_enable; // Determines whether or not to execute the link recovery process when a link cut occurs
+ u16 linkRecovery_period; // Time to spend on the link recovery process (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
+
+ // Setting for NI-type data transmit/receive period
+ u16 NI_failCounter_limit; // Limit for failCounter during NI type data transmit/receive (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
+}INIT_PARAM;
+
+
+// Timer that counts with the V-Blank cycle
+typedef struct VblankTimerTag {
+ u8 active; // Timer ON/OFF (bits 0 - 3 indicate ON/OFF for each connected slot)
+ u16 count_max; // Maximum count value (x16.7ms)
+ u16 count[RFU_CHILD_MAX]; // Current count value (x 16.7 ms) for each connected slot
+}VBL_TIMER;
+
+struct UnkLinkRfuStruct_02022B44
+{
+ u8 fill_00[6];
+ u16 unk_06;
+ u8 fill_08[6];
+ vu8 unk_0e;
+ u8 unk_0f;
+ u8 fill_10[0x54];
+ u16 unk_64;
+ u8 fill_66[0x1d];
+ u8 unk_83;
+ u8 fill_84[0x58];
+};
+
+typedef struct linkManagerTag
+{
+ /* 0x000 */ u8 acceptSlot_flag;
+ /* 0x001 */ u8 acceptCount;
+ /* 0x002 */ vu8 childClockSlave_flag;
+ /* 0x003 */ vu8 parentAck_flag;
+ /* 0x004 */ u8 state;
+ /* 0x005 */ u8 next_state;
+ /* 0x006 */ u8 parent_child;
+ /* 0x007 */ u8 pcswitch_flag;
+ /* 0x008 */ u8 RFU_powerOn_flag;
+ /* 0x009 */ u8 linkRecovery_enable;
+ /* 0x00a */ u8 linkRecovery_start_flag;
+ /* 0x00b */ u8 fastSearchParent_flag;
+ /* 0x00c */ u8 connectSlot_flag_old;
+ /* 0x00d */ u8 reserveDisconnectSlot_flag;
+ /* 0x00e */ u8 active;
+ /* 0x00f */ u8 msc_exe_flag;
+ /* 0x010 */ u8 child_slot;
+ /* 0x011 */ u8 state_bak[2];
+ /* 0x014 */ u16 param[2];
+ /* 0x018 */ u16 NI_failCounter_limit;
+ /* 0x01a */ u16 connect_period;
+ /* 0x01c */ u16 pcswitch_period_bak;
+ /* 0x01e */ u16 work;
+ /* 0x020 */ u16 *acceptable_serialNo_list;
+ /* 0x024 */ VBL_TIMER nameAcceptTimer;
+ /* 0x030 */ VBL_TIMER linkRecoveryTimer;
+ /* 0x03c */ INIT_PARAM *init_param;
+ /* 0x040 */ void (*LMAN_callback)(u8, u8);
+ /* 0x044 */ void (*MSC_callback)(u16);
+} LINK_MANAGER;
+
+extern struct linkManagerTag lman;
+
+u32 rfu_LMAN_REQBN_softReset_and_checkID(void);
+void rfu_LMAN_requestChangeAgbClockMaster(void);
+void rfu_LMAN_initializeRFU(INIT_PARAM *init_params);
+u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list);
+void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag);
+void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16));
+void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag);
+void rfu_LMAN_powerDownRFU(void);
+u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period);
+u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period);
+void rfu_LMAN_manager_entity(u32 rand);
+void rfu_LMAN_syncVBlank(void);
+u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16));
+void rfu_LMAN_forceChangeSP(void);
+
+#endif //GUARD_LINKMANAGER_H
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 4dc2f10f0..2aecbb0a4 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -19,7 +19,7 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerSc
bool32 GetTrainerFlagFromScriptPointer(const u8 *data);
void SetUpTrainerMovement(void);
u8 ScrSpecial_GetTrainerBattleMode(void);
-u16 sub_80803D8(void);
+u16 GetRivalBattleFlags(void);
u16 ScrSpecial_HasTrainerBeenFought(void);
void SetBattledTrainerFlag(void);
bool8 HasTrainerBeenFought(u16 trainerId);
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 87f847aa4..be07320c9 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -33,8 +33,6 @@ void ValidateEReaderTrainer(void);
u8 GetBattleTowerTrainerFrontSpriteId(void);
u8 GetEreaderTrainerFrontSpriteId(void);
void CopyEReaderTrainerName5(u8 *dest);
-void sub_815DC40(u8 *dest, u8 opponentIdx);
-void sub_815DBF4(u8 *dest, u8 opponentIdx);
void GetBattleTowerTrainerName(u8 *text);
u8 GetEreaderTrainerClassId(void);
u8 GetBattleTowerTrainerClassNameId(void);
diff --git a/include/berry_crush.h b/include/berry_crush.h
index 2583aba61..e8e9c216f 100644
--- a/include/berry_crush.h
+++ b/include/berry_crush.h
@@ -1,6 +1,6 @@
#ifndef GUARD_BERRY_CRUSH_H
#define GUARD_BERRY_CRUSH_H
-void sub_814B754(MainCallback callback);
+void StartBerryCrush(MainCallback callback);
#endif //GUARD_BERRY_CRUSH_H
diff --git a/include/cereader_tool.h b/include/cereader_tool.h
index 6275eaabf..dd1866fb3 100644
--- a/include/cereader_tool.h
+++ b/include/cereader_tool.h
@@ -2,6 +2,7 @@
#define GUARD_CEREADER_TOOL_H
#include "global.h"
+#include "constants/trainer_tower.h"
struct TrainerTowerTrainer
{
@@ -21,30 +22,31 @@ struct TrainerTowerFloor
/* 0x001 */ u8 floorIdx;
/* 0x002 */ u8 challengeType;
/* 0x003 */ u8 prize;
- /* 0x004 */ struct TrainerTowerTrainer trainers[3];
+ /* 0x004 */ struct TrainerTowerTrainer trainers[MAX_TRAINERS_PER_FLOOR];
/* 0x3DC */ u32 checksum;
};
-struct EReaderTrainerHillSetSubstruct
+struct EReaderTrainerTowerSetSubstruct
{
- u8 count;
+ u8 numFloors;
u8 id;
u16 dummy;
u32 checksum;
};
-struct EReaderTrainerHillSet
+struct EReaderTrainerTowerSet
{
- u8 count;
+ u8 numFloors;
u8 id;
u16 dummy;
u32 checksum;
- struct TrainerTowerFloor floors[8];
+ struct TrainerTowerFloor floors[MAX_TRAINER_TOWER_FLOORS];
};
-bool32 ValidateTrainerTowerData(struct EReaderTrainerHillSet * ttdata);
-bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerHillSet * ttdata);
-bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerHillSet * ttdata);
+bool32 ValidateTrainerTowerData(struct EReaderTrainerTowerSet * ttdata);
+bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerTowerSet * ttdata);
+bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerTowerSet * ttdata);
u8 sub_815D654(void);
+bool32 ReadTrainerTowerAndValidate(void);
#endif //GUARD_CEREADER_TOOL_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index b28955210..a80038f2c 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -71,7 +71,7 @@
#define BATTLE_TYPE_x800000 0x800000
#define BATTLE_TYPE_RECORDED 0x1000000
#define BATTLE_TYPE_x2000000 0x2000000
-#define BATTLE_TYPE_TRAINER_HILL 0x4000000
+#define BATTLE_TYPE_x4000000 0x4000000
#define BATTLE_TYPE_SECRET_BASE 0x8000000
#define BATTLE_TYPE_GROUDON 0x10000000
#define BATTLE_TYPE_KYOGRE 0x20000000
@@ -81,6 +81,9 @@
#define IS_BATTLE_TYPE_GHOST_WITHOUT_SCOPE(flags) ((flags) & BATTLE_TYPE_GHOST && !((flags) & BATTLE_TYPE_GHOST_UNVEILED))
#define IS_BATTLE_TYPE_GHOST_WITH_SCOPE(flags) ((flags) & BATTLE_TYPE_GHOST && (flags) & BATTLE_TYPE_GHOST_UNVEILED)
+#define RIVAL_BATTLE_HEAL_AFTER 1
+#define RIVAL_BATTLE_TUTORIAL 3
+
// Battle Outcome defines
#define B_OUTCOME_WON 0x1
#define B_OUTCOME_LOST 0x2
diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h
index 8f700dc04..1e804fd18 100644
--- a/include/constants/battle_setup.h
+++ b/include/constants/battle_setup.h
@@ -10,6 +10,6 @@
#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE 6
#define TRAINER_BATTLE_REMATCH_DOUBLE 7
#define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8
-#define TRAINER_BATTLE_TUTORIAL 9
+#define TRAINER_BATTLE_EARLY_RIVAL 9
#endif // GUARD_CONSTANTS_BATTLE_SETUP_H
diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h
index 4ef90ed60..7261365c2 100644
--- a/include/constants/easy_chat.h
+++ b/include/constants/easy_chat.h
@@ -6,22 +6,7 @@
#define EASY_CHAT_TYPE_BATTLE_WON 2
#define EASY_CHAT_TYPE_BATTLE_LOST 3
#define EASY_CHAT_TYPE_MAIL 4
-#define EASY_CHAT_TYPE_INTERVIEW 5
-#define EASY_CHAT_TYPE_BARD_SONG 6
-#define EASY_CHAT_TYPE_FAN_CLUB 7
-#define EASY_CHAT_TYPE_UNK_8 8
-#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
-#define EASY_CHAT_TYPE_GABBY_AND_TY 10
-#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11
-#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12
-#define EASY_CHAT_TYPE_GOOD_SAYING 13
-#define EASY_CHAT_TYPE_FAN_QUESTION 14
-#define EASY_CHAT_TYPE_QUIZ_ANSWER 15
-#define EASY_CHAT_TYPE_QUIZ_QUESTION 16
-#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17
-#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18
-#define EASY_CHAT_TYPE_APPRENTICE 19
-#define EASY_CHAT_TYPE_QUESTIONNAIRE 20
+#define EASY_CHAT_TYPE_QUESTIONNAIRE 14
#define EC_GROUP_POKEMON_2 0x0
#define EC_GROUP_TRAINER 0x1
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 26ffa8a7c..85cd4d850 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -1415,7 +1415,7 @@
#define FLAG_WORLD_MAP_THREE_ISLAND_BERRY_FOREST (SYS_FLAGS + 0xB7)
#define FLAG_WORLD_MAP_FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE (SYS_FLAGS + 0xB8)
#define FLAG_WORLD_MAP_FIVE_ISLAND_ROCKET_WAREHOUSE (SYS_FLAGS + 0xB9)
-#define FLAG_WORLD_MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY (SYS_FLAGS + 0xBA)
+#define FLAG_WORLD_MAP_TRAINER_TOWER_LOBBY (SYS_FLAGS + 0xBA)
#define FLAG_WORLD_MAP_SIX_ISLAND_DOTTED_HOLE_1F (SYS_FLAGS + 0xBB)
#define FLAG_WORLD_MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE (SYS_FLAGS + 0xBC)
#define FLAG_WORLD_MAP_SIX_ISLAND_PATTERN_BUSH (SYS_FLAGS + 0xBD)
diff --git a/include/constants/global.h b/include/constants/global.h
index 77ef6f203..ae9a0da3b 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -34,10 +34,16 @@
#define QUEST_LOG_SCENE_COUNT 4
+#define NUM_TOWER_CHALLENGE_TYPES 4
+
#define MALE 0
#define FEMALE 1
#define GENDER_COUNT 2
+#define BARD_SONG_LENGTH 6
+#define NUM_STORYTELLER_TALES 4
+#define NUM_TRADER_ITEMS 4
+
#define OPTIONS_BUTTON_MODE_HELP 0
#define OPTIONS_BUTTON_MODE_LR 1
#define OPTIONS_BUTTON_MODE_L_EQUALS_A 2
@@ -62,6 +68,7 @@
#define MAX_MON_MOVES 4
+#define TRAINER_ID_LENGTH 4
#define PARTY_SIZE 6
#define MULTI_PARTY_SIZE (PARTY_SIZE / 2)
diff --git a/include/constants/layouts.h b/include/constants/layouts.h
index 657d531e8..967a4619c 100644
--- a/include/constants/layouts.h
+++ b/include/constants/layouts.h
@@ -279,17 +279,17 @@
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_1F 294
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_B1F 295
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_BACK 296
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY 297
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F 298
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_2F 299
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_3F 300
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_4F 301
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_5F 302
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_6F 303
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_7F 304
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_8F 305
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ROOF 306
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR 307
+#define LAYOUT_TRAINER_TOWER_LOBBY 297
+#define LAYOUT_TRAINER_TOWER_1F 298
+#define LAYOUT_TRAINER_TOWER_2F 299
+#define LAYOUT_TRAINER_TOWER_3F 300
+#define LAYOUT_TRAINER_TOWER_4F 301
+#define LAYOUT_TRAINER_TOWER_5F 302
+#define LAYOUT_TRAINER_TOWER_6F 303
+#define LAYOUT_TRAINER_TOWER_7F 304
+#define LAYOUT_TRAINER_TOWER_8F 305
+#define LAYOUT_TRAINER_TOWER_ROOF 306
+#define LAYOUT_TRAINER_TOWER_ELEVATOR 307
#define LAYOUT_CERULEAN_CITY_HOUSE5 308
#define LAYOUT_SIX_ISLAND_DOTTED_HOLE_1F 309
#define LAYOUT_SIX_ISLAND_DOTTED_HOLE_B1F 310
@@ -348,22 +348,22 @@
#define LAYOUT_SEVEN_ISLAND_TANOBY_RUINS_VIAPOIS_CHAMBER 363
#define LAYOUT_NAVEL_ROCK_B1F 364
#define LAYOUT_NAVEL_ROCK_FORK 365
-#define LAYOUT_UNUSED_LAYOUT_834BC2C 366
-#define LAYOUT_UNUSED_LAYOUT_834BEB4 367
-#define LAYOUT_UNUSED_LAYOUT_834C13C 368
-#define LAYOUT_UNUSED_LAYOUT_834C3C4 369
-#define LAYOUT_UNUSED_LAYOUT_834C64C 370
-#define LAYOUT_UNUSED_LAYOUT_834C8D4 371
-#define LAYOUT_UNUSED_LAYOUT_834CB5C 372
-#define LAYOUT_UNUSED_LAYOUT_834CDE4 373
-#define LAYOUT_UNUSED_LAYOUT_834D06C 374
-#define LAYOUT_UNUSED_LAYOUT_834D2F4 375
-#define LAYOUT_UNUSED_LAYOUT_834D57C 376
-#define LAYOUT_UNUSED_LAYOUT_834D804 377
-#define LAYOUT_UNUSED_LAYOUT_834DA8C 378
-#define LAYOUT_UNUSED_LAYOUT_834DD14 379
-#define LAYOUT_UNUSED_LAYOUT_834DF9C 380
-#define LAYOUT_UNUSED_LAYOUT_834E224 381
+#define LAYOUT_TRAINER_TOWER_1F_DOUBLES 366
+#define LAYOUT_TRAINER_TOWER_2F_DOUBLES 367
+#define LAYOUT_TRAINER_TOWER_3F_DOUBLES 368
+#define LAYOUT_TRAINER_TOWER_4F_DOUBLES 369
+#define LAYOUT_TRAINER_TOWER_5F_DOUBLES 370
+#define LAYOUT_TRAINER_TOWER_6F_DOUBLES 371
+#define LAYOUT_TRAINER_TOWER_7F_DOUBLES 372
+#define LAYOUT_TRAINER_TOWER_8F_DOUBLES 373
+#define LAYOUT_TRAINER_TOWER_1F_KNOCKOUT 374
+#define LAYOUT_TRAINER_TOWER_2F_KNOCKOUT 375
+#define LAYOUT_TRAINER_TOWER_3F_KNOCKOUT 376
+#define LAYOUT_TRAINER_TOWER_4F_KNOCKOUT 377
+#define LAYOUT_TRAINER_TOWER_5F_KNOCKOUT 378
+#define LAYOUT_TRAINER_TOWER_6F_KNOCKOUT 379
+#define LAYOUT_TRAINER_TOWER_7F_KNOCKOUT 380
+#define LAYOUT_TRAINER_TOWER_8F_KNOCKOUT 381
#define LAYOUT_SEVEN_ISLAND_HOUSE_ROOM1 382
#define LAYOUT_ONE_ISLAND_KINDLE_ROAD_EMBER_SPA 383
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index 0cc1c27fb..1b1b74d37 100644
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -135,17 +135,17 @@
// Map Group 2
#define MAP_NAVEL_ROCK_EXTERIOR (0 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_1F (1 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_2F (2 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_3F (3 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_4F (4 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_5F (5 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_6F (6 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_7F (7 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_8F (8 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_ROOF (9 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY (10 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR (11 | (2 << 8))
+#define MAP_TRAINER_TOWER_1F (1 | (2 << 8))
+#define MAP_TRAINER_TOWER_2F (2 | (2 << 8))
+#define MAP_TRAINER_TOWER_3F (3 | (2 << 8))
+#define MAP_TRAINER_TOWER_4F (4 | (2 << 8))
+#define MAP_TRAINER_TOWER_5F (5 | (2 << 8))
+#define MAP_TRAINER_TOWER_6F (6 | (2 << 8))
+#define MAP_TRAINER_TOWER_7F (7 | (2 << 8))
+#define MAP_TRAINER_TOWER_8F (8 | (2 << 8))
+#define MAP_TRAINER_TOWER_ROOF (9 | (2 << 8))
+#define MAP_TRAINER_TOWER_LOBBY (10 | (2 << 8))
+#define MAP_TRAINER_TOWER_ELEVATOR (11 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE (12 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ROOM1 (13 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ROOM2 (14 | (2 << 8))
diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h
index c99e6483b..2d15fb97c 100644
--- a/include/constants/metatile_labels.h
+++ b/include/constants/metatile_labels.h
@@ -4,6 +4,10 @@
// General
#define METATILE_General_CalmWater 0x12B
+// PokeMart
+#define METATILE_Shop_CounterMid_Top 0x2BF
+#define METATILE_Shop_CounterMid_Bottom 0x2C0
+
// Vermilion Gym
#define METATILE_VermilionGym_Floor 0x281
#define METATILE_VermilionGym_Beam_MidTop 0x285
@@ -90,5 +94,8 @@
// gTileset_82D504C. Below metatile probably needs generic name
#define METATILE_MtEmber_CaveEntrance 0x346
+// Trainer Tower
+#define METATILE_TrainerTower_Floor_ShadeBottomLeft 0x287
+#define METATILE_TrainerTower_CounterBarrier 0x2B4
#endif // GUARD_METATILE_LABELS_H
diff --git a/include/constants/object_events.h b/include/constants/object_events.h
index 60783a793..d6f33b33c 100644
--- a/include/constants/object_events.h
+++ b/include/constants/object_events.h
@@ -35,7 +35,7 @@
#define OBJECT_EVENT_GFX_WOMAN_3 31
#define OBJECT_EVENT_GFX_OLD_MAN_1 32
#define OBJECT_EVENT_GFX_OLD_MAN_2 33
-#define OBJECT_EVENT_GFX_VIRIDIAN_DRUNK 34
+#define OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN 34
#define OBJECT_EVENT_GFX_OLD_WOMAN 35
#define OBJECT_EVENT_GFX_TUBER_M_1 36
#define OBJECT_EVENT_GFX_TUBER_F 37
diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h
index 28ce39cd3..0c958ccc5 100644
--- a/include/constants/party_menu.h
+++ b/include/constants/party_menu.h
@@ -64,7 +64,6 @@
#define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board
#define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade
#define PARTY_MENU_TYPE_MINIGAME 11
-#define PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS 12
#define PARTY_ACTION_CHOOSE_MON 0
#define PARTY_ACTION_SEND_OUT 1
diff --git a/include/constants/trainer_tower.h b/include/constants/trainer_tower.h
new file mode 100644
index 000000000..6372a30e8
--- /dev/null
+++ b/include/constants/trainer_tower.h
@@ -0,0 +1,46 @@
+#ifndef GUARD_CONSTANTS_TRAINER_TOWER_H
+#define GUARD_CONSTANTS_TRAINER_TOWER_H
+
+#define CHALLENGE_TYPE_SINGLE 0
+#define CHALLENGE_TYPE_DOUBLE 1
+#define CHALLENGE_TYPE_KNOCKOUT 2
+// Mixed challenges use one of the above 3 for each floor
+
+#define CHALLENGE_STATUS_LOST 0
+#define CHALLENGE_STATUS_UNK 1 // Never set, possibly e-Card related
+#define CHALLENGE_STATUS_NORMAL 2 // Not started or ongoing
+
+#define MAX_TRAINER_TOWER_FLOORS 8
+
+#define MAX_TRAINERS_PER_FLOOR 3
+
+#define TRAINER_TOWER_FUNC_INIT_FLOOR 0
+#define TRAINER_TOWER_FUNC_GET_SPEECH 1
+#define TRAINER_TOWER_FUNC_DO_BATTLE 2
+#define TRAINER_TOWER_FUNC_GET_CHALLENGE_TYPE 3
+#define TRAINER_TOWER_FUNC_CLEARED_FLOOR 4
+#define TRAINER_TOWER_FUNC_GET_FLOOR_CLEARED 5
+#define TRAINER_TOWER_FUNC_START_CHALLENGE 6
+#define TRAINER_TOWER_FUNC_GET_OWNER_STATE 7
+#define TRAINER_TOWER_FUNC_GIVE_PRIZE 8
+#define TRAINER_TOWER_FUNC_CHECK_FINAL_TIME 9
+#define TRAINER_TOWER_FUNC_RESUME_TIMER 10
+#define TRAINER_TOWER_FUNC_SET_LOST 11
+#define TRAINER_TOWER_FUNC_GET_CHALLENGE_STATUS 12
+#define TRAINER_TOWER_FUNC_GET_TIME 13
+#define TRAINER_TOWER_FUNC_SHOW_RESULTS 14
+#define TRAINER_TOWER_FUNC_CLOSE_RESULTS 15
+#define TRAINER_TOWER_FUNC_CHECK_DOUBLES 16
+#define TRAINER_TOWER_FUNC_GET_NUM_FLOORS 17
+#define TRAINER_TOWER_FUNC_SHOULD_WARP_TO_COUNTER 18
+#define TRAINER_TOWER_FUNC_ENCOUNTER_MUSIC 19
+#define TRAINER_TOWER_FUNC_GET_BEAT_CHALLENGE 20
+
+#define TRAINER_TOWER_TEXT_INTRO 2
+#define TRAINER_TOWER_TEXT_PLAYER_LOST 3
+#define TRAINER_TOWER_TEXT_PLAYER_WON 4
+#define TRAINER_TOWER_TEXT_AFTER 5
+
+#define TRAINER_TOWER_MAX_TIME 215999 // 60 * 60 * 60 - 1
+
+#endif //GUARD_CONSTANTS_TRAINER_TOWER_H
diff --git a/include/constants/union_room.h b/include/constants/union_room.h
index 021424773..b23860645 100644
--- a/include/constants/union_room.h
+++ b/include/constants/union_room.h
@@ -1,6 +1,48 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H
+#define UNION_ROOM_SPAWN_NONE 0
+#define UNION_ROOM_SPAWN_IN 1
+#define UNION_ROOM_SPAWN_OUT 2
+
+#define ACTIVITY_NONE 0
+#define ACTIVITY_BATTLE 1
+#define ACTIVITY_DBLBATTLE 2
+#define ACTIVITY_MLTBATTLE 3
+#define ACTIVITY_TRADE 4
+#define ACTIVITY_CHAT 5
+#define ACTIVITY_WCARD 6
+#define ACTIVITY_WNEWS 7
+#define ACTIVITY_CARD 8
+#define ACTIVITY_PJUMP 9
+#define ACTIVITY_BCRUSH 10
+#define ACTIVITY_BPICK 11
+#define ACTIVITY_SEARCH 12
+#define ACTIVITY_SPINTRADE 13
+#define ACTIVITY_ITEMTRADE 14
+
+// Player response
+#define ACTIVITY_ACCEPT 17
+#define ACTIVITY_DECLINE 18
+
+#define ACTIVITY_NPCTALK 19
+#define ACTIVITY_PLYRTALK 20
+
+// Duplicate IDs?
+#define ACTIVITY_WCARD2 21
+#define ACTIVITY_WNEWS2 22
+
+#define IN_UNION_ROOM 0x40
+
+// Used in UR_AddTextPrinterParameterized
+#define UR_COLOR_DKE_WHT_LTE 0
+#define UR_COLOR_RED_WHT_LTR 1
+#define UR_COLOR_GRN_WHT_LTG 2
+#define UR_COLOR_WHT_WHT_LTE 3
+#define UR_COLOR_WHT_DKE_LTE 4
+#define UR_COLOR_GRN_DN6_LTB 5
+#define UR_COLOR_DN5_DN6_LTB 6
+
#define LINK_GROUP_SINGLE_BATTLE 0
#define LINK_GROUP_DOUBLE_BATTLE 1
#define LINK_GROUP_MULTI_BATTLE 2
@@ -12,4 +54,7 @@
#define LINK_GROUP_WONDER_NEWS 8
#define NUM_LINK_GROUP_TYPES 9
+#define LINK_GROUP_UNION_ROOM_RESUME 9
+#define LINK_GROUP_UNION_ROOM_INIT 10
+
#endif //GUARD_CONSTANTS_UNION_ROOM_H
diff --git a/include/data_8479668.h b/include/data_8479668.h
new file mode 100644
index 000000000..1a1f44267
--- /dev/null
+++ b/include/data_8479668.h
@@ -0,0 +1,35 @@
+#ifndef GUARD_DATA_8479668_H
+#define GUARD_DATA_8479668_H
+
+extern const u8 gText_UnionRoomChatKeyboard_ABCDE[];
+extern const u8 gText_UnionRoomChatKeyboard_FGHIJ[];
+extern const u8 gText_UnionRoomChatKeyboard_KLMNO[];
+extern const u8 gText_UnionRoomChatKeyboard_PQRST[];
+extern const u8 gText_UnionRoomChatKeyboard_UVWXY[];
+extern const u8 gText_UnionRoomChatKeyboard_Z[];
+extern const u8 gText_UnionRoomChatKeyboard_01234Upper[];
+extern const u8 gText_UnionRoomChatKeyboard_56789Upper[];
+extern const u8 gText_UnionRoomChatKeyboard_PunctuationUpper[];
+extern const u8 gText_UnionRoomChatKeyboard_SymbolsUpper[];
+extern const u8 gText_UnionRoomChatKeyboard_abcde[];
+extern const u8 gText_UnionRoomChatKeyboard_fghij[];
+extern const u8 gText_UnionRoomChatKeyboard_klmno[];
+extern const u8 gText_UnionRoomChatKeyboard_pqrst[];
+extern const u8 gText_UnionRoomChatKeyboard_uvwxy[];
+extern const u8 gText_UnionRoomChatKeyboard_z[];
+extern const u8 gText_UnionRoomChatKeyboard_01234Lower[];
+extern const u8 gText_UnionRoomChatKeyboard_56789Lower[];
+extern const u8 gText_UnionRoomChatKeyboard_PunctuationLower[];
+extern const u8 gText_UnionRoomChatKeyboard_SymbolsLower[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji1[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji2[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji3[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji4[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji5[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji6[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji7[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji8[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji9[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji10[];
+
+#endif //GUARD_DATA_8479668_H
diff --git a/include/digit_obj_util.h b/include/digit_obj_util.h
new file mode 100644
index 000000000..b2ecd42bc
--- /dev/null
+++ b/include/digit_obj_util.h
@@ -0,0 +1,24 @@
+#ifndef GUARD_DIGIT_OBJ_UTIL_H
+#define GUARD_DIGIT_OBJ_UTIL_H
+
+struct DigitObjUtilTemplate
+{
+ u8 strConvMode:2;
+ u8 shape:2;
+ u8 size:2;
+ u8 priority:2;
+ u8 oamCount;
+ u8 xDelta;
+ s16 x;
+ s16 y;
+ const struct SpriteSheet *spriteSheet;
+ const struct SpritePalette *spritePal;
+};
+
+void DigitObjUtil_Teardown(void);
+bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template);
+void DigitObjUtil_PrintNumOn(u32 id, s32 num);
+void DigitObjUtil_DeletePrinter(u32 id);
+void DigitObjUtil_HideOrShow(u32 id, bool32 hide);
+
+#endif //GUARD_DIGIT_OBJ_UTIL_H
diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
index 59736ba7a..47cece996 100644
--- a/include/dodrio_berry_picking.h
+++ b/include/dodrio_berry_picking.h
@@ -1,6 +1,6 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H
-void sub_81507FC(u16 species, MainCallback callback);
+void StartDodrioBerryPicking(u16 species, MainCallback callback);
#endif //GUARD_DODRIO_BERRY_PICKING_H
diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h
new file mode 100644
index 000000000..dab97470a
--- /dev/null
+++ b/include/ereader_helpers.h
@@ -0,0 +1,36 @@
+#ifndef GUARD_EREADER_HELPERS_H
+#define GUARD_EREADER_HELPERS_H
+
+enum {
+ EREADER_XFR_STATE_INIT = 0,
+ EREADER_XFR_STATE_HANDSHAKE,
+ EREADER_XFR_STATE_START,
+ EREADER_XFR_STATE_TRANSFER,
+ EREADER_XFR_STATE_TRANSFER_DONE,
+ EREADER_XFR_STATE_CHECKSUM,
+ EREADER_XFR_STATE_DONE
+};
+
+#define EREADER_XFER_EXE 1
+#define EREADER_XFER_CHK 2
+#define EREADER_XFER_SHIFT 0
+#define EREADER_XFER_MASK 3
+
+#define EREADER_CANCEL_TIMEOUT 1
+#define EREADER_CANCEL_KEY 2
+#define EREADER_CANCEL_MASK 0xC
+#define EREADER_CANCEL_SHIFT 2
+
+#define EREADER_CHECKSUM_OK 1
+#define EREADER_CHECKSUM_ERR 2
+#define EREADER_CHECKSUM_MASK 0x30
+#define EREADER_CHECKSUM_SHIFT 4
+
+void EReaderHelper_SerialCallback(void);
+void EReaderHelper_Timer3Callback(void);
+void EReaderHelper_SaveRegsState(void);
+void EReaderHelper_ClearsSendRecvMgr(void);
+void EReaderHelper_RestoreRegsState(void);
+u16 EReaderHandleTransfer(u8 mode, size_t size, const void * src, void * dest);
+
+#endif //GUARD_EREADER_HELPERS_H
diff --git a/include/event_data.h b/include/event_data.h
index 7987720f1..e635cbc6d 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -54,8 +54,8 @@ bool8 FlagGet(u16 id);
u16 * GetVarPointer(u16 id);
bool32 IsMysteryGiftEnabled(void);
void ResetSpecialVars(void);
-void sub_806E2D0(void);
-void sub_806E370(void);
+void ResetMysteryEventFlags(void);
+void ResetMysteryEventVars(void);
bool32 IsNationalPokedexEnabled(void);
void sub_806E190(void);
diff --git a/include/event_object_80688E4.h b/include/event_object_80688E4.h
index 36040e0a5..241d48c3a 100644
--- a/include/event_object_80688E4.h
+++ b/include/event_object_80688E4.h
@@ -4,12 +4,12 @@
#include "global.h"
void FreezeObjectEvents(void);
-void FreezeObjectEvent(struct ObjectEvent *);
+bool8 FreezeObjectEvent(struct ObjectEvent *);
void FreezeObjectEventsExceptOne(u8 objEventId);
-void sub_8069124(u8 a0, bool8 a1);
-u32 sub_806916C(u8 a0);
-void sub_80691A4(u8 a0, u8 a1);
-void sub_8069094(u8 a0, u8 a1);
-bool32 sub_8069294(u8 a0);
+void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction);
+void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible);
+bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
+void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
+bool32 RfuUnionObjectIsWarping(u8 objectEventId);
#endif // GUARD_EVENT_OBJECT_80688E4_H
diff --git a/include/event_object_lock.h b/include/event_object_lock.h
index 5c65585b5..1a0f452fc 100644
--- a/include/event_object_lock.h
+++ b/include/event_object_lock.h
@@ -11,6 +11,6 @@ void sub_8098630(void);
bool8 sub_8098734(void);
void sub_80696C0(void);
bool8 walkrun_is_standing_still(void);
-void sub_80696F0(void);
+void UnionRoom_UnlockPlayerAndChatPartner(void);
#endif // GUARD_EVENT_OBJECT_LOCK_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index f2e7bd325..650f137d9 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -97,7 +97,7 @@ u8 sub_8063F84(u8 direction);
u8 GetTrainerFacingDirectionMovementType(u8 direction);
void CameraObjectSetFollowedObjectId(u8 spriteId);
void UnfreezeObjectEvents(void);
-void sub_8069058(u8, u8);
+void TurnObjectEvent(u8, u8);
// Exported data declarations
@@ -105,5 +105,6 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
extern const struct SpritePalette gUnknown_83A5348;
extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[];
extern const struct OamData gObjectEventBaseOam_32x32;
+extern const struct UCoords16 gUnknown_83A64C8[];
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index b8da8f3e0..f026cb57a 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1170,6 +1170,10 @@ extern const u8 EventScript_ResetAllMapFlags[];
// player_pc
extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[];
+// field_screen_effect
+extern const u8 EventScript_MomHeal[];
+extern const u8 EventScript_AfterWhiteOutHeal[];
+
// start_menu
extern const u8 gText_WouldYouLikeToSaveTheGame[];
extern const u8 gText_AlreadySaveFile_WouldLikeToOverwrite[];
diff --git a/include/field_effect.h b/include/field_effect.h
index c2d14d43c..3e30fa897 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -8,7 +8,7 @@ extern u32 gFieldEffectArguments[8];
extern void (*gPostMenuFieldCallback)(void);
extern bool8 (*gFieldCallback2)(void);
-u8 FieldEffectStart(u8);
+u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id);
void sub_80B69DC(void);
void CreateTeleportFieldEffectTask(void);
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index d27d0e54a..6683f5e2e 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -20,5 +20,6 @@ void FadeTransition_FadeInOnReturnToStartMenu(void);
void sub_807DCE4(void);
bool32 sub_807E418(void);
+void palette_bg_faded_fill_black(void);
#endif // GUARD_FIELD_FADETRANSITION_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index e48745a7b..ca7625782 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -10,5 +10,6 @@ void sub_807E3EC(void);
void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
void sub_807DC00(void);
+void sub_807F5F0(void);
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 91a45d8c5..406ec2959 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -31,6 +31,6 @@ void sub_8059948(u8 a0, u8 a1);
void save_serialize_map(void);
u32 sub_8058F1C(u32 original, u8 bit);
u32 sub_8058F48(s16 x, s16 y, u8 z);
-void sub_8059024(s32 x, s32 y, bool32 arg2);
+void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
#endif //GUARD_FIELDMAP_H
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 01cd992ec..e0053fe88 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -168,62 +168,58 @@ struct MapHeader
struct ObjectEvent
{
- /*0x00*/ u32 active:1;
- u32 mapobj_bit_1:1;
- u32 mapobj_bit_2:1;
- u32 mapobj_bit_3:1;
- u32 mapobj_bit_4:1;
- u32 mapobj_bit_5:1;
- u32 mapobj_bit_6:1;
- u32 mapobj_bit_7:1;
- /*0x01*/ u32 mapobj_bit_8:1;
- u32 mapobj_bit_9:1;
- u32 mapobj_bit_10:1;
- u32 mapobj_bit_11:1;
- u32 mapobj_bit_12:1;
- u32 mapobj_bit_13:1;
- u32 mapobj_bit_14:1;
- u32 mapobj_bit_15:1;
- /*0x02*/ u32 mapobj_bit_16:1;
- u32 mapobj_bit_17:1;
- u32 mapobj_bit_18:1;
- u32 mapobj_bit_19:1;
- u32 mapobj_bit_20:1;
- u32 mapobj_bit_21:1;
- u32 mapobj_bit_22:1;
- u32 mapobj_bit_23:1;
- /*0x03*/ u32 mapobj_bit_24:1;
- u32 mapobj_bit_25:1;
- u32 mapobj_bit_26:1;
- u32 mapobj_bit_27:1;
- u32 mapobj_bit_28:1;
- u32 mapobj_bit_29:1;
- u32 mapobj_bit_30:1;
- u32 mapobj_bit_31:1;
- /*0x04*/ u8 spriteId;
- /*0x05*/ u8 graphicsId;
- /*0x06*/ u8 animPattern;
- /*0x07*/ u8 trainerType;
- /*0x08*/ u8 localId;
- /*0x09*/ u8 mapNum;
- /*0x0A*/ u8 mapGroup;
- /*0x0B*/ u8 mapobj_unk_0B_0:4;
- u8 elevation:4;
- /*0x0C*/ struct Coords16 coords1;
- /*0x10*/ struct Coords16 coords2;
- /*0x14*/ struct Coords16 coords3;
- /*0x18*/ u8 facingDirection:4; //current direction?
- /*0x18*/ u8 placeholder18:4;
- /*0x19*/ union ObjectEventRange range;
- /*0x1A*/ u8 mapobj_unk_1A;
- /*0x1B*/ u8 mapobj_unk_1B;
- /*0x1C*/ u8 mapobj_unk_1C;
- /*0x1D*/ u8 trainerRange_berryTreeId;
- /*0x1E*/ u8 mapobj_unk_1E;
- /*0x1F*/ u8 mapobj_unk_1F;
- /*0x20*/ u8 mapobj_unk_20;
- /*0x21*/ u8 mapobj_unk_21;
- /*0x22*/ u8 animId;
+ /*0x00*/ /* 0*/ u32 active:1;
+ /* 1*/ u32 singleMovementActive:1;
+ /* 2*/ u32 triggerGroundEffectsOnMove:1;
+ /* 3*/ u32 triggerGroundEffectsOnStop:1;
+ /* 4*/ u32 disableCoveringGroundEffects:1;
+ /* 5*/ u32 landingJump:1;
+ /* 6*/ u32 heldMovementActive:1;
+ /* 7*/ u32 heldMovementFinished:1;
+ /*0x01*/ /* 8*/ u32 frozen:1;
+ /* 9*/ u32 facingDirectionLocked:1;
+ /*10*/ u32 disableAnim:1;
+ /*11*/ u32 enableAnim:1;
+ /*12*/ u32 inanimate:1;
+ /*13*/ u32 invisible:1;
+ /*14*/ u32 offScreen:1;
+ /*15*/ u32 trackedByCamera:1;
+ /*0x02*/ /*16*/ u32 isPlayer:1;
+ /*17*/ u32 hasReflection:1;
+ /*18*/ u32 inShortGrass:1;
+ /*19*/ u32 inShallowFlowingWater:1;
+ /*20*/ u32 inSandPile:1;
+ /*21*/ u32 inHotSprings:1;
+ /*22*/ u32 hasShadow:1;
+ /*23*/ u32 spriteAnimPausedBackup:1;
+ /*0x03*/ /*24*/ u32 spriteAffineAnimPausedBackup:1;
+ /*25*/ u32 disableJumpLandingGroundEffect:1;
+ /*26*/ u32 fixedPriority:1;
+ /*27*/ u32 hideReflection:1;
+ /*0x04*/ u8 spriteId;
+ /*0x05*/ u8 graphicsId;
+ /*0x06*/ u8 animPattern;
+ /*0x07*/ u8 trainerType;
+ /*0x08*/ u8 localId;
+ /*0x09*/ u8 mapNum;
+ /*0x0A*/ u8 mapGroup;
+ /*0x0B*/ u8 mapobj_unk_0B_0:4;
+ u8 elevation:4;
+ /*0x0C*/ struct Coords16 coords1;
+ /*0x10*/ struct Coords16 coords2;
+ /*0x14*/ struct Coords16 coords3;
+ /*0x18*/ u8 facingDirection:4; //current direction?
+ /*0x18*/ u8 placeholder18:4;
+ /*0x19*/ union ObjectEventRange range;
+ /*0x1A*/ u8 mapobj_unk_1A;
+ /*0x1B*/ u8 mapobj_unk_1B;
+ /*0x1C*/ u8 mapobj_unk_1C;
+ /*0x1D*/ u8 trainerRange_berryTreeId;
+ /*0x1E*/ u8 mapobj_unk_1E;
+ /*0x1F*/ u8 mapobj_unk_1F;
+ /*0x20*/ u8 mapobj_unk_20;
+ /*0x21*/ u8 mapobj_unk_21;
+ /*0x22*/ u8 animId;
/*size = 0x24*/
};
diff --git a/include/global.h b/include/global.h
index 180a1e0a3..54d8fdec3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -74,8 +74,8 @@
// GameFreak never ceases to amaze.
// TODO: Propagate use of this macro
#define TEST_BUTTON(field, button) ({(field) & (button);})
-#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
-#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
+#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
+#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
extern u8 gStringVar1[];
@@ -168,13 +168,6 @@ struct BerryPickingResults // possibly used in the game itself? Size may be wron
u8 field_F;
};
-struct PyramidBag
-{
- u16 items_Lvl50[10];
- u16 items_OpenLvl[10];
- u8 quantity[10];
-};
-
struct BerryCrush
{
u16 berryCrushResults[4];
@@ -182,13 +175,13 @@ struct BerryCrush
u32 unk;
};
-#define PLAYER_NAME_LENGTH 8
+#define PLAYER_NAME_LENGTH 7
#define LINK_B_RECORDS_COUNT 5
struct LinkBattleRecord
{
- u8 name[PLAYER_NAME_LENGTH];
+ u8 name[PLAYER_NAME_LENGTH + 1];
u16 trainerId;
u16 wins;
u16 losses;
@@ -261,7 +254,7 @@ struct BattleTowerData // Leftover from R/S
struct SaveBlock2
{
- /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH];
+ /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x008*/ u8 playerGender; // MALE, FEMALE
/*0x009*/ u8 specialSaveWarpFlags;
/*0x00A*/ u8 playerTrainerId[4];
@@ -312,7 +305,7 @@ struct SecretBaseRecord
/*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 sbr_field_1_5:1;
/*0x1A9D*/ u8 sbr_field_1_6:2;
- /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH to 7
+ /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
/*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 sbr_field_e;
@@ -398,41 +391,68 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
-struct UnkMauvilleOldManStruct
+struct MauvilleManCommon
+{
+ u8 id;
+};
+
+struct MauvilleManBard
{
- u8 unk_2D94;
- u8 unk_2D95;
- /*0x2D96*/ u16 mauvilleOldMan_ecArray[6];
- /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6];
- /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x2DB6*/ u8 filler_2DB6[0x3];
- /*0x2DB9*/ u8 playerTrainerId[4];
- u8 unk_2DBD;
+ /*0x00*/ u8 id;
+ /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH];
+ /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH];
+ /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
+ /*0x22*/ u8 filler_2DB6[0x3];
+ /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
+ /*0x29*/ bool8 hasChangedSong;
+ /*0x2A*/ u8 language;
}; /*size = 0x2C*/
-struct UnkMauvilleOldManStruct2
+struct MauvilleManStoryteller
{
- u8 filler0;
- u8 unk1;
- u8 unk2;
- u16 mauvilleOldMan_ecArray[10];
- u8 mauvilleOldMan_ecArray2[12];
- u8 fillerF[0x2];
+ u8 id;
+ bool8 alreadyRecorded;
+ u8 filler2[2];
+ u8 gameStatIDs[NUM_STORYTELLER_TALES];
+ u8 trainerNames[NUM_STORYTELLER_TALES][PLAYER_NAME_LENGTH];
+ u8 statValues[NUM_STORYTELLER_TALES][4];
+ u8 language[NUM_STORYTELLER_TALES];
+};
+
+struct MauvilleManGiddy
+{
+ /*0x00*/ u8 id;
+ /*0x01*/ u8 taleCounter;
+ /*0x02*/ u8 questionNum;
+ /*0x04*/ u16 randomWords[10];
+ /*0x18*/ u8 questionList[8];
+ /*0x20*/ u8 language;
}; /*size = 0x2C*/
+struct MauvilleManHipster
+{
+ u8 id;
+ bool8 alreadySpoken;
+ u8 language;
+};
+
struct MauvilleOldManTrader
{
- u8 unk0;
- u8 unk1[4];
- u8 unk5[4][11];
- u8 unk31;
+ u8 id;
+ u8 decorIds[NUM_TRADER_ITEMS];
+ u8 playerNames[NUM_TRADER_ITEMS][11];
+ u8 alreadyTraded;
+ u8 language[NUM_TRADER_ITEMS];
};
typedef union OldMan
{
- struct UnkMauvilleOldManStruct oldMan1;
- struct UnkMauvilleOldManStruct2 oldMan2;
+ struct MauvilleManCommon common;
+ struct MauvilleManBard bard;
+ struct MauvilleManGiddy giddy;
+ struct MauvilleManHipster hipster;
struct MauvilleOldManTrader trader;
+ struct MauvilleManStoryteller storyteller;
u8 filler[0x40];
} OldMan;
@@ -564,22 +584,22 @@ union QuestLogMovement
struct QuestLogObjectEvent
{
/*0x00*/ u8 active:1;
- /*0x00*/ u8 mapobj_bit_3:1;
- /*0x00*/ u8 mapobj_bit_4:1;
- /*0x00*/ u8 mapobj_bit_5:1;
- /*0x00*/ u8 mapobj_bit_8:1;
- /*0x00*/ u8 mapobj_bit_9:1;
- /*0x00*/ u8 mapobj_bit_10:1;
- /*0x00*/ u8 mapobj_bit_11:1;
- /*0x01*/ u8 mapobj_bit_12:1;
- /*0x01*/ u8 mapobj_bit_13:1;
- /*0x01*/ u8 mapobj_bit_14:1;
- /*0x01*/ u8 mapobj_bit_15:1;
- /*0x01*/ u8 mapobj_bit_16:1;
- /*0x01*/ u8 mapobj_bit_23:1;
- /*0x01*/ u8 mapobj_bit_24:1;
- /*0x01*/ u8 mapobj_bit_25:1;
- /*0x02*/ u8 mapobj_bit_26:1;
+ /*0x00*/ u8 triggerGroundEffectsOnStop:1;
+ /*0x00*/ u8 disableCoveringGroundEffects:1;
+ /*0x00*/ u8 landingJump:1;
+ /*0x00*/ u8 frozen:1;
+ /*0x00*/ u8 facingDirectionLocked:1;
+ /*0x00*/ u8 disableAnim:1;
+ /*0x00*/ u8 enableAnim:1;
+ /*0x01*/ u8 inanimate:1;
+ /*0x01*/ u8 invisible:1;
+ /*0x01*/ u8 offScreen:1;
+ /*0x01*/ u8 trackedByCamera:1;
+ /*0x01*/ u8 isPlayer:1;
+ /*0x01*/ u8 spriteAnimPausedBackup:1;
+ /*0x01*/ u8 spriteAffineAnimPausedBackup:1;
+ /*0x01*/ u8 disableJumpLandingGroundEffect:1;
+ /*0x02*/ u8 fixedPriority:1;
/*0x02*/ u8 mapobj_unk_18:4;
/*0x02*/ u8 unused_02_5:3;
/*0x03*/ u8 mapobj_unk_0B_0:4;
@@ -631,8 +651,8 @@ struct FameCheckerSaveData
struct MEWonderNewsData
{
- u16 unk_00;
- u8 unk_02;
+ u16 newsId;
+ u8 shareState;
u8 unk_03;
u8 unk_04[40];
u8 unk_2C[10][40];
@@ -646,13 +666,13 @@ struct MEWonderNewsStruct
struct MEWonderCardData
{
- u16 unk_00;
+ u16 cardId;
u16 unk_02;
u32 unk_04;
u8 unk_08_0:2;
u8 unk_08_2:4;
- u8 unk_08_6:2;
- u8 unk_09;
+ u8 shareState:2;
+ u8 recvMonCapacity;
u8 unk_0A[40];
u8 unk_32[40];
u8 unk_5A[4][40];
@@ -668,11 +688,12 @@ struct MEWonderCardStruct
struct MEventBuffer_3430_Sub
{
- u16 unk_00;
- u16 unk_02;
- u16 unk_04;
+ u16 linkWins;
+ u16 linkLosses;
+ u16 linkTrades;
u16 unk_06;
- u16 unk_08[2][7];
+ u16 distributedMons[2][7]; // [0][x] = species
+ // [1][x] = ???
};
struct MEventBuffer_3430
@@ -691,19 +712,18 @@ struct MEventBuffers
/*0x344 0x3464*/ u32 unk_344[2][5];
}; // 0x36C 0x348C
-struct TrainerTowerLog
+struct TrainerTower
{
- u32 unk0;
- u32 unk4;
- u8 unk8;
+ u32 timer;
+ u32 bestTime;
+ u8 floorsCleared;
u8 unk9;
- u8 unkA_0:1;
- u8 unkA_1:1;
- u8 unkA_2:1;
- u8 unkA_3:1;
- u8 unkA_4:1;
- u8 unkA_5:1;
- u8 unkA_6:2;
+ bool8 receivedPrize:1;
+ bool8 checkedFinalTime:1;
+ bool8 spokeToOwner:1;
+ bool8 hasLost:1;
+ bool8 unkA_4:1;
+ bool8 validated:1;
};
struct TrainerRematchState
@@ -715,9 +735,11 @@ struct TrainerRematchState
struct TrainerNameRecord
{
u32 trainerId;
- u8 trainerName[PLAYER_NAME_LENGTH];
+ u8 trainerName[PLAYER_NAME_LENGTH + 1];
};
+#define UNION_ROOM_KB_ROW_COUNT 10
+
struct SaveBlock1
{
/*0x0000*/ struct Coords16 pos;
@@ -770,14 +792,15 @@ struct SaveBlock1
/*0x361C*/ struct RamScript ramScript;
/*0x3A08*/ u8 filler3A08[16];
/*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
- /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
+ /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
- /*0x3A94*/ u8 filler3A94[0x114];
+ /*0x3A94*/ u8 filler3A94[0x40];
+ /*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon;
/*0x3D24*/ u8 filler3D24[0x10];
- /*0x3D34*/ u32 unkArrayIdx;
- /*0x3D38*/ struct TrainerTowerLog unkArray[4];
+ /*0x3D34*/ u32 towerChallengeId;
+ /*0x3D38*/ struct TrainerTower trainerTower[NUM_TOWER_CHALLENGE_TYPES];
};
struct MapPosition
diff --git a/include/graphics.h b/include/graphics.h
index e87acb556..467a1d461 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4864,4 +4864,15 @@ extern const u32 gUnknown_8E83444[];
extern const u32 gBagBgPalette[];
extern const u32 gBagBgPalette_FemaleOverride[];
+// union_room_chat_display
+extern const u16 gUnionRoomChatPanelBgPal_7[];
+extern const u32 gUnionRoomChatPanelBgTiles[];
+extern const u32 gUnionRoomChatPanelBgMap[];
+extern const u16 gLinkMiscMenu_Pal[];
+extern const u32 gLinkMiscMenu_Gfx[];
+extern const u32 gLinkMiscMenu_Tilemap[];
+
+// union_room_chat_objects
+extern const u32 gUnionRoomChatIcons[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/heal_location.h b/include/heal_location.h
index 0143b8158..aaa2178c6 100644
--- a/include/heal_location.h
+++ b/include/heal_location.h
@@ -14,8 +14,8 @@ struct HealLocation
{
s8 group;
s8 map;
- u16 x;
- u16 y;
+ s16 x;
+ s16 y;
};
// Exported RAM declarations
diff --git a/include/help_system.h b/include/help_system.h
index 273b5e119..c5ae5e5fa 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -17,16 +17,16 @@ struct HelpSystemListMenu_sub
struct HelpSystemListMenu
{
struct HelpSystemListMenu_sub sub;
- u8 field_0C;
- u8 field_0D;
- u8 field_0E;
+ u8 itemsAbove;
+ u8 cursorPos;
+ u8 state;
u8 filler_10[0xC];
};
extern struct HelpSystemListMenu gHelpSystemListMenu;
extern struct ListMenuItem gHelpSystemListMenuItems[];
extern bool8 gHelpSystemEnabled;
-extern u8 gUnknown_203F175;
+extern bool8 gHelpSystemToggleWithRButtonDisabled;
// help_system_812B1E0
void HelpSystem_SetSomeVariable(u8);
@@ -35,19 +35,19 @@ bool8 sub_812B40C(void);
bool8 sub_812B45C(void);
void HelpSystem_Disable(void);
void HelpSystem_Enable(void);
-void sub_812B4B8(void);
-bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+void HelpSystem_EnableToggleWithRButton(void);
+bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
void sub_812BDEC(void);
-bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
bool8 sub_812BF88(void);
// help_system
@@ -92,5 +92,6 @@ bool8 MoveCursor(u8 by, u8 dirn);
void HelpSystem_BackupSomeVariable(void);
void HelpSystem_RestoreSomeVariable(void);
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
+void HelpSystem_DisableToggleWithRButton(void);
#endif //GUARD_HELP_SYSTEM_H
diff --git a/include/librfu.h b/include/librfu.h
index 97fd8044e..50dd1c3db 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -4,11 +4,8 @@
#include "global.h"
#include "main.h"
-/* TODOs:
- * - split files
+/* TODOs:
* - documentation
- * - decompile librfu_intr.s once arm support is back again
- (for internal structs not documented in SDK)
* - check if any field needs to be volatile
* - check if field names make sense
*/
@@ -71,6 +68,7 @@
#define ID_CPR_POLL_REQ 0x0033
#define ID_CPR_END_REQ 0x0034
#define ID_UNK35_REQ 0x0035 // not defined in SDK header
+#define ID_UNK36_REQ 0x0036 // not defined in SDK header
#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037
#define ID_STOP_MODE_REQ 0x003d
#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails.
@@ -90,8 +88,13 @@
#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak)
+#if LIBRFU_VERSION >= 1028
#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
+#else
+#define RFU_API_BUFF_SIZE_RAM 0x0e64 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
+#define RFU_API_BUFF_SIZE_ROM 0x0504 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
+#endif
#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device
@@ -314,10 +317,10 @@ struct STWIStatus
u8 unk_17;
void (*callbackM)();
void (*callbackS)(u16);
- void (*unk_20)(void);
+ void (*callbackID)(void);
union RfuPacket *txPacket;
union RfuPacket *rxPacket;
- vu8 unk_2c;
+ vu8 sending;
};
// This struct is used as u8 array in SDK.
@@ -452,54 +455,32 @@ struct RfuStatic
u8 nullFrameCount;
u8 emberCount;
u8 SCStartFlag;
- u8 linkEmergencyFlag[4];
- u8 lsFixedCount[4];
- u16 cidBak[4];
- u16 unk_1a;
+ u8 linkEmergencyFlag[RFU_CHILD_MAX];
+ u8 lsFixedCount[RFU_CHILD_MAX];
+ u16 cidBak[RFU_CHILD_MAX];
+ u16 linkEmergencyLimit;
u16 reqResult;
u16 tryPid;
u16 watchdogTimer;
u32 totalPacketSize;
};
-struct RfuSIO32Id
-{
- u8 unk0;
- u8 unk1;
- u16 unk2;
- u16 unk4;
- u16 unk6;
- u16 unk8; // unused
- u16 unkA;
-};
-
-struct RfuAPIBuffer
-{
- struct RfuLinkStatus linkStatus;
- struct RfuStatic static_;
- struct RfuFixed fixed;
- struct RfuSlotStatusNI NI[RFU_CHILD_MAX];
- struct RfuSlotStatusUNI UNI[RFU_CHILD_MAX];
- struct RfuIntrStruct intr;
-};
-
extern struct STWIStatus *gSTWIStatus;
extern struct RfuLinkStatus *gRfuLinkStatus;
extern struct RfuStatic *gRfuStatic;
extern struct RfuFixed *gRfuFixed;
extern struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
-extern struct RfuSIO32Id gRfuSIO32Id;
// librfu_s32id
-s32 AgbRFU_checkID(u8);
+s32 AgbRFU_checkID(u8 maxTries);
// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation.
// librfu_rfu
// API Initialization and Initial Settings
// API Initialization
-u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
+u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
// Set Timer Interrupt
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
// Resident Function called from within a V-Blank Interrupt
@@ -600,7 +581,7 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void);
// For Debug
// Obtain address of the SWTI-layer receive buffer
-struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
+u8 *rfu_getSTWIRecvBuffer(void);
// Obtain RFU state
void rfu_REQ_RFUStatus(void);
u16 rfu_getRFUStatus(u8 *rfuState);
@@ -626,14 +607,14 @@ void STWI_send_DataRxREQ(void);
void STWI_send_MS_ChangeREQ(void);
void STWI_send_StopModeREQ(void);
void STWI_send_SystemStatusREQ(void);
-void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data);
+void STWI_send_GameConfigREQ(const u8 *serial_uname, const u8 *gname);
void STWI_send_ResetREQ(void);
void STWI_send_LinkStatusREQ(void);
void STWI_send_VersionStatusREQ(void);
void STWI_send_SlotStatusREQ(void);
void STWI_send_ConfigStatusREQ(void);
void STWI_send_ResumeRetransmitAndChangeREQ(void);
-void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3);
+void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer);
void STWI_send_SC_StartREQ(void);
void STWI_send_SC_PollingREQ(void);
void STWI_send_SC_EndREQ(void);
diff --git a/include/link.h b/include/link.h
index 770a60f44..e36ac8078 100644
--- a/include/link.h
+++ b/include/link.h
@@ -246,38 +246,38 @@ void sub_800E0E8(void);
bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
-void sub_800AB9C(void);
-void sub_800B1F4(void);
+void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void);
+void SetWirelessCommType1(void);
void sub_8009734(void);
void sub_800A620(void);
-void sub_80FBB4C(void);
+void LinkRfu_DestroyIdleTask(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
-void sub_800AAC0(void);
+void Link_TryStartSend5FFF(void);
void OpenLink(void);
bool8 IsLinkMaster(void);
void CheckShouldAdvanceLinkState(void);
-void sub_800AA80(u16 a0);
+void Link_StartSend5FFFwithParam(u16 a0);
void sub_80098D8(void);
void CloseLink(void);
bool8 IsLinkTaskFinished(void);
bool32 sub_800B270(void);
void ResetSerial(void);
void sub_8054A28(void);
-void sub_800B1F4(void);
+void SetWirelessCommType1(void);
void LoadWirelessStatusIndicatorSpriteGfx(void);
void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_8009FE8(void);
void ClearLinkCallback_2(void);
-void sub_80FA42C(void);
-void sub_800B284(struct LinkPlayer * linkPlayer);
+void LinkRfu_SetRfuFuncToSend6600(void);
+void IntlConvertLinkPlayerName(struct LinkPlayer * linkPlayer);
bool8 IsWirelessAdapterConnected(void);
bool8 sub_800A474(u8 a0);
void LinkVSync(void);
bool8 HandleLinkConnection(void);
-void sub_800B0B4(void);
-void sub_800B110(u32 who);
-void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
+void PrepareLocalLinkPlayerBlock(void);
+void LinkPlayerFromBlock(u32 who);
+void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
u8 sub_800A8D4(void);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 790429870..86d55047d 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -3,169 +3,78 @@
#include "global.h"
#include "librfu.h"
-
-// RfuTgtData.gname is read as these structs.
-struct GFtgtGnameSub
-{
- u16 unk_00_0:4;
- u16 unk_00_4:1;
- u16 unk_00_5:1;
- u16 unk_00_6:1;
- u16 isChampion:1;
- u16 hasNationalDex:1;
- u16 gameClear:1;
- u16 unk_01_2:4;
- u16 unk_01_6:2;
- u8 playerTrainerId[2];
-};
-
-struct __attribute__((packed, aligned(2))) GFtgtGname
-{
- struct GFtgtGnameSub unk_00;
- u8 unk_04[4];
- u16 species:10;
- u16 type:6;
- u8 unk_0a_0:7;
- u8 unk_0a_7:1;
- u8 playerGender:1;
- u8 level:7;
- u8 unk_0c;
-};
-
-struct Padded_U8
-{
- u8 value;
-};
-
-struct UnkLinkRfuStruct_02022B2C
+#include "AgbRfu_LinkManager.h"
+
+#define RFU_COMMAND_0x8800 0x8800
+#define RFU_COMMAND_0x8900 0x8900
+#define RFU_COMMAND_0xa100 0xa100
+#define RFU_COMMAND_0x7700 0x7700
+#define RFU_COMMAND_0x7800 0x7800
+#define RFU_COMMAND_0x6600 0x6600
+#define RFU_COMMAND_0x5f00 0x5f00
+#define RFU_COMMAND_0x2f00 0x2f00
+#define RFU_COMMAND_0xbe00 0xbe00
+#define RFU_COMMAND_0xee00 0xee00
+#define RFU_COMMAND_0xed00 0xed00
+
+struct RfuBlockSend
{
- u8 maxMFrame;
- u8 mcTimer;
- u16 availSlotFlag;
- u8 mbootFlag;
- u16 serialNo;
- struct GFtgtGname *gname;
- u8 *uname;
- u8 unk_10;
- u8 unk_11;
- u16 unk_12;
- u16 unk_14;
-};
-
-struct UnkLinkRfuStruct_02022B44
-{
- u8 fill_00[6];
- u16 unk_06;
- u8 fill_08[6];
- vu8 unk_0e;
- u8 unk_0f;
- u8 fill_10[0x54];
- u16 unk_64;
- u8 fill_66[0x1d];
- u8 unk_83;
- u8 fill_84[0x58];
-};
-
-struct UnkRfuStruct_1
-{
- /* 0x000 */ u8 unk_00;
- /* 0x001 */ u8 unk_01;
- /* 0x002 */ vu8 unk_02;
- /* 0x003 */ vu8 unk_03;
- /* 0x004 */ u8 unk_04;
- /* 0x005 */ u8 unk_05;
- /* 0x006 */ u8 unk_06;
- /* 0x007 */ u8 unk_07;
- /* 0x008 */ u8 unk_08;
- /* 0x009 */ u8 unk_09;
- /* 0x00a */ u8 unk_0a;
- /* 0x00b */ u8 unk_0b;
- /* 0x00c */ u8 unk_0c;
- /* 0x00d */ u8 unk_0d;
- /* 0x00e */ u8 unk_0e;
- /* 0x00f */ u8 unk_0f;
- /* 0x010 */ u8 unk_10;
- /* 0x011 */ u8 unk_11;
- /* 0x012 */ u8 unk_12;
- // aligned
- /* 0x014 */ u16 unk_14;
- /* 0x016 */ u16 unk_16;
- /* 0x018 */ u16 unk_18;
- /* 0x01a */ u16 unk_1a;
- /* 0x01c */ u16 unk_1c;
- /* 0x01e */ u16 unk_1e;
- /* 0x020 */ const u16 *unk_20;
- /* 0x024 */ u8 unk_24;
- /* 0x026 */ u16 unk_26;
- /* 0x028 */ u16 unk_28[RFU_CHILD_MAX];
- /* 0x030 */ u8 unk_30;
- // aligned
- /* 0x032 */ u16 unk_32;
- /* 0x034 */ u16 unk_34[RFU_CHILD_MAX];
- /* 0x03c */ const struct UnkLinkRfuStruct_02022B2C *unk_3c;
- /* 0x040 */ void (*unk_40)(u8, u8);
- /* 0x044 */ void (*unk_44)(u16);
-};
-
-struct UnkRfuStruct_2_Sub_6c
-{
- /* 0x00 */ u16 unk_00;
- /* 0x02 */ u16 unk_02;
- /* 0x04 */ const u8 *unk_04;
- /* 0x08 */ u32 unk_08;
- /* 0x0c */ u32 unk_0c;
- /* 0x10 */ u8 unk_10;
- /* 0x11 */ u8 unk_11;
- /* 0x12 */ u8 unk_12;
+ /* 0x00 */ u16 next;
+ /* 0x02 */ u16 count; // max 21
+ /* 0x04 */ const u8 *payload;
+ /* 0x08 */ u32 receivedFlags;
+ /* 0x0c */ u32 failedFlags;
+ /* 0x10 */ u8 sending;
+ /* 0x11 */ u8 owner;
+ /* 0x12 */ u8 receiving;
};
struct UnkRfuStruct_2_Sub_124
{
- /* 0x000 */ u8 unk_00[20][70];
- /* 0x578 */ vu8 unk_8c0;
- /* 0x579 */ vu8 unk_8c1;
- /* 0x57a */ vu8 unk_8c2;
- /* 0x57b */ vu8 unk_8c3;
+ /* 0x000 */ u8 slots[20][70];
+ /* 0x578 */ vu8 recv_slot;
+ /* 0x579 */ vu8 send_slot;
+ /* 0x57a */ vu8 count;
+ /* 0x57b */ vu8 full;
};
struct UnkRfuStruct_2_Sub_9e8
{
- /* 0x000 */ u8 unk_00[40][14];
- /* 0x230 */ vu8 unk_230;
- /* 0x231 */ vu8 unk_231;
- /* 0x232 */ vu8 unk_232;
- /* 0x233 */ vu8 unk_233;
+ /* 0x000 */ u8 slots[40][14];
+ /* 0x230 */ vu8 recv_slot;
+ /* 0x231 */ vu8 send_slot;
+ /* 0x232 */ vu8 count;
+ /* 0x233 */ vu8 full;
};
struct UnkRfuStruct_2_Sub_c1c
{
- /* 0x00 */ u8 unk_00[2][14];
- /* 0x1c */ vu8 unk_1c;
- /* 0x1d */ vu8 unk_1d;
- /* 0x1e */ vu8 unk_1e;
+ /* 0x00 */ u8 slots[2][14];
+ /* 0x1c */ vu8 recv_slot;
+ /* 0x1d */ vu8 send_slot;
+ /* 0x1e */ vu8 count;
};
struct UnkRfuStruct_Sub_Unused
{
- /* 0x000 */ u8 unk_00[2][256];
- /* 0x200 */ vu8 unk_200;
- /* 0x201 */ vu8 unk_201;
- /* 0x202 */ vu8 unk_202;
- /* 0x203 */ vu8 unk_203;
+ /* 0x000 */ u8 slots[2][256];
+ /* 0x200 */ vu8 recv_slot;
+ /* 0x201 */ vu8 send_slot;
+ /* 0x202 */ vu8 count;
+ /* 0x203 */ vu8 full;
};
-struct UnkRfuStruct_2
+typedef struct UnkRfuStruct_2
{
/* 0x000 */ void (*RfuFunc)(void);
- /* 0x004 */ u16 unk_04;
+ /* 0x004 */ u16 state;
/* 0x006 */ u8 filler_06[4];
- /* 0x00a */ u16 unk_0a;
- /* 0x00c */ u8 unk_0c; // parentChildMode?
+ /* 0x00a */ u16 linkman_msg;
+ /* 0x00c */ u8 parent_child;
/* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e;
/* 0x00f */ u8 unk_0f;
- /* 0x010 */ u16 unk_10;
- /* 0x012 */ u16 unk_12;
+ /* 0x010 */ u16 linkman_param[2];
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a;
@@ -175,30 +84,30 @@ struct UnkRfuStruct_2
/* 0x066 */ u8 unk_66;
/* 0x067 */ u8 unk_67;
/* 0x068 */ u8 filler_68[4];
- /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
- /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
- /* 0x0e4 */ u8 unk_e4[5];
- /* 0x0e9 */ u8 unk_e9[5];
- /* 0x0ee */ vu8 unk_ee;
+ /* 0x06c */ struct RfuBlockSend cmd_8800_sendbuf;
+ /* 0x080 */ struct RfuBlockSend cmd_8800_recvbuf[5];
+ /* 0x0e4 */ u8 cmd5f00Ack[5];
+ /* 0x0e9 */ u8 cmd_6600_recvd[5];
+ /* 0x0ee */ vu8 errorState;
/* 0x0ef */ u8 unk_ef;
- /* 0x0f0 */ u8 unk_f0;
+ /* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 unk_f1;
/* 0x0f2 */ u16 unk_f2[6];
- /* 0x0fe */ u16 unk_fe;
- /* 0x100 */ u16 unk_100;
+ /* 0x0fe */ u16 cmd_6600_timer;
+ /* 0x100 */ u16 cmd_6600_count;
/* 0x102 */ u8 unk_102;
/* 0x104 */ struct RfuTgtData unk_104;
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
/* 0x6a0 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
/* 0x8d4 */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
/* 0x8f4 */ vu8 unk_c3c;
- /* 0x8f5 */ u8 unk_c3d;
- /* 0x8f6 */ vu8 unk_c3e;
+ /* 0x8f5 */ u8 reconnectedParentIdx;
+ /* 0x8f6 */ vu8 child_slot;
/* 0x8f7 */ u8 unk_c3f[70];
/* 0x93d */ u8 unk_c85;
/* 0x93e */ u8 unk_c86;
- /* 0x93f */ u8 unk_c87[5][7][2];
- /* 0x985 */ u8 unk_ccd;
+ /* 0x93f */ u8 recvCmds[5][7][2];
+ /* 0x985 */ u8 parentId;
/* 0x986 */ u8 unk_cce; // childId
/* 0x987 */ u8 unk_ccf;
/* 0x988 */ vu8 unk_cd0;
@@ -209,43 +118,42 @@ struct UnkRfuStruct_2
/* 0x993 */ vu8 unk_cdb;
/* 0x994 */ vu8 unk_cdc;
/* 0x995 */ u8 unk_cdd;
- /* 0x996 */ u8 unk_cde[RFU_CHILD_MAX];
- /* 0x99a */ u8 unk_ce2;
- /* 0x99b */ u8 unk_ce3;
+ /* 0x996 */ u8 linkPlayerIdx[RFU_CHILD_MAX];
+ /* 0x99a */ u8 bm_PartnerFlags;
+ /* 0x99b */ u8 bm_DisconnectSlot;
/* 0x99c */ u8 unk_ce4;
/* 0x99d */ u8 unk_ce5;
- /* 0x99e */ u8 unk_ce6;
- /* 0x99f */ u8 unk_ce7;
- /* 0x9a0 */ u8 unk_ce8;
+ /* 0x99e */ u8 unionRoomChatters;
+ /* 0x99f */ u8 acceptSlot_flag;
+ /* 0x9a0 */ bool8 unk_ce8;
/* 0x9a1 */ u8 unk_ce9;
/* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX];
/* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX];
-}; // size: 0x9AC
+} GF_RFU_MANAGER; // size: 0x9AC
-extern struct UnkRfuStruct_1 gUnknown_3005E10;
extern struct GFtgtGname gHostRFUtgtGnameBuffer;
extern u8 gHostRFUtgtUnameBuffer[];
+// GameFreak signatures
void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void LinkRfu_FatalError(void);
void MG_DrawCheckerboardPattern(void);
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
+void Rfu_BeginBuildAndSendCommand5F(void);
bool8 IsLinkRfuTaskFinished(void);
void DestroyWirelessStatusIndicatorSprite(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0);
-void sub_80F9E2C(void * data);
-u8 sub_8116DE0(void);
-void sub_80FBB4C(void);
+void RfuPrepareSend0x2f00(void * data);
+u8 CreateTask_ListenToWireless(void);
+void LinkRfu_DestroyIdleTask(void);
void sub_80F86F4(void);
void sub_80FB128(bool32 a0);
-u32 sub_80FD3A4(void);
bool32 IsSendingKeysToRfu(void);
void Rfu_set_zero(void);
u8 GetRfuPlayerCount(void);
-void sub_80F9828(void);
+void StartSendingKeysToRfu(void);
u8 LinkRfu_GetMultiplayerId(void);
bool32 Rfu_InitBlockSend(const u8 * src, size_t size);
bool8 sub_80FA0F8(u8 a0);
@@ -253,78 +161,69 @@ u8 Rfu_GetBlockReceivedStatus(void);
void Rfu_SetBlockReceivedFlag(u8 who);
void Rfu_ResetBlockReceivedFlag(u8 who);
bool8 Rfu_IsMaster(void);
-void sub_80F85F8(void);
-bool32 sub_80FAE94(void);
-bool32 sub_80FAEF0(void);
+void ResetLinkRfuGFLayer(void);
+bool32 LinkRfuMain1(void);
+bool32 LinkRfuMain2(void);
bool32 IsRfuRecvQueueEmpty(void);
u32 GetRfuRecvQueueLength(void);
-void sub_80F8DC0(void);
-void sub_80FBB20(void);
+void LinkRfu_Shutdown(void);
+void LinkRfu_CreateIdleTask(void);
bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void);
-struct GFtgtGname *sub_80F9800(void);
+struct GFtgtGname *GetHostRFUtgtGname(void);
void UpdateWirelessStatusIndicatorSprite(void);
void InitRFU(void);
-void sub_80FEB14(void);
-bool32 sub_80FBA00(void);
-
-void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
-void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
-
-void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0);
-u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6);
-void sub_80FD760(bool8 a0);
-void sub_80FEA10(void (*func)(u16));
-void sub_80FB9E4(u8 a0, u16 a1);
-u8 sub_80FB9F4(void);
-void LinkRfu_REQ_SendData_HandleParentRelationship(bool8 clockChangeFlag);
-void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
-void sub_80FD52C(void);
-u8 sub_80FD610(u16 parentId, u16 unk_1a);
-bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
-bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
-void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
-bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
-void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
-u8 sub_80FEA34(u8 a0, u16 a1);
-void sub_80FDA30(u32 a0);
-void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3);
-void LinkRfu_syncVBlank_(void);
-s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16));
-void sub_80FEB3C(void);
-void sub_80FAFE0(u8 a0);
-bool32 sub_80FA44C(u32 a0);
+bool32 RfuIsErrorStatus1or2(void);
+
+void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *ptr);
+void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr);
+
+void RfuSetErrorStatus(u8 a0, u16 msg);
+u8 RfuGetErrorStatus(void);
+void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
+bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
+bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
+void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
+bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
+void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
+void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
+void UpdateGameData_GroupLockedIn(bool8 started);
+bool32 RfuSerialNumberIsValid(u32 a0);
bool8 sub_80FC1B0(void);
-bool8 sub_80F8F40(void);
-void sub_80F8F5C(void);
+bool8 LmanAcceptSlotFlagIsNotZero(void);
+void LinkRfu_StopManagerAndFinalizeSlots(void);
bool32 sub_80FA5D4(void);
bool32 sub_80FC1CC(void);
-bool32 sub_80F8F7C(bool32 a0);
-bool32 sub_80FA634(u16 a0, const u8 *a1);
-void sub_80FA670(u8 a0, u16 a1, const u8 *a2);
-u32 sub_80FA6FC(u16 a0, const u8 *a1);
-void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2);
-void sub_80FBB8C(u32 a0);
-void sub_80FBD4C(const u8 *ptr, u16 a1);
+bool32 WaitRfuState(bool32 a0);
+bool32 TrainerIdAndNameStillInPartnersList(u16 trainerId, const u8 *trainerName);
+void SendByteToPartnerByIdAndName(u8 a0, u16 a1, const u8 *a2);
+u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1);
+void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 a2);
+void InitializeRfuLinkManager_LinkLeader(u32 availSlots);
+void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId);
void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname);
-void sub_80FBBD8(void);
-void sub_80FA6BC(void);
-void sub_80FBF54(const u8 *src, u16 trainerId);
-void sub_80FB008(u8 a0, u32 a1, u32 a2);
+void InitializeRfuLinkManager_JoinGroup(void);
+void LinkRfuNIsend8(void);
+void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
+void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started);
void RecordMixTrainerNames(void);
-void sub_80F8CFC();
-void sub_80F8D14();
-void sub_80FAF74(bool32 a0, bool32 a1);
+void LinkRfu_CreateConnectionAsParent();
+void LinkRfu_StopManagerBeforeEnteringChat();
+void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard);
void ClearAndInitHostRFUtgtGname(void);
void sub_80F8FA0(void);
-void sub_80FAFA0(u32 type, u32 species, u32 level);
-bool32 sub_80FBB0C(void);
-void sub_80FBC00(void);
+void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level);
+bool32 IsUnionRoomListenTaskActive(void);
+void InitializeRfuLinkManager_EnterUnionRoom(void);
void sub_80FBD6C(u32 a0);
void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
-bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
-bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool32 GetRfuUnkCE8(void);
+void sub_80FA4A8(void);
+void sub_80FB9D0(void);
+void sub_80FB030(u32 a0);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/main.h b/include/main.h
index c962cf7bd..f89ffbd63 100644
--- a/include/main.h
+++ b/include/main.h
@@ -73,5 +73,6 @@ extern const char RomHeaderGameCode[4];
extern const char RomHeaderSoftwareVersion;
extern u8 gLinkTransferringData;
+extern u16 gKeyRepeatStartDelay;
#endif // GUARD_MAIN_H
diff --git a/include/menu.h b/include/menu.h
index b6d757f85..49dd43e26 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -30,7 +30,7 @@ s8 sub_812EAE4(u16 species, u32 personality, u8 a2);
// list_menu
void sub_8107CD8(u8 palOffset, u16 speciesId);
void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y);
-void sub_8107D38(u8 palOffset, u8 palId);
+void ListMenuLoadStdPalAt(u8 palOffset, u8 palId);
void BlitMoveInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y);
// menu
diff --git a/include/mevent.h b/include/mevent.h
index 85782f20a..4f3e365f7 100644
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -13,7 +13,7 @@ struct MEventClientHeaderStruct
u16 id;
u16 unk_16[4];
struct MEventBuffer_3430_Sub unk_20;
- u8 unk_44;
+ u8 maxDistributionMons;
u8 playerName[7];
u8 playerTrainerId[4];
u16 easyChatProfile[6];
@@ -33,21 +33,38 @@ struct MEvent_Str_2
u8 fill_00[0x40];
};
+struct UnkStruct_8467FB8
+{
+ u8 textPal1:4;
+ u8 textPal2:4;
+ u8 textPal3:4;
+ u8 index:4;
+ const u8 * tiles;
+ const u8 * map;
+ const u16 * pal;
+};
+
+extern const u16 gCard1Pal[];
+extern const u16 gCard2Pal[];
+extern const u16 gCard3Pal[];
+extern const u16 gCard4Pal[];
+extern const u16 gCard5Pal[];
+
struct MEWonderNewsData * GetSavedWonderNews(void);
struct MEWonderCardData * GetSavedWonderCard(void);
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void);
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void);
-bool32 sub_8143DC8(const struct MEWonderNewsData * src);
+bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src);
bool32 ValidateReceivedWonderNews(void);
bool32 ValidateReceivedWonderCard(void);
-bool32 sub_8143EF4(const u8 * src);
-bool32 sub_8143F68(const struct MEWonderCardData * data);
-void sub_814410C(struct MEWonderCardData * buffer);
-bool32 sub_8144254(const u16 * data);
+bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
+bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data);
+void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer);
+bool32 MEvent_ReceiveDistributionMon(const u16 * data);
void BuildMEventClientHeader(struct MEventClientHeaderStruct * data);
bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data);
u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
-u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
+u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1);
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command);
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6);
@@ -66,12 +83,12 @@ void MENews_RemoveScrollIndicatorArrowPair(void);
bool32 WonderNews_Test_Unk_02(void);
bool32 WonderCard_Test_Unk_08_6(void);
u32 MENews_GetInput(u16 input);
-void sub_8143D24(void);
-u16 sub_81445C0(u32 command);
-void sub_8144714(u32 a0, u32 a1);
+void InitMEventData(void);
+u16 MEvent_GetBattleCardCount(u32 command);
+void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId);
u16 *GetMEventProfileECWordsMaybe(void);
-void sub_81446C4(void);
-bool32 sub_81446D0(u16 a0);
+void ResetReceivedWonderCardFlag(void);
+bool32 MEventHandleReceivedWonderCard(u16 cardId);
u16 GetWonderCardFlagId(void);
#endif //GUARD_MEVENT_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
index 1e9ef7bef..a7c7a3f23 100644
--- a/include/mevent_server.h
+++ b/include/mevent_server.h
@@ -48,6 +48,7 @@ struct mevent_client_cmd
#define CLI_RECVBUF {.instr = 12, .parameter = 0}
#define CLI_REQWORD {.instr = 13, .parameter = 0}
#define CLI_SNDWORD {.instr = 14, .parameter = 0}
+#define CLI_RECVMON {.instr = 16, .parameter = 0}
#define CLI_RECVRAM {.instr = 17, .parameter = 0}
#define CLI_SENDALL {.instr = 20, .parameter = 0}
diff --git a/include/overworld.h b/include/overworld.h
index a7031e56d..8242615c7 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -147,7 +147,7 @@ void Overworld_ResetStateAfterTeleport(void);
void Overworld_FadeOutMapMusic(void);
void CB2_LoadMap(void);
bool8 BGMusicStopped(void);
-bool8 is_light_level_8_or_9(u8 mapType);
+bool8 IsMapTypeIndoors(u8 mapType);
bool32 sub_8055C9C(void);
void Overworld_ResetStateAfterDigEscRope(void);
bool32 sub_8058244(void);
@@ -156,7 +156,7 @@ u8 GetCurrentMapType(void);
u8 get_map_light_from_warp0(void);
const struct MapHeader *warp1_get_mapheader(void);
void sub_8055F88(void);
-void sub_8056788(void);
+void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void);
void Overworld_CreditsMainCB(void);
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 0e9094752..fa4105a0e 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -5,6 +5,6 @@
void ResetPokeJumpResults(void);
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
-void sub_8147AA8(u16 species, MainCallback callback);
+void StartPokemonJump(u16 species, MainCallback callback);
#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/renewable_hidden_items.h b/include/renewable_hidden_items.h
index 0de109528..3a0385c00 100644
--- a/include/renewable_hidden_items.h
+++ b/include/renewable_hidden_items.h
@@ -1,7 +1,6 @@
#ifndef GUARD_RENEWABLE_HIDDEN_ITEMS_H
#define GUARD_RENEWABLE_HIDDEN_ITEMS_H
-bool32 sub_815D834(void);
void IncrementRenewableHiddenItemStepCounter(void);
void TryRegenerateRenewableHiddenItems(void);
void SetAllRenewableItemFlags(void);
diff --git a/include/rfu_union_tool.h b/include/rfu_union_tool.h
index b8b5cd664..7fc7fd4cb 100644
--- a/include/rfu_union_tool.h
+++ b/include/rfu_union_tool.h
@@ -3,15 +3,14 @@
#include "union_room.h"
-void sub_811C1C8(void);
-void sub_811BAAC(u8 *spriteIds, s32 arg1);
-void sub_811BB40(u8 *spriteIds);
-void sub_811BB68(void);
-void sub_811BECC(struct UnkStruct_URoom *arg0);
-void sub_811BEDC(struct UnkStruct_URoom *arg0);
-bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
-void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
u8 ZeroUnionObjWork(struct UnionObj * ptr);
-void sub_811BA78(void);
+void DeleteUnionObjWorkAndStopTask(void);
+void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group);
+void DestroyGroupMemberObjects(u8 *spriteIds);
+void MakeGroupAssemblyAreasPassable(void);
+void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
+void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
+bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
+void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p);
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
diff --git a/include/script.h b/include/script.h
index c0b23e248..2fb732396 100644
--- a/include/script.h
+++ b/include/script.h
@@ -48,7 +48,7 @@ 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 RunOnLoadMapScript(void);
void mapheader_run_script_with_tag_x3(void);
void mapheader_run_script_with_tag_x5(void);
void mapheader_run_script_with_tag_x7(void);
@@ -62,7 +62,7 @@ u8 *GetRamScript(u8 objectId, u8 *script);
bool32 sub_80991F8(void);
u8 *sub_8099244(void);
void sub_80992A0(u8 *script, u16 scriptSize);
-bool32 sub_8069DFC(void);
+bool32 ValidateRamScript(void);
void MEventSetRamScript(u8 * script, u16 scriptSize);
u8 * sub_8069E48(void);
void sub_8069998(u8 var);
diff --git a/include/sprite.h b/include/sprite.h
index 7432306a4..acf8f719c 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -315,6 +315,6 @@ void CopyFromSprites(u8 *dest);
u8 SpriteTileAllocBitmapOp(u16 bit, u8 op);
void ClearSpriteCopyRequests(void);
void ResetAffineAnimData(void);
-void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3);
+void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod);
#endif //GUARD_SPRITE_H
diff --git a/include/strings.h b/include/strings.h
index a57493a9b..d468af4f3 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -40,7 +40,6 @@ extern const u8 gText_Second[];
extern const u8 gText_Third[];
extern const u8 gText_NoDecorations[];
extern const u8 gText_NoDecorationsInUse[];
-extern const u8 gText_Exit[];
extern const u8 gText_Cancel[];
extern const u8 gText_Color161Shadow161[];
extern const u8 gText_GoBackPrevMenu[];
@@ -288,7 +287,6 @@ extern const u8 gText_ThreePkmnAreNeeded[];
extern const u8 gText_TwoPokemonAreNeeded[];
extern const u8 gText_PokemonCantBeSame[];
extern const u8 gText_NoIdenticalHoldItems[];
-extern const u8 gString_Dummy[];
extern const u8 gText_DoWhatWithPokemon[];
extern const u8 gText_RestoreWhichMove[];
extern const u8 gText_BoostPp[];
@@ -327,13 +325,9 @@ extern const u8 gText_SendOut[];
extern const u8 gText_Enter[];
extern const u8 gText_NoEntry[];
extern const u8 gText_Store[];
-extern const u8 gText_Register[];
extern const u8 gText_Trade4[];
extern const u8 gText_NotPkmnOtherTrainerWants[];
extern const u8 gText_ThatIsntAnEgg[];
-extern const u8 gText_PkmnCantBeTradedNow[];
-extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
-extern const u8 gText_EggCantBeTradedNow[];
extern const u8 gText_OtherTrainerCantAcceptPkmn[];
extern const u8 gText_CantTradeWithTrainer[];
extern const u8 gUnknown_84176CF[];
@@ -346,7 +340,6 @@ extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[];
extern const u8 gUnknown_8417494[];
extern const u8 gMenuText_Confirm[];
-extern const u8 gText_Lv[];
extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[];
extern const u8 gText_Slash[];
@@ -984,6 +977,16 @@ extern const u8 gUnknown_8415F6C[];
extern const u8 gUnknown_8415FFF[];
extern const u8 gUnknown_8416002[];
+// daycare
+extern const u8 gText_Lv[];
+extern const u8 gDaycareText_GetAlongVeryWell[];
+extern const u8 gDaycareText_GetAlong[];
+extern const u8 gDaycareText_DontLikeOther[];
+extern const u8 gDaycareText_PlayOther[];
+extern const u8 gExpandedPlaceholder_Empty[];
+extern const u8 gText_HatchedFromEgg[];
+extern const u8 gText_NickHatchPrompt[];
+
// trainer card
extern const u8 gText_WaitingTrainerFinishReading[];
extern const u8 gText_TrainerCardName[];
@@ -1033,6 +1036,10 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[];
extern const u8 gText_RegionMap_AreaDesc_PatternBush[];
extern const u8 gText_RegionMap_AreaDesc_DottedHole[];
+// field_screen_effect
+extern const u8 gUnknown_841B554[];
+extern const u8 gUnknown_841B5B6[];
+
// save_failed_screen
extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[];
extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[];
@@ -1061,4 +1068,62 @@ extern const u8 gText_CommStandbyAwaitingOtherPlayer[];
extern const u8 gText_RefusedBattle[];
extern const u8 gText_BattleWasRefused[];
+// union_room_chat
+extern const u8 gText_F700JoinedChat[];
+extern const u8 gText_F700LeftChat[];
+extern const u8 gText_Hello[];
+extern const u8 gText_Pokemon2[];
+extern const u8 gText_Trade[];
+extern const u8 gText_Battle[];
+extern const u8 gText_Lets[];
+extern const u8 gText_Ok[];
+extern const u8 gText_Sorry[];
+extern const u8 gText_YaySmileEmoji[];
+extern const u8 gText_ThankYou[];
+extern const u8 gText_ByeBye[];
+
+// union_room_chat_display
+extern const u8 gText_QuitChatting[];
+extern const u8 gText_RegisterTextWhere[];
+extern const u8 gText_RegisterTextHere[];
+extern const u8 gText_InputText[];
+extern const u8 gText_ExitingTheChat[];
+extern const u8 gText_LeaderHasLeftEndingChat[];
+extern const u8 gText_RegisteredTextChanged_OKtoSave[];
+extern const u8 gText_RegisteredTextChanged_AlreadySavedFile[];
+extern const u8 gText_RegisteredTextChanged_SavingDontTurnOff[];
+extern const u8 gText_RegisteredTextChanged_SavedTheGame[];
+extern const u8 gText_IfLeaderLeavesChatWillEnd[];
+extern const u8 gText_Upper[];
+extern const u8 gText_Lower[];
+extern const u8 gText_Symbols[];
+extern const u8 gText_Register2[];
+extern const u8 gText_Exit[];
+
+// wireless_communication_status_screen
+extern const u8 gUnknown_841E2B4[];
+extern const u8 gUnknown_841E2BF[];
+extern const u8 gUnknown_841E2C9[];
+extern const u8 gUnknown_841E2D4[];
+extern const u8 gText_WirelessCommunicationStatus[];
+extern const u8 gText_PeopleTrading[];
+extern const u8 gText_PeopleBattling[];
+extern const u8 gText_PeopleInUnionRoom[];
+extern const u8 gText_PeopleCommunicating[];
+
+// mevent
+extern const u8 gJPText_ReceiveMysteryGiftWithEReader[];
+extern const u8 gJPText_SelectConnectFromEReaderMenu[];
+extern const u8 gJPText_SelectConnectWithGBA[];
+extern const u8 gJPText_LinkIsIncorrect[];
+extern const u8 gJPText_CardReadingHasBeenHalted[];
+extern const u8 gJPText_Connecting[];
+extern const u8 gJPText_ConnectionErrorCheckLink[];
+extern const u8 gJPText_ConnectionErrorTryAgain[];
+extern const u8 gJPText_AllowEReaderToLoadCard[];
+extern const u8 gJPText_ConnectionComplete[];
+extern const u8 gJPText_NewTrainerHasComeToSevii[];
+extern const u8 gJPText_PleaseWaitAMoment[];
+extern const u8 gJPText_WriteErrorUnableToSaveData[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index cd059e0e5..ff8b033e9 100644
--- a/include/text.h
+++ b/include/text.h
@@ -5,10 +5,24 @@
#define CHAR_SPACE 0x00
#define CHAR_0 0xA1
+#define CHAR_1 0xA2
+#define CHAR_2 0xA3
+#define CHAR_3 0xA4
+#define CHAR_4 0xA5
+#define CHAR_5 0xA6
+#define CHAR_6 0xA7
+#define CHAR_7 0xA8
+#define CHAR_8 0xA9
+#define CHAR_9 0xAA
+#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_ELLIPSIS 0xB0
+#define CHAR_DBL_QUOT_LEFT 0xB1
+#define CHAR_DBL_QUOT_RIGHT 0xB2
+#define CHAR_SGL_QUOT_LEFT 0xB3
+#define CHAR_SGL_QUOT_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
diff --git a/include/text_window.h b/include/text_window.h
index 8e8466145..3796629b4 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -26,6 +26,7 @@ void TextWindow_SetUserSelectedFrame(u8 windowId, u16 tileStart, u8 palette);
void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette);
void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette);
void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette);
+void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset);
void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx);
void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx);
diff --git a/include/trade.h b/include/trade.h
index d5106b172..f8e285e40 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -8,6 +8,10 @@
extern struct MailStruct gLinkPartnerMail[6];
extern u8 gSelectedTradeMonPositions[2];
+extern const u8 gText_MaleSymbol4[];
+extern const u8 gText_FemaleSymbol4[];
+extern const u8 gText_GenderlessSymbol[];
+
extern const u16 gUnknown_826601C[];
void CB2_ReturnFromLinkTrade(void);
s32 sub_804FB34(void);
diff --git a/include/trainer_card.h b/include/trainer_card.h
index 06844dc2e..ed3e803d5 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -24,7 +24,7 @@ struct TrainerCard
/*0x20*/ u16 pokemonTrades;
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
- /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH];
+ /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x38*/ u8 version;
/*0x3A*/ u16 var_3A;
/*0x3C*/ u32 berryCrushPoints;
diff --git a/include/trainer_tower.h b/include/trainer_tower.h
index 9c1ac0631..72c0f236c 100644
--- a/include/trainer_tower.h
+++ b/include/trainer_tower.h
@@ -6,7 +6,9 @@ void InitTrainerTowerBattleStruct(void);
void FreeTrainerTowerBattleStruct(void);
u8 GetTrainerTowerTrainerFrontSpriteId(void);
void ResetTrainerTowerResults(void);
-void sub_815DA28(u8 *text);
-u8 sub_815DA10(void);
+void GetTrainerTowerOpponentWinText(u8 *dest, u8 opponentIdx);
+void GetTrainerTowerOpponentLoseText(u8 *dest, u8 opponentIdx);
+void GetTrainerTowerOpponentName(u8 *text);
+u8 GetTrainerTowerOpponentClass(void);
#endif //GUARD_TRAINER_TOWER_H
diff --git a/include/union_room.h b/include/union_room.h
index 3cb8eb84a..e24bcd480 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -4,28 +4,34 @@
#include "global.h"
#include "link_rfu.h"
-struct UnkStruct_Shared
+// Return value of IsRequestedTypeAndSpeciesInPlayerParty
+#define UR_TRADE_MATCH 0
+#define UR_TRADE_NOTYPE 1
+#define UR_TRADE_NOEGG 2
+
+#define UROOM_MAX_GROUP_COUNT 8
+#define UROOM_MAX_PARTY_SIZE 5
+
+struct UnionGnameUnamePair
{
struct GFtgtGname gname;
- u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH];
+ u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C
{
- struct UnkStruct_Shared unk0;
- u8 unk18:1;
+ struct UnionGnameUnamePair gname_uname;
+ u8 active:1;
};
struct UnkStruct_x20
{
- struct UnkStruct_Shared unk;
+ struct UnionGnameUnamePair gname_uname;
u16 field_18;
- u8 field_1A_0:2;
- u8 field_1A_1:1;
+ u8 groupScheduledAnim:2;
+ bool8 field_1A_1:1;
u8 field_1B;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
+ u32 field_1C; // unused
};
// These arrays are dynamically allocated but must be
@@ -51,17 +57,17 @@ struct UnkStruct_Leader
struct UnkStruct_Main0 * field_8;
u8 state;
u8 textState;
- u8 field_E;
+ u8 delayTimerAfterOk;
u8 listWindowId;
- u8 field_10;
- u8 field_11;
+ u8 bButtonCancelWindowId;
+ u8 nPlayerModeWindowId;
u8 listTaskId;
- u8 field_13;
- u8 field_14;
+ u8 playerCount;
+ u8 messageWindowId;
u8 field_15;
u8 field_16;
- u8 field_17;
- u8 field_18;
+ u8 listenTaskId;
+ u8 activity;
u8 field_19;
u16 field_1A;
};
@@ -72,18 +78,18 @@ struct UnkStruct_Group
struct UnkStruct_Main4 * field_4;
u8 state;
u8 textState;
- u8 field_A;
+ u8 field_A; // unused
u8 listWindowId;
- u8 field_C;
- u8 field_D;
+ u8 bButtonCancelWindowId;
+ u8 playerNameAndIdWindowId;
u8 listTaskId;
- u8 field_F;
+ u8 leaderId;
u8 field_10;
- u8 field_11;
- u8 field_12;
- u8 field_13;
- u8 field_14;
- u8 field_15;
+ u8 listenTaskId;
+ u8 cardOrNews;
+ u8 field_13; // referenced but never set
+ u8 refreshTimer;
+ u8 delayBeforePrint;
};
struct UnionObj
@@ -109,19 +115,21 @@ struct UnkStruct_URoom
/* 0x018 */ u8 field_18;
/* 0x019 */ u8 field_19;
/* 0x01A */ u8 field_1A;
- /* 0x01B */ u8 field_1B;
- /* 0x01C */ u8 field_1C;
- /* 0x01D */ u8 field_1D;
- /* 0x01E */ u8 field_1E;
+ /* 0x01B */ u8 topListMenuWindowId;
+ /* 0x01C */ u8 topListMenuListMenuId;
+ /* 0x01D */ u8 tradeBoardSelectWindowId;
+ /* 0x01E */ u8 tradeBoardDetailsWindowId;
/* 0x01F */ u8 field_1F;
/* 0x020 */ u8 field_20;
/* 0x021 */ u8 spriteIds[40];
/* 0x049 */ u8 field_49;
- /* 0x04A */ u8 field_4A;
- /* 0x04C */ u16 field_4C[6];
- /* 0x058 */ u8 field_58[4][11];
- /* 0x084 */ u16 field_98;
- /* 0x086 */ u16 field_9A[3];
+ /* 0x04A */ u8 tradeBoardListMenuId;
+
+ // For communication with potential link partners
+ /* 0x04C */ u16 playerSendBuffer[6];
+ /* 0x058 */ u8 activityRequestStrbufs[4][11];
+ /* 0x084 */ u16 partnerYesNoResponse;
+ /* 0x086 */ u16 recvActivityRequest[3]; // activity[, species, level]
/* 0x08C */ struct UnionObj unionObjs[8];
/* 0x0AC */ u8 trainerCardStrbufs[12][15];
/* 0x160 */ u8 field_174[48];
@@ -150,10 +158,10 @@ struct UnionRoomTrade
u32 personality;
};
-extern struct GFtgtGnameSub gUnknown_203B064;
+extern struct GFtgtGnameSub gPartnerTgtGnameSub;
extern u16 gUnionRoomOfferedSpecies;
extern u8 gUnionRoomRequestedMonType;
-void sub_81173C0(u16 battleFlags);
+void StartUnionRoomBattle(u16 battleFlags);
#endif //GUARD_UNION_ROOM_H
diff --git a/include/union_room_battle.h b/include/union_room_battle.h
new file mode 100644
index 000000000..ffccf197f
--- /dev/null
+++ b/include/union_room_battle.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_UNION_ROOM_BATTLE_H
+#define GUARD_UNION_ROOM_BATTLE_H
+
+void CB2_UnionRoomBattle(void);
+
+#endif //GUARD_UNION_ROOM_BATTLE_H
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
index 66daac376..3ce78b210 100644
--- a/include/union_room_chat.h
+++ b/include/union_room_chat.h
@@ -1,8 +1,30 @@
#ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H
-void sub_801DD98(void);
-void sub_8128420(void);
-void copy_strings_to_sav1(void);
+enum
+{
+ UNION_ROOM_KB_PAGE_UPPER,
+ UNION_ROOM_KB_PAGE_LOWER,
+ UNION_ROOM_KB_PAGE_EMOJI,
+ UNION_ROOM_KB_PAGE_COUNT
+};
+
+extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT];
+
+void EnterUnionRoomChat(void);
+u8 *UnionRoomChat_GetWorkRegisteredText(int arg0);
+void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp);
+u8 *UnionRoomChat_GetMessageEntryBuffer(void);
+int UnionRoomChat_LenMessageEntryBuffer(void);
+void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp);
+u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void);
+u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void);
+u8 *UnionRoomChat_GetLastReceivedMessage(void);
+u16 UnionRoomChat_GetReceivedPlayerIndex(void);
+int UnionRoomChat_GetMessageEntryCursorPosition(void);
+int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void);
+u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void);
+void UnionRoomChat_InitializeRegisteredTexts(void);
+u8 GetCurrentKeyboardPage(void);
#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/include/union_room_chat_display.h b/include/union_room_chat_display.h
new file mode 100644
index 000000000..f880eeecb
--- /dev/null
+++ b/include/union_room_chat_display.h
@@ -0,0 +1,34 @@
+#ifndef GUARD_UNION_ROOM_CHAT_DISPLAY_H
+#define GUARD_UNION_ROOM_CHAT_DISPLAY_H
+
+#define CHATDISPLAYROUTINE_LOADGFX 0
+#define CHATDISPLAYROUTINE_MOVEKBCURSOR 1
+#define CHATDISPLAYROUTINE_CURSORBLINK 2
+#define CHATDISPLAYROUTINE_SHOWKBSWAPMENU 3
+#define CHATDISPLAYROUTINE_HIDEKBSWAPMENU 4
+#define CHATDISPLAYROUTINE_SWITCHPAGES 5
+#define CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG 6
+#define CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO 7
+#define CHATDISPLAYROUTINE_PRINTMSG 8
+#define CHATDISPLAYROUTINE_PRINTREGISTERWHERE 9
+#define CHATDISPLAYROUTINE_CANCELREGISTER 10
+#define CHATDISPLAYROUTINE_RETURNTOKB 11
+#define CHATDISPLAYROUTINE_SCROLLCHAT 12
+#define CHATDISPLAYROUTINE_PRINTINPUTTEXT 13
+#define CHATDISPLAYROUTINE_ASKSAVE 14
+#define CHATDISPLAYROUTINE_ASKOVERWRITESAVE 15
+#define CHATDISPLAYROUTINE_PRINTSAVING 16
+#define CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME 17
+#define CHATDISPLAYROUTINE_PRINTEXITINGCHAT 18
+#define CHATDISPLAYROUTINE_PRINTLEADERLEFT 19
+#define CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG 20
+
+bool8 UnionRoomChat_TryAllocGraphicsWork(void);
+bool32 UnionRoomChat_RunDisplaySubtask0(void);
+void UnionRoomChat_FreeGraphicsWork(void);
+void UnionRoomChat_RunDisplaySubtasks(void);
+void UnionRoomChat_StartDisplaySubtask(u16 a0, u8 a1);
+u8 RunDisplaySubtask(u8 a0);
+s8 UnionRoomChat_ProcessInput(void);
+
+#endif //GUARD_UNION_ROOM_CHAT_DISPLAY_H
diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h
new file mode 100644
index 000000000..879f9f86b
--- /dev/null
+++ b/include/union_room_chat_objects.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_UNION_ROOM_CHAT_OBJECTS_H
+#define GUARD_UNION_ROOM_CHAT_OBJECTS_H
+
+bool32 UnionRoomChat_TryAllocSpriteWork(void);
+void UnionRoomChat_FreeSpriteWork(void);
+void UnionRoomChat_CreateSelectorCursorObj(void);
+void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible);
+void UnionRoomChat_MoveSelectorCursorObj(void);
+void UnionRoomChat_UpdateObjPalCycle(u32 idx);
+void UnionRoomChat_SetSelectorCursorClosedImage(void);
+bool32 UnionRoomChat_AnimateSelectorCursorReopen(void);
+void UnionRoomChat_SpawnTextEntryPointerSprites(void);
+void CreatePageSwitchUISprites(void);
+void UpdateVisibleUnionRoomChatIcon(void);
+
+#endif //GUARD_UNION_ROOM_CHAT_OBJECTS_H
diff --git a/include/union_room_message.h b/include/union_room_message.h
index b7de673ba..db24aca15 100644
--- a/include/union_room_message.h
+++ b/include/union_room_message.h
@@ -3,7 +3,7 @@
#include "global.h"
-extern const u8 gUnknown_84571AC[];
+extern const u8 gUnionRoomActivity_Blank[];
extern const u8 gUnknown_84571B0[];
extern const u8 gUnknown_84571B4[];
extern const u8 gUnknown_84571B8[];
@@ -31,8 +31,8 @@ extern const u8 gUnknown_84577BC[];
extern const u8 gUnknown_84577F8[];
extern const u8 *const gUnknown_8457838[];
extern const u8 gUnknown_84578BC[];
-extern const u8 *const gUnknown_8457A34[];
-extern const u8 *const gUnknown_8457B04[][2];
+extern const u8 *const gURText_PleaseWaitMsgs[];
+extern const u8 *const gURText_FriendPromptsForActivity[][2];
extern const u8 *const gUnknown_8457BCC[];
extern const u8 *const gUnknown_8457C20[];
extern const u8 gUnknown_8457C48[];
@@ -46,7 +46,7 @@ extern const u8 gUnknown_8457E44[];
extern const u8 gUnknown_8457E60[];
extern const u8 *const gUnknown_8457F80[][2];
extern const u8 gUnknown_8457F90[];
-extern const u8 *const gUnknown_84580F4[][4];
+extern const u8 *const gResponseToURoomActivityInviteStringPtrs[][4];
extern const u8 *const gUnknown_8458230[][2][3];
extern const u8 *const gUnknown_8458314[];
extern const u8 *const gUnknown_84583B4[];
@@ -63,7 +63,7 @@ extern const u8 *const gUnknown_8458A78[2][4];
extern const u8 gUnknown_8458A98[];
extern const u8 gUnknown_8458AB8[];
extern const u8 gUnknown_8458B44[];
-extern const u8 gUnknown_8458CD4[];
+extern const u8 gURText_PleaseChooseTypeOfMon[];
extern const u8 gUnknown_8458D1C[];
extern const u8 gUnknown_8458D54[];
extern const u8 gUnknown_8458D78[];
@@ -75,7 +75,7 @@ extern const u8 gUnknown_8458E70[];
extern const u8 gUnknown_8458ED0[];
extern const u8 gUnknown_8458F04[];
extern const u8 gUnknown_8458F9C[];
-extern const u8 gUnknown_8458FBC[];
+extern const u8 gText_EggTrade[];
extern const u8 gUnknown_8458FC8[];
extern const u8 gUnknown_8458FE4[];
extern const u8 gUnknown_84591DC[];
@@ -91,20 +91,20 @@ extern const u8 gUnknown_8459360[];
extern const u8 gUnknown_8459368[];
extern const u8 gUnknown_8459370[];
extern const u8 gUnknown_8459378[];
-extern const u8 gUnknown_8459394[];
-extern const u8 gUnknown_84593A4[];
-extern const u8 gUnknown_84593B4[];
-extern const u8 gUnknown_84593C4[];
-extern const u8 gUnknown_84593D4[];
-extern const u8 gUnknown_84593E4[];
-extern const u8 gUnknown_84593F4[];
-extern const u8 gUnknown_84593DC[];
-extern const u8 gUnknown_8459400[];
-extern const u8 gUnknown_8459410[];
-extern const u8 gUnknown_845941C[];
-extern const u8 gUnknown_845942C[];
-extern const u8 gUnknown_8459434[];
-extern const u8 gUnknown_8459440[];
+extern const u8 gUnionRoomActivity_SingleBattle[];
+extern const u8 gUnionRoomActivity_DoubleBattle[];
+extern const u8 gUnionRoomActivity_MultiBattle[];
+extern const u8 gUnionRoomActivity_PokemonTrades[];
+extern const u8 gUnionRoomActivity_Chat[];
+extern const u8 gUnionRoomActivity_WonderCards[];
+extern const u8 gunionRoomActivity_WonderNews[];
+extern const u8 gUnionRoomActivity_Cards[];
+extern const u8 gUnionRoomActivity_PokemonJump[];
+extern const u8 gUnionRoomActivity_BerryCrush[];
+extern const u8 gUnionRoomActivity_BerryPicking[];
+extern const u8 gUnionRoomActivity_Search[];
+extern const u8 gUnionRoomActivity_SpinTradeJP[];
+extern const u8 gUnionRoomActivity_ItemTradeJP[];
extern const u8 *const gUnknown_84594B0[];
extern const u8 gUnknown_84594C4[];
extern const u8 gUnknown_8459504[];
diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h
deleted file mode 100644
index 11a91b5ef..000000000
--- a/include/unk_810c3a4.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef GUARD_UNK_810C3A4_H
-#define GUARD_UNK_810C3A4_H
-
-#define GET_VS_SEEKER_COUNTER_0() (gSaveBlock1Ptr->trainerRematch.stepCounter & 0xFF)
-#define GET_VS_SEEKER_COUNTER_1() (gSaveBlock1Ptr->trainerRematch.stepCounter >> 8)
-#define SET_VS_SEEKER_COUNTER_0(x) ({\
- gSaveBlock1Ptr->trainerRematch.stepCounter &= 0xFF00;\
- gSaveBlock1Ptr->trainerRematch.stepCounter |= (x);\
-})
-#define SET_VS_SEEKER_COUNTER_1(x) ({\
- gSaveBlock1Ptr->trainerRematch.stepCounter &= 0x00FF;\
- gSaveBlock1Ptr->trainerRematch.stepCounter |= ((x) << 8);\
-})
-#define INC_VS_SEEKER_COUNTER_0() ({\
- u8 x = GET_VS_SEEKER_COUNTER_0();\
- if (x < 100) gSaveBlock1Ptr->trainerRematch.stepCounter++;\
-})
-#define INC_VS_SEEKER_COUNTER_1() ({\
- u8 x = GET_VS_SEEKER_COUNTER_1();\
- if (x < 100) {x++; SET_VS_SEEKER_COUNTER_1(x);}\
-})
-
-void sub_810C604(void);
-void sub_810C640(void);
-
-#endif //GUARD_UNK_810C3A4_H
diff --git a/include/unk_815C980.h b/include/unk_815C980.h
deleted file mode 100644
index a3249a8e2..000000000
--- a/include/unk_815C980.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef GUARD_UNK_815C980_H
-#define GUARD_UNK_815C980_H
-
-struct UnkStruct3
-{
- u8 field_0_0:2;
- u8 shape:2;
- u8 size:2;
- u8 priority:2;
- u8 field_1;
- u8 xDelta;
- s16 x;
- s16 y;
- const struct SpriteSheet *spriteSheet;
- const struct SpritePalette *spritePal;
-};
-
-void sub_815C9F4(void);
-void sub_815D108(u32 id);
-void sub_815D1A8(u32 id, bool32 arg1);
-bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
-void sub_815CD70(u32 id, s32 arg1);
-
-#endif //GUARD_UNK_815C980_H
diff --git a/include/unk_815c27c.h b/include/unk_815c27c.h
deleted file mode 100644
index 02c886895..000000000
--- a/include/unk_815c27c.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_UNK_815C27C_H
-#define GUARD_UNK_815C27C_H
-
-void EReaderHelper_SerialCallback(void);
-void EReaderHelper_Timer3Callback(void);
-void EReaderHelper_SaveRegsState(void);
-void EReaderHelper_ClearsSendRecvMgr(void);
-void EReaderHelper_RestoreRegsState(void);
-u16 EReaderHandleTransfer(u8, size_t, const void *, void *);
-
-#endif //GUARD_UNK_815C27C_H
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
index fdd6839df..2d88417fa 100644
--- a/include/vs_seeker.h
+++ b/include/vs_seeker.h
@@ -3,6 +3,9 @@
#include "global.h"
+void sub_810C604(void);
+void sub_810C640(void);
+
void Task_VsSeeker_0(u8 taskId);
void sub_810CB90(void);
void sub_810CDE8(void);
diff --git a/ld_script.txt b/ld_script.txt
index f0792ad9d..341c816e3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -80,7 +80,7 @@ SECTIONS {
src/blend_palette.o(.text);
src/daycare.o(.text);
src/battle_interface.o(.text);
- asm/smokescreen.o(.text);
+ src/smokescreen.o(.text);
src/pokeball.o(.text);
src/load_save.o(.text);
src/trade.o(.text);
@@ -95,7 +95,7 @@ SECTIONS {
asm/field_player_avatar.o(.text);
asm/event_object_movement.o(.text);
asm/field_ground_effect.o(.text);
- asm/event_object_80688E4.o(.text);
+ src/event_object_80688E4.o(.text);
asm/field_message_box.o(.text);
src/event_object_lock.o(.text);
src/text_window_graphics.o(.text);
@@ -120,7 +120,6 @@ SECTIONS {
asm/field_weather_effects.o(.text);
src/field_fadetransition.o(.text);
src/field_screen_effect.o(.text);
- asm/field_screen_effect.o(.text);
src/battle_setup.o(.text);
asm/cable_club.o(.text);
asm/trainer_see.o(.text);
@@ -227,7 +226,7 @@ SECTIONS {
src/map_preview_screen.o(.text);
src/link_rfu_2.o(.text);
src/link_rfu_3.o(.text);
- src/link_rfu.o(.text);
+ src/AgbRfu_LinkManager.o(.text);
asm/easy_chat_2.o(.text);
src/pokedex_screen.o(.text);
asm/pokedex_screen.o(.text);
@@ -246,7 +245,9 @@ SECTIONS {
src/union_room_battle.o(.text);
asm/pokemon_special_anim.o(.text);
src/party_menu.o(.text);
- asm/union_room_chat.o(.text);
+ src/union_room_chat.o(.text);
+ src/union_room_chat_display.o(.text);
+ src/union_room_chat_objects.o(.text);
src/help_system_812B1E0.o(.text);
src/quest_log_battle.o(.text);
src/fame_checker.o(.text);
@@ -269,7 +270,8 @@ SECTIONS {
src/mevent_server_helpers.o(.text);
src/mevent_client.o(.text);
src/mevent_server.o(.text);
- src/mevent_8145654.o(.text);
+ src/mevent_show_card.o(.text);
+ src/mevent_show_news.o(.text);
src/menews_jisan.o(.text);
src/seagallop.o(.text);
asm/pokemon_jump.o(.text);
@@ -288,13 +290,13 @@ SECTIONS {
asm/dodrio_berry_picking_2.o(.text);
src/teachy_tv.o(.text);
src/ereader_helpers.o(.text);
- src/unk_815C980.o(.text);
+ src/digit_obj_util.o(.text);
src/ss_anne.o(.text);
src/cereader_tool.o(.text);
src/renewable_hidden_items.o(.text);
src/trainer_tower.o(.text);
src/berry_powder.o(.text);
- src/unk_815F138.o(.text);
+ src/minigame_countdown.o(.text);
src/berry_fix_program.o(.text);
} =0
@@ -321,7 +323,7 @@ SECTIONS {
src/agb_flash_mx.o(.text);
src/agb_flash_le.o(.text);
src/librfu_stwi.o(.text);
- asm/librfu_intr.o(.text);
+ src/librfu_intr.o(.text);
src/librfu_rfu.o(.text);
src/librfu_sio32id.o(.text);
src/isagbprn.o(.text);
@@ -421,7 +423,7 @@ SECTIONS {
data/field_player_avatar.o(.rodata);
data/event_object_movement.o(.rodata);
data/field_ground_effect.o(.rodata);
- data/event_object_80688E4.o(.rodata);
+ src/event_object_80688E4.o(.rodata);
src/scrcmd.o(.rodata);
src/coord_event_weather.o(.rodata);
src/field_tasks.o(.rodata);
@@ -436,7 +438,6 @@ SECTIONS {
src/title_screen.o(.rodata);
data/field_weather.o(.rodata);
src/field_screen_effect.o(.rodata);
- data/field_screen_effect.o(.rodata);
src/battle_setup.o(.rodata);
data/cable_club.o(.rodata);
data/trainer_see.o(.rodata);
@@ -534,7 +535,9 @@ SECTIONS {
src/union_room_message.o(.rodata);
data/pokemon_special_anim.o(.rodata);
src/party_menu.o(.rodata);
- data/union_room_chat.o(.rodata);
+ src/union_room_chat.o(.rodata);
+ src/union_room_chat_display.o(.rodata);
+ src/union_room_chat_objects.o(.rodata);
src/help_system_812B1E0.o(.rodata);
src/fame_checker.o(.rodata);
src/menu2.o(.rodata);
@@ -556,7 +559,8 @@ SECTIONS {
src/mevent_server_helpers.o(.rodata);
src/mevent_client.o(.rodata);
src/mevent_server.o(.rodata);
- src/mevent_8145654.o(.rodata);
+ src/mevent_show_card.o(.rodata);
+ src/mevent_show_news.o(.rodata);
src/mevent_scripts.o(.rodata);
src/menews_jisan.o(.rodata);
src/menews_jisan.o(.rodata.str1.4);
@@ -571,13 +575,13 @@ SECTIONS {
src/dodrio_berry_picking.o(.rodata);
src/battle_controller_pokedude.o(.rodata);
src/teachy_tv.o(.rodata);
- src/unk_815C980.o(.rodata);
+ src/digit_obj_util.o(.rodata);
data/data_8479668.o(.rodata);
src/ss_anne.o(.rodata);
src/cereader_tool.o(.rodata);
src/renewable_hidden_items.o(.rodata);
src/trainer_tower.o(.rodata);
- src/unk_815F138.o(.rodata);
+ src/minigame_countdown.o(.rodata);
src/berry_fix_program.o(.rodata);
data/data_8479668.o(.rodata.after_trainer_tower);
diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c
new file mode 100644
index 000000000..e4127ee09
--- /dev/null
+++ b/src/AgbRfu_LinkManager.c
@@ -0,0 +1,1398 @@
+#include "global.h"
+#include "librfu.h"
+#include "link_rfu.h"
+
+#define RN_ACCEPT 0x01
+#define RN_NAME_TIMER_CLEAR 0x02
+#define RN_DISCONNECT 0x04
+
+#define LINK_RECOVERY_OFF 0x00
+#define LINK_RECOVERY_START 0x01
+#define LINK_RECOVERY_EXE 0x02
+#define LINK_RECOVERY_IMPOSSIBLE 0x04
+
+#define FSP_ON 0x01
+#define FSP_START 0x02
+
+LINK_MANAGER lman;
+
+static void rfu_LMAN_clearVariables(void);
+static void rfu_LMAN_settingPCSWITCH(u32 rand);
+static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult);
+static void rfu_LMAN_MSC_callback(u16 reqCommandId);
+static void rfu_LMAN_PARENT_checkRecvChildName(void);
+static void rfu_LMAN_CHILD_checkSendChildName(void);
+static void rfu_LMAN_CHILD_checkSendChildName2(void);
+static void rfu_LMAN_CHILD_linkRecoveryProcess(void);
+static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void);
+static void rfu_LMAN_occureCallback(u8 msg, u8 param_count);
+static void rfu_LMAN_disconnect(u8 bmDisconnectSlot);
+static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot);
+static void rfu_LMAN_checkNICommunicateStatus(void);
+static void rfu_LMAN_managerChangeAgbClockMaster(void);
+
+u32 rfu_LMAN_REQBN_softReset_and_checkID(void)
+{
+ u32 id = rfu_REQBN_softReset_and_checkID();
+ if (id == RFU_ID)
+ lman.RFU_powerOn_flag = 1;
+ if (lman.state != LMAN_FORCED_STOP_AND_RFU_RESET && lman.state != LMAN_STATE_SOFT_RESET_AND_CHECK_ID)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ }
+ lman.pcswitch_flag = 0;
+ lman.reserveDisconnectSlot_flag = 0;
+ lman.acceptCount = 0;
+ lman.acceptSlot_flag = 0;
+ lman.parent_child = MODE_NEUTRAL;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ return id;
+}
+
+void rfu_LMAN_REQ_sendData(u8 clockChangeFlag)
+{
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
+ {
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
+ clockChangeFlag = TRUE;
+ else
+ clockChangeFlag = FALSE;
+ }
+ else
+ lman.parentAck_flag = 0;
+ rfu_REQ_sendData(clockChangeFlag);
+}
+
+u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16))
+{
+ if (LMAN_callback_p == NULL)
+ {
+ return LMAN_ERROR_ILLEGAL_PARAMETER;
+ }
+ CpuFill16(0, &lman, sizeof(struct linkManagerTag));
+ lman.parent_child = MODE_NEUTRAL;
+ lman.LMAN_callback = LMAN_callback_p;
+ lman.MSC_callback = MSC_callback_p;
+ rfu_setMSCCallback(rfu_LMAN_MSC_callback);
+ rfu_setREQCallback(rfu_LMAN_REQ_callback);
+ return 0;
+}
+
+static void rfu_LMAN_endManager(void)
+{
+ CpuFill16(0, &lman, sizeof(struct linkManagerTag) - 8);
+ lman.parent_child = MODE_NEUTRAL;
+}
+
+void rfu_LMAN_initializeRFU(INIT_PARAM *init_parameters)
+{
+ rfu_LMAN_clearVariables();
+ lman.state = LMAN_STATE_SOFT_RESET_AND_CHECK_ID;
+ lman.next_state = LMAN_STATE_RESET;
+ lman.init_param = init_parameters;
+ lman.linkRecovery_enable = init_parameters->linkRecovery_enable;
+ lman.linkRecoveryTimer.count_max = init_parameters->linkRecovery_period;
+ lman.NI_failCounter_limit = init_parameters->NI_failCounter_limit;
+ if (init_parameters->fastSearchParent_flag)
+ {
+ lman.fastSearchParent_flag = FSP_ON;
+ }
+}
+
+static void rfu_LMAN_clearVariables(void)
+{
+ u8 i;
+
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ lman.parent_child = MODE_NEUTRAL;
+ lman.pcswitch_flag = 0;
+ lman.child_slot = 0;
+ lman.connectSlot_flag_old = 0;
+ lman.nameAcceptTimer.active = 0;
+ lman.linkRecoveryTimer.active = 0;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ lman.nameAcceptTimer.count[i] = 0;
+ lman.linkRecoveryTimer.count[i] = 0;
+ }
+}
+
+void rfu_LMAN_powerDownRFU(void)
+{
+ lman.state = LMAN_STATE_STOP_MODE;
+}
+
+u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list)
+{
+ u8 i;
+ u16 *serial_list;
+
+ if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != MODE_PARENT))
+ {
+ lman.param[0] = 1;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_MANAGER_BUSY;
+ }
+ if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
+ {
+ lman.param[0] = 2;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_AGB_CLK_SLAVE;
+ }
+ for (i = 0, serial_list = acceptable_serialNo_list; i < 16; i++)
+ {
+ if (*serial_list++ == 0xFFFF)
+ {
+ break;
+ }
+ }
+ if (i == 16)
+ {
+ lman.param[0] = 4;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_ILLEGAL_PARAMETER;
+ }
+ if (parent_child > MODE_PARENT)
+ {
+ lman.pcswitch_flag = PCSWITCH_1ST_SC_START;
+ parent_child = MODE_PARENT;
+ connect_period = 0;
+ }
+ else
+ {
+ lman.pcswitch_flag = 0;
+ }
+ if (parent_child != MODE_CHILD)
+ {
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ }
+ else
+ {
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ if (lman.fastSearchParent_flag)
+ {
+ lman.fastSearchParent_flag = FSP_START;
+ }
+ }
+ lman.parent_child = parent_child;
+ lman.connect_period = connect_period;
+ lman.nameAcceptTimer.count_max = name_accept_period;
+ lman.acceptable_serialNo_list = acceptable_serialNo_list;
+ return 0;
+}
+
+u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period)
+{
+ u8 i;
+
+ if (lman.state != LMAN_STATE_READY && (lman.state < 9 || lman.state > 11))
+ {
+ lman.param[0] = 1;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_MANAGER_BUSY;
+ }
+ if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
+ {
+ lman.param[0] = 2;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_AGB_CLK_SLAVE;
+ }
+ for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
+ {
+ if (gRfuLinkStatus->partner[i].id == parentId)
+ {
+ break;
+ }
+ }
+ if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount)
+ {
+ lman.param[0] = 3;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_PID_NOT_FOUND;
+ }
+ if (lman.state == LMAN_STATE_READY || lman.state == LMAN_STATE_START_SEARCH_PARENT)
+ {
+ lman.state = LMAN_STATE_START_CONNECT_PARENT;
+ lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT;
+ }
+ else
+ {
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_START_CONNECT_PARENT;
+ }
+ lman.work = parentId;
+ lman.connect_period = connect_period;
+ if (lman.pcswitch_flag != 0)
+ {
+ lman.pcswitch_flag = PCSWITCH_CP;
+ }
+ return 0;
+}
+
+static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot)
+{
+ u8 i;
+
+ if ((bm_targetSlot & lman.linkRecoveryTimer.active) == 0)
+ return;
+ lman.linkRecoveryTimer.active &= ~bm_targetSlot;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((bm_targetSlot >> i) & 1)
+ {
+ lman.linkRecoveryTimer.count[i] = 0;
+ }
+ }
+ i = gRfuLinkStatus->linkLossSlotFlag & bm_targetSlot;
+ if (i)
+ {
+ rfu_LMAN_disconnect(i);
+ }
+ lman.param[0] = i;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, i);
+}
+
+void rfu_LMAN_stopManager(u8 forced_stop_and_RFU_reset_flag)
+{
+ u8 msg = 0;
+ lman.pcswitch_flag = 0;
+ if (forced_stop_and_RFU_reset_flag)
+ {
+ rfu_LMAN_clearVariables();
+ lman.state = LMAN_FORCED_STOP_AND_RFU_RESET;
+ return;
+ }
+ switch (lman.state)
+ {
+ case LMAN_STATE_START_SEARCH_CHILD:
+ lman.state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED;
+ break;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ break;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ break;
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED;
+ break;
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
+ break;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
+ break;
+ case LMAN_STATE_START_CONNECT_PARENT:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_CONNECT_PARENT_FAILED;
+ break;
+ case LMAN_STATE_POLL_CONNECT_PARENT:
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ break;
+ case LMAN_STATE_END_CONNECT_PARENT:
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ break;
+ case LMAN_STATE_SEND_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_LINK_RECOVERY:
+ lman.state = lman.state_bak[0];
+ lman.next_state = lman.state_bak[1];
+ rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = gRfuLinkStatus->linkLossSlotFlag;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
+ return;
+ case LMAN_STATE_POLL_LINK_RECOVERY:
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ break;
+ case LMAN_STATE_END_LINK_RECOVERY:
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ break;
+ default:
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ msg = LMAN_MSG_MANAGER_STOPPED;
+ break;
+ }
+ if (lman.state == LMAN_STATE_READY)
+ {
+ rfu_LMAN_occureCallback(msg, 0);
+ }
+}
+
+static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
+{
+ u8 i;
+ u8 bm_linkLossSlot;
+ u8 reason;
+ u8 bm_linkRecoverySlot;
+ u8 bm_disconnectSlot;
+
+ bool8 disconnect_occure_flag = FALSE;
+ rfu_REQBN_watchLink(REQ_commandID, &bm_linkLossSlot, &reason, &bm_linkRecoverySlot);
+ if (bm_linkLossSlot)
+ {
+ lman.param[0] = bm_linkLossSlot;
+ lman.param[1] = reason;
+ if (lman.linkRecovery_enable)
+ {
+ lman.linkRecovery_start_flag = LINK_RECOVERY_START;
+ if (lman.parent_child == MODE_CHILD && reason == REASON_DISCONNECTED)
+ {
+ lman.linkRecovery_start_flag = LINK_RECOVERY_IMPOSSIBLE;
+ }
+ if (lman.linkRecovery_start_flag == LINK_RECOVERY_START)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((bm_linkLossSlot >> i) & 1)
+ {
+ lman.linkRecoveryTimer.active |= (1 << i);
+ lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
+ }
+ }
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY, 1);
+ }
+ else
+ {
+ lman.linkRecovery_start_flag = 0;
+ rfu_LMAN_disconnect(bm_linkLossSlot);
+ disconnect_occure_flag = TRUE;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
+ }
+ }
+ else
+ {
+ rfu_LMAN_disconnect(bm_linkLossSlot);
+ disconnect_occure_flag = TRUE;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED, 2);
+ }
+ rfu_LMAN_managerChangeAgbClockMaster();
+ }
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
+ {
+ if (bm_linkRecoverySlot)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((lman.linkRecoveryTimer.active >> i) & 1 && (bm_linkRecoverySlot >> i) & 1)
+ {
+ lman.linkRecoveryTimer.count[i] = 0;
+ }
+ }
+ lman.linkRecoveryTimer.active &= ~bm_linkRecoverySlot;
+ lman.param[0] = bm_linkRecoverySlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_SUCCESSED, 1);
+ }
+ if (lman.linkRecoveryTimer.active)
+ {
+ bm_disconnectSlot = 0;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
+ {
+ lman.linkRecoveryTimer.active &= ~(1 << i);
+ bm_disconnectSlot |= (1 << i);
+ }
+ }
+ if (bm_disconnectSlot)
+ {
+ rfu_LMAN_disconnect(bm_disconnectSlot);
+ disconnect_occure_flag = TRUE;
+ lman.param[0] = bm_disconnectSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1);
+ }
+ }
+ if (!lman.linkRecoveryTimer.active)
+ {
+ lman.linkRecovery_start_flag = 0;
+ }
+ }
+ return disconnect_occure_flag;
+}
+
+void rfu_LMAN_syncVBlank(void)
+{
+ if (rfu_syncVBlank())
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_WATCH_DOG_TIMER_ERROR, 0);
+ rfu_LMAN_managerChangeAgbClockMaster();
+ }
+}
+
+void rfu_LMAN_manager_entity(u32 rand)
+{
+ u8 msg;
+
+ if (lman.LMAN_callback == NULL && lman.state != LMAN_STATE_READY)
+ {
+ lman.state = LMAN_STATE_READY;
+ return;
+ }
+ if (lman.pcswitch_flag)
+ {
+ rfu_LMAN_settingPCSWITCH(rand);
+ }
+ while (1)
+ {
+ if (lman.state != LMAN_STATE_READY)
+ {
+ rfu_waitREQComplete();
+ lman.active = 1;
+ switch (lman.state)
+ {
+ case LMAN_FORCED_STOP_AND_RFU_RESET:
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
+ {
+ msg=LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET;
+ }
+ else
+ {
+ msg=LMAN_MSG_RFU_FATAL_ERROR;
+ }
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(msg, 0);
+ break;
+ case LMAN_STATE_SOFT_RESET_AND_CHECK_ID:
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
+ {
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_CONFIG_SYSTEM;
+ }
+ else
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0);
+ }
+ break;
+ case LMAN_STATE_RESET:
+ rfu_REQ_reset();
+ break;
+ case LMAN_STATE_CONFIG_SYSTEM:
+ rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount);
+ break;
+ case LMAN_STATE_CONFIG_GAME_DATA:
+ rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName);
+ break;
+ case LMAN_STATE_START_SEARCH_CHILD:
+ rfu_REQ_startSearchChild();
+ break;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ rfu_REQ_pollSearchChild();
+ break;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ rfu_REQ_endSearchChild();
+ break;
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ rfu_REQ_startSearchParent();
+ break;
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ rfu_REQ_pollSearchParent();
+ break;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ rfu_REQ_endSearchParent();
+ break;
+ case LMAN_STATE_START_CONNECT_PARENT:
+ rfu_REQ_startConnectParent(lman.work);
+ break;
+ case LMAN_STATE_POLL_CONNECT_PARENT:
+ rfu_REQ_pollConnectParent();
+ break;
+ case LMAN_STATE_END_CONNECT_PARENT:
+ rfu_REQ_endConnectParent();
+ break;
+ case LMAN_STATE_SEND_CHILD_NAME:
+ break;
+ case LMAN_STATE_START_LINK_RECOVERY:
+ rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag);
+ break;
+ case LMAN_STATE_POLL_LINK_RECOVERY:
+ rfu_REQ_CHILD_pollConnectRecovery();
+ break;
+ case LMAN_STATE_END_LINK_RECOVERY:
+ rfu_REQ_CHILD_endConnectRecovery();
+ break;
+ case LMAN_STATE_MS_CHANGE:
+ rfu_REQ_changeMasterSlave();
+ break;
+ case LMAN_STATE_WAIT_CLOCK_MASTER:
+ break;
+ case LMAN_STATE_STOP_MODE:
+ rfu_REQ_stopMode();
+ break;
+ case LMAN_STATE_BACK_STATE:
+ break;
+ default:
+ break;
+ }
+ rfu_waitREQComplete();
+ lman.active = 0;
+ }
+ if (lman.state == LMAN_STATE_END_LINK_RECOVERY || lman.state == LMAN_STATE_MS_CHANGE)
+ ;
+ else
+ break;
+ }
+ if (gRfuLinkStatus->parentChild == MODE_PARENT)
+ {
+ if (rfu_LMAN_linkWatcher(0))
+ return;
+ }
+ rfu_LMAN_PARENT_checkRecvChildName();
+ rfu_LMAN_CHILD_checkSendChildName();
+ rfu_LMAN_CHILD_linkRecoveryProcess();
+ rfu_LMAN_checkNICommunicateStatus();
+}
+
+static void rfu_LMAN_settingPCSWITCH(u32 rand)
+{
+ if (lman.pcswitch_flag == PCSWITCH_3RD_SC_START)
+ {
+ lman.parent_child = MODE_PARENT;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.connect_period = lman.pcswitch_period_bak;
+ if (lman.connect_period)
+ {
+ lman.pcswitch_flag = PCSWITCH_3RD_SC;
+ }
+ else
+ {
+ lman.pcswitch_flag = PCSWITCH_1ST_SC_START;
+ }
+ }
+ if (lman.pcswitch_flag == PCSWITCH_1ST_SC_START)
+ {
+ lman.parent_child = MODE_PARENT;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.connect_period = rand % 140;
+ lman.pcswitch_period_bak = 140 - lman.connect_period;
+ if (lman.connect_period)
+ {
+ lman.pcswitch_flag = PCSWITCH_1ST_SC;
+ }
+ else
+ {
+ lman.pcswitch_flag = PCSWITCH_2ND_SP_START;
+ }
+ }
+ if (lman.pcswitch_flag == PCSWITCH_2ND_SP_START)
+ {
+ lman.parent_child = MODE_CHILD;
+ lman.connect_period = PCSWITCH_SP_PERIOD;
+ lman.pcswitch_flag = PCSWITCH_2ND_SP;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ }
+}
+
+static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult)
+{
+ u8 status;
+ u8 *stwiRecvBuffer;
+ u8 i;
+
+ if (lman.active != 0)
+ {
+ lman.active = 0;
+ switch (reqCommandId)
+ {
+ case ID_RESET_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_CONFIG_GAME_DATA;
+ }
+ break;
+ case ID_SYSTEM_CONFIG_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_READY;
+ }
+ break;
+ case ID_GAME_CONFIG_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_INITIALIZE_COMPLETED, 0);
+ }
+ break;
+ case ID_SC_START_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_CHILD;
+ }
+ break;
+ case ID_SC_POLL_REQ:
+ if (lman.connect_period && --lman.connect_period == 0)
+ {
+ lman.state = LMAN_STATE_END_SEARCH_CHILD;
+ lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME;
+ }
+ break;
+ case ID_SC_END_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state;
+ lman.next_state = LMAN_STATE_READY;
+ if (lman.pcswitch_flag == 0)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED, 0);
+ }
+ }
+ break;
+ case ID_SP_START_REQ:
+ if (reqResult == 0)
+ {
+ if (lman.fastSearchParent_flag == FSP_ON)
+ {
+ if (lman.connect_period > 1)
+ {
+ lman.connect_period--;
+ }
+ }
+ lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_PARENT;
+ }
+ break;
+ case ID_SP_POLL_REQ:
+ if (reqResult == 0)
+ {
+ status = rfu_LMAN_CHILD_checkEnableParentCandidate();
+ lman.param[0] = status;
+ if (status)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_PARENT_FOUND, 1);
+ }
+ if (lman.fastSearchParent_flag && lman.connect_period != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX)
+ {
+ rfu_REQ_endSearchParent();
+ rfu_waitREQComplete();
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ lman.fastSearchParent_flag = FSP_ON;
+ }
+ }
+ if (lman.connect_period && --lman.connect_period == 0)
+ {
+ lman.state = LMAN_STATE_END_SEARCH_PARENT;
+ lman.next_state = LMAN_STATE_READY;
+ }
+ break;
+ case ID_SP_END_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state;
+ if (lman.pcswitch_flag == 0)
+ {
+ if (lman.state == LMAN_STATE_READY)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED, 0);
+ }
+ }
+ else if (lman.pcswitch_flag != PCSWITCH_CP)
+ {
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ lman.pcswitch_flag = PCSWITCH_3RD_SC_START;
+ }
+ }
+ break;
+ case ID_CP_START_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT;
+ }
+ break;
+ case ID_CP_POLL_REQ:
+ if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot) && !status)
+ {
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ }
+ if (lman.connect_period && --lman.connect_period == 0)
+ {
+ lman.state = LMAN_STATE_END_CONNECT_PARENT;
+ }
+ break;
+ case ID_CP_END_REQ:
+ if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot))
+ {
+ if (!status)
+ {
+ lman.state = LMAN_STATE_MS_CHANGE;
+ lman.next_state = LMAN_STATE_SEND_CHILD_NAME;
+ lman.work = 0x22;
+ lman.param[0] = lman.child_slot;
+ }
+ else
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ lman.work = 0x23;
+ lman.param[0] = status;
+ if (lman.pcswitch_flag)
+ {
+ lman.pcswitch_flag = PCSWITCH_2ND_SP_START;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ }
+ }
+ rfu_LMAN_occureCallback(lman.work, 0x01);
+ lman.work = 0;
+ }
+ break;
+ case ID_CPR_START_REQ:
+ if (reqResult == 0)
+ {
+ lman.param[0] = gRfuLinkStatus->linkLossSlotFlag;
+ lman.state = lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY;
+ for (lman.child_slot = 0; lman.child_slot < RFU_CHILD_MAX; lman.child_slot++)
+ {
+ if ((gRfuLinkStatus->linkLossSlotFlag >> lman.child_slot) & 1)
+ {
+ break;
+ }
+ }
+ }
+ break;
+ case ID_CPR_POLL_REQ:
+ if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status) && status < 2)
+ {
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ }
+ if (lman.linkRecoveryTimer.count[lman.child_slot] && --lman.linkRecoveryTimer.count[lman.child_slot] == 0)
+ {
+ lman.state = LMAN_STATE_END_LINK_RECOVERY;
+ }
+ break;
+ case ID_CPR_END_REQ:
+ if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status))
+ {
+ if (!status)
+ {
+ lman.state = LMAN_STATE_MS_CHANGE;
+ lman.next_state = LMAN_STATE_BACK_STATE;
+ lman.work = 0x32;
+ }
+ else
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag);
+ lman.work = 0x33;
+ }
+ lman.linkRecoveryTimer.count[lman.child_slot] = 0;
+ lman.linkRecoveryTimer.active = 0;
+ lman.linkRecovery_start_flag = 0;
+ rfu_LMAN_occureCallback(lman.work, 0x01);
+ lman.work = 0;
+ }
+ break;
+ case ID_MS_CHANGE_REQ:
+ if (reqResult == 0)
+ {
+ if (lman.next_state == LMAN_STATE_BACK_STATE)
+ {
+ lman.state = lman.state_bak[0];
+ lman.next_state = lman.state_bak[1];
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0);
+ }
+ else if (lman.next_state == LMAN_STATE_SEND_CHILD_NAME)
+ {
+ lman.state = lman.next_state;
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0);
+ lman.nameAcceptTimer.active |= 1 << lman.child_slot;
+ lman.nameAcceptTimer.count[lman.child_slot] = lman.nameAcceptTimer.count_max;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ status = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e);
+ if (status)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = status;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1);
+ }
+ }
+ }
+ break;
+ case ID_STOP_MODE_REQ:
+ if (reqResult == 0)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_RFU_POWER_DOWN, 0);
+ }
+ break;
+ }
+ lman.active = 1;
+ }
+ else if (reqResult == 3 && lman.msc_exe_flag && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ))
+ {
+ rfu_REQ_RFUStatus();
+ rfu_waitREQComplete();
+ rfu_getRFUStatus(&status);
+ if (status == 0 && gRfuLinkStatus->parentChild == MODE_CHILD)
+ {
+ stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4;
+ *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag;
+ *stwiRecvBuffer = REASON_LINK_LOSS;
+ rfu_LMAN_linkWatcher(ID_DISCONNECTED_AND_CHANGE_REQ);
+ reqResult = 0;
+ }
+ }
+ switch (reqCommandId)
+ {
+ case ID_DISCONNECT_REQ:
+ if (reqResult == 0)
+ {
+ lman.param[0] = *(rfu_getSTWIRecvBuffer() + 8);
+ rfu_LMAN_reflectCommunicationStatus(lman.param[0]);
+ if (lman.linkRecoveryTimer.active)
+ {
+ lman.linkRecoveryTimer.active &= ~lman.param[0];
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((lman.param[0] >> i) & 1)
+ {
+ lman.linkRecoveryTimer.count[i] = 0;
+ }
+ }
+ if (lman.parent_child == MODE_CHILD)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ }
+ }
+ status = lman.acceptSlot_flag & lman.param[0];
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if ((status >> i) & 1 && lman.acceptCount)
+ {
+ lman.acceptCount--;
+ }
+ }
+ lman.acceptSlot_flag &= ~lman.param[0];
+ if (lman.pcswitch_flag)
+ {
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
+ {
+ if (lman.pcswitch_flag == PCSWITCH_SC_LOCK)
+ {
+ lman.connect_period = lman.pcswitch_period_bak;
+ lman.pcswitch_flag = PCSWITCH_3RD_SC;
+ lman.state = LMAN_STATE_POLL_SEARCH_CHILD;
+ }
+ else if (lman.state != LMAN_STATE_POLL_SEARCH_CHILD && lman.state != LMAN_STATE_END_SEARCH_CHILD)
+ {
+ lman.pcswitch_flag = PCSWITCH_1ST_SC_START;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ }
+ }
+ }
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
+ {
+ if (lman.state == LMAN_STATE_READY)
+ {
+ lman.parent_child = MODE_NEUTRAL;
+ }
+ }
+ if (lman.active == 0)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_LINK_DISCONNECTED_BY_USER, 1);
+ }
+ }
+ break;
+ case ID_DATA_RX_REQ:
+ rfu_LMAN_CHILD_checkSendChildName2();
+ if (gRfuLinkStatus->parentChild != MODE_NEUTRAL)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_RECV_DATA_REQ_COMPLETED, 0);
+ }
+ break;
+ case ID_RESET_REQ:
+ case ID_STOP_MODE_REQ:
+ if (reqResult == 0)
+ {
+ lman.reserveDisconnectSlot_flag = 0;
+ lman.acceptCount = 0;
+ lman.acceptSlot_flag = 0;;
+ lman.parent_child = MODE_NEUTRAL;
+ rfu_LMAN_managerChangeAgbClockMaster();
+ if (reqCommandId == ID_STOP_MODE_REQ)
+ {
+ rfu_LMAN_endManager();
+ }
+ }
+ break;
+ }
+ if (reqResult != 0)
+ {
+ if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && lman.pcswitch_flag == PCSWITCH_2ND_SP)
+ {
+ gRfuLinkStatus->parentChild = MODE_PARENT;
+ gRfuLinkStatus->connSlotFlag = 0xF;
+ rfu_LMAN_disconnect(15);
+ rfu_waitREQComplete();
+ return;
+ }
+ else
+ {
+ lman.param[0] = reqCommandId;
+ lman.param[1] = reqResult;
+ if (lman.active)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ }
+ rfu_LMAN_occureCallback(LMAN_MSG_REQ_API_ERROR, 2);
+ rfu_LMAN_managerChangeAgbClockMaster();
+ }
+ }
+ if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA, 0);
+ rfu_LMAN_managerChangeAgbClockMaster();
+ }
+}
+
+static void rfu_LMAN_MSC_callback(u16 reqCommandId)
+{
+ u8 active_bak;
+ u8 thisAck_flag;
+
+ active_bak = lman.active;
+ lman.active = 0;
+ lman.msc_exe_flag = 1;
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
+ {
+ rfu_LMAN_linkWatcher(reqCommandId);
+ if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_ON)
+ {
+ rfu_LMAN_managerChangeAgbClockMaster();
+ lman.msc_exe_flag = 0;
+ lman.active = active_bak;
+ return;
+ }
+ }
+ else
+ {
+ if (!rfu_UNI_PARENT_getDRAC_ACK(&thisAck_flag))
+ {
+ lman.parentAck_flag |= thisAck_flag;
+ }
+ }
+ if (lman.MSC_callback != NULL)
+ {
+ lman.MSC_callback(reqCommandId);
+ rfu_waitREQComplete();
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF_REQ)
+ {
+ rfu_LMAN_managerChangeAgbClockMaster();
+ }
+ }
+ lman.msc_exe_flag = 0;
+ lman.active = active_bak;
+}
+
+static void rfu_LMAN_PARENT_checkRecvChildName(void)
+{
+ u8 newSlot;
+ u8 newAcceptSlot;
+ u8 i;
+ u8 flags;
+ u8 tgtSlot;
+ const u16 *ptr;
+
+ if (lman.state == LMAN_STATE_START_SEARCH_CHILD || lman.state == LMAN_STATE_POLL_SEARCH_CHILD || lman.state == LMAN_STATE_END_SEARCH_CHILD || lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME)
+ {
+ newSlot = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag;
+ lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag;
+ if (newSlot)
+ {
+ lman.param[0] = newSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_DETECTED, 1);
+ }
+ newAcceptSlot = 0x00;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ tgtSlot = 1 << i;
+ flags = 0x00;
+ if (newSlot & tgtSlot)
+ {
+ lman.nameAcceptTimer.count[i] = lman.nameAcceptTimer.count_max;
+ lman.nameAcceptTimer.active |= tgtSlot;
+ }
+ else if (lman.nameAcceptTimer.active & tgtSlot)
+ {
+ if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS)
+ {
+ if (gRfuSlotStatusNI[i]->recv.dataType == 1)
+ {
+ flags = RN_NAME_TIMER_CLEAR;
+ for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++)
+ {
+ if (gRfuLinkStatus->partner[i].serialNo == *ptr)
+ {
+ lman.acceptSlot_flag |= tgtSlot;
+ lman.acceptCount++;
+ newAcceptSlot |= tgtSlot;
+ flags |= RN_ACCEPT;
+ break;
+ }
+ }
+ if (!(flags & RN_ACCEPT))
+ {
+ flags |= RN_DISCONNECT;
+ }
+ }
+ }
+ else if (--lman.nameAcceptTimer.count[i] == 0)
+ {
+ flags = RN_NAME_TIMER_CLEAR | RN_DISCONNECT;
+ }
+ if (flags & RN_NAME_TIMER_CLEAR)
+ {
+ lman.nameAcceptTimer.active &= ~tgtSlot;
+ lman.nameAcceptTimer.count[i] = 0;
+ rfu_clearSlot(TYPE_NI_RECV, i);
+ }
+ if (flags & RN_DISCONNECT)
+ {
+ lman.reserveDisconnectSlot_flag |= tgtSlot;
+ }
+ }
+ }
+ if (newAcceptSlot)
+ {
+ lman.param[0] = newAcceptSlot;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED, 1);
+ }
+ if (lman.reserveDisconnectSlot_flag)
+ {
+ flags = 1;
+ if (gRfuLinkStatus->sendSlotUNIFlag)
+ {
+ if (((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag))
+ {
+ flags = 0;
+ }
+ }
+ if (flags)
+ {
+ rfu_LMAN_disconnect(lman.reserveDisconnectSlot_flag);
+ lman.param[0] = lman.reserveDisconnectSlot_flag;
+ lman.reserveDisconnectSlot_flag = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_REJECTED, 1);
+ }
+ }
+ if (lman.nameAcceptTimer.active == 0 && lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME)
+ {
+ if (lman.pcswitch_flag == 0)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_occureCallback(LMAN_MSG_END_WAIT_CHILD_NAME, 0);
+ }
+ else
+ {
+ if (lman.pcswitch_flag == PCSWITCH_1ST_SC)
+ {
+ lman.pcswitch_flag = PCSWITCH_2ND_SP_START;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ }
+ else
+ {
+ lman.pcswitch_flag = PCSWITCH_1ST_SC_START;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ }
+ if (lman.acceptSlot_flag)
+ {
+ lman.connect_period = 0;
+ lman.pcswitch_flag = PCSWITCH_SC_LOCK;
+ lman.state = LMAN_STATE_START_SEARCH_CHILD;
+ }
+ }
+ }
+ }
+}
+
+static void rfu_LMAN_CHILD_checkSendChildName(void)
+{
+ u16 imeBak = REG_IME;
+ REG_IME = 0;
+ if (lman.state == LMAN_STATE_SEND_CHILD_NAME)
+ {
+ if (--lman.nameAcceptTimer.count[lman.child_slot] == 0 || gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_FAILED)
+ {
+ rfu_LMAN_requestChangeAgbClockMaster();
+ lman.state = LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ lman.nameAcceptTimer.active &= ~(1 << lman.child_slot);
+ lman.nameAcceptTimer.count[lman.child_slot] = 0;
+ }
+ }
+ REG_IME = imeBak;
+ if (lman.state == LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER)
+ {
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
+ {
+ rfu_LMAN_requestChangeAgbClockMaster();
+ }
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ lman.param[0] = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1);
+ }
+ }
+}
+
+static void rfu_LMAN_CHILD_checkSendChildName2(void)
+{
+ if (lman.state == LMAN_STATE_SEND_CHILD_NAME && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS)
+ {
+ lman.state = lman.next_state = LMAN_STATE_READY;
+ rfu_clearSlot(TYPE_NI_SEND, lman.child_slot);
+ lman.nameAcceptTimer.active &= ~(1 << lman.child_slot);
+ lman.nameAcceptTimer.count[lman.child_slot] = 0;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_COMPLETED, 0);
+ }
+}
+
+static void rfu_LMAN_CHILD_linkRecoveryProcess(void)
+{
+ if (lman.parent_child == MODE_CHILD && lman.linkRecovery_start_flag == LINK_RECOVERY_START)
+ {
+ lman.state_bak[0] = lman.state;
+ lman.state_bak[1] = lman.next_state;
+ lman.state = LMAN_STATE_START_LINK_RECOVERY;
+ lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY;
+ lman.linkRecovery_start_flag = LINK_RECOVERY_EXE;
+ }
+}
+
+static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void)
+{
+ u8 i;
+ u16 *serialNo;
+ u8 flags = 0x00;
+
+ for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
+ {
+ for (serialNo = lman.acceptable_serialNo_list; *serialNo != 0xFFFF; serialNo++)
+ {
+ if (gRfuLinkStatus->partner[i].serialNo == *serialNo)
+ {
+ flags |= (1 << i);
+ }
+ }
+ }
+ return flags;
+}
+
+static void rfu_LMAN_occureCallback(u8 msg, u8 param_count)
+{
+ if (lman.LMAN_callback != NULL)
+ {
+ lman.LMAN_callback(msg, param_count);
+ }
+ lman.param[0] = lman.param[1] = 0;
+}
+
+static void rfu_LMAN_disconnect(u8 bm_disconnectedSlot)
+{
+ u8 active_bak = lman.active;
+ lman.active = 1;
+ rfu_REQ_disconnect(bm_disconnectedSlot);
+ rfu_waitREQComplete();
+ lman.active = active_bak;
+}
+
+static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot)
+{
+ u8 i;
+
+ if (gRfuLinkStatus->sendSlotNIFlag)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & bm_disconnectedSlot)
+ {
+ rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~bm_disconnectedSlot);
+ }
+ }
+ }
+ if (gRfuLinkStatus->recvSlotNIFlag)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & bm_disconnectedSlot)
+ {
+ rfu_NI_stopReceivingData(i);
+ }
+ }
+ }
+ if (gRfuLinkStatus->sendSlotUNIFlag)
+ {
+ gRfuLinkStatus->sendSlotUNIFlag &= ~bm_disconnectedSlot;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && bm_disconnectedSlot & gRfuSlotStatusUNI[i]->send.bmSlot)
+ {
+ gRfuSlotStatusUNI[i]->send.bmSlot &= ~bm_disconnectedSlot;
+ }
+ }
+ }
+}
+
+static void rfu_LMAN_checkNICommunicateStatus(void)
+{
+ u8 i;
+ u8 j;
+ u8 flags;
+
+ if (lman.NI_failCounter_limit)
+ {
+ if (gRfuLinkStatus->sendSlotNIFlag)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG)
+ {
+ flags = 0;
+ for (j = 0; j < RFU_CHILD_MAX; j++)
+ {
+ if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > lman.NI_failCounter_limit)
+ {
+ flags |= (1 << j);
+ }
+ if (flags)
+ {
+ rfu_changeSendTarget(TYPE_NI, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot);
+ }
+ }
+ }
+ }
+ }
+ if (gRfuLinkStatus->recvSlotNIFlag)
+ {
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > lman.NI_failCounter_limit)
+ {
+ rfu_NI_stopReceivingData(i);
+ }
+ }
+ }
+ }
+}
+
+void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16))
+{
+ lman.MSC_callback = MSC_callback_p;
+ rfu_setMSCCallback(rfu_LMAN_MSC_callback);
+}
+
+static void rfu_LMAN_setLMANCallback(void (*func)(u8, u8))
+{
+ lman.LMAN_callback = func;
+}
+
+u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period)
+{
+ u16 imeBak;
+ if (lman.linkRecovery_enable && enable_flag == 0 && lman.linkRecoveryTimer.active)
+ {
+ return LMAN_ERROR_NOW_LINK_RECOVERY;
+ }
+ imeBak = REG_IME;
+ REG_IME = 0;
+ lman.linkRecovery_enable = enable_flag;
+ lman.linkRecoveryTimer.count_max = recovery_period;
+ REG_IME = imeBak;
+ return 0;
+}
+
+static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit)
+{
+ if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag)
+ {
+ lman.param[0] = 6;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_NOW_COMMUNICATION;
+ }
+ lman.NI_failCounter_limit = NI_failCounter_limit;
+ return 0;
+}
+
+static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag)
+{
+ if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT)
+ {
+ lman.param[0] = 7;
+ rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1);
+ return LMAN_ERROR_NOW_SEARCH_PARENT;
+ }
+ if (enable_flag)
+ {
+ lman.fastSearchParent_flag = FSP_ON;
+ }
+ else
+ {
+ lman.fastSearchParent_flag = 0;
+ }
+ return 0;
+}
+
+static void rfu_LMAN_managerChangeAgbClockMaster(void)
+{
+ if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_OFF)
+ {
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF;
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0);
+ }
+}
+
+void rfu_LMAN_requestChangeAgbClockMaster(void)
+{
+ if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF)
+ {
+ rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0);
+ }
+ else if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON)
+ {
+ lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF_REQ;
+ }
+}
+
+void rfu_LMAN_forceChangeSP(void)
+{
+ if (lman.pcswitch_flag)
+ {
+ switch (lman.state)
+ {
+ case LMAN_STATE_START_SEARCH_CHILD:
+ lman.pcswitch_flag = PCSWITCH_2ND_SP_START;
+ lman.state = LMAN_STATE_START_SEARCH_PARENT;
+ break;
+ case LMAN_STATE_POLL_SEARCH_CHILD:
+ lman.pcswitch_flag = PCSWITCH_1ST_SC;
+ lman.connect_period = 1;
+ break;
+ case LMAN_STATE_END_SEARCH_CHILD:
+ case LMAN_STATE_WAIT_RECV_CHILD_NAME:
+ lman.pcswitch_flag = PCSWITCH_1ST_SC;
+ break;
+ case LMAN_STATE_START_SEARCH_PARENT:
+ case LMAN_STATE_POLL_SEARCH_PARENT:
+ lman.connect_period = PCSWITCH_SP_PERIOD;
+ break;
+ case LMAN_STATE_END_SEARCH_PARENT:
+ lman.connect_period = PCSWITCH_SP_PERIOD;
+ lman.state = LMAN_STATE_POLL_SEARCH_PARENT;
+ break;
+ }
+ }
+}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index cb9e04a50..7b0a8aa47 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -831,9 +831,9 @@ void sub_802F6A8(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gWirelessCommType == 0)
- sub_800AAC0();
+ Link_TryStartSend5FFF();
else
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gBattlerControllerFuncs[gActiveBattler] = sub_802F610;
}
else
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index ca2ef0b22..834b9e6b6 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -35,7 +35,7 @@ void HandleLinkBattleSetup(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
if (gWirelessCommType)
- sub_800B1F4();
+ SetWirelessCommType1();
if (!gReceivedRemoteLinkPlayers)
OpenLink();
CreateTask(sub_8081A90, 0);
@@ -491,7 +491,7 @@ void sub_800DD28(void)
if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_20) && (gLinkPlayers[0].linkType == 0x2211))
{
- sub_80FBB4C();
+ LinkRfu_DestroyIdleTask();
for (i = 0; i < GetLinkPlayerCount(); ++i)
{
if (GetBlockReceivedStatus() & gBitTable[i])
diff --git a/src/battle_main.c b/src/battle_main.c
index fd8aeffbc..faad8bafb 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -50,6 +50,7 @@
#include "cable_club.h"
#include "constants/abilities.h"
#include "constants/battle_move_effects.h"
+#include "constants/battle_setup.h"
#include "constants/hold_effects.h"
#include "constants/items.h"
#include "constants/moves.h"
@@ -1151,9 +1152,9 @@ static void CB2_PreInitMultiBattle(void)
{
++gBattleCommunication[MULTIUSE_STATE];
if (gWirelessCommType)
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
else
- sub_800AAC0();
+ Link_TryStartSend5FFF();
}
break;
case 3:
@@ -3716,12 +3717,12 @@ static void HandleEndTurn_BattleLost(void)
}
else
{
- if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && ScrSpecial_GetTrainerBattleMode() == 9)
+ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_EARLY_RIVAL)
{
- if (sub_80803D8() & 1)
- gBattleCommunication[MULTISTRING_CHOOSER] = 1;
+ if (GetRivalBattleFlags() & RIVAL_BATTLE_HEAL_AFTER)
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Dont do white out text
else
- gBattleCommunication[MULTISTRING_CHOOSER] = 2;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2; // Do white out text
gBattlerAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
else
@@ -4163,7 +4164,6 @@ bool8 TryRunFromBattle(u8 battler)
{
bool8 effect = FALSE;
u8 holdEffect;
- u8 pyramidMultiplier;
u8 speedVar;
if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY)
diff --git a/src/battle_message.c b/src/battle_message.c
index 4f95ae364..d8367c75e 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -22,6 +22,7 @@
#include "constants/moves.h"
#include "constants/items.h"
#include "constants/trainer_classes.h"
+#include "constants/trainer_tower.h"
struct BattleWindowText
{
@@ -1294,9 +1295,9 @@ const u8 gUnknown_83FE94D[] = _("a PSYCHIC move");
const u8 gUnknown_83FE95C[] = _("an ICE move");
const u8 gUnknown_83FE968[] = _("a DRAGON move");
const u8 gUnknown_83FE976[] = _("a DARK move");
-const u8 gUnknown_83FE982[] = _("TIME BOARD");
-const u8 gUnknown_83FE98D[] = _("CLEAR TIME");
-const u8 gUnknown_83FE998[] = _("{STR_VAR_1}MIN. {STR_VAR_2}.{STR_VAR_3}SEC.");
+const u8 gText_TimeBoard[] = _("TIME BOARD");
+const u8 gText_ClearTime[] = _("CLEAR TIME"); // Unused
+const u8 gText_XMinYZSec[] = _("{STR_VAR_1}MIN. {STR_VAR_2}.{STR_VAR_3}SEC.");
const u8 gUnknown_83FE9A9[] = _("1F");
const u8 gUnknown_83FE9AC[] = _("2F");
const u8 gUnknown_83FE9AF[] = _("3F");
@@ -1306,7 +1307,7 @@ const u8 gUnknown_83FE9B8[] = _("6F");
const u8 gUnknown_83FE9BB[] = _("7F");
const u8 gUnknown_83FE9BE[] = _("8F");
-const u8 *const gUnknown_83FE9C4[] = {
+const u8 *const gTrainerTowerChallengeTypeTexts[NUM_TOWER_CHALLENGE_TYPES] = {
gOtherText_Single,
gOtherText_Double,
gOtherText_Knockout,
@@ -1990,7 +1991,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
toCpy = gTrainerClassNames[GetBattleTowerTrainerClassNameId()];
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
- toCpy = gTrainerClassNames[sub_815DA10()];
+ toCpy = gTrainerClassNames[GetTrainerTowerOpponentClass()];
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
toCpy = gTrainerClassNames[GetEreaderTrainerClassId()];
else
@@ -2014,7 +2015,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
{
- sub_815DA28(text);
+ GetTrainerTowerOpponentName(text);
toCpy = text;
}
else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER)
@@ -2054,7 +2055,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
{
- sub_815DC40(gStringVar4, 0);
+ GetTrainerTowerOpponentLoseText(gStringVar4, 0);
toCpy = gStringVar4;
}
else
@@ -2065,7 +2066,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER)
{
- sub_815DBF4(gStringVar4, 0);
+ GetTrainerTowerOpponentWinText(gStringVar4, 0);
toCpy = gStringVar4;
}
else
@@ -2074,11 +2075,11 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
break;
case B_TXT_TRAINER2_LOSE_TEXT:
- sub_815DC40(gStringVar4, 1);
+ GetTrainerTowerOpponentLoseText(gStringVar4, 1);
toCpy = gStringVar4;
break;
case B_TXT_TRAINER2_WIN_TEXT:
- sub_815DBF4(gStringVar4, 1);
+ GetTrainerTowerOpponentWinText(gStringVar4, 1);
toCpy = gStringVar4;
break;
case B_TXT_26: // ?
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 102a1b969..ae6aaf8be 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -78,7 +78,7 @@ static EWRAM_DATA u8 *sTrainerVictorySpeech = NULL;
static EWRAM_DATA u8 *sTrainerCannotBattleSpeech = NULL;
static EWRAM_DATA u8 *sTrainerBattleEndScript = NULL;
static EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL;
-static EWRAM_DATA u16 gUnknown_20386CC = 0;
+static EWRAM_DATA u16 sRivalBattleFlags = 0;
static const u8 sBattleTransitionTable_Wild[][2] =
{
@@ -148,11 +148,11 @@ static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] =
{&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
-static const struct TrainerBattleParameter sTutorialBattleParams[] =
+static const struct TrainerBattleParameter sEarlyRivalBattleParams[] =
{
{&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
{&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
- {&gUnknown_20386CC, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sRivalBattleFlags, TRAINER_PARAM_LOAD_VAL_16BIT},
{&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
{&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
{&sTrainerVictorySpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
@@ -706,7 +706,7 @@ static void InitTrainerBattleVariables(void)
sTrainerCannotBattleSpeech = NULL;
sTrainerBattleEndScript = NULL;
sTrainerABattleScriptRetAddr = NULL;
- gUnknown_20386CC = 0;
+ sRivalBattleFlags = 0;
}
static inline void SetU8(void *ptr, u8 value)
@@ -808,8 +808,8 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
SetMapVarsToTrainer();
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
return EventScript_TryDoRematchBattle;
- case TRAINER_BATTLE_TUTORIAL:
- TrainerBattleLoadArgs(sTutorialBattleParams, data);
+ case TRAINER_BATTLE_EARLY_RIVAL:
+ TrainerBattleLoadArgs(sEarlyRivalBattleParams, data);
return EventScript_DoTrainerBattle;
default:
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -846,9 +846,9 @@ u8 ScrSpecial_GetTrainerBattleMode(void)
return sTrainerBattleMode;
}
-u16 sub_80803D8(void)
+u16 GetRivalBattleFlags(void)
{
- return gUnknown_20386CC;
+ return sRivalBattleFlags;
}
u16 ScrSpecial_HasTrainerBeenFought(void)
@@ -885,8 +885,7 @@ void ClearTrainerFlag(u16 trainerId)
void BattleSetup_StartTrainerBattle(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
- if (ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_TUTORIAL
- && sub_80803D8() & 3)
+ if (ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_EARLY_RIVAL && GetRivalBattleFlags() & RIVAL_BATTLE_TUTORIAL)
gBattleTypeFlags |= BATTLE_TYPE_FIRST_BATTLE;
gMain.savedCallback = CB2_EndTrainerBattle;
DoTrainerBattle();
@@ -895,12 +894,12 @@ void BattleSetup_StartTrainerBattle(void)
static void CB2_EndTrainerBattle(void)
{
- if (sTrainerBattleMode == TRAINER_BATTLE_TUTORIAL)
+ if (sTrainerBattleMode == TRAINER_BATTLE_EARLY_RIVAL)
{
if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
- gSpecialVar_Result = 1;
- if (gUnknown_20386CC & 1)
+ gSpecialVar_Result = TRUE;
+ if (sRivalBattleFlags & RIVAL_BATTLE_HEAL_AFTER)
{
HealPlayerParty();
}
@@ -915,7 +914,7 @@ static void CB2_EndTrainerBattle(void)
}
else
{
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
SetBattledTrainerFlag();
sub_81139BC();
diff --git a/src/cereader_tool.c b/src/cereader_tool.c
index 2c5d05018..c6e0c9a99 100644
--- a/src/cereader_tool.c
+++ b/src/cereader_tool.c
@@ -6,40 +6,40 @@
u8 sub_815D654(void)
{
- return (gSaveBlock1Ptr->unkArray[0].unk9 + 1) % 256;
+ return (gSaveBlock1Ptr->trainerTower[0].unk9 + 1) % 256;
}
static bool32 ValidateTrainerTowerTrainer(struct TrainerTowerFloor * floor)
{
- if (floor->floorIdx < 1 || floor->floorIdx > 8)
+ if (floor->floorIdx < 1 || floor->floorIdx > MAX_TRAINER_TOWER_FLOORS)
return FALSE;
- if (floor->challengeType > 2)
+ if (floor->challengeType > CHALLENGE_TYPE_KNOCKOUT)
return FALSE;
if (CalcByteArraySum((const u8 *)floor, offsetof(typeof(*floor), checksum)) != floor->checksum)
return FALSE;
return TRUE;
}
-bool32 ValidateTrainerTowerData(struct EReaderTrainerHillSet * ttdata)
+bool32 ValidateTrainerTowerData(struct EReaderTrainerTowerSet * ttdata)
{
- u32 count = ttdata->count;
+ u32 numFloors = ttdata->numFloors;
s32 i;
- if (count < 1 || count > 8)
+ if (numFloors < 1 || numFloors > MAX_TRAINER_TOWER_FLOORS)
return FALSE;
- for (i = 0; i < count; i++)
+ for (i = 0; i < numFloors; i++)
{
if (!ValidateTrainerTowerTrainer(&ttdata->floors[i]))
return FALSE;
}
- if (CalcByteArraySum((const u8 *)ttdata->floors, count * sizeof(ttdata->floors[0])) != ttdata->checksum)
+ if (CalcByteArraySum((const u8 *)ttdata->floors, numFloors * sizeof(ttdata->floors[0])) != ttdata->checksum)
return FALSE;
return TRUE;
}
-#define SEC30_SIZE (offsetof(struct EReaderTrainerHillSet, floors[4]))
-#define SEC31_SIZE (sizeof(struct EReaderTrainerHillSet) - SEC30_SIZE)
+#define SEC30_SIZE (offsetof(struct EReaderTrainerTowerSet, floors[4]))
+#define SEC31_SIZE (sizeof(struct EReaderTrainerTowerSet) - SEC30_SIZE)
-static bool32 CEReaderTool_SaveTrainerTower_r(struct EReaderTrainerHillSet * ttdata, u8 * buffer)
+static bool32 CEReaderTool_SaveTrainerTower_r(struct EReaderTrainerTowerSet * ttdata, u8 * buffer)
{
AGB_ASSERT_EX(ttdata->dummy == 0, ABSPATH("cereader_tool.c"), 198);
AGB_ASSERT_EX(ttdata->id == 0, ABSPATH("cereader_tool.c"), 199)
@@ -56,7 +56,7 @@ static bool32 CEReaderTool_SaveTrainerTower_r(struct EReaderTrainerHillSet * ttd
return TRUE;
}
-bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerHillSet * ttdata)
+bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerTowerSet * ttdata)
{
u8 * buffer = AllocZeroed(0x1000);
bool32 result = CEReaderTool_SaveTrainerTower_r(ttdata, buffer);
@@ -64,7 +64,7 @@ bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerHillSet * ttdata)
return result;
}
-static bool32 CEReaderTool_LoadTrainerTower_r(struct EReaderTrainerHillSet * ttdata, void * buffer)
+static bool32 CEReaderTool_LoadTrainerTower_r(struct EReaderTrainerTowerSet * ttdata, void * buffer)
{
if (TryCopySpecialSaveSection(SECTOR_TTOWER(0), buffer) != 1)
return FALSE;
@@ -79,10 +79,16 @@ static bool32 CEReaderTool_LoadTrainerTower_r(struct EReaderTrainerHillSet * ttd
return TRUE;
}
-bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerHillSet * ttdata)
+bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerTowerSet * ttdata)
{
void * buffer = AllocZeroed(0x1000);
bool32 success = CEReaderTool_LoadTrainerTower_r(ttdata, buffer);
Free(buffer);
return success;
}
+
+bool32 ReadTrainerTowerAndValidate(void)
+{
+ // Stubbed out. Populated in Emerald
+ return FALSE;
+}
diff --git a/src/daycare.c b/src/daycare.c
index a377e97f5..277a382c7 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,44 +1,34 @@
#include "global.h"
-#include "pokemon.h"
+#include "gflib.h"
#include "battle.h"
#include "daycare.h"
-#include "string_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "mail_data.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
-#include "main.h"
#include "constants/moves.h"
-#include "text.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "script.h"
#include "strings.h"
-#include "task.h"
-#include "window.h"
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
#include "pokedex.h"
#include "decompress.h"
-#include "palette.h"
-#include "sound.h"
#include "constants/songs.h"
#include "text_window.h"
#include "trig.h"
-#include "malloc.h"
-#include "gpu_regs.h"
-#include "bg.h"
#include "m4a.h"
#include "graphics.h"
#include "scanline_effect.h"
#include "naming_screen.h"
#include "help_system.h"
#include "field_fadetransition.h"
+#include "trade.h"
#include "constants/daycare.h"
-#include "constants/pokemon.h"
#include "constants/region_map.h"
// Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c
@@ -60,20 +50,6 @@ struct EggHatchData
u8 textColor[3];
};
-extern const u8 gText_MaleSymbol4[];
-extern const u8 gText_FemaleSymbol4[];
-extern const u8 gText_GenderlessSymbol[];
-extern const u8 gText_Lv[];
-extern const u8 gDaycareText_GetAlongVeryWell[];
-extern const u8 gDaycareText_GetAlong[];
-extern const u8 gDaycareText_DontLikeOther[];
-extern const u8 gDaycareText_PlayOther[];
-extern const u8 gExpandedPlaceholder_Empty[];
-
-extern const u32 gUnknown_826601C[]; // tilemap gameboy circle
-extern const u8 gText_HatchedFromEgg[];
-extern const u8 gText_NickHatchPrompt[];
-
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
@@ -638,7 +614,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH/* + 1*/; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->OT_name[i] = 0;
for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
mail->monName[i] = 0;
diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c
new file mode 100644
index 000000000..af2618615
--- /dev/null
+++ b/src/digit_obj_util.c
@@ -0,0 +1,449 @@
+#include "global.h"
+#include "malloc.h"
+#include "decompress.h"
+#include "digit_obj_util.h"
+#include "main.h"
+#include "battle.h"
+
+struct DigitPrinterAlloc
+{
+ u32 count;
+ struct DigitPrinter
+ {
+ bool8 isActive;
+ u8 firstOamId;
+ u8 strConvMode;
+ u8 oamCount;
+ u8 palTagIndex;
+ u8 size;
+ u8 shape;
+ u8 priority;
+ u8 xDelta;
+ u8 tilesPerImage;
+ u16 tileStart;
+ s16 x;
+ s16 y;
+ u16 tileTag;
+ u16 palTag;
+ u32 pow10;
+ s32 lastPrinted;
+ } *array;
+};
+
+// this file's functions
+static u8 GetFirstOamId(u8 oamCount);
+static void CopyWorkToOam(struct DigitPrinter *objWork);
+static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign);
+static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign);
+static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign);
+static bool32 SharesTileWithAnyActive(u32 id);
+static bool32 SharesPalWithAnyActive(u32 id);
+static u8 GetTilesPerImage(u32 shape, u32 size);
+
+// ewram
+static EWRAM_DATA struct DigitPrinterAlloc *sOamWork = {0};
+
+// const rom data
+static const u8 sTilesPerImage[4][4] =
+{
+ [ST_OAM_SQUARE] = {
+ [ST_OAM_SIZE_0] = 0x01, // SPRITE_SIZE_8x8
+ [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_16x16
+ [ST_OAM_SIZE_2] = 0x10, // SPRITE_SIZE_32x32
+ [ST_OAM_SIZE_3] = 0x40 // SPRITE_SIZE_64x64
+ },
+ [ST_OAM_H_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_16x8
+ [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_32x8
+ [ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_32x16
+ [ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_64x32
+ },
+ [ST_OAM_V_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_8x16
+ [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_8x32
+ [ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_16x32
+ [ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_32x64
+ }
+};
+
+// code
+bool32 DigitObjUtil_Init(u32 count)
+{
+ u32 i;
+
+ if (sOamWork != NULL)
+ DigitObjUtil_Teardown();
+
+ sOamWork = Alloc(sizeof(*sOamWork));
+ if (sOamWork == NULL)
+ return FALSE;
+
+ sOamWork->array = Alloc(sizeof(struct DigitPrinter) * count);
+ if (sOamWork->array == NULL)
+ {
+ Free(sOamWork);
+ return FALSE;
+ }
+
+ sOamWork->count = count;
+ for (i = 0; i < count; i++)
+ {
+ sOamWork->array[i].isActive = FALSE;
+ sOamWork->array[i].firstOamId = 0xFF;
+ }
+
+ return TRUE;
+}
+
+void DigitObjUtil_Teardown(void)
+{
+ if (sOamWork != NULL)
+ {
+ if (sOamWork->array != NULL)
+ {
+ u32 i;
+
+ for (i = 0; i < sOamWork->count; i++)
+ DigitObjUtil_DeletePrinter(i);
+
+ Free(sOamWork->array);
+ }
+
+ FREE_AND_SET_NULL(sOamWork);
+ }
+}
+
+bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template)
+{
+ u32 i;
+
+ if (sOamWork == NULL)
+ return FALSE;
+ if (sOamWork->array[id].isActive)
+ return FALSE;
+
+ sOamWork->array[id].firstOamId = GetFirstOamId(template->oamCount);
+ if (sOamWork->array[id].firstOamId == 0xFF)
+ return FALSE;
+
+ sOamWork->array[id].tileStart = GetSpriteTileStartByTag(template->spriteSheet->tag);
+ if (sOamWork->array[id].tileStart == 0xFFFF)
+ {
+ if (template->spriteSheet->size != 0)
+ {
+ sOamWork->array[id].tileStart = LoadSpriteSheet(template->spriteSheet);
+ }
+ else
+ {
+ struct CompressedSpriteSheet compObjectPic;
+
+ compObjectPic = *(struct CompressedSpriteSheet*)(template->spriteSheet);
+ compObjectPic.size = GetDecompressedDataSize(template->spriteSheet->data);
+ sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic);
+ }
+
+ if (sOamWork->array[id].tileStart == 0xFFFF)
+ return FALSE;
+ }
+
+ sOamWork->array[id].palTagIndex = IndexOfSpritePaletteTag(template->spritePal->tag);
+ if (sOamWork->array[id].palTagIndex == 0xFF)
+ sOamWork->array[id].palTagIndex = LoadSpritePalette(template->spritePal);
+
+ sOamWork->array[id].strConvMode = template->strConvMode;
+ sOamWork->array[id].oamCount = template->oamCount;
+ sOamWork->array[id].x = template->x;
+ sOamWork->array[id].y = template->y;
+ sOamWork->array[id].shape = template->shape;
+ sOamWork->array[id].size = template->size;
+ sOamWork->array[id].priority = template->priority;
+ sOamWork->array[id].xDelta = template->xDelta;
+ sOamWork->array[id].tilesPerImage = GetTilesPerImage(template->shape, template->size);
+ sOamWork->array[id].tileTag = template->spriteSheet->tag;
+ sOamWork->array[id].palTag = template->spritePal->tag;
+ sOamWork->array[id].isActive = TRUE;
+
+ // Decimal left shift
+ sOamWork->array[id].pow10 = 1;
+ for (i = 1; i < template->oamCount; i++)
+ sOamWork->array[id].pow10 *= 10;
+
+ CopyWorkToOam(&sOamWork->array[id]);
+ DigitObjUtil_PrintNumOn(id, num);
+
+ return TRUE;
+}
+
+static void CopyWorkToOam(struct DigitPrinter *objWork)
+{
+ u32 i;
+ u32 oamId = objWork->firstOamId;
+ u32 x = objWork->x;
+ u32 oamCount = objWork->oamCount + 1;
+
+ CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount);
+ for (i = 0, oamId = objWork->firstOamId; i < oamCount; i++, oamId++)
+ {
+ gMain.oamBuffer[oamId].y = objWork->y;
+ gMain.oamBuffer[oamId].x = x;
+ gMain.oamBuffer[oamId].shape = objWork->shape;
+ gMain.oamBuffer[oamId].size = objWork->size;
+ gMain.oamBuffer[oamId].tileNum = objWork->tileStart;
+ gMain.oamBuffer[oamId].priority = objWork->priority;
+ gMain.oamBuffer[oamId].paletteNum = objWork->palTagIndex;
+
+ x += objWork->xDelta;
+ }
+
+ oamId--;
+ gMain.oamBuffer[oamId].x = objWork->x - objWork->xDelta;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+ gMain.oamBuffer[oamId].tileNum = objWork->tileStart + (objWork->tilesPerImage * 10);
+}
+
+void DigitObjUtil_PrintNumOn(u32 id, s32 num)
+{
+ bool32 sign;
+
+ if (sOamWork == NULL)
+ return;
+ if (!sOamWork->array[id].isActive)
+ return;
+
+ sOamWork->array[id].lastPrinted = num;
+ if (num < 0)
+ {
+ sign = TRUE;
+ num *= -1;
+ }
+ else
+ {
+ sign = FALSE;
+ }
+
+ switch (sOamWork->array[id].strConvMode)
+ {
+ case 0:
+ default:
+ DrawNumObjsLeadingZeros(&sOamWork->array[id], num, sign);
+ break;
+ case 1:
+ DrawNumObjsMinusInFront(&sOamWork->array[id], num, sign);
+ break;
+ case 2:
+ DrawNumObjsMinusInBack(&sOamWork->array[id], num, sign);
+ break;
+ }
+}
+
+static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign)
+{
+ u32 pow10 = objWork->pow10;
+ u32 oamId = objWork->firstOamId;
+
+ while (pow10 != 0)
+ {
+ u32 digit = num / pow10;
+ num -= (digit * pow10);
+ pow10 /= 10;
+
+ gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
+ oamId++;
+ }
+
+ if (sign)
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+ else
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+}
+
+static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign)
+{
+ u32 pow10 = objWork->pow10;
+ static int oamId;
+ static int curDigit;
+ static int firstDigit;
+
+ oamId = objWork->firstOamId;
+ curDigit = 0;
+ firstDigit = -1;
+
+ while (pow10 != 0)
+ {
+ u32 digit = num / pow10;
+ num -= (digit * pow10);
+ pow10 /= 10;
+
+ if (digit != 0 || firstDigit != -1 || pow10 == 0)
+ {
+ gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+
+ if (firstDigit == -1)
+ firstDigit = curDigit;
+ }
+ else
+ {
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+ }
+
+ oamId++;
+ curDigit++;
+ }
+
+ if (sign)
+ {
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+ gMain.oamBuffer[oamId].x = objWork->x + ((firstDigit - 1) * objWork->xDelta);
+ }
+ else
+ {
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+ }
+}
+
+static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign)
+{
+ u32 pow10 = objWork->pow10;
+ u32 oamId = objWork->firstOamId;
+ u32 printingDigits = 0;
+ s32 nsprites = 0;
+
+ while (pow10 != 0)
+ {
+ u32 digit = num / pow10;
+ num -= (digit * pow10);
+ pow10 /= 10;
+
+ if (digit != 0 || printingDigits != 0 || pow10 == 0)
+ {
+ printingDigits = 1;
+ gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+
+ oamId++;
+ nsprites++;
+ }
+ }
+
+ while (nsprites < objWork->oamCount)
+ {
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+ oamId++;
+ nsprites++;
+ }
+
+ if (sign)
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+ else
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+}
+
+void DigitObjUtil_DeletePrinter(u32 id)
+{
+ s32 oamId, oamCount, i;
+
+ if (sOamWork == NULL)
+ return;
+ if (!sOamWork->array[id].isActive)
+ return;
+
+ oamCount = sOamWork->array[id].oamCount + 1;
+ oamId = sOamWork->array[id].firstOamId;
+
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+
+ if (!SharesTileWithAnyActive(id))
+ FreeSpriteTilesByTag(sOamWork->array[id].tileTag);
+ if (!SharesPalWithAnyActive(id))
+ FreeSpritePaletteByTag(sOamWork->array[id].palTag);
+
+ sOamWork->array[id].isActive = FALSE;
+}
+
+void DigitObjUtil_HideOrShow(u32 id, bool32 hide)
+{
+ s32 oamId, oamCount, i;
+
+ if (sOamWork == NULL)
+ return;
+ if (!sOamWork->array[id].isActive)
+ return;
+
+ oamCount = sOamWork->array[id].oamCount + 1;
+ oamId = sOamWork->array[id].firstOamId;
+ if (hide)
+ {
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
+ }
+ else
+ {
+ for (i = 0; i < oamCount; i++, oamId++)
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
+
+ DigitObjUtil_PrintNumOn(id, sOamWork->array[id].lastPrinted);
+ }
+}
+
+static u8 GetFirstOamId(u8 oamCount)
+{
+ u32 i;
+ u16 firstOamId = 64;
+
+ for (i = 0; i < sOamWork->count; i++)
+ {
+ if (!sOamWork->array[i].isActive)
+ {
+ if (sOamWork->array[i].firstOamId != 0xFF && sOamWork->array[i].oamCount <= oamCount)
+ return sOamWork->array[i].firstOamId;
+ }
+ else
+ {
+ firstOamId += 1 + sOamWork->array[i].oamCount;
+ }
+ }
+
+ if (firstOamId + oamCount + 1 > 128)
+ return 0xFF;
+ else
+ return firstOamId;
+}
+
+static bool32 SharesTileWithAnyActive(u32 id)
+{
+ u32 i;
+
+ for (i = 0; i < sOamWork->count; i++)
+ {
+ if (sOamWork->array[i].isActive && i != id
+ && sOamWork->array[i].tileTag == sOamWork->array[id].tileTag)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static bool32 SharesPalWithAnyActive(u32 id)
+{
+ u32 i;
+
+ for (i = 0; i < sOamWork->count; i++)
+ {
+ if (sOamWork->array[i].isActive && i != id
+ && sOamWork->array[i].palTag == sOamWork->array[id].palTag)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static u8 GetTilesPerImage(u32 shape, u32 size)
+{
+ return sTilesPerImage[shape][size];
+}
diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c
index fc6aa14c6..4260c6f2f 100644
--- a/src/dodrio_berry_picking_2.c
+++ b/src/dodrio_berry_picking_2.c
@@ -7,7 +7,7 @@ void sub_815A5BC(s32 a0)
struct Padded_U8 data[2];
data[0].value = 1;
data[1].value = a0;
- sub_80F9E2C(data);
+ RfuPrepareSend0x2f00(data);
}
u8 sub_815A5E8(s32 a0)
diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c
index 6909fea30..a2622bf02 100644
--- a/src/dynamic_placeholder_text_util.c
+++ b/src/dynamic_placeholder_text_util.c
@@ -2,16 +2,89 @@
#include "text.h"
#include "dynamic_placeholder_text_util.h"
#include "string_util.h"
+#include "constants/object_events.h"
static EWRAM_DATA const u8 *sStringPointers[8] = {0};
static const u8 sTextColorTable[] =
{
- 0, 0, 0, 16, 17, 17, 17, 16, 16, 0, 0, 17, 1, 0, 17, 16,
- 0, 16, 16, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
- 17, 1, 0, 0, 0, 16, 17, 0, 16, 16, 16, 0, 1, 0, 51, 51,
- 51, 51, 51, 51, 51, 51, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 50,
+ // [LOW_NYBBLE / 2] = 0xXY, // HIGH_NYBBLE
+ [OBJECT_EVENT_GFX_RED_NORMAL / 2] = 0x00, // OBJECT_EVENT_GFX_RED_BIKE
+ [OBJECT_EVENT_GFX_RED_RUN / 2] = 0x00, // OBJECT_EVENT_GFX_RED_ITEM
+ [OBJECT_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJECT_EVENT_GFX_RED_ITEM_COPY
+ [OBJECT_EVENT_GFX_RED_VS_SEEKER / 2] = 0x10, // OBJECT_EVENT_GFX_GREEN_NORMAL
+ [OBJECT_EVENT_GFX_GREEN_BIKE / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_RUN
+ [OBJECT_EVENT_GFX_GREEN_ITEM / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_FISH
+ [OBJECT_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_VS_SEEKER
+ [OBJECT_EVENT_GFX_RS_BRENDAN / 2] = 0x10, // OBJECT_EVENT_GFX_RS_MAY
+ [OBJECT_EVENT_GFX_LITTLE_BOY / 2] = 0x10, // OBJECT_EVENT_GFX_LITTLE_GIRL
+ [OBJECT_EVENT_GFX_YOUNGSTER / 2] = 0x00, // OBJECT_EVENT_GFX_BOY
+ [OBJECT_EVENT_GFX_BUG_CATCHER / 2] = 0x00, // OBJECT_EVENT_GFX_SITTING_BOY
+ [OBJECT_EVENT_GFX_LASS / 2] = 0x11, // OBJECT_EVENT_GFX_WOMAN_1
+ [OBJECT_EVENT_GFX_BATTLE_GIRL / 2] = 0x01, // OBJECT_EVENT_GFX_MAN
+ [OBJECT_EVENT_GFX_ROCKER / 2] = 0x00, // OBJECT_EVENT_GFX_FAT_MAN
+ [OBJECT_EVENT_GFX_WOMAN_2 / 2] = 0x11, // OBJECT_EVENT_GFX_BEAUTY
+ [OBJECT_EVENT_GFX_BALDING_MAN / 2] = 0x10, // OBJECT_EVENT_GFX_WOMAN_3
+ [OBJECT_EVENT_GFX_OLD_MAN_1 / 2] = 0x00, // OBJECT_EVENT_GFX_OLD_MAN_2
+ [OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN / 2] = 0x10, // OBJECT_EVENT_GFX_OLD_WOMAN
+ [OBJECT_EVENT_GFX_TUBER_M_1 / 2] = 0x10, // OBJECT_EVENT_GFX_TUBER_F
+ [OBJECT_EVENT_GFX_TUBER_M_2 / 2] = 0x00, // OBJECT_EVENT_GFX_CAMPER
+ [OBJECT_EVENT_GFX_PICNICKER / 2] = 0x01, // OBJECT_EVENT_GFX_COOLTRAINER_M
+ [OBJECT_EVENT_GFX_COOLTRAINER_F / 2] = 0x01, // OBJECT_EVENT_GFX_SWIMMER_M_WATER
+ [OBJECT_EVENT_GFX_SWIMMER_F_WATER / 2] = 0x01, // OBJECT_EVENT_GFX_SWIMMER_M_LAND
+ [OBJECT_EVENT_GFX_SWIMMER_F_LAND / 2] = 0x01, // OBJECT_EVENT_GFX_WORKER_M
+ [OBJECT_EVENT_GFX_WORKER_F / 2] = 0x01, // OBJECT_EVENT_GFX_ROCKET_M
+ [OBJECT_EVENT_GFX_ROCKET_F / 2] = 0x01, // OBJECT_EVENT_GFX_GBA_KID
+ [OBJECT_EVENT_GFX_SUPER_NERD / 2] = 0x00, // OBJECT_EVENT_GFX_BIKER
+ [OBJECT_EVENT_GFX_BLACKBELT / 2] = 0x00, // OBJECT_EVENT_GFX_SCIENTIST
+ [OBJECT_EVENT_GFX_HIKER / 2] = 0x00, // OBJECT_EVENT_GFX_FISHER
+ [OBJECT_EVENT_GFX_CHANNELER / 2] = 0x01, // OBJECT_EVENT_GFX_CHEF
+ [OBJECT_EVENT_GFX_POLICEMAN / 2] = 0x00, // OBJECT_EVENT_GFX_GENTLEMAN
+ [OBJECT_EVENT_GFX_SAILOR / 2] = 0x00, // OBJECT_EVENT_GFX_CAPTAIN
+ [OBJECT_EVENT_GFX_NURSE / 2] = 0x11, // OBJECT_EVENT_GFX_CABLE_CLUB_RECEPTIONIST
+ [OBJECT_EVENT_GFX_UNION_ROOM_RECEPTIONIST / 2] = 0x01, // OBJECT_EVENT_GFX_UNUSED_MALE_RECEPTIONIST
+ [OBJECT_EVENT_GFX_CLERK / 2] = 0x00, // OBJECT_EVENT_GFX_MG_DELIVERYMAN
+ [OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE / 2] = 0x00, // OBJECT_EVENT_GFX_PROF_OAK
+ [OBJECT_EVENT_GFX_BLUE / 2] = 0x00, // OBJECT_EVENT_GFX_BILL
+ [OBJECT_EVENT_GFX_LANCE / 2] = 0x10, // OBJECT_EVENT_GFX_AGATHA
+ [OBJECT_EVENT_GFX_DAISY / 2] = 0x11, // OBJECT_EVENT_GFX_LORELEI
+ [OBJECT_EVENT_GFX_MR_FUJI / 2] = 0x00, // OBJECT_EVENT_GFX_BRUNO
+ [OBJECT_EVENT_GFX_BROCK / 2] = 0x10, // OBJECT_EVENT_GFX_MISTY
+ [OBJECT_EVENT_GFX_LT_SURGE / 2] = 0x10, // OBJECT_EVENT_GFX_ERIKA
+ [OBJECT_EVENT_GFX_KOGA / 2] = 0x10, // OBJECT_EVENT_GFX_SABRINA
+ [OBJECT_EVENT_GFX_BLAINE / 2] = 0x00, // OBJECT_EVENT_GFX_GIOVANNI
+ [OBJECT_EVENT_GFX_MOM / 2] = 0x01, // OBJECT_EVENT_GFX_CELIO
+ [OBJECT_EVENT_GFX_TEACHY_TV_HOST / 2] = 0x00, // OBJECT_EVENT_GFX_GYM_GUY
+ [OBJECT_EVENT_GFX_ITEM_BALL / 2] = 0x33, // OBJECT_EVENT_GFX_TOWN_MAP
+ [OBJECT_EVENT_GFX_POKEDEX / 2] = 0x33, // OBJECT_EVENT_GFX_CUT_TREE
+ [OBJECT_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJECT_EVENT_GFX_STRENGTH_BOULDER
+ [OBJECT_EVENT_GFX_FOSSIL / 2] = 0x33, // OBJECT_EVENT_GFX_RUBY
+ [OBJECT_EVENT_GFX_SAPPHIRE / 2] = 0x33, // OBJECT_EVENT_GFX_OLD_AMBER
+ [OBJECT_EVENT_GFX_GYM_SIGN / 2] = 0x33, // OBJECT_EVENT_GFX_SIGN
+ [OBJECT_EVENT_GFX_TRAINER_TIPS / 2] = 0x33, // OBJECT_EVENT_GFX_CLIPBOARD
+ [OBJECT_EVENT_GFX_METEORITE / 2] = 0x33, // OBJECT_EVENT_GFX_LAPRAS_DOLL
+ [OBJECT_EVENT_GFX_SEAGALLOP / 2] = 0x23, // OBJECT_EVENT_GFX_SNORLAX
+ [OBJECT_EVENT_GFX_SPEAROW / 2] = 0x22, // OBJECT_EVENT_GFX_CUBONE
+ [OBJECT_EVENT_GFX_POLIWRATH / 2] = 0x22, // OBJECT_EVENT_GFX_CLEFAIRY
+ [OBJECT_EVENT_GFX_PIDGEOT / 2] = 0x22, // OBJECT_EVENT_GFX_JIGGLYPUFF
+ [OBJECT_EVENT_GFX_PIDGEY / 2] = 0x22, // OBJECT_EVENT_GFX_CHANSEY
+ [OBJECT_EVENT_GFX_OMANYTE / 2] = 0x22, // OBJECT_EVENT_GFX_KANGASKHAN
+ [OBJECT_EVENT_GFX_PIKACHU / 2] = 0x22, // OBJECT_EVENT_GFX_PSYDUCK
+ [OBJECT_EVENT_GFX_NIDORAN_F / 2] = 0x22, // OBJECT_EVENT_GFX_NIDORAN_M
+ [OBJECT_EVENT_GFX_NIDORINO / 2] = 0x22, // OBJECT_EVENT_GFX_MEOWTH
+ [OBJECT_EVENT_GFX_SEEL / 2] = 0x22, // OBJECT_EVENT_GFX_VOLTORB
+ [OBJECT_EVENT_GFX_SLOWPOKE / 2] = 0x22, // OBJECT_EVENT_GFX_SLOWBRO
+ [OBJECT_EVENT_GFX_MACHOP / 2] = 0x22, // OBJECT_EVENT_GFX_WIGGLYTUFF
+ [OBJECT_EVENT_GFX_DODUO / 2] = 0x22, // OBJECT_EVENT_GFX_FEAROW
+ [OBJECT_EVENT_GFX_MACHOKE / 2] = 0x22, // OBJECT_EVENT_GFX_LAPRAS
+ [OBJECT_EVENT_GFX_ZAPDOS / 2] = 0x22, // OBJECT_EVENT_GFX_MOLTRES
+ [OBJECT_EVENT_GFX_ARTICUNO / 2] = 0x22, // OBJECT_EVENT_GFX_MEWTWO
+ [OBJECT_EVENT_GFX_MEW / 2] = 0x22, // OBJECT_EVENT_GFX_ENTEI
+ [OBJECT_EVENT_GFX_SUICUNE / 2] = 0x22, // OBJECT_EVENT_GFX_RAIKOU
+ [OBJECT_EVENT_GFX_LUGIA / 2] = 0x22, // OBJECT_EVENT_GFX_HO_OH
+ [OBJECT_EVENT_GFX_CELEBI / 2] = 0x22, // OBJECT_EVENT_GFX_KABUTO
+ [OBJECT_EVENT_GFX_DEOXYS_D / 2] = 0x22, // OBJECT_EVENT_GFX_DEOXYS_A
+ [OBJECT_EVENT_GFX_DEOXYS_N / 2] = 0x32, // OBJECT_EVENT_GFX_SS_ANNE
};
void DynamicPlaceholderTextUtil_Reset(void)
@@ -63,7 +136,7 @@ u8 GetColorFromTextColorTable(u16 graphicId)
u32 test = graphicId >> 1;
u32 shift = (graphicId & 1) << 2;
- if (test > 0x4B)
+ if (test >= NELEMS(sTextColorTable))
return 3;
else
return (sTextColorTable[graphicId >> 1] >> shift) & 0xF;
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index cce6cefca..df1b1c279 100644
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -1,25 +1,18 @@
#include "global.h"
#include "link.h"
-#include "unk_815c27c.h"
-
-enum {
- EREADER_XFR_STATE_INIT,
- EREADER_XFR_STATE_HANDSHAKE,
- EREADER_XFR_STATE_START,
- EREADER_XFR_STATE_TRANSFER,
-};
+#include "ereader_helpers.h"
struct SendRecvMgr
{
- u8 sendOrRecv;
- u8 state;
- u8 field_02;
- u8 field_03;
- u8 field_04;
- u32 * dataptr;
- int cursor;
- int size;
- u32 checksum;
+ u8 master_slave; // 0: clock slave; 1: clock master
+ u8 state; // EREADER_XFR_STATE_*
+ u8 xferState; // EREADER_XFER_*
+ u8 checksumResult; // EREADER_CHECKSUM_*
+ u8 cancellationReason; // EREADER_CANCEL_*
+ u32 * dataptr; // Payload source or destination
+ int cursor; // Index of the next word
+ int size; // Last word index
+ u32 checksum; // Validation checksum
};
static bool16 DetermineSendRecvState(u8);
@@ -39,10 +32,9 @@ static u16 sSavedIme;
static u16 sSavedIe;
static u16 sSavedTm3Cnt;
static u16 sSavedSioCnt;
-static u16 sSavedSioCnt;
static u16 sSavedRCnt;
-int EReader_Send(size_t r6, const void * r5)
+int EReader_Send(size_t size, const void * src)
{
int result;
EReaderHelper_SaveRegsState();
@@ -53,18 +45,18 @@ int EReader_Send(size_t r6, const void * r5)
if (TEST_BUTTON(sJoyNew, B_BUTTON))
gShouldAdvanceLinkState = 2;
- sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL);
- if ((sSendRecvStatus & 0x13) == 0x10)
+ sSendRecvStatus = EReaderHandleTransfer(1, size, src, NULL);
+ if ((sSendRecvStatus & 0x13) == 0x10) // checksum OK and xfer off
{
result = 0;
break;
}
- else if (sSendRecvStatus & 8)
+ else if (sSendRecvStatus & 8) // cancelled by player
{
result = 1;
break;
}
- else if (sSendRecvStatus & 4)
+ else if (sSendRecvStatus & 4) // timed out
{
result = 2;
break;
@@ -81,7 +73,7 @@ int EReader_Send(size_t r6, const void * r5)
return result;
}
-int EReader_Recv(void * r5)
+int EReader_Recv(void * dest)
{
int result;
EReaderHelper_SaveRegsState();
@@ -92,18 +84,18 @@ int EReader_Recv(void * r5)
if (TEST_BUTTON(sJoyNew, B_BUTTON))
gShouldAdvanceLinkState = 2;
- sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5);
- if ((sSendRecvStatus & 0x13) == 0x10)
+ sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, dest);
+ if ((sSendRecvStatus & 0x13) == 0x10) // checksum OK and xfer off
{
result = 0;
break;
}
- else if (sSendRecvStatus & 8)
+ else if (sSendRecvStatus & 8) // cancelled by player
{
result = 1;
break;
}
- else if (sSendRecvStatus & 4)
+ else if (sSendRecvStatus & 4) // timed out
{
result = 2;
break;
@@ -159,92 +151,98 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu
{
switch (sSendRecvMgr.state)
{
- case 0:
+ case EREADER_XFR_STATE_INIT:
OpenSerialMulti();
- sSendRecvMgr.field_02 = 1;
- sSendRecvMgr.state = 1;
+ sSendRecvMgr.xferState = EREADER_XFER_EXE;
+ sSendRecvMgr.state = EREADER_XFR_STATE_HANDSHAKE;
break;
- case 1:
+ case EREADER_XFR_STATE_HANDSHAKE:
if (DetermineSendRecvState(mode))
EnableSio();
if (gShouldAdvanceLinkState == 2)
{
- sSendRecvMgr.field_04 = 2;
- sSendRecvMgr.state = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
+ // Progression is handled by the serial callback
break;
- case 2:
+ case EREADER_XFR_STATE_START:
OpenSerial32();
SetUpTransferManager(size, data, recvBuffer);
- sSendRecvMgr.state = 3;
+ sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER;
// fallthrough
- case 3:
+ case EREADER_XFR_STATE_TRANSFER:
if (gShouldAdvanceLinkState == 2)
{
- sSendRecvMgr.field_04 = 2;
- sSendRecvMgr.state = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
else
{
sCounter1++;
sCounter2++;
- if (sSendRecvMgr.sendOrRecv == 0 && sCounter2 > 60)
+ if (sSendRecvMgr.master_slave == 0 && sCounter2 > 60)
{
- sSendRecvMgr.field_04 = 1;
- sSendRecvMgr.state = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
- if (sSendRecvMgr.field_02 != 2)
+ if (sSendRecvMgr.xferState != EREADER_XFER_CHK)
{
- if (sSendRecvMgr.sendOrRecv != 0 && sCounter1 > 2)
+ if (sSendRecvMgr.master_slave != 0 && sCounter1 > 2)
{
EnableSio();
- sSendRecvMgr.field_02 = 2;
+ sSendRecvMgr.xferState = EREADER_XFER_CHK;
}
else
{
EnableSio();
- sSendRecvMgr.field_02 = 2;
+ sSendRecvMgr.xferState = EREADER_XFER_CHK;
}
}
}
+ // Progression is handled by the serial callback
break;
- case 4:
+ case EREADER_XFR_STATE_TRANSFER_DONE:
OpenSerialMulti();
- sSendRecvMgr.state = 5;
+ sSendRecvMgr.state = EREADER_XFR_STATE_CHECKSUM;
break;
- case 5:
- if (sSendRecvMgr.sendOrRecv == 1 && sCounter1 > 2)
+ case EREADER_XFR_STATE_CHECKSUM:
+ if (sSendRecvMgr.master_slave == 1 && sCounter1 > 2)
EnableSio();
if (++sCounter1 > 60)
{
- sSendRecvMgr.field_04 = 1;
- sSendRecvMgr.state = 6;
+ sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
break;
- case 6:
- if (sSendRecvMgr.field_02 != 0)
+ // Progression is handled by the serial callback
+ case EREADER_XFR_STATE_DONE:
+ if (sSendRecvMgr.xferState != 0)
{
CloseSerial();
- sSendRecvMgr.field_02 = 0;
+ sSendRecvMgr.xferState = 0;
}
break;
}
- return sSendRecvMgr.field_02 | (sSendRecvMgr.field_04 << 2) | (sSendRecvMgr.field_03 << 4);
+ return
+ (sSendRecvMgr.xferState << EREADER_XFER_SHIFT)
+ | (sSendRecvMgr.cancellationReason << EREADER_CANCEL_SHIFT)
+ | (sSendRecvMgr.checksumResult << EREADER_CHECKSUM_SHIFT);
}
static bool16 DetermineSendRecvState(u8 mode)
{
bool16 resp;
if ((*(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SI | SIO_MULTI_SD)) == SIO_MULTI_SD && mode)
- resp = sSendRecvMgr.sendOrRecv = TRUE;
+ resp = sSendRecvMgr.master_slave = TRUE;
else
- resp = sSendRecvMgr.sendOrRecv = FALSE;
+ resp = sSendRecvMgr.master_slave = FALSE;
return resp;
}
static void SetUpTransferManager(size_t size, const void * data, void * recvBuffer)
{
- if (sSendRecvMgr.sendOrRecv)
+ if (sSendRecvMgr.master_slave)
{
REG_SIOCNT |= SIO_38400_BPS;
sSendRecvMgr.dataptr = (void *)data;
@@ -284,7 +282,7 @@ void EReaderHelper_SerialCallback(void)
switch (sSendRecvMgr.state)
{
- case 1:
+ case EREADER_XFR_STATE_HANDSHAKE:
REG_SIOMLT_SEND = 0xCCD0;
*(u64 *)recv = REG_SIOMLT_RECV;
for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++)
@@ -295,14 +293,17 @@ void EReaderHelper_SerialCallback(void)
cnt2++;
}
if (cnt1 == 2 && cnt2 == 0)
- sSendRecvMgr.state = 2;
+ sSendRecvMgr.state = EREADER_XFR_STATE_START;
break;
- case 3:
+ // Progression is handled by software
+ case EREADER_XFR_STATE_TRANSFER:
recv32 = REG_SIODATA32;
- if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.sendOrRecv == 0)
+ // The first value sent by the EReader is the payload size
+ if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.master_slave == 0)
sSendRecvMgr.size = recv32 / 4 + 1;
- if (sSendRecvMgr.sendOrRecv == 1)
+ if (sSendRecvMgr.master_slave == 1)
{
+ // Send mode
if (sSendRecvMgr.cursor < sSendRecvMgr.size)
{
REG_SIODATA32 = sSendRecvMgr.dataptr[sSendRecvMgr.cursor];
@@ -313,43 +314,51 @@ void EReaderHelper_SerialCallback(void)
}
else
{
+ // Receive mode
if (sSendRecvMgr.cursor > 0 && sSendRecvMgr.cursor < sSendRecvMgr.size + 1)
{
+ // Receive next word
sSendRecvMgr.dataptr[sSendRecvMgr.cursor - 1] = recv32;
sSendRecvMgr.checksum += recv32;
}
else if (sSendRecvMgr.cursor != 0)
{
+ // Reached the end, test the received checksum
if (sSendRecvMgr.checksum == recv32)
- sSendRecvMgr.field_03 = 1;
+ sSendRecvMgr.checksumResult = EREADER_CHECKSUM_OK;
else
- sSendRecvMgr.field_03 = 2;
+ sSendRecvMgr.checksumResult = EREADER_CHECKSUM_ERR;
}
sCounter2 = 0;
}
sSendRecvMgr.cursor++;
if (sSendRecvMgr.cursor < sSendRecvMgr.size + 2)
{
- if (sSendRecvMgr.sendOrRecv != 0)
+ if (sSendRecvMgr.master_slave != 0)
+ // Clock master; start timer
REG_TM3CNT_H |= TIMER_ENABLE;
else
+ // Clock slave; reset
EnableSio();
}
else
{
- sSendRecvMgr.state = 4;
+ sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER_DONE;
sCounter1 = 0;
}
break;
- case 5:
- if (sSendRecvMgr.sendOrRecv == 0)
- REG_SIODATA8 = sSendRecvMgr.field_03;
+ // Progression is handled by the software
+ case EREADER_XFR_STATE_CHECKSUM:
+ if (sSendRecvMgr.master_slave == 0)
+ // Clock slave
+ REG_SIODATA8 = sSendRecvMgr.checksumResult;
*(vu64 *)recv = REG_SIOMLT_RECV;
- if (recv[1] == 1 || recv[1] == 2)
+ if (recv[1] == EREADER_CHECKSUM_OK || recv[1] == EREADER_CHECKSUM_ERR)
{
- if (sSendRecvMgr.sendOrRecv == 1)
- sSendRecvMgr.field_03 = recv[1];
- sSendRecvMgr.state = 6;
+ if (sSendRecvMgr.master_slave == 1)
+ // EReader has (in)validated the payload
+ sSendRecvMgr.checksumResult = recv[1];
+ sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
}
break;
}
diff --git a/src/event_data.c b/src/event_data.c
index 010a4414c..74d1cf608 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -118,7 +118,7 @@ bool32 IsMysteryGiftEnabled(void)
return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLED);
}
-void sub_806E2D0(void)
+void ResetMysteryEventFlags(void)
{
FlagClear(FLAG_MYSTERY_EVENT_DONE);
FlagClear(FLAG_0x3D9);
@@ -138,7 +138,7 @@ void sub_806E2D0(void)
FlagClear(FLAG_0x3E7);
}
-void sub_806E370(void)
+void ResetMysteryEventVars(void)
{
VarSet(VAR_EVENT_PICHU_SLOT, 0);
VarSet(VAR_0x40B6, 0);
diff --git a/src/event_object_80688E4.c b/src/event_object_80688E4.c
new file mode 100644
index 000000000..2d79c4f7b
--- /dev/null
+++ b/src/event_object_80688E4.c
@@ -0,0 +1,653 @@
+#include "global.h"
+#include "event_object_80688E4.h"
+#include "event_object_movement.h"
+#include "field_effect.h"
+#include "field_ground_effect.h"
+
+// This is part of evobjmv.c (see assert statement in DoObjectUnionRoomWarpYDisplacement).
+
+static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite);
+
+bool8 FreezeObjectEvent(struct ObjectEvent * objectEvent)
+{
+ if (objectEvent->heldMovementActive || objectEvent->frozen)
+ return TRUE;
+ objectEvent->frozen = TRUE;
+ objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
+ objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
+ gSprites[objectEvent->spriteId].animPaused = TRUE;
+ gSprites[objectEvent->spriteId].affineAnimPaused = TRUE;
+ return FALSE;
+}
+
+void FreezeObjectEvents(void)
+{
+ u8 i;
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ if (gObjectEvents[i].active && i != gPlayerAvatar.objectEventId)
+ FreezeObjectEvent(&gObjectEvents[i]);
+ }
+}
+
+void FreezeObjectEventsExceptOne(u8 noFreeze)
+{
+ u8 i;
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ if (i != noFreeze && gObjectEvents[i].active && i != gPlayerAvatar.objectEventId)
+ FreezeObjectEvent(&gObjectEvents[i]);
+ }
+}
+
+void UnfreezeObjectEvent(struct ObjectEvent * objectEvent)
+{
+ if (objectEvent->active && objectEvent->frozen)
+ {
+ objectEvent->frozen = FALSE;
+ gSprites[objectEvent->spriteId].animPaused = objectEvent->spriteAnimPausedBackup;
+ gSprites[objectEvent->spriteId].affineAnimPaused = objectEvent->spriteAffineAnimPausedBackup;
+ }
+}
+
+void UnfreezeObjectEvents(void)
+{
+ u8 i;
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ if (gObjectEvents[i].active)
+ UnfreezeObjectEvent(&gObjectEvents[i]);
+ }
+}
+
+#define tObjectEventId data[0]
+#define tZCoord data[1]
+#define tInvisible data[2]
+
+#define tDirection data[3]
+#define tSpeed data[4]
+#define tStepNo data[5]
+
+static void little_step(struct Sprite * sprite, u8 direction)
+{
+ sprite->pos1.x += gUnknown_83A64C8[direction].x;
+ sprite->pos1.y += gUnknown_83A64C8[direction].y;
+}
+
+static void double_little_steps(struct Sprite * sprite, u8 direction)
+{
+ sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x;
+ sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y;
+}
+
+static void triple_little_steps(struct Sprite * sprite, u8 direction)
+{
+ sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x + gUnknown_83A64C8[direction].x;
+ sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y + gUnknown_83A64C8[direction].y;
+}
+
+static void quad_little_steps(struct Sprite * sprite, u8 direction)
+{
+ sprite->pos1.x += 4 * gUnknown_83A64C8[direction].x;
+ sprite->pos1.y += 4 * gUnknown_83A64C8[direction].y;
+}
+
+static void oct_little_steps(struct Sprite * sprite, u8 direction)
+{
+ sprite->pos1.x += 8 * gUnknown_83A64C8[direction].x;
+ sprite->pos1.y += 8 * gUnknown_83A64C8[direction].y;
+}
+
+void oamt_npc_ministep_reset(struct Sprite * sprite, u8 direction, u8 speed)
+{
+ sprite->tDirection = direction;
+ sprite->tSpeed = speed;
+ sprite->tStepNo = 0;
+}
+
+typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 direction);
+
+static const SpriteStepFunc sSpeed0[] = {
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step,
+ little_step
+};
+
+static const SpriteStepFunc sSpeed1[] = {
+ double_little_steps,
+ double_little_steps,
+ double_little_steps,
+ double_little_steps,
+ double_little_steps,
+ double_little_steps,
+ double_little_steps,
+ double_little_steps
+};
+
+static const SpriteStepFunc sSpeed2[] = {
+ double_little_steps,
+ triple_little_steps,
+ triple_little_steps,
+ double_little_steps,
+ triple_little_steps,
+ triple_little_steps
+};
+
+static const SpriteStepFunc sSpeed3[] = {
+ quad_little_steps,
+ quad_little_steps,
+ quad_little_steps,
+ quad_little_steps
+};
+
+static const SpriteStepFunc sSpeed4[] = {
+ oct_little_steps,
+ oct_little_steps
+};
+
+static const SpriteStepFunc *const sSpriteStepFuncsBySpeed[] = {
+ sSpeed0,
+ sSpeed1,
+ sSpeed2,
+ sSpeed3,
+ sSpeed4
+};
+
+static const s16 sSpriteStepCountsBySpeed[] = {
+ NELEMS(sSpeed0),
+ NELEMS(sSpeed1),
+ NELEMS(sSpeed2),
+ NELEMS(sSpeed3),
+ NELEMS(sSpeed4)
+};
+
+bool8 obj_npc_ministep(struct Sprite *sprite)
+{
+ if (sprite->tStepNo >= sSpriteStepCountsBySpeed[sprite->tSpeed])
+ return FALSE;
+
+ sSpriteStepFuncsBySpeed[sprite->tSpeed][sprite->tStepNo](sprite, sprite->tDirection);
+
+ sprite->tStepNo++;
+
+ if (sprite->tStepNo < sSpriteStepCountsBySpeed[sprite->tSpeed])
+ return FALSE;
+
+ return TRUE;
+}
+
+#undef tStepNo
+#undef tSpeed
+#undef tDirection
+
+#define tDirection data[3]
+#define tDelay data[4]
+#define tStepNo data[5]
+
+void sub_8068BBC(struct Sprite *sprite, u8 direction)
+{
+ sprite->tDirection = direction;
+ sprite->tDelay = 0;
+ sprite->tStepNo = 0;
+}
+
+bool8 sub_8068BCC(struct Sprite *sprite)
+{
+ if (!(sprite->tDelay & 1))
+ {
+ little_step(sprite, sprite->tDirection);
+ sprite->tStepNo++;
+ }
+
+ sprite->tDelay++;
+
+ if (sprite->tStepNo > 15)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8068C08(struct Sprite *sprite, u8 direction)
+{
+ sprite->tDirection = direction;
+ sprite->tDelay = 0;
+ sprite->tStepNo = 0;
+}
+
+bool8 sub_8068C18(struct Sprite *sprite)
+{
+ if (++sprite->tDelay < 3)
+ {
+ little_step(sprite, sprite->tDirection);
+ sprite->tStepNo++;
+ }
+ else
+ sprite->tDelay = 0;
+
+ if (sprite->tStepNo > 15)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8068C58(struct Sprite *sprite, u8 direction)
+{
+ sprite->tDirection = direction;
+ sprite->tDelay = 0;
+ sprite->tStepNo = 0;
+}
+
+bool8 sub_8068C68(struct Sprite *sprite)
+{
+ if (++sprite->tDelay > 9)
+ {
+ sprite->tDelay = 0;
+ little_step(sprite, sprite->tDirection);
+ sprite->tStepNo++;
+ }
+
+ if (sprite->tStepNo > 15)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8068CA4(struct Sprite *sprite, u8 direction)
+{
+ sprite->tDirection = direction;
+ sprite->tDelay = 0;
+ sprite->tStepNo = 0;
+}
+
+bool8 sub_8068CB4(struct Sprite *sprite)
+{
+ if ((++sprite->tDelay) & 1)
+ {
+ little_step(sprite, sprite->tDirection);
+ sprite->tStepNo++;
+ }
+ else
+ {
+ double_little_steps(sprite, sprite->tDirection);
+ sprite->tStepNo += 2;
+ }
+
+ if (sprite->tStepNo > 15)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+#undef tStepNo
+#undef tDelay
+#undef tDirection
+
+#define tDirection data[3]
+#define tJumpSpeed data[4]
+#define tJumpHeight data[5]
+#define tStepNo data[6]
+
+static const s8 sJumpHeight12[] = {
+ -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
+};
+
+static const s8 sJumpHeight6[] = {
+ 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
+};
+
+static const s8 sJumpHeight10[] = {
+ -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
+};
+
+static const s8 *const sYDisplacementPtrs[] = {
+ sJumpHeight12,
+ sJumpHeight6,
+ sJumpHeight10
+};
+
+static s16 GetJumpYDisplacement(s16 stepno, u8 jumpno)
+{
+ return sYDisplacementPtrs[jumpno][stepno];
+}
+
+void sub_8068D1C(struct Sprite *sprite, u8 direction, u8 speed, u8 height)
+{
+ sprite->tDirection = direction;
+ sprite->tJumpSpeed = speed;
+ sprite->tJumpHeight = height;
+ sprite->tStepNo = 0;
+}
+
+u8 sub_8068D3C(struct Sprite *sprite)
+{
+ s16 duration[3] = {0x10, 0x10, 0x20};
+ u8 shifts[3] = {0, 0, 1};
+ u8 jumpPhase = 0;
+
+ if (sprite->tJumpSpeed != 0)
+ little_step(sprite, sprite->tDirection);
+
+ sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight);
+
+ sprite->tStepNo++;
+
+ if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1))
+ jumpPhase = 1;
+
+ if (sprite->tStepNo >= duration[sprite->tJumpSpeed])
+ {
+ sprite->pos2.y = 0;
+ jumpPhase = -1;
+ }
+
+ return jumpPhase;
+}
+
+u8 sub_8068DC4(struct Sprite *sprite)
+{
+ s16 duration[3] = {0x20, 0x20, 0x40};
+ u8 shifts[3] = {1, 1, 2};
+ u8 jumpPhase = 0;
+
+ if (sprite->tJumpSpeed != 0 && !(sprite->tStepNo & 1))
+ little_step(sprite, sprite->tDirection);
+
+ sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight);
+
+ sprite->tStepNo++;
+
+ if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1))
+ jumpPhase = 1;
+
+ if (sprite->tStepNo >= duration[sprite->tJumpSpeed])
+ {
+ sprite->pos2.y = 0;
+ jumpPhase = -1;
+ }
+
+ return jumpPhase;
+}
+
+#undef tStepNo
+#undef tJumpHeight
+#undef tJumpSpeed
+#undef tDirection
+
+#define tDelay data[3]
+
+void SetObjectEventStepTimer(struct Sprite *sprite, s16 delay)
+{
+ sprite->tDelay = delay;
+}
+
+bool8 RunObjectEventStepTimer(struct Sprite *sprite)
+{
+ sprite->tDelay--;
+
+ if (sprite->tDelay == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+#undef tDelay
+
+void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 animNum, u8 animCmdIndex)
+{
+ sprite->animNum = animNum;
+ sprite->animPaused = FALSE;
+ SeekSpriteAnim(sprite, animCmdIndex);
+}
+
+bool8 SpriteAnimEnded(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
+{
+ u16 x, y;
+ s16 x2, y2;
+
+ sprite->invisible = invisible;
+
+ if (sprite->coordOffsetEnabled)
+ {
+ x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX;
+ y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY;
+ }
+ else
+ {
+ x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
+ y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
+ }
+
+ x2 = x - (sprite->centerToCornerVecX >> 1);
+ y2 = y - (sprite->centerToCornerVecY >> 1);
+
+ if ((s16)x > 255 || x2 < -16)
+ sprite->invisible = TRUE;
+ if ((s16)y > 175 || y2 < -16)
+ sprite->invisible = TRUE;
+}
+
+void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite)
+{
+ DoObjectUnionRoomWarpYDisplacement(sprite);
+ SetObjectSubpriorityByZCoord(sprite->tZCoord, sprite, 1);
+ UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
+}
+
+void sub_8068FD0(void)
+{
+ s32 i;
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ struct Sprite *sprite = &gSprites[i];
+ if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility)
+ {
+ DestroySprite(sprite);
+ }
+ }
+}
+
+#define tUnionRoomWarpAnimNo data[3]
+#define tUnionRoomWarpAnimState data[4]
+
+static int GetObjectEventSpriteId(u8 objectEventId)
+{
+ int i;
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ struct Sprite *sprite = &gSprites[i];
+ if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->tObjectEventId == objectEventId)
+ {
+ return i;
+ }
+ }
+ return MAX_SPRITES;
+}
+
+void TurnObjectEvent(u8 objectEventId, u8 direction)
+{
+ u8 animNum;
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ StartSpriteAnim(sprite, ObjectEventDirectionToImageAnimId(direction));
+ }
+}
+
+void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction)
+{
+ u8 animNum;
+ int spriteId = GetObjectEventSpriteId(objectEventId);
+ u16 baseBlock;
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ const struct ObjectEventGraphicsInfo * info = GetObjectEventGraphicsInfo(direction);
+ baseBlock = sprite->oam.tileNum;
+ sprite->oam = *info->oam;
+ sprite->oam.tileNum = baseBlock;
+ sprite->oam.paletteNum = info->paletteSlot;
+ sprite->images = info->images;
+ if (info->subspriteTables == NULL)
+ {
+ sprite->subspriteTables = NULL;
+ sprite->subspriteTableNum = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
+ }
+ else
+ {
+ SetSubspriteTables(sprite, info->subspriteTables);
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ }
+ StartSpriteAnim(sprite, 0);
+ }
+}
+
+void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible)
+{
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ if (spriteId != MAX_SPRITES)
+ {
+ if (invisible)
+ gSprites[spriteId].tInvisible = TRUE;
+ else
+ gSprites[spriteId].tInvisible = FALSE;
+ }
+}
+
+bool32 RfuUnionObjectIsInvisible(u8 objectEventId)
+{
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ if (spriteId == MAX_SPRITES)
+ return FALSE;
+ return gSprites[spriteId].tInvisible == TRUE;
+}
+
+void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo)
+{
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].tUnionRoomWarpAnimNo = animNo;
+ gSprites[spriteId].tUnionRoomWarpAnimState = 0;
+ }
+}
+
+static void DoObjectUnionRoomWarpYDisplacementUpwards(struct Sprite * sprite)
+{
+ switch (sprite->tUnionRoomWarpAnimState)
+ {
+ case 0:
+ sprite->pos2.y = 0;
+ sprite->tUnionRoomWarpAnimState++;
+ // fallthrough
+ case 1:
+ if ((sprite->pos2.y -= 8) == -160)
+ {
+ sprite->pos2.y = 0;
+ sprite->tInvisible = 1;
+ sprite->tUnionRoomWarpAnimNo = 0;
+ sprite->tUnionRoomWarpAnimState = 0;
+ }
+ break;
+ }
+}
+
+static void DoObjectUnionRoomWarpYDisplacementDownwards(struct Sprite * sprite)
+{
+ switch (sprite->tUnionRoomWarpAnimState)
+ {
+ case 0:
+ sprite->pos2.y = -160;
+ sprite->tUnionRoomWarpAnimState++;
+ // fallthrough
+ case 1:
+ if ((sprite->pos2.y += 8) == 0)
+ {
+ sprite->tUnionRoomWarpAnimNo = 0;
+ sprite->tUnionRoomWarpAnimState = 0;
+ }
+ break;
+ }
+}
+
+static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite)
+{
+ switch (sprite->tUnionRoomWarpAnimNo)
+ {
+ case 0:
+ break;
+ case 1:
+ DoObjectUnionRoomWarpYDisplacementDownwards(sprite);
+ break;
+ case 2:
+ DoObjectUnionRoomWarpYDisplacementUpwards(sprite);
+ break;
+ default:
+ sprite->tUnionRoomWarpAnimNo = 0;
+ AGB_ASSERT_EX(0, ABSPATH("evobjmv.c"), 13331);
+ }
+}
+
+bool32 RfuUnionObjectIsWarping(u8 objectEventId)
+{
+ u8 spriteId = GetObjectEventSpriteId(objectEventId);
+ if (spriteId == MAX_SPRITES)
+ return FALSE;
+ if (gSprites[spriteId].tUnionRoomWarpAnimNo)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+#undef tUnionRoomWarpAnimState
+#undef tUnionRoomWarpAnimNo
+#undef tInvisible
+#undef tZCoord
+#undef tObjectEventId
+
+u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct ObjectEvent * objectEvent)
+{
+ ObjectEventGetLocalIdAndMap(objectEvent, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ return FieldEffectStart(fieldEffectId);
+}
+
+void DoShadowFieldEffect(struct ObjectEvent *objectEvent)
+{
+ if (!objectEvent->hasShadow)
+ {
+ objectEvent->hasShadow = TRUE;
+ oe_exec_and_other_stuff(FLDEFF_SHADOW, objectEvent);
+ }
+}
+
+void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
+ gFieldEffectArguments[0] = sprite->pos1.x;
+ gFieldEffectArguments[1] = sprite->pos1.y + (graphicsInfo->height >> 1) - 2;
+ gFieldEffectArguments[2] = 151;
+ gFieldEffectArguments[3] = 3;
+ FieldEffectStart(FLDEFF_RIPPLE);
+}
diff --git a/src/event_object_lock.c b/src/event_object_lock.c
index e91642aa2..304b71c28 100644
--- a/src/event_object_lock.c
+++ b/src/event_object_lock.c
@@ -51,7 +51,7 @@ void sub_80695CC(u8 taskId)
task->data[0] = 1;
}
- if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].mapobj_bit_1)
+ if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].singleMovementActive)
{
FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]);
task->data[1] = 1;
@@ -78,7 +78,7 @@ void LockSelectedObjectEvent(void)
FreezeObjectEventsExceptOne(gSelectedObjectEvent);
taskId = CreateTask(sub_80695CC, 80);
- if (!gObjectEvents[gSelectedObjectEvent].mapobj_bit_1)
+ if (!gObjectEvents[gSelectedObjectEvent].singleMovementActive)
{
FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]);
gTasks[taskId].data[1] = 1;
@@ -93,7 +93,7 @@ void sub_80696C0(void)
UnfreezeObjectEvents();
}
-void sub_80696F0(void)
+void UnionRoom_UnlockPlayerAndChatPartner(void)
{
u8 objectEventId;
if (gObjectEvents[gSelectedObjectEvent].active)
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index 0af5f462c..2e1dcd919 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -206,7 +206,7 @@ static void sub_807DDF0(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
task->data[0]++;
break;
case 1:
@@ -227,7 +227,7 @@ static void sub_807DDF0(u8 taskId)
}
}
-void sub_807DE58(void)
+void FieldCB_ReturnToFieldWirelessLink(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
@@ -632,7 +632,7 @@ static void sub_807E5EC(u8 taskId)
break;
case 2:
WarpIntoMap();
- SetMainCallback2(sub_8056788);
+ SetMainCallback2(CB2_ReturnToFieldCableClub);
DestroyTask(taskId);
break;
}
@@ -662,7 +662,7 @@ static void sub_807E678(u8 taskId)
case 1:
if (!sub_807E40C() && BGMusicStopped())
{
- sub_800AAC0();
+ Link_TryStartSend5FFF();
data[0]++;
}
break;
@@ -850,7 +850,7 @@ static void sub_807EAC4(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4)
(*a4)++;
playerSpr->pos2.x = *a2 >> 5;
playerSpr->pos2.y = *a3 >> 5;
- if (playerObj->mapobj_bit_7)
+ if (playerObj->heldMovementFinished)
{
ObjectEventForceSetSpecialAnim(playerObj, GetStepInPlaceDelay16AnimId(GetPlayerFacingDirection()));
}
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index a552c47a2..0a3224cfa 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -5,11 +5,34 @@
#include "scanline_effect.h"
#include "script.h"
#include "task.h"
+#include "window.h"
+#include "strings.h"
+#include "string_util.h"
+#include "menu.h"
+#include "heal_location.h"
+#include "new_menu_helpers.h"
+#include "event_object_movement.h"
+#include "field_fadetransition.h"
+#include "event_scripts.h"
static const u16 sFlashLevelPixelRadii[] = {
- 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018, 0x0000
+ 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018
};
+const s32 gMaxFlashLevel = NELEMS(sFlashLevelPixelRadii) - 1;
+
+static const struct WindowTemplate gUnknown_83C68E4 = {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 5,
+ .width = 30,
+ .height = 11,
+ .paletteNum = 15,
+ .baseBlock = 1,
+};
+
+static const u8 gUnknown_83C68EC[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
+
static void Task_EnableScriptAfterMusicFade(u8 taskId);
static void Task_BarnDoorWipeChild(u8 taskId);
@@ -336,3 +359,103 @@ static void Task_BarnDoorWipeChild(u8 taskId)
#undef DIR_WIPE_IN
#undef DIR_WIPE_OUT
#undef tChildOffset
+
+static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y)
+{
+ u8 windowId = gTasks[taskId].data[1];
+
+ switch (gTasks[taskId].data[2])
+ {
+ case 0:
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
+ StringExpandPlaceholders(gStringVar4, text);
+ AddTextPrinterParameterized4(windowId, 2, x, y, 1, 0, gUnknown_83C68EC, 1, gStringVar4);
+ gTextFlags.canABSpeedUpPrint = FALSE;
+ gTasks[taskId].data[2] = 1;
+ break;
+ case 1:
+ RunTextPrinters();
+ if (!IsTextPrinterActive(windowId))
+ {
+ gTasks[taskId].data[2] = 0;
+ return TRUE;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+static void sub_807F45C(u8 taskId)
+{
+ u8 windowId;
+ const struct HealLocation *loc;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ windowId = AddWindow(&gUnknown_83C68E4);
+ gTasks[taskId].data[1] = windowId;
+ Menu_LoadStdPalAt(0xF0);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 3);
+ loc = GetHealLocationPointer(1);
+ if (gSaveBlock1Ptr->lastHealLocation.mapGroup == loc->group
+ && gSaveBlock1Ptr->lastHealLocation.mapNum == loc->map
+ && gSaveBlock1Ptr->lastHealLocation.warpId == -1
+ && gSaveBlock1Ptr->lastHealLocation.x == loc->x
+ && gSaveBlock1Ptr->lastHealLocation.y == loc->y)
+ gTasks[taskId].data[0] = 4;
+ else
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 1:
+ if (sub_807F3A4(taskId, gUnknown_841B554, 2, 8))
+ {
+ ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
+ ++gTasks[taskId].data[0];
+ }
+ break;
+ case 4:
+ if (sub_807F3A4(taskId, gUnknown_841B5B6, 2, 8))
+ {
+ ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2);
+ ++gTasks[taskId].data[0];
+ }
+ break;
+ case 2:
+ case 5:
+ windowId = gTasks[taskId].data[1];
+ ClearWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 1);
+ RemoveWindow(windowId);
+ palette_bg_faded_fill_black();
+ sub_807DC00();
+ ++gTasks[taskId].data[0];
+ break;
+ case 3:
+ if (sub_807E418() == TRUE)
+ {
+ DestroyTask(taskId);
+ ScriptContext1_SetupScript(EventScript_AfterWhiteOutHeal);
+ }
+ break;
+ case 6:
+ if (sub_807E418() == TRUE)
+ {
+ DestroyTask(taskId);
+ ScriptContext1_SetupScript(EventScript_MomHeal);
+ }
+ break;
+ }
+}
+
+void sub_807F5F0(void)
+{
+ u8 taskId;
+
+ ScriptContext2_Enable();
+ palette_bg_faded_fill_black();
+ taskId = CreateTask(sub_807F45C, 10);
+ gTasks[taskId].data[0] = 0;
+}
diff --git a/src/field_specials.c b/src/field_specials.c
index 57bf53830..a1de82c0f 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -316,7 +316,7 @@ void Special_AnimatePcTurnOff()
void SpawnCameraObject(void)
{
u8 objectEventId = SpawnSpecialObjectEventParameterized(OBJECT_EVENT_GFX_YOUNGSTER, 8, 127, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
- gObjectEvents[objectEventId].mapobj_bit_13 = TRUE;
+ gObjectEvents[objectEventId].invisible = TRUE;
CameraObjectSetFollowedObjectId(gObjectEvents[objectEventId].spriteId);
}
@@ -876,22 +876,22 @@ void Special_GetElevatorFloor(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
switch (gSaveBlock1Ptr->warp2.mapNum)
{
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_1F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_2F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_3F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_4F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_5F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_6F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_7F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_8F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_ROOF):
+ case MAP_NUM(TRAINER_TOWER_1F):
+ case MAP_NUM(TRAINER_TOWER_2F):
+ case MAP_NUM(TRAINER_TOWER_3F):
+ case MAP_NUM(TRAINER_TOWER_4F):
+ case MAP_NUM(TRAINER_TOWER_5F):
+ case MAP_NUM(TRAINER_TOWER_6F):
+ case MAP_NUM(TRAINER_TOWER_7F):
+ case MAP_NUM(TRAINER_TOWER_8F):
+ case MAP_NUM(TRAINER_TOWER_ROOF):
floor = 15;
break;
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY):
+ case MAP_NUM(TRAINER_TOWER_LOBBY):
floor = 3;
break;
}
@@ -992,23 +992,23 @@ u16 Special_InitElevatorFloorSelectMenuPos(void)
break;
}
}
- if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_1F))
+ if (gSaveBlock1Ptr->warp2.mapGroup == MAP_GROUP(TRAINER_TOWER_1F))
{
switch (gSaveBlock1Ptr->warp2.mapNum)
{
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_1F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_2F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_3F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_4F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_5F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_6F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_7F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_8F):
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_ROOF):
+ case MAP_NUM(TRAINER_TOWER_1F):
+ case MAP_NUM(TRAINER_TOWER_2F):
+ case MAP_NUM(TRAINER_TOWER_3F):
+ case MAP_NUM(TRAINER_TOWER_4F):
+ case MAP_NUM(TRAINER_TOWER_5F):
+ case MAP_NUM(TRAINER_TOWER_6F):
+ case MAP_NUM(TRAINER_TOWER_7F):
+ case MAP_NUM(TRAINER_TOWER_8F):
+ case MAP_NUM(TRAINER_TOWER_ROOF):
sElevatorScroll = 0;
sElevatorCursorPos = 0;
break;
- case MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY):
+ case MAP_NUM(TRAINER_TOWER_LOBBY):
sElevatorScroll = 0;
sElevatorCursorPos = 1;
break;
@@ -1920,15 +1920,15 @@ u16 Special_BattleCardAction(void)
switch (gSpecialVar_Result)
{
case 0:
- return sub_81445C0(3);
+ return MEvent_GetBattleCardCount(3);
case 1:
- return sub_81445C0(4);
+ return MEvent_GetBattleCardCount(4);
case 2:
- return sub_81445C0(0);
+ return MEvent_GetBattleCardCount(0);
case 3:
- return sub_81445C0(1);
+ return MEvent_GetBattleCardCount(1);
case 4:
- return sub_81445C0(2);
+ return MEvent_GetBattleCardCount(2);
default:
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
return 0;
@@ -2436,7 +2436,7 @@ bool8 Special_BadEggInParty(void)
bool8 Special_PlayerIsNotInTrainerTowerLobby(void)
{
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY))
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_LOBBY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY))
return FALSE;
else
return TRUE;
diff --git a/src/fieldmap.c b/src/fieldmap.c
index adb26f230..90682da10 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -16,7 +16,7 @@ struct ConnectionFlags
u8 east:1;
};
-void sub_8058A00(struct MapHeader *mapHeader);
+static void InitMapLayoutData(struct MapHeader *mapHeader);
void map_copy_with_padding(u16 *map, u16 width, u16 height);
void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader);
void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset);
@@ -63,20 +63,20 @@ const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * conn
return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
}
-void not_trainer_hill_battle_pyramid(void)
+void InitMap(void)
{
- sub_8058A00(&gMapHeader);
- mapheader_run_script_with_tag_x1();
+ InitMapLayoutData(&gMapHeader);
+ RunOnLoadMapScript();
}
-void sub_80589E8(void)
+void InitMapFromSavedGame(void)
{
- sub_8058A00(&gMapHeader);
+ InitMapLayoutData(&gMapHeader);
LoadSavedMapView();
- mapheader_run_script_with_tag_x1();
+ RunOnLoadMapScript();
}
-void sub_8058A00(struct MapHeader * mapHeader)
+static void InitMapLayoutData(struct MapHeader * mapHeader)
{
const struct MapLayout * mapLayout = mapHeader->mapLayout;
CpuFastFill(0x03FF03FF, gBackupMapLayout, sizeof(gBackupMapLayout));
@@ -490,7 +490,7 @@ void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
}
}
-void sub_8059024(s32 x, s32 y, bool32 arg2)
+void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
{
if (x >= 0 && x < VMap.Xsize
&& y >= 0 && y < VMap.Ysize)
diff --git a/src/heal_location.c b/src/heal_location.c
index 89d9478c0..5c31e2df3 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -124,13 +124,13 @@ void SetBlackoutRespawnWarpAndHealerNpc(struct WarpData * warp)
if (VarGet(VAR_MAP_SCENE_TRAINER_TOWER) == 1)
{
- if (!gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2)
+ if (!gSaveBlock1Ptr->trainerTower[gSaveBlock1Ptr->towerChallengeId].spokeToOwner)
VarSet(VAR_MAP_SCENE_TRAINER_TOWER, 0);
gSpecialVar_LastTalked = 1;
warp->x = 4;
warp->y = 11;
- warp->mapGroup = MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY);
- warp->mapNum = MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY);
+ warp->mapGroup = MAP_GROUP(TRAINER_TOWER_LOBBY);
+ warp->mapNum = MAP_NUM(TRAINER_TOWER_LOBBY);
warp->warpId = 0xFF;
}
else
@@ -155,7 +155,7 @@ void SetBlackoutRespawnWarpAndHealerNpc(struct WarpData * warp)
warp->x = 5;
warp->y = 4;
}
- else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY))
+ else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(TRAINER_TOWER_LOBBY) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(TRAINER_TOWER_LOBBY))
{
warp->x = 4;
warp->y = 11;
diff --git a/src/help_system.c b/src/help_system.c
index 4a4d927c5..bb3135260 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -33,7 +33,7 @@ struct HelpSystemVideoState
static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
EWRAM_DATA u8 gUnknown_203F174 = 0;
-EWRAM_DATA u8 gUnknown_203F175 = 0;
+EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE;
static EWRAM_DATA u8 sDelayTimer = 0;
static EWRAM_DATA u8 sInHelpSystem = 0;
static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
@@ -53,7 +53,7 @@ u8 RunHelpSystemCallback(void)
sInHelpSystem = 0;
if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
return 0;
- if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
+ if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE)
return 0;
if (JOY_NEW(L_BUTTON | R_BUTTON))
{
@@ -93,9 +93,9 @@ u8 RunHelpSystemCallback(void)
HelpSystem_PrintText_Row61(gString_Help);
sub_813BD14(1);
if (sub_812B40C() == TRUE)
- sub_812BC54(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems);
else
- sub_812BCA8(&gHelpSystemListMenu, gHelpSystemListMenuItems);
+ HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems);
sub_813BE78(1);
sub_813BF50(1);
CommitTilemap();
@@ -110,7 +110,7 @@ u8 RunHelpSystemCallback(void)
sVideoState.state = 5;
break;
case 5:
- if (!sub_812BB9C(&gHelpSystemListMenu, gHelpSystemListMenuItems))
+ if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems))
{
PlaySE(SE_HELP_CL);
sVideoState.state = 6;
@@ -981,9 +981,9 @@ void HelpSystem_FillPanel1(void)
void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
{
gHelpSystemListMenu.sub = a0->sub;
- gHelpSystemListMenu.field_0C = a1;
- gHelpSystemListMenu.field_0D = a2;
- gHelpSystemListMenu.field_0E = 0;
+ gHelpSystemListMenu.itemsAbove = a1;
+ gHelpSystemListMenu.cursorPos = a2;
+ gHelpSystemListMenu.state = 0;
if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
sub_813BDA4(0);
@@ -1007,7 +1007,7 @@ s32 HelpSystem_GetMenuInput(void)
else if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D].index;
+ return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index;
}
else if (JOY_NEW(B_BUTTON))
{
@@ -1051,15 +1051,15 @@ void sub_813C75C(void)
u8 r6 = gHelpSystemListMenu.sub.totalItems - 7;
if (gHelpSystemListMenu.sub.totalItems > 7)
{
- s32 r4 = gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D;
+ s32 r4 = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos;
sub_813C004(0, 0);
if (r4 == 0)
sub_813C004(1, 1);
- else if (gHelpSystemListMenu.field_0C == 0 && gHelpSystemListMenu.field_0D != 0)
+ else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0)
sub_813C004(1, 1);
- else if (gHelpSystemListMenu.field_0C == r6)
+ else if (gHelpSystemListMenu.itemsAbove == r6)
sub_813C004(0, 1);
- else if (gHelpSystemListMenu.field_0C != 0)
+ else if (gHelpSystemListMenu.itemsAbove != 0)
{
sub_813C004(0, 1);
sub_813C004(1, 1);
@@ -1071,7 +1071,7 @@ void PrintListMenuItems(void)
{
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
s32 i;
- s32 r5 = gHelpSystemListMenu.field_0C;
+ s32 r5 = gHelpSystemListMenu.itemsAbove;
for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
{
@@ -1086,7 +1086,7 @@ void PlaceListMenuCursor(void)
{
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
u8 x = gHelpSystemListMenu.sub.left;
- u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.field_0D;
+ u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
HelpSystem_PrintTextAt(gFameCheckerText_ListMenuCursor, x, y);
}
@@ -1107,24 +1107,24 @@ u8 TryMoveCursor1(u8 dirn)
r4 = 0;
else
r4 = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
- if (gHelpSystemListMenu.field_0C == 0)
+ if (gHelpSystemListMenu.itemsAbove == 0)
{
- if (gHelpSystemListMenu.field_0D != 0)
+ if (gHelpSystemListMenu.cursorPos != 0)
{
- gHelpSystemListMenu.field_0D--;
+ gHelpSystemListMenu.cursorPos--;
return 1;
}
else
return 0;
}
- if (gHelpSystemListMenu.field_0D > r4)
+ if (gHelpSystemListMenu.cursorPos > r4)
{
- gHelpSystemListMenu.field_0D--;
+ gHelpSystemListMenu.cursorPos--;
return 1;
}
else
{
- gHelpSystemListMenu.field_0C--;
+ gHelpSystemListMenu.itemsAbove--;
return 2;
}
}
@@ -1134,24 +1134,24 @@ u8 TryMoveCursor1(u8 dirn)
r4 = 0;
else
r4 = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
- if (gHelpSystemListMenu.field_0C == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
+ if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
{
- if (gHelpSystemListMenu.field_0D < gHelpSystemListMenu.sub.maxShowed - 1)
+ if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1)
{
- gHelpSystemListMenu.field_0D++;
+ gHelpSystemListMenu.cursorPos++;
return 1;
}
else
return 0;
}
- else if (gHelpSystemListMenu.field_0D < r4)
+ else if (gHelpSystemListMenu.cursorPos < r4)
{
- gHelpSystemListMenu.field_0D++;
+ gHelpSystemListMenu.cursorPos++;
return 1;
}
else
{
- gHelpSystemListMenu.field_0C++;
+ gHelpSystemListMenu.itemsAbove++;
return 2;
}
}
@@ -1159,7 +1159,7 @@ u8 TryMoveCursor1(u8 dirn)
bool8 MoveCursor(u8 by, u8 dirn)
{
- u8 r7 = gHelpSystemListMenu.field_0D;
+ u8 r7 = gHelpSystemListMenu.cursorPos;
u8 flags = 0;
s32 i;
for (i = 0; i < by; i++)
@@ -1172,14 +1172,14 @@ bool8 MoveCursor(u8 by, u8 dirn)
// neither changed
return TRUE;
case 1:
- // changed field_0D only
+ // changed cursorPos only
sub_813C860(r7);
PlaceListMenuCursor();
CommitTilemap();
break;
case 2:
case 3:
- // changed field_0C
+ // changed itemsAbove
if (sub_812BF88() == TRUE)
{
HelpSystem_SetInputDelay(2);
diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c
index df892152a..5b634a273 100644
--- a/src/help_system_812B1E0.c
+++ b/src/help_system_812B1E0.c
@@ -19,22 +19,22 @@
static EWRAM_DATA u16 sSomeVariable = 0;
static EWRAM_DATA u8 gUnknown_203B0EE = 0;
-u8 gUnknown_3005E9C[4];
+u8 sHelpSystemState[4];
u16 gSomeVariableBackup;
static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
-static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-static bool8 sub_812B754(void);
-static bool8 sub_812B780(u8);
-static bool8 sub_812BB10(void);
-
-static void sub_812BF5C(void);
-static void sub_812BF74(const u8 *);
-static void sub_812BF94(struct HelpSystemListMenu * a0);
-static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-
-static const u8 *const gUnknown_845B080[] = {
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+static bool8 HelpSystem_HasDefeatedBrock(void);
+static bool8 HelpSystemSubmenuIndexIsActive(u8);
+static bool8 HasGottenAtLeastOneHM(void);
+
+static void PrintWelcomeMessageOnPanel1(void);
+static void PrintTextOnPanel2Row52RightAlign(const u8 *);
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0);
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+
+static const u8 *const sHelpSystemTopicPtrs[] = {
gUnknown_81B2DF8,
gUnknown_81B2E1C,
gUnknown_81B2E2E,
@@ -43,7 +43,7 @@ static const u8 *const gUnknown_845B080[] = {
gUnknown_81B2E6A
};
-static const u8 *const gUnknown_845B098[] = {
+static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[] = {
gUnknown_81B2E88,
gUnknown_81B2EC8,
gUnknown_81B2F00,
@@ -52,7 +52,7 @@ static const u8 *const gUnknown_845B098[] = {
gUnknown_81B2FA9
};
-static const u8 *const gUnknown_845B0B0[] = {
+static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = {
NULL,
gUnknown_81B3083,
gUnknown_81B30A9,
@@ -100,7 +100,7 @@ static const u8 *const gUnknown_845B0B0[] = {
gUnknown_81B3516
};
-static const u8 *const gUnknown_845B164[] = {
+static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = {
NULL,
gUnknown_81B3525,
gUnknown_81B35E6,
@@ -148,7 +148,7 @@ static const u8 *const gUnknown_845B164[] = {
gUnknown_81B55F4
};
-static const u8 *const gUnknown_845B218[] = {
+static const u8 *const sHelpSystemMenuTopicTextPtrs[] = {
NULL,
gUnknown_81B56E3,
gUnknown_81B56F4,
@@ -200,7 +200,7 @@ static const u8 *const gUnknown_845B218[] = {
gUnknown_81B5A37
};
-static const u8 *const gUnknown_845B2DC[] = {
+static const u8 *const sHelpSystemSpecializedControlsTextPtrs[] = {
NULL,
gUnknown_81B5A4D,
gUnknown_81B5B0C,
@@ -252,7 +252,7 @@ static const u8 *const gUnknown_845B2DC[] = {
gUnknown_81B7C57
};
-static const u8 *const gUnknown_845B3A0[] = {
+static const u8 *const sHelpSystemSpecializedStringsTextPtrs[] = {
NULL,
gUnknown_81B7CC1,
gUnknown_81B7CC4,
@@ -299,7 +299,7 @@ static const u8 *const gUnknown_845B3A0[] = {
gUnknown_81B7E0F
};
-static const u8 *const gUnknown_845B450[] = {
+static const u8 *const sHelpSystemSpecializedStringDefinitionsTextPtrs[] = {
NULL,
gUnknown_81B7E16,
gUnknown_81B7F0A,
@@ -346,7 +346,7 @@ static const u8 *const gUnknown_845B450[] = {
gUnknown_81B9B2F
};
-static const u8 *const gUnknown_845B500[] = {
+static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = {
NULL,
gUnknown_81B9BB7,
gUnknown_81B9BC7,
@@ -357,7 +357,7 @@ static const u8 *const gUnknown_845B500[] = {
gUnknown_81B9C1D
};
-static const u8 *const gUnknown_845B520[] = {
+static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = {
NULL,
gUnknown_81B9C2F,
gUnknown_81B9D04,
@@ -368,7 +368,7 @@ static const u8 *const gUnknown_845B520[] = {
gUnknown_81BA027
};
-static const u8 *const gUnknown_845B540[] = {
+static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = {
NULL,
gUnknown_81BA0F1,
gUnknown_81BA10D,
@@ -407,7 +407,7 @@ static const u8 *const gUnknown_845B540[] = {
gUnknown_81BA400
};
-static const u8 *const gUnknown_845B5D0[] = {
+static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = {
NULL,
gUnknown_81BA416,
gUnknown_81BA4E6,
@@ -446,7 +446,6 @@ static const u8 *const gUnknown_845B5D0[] = {
gUnknown_81BB156
};
-
static const u8 gUnknown_845B660[] = {
0x01, 0x02, 0x03, 0xff
};
@@ -739,7 +738,7 @@ static const u8 gUnknown_845B9BE[] = {
0x09, 0x01, 0x02, 0x03, 0x23, 0x25, 0x24, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x27, 0x15, 0x26, 0x16, 0x17, 0x18, 0x1a, 0x0e, 0x1b, 0xff
};
-static const u8 *const gUnknown_845B9E0[] = {
+static const u8 *const sHelpSystemSubmenuIndexPointers[] = {
NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, gUnknown_845B660, NULL,
NULL, NULL, NULL, gUnknown_845B664, NULL,
@@ -780,48 +779,48 @@ static const u8 *const gUnknown_845B9E0[] = {
static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin");
-static const u8 gUnknown_845C4B0[] = {
+static const u8 sHelpSystemContextTopicOrder[] = {
3, 0, 1, 2, 4, 5
};
-static const u8 gUnknown_845C4B6[][6] = {
- {0, 0, 0, 0, 0, 1},
- {0, 0, 0, 1, 0, 1},
- {0, 0, 0, 1, 0, 1},
- {0, 1, 0, 1, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 0, 1, 0, 0, 1},
- {0, 0, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {0, 1, 1, 0, 0, 1},
- {1, 0, 0, 1, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 1, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 0, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {1, 1, 1, 0, 1, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 1, 0, 0, 0, 1},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0}
+static const bool8 sHelpSystemContextTopicFlags[][6] = {
+ {FALSE, FALSE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, TRUE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, FALSE, FALSE, TRUE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, TRUE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
+ {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
+ {FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}
};
static const u16 sMartMaps[] = {
@@ -961,12 +960,12 @@ static bool8 IsInDungeonMap(void)
void sub_812B35C(void)
{
- sub_812B4B8();
+ HelpSystem_EnableToggleWithRButton();
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
HelpSystem_SetSomeVariable2(0x16);
else if (IsInDungeonMap())
HelpSystem_SetSomeVariable2(0x15);
- else if (is_light_level_8_or_9(gMapHeader.mapType))
+ else if (IsMapTypeIndoors(gMapHeader.mapType))
{
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F)))
HelpSystem_SetSomeVariable2(0x0E);
@@ -1015,126 +1014,126 @@ void HelpSystem_Enable(void)
if (gQuestLogState != 2 && gQuestLogState != 3)
{
gHelpSystemEnabled = TRUE;
- sub_812B4B8();
+ HelpSystem_EnableToggleWithRButton();
}
}
-void sub_812B4AC(void)
+void HelpSystem_DisableToggleWithRButton(void)
{
- gUnknown_203F175 = 1;
+ gHelpSystemToggleWithRButtonDisabled = TRUE;
}
-void sub_812B4B8(void)
+void HelpSystem_EnableToggleWithRButton(void)
{
- gUnknown_203F175 = 0;
+ gHelpSystemToggleWithRButtonDisabled = FALSE;
}
-static void sub_812B4C4(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- a0->sub.items = a1;
- a0->sub.totalItems = 1;
- a0->sub.maxShowed = 1;
- a0->sub.left = 1;
- a0->sub.top = 4;
+ helpListMenu->sub.items = listMenuItemsBuffer;
+ helpListMenu->sub.totalItems = 1;
+ helpListMenu->sub.maxShowed = 1;
+ helpListMenu->sub.left = 1;
+ helpListMenu->sub.top = 4;
}
-static void sub_812B4D8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- sub_812B4C4(a0, a1);
- sub_812B520(a0, a1);
- sub_812BF74(gUnknown_841DFAC);
- HelpSystem_InitListMenuController(a0, 0, gUnknown_3005E9C[2]);
- sub_812BF9C(a0, a1);
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFAC);
+ HelpSystem_InitListMenuController(helpListMenu, 0, sHelpSystemState[2]);
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
u8 i;
- u8 r4 = 0;
+ u8 totalItems = 0;
for (i = 0; i < 6; i++)
{
- if (gUnknown_845C4B6[sSomeVariable][gUnknown_845C4B0[i]] == 1)
+ if (sHelpSystemContextTopicFlags[sSomeVariable][sHelpSystemContextTopicOrder[i]] == TRUE)
{
- a1[r4].label = gUnknown_845B080[gUnknown_845C4B0[i]];
- a1[r4].index = gUnknown_845C4B0[i];
- r4++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]];
+ listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i];
+ totalItems++;
}
}
- a1[r4 - 1].index = -2;
- a0->sub.totalItems = r4;
- a0->sub.maxShowed = r4;
- a0->sub.left = 0;
+ listMenuItemsBuffer[totalItems - 1].index = -2;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = totalItems;
+ helpListMenu->sub.left = 0;
}
-static void sub_812B5A8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
sub_813BDE8(0);
sub_813BFC0(0);
sub_813BE78(1);
- sub_812B4C4(a0, a1);
- sub_812B614(a0, a1);
- sub_812BF74(gUnknown_841DFC9);
- HelpSystem_InitListMenuController(a0, a0->field_0C, a0->field_0D);
- HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
+ SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFC9);
+ HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos);
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
sub_813BDA4(1);
sub_813BD5C(1);
}
-static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- u8 r6 = 0;
- const u8 * r3 = gUnknown_845B9E0[sSomeVariable * 5 + gUnknown_3005E9C[1]];
+ u8 totalItems = 0;
+ const u8 * indexPtr = sHelpSystemSubmenuIndexPointers[sSomeVariable * 5 + sHelpSystemState[1]];
u8 i;
- for (i = 0; r3[i] != 0xFF; i++)
+ for (i = 0; indexPtr[i] != 0xFF; i++)
{
- if (sub_812B780(r3[i]) == TRUE)
+ if (HelpSystemSubmenuIndexIsActive(indexPtr[i]) == TRUE)
{
- if (gUnknown_3005E9C[1] == 0)
- a1[r6].label = gUnknown_845B0B0[r3[i]];
- else if (gUnknown_3005E9C[1] == 1)
- a1[r6].label = gUnknown_845B218[r3[i]];
- else if (gUnknown_3005E9C[1] == 2)
- a1[r6].label = gUnknown_845B3A0[r3[i]];
- else if (gUnknown_3005E9C[1] == 3)
- a1[r6].label = gUnknown_845B500[r3[i]];
+ if (sHelpSystemState[1] == 0)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 1)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 2)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
+ else if (sHelpSystemState[1] == 3)
+ listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[indexPtr[i]];
else
- a1[r6].label = gUnknown_845B540[r3[i]];
- a1[r6].index = r3[i];
- r6++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[indexPtr[i]];
+ listMenuItemsBuffer[totalItems].index = indexPtr[i];
+ totalItems++;
}
}
- if (sub_812B754() == TRUE)
+ if (HelpSystem_HasDefeatedBrock() == TRUE)
{
- for (i = 0, r3 = gUnknown_845B9BE; r3[i] != 0xFF; i++)
+ for (i = 0, indexPtr = gUnknown_845B9BE; indexPtr[i] != 0xFF; i++)
{
- a1[r6].label = gUnknown_845B3A0[r3[i]];
- a1[r6].index = r3[i];
- r6++;
+ listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
+ listMenuItemsBuffer[totalItems].index = indexPtr[i];
+ totalItems++;
}
}
- a1[r6].label = gUnknown_81B2E6F;
- a1[r6].index = -2;
- r6++;
- a0->sub.totalItems = r6;
- a0->sub.maxShowed = 7;
- a0->sub.left = 0;
- a0->sub.top = 21;
+ listMenuItemsBuffer[totalItems].label = gUnknown_81B2E6F;
+ listMenuItemsBuffer[totalItems].index = -2;
+ totalItems++;
+ helpListMenu->sub.totalItems = totalItems;
+ helpListMenu->sub.maxShowed = 7;
+ helpListMenu->sub.left = 0;
+ helpListMenu->sub.top = 21;
}
-static bool8 sub_812B754(void)
+static bool8 HelpSystem_HasDefeatedBrock(void)
{
- if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gUnknown_3005E9C[1] == 2)
+ if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && sHelpSystemState[1] == 2)
return TRUE;
return FALSE;
}
-static bool8 sub_812B780(u8 id)
+static bool8 HelpSystemSubmenuIndexIsActive(u8 id)
{
u8 i = 0;
- if (gUnknown_3005E9C[1] == 0)
+ if (sHelpSystemState[1] == 0)
{
switch (id)
{
@@ -1188,7 +1187,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_BADGE01_GET);
case 28:
case 40:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 39:
return FlagGet(FLAG_GOT_FAME_CHECKER);
case 44:
@@ -1196,7 +1195,7 @@ static bool8 sub_812B780(u8 id)
}
return FALSE;
}
- if (gUnknown_3005E9C[1] == 1)
+ if (sHelpSystemState[1] == 1)
{
switch (id)
{
@@ -1254,7 +1253,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_BADGE01_GET);
case 16:
case 17:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 18:
return FlagGet(FLAG_GOT_BICYCLE);
case 48:
@@ -1262,9 +1261,9 @@ static bool8 sub_812B780(u8 id)
}
return FALSE;
}
- if (gUnknown_3005E9C[1] == 2)
+ if (sHelpSystemState[1] == 2)
{
- if (sub_812B754() == TRUE)
+ if (HelpSystem_HasDefeatedBrock() == TRUE)
{
for (i = 0; gUnknown_845B9BE[i] != 0xFF; i++)
{
@@ -1311,7 +1310,7 @@ static bool8 sub_812B780(u8 id)
return FlagGet(FLAG_SYS_POKEMON_GET);
case 36:
case 37:
- return sub_812BB10();
+ return HasGottenAtLeastOneHM();
case 3:
case 15:
case 18:
@@ -1320,7 +1319,7 @@ static bool8 sub_812B780(u8 id)
}
return TRUE;
}
- if (gUnknown_3005E9C[1] == 3)
+ if (sHelpSystemState[1] == 3)
{
switch (id)
{
@@ -1331,7 +1330,7 @@ static bool8 sub_812B780(u8 id)
}
return TRUE;
}
- if (gUnknown_3005E9C[1] == 4)
+ if (sHelpSystemState[1] == 4)
{
return TRUE;
}
@@ -1339,7 +1338,7 @@ static bool8 sub_812B780(u8 id)
return FALSE;
}
-static bool8 sub_812BB10(void)
+static bool8 HasGottenAtLeastOneHM(void)
{
if (FlagGet(FLAG_GOT_HM01) == TRUE)
return TRUE;
@@ -1358,64 +1357,64 @@ static bool8 sub_812BB10(void)
return FALSE;
}
-bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- switch (a0->field_0E)
+ switch (helpListMenu->state)
{
case 8:
- return sub_812BC54(a0, a1);
+ return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer);
case 9:
- return sub_812BC80(a0, a1);
+ return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer);
case 10:
- return sub_812BCA8(a0, a1);
+ return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer);
case 0:
- return sub_812BCD0(a0, a1);
+ return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer);
case 1:
- return sub_812BD2C(a0, a1);
+ return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer);
case 2:
- return sub_812BD64(a0, a1);
+ return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer);
case 3:
- return sub_812BD98(a0, a1);
+ return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer);
case 4:
- return sub_812BE10(a0, a1);
+ return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer);
case 5:
- return sub_812BEEC(a0, a1);
+ return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer);
case 6:
- return sub_812BF18(a0, a1);
+ return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer);
}
return FALSE;
}
-bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- sub_812BF74(gUnknown_841DFA5);
- sub_812BF5C();
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFA5);
+ PrintWelcomeMessageOnPanel1();
sub_813BDA4(1);
sub_813BD5C(1);
- a0->field_0E = 9;
+ helpListMenu->state = 9;
return TRUE;
}
-bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
if (JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- a0->field_0E = 10;
+ helpListMenu->state = 10;
}
return TRUE;
}
-bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[2] = 0;
- sub_812BF94(a0);
- sub_812B4D8(a0, a1);
- a0->field_0E = 0;
+ sHelpSystemState[2] = 0;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
return TRUE;
}
-bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
@@ -1425,42 +1424,42 @@ bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
return FALSE;
case -5:
case -4:
- sub_812BF9C(a0, a1);
+ PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
break;
case -3:
case -1:
break;
default:
- gUnknown_3005E9C[1] = v0;
- a0->field_0E = 1;
+ sHelpSystemState[1] = v0;
+ helpListMenu->state = 1;
break;
}
return TRUE;
}
-bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 1;
- gUnknown_3005E9C[2] = a0->field_0D;
- sub_812BF94(a0);
- sub_812B5A8(a0, a1);
+ sHelpSystemState[0] = 1;
+ sHelpSystemState[2] = helpListMenu->cursorPos;
+ ResetHelpSystemCursor(helpListMenu);
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
sub_813C75C();
HelpSystem_SetInputDelay(2);
- a0->field_0E = 3;
+ helpListMenu->state = 3;
return TRUE;
}
-bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
sub_813C004(0, 0);
sub_813C004(1, 0);
- gUnknown_3005E9C[0] = 0;
- sub_812B4D8(a0, a1);
- a0->field_0E = 0;
+ sHelpSystemState[0] = 0;
+ BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
+ helpListMenu->state = 0;
return TRUE;
}
-bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
s32 v0 = HelpSystem_GetMenuInput();
switch (v0)
@@ -1468,7 +1467,7 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
case -6:
return FALSE;
case -2:
- a0->field_0E = 2;
+ helpListMenu->state = 2;
break;
case -5:
case -4:
@@ -1476,8 +1475,8 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
case -1:
break;
default:
- gUnknown_3005E9C[3] = v0;
- a0->field_0E = 4;
+ sHelpSystemState[3] = v0;
+ helpListMenu->state = 4;
break;
}
return TRUE;
@@ -1485,60 +1484,60 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
void sub_812BDEC(void)
{
- HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
+ HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
}
-bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 2;
+ sHelpSystemState[0] = 2;
sub_813BDA4(0);
HelpSystem_FillPanel1();
- sub_812BF74(gUnknown_841DFBE);
+ PrintTextOnPanel2Row52RightAlign(gUnknown_841DFBE);
sub_813BDE8(1);
sub_813BEE4(1);
- if (gUnknown_3005E9C[1] == 0)
+ if (sHelpSystemState[1] == 0)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B0B0[gUnknown_3005E9C[3]], gUnknown_845B164[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedAnswerTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 1)
+ else if (sHelpSystemState[1] == 1)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B218[gUnknown_3005E9C[3]], gUnknown_845B2DC[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedControlsTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 2)
+ else if (sHelpSystemState[1] == 2)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B3A0[gUnknown_3005E9C[3]], gUnknown_845B450[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemSpecializedStringsTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedStringDefinitionsTextPtrs[sHelpSystemState[3]]);
}
- else if (gUnknown_3005E9C[1] == 3)
+ else if (sHelpSystemState[1] == 3)
{
- HelpSystem_PrintTwoStrings(gUnknown_845B500[gUnknown_3005E9C[3]], gUnknown_845B520[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[sHelpSystemState[3]], sHelpSystemGeneralTopicDescriptionTextPtrs[sHelpSystemState[3]]);
}
else
{
- HelpSystem_PrintTwoStrings(gUnknown_845B540[gUnknown_3005E9C[3]], gUnknown_845B5D0[gUnknown_3005E9C[3]]);
+ HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[sHelpSystemState[3]], sHelpSystemTypeMatchupDescriptionTextPtrs[sHelpSystemState[3]]);
}
sub_813BDA4(1);
sub_813BD5C(1);
- a0->field_0E = 6;
+ helpListMenu->state = 6;
return TRUE;
}
-bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- gUnknown_3005E9C[0] = 1;
- sub_812B5A8(a0, a1);
+ sHelpSystemState[0] = 1;
+ BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
sub_813C75C();
HelpSystem_SetInputDelay(2);
- a0->field_0E = 3;
+ helpListMenu->state = 3;
return TRUE;
}
-bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
{
PlaySE(SE_SELECT);
- a0->field_0E = 5;
+ helpListMenu->state = 5;
return TRUE;
}
if (JOY_NEW(L_BUTTON | R_BUTTON))
@@ -1546,13 +1545,13 @@ bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
return TRUE;
}
-static void sub_812BF5C(void)
+static void PrintWelcomeMessageOnPanel1(void)
{
HelpSystem_FillPanel1();
HelpSystem_PrintTextAt(gUnknown_81B2FC9, 0, 0);
}
-static void sub_812BF74(const u8 * str)
+static void PrintTextOnPanel2Row52RightAlign(const u8 * str)
{
HelpSystem_FillPanel2();
HelpSystem_PrintTextRightAlign_Row52(str);
@@ -1560,21 +1559,21 @@ static void sub_812BF74(const u8 * str)
u8 sub_812BF88(void)
{
- return gUnknown_3005E9C[0];
+ return sHelpSystemState[0];
}
-static void sub_812BF94(struct HelpSystemListMenu * a0)
+static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu)
{
- a0->field_0C = 0;
- a0->field_0D = 0;
+ helpListMenu->itemsAbove = 0;
+ helpListMenu->cursorPos = 0;
}
-static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
+static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
{
- s32 index = a1[a0->field_0C + a0->field_0D].index;
+ s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index;
if (index == -2)
- HelpSystem_PrintText_813C584(gUnknown_845B098[5]);
+ HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]);
else
- HelpSystem_PrintText_813C584(gUnknown_845B098[index]);
+ HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]);
sub_813BE30(1);
}
diff --git a/src/intro.c b/src/intro.c
index cee1c8fec..837d4f905 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -1431,7 +1431,7 @@ static void sub_80EDB70(struct IntroSequenceData * this)
{
this->field_0018->pos1.x += this->field_0018->pos2.x;
this->field_0018->pos1.y += this->field_0018->pos2.y;
- sub_8007FFC(this->field_0018, 0, 0x2A);
+ obj_pos2_update_enable(this->field_0018, 0, 0x2A);
this->field_0018->callback = SpriteCallbackDummy;
StartSpriteAffineAnim(this->field_0018, 1);
}
@@ -1448,7 +1448,7 @@ static void sub_80EDBAC(struct IntroSequenceData * this)
{
StartSpriteAffineAnim(this->field_0028[i], 1);
this->field_0028[i]->callback = nullsub_83;
- sub_8007FFC(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]);
+ obj_pos2_update_enable(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]);
}
}
diff --git a/src/learn_move.c b/src/learn_move.c
index e22922528..8a2f5781b 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -309,7 +309,7 @@ static void MoveRelearnerLoadBgGfx(void)
FillBgTilemapBufferRect(0, 0x000, 0, 0, 30, 20, 0xF);
SetBgTilemapBuffer(1, sMoveRelearner->bg1TilemapBuffer);
TextWindow_SetUserSelectedFrame(0, 1, 0xE0);
- sub_8107D38(0xD0, 1);
+ ListMenuLoadStdPalAt(0xD0, 1);
LoadPalette(gUnknown_8E97DDC, 0x00, 0x20);
DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0);
CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0);
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
new file mode 100644
index 000000000..23962a937
--- /dev/null
+++ b/src/librfu_intr.c
@@ -0,0 +1,402 @@
+#include "global.h"
+#include "librfu.h"
+
+static void sio32intr_clock_master(void);
+static void sio32intr_clock_slave(void);
+static u16 handshake_wait(u16 slot);
+static void STWI_set_timer_in_RAM(u8 count);
+static void STWI_stop_timer_in_RAM(void);
+static void STWI_init_slave(void);
+static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)());
+static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16));
+static void Callback_Dummy_ID(void (*callbackId)(void));
+
+void IntrSIO32(void)
+{
+ if (gSTWIStatus->state == 10)
+ {
+ if (gSTWIStatus->callbackID != NULL)
+ Callback_Dummy_ID(gSTWIStatus->callbackID);
+ }
+ else
+ {
+ if (gSTWIStatus->msMode == AGB_CLK_MASTER)
+ sio32intr_clock_master();
+ else
+ sio32intr_clock_slave();
+ }
+}
+
+static void sio32intr_clock_master(void)
+{
+ u32 regSIODATA32;
+ u32 ackLen;
+
+ STWI_set_timer_in_RAM(80);
+ regSIODATA32 = REG_SIODATA32;
+
+ if (gSTWIStatus->state == 0) // master send req
+ {
+ if (regSIODATA32 == 0x80000000)
+ {
+ if (gSTWIStatus->reqNext <= gSTWIStatus->reqLength)
+ {
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext];
+ gSTWIStatus->reqNext++;
+ }
+ else
+ {
+ gSTWIStatus->state = 1; // master wait ack
+ REG_SIODATA32 = 0x80000000;
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(130);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 1) // master wait ack
+ {
+ if ((regSIODATA32 & 0xFFFF0000) == 0x99660000)
+ {
+ gSTWIStatus->ackNext = 0;
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ gSTWIStatus->ackNext++;
+ gSTWIStatus->ackActiveCommand = regSIODATA32;
+ gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8;
+ if ((ackLen = gSTWIStatus->ackLength) >= gSTWIStatus->ackNext)
+ {
+ gSTWIStatus->state = 2; // master receive ack
+ REG_SIODATA32 = 0x80000000;
+ }
+ else
+ {
+ gSTWIStatus->state = 3; // master done ack
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(130);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 2) // master receive ack
+ {
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
+ gSTWIStatus->ackNext++;
+ if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
+ gSTWIStatus->state = 3; // master done ack
+ else
+ REG_SIODATA32 = 0x80000000;
+ }
+
+ if (handshake_wait(1) == 1)
+ return;
+
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_MULTI_SD;
+
+ if (handshake_wait(0) == 1)
+ return;
+
+ STWI_stop_timer_in_RAM();
+
+ if (gSTWIStatus->state == 3) // master done ack
+ {
+ if (
+ gSTWIStatus->ackActiveCommand == (0x80 | ID_MS_CHANGE_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_DATA_TX_AND_CHANGE_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_UNK35_REQ)
+ || gSTWIStatus->ackActiveCommand == (0x80 | ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
+ )
+ {
+
+ gSTWIStatus->msMode = AGB_CLK_SLAVE;
+ REG_SIODATA32 = 0x80000000;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+ gSTWIStatus->state = 5; // slave receive req init
+ }
+ else
+ {
+ if (gSTWIStatus->ackActiveCommand == 0xEE)
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->state = 4; // error
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ else
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->state = 4; // error
+ }
+ }
+ gSTWIStatus->sending = 0;
+ if (gSTWIStatus->callbackM != NULL)
+ Callback_Dummy_M(gSTWIStatus->reqActiveCommand, gSTWIStatus->error, gSTWIStatus->callbackM);
+ }
+ else
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_ENABLE;
+ }
+}
+
+static void sio32intr_clock_slave(void)
+{
+ u32 regSIODATA32;
+ u32 r0;
+ register u32 reqLen asm("r2");
+
+ gSTWIStatus->timerActive = 0;
+ STWI_set_timer_in_RAM(100);
+ if (handshake_wait(0) == 1)
+ return;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_MULTI_SD;
+ regSIODATA32 = REG_SIODATA32;
+ if (gSTWIStatus->state == 5) // slave receive req init
+ {
+ ((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
+ gSTWIStatus->reqNext = 1;
+ r0 = 0x99660000;
+ if ((regSIODATA32 >> 16) == (r0 >> 16))
+ {
+ gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
+ gSTWIStatus->reqActiveCommand = regSIODATA32;
+ if (gSTWIStatus->reqLength == 0)
+ {
+ if (
+ gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
+ )
+ {
+ gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand;
+ gSTWIStatus->ackLength = 0;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ }
+ gSTWIStatus->ackLength = 1;
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ gSTWIStatus->ackNext = 1;
+ gSTWIStatus->state = 7; // slave send ack
+ }
+ else
+ {
+ REG_SIODATA32 = 0x80000000;
+ gSTWIStatus->reqNext = 1;
+ gSTWIStatus->state = 6; // slave receive req
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(100);
+ return;
+ }
+ }
+ else if (gSTWIStatus->state == 6) // slave receive req
+ {
+ ((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
+ gSTWIStatus->reqNext++;
+ if (gSTWIStatus->reqLength < gSTWIStatus->reqNext)
+ {
+ if (
+ gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
+ )
+ {
+ gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand;
+ gSTWIStatus->ackLength = 0;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
+ if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 1;
+ }
+ else
+ {
+ ((u32*)gSTWIStatus->txPacket)[1] = 2;
+ }
+ gSTWIStatus->ackLength = 1;
+ gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
+ }
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
+ gSTWIStatus->ackNext = 1;
+ gSTWIStatus->state = 7; // slave send ack
+ }
+ else
+ {
+ REG_SIODATA32 = 0x80000000;
+ }
+ }
+ else if (gSTWIStatus->state == 7) // slave send ack
+ {
+ if (regSIODATA32 == 0x80000000)
+ {
+ if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
+ {
+ gSTWIStatus->state = 8; // slave done ack
+ }
+ else
+ {
+ REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[gSTWIStatus->ackNext];
+ gSTWIStatus->ackNext++;
+ }
+ }
+ else
+ {
+ STWI_stop_timer_in_RAM();
+ STWI_set_timer_in_RAM(100);
+ return;
+ }
+ }
+ if (handshake_wait(1) == 1)
+ return;
+ if (gSTWIStatus->state == 8) // slave done ack
+ {
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ STWI_stop_timer_in_RAM();
+ if (gSTWIStatus->error == ERR_REQ_CMD_ACK_REJECTION)
+ {
+ STWI_init_slave();
+ if (gSTWIStatus->callbackS != NULL)
+ {
+ Callback_Dummy_S(0x1EE, gSTWIStatus->callbackS);
+ }
+ }
+ else
+ {
+ REG_SIODATA32 = 0;
+ REG_SIOCNT = 0;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
+ gSTWIStatus->state = 0; // master send req
+ if (gSTWIStatus->callbackS != NULL)
+ {
+ Callback_Dummy_S((gSTWIStatus->reqLength << 8) | (gSTWIStatus->reqActiveCommand), gSTWIStatus->callbackS);
+ }
+ }
+ }
+ else
+ {
+ REG_IME = 0;
+ if (REG_TM0CNT_H & TIMER_ENABLE)
+ {
+ if ((REG_TM0CNT_H & 0x03) == TIMER_1CLK)
+ {
+ while (REG_TM0CNT_L > 0xFF9B);
+ }
+ else
+ {
+ while (REG_TM0CNT_L > 0xFFFE);
+ }
+ }
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+ REG_IME = 1;
+ }
+}
+
+static u16 handshake_wait(u16 slot)
+{
+ do
+ {
+ if ((gSTWIStatus->timerActive & 0xFF) == 1)
+ {
+ gSTWIStatus->timerActive = 0;
+ return 1;
+ }
+ } while ((REG_SIOCNT & SIO_MULTI_SI) != (slot << SIO_MULTI_SI_SHIFT));
+ return 0;
+}
+
+static void STWI_set_timer_in_RAM(u8 count)
+{
+ vu16* regTMCNTL = (vu16*)(REG_ADDR_TMCNT_L + gSTWIStatus->timerSelect * 4);
+ vu16* regTMCNTH = (vu16*)(REG_ADDR_TMCNT_H + gSTWIStatus->timerSelect * 4);
+ REG_IME = 0;
+ switch (count)
+ {
+ case 50:
+ *regTMCNTL = 0xFCCB;
+ gSTWIStatus->timerState = 1;
+ break;
+ case 80:
+ *regTMCNTL = 0xFAE0;
+ gSTWIStatus->timerState = 2;
+ break;
+ case 100:
+ *regTMCNTL = 0xF996;
+ gSTWIStatus->timerState = 3;
+ break;
+ case 130:
+ *regTMCNTL = 0xF7AD;
+ gSTWIStatus->timerState = 4;
+ break;
+ }
+ *regTMCNTH = TIMER_ENABLE | TIMER_64CLK | TIMER_256CLK | TIMER_INTR_ENABLE;
+ REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect;
+ REG_IME = 1;
+}
+
+static void STWI_stop_timer_in_RAM(void)
+{
+ gSTWIStatus->timerState = 0;
+ REG_TMCNT_L(gSTWIStatus->timerSelect) = 0;
+ REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
+}
+
+static void STWI_init_slave(void)
+{
+ gSTWIStatus->state = 5; // slave receive req init
+ gSTWIStatus->msMode = AGB_CLK_SLAVE;
+ gSTWIStatus->reqLength = 0;
+ gSTWIStatus->reqNext = 0;
+ gSTWIStatus->reqActiveCommand = 0;
+ gSTWIStatus->ackLength = 0;
+ gSTWIStatus->ackNext = 0;
+ gSTWIStatus->ackActiveCommand = 0;
+ gSTWIStatus->timerState = 0;
+ gSTWIStatus->timerActive = 0;
+ gSTWIStatus->error = 0;
+ gSTWIStatus->recoveryCount = 0;
+ REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
+}
+
+NAKED
+static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)())
+{
+ asm("bx r2");
+}
+
+NAKED
+static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16))
+{
+ asm("bx r1");
+}
+
+NAKED
+static void Callback_Dummy_ID(void (*callbackId)(void))
+{
+ asm("bx r0");
+}
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
index dccd342f2..420fb7c9a 100644
--- a/src/librfu_rfu.c
+++ b/src/librfu_rfu.c
@@ -2,54 +2,54 @@
struct LLSFStruct
{
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u8 unk06;
- u8 unk07;
- u8 unk08;
- u8 unk09;
- u8 unk0A;
- u8 unk0B;
- u8 unk0C;
- u16 unk0E;
+ u8 frameSize;
+ u8 recvFirstShift;
+ u8 connSlotFlagShift;
+ u8 slotStateShift;
+ u8 ackShift;
+ u8 phaseShit;
+ u8 nShift;
+ u8 recvFirstMask;
+ u8 connSlotFlagMask;
+ u8 slotStateMask;
+ u8 ackMask;
+ u8 phaseMask;
+ u8 nMask;
+ u16 framesMask;
};
struct RfuLocalStruct
{
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u16 unk06;
+ u8 recvFirst;
+ u8 connSlotFlag;
+ u8 slotState;
+ u8 ack;
+ u8 phase;
+ u8 n;
+ u16 frame;
};
-static void rfu_CB_defaultCallback(u8, u16);
-static void rfu_CB_reset(u8, u16);
-static void rfu_CB_configGameData(u8, u16);
-static void rfu_CB_stopMode(u8, u16);
-static void rfu_CB_startSearchChild(u8, u16);
-static void rfu_CB_pollAndEndSearchChild(u8, u16);
-static void rfu_CB_startSearchParent(u8, u16);
-static void rfu_CB_pollSearchParent(u8, u16);
-static void rfu_CB_pollConnectParent(u8, u16);
-static void rfu_CB_pollConnectParent(u8, u16);
-static void rfu_CB_disconnect(u8, u16);
-static void rfu_CB_CHILD_pollConnectRecovery(u8, u16);
-static void rfu_CB_sendData(UNUSED u8, u16);
-static void rfu_CB_sendData2(UNUSED u8, u16);
-static void rfu_CB_sendData3(u8, u16);
-static void rfu_CB_recvData(u8, u16);
-static void rfu_enableREQCallback(bool8);
+static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult);
+static void rfu_CB_reset(u8 reqCommand, u16 reqResult);
+static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult);
+static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult);
+static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult);
+static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult);
+static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult);
+static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult);
+static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult);
+static void rfu_CB_recvData(u8 reqCommand, u16 reqResult);
+static void rfu_enableREQCallback(bool8 enable);
static void rfu_STC_clearAPIVariables(void);
static void rfu_STC_readChildList(void);
static void rfu_STC_readParentCandidateList(void);
-static void rfu_STC_REQ_callback(u8, u16);
+static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult);
static void rfu_STC_removeLinkData(u8, u8);
static void rfu_STC_fastCopy(const u8 **, u8 **, s32);
static void rfu_STC_clearLinkStatus(u8);
@@ -74,13 +74,38 @@ struct RfuStatic *gRfuStatic;
struct RfuFixed *gRfuFixed;
static const struct LLSFStruct llsf_struct[2] = {
- {
- 2, 14, 0, 10, 9, 5, 7, 2,
- 0, 15, 1, 3, 3, 0x1f
- }, {
- 3, 22, 18, 14, 13, 9, 11, 3,
- 15, 15, 1, 3, 3, 0x7f
- }
+ [MODE_CHILD] = {
+ .frameSize = 2,
+ .recvFirstShift = 14,
+ .connSlotFlagShift = 0,
+ .slotStateShift = 10,
+ .ackShift = 9,
+ .phaseShit = 5,
+ .nShift = 7,
+ .recvFirstMask = 2,
+ .connSlotFlagMask = 0,
+ .slotStateMask = 15,
+ .ackMask = 1,
+ .phaseMask = 3,
+ .nMask = 3,
+ .framesMask = 0x1f
+ },
+ [MODE_PARENT] = {
+ .frameSize = 3,
+ .recvFirstShift = 22,
+ .connSlotFlagShift = 18,
+ .slotStateShift = 14,
+ .ackShift = 13,
+ .phaseShit = 9,
+ .nShift = 11,
+ .recvFirstMask = 3,
+ .connSlotFlagMask = 15,
+ .slotStateMask = 15,
+ .ackMask = 1,
+ .phaseMask = 3,
+ .nMask = 3,
+ .framesMask = 0x7f
+ }
};
#ifdef EMERALD
@@ -91,46 +116,54 @@ static const char lib_ver[] = "RFU_V1024";
static const char str_checkMbootLL[] = "RFU-MBOOT";
-u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
+#define COPY(src, dst, size) do { \
+ const u16 *_src = (const u16 *)(src); \
+ u16 *_dst = (u16 *)(dst); \
+ u16 _size = (size); \
+ while (_size-- != 0) \
+ *_dst++ = *_src++; \
+} while (0)
+
+u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam)
{
u16 i;
u16 *dst;
const u16 *src;
- u16 r3;
+ u16 buffByteSizeMax;
- // is in EWRAM?
- if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
+ // is in EWRAM?
+ if (((uintptr_t)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam)
return ERR_RFU_API_BUFF_ADR;
- // is not 4-byte aligned?
+ // is not 4-byte aligned?
if ((u32)APIBuffer & 3)
return ERR_RFU_API_BUFF_ADR;
if (copyInterruptToRam)
{
// An assert/debug print may have existed before, ie
// printf("%s %u < %u", "somefile.c:12345", buffByteSize, num)
- // to push this into r3?
- r3 = sizeof(struct RfuAPIBuffer);
- if (buffByteSize < r3)
+ // to push this into buffByteSizeMax?
+ buffByteSizeMax = RFU_API_BUFF_SIZE_RAM;
+ if (buffByteSize < buffByteSizeMax)
return ERR_RFU_API_BUFF_SIZE;
}
if (!copyInterruptToRam)
{
- r3 = 0x504; // same issue as above
- if (buffByteSize < r3)
+ buffByteSizeMax = RFU_API_BUFF_SIZE_ROM; // same issue as above
+ if (buffByteSize < buffByteSizeMax)
return ERR_RFU_API_BUFF_SIZE;
}
- gRfuLinkStatus = &APIBuffer->linkStatus;
- gRfuStatic = &APIBuffer->static_;
- gRfuFixed = &APIBuffer->fixed;
- gRfuSlotStatusNI[0] = &APIBuffer->NI[0];
- gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0];
+ gRfuLinkStatus = (void *)APIBuffer + 0;
+ gRfuStatic = (void *)APIBuffer + 0xb4; // + sizeof(*gRfuLinkStatus)
+ gRfuFixed = (void *)APIBuffer + 0xdc; // + sizeof(*gRfuStatic)
+ gRfuSlotStatusNI[0] = (void *)APIBuffer + 0x1bc; // + sizeof(*gRfuFixed)
+ gRfuSlotStatusUNI[0] = (void *)APIBuffer + 0x37c; // + sizeof(*gRfuSlotStatusNI[0])
for (i = 1; i < RFU_CHILD_MAX; ++i)
{
gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1];
gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1];
}
- // TODO: Is it possible to fix the following 2 statements?
- // It's equivalent to:
+ // TODO: Is it possible to fix the following 2 statements?
+ // It's equivalent to:
// gRfuFixed->STWIBuffer = &APIBuffer->intr;
// STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam);
gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1];
@@ -143,11 +176,21 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
gRfuSlotStatusUNI[i]->recvBuffer = NULL;
gRfuSlotStatusUNI[i]->recvBufferSize = 0;
}
- src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1);
- dst = gRfuFixed->fastCopyBuffer;
// rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy
- for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3)
+#if LIBRFU_VERSION < 1028
+ src = (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1);
+ dst = gRfuFixed->fastCopyBuffer;
+ buffByteSizeMax = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16);
+ while (buffByteSizeMax-- != 0)
*dst++ = *src++;
+#else
+ // register swap dst <--> buffByteSizeMax
+ COPY(
+ (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1),
+ gRfuFixed->fastCopyBuffer,
+ 0x60 / sizeof(u16)
+ );
+#endif
gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1;
return 0;
}
@@ -155,19 +198,19 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc
static void rfu_STC_clearAPIVariables(void)
{
u16 IMEBackup = REG_IME;
- u8 i, r4;
+ u8 i, flags;
REG_IME = 0;
- r4 = gRfuStatic->flags;
+ flags = gRfuStatic->flags;
CpuFill16(0, gRfuStatic, sizeof(struct RfuStatic));
- gRfuStatic->flags = r4 & 8;
+ gRfuStatic->flags = flags & 8;
CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
gRfuLinkStatus->watchInterval = 4;
gRfuStatic->nowWatchInterval = 0;
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
rfu_clearAllSlot();
gRfuStatic->SCStartFlag = 0;
- for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
gRfuStatic->cidBak[i] = 0;
REG_IME = IMEBackup;
}
@@ -180,20 +223,20 @@ void rfu_REQ_PARENT_resumeRetransmitAndChange(void)
u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag)
{
- struct RfuIntrStruct *buf;
+ u8 *buf;
*ackFlag = 0;
if (gRfuLinkStatus->parentChild != MODE_PARENT)
return ERR_MODE_NOT_PARENT;
buf = rfu_getSTWIRecvBuffer();
- switch (buf->rxPacketAlloc.rfuPacket8.data[0])
+ switch (*buf)
{
case 40:
case 54:
- if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0)
+ if (buf[1] == 0)
*ackFlag = gRfuLinkStatus->connSlotFlag;
else
- *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4];
+ *ackFlag = buf[4];
return 0;
default:
return ERR_REQ_CMD_ID;
@@ -205,9 +248,9 @@ void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p)
STWI_init_timer(timerIntrTable_p, timerNo);
}
-struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void)
+u8 *rfu_getSTWIRecvBuffer(void)
{
- return gRfuFixed->STWIBuffer;
+ return (u8 *)gRfuFixed->STWIBuffer;
}
void rfu_setMSCCallback(void (*callback)(u16 reqCommandId))
@@ -229,26 +272,26 @@ static void rfu_enableREQCallback(bool8 enable)
gRfuStatic->flags &= 0xF7;
}
-static void rfu_STC_REQ_callback(u8 r5, u16 reqResult)
+static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
gRfuStatic->reqResult = reqResult;
if (gRfuStatic->flags & 8)
- gRfuFixed->reqCallback(r5, reqResult);
+ gRfuFixed->reqCallback(reqCommand, reqResult);
}
-static void rfu_CB_defaultCallback(u8 r0, u16 reqResult)
+static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult)
{
- s32 r5;
+ s32 bmSlotFlags;
u8 i;
- if (r0 == 0xFF)
+ if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
{
if (gRfuStatic->flags & 8)
- gRfuFixed->reqCallback(r0, reqResult);
- r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ gRfuFixed->reqCallback(reqCommand, reqResult);
+ bmSlotFlags = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
for (i = 0; i < RFU_CHILD_MAX; ++i)
- if ((r5 >> i) & 1)
+ if ((bmSlotFlags >> i) & 1)
rfu_STC_removeLinkData(i, 1);
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
}
@@ -277,25 +320,39 @@ u16 rfu_getRFUStatus(u8 *rfuState)
return 0;
}
+/*
+ * RFU Multiboot images are loaded into IWRAM
+ * struct RfuMbootLL
+ * {
+ * struct RfuLinkStatus status;
+ * u8 filler_B4[0x3C];
+ * char name[10];
+ * u16 checksum;
+ * }
+ * Returns 1 if the packet to inherit is malformed.
+ */
u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void)
{
const char *s1 = str_checkMbootLL;
char *s2 = (char *)0x30000F0;
u16 checksum;
- u16 *r2;
+ u16 *mb_buff_iwram_p;
u8 i;
+ // if (strcmp(s1, s2) != 0) return 1;
while (*s1 != '\0')
if (*s1++ != *s2++)
return 1;
- r2 = (u16 *)0x3000000;
+ mb_buff_iwram_p = (u16 *)0x3000000;
+
+ // The size of struct RfuLinkStatus is 180
checksum = 0;
- for (i = 0; i < 90; ++i)
- checksum += *r2++;
+ for (i = 0; i < 180/2; ++i)
+ checksum += *mb_buff_iwram_p++;
if (checksum != *(u16 *)0x30000FA)
return 1;
CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus));
- gRfuStatic->flags |= 0x80;
+ gRfuStatic->flags |= 0x80; // mboot
return 0;
}
@@ -305,14 +362,14 @@ void rfu_REQ_stopMode(void)
if (REG_IME == 0)
{
- rfu_STC_REQ_callback(61, 6);
+ rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 6);
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
}
else
{
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if (AgbRFU_checkID(8) == 0x8001)
+ if (AgbRFU_checkID(8) == RFU_ID)
{
timerReg = &REG_TMCNT(gSTWIStatus->timerSelect);
*timerReg = 0;
@@ -326,29 +383,29 @@ void rfu_REQ_stopMode(void)
else
{
REG_SIOCNT = SIO_MULTI_MODE;
- rfu_STC_REQ_callback(61, 0);
+ rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 0);
}
}
}
-static void rfu_CB_stopMode(u8 a1, u16 reqResult)
+static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
REG_SIOCNT = SIO_MULTI_MODE;
- rfu_STC_REQ_callback(a1, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u32 rfu_REQBN_softReset_and_checkID(void)
{
- u32 r2;
+ u32 id;
if (REG_IME == 0)
return ERR_ID_CHECK_IME_DISABLE;
AgbRFU_SoftReset();
rfu_STC_clearAPIVariables();
- if ((r2 = AgbRFU_checkID(30)) == 0)
+ if ((id = AgbRFU_checkID(30)) == 0)
REG_SIOCNT = SIO_MULTI_MODE;
- return r2;
+ return id;
}
void rfu_REQ_reset(void)
@@ -357,11 +414,11 @@ void rfu_REQ_reset(void)
STWI_send_ResetREQ();
}
-static void rfu_CB_reset(u8 a1, u16 reqResult)
+static void rfu_CB_reset(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_clearAPIVariables();
- rfu_STC_REQ_callback(a1, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
@@ -370,59 +427,59 @@ void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer);
if (mcTimer == 0)
{
- gRfuStatic->unk_1a = 1;
+ gRfuStatic->linkEmergencyLimit = 1;
}
else
{
u16 IMEBackup = REG_IME;
REG_IME = 0;
- gRfuStatic->unk_1a = Div(600, mcTimer);
+ gRfuStatic->linkEmergencyLimit = Div(600, mcTimer);
REG_IME = IMEBackup;
}
}
void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname)
{
- u8 sp[16];
+ u8 packet[16];
u8 i;
- u8 r3;
+ u8 check_sum;
const u8 *gnameBackup = gname;
const u8 *unameBackup;
- sp[0] = serialNo;
- sp[1] = serialNo >> 8;
+ packet[0] = serialNo;
+ packet[1] = serialNo >> 8;
if (mbootFlag != 0)
- sp[1] = (serialNo >> 8) | 0x80;
+ packet[1] = (serialNo >> 8) | 0x80;
for (i = 2; i < 15; ++i)
- sp[i] = *gname++;
- r3 = 0;
+ packet[i] = *gname++;
+ check_sum = 0;
unameBackup = uname;
for (i = 0; i < 8; ++i)
{
- r3 += *unameBackup++;
- r3 += *gnameBackup++;
+ check_sum += *unameBackup++;
+ check_sum += *gnameBackup++;
}
- sp[15] = ~r3;
+ packet[15] = ~check_sum;
if (mbootFlag != 0)
- sp[14] = 0;
+ packet[14] = 0;
STWI_set_Callback_M(rfu_CB_configGameData);
- STWI_send_GameConfigREQ(sp, uname);
+ STWI_send_GameConfigREQ(packet, uname);
}
-static void rfu_CB_configGameData(u8 ip, u16 r7)
+static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
{
- s32 r2, r3;
- u8 *r4;
+ s32 serialNo;
+ u8 *gname_uname_p;
u8 i;
- u8 *r1;
+ u8 *packet_p;
- if (r7 == 0)
+ if (reqResult == 0)
{
- r1 = gSTWIStatus->txPacket->rfuPacket8.data;
- r2 = gRfuLinkStatus->my.serialNo = r1[4];
- gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2;
- r4 = &r1[6];
+ packet_p = gSTWIStatus->txPacket->rfuPacket8.data;
+ serialNo = gRfuLinkStatus->my.serialNo = packet_p[4];
+ gRfuLinkStatus->my.serialNo = (packet_p[5] << 8) | serialNo;
+ gname_uname_p = &packet_p[6];
if (gRfuLinkStatus->my.serialNo & 0x8000)
{
gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000;
@@ -433,47 +490,54 @@ static void rfu_CB_configGameData(u8 ip, u16 r7)
gRfuLinkStatus->my.mbootFlag = 0;
}
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
- gRfuLinkStatus->my.gname[i] = *r4++;
- ++r4;
+ gRfuLinkStatus->my.gname[i] = *gname_uname_p++;
+ ++gname_uname_p;
for (i = 0; i < RFU_USER_NAME_LENGTH; ++i)
- gRfuLinkStatus->my.uname[i] = *r4++;
+ gRfuLinkStatus->my.uname[i] = *gname_uname_p++;
}
- rfu_STC_REQ_callback(ip, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_startSearchChild(void)
{
- u16 r1;
-
+ u16 result;
+#if LIBRFU_VERSION >= 1028
+ u16 i;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ gRfuStatic->lsFixedCount[i] = 0;
+ }
+#endif
+
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
- r1 = STWI_poll_CommandEnd();
- if (r1 == 0)
+ result = STWI_poll_CommandEnd();
+ if (result == 0)
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
- rfu_STC_clearLinkStatus(1);
+ rfu_STC_clearLinkStatus(MODE_PARENT);
}
else
{
- rfu_STC_REQ_callback(25, r1);
+ rfu_STC_REQ_callback(ID_SC_START_REQ, result);
}
STWI_set_Callback_M(rfu_CB_startSearchChild);
STWI_send_SC_StartREQ();
}
-static void rfu_CB_startSearchChild(u8 r3, u16 reqResult)
+static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
gRfuStatic->SCStartFlag = 1;
- rfu_STC_REQ_callback(r3, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
-static void rfu_STC_clearLinkStatus(u8 r4)
+static void rfu_STC_clearLinkStatus(u8 parentChild)
{
u8 i;
-
+
rfu_clearAllSlot();
- if (r4 != 0)
+ if (parentChild != MODE_CHILD)
{
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0;
@@ -498,11 +562,11 @@ void rfu_REQ_endSearchChild(void)
STWI_send_SC_EndREQ();
}
-static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
+static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_readChildList();
- if (r4 == 26)
+ if (reqCommand == ID_SC_POLL_REQ)
{
if (gRfuLinkStatus->my.id == 0)
{
@@ -512,60 +576,65 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult)
gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
}
}
- else if (r4 == 27)
+ else if (reqCommand == ID_SC_END_REQ)
{
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
gRfuLinkStatus->my.id = 0;
gRfuStatic->SCStartFlag = 0;
}
- rfu_STC_REQ_callback(r4, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
static void rfu_STC_readChildList(void)
{
- u32 r5;
- u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1];
- u8 *r4;
+ u32 stwiParam;
+ u8 numSlots = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1];
+ u8 *data_p;
u8 i;
- u8 sp[4];
- u8 r2;
+ u8 true_slots[RFU_CHILD_MAX];
+ u8 bm_slot_id;
+
+#if LIBRFU_VERSION >= 1028
+//#if 1
+ // TODO: decompile this
+#endif
- if (r8 != 0)
+ if (numSlots != 0)
{
- r5 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
+ stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_LinkStatusREQ();
if (STWI_poll_CommandEnd() == 0)
{
- r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
- for (i = 0; i < NELEMS(sp); ++i)
- sp[i] = *r4++;
+ data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ true_slots[i] = *data_p++;
}
- gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = r5;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam;
}
- for (r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
- r8 != 0;
- r4 += 4)
+ for (data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ numSlots != 0;
+ data_p += 4)
{
- r2 = r4[2];
- if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1))
+ bm_slot_id = data_p[2];
+ if (bm_slot_id < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> bm_slot_id) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> bm_slot_id) & 1))
{
- if (sp[r2] != 0)
- ++gRfuStatic->lsFixedCount[r2];
- if (gRfuStatic->lsFixedCount[r2] >= 4)
+ if (true_slots[bm_slot_id] != 0)
+ ++gRfuStatic->lsFixedCount[bm_slot_id];
+ if (gRfuStatic->lsFixedCount[bm_slot_id] >= 4)
{
- gRfuStatic->lsFixedCount[r2] = 0;
- gRfuLinkStatus->strength[r2] = 0xFF;
- gRfuLinkStatus->connSlotFlag |= 1 << r2;
+ gRfuStatic->lsFixedCount[bm_slot_id] = 0;
+ gRfuLinkStatus->strength[bm_slot_id] = 255;
+ gRfuLinkStatus->connSlotFlag |= 1 << bm_slot_id;
++gRfuLinkStatus->connCount;
- gRfuLinkStatus->partner[r2].id = *(u16 *)r4;
- gRfuLinkStatus->partner[r2].slot = r2;
+ gRfuLinkStatus->partner[bm_slot_id].id = *(u16 *)data_p;
+ gRfuLinkStatus->partner[bm_slot_id].slot = bm_slot_id;
gRfuLinkStatus->parentChild = MODE_PARENT;
gRfuStatic->flags &= 0x7F;
- gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id;
+ gRfuStatic->cidBak[bm_slot_id] = gRfuLinkStatus->partner[bm_slot_id].id;
}
}
- --r8;
+ --numSlots;
}
}
@@ -575,11 +644,11 @@ void rfu_REQ_startSearchParent(void)
STWI_send_SP_StartREQ();
}
-static void rfu_CB_startSearchParent(u8 r5, u16 reqResult)
+static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
- rfu_STC_clearLinkStatus(0);
- rfu_STC_REQ_callback(r5, reqResult);
+ rfu_STC_clearLinkStatus(MODE_CHILD);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_pollSearchParent(void)
@@ -588,11 +657,11 @@ void rfu_REQ_pollSearchParent(void)
STWI_send_SP_PollingREQ();
}
-static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult)
+static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult)
{
if (reqResult == 0)
rfu_STC_readParentCandidateList();
- rfu_STC_REQ_callback(r5, reqResult);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
void rfu_REQ_endSearchParent(void)
@@ -603,47 +672,47 @@ void rfu_REQ_endSearchParent(void)
static void rfu_STC_readParentCandidateList(void)
{
- u8 r7, r6, r5, r4, r3;
- u8 *r1, *r2;
- struct RfuTgtData *r4_;
+ u8 numSlots, i, check_sum, my_check_sum, j;
+ u8 *uname_p, *packet_p;
+ struct RfuTgtData *target;
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
- r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0];
- r7 = r2[1];
- r2 += 4;
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0];
+ numSlots = packet_p[1];
+ packet_p += 4;
gRfuLinkStatus->findParentCount = 0;
- for (r6 = 0; r6 < 4 && r7 != 0; ++r6)
- {
- r7 -= 7;
- r1 = r2 + 6;
- r2 += 19;
- r5 = ~*r2;
- ++r2;
- r4 = 0;
- for (r3 = 0; r3 < 8; ++r3)
+ for (i = 0; i < RFU_CHILD_MAX && numSlots != 0; ++i)
+ {
+ numSlots -= 7;
+ uname_p = packet_p + 6;
+ packet_p += 19;
+ check_sum = ~*packet_p;
+ ++packet_p;
+ my_check_sum = 0;
+ for (j = 0; j < 8; ++j)
{
- r4 += *r2++;
- r4 += *r1++;
+ my_check_sum += *packet_p++;
+ my_check_sum += *uname_p++;
}
- if (r4 == r5)
+ if (my_check_sum == check_sum)
{
- r2 -= 28;
- r4_ = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount];
- r4_->id = *(u16 *)r2;
- r2 += 2;
- r4_->slot = *r2;
- r2 += 2;
- r4_->serialNo = *(u16 *)r2 & 0x7FFF;
- if (*(u16 *)r2 & 0x8000)
- r4_->mbootFlag = 1;
+ packet_p -= 28;
+ target = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount];
+ target->id = *(u16 *)packet_p;
+ packet_p += 2;
+ target->slot = *packet_p;
+ packet_p += 2;
+ target->serialNo = *(u16 *)packet_p & 0x7FFF;
+ if (*(u16 *)packet_p & 0x8000)
+ target->mbootFlag = 1;
else
- r4_->mbootFlag = 0;
- r2 += 2;
- for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3)
- r4_->gname[r3] = *r2++;
- ++r2;
- for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3)
- r4_->uname[r3] = *r2++;
+ target->mbootFlag = 0;
+ packet_p += 2;
+ for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j)
+ target->gname[j] = *packet_p++;
+ ++packet_p;
+ for (j = 0; j < RFU_USER_NAME_LENGTH; ++j)
+ target->uname[j] = *packet_p++;
++gRfuLinkStatus->findParentCount;
}
}
@@ -651,13 +720,13 @@ static void rfu_STC_readParentCandidateList(void)
void rfu_REQ_startConnectParent(u16 pid)
{
- u16 r3 = 0;
+ u16 result = 0;
u8 i;
for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i)
;
- if (i == 4)
- r3 = 256;
- if (r3 == 0)
+ if (i == RFU_CHILD_MAX)
+ result = ERR_PID_NOT_FOUND;
+ if (result == 0)
{
gRfuStatic->tryPid = pid;
STWI_set_Callback_M(rfu_STC_REQ_callback);
@@ -665,7 +734,7 @@ void rfu_REQ_startConnectParent(u16 pid)
}
else
{
- rfu_STC_REQ_callback(31, r3);
+ rfu_STC_REQ_callback(ID_CP_START_REQ, result);
}
}
@@ -675,70 +744,69 @@ void rfu_REQ_pollConnectParent(void)
STWI_send_CP_PollingREQ();
}
-static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28)
+static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult)
{
u16 id;
u8 slot;
- u8 r2, r5;
- struct RfuTgtData *r9;
- struct RfuTgtData sp;
+ u8 bm_slot_flag, i;
+ struct RfuTgtData *target_p;
+ struct RfuTgtData target_local;
- if (sp28 == 0)
+ if (reqResult == 0)
{
id = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
slot = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6];
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
- r2 = 1 << slot;
- if (!(r2 & gRfuLinkStatus->connSlotFlag))
+ bm_slot_flag = 1 << slot;
+ if (!(bm_slot_flag & gRfuLinkStatus->connSlotFlag))
{
- gRfuLinkStatus->connSlotFlag |= r2;
- gRfuLinkStatus->linkLossSlotFlag &= ~r2;
+ gRfuLinkStatus->connSlotFlag |= bm_slot_flag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag;
gRfuLinkStatus->my.id = id;
++gRfuLinkStatus->connCount;
gRfuLinkStatus->parentChild = MODE_CHILD;
gRfuStatic->flags |= 0x80;
- for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid)
+ if (gRfuLinkStatus->partner[i].id == gRfuStatic->tryPid)
{
if (gRfuLinkStatus->findParentCount != 0)
{
- r9 = &sp;
- CpuCopy16(&gRfuLinkStatus->partner[r5], &sp, sizeof(struct RfuTgtData));
+ target_p = &target_local;
+ CpuCopy16(&gRfuLinkStatus->partner[i], &target_local, sizeof(struct RfuTgtData));
CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner));
gRfuLinkStatus->findParentCount = 0;
}
else
{
- r9 = &gRfuLinkStatus->partner[r5];
+ target_p = &gRfuLinkStatus->partner[i];
}
break;
}
}
- if (r5 < RFU_CHILD_MAX)
+ if (i < RFU_CHILD_MAX)
{
- CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData));
+ CpuCopy16(target_p, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData));
gRfuLinkStatus->partner[slot].slot = slot;
}
}
}
}
- rfu_STC_REQ_callback(sp24, sp28);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo)
{
- u8 r0, *r2;
+ u8 *packet_p;
*status = 0xFF;
- r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
- r0 = r2[0] + 96;
- if (r0 <= 1)
+ packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+ if (packet_p[0] == 0xa0 || packet_p[0] == 0xa1)
{
- r2 += 6;
- *connectSlotNo = r2[0];
- *status = r2[1];
+ packet_p += 6;
+ *connectSlotNo = packet_p[0];
+ *status = packet_p[1];
return 0;
}
return ERR_REQ_CMD_ID;
@@ -754,28 +822,28 @@ void rfu_REQ_endConnectParent(void)
u16 rfu_syncVBlank(void)
{
- u8 r3, r4;
- s32 r5;
+ u8 masterSlave, i;
+ s32 bmSlotFlag;
rfu_NI_checkCommFailCounter();
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
return 0;
if (gRfuStatic->nowWatchInterval != 0)
--gRfuStatic->nowWatchInterval;
- r3 = rfu_getMasterSlave();
+ masterSlave = rfu_getMasterSlave();
if (!(gRfuStatic->flags & 2))
{
- if (r3 == 0)
+ if (masterSlave == AGB_CLK_SLAVE)
{
gRfuStatic->flags |= 4;
gRfuStatic->watchdogTimer = 360;
}
}
- else if (r3 != 0)
+ else if (masterSlave != AGB_CLK_SLAVE)
{
gRfuStatic->flags &= 0xFB;
}
- if (r3 != 0)
+ if (masterSlave != AGB_CLK_SLAVE)
gRfuStatic->flags &= 0xFD;
else
gRfuStatic->flags |= 2;
@@ -784,10 +852,10 @@ u16 rfu_syncVBlank(void)
if (gRfuStatic->watchdogTimer == 0)
{
gRfuStatic->flags &= 0xFB;
- r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
- if ((r5 >> r4) & 1)
- rfu_STC_removeLinkData(r4, 1);
+ bmSlotFlag = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if ((bmSlotFlag >> i) & 1)
+ rfu_STC_removeLinkData(i, 1);
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
return 1;
}
@@ -797,13 +865,13 @@ u16 rfu_syncVBlank(void)
u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot)
{
- u8 sp08 = 0;
- u8 sp0C = 0;
+ u8 reasonMaybe = 0;
+ u8 reqResult = 0;
u8 i;
- s32 sp10, sp14;
- u8 *r2;
- u8 r9, r6, r3, connSlotFlag, r0;
-
+ s32 stwiCommand, stwiParam;
+ u8 *packet_p;
+ u8 to_req_disconnect, newLinkLossFlag, num_packets, connSlotFlag, to_disconnect;
+
*bmLinkLossSlot = 0;
*linkLossReason = REASON_DISCONNECTED;
*parentBmLinkRecoverySlot = 0;
@@ -814,25 +882,25 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
if (gRfuStatic->nowWatchInterval == 0)
{
gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval;
- sp08 = 1;
+ reasonMaybe = 1;
}
- if ((u8)reqCommandId == 41)
+ if ((u8)reqCommandId == ID_DISCONNECTED_AND_CHANGE_REQ)
{
- u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
-
- *bmLinkLossSlot = r1[4];
- *linkLossReason = r1[5];
+ u8 *packet_p_2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+
+ *bmLinkLossSlot = packet_p_2[4];
+ *linkLossReason = packet_p_2[5];
if (*linkLossReason == REASON_LINK_LOSS)
*bmLinkLossSlot = gRfuLinkStatus->connSlotFlag;
- sp08 = 2;
+ reasonMaybe = 2;
}
else
{
- if (reqCommandId == 310)
+ if (reqCommandId == 0x0136)
{
- r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
- r6 ^= gRfuLinkStatus->connSlotFlag;
- *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag;
+ newLinkLossFlag = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5];
+ newLinkLossFlag ^= gRfuLinkStatus->connSlotFlag;
+ *bmLinkLossSlot = newLinkLossFlag & gRfuLinkStatus->connSlotFlag;
*linkLossReason = REASON_LINK_LOSS;
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
@@ -843,33 +911,33 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
}
}
- if (sp08 == 0)
+ if (reasonMaybe == 0)
return 0;
}
- sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
- sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
+ stwiCommand = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command;
+ stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0];
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_LinkStatusREQ();
- sp0C = STWI_poll_CommandEnd();
- if (sp0C == 0)
+ reqResult = STWI_poll_CommandEnd();
+ if (reqResult == 0)
{
- r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
for (i = 0; i < RFU_CHILD_MAX; ++i)
- gRfuLinkStatus->strength[i] = *r2++;
- r9 = 0;
+ gRfuLinkStatus->strength[i] = *packet_p++;
+ to_req_disconnect = 0;
i = 0;
}
else
{
- rfu_STC_REQ_callback(17, sp0C);
- return sp0C;
+ rfu_STC_REQ_callback(ID_LINK_STATUS_REQ, reqResult);
+ return reqResult;
}
for (; i < RFU_CHILD_MAX; ++i)
{
- r6 = 1 << i;
- if (sp0C == 0)
+ newLinkLossFlag = 1 << i;
+ if (reqResult == 0)
{
- if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6))
+ if (reasonMaybe == 1 && (gRfuLinkStatus->connSlotFlag & newLinkLossFlag))
{
if (gRfuLinkStatus->strength[i] == 0)
{
@@ -878,8 +946,8 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
++gRfuStatic->linkEmergencyFlag[i];
if (gRfuStatic->linkEmergencyFlag[i] > 3)
{
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
}
else
@@ -889,18 +957,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
{
if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
{
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
else
{
- if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a)
+ if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->linkEmergencyLimit)
{
gRfuStatic->linkEmergencyFlag[i] = 0;
STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag);
STWI_poll_CommandEnd();
- *bmLinkLossSlot |= r6;
- *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS?
+ *bmLinkLossSlot |= newLinkLossFlag;
+ *linkLossReason = REASON_LINK_LOSS;
}
}
}
@@ -908,18 +976,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
else
{
- gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0?
+ gRfuStatic->linkEmergencyFlag[i] = 0;
}
}
if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0)
{
- if (r6 & gRfuLinkStatus->linkLossSlotFlag)
+ if (newLinkLossFlag & gRfuLinkStatus->linkLossSlotFlag)
{
if (gRfuLinkStatus->strength[i] > 10)
{
- *parentBmLinkRecoverySlot |= r6;
- gRfuLinkStatus->connSlotFlag |= r6;
- gRfuLinkStatus->linkLossSlotFlag &= ~r6;
+ *parentBmLinkRecoverySlot |= newLinkLossFlag;
+ gRfuLinkStatus->connSlotFlag |= newLinkLossFlag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~newLinkLossFlag;
++gRfuLinkStatus->connCount;
gRfuStatic->linkEmergencyFlag[i] = 0;
}
@@ -930,19 +998,19 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
else
{
- if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6))
+ if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & newLinkLossFlag))
{
STWI_send_SlotStatusREQ();
STWI_poll_CommandEnd();
- r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
- r3 = r2[1] - 1;
- for (r2 += 8; r3 != 0; r2 += 4, --r3)
+ packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data;
+ num_packets = packet_p[1] - 1;
+ for (packet_p += 8; num_packets != 0; packet_p += 4, --num_packets)
{
- u16 r4 = *(u16 *)r2;
+ u16 cid = *(u16 *)packet_p;
- if (r2[2] == i && r4 == gRfuStatic->cidBak[i])
+ if (packet_p[2] == i && cid == gRfuStatic->cidBak[i])
{
- r9 |= 1 << i;
+ to_req_disconnect |= 1 << i;
break;
}
}
@@ -951,46 +1019,46 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason
}
}
connSlotFlag = gRfuLinkStatus->connSlotFlag;
- r0 = *bmLinkLossSlot;
- r0 &= connSlotFlag;
- if (r6 & r0)
+ to_disconnect = *bmLinkLossSlot;
+ to_disconnect &= connSlotFlag;
+ if (newLinkLossFlag & to_disconnect)
rfu_STC_removeLinkData(i, 0);
}
- if (r9 != 0)
+ if (to_req_disconnect != 0)
{
- STWI_send_DisconnectREQ(r9);
+ STWI_send_DisconnectREQ(to_req_disconnect);
STWI_poll_CommandEnd();
}
// equivalent to:
- // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10;
- *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10;
- gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14;
+ // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = stwiCommand;
+ *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = stwiCommand;
+ gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam;
return 0;
}
-static void rfu_STC_removeLinkData(u8 r7, u8 r12)
+static void rfu_STC_removeLinkData(u8 bmConnectedPartnerId, u8 bmDisconnect)
{
- u8 r5 = 1 << r7;
- s32 r6;
+ u8 bmLinkLossFlag = 1 << bmConnectedPartnerId;
+ s32 bmLinkRetainedFlag;
- if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0)
+ if ((gRfuLinkStatus->connSlotFlag & bmLinkLossFlag) && gRfuLinkStatus->connCount != 0)
--gRfuLinkStatus->connCount;
- gRfuLinkStatus->connSlotFlag &= r6 = ~r5;
- gRfuLinkStatus->linkLossSlotFlag |= r5;
- if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0)
+ gRfuLinkStatus->connSlotFlag &= bmLinkRetainedFlag = ~bmLinkLossFlag;
+ gRfuLinkStatus->linkLossSlotFlag |= bmLinkLossFlag;
+ if (gRfuLinkStatus->parentChild == MODE_CHILD && gRfuLinkStatus->connSlotFlag == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
- if (r12 != 0)
+ if (bmDisconnect)
{
- CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData));
- gRfuLinkStatus->linkLossSlotFlag &= r6;
- gRfuLinkStatus->getNameFlag &= r6;
- gRfuLinkStatus->strength[r7] = 0;
+ CpuFill16(0, &gRfuLinkStatus->partner[bmConnectedPartnerId], sizeof(struct RfuTgtData));
+ gRfuLinkStatus->linkLossSlotFlag &= bmLinkRetainedFlag;
+ gRfuLinkStatus->getNameFlag &= bmLinkRetainedFlag;
+ gRfuLinkStatus->strength[bmConnectedPartnerId] = 0;
}
}
void rfu_REQ_disconnect(u8 bmDisconnectSlot)
{
- u16 r1;
+ u16 result;
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot)
{
@@ -1003,9 +1071,9 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
else if (gRfuStatic->SCStartFlag
&& (STWI_set_Callback_M(rfu_CB_defaultCallback),
STWI_send_SC_EndREQ(),
- (r1 = STWI_poll_CommandEnd()) != 0))
+ (result = STWI_poll_CommandEnd()) != 0))
{
- rfu_STC_REQ_callback(27, r1);
+ rfu_STC_REQ_callback(ID_SC_END_REQ, result);
}
else
{
@@ -1015,38 +1083,38 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot)
}
}
-static void rfu_CB_disconnect(u8 r6, u16 r5)
+static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult)
{
- u8 r4, r0;
+ u8 i, bm_slot_flag;
- if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
+ if (reqResult == 3 && gRfuLinkStatus->parentChild == MODE_CHILD)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SystemStatusREQ();
if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0)
- r5 = 0;
+ reqResult = 0;
}
gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot;
- if (r5 == 0)
+ if (reqResult == 0)
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r0 = 1 << r4;
- if (r0 & gRfuStatic->recoveryBmSlot)
- rfu_STC_removeLinkData(r4, 1);
+ bm_slot_flag = 1 << i;
+ if (bm_slot_flag & gRfuStatic->recoveryBmSlot)
+ rfu_STC_removeLinkData(i, 1);
}
}
if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0)
gRfuLinkStatus->parentChild = MODE_NEUTRAL;
- rfu_STC_REQ_callback(r6, r5);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
if (gRfuStatic->SCStartFlag)
{
STWI_set_Callback_M(rfu_CB_defaultCallback);
STWI_send_SC_StartREQ();
- r5 = STWI_poll_CommandEnd();
- if (r5 != 0)
- rfu_STC_REQ_callback(25, r5);
+ reqResult = STWI_poll_CommandEnd();
+ if (reqResult != 0)
+ rfu_STC_REQ_callback(ID_SC_START_REQ, reqResult);
}
}
@@ -1068,38 +1136,35 @@ void rfu_REQ_CHILD_pollConnectRecovery(void)
STWI_send_CPR_PollingREQ();
}
-static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7)
+static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult)
{
- u8 r3, r4;
- struct RfuLinkStatus *r2;
+ u8 bm_slot_flag, i;
+ struct RfuLinkStatus *rfuLinkStatus;
- if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
+ if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot)
{
gRfuLinkStatus->parentChild = MODE_CHILD;
- for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r3 = 1 << r4;
- r2 = gRfuLinkStatus; // ???
- if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag)
+ bm_slot_flag = 1 << i;
+ rfuLinkStatus = gRfuLinkStatus; // ???
+ if (gRfuStatic->recoveryBmSlot & bm_slot_flag & rfuLinkStatus->linkLossSlotFlag)
{
- gRfuLinkStatus->connSlotFlag |= r3;
- gRfuLinkStatus->linkLossSlotFlag &= ~r3;
+ gRfuLinkStatus->connSlotFlag |= bm_slot_flag;
+ gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag;
++gRfuLinkStatus->connCount;
- gRfuStatic->linkEmergencyFlag[r4] = 0;
+ gRfuStatic->linkEmergencyFlag[i] = 0;
}
}
gRfuStatic->recoveryBmSlot = 0;
}
- rfu_STC_REQ_callback(r8, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status)
{
- u8 r0;
-
*status = 0xFF;
- r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77;
- if (r0 <= 1)
+ if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB3 || gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB4)
{
*status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4];
return 0;
@@ -1127,14 +1192,14 @@ static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size)
void rfu_REQ_changeMasterSlave(void)
{
- if (STWI_read_status(1) == 1)
+ if (STWI_read_status(1) == AGB_CLK_MASTER)
{
STWI_set_Callback_M(rfu_STC_REQ_callback);
STWI_send_MS_ChangeREQ();
}
else
{
- rfu_STC_REQ_callback(39, 0);
+ rfu_STC_REQ_callback(ID_MS_CHANGE_REQ, 0);
}
}
@@ -1144,11 +1209,11 @@ bool8 rfu_getMasterSlave(void)
if (masterSlave == AGB_CLK_MASTER)
{
- if (gSTWIStatus->unk_2c)
+ if (gSTWIStatus->sending)
{
- if (gSTWIStatus->reqActiveCommand == 39
- || gSTWIStatus->reqActiveCommand == 37
- || gSTWIStatus->reqActiveCommand == 55)
+ if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ
+ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
masterSlave = AGB_CLK_SLAVE;
}
}
@@ -1159,7 +1224,7 @@ void rfu_clearAllSlot(void)
{
u16 i;
u16 IMEBackup = REG_IME;
-
+
REG_IME = 0;
for (i = 0; i < RFU_CHILD_MAX; ++i)
{
@@ -1175,87 +1240,87 @@ void rfu_clearAllSlot(void)
REG_IME = IMEBackup;
}
-static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4)
+static void rfu_STC_releaseFrame(u8 bm_slot_id, u8 send_recv, struct NIComm *NI_comm)
{
if (!(gRfuStatic->flags & 0x80))
{
- if (r3 == 0)
- gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize;
+ if (send_recv == 0)
+ gRfuLinkStatus->remainLLFrameSizeParent += NI_comm->payloadSize;
gRfuLinkStatus->remainLLFrameSizeParent += 3;
}
else
{
- if (r3 == 0)
- gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize;
- gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2;
+ if (send_recv == 0)
+ gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += NI_comm->payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += 2;
}
}
u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex)
{
- u16 r10, r3, r1;
- struct NIComm *r4;
+ u16 imeBak, send_recv, i;
+ struct NIComm *NI_comm;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV)))
return ERR_COMM_TYPE;
- r10 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV))
{
- for (r3 = 0; r3 < 2; ++r3)
+ for (send_recv = 0; send_recv < 2; ++send_recv)
{
- r4 = NULL;
- if (r3 == 0)
+ NI_comm = NULL;
+ if (send_recv == 0)
{
if (connTypeFlag & TYPE_NI_SEND)
{
- r4 = &gRfuSlotStatusNI[slotStatusIndex]->send;
- gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg;
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->send;
+ gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlotOrg;
}
}
else
{
if (connTypeFlag & TYPE_NI_RECV)
{
- r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
}
}
- if (r4 != NULL)
+ if (NI_comm != NULL)
{
- if (r4->state & SLOT_BUSY_FLAG)
+ if (NI_comm->state & SLOT_BUSY_FLAG)
{
- rfu_STC_releaseFrame(slotStatusIndex, r3, r4);
- for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1)
- if ((r4->bmSlotOrg >> r1) & 1)
- r4->failCounter = 0;
+ rfu_STC_releaseFrame(slotStatusIndex, send_recv, NI_comm);
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if ((NI_comm->bmSlotOrg >> i) & 1)
+ NI_comm->failCounter = 0;
}
- CpuFill16(0, r4, sizeof(struct NIComm));
+ CpuFill16(0, NI_comm, sizeof(struct NIComm));
}
}
}
if (connTypeFlag & TYPE_UNI_SEND)
{
- struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex];
+ struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[slotStatusIndex];
- if (r3->send.state & SLOT_BUSY_FLAG)
+ if (slotStatusUNI->send.state & SLOT_BUSY_FLAG)
{
if (!(gRfuStatic->flags & 0x80))
- gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize;
+ gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)slotStatusUNI->send.payloadSize;
else
- gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize;
- gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot;
+ gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)slotStatusUNI->send.payloadSize;
+ gRfuLinkStatus->sendSlotUNIFlag &= ~slotStatusUNI->send.bmSlot;
}
- CpuFill16(0, &r3->send, sizeof(struct UNISend));
+ CpuFill16(0, &slotStatusUNI->send, sizeof(struct UNISend));
}
if (connTypeFlag & TYPE_UNI_RECV)
{
CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv));
}
- REG_IME = r10;
+ REG_IME = imeBak;
return 0;
}
@@ -1301,16 +1366,16 @@ u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize)
return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26);
}
-static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28)
+static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 dataSize)
{
- u8 r2, r0;
- u8 r4;
- u8 *r9;
- u8 r5;
+ u8 bm_slot_id, sendSlotFlag;
+ u8 frameSize;
+ u8 *llFrameSize_p;
+ u8 sending;
u8 i;
- u16 sp04;
- struct RfuSlotStatusUNI *r1;
- struct RfuSlotStatusNI *r12;
+ u16 imeBak;
+ struct RfuSlotStatusUNI *slotStatus_UNI;
+ struct RfuSlotStatusNI *slotStatus_NI;
if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
return ERR_MODE_NOT_CONNECTED;
@@ -1318,108 +1383,108 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const
return ERR_SLOT_NO;
if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot)
return ERR_SLOT_NOT_CONNECTED;
- if (r6 & 0x10)
- r0 = gRfuLinkStatus->sendSlotUNIFlag;
+ if (ni_or_uni & 0x10)
+ sendSlotFlag = gRfuLinkStatus->sendSlotUNIFlag;
else
- r0 = gRfuLinkStatus->sendSlotNIFlag;
- if (r0 & bmSendSlot)
+ sendSlotFlag = gRfuLinkStatus->sendSlotNIFlag;
+ if (sendSlotFlag & bmSendSlot)
return ERR_SLOT_BUSY;
- for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2)
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX && !((bmSendSlot >> bm_slot_id) & 1); ++bm_slot_id)
;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- r9 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent;
else if (gRfuLinkStatus->parentChild == MODE_CHILD)
- r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2];
- r4 = llsf_struct[gRfuLinkStatus->parentChild].unk00;
- if (subFrameSize > *r9 || subFrameSize <= r4)
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id];
+ frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize;
+ if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize)
return ERR_SUBFRAME_SIZE;
- sp04 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r5 = r6 & 0x20;
- if (r5 || r6 == 0x40)
- {
- u8 *r1; // a hack to swap instructions
-
- r12 = gRfuSlotStatusNI[r2];
- r1 = NULL;
- r12->send.errorCode = 0;
- *r12->send.now_p = r1 = &r12->send.dataType;
- r12->send.remainSize = 7;
- r12->send.bmSlotOrg = bmSendSlot;
- r12->send.bmSlot = bmSendSlot;
- r12->send.payloadSize = subFrameSize - r4;
- if (r5 != 0)
- *r1 = 0;
+ sending = ni_or_uni & 0x20;
+ if (sending || ni_or_uni == 0x40)
+ {
+ u8 *dataType_p; // a hack to swap instructions
+
+ slotStatus_NI = gRfuSlotStatusNI[bm_slot_id];
+ slotStatus_UNI = NULL;
+ slotStatus_NI->send.errorCode = 0;
+ *slotStatus_NI->send.now_p = dataType_p = &slotStatus_NI->send.dataType;
+ slotStatus_NI->send.remainSize = 7;
+ slotStatus_NI->send.bmSlotOrg = bmSendSlot;
+ slotStatus_NI->send.bmSlot = bmSendSlot;
+ slotStatus_NI->send.payloadSize = subFrameSize - frameSize;
+ if (sending != 0)
+ *dataType_p = 0;
else
- *r1 = 1;
- r12->send.dataSize = sp28;
- r12->send.src = src;
- r12->send.ack = 0;
- r12->send.phase = 0;
- #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette
+ *dataType_p = 1;
+ slotStatus_NI->send.dataSize = dataSize;
+ slotStatus_NI->send.src = src;
+ slotStatus_NI->send.ack = 0;
+ slotStatus_NI->send.phase = 0;
+ #ifndef NONMATCHING // to fix bm_slot_id, r3, frameSize, sending register roulette
asm("":::"r2");
#endif
for (i = 0; i < WINDOW_COUNT; ++i)
{
- r12->send.recvAckFlag[i] = 0;
- r12->send.n[i] = 1;
+ slotStatus_NI->send.recvAckFlag[i] = 0;
+ slotStatus_NI->send.n[i] = 1;
}
- for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
- if ((bmSendSlot >> r2) & 1)
- gRfuSlotStatusNI[r2]->send.failCounter = 0;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
+ if ((bmSendSlot >> bm_slot_id) & 1)
+ gRfuSlotStatusNI[bm_slot_id]->send.failCounter = 0;
gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot;
- *r9 -= subFrameSize;
- r12->send.state = SLOT_STATE_SEND_START;
+ *llFrameSize_p -= subFrameSize;
+ slotStatus_NI->send.state = SLOT_STATE_SEND_START;
}
- else if (r6 & 0x10)
+ else if (ni_or_uni & 0x10)
{
- r1 = gRfuSlotStatusUNI[r2];
- r1->send.bmSlot = bmSendSlot;
- r1->send.src = src;
- r1->send.payloadSize = subFrameSize - r4;
- *r9 -= subFrameSize;
- r1->send.state = SLOT_STATE_SEND_UNI;
+ slotStatus_UNI = gRfuSlotStatusUNI[bm_slot_id];
+ slotStatus_UNI->send.bmSlot = bmSendSlot;
+ slotStatus_UNI->send.src = src;
+ slotStatus_UNI->send.payloadSize = subFrameSize - frameSize;
+ *llFrameSize_p -= subFrameSize;
+ slotStatus_UNI->send.state = SLOT_STATE_SEND_UNI;
gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot;
}
- REG_IME = sp04;
+ REG_IME = imeBak;
return 0;
}
u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
- struct RfuSlotStatusNI *r5;
- u16 r8;
- u8 r2;
+ struct RfuSlotStatusNI *slotStatusNI;
+ u16 imeBak;
+ u8 i;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
if (connType == 0x20)
{
- r5 = gRfuSlotStatusNI[slotStatusIndex];
- if ((r5->send.state & SLOT_BUSY_FLAG)
- && (r5->send.state & SLOT_SEND_FLAG))
+ slotStatusNI = gRfuSlotStatusNI[slotStatusIndex];
+ if ((slotStatusNI->send.state & SLOT_BUSY_FLAG)
+ && (slotStatusNI->send.state & SLOT_SEND_FLAG))
{
- connType = bmNewTgtSlot ^ r5->send.bmSlot;
-
+ connType = bmNewTgtSlot ^ slotStatusNI->send.bmSlot;
+
if (!(connType & bmNewTgtSlot))
{
if (connType)
{
- r8 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if ((connType >> r2) & 1)
- gRfuSlotStatusNI[r2]->send.failCounter = 0;
+ if ((connType >> i) & 1)
+ gRfuSlotStatusNI[i]->send.failCounter = 0;
}
gRfuLinkStatus->sendSlotNIFlag &= ~connType;
- r5->send.bmSlot = bmNewTgtSlot;
- if (r5->send.bmSlot == 0)
+ slotStatusNI->send.bmSlot = bmNewTgtSlot;
+ if (slotStatusNI->send.bmSlot == 0)
{
- rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send);
- r5->send.state = SLOT_STATE_SEND_FAILED;
+ rfu_STC_releaseFrame(slotStatusIndex, 0, &slotStatusNI->send);
+ slotStatusNI->send.state = SLOT_STATE_SEND_FAILED;
}
- REG_IME = r8;
+ REG_IME = imeBak;
}
}
else
@@ -1436,21 +1501,21 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
{
if (connType == 16)
{
- s32 r3;
+ s32 bmSlot;
if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI)
return ERR_SLOT_NOT_SENDING;
- for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2)
- if (r2 != slotStatusIndex)
- r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot;
- if (bmNewTgtSlot & r3)
+ for (bmSlot = 0, i = 0; i < RFU_CHILD_MAX; ++i)
+ if (i != slotStatusIndex)
+ bmSlot |= gRfuSlotStatusUNI[i]->send.bmSlot;
+ if (bmNewTgtSlot & bmSlot)
return ERR_SLOT_TARGET;
- r8 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot;
gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot;
gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot;
- REG_IME = r8;
+ REG_IME = imeBak;
}
else
{
@@ -1462,14 +1527,14 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot)
u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
{
- struct NIComm *r5;
- u16 r4, r1;
+ struct NIComm *NI_comm;
+ u16 imeBak;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
- r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv;
- r4 = REG_IME;
- ++r4; --r4; // fix r4, r5 register swap
+ NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv;
+ imeBak = REG_IME;
+ ++imeBak; --imeBak; // fix imeBak, NI_comm register swap
REG_IME = 0;
if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG)
{
@@ -1478,43 +1543,43 @@ u16 rfu_NI_stopReceivingData(u8 slotStatusIndex)
else
gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED;
gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex);
- rfu_STC_releaseFrame(slotStatusIndex, 1, r5);
+ rfu_STC_releaseFrame(slotStatusIndex, 1, NI_comm);
}
- REG_IME = r4;
+ REG_IME = imeBak;
return 0;
}
u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size)
{
- struct UNISend *r4;
- u8 *r6;
- u16 r1;
- u8 r3_;
+ struct UNISend *UNI_send;
+ u8 *frame_p;
+ u16 imeBak;
+ u8 frameEnd;
if (slotStatusIndex >= RFU_CHILD_MAX)
return ERR_SLOT_NO;
- r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send;
- if (r4->state != SLOT_STATE_SEND_UNI)
+ UNI_send = &gRfuSlotStatusUNI[slotStatusIndex]->send;
+ if (UNI_send->state != SLOT_STATE_SEND_UNI)
return ERR_SLOT_NOT_SENDING;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- r6 = &gRfuLinkStatus->remainLLFrameSizeParent;
- r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize;
+ frame_p = &gRfuLinkStatus->remainLLFrameSizeParent;
+ frameEnd = gRfuLinkStatus->remainLLFrameSizeParent + (u8)UNI_send->payloadSize;
}
else
{
- r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex];
- r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize;
+ frame_p = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex];
+ frameEnd = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)UNI_send->payloadSize;
}
- if (r3_ < size)
+ if (frameEnd < size)
return ERR_SUBFRAME_SIZE;
- r1 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r4->src = src;
- *r6 = r3_ - size;
- r4->payloadSize = size;
- r4->dataReadyFlag = 1;
- REG_IME = r1;
+ UNI_send->src = src;
+ *frame_p = frameEnd - size;
+ UNI_send->payloadSize = size;
+ UNI_send->dataReadyFlag = 1;
+ REG_IME = imeBak;
return 0;
}
@@ -1593,184 +1658,184 @@ void rfu_REQ_sendData(bool8 clockChangeFlag)
}
}
-static void rfu_CB_sendData(UNUSED u8 r0, u16 r7)
+static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult)
{
- u8 r6;
- struct NIComm *r4;
+ u8 i;
+ struct NIComm *NI_comm;
- if (r7 == 0)
+ if (reqResult == 0)
{
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag)
- gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0;
- r4 = &gRfuSlotStatusNI[r6]->send;
- if (r4->state == SLOT_STATE_SEND_NULL)
+ if (gRfuSlotStatusUNI[i]->send.dataReadyFlag)
+ gRfuSlotStatusUNI[i]->send.dataReadyFlag = 0;
+ NI_comm = &gRfuSlotStatusNI[i]->send;
+ if (NI_comm->state == SLOT_STATE_SEND_NULL)
{
- rfu_STC_releaseFrame(r6, 0, r4);
- gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot;
- if (r4->dataType == 1)
- gRfuLinkStatus->getNameFlag |= 1 << r6;
- r4->state = SLOT_STATE_SEND_SUCCESS;
+ rfu_STC_releaseFrame(i, 0, NI_comm);
+ gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlot;
+ if (NI_comm->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << i;
+ NI_comm->state = SLOT_STATE_SEND_SUCCESS;
}
}
}
gRfuLinkStatus->LLFReadyFlag = 0;
- rfu_STC_REQ_callback(36, r7);
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
}
-static void rfu_CB_sendData2(UNUSED u8 r0, u16 r1)
+static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult)
{
- rfu_STC_REQ_callback(36, r1);
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
}
-static void rfu_CB_sendData3(u8 r0, u16 r1)
+static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult)
{
- if (r1 != 0)
- rfu_STC_REQ_callback(36, r1);
- else if (r0 == 0xFF)
- rfu_STC_REQ_callback(0xFF, 0);
+ if (reqResult != 0)
+ rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult);
+ else if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
+ rfu_STC_REQ_callback(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
}
static void rfu_constructSendLLFrame(void)
{
- u32 r8, r5;
- u8 r6;
- u8 *sp00;
- struct RfuSlotStatusNI *r2;
+ u32 pakcketSize, currSize;
+ u8 i;
+ u8 *llf_p;
+ struct RfuSlotStatusNI *slotStatusNI;
if (gRfuLinkStatus->parentChild != MODE_NEUTRAL
&& gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)
{
gRfuLinkStatus->LLFReadyFlag = 0;
- r8 = 0;
- sp00 = (u8 *)&gRfuFixed->LLFBuffer[1];
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ pakcketSize = 0;
+ llf_p = (u8 *)&gRfuFixed->LLFBuffer[1];
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r5 = 0;
- if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG)
- r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send);
- if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG)
- r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv);
- if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI)
- r5 += rfu_STC_UNI_constructLLSF(r6, &sp00);
- if (r5 != 0)
+ currSize = 0;
+ if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG)
+ currSize = rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->send);
+ if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG)
+ currSize += rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->recv);
+ if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI)
+ currSize += rfu_STC_UNI_constructLLSF(i, &llf_p);
+ if (currSize != 0)
{
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- r8 += r5;
+ pakcketSize += currSize;
else
- r8 |= r5 << (5 * r6 + 8);
+ pakcketSize |= currSize << (5 * i + 8);
}
}
- if (r8 != 0)
+ if (pakcketSize != 0)
{
- while ((u32)sp00 & 3)
- *sp00++ = 0;
- gRfuFixed->LLFBuffer[0] = r8;
+ while ((u32)llf_p & 3)
+ *llf_p++ = 0;
+ gRfuFixed->LLFBuffer[0] = pakcketSize;
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
- u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]);
-
- // Does the volatile qualifier make sense?
- // It's the same as:
+ u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]);
+
+ // Does the volatile qualifier make sense?
+ // It's the same as:
// asm("":::"memory");
- r8 = r0 - *(u8 *volatile *)&gRfuFixed;
+ pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed;
}
}
- gRfuStatic->totalPacketSize = r8;
+ gRfuStatic->totalPacketSize = pakcketSize;
}
}
-static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4)
+static u16 rfu_STC_NI_constructLLSF(u8 bm_slot_id, u8 **dest_pp, struct NIComm *NI_comm)
{
- u16 r5;
- u32 sp00;
+ u16 size;
+ u32 frame;
u8 i;
- u8 *r2;
- const struct LLSFStruct *r8 = &llsf_struct[gRfuLinkStatus->parentChild];
+ u8 *frame8_p;
+ const struct LLSFStruct *llsf = &llsf_struct[gRfuLinkStatus->parentChild];
- if (r4->state == SLOT_STATE_SENDING)
+ if (NI_comm->state == SLOT_STATE_SENDING)
{
- while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize)
+ while (NI_comm->now_p[NI_comm->phase] >= (const u8 *)NI_comm->src + NI_comm->dataSize)
{
- ++r4->phase;
- if (r4->phase == 4)
- r4->phase = 0;
+ ++NI_comm->phase;
+ if (NI_comm->phase == 4)
+ NI_comm->phase = 0;
}
}
- if (r4->state & SLOT_RECV_FLAG)
+ if (NI_comm->state & SLOT_RECV_FLAG)
{
- r5 = 0;
+ size = 0;
}
- else if (r4->state == SLOT_STATE_SENDING)
+ else if (NI_comm->state == SLOT_STATE_SENDING)
{
- if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize)
- r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase];
+ if (NI_comm->now_p[NI_comm->phase] + NI_comm->payloadSize > (const u8 *)NI_comm->src + NI_comm->dataSize)
+ size = (const u8 *)NI_comm->src + NI_comm->dataSize - NI_comm->now_p[NI_comm->phase];
else
- r5 = r4->payloadSize;
+ size = NI_comm->payloadSize;
}
else
{
- if ((u32)r4->remainSize >= r4->payloadSize)
- r5 = r4->payloadSize;
+ if ((u32)NI_comm->remainSize >= NI_comm->payloadSize)
+ size = NI_comm->payloadSize;
else
- r5 = r4->remainSize;
+ size = NI_comm->remainSize;
}
- sp00 = (r4->state & 0xF) << r8->unk03
- | r4->ack << r8->unk04
- | r4->phase << r8->unk05
- | r4->n[r4->phase] << r8->unk06
- | r5;
+ frame = (NI_comm->state & 0xF) << llsf->slotStateShift
+ | NI_comm->ack << llsf->ackShift
+ | NI_comm->phase << llsf->phaseShit
+ | NI_comm->n[NI_comm->phase] << llsf->nShift
+ | size;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- sp00 |= r4->bmSlot << 18;
- r2 = (u8 *)&sp00;
- for (i = 0; i < r8->unk00; ++i)
- *(*r12)++ = *r2++;
- if (r5 != 0)
+ frame |= NI_comm->bmSlot << 18;
+ frame8_p = (u8 *)&frame;
+ for (i = 0; i < llsf->frameSize; ++i)
+ *(*dest_pp)++ = *frame8_p++;
+ if (size != 0)
{
- const u8 *sp04 = r4->now_p[r4->phase];
+ const u8 *src = NI_comm->now_p[NI_comm->phase];
- gRfuFixed->fastCopyPtr(&sp04, r12, r5);
+ gRfuFixed->fastCopyPtr(&src, dest_pp, size);
}
- if (r4->state == SLOT_STATE_SENDING)
+ if (NI_comm->state == SLOT_STATE_SENDING)
{
- ++r4->phase;
- if (r4->phase == 4)
- r4->phase = 0;
+ ++NI_comm->phase;
+ if (NI_comm->phase == 4)
+ NI_comm->phase = 0;
}
if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 1;
else
- gRfuLinkStatus->LLFReadyFlag |= 1 << r10;
- return r5 + r8->unk00;
+ gRfuLinkStatus->LLFReadyFlag |= 1 << bm_slot_id;
+ return size + llsf->frameSize;
}
-static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6)
+static u16 rfu_STC_UNI_constructLLSF(u8 bm_slot_id, u8 **dest_p)
{
- const struct LLSFStruct *r5;
- const u8 *sp04;
- u32 sp00;
- u8 *r2;
+ const struct LLSFStruct *llsf;
+ const u8 *src_p;
+ u32 frame;
+ u8 *frame8_p;
u8 i;
- struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send;
+ struct UNISend *UNI_send = &gRfuSlotStatusUNI[bm_slot_id]->send;
- if (!r4->dataReadyFlag || !r4->bmSlot)
+ if (!UNI_send->dataReadyFlag || !UNI_send->bmSlot)
return 0;
- r5 = &llsf_struct[gRfuLinkStatus->parentChild];
- sp00 = (r4->state & 0xF) << r5->unk03
- | r4->payloadSize;
+ llsf = &llsf_struct[gRfuLinkStatus->parentChild];
+ frame = (UNI_send->state & 0xF) << llsf->slotStateShift
+ | UNI_send->payloadSize;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
- sp00 |= r4->bmSlot << 18;
- r2 = (u8 *)&sp00;
- for (i = 0; i < r5->unk00; ++i)
- *(*r6)++ = *r2++;
- sp04 = r4->src;
- gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize);
+ frame |= UNI_send->bmSlot << 18;
+ frame8_p = (u8 *)&frame;
+ for (i = 0; i < llsf->frameSize; ++i)
+ *(*dest_p)++ = *frame8_p++;
+ src_p = UNI_send->src;
+ gRfuFixed->fastCopyPtr(&src_p, dest_p, UNI_send->payloadSize);
if (gRfuLinkStatus->parentChild == MODE_PARENT)
gRfuLinkStatus->LLFReadyFlag = 16;
else
- gRfuLinkStatus->LLFReadyFlag |= 16 << r8;
- return r5->unk00 + r4->payloadSize;
+ gRfuLinkStatus->LLFReadyFlag |= 16 << bm_slot_id;
+ return llsf->frameSize + UNI_send->payloadSize;
}
void rfu_REQ_recvData(void)
@@ -1784,434 +1849,433 @@ void rfu_REQ_recvData(void)
}
}
-static void rfu_CB_recvData(u8 r9, u16 r7)
+static void rfu_CB_recvData(u8 reqCommand, u16 reqResult)
{
- u8 r6;
- struct RfuSlotStatusNI *r4;
- struct NIComm *r5;
+ u8 i;
+ struct RfuSlotStatusNI *slotStatusNI;
+ struct NIComm *NI_comm;
- if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
+ if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1])
{
gRfuStatic->NIEndRecvFlag = 0;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
rfu_STC_PARENT_analyzeRecvPacket();
else
rfu_STC_CHILD_analyzeRecvPacket();
- for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- r4 = gRfuSlotStatusNI[r6];
- if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1))
+ slotStatusNI = gRfuSlotStatusNI[i];
+ if (slotStatusNI->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> i) & 1))
{
- r5 = &r4->recv;
- if (r5->dataType == 1)
- gRfuLinkStatus->getNameFlag |= 1 << r6;
- rfu_STC_releaseFrame(r6, 1, r5);
- gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot;
- r4->recv.state = SLOT_STATE_RECV_SUCCESS;
+ NI_comm = &slotStatusNI->recv;
+ if (NI_comm->dataType == 1)
+ gRfuLinkStatus->getNameFlag |= 1 << i;
+ rfu_STC_releaseFrame(i, 1, NI_comm);
+ gRfuLinkStatus->recvSlotNIFlag &= ~NI_comm->bmSlot;
+ slotStatusNI->recv.state = SLOT_STATE_RECV_SUCCESS;
}
}
if (gRfuStatic->recvErrorFlag)
- r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
+ reqResult = gRfuStatic->recvErrorFlag | ERR_DATA_RECV;
}
- rfu_STC_REQ_callback(r9, r7);
+ rfu_STC_REQ_callback(reqCommand, reqResult);
}
static void rfu_STC_PARENT_analyzeRecvPacket(void)
{
- u32 r3;
- u8 r5;
- u8 sp[4];
- u8 *r6;
+ u32 frames32;
+ u8 bm_slot_id;
+ u8 frame_counts[RFU_CHILD_MAX];
+ u8 *packet_p;
- r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ frames32 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- sp[r5] = r3 & 0x1F;
- r3 >>= 5;
- if (sp[r5] == 0)
- gRfuStatic->NIEndRecvFlag |= 1 << r5;
+ frame_counts[bm_slot_id] = frames32 & 0x1F;
+ frames32 >>= 5;
+ if (frame_counts[bm_slot_id] == 0)
+ gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id;
}
- r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
- for (r5 = 0; r5 < NELEMS(sp); ++r5)
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- if (sp[r5])
+ if (frame_counts[bm_slot_id])
{
- u8 *r4 = &sp[r5];
+ u8 *frames_p = &frame_counts[bm_slot_id];
do
{
- u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4);
+ u8 analyzed_frames = rfu_STC_analyzeLLSF(bm_slot_id, packet_p, *frames_p);
- r6 += r0;
- *r4 -= r0;
- } while (!(*r4 & 0x80) && (*r4));
+ packet_p += analyzed_frames;
+ *frames_p -= analyzed_frames;
+ } while (!(*frames_p & 0x80) && (*frames_p));
}
}
}
static void rfu_STC_CHILD_analyzeRecvPacket(void)
{
- u16 r4;
- u8 *r5;
- u16 r0;
+ u16 frames_remaining;
+ u8 *packet_p;
+ u16 analyzed_frames;
- r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F;
- r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
- if (r4 == 0)
+ frames_remaining = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F;
+ packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8];
+ if (frames_remaining == 0)
gRfuStatic->NIEndRecvFlag = 15;
do
{
- if (r4 == 0)
+ if (frames_remaining == 0)
break;
- r0 = rfu_STC_analyzeLLSF(0, r5, r4);
- r5 += r0;
- r4 -= r0;
- } while (!(r4 & 0x8000));
-}
-
-static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3)
-{
- struct RfuLocalStruct sp00;
- const struct LLSFStruct *r6;
- u32 r5;
- u8 r4;
- u32 r0;
- u16 r10;
-
- r6 = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)];
- if (r3 < r6->unk00)
- return r3;
- r5 = 0;
- for (r4 = 0; r4 < r6->unk00; ++r4)
- r5 |= *r7++ << 8 * r4;
- sp00.unk00 = (r5 >> r6->unk01) & r6->unk07;
- sp00.unk01 = (r5 >> r6->unk02) & r6->unk08;
- sp00.unk02 = (r5 >> r6->unk03) & r6->unk09;
- sp00.unk03 = (r5 >> r6->unk04) & r6->unk0A;
- sp00.unk04 = (r5 >> r6->unk05) & r6->unk0B;
- sp00.unk05 = (r5 >> r6->unk06) & r6->unk0C;
- sp00.unk06 = (r5 & r6->unk0E) & r5;
- r10 = sp00.unk06 + r6->unk00;
- if (sp00.unk00 == 0)
+ analyzed_frames = rfu_STC_analyzeLLSF(0, packet_p, frames_remaining);
+ packet_p += analyzed_frames;
+ frames_remaining -= analyzed_frames;
+ } while (!(frames_remaining & 0x8000));
+}
+
+static u16 rfu_STC_analyzeLLSF(u8 slot_id, const u8 *src, u16 last_frame)
+{
+ struct RfuLocalStruct llsf_NI;
+ const struct LLSFStruct *llsf_p;
+ u32 frames;
+ u8 i;
+ u16 retVal;
+
+ llsf_p = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)];
+ if (last_frame < llsf_p->frameSize)
+ return last_frame;
+ frames = 0;
+ for (i = 0; i < llsf_p->frameSize; ++i)
+ frames |= *src++ << 8 * i;
+ llsf_NI.recvFirst = (frames >> llsf_p->recvFirstShift) & llsf_p->recvFirstMask;
+ llsf_NI.connSlotFlag = (frames >> llsf_p->connSlotFlagShift) & llsf_p->connSlotFlagMask;
+ llsf_NI.slotState = (frames >> llsf_p->slotStateShift) & llsf_p->slotStateMask;
+ llsf_NI.ack = (frames >> llsf_p->ackShift) & llsf_p->ackMask;
+ llsf_NI.phase = (frames >> llsf_p->phaseShit) & llsf_p->phaseMask;
+ llsf_NI.n = (frames >> llsf_p->nShift) & llsf_p->nMask;
+ llsf_NI.frame = (frames & llsf_p->framesMask) & frames;
+ retVal = llsf_NI.frame + llsf_p->frameSize;
+ if (llsf_NI.recvFirst == 0)
{
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- if ((gRfuLinkStatus->connSlotFlag >> r12) & 1)
+ if ((gRfuLinkStatus->connSlotFlag >> slot_id) & 1)
{
- if (sp00.unk02 == 4)
+ if (llsf_NI.slotState == LCOM_UNI)
{
- rfu_STC_UNI_receive(r12, &sp00, r7);
+ rfu_STC_UNI_receive(slot_id, &llsf_NI, src);
}
- else if (sp00.unk03 == 0)
+ else if (llsf_NI.ack == 0)
{
- rfu_STC_NI_receive_Receiver(r12, &sp00, r7);
+ rfu_STC_NI_receive_Receiver(slot_id, &llsf_NI, src);
}
else
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
- if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1)
- && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1))
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
+ if (((gRfuSlotStatusNI[i]->send.bmSlot >> slot_id) & 1)
+ && ((gRfuLinkStatus->sendSlotNIFlag >> slot_id) & 1))
break;
- if (r4 <= 3)
- rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7);
+ if (i < RFU_CHILD_MAX)
+ rfu_STC_NI_receive_Sender(i, slot_id, &llsf_NI, src);
}
}
}
else
{
- s32 r5 = gRfuLinkStatus->connSlotFlag & sp00.unk01;
+ s32 conSlots = gRfuLinkStatus->connSlotFlag & llsf_NI.connSlotFlag;
- if (r5)
+ if (conSlots)
{
- for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4)
+ for (i = 0; i < RFU_CHILD_MAX; ++i)
{
- if ((r5 >> r4) & 1)
+ if ((conSlots >> i) & 1)
{
- if (sp00.unk02 == 4)
- rfu_STC_UNI_receive(r4, &sp00, r7);
- else if (sp00.unk03 == 0)
- rfu_STC_NI_receive_Receiver(r4, &sp00, r7);
- else if ((gRfuLinkStatus->sendSlotNIFlag >> r4) & 1)
- rfu_STC_NI_receive_Sender(r4, r4, &sp00, r7);
+ if (llsf_NI.slotState == LCOM_UNI)
+ rfu_STC_UNI_receive(i, &llsf_NI, src);
+ else if (llsf_NI.ack == 0)
+ rfu_STC_NI_receive_Receiver(i, &llsf_NI, src);
+ else if ((gRfuLinkStatus->sendSlotNIFlag >> i) & 1)
+ rfu_STC_NI_receive_Sender(i, i, &llsf_NI, src);
}
}
}
}
}
- return r10;
+ return retVal;
}
-static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 *sp00)
+static void rfu_STC_UNI_receive(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *src)
{
- u8 *sp04;
- u32 r2;
- struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7];
- struct UNIRecv *r5 = &r3->recv;
+ u8 *dest;
+ u32 size;
+ struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[bm_slot_id];
+ struct UNIRecv *UNI_recv = &slotStatusUNI->recv;
- r5->errorCode = 0;
- if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06)
+ UNI_recv->errorCode = 0;
+ if (gRfuSlotStatusUNI[bm_slot_id]->recvBufferSize < llsf_NI->frame)
{
- r3->recv.state = SLOT_STATE_RECV_IGNORE;
- r5->errorCode = ERR_RECV_BUFF_OVER;
+ slotStatusUNI->recv.state = SLOT_STATE_RECV_IGNORE;
+ UNI_recv->errorCode = ERR_RECV_BUFF_OVER;
}
else
- {
- if (r5->dataBlockFlag)
+ {
+ if (UNI_recv->dataBlockFlag)
{
- if (r5->newDataFlag)
+ if (UNI_recv->newDataFlag)
{
- r5->errorCode = ERR_RECV_UNK;
- goto _081E2F0E;
+ UNI_recv->errorCode = ERR_RECV_UNK;
+ goto force_tail_merge;
}
}
else
{
- if (r5->newDataFlag)
- r5->errorCode = ERR_RECV_DATA_OVERWRITED;
+ if (UNI_recv->newDataFlag)
+ UNI_recv->errorCode = ERR_RECV_DATA_OVERWRITED;
}
- r5->state = SLOT_STATE_RECEIVING;
- r2 = r5->dataSize = r6->unk06;
- sp04 = gRfuSlotStatusUNI[r7]->recvBuffer;
- gRfuFixed->fastCopyPtr(&sp00, &sp04, r2);
- r5->newDataFlag = 1;
- r5->state = 0;
+ UNI_recv->state = SLOT_STATE_RECEIVING;
+ size = UNI_recv->dataSize = llsf_NI->frame;
+ dest = gRfuSlotStatusUNI[bm_slot_id]->recvBuffer;
+ gRfuFixed->fastCopyPtr(&src, &dest, size);
+ UNI_recv->newDataFlag = 1;
+ UNI_recv->state = 0;
}
-_081E2F0E:
- if (r5->errorCode)
- gRfuStatic->recvErrorFlag |= 16 << r7;
+force_tail_merge:
+ if (UNI_recv->errorCode)
+ gRfuStatic->recvErrorFlag |= 16 << bm_slot_id;
}
-static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3)
+static void rfu_STC_NI_receive_Sender(u8 NI_slot, u8 bm_flag, const struct RfuLocalStruct *llsf_NI, const u8 *data_p)
{
- struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send;
- u16 r9 = r12->state;
- u8 sp00 = r12->n[r6->unk04];
- u8 *r8;
- u8 r4;
- u16 r2;
+ struct NIComm *NI_comm = &gRfuSlotStatusNI[NI_slot]->send;
+ u16 state = NI_comm->state;
+ u8 n = NI_comm->n[llsf_NI->phase];
+ u8 i;
+ u16 imeBak;
- if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING)
- || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START)
- || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST))
+ if ((llsf_NI->slotState == LCOM_NI && state == SLOT_STATE_SENDING)
+ || (llsf_NI->slotState == LCOM_NI_START && state == SLOT_STATE_SEND_START)
+ || (llsf_NI->slotState == LCOM_NI_END && state == SLOT_STATE_SEND_LAST))
{
- if (r12->n[r6->unk04] == r6->unk05)
- r12->recvAckFlag[r6->unk04] |= 1 << r10;
+ if (NI_comm->n[llsf_NI->phase] == llsf_NI->n)
+ NI_comm->recvAckFlag[llsf_NI->phase] |= 1 << bm_flag;
}
- if ((r12->recvAckFlag[r6->unk04] & r12->bmSlot) == r12->bmSlot)
+ if ((NI_comm->recvAckFlag[llsf_NI->phase] & NI_comm->bmSlot) == NI_comm->bmSlot)
{
- r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3;
- r12->recvAckFlag[r6->unk04] = 0;
- if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1)
+ NI_comm->n[llsf_NI->phase] = (NI_comm->n[llsf_NI->phase] + 1) & 3;
+ NI_comm->recvAckFlag[llsf_NI->phase] = 0;
+ if ((u16)(NI_comm->state + ~SLOT_STATE_SEND_NULL) <= 1)
{
- if (r12->state == SLOT_STATE_SEND_START)
- r12->now_p[r6->unk04] += r12->payloadSize;
+ if (NI_comm->state == SLOT_STATE_SEND_START)
+ NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize;
else
- r12->now_p[r6->unk04] += r12->payloadSize << 2;
- r12->remainSize -= r12->payloadSize;
- if (r12->remainSize != 0)
- if (r12->remainSize >= 0)
+ NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize << 2;
+ NI_comm->remainSize -= NI_comm->payloadSize;
+ if (NI_comm->remainSize != 0)
+ if (NI_comm->remainSize >= 0)
goto _081E30AE;
- // Above is a hack to avoid optimization over comparison.
- // rfu_STC_NI_constructLLSF uses this field as u32.
- // It's equivalent to the following condition:
- // if (r12->remainSize == 0 || r12->remainSize < 0)
- {
- r12->phase = 0;
- if (r12->state == SLOT_STATE_SEND_START)
+ // Above is a hack to avoid optimization over comparison.
+ // rfu_STC_NI_constructLLSF uses this field as u32.
+ // It's equivalent to the following condition:
+ // if (NI_comm->remainSize == 0 || NI_comm->remainSize < 0)
{
- for (r4 = 0; r4 < WINDOW_COUNT; ++r4)
+ NI_comm->phase = 0;
+ if (NI_comm->state == SLOT_STATE_SEND_START)
+ {
+ for (i = 0; i < WINDOW_COUNT; ++i)
+ {
+ NI_comm->n[i] = 1;
+ NI_comm->now_p[i] = NI_comm->src + NI_comm->payloadSize * i;
+ }
+ NI_comm->remainSize = NI_comm->dataSize;
+ NI_comm->state = SLOT_STATE_SENDING;
+ }
+ else
{
- r12->n[r4] = 1;
- r12->now_p[r4] = r12->src + r12->payloadSize * r4;
+ NI_comm->n[0] = 0;
+ NI_comm->remainSize = 0;
+ NI_comm->state = SLOT_STATE_SEND_LAST;
}
- r12->remainSize = r12->dataSize;
- r12->state = SLOT_STATE_SENDING;
}
- else
- {
- r12->n[0] = 0;
- r12->remainSize = 0;
- r12->state = SLOT_STATE_SEND_LAST;
- }
- }
_081E30AE:
+ ;
}
- else if (r12->state == SLOT_STATE_SEND_LAST)
+ else if (NI_comm->state == SLOT_STATE_SEND_LAST)
{
- r12->state = SLOT_STATE_SEND_NULL;
+ NI_comm->state = SLOT_STATE_SEND_NULL;
}
}
- if (r12->state != r9
- || r12->n[r6->unk04] != sp00
- || (r12->recvAckFlag[r6->unk04] >> r10) & 1)
+ if (NI_comm->state != state
+ || NI_comm->n[llsf_NI->phase] != n
+ || (NI_comm->recvAckFlag[llsf_NI->phase] >> bm_flag) & 1)
{
- r2 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- gRfuStatic->recvRenewalFlag |= 16 << r10;
- gRfuSlotStatusNI[r10]->send.failCounter = 0;
- REG_IME = r2;
+ gRfuStatic->recvRenewalFlag |= 16 << bm_flag;
+ gRfuSlotStatusNI[bm_flag]->send.failCounter = 0;
+ REG_IME = imeBak;
}
}
-static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, const u8 *sp00)
+static void rfu_STC_NI_receive_Receiver(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *data_p)
{
- u16 r2;
- u32 r7 = 0;
- struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8];
- struct NIComm *r5 = &r4->recv;
- u16 r9 = r4->recv.state;
- u8 r10 = r4->recv.n[r6->unk04];
+ u16 imeBak;
+ u32 state_check = 0;
+ struct RfuSlotStatusNI *slotStatus_NI = gRfuSlotStatusNI[bm_slot_id];
+ struct NIComm *recvSlot = &slotStatus_NI->recv;
+ u16 state = slotStatus_NI->recv.state;
+ u8 n = slotStatus_NI->recv.n[llsf_NI->phase];
- if (r6->unk02 == 3)
+ if (llsf_NI->slotState == LCOM_NI_END)
{
- gRfuStatic->NIEndRecvFlag |= 1 << r8;
- if (r4->recv.state == SLOT_STATE_RECEIVING)
+ gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id;
+ if (slotStatus_NI->recv.state == SLOT_STATE_RECEIVING)
{
- r4->recv.phase = 0;
- r4->recv.n[0] = 0;
- r4->recv.state = SLOT_STATE_RECV_LAST;
+ slotStatus_NI->recv.phase = 0;
+ slotStatus_NI->recv.n[0] = 0;
+ slotStatus_NI->recv.state = SLOT_STATE_RECV_LAST;
}
}
- else if (r6->unk02 == 2)
+ else if (llsf_NI->slotState == LCOM_NI)
{
- if (r9 == SLOT_STATE_RECV_START && !r5->remainSize)
- rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5);
- if (r5->state == SLOT_STATE_RECEIVING)
- r7 = 1;
+ if (state == SLOT_STATE_RECV_START && !recvSlot->remainSize)
+ rfu_STC_NI_initSlot_asRecvDataEntity(bm_slot_id, recvSlot);
+ if (recvSlot->state == SLOT_STATE_RECEIVING)
+ state_check = 1;
}
- else if (r6->unk02 == 1)
+ else if (llsf_NI->slotState == LCOM_NI_START)
{
- if (r9 == SLOT_STATE_RECV_START)
+ if (state == SLOT_STATE_RECV_START)
{
- r7 = 1;
+ state_check = 1;
}
else
{
- rfu_STC_NI_initSlot_asRecvControllData(r8, r5);
- if (r4->recv.state != SLOT_STATE_RECV_START)
+ rfu_STC_NI_initSlot_asRecvControllData(bm_slot_id, recvSlot);
+ if (slotStatus_NI->recv.state != SLOT_STATE_RECV_START)
return;
- r7 = 1;
+ state_check = 1;
}
}
- if (r7 != 0)
+ if (state_check != 0)
{
- if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3))
+ if (llsf_NI->n == ((recvSlot->n[llsf_NI->phase] + 1) & 3))
{
- gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06);
- if (r5->state == SLOT_STATE_RECEIVING)
- r5->now_p[r6->unk04] += 3 * r5->payloadSize;
- r5->remainSize -= r6->unk06;
- r5->n[r6->unk04] = r6->unk05;
+ gRfuFixed->fastCopyPtr(&data_p, (u8 **)&recvSlot->now_p[llsf_NI->phase], llsf_NI->frame);
+ if (recvSlot->state == SLOT_STATE_RECEIVING)
+ recvSlot->now_p[llsf_NI->phase] += 3 * recvSlot->payloadSize;
+ recvSlot->remainSize -= llsf_NI->frame;
+ recvSlot->n[llsf_NI->phase] = llsf_NI->n;
}
}
- if (r5->errorCode == 0)
+ if (recvSlot->errorCode == 0)
{
- r5->phase = r6->unk04;
- if (r5->state != r9 || r5->n[r6->unk04] != r10 || r5->n[r6->unk04] == r6->unk05)
+ recvSlot->phase = llsf_NI->phase;
+ if (recvSlot->state != state || recvSlot->n[llsf_NI->phase] != n || recvSlot->n[llsf_NI->phase] == llsf_NI->n)
{
- r2 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- gRfuStatic->recvRenewalFlag |= 1 << r8;
- r5->failCounter = 0;
- REG_IME = r2;
+ gRfuStatic->recvRenewalFlag |= 1 << bm_slot_id;
+ recvSlot->failCounter = 0;
+ REG_IME = imeBak;
}
}
}
-static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2)
+static void rfu_STC_NI_initSlot_asRecvControllData(u8 bm_slot_id, struct NIComm *NI_comm)
{
- u8 *r1;
- u32 r5;
- u8 r6;
+ u8 *llFrameSize_p;
+ u32 llFrameSize;
+ u8 bm_slot_flag;
if (gRfuLinkStatus->parentChild == MODE_PARENT)
{
- r5 = 3;
- r1 = &gRfuLinkStatus->remainLLFrameSizeParent;
+ llFrameSize = 3;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent;
}
else
{
- r5 = 2;
- r1 = &gRfuLinkStatus->remainLLFrameSizeChild[r4];
+ llFrameSize = 2;
+ llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id];
}
- r6 = 1 << r4;
- if (r2->state == 0)
+ bm_slot_flag = 1 << bm_slot_id;
+ if (NI_comm->state == 0)
{
- if (*r1 < r5)
+ if (*llFrameSize_p < llFrameSize)
{
- r2->state = SLOT_STATE_RECV_IGNORE;
- r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE;
- gRfuStatic->recvErrorFlag |= r6;
+ NI_comm->state = SLOT_STATE_RECV_IGNORE;
+ NI_comm->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE;
+ gRfuStatic->recvErrorFlag |= bm_slot_flag;
}
else
{
- r2->errorCode = 0;
- *r1 -= r5;
- r2->now_p[0] = &r2->dataType;
- r2->remainSize = 7;
- r2->ack = 1;
- r2->payloadSize = 0;
- r2->bmSlot = r6;
- r2->state = SLOT_STATE_RECV_START;
- gRfuLinkStatus->recvSlotNIFlag |= r6;
+ NI_comm->errorCode = 0;
+ *llFrameSize_p -= llFrameSize;
+ NI_comm->now_p[0] = &NI_comm->dataType;
+ NI_comm->remainSize = 7;
+ NI_comm->ack = 1;
+ NI_comm->payloadSize = 0;
+ NI_comm->bmSlot = bm_slot_flag;
+ NI_comm->state = SLOT_STATE_RECV_START;
+ gRfuLinkStatus->recvSlotNIFlag |= bm_slot_flag;
}
}
}
-static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4)
+static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 bm_slot_id, struct NIComm *NI_comm)
{
- u8 r1, r3;
+ u8 bm_slot_flag, win_id;
- if (r4->dataType == 1)
+ if (NI_comm->dataType == 1)
{
- r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo;
+ NI_comm->now_p[0] = (void *)&gRfuLinkStatus->partner[bm_slot_id].serialNo;
}
else
{
- if (r4->dataSize > gRfuSlotStatusNI[r5]->recvBufferSize)
+ if (NI_comm->dataSize > gRfuSlotStatusNI[bm_slot_id]->recvBufferSize)
{
- r1 = 1 << r5;
- gRfuStatic->recvErrorFlag |= r1;
- gRfuLinkStatus->recvSlotNIFlag &= ~r1;
- r4->errorCode = ERR_RECV_BUFF_OVER;
- r4->state = SLOT_STATE_RECV_FAILED;
- rfu_STC_releaseFrame(r5, 1, r4);
+ bm_slot_flag = 1 << bm_slot_id;
+ gRfuStatic->recvErrorFlag |= bm_slot_flag;
+ gRfuLinkStatus->recvSlotNIFlag &= ~bm_slot_flag;
+ NI_comm->errorCode = ERR_RECV_BUFF_OVER;
+ NI_comm->state = SLOT_STATE_RECV_FAILED;
+ rfu_STC_releaseFrame(bm_slot_id, 1, NI_comm);
return;
}
- r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer;
+ NI_comm->now_p[0] = gRfuSlotStatusNI[bm_slot_id]->recvBuffer;
}
- for (r3 = 0; r3 < WINDOW_COUNT; ++r3)
+ for (win_id = 0; win_id < WINDOW_COUNT; ++win_id)
{
- r4->n[r3] = 0;
- r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3];
+ NI_comm->n[win_id] = 0;
+ NI_comm->now_p[win_id] = &NI_comm->now_p[0][NI_comm->payloadSize * win_id];
}
- r4->remainSize = r4->dataSize;
- r4->state = SLOT_STATE_RECEIVING;
+ NI_comm->remainSize = NI_comm->dataSize;
+ NI_comm->state = SLOT_STATE_RECEIVING;
}
static void rfu_NI_checkCommFailCounter(void)
{
- u16 r12;
- u32 r7;
- u8 r2, r3;
+ u16 imeBak;
+ u32 recvRenewalFlag;
+ u8 bm_slot_flag, bm_slot_id;
if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag)
{
- r12 = REG_IME;
+ imeBak = REG_IME;
REG_IME = 0;
- r7 = gRfuStatic->recvRenewalFlag >> 4;
- for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3)
+ recvRenewalFlag = gRfuStatic->recvRenewalFlag >> 4;
+ for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id)
{
- r2 = 1 << r3;
- if (gRfuLinkStatus->sendSlotNIFlag & r2
- && !(gRfuStatic->recvRenewalFlag & r2))
- ++gRfuSlotStatusNI[r3]->send.failCounter;
- if (gRfuLinkStatus->recvSlotNIFlag & r2
- && !(r7 & r2))
- ++gRfuSlotStatusNI[r3]->recv.failCounter;
+ bm_slot_flag = 1 << bm_slot_id;
+ if (gRfuLinkStatus->sendSlotNIFlag & bm_slot_flag
+ && !(gRfuStatic->recvRenewalFlag & bm_slot_flag))
+ ++gRfuSlotStatusNI[bm_slot_id]->send.failCounter;
+ if (gRfuLinkStatus->recvSlotNIFlag & bm_slot_flag
+ && !(recvRenewalFlag & bm_slot_flag))
+ ++gRfuSlotStatusNI[bm_slot_id]->recv.failCounter;
}
gRfuStatic->recvRenewalFlag = 0;
- REG_IME = r12;
+ REG_IME = imeBak;
}
}
diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c
index fc5701986..b6623540f 100644
--- a/src/librfu_sio32id.c
+++ b/src/librfu_sio32id.c
@@ -4,44 +4,56 @@ static void Sio32IDIntr(void);
static void Sio32IDInit(void);
static s32 Sio32IDMain(void);
+struct RfuSIO32Id
+{
+ u8 MS_mode;
+ u8 state;
+ u16 count;
+ u16 send_id;
+ u16 recv_id;
+ u16 unk8; // unused
+ u16 lastId;
+};
+
struct RfuSIO32Id gRfuSIO32Id;
static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO
static const char Sio32IDLib_Var[] = "Sio32ID_030820";
-s32 AgbRFU_checkID(u8 r5)
+s32 AgbRFU_checkID(u8 maxTries)
{
- u16 r8;
- vu16 *r4;
- s32 r6;
+ u16 ieBak;
+ vu16 *regTMCNTL;
+ s32 id;
+ // Interrupts must be enabled
if (REG_IME == 0)
return -1;
- r8 = REG_IE;
+ ieBak = REG_IE;
gSTWIStatus->state = 10;
STWI_set_Callback_ID(Sio32IDIntr);
Sio32IDInit();
- r4 = &REG_TMCNT_L(gSTWIStatus->timerSelect);
- r5 *= 8;
- while (--r5 != 0xFF)
+ regTMCNTL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ maxTries *= 8;
+ while (--maxTries != 0xFF)
{
- r6 = Sio32IDMain();
- if (r6 != 0)
+ id = Sio32IDMain();
+ if (id != 0)
break;
- r4[1] = 0;
- r4[0] = 0;
- r4[1] = TIMER_1024CLK | TIMER_ENABLE;
- while (r4[0] < 32)
+ regTMCNTL[1] = 0;
+ regTMCNTL[0] = 0;
+ regTMCNTL[1] = TIMER_1024CLK | TIMER_ENABLE;
+ while (regTMCNTL[0] < 32)
;
- r4[1] = 0;
- r4[0] = 0;
+ regTMCNTL[1] = 0;
+ regTMCNTL[0] = 0;
}
REG_IME = 0;
- REG_IE = r8;
+ REG_IE = ieBak;
REG_IME = 1;
gSTWIStatus->state = 0;
STWI_set_Callback_ID(NULL);
- return r6;
+ return id;
}
static void Sio32IDInit(void)
@@ -58,107 +70,105 @@ static void Sio32IDInit(void)
static s32 Sio32IDMain(void)
{
- u8 r12;
-
- switch (r12 = gRfuSIO32Id.unk1)
+ switch (gRfuSIO32Id.state)
{
case 0:
- gRfuSIO32Id.unk0 = 1;
+ gRfuSIO32Id.MS_mode = AGB_CLK_MASTER;
REG_SIOCNT |= SIO_38400_BPS;
- REG_IME = r12;
+ REG_IME = 0;
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = 1;
- gRfuSIO32Id.unk1 = 1;
+ gRfuSIO32Id.state = 1;
*(vu8 *)&REG_SIOCNT |= SIO_ENABLE;
break;
case 1:
- if (gRfuSIO32Id.unkA == 0)
+ if (gRfuSIO32Id.lastId == 0)
{
- if (gRfuSIO32Id.unk0 == 1)
+ if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER)
{
- if (gRfuSIO32Id.unk2 == 0)
+ if (gRfuSIO32Id.count == 0)
{
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_SIOCNT |= SIO_ENABLE;
- REG_IME = r12;
+ REG_IME = 1;
}
}
- else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2)
+ else if (gRfuSIO32Id.send_id != RFU_ID && !gRfuSIO32Id.count)
{
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_IE &= ~INTR_FLAG_SERIAL;
- REG_IME = r12;
- REG_SIOCNT = gRfuSIO32Id.unk2;
+ REG_IME = 1;
+ REG_SIOCNT = 0;
REG_SIOCNT = SIO_32BIT_MODE;
REG_IF = INTR_FLAG_SERIAL;
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
- REG_IME = gRfuSIO32Id.unk2;
+ REG_IME = 0;
REG_IE |= INTR_FLAG_SERIAL;
- REG_IME = r12;
+ REG_IME = 1;
}
break;
}
else
{
- gRfuSIO32Id.unk1 = 2;
+ gRfuSIO32Id.state = 2;
// fallthrough
}
default:
- return gRfuSIO32Id.unkA;
+ return gRfuSIO32Id.lastId;
}
return 0;
}
static void Sio32IDIntr(void)
{
- u32 r5;
- u16 r0;
+ u32 regSIODATA32;
+ u16 delay;
#ifndef NONMATCHING
- register u32 r1 asm("r1");
- register u16 r0_ asm("r0");
+ register u32 rfuSIO32IdUnk0_times_16 asm("r1");
+ register u16 negRfuSIO32IdUnk6 asm("r0");
#else
- u32 r1;
- u16 r0_;
+ u32 rfuSIO32IdUnk0_times_16;
+ u16 negRfuSIO32IdUnk6;
#endif
- r5 = REG_SIODATA32;
- if (gRfuSIO32Id.unk0 != 1)
+ regSIODATA32 = REG_SIODATA32;
+ if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
REG_SIOCNT |= SIO_ENABLE;
- r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm
- r1 = (r5 << r1) >> 16;
- r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16;
- if (gRfuSIO32Id.unkA == 0)
+ rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm
+ rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16;
+ regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
+ if (gRfuSIO32Id.lastId == 0)
{
- if (r1 == gRfuSIO32Id.unk6)
+ if (rfuSIO32IdUnk0_times_16 == gRfuSIO32Id.recv_id)
{
- if (gRfuSIO32Id.unk2 > 3)
+ if (gRfuSIO32Id.count > 3)
{
- gRfuSIO32Id.unkA = r5;
+ gRfuSIO32Id.lastId = regSIODATA32;
}
- else if (r1 == (u16)~gRfuSIO32Id.unk4)
+ else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id)
{
- r0_ = ~gRfuSIO32Id.unk6;
- if (r5 == r0_)
- ++gRfuSIO32Id.unk2;
+ negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id;
+ if (regSIODATA32 == negRfuSIO32IdUnk6)
+ ++gRfuSIO32Id.count;
}
}
else
{
- gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA;
+ gRfuSIO32Id.count = 0;
}
}
- if (gRfuSIO32Id.unk2 < 4)
- gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData);
+ if (gRfuSIO32Id.count < 4)
+ gRfuSIO32Id.send_id = *(gRfuSIO32Id.count + Sio32ConnectionData);
else
- gRfuSIO32Id.unk4 = 0x8001;
- gRfuSIO32Id.unk6 = ~r5;
- REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0))
- + (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0);
- if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E))
+ gRfuSIO32Id.send_id = RFU_ID;
+ gRfuSIO32Id.recv_id = ~regSIODATA32;
+ REG_SIODATA32 = (gRfuSIO32Id.send_id << 16 * (1 - gRfuSIO32Id.MS_mode))
+ + (gRfuSIO32Id.recv_id << 16 * gRfuSIO32Id.MS_mode);
+ if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER && (gRfuSIO32Id.count != 0 || regSIODATA32 == 0x494e))
{
- for (r0 = 0; r0 < 600; ++r0)
+ for (delay = 0; delay < 600; ++delay)
;
- if (gRfuSIO32Id.unkA == 0)
+ if (gRfuSIO32Id.lastId == 0)
REG_SIOCNT |= SIO_ENABLE;
}
}
diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c
index b88f21737..0287b358a 100644
--- a/src/librfu_stwi.c
+++ b/src/librfu_stwi.c
@@ -28,8 +28,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
}
gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
- gSTWIStatus->msMode = 1;
- gSTWIStatus->state = 0;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
@@ -39,7 +39,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
gSTWIStatus->recoveryCount = 0;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
REG_RCNT = 0x100; // TODO: mystery bit?
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
STWI_init_Callback_M();
@@ -71,7 +71,7 @@ void AgbRFU_SoftReset(void)
*timerH = 3;
REG_RCNT = 0x80A0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->reqActiveCommand = 0;
@@ -81,9 +81,9 @@ void AgbRFU_SoftReset(void)
gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
- gSTWIStatus->msMode = 1;
+ gSTWIStatus->msMode = AGB_CLK_MASTER;
gSTWIStatus->recoveryCount = 0;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
}
void STWI_set_MS_mode(u8 mode)
@@ -131,12 +131,12 @@ void STWI_set_Callback_S(void (*callbackS)(u16))
void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer
{
- gSTWIStatus->unk_20 = func;
+ gSTWIStatus->callbackID = func;
}
u16 STWI_poll_CommandEnd(void)
{
- while (gSTWIStatus->unk_2c == TRUE)
+ while (gSTWIStatus->sending == 1)
;
return gSTWIStatus->error;
}
@@ -195,7 +195,7 @@ void STWI_send_ConfigStatusREQ(void)
}
}
-void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
+void STWI_send_GameConfigREQ(const u8 *serial_gname, const u8 *uname)
{
u8 *packetBytes;
s32 i;
@@ -203,29 +203,28 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
if (!STWI_init(ID_GAME_CONFIG_REQ))
{
gSTWIStatus->reqLength = 6;
- // TODO: what is unk1
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
- *(u16 *)packetBytes = *(u16 *)unk1;
+ *(u16 *)packetBytes = *(u16 *)serial_gname;
packetBytes += sizeof(u16);
- unk1 += sizeof(u16);
+ serial_gname += sizeof(u16);
for (i = 0; i < 14; ++i)
{
- *packetBytes = *unk1;
+ *packetBytes = *serial_gname;
++packetBytes;
- ++unk1;
+ ++serial_gname;
}
for (i = 0; i < 8; ++i)
{
- *packetBytes = *data;
+ *packetBytes = *uname;
++packetBytes;
- ++data;
+ ++uname;
}
STWI_start_Command();
}
}
-void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
+void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
{
if (!STWI_init(ID_SYSTEM_CONFIG_REQ))
{
@@ -234,9 +233,9 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
gSTWIStatus->reqLength = 1;
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
- *packetBytes++ = unk3;
- *packetBytes++ = unk2;
- *(u16*)packetBytes = unk1;
+ *packetBytes++ = mcTimer;
+ *packetBytes++ = maxMFrame;
+ *(u16*)packetBytes = availSlotFlag;
STWI_start_Command();
}
}
@@ -499,20 +498,17 @@ static void STWI_intr_timer(void)
STWI_stop_timer();
STWI_reset_ClockCounter();
if (gSTWIStatus->callbackM != NULL)
- gSTWIStatus->callbackM(255, 0);
+ gSTWIStatus->callbackM(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
break;
}
}
-static void STWI_set_timer(u8 unk)
+static void STWI_set_timer(u8 count)
{
- vu16 *timerL;
- vu16 *timerH;
-
- timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
- timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
+ vu16 *timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
+ vu16 *timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
REG_IME = 0;
- switch (unk)
+ switch (count)
{
case 50:
*timerL = 0xFCCB;
@@ -543,25 +539,31 @@ static void STWI_stop_timer(void)
REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
}
+/*
+ * Set up STWI to send REQ. Returns 1 if error (see below).
+ */
static u16 STWI_init(u8 request)
{
if (!REG_IME)
{
+ // Can't start sending if IME is disabled.
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if (gSTWIStatus->unk_2c == TRUE)
+ else if (gSTWIStatus->sending == 1)
{
+ // Already sending something. Cancel and error.
gSTWIStatus->error = ERR_REQ_CMD_SENDING;
- gSTWIStatus->unk_2c = FALSE;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
- else if(!gSTWIStatus->msMode)
+ else if (gSTWIStatus->msMode == AGB_CLK_SLAVE)
{
+ // Can't send if clock slave
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus);
@@ -569,9 +571,10 @@ static u16 STWI_init(u8 request)
}
else
{
- gSTWIStatus->unk_2c = TRUE;
+ // Good to go, start sending
+ gSTWIStatus->sending = 1;
gSTWIStatus->reqActiveCommand = request;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
@@ -595,7 +598,7 @@ static s32 STWI_start_Command(void)
// but the cast here is required to avoid register issue
*(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
- gSTWIStatus->state = 0;
+ gSTWIStatus->state = 0; // master send req
gSTWIStatus->reqNext = 1;
imeTemp = REG_IME;
REG_IME = 0;
@@ -608,7 +611,7 @@ static s32 STWI_start_Command(void)
static s32 STWI_restart_Command(void)
{
- if (gSTWIStatus->recoveryCount <= 1)
+ if (gSTWIStatus->recoveryCount < 2)
{
++gSTWIStatus->recoveryCount;
STWI_start_Command();
@@ -618,17 +621,17 @@ static s32 STWI_restart_Command(void)
if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
}
else
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
- gSTWIStatus->unk_2c = 0;
+ gSTWIStatus->sending = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
- gSTWIStatus->state = 4; // TODO: what's 4
+ gSTWIStatus->state = 4; // error
}
}
return 0;
@@ -636,7 +639,7 @@ static s32 STWI_restart_Command(void)
static s32 STWI_reset_ClockCounter(void)
{
- gSTWIStatus->state = 5; // TODO: what is 5
+ gSTWIStatus->state = 5; // slave receive req init
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
REG_SIODATA32 = (1 << 31);
diff --git a/src/link.c b/src/link.c
index dfb21f126..26e223153 100644
--- a/src/link.c
+++ b/src/link.c
@@ -82,14 +82,14 @@ u32 gFiller_3003EC0;
u16 gLinkHeldKeys;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
-bool8 gUnknown_3003F24;
+bool8 gLinkAllAcked5FFF;
bool8 gUnknown_3003F28;
-bool8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
-bool8 gUnknown_3003F30[MAX_LINK_PLAYERS];
-u16 gUnknown_3003F34;
+bool8 gLinkCommand2FFEAck[MAX_LINK_PLAYERS];
+bool8 gLinkCommand5FFFAck[MAX_LINK_PLAYERS];
+u16 gLinkCmd5FFFparam;
u8 gSuppressLinkErrorMessage;
-bool8 gWirelessCommType;
-bool8 gSavedLinkPlayerCount;
+u8 gWirelessCommType;
+u8 gSavedLinkPlayerCount;
u16 gSendCmd[CMD_LENGTH];
u8 gSavedMultiplayerId;
bool8 gReceivedRemoteLinkPlayers;
@@ -123,8 +123,8 @@ EWRAM_DATA struct {
u8 lastSendQueueCount;
u8 unk_06;
} sLinkErrorBuffer = {};
-EWRAM_DATA u16 gUnknown_202285C = 0;
-EWRAM_DATA void *gUnknown_2022860 = NULL;
+static EWRAM_DATA u16 sStartSend5FFFfailures = 0;
+static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
static void InitLocalLinkPlayer(void);
static void sub_800978C(void);
@@ -142,13 +142,13 @@ static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
static void LinkCB_RequestPlayerDataExchange(void);
static void Task_PrintTestData(u8 taskId);
-static void sub_800AB0C(void);
-static void sub_800AB38(void);
-static void sub_800ABD4(void);
-static void sub_800AC00(void);
+static void LinkCB_BuildCommand5FFF(void);
+static void LinkCB_WaitAckCommand5FFF(void);
+static void LinkFunc_Send2FFE_1(void);
+static void LinkFunc_Send2FFE_2(void);
static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void);
-static void sub_800B210(void);
+static void SetWirelessCommType0(void);
static void DisableSerial(void);
static void EnableSerial(void);
static bool8 IsSioMultiMaster(void);
@@ -232,16 +232,16 @@ bool8 IsWirelessAdapterConnected(void)
if (gQuestLogState == 2 || gQuestLogState == 3)
return FALSE;
- sub_800B1F4();
+ SetWirelessCommType1();
sub_80F86F4();
sub_80FB128(TRUE);
- if (sub_80FD3A4() == RFU_ID)
+ if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
{
rfu_REQ_stopMode();
rfu_waitREQComplete();
return TRUE;
}
- sub_800B210();
+ SetWirelessCommType0();
CloseLink();
RestoreSerialTimer3IntrHandlers();
return FALSE;
@@ -379,8 +379,8 @@ void OpenLink(void)
ResetBlockSend();
gUnknown_3000E4C = 0;
gUnknown_3003F28 = FALSE;
- gUnknown_3003F24 = FALSE;
- gUnknown_3003F34 = 0;
+ gLinkAllAcked5FFF = FALSE;
+ gLinkCmd5FFFparam = 0;
CreateTask(Task_TriggerHandshake, 2);
}
else
@@ -391,8 +391,8 @@ void OpenLink(void)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
gRemoteLinkPlayersNotReceived[i] = TRUE;
- gUnknown_3003F30[i] = FALSE;
- gUnknown_3003F2C[i] = FALSE;
+ gLinkCommand5FFFAck[i] = FALSE;
+ gLinkCommand2FFEAck[i] = FALSE;
}
}
@@ -401,7 +401,7 @@ void CloseLink(void)
gReceivedRemoteLinkPlayers = FALSE;
if (gWirelessCommType)
{
- sub_80F8DC0();
+ LinkRfu_Shutdown();
}
gLinkOpen = FALSE;
DisableSerial();
@@ -468,7 +468,7 @@ void LinkTestProcessKeyInput(void)
}
if (JOY_NEW(SELECT_BUTTON))
{
- sub_800AAC0();
+ Link_TryStartSend5FFF();
}
if (gLinkTestDebugValuesEnabled)
{
@@ -613,7 +613,7 @@ void ProcessRecvCmds(u8 unused)
linkPlayer->name[9] = 0;
linkPlayer->name[8] = 0;
}
- sub_800B284(linkPlayer);
+ IntlConvertLinkPlayerName(linkPlayer);
if (strcmp(block->magic1, sASCIIGameFreakInc) != 0
|| strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{
@@ -632,10 +632,10 @@ void ProcessRecvCmds(u8 unused)
}
break;
case LINKCMD_0x5FFF:
- gUnknown_3003F30[i] = TRUE;
+ gLinkCommand5FFFAck[i] = TRUE;
break;
case LINKCMD_0x2FFE:
- gUnknown_3003F2C[i] = TRUE;
+ gLinkCommand2FFEAck[i] = TRUE;
break;
case LINKCMD_0xAAAA:
sub_800A3CC();
@@ -701,7 +701,7 @@ void BuildSendCmd(u16 command)
break;
case LINKCMD_0x5FFF:
gSendCmd[0] = LINKCMD_0x5FFF;
- gSendCmd[1] = gUnknown_3003F34;
+ gSendCmd[1] = gLinkCmd5FFFparam;
break;
case LINKCMD_0x5566:
gSendCmd[0] = LINKCMD_0x5566;
@@ -721,7 +721,7 @@ void sub_8009FE8(void)
{
if (gWirelessCommType)
{
- sub_80F9828();
+ StartSendingKeysToRfu();
}
gLinkCallback = sub_800A040;
}
@@ -1312,54 +1312,54 @@ u8 sub_800AA74(void)
return gUnknown_3000E50;
}
-void sub_800AA80(u16 a0)
+void Link_StartSend5FFFwithParam(u16 a0)
{
if (gWirelessCommType == 1)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_BeginBuildAndSendCommand5F();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800AB0C;
- gUnknown_3003F24 = FALSE;
- gUnknown_3003F34 = a0;
+ gLinkCallback = LinkCB_BuildCommand5FFF;
+ gLinkAllAcked5FFF = FALSE;
+ gLinkCmd5FFFparam = a0;
}
}
}
-void sub_800AAC0(void)
+void Link_TryStartSend5FFF(void)
{
if (gWirelessCommType == 1)
{
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_BeginBuildAndSendCommand5F();
}
else
{
if (gLinkCallback != NULL)
{
- gUnknown_202285C++;
+ sStartSend5FFFfailures++;
}
else
{
- gLinkCallback = sub_800AB0C;
- gUnknown_3003F24 = FALSE;
- gUnknown_3003F34 = 0;
+ gLinkCallback = LinkCB_BuildCommand5FFF;
+ gLinkAllAcked5FFF = FALSE;
+ gLinkCmd5FFFparam = 0;
}
}
}
-static void sub_800AB0C(void)
+static void LinkCB_BuildCommand5FFF(void)
{
if (gLastRecvQueueCount == 0)
{
BuildSendCmd(LINKCMD_0x5FFF);
- gLinkCallback = sub_800AB38;
+ gLinkCallback = LinkCB_WaitAckCommand5FFF;
}
}
-static void sub_800AB38(void)
+static void LinkCB_WaitAckCommand5FFF(void)
{
int i;
unsigned count;
@@ -1369,7 +1369,7 @@ static void sub_800AB38(void)
count = 0;
for (i = 0; i < linkPlayerCount; i++)
{
- if (gUnknown_3003F30[i])
+ if (gLinkCommand5FFFAck[i])
{
count++;
}
@@ -1380,36 +1380,36 @@ static void sub_800AB38(void)
gLinkVSyncDisabled = TRUE;
CloseLink();
gLinkCallback = NULL;
- gUnknown_3003F24 = TRUE;
+ gLinkAllAcked5FFF = TRUE;
}
}
-void sub_800AB9C(void)
+void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void)
{
if (gWirelessCommType == 1)
{
- sub_80FA42C();
+ LinkRfu_SetRfuFuncToSend6600();
}
else
{
if (gLinkCallback == NULL)
{
- gLinkCallback = sub_800ABD4;
+ gLinkCallback = LinkFunc_Send2FFE_1;
}
- gUnknown_3003F24 = FALSE;
+ gLinkAllAcked5FFF = FALSE;
}
}
-static void sub_800ABD4(void)
+static void LinkFunc_Send2FFE_1(void)
{
if (gLastRecvQueueCount == 0)
{
BuildSendCmd(LINKCMD_0x2FFE);
- gLinkCallback = sub_800AC00;
+ gLinkCallback = LinkFunc_Send2FFE_2;
}
}
-static void sub_800AC00(void)
+static void LinkFunc_Send2FFE_2(void)
{
u8 i;
u8 linkPlayerCount;
@@ -1417,7 +1417,7 @@ static void sub_800AC00(void)
linkPlayerCount = GetLinkPlayerCount();
for (i = 0; i < linkPlayerCount; i++)
{
- if (!gUnknown_3003F2C[i])
+ if (!gLinkCommand2FFEAck[i])
{
break;
}
@@ -1426,7 +1426,7 @@ static void sub_800AC00(void)
{
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
- gUnknown_3003F2C[i] = FALSE;
+ gLinkCommand2FFEAck[i] = FALSE;
}
gLinkCallback = NULL;
}
@@ -1448,7 +1448,7 @@ static void CheckErrorStatus(void)
}
}
-void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
+void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
{
sLinkErrorBuffer.status = status;
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
@@ -1477,12 +1477,12 @@ void CB2_LinkError(void)
{
gWirelessCommType = 3;
}
- sub_80F85F8();
+ ResetLinkRfuGFLayer();
}
SetVBlankCallback(sub_800978C);
- ResetBgsAndClearDma3BusyFlags(0);
+ ResetBgsAndClearDma3BusyFlags(FALSE);
InitBgsFromTemplates(0, sLinkErrorBgTemplates, 2);
- gUnknown_2022860 = tilemapBuffer = malloc(0x800);
+ sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
SetBgTilemapBuffer(1, tilemapBuffer);
if (InitWindows(sLinkErrorWindowTemplates))
{
@@ -1603,12 +1603,12 @@ static void CB2_PrintErrorMessage(void)
bool8 GetSioMultiSI(void)
{
- return (REG_SIOCNT & 0x04) != 0;
+ return (REG_SIOCNT & SIO_MULTI_SI) != 0;
}
static bool8 IsSioMultiMaster(void)
{
- return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
+ return (REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI);
}
bool8 IsLinkConnectionEstablished(void)
@@ -1626,7 +1626,7 @@ bool8 HasLinkErrorOccurred(void)
return gLinkErrorOccurred;
}
-void sub_800B0B4(void)
+void PrepareLocalLinkPlayerBlock(void)
{
struct LinkPlayerBlock * block;
@@ -1638,7 +1638,7 @@ void sub_800B0B4(void)
memcpy(gBlockSendBuffer, block, sizeof(*block));
}
-void sub_800B110(u32 who)
+void LinkPlayerFromBlock(u32 who)
{
u8 who_ = who;
struct LinkPlayerBlock * block;
@@ -1647,7 +1647,7 @@ void sub_800B110(u32 who)
block = (struct LinkPlayerBlock *)gBlockRecvBuffer[who_];
player = &gLinkPlayers[who_];
*player = block->linkPlayer;
- sub_800B284(player);
+ IntlConvertLinkPlayerName(player);
if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{
SetMainCallback2(CB2_LinkError);
@@ -1670,8 +1670,8 @@ bool8 HandleLinkConnection(void)
}
else
{
- r4 = sub_80FAE94();
- r5 = sub_80FAEF0();
+ r4 = LinkRfuMain1();
+ r5 = LinkRfuMain2();
if (sub_8058318() == TRUE)
{
if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5)
@@ -1683,7 +1683,7 @@ bool8 HandleLinkConnection(void)
return FALSE;
}
-void sub_800B1F4(void)
+void SetWirelessCommType1(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -1691,7 +1691,7 @@ void sub_800B1F4(void)
}
}
-static void sub_800B210(void)
+static void SetWirelessCommType0(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -1699,7 +1699,7 @@ static void sub_800B210(void)
}
}
-void sub_800B22C(void)
+void SetWirelessCommType0_UnusedCopy(void)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -1725,7 +1725,7 @@ bool32 sub_800B270(void)
return FALSE;
}
-void sub_800B284(struct LinkPlayer * player)
+void IntlConvertLinkPlayerName(struct LinkPlayer * player)
{
player->name[10] = player->name[8];
ConvertInternationalString(player->name, player->language);
diff --git a/src/link_rfu.c b/src/link_rfu.c
deleted file mode 100644
index 8ab76ffd5..000000000
--- a/src/link_rfu.c
+++ /dev/null
@@ -1,1381 +0,0 @@
-#include "global.h"
-#include "librfu.h"
-#include "link_rfu.h"
-
-struct UnkRfuStruct_1 gUnknown_3005E10;
-
-static void sub_80FD4E4(void);
-static void sub_80FDC28(u32 a0);
-static void sub_80FDC98(u16 reqCommandId, u16 reqResult);
-static void sub_80FE394(u16 reqCommandId);
-static void sub_80FE418(void);
-static void sub_80FE63C(void);
-static void sub_80FE6F0(void);
-static void sub_80FE74C(void);
-static u8 sub_80FE778(void);
-static void sub_80FE7F0(u8 a0, u8 a1);
-static void sub_80FE818(u8 bmDisconnectSlot);
-static void sub_80FE83C(u8 a0);
-static void sub_80FE918(void);
-static void sub_80FEAF4(void);
-
-u32 sub_80FD3A4(void)
-{
- u32 id = rfu_REQBN_softReset_and_checkID();
- if (id == RFU_ID)
- gUnknown_3005E10.unk_08 = 1;
- if (gUnknown_3005E10.unk_04 != 0x17 && gUnknown_3005E10.unk_04 != 0x01)
- {
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- }
- gUnknown_3005E10.unk_07 = 0;
- gUnknown_3005E10.unk_0d = 0;
- gUnknown_3005E10.unk_01 = 0;
- gUnknown_3005E10.unk_00 = 0;
- gUnknown_3005E10.unk_06 = -1;
- sub_80FEAF4();
- return id;
-}
-
-void LinkRfu_REQ_SendData_HandleParentRelationship(u8 clockChangeFlag)
-{
- if (gRfuLinkStatus->parentChild == MODE_CHILD)
- {
- if (gUnknown_3005E10.unk_02 == TRUE)
- clockChangeFlag = TRUE;
- else
- clockChangeFlag = FALSE;
- }
- else
- gUnknown_3005E10.unk_03 = 0;
- rfu_REQ_sendData(clockChangeFlag);
-}
-
-s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16))
-{
- if (func1 == NULL)
- {
- return 4;
- }
- CpuFill16(0, &gUnknown_3005E10, sizeof(struct UnkRfuStruct_1));
- gUnknown_3005E10.unk_06 = -1;
- gUnknown_3005E10.unk_40 = func1;
- gUnknown_3005E10.unk_44 = func2;
- rfu_setMSCCallback(sub_80FE394);
- rfu_setREQCallback(sub_80FDC98);
- return 0;
-}
-
-static void sub_80FD484(void)
-{
- CpuFill16(0, &gUnknown_3005E10, offsetof(struct UnkRfuStruct_1, unk_40));
- gUnknown_3005E10.unk_06 = -1;
-}
-
-void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0)
-{
- sub_80FD4E4();
- gUnknown_3005E10.unk_04 = 1;
- gUnknown_3005E10.unk_05 = 2;
- gUnknown_3005E10.unk_3c = unk0;
- gUnknown_3005E10.unk_09 = unk0->unk_11;
- gUnknown_3005E10.unk_32 = unk0->unk_12;
- gUnknown_3005E10.unk_18 = unk0->unk_14;
- if (unk0->unk_10)
- {
- gUnknown_3005E10.unk_0b = 1;
- }
-}
-
-static void sub_80FD4E4(void)
-{
- u8 i;
-
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- gUnknown_3005E10.unk_06 = -1;
- gUnknown_3005E10.unk_07 = 0;
- gUnknown_3005E10.unk_10 = 0;
- gUnknown_3005E10.unk_0c = 0;
- gUnknown_3005E10.unk_24 = 0;
- gUnknown_3005E10.unk_30 = 0;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- gUnknown_3005E10.unk_28[i] = 0;
- gUnknown_3005E10.unk_34[i] = 0;
- }
-}
-
-void sub_80FD52C(void)
-{
- gUnknown_3005E10.unk_04 = 0x15;
-}
-
-u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6)
-{
- u8 i;
- const u16 *buffer;
-
- if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 != 0x08 || r5 != 1))
- {
- gUnknown_3005E10.unk_14 = 1;
- sub_80FE7F0(0xf3, 0x01);
- return 1;
- }
- if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
- {
- gUnknown_3005E10.unk_14 = 2;
- sub_80FE7F0(0xf3, 0x01);
- return 2;
- }
- for (i = 0, buffer = r6; i < 16; i++)
- {
- if (*buffer++ == 0xFFFF)
- {
- break;
- }
- }
- if (i == 16)
- {
- gUnknown_3005E10.unk_14 = 4;
- sub_80FE7F0(0xf3, 0x01);
- return 4;
- }
- if (r5 > 1)
- {
- gUnknown_3005E10.unk_07 = 1;
- r5 = 1;
- r7 = 0;
- }
- else
- {
- gUnknown_3005E10.unk_07 = 0;
- }
- if (r5 != 0)
- {
- gUnknown_3005E10.unk_04 = 5;
- }
- else
- {
- gUnknown_3005E10.unk_04 = 9;
- if (gUnknown_3005E10.unk_0b)
- {
- gUnknown_3005E10.unk_0b = 2;
- }
- }
- gUnknown_3005E10.unk_06 = r5;
- gUnknown_3005E10.unk_1a = r7;
- gUnknown_3005E10.unk_26 = r8;
- gUnknown_3005E10.unk_20 = r6;
- return 0;
-}
-
-u8 sub_80FD610(u16 parentId, u16 unk_1a)
-{
- u8 i;
-
- if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 < 9 || gUnknown_3005E10.unk_04 > 11))
- {
- gUnknown_3005E10.unk_14 = 1;
- sub_80FE7F0(0xF3, 0x01);
- return 1;
- }
- if (rfu_getMasterSlave() == AGB_CLK_SLAVE)
- {
- gUnknown_3005E10.unk_14 = 2;
- sub_80FE7F0(0xF3, 0x01);
- return 2;
- }
- for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
- {
- if (gRfuLinkStatus->partner[i].id == parentId)
- {
- break;
- }
- }
- if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount)
- {
- gUnknown_3005E10.unk_14 = 3;
- sub_80FE7F0(0xF3, 0x01);
- return 3;
- }
- if (gUnknown_3005E10.unk_04 == 0 || gUnknown_3005E10.unk_04 == 9)
- {
- gUnknown_3005E10.unk_04 = 12;
- gUnknown_3005E10.unk_05 = 13;
- }
- else
- {
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 12;
- }
- gUnknown_3005E10.unk_1e = parentId;
- gUnknown_3005E10.unk_1a = unk_1a;
- if (gUnknown_3005E10.unk_07 != 0)
- {
- gUnknown_3005E10.unk_07 = 7;
- }
- return 0;
-}
-
-static void sub_80FD6F4(u8 lossSlot)
-{
- u8 i;
-
- if (lossSlot & gUnknown_3005E10.unk_30)
- {
- gUnknown_3005E10.unk_30 &= ~lossSlot;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((lossSlot >> i) & 1)
- {
- gUnknown_3005E10.unk_34[i] = 0;
- }
- }
- i = gRfuLinkStatus->linkLossSlotFlag & lossSlot;
- if (i)
- {
- sub_80FE818(i);
- }
- gUnknown_3005E10.unk_14 = i;
- sub_80FE7F0(0x33, i);
- }
-}
-
-void sub_80FD760(bool8 a0)
-{
- u8 r2;
-
- r2 = 0;
- gUnknown_3005E10.unk_07 = 0;
- if (a0)
- {
- sub_80FD4E4();
- gUnknown_3005E10.unk_04 = 23;
- }
- else
- {
- switch (gUnknown_3005E10.unk_04)
- {
- case 5:
- gUnknown_3005E10.unk_04 = 8;
- gUnknown_3005E10.unk_05 = 0;
- r2 = 0x13;
- break;
- case 6:
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
- break;
- case 7:
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
- break;
- case 8:
- break;
- case 9:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x21;
- break;
- case 10:
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
- break;
- case 11:
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
- break;
- case 12:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x23;
- break;
- case 13:
- gUnknown_3005E10.unk_04 = 14;
- break;
- case 14:
- gUnknown_3005E10.unk_04 = 14;
- break;
- case 15:
- break;
- case 16:
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11;
- gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12;
- sub_80FE818(gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag;
- sub_80FE7F0(0x33, 0x01);
- return;
- case 17:
- gUnknown_3005E10.unk_04 = 18;
- break;
- case 18:
- gUnknown_3005E10.unk_04 = 18;
- break;
- default:
- gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_04 = 0;
- r2 = 0x43;
- break;
- }
- if (gUnknown_3005E10.unk_04 == 0)
- {
- sub_80FE7F0(r2, 0);
- }
- }
-}
-
-static bool8 sub_80FD850(u16 reqCommandId)
-{
- bool8 retVal;
- u8 i;
- u8 bmLinkLossSlot;
- u8 linkLossReason;
- u8 parentBmLinkRecoverySlot;
- u8 flags;
-
- retVal = FALSE;
- rfu_REQBN_watchLink(reqCommandId, &bmLinkLossSlot, &linkLossReason, &parentBmLinkRecoverySlot);
- if (bmLinkLossSlot)
- {
- gUnknown_3005E10.unk_14 = bmLinkLossSlot;
- gUnknown_3005E10.unk_16 = linkLossReason;
- if (gUnknown_3005E10.unk_09)
- {
- gUnknown_3005E10.unk_0a = 1;
- if (gUnknown_3005E10.unk_06 == 0 && linkLossReason == REASON_DISCONNECTED)
- {
- gUnknown_3005E10.unk_0a = 4;
- }
- if (gUnknown_3005E10.unk_0a == 1)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((bmLinkLossSlot >> i) & 1)
- {
- gUnknown_3005E10.unk_30 |= (1 << i);
- gUnknown_3005E10.unk_34[i] = gUnknown_3005E10.unk_32;
- }
- }
- sub_80FE7F0(0x31, 0x01);
- }
- else
- {
- gUnknown_3005E10.unk_0a = 0;
- sub_80FE818(bmLinkLossSlot);
- retVal = TRUE;
- sub_80FE7F0(0x33, 0x01);
- }
- }
- else
- {
- sub_80FE818(bmLinkLossSlot);
- retVal = TRUE;
- sub_80FE7F0(0x30, 0x02);
- }
- sub_80FEAF4();
- }
- if (gRfuLinkStatus->parentChild == MODE_PARENT)
- {
- if (parentBmLinkRecoverySlot)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((gUnknown_3005E10.unk_30 >> i) & 1 && (parentBmLinkRecoverySlot >> i) & 1)
- {
- gUnknown_3005E10.unk_34[i] = 0;
- }
- }
- gUnknown_3005E10.unk_30 &= ~parentBmLinkRecoverySlot;
- gUnknown_3005E10.unk_14 = parentBmLinkRecoverySlot;
- sub_80FE7F0(0x32, 0x01);
- }
- if (gUnknown_3005E10.unk_30)
- {
- flags = 0;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((gUnknown_3005E10.unk_30 >> i) & 1 && gUnknown_3005E10.unk_34[i] && --gUnknown_3005E10.unk_34[i] == 0)
- {
- gUnknown_3005E10.unk_30 &= ~(1 << i);
- flags |= (1 << i);
- }
- }
- if (flags)
- {
- sub_80FE818(flags);
- retVal = TRUE;
- gUnknown_3005E10.unk_14 = flags;
- sub_80FE7F0(0x33, 0x01);
- }
- }
- if (!gUnknown_3005E10.unk_30)
- {
- gUnknown_3005E10.unk_0a = 0;
- }
- }
- return retVal;
-}
-
-void LinkRfu_syncVBlank_(void)
-{
- if (rfu_syncVBlank())
- {
- sub_80FE7F0(0xF1, 0x00);
- sub_80FEAF4();
- }
-}
-
-void sub_80FDA30(u32 a0)
-{
- u8 r2;
-
- if (gUnknown_3005E10.unk_40 == NULL && gUnknown_3005E10.unk_04 != 0)
- {
- gUnknown_3005E10.unk_04 = 0;
- }
- else
- {
- if (gUnknown_3005E10.unk_07 != 0)
- {
- sub_80FDC28(a0);
- }
- do
- {
- if (gUnknown_3005E10.unk_04 != 0)
- {
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = 1;
- switch (gUnknown_3005E10.unk_04)
- {
- case 23:
- r2 = sub_80FD3A4() == RFU_ID ? 0x44 : 0xFF;
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(r2, 0);
- break;
- case 1:
- if (sub_80FD3A4() == RFU_ID)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 3;
- }
- else
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0xFF, 0);
- }
- break;
- case 2:
- rfu_REQ_reset();
- break;
- case 3:
- rfu_REQ_configSystem(gUnknown_3005E10.unk_3c->availSlotFlag, gUnknown_3005E10.unk_3c->maxMFrame, gUnknown_3005E10.unk_3c->mcTimer);
- break;
- case 4:
- rfu_REQ_configGameData(gUnknown_3005E10.unk_3c->mbootFlag, gUnknown_3005E10.unk_3c->serialNo, (const u8 *)gUnknown_3005E10.unk_3c->gname, gUnknown_3005E10.unk_3c->uname);
- break;
- case 5:
- rfu_REQ_startSearchChild();
- break;
- case 6:
- rfu_REQ_pollSearchChild();
- break;
- case 7:
- rfu_REQ_endSearchChild();
- break;
- case 8:
- break;
- case 9:
- rfu_REQ_startSearchParent();
- break;
- case 10:
- rfu_REQ_pollSearchParent();
- break;
- case 11:
- rfu_REQ_endSearchParent();
- break;
- case 12:
- rfu_REQ_startConnectParent(gUnknown_3005E10.unk_1e);
- break;
- case 13:
- rfu_REQ_pollConnectParent();
- break;
- case 14:
- rfu_REQ_endConnectParent();
- break;
- case 15:
- break;
- case 16:
- rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag);
- break;
- case 17:
- rfu_REQ_CHILD_pollConnectRecovery();
- break;
- case 18:
- rfu_REQ_CHILD_endConnectRecovery();
- break;
- case 19:
- rfu_REQ_changeMasterSlave();
- break;
- case 20:
- break;
- case 21:
- rfu_REQ_stopMode();
- break;
- case 22:
- break;
- }
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = 0;
- }
- } while (gUnknown_3005E10.unk_04 == 18 || gUnknown_3005E10.unk_04 == 19);
- if (gRfuLinkStatus->parentChild != MODE_PARENT || !sub_80FD850(0))
- {
- sub_80FE418();
- sub_80FE63C();
- sub_80FE74C();
- sub_80FE918();
- }
- }
-}
-
-static void sub_80FDC28(u32 a0)
-{
- if (gUnknown_3005E10.unk_07 == 5)
- {
- gUnknown_3005E10.unk_06 = 1;
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c;
- if (gUnknown_3005E10.unk_1a)
- {
- gUnknown_3005E10.unk_07 = 6;
- }
- else
- {
- gUnknown_3005E10.unk_07 = 1;
- }
- }
- if (gUnknown_3005E10.unk_07 == 1)
- {
- gUnknown_3005E10.unk_06 = 1;
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_1a = a0 % 140;
- gUnknown_3005E10.unk_1c = 140 - gUnknown_3005E10.unk_1a;
- if (gUnknown_3005E10.unk_1a)
- {
- gUnknown_3005E10.unk_07 = 2;
- }
- else
- {
- gUnknown_3005E10.unk_07 = 3;
- }
- }
- if (gUnknown_3005E10.unk_07 == 3)
- {
- gUnknown_3005E10.unk_06 = 0;
- gUnknown_3005E10.unk_1a = 40;
- gUnknown_3005E10.unk_07 = 4;
- gUnknown_3005E10.unk_04 = 9;
- }
-}
-
-static void sub_80FDC98(u16 reqCommandId, u16 reqResult)
-{
- u8 sp0;
- register u8 *stwiRecvBuffer asm("r0");
- u8 *tmp;
- u8 i;
-
- if (gUnknown_3005E10.unk_0e != 0)
- {
- gUnknown_3005E10.unk_0e = 0;
- switch (reqCommandId)
- {
- case ID_RESET_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 4;
- }
- break;
- case ID_SYSTEM_CONFIG_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 0;
- }
- break;
- case ID_GAME_CONFIG_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x00, 0x00);
- }
- break;
- case ID_SC_START_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 6;
- }
- break;
- case ID_SC_POLL_REQ:
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
- {
- gUnknown_3005E10.unk_04 = 7;
- gUnknown_3005E10.unk_05 = 8;
- }
- break;
- case ID_SC_END_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_05 = 0;
- if (gUnknown_3005E10.unk_07 == 0)
- {
- sub_80FE7F0(0x13, 0x00);
- }
- }
- break;
- case ID_SP_START_REQ:
- if (reqResult == 0)
- {
- if (gUnknown_3005E10.unk_0b == 1 && gUnknown_3005E10.unk_1a > 1)
- {
- gUnknown_3005E10.unk_1a--;
- }
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 10;
- }
- break;
- case ID_SP_POLL_REQ:
- if (reqResult == 0)
- {
- sp0 = sub_80FE778();
- gUnknown_3005E10.unk_14 = sp0;
- if (sp0)
- {
- sub_80FE7F0(0x20, 0x01);
- }
- if (gUnknown_3005E10.unk_0b && gUnknown_3005E10.unk_1a != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX)
- {
- rfu_REQ_endSearchParent();
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_04 = 9;
- gUnknown_3005E10.unk_0b = 1;
- }
- }
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
- {
- gUnknown_3005E10.unk_04 = 11;
- gUnknown_3005E10.unk_05 = 0;
- }
- break;
- case ID_SP_END_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- if (gUnknown_3005E10.unk_07 == 0)
- {
- if (gUnknown_3005E10.unk_04 == 0)
- {
- sub_80FE7F0(0x21, 0x00);
- }
- }
- else if (gUnknown_3005E10.unk_07 != 7)
- {
- gUnknown_3005E10.unk_04 = 5;
- gUnknown_3005E10.unk_07 = 5;
- }
- }
- break;
- case ID_CP_START_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 13;
- }
- break;
- case ID_CP_POLL_REQ:
- if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10) && !sp0)
- {
- gUnknown_3005E10.unk_04 = 14;
- }
- if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0)
- {
- gUnknown_3005E10.unk_04 = 14;
- }
- break;
- case ID_CP_END_REQ:
- if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10))
- {
- if (!sp0)
- {
- gUnknown_3005E10.unk_04 = 19;
- gUnknown_3005E10.unk_05 = 15;
- gUnknown_3005E10.unk_1e = 0x22;
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_10;
- }
- else
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- gUnknown_3005E10.unk_1e = 0x23;
- gUnknown_3005E10.unk_14 = sp0;
- if (gUnknown_3005E10.unk_07)
- {
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
- }
- }
- sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01);
- gUnknown_3005E10.unk_1e = 0;
- }
- break;
- case ID_CPR_START_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag;
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 17;
- for (gUnknown_3005E10.unk_10 = 0; gUnknown_3005E10.unk_10 < RFU_CHILD_MAX; gUnknown_3005E10.unk_10++)
- {
- if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_3005E10.unk_10) & 1)
- {
- break;
- }
- }
- }
- break;
- case ID_CPR_POLL_REQ:
- if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2)
- {
- gUnknown_3005E10.unk_04 = 18;
- }
- if (gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] && --gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] == 0)
- {
- gUnknown_3005E10.unk_04 = 18;
- }
- break;
- case ID_CPR_END_REQ:
- if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0))
- {
- if (!sp0)
- {
- gUnknown_3005E10.unk_04 = 19;
- gUnknown_3005E10.unk_05 = 22;
- gUnknown_3005E10.unk_1e = 0x32;
- }
- else
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE818(gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_1e = 0x33;
- }
- gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] = 0;
- gUnknown_3005E10.unk_30 = 0;
- gUnknown_3005E10.unk_0a = 0;
- sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01);
- gUnknown_3005E10.unk_1e = 0;
- }
- break;
- case ID_MS_CHANGE_REQ:
- if (reqResult == 0)
- {
- if (gUnknown_3005E10.unk_05 == 22)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11;
- gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12;
- gUnknown_3005E10.unk_02 = 1;
- sub_80FE7F0(0x41, 0x00);
- }
- else if (gUnknown_3005E10.unk_05 == 15)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_02 = 1;
- sub_80FE7F0(0x41, 0x00);
- gUnknown_3005E10.unk_24 |= 1 << gUnknown_3005E10.unk_10;
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = gUnknown_3005E10.unk_26;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- tmp = &sp0;
- *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_3005E10.unk_10, 0x0e);
- if (*tmp)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FEAF4();
- sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = sp0;
- sub_80FE7F0(0x25, 0x01);
- }
- }
- }
- break;
- case ID_STOP_MODE_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x42, 0x00);
- }
- break;
- }
- gUnknown_3005E10.unk_0e = 1;
- }
- else if (reqResult == 3 && gUnknown_3005E10.unk_0f && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ))
- {
- rfu_REQ_RFUStatus();
- rfu_waitREQComplete();
- rfu_getRFUStatus(&sp0);
- if (sp0 == 0 && gRfuLinkStatus->parentChild == MODE_CHILD)
- {
- stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data;
- stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag;
- stwiRecvBuffer[5] = 1;
- sub_80FD850(0x29);
- reqResult = 0;
- }
- }
- switch (reqCommandId)
- {
- case ID_DISCONNECT_REQ:
- if (reqResult == 0)
- {
- stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data;
- gUnknown_3005E10.unk_14 = stwiRecvBuffer[8];
- sub_80FE83C(gUnknown_3005E10.unk_14);
- if (gUnknown_3005E10.unk_30)
- {
- gUnknown_3005E10.unk_30 &= ~gUnknown_3005E10.unk_14;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((gUnknown_3005E10.unk_14 >> i) & 1)
- {
- gUnknown_3005E10.unk_34[i] = 0;
- }
- }
- if (gUnknown_3005E10.unk_06 == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- }
- }
- sp0 = gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if ((sp0 >> i) & 1 && gUnknown_3005E10.unk_01)
- {
- gUnknown_3005E10.unk_01--;
- }
- }
- gUnknown_3005E10.unk_00 &= ~gUnknown_3005E10.unk_14;
- if (gUnknown_3005E10.unk_07)
- {
- if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
- {
- if (gUnknown_3005E10.unk_07 == 8)
- {
- gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c;
- gUnknown_3005E10.unk_07 = 6;
- gUnknown_3005E10.unk_04 = 6;
- }
- else if (gUnknown_3005E10.unk_04 != 6 && gUnknown_3005E10.unk_04 != 7)
- {
- gUnknown_3005E10.unk_07 = 1;
- gUnknown_3005E10.unk_04 = 5;
- }
- }
- }
- if (gRfuLinkStatus->parentChild == MODE_NEUTRAL)
- {
- if (gUnknown_3005E10.unk_04 == 0)
- {
- gUnknown_3005E10.unk_06 = -1;
- }
- }
- if (gUnknown_3005E10.unk_0e == 0)
- {
- sub_80FE7F0(0x40, 0x01);
- }
- }
- break;
- case ID_DATA_RX_REQ:
- sub_80FE6F0();
- if (gRfuLinkStatus->parentChild != MODE_NEUTRAL)
- {
- sub_80FE7F0(0x50, 0x00);
- }
- break;
- case ID_RESET_REQ:
- case ID_STOP_MODE_REQ:
- if (reqResult == 0)
- {
- gUnknown_3005E10.unk_0d = 0;
- gUnknown_3005E10.unk_01 = 0;
- gUnknown_3005E10.unk_00 = 0;;
- gUnknown_3005E10.unk_06 = -1;
- sub_80FEAF4();
- if (reqCommandId == 61)
- {
- sub_80FD484();
- }
- }
- break;
- }
- if (reqResult != 0)
- {
- if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && gUnknown_3005E10.unk_07 == 4)
- {
- gRfuLinkStatus->parentChild = MODE_PARENT;
- gRfuLinkStatus->connSlotFlag = 0xF;
- sub_80FE818(15);
- rfu_waitREQComplete();
- return;
- }
- else
- {
- gUnknown_3005E10.unk_14 = reqCommandId;
- gUnknown_3005E10.unk_16 = reqResult;
- if (gUnknown_3005E10.unk_0e)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- }
- sub_80FE7F0(0xf0, 0x02);
- sub_80FEAF4();
- }
- }
- if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ)
- {
- sub_80FE7F0(0xf2, 0x00);
- sub_80FEAF4();
- }
-}
-
-static void sub_80FE394(u16 reqCommandId)
-{
- u8 r7;
- u8 ackFlag;
-
- r7 = gUnknown_3005E10.unk_0e;
- gUnknown_3005E10.unk_0e = 0;
- gUnknown_3005E10.unk_0f = 1;
- if (gRfuLinkStatus->parentChild == MODE_CHILD)
- {
- sub_80FD850(reqCommandId);
- if (gUnknown_3005E10.unk_02 != 1)
- {
- sub_80FEAF4();
- gUnknown_3005E10.unk_0f = 0;
- gUnknown_3005E10.unk_0e = r7;
- return;
- }
- }
- else
- {
- if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag))
- {
- gUnknown_3005E10.unk_03 |= ackFlag;
- }
- }
- if (gUnknown_3005E10.unk_44 != NULL)
- {
- gUnknown_3005E10.unk_44(reqCommandId);
- rfu_waitREQComplete();
- if (gUnknown_3005E10.unk_02 == 2)
- {
- sub_80FEAF4();
- }
- }
- gUnknown_3005E10.unk_0f = 0;
- gUnknown_3005E10.unk_0e = r7;
-}
-
-static void sub_80FE418(void)
-{
- u8 flags;
- u8 sp0;
- u8 i;
- u8 r5;
- u8 r4;
- const u16 *ptr;
-
- if (gUnknown_3005E10.unk_04 == 5 || gUnknown_3005E10.unk_04 == 6 || gUnknown_3005E10.unk_04 == 7 || gUnknown_3005E10.unk_04 == 8)
- {
- flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_3005E10.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag;
- gUnknown_3005E10.unk_0c = gRfuLinkStatus->connSlotFlag;
- if (flags)
- {
- gUnknown_3005E10.unk_14 = flags;
- sub_80FE7F0(0x10, 0x01);
- }
- sp0 = 0x00;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- r4 = 1 << i;
- r5 = 0x00;
- if (flags & r4)
- {
- gUnknown_3005E10.unk_28[i] = gUnknown_3005E10.unk_26;
- gUnknown_3005E10.unk_24 |= r4;
- }
- else if (gUnknown_3005E10.unk_24 & r4)
- {
- if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS)
- {
- if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information
- {
- r5 = 0x02;
- for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++)
- {
- if (gRfuLinkStatus->partner[i].serialNo == *ptr)
- {
- gUnknown_3005E10.unk_00 |= r4;
- gUnknown_3005E10.unk_01++;
- sp0 |= r4;
- r5 |= 0x01;
- break;
- }
- }
- if (!(r5 & 0x01))
- {
- r5 |= 0x04;
- }
- }
- }
- else if (--gUnknown_3005E10.unk_28[i] == 0)
- {
- r5 = 0x06;
- }
- if (r5 & 0x02)
- {
- gUnknown_3005E10.unk_24 &= ~r4;
- gUnknown_3005E10.unk_28[i] = 0;
- rfu_clearSlot(TYPE_NI_RECV, i);
- }
- if (r5 & 0x04)
- {
- gUnknown_3005E10.unk_0d |= r4;
- }
- }
- }
- if (sp0)
- {
- gUnknown_3005E10.unk_14 = sp0;
- sub_80FE7F0(0x11, 0x01);
- }
- if (gUnknown_3005E10.unk_0d)
- {
- r5 = 0x01;
- if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_3005E10.unk_03 & gUnknown_3005E10.unk_00) != gUnknown_3005E10.unk_00))
- {
- r5 = 0x00;
- }
- if (r5)
- {
- sub_80FE818(gUnknown_3005E10.unk_0d);
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_0d;
- gUnknown_3005E10.unk_0d = 0;
- sub_80FE7F0(0x12, 0x01);
- }
- }
- if (gUnknown_3005E10.unk_24 == 0 && gUnknown_3005E10.unk_04 == 8)
- {
- if (gUnknown_3005E10.unk_07 == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE7F0(0x14, 0x00);
- }
- else
- {
- if (gUnknown_3005E10.unk_07 == 2)
- {
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
- }
- else
- {
- gUnknown_3005E10.unk_07 = 1;
- gUnknown_3005E10.unk_04 = 5;
- }
- if (gUnknown_3005E10.unk_00)
- {
- gUnknown_3005E10.unk_1a = 0;
- gUnknown_3005E10.unk_07 = 8;
- gUnknown_3005E10.unk_04 = 5;
- }
- }
- }
- }
-}
-
-static void sub_80FE63C(void)
-{
- u16 imeBak = REG_IME;
- REG_IME = 0;
- if (gUnknown_3005E10.unk_04 == 15)
- {
- if (--gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_FAILED)
- {
- sub_80FEB14();
- gUnknown_3005E10.unk_04 = 24;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0;
- }
- }
- REG_IME = imeBak;
- if (gUnknown_3005E10.unk_04 == 24)
- {
- if (gUnknown_3005E10.unk_02 == 1)
- {
- sub_80FEB14();
- }
- if (gUnknown_3005E10.unk_02 == 0)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
- gUnknown_3005E10.unk_14 = 0;
- sub_80FE7F0(0x25, 0x01);
- }
- }
-}
-
-static void sub_80FE6F0(void)
-{
- if (gUnknown_3005E10.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_SUCCESS)
- {
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
- rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10);
- gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0;
- sub_80FE7F0(0x24, 0x00);
- }
-}
-
-static void sub_80FE74C(void)
-{
- if (gUnknown_3005E10.unk_06 == 0 && gUnknown_3005E10.unk_0a == 1)
- {
- gUnknown_3005E10.unk_11 = gUnknown_3005E10.unk_04;
- gUnknown_3005E10.unk_12 = gUnknown_3005E10.unk_05;
- gUnknown_3005E10.unk_04 = 16;
- gUnknown_3005E10.unk_05 = 17;
- gUnknown_3005E10.unk_0a = 2;
- }
-}
-
-static u8 sub_80FE778(void)
-{
- u8 i;
- const u16 *ptr;
- u8 flags = 0x00;
-
- for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
- {
- for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++)
- {
- if (gRfuLinkStatus->partner[i].serialNo == *ptr)
- {
- flags |= (1 << i);
- }
- }
- }
- return flags;
-}
-
-static void sub_80FE7F0(u8 a0, u8 a1)
-{
- if (gUnknown_3005E10.unk_40 != NULL)
- {
- gUnknown_3005E10.unk_40(a0, a1);
- }
- gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_16 = 0;
-}
-
-static void sub_80FE818(u8 a0)
-{
- u8 unk_0e_bak = gUnknown_3005E10.unk_0e;
- gUnknown_3005E10.unk_0e = 1;
- rfu_REQ_disconnect(a0);
- rfu_waitREQComplete();
- gUnknown_3005E10.unk_0e = unk_0e_bak;
-}
-
-static void sub_80FE83C(u8 a0)
-{
- u8 i;
-
- if (gRfuLinkStatus->sendSlotNIFlag)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & a0)
- {
- rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0);
- }
- }
- }
- if (gRfuLinkStatus->recvSlotNIFlag)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & a0)
- {
- rfu_NI_stopReceivingData(i);
- }
- }
- }
- if (gRfuLinkStatus->sendSlotUNIFlag)
- {
- gRfuLinkStatus->sendSlotUNIFlag &= ~a0;
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && a0 & gRfuSlotStatusUNI[i]->send.bmSlot)
- {
- gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0;
- }
- }
- }
-}
-
-static void sub_80FE918(void)
-{
- u8 i;
- u8 j;
- u8 flags;
-
- if (gUnknown_3005E10.unk_18)
- {
- if (gRfuLinkStatus->sendSlotNIFlag)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG)
- {
- flags = 0;
- for (j = 0; j < RFU_CHILD_MAX; j++)
- {
- if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_3005E10.unk_18)
- {
- flags |= (1 << j);
- }
- if (flags)
- {
- rfu_changeSendTarget(TYPE_NI, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot);
- }
- }
- }
- }
- }
- if (gRfuLinkStatus->recvSlotNIFlag)
- {
- for (i = 0; i < RFU_CHILD_MAX; i++)
- {
- if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_3005E10.unk_18)
- {
- rfu_NI_stopReceivingData(i);
- }
- }
- }
- }
-}
-
-void sub_80FEA10(void (*func)(u16))
-{
- gUnknown_3005E10.unk_44 = func;
- rfu_setMSCCallback(sub_80FE394);
-}
-
-static void sub_80FEA28(void (*func)(u8, u8))
-{
- gUnknown_3005E10.unk_40 = func;
-}
-
-u8 sub_80FEA34(u8 a0, u16 a1)
-{
- u16 imeBak;
- if (gUnknown_3005E10.unk_09 && a0 == 0 && gUnknown_3005E10.unk_30)
- {
- return 5;
- }
- imeBak = REG_IME;
- REG_IME = 0;
- gUnknown_3005E10.unk_09 = a0;
- gUnknown_3005E10.unk_32 = a1;
- REG_IME = imeBak;
- return 0;
-}
-
-static u8 sub_80FEA78(u16 a0)
-{
- if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag)
- {
- gUnknown_3005E10.unk_14 = 6;
- sub_80FE7F0(0xf3, 0x01);
- return 6;
- }
- gUnknown_3005E10.unk_18 = a0;
- return 0;
-}
-
-static u8 sub_80FEAB4(u8 a0)
-{
- if (gUnknown_3005E10.unk_04 == 9 || gUnknown_3005E10.unk_04 == 10 || gUnknown_3005E10.unk_04 == 11)
- {
- gUnknown_3005E10.unk_14 = 7;
- sub_80FE7F0(0xf3, 0x01);
- return 7;
- }
- if (a0)
- {
- gUnknown_3005E10.unk_0b = 1;
- }
- else
- {
- gUnknown_3005E10.unk_0b = 0;
- }
- return 0;
-}
-
-static void sub_80FEAF4(void)
-{
- if (gUnknown_3005E10.unk_02)
- {
- gUnknown_3005E10.unk_02 = 0;
- sub_80FE7F0(0x45, 0x00);
- }
-}
-
-void sub_80FEB14(void)
-{
- if (gUnknown_3005E10.unk_02 == 0)
- {
- sub_80FE7F0(0x45, 0x00);
- }
- else if (gUnknown_3005E10.unk_02 == 1)
- {
- gUnknown_3005E10.unk_02 = 2;
- }
-}
-
-void sub_80FEB3C(void)
-{
- if (gUnknown_3005E10.unk_07)
- {
- switch (gUnknown_3005E10.unk_04)
- {
- case 5:
- gUnknown_3005E10.unk_07 = 3;
- gUnknown_3005E10.unk_04 = 9;
- break;
- case 6:
- gUnknown_3005E10.unk_07 = 2;
- gUnknown_3005E10.unk_1a = 1;
- break;
- case 7:
- case 8:
- gUnknown_3005E10.unk_07 = 2;
- break;
- case 9:
- case 10:
- gUnknown_3005E10.unk_1a = 40;
- break;
- case 11:
- gUnknown_3005E10.unk_1a = 40;
- gUnknown_3005E10.unk_04 = 10;
- break;
- }
- }
-}
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 17f604ee8..2259e9214 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -12,67 +12,69 @@
#include "string_util.h"
#include "task.h"
#include "constants/species.h"
+#include "constants/union_room.h"
-struct UnkRfuStruct_8010A14{
- char unk_00[15]; // PokemonSioInfo
- u8 unk_0f;
- u8 unk_10[4];
- struct LinkPlayer unk_14[5];
+struct SioInfo
+{
+ char magic[15]; // PokemonSioInfo
+ u8 playerCount;
+ u8 linkPlayerIdx[RFU_CHILD_MAX];
+ struct LinkPlayer linkPlayers[MAX_RFU_PLAYERS];
u8 fill_a0[0x5c];
};
-static EWRAM_DATA struct UnkLinkRfuStruct_02022B2C sRfuReqConfig = {};
+static EWRAM_DATA struct InitializeParametersTag sRfuReqConfig = {};
static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {};
-static struct RfuAPIBuffer gRfuAPIBuffer;
-static u8 gUnknown_3001FF8[14];
-static u16 gUnknown_3002008[7];
+static u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4];
+static u8 sResendBlock8[14];
+static u16 sResendBlock16[7];
struct GFtgtGname gHostRFUtgtGnameBuffer;
-struct UnkRfuStruct_2 Rfu;
-u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH];
+GF_RFU_MANAGER Rfu;
+u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1];
static void sub_80F8AA4(void);
static void sub_80F8AEC(void);
-static void sub_80F8D20(u16 a0);
-static void sub_80F8DA8(u16 a0);
+static void MscCallback_Child(u16 a0);
+static void MSCCallback_SetUnkCDB(u16 a0);
static void sub_80F906C(void);
-static void sub_80F9868(u8 unused);
-static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data);
-static void sub_80F9D04(u16 command);
-static void rfufunc_80F9F44(void);
-static void sub_80F9FA8(void);
-static void rfufunc_80FA020(void);
+static void RfuHandleReceiveCommand(u8 unused);
+static void ResetSendDataManager(struct RfuBlockSend *data);
+static void RfuPrepareSendBuffer(u16 command);
+static void RfuFunc_HandleBlockSend(void);
+static void RfuFunc_SendNextBlock(void);
+static void RfuFunc_SendLastBlock(void);
static void CallRfuFunc(void);
static void sub_80FA738(void);
static int sub_80FA788(void);
static void sub_80FA834(u8 taskId);
static void sub_80FA9D0(u16 a0);
-static void sub_80FAA58(void * a0);
-static void sub_80FAA94(u8 taskId);
+static void ValidateAndReceivePokemonSioInfo(void * a0);
+static void Task_ExchangeLinkPlayers(u8 taskId);
static void sub_80FACF0(u8 taskId);
-static void sub_80FB0E8(u32 a0);
-static void sub_80FB564(s32 a0);
+static void GetLinkmanErrorParams(u32 msg);
+static void sub_80FB564(s32 bmConnectedFlag);
static void sub_80FBB74(void);
-static u8 sub_80FBC70(const u8 *a0, u16 a1);
-static void sub_80FBCF8(u32 a0);
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId);
+static void RfuReqDisconnectSlot(u32 bmDisconnectSlot);
static void sub_80FBE20(u32 a0, u32 a1);
static void sub_80FC028(u8 taskId);
-static void sub_80FC208(void);
-static void nullsub_89(u8 taskId);
+static void rfu_dbg_clear(void);
+static void Task_idle(u8 taskId);
-static const struct UnkLinkRfuStruct_02022B2C sRfuReqConfigTemplate = {
+static const struct InitializeParametersTag sRfuReqConfigTemplate = {
.maxMFrame = 4,
- .mcTimer = 32,
- .availSlotFlag = 0,
- .mbootFlag = 0,
+ .MC_TimerCount = 32,
+ .availSlot_flag = 0,
+ .mboot_flag = 0,
.serialNo = 0x0002,
- .gname = &gHostRFUtgtGnameBuffer,
- .uname = gHostRFUtgtUnameBuffer,
- .unk_10 = 0x01,
- .unk_11 = 0x00,
- .unk_12 = 0x0258,
- .unk_14 = 0x012c
+ .gameName = (void *)&gHostRFUtgtGnameBuffer,
+ .userName = gHostRFUtgtUnameBuffer,
+ .fastSearchParent_flag = TRUE,
+ .linkRecovery_enable = FALSE,
+ .linkRecovery_period = 600,
+ .NI_failCounter_limit = 300
};
static const u8 sAvailSlots[] = {
@@ -82,7 +84,7 @@ static const u8 sAvailSlots[] = {
[4] = AVAIL_SLOT4
};
-static const u32 gUnknown_843EBD4[] = {
+static const u32 sAllBlocksReceived[] = {
0x000000,
0x000001,
0x000003,
@@ -138,8 +140,10 @@ static const struct {
{ gBlockSendBuffer, 40 }
};
-static const u16 gUnknown_843EC8C[] = {
- 0x0002, 0x7f7d, 0xFFFF
+static const u16 sAcceptedSerialNos[] = {
+ 0x0002, // Pokemon FR/LG/EM
+ 0x7f7d,
+ 0xFFFF
};
static const char sUnref_843EC92[][15] = {
@@ -166,38 +170,38 @@ static const char sUnref_843ED37[][16] = {
static const TaskFunc gUnknown_843ED88[] = {
sub_80FA834,
- sub_80FAA94,
+ Task_ExchangeLinkPlayers,
sub_80FACF0
};
-static void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2)
+static void rfu_dbg_print_str(const void *string, u8 x, u8 y)
{
// debug?
}
-static void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
+static void rfu_dbg_print_num(u16 num, u8 x, u8 y, u8 ndigits)
{
}
-void sub_80F85F8(void)
+void ResetLinkRfuGFLayer(void)
{
s32 i;
- u8 unk_ee_bak = Rfu.unk_ee;
+ u8 errorState_bak = Rfu.errorState;
CpuFill16(0, &Rfu, sizeof Rfu);
- Rfu.unk_0c = 0xFF;
- Rfu.unk_ee = unk_ee_bak;
- if (Rfu.unk_ee != 4)
+ Rfu.parent_child = MODE_NEUTRAL;
+ Rfu.errorState = errorState_bak;
+ if (Rfu.errorState != 4)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
for (i = 0; i < 5; i++)
{
- sub_80F9CB4(Rfu.unk_80 + i);
+ ResetSendDataManager(Rfu.cmd_8800_recvbuf + i);
}
- sub_80F9CB4(&Rfu.unk_6c);
- sub_80FC478(&Rfu.unk_124);
- sub_80FC4D4(&Rfu.unk_9e8);
+ ResetSendDataManager(&Rfu.cmd_8800_sendbuf);
+ RFU_queue_20_70_reset(&Rfu.unk_124);
+ RFU_queue_40_14_reset(&Rfu.unk_9e8);
CpuFill16(0, gSendCmd, sizeof gSendCmd);
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
@@ -218,46 +222,46 @@ void InitRFU(void)
void sub_80F86F4(void)
{
- if (!rfu_initializeAPI(&gRfuAPIBuffer, sizeof gRfuAPIBuffer, gIntrTable + 1, TRUE))
+ if (!rfu_initializeAPI(gf_rfu_REQ_api, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE))
{
gLinkType = 0;
sub_80FB128(FALSE);
- sub_80F85F8();
+ ResetLinkRfuGFLayer();
rfu_setTimerInterrupt(3, gIntrTable + 2);
}
}
-static void sub_80F8738(u8 taskId)
+static void Task_LinkLeaderSearchForChildren(u8 taskId)
{
sub_80FA738();
- switch (Rfu.unk_04)
+ switch (Rfu.state)
{
case 0:
- sub_80FD4B0(&sRfuReqConfig);
- Rfu.unk_04 = 1;
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
+ Rfu.state = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 2:
- sub_80FD538(Rfu.unk_0c, 0, 240, gUnknown_843EC8C);
- Rfu.unk_04 = 3;
+ rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16*)sAcceptedSerialNos);
+ Rfu.state = 3;
gTasks[taskId].data[1] = 6;
break;
case 3:
break;
case 4:
- sub_80FD760(FALSE);
- Rfu.unk_04 = 5;
+ rfu_LMAN_stopManager(0);
+ Rfu.state = 5;
break;
case 5:
break;
case 18:
Rfu.unk_cdb = 0;
- sub_80FEA10(sub_80F8DA8);
+ rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB);
sub_80F8AA4();
sub_80F8AEC();
- Rfu.unk_04 = 20;
+ Rfu.state = 20;
gTasks[taskId].data[1] = 8;
CreateTask(sub_80FA834, 5);
DestroyTask(taskId);
@@ -282,7 +286,7 @@ static void sub_80F887C(s32 r2, s32 r5)
{
if (r2 & 1)
{
- Rfu.unk_cde[i] = r4;
+ Rfu.linkPlayerIdx[i] = r4;
r4++;
}
}
@@ -293,12 +297,12 @@ static void sub_80F887C(s32 r2, s32 r5)
{
if (!(r1 & 1))
{
- Rfu.unk_cde[i] = 0;
+ Rfu.linkPlayerIdx[i] = 0;
}
}
for (r4 = 4; r4 != 0; r4--)
{
- for (i = 0; i < RFU_CHILD_MAX && Rfu.unk_cde[i] != r4; i++);
+ for (i = 0; i < RFU_CHILD_MAX && Rfu.linkPlayerIdx[i] != r4; i++);
if (i == 4)
{
r6 = r4;
@@ -308,26 +312,26 @@ static void sub_80F887C(s32 r2, s32 r5)
{
if (r5 & 1)
{
- Rfu.unk_cde[i] = r6++;
+ Rfu.linkPlayerIdx[i] = r6++;
}
}
}
}
-static void sub_80F893C(u8 taskId)
+static void Task_JoinGroupSearchForParent(u8 taskId)
{
- switch (Rfu.unk_04)
+ switch (Rfu.state)
{
case 0:
- sub_80FD4B0(&sRfuReqConfigTemplate);
- Rfu.unk_04 = 1;
+ rfu_LMAN_initializeRFU((INIT_PARAM*)&sRfuReqConfigTemplate);
+ Rfu.state = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 6:
- sub_80FD538(Rfu.unk_0c, 0, 0xf0, gUnknown_843EC8C);
- Rfu.unk_04 = 7;
+ rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16*)sAcceptedSerialNos);
+ Rfu.state = 7;
gTasks[taskId].data[1] = 7;
break;
case 7:
@@ -339,11 +343,11 @@ static void sub_80F893C(u8 taskId)
switch (sub_80FA788())
{
case 5:
- Rfu.unk_04 = 12;
+ Rfu.state = 12;
break;
case 6:
case 9:
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 2;
DestroyTask(taskId);
break;
@@ -351,15 +355,15 @@ static void sub_80F893C(u8 taskId)
break;
case 12:
{
- u8 r5 = 1 << Rfu.unk_c3e;
- rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.unk_c3e);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
- rfu_UNI_setSendData(r5, Rfu.unk_4c, sizeof(Rfu.unk_4c));
+ u8 bmChildSlot = 1 << Rfu.child_slot;
+ rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.child_slot);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
+ rfu_UNI_setSendData(bmChildSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c));
gTasks[taskId].data[1] = 8;
DestroyTask(taskId);
if (gUnknown_203AC08.unk_0f == 0)
{
- sub_80FC208();
+ rfu_dbg_clear();
gUnknown_203AC08.unk_0f++;
}
CreateTask(sub_80FA834, 5);
@@ -371,56 +375,56 @@ static void sub_80F893C(u8 taskId)
static void sub_80F8AA4(void)
{
u8 i;
- u8 r5 = gUnknown_3005E10.unk_00;
+ u8 acceptSlot = lman.acceptSlot_flag;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (r5 & 1)
+ if (acceptSlot & 1)
{
rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i]));
rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i);
}
- r5 >>= 1;
+ acceptSlot >>= 1;
}
}
static void sub_80F8AEC(void)
{
- u8 r5 = gUnknown_3005E10.unk_00;
- rfu_UNI_setSendData(r5, Rfu.unk_c87, sizeof(Rfu.unk_c87));
- Rfu.unk_cda = sub_80F886C(r5);
- Rfu.unk_ce2 = r5;
- sub_80F887C(r5, -1);
- Rfu.unk_0c = 1;
+ u8 acceptSlot = lman.acceptSlot_flag;
+ rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, sizeof(Rfu.recvCmds));
+ Rfu.unk_cda = sub_80F886C(acceptSlot);
+ Rfu.bm_PartnerFlags = acceptSlot;
+ sub_80F887C(acceptSlot, -1);
+ Rfu.parent_child = MODE_PARENT;
}
-static void sub_80F8B34(u8 taskId)
+static void Task_LinkRfu_UnionRoomListen(u8 taskId)
{
- if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetErrorStatus() == 4)
{
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
- sub_80FB9E4(0, 0);
+ RfuSetErrorStatus(0, 0);
}
- switch (Rfu.unk_04)
+ switch (Rfu.state)
{
case 0:
- sub_80FD4B0(&sRfuReqConfig);
- Rfu.unk_04 = 1;
+ rfu_LMAN_initializeRFU(&sRfuReqConfig);
+ Rfu.state = 1;
gTasks[taskId].data[1] = 1;
break;
case 1:
break;
case 17:
- sub_80FD538(2, 0, 240, gUnknown_843EC8C);
- sub_80FEA10(sub_80F8D20);
- Rfu.unk_04 = 18;
+ rfu_LMAN_establishConnection(2, 0, 240, (u16*)sAcceptedSerialNos);
+ rfu_LMAN_setMSCCallback(MscCallback_Child);
+ Rfu.state = 18;
break;
case 18:
break;
case 13:
- if (rfu_UNI_setSendData(1 << Rfu.unk_c3e, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0)
+ if (rfu_UNI_setSendData(1 << Rfu.child_slot, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0)
{
- Rfu.unk_0c = 0;
+ Rfu.parent_child = MODE_CHILD;
DestroyTask(taskId);
if (gTasks[taskId].data[7])
{
@@ -433,38 +437,38 @@ static void sub_80F8B34(u8 taskId)
}
break;
case 14:
- sub_80FD760(0);
- Rfu.unk_04 = 15;
+ rfu_LMAN_stopManager(0);
+ Rfu.state = 15;
break;
case 15:
break;
case 16:
Rfu.unk_cdb = 0;
- sub_80FEA10(sub_80F8DA8);
- sub_80FAFE0(1);
+ rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB);
+ UpdateGameData_GroupLockedIn(1);
sub_80F8AA4();
sub_80F8AEC();
- Rfu.unk_04 = 20;
+ Rfu.state = 20;
gTasks[taskId].data[1] = 8;
- Rfu.unk_0c = 1;
+ Rfu.parent_child = MODE_PARENT;
CreateTask(sub_80FA834, 5);
- Rfu.unk_ce8 = 1;
+ Rfu.unk_ce8 = TRUE;
DestroyTask(taskId);
break;
}
}
-void sub_80F8CFC(void)
+void LinkRfu_CreateConnectionAsParent(void)
{
- sub_80FD538(1, 0, 240, gUnknown_843EC8C);
+ rfu_LMAN_establishConnection(MODE_PARENT, 0, 240, (u16*)sAcceptedSerialNos);
}
-void sub_80F8D14(void)
+void LinkRfu_StopManagerBeforeEnteringChat(void)
{
- sub_80FD760(FALSE);
+ rfu_LMAN_stopManager(0);
}
-static void sub_80F8D20(u16 unused)
+static void MscCallback_Child(u16 unused)
{
s32 i;
@@ -474,53 +478,53 @@ static void sub_80F8D20(u16 unused)
}
rfu_REQ_recvData();
rfu_waitREQComplete();
- if (gRfuSlotStatusUNI[Rfu.unk_c3e]->recv.newDataFlag)
+ if (gRfuSlotStatusUNI[Rfu.child_slot]->recv.newDataFlag)
{
Rfu.unk_cd0++;
- sub_80FC588(&Rfu.unk_124, Rfu.unk_c3f);
+ RFU_queue_20_70_recv(&Rfu.unk_124, Rfu.unk_c3f);
gUnknown_203AC08.unk_06++;
sub_80F906C();
- rfu_UNI_readySendData(Rfu.unk_c3e);
- rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e);
+ rfu_UNI_readySendData(Rfu.child_slot);
+ rfu_UNI_clearRecvNewDataFlag(Rfu.child_slot);
}
- LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+ rfu_LMAN_REQ_sendData(TRUE);
}
-static void sub_80F8DA8(u16 unused)
+static void MSCCallback_SetUnkCDB(u16 unused)
{
Rfu.unk_cdb = 1;
}
-void sub_80F8DC0(void)
+void LinkRfu_Shutdown(void)
{
u8 i;
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- sub_80FD52C();
- if (Rfu.unk_0c == 1)
+ rfu_LMAN_powerDownRFU();
+ if (Rfu.parent_child == MODE_PARENT)
{
- if (FuncIsActiveTask(sub_80F8738) == TRUE)
+ if (FuncIsActiveTask(Task_LinkLeaderSearchForChildren) == TRUE)
{
DestroyTask(Rfu.unk_67);
- sub_80F85F8();
+ ResetLinkRfuGFLayer();
}
}
- else if (Rfu.unk_0c == 0)
+ else if (Rfu.parent_child == MODE_CHILD)
{
- if (FuncIsActiveTask(sub_80F893C) == TRUE)
+ if (FuncIsActiveTask(Task_JoinGroupSearchForParent) == TRUE)
{
DestroyTask(Rfu.unk_67);
- sub_80F85F8();
+ ResetLinkRfuGFLayer();
}
}
- else if (Rfu.unk_0c == 2)
+ else if (Rfu.parent_child == 2)
{
- if (FuncIsActiveTask(sub_80F8B34) == TRUE)
+ if (FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE)
{
DestroyTask(Rfu.unk_67);
- sub_80F85F8();
+ ResetLinkRfuGFLayer();
}
}
for (i = 0; i < NELEMS(gUnknown_843ED88); i++)
@@ -532,59 +536,59 @@ void sub_80F8DC0(void)
}
}
-static void sub_80F8E74(void)
+static void CreateTask_LinkLeaderSearchForChildren(void)
{
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- Rfu.unk_67 = CreateTask(sub_80F8738, 1);
+ Rfu.unk_67 = CreateTask(Task_LinkLeaderSearchForChildren, 1);
}
-static bool8 sub_80F8EA4(void)
+static bool8 RfuStateIs7AndPlayerIsChild(void)
{
- if (Rfu.unk_04 == 7 && Rfu.unk_ccd)
+ if (Rfu.state == 7 && Rfu.parentId)
{
return TRUE;
}
return FALSE;
}
-static bool32 sub_80F8ECC(void)
+static bool32 IsParentSuccessfullyReconnected(void)
{
- if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
+ if (Rfu.state == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.reconnectedParentIdx].id, 240))
{
- Rfu.unk_04 = 9;
+ Rfu.state = 9;
return TRUE;
}
return FALSE;
}
-static void sub_80F8F10(void)
+static void CreateTask_JoinGroupSearchForParent(void)
{
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- Rfu.unk_67 = CreateTask(sub_80F893C, 1);
+ Rfu.unk_67 = CreateTask(Task_JoinGroupSearchForParent, 1);
}
-bool8 sub_80F8F40(void)
+bool8 LmanAcceptSlotFlagIsNotZero(void)
{
- if (gUnknown_3005E10.unk_00)
+ if (lman.acceptSlot_flag)
{
return TRUE;
}
return FALSE;
}
-void sub_80F8F5C(void)
+void LinkRfu_StopManagerAndFinalizeSlots(void)
{
- Rfu.unk_04 = 4;
- Rfu.unk_ce7 = gUnknown_3005E10.unk_00;
+ Rfu.state = 4;
+ Rfu.acceptSlot_flag = lman.acceptSlot_flag;
}
-bool32 sub_80F8F7C(bool32 a0)
+bool32 WaitRfuState(bool32 force)
{
- if (Rfu.unk_04 == 17 || a0)
+ if (Rfu.state == 17 || force)
{
- Rfu.unk_04 = 18;
+ Rfu.state = 18;
return TRUE;
}
return FALSE;
@@ -592,7 +596,7 @@ bool32 sub_80F8F7C(bool32 a0)
void sub_80F8FA0(void)
{
- Rfu.unk_04 = 14;
+ Rfu.state = 14;
}
static void sub_80F8FAC(u8 a0)
@@ -616,11 +620,11 @@ static void sub_80F8FD4(void)
for (i = 0; i < 5; i++)
{
- struct UnkRfuStruct_2 *ptr = &Rfu;
+ GF_RFU_MANAGER *ptr = &Rfu;
for (j = 0; j < 7; j++)
{
- ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8;
- ptr->unk_c87[i][j][0] = gRecvCmds[i][j];
+ ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8;
+ ptr->recvCmds[i][j][0] = gRecvCmds[i][j];
}
}
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
@@ -643,8 +647,8 @@ static void sub_80F906C(void)
{
if (Rfu.unk_c3c)
{
- u8 r2 = sub_80FC888(&Rfu.unk_c1c, Rfu.unk_4c);
- if (Rfu.unk_c1c.unk_1e == 0)
+ u8 r2 = RFU_queue_2_14_send(&Rfu.unk_c1c, Rfu.unk_4c);
+ if (Rfu.unk_c1c.count == 0)
{
Rfu.unk_c3c = 0;
}
@@ -655,8 +659,8 @@ static void sub_80F906C(void)
}
if (Rfu.unk_c3c == 0)
{
- sub_80FC79C(&Rfu.unk_9e8, Rfu.unk_4c);
- sub_80FC828(&Rfu.unk_c1c, Rfu.unk_4c);
+ RFU_queue_40_14_send(&Rfu.unk_9e8, Rfu.unk_4c);
+ RFU_queue_2_14_recv(&Rfu.unk_c1c, Rfu.unk_4c);
}
}
@@ -684,39 +688,39 @@ bool32 IsRfuRecvQueueEmpty(void)
static bool32 sub_80F911C(void)
{
- if (Rfu.unk_04 < 20)
+ if (Rfu.state < 20)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- LinkRfu_REQ_SendData_HandleParentRelationship(FALSE);
+ rfu_LMAN_REQ_sendData(FALSE);
}
else
{
Rfu.unk_cdb = 0;
- if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag))
+ if ((Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag) == Rfu.bm_PartnerFlags && (Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag))
{
if (!Rfu.unk_cdc)
{
- if (Rfu.unk_ce3)
+ if (Rfu.bm_DisconnectSlot)
{
- sub_80FBCF8(Rfu.unk_ce3);
- Rfu.unk_ce3 = 0;
+ RfuReqDisconnectSlot(Rfu.bm_DisconnectSlot);
+ Rfu.bm_DisconnectSlot = 0;
if (Rfu.unk_ce4 == 1)
{
- sub_80FB9E4(2, 0x8000);
- sub_80FB0E8(0x8000);
+ RfuSetErrorStatus(2, 0x8000);
+ GetLinkmanErrorParams(0x8000);
return FALSE;
}
- if (!gUnknown_3005E10.unk_00)
+ if (!lman.acceptSlot_flag)
{
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gReceivedRemoteLinkPlayers = 0;
return FALSE;
}
}
sub_80F8FD4();
rfu_UNI_readySendData(Rfu.unk_cda);
- LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+ rfu_LMAN_REQ_sendData(TRUE);
}
else
{
@@ -736,23 +740,23 @@ static bool32 sub_80F9204(void)
u16 j;
u8 retval;
- if (Rfu.unk_04 >= 20 && Rfu.unk_0e == 1)
+ if (Rfu.state >= 20 && Rfu.unk_0e == 1)
{
rfu_waitREQComplete();
while (Rfu.unk_cdb == 0)
{
- if (Rfu.unk_ee != 0)
+ if (Rfu.errorState != 0)
{
return FALSE;
}
}
rfu_REQ_recvData();
rfu_waitREQComplete();
- if ((gUnknown_3005E10.unk_03 & Rfu.unk_ce2) == Rfu.unk_ce2)
+ if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags)
{
Rfu.unk_cdc = 0;
gUnknown_203AC08.unk_06++;
- flags = gUnknown_3005E10.unk_00;
+ flags = lman.acceptSlot_flag;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
if (flags & 1)
@@ -762,14 +766,14 @@ static bool32 sub_80F9204(void)
if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7))
{
if (++Rfu.unk_cea[i] > 4)
- sub_80FB0E8(0x8100);
+ GetLinkmanErrorParams(0x8100);
}
else
{
Rfu.unk_cee[i] = Rfu.unk_14[i][0] / 32;
Rfu.unk_cea[i] = 0;
Rfu.unk_14[i][0] &= 0x1f;
- r0 = Rfu.unk_cde[i];
+ r0 = Rfu.linkPlayerIdx[i];
for (j = 0; j < 7; j++)
{
gRecvCmds[r0][j] = (Rfu.unk_14[i][(j << 1) + 1] << 8) | Rfu.unk_14[i][(j << 1) + 0];
@@ -783,7 +787,7 @@ static bool32 sub_80F9204(void)
flags >>= 1;
}
sub_80F9038();
- sub_80F9868(0);
+ RfuHandleReceiveCommand(0);
CallRfuFunc();
if (Rfu.unk_ce5 && !Rfu.unk_cd9)
{
@@ -796,13 +800,13 @@ static bool32 sub_80F9204(void)
rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i]));
}
}
- sub_80F887C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5);
+ sub_80F887C(Rfu.bm_PartnerFlags, Rfu.bm_PartnerFlags | Rfu.unk_ce5);
Rfu.unk_ce9 = Rfu.unk_ce5;
- Rfu.unk_ce2 |= Rfu.unk_ce5;
+ Rfu.bm_PartnerFlags |= Rfu.unk_ce5;
Rfu.unk_ce5 = 0;
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, sizeof(Rfu.unk_c87));
- Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
- CreateTask(sub_80FAA94, 0);
+ rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, sizeof(Rfu.recvCmds));
+ Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
+ CreateTask(Task_ExchangeLinkPlayers, 0);
}
}
else
@@ -837,7 +841,7 @@ static void sub_80F94BC(u16 *a0, u8 *a1)
}
}
-static bool32 sub_80F9514(void)
+static bool32 RfuProcessEnqueuedRecvBlock(void)
{
u8 i;
u8 j;
@@ -845,7 +849,7 @@ static bool32 sub_80F9514(void)
u8 sp48[2 * (CMD_LENGTH - 1)];
u8 switchval;
- sub_80FC6E8(&Rfu.unk_124, sp00);
+ RFU_queue_20_70_send(&Rfu.unk_124, sp00);
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
for (j = 0; j < CMD_LENGTH - 1; j++)
@@ -853,23 +857,23 @@ static bool32 sub_80F9514(void)
gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0];
}
}
- sub_80F9868(0);
- if (gUnknown_3005E10.unk_02 == 0 && Rfu.unk_ce4)
+ RfuHandleReceiveCommand(0);
+ if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
- switchval = sub_80FB9F4();
+ switchval = RfuGetErrorStatus();
if (switchval != 1 && switchval != 6 && switchval != 9)
- sub_80FB9E4(2, 0x9000);
+ RfuSetErrorStatus(2, 0x9000);
rfu_clearAllSlot();
gReceivedRemoteLinkPlayers = FALSE;
Rfu.RfuFunc = NULL;
if (Rfu.unk_ce4 == 1)
{
- sub_80FB9E4(2, 0x9000);
- sub_80FB0E8(0x9000);
+ RfuSetErrorStatus(2, 0x9000);
+ GetLinkmanErrorParams(0x9000);
}
- gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
+ lman.state = lman.next_state = 0;
Rfu.unk_ce4 = 0;
}
if (Rfu.unk_cd0)
@@ -877,36 +881,36 @@ static bool32 sub_80F9514(void)
Rfu.unk_cd0--;
CallRfuFunc();
sub_80F94BC(gSendCmd, sp48);
- sub_80FC63C(&Rfu.unk_9e8, sp48);
+ RFU_queue_40_14_recv(&Rfu.unk_9e8, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++)
gSendCmd[i] = 0;
}
return IsRfuRecvQueueEmpty();
}
-static void sub_80F965C(u8 unused, u32 flags)
+static void HandleSendFailure(u8 unused, u32 flags)
{
s32 i, j;
- const u8 *r10 = Rfu.unk_6c.unk_04;
- for (i = 0; i < Rfu.unk_6c.unk_02; i++)
+ const u8 *r10 = Rfu.cmd_8800_sendbuf.payload;
+ for (i = 0; i < Rfu.cmd_8800_sendbuf.count; i++)
{
if (!(flags & 1))
{
- gUnknown_3002008[0] = (~0x76ff) | i;
+ sResendBlock16[0] = RFU_COMMAND_0x8900 | i;
for (j = 0; j < 7; j++)
{
- gUnknown_3002008[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0];
+ sResendBlock16[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0];
}
for (j = 0; j < 7; j++)
{
- gUnknown_3001FF8[2 * j + 1] = gUnknown_3002008[j] >> 8;
- gUnknown_3001FF8[2 * j + 0] = gUnknown_3002008[j];
+ sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8;
+ sResendBlock8[2 * j + 0] = sResendBlock16[j];
j++;j--; // Needed to match;
}
- sub_80FC63C(&Rfu.unk_9e8, gUnknown_3001FF8);
- Rfu.unk_6c.unk_0c |= (1 << i);
+ RFU_queue_40_14_recv(&Rfu.unk_9e8, sResendBlock8);
+ Rfu.cmd_8800_sendbuf.failedFlags |= (1 << i);
}
flags >>= 1;
}
@@ -914,7 +918,7 @@ static void sub_80F965C(u8 unused, u32 flags)
void Rfu_SetBlockReceivedFlag(u8 a0)
{
- if (Rfu.unk_0c == 1 && a0)
+ if (Rfu.parent_child == MODE_PARENT && a0)
Rfu.unk_61[a0] = 1;
else
Rfu.unk_5c[a0] = 1;
@@ -923,23 +927,23 @@ void Rfu_SetBlockReceivedFlag(u8 a0)
void Rfu_ResetBlockReceivedFlag(u8 a0)
{
Rfu.unk_5c[a0] = 0;
- Rfu.unk_80[a0].unk_12 = 0;
+ Rfu.cmd_8800_recvbuf[a0].receiving = 0;
}
static u8 sub_80F9770(const u8 *a0)
{
u8 i;
- if (Rfu.unk_0c == 1)
+ if (Rfu.parent_child == MODE_PARENT)
return FALSE;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- Rfu.unk_cde[i] = a0[i];
+ Rfu.linkPlayerIdx[i] = a0[i];
}
- return a0[Rfu.unk_c3e];
+ return a0[Rfu.child_slot];
}
-static void rfu_func_080F97B8(void)
+static void RfuFunc_SendKeysToRfu(void)
{
static u8 gUnknown_3001188;
if (gReceivedRemoteLinkPlayers
@@ -948,24 +952,24 @@ static void rfu_func_080F97B8(void)
{
gUnknown_3001188++;
gHeldKeyCodeToSend |= (gUnknown_3001188 << 8);
- sub_80F9D04(0xbe00);
+ RfuPrepareSendBuffer(RFU_COMMAND_0xbe00);
}
}
-struct GFtgtGname *sub_80F9800(void)
+struct GFtgtGname *GetHostRFUtgtGname(void)
{
return &gHostRFUtgtGnameBuffer;
}
bool32 IsSendingKeysToRfu(void)
{
- return Rfu.RfuFunc == rfu_func_080F97B8;
+ return Rfu.RfuFunc == RfuFunc_SendKeysToRfu;
}
-void sub_80F9828(void)
+void StartSendingKeysToRfu(void)
{
AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473);
- Rfu.RfuFunc = rfu_func_080F97B8;
+ Rfu.RfuFunc = RfuFunc_SendKeysToRfu;
}
void Rfu_set_zero(void)
@@ -973,7 +977,7 @@ void Rfu_set_zero(void)
Rfu.RfuFunc = NULL;
}
-static void sub_80F9868(u8 unused)
+static void RfuHandleReceiveCommand(u8 unused)
{
u16 i;
u16 j;
@@ -982,63 +986,63 @@ static void sub_80F9868(u8 unused)
{
switch (gRecvCmds[i][0] & 0xff00)
{
- case 0x7800:
- if (Rfu.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0)
+ case RFU_COMMAND_0x7800:
+ if (Rfu.parent_child == MODE_CHILD && gReceivedRemoteLinkPlayers != 0)
return;
// fallthrough
- case 0x7700:
+ case RFU_COMMAND_0x7700:
if (gRfuLinkStatus->parentChild == MODE_CHILD)
{
Rfu.playerCount = gRecvCmds[i][1];
Rfu.unk_cce = sub_80F9770((u8 *)(gRecvCmds[i] + 2));
}
break;
- case 0x8800:
- if (Rfu.unk_80[i].unk_12 == 0)
+ case RFU_COMMAND_0x8800:
+ if (Rfu.cmd_8800_recvbuf[i].receiving == 0)
{
- Rfu.unk_80[i].unk_00 = 0;
- Rfu.unk_80[i].unk_02 = gRecvCmds[i][1];
- Rfu.unk_80[i].unk_11 = gRecvCmds[i][2];
- Rfu.unk_80[i].unk_08 = 0;
- Rfu.unk_80[i].unk_12 = 1;
+ Rfu.cmd_8800_recvbuf[i].next = 0;
+ Rfu.cmd_8800_recvbuf[i].count = gRecvCmds[i][1];
+ Rfu.cmd_8800_recvbuf[i].owner = gRecvCmds[i][2];
+ Rfu.cmd_8800_recvbuf[i].receivedFlags = 0;
+ Rfu.cmd_8800_recvbuf[i].receiving = 1;
Rfu.unk_5c[i] = 0;
}
break;
- case 0x8900:
- if (Rfu.unk_80[i].unk_12 == 1)
+ case RFU_COMMAND_0x8900:
+ if (Rfu.cmd_8800_recvbuf[i].receiving == 1)
{
- Rfu.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff;
- Rfu.unk_80[i].unk_08 |= (1 << Rfu.unk_80[i].unk_00);
+ Rfu.cmd_8800_recvbuf[i].next = gRecvCmds[i][0] & 0xff;
+ Rfu.cmd_8800_recvbuf[i].receivedFlags |= (1 << Rfu.cmd_8800_recvbuf[i].next);
for (j = 0; j < 6; j++)
- gBlockRecvBuffer[i][Rfu.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
- if (Rfu.unk_80[i].unk_08 == gUnknown_843EBD4[Rfu.unk_80[i].unk_02])
+ gBlockRecvBuffer[i][Rfu.cmd_8800_recvbuf[i].next * 6 + j] = gRecvCmds[i][j + 1];
+ if (Rfu.cmd_8800_recvbuf[i].receivedFlags == sAllBlocksReceived[Rfu.cmd_8800_recvbuf[i].count])
{
- Rfu.unk_80[i].unk_12 = 2;
+ Rfu.cmd_8800_recvbuf[i].receiving = 2;
Rfu_SetBlockReceivedFlag(i);
- if (sub_80F9800()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
- sub_80FAA58(gBlockRecvBuffer);
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && Rfu.parent_child == MODE_CHILD)
+ ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer);
}
}
break;
- case 0xa100:
+ case RFU_COMMAND_0xa100:
Rfu_InitBlockSend(gUnknown_843EC64[gRecvCmds[i][1]].buffer, (u16)gUnknown_843EC64[gRecvCmds[i][1]].size);
break;
- case 0x5f00:
- Rfu.unk_e4[i] = 1;
+ case RFU_COMMAND_0x5f00:
+ Rfu.cmd5f00Ack[i] = 1;
break;
- case 0x6600:
- if (Rfu.unk_100 == gRecvCmds[i][1])
- Rfu.unk_e9[i] = 1;
+ case RFU_COMMAND_0x6600:
+ if (Rfu.cmd_6600_count == gRecvCmds[i][1])
+ Rfu.cmd_6600_recvd[i] = 1;
break;
- case 0xed00:
- if (Rfu.unk_0c == 0)
+ case RFU_COMMAND_0xed00:
+ if (Rfu.parent_child == MODE_CHILD)
{
if (gReceivedRemoteLinkPlayers != 0)
{
if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag)
{
gReceivedRemoteLinkPlayers = 0;
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = gRecvCmds[i][2];
}
Rfu.playerCount = gRecvCmds[i][3];
@@ -1047,25 +1051,25 @@ static void sub_80F9868(u8 unused)
}
else
{
- sub_80F9D04(0xee00);
+ RfuPrepareSendBuffer(RFU_COMMAND_0xee00);
gSendCmd[1] = gRecvCmds[i][1];
gSendCmd[2] = gRecvCmds[i][2];
gSendCmd[3] = gRecvCmds[i][3];
}
break;
- case 0xee00:
- if (Rfu.unk_0c == 1)
+ case RFU_COMMAND_0xee00:
+ if (Rfu.parent_child == MODE_PARENT)
{
- Rfu.unk_ce3 |= gRecvCmds[i][1];
+ Rfu.bm_DisconnectSlot |= gRecvCmds[i][1];
Rfu.unk_ce4 = gRecvCmds[i][2];
sub_80FA9D0(gRecvCmds[i][1]);
}
break;
- case 0xbe00:
+ case RFU_COMMAND_0xbe00:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
}
- if (Rfu.unk_0c == 1 && Rfu.unk_61[i])
+ if (Rfu.parent_child == MODE_PARENT && Rfu.unk_61[i])
{
if (Rfu.unk_61[i] == 4)
{
@@ -1078,13 +1082,13 @@ static void sub_80F9868(u8 unused)
}
}
-static bool8 sub_80F9C50(void)
+static bool8 Cmd8000recvIsFinished(void)
{
s32 i;
for (i = 0; i < 5; i++)
{
- if (Rfu.unk_80[i].unk_12)
+ if (Rfu.cmd_8800_recvbuf[i].receiving)
return FALSE;
}
return TRUE;
@@ -1096,21 +1100,21 @@ static bool8 sub_80F9C78(void)
for (i = 0; i < Rfu.playerCount; i++)
{
- if (Rfu.unk_80[i].unk_12 != 2 || Rfu.unk_5c[i] != 1)
+ if (Rfu.cmd_8800_recvbuf[i].receiving != 2 || Rfu.unk_5c[i] != 1)
return FALSE;
}
return TRUE;
}
-static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data)
+static void ResetSendDataManager(struct RfuBlockSend *data)
{
- data->unk_00 = 0;
- data->unk_02 = 0;
- data->unk_04 = NULL;
- data->unk_08 = 0;
- data->unk_10 = 0;
- data->unk_11 = 0;
- data->unk_12 = 0;
+ data->next = 0;
+ data->count = 0;
+ data->payload = NULL;
+ data->receivedFlags = 0;
+ data->sending = 0;
+ data->owner = 0;
+ data->receiving = 0;
}
u8 Rfu_GetBlockReceivedStatus(void)
@@ -1120,7 +1124,7 @@ u8 Rfu_GetBlockReceivedStatus(void)
for (i = 0; i < 5; i++)
{
- if (Rfu.unk_80[i].unk_12 == 2 && Rfu.unk_5c[i] == 1)
+ if (Rfu.cmd_8800_recvbuf[i].receiving == 2 && Rfu.unk_5c[i] == 1)
{
flags |= (1 << i);
}
@@ -1128,7 +1132,7 @@ u8 Rfu_GetBlockReceivedStatus(void)
return flags;
}
-static void sub_80F9D04(u16 command)
+static void RfuPrepareSendBuffer(u16 command)
{
u8 i;
u8 *buff;
@@ -1137,47 +1141,47 @@ static void sub_80F9D04(u16 command)
gSendCmd[0] = command;
switch (command)
{
- case 0x8800:
- gSendCmd[1] = Rfu.unk_6c.unk_02;
- gSendCmd[2] = Rfu.unk_6c.unk_11 + 0x80;
+ case RFU_COMMAND_0x8800:
+ gSendCmd[1] = Rfu.cmd_8800_sendbuf.count;
+ gSendCmd[2] = Rfu.cmd_8800_sendbuf.owner + 0x80;
break;
- case 0xa100:
- if (sub_80F9C50())
+ case RFU_COMMAND_0xa100:
+ if (Cmd8000recvIsFinished())
gSendCmd[1] = Rfu.unk_5a;
break;
- case 0x7700:
- case 0x7800:
- tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ case RFU_COMMAND_0x7700:
+ case RFU_COMMAND_0x7800:
+ tmp = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot;
Rfu.playerCount = gUnknown_843EC41[tmp] + 1;
gSendCmd[1] = Rfu.playerCount;
buff = (u8 *)(gSendCmd + 2);
for (i = 0; i < RFU_CHILD_MAX; i++)
- buff[i] = Rfu.unk_cde[i];
+ buff[i] = Rfu.linkPlayerIdx[i];
break;
- case 0x6600:
- case 0x5f00:
- gSendCmd[1] = Rfu.unk_100;
+ case RFU_COMMAND_0x6600:
+ case RFU_COMMAND_0x5f00:
+ gSendCmd[1] = Rfu.cmd_6600_count;
break;
- case 0x2f00:
+ case RFU_COMMAND_0x2f00:
for (i = 0; i < 6; i++)
gSendCmd[1 + i] = Rfu.unk_f2[i];
break;
- case 0xbe00:
+ case RFU_COMMAND_0xbe00:
gSendCmd[1] = gHeldKeyCodeToSend;
break;
- case 0xee00:
+ case RFU_COMMAND_0xee00:
break;
- case 0xed00:
+ case RFU_COMMAND_0xed00:
break;
}
}
-void sub_80F9E2C(void *a0)
+void RfuPrepareSend0x2f00(void * data)
{
- if (gSendCmd[0] == 0 && !sub_80FBA00())
+ if (gSendCmd[0] == 0 && !RfuIsErrorStatus1or2())
{
- memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2));
- sub_80F9D04(0x2f00);
+ memcpy(Rfu.unk_f2, data, sizeof(Rfu.unk_f2));
+ RfuPrepareSendBuffer(RFU_COMMAND_0x2f00);
}
}
@@ -1189,77 +1193,77 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
return FALSE;
if (gSendCmd[0] != 0)
return FALSE;
- if (Rfu.unk_6c.unk_10 != 0)
+ if (Rfu.cmd_8800_sendbuf.sending != 0)
{
gUnknown_203AC08.unk_83++;
return FALSE;
}
r4 = (size % 12) != 0;
- Rfu.unk_6c.unk_11 = GetMultiplayerId();
- Rfu.unk_6c.unk_10 = 1;
- Rfu.unk_6c.unk_02 = (size / 12) + r4;
- Rfu.unk_6c.unk_00 = 0;
- if (size > 0x100)
- Rfu.unk_6c.unk_04 = src;
+ Rfu.cmd_8800_sendbuf.owner = GetMultiplayerId();
+ Rfu.cmd_8800_sendbuf.sending = 1;
+ Rfu.cmd_8800_sendbuf.count = (size / 12) + r4;
+ Rfu.cmd_8800_sendbuf.next = 0;
+ if (size > 0x100) // should never be reached
+ Rfu.cmd_8800_sendbuf.payload = src;
else
{
if (src != gBlockSendBuffer)
memcpy(gBlockSendBuffer, src, size);
- Rfu.unk_6c.unk_04 = gBlockSendBuffer;
+ Rfu.cmd_8800_sendbuf.payload = gBlockSendBuffer;
}
- sub_80F9D04(0x8800);
- Rfu.RfuFunc = rfufunc_80F9F44;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x8800);
+ Rfu.RfuFunc = RfuFunc_HandleBlockSend;
Rfu.unk_5b = 0;
return TRUE;
}
-static void rfufunc_80F9F44(void)
+static void RfuFunc_HandleBlockSend(void)
{
if (gSendCmd[0] == 0)
{
- sub_80F9D04(0x8800);
- if (Rfu.unk_0c == 1)
+ RfuPrepareSendBuffer(RFU_COMMAND_0x8800);
+ if (Rfu.parent_child == MODE_PARENT)
{
if (++Rfu.unk_5b > 2)
- Rfu.RfuFunc = sub_80F9FA8;
+ Rfu.RfuFunc = RfuFunc_SendNextBlock;
}
else
{
- if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
- Rfu.RfuFunc = sub_80F9FA8;
+ if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == RFU_COMMAND_0x8800)
+ Rfu.RfuFunc = RfuFunc_SendNextBlock;
}
}
}
-static void sub_80F9FA8(void)
+static void RfuFunc_SendNextBlock(void)
{
s32 i;
- const u8 *src = Rfu.unk_6c.unk_04;
- gSendCmd[0] = 0x8900 | Rfu.unk_6c.unk_00;
+ const u8 *src = Rfu.cmd_8800_sendbuf.payload;
+ gSendCmd[0] = RFU_COMMAND_0x8900 | Rfu.cmd_8800_sendbuf.next;
for (i = 0; i < 7; i++)
- gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 0];
- Rfu.unk_6c.unk_00++;
- if (Rfu.unk_6c.unk_02 <= Rfu.unk_6c.unk_00)
+ gSendCmd[i + 1] = (src[(i << 1) + Rfu.cmd_8800_sendbuf.next * 12 + 1] << 8) | src[(i << 1) + Rfu.cmd_8800_sendbuf.next * 12 + 0];
+ Rfu.cmd_8800_sendbuf.next++;
+ if (Rfu.cmd_8800_sendbuf.count <= Rfu.cmd_8800_sendbuf.next)
{
- Rfu.unk_6c.unk_10 = 0;
- Rfu.RfuFunc = rfufunc_80FA020;
+ Rfu.cmd_8800_sendbuf.sending = 0;
+ Rfu.RfuFunc = RfuFunc_SendLastBlock;
}
}
-static void rfufunc_80FA020(void)
+static void RfuFunc_SendLastBlock(void)
{
- const u8 *src = Rfu.unk_6c.unk_04;
+ const u8 *src = Rfu.cmd_8800_sendbuf.payload;
u8 mpId = GetMultiplayerId();
s32 i;
- if (Rfu.unk_0c == 0)
+ if (Rfu.parent_child == MODE_CHILD)
{
- gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.unk_02 - 1);
+ gSendCmd[0] = RFU_COMMAND_0x8900 | (Rfu.cmd_8800_sendbuf.count - 1);
for (i = 0; i < 7; i++)
- gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 0];
- if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.unk_02 - 1)
+ gSendCmd[i + 1] = (src[(i << 1) + (Rfu.cmd_8800_sendbuf.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.cmd_8800_sendbuf.count - 1) * 12 + 0];
+ if ((u8)gRecvCmds[mpId][0] == Rfu.cmd_8800_sendbuf.count - 1)
{
- if (Rfu.unk_80[mpId].unk_08 != gUnknown_843EBD4[Rfu.unk_80[mpId].unk_02])
+ if (Rfu.cmd_8800_recvbuf[mpId].receivedFlags != sAllBlocksReceived[Rfu.cmd_8800_recvbuf[mpId].count])
{
- sub_80F965C(mpId, Rfu.unk_80[mpId].unk_08);
+ HandleSendFailure(mpId, Rfu.cmd_8800_recvbuf[mpId].receivedFlags);
gUnknown_203AC08.unk_64++;
}
else
@@ -1273,45 +1277,45 @@ static void rfufunc_80FA020(void)
bool8 sub_80FA0F8(u8 a0)
{
Rfu.unk_5a = a0;
- sub_80F9D04(0xa100);
+ RfuPrepareSendBuffer(RFU_COMMAND_0xa100);
return TRUE;
}
-static void sub_80FA114(void)
+static void RfuFunc_End5F00_PowerDownRfu(void)
{
rfu_clearAllSlot();
- sub_80FD52C();
+ rfu_LMAN_powerDownRFU();
gReceivedRemoteLinkPlayers = 0;
Rfu.unk_ef = 1;
Rfu.RfuFunc = NULL;
}
-static void sub_80FA140(void)
+static void RfuFunc_End5F00_ParentDisconnect(void)
{
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
rfu_waitREQComplete();
- sub_80FA114();
+ RfuFunc_End5F00_PowerDownRfu();
}
-static void sub_80FA160(void)
+static void RfuFunc_End5F00(void)
{
- if (Rfu.unk_0c == 0)
+ if (Rfu.parent_child == MODE_CHILD)
{
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 2;
}
else
- Rfu.RfuFunc = sub_80FA140;
+ Rfu.RfuFunc = RfuFunc_End5F00_ParentDisconnect;
}
void LinkRfu_FatalError(void)
{
- sub_80FEB14();
+ rfu_LMAN_requestChangeAgbClockMaster();
Rfu.unk_ce4 = 1;
- Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+ Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
}
-static void sub_80FA1C4(void)
+static void RfuFunc_WaitAck5F00(void)
{
s32 i;
u8 playerCount = Rfu.playerCount;
@@ -1319,132 +1323,132 @@ static void sub_80FA1C4(void)
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- if (Rfu.unk_e4[i])
+ if (Rfu.cmd5f00Ack[i])
count++;
}
if (count == playerCount)
{
- gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
- if (Rfu.unk_0c == 0)
+ gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000);
+ if (Rfu.parent_child == MODE_CHILD)
{
- Rfu.unk_ee = 3;
- sub_80FA160();
+ Rfu.errorState = 3;
+ RfuFunc_End5F00();
}
else
- Rfu.RfuFunc = sub_80FA160;
+ Rfu.RfuFunc = RfuFunc_End5F00;
}
}
-static void sub_80FA224(void)
+static void RfuFunc_BuildCommand5F00(void)
{
- if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ if (gSendCmd[0] == 0 && !Rfu.unk_ce8)
{
- sub_80F9D04(0x5f00);
- Rfu.RfuFunc = sub_80FA1C4;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x5f00);
+ Rfu.RfuFunc = RfuFunc_WaitAck5F00;
}
}
-static void sub_80FA25C(u8 taskId)
+static void Task_WaitRfuFuncAndSetBuildCmd5F00(u8 taskId)
{
if (Rfu.RfuFunc == NULL)
{
Rfu.unk_cd9 = 1;
- Rfu.RfuFunc = sub_80FA224;
+ Rfu.RfuFunc = RfuFunc_BuildCommand5F00;
DestroyTask(taskId);
}
}
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+void Rfu_BeginBuildAndSendCommand5F(void)
{
- if (!FuncIsActiveTask(sub_80FA25C))
- CreateTask(sub_80FA25C, 5);
+ if (!FuncIsActiveTask(Task_WaitRfuFuncAndSetBuildCmd5F00))
+ CreateTask(Task_WaitRfuFuncAndSetBuildCmd5F00, 5);
}
-static void sub_80FA2B0(void)
+static void RfuFunc_Send6600_3(void)
{
u8 playerCount;
u8 i;
- if (GetMultiplayerId() != 0)
+ if (GetMultiplayerId() != 0) // child
{
- if (Rfu.unk_124.unk_8c2 == 0 && Rfu.unk_fe > 0x3c)
+ if (Rfu.unk_124.count == 0 && Rfu.cmd_6600_timer > 60)
{
- sub_80F9D04(0x6600);
- Rfu.unk_fe = 0;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
+ Rfu.cmd_6600_timer = 0;
}
}
playerCount = GetLinkPlayerCount();
for (i = 0; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (Rfu.cmd_6600_recvd[i] == 0)
break;
}
if (i == playerCount)
{
for (i = 0; i < MAX_RFU_PLAYERS; i++)
- Rfu.unk_e9[i] = 0;
- Rfu.unk_100++;
+ Rfu.cmd_6600_recvd[i] = 0;
+ Rfu.cmd_6600_count++;
Rfu.RfuFunc = NULL;
}
- Rfu.unk_fe++;
+ Rfu.cmd_6600_timer++;
}
-static void sub_80FA350(void)
+static void RfuFunc_Send6600_2(void)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
- sub_80F9D04(0x6600);
- Rfu.RfuFunc = sub_80FA2B0;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
+ Rfu.RfuFunc = RfuFunc_Send6600_3;
}
}
-static void sub_80FA388(void)
+static void RfuFunc_Send6600_1(void)
{
u8 i;
u8 playerCount;
- if (GetMultiplayerId() != 0)
+ if (GetMultiplayerId() != 0) // child
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
- sub_80F9D04(0x6600);
- Rfu.RfuFunc = sub_80FA2B0;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
+ Rfu.RfuFunc = RfuFunc_Send6600_3;
}
}
- else
+ else // parent
{
playerCount = GetLinkPlayerCount();
for (i = 1; i < playerCount; i++)
{
- if (Rfu.unk_e9[i] == 0)
+ if (Rfu.cmd_6600_recvd[i] == 0)
break;
}
if (i == playerCount)
{
- if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0)
{
- sub_80F9D04(0x6600);
- Rfu.RfuFunc = sub_80FA350;
+ RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
+ Rfu.RfuFunc = RfuFunc_Send6600_2;
}
}
}
}
-void sub_80FA42C(void)
+void LinkRfu_SetRfuFuncToSend6600(void)
{
if (Rfu.RfuFunc == NULL)
{
- Rfu.RfuFunc = sub_80FA388;
- Rfu.unk_fe = 0;
+ Rfu.RfuFunc = RfuFunc_Send6600_1;
+ Rfu.cmd_6600_timer = 0;
}
}
-bool32 sub_80FA44C(u32 a0)
+bool32 RfuSerialNumberIsValid(u32 serialNo)
{
s32 i;
- for (i = 0; gUnknown_843EC8C[i] != a0; i++)
+ for (i = 0; sAcceptedSerialNos[i] != serialNo; i++)
{
- if (gUnknown_843EC8C[i] == 0xFFFF)
+ if (sAcceptedSerialNos[i] == 0xFFFF)
return FALSE;
}
return TRUE;
@@ -1453,20 +1457,20 @@ bool32 sub_80FA44C(u32 a0)
u8 sub_80FA484(bool32 a0)
{
if (!a0)
- return sub_80FEA34(0, 0);
- sub_80FEA34(1, 0x258);
+ return rfu_LMAN_setLinkRecovery(0, 0);
+ rfu_LMAN_setLinkRecovery(1, 600);
return 0;
}
void sub_80FA4A8(void)
{
Rfu.unk_cd9 = 1;
- sub_80FD760(FALSE);
+ rfu_LMAN_stopManager(0);
}
u8 LinkRfu_GetMultiplayerId(void)
{
- if (Rfu.unk_0c == 1)
+ if (Rfu.parent_child == MODE_PARENT)
return 0;
return Rfu.unk_cce;
}
@@ -1507,7 +1511,7 @@ static bool8 sub_80FA528(void)
}
}
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED)
{
rfu_clearSlot(TYPE_NI_RECV, i);
}
@@ -1541,9 +1545,9 @@ bool32 sub_80FA5D4(void)
return FALSE;
}
-bool32 sub_80FA634(u16 a0, const u8 *a1)
+bool32 TrainerIdAndNameStillInPartnersList(u16 trainerId, const u8 *trainerName)
{
- u8 r1 = sub_80FBC70(a1, a0);
+ u8 r1 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (r1 == 0xFF)
return TRUE;
if (Rfu.unk_cd1[r1] == 9)
@@ -1551,27 +1555,27 @@ bool32 sub_80FA634(u16 a0, const u8 *a1)
return FALSE;
}
-void sub_80FA670(u8 a0, u16 a1, const u8 *a2)
+void SendByteToPartnerByIdAndName(u8 value, u16 trainerId, const u8 *trainerName)
{
- u8 r4 = sub_80FBC70(a2, a1);
- Rfu.unk_cd1[r4] = a0;
- rfu_clearSlot(TYPE_NI_SEND, r4);
- rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1);
+ u8 slotNo = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
+ Rfu.unk_cd1[slotNo] = value;
+ rfu_clearSlot(TYPE_NI_SEND, slotNo);
+ rfu_NI_setSendData(1 << slotNo, 8, Rfu.unk_cd1 + slotNo, 1);
}
-void sub_80FA6BC(void)
+void LinkRfuNIsend8(void)
{
Rfu.unk_c85 = 8;
- rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e);
- rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1);
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot);
+ rfu_NI_setSendData(1 << Rfu.child_slot, 8, &Rfu.unk_c85, 1);
}
-u32 sub_80FA6FC(u16 a0, const u8 *a1)
+u32 WaitSendByteToPartnerByIdAndName(u16 trainerId, const u8 *trainerName)
{
- u8 r0 = sub_80FBC70(a1, a0);
+ u8 r0 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (r0 == 0xFF)
return 2;
- if (gRfuSlotStatusNI[r0]->send.state == 0)
+ if (gRfuSlotStatusNI[r0]->send.state == SLOT_STATE_READY)
return 1;
return 0;
}
@@ -1597,18 +1601,18 @@ static s32 sub_80FA788(void)
s32 retval = 0;
if (Rfu.unk_c85 == 8)
{
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_FAILED)
- rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e);
+ if (gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_FAILED)
+ rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot);
}
- if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
+ if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
{
- rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e);
- sub_80FB9E4(Rfu.unk_c86, 0);
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot);
+ RfuSetErrorStatus(Rfu.unk_c86, 0);
retval = Rfu.unk_c86;
}
- else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED)
{
- rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e);
+ rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot);
retval = 6;
}
return retval;
@@ -1620,26 +1624,26 @@ static void sub_80FA834(u8 taskId)
if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
{
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
{
case 0:
- if (sub_80F9C50())
+ if (Cmd8000recvIsFinished())
{
ResetBlockReceivedFlags();
- sub_800B0B4();
+ PrepareLocalLinkPlayerBlock();
gTasks[taskId].data[0]++;
}
break;
case 1:
- if (Rfu.unk_0c == 1)
+ if (Rfu.parent_child == MODE_PARENT)
{
if (gReceivedRemoteLinkPlayers)
- sub_80F9D04(0x7800);
+ RfuPrepareSendBuffer(RFU_COMMAND_0x7800);
else
- sub_80F9D04(0x7700);
+ RfuPrepareSendBuffer(RFU_COMMAND_0x7700);
gTasks[taskId].data[0] = 101;
}
else
@@ -1654,12 +1658,12 @@ static void sub_80FA834(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- if (Rfu.unk_0c == 1)
+ if (Rfu.parent_child == MODE_PARENT)
{
- if (sub_80F9C50())
+ if (Cmd8000recvIsFinished())
{
Rfu.unk_5a = 0;
- sub_80F9D04(0xa100);
+ RfuPrepareSendBuffer(RFU_COMMAND_0xa100);
gTasks[taskId].data[0]++;
}
}
@@ -1673,7 +1677,7 @@ static void sub_80FA834(u8 taskId)
case 5:
for (i = 0; i < Rfu.playerCount; i++)
{
- sub_800B110(i);
+ LinkPlayerFromBlock(i);
Rfu_ResetBlockReceivedFlag(i);
}
gTasks[taskId].data[0]++;
@@ -1681,16 +1685,16 @@ static void sub_80FA834(u8 taskId)
case 6:
DestroyTask(taskId);
gReceivedRemoteLinkPlayers = 1;
- Rfu.unk_ce8 = 0;
- sub_80FEA34(1, 0x258);
- if (Rfu.unk_ce6)
+ Rfu.unk_ce8 = FALSE;
+ rfu_LMAN_setLinkRecovery(1, 600);
+ if (Rfu.unionRoomChatters)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((Rfu.unk_ce6 >> i) & 1)
+ if ((Rfu.unionRoomChatters >> i) & 1)
{
Rfu.unk_ce5 = 1 << i;
- Rfu.unk_ce6 ^= (1 << i);
+ Rfu.unionRoomChatters ^= (1 << i);
}
}
}
@@ -1705,42 +1709,42 @@ static void sub_80FA9D0(u16 a0)
for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((a0 >> i) & 1)
- Rfu.unk_cde[i] = 0;
+ Rfu.linkPlayerIdx[i] = 0;
}
}
-static void sub_80FA9FC(const struct UnkRfuStruct_8010A14 *a0)
+static void ReceiveRfuLinkPlayers(const struct SioInfo *chunk)
{
s32 i;
- Rfu.playerCount = a0->unk_0f;
+ Rfu.playerCount = chunk->playerCount;
for (i = 0; i < RFU_CHILD_MAX; i++)
- Rfu.unk_cde[i] = a0->unk_10[i];
+ Rfu.linkPlayerIdx[i] = chunk->linkPlayerIdx[i];
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- gLinkPlayers[i] = a0->unk_14[i];
- sub_800B284(gLinkPlayers + i);
+ gLinkPlayers[i] = chunk->linkPlayers[i];
+ IntlConvertLinkPlayerName(gLinkPlayers + i);
}
}
-static void sub_80FAA58(void *a0)
+static void ValidateAndReceivePokemonSioInfo(void *recvBuffer)
{
- if (strcmp("PokemonSioInfo", ((struct UnkRfuStruct_8010A14 *)a0)->unk_00) == 0)
+ if (strcmp("PokemonSioInfo", recvBuffer) == 0)
{
- sub_80FA9FC(a0);
- CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14));
+ ReceiveRfuLinkPlayers(recvBuffer);
+ CpuFill16(0, recvBuffer, sizeof(struct SioInfo));
ResetBlockReceivedFlag(0);
}
}
-static void sub_80FAA94(u8 taskId)
+static void Task_ExchangeLinkPlayers(u8 taskId)
{
s32 i;
struct LinkPlayerBlock *r2;
- struct UnkRfuStruct_8010A14 *r5;
- u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]];
+ struct SioInfo *r5;
+ u8 r4 = Rfu.linkPlayerIdx[gUnknown_843EC38[Rfu.unk_ce9]];
if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
{
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
@@ -1749,7 +1753,7 @@ static void sub_80FAA94(u8 taskId)
if (gSendCmd[0] == 0)
{
ResetBlockReceivedFlag(r4);
- sub_80F9D04(0x7800);
+ RfuPrepareSendBuffer(RFU_COMMAND_0x7800);
gTasks[taskId].data[0]++;
}
break;
@@ -1763,43 +1767,44 @@ static void sub_80FAA94(u8 taskId)
ResetBlockReceivedFlag(r4);
r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4];
gLinkPlayers[r4] = r2->linkPlayer;
- sub_800B284(gLinkPlayers + r4);
+ IntlConvertLinkPlayerName(gLinkPlayers + r4);
gTasks[taskId].data[0]++;
}
break;
case 3:
- r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
- memcpy(r5->unk_00, "PokemonSioInfo", sizeof("PokemonSioInfo"));
- r5->unk_0f = Rfu.playerCount;
+ // Prepare send block
+ r5 = (struct SioInfo *)gBlockSendBuffer;
+ memcpy(r5->magic, "PokemonSioInfo", sizeof("PokemonSioInfo"));
+ r5->playerCount = Rfu.playerCount;
for (i = 0; i < RFU_CHILD_MAX; i++)
- r5->unk_10[i] = Rfu.unk_cde[i];
- memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i];
+ memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers);
gTasks[taskId].data[0]++;
// fallthrough
case 4:
- r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
- r5->unk_0f = Rfu.playerCount;
+ r5 = (struct SioInfo *)gBlockSendBuffer;
+ r5->playerCount = Rfu.playerCount;
for (i = 0; i < RFU_CHILD_MAX; i++)
- r5->unk_10[i] = Rfu.unk_cde[i];
- memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i];
+ memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers);
if (SendBlock(0, gBlockSendBuffer, 0xa0))
gTasks[taskId].data[0]++;
break;
case 5:
if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1)
{
- CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
+ CpuFill16(0, gBlockRecvBuffer, sizeof(struct SioInfo));
ResetBlockReceivedFlag(0);
- Rfu.unk_ce8 = 0;
- if (Rfu.unk_ce6)
+ Rfu.unk_ce8 = FALSE;
+ if (Rfu.unionRoomChatters)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((Rfu.unk_ce6 >> i) & 1)
+ if ((Rfu.unionRoomChatters >> i) & 1)
{
Rfu.unk_ce5 = 1 << i;
- Rfu.unk_ce6 ^= (1 << i);
- Rfu.unk_ce8 = 1;
+ Rfu.unionRoomChatters ^= (1 << i);
+ Rfu.unk_ce8 = TRUE;
break;
}
}
@@ -1819,7 +1824,7 @@ static void sub_80FACF0(u8 taskId)
case 0:
if (Rfu.playerCount)
{
- sub_800B0B4();
+ PrepareLocalLinkPlayerBlock();
SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock));
gTasks[taskId].data[0]++;
}
@@ -1831,7 +1836,7 @@ static void sub_80FACF0(u8 taskId)
case 2:
if (GetBlockReceivedStatus() & 1)
{
- sub_80FA9FC((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer);
+ ReceiveRfuLinkPlayers((const struct SioInfo *)gBlockRecvBuffer);
ResetBlockReceivedFlag(0);
gReceivedRemoteLinkPlayers = 1;
DestroyTask(taskId);
@@ -1840,51 +1845,51 @@ static void sub_80FACF0(u8 taskId)
}
}
-static void sub_80FAD98(void)
+static void RfuCheckErrorStatus(void)
{
- if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0)
+ if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0)
{
if (gMain.callback2 == c2_mystery_gift_e_reader_run)
gWirelessCommType = 2;
SetMainCallback2(CB2_LinkError);
gMain.savedCallback = CB2_LinkError;
- sub_800ACBC((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2);
- Rfu.unk_ee = 2;
+ SetLinkErrorFromRfu((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.count, Rfu.unk_9e8.count, RfuGetErrorStatus() == 2);
+ Rfu.errorState = 2;
CloseLink();
}
- else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1)
+ else if (Rfu.unk_9e8.full == 1 || Rfu.unk_124.full == 1)
{
- if (gUnknown_3005E10.unk_02)
- sub_80FEB14();
- sub_80FB9E4(1, 0x7000);
- sub_80FB0E8(0x7000);
+ if (lman.childClockSlave_flag)
+ rfu_LMAN_requestChangeAgbClockMaster();
+ RfuSetErrorStatus(1, 0x7000);
+ GetLinkmanErrorParams(0x7000);
}
}
static void rfu_REQ_recvData_then_sendData(void)
{
- if (gUnknown_3005E10.unk_06 == 1)
+ if (lman.parent_child == MODE_PARENT)
{
rfu_REQ_recvData();
rfu_waitREQComplete();
- LinkRfu_REQ_SendData_HandleParentRelationship(0);
+ rfu_LMAN_REQ_sendData(RFU_CHILD_CLOCK_SLAVE_OFF);
}
}
-bool32 sub_80FAE94(void)
+bool32 LinkRfuMain1(void)
{
bool32 retval = FALSE;
- Rfu.unk_ccd = 0;
- sub_80FDA30(Random());
+ Rfu.parentId = 0;
+ rfu_LMAN_manager_entity(Random());
if (Rfu.unk_ef == 0)
{
- switch (Rfu.unk_0c)
+ switch (Rfu.parent_child)
{
case 1:
sub_80F911C();
break;
case 0:
- retval = sub_80F9514();
+ retval = RfuProcessEnqueuedRecvBlock();
break;
case 2:
rfu_REQ_recvData_then_sendData();
@@ -1894,19 +1899,19 @@ bool32 sub_80FAE94(void)
return retval;
}
-bool32 sub_80FAEF0(void)
+bool32 LinkRfuMain2(void)
{
bool32 retval = FALSE;
if (Rfu.unk_ef == 0)
{
- if (Rfu.unk_0c == 1)
+ if (Rfu.parent_child == MODE_PARENT)
retval = sub_80F9204();
- sub_80FAD98();
+ RfuCheckErrorStatus();
}
return retval;
}
-static void sub_80FAF1C(void)
+static void CopyPlayerNameToUnameBuffer(void)
{
StringCopy(gHostRFUtgtUnameBuffer, gSaveBlock2Ptr->playerName);
}
@@ -1914,93 +1919,96 @@ static void sub_80FAF1C(void)
void ClearAndInitHostRFUtgtGname(void)
{
memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH);
- InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, 0, 0);
+ InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, FALSE, 0);
}
-void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2)
+void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started)
{
- InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, a0, a2, a1);
+ InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders);
}
-void sub_80FAF74(bool32 a0, bool32 a1)
+void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard)
{
- gHostRFUtgtGnameBuffer.unk_00.unk_00_4 = a0;
- gHostRFUtgtGnameBuffer.unk_00.unk_00_5 = a1;
+ gHostRFUtgtGnameBuffer.unk_00.hasNews = hasNews;
+ gHostRFUtgtGnameBuffer.unk_00.hasCard = hasCard;
}
-void sub_80FAFA0(u32 type, u32 species, u32 level)
+void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level)
{
gHostRFUtgtGnameBuffer.type = type;
gHostRFUtgtGnameBuffer.species = species;
gHostRFUtgtGnameBuffer.level = level;
}
-void sub_80FAFE0(u8 a0)
+void UpdateGameData_GroupLockedIn(bool8 started)
{
- gHostRFUtgtGnameBuffer.unk_0a_7 = a0;
- rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
+ gHostRFUtgtGnameBuffer.started = started;
+ rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
}
-void sub_80FB008(u8 a0, u32 a1, u32 a2)
+void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started)
{
- if (a0)
- SetHostRFUtgtGname(a0, a1, a2);
- rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
+ if (activity)
+ SetHostRFUtgtGname(activity, child_sprite_genders, started);
+ rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
}
-void sub_80FB030(u32 a0)
+void sub_80FB030(u32 linkPlayerCount)
{
s32 i;
- u32 r5;
- u32 r7;
- s32 r8;
+ u32 numConnectedChildren;
+ u32 child_sprite_genders;
+ s32 bm_child_slots;
- if (sub_80F9800()->unk_0a_0 == 0x45)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- r5 = 0;
- r7 = 0;
- r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ numConnectedChildren = 0;
+ child_sprite_genders = 0;
+ bm_child_slots = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((r8 >> i) & 1)
+ if ((bm_child_slots >> i) & 1)
{
- r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3));
- r5++;
- if (r5 == a0 - 1)
+ // The 0x80 prevents this element from being incorrectly read as a 0.
+ child_sprite_genders |= ((
+ 0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7)
+ ) << (numConnectedChildren << 3));
+ numConnectedChildren++;
+ if (numConnectedChildren == linkPlayerCount - 1)
break;
}
}
- sub_80FB008(0x45, r7, 0);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, child_sprite_genders, 0);
}
}
-static void sub_80FB0E8(u32 a0)
+static void GetLinkmanErrorParams(u32 msg)
{
- if (Rfu.unk_ee == 0)
+ if (Rfu.errorState == 0)
{
- Rfu.unk_10 = gUnknown_3005E10.unk_14;
- Rfu.unk_12 = gUnknown_3005E10.unk_16;
- Rfu.unk_0a = a0;
- Rfu.unk_ee = 1;
+ Rfu.linkman_param[0] = lman.param[0];
+ Rfu.linkman_param[1] = lman.param[1];
+ Rfu.linkman_msg = msg;
+ Rfu.errorState = 1;
}
}
-static void sub_80FB118(void)
+static void ResetErrorState(void)
{
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
}
void sub_80FB128(bool32 a0)
{
if (!a0)
- Rfu.unk_ee = 0;
+ Rfu.errorState = 0;
else
- Rfu.unk_ee = 4;
+ Rfu.errorState = 4;
}
static void sub_80FB154(void)
{
- sub_80FBE20(gUnknown_3005E10.unk_00, 1);
+ sub_80FBE20(lman.acceptSlot_flag, 1);
Rfu.RfuFunc = NULL;
}
@@ -2009,25 +2017,25 @@ static void sub_80FB174(void)
Rfu.RfuFunc = sub_80FB154;
}
-static void sub_80FB184(u8 a0, u8 unused1)
+static void LmanCallback_Parent2(u8 msg, u8 param_count)
{
u8 i;
- u8 r6 = 0;
- switch (a0)
+ u8 bmDisconnectFlag = 0;
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 2;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 2;
break;
- case 0x10:
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
break;
- case 0x11:
- sub_80FB564(gUnknown_3005E10.unk_14);
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
+ sub_80FB564(lman.param[0]);
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_14 >> i) & 1)
+ if ((lman.param[0] >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
- if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0)
+ if (structPtr->activity == GetHostRFUtgtGname()->activity)
{
Rfu.unk_cd1[i] = 0;
Rfu.unk_cd5[i] = 0;
@@ -2035,60 +2043,64 @@ static void sub_80FB184(u8 a0, u8 unused1)
}
else
{
- r6 |= (1 << i);
+ bmDisconnectFlag |= (1 << i);
}
}
}
- if (r6)
+ if (bmDisconnectFlag)
{
- rfu_REQ_disconnect(r6);
+ rfu_REQ_disconnect(bmDisconnectFlag);
rfu_waitREQComplete();
}
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (Rfu.acceptSlot_flag != lman.acceptSlot_flag)
{
- rfu_REQ_disconnect(Rfu.unk_ce7 ^ gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag);
rfu_waitREQComplete();
}
- Rfu.unk_04 = 0x11;
+ Rfu.state = 17;
break;
- case 0x31:
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
break;
- case 0x30:
- case 0x33:
- Rfu.unk_f0 = 4;
- Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 4;
+ Rfu.bm_PartnerFlags &= ~lman.param[0];
if (gReceivedRemoteLinkPlayers == 1)
{
- if (Rfu.unk_ce2 == 0)
- sub_80FB0E8(a0);
+ if (Rfu.bm_PartnerFlags == 0)
+ GetLinkmanErrorParams(msg);
else
sub_80FB174();
}
- sub_80FB9E4(2, a0);
+ RfuSetErrorStatus(2, msg);
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xf3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetErrorStatus(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xf0 ... 0xf2:
- case 0xff:
- sub_80FB0E8(a0);
- sub_80FB9E4(1, a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ RfuSetErrorStatus(1, msg);
Rfu.unk_cdb = 1;
break;
}
@@ -2096,80 +2108,84 @@ static void sub_80FB184(u8 a0, u8 unused1)
static const u8 unref_843EDF3[] = _(" あきと");
-static void sub_80FB37C(u8 a0, u8 unused1)
+static void LmanCallback_Child(u8 msg, u8 param_count)
{
- switch (a0)
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 6;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 6;
break;
- case 0x20:
- Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.parentId = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.child_slot = lman.param[0];
break;
- case 0x23:
- sub_80FB9E4(2, a0);
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
+ RfuSetErrorStatus(2, msg);
break;
- case 0x24:
- Rfu.unk_04 = 11;
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
+ Rfu.state = 11;
Rfu.unk_c85 = 0;
Rfu.unk_c86 = 0;
- rfu_setRecvBuffer(TYPE_NI, Rfu.unk_c3e, &Rfu.unk_c86, 1);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ rfu_setRecvBuffer(TYPE_NI, Rfu.child_slot, &Rfu.unk_c86, 1);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
break;
- case 0x25:
- sub_80FB9E4(2, 0x25);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ RfuSetErrorStatus(2, msg);
break;
- case 0x30:
- Rfu.unk_f0 = 2;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
if (Rfu.unk_c86 == 6)
break;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
if (Rfu.unk_c86 != 9)
- sub_80FB9E4(2, a0);
- nullsub_87("LINK LOSS DISCONNECT!", 5, 5);
+ RfuSetErrorStatus(2, msg);
+ rfu_dbg_print_str("LINK LOSS DISCONNECT!", 5, 5);
if (gReceivedRemoteLinkPlayers == 1)
- sub_80FB0E8(a0);
+ GetLinkmanErrorParams(msg);
break;
- case 0x31:
- Rfu.unk_f0 = 1;
- nullsub_87("LINK LOSS RECOVERY NOW", 5, 5);
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ Rfu.linkLossRecoveryState = 1;
+ rfu_dbg_print_str("LINK LOSS RECOVERY NOW", 5, 5);
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
Rfu.unk_c3c = 1;
break;
case 0x34:
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetErrorStatus(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ RfuSetErrorStatus(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_cdb = 1;
break;
}
}
-static void sub_80FB564(s32 a0)
+static void sub_80FB564(s32 bmConnectedFlag)
{
s32 i;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((a0 >> i) & 1)
+ if ((bmConnectedFlag >> i) & 1)
{
Rfu.unk_cea[i] = 0;
Rfu.unk_cee[i] = 0xFF;
@@ -2177,17 +2193,17 @@ static void sub_80FB564(s32 a0)
}
}
-static u8 sub_80FB5A0(s32 a0)
+static u8 GetNewChildrenInUnionRoomChat(s32 bmNewChildSlot)
{
u8 ret = 0;
u8 i;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((a0 >> i) & 1)
+ if ((bmNewChildSlot >> i) & 1)
{
struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
- if (structPtr->unk_0a_0 == 0x45)
+ if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
ret |= (1 << i);
}
}
@@ -2195,73 +2211,73 @@ static u8 sub_80FB5A0(s32 a0)
return ret;
}
-static void sub_80FB5EC(u8 a0, u8 unused1)
+static void LmanCallback_Parent(u8 msg, u8 param_count)
{
u8 r1;
- switch (a0)
+ switch (msg)
{
- case 0x00:
- Rfu.unk_04 = 0x11;
+ case LMAN_MSG_INITIALIZE_COMPLETED:
+ Rfu.state = 17;
break;
- case 0x10:
- sub_80FB9E4(4, 0);
+ case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED:
+ RfuSetErrorStatus(4, 0);
break;
- case 0x11:
- if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0)
+ case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED:
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && Rfu.unk_cd9 == 0)
{
- u8 idx = sub_80FB5A0(gUnknown_3005E10.unk_14);
- if (idx != 0)
+ u8 bmAcceptSlot = GetNewChildrenInUnionRoomChat(lman.param[0]);
+ if (bmAcceptSlot != 0)
{
- r1 = 1 << sub_80F886C(idx);
- if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0)
+ r1 = 1 << sub_80F886C(bmAcceptSlot);
+ if (Rfu.unionRoomChatters == 0 && !Rfu.unk_ce8)
{
Rfu.unk_ce5 = r1;
- Rfu.unk_ce6 |= (r1 ^ idx);
- Rfu.unk_ce8 = 1;
+ Rfu.unionRoomChatters |= (r1 ^ bmAcceptSlot);
+ Rfu.unk_ce8 = TRUE;
}
else
{
- Rfu.unk_ce6 |= idx;
+ Rfu.unionRoomChatters |= bmAcceptSlot;
}
}
- if (idx != gUnknown_3005E10.unk_14)
+ if (bmAcceptSlot != lman.param[0])
{
- Rfu.unk_ce3 |= (idx ^ gUnknown_3005E10.unk_14);
+ Rfu.bm_DisconnectSlot |= (bmAcceptSlot ^ lman.param[0]);
Rfu.unk_ce4 = 2;
}
}
- else if (sub_80F9800()->unk_0a_0 == 0x54)
+ else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM))
{
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_REQ_disconnect(lman.acceptSlot_flag);
rfu_waitREQComplete();
}
- sub_80FB564(gUnknown_3005E10.unk_14);
+ sub_80FB564(lman.param[0]);
break;
- case 0x12:
+ case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED:
break;
- case 0x13:
+ case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED:
break;
- case 0x14:
- if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1)
+ case LMAN_MSG_END_WAIT_CHILD_NAME:
+ if (GetHostRFUtgtGname()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1)
{
- r1 = 1 << sub_80F886C(gUnknown_3005E10.unk_14);
- rfu_REQ_disconnect(gUnknown_3005E10.unk_00 ^ r1);
+ r1 = 1 << sub_80F886C(lman.param[0]);
+ rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1);
rfu_waitREQComplete();
}
- if (Rfu.unk_04 == 0xF)
- Rfu.unk_04 = 0x10;
+ if (Rfu.state == 0xF)
+ Rfu.state = 16;
break;
- case 0x20:
- Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_PARENT_FOUND:
+ Rfu.parentId = lman.param[0];
break;
- case 0x21:
+ case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED:
break;
- case 0x22:
- Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ case LMAN_MSG_CONNECT_PARENT_SUCCESSED:
+ Rfu.child_slot = lman.param[0];
break;
- case 0x23:
- Rfu.unk_04 = 0x12;
+ case LMAN_MSG_CONNECT_PARENT_FAILED:
+ Rfu.state = 18;
if (Rfu.unk_ccf < 2)
{
Rfu.unk_ccf++;
@@ -2269,67 +2285,72 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
}
else
{
- sub_80FB9E4(2, a0);
+ RfuSetErrorStatus(2, msg);
}
break;
- case 0x24:
- Rfu.unk_04 = 0xD;
- sub_80FB9E4(3, 0);
- rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
+ case LMAN_MSG_CHILD_NAME_SEND_COMPLETED:
+ Rfu.state = 13;
+ RfuSetErrorStatus(3, 0);
+ rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f));
break;
- case 0x25:
- sub_80FB9E4(2, a0);
+ case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED:
+ RfuSetErrorStatus(2, msg);
break;
- case 0x31:
- if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14)
- Rfu.unk_f0 = 1;
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY:
+ if (lman.acceptSlot_flag & lman.param[0])
+ Rfu.linkLossRecoveryState = 1;
break;
- case 0x32:
- Rfu.unk_f0 = 3;
+ case LMAN_MSG_LINK_RECOVERY_SUCCESSED:
+ Rfu.linkLossRecoveryState = 3;
if (gRfuLinkStatus->parentChild == MODE_CHILD)
Rfu.unk_c3c = 1;
break;
- case 0x30:
- Rfu.unk_f0 = 2;
- case 0x33:
- if (Rfu.unk_f0 != 2)
- Rfu.unk_f0 = 4;
- if (Rfu.unk_0c == 1)
+ case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED:
+ Rfu.linkLossRecoveryState = 2;
+ // fallthrough
+ case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED:
+ if (Rfu.linkLossRecoveryState != 2)
+ Rfu.linkLossRecoveryState = 4;
+ if (Rfu.parent_child == MODE_PARENT)
{
if (gReceivedRemoteLinkPlayers == 1)
{
- Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14);
- if (Rfu.unk_ce2 == 0)
- sub_80FB0E8(a0);
+ Rfu.bm_PartnerFlags &= ~(lman.param[0]);
+ if (Rfu.bm_PartnerFlags == 0)
+ GetLinkmanErrorParams(msg);
else
sub_80FB174();
}
}
else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1)
{
- sub_80FB0E8(a0);
- sub_80FD760(0);
+ GetLinkmanErrorParams(msg);
+ rfu_LMAN_stopManager(0);
}
- if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gUnknown_3005E10.unk_07 == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE)
- Rfu.unk_04 = 0x11;
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE)
+ Rfu.state = 17;
- sub_80FB9E4(2, a0);
+ RfuSetErrorStatus(2, msg);
break;
- case 0x40:
- Rfu.unk_ce3 = 0;
+ case LMAN_MSG_LINK_DISCONNECTED_BY_USER:
+ Rfu.bm_DisconnectSlot = 0;
break;
- case 0x42 ... 0x44:
+ case LMAN_MSG_RFU_POWER_DOWN:
+ case LMAN_MSG_MANAGER_STOPPED:
+ case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET:
break;
- case 0xF3:
- sub_80FB9E4(1, a0);
- sub_80FB0E8(a0);
+ case LMAN_MSG_LMAN_API_ERROR_RETURN:
+ RfuSetErrorStatus(1, msg);
+ GetLinkmanErrorParams(msg);
Rfu.unk_ef = 1;
break;
- case 0xF0 ... 0xF2:
- case 0xFF:
- sub_80FB0E8(a0);
- sub_80FB9E4(1, a0);
+ case LMAN_MSG_REQ_API_ERROR:
+ case LMAN_MSG_WATCH_DOG_TIMER_ERROR:
+ case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA:
+ case LMAN_MSG_RFU_FATAL_ERROR:
+ GetLinkmanErrorParams(msg);
+ RfuSetErrorStatus(1, msg);
Rfu.unk_cdb = 0;
break;
}
@@ -2340,39 +2361,39 @@ void sub_80FB9D0(void)
Rfu.unk_ce4 = 2;
}
-void sub_80FB9E4(u8 a0, u16 a1)
+void RfuSetErrorStatus(u8 a0, u16 msg)
{
Rfu.unk_f1 = a0;
- Rfu.unk_0a = a1;
+ Rfu.linkman_msg = msg;
}
-u8 sub_80FB9F4(void)
+u8 RfuGetErrorStatus(void)
{
return Rfu.unk_f1;
}
-bool32 sub_80FBA00(void)
+bool32 RfuIsErrorStatus1or2(void)
{
- u32 var = sub_80FB9F4() - 1;
- if (var < 2)
+ u32 var = RfuGetErrorStatus();
+ if (var == 1 || var == 2)
return TRUE;
else
return FALSE;
}
-bool32 sub_80FBA1C(void)
+bool32 GetRfuUnkCE8(void)
{
return Rfu.unk_ce8;
}
bool8 Rfu_IsMaster(void)
{
- return Rfu.unk_0c;
+ return Rfu.parent_child;
}
void RFUVSync(void)
{
- LinkRfu_syncVBlank_();
+ rfu_LMAN_syncVBlank();
}
void sub_80FBA44(void)
@@ -2399,7 +2420,7 @@ static void sub_80FBA78(void)
if (IsWirelessAdapterConnected())
{
gLinkType = LINKTYPE_0x1111;
- sub_800B1F4();
+ SetWirelessCommType1();
OpenLink();
SeedRng(gMain.vblankCounter2);
for (i = 0; i < RFU_CHILD_MAX; i++)
@@ -2410,25 +2431,25 @@ static void sub_80FBA78(void)
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
- sub_80FBB20();
+ LinkRfu_CreateIdleTask();
SetMainCallback2(sub_80FBB74);
}
}
-bool32 sub_80FBB0C(void)
+bool32 IsUnionRoomListenTaskActive(void)
{
- return FuncIsActiveTask(sub_80F8B34);
+ return FuncIsActiveTask(Task_LinkRfu_UnionRoomListen);
}
-void sub_80FBB20(void)
+void LinkRfu_CreateIdleTask(void)
{
- if (!FuncIsActiveTask(nullsub_89))
- Rfu.unk_66 = CreateTask(nullsub_89, 0);
+ if (!FuncIsActiveTask(Task_idle))
+ Rfu.unk_66 = CreateTask(Task_idle, 0);
}
-void sub_80FBB4C(void)
+void LinkRfu_DestroyIdleTask(void)
{
- if (FuncIsActiveTask(nullsub_89) == TRUE)
+ if (FuncIsActiveTask(Task_idle) == TRUE)
DestroyTask(Rfu.unk_66);
}
@@ -2440,35 +2461,35 @@ static void sub_80FBB74(void)
UpdatePaletteFade();
}
-void sub_80FBB8C(u32 a0)
+void InitializeRfuLinkManager_LinkLeader(u32 availSlots)
{
- Rfu.unk_0c = 1;
- sub_80FAF1C();
- sub_80FD430(sub_80FB184, NULL);
+ Rfu.parent_child = MODE_PARENT;
+ CopyPlayerNameToUnameBuffer();
+ rfu_LMAN_initializeManager(LmanCallback_Parent2, NULL);
sRfuReqConfig = sRfuReqConfigTemplate;
- sRfuReqConfig.availSlotFlag = sAvailSlots[a0 - 1];
- sub_80F8E74();
+ sRfuReqConfig.availSlot_flag = sAvailSlots[availSlots - 1];
+ CreateTask_LinkLeaderSearchForChildren();
}
-void sub_80FBBD8(void)
+void InitializeRfuLinkManager_JoinGroup(void)
{
- Rfu.unk_0c = 0;
- sub_80FAF1C();
- sub_80FD430(sub_80FB37C, sub_80F8D20);
- sub_80F8F10();
+ Rfu.parent_child = MODE_CHILD;
+ CopyPlayerNameToUnameBuffer();
+ rfu_LMAN_initializeManager(LmanCallback_Child, MscCallback_Child);
+ CreateTask_JoinGroupSearchForParent();
}
-void sub_80FBC00(void)
+void InitializeRfuLinkManager_EnterUnionRoom(void)
{
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- Rfu.unk_0c = 2;
- sub_80FAF1C();
- sub_80FD430(sub_80FB5EC, NULL);
+ Rfu.parent_child = 2;
+ CopyPlayerNameToUnameBuffer();
+ rfu_LMAN_initializeManager(LmanCallback_Parent, NULL);
sRfuReqConfig = sRfuReqConfigTemplate;
- sRfuReqConfig.unk_11 = 0;
- sRfuReqConfig.unk_12 = 0x258;
- Rfu.unk_67 = CreateTask(sub_80F8B34, 1);
+ sRfuReqConfig.linkRecovery_enable = 0;
+ sRfuReqConfig.linkRecovery_period = 600;
+ Rfu.unk_67 = CreateTask(Task_LinkRfu_UnionRoomListen, 1);
}
static u16 ReadU16(const void *ptr)
@@ -2477,17 +2498,24 @@ static u16 ReadU16(const void *ptr)
return (ptr_[1] << 8) | (ptr_[0]);
}
-static u8 sub_80FBC70(const u8 *a0, u16 a1)
+/*
+ * ================================================================
+ * Looks up the player by uname and pid. Returns the index in
+ * gRfuLinkStatus->partner of the first match with a valid slot ID.
+ * Returns 0xFF if not found.
+ * ================================================================
+ */
+static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId)
{
u8 i;
u8 ret = 0xFF;
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- u16 trainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId);
- if (sub_80FA44C(gRfuLinkStatus->partner[i].serialNo)
- && !StringCompare(a0, gRfuLinkStatus->partner[i].uname)
- && a1 == trainerId)
+ u16 partnerTrainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId);
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[i].serialNo)
+ && !StringCompare(trainerName, gRfuLinkStatus->partner[i].uname)
+ && trainerId == partnerTrainerId)
{
ret = i;
if (gRfuLinkStatus->partner[i].slot != 0xFF)
@@ -2498,21 +2526,21 @@ static u8 sub_80FBC70(const u8 *a0, u16 a1)
return ret;
}
-static void sub_80FBCF8(u32 a0)
+static void RfuReqDisconnectSlot(u32 bmDisconnectSlot)
{
- rfu_REQ_disconnect(a0);
+ rfu_REQ_disconnect(bmDisconnectSlot);
rfu_waitREQComplete();
- Rfu.unk_ce2 &= ~(a0);
+ Rfu.bm_PartnerFlags &= ~(bmDisconnectSlot);
rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda);
- rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
- Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
+ rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, 70);
+ Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags);
}
-void sub_80FBD4C(const u8 *ptr, u16 a1)
+void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId)
{
- u8 var = sub_80FBC70(ptr, a1);
+ u8 var = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId);
if (var != 0xFF)
- sub_80FBCF8(1 << var);
+ RfuReqDisconnectSlot(1 << var);
}
void sub_80FBD6C(u32 a0)
@@ -2524,7 +2552,7 @@ void sub_80FBD6C(u32 a0)
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1)
+ if (Rfu.linkPlayerIdx[i] == a0 && (Rfu.bm_PartnerFlags >> i) & 1)
var |= 1 << i;
}
if (var)
@@ -2534,9 +2562,9 @@ void sub_80FBD6C(u32 a0)
static void sub_80FBDB8(u8 taskId)
{
- if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ if (gSendCmd[0] == 0 && !Rfu.unk_ce8)
{
- sub_80F9D04(0xED00);
+ RfuPrepareSendBuffer(RFU_COMMAND_0xed00);
gSendCmd[1] = gTasks[taskId].data[0];
gSendCmd[2] = gTasks[taskId].data[1];
Rfu.playerCount -= gUnknown_843EC41[gTasks[taskId].data[0]];
@@ -2561,35 +2589,35 @@ static void sub_80FBE20(u32 a0, u32 a1)
gTasks[taskId].data[1] = a1;
}
-static void sub_80FBE80(u8 taskId)
+static void Task_RfuReconnectWithParent(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (sub_80F8EA4())
+ if (RfuStateIs7AndPlayerIsChild())
{
- u8 id = sub_80FBC70((u8*)data, ReadU16(&data[8]));
+ u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8]));
if (id != 0xFF)
{
if (gRfuLinkStatus->partner[id].slot != 0xFF)
{
- Rfu.unk_c3d = id;
- if (sub_80F8ECC())
+ Rfu.reconnectedParentIdx = id;
+ if (IsParentSuccessfullyReconnected())
DestroyTask(taskId);
}
- else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16)
+ else if (GetHostRFUtgtGname()->activity == ACTIVITY_WCARD2 || GetHostRFUtgtGname()->activity == ACTIVITY_WNEWS2)
{
data[15]++;
}
else
{
- sub_80FB9E4(2, 0x7000);
+ RfuSetErrorStatus(2, 0x7000);
DestroyTask(taskId);
}
}
else
{
data[15]++;
- Rfu.unk_c3d = id;
+ Rfu.reconnectedParentIdx = id;
}
}
else
@@ -2599,47 +2627,47 @@ static void sub_80FBE80(u8 taskId)
if (data[15] > 240)
{
- sub_80FB9E4(2, 0x7000);
+ RfuSetErrorStatus(2, 0x7000);
DestroyTask(taskId);
}
}
-void sub_80FBF54(const u8 *src, u16 trainerId)
+void CreateTask_RfuReconnectWithParent(const u8 *trainerName, u16 trainerId)
{
u8 taskId;
s16 *data;
Rfu.unk_f1 = 0;
- taskId = CreateTask(sub_80FBE80, 3);
+ taskId = CreateTask(Task_RfuReconnectWithParent, 3);
data = gTasks[taskId].data;
- StringCopy((u8*)(data), src);
+ StringCopy((u8*)(data), trainerName);
data[8] = trainerId;
}
-static bool32 sub_80FBF98(s16 a1, struct GFtgtGname *structPtr)
+static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct GFtgtGname *partnerGname)
{
- if (sub_80F9800()->unk_0a_0 == 0x45)
+ if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- if (structPtr->unk_0a_0 != 0x45)
+ if (partnerGname->activity != (ACTIVITY_CHAT | IN_UNION_ROOM))
return TRUE;
}
- else if (structPtr->unk_0a_0 != 0x40)
+ else if (partnerGname->activity != IN_UNION_ROOM)
{
return TRUE;
}
- else if (a1 == 0x44)
+ else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM))
{
- struct GFtgtGname *structPtr2 = (struct GFtgtGname *)&Rfu.unk_104.gname;
- if (structPtr2->species == SPECIES_EGG)
+ struct GFtgtGname *myTradeGname = (struct GFtgtGname *)&Rfu.unk_104.gname;
+ if (myTradeGname->species == SPECIES_EGG)
{
- if (structPtr->species == structPtr2->species)
+ if (partnerGname->species == myTradeGname->species)
return FALSE;
else
return TRUE;
}
- else if (structPtr->species != structPtr2->species
- || structPtr->level != structPtr2->level
- || structPtr->type != structPtr2->type)
+ else if (partnerGname->species != myTradeGname->species
+ || partnerGname->level != myTradeGname->level
+ || partnerGname->type != myTradeGname->type)
{
return TRUE;
}
@@ -2655,34 +2683,34 @@ static void sub_80FC028(u8 taskId)
if (++gTasks[taskId].data[0] > 300)
{
- sub_80FB9E4(2, 0x7000);
+ RfuSetErrorStatus(2, 0x7000);
DestroyTask(taskId);
}
- if (Rfu.unk_ccd != 0 && gUnknown_3005E10.unk_06 == 0)
+ if (Rfu.parentId != 0 && lman.parent_child == MODE_CHILD)
{
u16 trainerId = ReadU16(((struct GFtgtGname *)&Rfu.unk_104.gname)->unk_00.playerTrainerId);
- u8 id = sub_80FBC70(Rfu.unk_104.uname, trainerId);
+ u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.unk_104.uname, trainerId);
if (id != 0xFF)
{
- if (!sub_80FBF98(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname))
+ if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname))
{
- if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_80FD610(gRfuLinkStatus->partner[id].id, 0x5A))
+ if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 90))
{
- Rfu.unk_04 = 0xA;
+ Rfu.state = 10;
DestroyTask(taskId);
}
}
else
{
- sub_80FB9E4(2, 0x7000);
+ RfuSetErrorStatus(2, 0x7000);
DestroyTask(taskId);
}
}
}
}
-void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
+void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 activity)
{
u8 taskId, taskId2;
@@ -2690,11 +2718,11 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
Rfu.unk_f1 = 0;
StringCopy(Rfu.unk_104.uname, name);
memcpy(Rfu.unk_104.gname, structPtr, RFU_GAME_NAME_LENGTH);
- sub_80FEB3C();
+ rfu_LMAN_forceChangeSP();
taskId = CreateTask(sub_80FC028, 2);
- gTasks[taskId].data[1] = a2;
- taskId2 = FindTaskIdByFunc(sub_80F8B34);
- if (a2 == 0x45)
+ gTasks[taskId].data[1] = activity;
+ taskId2 = FindTaskIdByFunc(Task_LinkRfu_UnionRoomListen);
+ if (activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
if (taskId2 != 0xFF)
gTasks[taskId2].data[7] = 1;
@@ -2708,7 +2736,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2)
bool8 sub_80FC1B0(void)
{
- if (Rfu.unk_f0 == 1)
+ if (Rfu.linkLossRecoveryState == 1)
return TRUE;
else
return FALSE;
@@ -2720,19 +2748,19 @@ bool32 sub_80FC1CC(void)
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if ((gUnknown_3005E10.unk_00 >> i) & 1 && Rfu.unk_cd1[i] == 0)
+ if ((lman.acceptSlot_flag >> i) & 1 && Rfu.unk_cd1[i] == 0)
return FALSE;
}
return TRUE;
}
-static void sub_80FC208(void)
+static void rfu_dbg_clear(void)
{
s32 i;
for (i = 0; i < 20; i++)
- nullsub_87(" ", 0, i);
+ rfu_dbg_print_str(" ", 0, i);
}
static const char gUnknown_843EE47[16] = {
@@ -2748,44 +2776,44 @@ static const char gUnknown_843EE57[9] = {
static const char gUnknown_843EE60[] = {' ', '\0'};
static const char gUnknown_843EE62[] = {'*', '\0'};
-static void sub_80FC228(void)
+static void rfu_dbg_print_status(void)
{
s32 i, j;
- nullsub_88(GetBlockReceivedStatus(), 0x1C, 0x13, 2);
- nullsub_88(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1);
- nullsub_88(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1);
- if (Rfu.unk_0c == 1)
+ rfu_dbg_print_num(GetBlockReceivedStatus(), 0x1C, 0x13, 2);
+ rfu_dbg_print_num(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1);
+ rfu_dbg_print_num(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1);
+ if (Rfu.parent_child == MODE_PARENT)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
if ((gRfuLinkStatus->getNameFlag >> i) & 1)
{
- nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
- nullsub_87((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3);
- nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ rfu_dbg_print_num(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ rfu_dbg_print_str((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3);
+ rfu_dbg_print_str(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
}
}
for (i = 0; i < RFU_CHILD_MAX; i++)
{
for (j = 0; j < 14; j++)
{
- nullsub_88(Rfu.unk_14[i][j], j * 2, i + 11, 2);
+ rfu_dbg_print_num(Rfu.unk_14[i][j], j * 2, i + 11, 2);
}
}
- nullsub_87("NOWSLOT", 1, 0xF);
+ rfu_dbg_print_str("NOWSLOT", 1, 0xF);
}
else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- nullsub_88(0, 1, i + 3, 4);
- nullsub_87(gUnknown_843EE47, 6, i + 3);
- nullsub_87(gUnknown_843EE57, 0x16, i + 3);
+ rfu_dbg_print_num(0, 1, i + 3, 4);
+ rfu_dbg_print_str(gUnknown_843EE47, 6, i + 3);
+ rfu_dbg_print_str(gUnknown_843EE57, 0x16, i + 3);
}
- nullsub_88(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4);
- nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3);
- nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3);
+ rfu_dbg_print_num(gRfuLinkStatus->partner[Rfu.child_slot].serialNo, 1, 3, 4);
+ rfu_dbg_print_str(gRfuLinkStatus->partner[Rfu.child_slot].gname, 6, 3);
+ rfu_dbg_print_str(gRfuLinkStatus->partner[Rfu.child_slot].uname, 0x16, 3);
}
else
{
@@ -2793,16 +2821,16 @@ static void sub_80FC228(void)
{
if (gRfuLinkStatus->partner[i].slot != 0xFF)
{
- nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
- nullsub_88(gRfuLinkStatus->partner[i].id, 6, i + 3, 4);
- nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ rfu_dbg_print_num(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ rfu_dbg_print_num(gRfuLinkStatus->partner[i].id, 6, i + 3, 4);
+ rfu_dbg_print_str(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
}
}
for (; i < RFU_CHILD_MAX; i++)
{
- nullsub_88(0, 1, i + 3, 4);
- nullsub_87(gUnknown_843EE47, 6, i + 3);
- nullsub_87(gUnknown_843EE57, 0x16, i + 3);
+ rfu_dbg_print_num(0, 1, i + 3, 4);
+ rfu_dbg_print_str(gUnknown_843EE47, 6, i + 3);
+ rfu_dbg_print_str(gUnknown_843EE57, 0x16, i + 3);
}
}
}
@@ -2823,15 +2851,15 @@ static const char gUnknown_843EEA8[][8] = {
static u32 sub_80FC44C(void)
{
- return Rfu.unk_9e8.unk_232;
+ return Rfu.unk_9e8.count;
}
u32 GetRfuRecvQueueLength(void)
{
- return Rfu.unk_124.unk_8c2;
+ return Rfu.unk_124.count;
}
-static void nullsub_89(u8 taskId)
+static void Task_idle(u8 taskId)
{
}
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index 31ea0830b..d3f6e93db 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -166,7 +166,7 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
SpriteCallbackDummy
};
-void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
+void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *queue)
{
s32 i;
s32 j;
@@ -175,16 +175,16 @@ void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
{
for (j = 0; j < 70; j++)
{
- ptr->unk_00[i][j] = 0;
+ queue->slots[i][j] = 0;
}
}
- ptr->unk_8c1 = 0;
- ptr->unk_8c0 = 0;
- ptr->unk_8c2 = 0;
- ptr->unk_8c3 = 0;
+ queue->send_slot = 0;
+ queue->recv_slot = 0;
+ queue->count = 0;
+ queue->full = 0;
}
-void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
+void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr)
{
s32 i;
s32 j;
@@ -193,16 +193,16 @@ void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
{
for (j = 0; j < 14; j++)
{
- ptr->unk_00[i][j] = 0;
+ ptr->slots[i][j] = 0;
}
}
- ptr->unk_231 = 0;
- ptr->unk_230 = 0;
- ptr->unk_232 = 0;
- ptr->unk_233 = 0;
+ ptr->send_slot = 0;
+ ptr->recv_slot = 0;
+ ptr->count = 0;
+ ptr->full = 0;
}
-static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
+static void RFU_queue_2_256_reset(struct UnkRfuStruct_Sub_Unused *ptr)
{
s32 i;
s32 j;
@@ -211,29 +211,29 @@ static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
{
for (j = 0; j < 256; j++)
{
- ptr->unk_00[i][j] = 0;
+ ptr->slots[i][j] = 0;
}
}
- ptr->unk_201 = 0;
- ptr->unk_200 = 0;
- ptr->unk_202 = 0;
- ptr->unk_203 = 0;
+ ptr->send_slot = 0;
+ ptr->recv_slot = 0;
+ ptr->count = 0;
+ ptr->full = 0;
}
-void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *queue, u8 *data)
{
s32 i;
u16 imeBak;
u8 count;
- if (q1->unk_8c2 < 20)
+ if (queue->count < 20)
{
imeBak = REG_IME;
REG_IME = 0;
count = 0;
for (i = 0; i < 70; i += 14)
{
- if (q2[i] == 0 && q2[i + 1] == 0)
+ if (data[i] == 0 && data[i + 1] == 0)
{
count++;
}
@@ -242,36 +242,36 @@ void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
{
for (i = 0; i < 70; i++)
{
- q1->unk_00[q1->unk_8c0][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_8c0++;
- q1->unk_8c0 %= 20;
- q1->unk_8c2++;
+ queue->recv_slot++;
+ queue->recv_slot %= 20;
+ queue->count++;
for (i = 0; i < 70; i++)
{
- q2[i] = 0;
+ data[i] = 0;
}
}
REG_IME = imeBak;
}
else
{
- q1->unk_8c3 = 1;
+ queue->full = 1;
}
}
-void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *data)
{
s32 i;
u16 imeBak;
- if (q1->unk_232 < 40)
+ if (queue->count < 40)
{
imeBak = REG_IME;
REG_IME = 0;
for (i = 0; i < 14; i++)
{
- if (q2[i] != 0)
+ if (data[i] != 0)
{
break;
}
@@ -280,57 +280,57 @@ void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
{
for (i = 0; i < 14; i++)
{
- q1->unk_00[q1->unk_230][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_230++;
- q1->unk_230 %= 40;
- q1->unk_232++;
+ queue->recv_slot++;
+ queue->recv_slot %= 40;
+ queue->count++;
for (i = 0; i < 14; i++)
{
- q2[i] = 0;
+ data[i] = 0;
}
}
REG_IME = imeBak;
}
else
{
- q1->unk_233 = 1;
+ queue->full = 1;
}
}
-bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
+bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 *queue, u8 *dest)
{
u16 imeBak;
s32 i;
imeBak = REG_IME;
REG_IME = 0;
- if (q1->unk_8c0 == q1->unk_8c1 || q1->unk_8c3 != 0)
+ if (queue->recv_slot == queue->send_slot || queue->full)
{
for (i = 0; i < 70; i++)
{
- q2[i] = 0;
+ dest[i] = 0;
}
REG_IME = imeBak;
return FALSE;
}
for (i = 0; i < 70; i++)
{
- q2[i] = q1->unk_00[q1->unk_8c1][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_8c1++;
- q1->unk_8c1 %= 20;
- q1->unk_8c2--;
+ queue->send_slot++;
+ queue->send_slot %= 20;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
+bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *dest)
{
s32 i;
u16 imeBak;
- if (q1->unk_230 == q1->unk_231 || q1->unk_233 != 0)
+ if (queue->recv_slot == queue->send_slot || queue->full != 0)
{
return FALSE;
}
@@ -338,98 +338,98 @@ bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
REG_IME = 0;
for (i = 0; i < 14; i++)
{
- q2[i] = q1->unk_00[q1->unk_231][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_231++;
- q1->unk_231 %= 40;
- q1->unk_232--;
+ queue->send_slot++;
+ queue->send_slot %= 40;
+ queue->count--;
REG_IME = imeBak;
return TRUE;
}
-void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
+void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *queue, const u8 *data)
{
s32 i;
- if (q2[1] == 0)
+ if (data[1] == 0)
{
- sub_80FC888(q1, NULL);
+ RFU_queue_2_14_send(queue, NULL);
}
else
{
for (i = 0; i < 14; i++)
{
- q1->unk_00[q1->unk_1c][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_1c++;
- q1->unk_1c %= 2;
- if (q1->unk_1e < 2)
+ queue->recv_slot++;
+ queue->recv_slot %= 2;
+ if (queue->count < 2)
{
- q1->unk_1e++;
+ queue->count++;
}
else
{
- q1->unk_1d = q1->unk_1c;
+ queue->send_slot = queue->recv_slot;
}
}
}
-bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
+bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *queue, u8 *dest)
{
s32 i;
- if (q1->unk_1e == 0)
+ if (queue->count == 0)
{
return FALSE;
}
- if (q2 != NULL)
+ if (dest != NULL)
{
for (i = 0; i < 14; i++)
{
- q2[i] = q1->unk_00[q1->unk_1d][i];
+ dest[i] = queue->slots[queue->send_slot][i];
}
}
- q1->unk_1d++;
- q1->unk_1d %= 2;
- q1->unk_1e--;
+ queue->send_slot++;
+ queue->send_slot %= 2;
+ queue->count--;
return TRUE;
}
-static void sub_80FC8D8(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static void RFU_queue_2_256_recv(struct UnkRfuStruct_Sub_Unused *queue, u8 *data)
{
s32 i;
- if (q1->unk_202 < 2)
+ if (queue->count < 2)
{
for (i = 0; i < 256; i++)
{
- q1->unk_00[q1->unk_200][i] = q2[i];
+ queue->slots[queue->recv_slot][i] = data[i];
}
- q1->unk_200++;
- q1->unk_200 %= 2;
- q1->unk_202++;
+ queue->recv_slot++;
+ queue->recv_slot %= 2;
+ queue->count++;
}
else
{
- q1->unk_203 = 1;
+ queue->full = 1;
}
}
-static bool8 sub_80FC944(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
+static bool8 RFU_queue_2_256_send(struct UnkRfuStruct_Sub_Unused *queue, u8 *send)
{
s32 i;
- if (q1->unk_200 == q1->unk_201 || q1->unk_203)
+ if (queue->recv_slot == queue->send_slot || queue->full)
{
return FALSE;
}
for (i = 0; i < 256; i++)
{
- q2[i] = q1->unk_00[q1->unk_201][i];
+ send[i] = queue->slots[queue->send_slot][i];
}
- q1->unk_201++;
- q1->unk_201 %= 2;
- q1->unk_202--;
+ queue->send_slot++;
+ queue->send_slot %= 2;
+ queue->count--;
return TRUE;
}
@@ -438,7 +438,7 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
s32 i;
u8 rval;
u16 r5 = 0;
- static u8 _3002018;
+ static u8 counter;
switch (mode)
{
@@ -470,11 +470,11 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
case 3:
for (i = 0; i < 200; i++)
{
- q1[i] = i + 1 + _3002018;
- r5 += (i + 1 + _3002018) & 0xFF;
+ q1[i] = i + 1 + counter;
+ r5 += (i + 1 + counter) & 0xFF;
}
*((u16 *)(q1 + i)) = r5;
- _3002018++;
+ counter++;
break;
}
}
@@ -603,7 +603,7 @@ static u8 GetConnectedChildStrength(u8 maxFlags)
}
#endif
-void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3)
+void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
{
s32 i;
@@ -613,30 +613,37 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3
}
for (i = 0; i < RFU_CHILD_MAX; i++)
{
- data->unk_04[i] = r3;
- r3 >>= 8;
+ data->child_sprite_gender[i] = child_sprite_genders;
+ child_sprite_genders >>= 8;
}
data->playerGender = gSaveBlock2Ptr->playerGender;
- data->unk_0a_0 = activity;
- data->unk_0a_7 = r2;
- data->unk_00.unk_00_0 = GAME_LANGUAGE;
- data->unk_00.unk_01_2 = GAME_VERSION;
- data->unk_00.unk_00_4 = 0;
- data->unk_00.unk_00_5 = 0;
+ data->activity = activity;
+ data->started = started;
+ data->unk_00.language = GAME_LANGUAGE;
+ data->unk_00.version = GAME_VERSION;
+ data->unk_00.hasNews = FALSE;
+ data->unk_00.hasCard = FALSE;
data->unk_00.unk_00_6 = 0;
data->unk_00.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS);
data->unk_00.hasNationalDex = IsNationalPokedexEnabled();
data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
}
-bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
+/*
+ * ==========================================================
+ * Returns 1 if parent, 0 if child or neutral.
+ * If partner serial number is valid, copies gname and uname.
+ * Otherwise, blanks these.
+ * ==========================================================
+ */
+bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx)
{
bool8 retVal;
- if (gUnknown_3005E10.unk_06 == 1)
+ if (lman.parent_child == MODE_PARENT)
{
retVal = TRUE;
- if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
{
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
@@ -650,7 +657,7 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
else
{
retVal = FALSE;
- if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo))
+ if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo))
{
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
@@ -664,7 +671,13 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
return retVal;
}
-bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx)
+/*
+ * ==========================================================
+ * Specific check for serial number 0x7F7D,
+ * which comes from ???
+ * ==========================================================
+ */
+bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx)
{
bool8 retVal = FALSE;
if (gRfuLinkStatus->partner[idx].serialNo == 0x7F7D)
@@ -824,7 +837,7 @@ void UpdateWirelessStatusIndicatorSprite(void)
gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum;
gMain.oamBuffer[125].tileNum = sprite->data[6] + sprite->anims[sprite->data[2]][sprite->data[4]].frame.imageValue;
CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData));
- if (sub_80FB9F4() == 1)
+ if (RfuGetErrorStatus() == 1)
{
DestroyWirelessStatusIndicatorSprite();
}
@@ -848,7 +861,7 @@ static void ZeroName(u8 *name)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
*name++ = 0;
}
@@ -858,7 +871,7 @@ static bool32 NameIsEmpty(const u8 *name)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
if (*name++ != 0)
{
diff --git a/src/list_menu.c b/src/list_menu.c
index 6c4d50961..706c1679b 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -763,7 +763,7 @@ void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y)
BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32);
}
-void sub_8107D38(u8 palOffset, u8 palId)
+void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
{
const u16 *palette;
diff --git a/src/load_save.c b/src/load_save.c
index 9c30494f8..7f16f74a5 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -284,8 +284,8 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey)
{
int i;
- for(i = 0; i < 4; i++)
- ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->unkArray[i].unk4, encryptionKey);
+ for(i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->trainerTower[i].bestTime, encryptionKey);
sub_8054F38(encryptionKey);
ApplyNewEncryptionKeyToBagItems_(encryptionKey);
diff --git a/src/mail_data.c b/src/mail_data.c
index d4fa649e1..43ca1d0e6 100644
--- a/src/mail_data.c
+++ b/src/mail_data.c
@@ -20,7 +20,7 @@ void ClearMailStruct(struct MailStruct *mail)
for (i = 0; i < MAIL_WORDS_COUNT; i++)
mail->words[i] = 0xFFFF;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->playerName[i] = EOS;
for (i = 0; i < 4; i++)
mail->trainerId[i] = 0;
@@ -52,7 +52,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
{
for (i = 0; i < MAIL_WORDS_COUNT; i++)
gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
- for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH && gSaveBlock2Ptr->playerName[i] != EOS; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
for (; i <= 5; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE;
diff --git a/src/mevent.c b/src/mevent.c
index afad326b5..9eabcad61 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -9,7 +9,7 @@
#include "decompress.h"
#include "link.h"
#include "link_rfu.h"
-#include "unk_815c27c.h"
+#include "ereader_helpers.h"
#include "util.h"
#include "script.h"
#include "event_data.h"
@@ -21,77 +21,65 @@
#include "mystery_gift_menu.h"
#include "help_system.h"
#include "mevent.h"
+#include "strings.h"
struct MEventTaskData1
{
- u16 t00;
+ u16 stateAdvanceDelay;
u16 t02;
u16 t04;
u16 t06;
u8 state;
- u8 t09;
+ u8 textOrReceiveState;
u8 t0A;
u8 t0B;
u8 t0C;
u8 t0D;
- u8 t0E;
+ u8 initialSendResult;
struct MEvent_Str_2 *t10;
};
-void sub_8143910(u8 taskId);
-bool32 sub_8143E64(const struct MEWonderNewsData * src);
-void sub_8143E9C(void);
-void sub_8143ED0(void);
-bool32 sub_8144018(const struct MEWonderCardData * src);
-void BlankSavedWonderCard(void);
-void BlankMEventBuffer2(void);
-void sub_8144824(u32, u32, u32 *, s32);
-void sub_8144790(void);
-
-extern const u8 gUnknown_841DE52[];
-extern const u8 gUnknown_841DE53[];
-extern const u8 gUnknown_841DE54[];
-extern const u8 gUnknown_841DE7C[];
-extern const u8 gUnknown_841DE7D[];
-extern const u8 gUnknown_841DE95[];
-extern const u8 gUnknown_841DE96[];
-extern const u8 gUnknown_841DE97[];
-extern const u8 gUnknown_841DE98[];
-extern const u8 gUnknown_841DE99[];
-extern const u8 gUnknown_841DE9A[];
-extern const u8 gUnknown_841DE9B[];
-extern const u8 gUnknown_841DE9C[];
+static void Task_EReaderComm(u8 taskId);
+static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * src);
+static void BlankWonderNews(void);
+static void BlankMENewsJisan(void);
+static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * src);
+static void BlankSavedWonderCard(void);
+static void BlankMEventBuffer2(void);
+static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count);
+static void BlankBuffer344(void);
+
extern const u8 gUnknownSerialData_Start[];
extern const u8 gUnknownSerialData_End[];
-const u16 gUnknown_8466F00[] = {
- 0x02a7,
- 0x02a8,
- 0x02a9,
- 0x02aa,
- 0x02ab,
- 0x02ac,
- 0x02ad,
- 0x02ae,
- 0x02af,
- 0x02b0,
- 0x02b1,
- 0x02b2,
- 0x02b3,
- 0x02b4,
- 0x02b5,
- 0x02b6,
- 0x02b7,
- 0x02b8,
- 0x02b9,
- 0x02ba
+static const u16 sGiftItemFlagIds[] = {
+ FLAG_GOT_AURORA_TICKET,
+ FLAG_GOT_MYSTIC_TICKET,
+ FLAG_0x2A9,
+ FLAG_0x2AA,
+ FLAG_0x2AB,
+ FLAG_0x2AC,
+ FLAG_0x2AD,
+ FLAG_0x2AE,
+ FLAG_0x2AF,
+ FLAG_0x2B0,
+ FLAG_0x2B1,
+ FLAG_0x2B2,
+ FLAG_0x2B3,
+ FLAG_0x2B4,
+ FLAG_0x2B5,
+ FLAG_0x2B6,
+ FLAG_0x2B7,
+ FLAG_0x2B8,
+ FLAG_0x2B9,
+ FLAG_0x2BA
};
-struct MEvent_Str_1 gUnknown_3005ED0;
+struct MEvent_Str_1 sMEventSendToEReaderManager;
-static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE;
+static EWRAM_DATA bool32 sReceivedWonderCardIsValid = FALSE;
-void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data)
+void SendUnknownSerialData_Init(struct MEvent_Str_1 *mgr, size_t size, const void * data)
{
vu16 imeBak = REG_IME;
REG_IME = 0;
@@ -106,7 +94,7 @@ void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data)
mgr->data = data;
}
-void sub_8143644(struct MEvent_Str_1 *unused)
+void SendUnknownSerialData_Teardown(struct MEvent_Str_1 *unused)
{
vu16 imeBak = REG_IME;
REG_IME = 0;
@@ -116,15 +104,15 @@ void sub_8143644(struct MEvent_Str_1 *unused)
REG_IME = imeBak;
}
-u8 sub_8143674(struct MEvent_Str_1 *mgr)
+u8 SendUnknownSerialData_Run(struct MEvent_Str_1 *mgr)
{
u8 resp = 0;
mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0);
- if ((mgr->status & 0x13) == 0x10)
+ if ((mgr->status & 0x13) == 0x10) // checksum OK and xfer off
resp = 1;
- if (mgr->status & 8)
+ if (mgr->status & 8) // cancelled by player
resp = 2;
- if (mgr->status & 4)
+ if (mgr->status & 4) // timed out
resp = 3;
gShouldAdvanceLinkState = 0;
return resp;
@@ -161,32 +149,32 @@ static bool32 IsEReaderConnectionSane(void)
return FALSE;
}
-u32 sub_8143770(u8 * r4, u16 * r5)
+static u32 EReaderReceive(u8 * state_p, u16 * receiveDelay)
{
- if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred())
+ if ((*state_p == 3 || *state_p == 4 || *state_p == 5) && HasLinkErrorOccurred())
{
- *r4 = 0;
+ *state_p = 0;
return 3;
}
- switch (*r4)
+ switch (*state_p)
{
case 0:
if (IsLinkMaster() && GetLinkPlayerCount_2() > 1)
{
- *r4 = 1;
+ *state_p = 1;
;
}
else if (JOY_NEW(B_BUTTON))
{
- *r4 = 0;
+ *state_p = 0;
return 1;
}
break;
case 1:
- if (++(*r5) > 5)
+ if (++(*receiveDelay) > 5)
{
- *r5 = 0;
- *r4 = 2;
+ *receiveDelay = 0;
+ *state_p = 2;
}
break;
case 2:
@@ -194,19 +182,19 @@ u32 sub_8143770(u8 * r4, u16 * r5)
{
PlaySE(SE_PINPON);
CheckShouldAdvanceLinkState();
- *r5 = 0;
- *r4 = 3;
+ *receiveDelay = 0;
+ *state_p = 3;
}
else if (JOY_NEW(B_BUTTON))
{
- *r4 = 0;
+ *state_p = 0;
return 1;
}
break;
case 3:
- if (++(*r5) > 30)
+ if (++(*receiveDelay) > 30)
{
- *r4 = 0;
+ *state_p = 0;
return 5;
}
else if (IsLinkConnectionEstablished())
@@ -215,24 +203,24 @@ u32 sub_8143770(u8 * r4, u16 * r5)
{
if (IsLinkPlayerDataExchangeComplete())
{
- *r4 = 0;
+ *state_p = 0;
return 2;
}
else
- *r4 = 4;
+ *state_p = 4;
}
else
- *r4 = 3;
+ *state_p = 3;
}
break;
case 4:
- sub_800AA80(0);
- *r4 = 5;
+ Link_StartSend5FFFwithParam(0);
+ *state_p = 5;
break;
case 5:
if (!gReceivedRemoteLinkPlayers)
{
- *r4 = 0;
+ *state_p = 0;
return 4;
}
break;
@@ -242,19 +230,19 @@ u32 sub_8143770(u8 * r4, u16 * r5)
void task_add_00_ereader(void)
{
- u8 taskId = CreateTask(sub_8143910, 0);
+ u8 taskId = CreateTask(Task_EReaderComm, 0);
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
data->state = 0;
- data->t09 = 0;
+ data->textOrReceiveState = 0;
data->t0A = 0;
data->t0B = 0;
data->t0C = 0;
data->t0D = 0;
- data->t00 = 0;
+ data->stateAdvanceDelay = 0;
data->t02 = 0;
data->t04 = 0;
data->t06 = 0;
- data->t0E = 0;
+ data->initialSendResult = 0;
data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2));
}
@@ -273,22 +261,22 @@ static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1)
return FALSE;
}
-void sub_8143910(u8 taskId)
+static void Task_EReaderComm(u8 taskId)
{
struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data;
switch (data->state)
{
case 0:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE52))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader))
data->state = 1;
break;
case 1:
ResetTTDataBuffer();
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
data->state = 2;
break;
case 2:
- if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
+ if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10))
data->state = 3;
break;
case 3:
@@ -301,22 +289,22 @@ void sub_8143910(u8 taskId)
data->state = 13;
break;
case 4:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE53))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu))
{
- AddTextPrinterToWindow1(gUnknown_841DE54);
- ResetDelayTimer(&data->t00);
+ AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
+ ResetDelayTimer(&data->stateAdvanceDelay);
data->state = 5;
}
break;
case 5:
- if (AdvanceDelayTimerCheckTimeout(&data->t00, 90))
+ if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 90))
{
ResetTTDataBuffer();
data->state = 6;
}
else if (JOY_NEW(B_BUTTON))
{
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
PlaySE(SE_SELECT);
data->state = 23;
}
@@ -326,12 +314,12 @@ void sub_8143910(u8 taskId)
{
PlaySE(SE_SELECT);
CloseLink();
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
data->state = 23;
}
else if (GetLinkPlayerCount_2() > 1)
{
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
CloseLink();
data->state = 7;
}
@@ -339,72 +327,80 @@ void sub_8143910(u8 taskId)
{
PlaySE(SE_SELECT);
CloseLink();
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
data->state = 8;
}
- else if (AdvanceDelayTimerCheckTimeout(&data->t00, 10))
+ else if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10))
{
CloseLink();
ResetTTDataBuffer();
- ResetDelayTimer(&data->t00);
+ ResetDelayTimer(&data->stateAdvanceDelay);
}
break;
case 7:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7C))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_LinkIsIncorrect))
data->state = 4;
break;
case 8:
- AddTextPrinterToWindow1(gUnknown_841DE95);
- sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start);
+ AddTextPrinterToWindow1(gJPText_Connecting);
+ SendUnknownSerialData_Init(&sMEventSendToEReaderManager, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start);
data->state = 9;
break;
case 9:
- data->t0E = sub_8143674(&gUnknown_3005ED0);
- if (data->t0E != 0)
+ data->initialSendResult = SendUnknownSerialData_Run(&sMEventSendToEReaderManager);
+ if (data->initialSendResult != 0)
data->state = 10;
break;
case 10:
- sub_8143644(&gUnknown_3005ED0);
- if (data->t0E == 3)
+ SendUnknownSerialData_Teardown(&sMEventSendToEReaderManager);
+ if (data->initialSendResult == 3)
+ // Error
data->state = 20;
- else if (data->t0E == 1)
+ else if (data->initialSendResult == 1)
{
- ResetDelayTimer(&data->t00);
- AddTextPrinterToWindow1(gUnknown_841DE9B);
+ // OK
+ ResetDelayTimer(&data->stateAdvanceDelay);
+ AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment);
data->state = 11;
}
else
+ // Try again
data->state = 0;
break;
case 11:
- if (AdvanceDelayTimerCheckTimeout(&data->t00, 840))
+ if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 840))
data->state = 12;
break;
case 12:
ResetTTDataBuffer();
- AddTextPrinterToWindow1(gUnknown_841DE98);
+ AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
data->state = 13;
break;
case 13:
- switch (sub_8143770(&data->t09, &data->t00))
+ switch (EReaderReceive(&data->textOrReceiveState, &data->stateAdvanceDelay))
{
case 0:
+ // Running
break;
case 2:
- AddTextPrinterToWindow1(gUnknown_841DE95);
+ // Done
+ AddTextPrinterToWindow1(gJPText_Connecting);
data->state = 14;
break;
case 1:
+ // Cancelled
PlaySE(SE_SELECT);
CloseLink();
data->state = 23;
break;
case 5:
+ // Error Try Again
CloseLink();
data->state = 21;
break;
case 3:
case 4:
+ // Error CheckLink
CloseLink();
data->state = 20;
break;
@@ -423,55 +419,55 @@ void sub_8143910(u8 taskId)
}
break;
case 15:
- data->t0E = ValidateTrainerTowerData((struct EReaderTrainerHillSet *)gDecompressionBuffer);
- sub_800AA80(data->t0E);
+ data->initialSendResult = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer);
+ Link_StartSend5FFFwithParam(data->initialSendResult);
data->state = 16;
break;
case 16:
if (!gReceivedRemoteLinkPlayers)
{
- if (data->t0E == 1)
+ if (data->initialSendResult == 1)
data->state = 17;
else
data->state = 20;
}
break;
case 17:
- if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerHillSet *)gDecompressionBuffer))
+ if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerTowerSet *)gDecompressionBuffer))
{
- AddTextPrinterToWindow1(gUnknown_841DE99);
- ResetDelayTimer(&data->t00);
+ AddTextPrinterToWindow1(gJPText_ConnectionComplete);
+ ResetDelayTimer(&data->stateAdvanceDelay);
data->state = 18;
}
else
data->state = 22;
break;
case 18:
- if (AdvanceDelayTimerCheckTimeout(&data->t00, 120))
+ if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 120))
{
- AddTextPrinterToWindow1(gUnknown_841DE9A);
- PlayFanfare(258);
+ AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii);
+ PlayFanfare(MUS_FANFA4);
data->state = 19;
}
break;
case 19:
- if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON))
+ if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON))
data->state = 26;
break;
case 23:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7D))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted))
data->state = 26;
break;
case 20:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE96))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink))
data->state = 0;
break;
case 21:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE97))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain))
data->state = 0;
break;
case 22:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE9C))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData))
data->state = 0;
break;
case 26:
@@ -483,10 +479,10 @@ void sub_8143910(u8 taskId)
}
}
-void sub_8143D24(void)
+void InitMEventData(void)
{
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers, sizeof(gSaveBlock1Ptr->mysteryEventBuffers));
- sub_8143ED0();
+ BlankMENewsJisan();
EC_ResetMEventProfileMaybe();
}
@@ -517,14 +513,14 @@ u16 * GetMEventProfileECWordsMaybe(void)
void DestroyWonderNews(void)
{
- sub_8143E9C();
+ BlankWonderNews();
}
-bool32 sub_8143DC8(const struct MEWonderNewsData * src)
+bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src)
{
- if (!sub_8143E64(src))
+ if (!IsReceivedWonderNewsHeaderValid(src))
return FALSE;
- sub_8143E9C();
+ BlankWonderNews();
gSaveBlock1Ptr->mysteryEventBuffers.menews.data = *src;
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData));
return TRUE;
@@ -534,14 +530,14 @@ bool32 ValidateReceivedWonderNews(void)
{
if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)) != gSaveBlock1Ptr->mysteryEventBuffers.menews.crc)
return FALSE;
- if (!sub_8143E64(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data))
+ if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data))
return FALSE;
return TRUE;
}
-bool32 sub_8143E64(const struct MEWonderNewsData * data)
+static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * data)
{
- if (data->unk_00 == 0)
+ if (data->newsId == 0)
return FALSE;
return TRUE;
}
@@ -549,24 +545,24 @@ bool32 sub_8143E64(const struct MEWonderNewsData * data)
bool32 WonderNews_Test_Unk_02(void)
{
const struct MEWonderNewsData * data = &gSaveBlock1Ptr->mysteryEventBuffers.menews.data;
- if (data->unk_02 == 0)
+ if (data->shareState == 0)
return FALSE;
return TRUE;
}
-void sub_8143E9C(void)
+static void BlankWonderNews(void)
{
CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryEventBuffers.menews.data));
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = 0;
}
-void sub_8143ED0(void)
+static void BlankMENewsJisan(void)
{
CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct MENewsJisanStruct));
MENewsJisanReset();
}
-bool32 sub_8143EF4(const u8 * src)
+bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src)
{
const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data;
u32 i;
@@ -584,22 +580,23 @@ void DestroyWonderCard(void)
{
BlankSavedWonderCard();
BlankMEventBuffer2();
- sub_8144790();
+ BlankBuffer344();
ClearRamScript();
- sub_806E2D0();
- sub_806E370();
+ ResetMysteryEventFlags();
+ ResetMysteryEventVars();
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
}
-bool32 sub_8143F68(const struct MEWonderCardData * data)
+bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data)
{
struct MEventBuffer_3430_Sub * r2;
struct MEWonderCardData * r1;
- if (!sub_8144018(data))
+ if (!IsReceivedWonderCardHeaderValid(data))
return FALSE;
DestroyWonderCard();
memcpy(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, data, sizeof(struct MEWonderCardData));
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData));
+ // Annoying hack to match
r2 = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
r1 = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
r2->unk_06 = r1->unk_02;
@@ -610,24 +607,24 @@ bool32 ValidateReceivedWonderCard(void)
{
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)))
return FALSE;
- if (!sub_8144018(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data))
+ if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data))
return FALSE;
- if (!sub_8069DFC())
+ if (!ValidateRamScript())
return FALSE;
return TRUE;
}
-bool32 sub_8144018(const struct MEWonderCardData * data)
+static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * data)
{
- if (data->unk_00 == 0)
+ if (data->cardId == 0)
return FALSE;
if (data->unk_08_0 > 2)
return FALSE;
- if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2))
+ if (!(data->shareState == 0 || data->shareState == 1 || data->shareState == 2))
return FALSE;
if (data->unk_08_2 > 7)
return FALSE;
- if (data->unk_09 > 7)
+ if (data->recvMonCapacity > 7)
return FALSE;
return TRUE;
}
@@ -635,18 +632,18 @@ bool32 sub_8144018(const struct MEWonderCardData * data)
bool32 WonderCard_Test_Unk_08_6(void)
{
const struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
- if (data->unk_08_6 == 0)
+ if (data->shareState == 0)
return FALSE;
return TRUE;
}
-void BlankSavedWonderCard(void)
+static void BlankSavedWonderCard(void)
{
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData));
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = 0;
}
-void BlankMEventBuffer2(void)
+static void BlankMEventBuffer2(void)
{
CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16));
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0;
@@ -655,17 +652,17 @@ void BlankMEventBuffer2(void)
u16 GetWonderCardFlagId(void)
{
if (ValidateReceivedWonderCard())
- return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00;
+ return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId;
return 0;
}
-void sub_814410C(struct MEWonderCardData * buffer)
+void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer)
{
- if (buffer->unk_08_6 == 1)
- buffer->unk_08_6 = 0;
+ if (buffer->shareState == 1)
+ buffer->shareState = 0;
}
-bool32 sub_8144124(u16 a0)
+static bool32 IsCardIdInValidRange(u16 a0)
{
if (a0 >= 1000 && a0 < 1020)
return TRUE;
@@ -675,33 +672,33 @@ bool32 sub_8144124(u16 a0)
bool32 CheckReceivedGiftFromWonderCard(void)
{
u16 value = GetWonderCardFlagId();
- if (!sub_8144124(value))
+ if (!IsCardIdInValidRange(value))
return FALSE;
- if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE)
+ if (FlagGet(sGiftItemFlagIds[value - 1000]) == TRUE)
return FALSE;
return TRUE;
}
-s32 sub_8144184(const struct MEventBuffer_3430_Sub * data, s32 size)
+static s32 CountReceivedDistributionMons(const struct MEventBuffer_3430_Sub * data, s32 size)
{
s32 r3 = 0;
s32 i;
for (i = 0; i < size; i++)
{
- if (data->unk_08[1][i] && data->unk_08[0][i])
+ if (data->distributedMons[1][i] && data->distributedMons[0][i])
r3++;
}
return r3;
}
-bool32 sub_81441AC(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size)
+static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size)
{
s32 i;
for (i = 0; i < size; i++)
{
- if (data1->unk_08[1][i] == data2[1])
+ if (data1->distributedMons[1][i] == data2[1])
return TRUE;
- if (data1->unk_08[0][i] == data2[0])
+ if (data1->distributedMons[0][i] == data2[0])
return TRUE;
}
return FALSE;
@@ -718,7 +715,7 @@ static bool32 IsWonderCardSpeciesValid(const u16 * data)
return TRUE;
}
-s32 sub_8144218(void)
+static s32 ValidateCardAndCountMonsReceived(void)
{
struct MEWonderCardData * data;
if (!ValidateReceivedWonderCard())
@@ -726,24 +723,24 @@ s32 sub_8144218(void)
data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
if (data->unk_08_0 != 1)
return 0;
- return sub_8144184(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->unk_09);
+ return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->recvMonCapacity);
}
-bool32 sub_8144254(const u16 * data)
+bool32 MEvent_ReceiveDistributionMon(const u16 * data)
{
struct MEWonderCardData * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
- s32 size = buffer->unk_09;
+ s32 capacity = buffer->recvMonCapacity;
s32 i;
if (!IsWonderCardSpeciesValid(data))
return FALSE;
- if (sub_81441AC(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, size))
+ if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, capacity))
return FALSE;
- for (i = 0; i < size; i++)
+ for (i = 0; i < capacity; i++)
{
- if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] == 0)
+ if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] == 0)
{
- gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] = data[1];
- gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] = data[0];
+ gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] = data[1];
+ gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] = data[0];
return TRUE;
}
}
@@ -771,9 +768,9 @@ void BuildMEventClientHeader(struct MEventClientHeaderStruct * data)
if (ValidateReceivedWonderCard())
{
// Populate fields
- data->id = GetSavedWonderCard()->unk_00;
+ data->id = GetSavedWonderCard()->cardId;
data->unk_20 = *sav1_get_mevent_buffer_2();
- data->unk_44 = GetSavedWonderCard()->unk_09;
+ data->maxDistributionMons = GetSavedWonderCard()->recvMonCapacity;
}
else
data->id = 0;
@@ -815,14 +812,14 @@ u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void
return 2;
}
-u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused)
+u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused)
{
- s32 r4 = a1->unk_44 - sub_8144184(&a1->unk_20, a1->unk_44);
- if (r4 == 0)
+ s32 numSpaces = a1->maxDistributionMons - CountReceivedDistributionMons(&a1->unk_20, a1->maxDistributionMons);
+ if (numSpaces == 0)
return 1;
- if (sub_81441AC(&a1->unk_20, a0, a1->unk_44))
+ if (HasPlayerAlreadyReceivedDistributedMon(&a1->unk_20, a0, a1->maxDistributionMons))
return 3;
- if (r4 == 1)
+ if (numSpaces == 1)
return 4;
return 2;
}
@@ -838,9 +835,9 @@ bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1)
return TRUE;
}
-s32 sub_814449C(const struct MEventClientHeaderStruct * a0)
+static s32 GetNumReceivedDistributionMons(const struct MEventClientHeaderStruct * a0)
{
- return sub_8144184(&a0->unk_20, a0->unk_44);
+ return CountReceivedDistributionMons(&a0->unk_20, a0->maxDistributionMons);
}
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
@@ -848,22 +845,23 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
switch (command)
{
case 0:
- return a0->unk_20.unk_00;
+ return a0->unk_20.linkWins;
case 1:
- return a0->unk_20.unk_02;
+ return a0->unk_20.linkLosses;
case 2:
- return a0->unk_20.unk_04;
+ return a0->unk_20.linkTrades;
case 3:
- return sub_814449C(a0);
+ return GetNumReceivedDistributionMons(a0);
case 4:
- return a0->unk_44;
+ return a0->maxDistributionMons;
default:
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825);
return 0;
}
}
-void sub_814451C(u32 command)
+// Increments an interaction count in the save block
+static void IncrementBattleCardCount(u32 command)
{
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
if (data->unk_08_0 == 2)
@@ -872,13 +870,13 @@ void sub_814451C(u32 command)
switch (command)
{
case 0:
- dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_00;
+ dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkWins;
break;
case 1:
- dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_02;
+ dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkLosses;
break;
case 2:
- dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_04;
+ dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkTrades;
break;
case 3:
break;
@@ -896,7 +894,7 @@ void sub_814451C(u32 command)
}
}
-u16 sub_81445C0(u32 command)
+u16 MEvent_GetBattleCardCount(u32 command)
{
switch (command)
{
@@ -906,7 +904,7 @@ u16 sub_81445C0(u32 command)
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
- return buffer->unk_00;
+ return buffer->linkWins;
}
break;
}
@@ -916,7 +914,7 @@ u16 sub_81445C0(u32 command)
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
- return buffer->unk_02;
+ return buffer->linkLosses;
}
break;
}
@@ -926,7 +924,7 @@ u16 sub_81445C0(u32 command)
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data;
- return buffer->unk_04;
+ return buffer->linkTrades;
}
break;
}
@@ -934,14 +932,14 @@ u16 sub_81445C0(u32 command)
{
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
if (data->unk_08_0 == 1)
- return sub_8144218();
+ return ValidateCardAndCountMonsReceived();
break;
}
case 4:
{
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data;
if (data->unk_08_0 == 1)
- return data->unk_09;
+ return data->recvMonCapacity;
break;
}
}
@@ -949,38 +947,38 @@ u16 sub_81445C0(u32 command)
return 0;
}
-void sub_81446C4(void)
+void ResetReceivedWonderCardFlag(void)
{
- gUnknown_203F3BC = FALSE;
+ sReceivedWonderCardIsValid = FALSE;
}
-bool32 sub_81446D0(u16 a0)
+bool32 MEventHandleReceivedWonderCard(u16 cardId)
{
- gUnknown_203F3BC = FALSE;
- if (a0 == 0)
+ sReceivedWonderCardIsValid = FALSE;
+ if (cardId == 0)
return FALSE;
if (!ValidateReceivedWonderCard())
return FALSE;
- if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00 != a0)
+ if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId != cardId)
return FALSE;
- gUnknown_203F3BC = TRUE;
+ sReceivedWonderCardIsValid = TRUE;
return TRUE;
}
-void sub_8144714(u32 a0, u32 a1)
+void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId)
{
- if (gUnknown_203F3BC)
+ if (sReceivedWonderCardIsValid)
{
- switch (a0)
+ switch (eventId)
{
- case 2:
- sub_8144824(2, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5);
+ case 2: // trade
+ RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5);
break;
- case 0:
- sub_8144824(0, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
+ case 0: // link win
+ RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
break;
- case 1:
- sub_8144824(1, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
+ case 1: // link loss
+ RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5);
break;
default:
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988);
@@ -988,43 +986,48 @@ void sub_8144714(u32 a0, u32 a1)
}
}
-void sub_8144790(void)
+static void BlankBuffer344(void)
{
CpuFill32(0, gSaveBlock1Ptr->mysteryEventBuffers.unk_344, sizeof(gSaveBlock1Ptr->mysteryEventBuffers.unk_344));
}
-bool32 sub_81447BC(u32 a0, u32 * a1, s32 size)
+// Looks up trainerId in an array idsList with count elements.
+// If trainerId is found, rearranges idsList to put it in the front.
+// Otherwise, drops the last element of the list and inserts
+// trainerId at the front.
+// Returns TRUE in the latter case.
+static bool32 PlaceTrainerIdAtFrontOfList(u32 trainerId, u32 * idsList, s32 count)
{
s32 i;
s32 j;
- for (i = 0; i < size; i++)
+ for (i = 0; i < count; i++)
{
- if (a1[i] == a0)
+ if (idsList[i] == trainerId)
break;
}
- if (i == size)
+ if (i == count)
{
- for (j = size - 1; j > 0; j--)
+ for (j = count - 1; j > 0; j--)
{
- a1[j] = a1[j - 1];
+ idsList[j] = idsList[j - 1];
}
- a1[0] = a0;
+ idsList[0] = trainerId;
return TRUE;
}
else
{
for (j = i; j > 0; j--)
{
- a1[j] = a1[j - 1];
+ idsList[j] = idsList[j - 1];
}
- a1[0] = a0;
+ idsList[0] = trainerId;
return FALSE;
}
}
-void sub_8144824(u32 a0, u32 a1, u32 * a2, s32 a3)
+static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 * idsList, s32 count)
{
- if (sub_81447BC(a1, a2, a3))
- sub_814451C(a0);
+ if (PlaceTrainerIdAtFrontOfList(trainerId, idsList, count))
+ IncrementBattleCardCount(eventId);
}
diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c
deleted file mode 100644
index 3de09ab44..000000000
--- a/src/mevent_8145654.c
+++ /dev/null
@@ -1,793 +0,0 @@
-#include "global.h"
-#include "constants/species.h"
-#include "bg.h"
-#include "gpu_regs.h"
-#include "palette.h"
-#include "decompress.h"
-#include "malloc.h"
-#include "menu.h"
-#include "new_menu_helpers.h"
-#include "pokemon_icon.h"
-#include "mystery_gift_menu.h"
-#include "menu_indicators.h"
-#include "string_util.h"
-#include "link_rfu.h"
-#include "mevent.h"
-#include "battle_anim.h"
-
-struct UnkStruct_8467FB8
-{
- u8 textPal1:4;
- u8 textPal2:4;
- u8 textPal3:4;
- u8 textPal4:4;
- const u8 * tiles;
- const u8 * map;
- const u16 * pal;
-};
-
-struct UnkStruct_203F3C8_02DC
-{
- u8 unk_00;
- u8 unk_01[41];
- u8 unk_42[4];
-};
-
-struct UnkStruct_203F3C8
-{
- /*0000*/ struct MEWonderCardData unk_0000;
- /*014c*/ struct MEventBuffer_3430_Sub unk_014C;
- /*0170*/ const struct UnkStruct_8467FB8 * unk_0170;
- /*0174*/ u8 unk_0174;
- /*0175*/ u8 unk_0175;
- /*0176*/ u16 unk_0176[3];
- /*017C*/ u8 unk_017C;
- /*017D*/ u8 unk_017D[7][2];
- /*018B*/ u8 unk_018B[41];
- /*01B4*/ u8 unk_01B4[41];
- /*01DD*/ u8 unk_01DD[7];
- /*01E4*/ u8 unk_01E4[4][41];
- /*0288*/ u8 unk_0288[41];
- /*02B1*/ u8 unk_02B1[41];
- /*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8];
- /*045C*/ u8 buffer_045C[0x1000];
-};
-
-EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL;
-
-void sub_8145A98(void);
-void sub_8145D18(u8 whichWindow);
-void sub_8146060(void);
-void sub_81461D8(void);
-
-const u8 gUnknown_8467068[][3] = {
- {0, 2, 3},
- {0, 1, 2}
-};
-const u8 ALIGNED(4) gUnknown_8467070[3] = {7, 4, 7};
-const struct WindowTemplate gUnknown_8467074[] = {
- {0x01, 0x01, 0x01, 0x19, 0x04, 0x0f, 0x029c},
- {0x01, 0x01, 0x06, 0x1c, 0x08, 0x0f, 0x01bc},
- {0x01, 0x01, 0x0e, 0x1c, 0x05, 0x0f, 0x0130}
-};
-
-const u16 gUnknown_846708C[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
-const u16 gUnknown_84670AC[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
-const u16 gUnknown_84670CC[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
-const u16 gUnknown_84670EC[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
-const u16 gUnknown_846710C[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
-const u16 gUnknown_846712C[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
-const u16 gUnknown_846714C[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
-const u16 gUnknown_846716C[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
-const u8 gUnknown_846718C[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
-const u8 gUnknown_8467288[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
-const u8 gUnknown_846737C[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
-const u8 gUnknown_8467470[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
-const u8 gUnknown_8467558[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
-const u8 gUnknown_846762C[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
-const u8 gUnknown_8467700[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
-const u8 gUnknown_8467934[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
-const u8 gUnknown_8467A7C[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
-const u8 gUnknown_8467CAC[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
-const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
-const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
-const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
-const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
-const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
-const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
-const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
-const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
-const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
-
-const struct CompressedSpriteSheet gUnknown_8467F58 = {
- gUnknown_8467EF4, 0x100, 0x8000
-};
-const struct SpritePalette gUnknown_8467F60[] = {
- {gUnknown_8467DF4, 0x8000},
- {gUnknown_8467E14, 0x8000},
- {gUnknown_8467E34, 0x8000},
- {gUnknown_8467E54, 0x8000},
- {gUnknown_8467E74, 0x8000},
- {gUnknown_8467E94, 0x8000},
- {gUnknown_8467EB4, 0x8000},
- {gUnknown_8467ED4, 0x8000}
-};
-const struct SpriteTemplate gUnknown_8467FA0 = {
- 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-};
-const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = {
- {1, 0, 0, 0, gUnknown_846718C, gUnknown_8467288, gUnknown_846708C},
- {1, 0, 0, 1, gUnknown_846737C, gUnknown_8467470, gUnknown_84670AC},
- {1, 0, 0, 2, gUnknown_8467558, gUnknown_846762C, gUnknown_84670CC},
- {1, 0, 0, 3, gUnknown_8467558, gUnknown_846762C, gUnknown_84670EC},
- {1, 0, 0, 4, gUnknown_8467558, gUnknown_846762C, gUnknown_846710C},
- {1, 0, 0, 5, gUnknown_8467558, gUnknown_846762C, gUnknown_846712C},
- {1, 0, 0, 6, gUnknown_8467700, gUnknown_8467934, gUnknown_846714C},
- {1, 0, 0, 7, gUnknown_8467A7C, gUnknown_8467CAC, gUnknown_846716C}
-};
-
-bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6)
-{
- if (r5 == NULL || r6 == NULL)
- return FALSE;
- gUnknown_203F3C8 = AllocZeroed(sizeof(struct UnkStruct_203F3C8));
- if (gUnknown_203F3C8 == NULL)
- return FALSE;
- gUnknown_203F3C8->unk_0000 = *r5;
- gUnknown_203F3C8->unk_014C = *r6;
- if (gUnknown_203F3C8->unk_0000.unk_08_2 >= NELEMS(gUnknown_8467FB8))
- gUnknown_203F3C8->unk_0000.unk_08_2 = 0;
- if (gUnknown_203F3C8->unk_0000.unk_08_0 >= NELEMS(gUnknown_8467070))
- gUnknown_203F3C8->unk_0000.unk_08_0 = 0;
- if (gUnknown_203F3C8->unk_0000.unk_09 > NELEMS(gUnknown_203F3C8->unk_017D))
- gUnknown_203F3C8->unk_0000.unk_09 = 0;
- gUnknown_203F3C8->unk_0170 = &gUnknown_8467FB8[gUnknown_203F3C8->unk_0000.unk_08_2];
- return TRUE;
-}
-
-void DestroyWonderCardResources(void)
-{
- if (gUnknown_203F3C8 != NULL)
- {
- *gUnknown_203F3C8 = (struct UnkStruct_203F3C8){};
- Free(gUnknown_203F3C8);
- gUnknown_203F3C8 = NULL;
- }
-}
-
-s32 FadeToWonderCardMenu(void)
-{
- if (gUnknown_203F3C8 == NULL)
- return -1;
- switch(gUnknown_203F3C8->unk_0174)
- {
- case 0:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- break;
- case 1:
- if (UpdatePaletteFade())
- return 0;
- break;
- case 2:
- FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
- DecompressAndCopyTileDataToVram(2, gUnknown_203F3C8->unk_0170->tiles, 0, 0x008, 0);
- gUnknown_203F3C8->unk_0176[0] = AddWindow(&gUnknown_8467074[0]);
- gUnknown_203F3C8->unk_0176[1] = AddWindow(&gUnknown_8467074[1]);
- gUnknown_203F3C8->unk_0176[2] = AddWindow(&gUnknown_8467074[2]);
- break;
- case 3:
- if (FreeTempTileDataBuffersIfPossible())
- return 0;
- gPaletteFade.bufferTransferDisabled = TRUE;
- LoadPalette(gUnknown_203F3C8->unk_0170->pal, 0x10, 0x20);
- LZ77UnCompWram(gUnknown_203F3C8->unk_0170->map, gUnknown_203F3C8->buffer_045C);
- CopyRectToBgTilemapBufferRect(2, gUnknown_203F3C8->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
- CopyBgTilemapBufferToVram(2);
- break;
- case 4:
- sub_8145A98();
- break;
- case 5:
- sub_8145D18(0);
- sub_8145D18(1);
- sub_8145D18(2);
- CopyBgTilemapBufferToVram(1);
- break;
- case 6:
- LoadMonIconPalettes();
- break;
- case 7:
- ShowBg(1);
- ShowBg(2);
- gPaletteFade.bufferTransferDisabled = FALSE;
- sub_8146060();
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- UpdatePaletteFade();
- break;
- default:
- if (UpdatePaletteFade())
- return 0;
- gUnknown_203F3C8->unk_0174 = 0;
- return 1;
- }
- ++gUnknown_203F3C8->unk_0174;
- return 0;
-}
-
-s32 FadeOutFromWonderCard(bool32 flag)
-{
- if (gUnknown_203F3C8 == NULL)
- return -1;
- switch (gUnknown_203F3C8->unk_0174)
- {
- case 0:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- break;
- case 1:
- if (UpdatePaletteFade())
- return 0;
- break;
- case 2:
- FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
- break;
- case 3:
- HideBg(1);
- HideBg(2);
- RemoveWindow(gUnknown_203F3C8->unk_0176[2]);
- RemoveWindow(gUnknown_203F3C8->unk_0176[1]);
- RemoveWindow(gUnknown_203F3C8->unk_0176[0]);
- break;
- case 4:
- sub_81461D8();
- FreeMonIconPalettes();
- break;
- case 5:
- PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
- break;
- case 6:
- CopyBgTilemapBufferToVram(0);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- break;
- default:
- if (UpdatePaletteFade())
- return 0;
- gUnknown_203F3C8->unk_0174 = 0;
- return 1;
- }
- ++gUnknown_203F3C8->unk_0174;
- return 0;
-}
-
-void sub_8145A98(void)
-{
- u16 i = 0;
- u16 r6;
- u16 sp0[3] = {0, 0, 0};
-
- memcpy(gUnknown_203F3C8->unk_018B, gUnknown_203F3C8->unk_0000.unk_0A, 40);
- gUnknown_203F3C8->unk_018B[40] = EOS;
- memcpy(gUnknown_203F3C8->unk_01B4, gUnknown_203F3C8->unk_0000.unk_32, 40);
- gUnknown_203F3C8->unk_01B4[40] = EOS;
- if (gUnknown_203F3C8->unk_0000.unk_04 > 999999)
- gUnknown_203F3C8->unk_0000.unk_04 = 999999;
- ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_01DD, gUnknown_203F3C8->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
- for (i = 0; i < 4; i++)
- {
- memcpy(gUnknown_203F3C8->unk_01E4[i], gUnknown_203F3C8->unk_0000.unk_5A[i], 40);
- gUnknown_203F3C8->unk_01E4[i][40] = EOS;
- }
- memcpy(gUnknown_203F3C8->unk_0288, gUnknown_203F3C8->unk_0000.unk_FA, 40);
- gUnknown_203F3C8->unk_0288[40] = EOS;
- switch (gUnknown_203F3C8->unk_0000.unk_08_0)
- {
- case 0:
- memcpy(gUnknown_203F3C8->unk_02B1, gUnknown_203F3C8->unk_0000.unk_122, 40);
- gUnknown_203F3C8->unk_02B1[40] = EOS;
- break;
- case 1:
- gUnknown_203F3C8->unk_02B1[00] = EOS;
- break;
- case 2:
- gUnknown_203F3C8->unk_02B1[00] = EOS;
- sp0[0] = gUnknown_203F3C8->unk_014C.unk_00 < 999 ? gUnknown_203F3C8->unk_014C.unk_00 : 999;
- sp0[1] = gUnknown_203F3C8->unk_014C.unk_02 < 999 ? gUnknown_203F3C8->unk_014C.unk_02 : 999;
- sp0[2] = gUnknown_203F3C8->unk_014C.unk_04 < 999 ? gUnknown_203F3C8->unk_014C.unk_04 : 999;
- for (i = 0; i < 8; i++)
- {
- memset(gUnknown_203F3C8->unk_02DC[i].unk_42, EOS, 4);
- memset(gUnknown_203F3C8->unk_02DC[i].unk_01, EOS, 41);
- }
- for (i = 0, r6 = 0; i < 40; i++)
- {
- if (gUnknown_203F3C8->unk_0000.unk_122[i] != 0xF7)
- {
- gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_01[r6] = gUnknown_203F3C8->unk_0000.unk_122[i];
- r6++;
- }
- else
- {
- u8 r3 = gUnknown_203F3C8->unk_0000.unk_122[i + 1];
- if (r3 > 2)
- {
- i += 2;
- }
- else
- {
- ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
- gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_00 = gUnknown_203F3C8->unk_0000.unk_122[i + 2];
- gUnknown_203F3C8->unk_0175++;
- if (gUnknown_203F3C8->unk_0175 > 7)
- break;
- r6 = 0;
- i += 2;
- }
- }
- }
- }
-}
-
-void sub_8145D18(u8 whichWindow)
-{
- s8 sp0C = 0;
- s32 windowId = gUnknown_203F3C8->unk_0176[whichWindow];
- PutWindowTilemap(windowId);
- FillWindowPixelBuffer(windowId, 0);
- switch (whichWindow)
- {
- case 0:
- {
- s32 x;
- AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_018B);
- x = 160 - GetStringWidth(3, gUnknown_203F3C8->unk_01B4, GetFontAttribute(3, 2));
- if (x < 0)
- x = 0;
- AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01B4);
- if (gUnknown_203F3C8->unk_0000.unk_04 != 0)
- {
- AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01DD);
- }
- break;
- }
- case 1:
- for (; sp0C < 4; sp0C++)
- {
- AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal2], 0, gUnknown_203F3C8->unk_01E4[sp0C]);
- }
- break;
- case 2:
- AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_0288);
- if (gUnknown_203F3C8->unk_0000.unk_08_0 != 2)
- {
- AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02B1);
- }
- else
- {
- s32 x = 0;
- s32 y = gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0] + 16;
- s32 spacing = GetFontAttribute(3, 2);
- for (; sp0C < gUnknown_203F3C8->unk_0175; sp0C++)
- {
- AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_01);
- if (gUnknown_203F3C8->unk_02DC[sp0C].unk_42[0] != EOS)
- {
- x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_01, spacing);
- AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_42);
- x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_42, spacing) + gUnknown_203F3C8->unk_02DC[sp0C].unk_00;
- }
- }
- }
- break;
- }
- CopyWindowToVram(windowId, 3);
-}
-
-void sub_8146060(void)
-{
- u8 r7 = 0;
- gUnknown_203F3C8->unk_017C = 0xFF;
- if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE)
- {
- gUnknown_203F3C8->unk_017C = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
- gSprites[gUnknown_203F3C8->unk_017C].oam.priority = 2;
- }
- if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
- {
- LoadCompressedSpriteSheetUsingHeap(&gUnknown_8467F58);
- LoadSpritePalette(&gUnknown_8467F60[gUnknown_203F3C8->unk_0170->textPal4]);
- for (; r7 < gUnknown_203F3C8->unk_0000.unk_09; r7++)
- {
- gUnknown_203F3C8->unk_017D[r7][0] = 0xFF;
- gUnknown_203F3C8->unk_017D[r7][1] = 0xFF;
- gUnknown_203F3C8->unk_017D[r7][0] = CreateSprite(&gUnknown_8467FA0, 0xd8 - 32 * r7, 0x90, 8);
- if (gUnknown_203F3C8->unk_014C.unk_08[0][r7] != 0)
- {
- gUnknown_203F3C8->unk_017D[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
- gSprites[gUnknown_203F3C8->unk_017D[r7][1]].oam.priority = 2;
- }
- }
- }
-}
-
-void sub_81461D8(void)
-{
- u8 r6 = 0;
- if (gUnknown_203F3C8->unk_017C != 0xFF)
- DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017C]);
- if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
- {
- for (; r6 < gUnknown_203F3C8->unk_0000.unk_09; r6++)
- {
- if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
- {
- DestroySprite(&gSprites[gUnknown_203F3C8->unk_017D[r6][0]]);
- // This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
- // if (gUnknown_203F3C8->unk_017D[r6][1] != 0xFF)
- if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
- {
- DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]);
- }
- }
- }
- FreeSpriteTilesByTag(0x8000);
- FreeSpritePaletteByTag(0x8000);
- }
-}
-
-struct UnkStruct_203F3CC
-{
- /*0000*/ struct MEWonderNewsData unk_0000;
- /*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC;
- /*01c0*/ u8 unk_01C0_0:1;
- u8 unk_01C0_1:7;
- /*01c1*/ u8 unk_01C1;
- /*01c2*/ u8 unk_01C2_0:1;
- u8 unk_01C2_1:7;
- /*01c3*/ u8 unk_01C3_0:1;
- u8 unk_01C3_1:7;
- /*01c4*/ u16 unk_01C4;
- /*01c6*/ u16 unk_01C6;
- /*01c8*/ u16 unk_01C8[2];
- /*01cc*/ u8 filler_01CC[2];
- /*01ce*/ u8 unk_01CE[41];
- /*01f7*/ u8 unk_01F7[10][41];
- /*0394*/ struct ScrollArrowsTemplate unk_0394;
- /*03a4*/ u8 buffer_03A4[0x1000];
-};
-
-EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL;
-
-void sub_8146980(void);
-void sub_8146A30(void);
-void sub_8146B58(void);
-
-const u8 gUnknown_8468038[][3] = {
- {0, 2, 3},
- {0, 1, 2}
-};
-const struct WindowTemplate gUnknown_8468040[] = {
- {0, 1, 0, 28, 3, 15, 0x000},
- {2, 1, 3, 28, 20, 15, 0x000}
-};
-const struct ScrollArrowsTemplate gUnknown_8468050 = {
- 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
- 0x0000, 0x0002, 0x1000, 0x1000, 0x0,
-};
-
-const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
-const u16 gUnknown_8468080[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
-const u16 gUnknown_84680A0[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
-const u8 gUnknown_84680C0[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
-const u8 gUnknown_8468140[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
-const u8 gUnknown_846821C[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
-const u8 gUnknown_846824C[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
-const u8 gUnknown_846830C[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
-const u8 gUnknown_846837C[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
-const u8 gUnknown_8468448[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
-const u8 gUnknown_84684D8[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
-const u8 gUnknown_84685B4[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
-const u8 gUnknown_8468644[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
-
-const struct UnkStruct_8467FB8 gUnknown_8468720[] = {
- {1, 0, 0, 0, gUnknown_84680C0, gUnknown_8468140, gUnknown_8468060},
- {1, 0, 0, 0, gUnknown_846821C, gUnknown_846824C, gUnknown_84670AC},
- {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670CC},
- {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670EC},
- {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846710C},
- {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846712C},
- {1, 0, 0, 0, gUnknown_8468448, gUnknown_84684D8, gUnknown_8468080},
- {1, 0, 0, 0, gUnknown_84685B4, gUnknown_8468644, gUnknown_84680A0}
-};
-
-bool32 InitWonderNewsResources(const struct MEWonderNewsData * a0)
-{
- if (a0 == NULL)
- return FALSE;
- gUnknown_203F3CC = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
- if (gUnknown_203F3CC == NULL)
- return FALSE;
- gUnknown_203F3CC->unk_0000 = *a0;
- if (gUnknown_203F3CC->unk_0000.unk_03 >= NELEMS(gUnknown_8468720))
- gUnknown_203F3CC->unk_0000.unk_03 = 0;
- gUnknown_203F3CC->unk_01BC = &gUnknown_8468720[gUnknown_203F3CC->unk_0000.unk_03];
- gUnknown_203F3CC->unk_01C1 = 0xFF;
- return TRUE;
-}
-
-void DestroyWonderNewsResources(void)
-{
- if (gUnknown_203F3CC != NULL)
- {
- *gUnknown_203F3CC = (struct UnkStruct_203F3CC){};
- Free(gUnknown_203F3CC);
- gUnknown_203F3CC = NULL;
- }
-}
-
-s32 FadeToWonderNewsMenu(void)
-{
- if (gUnknown_203F3CC == NULL)
- return -1;
-
- switch (gUnknown_203F3CC->unk_01C0_1)
- {
- case 0:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- break;
- case 1:
- if (UpdatePaletteFade())
- return 0;
- ChangeBgY(0, 0, 0);
- ChangeBgY(1, 0, 0);
- ChangeBgY(2, 0, 0);
- ChangeBgY(3, 0, 0);
- SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
- SetGpuReg(REG_OFFSET_WIN0V, 0x1A98);
- SetGpuReg(REG_OFFSET_WININ, 0x1F);
- SetGpuReg(REG_OFFSET_WINOUT, 0x1B);
- SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- break;
- case 2:
- FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
- CopyBgTilemapBufferToVram(3);
- DecompressAndCopyTileDataToVram(3, gUnknown_203F3CC->unk_01BC->tiles, 0, 8, 0);
- gUnknown_203F3CC->unk_01C8[0] = AddWindow(&gUnknown_8468040[0]);
- gUnknown_203F3CC->unk_01C8[1] = AddWindow(&gUnknown_8468040[1]);
- break;
- case 3:
- if (FreeTempTileDataBuffersIfPossible())
- return 0;
- gPaletteFade.bufferTransferDisabled = TRUE;
- LoadPalette(gUnknown_203F3CC->unk_01BC->pal, 0x10, 0x20);
- LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->map, gUnknown_203F3CC->buffer_03A4);
- CopyRectToBgTilemapBufferRect(1, gUnknown_203F3CC->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
- CopyRectToBgTilemapBufferRect(3, gUnknown_203F3CC->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(3);
- break;
- case 4:
- sub_8146980();
- break;
- case 5:
- sub_8146A30();
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(2);
- break;
- case 6:
- ShowBg(1);
- ShowBg(2);
- ShowBg(3);
- gPaletteFade.bufferTransferDisabled = FALSE;
- gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- UpdatePaletteFade();
- break;
- default:
- if (UpdatePaletteFade())
- return 0;
- gUnknown_203F3CC->unk_01C0_1 = 0;
- return 1;
- }
-
- ++gUnknown_203F3CC->unk_01C0_1;
- return 0;
-}
-
-s32 FadeOutFromWonderNews(bool32 flag)
-{
- if (gUnknown_203F3CC == NULL)
- return -1;
- switch (gUnknown_203F3CC->unk_01C0_1)
- {
- case 0:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- break;
- case 1:
- if (UpdatePaletteFade())
- return 0;
- ChangeBgY(2, 0, 0);
- SetGpuReg(REG_OFFSET_WIN0H, 0);
- SetGpuReg(REG_OFFSET_WIN0V, 0);
- SetGpuReg(REG_OFFSET_WININ, 0);
- SetGpuReg(REG_OFFSET_WINOUT, 0);
- ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
- break;
- case 2:
- FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
- FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
- FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(1);
- CopyBgTilemapBufferToVram(2);
- CopyBgTilemapBufferToVram(3);
- break;
- case 3:
- HideBg(1);
- HideBg(2);
- RemoveWindow(gUnknown_203F3CC->unk_01C8[1]);
- RemoveWindow(gUnknown_203F3CC->unk_01C8[0]);
- break;
- case 4:
- ChangeBgY(2, 0, 0);
- ChangeBgY(3, 0, 0);
- if (gUnknown_203F3CC->unk_01C1 != 0xFF)
- {
- RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
- gUnknown_203F3CC->unk_01C1 = 0xFF;
- }
- break;
- case 5:
- PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
- break;
- case 6:
- MG_DrawCheckerboardPattern();
- CopyBgTilemapBufferToVram(0);
- CopyBgTilemapBufferToVram(3);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- break;
- default:
- if (UpdatePaletteFade())
- return 0;
- gUnknown_203F3CC->unk_01C0_1 = 0;
- return 1;
- }
- ++gUnknown_203F3CC->unk_01C0_1;
- return 0;
-}
-
-void MENews_RemoveScrollIndicatorArrowPair(void)
-{
- if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF)
- {
- RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
- gUnknown_203F3CC->unk_01C1 = 0xFF;
- gUnknown_203F3CC->unk_01C0_0 = TRUE;
- }
-}
-
-
-void MENews_AddScrollIndicatorArrowPair(void)
-{
- if (gUnknown_203F3CC->unk_01C0_0)
- {
- gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
- gUnknown_203F3CC->unk_01C0_0 = FALSE;
- }
-}
-
-u32 MENews_GetInput(u16 input)
-{
- if (gUnknown_203F3CC->unk_01C2_0)
- {
- sub_8146B58();
- return 0xFF;
- }
- switch (input)
- {
- case A_BUTTON:
- return 0;
- case B_BUTTON:
- return 1;
- case DPAD_UP:
- if (gUnknown_203F3CC->unk_01C6 == 0)
- return 0xFF;
- if (gUnknown_203F3CC->unk_01C0_0)
- return 0xFF;
- gUnknown_203F3CC->unk_01C3_0 = FALSE;
- break;
- case DPAD_DOWN:
- if (gUnknown_203F3CC->unk_01C6 == gUnknown_203F3CC->unk_01C4)
- return 0xFF;
- if (gUnknown_203F3CC->unk_01C0_0)
- return 0xFF;
- gUnknown_203F3CC->unk_01C3_0 = TRUE;
- break;
- default:
- return 0xFF;
- }
- gUnknown_203F3CC->unk_01C2_0 = TRUE;
- gUnknown_203F3CC->unk_01C2_1 = 2;
- gUnknown_203F3CC->unk_01C3_1 = 0;
- if (gUnknown_203F3CC->unk_01C3_0 == FALSE)
- return 2;
- else
- return 3;
-}
-
-void sub_8146980(void)
-{
- u8 i = 0;
- memcpy(gUnknown_203F3CC->unk_01CE, gUnknown_203F3CC->unk_0000.unk_04, 40);
- gUnknown_203F3CC->unk_01CE[40] = EOS;
- for (; i < 10; ++i)
- {
- memcpy(gUnknown_203F3CC->unk_01F7[i], gUnknown_203F3CC->unk_0000.unk_2C[i], 40);
- gUnknown_203F3CC->unk_01F7[i][40] = EOS;
- if (i > 7 && gUnknown_203F3CC->unk_01F7[i][0] != EOS)
- ++gUnknown_203F3CC->unk_01C4;
- }
- gUnknown_203F3CC->unk_0394 = gUnknown_8468050;
- gUnknown_203F3CC->unk_0394.fullyDownThreshold = gUnknown_203F3CC->unk_01C4;
-}
-
-void sub_8146A30(void)
-{
- u8 i = 0;
- s32 x;
- PutWindowTilemap(gUnknown_203F3CC->unk_01C8[0]);
- PutWindowTilemap(gUnknown_203F3CC->unk_01C8[1]);
- FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[0], 0);
- FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[1], 0);
- x = (0xe0 - GetStringWidth(3, gUnknown_203F3CC->unk_01CE, GetFontAttribute(3, 2))) / 2;
- if (x < 0)
- x = 0;
- AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[0], 3, x, 6, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal1], 0, gUnknown_203F3CC->unk_01CE);
- for (; i < 10; ++i)
- {
- AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal2], 0, gUnknown_203F3CC->unk_01F7[i]);
- }
- CopyWindowToVram(gUnknown_203F3CC->unk_01C8[0], 3);
- CopyWindowToVram(gUnknown_203F3CC->unk_01C8[1], 3);
-}
-
-void sub_8146B58(void)
-{
- u16 r4 = gUnknown_203F3CC->unk_01C2_1;
- r4 <<= 8;
- if (gUnknown_203F3CC->unk_01C3_0)
- {
- ChangeBgY(2, r4, 1);
- ChangeBgY(3, r4, 1);
- }
- else
- {
- ChangeBgY(2, r4, 2);
- ChangeBgY(3, r4, 2);
- }
- gUnknown_203F3CC->unk_01C3_1 += gUnknown_203F3CC->unk_01C2_1;
- if (gUnknown_203F3CC->unk_01C3_1 > 15)
- {
- if (gUnknown_203F3CC->unk_01C3_0)
- ++gUnknown_203F3CC->unk_01C6;
- else
- --gUnknown_203F3CC->unk_01C6;
- gUnknown_203F3CC->unk_01C2_0 = FALSE;
- gUnknown_203F3CC->unk_01C3_1 = 0;
- }
-}
diff --git a/src/mevent_client.c b/src/mevent_client.c
index 4da0b4bc1..d7eff1ec6 100644
--- a/src/mevent_client.c
+++ b/src/mevent_client.c
@@ -195,15 +195,16 @@ static u32 client_mainseq_4(struct mevent_client * svr)
mevent_client_send_word(svr, 0x13, svr->param);
break;
case 10:
- sub_8143F68(svr->recvBuffer);
+ OverwriteSavedWonderCardWithReceivedCard(svr->recvBuffer);
break;
case 9:
- if (!sub_8143EF4(svr->recvBuffer))
+ if (!MEvent_HaveAlreadyReceivedWonderNews(svr->recvBuffer))
{
- sub_8143DC8(svr->recvBuffer);
+ OverwriteSavedWonderNewsWithReceivedNews(svr->recvBuffer);
mevent_client_send_word(svr, 0x13, 0);
}
else
+ // Other trainer already has news
mevent_client_send_word(svr, 0x13, 1);
break;
case 15:
@@ -211,7 +212,7 @@ static u32 client_mainseq_4(struct mevent_client * svr)
svr->flag = 0;
break;
case 16:
- sub_8144254(svr->recvBuffer);
+ MEvent_ReceiveDistributionMon(svr->recvBuffer);
break;
case 17:
MEventSetRamScript(svr->recvBuffer, 1000);
diff --git a/src/mevent_server.c b/src/mevent_server.c
index bebd69fe3..3b1762540 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -176,7 +176,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
case 9:
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
- svr->param = sub_8144434(ptr, svr->mevent_unk1442cc, ptr);
+ svr->param = MEvent_CanPlayerReceiveDistributionMon(ptr, svr->mevent_unk1442cc, ptr);
break;
case 10:
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
@@ -247,7 +247,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
case 26:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
memcpy(svr->card, GetSavedWonderCard(), 332);
- sub_814410C(svr->card);
+ MEvent_WonderCardResetUnk08_6(svr->card);
break;
case 27:
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
diff --git a/src/mevent_show_card.c b/src/mevent_show_card.c
new file mode 100644
index 000000000..3eeafa4b5
--- /dev/null
+++ b/src/mevent_show_card.c
@@ -0,0 +1,459 @@
+#include "global.h"
+#include "constants/species.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "palette.h"
+#include "decompress.h"
+#include "malloc.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "pokemon_icon.h"
+#include "mystery_gift_menu.h"
+#include "menu_indicators.h"
+#include "string_util.h"
+#include "link_rfu.h"
+#include "mevent.h"
+#include "battle_anim.h"
+
+struct MEventScreenMgr_02DC
+{
+ u8 nDigits;
+ u8 nameTxt[41];
+ u8 numberTxt[4];
+};
+
+struct MEventScreenMgr
+{
+ /*0000*/ struct MEWonderCardData wonderCard;
+ /*014c*/ struct MEventBuffer_3430_Sub buff3430Sub;
+ /*0170*/ const struct UnkStruct_8467FB8 * bgSpec;
+ /*0174*/ u8 state;
+ /*0175*/ u8 recordIdx;
+ /*0176*/ u16 windowIds[3];
+ /*017C*/ u8 monIconId;
+ /*017D*/ u8 cardIconAndShadowSprites[7][2];
+ /*018B*/ u8 title[41];
+ /*01B4*/ u8 subtitle[41];
+ /*01DD*/ u8 unk_01DD[7];
+ /*01E4*/ u8 mainMessageLines[4][41];
+ /*0288*/ u8 instructionsLine1[41];
+ /*02B1*/ u8 instructionsLine2[41];
+ /*02DC*/ struct MEventScreenMgr_02DC recordStrings[8];
+ /*045C*/ u8 buffer_045C[0x1000];
+};
+
+static EWRAM_DATA struct MEventScreenMgr * sMEventScreenData = NULL;
+
+static void sub_8145A98(void);
+static void sub_8145D18(u8 whichWindow);
+static void sub_8146060(void);
+static void sub_81461D8(void);
+
+static const u8 gUnknown_8467068[][3] = {
+ {0, 2, 3},
+ {0, 1, 2}
+};
+
+static const u8 ALIGNED(4) sTextYCoords[3] = {7, 4, 7};
+
+static const struct WindowTemplate sWindowTemplates[] = {
+ {
+ .bg = 1,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 25,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x29c},
+ {
+ .bg = 1,
+ .tilemapLeft = 1,
+ .tilemapTop = 6,
+ .width = 28,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 0x1bc},
+ {
+ .bg = 1,
+ .tilemapLeft = 1,
+ .tilemapTop = 14,
+ .width = 28,
+ .height = 5,
+ .paletteNum = 15,
+ .baseBlock = 0x130}
+};
+
+static const u16 gCard0Pal[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
+const u16 gCard1Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
+const u16 gCard2Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
+const u16 gCard3Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
+const u16 gCard4Pal[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
+const u16 gCard5Pal[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
+static const u16 gCard6Pal[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
+static const u16 gCard7Pal[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
+static const u8 sCard0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
+static const u8 sCard0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
+static const u8 sCard1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
+static const u8 sCard1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
+static const u8 sCard2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
+static const u8 sCard2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
+static const u8 sCard6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
+static const u8 sCard6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
+static const u8 sCard7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
+static const u8 sCard7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
+static const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
+static const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
+static const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
+static const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
+static const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
+static const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
+static const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
+static const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
+static const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
+
+static const struct CompressedSpriteSheet sShadowSpriteSheet = {
+ gUnknown_8467EF4, 0x100, 0x8000
+};
+
+static const struct SpritePalette sShadowSpritePalettes[] = {
+ {gUnknown_8467DF4, 0x8000},
+ {gUnknown_8467E14, 0x8000},
+ {gUnknown_8467E34, 0x8000},
+ {gUnknown_8467E54, 0x8000},
+ {gUnknown_8467E74, 0x8000},
+ {gUnknown_8467E94, 0x8000},
+ {gUnknown_8467EB4, 0x8000},
+ {gUnknown_8467ED4, 0x8000}
+};
+
+static const struct SpriteTemplate sShadowSpriteTemplate = {
+ 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+static const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = {
+ {1, 0, 0, 0, sCard0Gfx, sCard0Map, gCard0Pal},
+ {1, 0, 0, 1, sCard1Gfx, sCard1Map, gCard1Pal},
+ {1, 0, 0, 2, sCard2Gfx, sCard2Map, gCard2Pal},
+ {1, 0, 0, 3, sCard2Gfx, sCard2Map, gCard3Pal},
+ {1, 0, 0, 4, sCard2Gfx, sCard2Map, gCard4Pal},
+ {1, 0, 0, 5, sCard2Gfx, sCard2Map, gCard5Pal},
+ {1, 0, 0, 6, sCard6Gfx, sCard6Map, gCard6Pal},
+ {1, 0, 0, 7, sCard7Gfx, sCard7Map, gCard7Pal}
+};
+
+bool32 InitWonderCardResources(struct MEWonderCardData * card, struct MEventBuffer_3430_Sub * b3430sub)
+{
+ if (card == NULL || b3430sub == NULL)
+ return FALSE;
+ sMEventScreenData = AllocZeroed(sizeof(struct MEventScreenMgr));
+ if (sMEventScreenData == NULL)
+ return FALSE;
+ sMEventScreenData->wonderCard = *card;
+ sMEventScreenData->buff3430Sub = *b3430sub;
+ if (sMEventScreenData->wonderCard.unk_08_2 >= NELEMS(sCardGfxPtrs))
+ sMEventScreenData->wonderCard.unk_08_2 = 0;
+ if (sMEventScreenData->wonderCard.unk_08_0 >= NELEMS(sTextYCoords))
+ sMEventScreenData->wonderCard.unk_08_0 = 0;
+ if (sMEventScreenData->wonderCard.recvMonCapacity > NELEMS(sMEventScreenData->cardIconAndShadowSprites))
+ sMEventScreenData->wonderCard.recvMonCapacity = 0;
+ sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.unk_08_2];
+ return TRUE;
+}
+
+void DestroyWonderCardResources(void)
+{
+ if (sMEventScreenData != NULL)
+ {
+ *sMEventScreenData = (struct MEventScreenMgr){};
+ Free(sMEventScreenData);
+ sMEventScreenData = NULL;
+ }
+}
+
+s32 FadeToWonderCardMenu(void)
+{
+ if (sMEventScreenData == NULL)
+ return -1;
+ switch(sMEventScreenData->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ break;
+ case 1:
+ if (UpdatePaletteFade())
+ return 0;
+ break;
+ case 2:
+ FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ DecompressAndCopyTileDataToVram(2, sMEventScreenData->bgSpec->tiles, 0, 0x008, 0);
+ sMEventScreenData->windowIds[0] = AddWindow(&sWindowTemplates[0]);
+ sMEventScreenData->windowIds[1] = AddWindow(&sWindowTemplates[1]);
+ sMEventScreenData->windowIds[2] = AddWindow(&sWindowTemplates[2]);
+ break;
+ case 3:
+ if (FreeTempTileDataBuffersIfPossible())
+ return 0;
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ LoadPalette(sMEventScreenData->bgSpec->pal, 0x10, 0x20);
+ LZ77UnCompWram(sMEventScreenData->bgSpec->map, sMEventScreenData->buffer_045C);
+ CopyRectToBgTilemapBufferRect(2, sMEventScreenData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
+ CopyBgTilemapBufferToVram(2);
+ break;
+ case 4:
+ sub_8145A98();
+ break;
+ case 5:
+ sub_8145D18(0);
+ sub_8145D18(1);
+ sub_8145D18(2);
+ CopyBgTilemapBufferToVram(1);
+ break;
+ case 6:
+ LoadMonIconPalettes();
+ break;
+ case 7:
+ ShowBg(1);
+ ShowBg(2);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ sub_8146060();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ UpdatePaletteFade();
+ break;
+ default:
+ if (UpdatePaletteFade())
+ return 0;
+ sMEventScreenData->state = 0;
+ return 1;
+ }
+ ++sMEventScreenData->state;
+ return 0;
+}
+
+s32 FadeOutFromWonderCard(bool32 flag)
+{
+ if (sMEventScreenData == NULL)
+ return -1;
+ switch (sMEventScreenData->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ break;
+ case 1:
+ if (UpdatePaletteFade())
+ return 0;
+ break;
+ case 2:
+ FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ break;
+ case 3:
+ HideBg(1);
+ HideBg(2);
+ RemoveWindow(sMEventScreenData->windowIds[2]);
+ RemoveWindow(sMEventScreenData->windowIds[1]);
+ RemoveWindow(sMEventScreenData->windowIds[0]);
+ break;
+ case 4:
+ sub_81461D8();
+ FreeMonIconPalettes();
+ break;
+ case 5:
+ PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
+ break;
+ case 6:
+ CopyBgTilemapBufferToVram(0);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ break;
+ default:
+ if (UpdatePaletteFade())
+ return 0;
+ sMEventScreenData->state = 0;
+ return 1;
+ }
+ ++sMEventScreenData->state;
+ return 0;
+}
+
+static void sub_8145A98(void)
+{
+ u16 i = 0;
+ u16 r6;
+ u16 sp0[3] = {0, 0, 0};
+
+ memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.unk_0A, 40);
+ sMEventScreenData->title[40] = EOS;
+ memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.unk_32, 40);
+ sMEventScreenData->subtitle[40] = EOS;
+ if (sMEventScreenData->wonderCard.unk_04 > 999999)
+ sMEventScreenData->wonderCard.unk_04 = 999999;
+ ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
+ for (i = 0; i < 4; i++)
+ {
+ memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.unk_5A[i], 40);
+ sMEventScreenData->mainMessageLines[i][40] = EOS;
+ }
+ memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.unk_FA, 40);
+ sMEventScreenData->instructionsLine1[40] = EOS;
+ switch (sMEventScreenData->wonderCard.unk_08_0)
+ {
+ case 0:
+ memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.unk_122, 40);
+ sMEventScreenData->instructionsLine2[40] = EOS;
+ break;
+ case 1:
+ sMEventScreenData->instructionsLine2[00] = EOS;
+ break;
+ case 2:
+ sMEventScreenData->instructionsLine2[00] = EOS;
+ sp0[0] = sMEventScreenData->buff3430Sub.linkWins < 999 ? sMEventScreenData->buff3430Sub.linkWins : 999;
+ sp0[1] = sMEventScreenData->buff3430Sub.linkLosses < 999 ? sMEventScreenData->buff3430Sub.linkLosses : 999;
+ sp0[2] = sMEventScreenData->buff3430Sub.linkTrades < 999 ? sMEventScreenData->buff3430Sub.linkTrades : 999;
+ for (i = 0; i < 8; i++)
+ {
+ memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4);
+ memset(sMEventScreenData->recordStrings[i].nameTxt, EOS, 41);
+ }
+ for (i = 0, r6 = 0; i < 40; i++)
+ {
+ if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_SPECIAL_F7)
+ {
+ sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.unk_122[i];
+ r6++;
+ }
+ else
+ {
+ u8 r3 = sMEventScreenData->wonderCard.unk_122[i + 1];
+ if (r3 > 2)
+ {
+ i += 2;
+ }
+ else
+ {
+ ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
+ sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.unk_122[i + 2];
+ sMEventScreenData->recordIdx++;
+ if (sMEventScreenData->recordIdx > 7)
+ break;
+ r6 = 0;
+ i += 2;
+ }
+ }
+ }
+ }
+}
+
+static void sub_8145D18(u8 whichWindow)
+{
+ s8 sp0C = 0;
+ s32 windowId = sMEventScreenData->windowIds[whichWindow];
+ PutWindowTilemap(windowId);
+ FillWindowPixelBuffer(windowId, 0);
+ switch (whichWindow)
+ {
+ case 0:
+ {
+ s32 x;
+ AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->title);
+ x = 160 - GetStringWidth(3, sMEventScreenData->subtitle, GetFontAttribute(3, 2));
+ if (x < 0)
+ x = 0;
+ AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle);
+ if (sMEventScreenData->wonderCard.unk_04 != 0)
+ {
+ AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD);
+ }
+ break;
+ }
+ case 1:
+ for (; sp0C < 4; sp0C++)
+ {
+ AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[sMEventScreenData->bgSpec->textPal2], 0, sMEventScreenData->mainMessageLines[sp0C]);
+ }
+ break;
+ case 2:
+ AddTextPrinterParameterized3(windowId, 3, 0, sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1);
+ if (sMEventScreenData->wonderCard.unk_08_0 != 2)
+ {
+ AddTextPrinterParameterized3(windowId, 3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2);
+ }
+ else
+ {
+ s32 x = 0;
+ s32 y = sTextYCoords[sMEventScreenData->wonderCard.unk_08_0] + 16;
+ s32 spacing = GetFontAttribute(3, 2);
+ for (; sp0C < sMEventScreenData->recordIdx; sp0C++)
+ {
+ AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].nameTxt);
+ if (sMEventScreenData->recordStrings[sp0C].numberTxt[0] != EOS)
+ {
+ x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].nameTxt, spacing);
+ AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].numberTxt);
+ x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].numberTxt, spacing) + sMEventScreenData->recordStrings[sp0C].nDigits;
+ }
+ }
+ }
+ break;
+ }
+ CopyWindowToVram(windowId, 3);
+}
+
+static void sub_8146060(void)
+{
+ u8 r7 = 0;
+ sMEventScreenData->monIconId = 0xFF;
+ if (sMEventScreenData->buff3430Sub.unk_06 != SPECIES_NONE)
+ {
+ sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
+ gSprites[sMEventScreenData->monIconId].oam.priority = 2;
+ }
+ if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
+ {
+ LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet);
+ LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]);
+ for (; r7 < sMEventScreenData->wonderCard.recvMonCapacity; r7++)
+ {
+ sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF;
+ sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF;
+ sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8);
+ if (sMEventScreenData->buff3430Sub.distributedMons[0][r7] != 0)
+ {
+ sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.distributedMons[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
+ gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2;
+ }
+ }
+ }
+}
+
+static void sub_81461D8(void)
+{
+ u8 r6 = 0;
+ if (sMEventScreenData->monIconId != 0xFF)
+ DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]);
+ if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
+ {
+ for (; r6 < sMEventScreenData->wonderCard.recvMonCapacity; r6++)
+ {
+ if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
+ {
+ DestroySprite(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][0]]);
+ // This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
+ // if (sMEventScreenData->cardIconAndShadowSprites[r6][1] != 0xFF)
+ if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
+ {
+ DestroyMonIcon(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][1]]);
+ }
+ }
+ }
+ FreeSpriteTilesByTag(0x8000);
+ FreeSpritePaletteByTag(0x8000);
+ }
+}
diff --git a/src/mevent_show_news.c b/src/mevent_show_news.c
new file mode 100644
index 000000000..44b19b130
--- /dev/null
+++ b/src/mevent_show_news.c
@@ -0,0 +1,357 @@
+#include "global.h"
+#include "gflib.h"
+#include "menu_indicators.h"
+#include "new_menu_helpers.h"
+#include "mevent.h"
+#include "mystery_gift_menu.h"
+#include "menu.h"
+#include "link_rfu.h"
+
+struct UnkStruct_203F3CC
+{
+ /*0000*/ struct MEWonderNewsData wonderNews;
+ /*01bc*/ const struct UnkStruct_8467FB8 * bgSpec;
+ /*01c0*/ u8 verticalScrollDisabled:1;
+ u8 state:7;
+ /*01c1*/ u8 menuIndicatorsId;
+ /*01c2*/ u8 unk_01C2_0:1;
+ u8 unk_01C2_1:7;
+ /*01c3*/ u8 scrollDirection:1;
+ u8 unk_01C3_1:7;
+ /*01c4*/ u16 numMails;
+ /*01c6*/ u16 scrollOffset;
+ /*01c8*/ u16 windowIds[2];
+ /*01cc*/ u8 filler_01CC[2];
+ /*01ce*/ u8 title[41];
+ /*01f7*/ u8 messages[10][41];
+ /*0394*/ struct ScrollArrowsTemplate scrollArrowsTemplate;
+ /*03a4*/ u8 buffer_03A4[0x1000];
+};
+
+static EWRAM_DATA struct UnkStruct_203F3CC * sWork = NULL;
+
+static void sub_8146980(void);
+static void sub_8146A30(void);
+static void sub_8146B58(void);
+
+static const u8 sTextPals[][3] = {
+ {0, 2, 3},
+ {0, 1, 2}
+};
+static const struct WindowTemplate gUnknown_8468040[] = {
+ {0, 1, 0, 28, 3, 15, 0x000},
+ {2, 1, 3, 28, 20, 15, 0x000}
+};
+static const struct ScrollArrowsTemplate sScrollArrowsTemplate = {
+ 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
+ 0x0000, 0x0002, 0x1000, 0x1000, 0x0,
+};
+
+static const u16 sNews1Pal[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
+static const u16 sNews6Pal[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
+static const u16 sNews7Pal[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
+static const u8 sNews0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
+static const u8 sNews0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
+static const u8 sNews1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
+static const u8 sNews1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
+static const u8 sNews2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
+static const u8 sNews2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
+static const u8 sNews6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
+static const u8 sNews6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
+static const u8 sNews7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
+static const u8 sNews7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
+
+static const struct UnkStruct_8467FB8 sBgSpecs[] = {
+ {1, 0, 0, 0, sNews0Gfx, sNews0Map, sNews1Pal},
+ {1, 0, 0, 0, sNews1Gfx, sNews1Map, gCard1Pal},
+ {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard2Pal},
+ {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard3Pal},
+ {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard4Pal},
+ {1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard5Pal},
+ {1, 0, 0, 0, sNews6Gfx, sNews6Map, sNews6Pal},
+ {1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal}
+};
+
+bool32 InitWonderNewsResources(const struct MEWonderNewsData * news)
+{
+ if (news == NULL)
+ return FALSE;
+ sWork = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
+ if (sWork == NULL)
+ return FALSE;
+ sWork->wonderNews = *news;
+ if (sWork->wonderNews.unk_03 >= NELEMS(sBgSpecs))
+ sWork->wonderNews.unk_03 = 0;
+ sWork->bgSpec = &sBgSpecs[sWork->wonderNews.unk_03];
+ sWork->menuIndicatorsId = 0xFF;
+ return TRUE;
+}
+
+void DestroyWonderNewsResources(void)
+{
+ if (sWork != NULL)
+ {
+ *sWork = (struct UnkStruct_203F3CC){};
+ Free(sWork);
+ sWork = NULL;
+ }
+}
+
+s32 FadeToWonderNewsMenu(void)
+{
+ if (sWork == NULL)
+ return -1;
+
+ switch (sWork->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ break;
+ case 1:
+ if (UpdatePaletteFade())
+ return 0;
+ ChangeBgY(0, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgY(3, 0, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(26, 152));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ break;
+ case 2:
+ FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ DecompressAndCopyTileDataToVram(3, sWork->bgSpec->tiles, 0, 8, 0);
+ sWork->windowIds[0] = AddWindow(&gUnknown_8468040[0]);
+ sWork->windowIds[1] = AddWindow(&gUnknown_8468040[1]);
+ break;
+ case 3:
+ if (FreeTempTileDataBuffersIfPossible())
+ return 0;
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ LoadPalette(sWork->bgSpec->pal, 0x10, 0x20);
+ LZ77UnCompWram(sWork->bgSpec->map, sWork->buffer_03A4);
+ CopyRectToBgTilemapBufferRect(1, sWork->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
+ CopyRectToBgTilemapBufferRect(3, sWork->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 4:
+ sub_8146980();
+ break;
+ case 5:
+ sub_8146A30();
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(2);
+ break;
+ case 6:
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ UpdatePaletteFade();
+ break;
+ default:
+ if (UpdatePaletteFade())
+ return 0;
+ sWork->state = 0;
+ return 1;
+ }
+
+ ++sWork->state;
+ return 0;
+}
+
+s32 FadeOutFromWonderNews(bool32 flag)
+{
+ if (sWork == NULL)
+ return -1;
+ switch (sWork->state)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ break;
+ case 1:
+ if (UpdatePaletteFade())
+ return 0;
+ ChangeBgY(2, 0, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ break;
+ case 2:
+ FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
+ FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 3:
+ HideBg(1);
+ HideBg(2);
+ RemoveWindow(sWork->windowIds[1]);
+ RemoveWindow(sWork->windowIds[0]);
+ break;
+ case 4:
+ ChangeBgY(2, 0, 0);
+ ChangeBgY(3, 0, 0);
+ if (sWork->menuIndicatorsId != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
+ sWork->menuIndicatorsId = 0xFF;
+ }
+ break;
+ case 5:
+ PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
+ break;
+ case 6:
+ MG_DrawCheckerboardPattern();
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(3);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ break;
+ default:
+ if (UpdatePaletteFade())
+ return 0;
+ sWork->state = 0;
+ return 1;
+ }
+ ++sWork->state;
+ return 0;
+}
+
+void MENews_RemoveScrollIndicatorArrowPair(void)
+{
+ if (!sWork->verticalScrollDisabled && sWork->menuIndicatorsId != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
+ sWork->menuIndicatorsId = 0xFF;
+ sWork->verticalScrollDisabled = TRUE;
+ }
+}
+
+
+void MENews_AddScrollIndicatorArrowPair(void)
+{
+ if (sWork->verticalScrollDisabled)
+ {
+ sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
+ sWork->verticalScrollDisabled = FALSE;
+ }
+}
+
+u32 MENews_GetInput(u16 input)
+{
+ if (sWork->unk_01C2_0)
+ {
+ sub_8146B58();
+ return 0xFF;
+ }
+ switch (input)
+ {
+ case A_BUTTON:
+ return 0;
+ case B_BUTTON:
+ return 1;
+ case DPAD_UP:
+ if (sWork->scrollOffset == 0)
+ return 0xFF;
+ if (sWork->verticalScrollDisabled)
+ return 0xFF;
+ sWork->scrollDirection = FALSE;
+ break;
+ case DPAD_DOWN:
+ if (sWork->scrollOffset == sWork->numMails)
+ return 0xFF;
+ if (sWork->verticalScrollDisabled)
+ return 0xFF;
+ sWork->scrollDirection = TRUE;
+ break;
+ default:
+ return 0xFF;
+ }
+ sWork->unk_01C2_0 = TRUE;
+ sWork->unk_01C2_1 = 2;
+ sWork->unk_01C3_1 = 0;
+ if (sWork->scrollDirection == FALSE)
+ return 2;
+ else
+ return 3;
+}
+
+static void sub_8146980(void)
+{
+ u8 i = 0;
+ memcpy(sWork->title, sWork->wonderNews.unk_04, 40);
+ sWork->title[40] = EOS;
+ for (; i < 10; ++i)
+ {
+ memcpy(sWork->messages[i], sWork->wonderNews.unk_2C[i], 40);
+ sWork->messages[i][40] = EOS;
+ if (i > 7 && sWork->messages[i][0] != EOS)
+ ++sWork->numMails;
+ }
+ sWork->scrollArrowsTemplate = sScrollArrowsTemplate;
+ sWork->scrollArrowsTemplate.fullyDownThreshold = sWork->numMails;
+}
+
+static void sub_8146A30(void)
+{
+ u8 i = 0;
+ s32 x;
+ PutWindowTilemap(sWork->windowIds[0]);
+ PutWindowTilemap(sWork->windowIds[1]);
+ FillWindowPixelBuffer(sWork->windowIds[0], 0);
+ FillWindowPixelBuffer(sWork->windowIds[1], 0);
+ x = (0xe0 - GetStringWidth(3, sWork->title, GetFontAttribute(3, 2))) / 2;
+ if (x < 0)
+ x = 0;
+ AddTextPrinterParameterized3(sWork->windowIds[0], 3, x, 6, sTextPals[sWork->bgSpec->textPal1], 0, sWork->title);
+ for (; i < 10; ++i)
+ {
+ AddTextPrinterParameterized3(sWork->windowIds[1], 3, 0, 16 * i + 2, sTextPals[sWork->bgSpec->textPal2], 0, sWork->messages[i]);
+ }
+ CopyWindowToVram(sWork->windowIds[0], 3);
+ CopyWindowToVram(sWork->windowIds[1], 3);
+}
+
+static void sub_8146B58(void)
+{
+ u16 r4 = sWork->unk_01C2_1;
+ r4 <<= 8;
+ if (sWork->scrollDirection)
+ {
+ ChangeBgY(2, r4, 1);
+ ChangeBgY(3, r4, 1);
+ }
+ else
+ {
+ ChangeBgY(2, r4, 2);
+ ChangeBgY(3, r4, 2);
+ }
+ sWork->unk_01C3_1 += sWork->unk_01C2_1;
+ if (sWork->unk_01C3_1 > 15)
+ {
+ if (sWork->scrollDirection)
+ ++sWork->scrollOffset;
+ else
+ --sWork->scrollOffset;
+ sWork->unk_01C2_0 = FALSE;
+ sWork->unk_01C3_1 = 0;
+ }
+}
diff --git a/src/unk_815F138.c b/src/minigame_countdown.c
index 8aa776bc9..d100caea1 100644
--- a/src/unk_815F138.c
+++ b/src/minigame_countdown.c
@@ -5,72 +5,83 @@
#include "trig.h"
#include "constants/songs.h"
-void sub_815F1AC(u8 taskId);
-bool32 sub_815F2AC(u8 spriteId);
-void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3);
-bool32 sub_815F444(u8 spriteId);
-void sub_815F470(struct Sprite * sprite);
-void sub_815F564(u16 tilesTag, u16 palTag);
-u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
-void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p);
+static void Task_MinigameCountdown(u8 taskId);
+static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId);
+static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3);
+static bool32 IsStartGraphicAnimRunning(u8 spriteId);
+static void SpriteCB_Start(struct Sprite * sprite);
+static void Load321StartGfx(u16 tilesTag, u16 palTag);
+static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
+static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p);
-void sub_815F138(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
+#define tState data[0]
+#define tTilesTag data[2]
+#define tPalTag data[3]
+#define tX data[4]
+#define tY data[5]
+#define tSubpriority data[6]
+#define tSpriteId1 data[7]
+#define tSpriteId2 data[8]
+#define tSpriteId3 data[9]
+
+void StartMinigameCountdown(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
{
- u8 taskId = CreateTask(sub_815F1AC, 80);
- gTasks[taskId].data[2] = tilesTag;
- gTasks[taskId].data[3] = palTag;
- gTasks[taskId].data[4] = x;
- gTasks[taskId].data[5] = y;
- gTasks[taskId].data[6] = subpriority;
+ u8 taskId = CreateTask(Task_MinigameCountdown, 80);
+ gTasks[taskId].tTilesTag = tilesTag;
+ gTasks[taskId].tPalTag = palTag;
+ gTasks[taskId].tX = x;
+ gTasks[taskId].tY = y;
+ gTasks[taskId].tSubpriority = subpriority;
}
-bool8 sub_815F198(void)
+bool8 IsMinigameCountdownRunning(void)
{
- return FuncIsActiveTask(sub_815F1AC);
+ return FuncIsActiveTask(Task_MinigameCountdown);
}
-void sub_815F1AC(u8 taskId)
+static void Task_MinigameCountdown(u8 taskId)
{
s16 * data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- sub_815F564(data[2], data[3]);
- data[7] = sub_815F5BC(data[2], data[3], data[4], data[5], data[6]);
- sub_815F610(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]);
- data[0]++;
+ Load321StartGfx(tTilesTag, tPalTag);
+ tSpriteId1 = CreateNumberSprite(tTilesTag, tPalTag, tX, tY, tSubpriority);
+ CreateStartSprite(tTilesTag, tPalTag, tX, tY, tSubpriority, &tSpriteId2, &tSpriteId3);
+ tState++;
break;
case 1:
- if (!sub_815F2AC(data[7]))
+ if (!RunMinigameCountdownDigitsAnim(tSpriteId1))
{
- sub_815F3E0(data[7], data[8], data[9]);
- FreeSpriteOamMatrix(&gSprites[data[7]]);
- DestroySprite(&gSprites[data[7]]);
- data[0]++;
+ StartStartGraphic(tSpriteId1, tSpriteId2, tSpriteId3);
+ FreeSpriteOamMatrix(&gSprites[tSpriteId1]);
+ DestroySprite(&gSprites[tSpriteId1]);
+ tState++;
}
break;
case 2:
- if (!sub_815F444(data[8]))
+ if (!IsStartGraphicAnimRunning(tSpriteId2))
{
- DestroySprite(&gSprites[data[8]]);
- DestroySprite(&gSprites[data[9]]);
- FreeSpriteTilesByTag(data[2]);
- FreeSpritePaletteByTag(data[3]);
+ DestroySprite(&gSprites[tSpriteId2]);
+ DestroySprite(&gSprites[tSpriteId3]);
+ FreeSpriteTilesByTag(tTilesTag);
+ FreeSpritePaletteByTag(tPalTag);
DestroyTask(taskId);
}
break;
}
}
-bool32 sub_815F2AC(u8 spriteId)
+static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId)
{
struct Sprite * sprite = &gSprites[spriteId];
switch (sprite->data[0])
{
case 0:
- sub_8007FFC(sprite, 0x800, 0x1A);
+ // some sort of affine transform; x transform disabled
+ obj_pos2_update_enable(sprite, 0x800, 0x1A);
sprite->data[0]++;
// fallthrough
case 1:
@@ -134,22 +145,22 @@ bool32 sub_815F2AC(u8 spriteId)
return TRUE;
}
-void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3)
+static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3)
{
gSprites[spriteId2].pos2.y = -40;
gSprites[spriteId3].pos2.y = -40;
gSprites[spriteId2].invisible = FALSE;
gSprites[spriteId3].invisible = FALSE;
- gSprites[spriteId2].callback = sub_815F470;
- gSprites[spriteId3].callback = sub_815F470;
+ gSprites[spriteId2].callback = SpriteCB_Start;
+ gSprites[spriteId3].callback = SpriteCB_Start;
}
-bool32 sub_815F444(u8 spriteId)
+static bool32 IsStartGraphicAnimRunning(u8 spriteId)
{
- return gSprites[spriteId].callback == sub_815F470;
+ return gSprites[spriteId].callback == SpriteCB_Start;
}
-void sub_815F470(struct Sprite * sprite)
+static void SpriteCB_Start(struct Sprite * sprite)
{
s16 * data = sprite->data;
s32 y;
@@ -200,103 +211,103 @@ void sub_815F470(struct Sprite * sprite)
}
}
-const u16 gUnknown_847A328[] = INCBIN_U16("data/graphics/unk_847a348.gbapal");
-const u16 gUnknown_847A348[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz");
+static const u16 sSpritePal_321Start[] = INCBIN_U16("data/graphics/unk_847a348.gbapal");
+static const u16 sSpriteSheet_321Start[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz");
-void sub_815F564(u16 tilesTag, u16 palTag)
+static void Load321StartGfx(u16 tilesTag, u16 palTag)
{
- struct CompressedSpriteSheet spriteSheet = {(const void *)gUnknown_847A348, 0xE00};
- struct SpritePalette spritePalette = {gUnknown_847A328};
+ struct CompressedSpriteSheet spriteSheet = {(const void *)sSpriteSheet_321Start, 0xE00};
+ struct SpritePalette spritePalette = {sSpritePal_321Start};
spriteSheet.tag = tilesTag;
spritePalette.tag = palTag;
LoadCompressedSpriteSheet(&spriteSheet);
LoadSpritePalette(&spritePalette);
}
-const struct OamData gOamData_847A7AC = {
+static const struct OamData sOamData_Numbers = {
.affineMode = ST_OAM_AFFINE_DOUBLE,
- .shape = ST_OAM_SQUARE,
- .size = 2
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32)
};
-const struct OamData gOamData_847A7B4 = {
+static const struct OamData sOamData_Start = {
.affineMode = ST_OAM_AFFINE_OFF,
- .shape = ST_OAM_H_RECTANGLE,
- .size = 3
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32)
};
-const union AnimCmd gUnknown_847A7BC[] = {
+static const union AnimCmd sAnim_Numbers_Three[] = {
ANIMCMD_FRAME( 0, 1),
ANIMCMD_END
};
-const union AnimCmd gUnknown_847A7C4[] = {
+static const union AnimCmd sAnim_Numbers_Two[] = {
ANIMCMD_FRAME(16, 1),
ANIMCMD_END
};
-const union AnimCmd gUnknown_847A7CC[] = {
+static const union AnimCmd sAnim_Numbers_One[] = {
ANIMCMD_FRAME(32, 1),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_847A7D4[] = {
- gUnknown_847A7BC,
- gUnknown_847A7C4,
- gUnknown_847A7CC
+static const union AnimCmd *const sAnimTable_Numbers[] = {
+ sAnim_Numbers_Three,
+ sAnim_Numbers_Two,
+ sAnim_Numbers_One
};
-const union AnimCmd gUnknown_847A7E0[] = {
+static const union AnimCmd sAnim_StartLeft[] = {
ANIMCMD_FRAME(48, 1),
ANIMCMD_END
};
-const union AnimCmd gUnknown_847A7E8[] = {
+static const union AnimCmd sAnim_StartRight[] = {
ANIMCMD_FRAME(80, 1),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_847A7F0[] = {
- gUnknown_847A7E0,
- gUnknown_847A7E8
+static const union AnimCmd *const sAnimTable_Start[] = {
+ sAnim_StartLeft,
+ sAnim_StartRight
};
-const union AffineAnimCmd gUnknown_847A7F8[] = {
+static const union AffineAnimCmd sAffineAnim_Numbers_0[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd gUnknown_847A808[] = {
+static const union AffineAnimCmd sAffineAnim_Numbers_1[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME( 0x10, -0x10, 0, 8),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd gUnknown_847A820[] = {
+static const union AffineAnimCmd sAffineAnim_Numbers_2[] = {
AFFINEANIMCMD_FRAME(-0x12, 0x12, 0, 8),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd gUnknown_847A830[] = {
+static const union AffineAnimCmd sAffineAnim_Numbers_3[] = {
AFFINEANIMCMD_FRAME( 0x6, -0x6, 0, 8),
AFFINEANIMCMD_FRAME( -0x4, 0x4, 0, 8),
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END
};
-const union AffineAnimCmd *const gUnknown_847A850[] = {
- gUnknown_847A7F8,
- gUnknown_847A808,
- gUnknown_847A820,
- gUnknown_847A830
+static const union AffineAnimCmd *const sAffineAnimTable_Numbers[] = {
+ sAffineAnim_Numbers_0,
+ sAffineAnim_Numbers_1,
+ sAffineAnim_Numbers_2,
+ sAffineAnim_Numbers_3
};
-u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
+static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
{
struct SpriteTemplate spriteTemplate = {
- .oam = &gOamData_847A7AC,
- .anims = gUnknown_847A7D4,
- .affineAnims = gUnknown_847A850,
+ .oam = &sOamData_Numbers,
+ .anims = sAnimTable_Numbers,
+ .affineAnims = sAffineAnimTable_Numbers,
.callback = SpriteCallbackDummy
};
spriteTemplate.tileTag = tilesTag;
@@ -304,11 +315,11 @@ u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
return CreateSprite(&spriteTemplate, x, y, subpriority);
}
-void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p)
+static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p)
{
struct SpriteTemplate spriteTemplate = {
- .oam = &gOamData_847A7B4,
- .anims = gUnknown_847A7F0,
+ .oam = &sOamData_Start,
+ .anims = sAnimTable_Start,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index 8384d211d..cdfd62624 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -25,6 +25,7 @@
#include "help_system.h"
#include "strings.h"
#include "constants/songs.h"
+#include "constants/union_room.h"
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
@@ -1237,21 +1238,21 @@ void task00_mystery_gift(u8 taskId)
case 0:
if (data->source == 1)
{
- MEvent_CreateTask_CardOrNewsWithFriend(0x15);
+ MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WCARD2);
}
else if (data->source == 0)
{
- MEvent_CreateTask_CardOrNewsOverWireless(0x15);
+ MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WCARD2);
}
break;
case 1:
if (data->source == 1)
{
- MEvent_CreateTask_CardOrNewsWithFriend(0x16);
+ MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WNEWS2);
}
else if (data->source == 0)
{
- MEvent_CreateTask_CardOrNewsOverWireless(0x16);
+ MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WNEWS2);
}
break;
}
@@ -1278,7 +1279,7 @@ void task00_mystery_gift(u8 taskId)
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6: // done
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_BeginBuildAndSendCommand5F();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
@@ -1595,10 +1596,10 @@ void task00_mystery_gift(u8 taskId)
switch (data->IsCardOrNews)
{
case 0:
- MEvent_CreateTask_Leader(21);
+ MEvent_CreateTask_Leader(ACTIVITY_WCARD2);
break;
case 1:
- MEvent_CreateTask_Leader(22);
+ MEvent_CreateTask_Leader(ACTIVITY_WNEWS2);
break;
}
data->source = 1;
@@ -1644,7 +1645,7 @@ void task00_mystery_gift(u8 taskId)
}
break;
case 33:
- task_add_05_task_del_08FA224_when_no_RfuFunc();
+ Rfu_BeginBuildAndSendCommand5F();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
diff --git a/src/new_game.c b/src/new_game.c
index 381ba28c8..9aea0b3aa 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -108,7 +108,7 @@ void ResetMenuAndMonGlobals(void)
void NewGameInitData(void)
{
- u8 rivalName[PLAYER_NAME_LENGTH];
+ u8 rivalName[PLAYER_NAME_LENGTH + 1];
StringCopy(rivalName, gSaveBlock1Ptr->rivalName);
gDifferentSaveFile = TRUE;
@@ -143,9 +143,9 @@ void NewGameInitData(void)
sub_809C794();
InitEasyChatPhrases();
ResetTrainerFanClub();
- copy_strings_to_sav1();
+ UnionRoomChat_InitializeRegisteredTexts();
ResetMiniGamesResults();
- sub_8143D24();
+ InitMEventData();
SetAllRenewableItemFlags();
WarpToPlayersRoom();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 0ad5d6a6f..6887ff85a 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1902,8 +1902,8 @@ static void GetDefaultName(u8 arg0, u8 namePick)
src = sRivalNameChoices[namePick];
dest = gSaveBlock1Ptr->rivalName;
}
- for (i = 0; i < PLAYER_NAME_LENGTH - 1 && src[i] != EOS; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH && src[i] != EOS; i++)
dest[i] = src[i];
- for (; i < PLAYER_NAME_LENGTH; i++)
+ for (; i < PLAYER_NAME_LENGTH + 1; i++)
dest[i] = EOS;
}
diff --git a/src/party_menu.c b/src/party_menu.c
index df0e70b37..600350ca9 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -3881,7 +3881,7 @@ static void CursorCB_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_80F9800(), species2, species, obedience))
+ switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
{
case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3907,7 +3907,7 @@ static void CursorCB_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_80F9800(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
+ u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
if (stringId != UR_TRADE_MSG_NONE)
{
diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c
index 2ccec7a3f..cd201a884 100644
--- a/src/pokedex_screen.c
+++ b/src/pokedex_screen.c
@@ -562,8 +562,8 @@ void sub_8102F80(u8 taskId)
switch (gUnknown_203ACF0->field_01)
{
case 0:
- sub_8107D38(0x10, 0);
- sub_8107D38(0x20, 1);
+ ListMenuLoadStdPalAt(0x10, 0);
+ ListMenuLoadStdPalAt(0x20, 1);
gUnknown_203ACF0->field_48 = sub_8103518(gUnknown_203ACF0->field_42);
gUnknown_203ACF0->field_01 = 2;
break;
@@ -648,8 +648,8 @@ void sub_8103238(u8 taskId)
switch (gUnknown_203ACF0->field_01)
{
case 0:
- sub_8107D38(0x10, 0);
- sub_8107D38(0x20, 1);
+ ListMenuLoadStdPalAt(0x10, 0);
+ ListMenuLoadStdPalAt(0x20, 1);
gUnknown_203ACF0->field_48 = sub_8103518(gUnknown_203ACF0->field_42);
gUnknown_203ACF0->field_01 = 2;
break;
diff --git a/src/pokemon.c b/src/pokemon.c
index d1305861a..f1f7834b1 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -90,7 +90,20 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
#include "data/battle_moves.h"
-static const u8 sUnreferencedData[] = { 0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 };
+// Used in an unreferenced function in RS.
+// Unreferenced here and in Emerald.
+struct CombinedMove
+{
+ u16 move1;
+ u16 move2;
+ u16 newMove;
+};
+
+static const struct CombinedMove sCombinedMoves[2] =
+{
+ {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE},
+ {0xFFFF, 0xFFFF, 0xFFFF}
+};
static const u16 sSpeciesToHoennPokedexNum[] = // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex)
{
@@ -2991,7 +3004,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
retVal = 0;
- // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH
+ // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + 1
while (retVal < 7)
{
data[retVal] = boxMon->otName[retVal];
@@ -5769,7 +5782,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
bool8 IsTradedMon(struct Pokemon *mon)
{
- u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH to 7
+ u8 otName[PLAYER_NAME_LENGTH];
u32 otId;
GetMonData(mon, MON_DATA_OT_NAME, otName);
otId = GetMonData(mon, MON_DATA_OT_ID, 0);
diff --git a/src/quest_log.c b/src/quest_log.c
index 0cda4eb77..2ae5e9cfe 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -2411,8 +2411,8 @@ static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 w
else
{
str = gStringVar1;
- StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH - 1);
- str[PLAYER_NAME_LENGTH - 1] = EOS;
+ StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH);
+ str[PLAYER_NAME_LENGTH] = EOS;
if ( str[0] == EXT_CTRL_CODE_BEGIN
&& str[1] == EXT_CTRL_CODE_JPN)
{
@@ -2602,18 +2602,18 @@ void SetQuestLogEvent(u16 eventId, const u16 *eventData)
static bool8 InQuestLogDisabledLocation(void)
{
// In Trainer Tower
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_1F)
- && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_1F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_2F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_3F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_4F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_5F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_6F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_7F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_8F)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_ROOF)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY)
- || gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR)))
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_1F)
+ && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_1F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_2F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_3F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_4F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_5F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_6F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_7F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_8F)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ROOF)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_LOBBY)
+ || gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR)))
return TRUE;
// In pokemon trainer fan club
@@ -2629,7 +2629,7 @@ static bool8 InQuestLogDisabledLocation(void)
// In elevator
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROCKET_HIDEOUT_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROCKET_HIDEOUT_ELEVATOR))
|| (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SILPH_CO_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SILPH_CO_ELEVATOR))
- || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR))
+ || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_TOWER_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_TOWER_ELEVATOR))
|| (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(CELADON_CITY_DEPARTMENT_STORE_ELEVATOR)))
return TRUE;
@@ -3401,8 +3401,8 @@ static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0)
{
const u16 *r6 = a0 + 4;
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received
@@ -3435,7 +3435,7 @@ static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_SINGLE;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
@@ -3444,8 +3444,8 @@ static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
@@ -3459,7 +3459,7 @@ static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
@@ -3468,8 +3468,8 @@ static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
@@ -3483,9 +3483,9 @@ static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_MULTI;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
- memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH - 1);
- memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH);
a0 += 13;
return a0;
}
@@ -3494,9 +3494,9 @@ static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memset(gStringVar2, EOS, PLAYER_NAME_LENGTH);
- memset(gStringVar3, EOS, PLAYER_NAME_LENGTH);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1);
StringCopy7(gStringVar1, (const u8 *)a0 + 5);
StringCopy7(gStringVar2, (const u8 *)a0 + 12);
StringCopy7(gStringVar3, (const u8 *)a0 + 19);
@@ -3548,7 +3548,7 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData
a0[1] = sQuestLogIdx;
a0[2] = eventData[0];
a0[3] = eventData[1];
- memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH - 1);
+ memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH);
r4 += 8;
return (u16 *)r4;
}
@@ -3556,8 +3556,8 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData
static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0)
{
const u8 *r6 = (const u8 *)(a0 + 4);
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
QuestLog_GetSpeciesName(a0[3], gStringVar2, 0);
QuestLog_GetSpeciesName(a0[2], gStringVar3, 0);
@@ -3571,15 +3571,15 @@ static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventDat
a0[0] = QL_EVENT_LINK_BATTLED_UNION;
a0[1] = sQuestLogIdx;
*(u8 *)&a0[2] = *(const u8 *)&eventData[0];
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0)
{
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]);
StringExpandPlaceholders(gStringVar4, QuestLog_Text_BattledTrainerEndedInOutcome);
diff --git a/src/quest_log_objects.c b/src/quest_log_objects.c
index 7917d03e9..aecc5fd68 100644
--- a/src/quest_log_objects.c
+++ b/src/quest_log_objects.c
@@ -14,22 +14,22 @@ void SetQuestLogObjectEventsData(struct QuestLog * questLog)
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
questLog->unk_008[i].active = gObjectEvents[i].active;
- questLog->unk_008[i].mapobj_bit_3 = gObjectEvents[i].mapobj_bit_3;
- questLog->unk_008[i].mapobj_bit_4 = gObjectEvents[i].mapobj_bit_4;
- questLog->unk_008[i].mapobj_bit_5 = gObjectEvents[i].mapobj_bit_5;
- questLog->unk_008[i].mapobj_bit_8 = gObjectEvents[i].mapobj_bit_8;
- questLog->unk_008[i].mapobj_bit_9 = gObjectEvents[i].mapobj_bit_9;
- questLog->unk_008[i].mapobj_bit_10 = gObjectEvents[i].mapobj_bit_10;
- questLog->unk_008[i].mapobj_bit_11 = gObjectEvents[i].mapobj_bit_11;
- questLog->unk_008[i].mapobj_bit_12 = gObjectEvents[i].mapobj_bit_12;
- questLog->unk_008[i].mapobj_bit_13 = gObjectEvents[i].mapobj_bit_13;
- questLog->unk_008[i].mapobj_bit_14 = gObjectEvents[i].mapobj_bit_14;
- questLog->unk_008[i].mapobj_bit_15 = gObjectEvents[i].mapobj_bit_15;
- questLog->unk_008[i].mapobj_bit_16 = gObjectEvents[i].mapobj_bit_16;
- questLog->unk_008[i].mapobj_bit_23 = gObjectEvents[i].mapobj_bit_23;
- questLog->unk_008[i].mapobj_bit_24 = gObjectEvents[i].mapobj_bit_24;
- questLog->unk_008[i].mapobj_bit_25 = gObjectEvents[i].mapobj_bit_25;
- questLog->unk_008[i].mapobj_bit_26 = gObjectEvents[i].mapobj_bit_26;
+ questLog->unk_008[i].triggerGroundEffectsOnStop = gObjectEvents[i].triggerGroundEffectsOnStop;
+ questLog->unk_008[i].disableCoveringGroundEffects = gObjectEvents[i].disableCoveringGroundEffects;
+ questLog->unk_008[i].landingJump = gObjectEvents[i].landingJump;
+ questLog->unk_008[i].frozen = gObjectEvents[i].frozen;
+ questLog->unk_008[i].facingDirectionLocked = gObjectEvents[i].facingDirectionLocked;
+ questLog->unk_008[i].disableAnim = gObjectEvents[i].disableAnim;
+ questLog->unk_008[i].enableAnim = gObjectEvents[i].enableAnim;
+ questLog->unk_008[i].inanimate = gObjectEvents[i].inanimate;
+ questLog->unk_008[i].invisible = gObjectEvents[i].invisible;
+ questLog->unk_008[i].offScreen = gObjectEvents[i].offScreen;
+ questLog->unk_008[i].trackedByCamera = gObjectEvents[i].trackedByCamera;
+ questLog->unk_008[i].isPlayer = gObjectEvents[i].isPlayer;
+ questLog->unk_008[i].spriteAnimPausedBackup = gObjectEvents[i].spriteAnimPausedBackup;
+ questLog->unk_008[i].spriteAffineAnimPausedBackup = gObjectEvents[i].spriteAffineAnimPausedBackup;
+ questLog->unk_008[i].disableJumpLandingGroundEffect = gObjectEvents[i].disableJumpLandingGroundEffect;
+ questLog->unk_008[i].fixedPriority = gObjectEvents[i].fixedPriority;
questLog->unk_008[i].mapobj_unk_18 = gObjectEvents[i].facingDirection;
questLog->unk_008[i].mapobj_unk_0B_0 = gObjectEvents[i].mapobj_unk_0B_0;
questLog->unk_008[i].elevation = gObjectEvents[i].elevation;
@@ -58,22 +58,22 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
gObjectEvents[i].active = questLogObjectEvents[i].active;
- gObjectEvents[i].mapobj_bit_3 = questLogObjectEvents[i].mapobj_bit_3;
- gObjectEvents[i].mapobj_bit_4 = questLogObjectEvents[i].mapobj_bit_4;
- gObjectEvents[i].mapobj_bit_5 = questLogObjectEvents[i].mapobj_bit_5;
- gObjectEvents[i].mapobj_bit_8 = questLogObjectEvents[i].mapobj_bit_8;
- gObjectEvents[i].mapobj_bit_9 = questLogObjectEvents[i].mapobj_bit_9;
- gObjectEvents[i].mapobj_bit_10 = questLogObjectEvents[i].mapobj_bit_10;
- gObjectEvents[i].mapobj_bit_11 = questLogObjectEvents[i].mapobj_bit_11;
- gObjectEvents[i].mapobj_bit_12 = questLogObjectEvents[i].mapobj_bit_12;
- gObjectEvents[i].mapobj_bit_13 = questLogObjectEvents[i].mapobj_bit_13;
- gObjectEvents[i].mapobj_bit_14 = questLogObjectEvents[i].mapobj_bit_14;
- gObjectEvents[i].mapobj_bit_15 = questLogObjectEvents[i].mapobj_bit_15;
- gObjectEvents[i].mapobj_bit_16 = questLogObjectEvents[i].mapobj_bit_16;
- gObjectEvents[i].mapobj_bit_23 = questLogObjectEvents[i].mapobj_bit_23;
- gObjectEvents[i].mapobj_bit_24 = questLogObjectEvents[i].mapobj_bit_24;
- gObjectEvents[i].mapobj_bit_25 = questLogObjectEvents[i].mapobj_bit_25;
- gObjectEvents[i].mapobj_bit_26 = questLogObjectEvents[i].mapobj_bit_26;
+ gObjectEvents[i].triggerGroundEffectsOnStop = questLogObjectEvents[i].triggerGroundEffectsOnStop;
+ gObjectEvents[i].disableCoveringGroundEffects = questLogObjectEvents[i].disableCoveringGroundEffects;
+ gObjectEvents[i].landingJump = questLogObjectEvents[i].landingJump;
+ gObjectEvents[i].frozen = questLogObjectEvents[i].frozen;
+ gObjectEvents[i].facingDirectionLocked = questLogObjectEvents[i].facingDirectionLocked;
+ gObjectEvents[i].disableAnim = questLogObjectEvents[i].disableAnim;
+ gObjectEvents[i].enableAnim = questLogObjectEvents[i].enableAnim;
+ gObjectEvents[i].inanimate = questLogObjectEvents[i].inanimate;
+ gObjectEvents[i].invisible = questLogObjectEvents[i].invisible;
+ gObjectEvents[i].offScreen = questLogObjectEvents[i].offScreen;
+ gObjectEvents[i].trackedByCamera = questLogObjectEvents[i].trackedByCamera;
+ gObjectEvents[i].isPlayer = questLogObjectEvents[i].isPlayer;
+ gObjectEvents[i].spriteAnimPausedBackup = questLogObjectEvents[i].spriteAnimPausedBackup;
+ gObjectEvents[i].spriteAffineAnimPausedBackup = questLogObjectEvents[i].spriteAffineAnimPausedBackup;
+ gObjectEvents[i].disableJumpLandingGroundEffect = questLogObjectEvents[i].disableJumpLandingGroundEffect;
+ gObjectEvents[i].fixedPriority = questLogObjectEvents[i].fixedPriority;
gObjectEvents[i].facingDirection = questLogObjectEvents[i].mapobj_unk_18;
gObjectEvents[i].mapobj_unk_0B_0 = questLogObjectEvents[i].mapobj_unk_0B_0;
gObjectEvents[i].elevation = questLogObjectEvents[i].elevation;
diff --git a/src/quest_log_player.c b/src/quest_log_player.c
index 7665a8a92..0d7a2bb50 100644
--- a/src/quest_log_player.c
+++ b/src/quest_log_player.c
@@ -100,7 +100,7 @@ static void sub_81505C4(u8 taskId)
{
case 0:
ObjectEventClearAnimIfSpecialAnimActive(objectEvent);
- objectEvent->mapobj_bit_11 = TRUE;
+ objectEvent->enableAnim = TRUE;
sub_81507BC(objectEvent, sub_805C808(4));
StartSpriteAnim(sprite, sub_80634F0(objectEvent->facingDirection));
gTasks[taskId].data[0]++;
diff --git a/src/region_map.c b/src/region_map.c
index d526f9aaa..b2f08e39a 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -3420,7 +3420,7 @@ static u8 sub_80C3878(u8 mapsec)
case MAPSEC_ROCKET_WAREHOUSE:
return FlagGet(FLAG_WORLD_MAP_FIVE_ISLAND_ROCKET_WAREHOUSE) ? 2 : 3;
case MAPSEC_TRAINER_TOWER_2:
- return FlagGet(FLAG_WORLD_MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY) ? 2 : 3;
+ return FlagGet(FLAG_WORLD_MAP_TRAINER_TOWER_LOBBY) ? 2 : 3;
case MAPSEC_DOTTED_HOLE:
return FlagGet(FLAG_WORLD_MAP_SIX_ISLAND_DOTTED_HOLE_1F) ? 2 : 3;
case MAPSEC_LOST_CAVE:
diff --git a/src/renewable_hidden_items.c b/src/renewable_hidden_items.c
index cbaa780e6..c0406fe94 100644
--- a/src/renewable_hidden_items.c
+++ b/src/renewable_hidden_items.c
@@ -529,12 +529,6 @@ static const struct RenewableHiddenItemData sRenewableHiddenItems[] = {
},
};
-bool32 sub_815D834(void)
-{
- // Stubbed out?
- return FALSE;
-}
-
void SetAllRenewableItemFlags(void)
{
u8 i, j;
diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c
index 20b29de9b..1d33fb7d1 100644
--- a/src/rfu_union_tool.c
+++ b/src/rfu_union_tool.c
@@ -10,14 +10,15 @@
#include "task.h"
#include "constants/flags.h"
#include "constants/event_object_movement.h"
+#include "constants/union_room.h"
#include "constants/object_events.h"
static EWRAM_DATA struct UnionObj * UnionObjWork = NULL;
static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
static u8 StartUnionObjAnimTask(void);
-static u32 sub_811BBC8(u32 playerIdx, u32 arg1);
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2);
+static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member);
+static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction);
static const u8 sUnionObjectEventGfxIds[][10] = {
[MALE] = {
@@ -69,12 +70,12 @@ static const u8 sOppositeFacingDirection[] = {
[DIR_EAST] = DIR_WEST
};
-static const u8 gUnknown_845711B[] = {
- 1,
- 3,
- 1,
- 4,
- 2
+static const u8 sUnionGroupMemberFacings[] = {
+ DIR_SOUTH,
+ DIR_WEST,
+ DIR_SOUTH,
+ DIR_EAST,
+ DIR_NORTH
};
static const u8 sUnionRoomLocalIds[] = {
@@ -116,19 +117,19 @@ static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
return sUnionObjectEventGfxIds[gender][id % 8];
}
-static void GetUnionRoomPlayerFacingCoords(u32 id, u32 dirn, s32 * xp, s32 * yp)
+static void GetUnionRoomPlayerFacingCoords(u32 group, u32 member, s32 * xp, s32 * yp)
{
- *xp = sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7;
- *yp = sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7;
+ *xp = sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7;
+ *yp = sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7;
}
-static bool32 sub_811B58C(u32 id, u32 dirn, s32 x, s32 y)
+static bool32 IsUnionRoomPlayerFacingTileAt(u32 group, u32 member, s32 x, s32 y)
{
- if (sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7 != x)
+ if (sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7 != x)
{
return FALSE;
}
- else if (sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7 != y)
+ else if (sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7 != y)
{
return FALSE;
}
@@ -188,6 +189,7 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
}
return TRUE;
}
+
static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
{
u8 objectId;
@@ -263,11 +265,11 @@ static const u8 sMovement_UnionPlayerEnter[2] = {
MOVEMENT_ACTION_STEP_END
};
-static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr)
+static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionObj * ptr)
{
s16 x, y;
- switch (*a0)
+ switch (*state_p)
{
case 0:
if (!is_walking_or_running())
@@ -275,30 +277,30 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
break;
}
PlayerGetDestCoords(&x, &y);
- if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
player_get_pos_including_state_based_drift(&x, &y);
- if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
{
break;
}
SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
CreateUnionRoomPlayerObjectEvent(playerIdx);
ShowUnionRoomPlayer(playerIdx);
- (*a0)++;
+ (*state_p)++;
// fallthrough
case 3: // incorrect?
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == 1)
{
- (*a0)++;
+ (*state_p)++;
}
break;
case 2:
if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
{
- *a0 = 0;
+ *state_p = 0;
return TRUE;
}
break;
@@ -306,12 +308,12 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
return FALSE;
}
-static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
+static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256)
{
struct UnionObj * ptr = &UnionObjWork[playerIdx];
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561)
- ptr->schedAnim = 1;
- ptr->gfxId = GetUnionRoomPlayerGraphicsId(a1, a2);
+ ptr->schedAnim = UNION_ROOM_SPAWN_IN;
+ ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256);
if (ptr->state == 0)
{
return TRUE;
@@ -322,11 +324,11 @@ static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
}
}
-static bool32 sub_811B90C(u32 playerIdx)
+static bool32 DespawnGroupLeader(u32 playerIdx)
{
struct UnionObj * ptr = &UnionObjWork[playerIdx];
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577)
- ptr->schedAnim = 2;
+ ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
if (ptr->state == 1)
{
return TRUE;
@@ -342,7 +344,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
switch (ptr->state)
{
case 0:
- if (ptr->schedAnim == 1)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
{
ptr->state = 2;
ptr->animState = 0;
@@ -353,7 +355,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
// fallthrough
case 2:
- if (!sub_811BBC8(playerIdx, 0) && ptr->schedAnim == 2)
+ if (!RfuUnionGroupMemberIsInvisible(playerIdx, 0) && ptr->schedAnim == 2)
{
ptr->state = 0;
ptr->animState = 0;
@@ -366,7 +368,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
break;
case 1:
- if (ptr->schedAnim == 2)
+ if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
{
ptr->state = 3;
ptr->animState = 0;
@@ -383,7 +385,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
}
break;
}
- ptr->schedAnim = 0;
+ ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
}
static void Task_AnimateUnionObjs(u8 taskId)
@@ -409,7 +411,7 @@ static u8 StartUnionObjAnimTask(void)
}
}
-static void sub_811BA5C(void)
+static void DestroyAnimateUnionObjsTask(void)
{
u8 taskId = FindTaskIdByFunc(Task_AnimateUnionObjs);
if (taskId < NUM_TASKS)
@@ -418,7 +420,7 @@ static void sub_811BA5C(void)
}
}
-void sub_811BA78(void)
+void DeleteUnionObjWorkAndStopTask(void)
{
s32 i;
for (i = 0; i < 8; i++)
@@ -430,31 +432,31 @@ void sub_811BA78(void)
}
}
UnionObjWork = NULL;
- sub_811BA5C();
+ DestroyAnimateUnionObjsTask();
}
-void sub_811BAAC(u8 * sp8, s32 r9)
+void CreateGroupMemberObjectsInvisible(u8 * sprite_ids, s32 group)
{
- s32 r7;
+ s32 i;
- for (r7 = 0; r7 < 5; r7++)
+ for (i = 0; i < 5; i++)
{
- s32 r5 = 5 * r9 + r7;
- sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, sUnionPartnerCoords[r9][0] + sFacingDirectionOffsets[r7][0], sUnionPartnerCoords[r9][1] + sFacingDirectionOffsets[r7][1], 3, 1);
- sub_8069124(r5 - 0x38, TRUE);
+ s32 obj_id = 5 * group + i;
+ sprite_ids[obj_id] = sprite_new(OBJECT_EVENT_GFX_MAN, obj_id - 0x38, sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[i][0], sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[i][1], 3, 1);
+ RfuUnionObjectToggleInvisibility(obj_id - 0x38, TRUE);
}
}
-void sub_811BB40(u8 * r5)
+void DestroyGroupMemberObjects(u8 *spriteIds)
{
s32 i;
for (i = 0; i < 40; i++)
{
- DestroySprite(&gSprites[r5[i]]);
+ DestroySprite(&gSprites[spriteIds[i]]);
}
}
-void sub_811BB68(void)
+void MakeGroupAssemblyAreasPassable(void)
{
s32 i, j, x, y;
for (i = 0; i < 8; i++)
@@ -462,94 +464,94 @@ void sub_811BB68(void)
for (j = 0; j < 5; j++)
{
GetUnionRoomPlayerFacingCoords(i, j, &x, &y);
- sub_8059024(x, y, 0);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
}
}
-static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
+static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct GFtgtGname * gname)
{
- if (r1 != 0)
+ if (member != 0)
{
- return gUnknown_845711B[r1];
+ return sUnionGroupMemberFacings[member];
}
- else if (r2->unk_0a_0 == 0x45)
+ else if (gname->activity == 0x45)
{
- return 1;
+ return DIR_SOUTH;
}
else
{
- return 4;
+ return DIR_EAST;
}
}
-static u32 sub_811BBC8(u32 a0, u32 a1)
+static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member)
{
- return sub_806916C(5 * a0 + a1 - 0x38);
+ return RfuUnionObjectIsInvisible(5 * group + member - 0x38);
}
-static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
+static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct GFtgtGname * gname)
{
s32 x, y;
- s32 r7 = 5 * r5 + r6;
- if (sub_811BBC8(r5, r6) == 1)
+ s32 objId = 5 * groupNo + memberNo;
+ if (RfuUnionGroupMemberIsInvisible(groupNo, memberNo) == TRUE)
{
- sub_8069124(r7 - 0x38, FALSE);
- sub_80691A4(r7 - 0x38, 1);
+ RfuUnionObjectToggleInvisibility(objId - 0x38, FALSE);
+ RfuUnionObjectStartWarp(objId - 0x38, UNION_ROOM_SPAWN_IN);
}
- sub_8069094(r7 - 0x38, r8);
- sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9));
- GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y);
- sub_8059024(x, y, 1);
+ RfuUnionObjectSetFacingDirection(objId - 0x38, direction);
+ UnionPartnerObjectSetFacing(memberNo, groupNo, UnionPartnerObjectGetFacing(memberNo, groupNo, gname));
+ GetUnionRoomPlayerFacingCoords(groupNo, memberNo, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, TRUE);
}
-static void sub_811BC68(u32 a0, u32 a1)
+static void DespawnGroupMember(u32 group, u32 member)
{
s32 x, y;
- sub_80691A4(5 * a0 + a1 - 0x38, 2);
- GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y);
- sub_8059024(x, y, 0);
+ RfuUnionObjectStartWarp(5 * group + member - 0x38, UNION_ROOM_SPAWN_OUT);
+ GetUnionRoomPlayerFacingCoords(group, member, &x, &y);
+ MapGridSetMetatileImpassabilityAt(x, y, FALSE);
}
-static void sub_811BCA0(u32 r7, struct GFtgtGname * r8)
+static void AssembleGroup(u32 group, struct GFtgtGname * gname)
{
s16 x, y, x2, y2;
s32 i;
PlayerGetDestCoords(&x, &y);
player_get_pos_including_state_based_drift(&x2, &y2);
- if (sub_806916C(5 * r7 - 0x38) == 1)
+ if (RfuUnionObjectIsInvisible(5 * group - 0x38) == TRUE)
{
- if (sub_811B58C(r7, 0, x, y) == TRUE || sub_811B58C(r7, 0, x2, y2) == TRUE)
+ if (IsUnionRoomPlayerFacingTileAt(group, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(group, 0, x2, y2) == TRUE)
{
return;
}
- sub_811BBE0(r7, 0, GetUnionRoomPlayerGraphicsId(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8);
+ SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname);
}
for (i = 1; i < 5; i++)
{
- if (r8->unk_04[i - 1] == 0)
+ if (gname->child_sprite_gender[i - 1] == 0)
{
- sub_811BC68(r7, i);
+ DespawnGroupMember(group, i);
}
- else if (sub_811B58C(r7, i, x, y) == FALSE && sub_811B58C(r7, i, x2, y2) == FALSE)
+ else if (IsUnionRoomPlayerFacingTileAt(group, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(group, i, x2, y2) == FALSE)
{
- sub_811BBE0(r7, i, GetUnionRoomPlayerGraphicsId((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8);
+ SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname);
}
}
}
-static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
+static void SpawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
{
u32 i;
- switch (r4->unk_0a_0)
+ switch (gname->activity)
{
case 0x40:
case 0x54:
- sub_811B8BC(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
+ SpawnGroupLeader(group, gname->playerGender, gname->unk_00.playerTrainerId[0]);
for (i = 0; i < 5; i++)
{
- sub_811BC68(r5, i);
+ DespawnGroupMember(group, i);
}
break;
case 0x41:
@@ -559,70 +561,70 @@ static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
case 0x51:
case 0x52:
case 0x53:
- sub_811B90C(r5);
- sub_811BCA0(r5, r4);
+ DespawnGroupLeader(group);
+ AssembleGroup(group, gname);
break;
default:
AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979)
}
}
-static void sub_811BE6C(u32 r5, struct GFtgtGname * unused)
+static void DespawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
{
s32 i;
- sub_811B90C(r5);
+ DespawnGroupLeader(group);
for (i = 0; i < 5; i++)
{
- sub_811BC68(r5, i);
+ DespawnGroupMember(group, i);
}
}
-static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0)
+static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom * groups)
{
s32 i;
- struct UnkStruct_x20 * r4;
+ struct UnkStruct_x20 * x20_p;
sUnionObjRefreshTimer = 0;
- for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
+ for (i = 0, x20_p = groups->field_0->arr; i < 8; i++)
{
- if (r4[i].field_1A_0 == 1)
+ if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- sub_811BDA8(i, &r4[i].unk.gname);
+ SpawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
}
- else if (r4[i].field_1A_0 == 2)
+ else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{
- sub_811BE6C(i, &r4[i].unk.gname);
+ DespawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
}
}
}
-void sub_811BECC(struct UnkStruct_URoom *unused)
+void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
{
sUnionObjRefreshTimer = 300;
}
-void sub_811BEDC(struct UnkStruct_URoom *r2)
+void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
{
if (++sUnionObjRefreshTimer > 300)
{
- UpdateUnionRoomPlayerSprites(r2);
+ UpdateUnionRoomPlayerSprites(uroom_p);
}
}
-bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
+bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds)
{
s16 x, y;
s32 i, j;
- struct UnkStruct_x20 * r4;
+ struct UnkStruct_x20 * x20_p;
if (!is_walking_or_running())
{
return FALSE;
}
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
- for (i = 0, r4 = arg0->arr; i < 8; i++)
+ for (i = 0, x20_p = main0_p->arr; i < 8; i++)
{
for (j = 0; j < 5; j++)
{
- s32 r3 = 5 * i + j;
+ s32 objId = 5 * i + j;
if (x != sUnionPartnerCoords[i][0] + sFacingDirectionOffsets[j][0] + 7)
{
continue;
@@ -631,33 +633,33 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
{
continue;
}
- if (sub_806916C(r3 - 0x38) != 0)
+ if (RfuUnionObjectIsInvisible(objId - 0x38) != 0)
{
continue;
}
- if (sub_8069294(r3 - 0x38) != 0)
+ if (RfuUnionObjectIsWarping(objId - 0x38) != 0)
{
continue;
}
- if (r4[i].field_1A_0 != 1)
+ if (x20_p[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
{
continue;
}
- sub_811C008(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
- *arg1 = j;
- *arg2 = i;
+ UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
+ *member_p = j;
+ *group_p = i;
return TRUE;
}
}
return FALSE;
}
-static void sub_811C008(s32 arg0, s32 arg1, u8 arg2)
+static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction)
{
- sub_8069058(5 * arg1 - 0x38 + arg0, arg2);
+ TurnObjectEvent(5 * group - 0x38 + member, direction);
}
-void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
+void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p)
{
- return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.gname));
+ return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].gname_uname.gname));
}
diff --git a/src/save.c b/src/save.c
index a2d365886..3db8dcdbf 100644
--- a/src/save.c
+++ b/src/save.c
@@ -856,7 +856,7 @@ void sub_80DA634(u8 taskId)
gTasks[taskId].data[0] = 1;
break;
case 1:
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gTasks[taskId].data[0] = 2;
break;
case 2:
@@ -890,7 +890,7 @@ void sub_80DA634(u8 taskId)
break;
case 7:
ClearContinueGameWarpStatus2();
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gTasks[taskId].data[0] = 8;
break;
case 8:
@@ -901,7 +901,7 @@ void sub_80DA634(u8 taskId)
}
break;
case 9:
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gTasks[taskId].data[0] = 10;
break;
case 10:
diff --git a/src/scrcmd.c b/src/scrcmd.c
index c2c422a0a..1ff3eb954 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1193,7 +1193,7 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
u8 v1 = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
- sub_8069058(v1, direction);
+ TurnObjectEvent(v1, direction);
return FALSE;
}
diff --git a/src/script.c b/src/script.c
index 0a4b69bac..4b8565589 100644
--- a/src/script.c
+++ b/src/script.c
@@ -406,7 +406,7 @@ u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag)
}
}
-void mapheader_run_script_with_tag_x1(void)
+void RunOnLoadMapScript(void)
{
mapheader_run_script_by_tag(1);
}
@@ -506,7 +506,7 @@ u8 *GetRamScript(u8 objectId, u8 *script)
}
}
-bool32 sub_8069DFC(void)
+bool32 ValidateRamScript(void)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
diff --git a/src/smokescreen.c b/src/smokescreen.c
new file mode 100644
index 000000000..2f269737e
--- /dev/null
+++ b/src/smokescreen.c
@@ -0,0 +1,73 @@
+#include "global.h"
+#include "decompress.h"
+#include "util.h"
+
+static void SmokescreenImpact_Callback(struct Sprite * sprite);
+
+extern const struct CompressedSpriteSheet gSmokescreenImpactSpriteSheet;
+extern const struct CompressedSpritePalette gSmokescreenImpactSpritePalette;
+extern const struct SpriteTemplate gSmokescreenImpactSpriteTemplate;
+
+u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
+{
+ u8 mainSpriteId;
+ u8 spriteId1, spriteId2, spriteId3, spriteId4;
+ struct Sprite *mainSprite;
+
+ if (GetSpriteTileStartByTag(gSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
+ {
+ LoadCompressedSpriteSheetUsingHeap(&gSmokescreenImpactSpriteSheet);
+ LoadCompressedSpritePaletteUsingHeap(&gSmokescreenImpactSpritePalette);
+ }
+
+ mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback);
+ mainSprite = &gSprites[mainSpriteId];
+ mainSprite->data[1] = a3;
+
+ spriteId1 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
+ gSprites[spriteId1].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ AnimateSprite(&gSprites[spriteId1]);
+
+ spriteId2 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y - 16, 2);
+ gSprites[spriteId2].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId2], 1);
+ AnimateSprite(&gSprites[spriteId2]);
+
+ spriteId3 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y, 2);
+ gSprites[spriteId3].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId3], 2);
+ AnimateSprite(&gSprites[spriteId3]);
+
+ spriteId4 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y, 2);
+ gSprites[spriteId4].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId4], 3);
+ AnimateSprite(&gSprites[spriteId4]);
+
+ return mainSpriteId;
+}
+
+static void SmokescreenImpact_Callback(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ FreeSpriteTilesByTag(gSmokescreenImpactSpriteSheet.tag);
+ FreeSpritePaletteByTag(gSmokescreenImpactSpritePalette.tag);
+ if (!sprite->data[1])
+ DestroySprite(sprite);
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void SpriteCB_DestroySprite(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ gSprites[sprite->data[0]].data[0]--;
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/sprite.c b/src/sprite.c
index c1fc89777..fd824494b 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -94,17 +94,17 @@ typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *);
#define DUMMY_OAM_DATA \
{ \
160, /* Y (off-screen) */ \
- 0, \
- 0, \
- 0, \
- 0, \
- 0, \
+ ST_OAM_AFFINE_OFF, \
+ ST_OAM_OBJ_NORMAL, \
+ FALSE, \
+ ST_OAM_4BPP, \
+ ST_OAM_SQUARE, \
304, /* X */ \
0, \
- 0, \
- 0, \
+ ST_OAM_SIZE_0, \
+ 0x000, \
3, /* lowest priority */ \
- 0, \
+ 0x0, \
0 \
}
@@ -250,47 +250,47 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] =
AffineAnimCmd_frame,
};
-static const s32 sUnknown_082EC6F4[3][4][2] =
+static const s32 sOamDimensionsCopy[3][4][2] =
{
- {
- {8, 8},
- {0x10, 0x10},
- {0x20, 0x20},
- {0x40, 0x40},
+ [ST_OAM_SQUARE] = {
+ [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8
+ [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16
+ [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32
+ [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64
},
- {
- {0x10, 8},
- {0x20, 8},
- {0x20, 0x10},
- {0x40, 0x20},
+ [ST_OAM_H_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8
+ [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8
+ [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16
+ [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32
},
- {
- {8, 0x10},
- {8, 0x20},
- {0x10, 0x20},
- {0x20, 0x40},
+ [ST_OAM_V_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16
+ [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32
+ [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32
+ [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64
},
};
static const struct OamDimensions sOamDimensions[3][4] =
{
- { // square
- { 8, 8 },
- { 16, 16 },
- { 32, 32 },
- { 64, 64 },
+ [ST_OAM_SQUARE] = {
+ [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8
+ [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16
+ [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32
+ [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64
},
- { // horizontal rectangle
- { 16, 8 },
- { 32, 8 },
- { 32, 16 },
- { 64, 32 },
+ [ST_OAM_H_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8
+ [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8
+ [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16
+ [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32
},
- { // vertical rectangle
- { 8, 16 },
- { 8, 32 },
- { 16, 32 },
- { 32, 64 },
+ [ST_OAM_V_RECTANGLE] = {
+ [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16
+ [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32
+ [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32
+ [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64
},
};
@@ -1222,43 +1222,43 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite)
return matrixNum;
}
-void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3)
+void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod)
{
- sprite->data[6] = a2;
- sprite->data[7] = a3;
+ sprite->data[6] = xmod;
+ sprite->data[7] = ymod;
sprite->flags_f = 1;
}
-s32 sub_800800C(s32 a0, s32 a1, s32 a2)
+static s32 affine_get_new_pos2(s32 baseDim, s32 xformed, s32 modifier)
{
- s32 subResult, var1;
+ s32 subResult, shiftResult;
- subResult = a1 - a0;
+ subResult = xformed - baseDim;
if (subResult < 0)
- var1 = -(subResult) >> 9;
+ shiftResult = -(subResult) >> 9;
else
- var1 = -(subResult >> 9);
- return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1);
+ shiftResult = -(subResult >> 9);
+ return modifier - ((u32)(modifier * xformed) / (u32)(baseDim) + shiftResult);
}
-void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2)
+static void obj_update_pos2(struct Sprite *sprite, s32 xmod, s32 ymod)
{
- s32 var0, var1, var2;
+ s32 dim, baseDim, xFormed;
u32 matrixNum = sprite->oam.matrixNum;
- if (a1 != 0x800)
+ if (xmod != 0x800)
{
- var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0];
- var1 = var0 << 8;
- var2 = (var0 << 16) / gOamMatrices[matrixNum].a;
- sprite->pos2.x = sub_800800C(var1, var2, a1);
+ dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][0];
+ baseDim = dim << 8;
+ xFormed = (dim << 16) / gOamMatrices[matrixNum].a;
+ sprite->pos2.x = affine_get_new_pos2(baseDim, xFormed, xmod);
}
- if (a2 != 0x800)
+ if (ymod != 0x800)
{
- var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1];
- var1 = var0 << 8;
- var2 = (var0 << 16) / gOamMatrices[matrixNum].d;
- sprite->pos2.y = sub_800800C(var1, var2, a2);
+ dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][1];
+ baseDim = dim << 8;
+ xFormed = (dim << 16) / gOamMatrices[matrixNum].d;
+ sprite->pos2.y = affine_get_new_pos2(baseDim, xFormed, ymod);
}
}
diff --git a/src/tm_case.c b/src/tm_case.c
index d45061bde..ac4134029 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -1304,7 +1304,7 @@ static void InitWindowTemplatesAndPals(void)
LoadPalette(gTMCaseMainWindowPalette, 0xA0, 0x20);
LoadPalette(sPal3Override, 0xF6, 0x04);
LoadPalette(sPal3Override, 0xD6, 0x04);
- sub_8107D38(0xc0, 0x01);
+ ListMenuLoadStdPalAt(0xc0, 0x01);
for (i = 0; i < 9; i++)
FillWindowPixelBuffer(i, 0x00);
PutWindowTilemap(0);
diff --git a/src/trade.c b/src/trade.c
index 05a259e60..1872e98ee 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -1,41 +1,22 @@
#include "global.h"
-#include "palette.h"
+#include "gflib.h"
#include "task.h"
#include "decompress.h"
-#include "gpu_regs.h"
-#include "malloc.h"
-#include "bg.h"
-#include "text.h"
-#include "window.h"
-#include "librfu.h"
#include "text_window.h"
-#include "evolution_scene.h"
#include "pokemon_icon.h"
-#include "pokedex.h"
-#include "mail_data.h"
#include "graphics.h"
#include "link.h"
-#include "random.h"
-#include "save.h"
#include "load_save.h"
-#include "quest_log.h"
-#include "field_fadetransition.h"
-#include "mevent.h"
-#include "help_system.h"
#include "link_rfu.h"
#include "cable_club.h"
#include "data.h"
-#include "sound.h"
-#include "string_util.h"
#include "strings.h"
#include "menu.h"
#include "overworld.h"
#include "battle_anim.h"
#include "pokeball.h"
#include "party_menu.h"
-#include "util.h"
#include "daycare.h"
-#include "script.h"
#include "event_data.h"
#include "battle_interface.h"
#include "pokemon_summary_screen.h"
@@ -43,11 +24,7 @@
#include "new_menu_helpers.h"
#include "trade.h"
#include "trade_scene.h"
-#include "constants/species.h"
-#include "constants/items.h"
-#include "constants/easy_chat.h"
#include "constants/songs.h"
-#include "constants/region_map.h"
#include "constants/moves.h"
struct TradeMenuResources
@@ -788,9 +765,9 @@ static void sub_804C728(void)
if (gWirelessCommType)
{
- sub_800B1F4();
+ SetWirelessCommType1();
OpenLink();
- sub_80FBB20();
+ LinkRfu_CreateIdleTask();
}
else
{
@@ -833,14 +810,14 @@ static void sub_804C728(void)
case 4:
if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
{
- sub_80FBB4C();
+ LinkRfu_DestroyIdleTask();
CalculatePlayerPartyCount();
gMain.state++;
sTradeMenuResourcesPtr->unk_A8 = 0;
if (gWirelessCommType)
{
sub_80FA484(TRUE);
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
}
}
break;
@@ -1236,7 +1213,7 @@ static void sub_804D548(void)
}
else
{
- sub_800AA80(32);
+ Link_StartSend5FFFwithParam(32);
sTradeMenuResourcesPtr->unk_6F = 13;
}
}
@@ -2027,11 +2004,11 @@ static void sub_804E908(void)
{
if (gWirelessCommType)
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
}
else
{
- sub_800AA80(12);
+ Link_StartSend5FFFwithParam(12);
}
sTradeMenuResourcesPtr->unk_6F = 12;
@@ -2067,7 +2044,7 @@ static void sub_804E9C0(void)
{
if (!sub_80FA484(FALSE))
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
sTradeMenuResourcesPtr->unk_6F = 13;
}
}
@@ -2763,30 +2740,30 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
return FALSE;
}
-int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
+int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGnameSub partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
{
- u8 r9 = a0.hasNationalDex;
- u8 r4 = a0.isChampion;
- u8 r10 = a1.hasNationalDex;
- u8 r0 = a1.isChampion;
- u8 r1 = a1.unk_01_2;
- u8 r2;
+ u8 playerHasNationalDex = playerSub.hasNationalDex;
+ u8 playerIsChampion = playerSub.isChampion;
+ u8 partnerHasNationalDex = partnerSub.hasNationalDex;
+ u8 partnerIsChampion = partnerSub.isChampion;
+ u8 partnerVersion = partnerSub.version;
+ bool8 isNotFRLG;
- if (r1 == VERSION_FIRE_RED || r1 == VERSION_LEAF_GREEN)
+ if (partnerVersion == VERSION_FIRE_RED || partnerVersion == VERSION_LEAF_GREEN)
{
- r2 = 0;
+ isNotFRLG = FALSE;
}
else
{
- r2 = 1;
+ isNotFRLG = TRUE;
}
- if (r2)
+ if (isNotFRLG)
{
- if (!r4)
+ if (!playerIsChampion)
{
return 8;
}
- else if (!r0)
+ else if (!partnerIsChampion)
{
return 9;
}
@@ -2817,7 +2794,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1,
return 3;
}
- if (!r9)
+ if (!playerHasNationalDex)
{
if (species1 == SPECIES_EGG)
{
@@ -2835,7 +2812,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1,
}
}
- if (!r10 && species1 > SPECIES_MEW)
+ if (!partnerHasNationalDex && species1 > SPECIES_MEW)
{
return 7;
}
@@ -2843,11 +2820,11 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1,
return 0;
}
-int CanRegisterMonForTradingBoard(struct GFtgtGnameSub a0, u16 species, u16 a2, u8 a3)
+int CanRegisterMonForTradingBoard(struct GFtgtGnameSub playerSub, u16 species2, u16 species, u8 obedience)
{
- u8 canTradeEggAndNational = a0.hasNationalDex;
+ u8 canTradeEggAndNational = playerSub.hasNationalDex;
- if (IsDeoxysOrMewUntradable(a2, a3))
+ if (IsDeoxysOrMewUntradable(species, obedience))
{
return 1;
}
@@ -2857,12 +2834,12 @@ int CanRegisterMonForTradingBoard(struct GFtgtGnameSub a0, u16 species, u16 a2,
return 0;
}
- if (species == SPECIES_EGG)
+ if (species2 == SPECIES_EGG)
{
return 2;
}
- if (species > SPECIES_MEW && species != SPECIES_EGG)
+ if (species2 > SPECIES_MEW && species2 != SPECIES_EGG)
{
return 1;
}
diff --git a/src/trade_scene.c b/src/trade_scene.c
index b420cb196..601d7ae2b 100644
--- a/src/trade_scene.c
+++ b/src/trade_scene.c
@@ -2556,7 +2556,7 @@ static void sub_8053E8C(void)
DrawTextOnTradeWindow(0, gStringVar4, 0);
break;
case 1:
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gMain.state = 100;
sTradeData->timer = 0;
break;
@@ -2594,7 +2594,7 @@ static void sub_8053E8C(void)
}
if (gWirelessCommType)
{
- sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ MEvent_RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
}
SetContinueGameWarpStatusToDynamicWarp();
sub_80DA3AC();
@@ -2641,7 +2641,7 @@ static void sub_8053E8C(void)
case 41:
if (sTradeData->timer == 0)
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gMain.state = 42;
}
else
@@ -2660,7 +2660,7 @@ static void sub_8053E8C(void)
if (++sTradeData->timer > 60)
{
gMain.state++;
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
}
break;
case 6:
@@ -2682,11 +2682,11 @@ static void sub_8053E8C(void)
{
if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade)
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
}
else
{
- sub_800AAC0();
+ Link_TryStartSend5FFF();
}
gMain.state++;
}
diff --git a/src/trainer_card.c b/src/trainer_card.c
index e4778f5ed..f29c9c71c 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -590,7 +590,7 @@ static void Task_TrainerCard(u8 taskId)
}
break;
case 15:
- sub_800AAC0();
+ Link_TryStartSend5FFF();
DrawDialogueFrame(0, 1);
AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0);
CopyWindowToVram(0, 3);
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 60c6fd93d..0f9907e2d 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -20,7 +20,6 @@
#include "menu.h"
#include "new_menu_helpers.h"
#include "sound.h"
-#include "renewable_hidden_items.h"
#include "constants/flags.h"
#include "constants/vars.h"
#include "constants/items.h"
@@ -31,14 +30,18 @@
#include "constants/trainers.h"
#include "constants/facility_trainer_classes.h"
#include "constants/object_events.h"
+#include "constants/trainer_tower.h"
+
+#define CURR_FLOOR sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx]
+#define TRAINER_TOWER gSaveBlock1Ptr->trainerTower[gSaveBlock1Ptr->towerChallengeId]
struct UnkStruct_203F458
{
/* 0x0000 */ u8 floorIdx;
- /* 0x0004 */ struct EReaderTrainerHillSet unk_0004;
+ /* 0x0004 */ struct EReaderTrainerTowerSet unk_0004;
};
-struct UnkStruct_203F45C
+struct TrainerTowerOpponent
{
/* 0x00 */ u8 name[11];
/* 0x0C */ u16 speechWin[6];
@@ -52,15 +55,15 @@ struct UnkStruct_203F45C
struct SinglesTrainerInfo
{
- u8 mapObjGfx;
+ u8 objGfx;
u8 facilityClass;
bool8 gender;
};
struct DoublesTrainerInfo
{
- u8 mapObjGfx1;
- u8 mapObjGfx2;
+ u8 objGfx1;
+ u8 objGfx2;
u8 facilityClass;
bool8 gender1;
bool8 gender2;
@@ -68,49 +71,49 @@ struct DoublesTrainerInfo
struct TrainerEncounterMusicPairs
{
- u8 unk0;
- u8 unk1;
+ u8 facilityClass;
+ u8 musicId;
};
static EWRAM_DATA struct UnkStruct_203F458 * sTrainerTowerState = NULL;
-static EWRAM_DATA struct UnkStruct_203F45C * sTrainerTowerOpponent = NULL;
+static EWRAM_DATA struct TrainerTowerOpponent * sTrainerTowerOpponent = NULL;
static EWRAM_DATA u8 sUnused_203F460 = 0;
-static void sub_815DC8C(void); // setup
-static void sub_815DD2C(void); // teardown
-static void sub_815DD44(void);
+static void SetUpTrainerTowerDataStruct(void);
+static void FreeTrainerTowerDataStruct(void);
+static void InitTrainerTowerFloor(void);
static void SetTrainerTowerNPCGraphics(void);
static void TT_ConvertEasyChatMessageToString(u16 *ecWords, u8 *dest);
-static void sub_815DF54(void);
+static void BufferTowerOpponentSpeech(void);
static void TrainerTowerGetOpponentTextColor(u8 battleType, u8 facilityClass);
-static void sub_815E160(void);
-static void sub_815E1C0(void);
-static void sub_815E1F0(void);
-static void TTSpecial_HasReachedTheRoof(void);
-static void sub_815E28C(void);
-static void sub_815E394(void);
-static void sub_815E408(void);
-static void sub_815E4B0(void);
-static void TTSpecial_StartTimer(void);
-static void sub_815E5C4(void);
-static void sub_815E5F0(void);
-static void sub_815E658(void);
-static void sub_815E720(void);
-static void sub_815E88C(void);
-static void sub_815E8B4(void);
-static void sub_815E8CC(void);
-static void sub_815E908(void);
-static void sub_815E948(void);
-static void sub_815E9C8(void);
+static void DoTrainerTowerBattle(void);
+static void TrainerTowerGetChallengeType(void);
+static void TrainerTowerAddFloorCleared(void);
+static void GetFloorAlreadyCleared(void);
+static void StartTrainerTowerChallenge(void);
+static void GetOwnerState(void);
+static void GiveChallengePrize(void);
+static void CheckFinalTime(void);
+static void TrainerTowerResumeTimer(void);
+static void TrainerTowerSetPlayerLost(void);
+static void GetTrainerTowerChallengeStatus(void);
+static void GetCurrentTime(void);
+static void ShowResultsBoard(void);
+static void CloseResultsBoard(void);
+static void TrainerTowerGetDoublesEligiblity(void);
+static void TrainerTowerGetNumFloors(void);
+static void ShouldWarpToCounter(void);
+static void PlayTrainerTowerEncounterMusic(void);
+static void HasSpokenToOwner(void);
static void BuildEnemyParty(void);
static s32 GetPartyMaxLevel(void);
static void ValidateOrResetCurTrainerTowerRecord(void);
static u32 GetTrainerTowerRecordTime(u32 *);
static void SetTrainerTowerRecordTime(u32 *, u32);
-extern const u8 gUnknown_83FE982[];
-extern const u8 gUnknown_83FE998[];
-extern const u8 *const gUnknown_83FE9C4[];
+extern const u8 gText_TimeBoard[];
+extern const u8 gText_XMinYZSec[];
+extern const u8 *const gTrainerTowerChallengeTypeTexts[];
static const struct SinglesTrainerInfo sSingleBattleTrainerInfo[] = {
{OBJECT_EVENT_GFX_WOMAN_2, FACILITY_CLASS_AROMA_LADY, FEMALE},
@@ -319,51 +322,52 @@ static const struct TrainerEncounterMusicPairs sTrainerEncounterMusicLUT[105] =
{FACILITY_CLASS_ELITE_FOUR_2, TRAINER_ENCOUNTER_MUSIC_MALE}
};
-static const struct WindowTemplate gUnknown_847A218[] = {
+static const struct WindowTemplate sTimeBoardWindowTemplate[] = {
{0, 3, 1, 27, 18, 15, 0x001},
DUMMY_WIN_TEMPLATE
};
-static const u32 gUnknown_847A228 = 0x70; // unused
-
-static const u8 gUnknown_847A22C[3] = {0, 2, 3};
-
-static void (*const gUnknown_847A230[])(void) = {
- sub_815DD44,
- sub_815DF54,
- sub_815E160,
- sub_815E1C0,
- sub_815E1F0,
- TTSpecial_HasReachedTheRoof,
- sub_815E28C,
- sub_815E394,
- sub_815E408,
- sub_815E4B0,
- TTSpecial_StartTimer,
- sub_815E5C4,
- sub_815E5F0,
- sub_815E658,
- sub_815E720,
- sub_815E88C,
- sub_815E8B4,
- sub_815E8CC,
- sub_815E908,
- sub_815E948,
- sub_815E9C8
+static const u32 sUnused_847A228 = 0x70;
+
+static const u8 sTextColors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
+
+static void (*const sTrainerTowerFunctions[])(void) = {
+ [TRAINER_TOWER_FUNC_INIT_FLOOR] = InitTrainerTowerFloor,
+ [TRAINER_TOWER_FUNC_GET_SPEECH] = BufferTowerOpponentSpeech,
+ [TRAINER_TOWER_FUNC_DO_BATTLE] = DoTrainerTowerBattle,
+ [TRAINER_TOWER_FUNC_GET_CHALLENGE_TYPE] = TrainerTowerGetChallengeType,
+ [TRAINER_TOWER_FUNC_CLEARED_FLOOR] = TrainerTowerAddFloorCleared,
+ [TRAINER_TOWER_FUNC_GET_FLOOR_CLEARED] = GetFloorAlreadyCleared,
+ [TRAINER_TOWER_FUNC_START_CHALLENGE] = StartTrainerTowerChallenge,
+ [TRAINER_TOWER_FUNC_GET_OWNER_STATE] = GetOwnerState,
+ [TRAINER_TOWER_FUNC_GIVE_PRIZE] = GiveChallengePrize,
+ [TRAINER_TOWER_FUNC_CHECK_FINAL_TIME] = CheckFinalTime,
+ [TRAINER_TOWER_FUNC_RESUME_TIMER] = TrainerTowerResumeTimer,
+ [TRAINER_TOWER_FUNC_SET_LOST] = TrainerTowerSetPlayerLost,
+ [TRAINER_TOWER_FUNC_GET_CHALLENGE_STATUS] = GetTrainerTowerChallengeStatus,
+ [TRAINER_TOWER_FUNC_GET_TIME] = GetCurrentTime,
+ [TRAINER_TOWER_FUNC_SHOW_RESULTS] = ShowResultsBoard,
+ [TRAINER_TOWER_FUNC_CLOSE_RESULTS] = CloseResultsBoard,
+ [TRAINER_TOWER_FUNC_CHECK_DOUBLES] = TrainerTowerGetDoublesEligiblity,
+ [TRAINER_TOWER_FUNC_GET_NUM_FLOORS] = TrainerTowerGetNumFloors,
+ [TRAINER_TOWER_FUNC_SHOULD_WARP_TO_COUNTER] = ShouldWarpToCounter,
+ [TRAINER_TOWER_FUNC_ENCOUNTER_MUSIC] = PlayTrainerTowerEncounterMusic,
+ [TRAINER_TOWER_FUNC_GET_BEAT_CHALLENGE] = HasSpokenToOwner
};
-static const u16 sFloorLayouts[8][3] = {
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F, LAYOUT_UNUSED_LAYOUT_834BC2C, LAYOUT_UNUSED_LAYOUT_834D06C},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_2F, LAYOUT_UNUSED_LAYOUT_834BEB4, LAYOUT_UNUSED_LAYOUT_834D2F4},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_3F, LAYOUT_UNUSED_LAYOUT_834C13C, LAYOUT_UNUSED_LAYOUT_834D57C},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_4F, LAYOUT_UNUSED_LAYOUT_834C3C4, LAYOUT_UNUSED_LAYOUT_834D804},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_5F, LAYOUT_UNUSED_LAYOUT_834C64C, LAYOUT_UNUSED_LAYOUT_834DA8C},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_6F, LAYOUT_UNUSED_LAYOUT_834C8D4, LAYOUT_UNUSED_LAYOUT_834DD14},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_7F, LAYOUT_UNUSED_LAYOUT_834CB5C, LAYOUT_UNUSED_LAYOUT_834DF9C},
- {LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_8F, LAYOUT_UNUSED_LAYOUT_834CDE4, LAYOUT_UNUSED_LAYOUT_834E224}
+// - 1 excludes Mixed challenge, which just uses one of the 3 other types
+static const u16 sFloorLayouts[MAX_TRAINER_TOWER_FLOORS][NUM_TOWER_CHALLENGE_TYPES - 1] = {
+ {LAYOUT_TRAINER_TOWER_1F, LAYOUT_TRAINER_TOWER_1F_DOUBLES, LAYOUT_TRAINER_TOWER_1F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_2F, LAYOUT_TRAINER_TOWER_2F_DOUBLES, LAYOUT_TRAINER_TOWER_2F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_3F, LAYOUT_TRAINER_TOWER_3F_DOUBLES, LAYOUT_TRAINER_TOWER_3F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_4F, LAYOUT_TRAINER_TOWER_4F_DOUBLES, LAYOUT_TRAINER_TOWER_4F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_5F, LAYOUT_TRAINER_TOWER_5F_DOUBLES, LAYOUT_TRAINER_TOWER_5F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_6F, LAYOUT_TRAINER_TOWER_6F_DOUBLES, LAYOUT_TRAINER_TOWER_6F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_7F, LAYOUT_TRAINER_TOWER_7F_DOUBLES, LAYOUT_TRAINER_TOWER_7F_KNOCKOUT},
+ {LAYOUT_TRAINER_TOWER_8F, LAYOUT_TRAINER_TOWER_8F_DOUBLES, LAYOUT_TRAINER_TOWER_8F_KNOCKOUT}
};
-static const u16 gUnknown_847A2B4[] = {
+static const u16 sPrizeList[] = {
ITEM_HP_UP,
ITEM_PROTEIN,
ITEM_IRON,
@@ -381,21 +385,21 @@ static const u16 gUnknown_847A2B4[] = {
ITEM_UP_GRADE
};
-static const u16 gUnknown_847A2D2[] = {
- MUS_SHOUNEN,
- MUS_SHOUJO,
- MUS_SHOUJO,
- MUS_ROCKET,
- MUS_SHOUNEN,
- MUS_SHOUNEN,
- MUS_ROCKET,
- MUS_ROCKET,
- MUS_SHOUNEN,
- MUS_SHOUJO,
- MUS_SHOUNEN,
- MUS_SHOUNEN,
- MUS_SHOUNEN,
- MUS_SHOUNEN
+static const u16 sTrainerTowerEncounterMusic[] = {
+ [TRAINER_ENCOUNTER_MUSIC_MALE] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_FEMALE] = MUS_SHOUJO,
+ [TRAINER_ENCOUNTER_MUSIC_GIRL] = MUS_SHOUJO,
+ [TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS] = MUS_ROCKET,
+ [TRAINER_ENCOUNTER_MUSIC_INTENSE] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_COOL] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_AQUA] = MUS_ROCKET,
+ [TRAINER_ENCOUNTER_MUSIC_MAGMA] = MUS_ROCKET,
+ [TRAINER_ENCOUNTER_MUSIC_SWIMMER] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_TWINS] = MUS_SHOUJO,
+ [TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_HIKER] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_INTERVIEWER] = MUS_SHOUNEN,
+ [TRAINER_ENCOUNTER_MUSIC_RICH] = MUS_SHOUNEN
};
static const u8 sSingleBattleChallengeMonIdxs[][2] = {
@@ -431,22 +435,22 @@ static const u8 sKnockoutChallengeMonIdxs[][3] = {
{0x01, 0x04, 0x05}
};
-extern const struct EReaderTrainerHillSetSubstruct gUnknown_84827AC;
-extern const struct TrainerTowerFloor *const gUnknown_84827B4[][8];
+extern const struct EReaderTrainerTowerSetSubstruct gUnknown_84827AC;
+extern const struct TrainerTowerFloor *const gUnknown_84827B4[][MAX_TRAINER_TOWER_FLOORS];
-void sub_815D9E8(void)
+void CallTrainerTowerFunc(void)
{
- sub_815DC8C();
- gUnknown_847A230[gSpecialVar_0x8004]();
- sub_815DD2C();
+ SetUpTrainerTowerDataStruct();
+ sTrainerTowerFunctions[gSpecialVar_0x8004]();
+ FreeTrainerTowerDataStruct();
}
-u8 sub_815DA10(void)
+u8 GetTrainerTowerOpponentClass(void)
{
return gFacilityClassToTrainerClass[sTrainerTowerOpponent->facilityClass];
}
-void sub_815DA28(u8 *dest)
+void GetTrainerTowerOpponentName(u8 *dest)
{
StringCopyN(dest, sTrainerTowerOpponent->name, 11);
}
@@ -458,41 +462,39 @@ u8 GetTrainerTowerTrainerFrontSpriteId(void)
void InitTrainerTowerBattleStruct(void)
{
- u16 r10;
- s32 r9;
+ u16 trainerId;
+ int i;
- sub_815DC8C();
+ SetUpTrainerTowerDataStruct();
sTrainerTowerOpponent = AllocZeroed(sizeof(*sTrainerTowerOpponent));
- r10 = VarGet(VAR_TEMP_1);
- StringCopyN(sTrainerTowerOpponent->name, sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10].name, 11);
+ trainerId = VarGet(VAR_TEMP_1);
+ StringCopyN(sTrainerTowerOpponent->name, CURR_FLOOR.trainers[trainerId].name, 11);
- for (r9 = 0; r9 < 6; r9++)
+ for (i = 0; i < 6; i++)
{
- sTrainerTowerOpponent->speechWin[r9] = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10].speechWin[r9];
- sTrainerTowerOpponent->speechLose[r9] = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10].speechLose[r9];
+ sTrainerTowerOpponent->speechWin[i] = CURR_FLOOR.trainers[trainerId].speechWin[i];
+ sTrainerTowerOpponent->speechLose[i] = CURR_FLOOR.trainers[trainerId].speechLose[i];
- if (sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType == 1)
+ if (CURR_FLOOR.challengeType == CHALLENGE_TYPE_DOUBLE)
{
- sTrainerTowerOpponent->speechWin2[r9] = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10 + 1].speechWin[r9];
- sTrainerTowerOpponent->speechLose2[r9] = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10 + 1].speechLose[r9];
+ sTrainerTowerOpponent->speechWin2[i] = CURR_FLOOR.trainers[trainerId + 1].speechWin[i];
+ sTrainerTowerOpponent->speechLose2[i] = CURR_FLOOR.trainers[trainerId + 1].speechLose[i];
}
}
- sTrainerTowerOpponent->battleType = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType;
- sTrainerTowerOpponent->facilityClass = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10].facilityClass;
- sTrainerTowerOpponent->gender = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r10].gender;
- SetVBlankCounter1Ptr(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
- sub_815DD2C();
+ sTrainerTowerOpponent->battleType = CURR_FLOOR.challengeType;
+ sTrainerTowerOpponent->facilityClass = CURR_FLOOR.trainers[trainerId].facilityClass;
+ sTrainerTowerOpponent->gender = CURR_FLOOR.trainers[trainerId].gender;
+ SetVBlankCounter1Ptr(&TRAINER_TOWER.timer);
+ FreeTrainerTowerDataStruct();
}
void FreeTrainerTowerBattleStruct(void)
{
- Free(sTrainerTowerOpponent);
- sTrainerTowerOpponent = NULL;
+ FREE_AND_SET_NULL(sTrainerTowerOpponent);
}
-void sub_815DBF4(u8 *dest, u8 opponentIdx)
-// TTower_GetBeforeBattleMessage?
+void GetTrainerTowerOpponentWinText(u8 *dest, u8 opponentIdx)
{
VarSet(VAR_TEMP_3, opponentIdx);
TrainerTowerGetOpponentTextColor(sTrainerTowerOpponent->battleType, sTrainerTowerOpponent->facilityClass);
@@ -502,8 +504,7 @@ void sub_815DBF4(u8 *dest, u8 opponentIdx)
TT_ConvertEasyChatMessageToString(sTrainerTowerOpponent->speechWin2, dest);
}
-void sub_815DC40(u8 *dest, u8 opponentIdx)
-// TTower_GetAfterBattleMessage?
+void GetTrainerTowerOpponentLoseText(u8 *dest, u8 opponentIdx)
{
VarSet(VAR_TEMP_3, opponentIdx);
TrainerTowerGetOpponentTextColor(sTrainerTowerOpponent->battleType, sTrainerTowerOpponent->facilityClass);
@@ -513,23 +514,23 @@ void sub_815DC40(u8 *dest, u8 opponentIdx)
TT_ConvertEasyChatMessageToString(sTrainerTowerOpponent->speechLose2, dest);
}
-static void sub_815DC8C(void) // fakematching
+static void SetUpTrainerTowerDataStruct(void) // fakematching
{
- u32 whichTimer = gSaveBlock1Ptr->unkArrayIdx;
+ u32 challengeType = gSaveBlock1Ptr->towerChallengeId;
s32 r4;
const struct TrainerTowerFloor *const * r7;
sTrainerTowerState = AllocZeroed(sizeof(*sTrainerTowerState));
sTrainerTowerState->floorIdx = gMapHeader.mapLayoutId - 42;
- if (sub_815D834() == TRUE)
+ if (ReadTrainerTowerAndValidate() == TRUE)
CEReaderTool_LoadTrainerTower(&sTrainerTowerState->unk_0004);
else
{
struct UnkStruct_203F458 * r0_ = sTrainerTowerState;
- const struct EReaderTrainerHillSetSubstruct * r1 = &gUnknown_84827AC;
- memcpy(&r0_->unk_0004, r1, sizeof(struct EReaderTrainerHillSetSubstruct));
- r7 = gUnknown_84827B4[whichTimer];
- for (r4 = 0; r4 < 8; r4++)
+ const struct EReaderTrainerTowerSetSubstruct * r1 = &gUnknown_84827AC;
+ memcpy(&r0_->unk_0004, r1, sizeof(struct EReaderTrainerTowerSetSubstruct));
+ r7 = gUnknown_84827B4[challengeType];
+ for (r4 = 0; r4 < MAX_TRAINER_TOWER_FLOORS; r4++)
{
#ifndef NONMATCHING
void * r5;
@@ -547,22 +548,21 @@ static void sub_815DC8C(void) // fakematching
}
}
-static void sub_815DD2C(void)
+static void FreeTrainerTowerDataStruct(void)
{
- Free(sTrainerTowerState);
- sTrainerTowerState = NULL;
+ FREE_AND_SET_NULL(sTrainerTowerState);
}
-static void sub_815DD44(void)
+static void InitTrainerTowerFloor(void)
{
- if (gMapHeader.mapLayoutId - LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY > sTrainerTowerState->unk_0004.count)
+ if (gMapHeader.mapLayoutId - LAYOUT_TRAINER_TOWER_LOBBY > sTrainerTowerState->unk_0004.numFloors)
{
- gSpecialVar_Result = 3;
- SetCurrentMapLayout(LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ROOF);
+ gSpecialVar_Result = 3; // Skip past usable challenge types
+ SetCurrentMapLayout(LAYOUT_TRAINER_TOWER_ROOF);
}
else
{
- gSpecialVar_Result = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType;
+ gSpecialVar_Result = CURR_FLOOR.challengeType;
SetCurrentMapLayout(sFloorLayouts[sTrainerTowerState->floorIdx][gSpecialVar_Result]);
SetTrainerTowerNPCGraphics();
}
@@ -570,66 +570,70 @@ static void sub_815DD44(void)
static void SetTrainerTowerNPCGraphics(void)
{
- s32 r3, r4;
- u8 r1, r2, r4_;
- switch (sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType)
+ s32 i, j;
+ u8 trainerGfx1, trainerGfx2, facilityClass;
+ switch (CURR_FLOOR.challengeType)
{
- case 0:
- r2 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].facilityClass;
- for (r3 = 0; r3 < NELEMS(sSingleBattleTrainerInfo); r3++)
+ case CHALLENGE_TYPE_SINGLE:
+ facilityClass = CURR_FLOOR.trainers[0].facilityClass;
+ for (i = 0; i < NELEMS(sSingleBattleTrainerInfo); i++)
{
- if (sSingleBattleTrainerInfo[r3].facilityClass == r2)
+ if (sSingleBattleTrainerInfo[i].facilityClass == facilityClass)
break;
}
- if (r3 != NELEMS(sSingleBattleTrainerInfo))
- r1 = sSingleBattleTrainerInfo[r3].mapObjGfx;
+
+ if (i != NELEMS(sSingleBattleTrainerInfo))
+ trainerGfx1 = sSingleBattleTrainerInfo[i].objGfx;
else
- r1 = 18;
- VarSet(VAR_OBJ_GFX_ID_1, r1);
+ trainerGfx1 = OBJECT_EVENT_GFX_YOUNGSTER;
+
+ VarSet(VAR_OBJ_GFX_ID_1, trainerGfx1);
break;
- case 1:
- r2 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].facilityClass;
- for (r3 = 0; r3 < NELEMS(sDoubleBattleTrainerInfo); r3++)
+ case CHALLENGE_TYPE_DOUBLE:
+ facilityClass = CURR_FLOOR.trainers[0].facilityClass;
+ for (i = 0; i < NELEMS(sDoubleBattleTrainerInfo); i++)
{
- if (sDoubleBattleTrainerInfo[r3].facilityClass == r2)
+ if (sDoubleBattleTrainerInfo[i].facilityClass == facilityClass)
break;
}
- if (r3 != NELEMS(sDoubleBattleTrainerInfo))
+ if (i != NELEMS(sDoubleBattleTrainerInfo))
{
- r1 = sDoubleBattleTrainerInfo[r3].mapObjGfx1;
- r4_ = sDoubleBattleTrainerInfo[r3].mapObjGfx2;
+ trainerGfx1 = sDoubleBattleTrainerInfo[i].objGfx1;
+ trainerGfx2 = sDoubleBattleTrainerInfo[i].objGfx2;
}
else
{
- r1 = OBJECT_EVENT_GFX_YOUNGSTER;
- r4_ = OBJECT_EVENT_GFX_YOUNGSTER;
+ trainerGfx1 = OBJECT_EVENT_GFX_YOUNGSTER;
+ trainerGfx2 = OBJECT_EVENT_GFX_YOUNGSTER;
}
- VarSet(VAR_OBJ_GFX_ID_0, r1);
- VarSet(VAR_OBJ_GFX_ID_3, r4_);
+ VarSet(VAR_OBJ_GFX_ID_0, trainerGfx1);
+ VarSet(VAR_OBJ_GFX_ID_3, trainerGfx2);
break;
- case 2:
- for (r4 = 0; r4 < 3; r4++)
+ case CHALLENGE_TYPE_KNOCKOUT:
+ for (j = 0; j < MAX_TRAINERS_PER_FLOOR; j++)
{
- r2 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].facilityClass;
- for (r3 = 0; r3 < NELEMS(sSingleBattleTrainerInfo); r3++)
+ facilityClass = CURR_FLOOR.trainers[j].facilityClass;
+ for (i = 0; i < NELEMS(sSingleBattleTrainerInfo); i++)
{
- if (sSingleBattleTrainerInfo[r3].facilityClass == r2)
+ if (sSingleBattleTrainerInfo[i].facilityClass == facilityClass)
break;
}
- if (r3 != NELEMS(sSingleBattleTrainerInfo))
- r1 = sSingleBattleTrainerInfo[r3].mapObjGfx;
+
+ if (i != NELEMS(sSingleBattleTrainerInfo))
+ trainerGfx1 = sSingleBattleTrainerInfo[i].objGfx;
else
- r1 = OBJECT_EVENT_GFX_YOUNGSTER;
- switch (r4)
+ trainerGfx1 = OBJECT_EVENT_GFX_YOUNGSTER;
+
+ switch (j)
{
case 0:
- VarSet(VAR_OBJ_GFX_ID_2, r1);
+ VarSet(VAR_OBJ_GFX_ID_2, trainerGfx1);
break;
case 1:
- VarSet(VAR_OBJ_GFX_ID_0, r1);
+ VarSet(VAR_OBJ_GFX_ID_0, trainerGfx1);
break;
case 2:
- VarSet(VAR_OBJ_GFX_ID_1, r1);
+ VarSet(VAR_OBJ_GFX_ID_1, trainerGfx1);
break;
}
}
@@ -652,207 +656,224 @@ static void TT_ConvertEasyChatMessageToString(u16 *ecWords, u8 *dest)
}
}
-static void sub_815DF54(void)
+static void BufferTowerOpponentSpeech(void)
{
- u16 r4 = gSpecialVar_0x8006;
- u8 r1;
- u8 r5 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType;
+ u16 trainerId = gSpecialVar_0x8006;
+ u8 facilityClass;
+ u8 challengeType = CURR_FLOOR.challengeType;
- if (r5 != 1)
- r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].facilityClass;
+ if (challengeType != CHALLENGE_TYPE_DOUBLE)
+ facilityClass = CURR_FLOOR.trainers[trainerId].facilityClass;
else
- r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].facilityClass;
+ facilityClass = CURR_FLOOR.trainers[0].facilityClass;
+
switch (gSpecialVar_0x8005)
{
- case 2:
- TrainerTowerGetOpponentTextColor(r5, r1);
- TT_ConvertEasyChatMessageToString(sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].speechBefore, gStringVar4);
+ case TRAINER_TOWER_TEXT_INTRO:
+ TrainerTowerGetOpponentTextColor(challengeType, facilityClass);
+ TT_ConvertEasyChatMessageToString(CURR_FLOOR.trainers[trainerId].speechBefore, gStringVar4);
break;
- case 3:
- TrainerTowerGetOpponentTextColor(r5, r1);
- TT_ConvertEasyChatMessageToString(sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].speechWin, gStringVar4);
+ case TRAINER_TOWER_TEXT_PLAYER_LOST:
+ TrainerTowerGetOpponentTextColor(challengeType, facilityClass);
+ TT_ConvertEasyChatMessageToString(CURR_FLOOR.trainers[trainerId].speechWin, gStringVar4);
break;
- case 4:
- TrainerTowerGetOpponentTextColor(r5, r1);
- TT_ConvertEasyChatMessageToString(sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].speechLose, gStringVar4);
+ case TRAINER_TOWER_TEXT_PLAYER_WON:
+ TrainerTowerGetOpponentTextColor(challengeType, facilityClass);
+ TT_ConvertEasyChatMessageToString(CURR_FLOOR.trainers[trainerId].speechLose, gStringVar4);
break;
- case 5:
- TT_ConvertEasyChatMessageToString(sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].speechAfter, gStringVar4);
+ case TRAINER_TOWER_TEXT_AFTER:
+ TT_ConvertEasyChatMessageToString(CURR_FLOOR.trainers[trainerId].speechAfter, gStringVar4);
break;
}
}
-static void TrainerTowerGetOpponentTextColor(u8 battleType, u8 facilityClass)
+static void TrainerTowerGetOpponentTextColor(u8 challengeType, u8 facilityClass)
{
- u16 r5 = FALSE;
- s32 r4;
- switch (battleType)
+ u16 gender = MALE;
+ int i;
+ switch (challengeType)
{
- case 0:
- case 2:
- for (r4 = 0; r4 < NELEMS(sSingleBattleTrainerInfo); r4++)
+ case CHALLENGE_TYPE_SINGLE:
+ case CHALLENGE_TYPE_KNOCKOUT:
+ for (i = 0; i < NELEMS(sSingleBattleTrainerInfo); i++)
{
- if (sSingleBattleTrainerInfo[r4].facilityClass == facilityClass)
+ if (sSingleBattleTrainerInfo[i].facilityClass == facilityClass)
break;
}
- if (r4 != NELEMS(sSingleBattleTrainerInfo))
- r5 = sSingleBattleTrainerInfo[r4].gender;
+ if (i != NELEMS(sSingleBattleTrainerInfo))
+ gender = sSingleBattleTrainerInfo[i].gender;
break;
- case 1:
- for (r4 = 0; r4 < NELEMS(sDoubleBattleTrainerInfo); r4++)
+ case CHALLENGE_TYPE_DOUBLE:
+ for (i = 0; i < NELEMS(sDoubleBattleTrainerInfo); i++)
{
- if (sDoubleBattleTrainerInfo[r4].facilityClass == facilityClass)
+ if (sDoubleBattleTrainerInfo[i].facilityClass == facilityClass)
break;
}
- if (r4 != NELEMS(sDoubleBattleTrainerInfo))
+ if (i != NELEMS(sDoubleBattleTrainerInfo))
{
if (VarGet(VAR_TEMP_3))
- r5 = sDoubleBattleTrainerInfo[r4].gender2;
+ gender = sDoubleBattleTrainerInfo[i].gender2;
else
- r5 = sDoubleBattleTrainerInfo[r4].gender1;
+ gender = sDoubleBattleTrainerInfo[i].gender1;
}
break;
}
gSpecialVar_PrevTextColor = gSpecialVar_TextColor;
- gSpecialVar_TextColor = r5;
+ gSpecialVar_TextColor = gender;
}
-static void sub_815E114(void)
+static void CB2_EndTrainerTowerBattle(void)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-static void sub_815E124(u8 taskId)
+static void Task_DoTrainerTowerBattle(u8 taskId)
{
if (BT_IsDone() == TRUE)
{
- gMain.savedCallback = sub_815E114;
+ gMain.savedCallback = CB2_EndTrainerTowerBattle;
CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_InitBattle);
DestroyTask(taskId);
}
}
-static void sub_815E160(void)
+static void DoTrainerTowerBattle(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_TRAINER_TOWER;
- if (sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType == 1)
+
+ if (CURR_FLOOR.challengeType == CHALLENGE_TYPE_DOUBLE)
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
+
gTrainerBattleOpponent_A = 0;
BuildEnemyParty();
- CreateTask(sub_815E124, 1);
+ CreateTask(Task_DoTrainerTowerBattle, 1);
PlayMapChosenOrBattleBGM(0);
BT_StartOnField(BattleSetup_GetBattleTowerBattleTransition());
}
-static void sub_815E1C0(void)
+static void TrainerTowerGetChallengeType(void)
{
if (!gSpecialVar_0x8005)
- gSpecialVar_Result = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType;
+ gSpecialVar_Result = CURR_FLOOR.challengeType;
}
-static void sub_815E1F0(void)
+static void TrainerTowerAddFloorCleared(void)
{
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8++;
+ TRAINER_TOWER.floorsCleared++;
}
-static void TTSpecial_HasReachedTheRoof(void)
+// So the player can safely go back through defeated floors to use the Poke Center (or exit challenge)
+static void GetFloorAlreadyCleared(void)
{
u16 mapLayoutId = gMapHeader.mapLayoutId;
- if (mapLayoutId - LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F == gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 && mapLayoutId - LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY <= sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].floorIdx)
+ if (mapLayoutId - LAYOUT_TRAINER_TOWER_1F == TRAINER_TOWER.floorsCleared
+ && mapLayoutId - LAYOUT_TRAINER_TOWER_LOBBY <= CURR_FLOOR.floorIdx)
gSpecialVar_Result = FALSE;
else
gSpecialVar_Result = TRUE;
}
-static void sub_815E28C(void)
+static void StartTrainerTowerChallenge(void)
{
- gSaveBlock1Ptr->unkArrayIdx = gSpecialVar_0x8005;
- if (gSaveBlock1Ptr->unkArrayIdx >= NELEMS(gSaveBlock1Ptr->unkArray))
- gSaveBlock1Ptr->unkArrayIdx = 0;
+ gSaveBlock1Ptr->towerChallengeId = gSpecialVar_0x8005;
+ if (gSaveBlock1Ptr->towerChallengeId >= NUM_TOWER_CHALLENGE_TYPES)
+ gSaveBlock1Ptr->towerChallengeId = 0;
ValidateOrResetCurTrainerTowerRecord();
- if (!sub_815D834())
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_5 = TRUE;
+ if (!ReadTrainerTowerAndValidate())
+ TRAINER_TOWER.validated = TRUE;
else
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_5 = FALSE;
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8 = 0;
- SetVBlankCounter1Ptr(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 = 0;
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2 = FALSE;
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_1 = FALSE;
+ TRAINER_TOWER.validated = FALSE;
+ TRAINER_TOWER.floorsCleared = 0;
+ SetVBlankCounter1Ptr(&TRAINER_TOWER.timer);
+ TRAINER_TOWER.timer = 0;
+ TRAINER_TOWER.spokeToOwner = FALSE;
+ TRAINER_TOWER.checkedFinalTime = FALSE;
}
-static void sub_815E394(void)
+static void GetOwnerState(void)
{
DisableVBlankCounter1();
gSpecialVar_Result = 0;
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2)
+
+ if (TRAINER_TOWER.spokeToOwner)
gSpecialVar_Result++;
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 && gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_1)
+ if (TRAINER_TOWER.receivedPrize && TRAINER_TOWER.checkedFinalTime)
gSpecialVar_Result++;
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2 = TRUE;
+
+ TRAINER_TOWER.spokeToOwner = TRUE;
}
-static void sub_815E408(void)
+static void GiveChallengePrize(void)
{
- u16 itemId = gUnknown_847A2B4[sTrainerTowerState->unk_0004.floors->prize];
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0)
+ u16 itemId = sPrizeList[sTrainerTowerState->unk_0004.floors->prize];
+
+ if (TRAINER_TOWER.receivedPrize)
+ {
gSpecialVar_Result = 2;
- else if (AddBagItem(itemId, 1) == 1)
+ }
+ else if (AddBagItem(itemId, 1) == TRUE)
{
CopyItemName(itemId, gStringVar2);
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 = TRUE;
+ TRAINER_TOWER.receivedPrize = TRUE;
gSpecialVar_Result = 0;
}
else
+ {
gSpecialVar_Result = 1;
+ }
}
-static void sub_815E4B0(void)
+static void CheckFinalTime(void)
{
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_1)
+ if (TRAINER_TOWER.checkedFinalTime)
+ {
gSpecialVar_Result = 2;
- else if (GetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4) > gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0)
+ }
+ else if (GetTrainerTowerRecordTime(&TRAINER_TOWER.bestTime) > TRAINER_TOWER.timer)
{
- SetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4, gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
+ SetTrainerTowerRecordTime(&TRAINER_TOWER.bestTime, TRAINER_TOWER.timer);
gSpecialVar_Result = 0;
}
else
+ {
gSpecialVar_Result = 1;
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_1 = TRUE;
+ }
+
+ TRAINER_TOWER.checkedFinalTime = TRUE;
}
-static void TTSpecial_StartTimer(void)
+static void TrainerTowerResumeTimer(void)
{
- if (!gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2)
+ if (!TRAINER_TOWER.spokeToOwner)
{
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 >= 215999)
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 = 215999;
+ if (TRAINER_TOWER.timer >= TRAINER_TOWER_MAX_TIME)
+ TRAINER_TOWER.timer = TRAINER_TOWER_MAX_TIME;
else
- SetVBlankCounter1Ptr(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
+ SetVBlankCounter1Ptr(&TRAINER_TOWER.timer);
}
}
-static void sub_815E5C4(void)
+static void TrainerTowerSetPlayerLost(void)
{
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = 1;
+ TRAINER_TOWER.hasLost = TRUE;
}
-static void sub_815E5F0(void)
+static void GetTrainerTowerChallengeStatus(void)
{
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3)
+ if (TRAINER_TOWER.hasLost)
{
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = FALSE;
- gSpecialVar_Result = 0;
+ TRAINER_TOWER.hasLost = FALSE;
+ gSpecialVar_Result = CHALLENGE_STATUS_LOST;
}
- else if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4)
+ else if (TRAINER_TOWER.unkA_4)
{
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4 = FALSE;
- gSpecialVar_Result = 1;
+ TRAINER_TOWER.unkA_4 = FALSE;
+ gSpecialVar_Result = CHALLENGE_STATUS_UNK;
}
else
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = CHALLENGE_STATUS_NORMAL;
}
}
@@ -861,8 +882,8 @@ static void sub_815E5F0(void)
\
frames = (src); \
\
- minutes = frames / 3600; \
- frames %= 3600; \
+ minutes = frames / (60 * 60); \
+ frames %= (60 * 60); \
seconds = frames / 60; \
frames %= 60; \
centiseconds = frames * 168 / 100; \
@@ -872,34 +893,34 @@ static void sub_815E5F0(void)
ConvertIntToDecimalStringN(gStringVar3, centiseconds, STR_CONV_MODE_LEADING_ZEROS, 2); \
})
-static void sub_815E658(void)
+static void GetCurrentTime(void)
{
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 >= 215999)
+ if (TRAINER_TOWER.timer >= TRAINER_TOWER_MAX_TIME)
{
DisableVBlankCounter1();
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 = 215999;
+ TRAINER_TOWER.timer = TRAINER_TOWER_MAX_TIME;
}
- PRINT_TOWER_TIME(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0);
+ PRINT_TOWER_TIME(TRAINER_TOWER.timer);
}
-static void sub_815E720(void)
+static void ShowResultsBoard(void)
{
u8 windowId;
s32 i;
ValidateOrResetCurTrainerTowerRecord();
- windowId = AddWindow(gUnknown_847A218);
+ windowId = AddWindow(sTimeBoardWindowTemplate);
LoadStdWindowFrameGfx();
DrawStdWindowFrame(windowId, FALSE);
- AddTextPrinterParameterized(windowId, 2, gUnknown_83FE982, 0x4A, 0, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, 2, gText_TimeBoard, 0x4A, 0, 0xFF, NULL);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
{
- PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4));
+ PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&TRAINER_TOWER.bestTime));
- StringExpandPlaceholders(gStringVar4, gUnknown_83FE998);
- AddTextPrinterParameterized(windowId, 2, gUnknown_83FE9C4[i - 1], 0x18, 0x24 + 0x14 * i, 0xFF, NULL);
+ StringExpandPlaceholders(gStringVar4, gText_XMinYZSec);
+ AddTextPrinterParameterized(windowId, 2, gTrainerTowerChallengeTypeTexts[i - 1], 0x18, 0x24 + 0x14 * i, 0xFF, NULL);
AddTextPrinterParameterized(windowId, 2, gStringVar4, 0x60, 0x2E + 0x14 * i, 0xFF, NULL);
}
@@ -908,23 +929,24 @@ static void sub_815E720(void)
VarSet(VAR_TEMP_1, windowId);
}
-static void sub_815E88C(void)
+static void CloseResultsBoard(void)
{
u8 windowId = VarGet(VAR_TEMP_1);
ClearStdWindowAndFrameToTransparent(windowId, TRUE);
RemoveWindow(windowId);
}
-static void sub_815E8B4(void)
+static void TrainerTowerGetDoublesEligiblity(void)
{
gSpecialVar_Result = GetMonsStateToDoubles();
}
-static void sub_815E8CC(void)
+
+static void TrainerTowerGetNumFloors(void)
{
- if (sTrainerTowerState->unk_0004.count != sTrainerTowerState->unk_0004.floors[0].floorIdx)
+ if (sTrainerTowerState->unk_0004.numFloors != sTrainerTowerState->unk_0004.floors[0].floorIdx)
{
- ConvertIntToDecimalStringN(gStringVar1, sTrainerTowerState->unk_0004.count, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ConvertIntToDecimalStringN(gStringVar1, sTrainerTowerState->unk_0004.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1);
gSpecialVar_Result = TRUE;
}
else
@@ -933,79 +955,78 @@ static void sub_815E8CC(void)
}
}
-static void sub_815E908(void)
+// Dummied? equivalent to gSpecialVar_Result = FALSE
+// If it were to return TRUE the player would be warped back to the lobby
+static void ShouldWarpToCounter(void)
{
- if (gMapHeader.mapLayoutId == LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY && VarGet(VAR_MAP_SCENE_TRAINER_TOWER) == 0)
- {
+ if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_TOWER_LOBBY && VarGet(VAR_MAP_SCENE_TRAINER_TOWER) == 0)
gSpecialVar_Result = FALSE;
- }
else
- {
gSpecialVar_Result = FALSE;
- }
}
-static void sub_815E948(void)
+static void PlayTrainerTowerEncounterMusic(void)
{
s32 i;
- u16 var_4001 = VarGet(VAR_TEMP_1);
- u8 r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[var_4001].facilityClass;
+ u16 idx = VarGet(VAR_TEMP_1);
+ u8 facilityClass = CURR_FLOOR.trainers[idx].facilityClass;
for (i = 0; i < NELEMS(sTrainerEncounterMusicLUT); i++)
{
- if (sTrainerEncounterMusicLUT[i].unk0 == gFacilityClassToTrainerClass[r1])
+ if (sTrainerEncounterMusicLUT[i].facilityClass == gFacilityClassToTrainerClass[facilityClass])
break;
}
+
if (i != NELEMS(sTrainerEncounterMusicLUT))
{
- var_4001 = sTrainerEncounterMusicLUT[i].unk1;
+ idx = sTrainerEncounterMusicLUT[i].musicId;
}
else
{
- var_4001 = 0;
+ idx = 0;
}
- PlayNewMapMusic(gUnknown_847A2D2[var_4001]);
+ PlayNewMapMusic(sTrainerTowerEncounterMusic[idx]);
}
-static void sub_815E9C8(void)
+static void HasSpokenToOwner(void)
{
- gSpecialVar_Result = gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2;
+ gSpecialVar_Result = TRAINER_TOWER.spokeToOwner;
}
static void BuildEnemyParty(void)
{
u16 trainerIdx = VarGet(VAR_TEMP_1);
s32 level = GetPartyMaxLevel();
- u8 floorIdx = gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8;
+ u8 floorIdx = TRAINER_TOWER.floorsCleared;
s32 i;
u8 monIdx;
ZeroEnemyPartyMons();
- switch (sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType)
+ switch (CURR_FLOOR.challengeType)
{
- case 0:
+ case CHALLENGE_TYPE_SINGLE:
default:
for (i = 0; i < 2; i++)
{
monIdx = sSingleBattleChallengeMonIdxs[floorIdx][i];
- sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[trainerIdx].mons[monIdx].level = level;
- CreateBattleTowerMon(&gEnemyParty[i], &sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[trainerIdx].mons[monIdx]);
+ CURR_FLOOR.trainers[trainerIdx].mons[monIdx].level = level;
+ CreateBattleTowerMon(&gEnemyParty[i], &CURR_FLOOR.trainers[trainerIdx].mons[monIdx]);
}
break;
- case 1:
+ case CHALLENGE_TYPE_DOUBLE:
monIdx = sDoubleBattleChallengeMonIdxs[floorIdx][0];
- sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].mons[monIdx].level = level;
- CreateBattleTowerMon(&gEnemyParty[0], &sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].mons[monIdx]);
+ CURR_FLOOR.trainers[0].mons[monIdx].level = level;
+ CreateBattleTowerMon(&gEnemyParty[0], &CURR_FLOOR.trainers[0].mons[monIdx]);
monIdx = sDoubleBattleChallengeMonIdxs[floorIdx][1];
- sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[1].mons[monIdx].level = level;
- CreateBattleTowerMon(&gEnemyParty[1], &sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[1].mons[monIdx]);
+ CURR_FLOOR.trainers[1].mons[monIdx].level = level;
+ CreateBattleTowerMon(&gEnemyParty[1], &CURR_FLOOR.trainers[1].mons[monIdx]);
break;
- case 2:
+ case CHALLENGE_TYPE_KNOCKOUT:
monIdx = sKnockoutChallengeMonIdxs[floorIdx][trainerIdx];
- sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[trainerIdx].mons[monIdx].level = level;
- CreateBattleTowerMon(&gEnemyParty[0], &sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[trainerIdx].mons[monIdx]);
+ CURR_FLOOR.trainers[trainerIdx].mons[monIdx].level = level;
+ CreateBattleTowerMon(&gEnemyParty[0], &CURR_FLOOR.trainers[trainerIdx].mons[monIdx]);
break;
}
}
@@ -1030,11 +1051,11 @@ static s32 GetPartyMaxLevel(void)
static void ValidateOrResetCurTrainerTowerRecord(void)
{
- if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != sTrainerTowerState->unk_0004.id)
+ if (TRAINER_TOWER.unk9 != sTrainerTowerState->unk_0004.id)
{
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = sTrainerTowerState->unk_0004.id;
- SetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4, 215999);
- gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 = FALSE;
+ TRAINER_TOWER.unk9 = sTrainerTowerState->unk_0004.id;
+ SetTrainerTowerRecordTime(&TRAINER_TOWER.bestTime, TRAINER_TOWER_MAX_TIME);
+ TRAINER_TOWER.receivedPrize = FALSE;
}
}
@@ -1043,22 +1064,22 @@ void PrintTrainerTowerRecords(void)
s32 i;
u8 windowId = 0;
- sub_815DC8C();
+ SetUpTrainerTowerDataStruct();
FillWindowPixelRect(0, 0, 0, 0, 0xd8, 0x90);
ValidateOrResetCurTrainerTowerRecord();
- AddTextPrinterParameterized3(0, 2, 0x4a, 0, gUnknown_847A22C, 0, gUnknown_83FE982);
+ AddTextPrinterParameterized3(0, 2, 0x4a, 0, sTextColors, 0, gText_TimeBoard);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
{
- PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[i].unk4));
- StringExpandPlaceholders(gStringVar4, gUnknown_83FE998);
- AddTextPrinterParameterized3(windowId, 2, 0x18, 0x24 + 0x14 * i, gUnknown_847A22C, 0, gUnknown_83FE9C4[i]);
- AddTextPrinterParameterized3(windowId, 2, 0x60, 0x24 + 0x14 * i, gUnknown_847A22C, 0, gStringVar4);
+ PRINT_TOWER_TIME(GetTrainerTowerRecordTime(&gSaveBlock1Ptr->trainerTower[i].bestTime));
+ StringExpandPlaceholders(gStringVar4, gText_XMinYZSec);
+ AddTextPrinterParameterized3(windowId, 2, 0x18, 0x24 + 0x14 * i, sTextColors, 0, gTrainerTowerChallengeTypeTexts[i]);
+ AddTextPrinterParameterized3(windowId, 2, 0x60, 0x24 + 0x14 * i, sTextColors, 0, gStringVar4);
}
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
- sub_815DD2C();
+ FreeTrainerTowerDataStruct();
}
static u32 GetTrainerTowerRecordTime(u32 *counter)
@@ -1075,8 +1096,8 @@ void ResetTrainerTowerResults(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TOWER_CHALLENGE_TYPES; i++)
{
- SetTrainerTowerRecordTime(&gSaveBlock1Ptr->unkArray[i].unk4, 215999);
+ SetTrainerTowerRecordTime(&gSaveBlock1Ptr->trainerTower[i].bestTime, TRAINER_TOWER_MAX_TIME);
}
}
diff --git a/src/union_room.c b/src/union_room.c
index 4e3428cc6..f3aeeebc5 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -37,6 +37,7 @@
#include "trade_scene.h"
#include "trainer_card.h"
#include "union_room.h"
+#include "union_room_battle.h"
#include "union_room_chat.h"
#include "rfu_union_tool.h"
#include "union_room_message.h"
@@ -45,13 +46,14 @@
#include "constants/cable_club.h"
#include "constants/field_weather.h"
#include "constants/species.h"
+#include "constants/union_room.h"
static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {};
-static EWRAM_DATA u8 gUnknown_203B058 = 0;
-static EWRAM_DATA u8 gUnknown_203B059 = 0;
+static EWRAM_DATA u8 sPlayerCurrActivity = 0;
+static EWRAM_DATA u8 sPlayerActivityGroupSize = 0;
static EWRAM_DATA union UnkUnion_Main sUnionRoomMain = {};
static EWRAM_DATA u32 sUnref_203B060 = 0;
-EWRAM_DATA struct GFtgtGnameSub gUnknown_203B064 = {};
+EWRAM_DATA struct GFtgtGnameSub gPartnerTgtGnameSub = {};
EWRAM_DATA u16 gUnionRoomOfferedSpecies = SPECIES_NONE;
EWRAM_DATA u8 gUnionRoomRequestedMonType = TYPE_NORMAL;
static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {};
@@ -60,103 +62,103 @@ static struct UnkStruct_Leader * sLeader;
static struct UnkStruct_Group * sGroup;
static struct UnkStruct_URoom * sURoom;
-static void sub_8115A68(u8 taskId);
-static void sub_81161E4(struct UnkStruct_Leader * leader);
-static bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2);
-static void sub_81164C8(u8 windowId, s32 itemId, u8 y);
-static u8 sub_8116524(struct UnkStruct_Main0 * a0);
-static u8 sub_81165E8(struct UnkStruct_Main0 * a0);
-static void sub_8116738(u8 taskId);
-static u32 sub_8116D10(struct UnkStruct_Group * group, s32 id);
-static void sub_8116D60(struct UnkStruct_Group * group, s32 id);
-static void sub_8116E1C(u8 taskId);
-static void sub_8116F94(u8 windowId, s32 itemId, u8 y);
-static u8 sub_8116FE4(void);
-static void sub_8117990(void);
-static void sub_81179A4(void);
-static void sub_8117A0C(u8 taskId);
-static void sub_8117F20(u8 taskId);
-static void sub_81182DC(u8 taskId);
-static void sub_81186E0(u8 taskId);
+static void Task_TryBecomeLinkLeader(u8 taskId);
+static void Leader_DestroyResources(struct UnkStruct_Leader * leader);
+static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * leader, u32 state1, u32 state2);
+static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 itemId, u8 y);
+static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * main0);
+static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * main0);
+static void Task_TryJoinLinkGroup(u8 taskId);
+static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * group, s32 id);
+static void AskToJoinRfuGroup(struct UnkStruct_Group * group, s32 id);
+static void Task_ListenToWireless(u8 taskId);
+static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y);
+static u8 GetNewLeaderCandidate(void);
+static void CreateTask_RunScriptAndFadeToActivity(void);
+static void CreateTask_StartActivity(void);
+static void Task_MEvent_Leader(u8 taskId);
+static void Task_CardOrNewsWithFriend(u8 taskId);
+static void Task_CardOrNewsOverWireless(u8 taskId);
+static void Task_RunUnionRoom(u8 taskId);
static u16 ReadAsU16(const u8 *data);
-static void sub_8119904(struct UnkStruct_URoom * uRoom);
-static bool32 sub_8119944(struct UnkStruct_URoom * uRoom);
-static void sub_81199FC(u8 taskId);
-static u8 sub_8119B94(void);
-static u8 sub_8119E84(struct UnkStruct_Main4 * arg0, struct UnkStruct_Main4 * arg1, u32 arg2);
-static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1);
-static u8 sub_811A054(struct UnkStruct_Main4 * arg0, u32 arg1);
-static u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1);
-static bool32 sub_811A0B4(const u8 * str);
-static bool32 sub_811A0E0(void);
+static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uRoom);
+static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uRoom);
+static void Task_InitUnionRoom(u8 taskId);
+static u8 HandlePlayerListUpdate(void);
+static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4, struct UnkStruct_Main4 * arg1, u32 arg2);
+static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup);
+static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup);
+static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup);
+static bool32 UR_PrintFieldMessage(const u8 * str);
+static bool32 UR_RunTextPrinters_CheckPrinter0Active(void);
static bool8 PrintOnTextbox(u8 *textState, const u8 *str);
-static s8 sub_811A14C(u8 *dest, bool32 arg1);
-static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate);
-static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6);
-static void sub_811A3F8(void);
-static void sub_811A41C(void);
-static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
-static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count);
-static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count);
-static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1);
-static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1);
-static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1);
-static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2);
-static void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id);
-static void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id);
-static bool32 sub_811A9B8(void);
-static u32 sub_811A9FC(s32 a0);
-static u32 sub_811AA24(struct UnkStruct_x20 * unkX20);
-static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender);
+static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw);
+static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate);
+static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders);
+static void UR_BlankBg0(void);
+static void JoinGroup_BlankBg0AndEnableScriptContexts(void);
+static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx);
+static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20, u8 count);
+static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1C, u8 count);
+static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * arg0, const struct UnionGnameUnamePair * arg1);
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * arg0, struct UnionGnameUnamePair * arg1);
+static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr);
+static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count);
+static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id);
+static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id);
+static bool32 PlayerIsTalkingToUnionRoomAide(void);
+static u32 GetResponseIdx_InviteToURoomActivity(s32 activity);
+static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * unkX20);
+static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender);
static void nullsub_92(u8 windowId, s32 itemId, u8 y);
-static void sub_811ACA4(u8 windowId, s32 itemId, u8 y);
-static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1);
-static s32 GetUnionRoomPlayerGender(s32 a0, struct UnkStruct_Main0 * a1);
-static s32 sub_811ADD0(u32 type, u32 species);
-static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender);
-static void sub_811AECC(u8 *dst, u8 arg1);
-static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3);
-static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0);
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y);
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n);
+static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0);
+static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species);
+static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender);
+static void GetURoomActivityStartMsg(u8 *dst, u8 activity);
+static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * uroom);
+static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom);
static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void);
static void ResetUnionRoomTrade(struct UnionRoomTrade * trade);
static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade);
static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade);
static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId);
-static void sub_811B258(bool32 a0);
-static void sub_811B298(void);
-static u8 sub_811B2A8(s32 a0);
-static u8 sub_811B2D8(struct UnkStruct_URoom * arg0);
-static void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender);
+static void HandleCancelTrade(bool32 unlockObjs);
+static void UR_EnableScriptContext2AndFreezeObjectEvents(void);
+static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer);
+static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom);
+static void ViewURoomPartnerTrainerCard(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 parent_child);
#define _8456CD8(a, b) ((a) | ((b) << 8))
-static const u8 *const gUnknown_8456C74[] = {
- gUnknown_84571AC,
- gUnknown_8459394,
- gUnknown_84593A4,
- gUnknown_84593B4,
- gUnknown_84593C4,
- gUnknown_84593D4,
- gUnknown_84593E4,
- gUnknown_84593F4,
- gUnknown_84593DC,
- gUnknown_8459400,
- gUnknown_8459410,
- gUnknown_845941C,
- gUnknown_845942C,
- gUnknown_8459434,
- gUnknown_8459440,
- gUnknown_84571AC,
- gUnknown_84571AC,
- gUnknown_84571AC,
- gUnknown_84571AC,
- gUnknown_84571AC,
- gUnknown_84571AC,
- gUnknown_84593E4,
- gUnknown_84593F4
+static const u8 *const sUnionRoomActivityStringPtrs[] = {
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_SingleBattle,
+ gUnionRoomActivity_DoubleBattle,
+ gUnionRoomActivity_MultiBattle,
+ gUnionRoomActivity_PokemonTrades,
+ gUnionRoomActivity_Chat,
+ gUnionRoomActivity_WonderCards,
+ gunionRoomActivity_WonderNews,
+ gUnionRoomActivity_Cards,
+ gUnionRoomActivity_PokemonJump,
+ gUnionRoomActivity_BerryCrush,
+ gUnionRoomActivity_BerryPicking,
+ gUnionRoomActivity_Search,
+ gUnionRoomActivity_SpinTradeJP,
+ gUnionRoomActivity_ItemTradeJP,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_Blank,
+ gUnionRoomActivity_WonderCards,
+ gunionRoomActivity_WonderNews
};
-static const struct WindowTemplate gUnknown_8456CD0 = {
+static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -166,19 +168,19 @@ static const struct WindowTemplate gUnknown_8456CD0 = {
.baseBlock = 0x008
};
-static const u32 gUnknown_8456CD8[] = {
- _8456CD8( 1, 2),
- _8456CD8( 2, 2),
- _8456CD8( 3, 4),
- _8456CD8( 4, 2),
- _8456CD8( 9, 37),
- _8456CD8(10, 37),
- _8456CD8(11, 53),
- _8456CD8(13, 53),
- _8456CD8(14, 53)
+static const u32 sLinkGroupToActivityAndCapacity[] = {
+ [LINK_GROUP_SINGLE_BATTLE] = _8456CD8(ACTIVITY_BATTLE, 2),
+ [LINK_GROUP_DOUBLE_BATTLE] = _8456CD8(ACTIVITY_DBLBATTLE, 2),
+ [LINK_GROUP_MULTI_BATTLE] = _8456CD8(ACTIVITY_MLTBATTLE, 4),
+ [LINK_GROUP_TRADE] = _8456CD8(ACTIVITY_TRADE, 2),
+ [LINK_GROUP_POKEMON_JUMP] = _8456CD8(ACTIVITY_PJUMP, 5 | 0x20),
+ [LINK_GROUP_BERRY_CRUSH] = _8456CD8(ACTIVITY_BCRUSH, 5 | 0x20),
+ [LINK_GROUP_BERRY_PICKING] = _8456CD8(ACTIVITY_BPICK, 5 | 0x30),
+ [LINK_GROUP_WONDER_CARD] = _8456CD8(ACTIVITY_SPINTRADE, 5 | 0x30),
+ [LINK_GROUP_WONDER_NEWS] = _8456CD8(ACTIVITY_ITEMTRADE, 5 | 0x30)
};
-static const struct WindowTemplate gUnknown_8456CFC = {
+static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 3,
@@ -188,7 +190,7 @@ static const struct WindowTemplate gUnknown_8456CFC = {
.baseBlock = 0x044
};
-static const struct WindowTemplate gUnknown_8456D04 = {
+static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
.bg = 0,
.tilemapLeft = 16,
.tilemapTop = 3,
@@ -198,18 +200,18 @@ static const struct WindowTemplate gUnknown_8456D04 = {
.baseBlock = 0x0C6
};
-const struct ListMenuItem gUnknown_8456D0C[] = {
- {gUnknown_84571AC, 0},
- {gUnknown_84571AC, 1},
- {gUnknown_84571AC, 2},
- {gUnknown_84571AC, 3},
- {gUnknown_84571AC, 4}
+const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = {
+ {gUnionRoomActivity_Blank, 0},
+ {gUnionRoomActivity_Blank, 1},
+ {gUnionRoomActivity_Blank, 2},
+ {gUnionRoomActivity_Blank, 3},
+ {gUnionRoomActivity_Blank, 4}
};
-static const struct ListMenuTemplate gUnknown_8456D34 = {
- .items = gUnknown_8456D0C,
+static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
+ .items = sListMenuItems_PossibleGroupMembers,
.moveCursorFunc = NULL,
- .itemPrintFunc = sub_81164C8,
+ .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
.totalItems = 5,
.maxShowed = 5,
.windowId = 0,
@@ -227,7 +229,7 @@ static const struct ListMenuTemplate gUnknown_8456D34 = {
.cursorKind = 1
};
-static const struct WindowTemplate gUnknown_8456D4C = {
+static const struct WindowTemplate sWindowTemplate_MysteryGiftList = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 3,
@@ -237,7 +239,7 @@ static const struct WindowTemplate gUnknown_8456D4C = {
.baseBlock = 0x044
};
-static const struct WindowTemplate gUnknown_8456D54 = {
+static const struct WindowTemplate sWindowTemplate_MysteryGiftPlayerNameAndId = {
.bg = 0,
.tilemapLeft = 20,
.tilemapTop = 3,
@@ -247,29 +249,29 @@ static const struct WindowTemplate gUnknown_8456D54 = {
.baseBlock = 0x0EE
};
-static const struct ListMenuItem gUnknown_8456D5C[] = {
- {gUnknown_84571AC, 0},
- {gUnknown_84571AC, 1},
- {gUnknown_84571AC, 2},
- {gUnknown_84571AC, 3},
- {gUnknown_84571AC, 4},
- {gUnknown_84571AC, 5},
- {gUnknown_84571AC, 6},
- {gUnknown_84571AC, 7},
- {gUnknown_84571AC, 8},
- {gUnknown_84571AC, 9},
- {gUnknown_84571AC, 10},
- {gUnknown_84571AC, 11},
- {gUnknown_84571AC, 12},
- {gUnknown_84571AC, 13},
- {gUnknown_84571AC, 14},
- {gUnknown_84571AC, 15}
+static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = {
+ {gUnionRoomActivity_Blank, 0},
+ {gUnionRoomActivity_Blank, 1},
+ {gUnionRoomActivity_Blank, 2},
+ {gUnionRoomActivity_Blank, 3},
+ {gUnionRoomActivity_Blank, 4},
+ {gUnionRoomActivity_Blank, 5},
+ {gUnionRoomActivity_Blank, 6},
+ {gUnionRoomActivity_Blank, 7},
+ {gUnionRoomActivity_Blank, 8},
+ {gUnionRoomActivity_Blank, 9},
+ {gUnionRoomActivity_Blank, 10},
+ {gUnionRoomActivity_Blank, 11},
+ {gUnionRoomActivity_Blank, 12},
+ {gUnionRoomActivity_Blank, 13},
+ {gUnionRoomActivity_Blank, 14},
+ {gUnionRoomActivity_Blank, 15}
};
-static const struct ListMenuTemplate gUnknown_8456DDC = {
- .items = gUnknown_8456D5C,
+static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
+ .items = sListMenuItems_UnionRoomGroups,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_8116F94,
+ .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
.totalItems = 16,
.maxShowed = 5,
.windowId = 0,
@@ -287,7 +289,7 @@ static const struct ListMenuTemplate gUnknown_8456DDC = {
.cursorKind = 0
};
-static const struct WindowTemplate gUnknown_8456DF4 = {
+static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
.bg = 0,
.tilemapLeft = 20,
.tilemapTop = 6,
@@ -297,15 +299,15 @@ static const struct WindowTemplate gUnknown_8456DF4 = {
.baseBlock = 0x001
};
-static const struct ListMenuItem gUnknown_8456DFC[] = {
- {gUnknown_8459354, _8456CD8( 8, 2)},
- {gUnknown_8459344, _8456CD8(65, 2)},
- {gUnknown_845934C, _8456CD8(69, 2)},
- {gUnknown_8459360, _8456CD8(64, 0)}
+static const struct ListMenuItem sListMenuItems_InviteToActivity[] = {
+ {gUnknown_8459354, _8456CD8( ACTIVITY_CARD, 2)},
+ {gUnknown_8459344, _8456CD8(ACTIVITY_BATTLE | IN_UNION_ROOM, 2)},
+ {gUnknown_845934C, _8456CD8(ACTIVITY_CHAT | IN_UNION_ROOM, 2)},
+ {gUnknown_8459360, _8456CD8(ACTIVITY_NONE | IN_UNION_ROOM, 0)}
};
-static const struct ListMenuTemplate gUnknown_8456E1C = {
- .items = gUnknown_8456DFC,
+static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
+ .items = sListMenuItems_InviteToActivity,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
.totalItems = 4,
@@ -325,7 +327,7 @@ static const struct ListMenuTemplate gUnknown_8456E1C = {
.cursorKind = 0
};
-static const struct WindowTemplate gUnknown_8456E34 = {
+static const struct WindowTemplate sWindowTemplate_TradeBoardRegisterInfoExit = {
.bg = 0,
.tilemapLeft = 18,
.tilemapTop = 8,
@@ -341,7 +343,7 @@ static const struct ListMenuItem gUnknown_8456E3C[] = {
{gUnknown_8459360, 3}
};
-static const struct ListMenuTemplate gUnknown_8456E54 = {
+static const struct ListMenuTemplate sListMenuTemplate_TradeBoardRegisterInfoExit = {
.items = gUnknown_8456E3C,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
@@ -362,7 +364,7 @@ static const struct ListMenuTemplate gUnknown_8456E54 = {
.cursorKind = 0
};
-static const struct WindowTemplate gUnknown_8456E6C = {
+static const struct WindowTemplate sWindowTemplate_TypeNames = {
.bg = 0,
.tilemapLeft = 20,
.tilemapTop = 2,
@@ -372,7 +374,7 @@ static const struct WindowTemplate gUnknown_8456E6C = {
.baseBlock = 0x001
};
-static const struct ListMenuItem gUnknown_8456E74[] = {
+static const struct ListMenuItem sListMenuItems_TypeNames[] = {
{gTypeNames[TYPE_NORMAL], TYPE_NORMAL},
{gTypeNames[TYPE_FIRE], TYPE_FIRE},
{gTypeNames[TYPE_WATER], TYPE_WATER},
@@ -393,8 +395,8 @@ static const struct ListMenuItem gUnknown_8456E74[] = {
{gUnknown_8459360, NUMBER_OF_MON_TYPES}
};
-static const struct ListMenuTemplate gUnknown_8456F04 = {
- .items = gUnknown_8456E74,
+static const struct ListMenuTemplate sListMenuTemplate_TypeNames = {
+ .items = sListMenuItems_TypeNames,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL,
.totalItems = NUMBER_OF_MON_TYPES,
@@ -414,7 +416,7 @@ static const struct ListMenuTemplate gUnknown_8456F04 = {
.cursorKind = 0
};
-static const struct WindowTemplate gUnknown_8456F1C = {
+static const struct WindowTemplate sTradeBoardWindowTemplate = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -434,23 +436,23 @@ static const struct WindowTemplate gUnknown_8456F24 = {
.baseBlock = 0x039
};
-static const struct ListMenuItem gUnknown_8456F2C[] = {
- {gUnknown_84571AC, -3},
- {gUnknown_84571AC, 0},
- {gUnknown_84571AC, 1},
- {gUnknown_84571AC, 2},
- {gUnknown_84571AC, 3},
- {gUnknown_84571AC, 4},
- {gUnknown_84571AC, 5},
- {gUnknown_84571AC, 6},
- {gUnknown_84571AC, 7},
+static const struct ListMenuItem sTradeBoardListMenuItems[] = {
+ {gUnionRoomActivity_Blank, -3},
+ {gUnionRoomActivity_Blank, 0},
+ {gUnionRoomActivity_Blank, 1},
+ {gUnionRoomActivity_Blank, 2},
+ {gUnionRoomActivity_Blank, 3},
+ {gUnionRoomActivity_Blank, 4},
+ {gUnionRoomActivity_Blank, 5},
+ {gUnionRoomActivity_Blank, 6},
+ {gUnionRoomActivity_Blank, 7},
{gUnknown_8459368, 8}
};
-static const struct ListMenuTemplate gUnknown_8456F7C = {
- .items = gUnknown_8456F2C,
+static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
+ .items = sTradeBoardListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_811ACA4,
+ .itemPrintFunc = TradeBoardListMenuItemPrintFunc,
.totalItems = 10,
.maxShowed = 5,
.windowId = 0,
@@ -479,22 +481,22 @@ static const struct WindowTemplate gUnknown_8456F94 = {
};
static const struct ListMenuItem gUnknown_8456F9C[] = {
- {gUnknown_84571AC, 0},
- {gUnknown_84571AC, 1},
- {gUnknown_84571AC, 2},
- {gUnknown_84571AC, 3},
- {gUnknown_84571AC, 4},
- {gUnknown_84571AC, 5},
- {gUnknown_84571AC, 6},
- {gUnknown_84571AC, 7},
- {gUnknown_84571AC, 8},
- {gUnknown_84571AC, 9},
- {gUnknown_84571AC, 10},
- {gUnknown_84571AC, 11},
- {gUnknown_84571AC, 12},
- {gUnknown_84571AC, 13},
- {gUnknown_84571AC, 14},
- {gUnknown_84571AC, 15}
+ {gUnionRoomActivity_Blank, 0},
+ {gUnionRoomActivity_Blank, 1},
+ {gUnionRoomActivity_Blank, 2},
+ {gUnionRoomActivity_Blank, 3},
+ {gUnionRoomActivity_Blank, 4},
+ {gUnionRoomActivity_Blank, 5},
+ {gUnionRoomActivity_Blank, 6},
+ {gUnionRoomActivity_Blank, 7},
+ {gUnionRoomActivity_Blank, 8},
+ {gUnionRoomActivity_Blank, 9},
+ {gUnionRoomActivity_Blank, 10},
+ {gUnionRoomActivity_Blank, 11},
+ {gUnionRoomActivity_Blank, 12},
+ {gUnionRoomActivity_Blank, 13},
+ {gUnionRoomActivity_Blank, 14},
+ {gUnionRoomActivity_Blank, 15}
};
static const struct ListMenuTemplate gUnknown_845701C = {
@@ -518,54 +520,138 @@ static const struct ListMenuTemplate gUnknown_845701C = {
.cursorKind = 0
};
-static const struct UnkStruct_Shared gUnknown_8457034 = {};
+static const struct UnionGnameUnamePair sUnionGnameUnamePair_Dummy = {};
// starts at gUnknown_082F0474 in pokeemerald, union link groups
-ALIGNED(4) static const u8 gUnknown_845704C[] = {0x01, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457050[] = {0x02, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457054[] = {0x03, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457058[] = {0x04, 0xFF};
-ALIGNED(4) static const u8 gUnknown_845705C[] = {0x09, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457060[] = {0x0A, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457064[] = {0x0B, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457068[] = {0x15, 0xFF};
-ALIGNED(4) static const u8 gUnknown_845706C[] = {0x16, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457070[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xFF};
-ALIGNED(4) static const u8 gUnknown_845707C[] = {0x0C, 0xFF};
-ALIGNED(4) static const u8 gUnknown_8457080[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0x0D, 0xFF};
-ALIGNED(4) static const u8 gUnknown_845708C[] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0xFF};
-
-static const u8 *const gUnknown_8457094[] = {
- gUnknown_845704C,
- gUnknown_8457050,
- gUnknown_8457054,
- gUnknown_8457058,
- gUnknown_845705C,
- gUnknown_8457060,
- gUnknown_8457064,
- gUnknown_8457068,
- gUnknown_845706C,
- gUnknown_8457070,
- gUnknown_845707C,
- gUnknown_8457080,
- gUnknown_845708C
+ALIGNED(4) static const u8 gUnknown_845704C[] = {
+ ACTIVITY_BATTLE,
+ 0xFF
};
-static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00};
+ALIGNED(4) static const u8 gUnknown_8457050[] = {
+ ACTIVITY_DBLBATTLE,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457054[] = {
+ ACTIVITY_MLTBATTLE,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457058[] = {
+ ACTIVITY_TRADE,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_845705C[] = {
+ ACTIVITY_PJUMP,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457060[] = {
+ ACTIVITY_BCRUSH,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457064[] = {
+ ACTIVITY_BPICK,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457068[] = {
+ ACTIVITY_WCARD2,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_845706C[] = {
+ ACTIVITY_WNEWS2,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457070[] = {
+ ACTIVITY_NONE | IN_UNION_ROOM,
+ ACTIVITY_BATTLE | IN_UNION_ROOM,
+ ACTIVITY_TRADE | IN_UNION_ROOM,
+ ACTIVITY_CHAT | IN_UNION_ROOM,
+ ACTIVITY_CARD | IN_UNION_ROOM,
+ ACTIVITY_ACCEPT | IN_UNION_ROOM,
+ ACTIVITY_DECLINE | IN_UNION_ROOM,
+ ACTIVITY_NPCTALK | IN_UNION_ROOM,
+ ACTIVITY_PLYRTALK | IN_UNION_ROOM,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_845707C[] = {
+ ACTIVITY_SEARCH,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_8457080[] = {
+ ACTIVITY_BATTLE,
+ ACTIVITY_DBLBATTLE,
+ ACTIVITY_MLTBATTLE,
+ ACTIVITY_TRADE,
+ ACTIVITY_PJUMP,
+ ACTIVITY_BCRUSH,
+ ACTIVITY_BPICK,
+ ACTIVITY_WCARD2,
+ ACTIVITY_WNEWS2,
+ ACTIVITY_SPINTRADE,
+ 0xFF
+};
+
+ALIGNED(4) static const u8 gUnknown_845708C[] = {
+ ACTIVITY_BATTLE,
+ ACTIVITY_DBLBATTLE,
+ ACTIVITY_MLTBATTLE,
+ ACTIVITY_TRADE,
+ ACTIVITY_BCRUSH,
+ 0xFF
+};
+
+static const u8 *const sAcceptedActivityIds[] = {
+ [LINK_GROUP_SINGLE_BATTLE] = gUnknown_845704C,
+ [LINK_GROUP_DOUBLE_BATTLE] = gUnknown_8457050,
+ [LINK_GROUP_MULTI_BATTLE] = gUnknown_8457054,
+ [LINK_GROUP_TRADE] = gUnknown_8457058,
+ [LINK_GROUP_POKEMON_JUMP] = gUnknown_845705C,
+ [LINK_GROUP_BERRY_CRUSH] = gUnknown_8457060,
+ [LINK_GROUP_BERRY_PICKING] = gUnknown_8457064,
+ [LINK_GROUP_WONDER_CARD] = gUnknown_8457068,
+ [LINK_GROUP_WONDER_NEWS] = gUnknown_845706C,
+ [9] = gUnknown_8457070,
+ [10] = gUnknown_845707C,
+ [11] = gUnknown_8457080,
+ [12] = gUnknown_845708C
+};
+
+static const u8 sLinkGroupToURoomActivity[] = {
+ [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE,
+ [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_DBLBATTLE,
+ [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_MLTBATTLE,
+ [LINK_GROUP_TRADE] = ACTIVITY_TRADE,
+ [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_PJUMP,
+ [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BCRUSH,
+ [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BPICK,
+ [LINK_GROUP_WONDER_CARD] = ACTIVITY_WCARD2,
+ [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WNEWS2
+};
+
+static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}");
#undef _8456CD8
// These are functions in Emerald but inlined in FireRed
-#define IntlConvPartnerUname7(dest, arg1) ({ \
- StringCopy7(dest, (arg1).unk.playerName); \
- ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \
+#define IntlConvPartnerUname7(dest, arg1) ({ \
+ StringCopy7(dest, (arg1).gname_uname.uname); \
+ ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \
})
-#define IntlConvPartnerUname(dest, arg1) ({ \
- StringCopy(dest, (arg1).unk.playerName); \
- ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \
+#define IntlConvPartnerUname(dest, arg1) ({ \
+ StringCopy(dest, (arg1).gname_uname.uname); \
+ ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \
})
#define CopyTrainerCardData(dest, src, _version) ({ \
@@ -578,47 +664,56 @@ static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B,
_maxWidth - strWidth; \
})
-static void sub_811586C(u8 windowId, u8 arg1, u8 stringId)
+// capacityCode is a 2-nybble code
+// Bits 0-3: Capacity
+// Bits 4-7: Min required (if 0, must have exactly Capacity players
+static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 count)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
- switch (arg1 << 8)
+ switch (capacityCode << 8)
{
case 0x200:
- sub_811A444(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[0][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE);
break;
case 0x400:
- sub_811A444(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[1][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE);
break;
case 0x2500:
- sub_811A444(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[2][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE);
break;
case 0x3500:
- sub_811A444(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[3][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE);
break;
}
CopyWindowToVram(windowId, 2);
}
-static void sub_8115924(u8 windowId)
+static void PrintPlayerNameAndIdOnWindow(u8 windowId)
{
u8 text[12];
u8 text2[12];
- sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0);
+ UR_AddTextPrinterParameterized(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DKE_WHT_LTE);
StringCopy(text2, gUnknown_84571B4);
ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
StringAppend(text2, text);
- sub_811A444(windowId, 0, text2, 0, 0x10, 0);
+ UR_AddTextPrinterParameterized(windowId, 0, text2, 0, 0x10, UR_COLOR_DKE_WHT_LTE);
}
-static void sub_811599C(u8 *dst, u8 caseId)
+static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1 ... 4:
- case 9 ... 11:
- case 21 ... 22:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
+ case ACTIVITY_WCARD2:
+ case ACTIVITY_WNEWS2:
// UB: argument *dst isn't used, instead it always prints to gStringVar4
StringExpandPlaceholders(gStringVar4, gUnknown_8457234);
break;
@@ -630,7 +725,7 @@ void TryBecomeLinkLeader(void)
u8 taskId;
struct UnkStruct_Leader * dataPtr;
- taskId = CreateTask(sub_8115A68, 0);
+ taskId = CreateTask(Task_TryBecomeLinkLeader, 0);
sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data);
sLeader = dataPtr;
@@ -639,7 +734,7 @@ void TryBecomeLinkLeader(void)
gSpecialVar_Result = 0;
}
-static void sub_8115A68(u8 taskId)
+static void Task_TryBecomeLinkLeader(u8 taskId)
{
u32 id, val;
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
@@ -647,63 +742,63 @@ static void sub_8115A68(u8 taskId)
switch (data->state)
{
case 0:
- gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004];
- gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8;
- SetHostRFUtgtGname(gUnknown_203B058, 0, 0);
- sub_800B1F4();
+ sPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004];
+ sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8;
+ SetHostRFUtgtGname(sPlayerCurrActivity, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_80FBB8C(gUnknown_203B059 & 0xF);
+ InitializeRfuLinkManager_LinkLeader(sPlayerActivityGroupSize & 0xF);
data->state = 3;
break;
case 3:
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 5);
- LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName);
+ data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20));
+ data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20));
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE);
+ LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname);
data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
data->field_0->arr[0].field_1A_1 = 0;
data->field_0->arr[0].field_1B = 0;
- data->field_17 = sub_811A054(data->field_4, 0xFF);
- data->field_10 = AddWindow(&gUnknown_8456CD0);
- data->listWindowId = AddWindow(&gUnknown_8456CFC);
- data->field_11 = AddWindow(&gUnknown_8456D04);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
+ data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel);
+ data->listWindowId = AddWindow(&sWindowTemplate_List_PossibleGroupMembers);
+ data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode);
- FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2));
- sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4);
- PutWindowTilemap(data->field_10);
- CopyWindowToVram(data->field_10, 2);
+ FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
+ UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gUnknown_845747C, 8, 2, UR_COLOR_WHT_DKE_LTE);
+ PutWindowTilemap(data->bButtonCancelWindowId);
+ CopyWindowToVram(data->bButtonCancelWindowId, 2);
DrawStdWindowFrame(data->listWindowId, FALSE);
- gMultiuseListMenuTemplate = gUnknown_8456D34;
+ gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- DrawStdWindowFrame(data->field_11, FALSE);
- PutWindowTilemap(data->field_11);
- CopyWindowToVram(data->field_11, 2);
+ DrawStdWindowFrame(data->nPlayerModeWindowId, FALSE);
+ PutWindowTilemap(data->nPlayerModeWindowId);
+ CopyWindowToVram(data->nPlayerModeWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
+ data->playerCount = 1;
data->state = 4;
break;
case 4:
- StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]);
- if ((gUnknown_203B059 >> 4) != 0)
+ StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]);
+ if ((sPlayerActivityGroupSize >> 4) != 0)
{
- if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0)
+ if (data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 && (sPlayerActivityGroupSize & 0xF) != 0)
StringExpandPlaceholders(gStringVar4, gUnknown_8457264);
else
StringExpandPlaceholders(gStringVar4, gUnknown_8457234);
}
else
{
- sub_811599C(gStringVar4, gUnknown_203B058);
+ StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity);
}
- sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount);
data->state = 5;
break;
case 5:
@@ -711,24 +806,24 @@ static void sub_8115A68(u8 taskId)
data->state = 6;
break;
case 6:
- sub_8116444(data, 7, 10);
+ Leader_SetStateIfMemberListChanged(data, 7, 10);
if (JOY_NEW(B_BUTTON))
{
- if (data->field_13 == 1)
+ if (data->playerCount == 1)
data->state = 23;
- else if ((gUnknown_203B059 & 0xF0) != 0)
+ else if ((sPlayerActivityGroupSize & 0xF0) != 0)
data->state = 30;
else
data->state = 19;
}
- if ((gUnknown_203B059 >> 4) != 0
- && data->field_13 > (gUnknown_203B059 >> 4) - 1
- && (gUnknown_203B059 & 0xF) != 0
+ if ((sPlayerActivityGroupSize >> 4) != 0
+ && data->playerCount > (sPlayerActivityGroupSize >> 4) - 1
+ && (sPlayerActivityGroupSize & 0xF) != 0
&& sub_80FC1CC()
&& JOY_NEW(START_BUTTON))
{
data->state = 15;
- sub_80F8F5C();
+ LinkRfu_StopManagerAndFinalizeSlots();
}
if (data->state == 6 && sub_80FA5D4())
{
@@ -739,20 +834,21 @@ static void sub_8115A68(u8 taskId)
if (!sub_80FA5D4())
{
data->state = 6;
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
}
break;
case 10:
- id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0;
+ id = ((sPlayerCurrActivity & 0xF) == 2) ? 1 : 0;
if (PrintOnTextbox(&data->textState, gUnknown_845767C[id]))
{
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 4;
}
break;
case 29:
- id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1;
+ // Other player cancelled.
+ id = ((sPlayerActivityGroupSize & 0xF) == 2) ? 0 : 1;
if (PrintOnTextbox(&data->textState, gUnknown_845767C[id]))
{
data->state = 21;
@@ -765,19 +861,19 @@ static void sub_8115A68(u8 taskId)
}
break;
case 11:
- switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName)))
+ switch (UnionRoomHandleYesNo(&data->textState, TrainerIdAndNameStillInPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname)))
{
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
data->field_19 = 5;
- sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
data->state = 12;
break;
case 1:
case -1:
data->field_19 = 6;
- sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
data->state = 12;
break;
case -3:
@@ -786,29 +882,31 @@ static void sub_8115A68(u8 taskId)
}
break;
case 12:
- val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
if (val == 1)
{
+ // Xfer complete
if (data->field_19 == 5)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ // Sent "OK"
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- if (data->field_13 == (gUnknown_203B059 & 0xF))
+ data->playerCount++;
+ if (data->playerCount == (sPlayerActivityGroupSize & 0xF))
{
- if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4)
+ if ((sPlayerActivityGroupSize & 0xF0) != 0 || data->playerCount == 4)
{
data->state = 15;
}
else
{
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]);
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, gUnknown_8457554);
data->state = 13;
}
- sub_80F8F5C();
- sub_811586C(data->field_11, gUnknown_203B059, data->field_13);
+ LinkRfu_StopManagerAndFinalizeSlots();
+ PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount);
}
else
{
@@ -817,9 +915,10 @@ static void sub_8115A68(u8 taskId)
}
else
{
- sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
- sub_81165E8(data->field_0);
+ // Sent "no"
+ RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 4;
}
@@ -828,7 +927,8 @@ static void sub_8115A68(u8 taskId)
}
else if (val == 2)
{
- sub_80FB9E4(0, 0);
+ // Disconnect
+ RfuSetErrorStatus(0, 0);
data->state = 4;
}
break;
@@ -837,22 +937,25 @@ static void sub_8115A68(u8 taskId)
data->state = 14;
break;
case 14:
- if (++data->field_E > 120)
+ if (++data->delayTimerAfterOk > 120)
data->state = 17;
break;
case 15:
+ // Are these members OK?
if (PrintOnTextbox(&data->textState, gUnknown_8457514))
data->state = 16;
break;
case 16:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
+ // Yes
data->state = 17;
break;
case 1:
case -1:
- if ((gUnknown_203B059 & 0xF0) != 0)
+ // No
+ if ((sPlayerActivityGroupSize & 0xF0) != 0)
data->state = 30;
else
data->state = 19;
@@ -864,16 +967,16 @@ static void sub_8115A68(u8 taskId)
data->state = 20;
break;
case 20:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
data->state = 23;
break;
case 1:
case -1:
- if ((gUnknown_203B059 & 0xF0) != 0)
+ if ((sPlayerActivityGroupSize & 0xF0) != 0)
data->state = 15;
- else if (data->field_13 == (gUnknown_203B059 & 0xF))
+ else if (data->playerCount == (sPlayerActivityGroupSize & 0xF))
data->state = 15;
else
data->state = 4;
@@ -881,13 +984,15 @@ static void sub_8115A68(u8 taskId)
}
break;
case 17:
- if (!sub_8116444(data, 7, 23))
+ // Go to start
+ // Final membership check
+ if (!Leader_SetStateIfMemberListChanged(data, 7, 23))
data->state = 18;
break;
case 18:
- if (sub_80F8F40())
+ if (LmanAcceptSlotFlagIsNotZero())
{
- if (sub_80F8F7C(FALSE))
+ if (WaitRfuState(FALSE))
{
data->state = 26;
}
@@ -899,14 +1004,16 @@ static void sub_8115A68(u8 taskId)
}
break;
case 30:
+ // Mode with members will be canceled.
if (PrintOnTextbox(&data->textState, gUnknown_8457610))
data->state = 23;
break;
case 21:
case 23:
+ // An error occurred. Please start over from the beginning.
DestroyWirelessStatusIndicatorSprite();
- sub_80F8DC0();
- sub_81161E4(data);
+ LinkRfu_Shutdown();
+ Leader_DestroyResources(data);
data->state++;
break;
case 24:
@@ -920,7 +1027,7 @@ static void sub_8115A68(u8 taskId)
gSpecialVar_Result = 8;
break;
case 26:
- if (sub_80FBA00())
+ if (RfuIsErrorStatus1or2())
{
data->state = 29;
}
@@ -928,9 +1035,9 @@ static void sub_8115A68(u8 taskId)
{
if (gReceivedRemoteLinkPlayers != 0)
{
- sub_80FAFE0(1);
- sub_8117990();
- sub_81161E4(data);
+ UpdateGameData_GroupLockedIn(TRUE);
+ CreateTask_RunScriptAndFadeToActivity();
+ Leader_DestroyResources(data);
DestroyTask(taskId);
}
}
@@ -938,196 +1045,196 @@ static void sub_8115A68(u8 taskId)
}
}
-static void sub_81161E4(struct UnkStruct_Leader * data)
+static void Leader_DestroyResources(struct UnkStruct_Leader * data)
{
- ClearWindowTilemap(data->field_11);
- ClearStdWindowAndFrame(data->field_11, FALSE);
+ ClearWindowTilemap(data->nPlayerModeWindowId);
+ ClearStdWindowAndFrame(data->nPlayerModeWindowId, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
- ClearWindowTilemap(data->field_10);
+ ClearWindowTilemap(data->bButtonCancelWindowId);
ClearStdWindowAndFrame(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_11);
+ RemoveWindow(data->nPlayerModeWindowId);
RemoveWindow(data->listWindowId);
- RemoveWindow(data->field_10);
- DestroyTask(data->field_17);
+ RemoveWindow(data->bButtonCancelWindowId);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
}
-static void sub_8116244(u8 *dst, u8 caseId)
+static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 activity)
{
- switch (caseId)
+ switch (activity)
{
- case 1:
- case 2:
- case 4:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_TRADE:
StringExpandPlaceholders(dst, gUnknown_84574A0);
break;
- case 21:
- case 22:
+ case ACTIVITY_WCARD2:
+ case ACTIVITY_WNEWS2:
StringExpandPlaceholders(dst, gUnknown_84574C4);
break;
- case 3:
- case 9:
- case 10:
- case 11:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
StringExpandPlaceholders(dst, gUnknown_84574EC);
break;
}
}
-static void sub_81162E0(u8 *dst, u8 caseId)
+static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 activity)
{
- switch (caseId)
+ switch (activity)
{
- case 65:
- case 68:
+ case ACTIVITY_BATTLE | IN_UNION_ROOM:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8457E28);
break;
- case 69:
- case 72:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8457E44);
break;
}
}
-static void sub_811631C(u8 *dst, u8 caseId)
+static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 activity)
{
- switch (caseId)
+ switch (activity)
{
- case 1:
- case 2:
- case 4:
- case 21:
- case 22:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_WCARD2:
+ case ACTIVITY_WNEWS2:
StringExpandPlaceholders(dst, gUnknown_8459238);
break;
- case 3:
- case 9:
- case 10:
- case 11:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
StringExpandPlaceholders(dst, gUnknown_8459250);
break;
}
}
-static void sub_81163B0(u8 *dst, u8 caseId)
+static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId)
{
switch (caseId)
{
- case 1:
- case 2:
- case 4:
- case 21:
- case 22:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_WCARD2:
+ case ACTIVITY_WNEWS2:
StringExpandPlaceholders(dst, gUnknown_84576AC);
break;
- case 3:
- case 9:
- case 10:
- case 11:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
StringExpandPlaceholders(dst, gUnknown_84576C4);
break;
}
}
-static bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2)
+static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * data, u32 state1, u32 state2)
{
- switch (sub_8116524(data->field_0))
+ switch (LeaderUpdateGroupMembership(data->field_0))
{
- case 1:
+ case UNION_ROOM_SPAWN_IN:
PlaySE(SE_PC_LOGIN);
RedrawListMenu(data->listTaskId);
- IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->field_13]);
- sub_8116244(gStringVar4, gUnknown_203B058);
- data->state = arg1;
+ IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->playerCount]);
+ Leader_GetAcceptNewMemberPrompt(gStringVar4, sPlayerCurrActivity);
+ data->state = state1;
break;
- case 2:
- sub_80FB9E4(0, 0);
+ case UNION_ROOM_SPAWN_OUT:
+ RfuSetErrorStatus(0, 0);
RedrawListMenu(data->listTaskId);
- data->state = arg2;
+ data->state = state2;
return TRUE;
}
return FALSE;
}
-static void sub_81164C8(u8 windowId, s32 itemId, u8 y)
+static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 itemId, u8 y)
{
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
u8 var = 0;
- switch (data->field_0->arr[itemId].field_1A_0)
+ switch (data->field_0->arr[itemId].groupScheduledAnim)
{
- case 1:
+ case UNION_ROOM_SPAWN_IN:
if (data->field_0->arr[itemId].field_1B != 0)
- var = 2;
+ var = UR_COLOR_GRN_WHT_LTG;
break;
- case 2:
- var = 1;
+ case UNION_ROOM_SPAWN_OUT:
+ var = UR_COLOR_RED_WHT_LTR;
break;
}
- sub_811A910(windowId, 0, y, &data->field_0->arr[itemId], var, itemId);
+ PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[itemId], var, itemId);
}
-static u8 sub_8116524(struct UnkStruct_Main0 * arg0)
+static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * arg0)
{
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
- u8 ret = 0;
+ u8 ret = UNION_ROOM_SPAWN_NONE;
u8 i;
s32 id;
- for (i = 1; i < 5; i++)
+ for (i = 1; i < UROOM_MAX_PARTY_SIZE; i++)
{
- u16 var = data->field_0->arr[i].field_1A_0;
- if (var == 1)
+ u16 var = data->field_0->arr[i].groupScheduledAnim;
+ if (var == UNION_ROOM_SPAWN_IN)
{
- id = sub_811A748(&data->field_0->arr[i], data->field_4->arr);
+ id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr);
if (id != 0xFF)
{
- data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
- data->field_0->arr[i].field_18 = var;
+ data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname;
+ data->field_0->arr[i].field_18 = 1;
}
else
{
- data->field_0->arr[i].field_1A_0 = 2;
- ret = 2;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
+ ret = UNION_ROOM_SPAWN_OUT;
}
}
}
- for (id = 0; id < 4; id++)
- sub_811A798(data->field_0->arr, &data->field_4->arr[id], 5);
+ for (id = 0; id < RFU_CHILD_MAX; id++)
+ Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], UROOM_MAX_PARTY_SIZE);
- if (ret != 2)
+ if (ret != UNION_ROOM_SPAWN_OUT)
{
- for (id = 0; id < 5; id++)
+ for (id = 0; id < UROOM_MAX_PARTY_SIZE; id++)
{
if (data->field_0->arr[id].field_1B != 0)
- ret = 1;
+ ret = UNION_ROOM_SPAWN_IN;
}
}
return ret;
}
-static u8 sub_81165E8(struct UnkStruct_Main0 * arg0)
+static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * arg0)
{
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
u8 copiedCount;
s32 i;
u8 ret;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++)
data->field_8->arr[i] = data->field_0->arr[i];
copiedCount = 0;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++)
{
- if (data->field_8->arr[i].field_1A_0 == 1)
+ if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
data->field_0->arr[copiedCount] = data->field_8->arr[i];
copiedCount++;
@@ -1135,18 +1242,18 @@ static u8 sub_81165E8(struct UnkStruct_Main0 * arg0)
}
ret = copiedCount;
- for (; copiedCount < 5; copiedCount++)
+ for (; copiedCount < UROOM_MAX_PARTY_SIZE; copiedCount++)
{
- data->field_0->arr[copiedCount].unk = gUnknown_8457034;
+ data->field_0->arr[copiedCount].gname_uname = sUnionGnameUnamePair_Dummy;
data->field_0->arr[copiedCount].field_18 = 0;
- data->field_0->arr[copiedCount].field_1A_0 = 0;
- data->field_0->arr[copiedCount].field_1A_1 = 0;
+ data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ data->field_0->arr[copiedCount].field_1A_1 = FALSE;
data->field_0->arr[copiedCount].field_1B = 0;
}
- for (i = 0; i < 5; i++)
+ for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 1)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
continue;
if (data->field_0->arr[i].field_1B != 0x40)
continue;
@@ -1163,7 +1270,7 @@ void TryJoinLinkGroup(void)
u8 taskId;
struct UnkStruct_Group * dataPtr;
- taskId = CreateTask(sub_8116738, 0);
+ taskId = CreateTask(Task_TryJoinLinkGroup, 0);
sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data);
sGroup = dataPtr;
@@ -1172,7 +1279,7 @@ void TryJoinLinkGroup(void)
gSpecialVar_Result = 0;
}
-static void sub_8116738(u8 taskId)
+static void Task_TryJoinLinkGroup(u8 taskId)
{
s32 id;
struct UnkStruct_Group * data = sUnionRoomMain.group;
@@ -1180,11 +1287,11 @@ static void sub_8116738(u8 taskId)
switch (data->state)
{
case 0:
- SetHostRFUtgtGname(gUnknown_84570C8[gSpecialVar_0x8004], 0, 0);
- gUnknown_203B058 = gUnknown_84570C8[gSpecialVar_0x8004];
- sub_800B1F4();
+ SetHostRFUtgtGname(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 0);
+ sPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004];
+ SetWirelessCommType1();
OpenLink();
- sub_80FBBD8();
+ InitializeRfuLinkManager_JoinGroup();
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 1;
@@ -1194,34 +1301,34 @@ static void sub_8116738(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
- data->field_11 = sub_811A054(data->field_4, gSpecialVar_0x8004);
- data->field_C = AddWindow(&gUnknown_8456CD0);
- data->listWindowId = AddWindow(&gUnknown_8456D4C);
- data->field_D = AddWindow(&gUnknown_8456D54);
-
- FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2));
- sub_811A444(data->field_C, 0, gUnknown_8458FC8, 8, 2, 4);
- PutWindowTilemap(data->field_C);
- CopyWindowToVram(data->field_C, 2);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004);
+ data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel);
+ data->listWindowId = AddWindow(&sWindowTemplate_MysteryGiftList);
+ data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId);
+
+ FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2));
+ UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gUnknown_8458FC8, 8, 2, UR_COLOR_WHT_DKE_LTE);
+ PutWindowTilemap(data->bButtonCancelWindowId);
+ CopyWindowToVram(data->bButtonCancelWindowId, 2);
DrawStdWindowFrame(data->listWindowId, FALSE);
- gMultiuseListMenuTemplate = gUnknown_8456DDC;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- DrawStdWindowFrame(data->field_D, FALSE);
- PutWindowTilemap(data->field_D);
- sub_8115924(data->field_D);
- CopyWindowToVram(data->field_D, 2);
+ DrawStdWindowFrame(data->playerNameAndIdWindowId, FALSE);
+ PutWindowTilemap(data->playerNameAndIdWindowId);
+ PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId);
+ CopyWindowToVram(data->playerNameAndIdWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_F = 0;
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- id = sub_8116FE4();
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -1234,19 +1341,20 @@ static void sub_8116738(u8 taskId)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0;
+ unusedVar = data->field_0->arr[id].gname_uname.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started)
{
- u32 var = sub_8116D10(data, id);
+ u32 var = IsTryingToTradeWithHoennTooSoon(data, id);
if (var == 0)
{
- sub_8116D60(data, id);
+ AskToJoinRfuGroup(data, id);
data->state = 5;
PlaySE(SE_PN_ON);
}
else
{
+ // Postgame flags not both set
StringCopy(gStringVar4, gUnknown_8457608[var - 1]);
data->state = 18;
PlaySE(SE_PN_ON);
@@ -1268,30 +1376,38 @@ static void sub_8116738(u8 taskId)
}
break;
case 5:
- sub_811631C(gStringVar4, gUnknown_203B058);
+ GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, sPlayerCurrActivity);
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]);
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]);
data->state = 6;
}
break;
case 6:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
- sub_80FB9E4(0, 0);
- switch (gUnknown_203B058)
+ sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
+ RfuSetErrorStatus(0, 0);
+ switch (sPlayerCurrActivity)
{
- case 1 ... 5:
- case 9 ... 11:
- case 13 ... 14:
- case 21 ... 22:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_CHAT:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
+ case ACTIVITY_SPINTRADE:
+ case ACTIVITY_ITEMTRADE:
+ case ACTIVITY_WCARD2:
+ case ACTIVITY_WNEWS2:
data->state = 20;
break;
}
}
- switch (sub_80FB9F4())
+ switch (RfuGetErrorStatus())
{
case 1:
data->state = 12;
@@ -1302,31 +1418,32 @@ static void sub_8116738(u8 taskId)
data->state = 14;
break;
case 5:
- sub_81163B0(gStringVar4, gUnknown_203B058);
+ GetGroupLeaderSentAnOKMessage(gStringVar4, sPlayerCurrActivity);
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- sub_80FB9E4(7, 0);
- StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]);
+ RfuSetErrorStatus(7, 0);
+ StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]);
StringExpandPlaceholders(gStringVar4, gUnknown_8457700);
}
break;
case 7:
- if (data->field_15 > 0xF0)
+ // Wait 4 seconds
+ if (data->delayBeforePrint > 240)
{
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- sub_80FB9E4(12, 0);
- data->field_15 = 0;
+ RfuSetErrorStatus(12, 0);
+ data->delayBeforePrint = 0;
}
}
else
{
- data->field_15++;
+ data->delayBeforePrint++;
}
break;
}
- if (!sub_80FB9F4() && JOY_NEW(B_BUTTON))
+ if (!RfuGetErrorStatus() && JOY_NEW(B_BUTTON))
data->state = 7;
break;
case 7:
@@ -1334,10 +1451,10 @@ static void sub_8116738(u8 taskId)
data->state = 8;
break;
case 8:
- switch (sub_811A14C(&data->textState, sub_80FB9F4()))
+ switch (UnionRoomHandleYesNo(&data->textState, RfuGetErrorStatus()))
{
case 0:
- sub_80FA6BC();
+ LinkRfuNIsend8();
data->state = 9;
RedrawListMenu(data->listTaskId);
break;
@@ -1353,7 +1470,7 @@ static void sub_8116738(u8 taskId)
}
break;
case 9:
- if (sub_80FB9F4())
+ if (RfuGetErrorStatus())
data->state = 6;
break;
case 10:
@@ -1361,23 +1478,23 @@ static void sub_8116738(u8 taskId)
case 14:
case 18:
case 20:
- ClearWindowTilemap(data->field_D);
- ClearStdWindowAndFrame(data->field_D, FALSE);
+ ClearWindowTilemap(data->playerNameAndIdWindowId);
+ ClearStdWindowAndFrame(data->playerNameAndIdWindowId, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
- ClearWindowTilemap(data->field_C);
+ ClearWindowTilemap(data->bButtonCancelWindowId);
ClearStdWindowAndFrame(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_D);
+ RemoveWindow(data->playerNameAndIdWindowId);
RemoveWindow(data->listWindowId);
- RemoveWindow(data->field_C);
- DestroyTask(data->field_11);
+ RemoveWindow(data->bButtonCancelWindowId);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
break;
case 13:
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()]))
+ if (PrintOnTextbox(&data->textState, gUnknown_8457754[RfuGetErrorStatus()]))
{
gSpecialVar_Result = 6;
data->state = 23;
@@ -1390,7 +1507,7 @@ static void sub_8116738(u8 taskId)
break;
case 15:
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()]))
+ if (PrintOnTextbox(&data->textState, gUnknown_8457754[RfuGetErrorStatus()]))
{
gSpecialVar_Result = 8;
data->state = 23;
@@ -1405,25 +1522,25 @@ static void sub_8116738(u8 taskId)
break;
case 23:
DestroyTask(taskId);
- sub_811A41C();
- sub_80F8DC0();
+ JoinGroup_BlankBg0AndEnableScriptContexts();
+ LinkRfu_Shutdown();
break;
case 21:
- sub_8117990();
+ CreateTask_RunScriptAndFadeToActivity();
DestroyTask(taskId);
break;
}
}
-static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id)
+static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * arg0, s32 id)
{
struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id];
- if (gUnknown_203B058 == 4 && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_LEAF_GREEN)
+ if (sPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_FIRE_RED && structPtr->gname_uname.gname.unk_00.version != VERSION_LEAF_GREEN)
{
if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP))
return 1;
- else if (structPtr->unk.gname.unk_00.isChampion)
+ else if (structPtr->gname_uname.gname.unk_00.isChampion)
return 0;
}
else
@@ -1434,23 +1551,23 @@ static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id)
return 2;
}
-static void sub_8116D60(struct UnkStruct_Group * data, s32 id)
+static void AskToJoinRfuGroup(struct UnkStruct_Group * data, s32 id)
{
- data->field_F = id;
+ data->leaderId = id;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
RedrawListMenu(data->listTaskId);
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]);
- sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1);
- sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId));
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]);
+ UpdateGameDataWithActivitySpriteGendersFlag(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE);
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId));
}
-u8 sub_8116DE0(void)
+u8 CreateTask_ListenToWireless(void)
{
u8 taskId;
struct UnkStruct_Group * dataPtr;
- taskId = CreateTask(sub_8116E1C, 0);
+ taskId = CreateTask(Task_ListenToWireless, 0);
sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data);
dataPtr->state = 0;
@@ -1461,7 +1578,7 @@ u8 sub_8116DE0(void)
return taskId;
}
-static void sub_8116E1C(u8 taskId)
+static void Task_ListenToWireless(u8 taskId)
{
struct UnkStruct_Group * data = sUnionRoomMain.group;
@@ -1469,53 +1586,53 @@ static void sub_8116E1C(u8 taskId)
{
case 0:
SetHostRFUtgtGname(0, 0, 0);
- sub_800B1F4();
+ SetWirelessCommType1();
OpenLink();
- sub_80FBBD8();
+ InitializeRfuLinkManager_JoinGroup();
sub_80FB128(TRUE);
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
- data->field_11 = sub_811A054(data->field_4, 0xFF);
- data->field_F = 0;
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- if (sub_8116FE4() == 1)
+ if (GetNewLeaderCandidate() == 1)
PlaySE(SE_PC_LOGIN);
if (gTasks[taskId].data[15] == 0xFF)
data->state = 10;
break;
case 10:
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
data->state++;
break;
case 11:
- sub_80F8DC0();
+ LinkRfu_Shutdown();
DestroyTask(taskId);
break;
}
}
-static bool32 sub_8116F28(u32 arg0, u32 id)
+static bool32 IsPartnerActivityAcceptable(u32 activity, u32 group)
{
- if (id == 0xFF)
+ if (group == 0xFF)
return TRUE;
- if (id <= NELEMS(gUnknown_8457094)) // UB: <= may access data outside the array
+ if (group <= NELEMS(sAcceptedActivityIds)) // UB: <= may access data outside the array
{
- const u8 *bytes = gUnknown_8457094[id];
+ const u8 *bytes = sAcceptedActivityIds[group];
while ((*(bytes) != 0xFF))
{
- if ((*bytes) == arg0)
+ if ((*bytes) == activity)
return TRUE;
bytes++;
}
@@ -1524,30 +1641,30 @@ static bool32 sub_8116F28(u32 arg0, u32 id)
return FALSE;
}
-static u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id)
+static u8 URoomGroupListGetTextColor(struct UnkStruct_Group * data, u32 id)
{
- if (data->field_0->arr[id].field_1A_0 == 1)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (data->field_0->arr[id].unk.gname.unk_0a_7)
- return 3;
- else if (data->field_0->arr[id].field_1A_1 != 0)
- return 1;
+ if (data->field_0->arr[id].gname_uname.gname.started)
+ return UR_COLOR_WHT_WHT_LTE;
+ else if (data->field_0->arr[id].field_1A_1)
+ return UR_COLOR_RED_WHT_LTR;
else if (data->field_0->arr[id].field_1B != 0)
- return 2;
+ return UR_COLOR_GRN_WHT_LTG;
}
- return 0;
+ return UR_COLOR_DKE_WHT_LTE;
}
-static void sub_8116F94(u8 windowId, s32 itemId, u8 y)
+static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y)
{
struct UnkStruct_Group * data = sUnionRoomMain.group;
- u8 var = sub_8116F5C(data, itemId);
+ u8 color_idx = URoomGroupListGetTextColor(data, itemId);
- sub_811A81C(windowId, 8, y, &data->field_0->arr[itemId], var, itemId);
+ PrintUnionRoomGroupOnWindow(windowId, 8, y, &data->field_0->arr[itemId], color_idx, itemId);
}
-static u8 sub_8116FE4(void)
+static u8 GetNewLeaderCandidate(void)
{
struct UnkStruct_Group * data = sUnionRoomMain.group;
u8 ret = 0;
@@ -1556,17 +1673,17 @@ static u8 sub_8116FE4(void)
for (i = 0; i < 16; i++)
{
- if (data->field_0->arr[i].field_1A_0 != 0)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE)
{
- id = sub_811A748(&data->field_0->arr[i], data->field_4->arr);
+ id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr);
if (id != 0xFF)
{
- if (data->field_0->arr[i].field_1A_0 == 1)
+ if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (sub_811A6DC(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0))
+ if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].gname_uname, &data->field_4->arr[id].gname_uname))
{
- data->field_0->arr[i].unk = data->field_4->arr[id].unk0;
- data->field_0->arr[i].field_1B = 0x40;
+ data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname;
+ data->field_0->arr[i].field_1B = 64;
ret = 1;
}
else
@@ -1581,8 +1698,8 @@ static u8 sub_8116FE4(void)
}
else
{
- data->field_0->arr[i].field_1A_0 = 1;
- data->field_0->arr[i].field_1B = 0x40;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[i].field_1B = 64;
ret = 1;
}
@@ -1590,12 +1707,12 @@ static u8 sub_8116FE4(void)
}
else
{
- if (data->field_0->arr[i].field_1A_0 != 2)
+ if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT)
{
data->field_0->arr[i].field_18++;
if (data->field_0->arr[i].field_18 >= 300)
{
- data->field_0->arr[i].field_1A_0 = 2;
+ data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
ret = 2;
}
}
@@ -1603,29 +1720,29 @@ static u8 sub_8116FE4(void)
}
}
- for (id = 0; id < 4; id++)
+ for (id = 0; id < RFU_CHILD_MAX; id++)
{
- if (sub_811A798(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF)
+ if (Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF)
ret = 1;
}
return ret;
}
-static void sub_8117100(u8 taskId)
+static void Task_CallCB2ReturnFromLinkTrade(u8 taskId)
{
CB2_ReturnFromLinkTrade();
DestroyTask(taskId);
}
-u8 sub_8117118(void)
+u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void)
{
- u8 taskId = CreateTask(sub_8117100, 0);
+ u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0);
return taskId;
}
-static void sub_8117130(u8 taskId)
+static void Task_StartUnionRoomTrade(u8 taskId)
{
u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId());
@@ -1665,7 +1782,7 @@ static void sub_8117130(u8 taskId)
}
}
-static void sub_8117280(u8 taskId)
+static void Task_ExchangeCards(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -1689,11 +1806,11 @@ static void sub_8117280(u8 taskId)
if (GetLinkPlayerCount() == 2)
{
recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1];
- sub_81446D0(recvBuff[48]);
+ MEventHandleReceivedWonderCard(recvBuff[sizeof(struct TrainerCard) / 2]);
}
else
{
- sub_81446C4();
+ ResetReceivedWonderCardFlag();
}
ResetBlockReceivedFlags();
@@ -1703,16 +1820,16 @@ static void sub_8117280(u8 taskId)
}
}
-static void sub_8117354(void)
+static void CB2_ShowCard(void)
{
switch (gMain.state)
{
case 0:
- CreateTask(sub_8117280, 5);
+ CreateTask(Task_ExchangeCards, 5);
gMain.state++;
break;
case 1:
- if (!FuncIsActiveTask(sub_8117280))
+ if (!FuncIsActiveTask(Task_ExchangeCards))
ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField);
break;
}
@@ -1723,7 +1840,7 @@ static void sub_8117354(void)
BuildOamBuffer();
}
-void sub_81173C0(u16 battleFlags)
+void StartUnionRoomBattle(u16 battleFlags)
{
HealPlayerParty();
SavePlayerParty();
@@ -1736,7 +1853,7 @@ void sub_81173C0(u16 battleFlags)
PlayBattleBGM();
}
-static void sub_8117440(u16 linkService, u16 x, u16 y)
+static void SetCableClubStateAndWarpCurrentMap(u16 linkService, u16 x, u16 y)
{
VarSet(VAR_CABLE_CLUB_STATE, linkService);
SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
@@ -1744,7 +1861,7 @@ static void sub_8117440(u16 linkService, u16 x, u16 y)
WarpIntoMap();
}
-static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
+static void SetCableClubStateAndWarpToNewMap(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
{
gSpecialVar_0x8004 = linkService;
VarSet(VAR_CABLE_CLUB_STATE, linkService);
@@ -1755,17 +1872,17 @@ static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
WarpIntoMap();
}
-static void sub_8117534(void)
+static void CB2_TransitionToCableClub(void)
{
switch (gMain.state)
{
case 0:
- CreateTask(sub_8117280, 5);
+ CreateTask(Task_ExchangeCards, 5);
gMain.state++;
break;
case 1:
- if (!FuncIsActiveTask(sub_8117280))
- SetMainCallback2(sub_8056788);
+ if (!FuncIsActiveTask(Task_ExchangeCards))
+ SetMainCallback2(CB2_ReturnToFieldCableClub);
break;
}
@@ -1775,101 +1892,106 @@ static void sub_8117534(void)
BuildOamBuffer();
}
-static void sub_8117594(void *arg0, bool32 arg1)
+static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard)
{
- TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0);
- if (arg1)
- *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagId();
+ TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )dest);
+ if (setWonderCard)
+ *((u16 *)(dest + sizeof(struct TrainerCard))) = GetWonderCardFlagId();
else
- *((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0;
+ *((u16 *)(dest + sizeof(struct TrainerCard))) = 0;
}
-static void sub_81175BC(u8 taskId)
+static void Task_StartActivity(u8 taskId)
{
- sub_81446C4();
- switch (gUnknown_203B058)
+ ResetReceivedWonderCardFlag();
+ switch (sPlayerCurrActivity)
{
- case 1 ... 4:
- case 9 ... 11:
- case 13:
- case 14:
+ case ACTIVITY_BATTLE:
+ case ACTIVITY_DBLBATTLE:
+ case ACTIVITY_MLTBATTLE:
+ case ACTIVITY_TRADE:
+ case ACTIVITY_PJUMP:
+ case ACTIVITY_BCRUSH:
+ case ACTIVITY_BPICK:
+ case ACTIVITY_SPINTRADE:
+ case ACTIVITY_ITEMTRADE:
RecordMixTrainerNames();
break;
}
- switch (gUnknown_203B058)
+ switch (sPlayerCurrActivity)
{
- case 65:
- case 81:
+ case ACTIVITY_BATTLE | IN_UNION_ROOM:
+ case ACTIVITY_ACCEPT | IN_UNION_ROOM:
CleanupOverworldWindowsAndTilemaps();
- gMain.savedCallback = sub_811C1C8;
+ gMain.savedCallback = CB2_UnionRoomBattle;
InitChooseHalfPartyForBattle(2);
break;
- case 1:
+ case ACTIVITY_BATTLE:
CleanupOverworldWindowsAndTilemaps();
- sub_8117594(gBlockSendBuffer, TRUE);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
- SetMainCallback2(sub_8117534);
+ SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 2:
+ case ACTIVITY_DBLBATTLE:
CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_8117594(gBlockSendBuffer, TRUE);
- sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
- SetMainCallback2(sub_8117534);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 3:
+ case ACTIVITY_MLTBATTLE:
CleanupOverworldWindowsAndTilemaps();
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_8117594(gBlockSendBuffer, TRUE);
- sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
- SetMainCallback2(sub_8117534);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 4:
- sub_8117594(gBlockSendBuffer, TRUE);
+ case ACTIVITY_TRADE:
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
CleanupOverworldWindowsAndTilemaps();
- sub_81174B4(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
- SetMainCallback2(sub_8117534);
+ SetCableClubStateAndWarpToNewMap(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
+ SetMainCallback2(CB2_TransitionToCableClub);
break;
- case 68:
- CreateTask(sub_8117130, 0);
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
+ CreateTask(Task_StartUnionRoomTrade, 0);
break;
- case 5:
- case 69:
+ case ACTIVITY_CHAT:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
if (GetMultiplayerId() == 0)
{
- sub_80F8CFC();
+ LinkRfu_CreateConnectionAsParent();
}
else
{
- sub_80F8D14();
- SetHostRFUtgtGname(69, 0, 1);
+ LinkRfu_StopManagerBeforeEnteringChat();
+ SetHostRFUtgtGname(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1);
}
- sub_8128420();
+ EnterUnionRoomChat();
break;
- case 8:
- case 72:
- sub_8117594(gBlockSendBuffer, FALSE);
- SetMainCallback2(sub_8117354);
+ case ACTIVITY_CARD:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
+ CreateTrainerCardInBuffer(gBlockSendBuffer, FALSE);
+ SetMainCallback2(CB2_ShowCard);
break;
- case 9:
- sub_8117440(USING_MINIGAME, 5, 1);
- sub_8147AA8(GetCursorSelectionMonId(), CB2_LoadMap);
+ case ACTIVITY_PJUMP:
+ SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1);
+ StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap);
break;
- case 10:
- sub_8117440(USING_BERRY_CRUSH, 9, 1);
- sub_814B754(CB2_LoadMap);
+ case ACTIVITY_BCRUSH:
+ SetCableClubStateAndWarpCurrentMap(USING_BERRY_CRUSH, 9, 1);
+ StartBerryCrush(CB2_LoadMap);
break;
- case 11:
- sub_8117440(USING_MINIGAME, 5, 1);
- sub_81507FC(GetCursorSelectionMonId(), CB2_LoadMap);
+ case ACTIVITY_BPICK:
+ SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1);
+ StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap);
break;
}
@@ -1878,7 +2000,7 @@ static void sub_81175BC(u8 taskId)
ScriptContext2_Disable();
}
-static void sub_8117900(u8 taskId)
+static void Task_RunScriptAndFadeToActivity(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u16 *sendBuff = (u16*)(gBlockSendBuffer);
@@ -1900,7 +2022,7 @@ static void sub_8117900(u8 taskId)
case 2:
if (!gPaletteFade.active)
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
data[0]++;
}
break;
@@ -1908,38 +2030,38 @@ static void sub_8117900(u8 taskId)
if (IsLinkTaskFinished())
{
DestroyTask(taskId);
- sub_81179A4();
+ CreateTask_StartActivity();
}
break;
}
}
-static void sub_8117990(void)
+static void CreateTask_RunScriptAndFadeToActivity(void)
{
- CreateTask(sub_8117900, 0);
+ CreateTask(Task_RunScriptAndFadeToActivity, 0);
}
-static void sub_81179A4(void)
+static void CreateTask_StartActivity(void)
{
- u8 taskId = CreateTask(sub_81175BC, 0);
+ u8 taskId = CreateTask(Task_StartActivity, 0);
gTasks[taskId].data[0] = 0;
}
-void MEvent_CreateTask_Leader(u32 arg0)
+void MEvent_CreateTask_Leader(u32 activity)
{
u8 taskId;
struct UnkStruct_Leader * dataPtr;
- taskId = CreateTask(sub_8117A0C, 0);
+ taskId = CreateTask(Task_MEvent_Leader, 0);
sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data);
dataPtr->state = 0;
dataPtr->textState = 0;
- dataPtr->field_18 = arg0;
+ dataPtr->activity = activity;
gSpecialVar_Result = 0;
}
-static void sub_8117A0C(u8 taskId)
+static void Task_MEvent_Leader(u8 taskId)
{
struct UnkStruct_Leader * data = sUnionRoomMain.leader;
struct WindowTemplate winTemplate;
@@ -1948,43 +2070,43 @@ static void sub_8117A0C(u8 taskId)
switch (data->state)
{
case 0:
- gUnknown_203B058 = data->field_18;
- gUnknown_203B059 = 2;
- SetHostRFUtgtGname(data->field_18, 0, 0);
- sub_80FAF74(FALSE, FALSE);
- sub_800B1F4();
+ sPlayerCurrActivity = data->activity;
+ sPlayerActivityGroupSize = 2;
+ SetHostRFUtgtGname(data->activity, 0, 0);
+ SetGnameBufferWonderFlags(FALSE, FALSE);
+ SetWirelessCommType1();
OpenLink();
- sub_80FBB8C(2);
+ InitializeRfuLinkManager_LinkLeader(2);
data->state = 1;
break;
case 1:
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20));
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 5);
- LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName);
+ data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20));
+ data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20));
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE);
+ LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname);
data->field_0->arr[0].field_18 = 0;
- data->field_0->arr[0].field_1A_0 = 1;
- data->field_0->arr[0].field_1A_1 = 0;
+ data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ data->field_0->arr[0].field_1A_1 = FALSE;
data->field_0->arr[0].field_1B = 0;
- data->field_17 = sub_811A054(data->field_4, 0xFF);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF);
- winTemplate = gUnknown_8456CFC;
+ winTemplate = sWindowTemplate_List_PossibleGroupMembers;
winTemplate.baseBlock = GetMysteryGiftBaseBlock();
data->listWindowId = AddWindow(&winTemplate);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_8456D34;
+ gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
CopyBgTilemapBufferToVram(0);
- data->field_13 = 1;
+ data->playerCount = 1;
data->state = 2;
break;
case 2:
- StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]);
- sub_811599C(gStringVar4, gUnknown_203B058);
+ StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]);
+ StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity);
data->state = 3;
break;
case 3:
@@ -1992,7 +2114,7 @@ static void sub_8117A0C(u8 taskId)
data->state = 4;
break;
case 4:
- sub_8116444(data, 5, 6);
+ Leader_SetStateIfMemberListChanged(data, 5, 6);
if (JOY_NEW(B_BUTTON))
{
data->state = 13;
@@ -2000,9 +2122,10 @@ static void sub_8117A0C(u8 taskId)
}
break;
case 6:
+ // The link with your friend has been dropped...
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577F8))
{
- data->field_13 = sub_81165E8(data->field_0);
+ data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
@@ -2011,44 +2134,44 @@ static void sub_8117A0C(u8 taskId)
data->state = 7;
break;
case 7:
- switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->field_14, FALSE, gStringVar4))
+ switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->messageWindowId, FALSE, gStringVar4))
{
case 0:
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
data->field_19 = 5;
- sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
data->state = 8;
break;
case 1:
case -1:
data->field_19 = 6;
- sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
data->state = 8;
break;
}
break;
case 8:
- val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname);
if (val == 1)
{
if (data->field_19 == 5)
{
- data->field_0->arr[data->field_13].field_1B = 0;
+ data->field_0->arr[data->playerCount].field_1B = 0;
RedrawListMenu(data->listTaskId);
- data->field_13++;
- IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]);
+ data->playerCount++;
+ IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]);
StringExpandPlaceholders(gStringVar4, gUnknown_8457554);
data->state = 9;
- sub_80F8F5C();
+ LinkRfu_StopManagerAndFinalizeSlots();
}
else
{
- sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId));
- data->field_0->arr[data->field_13].field_1A_0 = 0;
- sub_81165E8(data->field_0);
+ RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId));
+ data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ UnionRoomLeaderField0CompactionAndCount(data->field_0);
RedrawListMenu(data->listTaskId);
data->state = 2;
}
@@ -2057,7 +2180,7 @@ static void sub_8117A0C(u8 taskId)
}
else if (val == 2)
{
- sub_80FB9E4(0, 0);
+ RfuSetErrorStatus(0, 0);
data->state = 2;
}
break;
@@ -2066,17 +2189,17 @@ static void sub_8117A0C(u8 taskId)
data->state = 10;
break;
case 10:
- if (++data->field_E > 120)
+ if (++data->delayTimerAfterOk > 120)
data->state = 11;
break;
case 11:
- if (!sub_8116444(data, 5, 6))
+ if (!Leader_SetStateIfMemberListChanged(data, 5, 6))
data->state = 12;
break;
case 12:
- if (sub_80F8F40())
+ if (LmanAcceptSlotFlagIsNotZero())
{
- sub_80F8F7C(FALSE);
+ WaitRfuState(FALSE);
data->state = 15;
}
else
@@ -2086,17 +2209,18 @@ static void sub_8117A0C(u8 taskId)
break;
case 13:
DestroyWirelessStatusIndicatorSprite();
- sub_80F8DC0();
+ LinkRfu_Shutdown();
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_17);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
data->state++;
break;
case 14:
+ // Please start over from the beginning.
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571B8))
{
DestroyTask(taskId);
@@ -2104,13 +2228,13 @@ static void sub_8117A0C(u8 taskId)
}
break;
case 15:
- if (sub_80FB9F4() == 1 || sub_80FB9F4() == 2)
+ if (RfuGetErrorStatus() == 1 || RfuGetErrorStatus() == 2)
{
data->state = 13;
}
else if (gReceivedRemoteLinkPlayers != 0)
{
- sub_80FAFE0(1);
+ UpdateGameData_GroupLockedIn(TRUE);
data->state++;
}
break;
@@ -2118,11 +2242,11 @@ static void sub_8117A0C(u8 taskId)
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_17);
+ DestroyTask(data->listenTaskId);
Free(data->field_8);
Free(data->field_0);
Free(data->field_4);
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
data->state++;
break;
case 17:
@@ -2132,22 +2256,22 @@ static void sub_8117A0C(u8 taskId)
}
}
-void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0)
+void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity)
{
u8 taskId;
struct UnkStruct_Group * dataPtr;
- taskId = CreateTask(sub_8117F20, 0);
+ taskId = CreateTask(Task_CardOrNewsWithFriend, 0);
sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data);
sGroup = dataPtr;
dataPtr->state = 0;
dataPtr->textState = 0;
- dataPtr->field_12 = arg0 - 21;
+ dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News
gSpecialVar_Result = 0;
}
-static void sub_8117F20(u8 taskId)
+static void Task_CardOrNewsWithFriend(u8 taskId)
{
s32 id;
struct WindowTemplate winTemplate1, winTemplate2;
@@ -2156,10 +2280,10 @@ static void sub_8117F20(u8 taskId)
switch (data->state)
{
case 0:
- SetHostRFUtgtGname(data->field_12 + 21, 0, 0);
- sub_800B1F4();
+ SetHostRFUtgtGname(data->cardOrNews + ACTIVITY_WCARD2, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_80FBBD8();
+ InitializeRfuLinkManager_JoinGroup();
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 1;
@@ -2169,33 +2293,33 @@ static void sub_8117F20(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
- data->field_11 = sub_811A054(data->field_4, data->field_12 + 7);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD);
- winTemplate1 = gUnknown_8456D4C;
+ winTemplate1 = sWindowTemplate_MysteryGiftList;
winTemplate1.baseBlock = GetMysteryGiftBaseBlock();
data->listWindowId = AddWindow(&winTemplate1);
- data->field_D = AddWindow(&gUnknown_8456D54);
+ data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_8456DDC;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- MG_DrawTextBorder(data->field_D);
- FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1));
- PutWindowTilemap(data->field_D);
- sub_8115924(data->field_D);
- CopyWindowToVram(data->field_D, 2);
+ MG_DrawTextBorder(data->playerNameAndIdWindowId);
+ FillWindowPixelBuffer(data->playerNameAndIdWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(data->playerNameAndIdWindowId);
+ PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId);
+ CopyWindowToVram(data->playerNameAndIdWindowId, 2);
CopyBgTilemapBufferToVram(0);
- data->field_F = 0;
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- id = sub_8116FE4();
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -2209,16 +2333,16 @@ static void sub_8117F20(u8 taskId)
{
// this unused variable along with the assignment is needed to match
u32 unusedVar;
- unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0;
+ unusedVar = data->field_0->arr[id].gname_uname.gname.activity;
- if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7)
+ if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started)
{
- data->field_F = id;
+ data->leaderId = id;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
RedrawListMenu(data->listTaskId);
- IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]);
- sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId));
+ IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]);
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId));
PlaySE(SE_PN_ON);
data->state = 4;
}
@@ -2236,17 +2360,17 @@ static void sub_8117F20(u8 taskId)
break;
case 4:
AddTextPrinterToWindow1(gUnknown_8459238);
- IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]);
+ IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]);
data->state = 5;
break;
case 5:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
+ sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
data->state = 10;
}
- switch (sub_80FB9F4())
+ switch (RfuGetErrorStatus())
{
case 1:
case 2:
@@ -2255,7 +2379,7 @@ static void sub_8117F20(u8 taskId)
break;
case 5:
AddTextPrinterToWindow1(gUnknown_84576AC);
- sub_80FB9E4(0, 0);
+ RfuSetErrorStatus(0, 0);
break;
}
break;
@@ -2264,19 +2388,19 @@ static void sub_8117F20(u8 taskId)
case 10:
DestroyListMenuTask(data->listTaskId, 0, 0);
CopyBgTilemapBufferToVram(0);
- RemoveWindow(data->field_D);
+ RemoveWindow(data->playerNameAndIdWindowId);
RemoveWindow(data->listWindowId);
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
break;
case 9:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[sub_80FB9F4()]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[RfuGetErrorStatus()]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gSpecialVar_Result = 5;
}
break;
@@ -2284,12 +2408,12 @@ static void sub_8117F20(u8 taskId)
DestroyWirelessStatusIndicatorSprite();
AddTextPrinterToWindow1(gUnknown_84571B8);
DestroyTask(taskId);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gSpecialVar_Result = 5;
break;
case 11:
data->state++;
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
break;
case 12:
if (IsLinkTaskFinished())
@@ -2298,22 +2422,22 @@ static void sub_8117F20(u8 taskId)
}
}
-void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0)
+void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity)
{
u8 taskId;
struct UnkStruct_Group * dataPtr;
- taskId = CreateTask(sub_81182DC, 0);
+ taskId = CreateTask(Task_CardOrNewsOverWireless, 0);
sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data);
sGroup = dataPtr;
dataPtr->state = 0;
dataPtr->textState = 0;
- dataPtr->field_12 = arg0 - 21;
+ dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News
gSpecialVar_Result = 0;
}
-static void sub_81182DC(u8 taskId)
+static void Task_CardOrNewsOverWireless(u8 taskId)
{
s32 id;
struct WindowTemplate winTemplate;
@@ -2323,9 +2447,9 @@ static void sub_81182DC(u8 taskId)
{
case 0:
SetHostRFUtgtGname(0, 0, 0);
- sub_800B1F4();
+ SetWirelessCommType1();
OpenLink();
- sub_80FBBD8();
+ InitializeRfuLinkManager_JoinGroup();
data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20));
data->state = 1;
@@ -2335,29 +2459,29 @@ static void sub_81182DC(u8 taskId)
data->state = 2;
break;
case 2:
- sub_811A650(data->field_4->arr, 4);
- sub_811A5E4(data->field_0->arr, 16);
- data->field_11 = sub_811A084(data->field_4, data->field_12 + 7);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x20Array(data->field_0->arr, 16);
+ data->listenTaskId = CreateTask_ListenForPartnersWithSerial7F7D(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD);
if (data->field_13 != 0)
{
- winTemplate = gUnknown_8456D4C;
+ winTemplate = sWindowTemplate_MysteryGiftList;
winTemplate.baseBlock = GetMysteryGiftBaseBlock();
data->listWindowId = AddWindow(&winTemplate);
MG_DrawTextBorder(data->listWindowId);
- gMultiuseListMenuTemplate = gUnknown_8456DDC;
+ gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups;
gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
CopyBgTilemapBufferToVram(0);
}
- data->field_F = 0;
+ data->leaderId = 0;
data->state = 3;
break;
case 3:
- id = sub_8116FE4();
+ id = GetNewLeaderCandidate();
switch (id)
{
case 1:
@@ -2369,17 +2493,17 @@ static void sub_81182DC(u8 taskId)
case 0:
if (data->field_13 != 0)
id = ListMenu_ProcessInput(data->listTaskId);
- if (data->field_14 > 120)
+ if (data->refreshTimer > 120)
{
- if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.gname.unk_0a_7)
+ if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.started)
{
- if (sub_8119FB0(&data->field_0->arr[0].unk.gname, data->field_12 + 7))
+ if (GetGnameWonderFlagByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->cardOrNews + LINK_GROUP_WONDER_CARD))
{
- data->field_F = 0;
- data->field_14 = 0;
+ data->leaderId = 0;
+ data->refreshTimer = 0;
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(0, 0);
- sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.gname.unk_00.playerTrainerId));
+ CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.uname, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId));
PlaySE(SE_PN_ON);
data->state = 4;
}
@@ -2393,25 +2517,25 @@ static void sub_81182DC(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
data->state = 6;
- data->field_14 = 0;
+ data->refreshTimer = 0;
}
- data->field_14++;
+ data->refreshTimer++;
break;
}
break;
case 4:
AddTextPrinterToWindow1(gUnknown_845928C);
- IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]);
+ IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]);
data->state = 5;
break;
case 5:
if (gReceivedRemoteLinkPlayers != 0)
{
- gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0;
+ sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity;
data->state = 12;
}
- switch (sub_80FB9F4())
+ switch (RfuGetErrorStatus())
{
case 1:
case 2:
@@ -2420,7 +2544,7 @@ static void sub_81182DC(u8 taskId)
break;
case 5:
AddTextPrinterToWindow1(gUnknown_845777C);
- sub_80FB9E4(0, 0);
+ RfuSetErrorStatus(0, 0);
break;
}
break;
@@ -2434,7 +2558,7 @@ static void sub_81182DC(u8 taskId)
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->listWindowId);
}
- DestroyTask(data->field_11);
+ DestroyTask(data->listenTaskId);
Free(data->field_0);
Free(data->field_4);
data->state++;
@@ -2444,7 +2568,7 @@ static void sub_81182DC(u8 taskId)
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gSpecialVar_Result = 5;
}
break;
@@ -2453,22 +2577,22 @@ static void sub_81182DC(u8 taskId)
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gSpecialVar_Result = 5;
}
break;
case 11:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->field_12]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->cardOrNews]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
gSpecialVar_Result = 5;
}
break;
case 13:
data->state++;
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
break;
case 14:
if (IsLinkTaskFinished())
@@ -2482,7 +2606,7 @@ void UnionRoomSpecial(void)
struct UnkStruct_URoom * dataPtr;
ClearAndInitHostRFUtgtGname();
- CreateTask(sub_81186E0, 10);
+ CreateTask(Task_RunUnionRoom, 10);
// dumb line needed to match
sUnionRoomMain.uRoom = sUnionRoomMain.uRoom;
@@ -2497,7 +2621,7 @@ void UnionRoomSpecial(void)
dataPtr->field_12 = 0;
gSpecialVar_Result = 0;
- sub_8107D38(0xD0, 1);
+ ListMenuLoadStdPalAt(0xD0, 1);
}
static u16 ReadAsU16(const u8 *ptr)
@@ -2505,7 +2629,7 @@ static u16 ReadAsU16(const u8 *ptr)
return (ptr[1] << 8) | (ptr[0]);
}
-static void sub_8118664(u32 nextState, const u8 *src)
+static void UnionRoom_ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src)
{
struct UnkStruct_URoom * data = sUnionRoomMain.uRoom;
@@ -2515,7 +2639,7 @@ static void sub_8118664(u32 nextState, const u8 *src)
StringExpandPlaceholders(gStringVar4, src);
}
-static void sub_811868C(const u8 *src)
+static void UnionRoom_ScheduleFieldMessageAndExit(const u8 *src)
{
struct UnkStruct_URoom * data = sUnionRoomMain.uRoom;
@@ -2524,17 +2648,17 @@ static void sub_811868C(const u8 *src)
StringExpandPlaceholders(gStringVar4, src);
}
-static void sub_81186B0(struct UnkStruct_URoom * data)
+static void BackUpURoomField0ToDecompressionBuffer(struct UnkStruct_URoom * data)
{
- memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 8 * sizeof(struct UnkStruct_x20));
+ memcpy(&gDecompressionBuffer[0x3F00], data->field_0, UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20));
}
-static void sub_81186C8(struct UnkStruct_URoom * data)
+static void RestoreURoomField0FromDecompressionBuffer(struct UnkStruct_URoom * data)
{
- memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 8 * sizeof(struct UnkStruct_x20));
+ memcpy(data->field_0, &gDecompressionBuffer[0x3F00], UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20));
}
-static void sub_81186E0(u8 taskId)
+static void Task_RunUnionRoom(u8 taskId)
{
u32 id = 0;
s32 var5 = 0;
@@ -2545,53 +2669,53 @@ static void sub_81186E0(u8 taskId)
switch (data->state)
{
case 0:
- data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
+ data->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C));
+ data->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C));
+ data->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20));
data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
- sub_811A5E4(data->field_0->arr, 8);
- gUnknown_203B058 = 0x40;
- data->field_20 = sub_8119E84(data->field_C, data->field_4, 9);
+ BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_GROUP_COUNT);
+ sPlayerCurrActivity = IN_UNION_ROOM;
+ data->field_20 = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, LINK_GROUP_UNION_ROOM_RESUME);
ZeroUnionObjWork(data->unionObjs);
- sub_811BB68();
+ MakeGroupAssemblyAreasPassable();
data->state = 1;
break;
case 1:
- sub_811BAAC(data->spriteIds, taskData[0]);
+ CreateGroupMemberObjectsInvisible(data->spriteIds, taskData[0]);
if (++taskData[0] == 8)
data->state = 2;
break;
case 2:
- SetHostRFUtgtGname(0x40, 0, 0);
- sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_800B1F4();
+ SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0);
+ RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ SetWirelessCommType1();
OpenLink();
- sub_80FBC00();
- sub_811A5E4(&data->field_8->arr[0], 1);
- sub_811A650(data->field_4->arr, 4);
- sub_811A650(data->field_C->arr, 4);
+ InitializeRfuLinkManager_EnterUnionRoom();
+ BlankUnkStruct_x20Array(&data->field_8->arr[0], 1);
+ BlankUnkStruct_x1CArray(data->field_4->arr, 4);
+ BlankUnkStruct_x1CArray(data->field_C->arr, 4);
gSpecialVar_Result = 0;
data->state = 3;
break;
case 3:
if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER
- || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE)
+ || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE)
&& sUnionRoomTrade.field_0 != 0)
{
id = GetCursorSelectionMonId();
switch (sUnionRoomTrade.field_0)
{
case 1:
- sub_80FB008(0x54, 0, 1);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
if (id >= PARTY_SIZE)
{
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_80FAFA0(0, 0, 0);
- sub_811868C(gUnknown_8458D54);
+ RfuUpdatePlayerGnameStateAndSend(0, 0, 0);
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D54);
}
else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade))
{
- sub_8118664(0x34, gUnknown_8458CD4);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(52, gURText_PleaseChooseTypeOfMon);
}
else
{
@@ -2599,16 +2723,16 @@ static void sub_81186E0(u8 taskId)
}
break;
case 2:
- sub_81186C8(data);
+ RestoreURoomField0FromDecompressionBuffer(data);
taskData[1] = sUnionRoomTrade.field_8;
if (id >= PARTY_SIZE)
{
- sub_811868C(gUnknown_8458D9C);
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D9C);
}
else
{
- sub_80FB008(0x54, 0, 1);
- gUnknown_203B058 = 0x44;
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade);
data->state = 51;
}
@@ -2626,7 +2750,7 @@ static void sub_81186E0(u8 taskId)
{
if (gSpecialVar_Result == 9)
{
- sub_80FB008(0x54, 0, 1);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
PlaySE(SE_PC_LOGIN);
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
data->state = 42;
@@ -2634,7 +2758,7 @@ static void sub_81186E0(u8 taskId)
}
else if (gSpecialVar_Result == 11)
{
- sub_80FB008(0x54, 0, 1);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
data->state = 23;
gSpecialVar_Result = 0;
}
@@ -2650,98 +2774,98 @@ static void sub_81186E0(u8 taskId)
{
if (JOY_NEW(A_BUTTON))
{
- if (sub_811BF00(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
+ if (RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(data->field_0, &taskData[0], &taskData[1], data->spriteIds))
{
PlaySE(SE_SELECT);
- sub_811B298();
+ UR_EnableScriptContext2AndFreezeObjectEvents();
data->state = 24;
break;
}
- else if (sub_811A9B8())
+ else if (PlayerIsTalkingToUnionRoomAide())
{
- sub_80FB008(0x54, 0, 1);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
PlaySE(SE_PC_LOGIN);
- sub_811B298();
+ UR_EnableScriptContext2AndFreezeObjectEvents();
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
data->state = 45;
break;
}
}
- switch (sub_8119B94())
+ switch (HandlePlayerListUpdate())
{
case 1:
PlaySE(SE_TOY_C);
case 2:
- sub_811BECC(data);
+ ScheduleUnionRoomPlayerRefresh(data);
break;
case 4:
data->state = 11;
- sub_811B298();
- sub_80FAFA0(0, 0, 0);
- sub_80FB008(0x53, sub_811B2D8(data), 0);
+ UR_EnableScriptContext2AndFreezeObjectEvents();
+ RfuUpdatePlayerGnameStateAndSend(0, 0, 0);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), FALSE);
break;
}
- sub_811BEDC(data);
+ HandleUnionRoomPlayerRefresh(data);
}
break;
case 23:
if (!FuncIsActiveTask(Task_StartMenuHandleInput))
{
- sub_80FB008(0x40, 0, 0);
+ UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE);
data->state = 4;
}
break;
case 24:
- sub_811A0E0();
+ UR_RunTextPrinters_CheckPrinter0Active();
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_80FB008(0x54, 0, 1);
- switch (sub_811AA5C(data->field_0, taskData[0], taskData[1], playerGender))
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ switch (UnionRoomGetPlayerInteractionResponse(data->field_0, taskData[0], taskData[1], playerGender))
{
case 0:
data->state = 26;
break;
case 1:
- sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058);
+ sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity);
data->field_12 = id; // Should be just 0, but won't match any other way.
data->state = 25;
break;
case 2:
- sub_8118664(0x13, gStringVar4);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(19, gStringVar4);
break;
}
break;
case 25:
- sub_811A0E0();
- switch (sub_80FB9F4())
+ UR_RunTextPrinters_CheckPrinter0Active();
+ switch (RfuGetErrorStatus())
{
case 4:
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
data->state = 4;
break;
case 1:
case 2:
- if (sub_80FBB0C() == TRUE)
- sub_811868C(gUnknown_8457F90);
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8457F90);
else
- sub_8118664(30, gUnknown_8457F90);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_8457F90);
- gUnknown_203B058 = 0x40;
+ sPlayerCurrActivity = IN_UNION_ROOM;
break;
}
if (gReceivedRemoteLinkPlayers != 0)
{
- sub_8117594(gBlockSendBuffer, TRUE);
- CreateTask(sub_8117280, 5);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ CreateTask(Task_ExchangeCards, 5);
data->state = 38;
}
break;
case 38:
- if (!FuncIsActiveTask(sub_8117280))
+ if (!FuncIsActiveTask(Task_ExchangeCards))
{
- if (gUnknown_203B058 == 0x44)
- sub_8118664(31, gUnknown_84578BC);
+ if (sPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM))
+ UnionRoom_ScheduleFieldMessageWithFollowupState(31, gUnknown_84578BC);
else
data->state = 5;
}
@@ -2749,18 +2873,18 @@ static void sub_81186E0(u8 taskId)
case 30:
if (gReceivedRemoteLinkPlayers == 0)
{
- sub_811B258(FALSE);
- sub_811C028(taskData[0], taskData[1], data->field_0);
+ HandleCancelTrade(FALSE);
+ UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0);
data->state = 2;
}
break;
case 5:
- id = sub_811AA24(&data->field_0->arr[taskData[1]]);
+ id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]);
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_8118664(6, gUnknown_8457B04[id][playerGender]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(6, gURText_FriendPromptsForActivity[id][playerGender]);
break;
case 6:
- var5 = sub_811A218(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_8456DF4, &gUnknown_8456E1C);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->topListMenuWindowId, &data->topListMenuListMenuId, &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity);
if (var5 != -1)
{
if (gReceivedRemoteLinkPlayers == 0)
@@ -2769,27 +2893,27 @@ static void sub_81186E0(u8 taskId)
}
else
{
- data->field_98 = 0;
+ data->partnerYesNoResponse = 0;
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- if (var5 == -2 || var5 == 0x40)
+ if (var5 == -2 || var5 == IN_UNION_ROOM)
{
- data->field_4C[0] = 0x40;
- sub_80F9E2C(data->field_4C);
+ data->playerSendBuffer[0] = IN_UNION_ROOM;
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
StringCopy(gStringVar4, gUnknown_845842C[gLinkPlayers[0].gender]);
data->state = 32;
}
else
{
- gUnknown_203B058 = var5;
- gUnknown_203B059 = (u32)(var5) >> 8;
- if (gUnknown_203B058 == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower())
+ sPlayerCurrActivity = var5;
+ sPlayerActivityGroupSize = (u32)(var5) >> 8;
+ if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower())
{
- sub_8118664(5, gUnknown_845847C);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(5, gUnknown_845847C);
}
else
{
- data->field_4C[0] = gUnknown_203B058 | 0x40;
- sub_80F9E2C(data->field_4C);
+ data->playerSendBuffer[0] = sPlayerCurrActivity | IN_UNION_ROOM;
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 27;
}
}
@@ -2801,24 +2925,24 @@ static void sub_81186E0(u8 taskId)
data->state = 36;
break;
case 27:
- sub_811B0A4(data);
+ PollPartnerYesNoResponse(data);
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- id = sub_811A9FC(data->field_4C[0] & 0x3F);
- if (PrintOnTextbox(&data->textState, gUnknown_84580F4[playerGender][id]))
+ id = GetResponseIdx_InviteToURoomActivity(data->playerSendBuffer[0] & 0x3F);
+ if (PrintOnTextbox(&data->textState, gResponseToURoomActivityInviteStringPtrs[playerGender][id]))
{
taskData[3] = 0;
data->state = 29;
}
break;
case 32:
- sub_800AAC0();
+ Link_TryStartSend5FFF();
data->state = 36;
break;
case 31:
- data->field_4C[0] = 0x44;
- data->field_4C[1] = sUnionRoomTrade.species;
- data->field_4C[2] = sUnionRoomTrade.level;
- sub_80F9E2C(data->field_4C);
+ data->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM;
+ data->playerSendBuffer[1] = sUnionRoomTrade.species;
+ data->playerSendBuffer[2] = sUnionRoomTrade.level;
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 29;
break;
case 29:
@@ -2829,12 +2953,12 @@ static void sub_81186E0(u8 taskId)
}
else
{
- sub_811B0A4(data);
- if (data->field_98 == 0x51)
+ PollPartnerYesNoResponse(data);
+ if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{
- if (gUnknown_203B058 == 8)
+ if (sPlayerCurrActivity == ACTIVITY_CARD)
{
- sub_811B31C(gStringVar4, data, FALSE);
+ ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_CHILD);
data->state = 40;
}
else
@@ -2842,27 +2966,27 @@ static void sub_81186E0(u8 taskId)
data->state = 13;
}
}
- else if (data->field_98 == 0x52)
+ else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
data->state = 32;
- sub_811AE68(gStringVar4, gUnknown_203B058 | 0x40, gLinkPlayers[0].gender);
- gUnknown_203B058 = 0;
+ GetURoomActivityRejectMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender);
+ sPlayerCurrActivity = 0;
}
}
break;
case 7:
- id = sub_811AA24(&data->field_0->arr[taskData[1]]);
+ id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]);
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_8118664(6, gUnknown_8457B04[id][playerGender]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(6, gURText_FriendPromptsForActivity[id][playerGender]);
break;
case 40:
if (PrintOnTextbox(&data->textState, gStringVar4))
{
data->state = 41;
- sub_800AB9C();
- data->field_98 = 0;
- data->field_9A[0] = 0;
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
+ data->partnerYesNoResponse = 0;
+ data->recvActivityRequest[0] = 0;
}
break;
case 41:
@@ -2882,13 +3006,13 @@ static void sub_81186E0(u8 taskId)
}
break;
case 19:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
CopyBgTilemapBufferToVram(0);
- gUnknown_203B058 = 0x45;
- sub_80FB008(0x45, 0, 1);
- sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058);
+ sPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM;
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE);
+ sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity);
data->field_12 = taskData[1];
data->state = 20;
taskData[3] = 0;
@@ -2896,7 +3020,7 @@ static void sub_81186E0(u8 taskId)
case 1:
case -1:
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_811868C(gUnknown_8458548[playerGender]);
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458548[playerGender]);
break;
}
break;
@@ -2908,20 +3032,20 @@ static void sub_81186E0(u8 taskId)
}
break;
case 21:
- switch (sub_80FB9F4())
+ switch (RfuGetErrorStatus())
{
case 4:
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
data->state = 4;
break;
case 1:
case 2:
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_80FB008(0x54, 0, 1);
- if (sub_80FBB0C() == TRUE)
- sub_811868C(gUnknown_84585E8[playerGender]);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_84585E8[playerGender]);
else
- sub_8118664(30, gUnknown_84585E8[playerGender]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_84585E8[playerGender]);
break;
case 3:
data->state = 22;
@@ -2930,14 +3054,14 @@ static void sub_81186E0(u8 taskId)
taskData[3]++;
break;
case 22:
- if (sub_80FBA00())
+ if (RfuIsErrorStatus1or2())
{
playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0);
- sub_80FB008(0x54, 0, 1);
- if (sub_80FBB0C() == TRUE)
- sub_811868C(gUnknown_84585E8[playerGender]);
+ UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE);
+ if (IsUnionRoomListenTaskActive() == TRUE)
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_84585E8[playerGender]);
else
- sub_8118664(30, gUnknown_84585E8[playerGender]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_84585E8[playerGender]);
}
if (gReceivedRemoteLinkPlayers != 0)
data->state = 16;
@@ -2946,24 +3070,24 @@ static void sub_81186E0(u8 taskId)
PlaySE(SE_PINPON);
sub_80F8FA0();
data->state = 12;
- data->field_9A[0] = 0;
+ data->recvActivityRequest[0] = 0;
break;
case 12:
- if (sub_80FBA00())
+ if (RfuIsErrorStatus1or2())
{
- sub_811B258(FALSE);
+ HandleCancelTrade(FALSE);
data->state = 2;
}
else if (gReceivedRemoteLinkPlayers != 0)
{
- sub_8117594(gBlockSendBuffer, TRUE);
- CreateTask(sub_8117280, 5);
+ CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE);
+ CreateTask(Task_ExchangeCards, 5);
data->state = 39;
}
break;
case 39:
- sub_8119904(data);
- if (!FuncIsActiveTask(sub_8117280))
+ ReceiveUnionRoomActivityPacket(data);
+ if (!FuncIsActiveTask(Task_ExchangeCards))
{
data->state = 33;
StringCopy(gStringVar1, gLinkPlayers[1].name);
@@ -2972,13 +3096,13 @@ static void sub_81186E0(u8 taskId)
}
break;
case 33:
- sub_8119904(data);
+ ReceiveUnionRoomActivityPacket(data);
if (PrintOnTextbox(&data->textState, gStringVar4))
data->state = 34;
break;
case 34:
- sub_8119904(data);
- if (sub_8119944(data) && JOY_NEW(B_BUTTON))
+ ReceiveUnionRoomActivityPacket(data);
+ if (UnionRoom_HandleContactFromOtherPlayer(data) && JOY_NEW(B_BUTTON))
{
sub_80FBD6C(1);
StringCopy(gStringVar4, gUnknown_8457E60);
@@ -2986,80 +3110,82 @@ static void sub_81186E0(u8 taskId)
}
break;
case 35:
- sub_8118664(9, gStringVar4);
+ // You said yes
+ UnionRoom_ScheduleFieldMessageWithFollowupState(9, gStringVar4);
break;
case 9:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
- data->field_4C[0] = 0x51;
- if (gUnknown_203B058 == 0x45)
- sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 0);
+ data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
+ if (sPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM))
+ UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), FALSE);
else
- sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 1);
+ UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), TRUE);
data->field_8->arr[0].field_1B = 0;
taskData[3] = 0;
- if (gUnknown_203B058 == 0x41)
+ if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM))
{
if (!HasAtLeastTwoMonsOfLevel30OrLower())
{
- data->field_4C[0] = 0x52;
- sub_80F9E2C(data->field_4C);
+ data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 10;
StringCopy(gStringVar4, gUnknown_84584C0);
}
else
{
- sub_80F9E2C(data->field_4C);
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 13;
}
}
- else if (gUnknown_203B058 == 0x48)
+ else if (sPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM))
{
- sub_80F9E2C(data->field_4C);
- sub_811B31C(gStringVar4, data, 1);
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
+ ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_PARENT);
data->state = 40;
}
else
{
- sub_80F9E2C(data->field_4C);
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 13;
}
break;
case 1:
case -1:
- data->field_4C[0] = 0x52;
- sub_80F9E2C(data->field_4C);
+ data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
+ RfuPrepareSend0x2f00(data->playerSendBuffer);
data->state = 10;
- sub_81162E0(gStringVar4, gUnknown_203B058);
+ GetYouDeclinedTheOfferMessage(gStringVar4, sPlayerCurrActivity);
break;
}
break;
case 10:
- sub_800AAC0();
+ Link_TryStartSend5FFF();
data->state = 36;
break;
case 36:
+ // You said no
if (gReceivedRemoteLinkPlayers == 0)
{
- gUnknown_203B058 = 0x40;
- sub_8118664(0x25, gStringVar4);
- memset(data->field_4C, 0, sizeof(data->field_4C));
- data->field_9A[0] = 0;
- data->field_98 = 0;
+ sPlayerCurrActivity = IN_UNION_ROOM;
+ UnionRoom_ScheduleFieldMessageWithFollowupState(37, gStringVar4);
+ memset(data->playerSendBuffer, 0, sizeof(data->playerSendBuffer));
+ data->recvActivityRequest[0] = 0;
+ data->partnerYesNoResponse = 0;
}
break;
case 37:
data->state = 2;
- sub_811B258(FALSE);
+ HandleCancelTrade(FALSE);
break;
case 13:
- sub_811AECC(gStringVar4, gUnknown_203B058 | 0x40);
- sub_8118664(14, gStringVar4);
+ GetURoomActivityStartMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4);
break;
case 14:
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
data->state = 15;
break;
case 15:
@@ -3072,7 +3198,7 @@ static void sub_81186E0(u8 taskId)
Free(data->field_C);
Free(data->field_4);
DestroyTask(data->field_20);
- sub_811BB40(data->spriteIds);
+ DestroyGroupMemberObjects(data->spriteIds);
data->state = 17;
break;
case 17:
@@ -3082,30 +3208,30 @@ static void sub_81186E0(u8 taskId)
case 18:
if (!UpdatePaletteFade())
{
- sub_811BA78();
+ DeleteUnionObjWorkAndStopTask();
DestroyTask(taskId);
Free(sUnionRoomMain.uRoom);
- sub_81179A4();
+ CreateTask_StartActivity();
}
break;
case 42:
- if (sub_80F9800()->species == SPECIES_NONE)
+ if (GetHostRFUtgtGname()->species == SPECIES_NONE)
{
data->state = 43;
}
else
{
- if (sub_80F9800()->species == SPECIES_EGG)
+ if (GetHostRFUtgtGname()->species == SPECIES_EGG)
{
StringCopy(gStringVar4, gUnknown_8458DE8);
}
else
{
- StringCopy(gStringVar1, gSpeciesNames[sub_80F9800()->species]);
- ConvertIntToDecimalStringN(gStringVar2, sub_80F9800()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]);
+ ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC);
}
- sub_8118664(44, gStringVar4);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(44, gStringVar4);
}
break;
case 43:
@@ -3113,23 +3239,23 @@ static void sub_81186E0(u8 taskId)
data->state = 47;
break;
case 47:
- var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E34, &gUnknown_8456E54);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TradeBoardRegisterInfoExit, &sListMenuTemplate_TradeBoardRegisterInfoExit);
if (var5 != -1)
{
if (var5 == -2 || var5 == 3)
{
data->state = 4;
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
}
else
{
switch (var5)
{
case 1: // REGISTER
- sub_8118664(53, gUnknown_8458D1C);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(53, gUnknown_8458D1C);
break;
case 2: // INFO
- sub_8118664(47, gUnknown_8458B44);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(47, gUnknown_8458B44);
break;
}
}
@@ -3149,7 +3275,7 @@ static void sub_81186E0(u8 taskId)
}
break;
case 52:
- var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E6C, &gUnknown_8456F04);
+ var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TypeNames, &sListMenuTemplate_TypeNames);
if (var5 != -1)
{
switch (var5)
@@ -3157,8 +3283,8 @@ static void sub_81186E0(u8 taskId)
case -2:
case 18:
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_80FAFA0(0, 0, 0);
- sub_811868C(gUnknown_8458D54);
+ RfuUpdatePlayerGnameStateAndSend(0, 0, 0);
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D54);
break;
default:
sUnionRoomTrade.type = var5;
@@ -3168,18 +3294,18 @@ static void sub_81186E0(u8 taskId)
}
break;
case 55:
- sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_811868C(gUnknown_8458D78);
+ RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D78);
break;
case 44:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
data->state = 56;
break;
case 1:
case -1:
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
data->state = 4;
break;
}
@@ -3187,9 +3313,9 @@ static void sub_81186E0(u8 taskId)
case 56:
if (PrintOnTextbox(&data->textState, gUnknown_8458E10))
{
- sub_80FAFA0(0, 0, 0);
+ RfuUpdatePlayerGnameStateAndSend(0, 0, 0);
ResetUnionRoomTrade(&sUnionRoomTrade);
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
data->state = 4;
}
break;
@@ -3198,38 +3324,38 @@ static void sub_81186E0(u8 taskId)
data->state = 46;
break;
case 46:
- sub_811A3F8();
+ UR_BlankBg0();
data->state = 48;
break;
case 48:
- var5 = sub_811A2EC(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_8456F24, &gUnknown_8456F7C, data->field_0);
+ var5 = TradeBoardMenuHandler(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardListMenuId, &data->tradeBoardDetailsWindowId, &gUnknown_8456F24, &sTradeBoardListMenuTemplate, data->field_0);
if (var5 != -1)
{
switch (var5)
{
case -2:
case 8:
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
DestroyHelpMessageWindow_();
data->state = 4;
break;
default:
- switch (sub_811ADD0(data->field_0->arr[var5].unk.gname.type, data->field_0->arr[var5].unk.gname.species))
+ switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].gname_uname.gname.type, data->field_0->arr[var5].gname_uname.gname.species))
{
- case 0:
+ case UR_TRADE_MATCH:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
- sub_8118664(49, gUnknown_8458E70);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(49, gUnknown_8458E70);
taskData[1] = var5;
break;
- case 1:
+ case UR_TRADE_NOTYPE:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
- StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]);
- sub_8118664(46, gUnknown_8458ED0);
+ StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(46, gUnknown_8458ED0);
break;
- case 2:
+ case UR_TRADE_NOEGG:
IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]);
- StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]);
- sub_8118664(46, gUnknown_8458F04);
+ StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]);
+ UnionRoom_ScheduleFieldMessageWithFollowupState(46, gUnknown_8458F04);
break;
}
break;
@@ -3237,14 +3363,14 @@ static void sub_81186E0(u8 taskId)
}
break;
case 49:
- switch (sub_811A14C(&data->textState, FALSE))
+ switch (UnionRoomHandleYesNo(&data->textState, FALSE))
{
case 0:
data->state = 50;
break;
case -1:
case 1:
- sub_811B258(TRUE);
+ HandleCancelTrade(TRUE);
data->state = 4;
break;
}
@@ -3253,27 +3379,27 @@ static void sub_81186E0(u8 taskId)
if (PrintOnTextbox(&data->textState, gUnknown_8458D1C))
{
sUnionRoomTrade.field_0 = 2;
- memcpy(&gUnknown_203B064, &data->field_0->arr[taskData[1]].unk.gname.unk_00, sizeof(gUnknown_203B064));
- gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.gname.type;
- gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.gname.species;
+ memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub));
+ gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.type;
+ gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.species;
gFieldCallback = sub_807DCE4;
ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField);
- sub_81186B0(data);
+ BackUpURoomField0ToDecompressionBuffer(data);
sUnionRoomTrade.field_8 = taskData[1];
}
break;
case 51:
- gUnknown_203B058 = 0x44;
- sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, 0x44);
+ sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM;
+ sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM);
IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]);
- sub_811A0B4(gUnknown_8457A34[2]);
+ UR_PrintFieldMessage(gURText_PleaseWaitMsgs[2]);
data->state = 25;
break;
case 26:
if (PrintOnTextbox(&data->textState, gStringVar4))
{
- sub_811B258(TRUE);
- sub_811C028(taskData[0], taskData[1], data->field_0);
+ HandleCancelTrade(TRUE);
+ UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0);
data->state = 4;
}
break;
@@ -3290,38 +3416,38 @@ void var_800D_set_xB(void)
gSpecialVar_Result = 11;
}
-static void sub_8119904(struct UnkStruct_URoom * arg0)
+static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uroom)
{
- if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00)
+ if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == RFU_COMMAND_0x2f00)
{
- arg0->field_9A[0] = gRecvCmds[1][1];
- if (gRecvCmds[1][1] == 0x44)
+ uroom->recvActivityRequest[0] = gRecvCmds[1][1];
+ if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM))
{
- arg0->field_9A[1] = gRecvCmds[1][2];
- arg0->field_9A[2] = gRecvCmds[1][3];
+ uroom->recvActivityRequest[1] = gRecvCmds[1][2];
+ uroom->recvActivityRequest[2] = gRecvCmds[1][3];
}
}
}
-static bool32 sub_8119944(struct UnkStruct_URoom * arg0)
+static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uroom)
{
- if (arg0->field_9A[0] != 0)
+ if (uroom->recvActivityRequest[0] != 0)
{
- s32 var = sub_811AF6C(gStringVar4, gLinkPlayers[1].gender, &arg0->field_9A[0], arg0);
+ s32 var = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom);
if (var == 0)
{
return TRUE;
}
else if (var == 1)
{
- arg0->state = 35;
- gUnknown_203B058 = arg0->field_9A[0];
+ uroom->state = 35;
+ sPlayerCurrActivity = uroom->recvActivityRequest[0];
return FALSE;
}
else if (var == 2)
{
- arg0->state = 36;
- sub_800AAC0();
+ uroom->state = 36;
+ Link_TryStartSend5FFF();
return FALSE;
}
}
@@ -3336,7 +3462,7 @@ void InitUnionRoom(void)
sUnionRoomPlayerName[0] = EOS;
if (gQuestLogState == 2 || gQuestLogState == 3)
return;
- CreateTask(sub_81199FC, 0);
+ CreateTask(Task_InitUnionRoom, 0);
sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match.
sUnionRoomMain.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom));
sURoom = sUnionRoomMain.uRoom;
@@ -3347,7 +3473,7 @@ void InitUnionRoom(void)
sUnionRoomPlayerName[0] = EOS;
}
-static void sub_81199FC(u8 taskId)
+static void Task_InitUnionRoom(u8 taskId)
{
s32 i;
u8 text[32];
@@ -3359,38 +3485,38 @@ static void sub_81199FC(u8 taskId)
structPtr->state = 1;
break;
case 1:
- SetHostRFUtgtGname(0xC, 0, 0);
- sub_800B1F4();
+ SetHostRFUtgtGname(ACTIVITY_SEARCH, 0, 0);
+ SetWirelessCommType1();
OpenLink();
- sub_80FBC00();
- sub_80FB128(1);
+ InitializeRfuLinkManager_EnterUnionRoom();
+ sub_80FB128(TRUE);
structPtr->state = 2;
break;
case 2:
structPtr->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- sub_811A650(structPtr->field_4->arr, 4);
+ BlankUnkStruct_x1CArray(structPtr->field_4->arr, 4);
structPtr->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C));
- sub_811A650(structPtr->field_C->arr, 4);
- structPtr->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20));
- sub_811A5E4(structPtr->field_0->arr, 8);
+ BlankUnkStruct_x1CArray(structPtr->field_C->arr, 4);
+ structPtr->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20));
+ BlankUnkStruct_x20Array(structPtr->field_0->arr, UROOM_MAX_GROUP_COUNT);
structPtr->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20));
- sub_811A5E4(&structPtr->field_8->arr[0], 1);
- structPtr->field_20 = sub_8119E84(structPtr->field_C, structPtr->field_4, 10);
+ BlankUnkStruct_x20Array(&structPtr->field_8->arr[0], 1);
+ structPtr->field_20 = CreateTask_SearchForChildOrParent(structPtr->field_C, structPtr->field_4, LINK_GROUP_UNION_ROOM_INIT);
structPtr->state = 3;
break;
case 3:
- switch (sub_8119B94())
+ switch (HandlePlayerListUpdate())
{
case 1:
case 2:
if (sUnionRoomPlayerName[0] == EOS)
{
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
- if (structPtr->field_0->arr[i].field_1A_0 == 1)
+ if (structPtr->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
IntlConvPartnerUname(text, structPtr->field_0->arr[i]);
- if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].unk.gname.unk_00.playerTrainerId), text))
+ if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].gname_uname.gname.unk_00.playerTrainerId), text))
{
StringCopy(sUnionRoomPlayerName, text);
break;
@@ -3410,7 +3536,7 @@ static void sub_81199FC(u8 taskId)
Free(structPtr->field_4);
DestroyTask(structPtr->field_20);
Free(sUnionRoomMain.uRoom);
- sub_80F8DC0();
+ LinkRfu_Shutdown();
DestroyTask(taskId);
break;
}
@@ -3430,36 +3556,41 @@ bool16 BufferUnionRoomPlayerName(void)
}
}
-static u8 sub_8119B94(void)
+static u8 HandlePlayerListUpdate(void)
{
s32 i;
u8 j;
struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom;
s32 r7 = 0;
- for (i = 0; i < 4; i++)
+ // If someone new joined, register them in field_8
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_811A694(&structPtr->field_C->arr[i].unk0, &gUnknown_8457034) == TRUE)
+ if (AreGnameUnameDifferent(&structPtr->field_C->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy) == TRUE)
{
- structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0;
+ structPtr->field_8->arr[0].gname_uname = structPtr->field_C->arr[i].gname_uname;
structPtr->field_8->arr[0].field_18 = 0;
- structPtr->field_8->arr[0].field_1A_0 = 1;
+ structPtr->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
structPtr->field_8->arr[0].field_1B = 1;
return 4;
}
}
- for (j = 0; j < 8; j++)
+
+ // Handle changes to existing player statuses
+ for (j = 0; j < UROOM_MAX_GROUP_COUNT; j++)
{
- if (structPtr->field_0->arr[j].field_1A_0 != 0)
+ if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE)
{
- i = sub_811A748(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]);
+ i = Findx20Inx1CArray(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]);
if (i != 0xFF)
{
- if (structPtr->field_0->arr[j].field_1A_0 == 1)
+ if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (sub_811A6DC(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0))
+ // New join in queue
+ if (AreUnionRoomPlayerGnamesDifferent(&structPtr->field_0->arr[j].gname_uname, &structPtr->field_4->arr[i].gname_uname))
{
- structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0;
+ // Just joined, copy their names
+ structPtr->field_0->arr[j].gname_uname = structPtr->field_4->arr[i].gname_uname;
structPtr->field_0->arr[j].field_1B = 0x40;
r7 = 1;
}
@@ -3472,116 +3603,121 @@ static u8 sub_8119B94(void)
}
else
{
- structPtr->field_0->arr[j].field_1A_0 = 1;
+ // New join, queue them
+ structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
structPtr->field_0->arr[j].field_1B = 0;
r7 = 2;
}
structPtr->field_0->arr[j].field_18 = 0;
}
- else if (structPtr->field_0->arr[j].field_1A_0 != 2)
+ else if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT)
{
+ // Person may have disconnected. Give them 10 seconds.
structPtr->field_0->arr[j].field_18++;
if (structPtr->field_0->arr[j].field_18 >= 600)
{
- structPtr->field_0->arr[j].field_1A_0 = 2;
+ structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT;
r7 = 2;
}
}
- else if (structPtr->field_0->arr[j].field_1A_0 == 2)
+ else if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
{
+ // Person dropped. Wait 15 seconds, then remove them.
structPtr->field_0->arr[j].field_18++;
if (structPtr->field_0->arr[j].field_18 >= 900)
{
- sub_811A5E4(&structPtr->field_0->arr[j], 1);
+ BlankUnkStruct_x20Array(&structPtr->field_0->arr[j], 1);
}
}
}
}
- for (i = 0; i < 4; i++)
+
+ // Update the players list
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_811A798(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], 8) != 0xFF)
+ if (Appendx1Ctox20(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], UROOM_MAX_GROUP_COUNT) != 0xFF)
r7 = 1;
}
return r7;
}
-static void sub_8119D34(u8 taskId)
+static void Task_SearchForChildOrParent(u8 taskId)
{
s32 i, j;
- struct UnkStruct_Shared sp0;
+ struct UnionGnameUnamePair gname_uname;
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- bool8 r4;
+ bool8 parent_child;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- r4 = sub_80FCC3C(&sp0.gname, sp0.playerName, i);
- if (!sub_8116F28(sp0.gname.unk_0a_0, gTasks[taskId].data[4]))
+ parent_child = LinkRfu_GetNameIfCompatible(&gname_uname.gname, gname_uname.uname, i);
+ if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4]))
{
- sp0 = gUnknown_8457034;
+ gname_uname = sUnionGnameUnamePair_Dummy;
}
- if (sp0.gname.unk_00.unk_00_0 == 1)
+ if (gname_uname.gname.unk_00.language == LANGUAGE_JAPANESE)
{
- sp0 = gUnknown_8457034;
+ gname_uname = sUnionGnameUnamePair_Dummy;
}
- if (!r4)
+ if (parent_child == MODE_CHILD)
{
for (j = 0; j < i; j++)
{
- if (!sub_811A694(&ptr[1]->arr[j].unk0, &sp0))
+ if (!AreGnameUnameDifferent(&ptr[1]->arr[j].gname_uname, &gname_uname))
{
- sp0 = gUnknown_8457034;
+ gname_uname = sUnionGnameUnamePair_Dummy;
}
}
- ptr[1]->arr[i].unk0 = sp0;
- ptr[1]->arr[i].unk18 = sub_811A694(&ptr[1]->arr[i].unk0, &gUnknown_8457034);
+ ptr[1]->arr[i].gname_uname = gname_uname;
+ ptr[1]->arr[i].active = AreGnameUnameDifferent(&ptr[1]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy);
}
else
{
- ptr[0]->arr[i].unk0 = sp0;
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].gname_uname = gname_uname;
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy);
}
}
}
-static u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2)
+static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4_parent, struct UnkStruct_Main4 * main4_child, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8119D34, 0);
+ u8 taskId = CreateTask(Task_SearchForChildOrParent, 0);
struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data;
- data[0] = a0;
- data[1] = a1;
- gTasks[taskId].data[4] = a2;
+ data[0] = main4_parent;
+ data[1] = main4_child;
+ gTasks[taskId].data[4] = linkGroup;
return taskId;
}
-static void sub_8119EB8(u8 taskId)
+static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId)
{
s32 i, j;
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- sub_80FCC3C(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i);
- if (!sub_8116F28(ptr[0]->arr[i].unk0.gname.unk_0a_0, gTasks[taskId].data[2]))
+ LinkRfu_GetNameIfCompatible(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i);
+ if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2]))
{
- ptr[0]->arr[i].unk0 = gUnknown_8457034;
+ ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy;
}
for (j = 0; j < i; j++)
{
- if (!sub_811A694(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0))
+ if (!AreGnameUnameDifferent(&ptr[0]->arr[j].gname_uname, &ptr[0]->arr[i].gname_uname))
{
- ptr[0]->arr[i].unk0 = gUnknown_8457034;
+ ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy;
}
}
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy);
}
}
-static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1)
+static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup)
{
- if (arg1 == 7)
+ if (linkGroup == LINK_GROUP_WONDER_CARD)
{
- if (!arg0->unk_00.unk_00_5)
+ if (!gname->unk_00.hasCard)
{
return FALSE;
}
@@ -3590,9 +3726,9 @@ static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1)
return TRUE;
}
}
- else if (arg1 == 8)
+ else if (linkGroup == LINK_GROUP_WONDER_NEWS)
{
- if (!arg0->unk_00.unk_00_4)
+ if (!gname->unk_00.hasNews)
{
return FALSE;
}
@@ -3607,40 +3743,40 @@ static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1)
}
}
-static void sub_8119FD8(u8 taskId)
+static void Task_ListenForPartnersWithSerial7F7D(u8 taskId)
{
s32 i;
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (sub_80FCCF4(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i))
+ if (LinkRfu_GetNameIfSerial7F7D(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i))
{
- sub_8119FB0(&ptr[0]->arr[i].unk0.gname, gTasks[taskId].data[2]);
+ GetGnameWonderFlagByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]);
}
- ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034);
+ ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy);
}
}
-static u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1)
+static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8119EB8, 0);
+ u8 taskId = CreateTask(Task_ListenForPartnersWithCompatibleSerialNos, 0);
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- ptr[0] = a0;
- gTasks[taskId].data[2] = a1;
+ ptr[0] = main4;
+ gTasks[taskId].data[2] = linkGroup;
return taskId;
}
-static u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1)
+static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup)
{
- u8 taskId = CreateTask(sub_8119FD8, 0);
+ u8 taskId = CreateTask(Task_ListenForPartnersWithSerial7F7D, 0);
struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data;
- ptr[0] = a0;
- gTasks[taskId].data[2] = a1;
+ ptr[0] = main4;
+ gTasks[taskId].data[2] = linkGroup;
return taskId;
}
-static bool32 sub_811A0B4(const u8 *src)
+static bool32 UR_PrintFieldMessage(const u8 *src)
{
LoadStdWindowFrameGfx();
DrawDialogueFrame(0, 1);
@@ -3649,7 +3785,7 @@ static bool32 sub_811A0B4(const u8 *src)
return FALSE;
}
-static bool32 sub_811A0E0(void)
+static bool32 UR_RunTextPrinters_CheckPrinter0Active(void)
{
if (!RunTextPrinters_CheckPrinter0Active())
{
@@ -3683,31 +3819,31 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str)
return FALSE;
}
-static s8 sub_811A14C(u8 *arg0, bool32 arg1)
+static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw)
{
s8 r1;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- if (arg1)
+ if (no_draw)
{
return -3;
}
DisplayYesNoMenuDefaultYes();
- (*arg0)++;
+ (*state_p)++;
break;
case 1:
- if (arg1)
+ if (no_draw)
{
DestroyYesNoMenu();
- *arg0 = 0;
+ *state_p = 0;
return -3;
}
r1 = Menu_ProcessInputNoWrapClearOnChoose();
if (r1 == -1 || r1 == 0 || r1 == 1)
{
- *arg0 = 0;
+ *state_p = 0;
return r1;
}
break;
@@ -3715,54 +3851,54 @@ static s8 sub_811A14C(u8 *arg0, bool32 arg1)
return -2;
}
-static u8 sub_811A1AC(const struct WindowTemplate * template)
+static u8 CreateTradeBoardWindow(const struct WindowTemplate * template)
{
u8 windowId = AddWindow(template);
DrawStdWindowFrame(windowId, FALSE);
FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
- sub_811A444(windowId, 0, gUnknown_8459378, 8, 1, 6);
+ UR_AddTextPrinterParameterized(windowId, 0, gUnknown_8459378, 8, 1, UR_COLOR_DN5_DN6_LTB);
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 2);
return windowId;
}
-static void sub_811A1FC(u8 windowId)
+static void DeleteTradeBoardWindow(u8 windowId)
{
ClearStdWindowAndFrame(windowId, TRUE);
RemoveWindow(windowId);
}
-static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate)
+static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate)
{
- s32 r1, r8;
+ s32 input;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- *arg1 = AddWindow(winTemplate);
- DrawStdWindowFrame(*arg1, FALSE);
+ *win_id_p = AddWindow(winTemplate);
+ DrawStdWindowFrame(*win_id_p, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *win_id_p;
+ *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ CopyWindowToVram(*win_id_p, TRUE);
+ (*state_p)++;
break;
case 1:
- r8 = ListMenu_ProcessInput(*arg2);
+ input = ListMenu_ProcessInput(*list_menu_id_p);
if (JOY_NEW(A_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
- return r8;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ *state_p = 0;
+ return input;
}
else if (JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ *state_p = 0;
return -2;
}
break;
@@ -3771,46 +3907,46 @@ static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate
return -1;
}
-static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6)
+static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders)
{
s32 input;
s32 r4;
- switch (*arg0)
+ switch (*state_p)
{
case 0:
- *arg3 = sub_811A1AC(&gUnknown_8456F1C);
- *arg1 = AddWindow(winTemplate);
- DrawStdWindowFrame(*arg1, FALSE);
+ *trade_board_win_id_p = CreateTradeBoardWindow(&sTradeBoardWindowTemplate);
+ *win_id_p = AddWindow(winTemplate);
+ DrawStdWindowFrame(*win_id_p, FALSE);
gMultiuseListMenuTemplate = *menuTemplate;
- gMultiuseListMenuTemplate.windowId = *arg1;
- *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
- CopyWindowToVram(*arg1, TRUE);
- (*arg0)++;
+ gMultiuseListMenuTemplate.windowId = *win_id_p;
+ *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1);
+ CopyWindowToVram(*win_id_p, TRUE);
+ (*state_p)++;
break;
case 1:
- input = ListMenu_ProcessInput(*arg2);
+ input = ListMenu_ProcessInput(*list_menu_id_p);
if (JOY_NEW(A_BUTTON | B_BUTTON))
{
- if (input == 8 || JOY_NEW(B_BUTTON))
+ if (input == UROOM_MAX_GROUP_COUNT || JOY_NEW(B_BUTTON))
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- sub_811A1FC(*arg3);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ DeleteTradeBoardWindow(*trade_board_win_id_p);
+ *state_p = 0;
return -2;
}
else
{
- r4 = sub_811AD7C(arg6->arr, input);
+ r4 = GetIndexOfNthTradeBoardOffer(traders->arr, input);
if (r4 >= 0)
{
- DestroyListMenuTask(*arg2, NULL, NULL);
- ClearStdWindowAndFrame(*arg1, TRUE);
- RemoveWindow(*arg1);
- sub_811A1FC(*arg3);
- *arg0 = 0;
+ DestroyListMenuTask(*list_menu_id_p, NULL, NULL);
+ ClearStdWindowAndFrame(*win_id_p, TRUE);
+ RemoveWindow(*win_id_p);
+ DeleteTradeBoardWindow(*trade_board_win_id_p);
+ *state_p = 0;
return r4;
}
else
@@ -3825,20 +3961,20 @@ static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct Wind
return -1;
}
-static void sub_811A3F8(void)
+static void UR_BlankBg0(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0);
CopyBgTilemapBufferToVram(0);
}
-static void sub_811A41C(void)
+static void JoinGroup_BlankBg0AndEnableScriptContexts(void)
{
FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0);
CopyBgTilemapBufferToVram(0);
EnableBothScriptContexts();
}
-static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
+static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx)
{
struct TextPrinterTemplate printerTemplate;
@@ -3854,100 +3990,100 @@ static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 co
gTextFlags.useAlternateDownArrow = FALSE;
switch (colorIdx)
{
- case 0:
+ case UR_COLOR_DKE_WHT_LTE:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 2;
- printerTemplate.bgColor = 1;
- printerTemplate.shadowColor = 3;
+ printerTemplate.fgColor = TEXT_COLOR_DARK_GREY;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
break;
- case 1:
+ case UR_COLOR_RED_WHT_LTR:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 4;
- printerTemplate.bgColor = 1;
- printerTemplate.shadowColor = 5;
+ printerTemplate.fgColor = TEXT_COLOR_RED;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_RED;
break;
- case 2:
+ case UR_COLOR_GRN_WHT_LTG:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 6;
- printerTemplate.bgColor = 1;
- printerTemplate.shadowColor = 7;
+ printerTemplate.fgColor = TEXT_COLOR_GREEN;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREEN;
break;
- case 3:
+ case UR_COLOR_WHT_WHT_LTE:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 1;
- printerTemplate.bgColor = 1;
- printerTemplate.shadowColor = 3;
+ printerTemplate.fgColor = TEXT_COLOR_WHITE;
+ printerTemplate.bgColor = TEXT_COLOR_WHITE;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
break;
- case 4:
+ case UR_COLOR_WHT_DKE_LTE:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 1;
- printerTemplate.bgColor = 2;
- printerTemplate.shadowColor = 3;
+ printerTemplate.fgColor = TEXT_COLOR_WHITE;
+ printerTemplate.bgColor = TEXT_COLOR_DARK_GREY;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY;
break;
- case 5:
+ case UR_COLOR_GRN_DN6_LTB:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 7;
- printerTemplate.bgColor = 15;
- printerTemplate.shadowColor = 9;
+ printerTemplate.fgColor = TEXT_COLOR_LIGHT_GREEN;
+ printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE;
break;
- case 6:
+ case UR_COLOR_DN5_DN6_LTB:
printerTemplate.letterSpacing = 0;
printerTemplate.lineSpacing = 0;
- printerTemplate.fgColor = 14;
- printerTemplate.bgColor = 15;
- printerTemplate.shadowColor = 9;
+ printerTemplate.fgColor = TEXT_DYNAMIC_COLOR_5;
+ printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6;
+ printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE;
break;
}
AddTextPrinter(&printerTemplate, 0xFF, NULL);
}
-static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count)
+static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20arr, u8 count)
{
s32 i;
for (i = 0; i < count; i++)
{
- arg0[i].unk = gUnknown_8457034;
- arg0[i].field_18 = 0xFF;
- arg0[i].field_1A_0 = 0;
- arg0[i].field_1A_1 = 0;
- arg0[i].field_1B = 0;
+ x20arr[i].gname_uname = sUnionGnameUnamePair_Dummy;
+ x20arr[i].field_18 = 0xFF;
+ x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE;
+ x20arr[i].field_1A_1 = FALSE;
+ x20arr[i].field_1B = 0;
}
}
-static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count)
+static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1Carr, u8 count)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- arg0[i].unk0 = gUnknown_8457034;
- arg0[i].unk18 = 0;
+ x1Carr[i].gname_uname = sUnionGnameUnamePair_Dummy;
+ x1Carr[i].active = FALSE;
}
}
-static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1)
+static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * left, const struct UnionGnameUnamePair * right)
{
s32 i;
for (i = 0; i < 2; i++)
{
- if (arg0->gname.unk_00.playerTrainerId[i] != arg1->gname.unk_00.playerTrainerId[i])
+ if (left->gname.unk_00.playerTrainerId[i] != right->gname.unk_00.playerTrainerId[i])
{
return TRUE;
}
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < RFU_USER_NAME_LENGTH; i++)
{
- if (arg0->playerName[i] != arg1->playerName[i])
+ if (left->uname[i] != right->uname[i])
{
return TRUE;
}
@@ -3956,34 +4092,34 @@ static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_
return FALSE;
}
-static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1)
+static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * left, struct UnionGnameUnamePair * right)
{
s32 i;
- if (arg0->gname.unk_0a_0 != arg1->gname.unk_0a_0)
+ if (left->gname.activity != right->gname.activity)
{
return TRUE;
}
- if (arg0->gname.unk_0a_7 != arg1->gname.unk_0a_7)
+ if (left->gname.started != right->gname.started)
{
return TRUE;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg0->gname.unk_04[i] != arg1->gname.unk_04[i])
+ if (left->gname.child_sprite_gender[i] != right->gname.child_sprite_gender[i])
{
return TRUE;
}
}
- if (arg0->gname.species != arg1->gname.species)
+ if (left->gname.species != right->gname.species)
{
return TRUE;
}
- if (arg0->gname.type != arg1->gname.type)
+ if (left->gname.type != right->gname.type)
{
return TRUE;
}
@@ -3991,38 +4127,38 @@ static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Share
return FALSE;
}
-static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1)
+static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr)
{
u8 result = 0xFF;
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg1[i].unk18 && !sub_811A694(&arg0->unk, &arg1[i].unk0))
+ if (x1Carr[i].active && !AreGnameUnameDifferent(&x20->gname_uname, &x1Carr[i].gname_uname))
{
result = i;
- arg1[i].unk18 = FALSE;
+ x1Carr[i].active = FALSE;
}
}
return result;
}
-static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2)
+static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count)
{
s32 i;
- if (arg1->unk18)
+ if (x1C->active)
{
- for (i = 0; i < arg2; i++)
+ for (i = 0; i < count; i++)
{
- if (arg0[i].field_1A_0 == 0)
+ if (x20arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE)
{
- arg0[i].unk = arg1->unk0;
- arg0[i].field_18 = 0;
- arg0[i].field_1A_0 = 1;
- arg0[i].field_1B = 64;
- arg1->unk18 = FALSE;
+ x20arr[i].gname_uname = x1C->gname_uname;
+ x20arr[i].field_18 = 0;
+ x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN;
+ x20arr[i].field_1B = 0x40;
+ x1C->active = FALSE;
return i;
}
}
@@ -4031,47 +4167,47 @@ static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1,
return 0xFF;
}
-static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id)
+static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id)
{
- u8 r2;
- u8 sp0[6];
- u8 sp10[30];
+ u8 activity;
+ u8 id_str[6];
+ u8 uname[30];
ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, gUnknown_84571B0);
- sub_811A444(arg0, 0, gStringVar4, arg1, arg2, 0);
- arg1 += 18;
- r2 = arg3->unk.gname.unk_0a_0;
- if (arg3->field_1A_0 == 1 && !(r2 & 0x40))
+ UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, UR_COLOR_DKE_WHT_LTE);
+ x += 18;
+ activity = group->gname_uname.gname.activity;
+ if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM))
{
- IntlConvPartnerUname(sp10, *arg3);
- sub_811A444(arg0, 2, sp10, arg1, arg2, arg4);
- ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
+ IntlConvPartnerUname(uname, *group);
+ UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx);
+ ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, gUnknown_84571B4);
- StringAppend(gStringVar4, sp0);
- arg1 += 77;
- sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4);
+ StringAppend(gStringVar4, id_str);
+ x += 77;
+ UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx);
}
}
-static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id)
+static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id)
{
- u8 sp0[6];
- u8 sp10[30];
+ u8 id_str[6];
+ u8 uname[30];
- if (arg3->field_1A_0 == 1)
+ if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- IntlConvPartnerUname(sp10, *arg3);
- sub_811A444(windowId, 2, sp10, x, y, arg4);
- ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
+ IntlConvPartnerUname(uname, *group);
+ UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx);
+ ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
StringCopy(gStringVar4, gUnknown_84571B4);
- StringAppend(gStringVar4, sp0);
+ StringAppend(gStringVar4, id_str);
x += 71;
- sub_811A444(windowId, 0, gStringVar4, x, y, arg4);
+ UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx);
}
}
-static bool32 sub_811A9B8(void)
+static bool32 PlayerIsTalkingToUnionRoomAide(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
@@ -4091,72 +4227,77 @@ static bool32 sub_811A9B8(void)
return FALSE;
}
-static u32 sub_811A9FC(s32 arg0)
+static u32 GetResponseIdx_InviteToURoomActivity(s32 activity)
{
- switch (arg0)
+ switch (activity)
{
- case 5:
+ case ACTIVITY_CHAT:
return 1;
- case 4:
+ case ACTIVITY_TRADE:
return 2;
- case 8:
+ case ACTIVITY_CARD:
return 3;
- case 3:
+ case ACTIVITY_MLTBATTLE:
default:
return 0;
}
}
-static u32 sub_811AA24(struct UnkStruct_x20 * arg0)
+static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * x20)
{
u8 sp0[30];
- IntlConvPartnerUname(sp0, *arg0);
- return PlayerHasMetTrainerBefore(ReadAsU16(arg0->unk.gname.unk_00.playerTrainerId), sp0);
+ IntlConvPartnerUname(sp0, *x20);
+ return PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), sp0);
}
-static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender)
+static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender)
{
- bool32 r2;
+ bool32 metBefore;
- struct UnkStruct_x20 * r5 = &arg0->arr[arg2];
+ struct UnkStruct_x20 * x20 = &main0->arr[playerIdx];
- if (!r5->unk.gname.unk_0a_7 && arg1 == 0)
+ if (!x20->gname_uname.gname.started && overrideGender == 0)
{
- IntlConvPartnerUname(gStringVar1, *r5);
- r2 = PlayerHasMetTrainerBefore(ReadAsU16(r5->unk.gname.unk_00.playerTrainerId), gStringVar1);
- if (r5->unk.gname.unk_0a_0 == 0x45)
+ IntlConvPartnerUname(gStringVar1, *x20);
+ metBefore = PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), gStringVar1);
+ if (x20->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
{
- StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[metBefore][playerGender]);
return 2;
}
else
{
- sub_811A0B4(gUnknown_8457A34[r2]);
+ UR_PrintFieldMessage(gURText_PleaseWaitMsgs[metBefore]);
return 1;
}
}
else
{
- IntlConvPartnerUname(gStringVar1, *r5);
- if (arg1 != 0)
+ IntlConvPartnerUname(gStringVar1, *x20);
+ if (overrideGender != 0)
{
- playerGender = (r5->unk.gname.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1;
+ playerGender = (x20->gname_uname.gname.unk_00.playerTrainerId[overrideGender + 1] >> 3) & 1;
}
- switch (r5->unk.gname.unk_0a_0 & 0x3F)
+ switch (x20->gname_uname.gname.activity & 0x3F)
{
- case 1:
+ case ACTIVITY_BATTLE:
+ // Battling
StringExpandPlaceholders(gStringVar4, gUnknown_8458758[playerGender][Random() % 4]);
break;
- case 4:
+ case ACTIVITY_TRADE:
+ // Trading
StringExpandPlaceholders(gStringVar4, gUnknown_8458A78[playerGender][Random() % 2]);
break;
- case 5:
+ case ACTIVITY_CHAT:
+ // Chatting
StringExpandPlaceholders(gStringVar4, gUnknown_84588BC[playerGender][Random() % 4]);
break;
- case 8:
+ case ACTIVITY_CARD:
+ // Sharing cards
StringExpandPlaceholders(gStringVar4, gUnknown_84589AC[playerGender][Random() % 2]);
break;
default:
+ // Unknown
StringExpandPlaceholders(gStringVar4, gUnknown_8457F90);
break;
}
@@ -4169,73 +4310,73 @@ static void nullsub_92(u8 windowId, s32 itemId, u8 y)
}
-static void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
+static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
{
u8 level_t[4];
u16 species = gname->species;
u8 type = gname->type;
u8 level = gname->level;
- sub_811A444(windowId, 2, uname, 8, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, uname, 8, y, colorIdx);
if (species == SPECIES_EGG)
{
- sub_811A444(windowId, 2, gUnknown_8458FBC, 0x44, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, gText_EggTrade, 0x44, y, colorIdx);
}
else
{
BlitMoveInfoIcon(windowId, type + 1, 0x44, y);
- sub_811A444(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx);
ConvertIntToDecimalStringN(level_t, level, STR_CONV_MODE_LEFT_ALIGN, 3);
- sub_811A444(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx);
+ UR_AddTextPrinterParameterized(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx);
}
}
-static void sub_811ACA4(u8 windowId, s32 itemId, u8 y)
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y)
{
struct UnkStruct_Leader * leader = sUnionRoomMain.leader;
struct GFtgtGname * rfu;
s32 i, j;
- u8 uname[8];
+ u8 uname[RFU_USER_NAME_LENGTH];
- if (itemId == -3 && y == gUnknown_8456F7C.upText_Y)
+ if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y)
{
- rfu = sub_80F9800();
+ rfu = GetHostRFUtgtGname();
if (rfu->species != SPECIES_NONE)
{
- sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
+ TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5);
}
}
else
{
j = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++)
{
- if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.gname.species != SPECIES_NONE)
+ if (leader->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->field_0->arr[i].gname_uname.gname.species != SPECIES_NONE)
{
j++;
}
if (j == itemId + 1)
{
IntlConvPartnerUname(uname, leader->field_0->arr[i]);
- sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.gname, uname, 6);
+ TradeBoardPrintItemInfo(windowId, y, &leader->field_0->arr[i].gname_uname.gname, uname, 6);
break;
}
}
}
}
-static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1)
+static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n)
{
s32 i;
s32 j = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++)
{
- if (arg[i].field_1A_0 == 1 && arg[i].unk.gname.species != SPECIES_NONE)
+ if (x20[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && x20[i].gname_uname.gname.species != SPECIES_NONE)
{
j++;
}
- if (j == arg1 + 1)
+ if (j == n + 1)
{
return i;
}
@@ -4244,12 +4385,12 @@ static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1)
return -1;
}
-static s32 GetUnionRoomPlayerGender(s32 arg1, struct UnkStruct_Main0 * arg0)
+static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0)
{
- return arg0->arr[arg1].unk.gname.playerGender;
+ return main0->arr[playerIdx].gname_uname.gname.playerGender;
}
-static s32 sub_811ADD0(u32 type, u32 species)
+static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species)
{
s32 i;
@@ -4260,10 +4401,10 @@ static s32 sub_811ADD0(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (species == SPECIES_EGG)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 2;
+ return UR_TRADE_NOEGG;
}
else
{
@@ -4272,77 +4413,77 @@ static s32 sub_811ADD0(u32 type, u32 species)
species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type)
{
- return 0;
+ return UR_TRADE_MATCH;
}
}
- return 1;
+ return UR_TRADE_NOTYPE;
}
}
-static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender)
+static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender)
{
- switch (arg1)
+ switch (activity)
{
- case 0x41:
+ case ACTIVITY_BATTLE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8458314[playerGender]);
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_84585E8[playerGender]);
break;
- case 0x44:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8458F9C);
break;
- case 0x48:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_84583B4[playerGender]);
break;
}
}
-static void sub_811AECC(u8 *dst, u8 arg1)
+static void GetURoomActivityStartMsg(u8 *dst, u8 activity)
{
u8 mpId = GetMultiplayerId();
u8 gender = gLinkPlayers[mpId ^ 1].gender;
- switch (arg1)
+ switch (activity)
{
- case 0x41:
+ case ACTIVITY_BATTLE | IN_UNION_ROOM:
StringCopy(dst, gUnknown_8458230[mpId][gender][0]);
break;
- case 0x44:
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
StringCopy(dst, gUnknown_8458230[mpId][gender][2]);
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringCopy(dst, gUnknown_8458230[mpId][gender][1]);
break;
}
}
-static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3)
+static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * arg3)
{
s32 result = 0;
u16 species = SPECIES_NONE;
s32 i;
- switch (arg2[0])
+ switch (activity_p[0])
{
- case 0x41:
+ case ACTIVITY_BATTLE | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8457CA4);
result = 1;
break;
- case 0x45:
+ case ACTIVITY_CHAT | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8457CF8);
result = 1;
break;
- case 0x44:
- ConvertIntToDecimalStringN(arg3->field_58[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
- StringCopy(arg3->field_58[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]);
- for (i = 0; i < 4; i++)
+ case ACTIVITY_TRADE | IN_UNION_ROOM:
+ ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(arg3->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]);
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (gRfuLinkStatus->partner[i].serialNo == 2)
+ if (gRfuLinkStatus->partner[i].serialNo == 0x0002)
{
- ConvertIntToDecimalStringN(arg3->field_58[2], arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3);
- StringCopy(arg3->field_58[3], gSpeciesNames[arg2[1]]);
- species = arg2[1];
+ ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[2], activity_p[2], STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(arg3->activityRequestStrbufs[3], gSpeciesNames[activity_p[1]]);
+ species = activity_p[1];
break;
}
}
@@ -4352,19 +4493,20 @@ static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58[i]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->activityRequestStrbufs[i]);
}
DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_8457D44);
}
result = 1;
break;
- case 0x48:
+ case ACTIVITY_CARD | IN_UNION_ROOM:
StringExpandPlaceholders(dst, gUnknown_8457C48);
result = 1;
break;
- case 0x40:
+ case IN_UNION_ROOM:
+ // Chat dropped
StringExpandPlaceholders(dst, gUnknown_8457E0C);
result = 2;
break;
@@ -4373,18 +4515,18 @@ static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *
return result;
}
-static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0)
+static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom)
{
if (gRecvCmds[0][1] != 0)
{
- if (gRecvCmds[0][1] == 0x51)
+ if (gRecvCmds[0][1] == (ACTIVITY_ACCEPT | IN_UNION_ROOM))
{
- arg0->field_98 = 0x51;
+ uroom->partnerYesNoResponse = ACTIVITY_ACCEPT | IN_UNION_ROOM;
return TRUE;
}
- else if (gRecvCmds[0][1] == 0x52)
+ else if (gRecvCmds[0][1] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
{
- arg0->field_98 = 0x52;
+ uroom->partnerYesNoResponse = ACTIVITY_DECLINE | IN_UNION_ROOM;
return TRUE;
}
}
@@ -4418,16 +4560,16 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void)
return FALSE;
}
-static void ResetUnionRoomTrade(struct UnionRoomTrade * arg0)
+static void ResetUnionRoomTrade(struct UnionRoomTrade * uroomTrade)
{
- arg0->field_0 = 0;
- arg0->type = 0;
- arg0->playerPersonality = 0;
- arg0->playerSpecies = 0;
- arg0->playerLevel = 0;
- arg0->species = 0;
- arg0->level = 0;
- arg0->personality = 0;
+ uroomTrade->field_0 = 0;
+ uroomTrade->type = 0;
+ uroomTrade->playerPersonality = 0;
+ uroomTrade->playerSpecies = 0;
+ uroomTrade->playerLevel = 0;
+ uroomTrade->species = 0;
+ uroomTrade->level = 0;
+ uroomTrade->personality = 0;
}
void Script_ResetUnionRoomTrade(void)
@@ -4494,26 +4636,26 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mul
return response;
}
-static void sub_811B258(bool32 arg0)
+static void HandleCancelTrade(bool32 unlockObjs)
{
- sub_811A3F8();
+ UR_BlankBg0();
ScriptContext2_Disable();
- sub_80696F0();
- gUnknown_203B058 = 0;
- if (arg0)
+ UnionRoom_UnlockPlayerAndChatPartner();
+ sPlayerCurrActivity = 0;
+ if (unlockObjs)
{
- sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
- sub_80FB008(0x40, 0, 0);
+ RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE);
}
}
-static void sub_811B298(void)
+static void UR_EnableScriptContext2AndFreezeObjectEvents(void)
{
ScriptContext2_Enable();
ScriptFreezeObjectEvents();
}
-static u8 sub_811B2A8(s32 linkPlayer)
+static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer)
{
u8 retval = 0x80;
retval |= gLinkPlayers[linkPlayer].gender << 3;
@@ -4521,17 +4663,17 @@ static u8 sub_811B2A8(s32 linkPlayer)
return retval;
}
-static u8 sub_811B2D8(struct UnkStruct_URoom * arg0)
+static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom)
{
u8 retVal = 0x80;
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < RFU_CHILD_MAX; i++)
{
- if (arg0->field_C->arr[i].unk18)
+ if (uroom->field_C->arr[i].active)
{
- retVal |= arg0->field_C->arr[i].unk0.gname.playerGender << 3;
- retVal |= arg0->field_C->arr[i].unk0.gname.unk_00.playerTrainerId[0] & 7;
+ retVal |= uroom->field_C->arr[i].gname_uname.gname.playerGender << 3;
+ retVal |= uroom->field_C->arr[i].gname_uname.gname.unk_00.playerTrainerId[0] & 7;
break;
}
}
@@ -4539,7 +4681,7 @@ static u8 sub_811B2D8(struct UnkStruct_URoom * arg0)
return retVal;
}
-static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2)
+static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uroom, bool8 parent_child)
{
struct TrainerCard * trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1];
s32 i;
@@ -4547,61 +4689,61 @@ static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2)
DynamicPlaceholderTextUtil_Reset();
- StringCopy(arg1->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]);
+ StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName);
- StringCopy(arg1->field_174, gUnknown_84594B0[trainerCard->stars]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174);
+ StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->stars]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174);
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]);
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->trainerCardStrbufs[3]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->trainerCardStrbufs[4]);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrbufs[3]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrbufs[4]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_84594C4);
- StringCopy(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_84594C4);
+ StringCopy(gStringVar4, uroom->field_1A4);
n = trainerCard->linkBattleWins;
if (n > 9999)
{
n = 9999;
}
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]);
n = trainerCard->linkBattleLosses;
if (n > 9999)
{
n = 9999;
}
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->trainerCardStrbufs[1]);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]);
- ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]);
+ ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]);
for (i = 0; i < 4; i++)
{
- CopyEasyChatWord(arg1->trainerCardStrbufs[i + 3], trainerCard->var_28[i]);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->trainerCardStrbufs[i + 3]);
+ CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->var_28[i]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]);
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459504);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459504);
+ StringAppend(gStringVar4, uroom->field_1A4);
- if (arg2 == TRUE)
+ if (parent_child == MODE_PARENT)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459588);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459588);
+ StringAppend(gStringVar4, uroom->field_1A4);
}
- else if (arg2 == FALSE)
+ else if (parent_child == MODE_CHILD)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459580[trainerCard->gender]);
- StringAppend(gStringVar4, arg1->field_1A4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->gender]);
+ StringAppend(gStringVar4, uroom->field_1A4);
}
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index b75cc086d..b4d8af9ce 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -13,15 +13,16 @@
#include "text_window.h"
#include "union_room.h"
#include "window.h"
+#include "constants/union_room.h"
-struct UnkStruct_203B08C
+struct UnionRoomBattleWork
{
- s16 a0;
+ s16 textState;
};
-static EWRAM_DATA struct UnkStruct_203B08C * gUnknown_203B08C = NULL;
+static EWRAM_DATA struct UnionRoomBattleWork * sWork = NULL;
-static const struct BgTemplate gUnknown_8457194[] = {
+static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 3,
@@ -29,7 +30,7 @@ static const struct BgTemplate gUnknown_8457194[] = {
}
};
-static const struct WindowTemplate gUnknown_8457198[] = {
+static const struct WindowTemplate sWindowTemplates[] = {
{
.bg = 0,
.tilemapLeft = 2,
@@ -43,10 +44,10 @@ static const struct WindowTemplate gUnknown_8457198[] = {
static const u8 gUnknown_84571A8[] = {1, 2, 3};
-static void sub_811C04C(void)
+static void SetUpPartiesAndStartBattle(void)
{
s32 i;
- sub_81173C0(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER);
+ StartUnionRoomBattle(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER);
for (i = 0; i < 2; i++)
{
gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1];
@@ -65,7 +66,7 @@ static void sub_811C04C(void)
SetMainCallback2(CB2_InitBattle);
}
-static void sub_811C0E0(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
+static void UnionRoomBattle_CreateTextPrinter(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
{
s32 letterSpacing = 1;
s32 lineSpacing = 1;
@@ -73,13 +74,13 @@ static void sub_811C0E0(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed)
AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, gUnknown_84571A8, speed, str);
}
-static bool32 sub_811C150(s16 * state, const u8 * str, s32 speed)
+static bool32 UnionRoomBattle_PrintTextOnWindow0(s16 * state, const u8 * str, s32 speed)
{
switch (*state)
{
case 0:
DrawTextBorderOuter(0, 0x001, 0xD);
- sub_811C0E0(0, str, 0, 2, speed);
+ UnionRoomBattle_CreateTextPrinter(0, str, 0, 2, speed);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
(*state)++;
@@ -95,27 +96,27 @@ static bool32 sub_811C150(s16 * state, const u8 * str, s32 speed)
return FALSE;
}
-static void sub_811C1B4(void)
+static void VBlankCB_UnionRoomBattle(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_811C1C8(void)
+void CB2_UnionRoomBattle(void)
{
switch (gMain.state)
{
case 0:
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
- gUnknown_203B08C = AllocZeroed(sizeof(struct UnkStruct_203B08C));
+ sWork = AllocZeroed(sizeof(struct UnionRoomBattleWork));
ResetSpriteData();
FreeAllSpritePalettes();
ResetTasks();
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_8457194, 1);
+ InitBgsFromTemplates(0, sBgTemplates, 1);
ResetTempTileDataBuffers();
- if (!InitWindows(gUnknown_8457198))
+ if (!InitWindows(sWindowTemplates))
{
return;
}
@@ -126,11 +127,11 @@ void sub_811C1C8(void)
FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF);
TextWindow_SetStdFrame0_WithPal(0, 1, 0xD0);
Menu_LoadStdPal();
- SetVBlankCallback(sub_811C1B4);
+ SetVBlankCallback(VBlankCB_UnionRoomBattle);
gMain.state++;
break;
case 1:
- if (sub_811C150(&gUnknown_203B08C->a0, gText_CommStandbyAwaitingOtherPlayer, 0))
+ if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_CommStandbyAwaitingOtherPlayer, 0))
{
gMain.state++;
}
@@ -146,11 +147,11 @@ void sub_811C1C8(void)
memset(gBlockSendBuffer, 0, 0x20);
if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1])
{
- gBlockSendBuffer[0] = 0x52;
+ gBlockSendBuffer[0] = ACTIVITY_DECLINE | 0x40;
}
else
{
- gBlockSendBuffer[0] = 0x51;
+ gBlockSendBuffer[0] = ACTIVITY_ACCEPT | 0x40;
}
SendBlock(0, gBlockSendBuffer, 0x20);
gMain.state++;
@@ -159,15 +160,15 @@ void sub_811C1C8(void)
case 4:
if (GetBlockReceivedStatus() == 3)
{
- if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51)
+ if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | 0x40) && gBlockRecvBuffer[1][0] == (ACTIVITY_ACCEPT | 0x40))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gMain.state = 50;
}
else
{
- sub_800AAC0();
- if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52)
+ Link_TryStartSend5FFF();
+ if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40))
{
gMain.state = 6;
}
@@ -182,14 +183,14 @@ void sub_811C1C8(void)
case 50:
if (!UpdatePaletteFade())
{
- sub_800AB9C();
+ PrepareSendLinkCmd2FFE_or_RfuCmd6600();
gMain.state++;
}
break;
case 51:
if (IsLinkTaskFinished())
{
- SetMainCallback2(sub_811C04C);
+ SetMainCallback2(SetUpPartiesAndStartBattle);
}
break;
case 6:
@@ -199,7 +200,7 @@ void sub_811C1C8(void)
}
break;
case 7:
- if (sub_811C150(&gUnknown_203B08C->a0, gText_RefusedBattle, 1))
+ if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_RefusedBattle, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
@@ -211,7 +212,7 @@ void sub_811C1C8(void)
}
break;
case 9:
- if (sub_811C150(&gUnknown_203B08C->a0, gText_BattleWasRefused, 1))
+ if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_BattleWasRefused, 1))
{
SetMainCallback2(CB2_ReturnToField);
}
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
new file mode 100644
index 000000000..167da514a
--- /dev/null
+++ b/src/union_room_chat.c
@@ -0,0 +1,1452 @@
+#include "global.h"
+#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
+#include "help_system.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "menu.h"
+#include "overworld.h"
+#include "quest_log.h"
+#include "save.h"
+#include "scanline_effect.h"
+#include "strings.h"
+#include "task.h"
+#include "union_room_chat.h"
+#include "union_room_chat_display.h"
+#include "data_8479668.h"
+#include "constants/songs.h"
+
+#define MESSAGE_BUFFER_NCHAR 15
+
+#define CHAT_MESSAGE_0 0
+#define CHAT_MESSAGE_CHAT 1
+#define CHAT_MESSAGE_JOIN 2
+#define CHAT_MESSAGE_LEAVE 3
+#define CHAT_MESSAGE_DROP 4
+#define CHAT_MESSAGE_DISBAND 5
+
+#define CHATENTRYROUTINE_JOIN 0
+#define CHATNETRYROUTINE_HANDLE_INPUT 1
+#define CHATENTRYROUTINE_SWITCH 2
+#define CHATENTRYROUTINE_ASKQUITCHATTING 3
+#define CHATENTRYROUTINE_SEND 4
+#define CHATENTRYROUTINE_REGISTER 5
+#define CHATENTRYROUTINE_EXITCHAT 6
+#define CHATENTRYROUTINE_DROP 7
+#define CHATENTRYROUTINE_DISBANDED 8
+#define CHATENTRYROUTINE_SAVEANDEXIT 9
+
+#define CHATEXIT_NONE 0
+#define CHATEXIT_LEADER_LAST 1
+#define CHATEXIT_DROPPED 2
+#define CHATEXIT_DISBANDED 3
+
+struct UnionRoomChat
+{
+ u8 filler0[0x4];
+ u16 routineNo;
+ u16 routineState;
+ u8 filler8[0x2];
+ u16 exitDelayTimer;
+ u8 fillerC[0x1];
+ u8 linkPlayerCount;
+ u8 handleInputTask;
+ u8 receiveMessagesTask;
+ u8 currentPage;
+ u8 currentCol;
+ u8 currentRow;
+ u8 multiplayerId;
+ u8 lastBufferCursorPos;
+ u8 bufferCursorPos;
+ u8 receivedPlayerIndex;
+ u8 exitType;
+ bool8 changedRegisteredTexts;
+ u8 afterSaveTimer;
+ u8 messageEntryBuffer[2 * MESSAGE_BUFFER_NCHAR + 1];
+ u8 receivedMessage[0x40];
+ u8 hostName[0x40];
+ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
+ u8 filler18B[0x5];
+ u8 sendMessageBuffer[0x28];
+};
+
+static EWRAM_DATA struct UnionRoomChat * sWork = NULL;
+
+static void InitChatWork(struct UnionRoomChat * unionRoomChat);
+static void CB2_LoadInterface(void);
+static void VBlankCB_UnionRoomChatMain(void);
+static void CB2_UnionRoomChatMain(void);
+static void Task_HandlePlayerInput(u8 taskId);
+static void ChatEntryRoutine_Join(void);
+static void ChatEntryRoutine_HandleInput(void);
+static void ChatEntryRoutine_Switch(void);
+static void ChatEntryRoutine_AskQuitChatting(void);
+static void ChatEntryRoutine_ExitChat(void);
+static void ChatEntryRoutine_Drop(void);
+static void ChatEntryRoutine_Disbanded(void);
+static void ChatEntryRoutine_SendMessage(void);
+static void ChatEntryRoutine_Register(void);
+static void ChatEntryRoutine_SaveAndExit(void);
+static void GoToRoutine(u16 routineNo);
+static bool32 TypeChatMessage_HandleDPad(void);
+static void AppendCharacterToChatMessageBuffer(void);
+static void DeleteLastCharacterOfChatMessageBuffer(void);
+static void ToggleCaseOfLastCharacterInChatMessageBuffer(void);
+static bool32 ChatMsgHasAtLeastOneCharcter(void);
+static void RegisterTextAtRow(void);
+static void ResetMessageEntryBuffer(void);
+static void SaveRegisteredTextsToSB1(void);
+static u8 *GetEndOfUnk1A(void);
+static u8 *GetPtrToLastCharOfUnk1A(void);
+static void PrepareSendBuffer_Null(u8 *ptr);
+static void PrepareSendBuffer_Join(u8 *ptr);
+static void PrepareSendBuffer_Chat(u8 *ptr);
+static void PrepareSendBuffer_Leave(u8 *ptr);
+static void PrepareSendBuffer_Drop(u8 *ptr);
+static void PrepareSendBuffer_Disband(u8 *ptr);
+static void Task_ReceiveChatMessage(u8 taskId);
+
+static void (*const sChatEntryRoutines[])(void) = {
+ [CHATENTRYROUTINE_JOIN] = ChatEntryRoutine_Join,
+ [CHATNETRYROUTINE_HANDLE_INPUT] = ChatEntryRoutine_HandleInput,
+ [CHATENTRYROUTINE_SWITCH] = ChatEntryRoutine_Switch,
+ [CHATENTRYROUTINE_ASKQUITCHATTING] = ChatEntryRoutine_AskQuitChatting,
+ [CHATENTRYROUTINE_SEND] = ChatEntryRoutine_SendMessage,
+ [CHATENTRYROUTINE_REGISTER] = ChatEntryRoutine_Register,
+ [CHATENTRYROUTINE_EXITCHAT] = ChatEntryRoutine_ExitChat,
+ [CHATENTRYROUTINE_DROP] = ChatEntryRoutine_Drop,
+ [CHATENTRYROUTINE_DISBANDED] = ChatEntryRoutine_Disbanded,
+ [CHATENTRYROUTINE_SAVEANDEXIT] = ChatEntryRoutine_SaveAndExit
+};
+
+static const u8 sKeyboardPageMaxRow[] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ 9
+};
+
+static const u8 sCaseToggleTable[] = {
+ 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
+ 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24,
+ 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02,
+ 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00,
+ 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
+ 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00,
+ 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
+ 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
+ 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
+ 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
+ 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD,
+ 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5,
+ 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
+ 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF,
+ 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
+ [UNION_ROOM_KB_PAGE_UPPER] = {
+ gText_UnionRoomChatKeyboard_ABCDE,
+ gText_UnionRoomChatKeyboard_FGHIJ,
+ gText_UnionRoomChatKeyboard_KLMNO,
+ gText_UnionRoomChatKeyboard_PQRST,
+ gText_UnionRoomChatKeyboard_UVWXY,
+ gText_UnionRoomChatKeyboard_Z,
+ gText_UnionRoomChatKeyboard_01234Upper,
+ gText_UnionRoomChatKeyboard_56789Upper,
+ gText_UnionRoomChatKeyboard_PunctuationUpper,
+ gText_UnionRoomChatKeyboard_SymbolsUpper
+ },
+ [UNION_ROOM_KB_PAGE_LOWER] = {
+ gText_UnionRoomChatKeyboard_abcde,
+ gText_UnionRoomChatKeyboard_fghij,
+ gText_UnionRoomChatKeyboard_klmno,
+ gText_UnionRoomChatKeyboard_pqrst,
+ gText_UnionRoomChatKeyboard_uvwxy,
+ gText_UnionRoomChatKeyboard_z,
+ gText_UnionRoomChatKeyboard_01234Lower,
+ gText_UnionRoomChatKeyboard_56789Lower,
+ gText_UnionRoomChatKeyboard_PunctuationLower,
+ gText_UnionRoomChatKeyboard_SymbolsLower
+ },
+ [UNION_ROOM_KB_PAGE_EMOJI] = {
+ gText_UnionRoomChatKeyboard_Emoji1,
+ gText_UnionRoomChatKeyboard_Emoji2,
+ gText_UnionRoomChatKeyboard_Emoji3,
+ gText_UnionRoomChatKeyboard_Emoji4,
+ gText_UnionRoomChatKeyboard_Emoji5,
+ gText_UnionRoomChatKeyboard_Emoji6,
+ gText_UnionRoomChatKeyboard_Emoji7,
+ gText_UnionRoomChatKeyboard_Emoji8,
+ gText_UnionRoomChatKeyboard_Emoji9,
+ gText_UnionRoomChatKeyboard_Emoji10
+ }
+};
+
+void EnterUnionRoomChat(void)
+{
+ sWork = Alloc(sizeof(struct UnionRoomChat));
+ InitChatWork(sWork);
+ gKeyRepeatStartDelay = 20;
+ HelpSystem_DisableToggleWithRButton();
+ SetVBlankCallback(NULL);
+ SetMainCallback2(CB2_LoadInterface);
+}
+
+static void InitChatWork(struct UnionRoomChat * unionRoomChat)
+{
+ int i;
+
+ unionRoomChat->routineNo = CHATENTRYROUTINE_JOIN;
+ unionRoomChat->routineState = 0;
+ unionRoomChat->currentPage = UNION_ROOM_KB_PAGE_UPPER;
+ unionRoomChat->currentCol = 0;
+ unionRoomChat->currentRow = 0;
+ unionRoomChat->lastBufferCursorPos = 0;
+ unionRoomChat->bufferCursorPos = 0;
+ unionRoomChat->receivedPlayerIndex = 0;
+ unionRoomChat->messageEntryBuffer[0] = EOS;
+ unionRoomChat->linkPlayerCount = GetLinkPlayerCount();
+ unionRoomChat->multiplayerId = GetMultiplayerId();
+ unionRoomChat->exitType = 0;
+ unionRoomChat->changedRegisteredTexts = FALSE;
+ PrepareSendBuffer_Null(unionRoomChat->sendMessageBuffer);
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
+ StringCopy(unionRoomChat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]);
+}
+
+static void FreeChatWork(void)
+{
+ DestroyTask(sWork->handleInputTask);
+ DestroyTask(sWork->receiveMessagesTask);
+ Free(sWork);
+}
+
+static void CB2_LoadInterface(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ UnionRoomChat_TryAllocGraphicsWork();
+ gMain.state++;
+ break;
+ case 1:
+ UnionRoomChat_RunDisplaySubtasks();
+ if (!UnionRoomChat_RunDisplaySubtask0())
+ {
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_UnionRoomChatMain);
+ gMain.state++;
+ }
+ break;
+ case 2:
+ UpdatePaletteFade();
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_UnionRoomChatMain);
+ SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL);
+ sWork->handleInputTask = CreateTask(Task_HandlePlayerInput, 8);
+ sWork->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7);
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(232, 150);
+ }
+ break;
+ }
+}
+
+static void VBlankCB_UnionRoomChatMain(void)
+{
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void CB2_UnionRoomChatMain(void)
+{
+ RunTasks();
+ UnionRoomChat_RunDisplaySubtasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void Task_HandlePlayerInput(u8 taskId)
+{
+ switch (sWork->exitType)
+ {
+ case CHATEXIT_LEADER_LAST:
+ GoToRoutine(CHATENTRYROUTINE_EXITCHAT);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ case CHATEXIT_DROPPED:
+ GoToRoutine(CHATENTRYROUTINE_DROP);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ case CHATEXIT_DISBANDED:
+ GoToRoutine(CHATENTRYROUTINE_DISBANDED);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ }
+
+ sChatEntryRoutines[sWork->routineNo]();
+}
+
+static void ChatEntryRoutine_Join(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ PrepareSendBuffer_Join(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ // fall through
+ case 1:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (IsLinkTaskFinished())
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_HandleInput(void)
+{
+ bool8 var0, var1;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (JOY_NEW(START_BUTTON))
+ {
+ if (sWork->bufferCursorPos)
+ GoToRoutine(CHATENTRYROUTINE_SEND);
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ GoToRoutine(CHATENTRYROUTINE_SWITCH);
+ }
+ else if (JOY_REPT(B_BUTTON))
+ {
+ if (sWork->bufferCursorPos)
+ {
+ DeleteLastCharacterOfChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState = 1;
+ }
+ else
+ {
+ GoToRoutine(CHATENTRYROUTINE_ASKQUITCHATTING);
+ }
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ AppendCharacterToChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CURSORBLINK, 1);
+ sWork->routineState = 1;
+ }
+ else if (JOY_NEW(R_BUTTON))
+ {
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ ToggleCaseOfLastCharacterInChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState = 1;
+ }
+ else
+ {
+ GoToRoutine(CHATENTRYROUTINE_REGISTER);
+ }
+ }
+ else if (TypeChatMessage_HandleDPad())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0);
+ sWork->routineState = 1;
+ }
+ break;
+ case 1:
+ var0 = RunDisplaySubtask(0);
+ var1 = RunDisplaySubtask(1);
+ if (!var0 && !var1)
+ sWork->routineState = 0;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Switch(void)
+{
+ s16 input;
+ bool32 shouldSwitchPages;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWKBSWAPMENU, 0);
+ sWork->routineState++;
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState++;
+ break;
+ case 2:
+ input = Menu_ProcessInput();
+ switch (input)
+ {
+ default:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0);
+ shouldSwitchPages = TRUE;
+ if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
+ shouldSwitchPages = FALSE;
+ break;
+ case MENU_NOTHING_CHOSEN:
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
+ return;
+ case MENU_B_PRESSED:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0);
+ sWork->routineState = 3;
+ return;
+ }
+
+ if (!shouldSwitchPages)
+ {
+ sWork->routineState = 3;
+ return;
+ }
+
+ sWork->currentCol = 0;
+ sWork->currentRow = 0;
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SWITCHPAGES, 1);
+ sWork->currentPage = input;
+ sWork->routineState = 4;
+ break;
+ case 3:
+ // Wait Return To Prev Page
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 4:
+ // Wait Page Switch
+ if (!RunDisplaySubtask(0) && !RunDisplaySubtask(1))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_AskQuitChatting(void)
+{
+ s8 input;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, 0);
+ sWork->routineState = 1;
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 2;
+ break;
+ case 2:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ case 0:
+ if (sWork->multiplayerId == 0)
+ {
+ PrepareSendBuffer_Disband(sWork->sendMessageBuffer);
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 9;
+ }
+ else
+ {
+ PrepareSendBuffer_Leave(sWork->sendMessageBuffer);
+ sWork->routineState = 4;
+ }
+ break;
+ }
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 9:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, 0);
+ sWork->routineState = 10;
+ }
+ break;
+ case 10:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 8;
+ break;
+ case 8:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ case 0:
+ sub_80FA4A8();
+ PrepareSendBuffer_Disband(sWork->sendMessageBuffer);
+ sWork->routineState = 4;
+ break;
+ }
+ break;
+ case 4:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ {
+ if (sWork->multiplayerId == 0)
+ sWork->routineState = 6;
+ else
+ sWork->routineState = 5;
+ }
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ }
+ break;
+ }
+}
+
+static void ChatEntryRoutine_ExitChat(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTEXITINGCHAT, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (!RunDisplaySubtask(0))
+ {
+ PrepareSendBuffer_Drop(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ break;
+ case 4:
+ if ((GetBlockReceivedStatus() & 1) && !GetRfuUnkCE8())
+ sWork->routineState++;
+ break;
+ case 5:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ Link_TryStartSend5FFF();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 6:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 7:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Drop(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ Link_TryStartSend5FFF();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 3:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Disbanded(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ if (sWork->multiplayerId)
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ if (sWork->multiplayerId != 0)
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTLEADERLEFT, 0);
+
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ Link_TryStartSend5FFF();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 3:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 4:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_SendMessage(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+
+ PrepareSendBuffer_Chat(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ // fall through
+ case 1:
+ if (IsLinkTaskFinished() == TRUE && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ break;
+ case 2:
+ ResetMessageEntryBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState++;
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState++;
+ break;
+ case 4:
+ if (IsLinkTaskFinished())
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Register(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (ChatMsgHasAtLeastOneCharcter())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTREGISTERWHERE, 0);
+ sWork->routineState = 2;
+ }
+ else
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTINPUTTEXT, 0);
+ sWork->routineState = 5;
+ }
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON))
+ {
+ RegisterTextAtRow();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_RETURNTOKB, 0);
+ sWork->routineState = 3;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0);
+ sWork->routineState = 4;
+ }
+ else if (TypeChatMessage_HandleDPad())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0);
+ sWork->routineState = 2;
+ }
+ break;
+ case 2:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 1;
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ case 4:
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 5:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 6;
+ break;
+ case 6:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ }
+}
+
+static void ChatEntryRoutine_SaveAndExit(void)
+{
+ s8 input;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!sWork->changedRegisteredTexts)
+ {
+ sWork->routineState = 12;
+ }
+ else
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 1;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKSAVE, 0);
+ sWork->routineState = 2;
+ }
+ break;
+ case 2:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ sWork->routineState = 12;
+ break;
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ }
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKOVERWRITESAVE, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ case 4:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 5;
+ break;
+ case 5:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ sWork->routineState = 12;
+ break;
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 6;
+ break;
+ }
+ break;
+ case 6:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVING, 0);
+ SaveRegisteredTextsToSB1();
+ sWork->routineState = 7;
+ }
+ break;
+ case 7:
+ if (!RunDisplaySubtask(0))
+ {
+ SetContinueGameWarpStatusToDynamicWarp();
+ TrySavingData(SAVE_NORMAL);
+ sWork->routineState = 8;
+ }
+ break;
+ case 8:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, 0);
+ sWork->routineState = 9;
+ break;
+ case 9:
+ if (!RunDisplaySubtask(0))
+ {
+ PlaySE(SE_SAVE);
+ ClearContinueGameWarpStatus2();
+ sWork->routineState = 10;
+ }
+ break;
+ case 10:
+ sWork->afterSaveTimer = 0;
+ sWork->routineState = 11;
+ break;
+ case 11:
+ sWork->afterSaveTimer++;
+ if (sWork->afterSaveTimer > 120)
+ sWork->routineState = 12;
+ break;
+ case 12:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ sWork->routineState = 13;
+ break;
+ case 13:
+ if (!gPaletteFade.active)
+ {
+ HelpSystem_EnableToggleWithRButton();
+ UnionRoomChat_FreeGraphicsWork();
+ FreeChatWork();
+ SetMainCallback2(CB2_ReturnToField);
+ }
+ break;
+ }
+}
+
+static void GoToRoutine(u16 routineNo)
+{
+ sWork->routineNo = routineNo;
+ sWork->routineState = 0;
+}
+
+static bool32 TypeChatMessage_HandleDPad(void)
+{
+ do
+ {
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (sWork->currentRow > 0)
+ sWork->currentRow--;
+ else
+ sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage];
+
+ break;
+ }
+ if (JOY_REPT(DPAD_DOWN))
+ {
+ if (sWork->currentRow < sKeyboardPageMaxRow[sWork->currentPage])
+ {
+ sWork->currentRow++;
+ }
+ else
+ {
+ sWork->currentRow = 0;
+ }
+
+ break;
+ }
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ if (JOY_REPT(DPAD_LEFT))
+ {
+ if (sWork->currentCol > 0)
+ sWork->currentCol--;
+ else
+ sWork->currentCol = 4;
+ break;
+ }
+ if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (sWork->currentCol < 4)
+ sWork->currentCol++;
+ else
+ sWork->currentCol = 0;
+ break;
+ }
+ }
+
+ return FALSE;
+ } while (0);
+ return TRUE;
+}
+
+static void AppendCharacterToChatMessageBuffer(void)
+{
+ int i;
+ const u8 *charsStr;
+ int strLength;
+ u8 *str;
+ u8 buffer[21];
+
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ charsStr = gUnionRoomKeyboardText[sWork->currentPage][sWork->currentRow];
+ for (i = 0; i < sWork->currentCol; i++)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ charsStr++;
+ charsStr++;
+ }
+
+ strLength = 1;
+ }
+ else
+ {
+ u8 *tempStr = StringCopy(buffer, sWork->registeredTexts[sWork->currentRow]);
+ tempStr[0] = CHAR_SPACE;
+ tempStr[1] = EOS;
+ charsStr = buffer;
+ strLength = StringLength_Multibyte(buffer);
+ }
+
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos;
+ if (!charsStr)
+ return;
+
+ str = GetEndOfUnk1A();
+ while (--strLength != -1 && sWork->bufferCursorPos < MESSAGE_BUFFER_NCHAR)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ {
+ *str = *charsStr;
+ charsStr++;
+ str++;
+ }
+
+ *str = *charsStr;
+ charsStr++;
+ str++;
+
+ sWork->bufferCursorPos++;
+ }
+
+ *str = EOS;
+}
+
+static void DeleteLastCharacterOfChatMessageBuffer(void)
+{
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos;
+ if (sWork->bufferCursorPos)
+ {
+ u8 *str = GetPtrToLastCharOfUnk1A();
+ *str = EOS;
+ sWork->bufferCursorPos--;
+ }
+}
+
+static void ToggleCaseOfLastCharacterInChatMessageBuffer(void)
+{
+ u8 *str;
+ u8 character;
+
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos - 1;
+ str = GetPtrToLastCharOfUnk1A();
+ if (*str != CHAR_EXTRA_EMOJI)
+ {
+ character = sCaseToggleTable[*str];
+ if (character)
+ *str = character;
+ }
+}
+
+static bool32 ChatMsgHasAtLeastOneCharcter(void)
+{
+ if (sWork->bufferCursorPos)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void RegisterTextAtRow(void)
+{
+ u8 *src = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ StringCopy(sWork->registeredTexts[sWork->currentRow], src);
+ sWork->changedRegisteredTexts = TRUE;
+}
+
+static void ResetMessageEntryBuffer(void)
+{
+ sWork->messageEntryBuffer[0] = EOS;
+ sWork->lastBufferCursorPos = MESSAGE_BUFFER_NCHAR;
+ sWork->bufferCursorPos = 0;
+}
+
+static void SaveRegisteredTextsToSB1(void)
+{
+ int i;
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
+ StringCopy(gSaveBlock1Ptr->registeredTexts[i], sWork->registeredTexts[i]);
+}
+
+u8 *UnionRoomChat_GetWorkRegisteredText(int arg0)
+{
+ return sWork->registeredTexts[arg0];
+}
+
+static u8 *GetEndOfUnk1A(void)
+{
+ u8 *str = sWork->messageEntryBuffer;
+ while (*str != EOS)
+ str++;
+
+ return str;
+}
+
+static u8 *GetPtrToLastCharOfUnk1A(void)
+{
+ u8 *str = sWork->messageEntryBuffer;
+ u8 *str2 = str;
+ while (*str != EOS)
+ {
+ str2 = str;
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+ str++;
+ }
+
+ return str2;
+}
+
+static u16 GetNumCharsInMessageEntryBuffer(void)
+{
+ u8 *str;
+ u32 i, numChars, strLength;
+
+ strLength = StringLength_Multibyte(sWork->messageEntryBuffer);
+ str = sWork->messageEntryBuffer;
+ numChars = 0;
+ if (strLength > 10)
+ {
+ strLength -= 10;
+ for (i = 0; i < strLength; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ numChars++;
+ }
+ }
+
+ return numChars;
+}
+
+static void PrepareSendBuffer_Null(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_0;
+}
+
+static void PrepareSendBuffer_Join(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_JOIN;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static void PrepareSendBuffer_Chat(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_CHAT;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], sWork->messageEntryBuffer);
+}
+
+static void PrepareSendBuffer_Leave(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_LEAVE;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+ sub_80FB9D0();
+}
+
+static void PrepareSendBuffer_Drop(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_DROP;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static void PrepareSendBuffer_Disband(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_DISBAND;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage)
+{
+ u8 *tempStr;
+ u8 cmd = *recvMessage;
+ u8 *name = recvMessage + 1;
+ recvMessage = name;
+ recvMessage += PLAYER_NAME_LENGTH + 1;
+
+ switch (cmd)
+ {
+ case CHAT_MESSAGE_JOIN:
+ if (sWork->multiplayerId != name[PLAYER_NAME_LENGTH + 1])
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat);
+ return TRUE;
+ }
+ break;
+ case CHAT_MESSAGE_CHAT:
+ tempStr = StringCopy(dest, name);
+ *(tempStr++) = EXT_CTRL_CODE_BEGIN;
+ *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO;
+ *(tempStr++) = 42;
+ *(tempStr++) = CHAR_COLON;
+ StringCopy(tempStr, recvMessage);
+ return TRUE;
+ case CHAT_MESSAGE_DISBAND:
+ StringCopy(sWork->hostName, name);
+ // fall through
+ case CHAT_MESSAGE_LEAVE:
+ if (sWork->multiplayerId != *recvMessage)
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat);
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+u8 GetCurrentKeyboardPage(void)
+{
+ return sWork->currentPage;
+}
+
+void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp)
+{
+ *colp = sWork->currentCol;
+ *rowp = sWork->currentRow;
+}
+
+u8 *UnionRoomChat_GetMessageEntryBuffer(void)
+{
+ return sWork->messageEntryBuffer;
+}
+
+int UnionRoomChat_LenMessageEntryBuffer(void)
+{
+ u8 *str = UnionRoomChat_GetMessageEntryBuffer();
+ return StringLength_Multibyte(str);
+}
+
+void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp)
+{
+ int diff = sWork->bufferCursorPos - sWork->lastBufferCursorPos;
+ if (diff < 0)
+ {
+ diff *= -1;
+ *startp = sWork->bufferCursorPos;
+ }
+ else
+ {
+ *startp = sWork->lastBufferCursorPos;
+ }
+
+ *diffp = diff;
+}
+
+u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void)
+{
+ int i;
+ u16 numChars = GetNumCharsInMessageEntryBuffer();
+ u8 *str = sWork->messageEntryBuffer;
+ for (i = 0; i < numChars; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return str;
+}
+
+// Useless overhead
+u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void)
+{
+ u16 count;
+ u32 i;
+ u16 numChars = GetNumCharsInMessageEntryBuffer();
+ u8 *str = sWork->messageEntryBuffer;
+ for (count = 0, i = 0; i < numChars; count++, i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return count;
+}
+
+u8 *UnionRoomChat_GetLastReceivedMessage(void)
+{
+ return sWork->receivedMessage;
+}
+
+u16 UnionRoomChat_GetReceivedPlayerIndex(void)
+{
+ return sWork->receivedPlayerIndex;
+}
+
+int UnionRoomChat_GetMessageEntryCursorPosition(void)
+{
+ return sWork->bufferCursorPos;
+}
+
+// This probably does more in the Japanese titles.
+int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void)
+{
+ u8 *str = GetPtrToLastCharOfUnk1A();
+ u32 character = *str;
+ if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0)
+ return 3;
+ else
+ return 0;
+}
+
+u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void)
+{
+ return sWork->hostName;
+}
+
+void UnionRoomChat_InitializeRegisteredTexts(void)
+{
+ StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye);
+}
+
+#define tState data[0]
+#define tI data[1]
+#define tCurrLinkPlayer data[2]
+#define tBlockReceivedStatus data[3]
+#define tLinkPlayerCount data[4]
+#define tNextState data[5]
+
+static void Task_ReceiveChatMessage(u8 taskId)
+{
+ u8 *buffer;
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ DestroyTask(taskId);
+ return;
+ }
+
+ tState = 1;
+ // fall through
+ case 1:
+ tLinkPlayerCount = GetLinkPlayerCount();
+ if (sWork->linkPlayerCount != tLinkPlayerCount)
+ {
+ tState = 2;
+ sWork->linkPlayerCount = tLinkPlayerCount;
+ return;
+ }
+
+ tBlockReceivedStatus = GetBlockReceivedStatus();
+ if (!tBlockReceivedStatus && GetRfuUnkCE8())
+ return;
+
+ tI = 0;
+ tState = 3;
+ // fall through
+ case 3:
+ // Idle listen
+ for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++)
+ ;
+
+ if (tI == 5)
+ {
+ tState = 1;
+ return;
+ }
+
+ tCurrLinkPlayer = tI;
+ ResetBlockReceivedFlag(tCurrLinkPlayer);
+ buffer = (u8 *)gBlockRecvBuffer[tI];
+ switch (buffer[0])
+ {
+ default:
+ case CHAT_MESSAGE_CHAT: tNextState = 3; break;
+ case CHAT_MESSAGE_JOIN: tNextState = 3; break;
+ case CHAT_MESSAGE_LEAVE: tNextState = 4; break;
+ case CHAT_MESSAGE_DROP: tNextState = 5; break;
+ case CHAT_MESSAGE_DISBAND: tNextState = 6; break;
+ }
+
+ if (ProcessReceivedChatMessage(sWork->receivedMessage, (u8 *)gBlockRecvBuffer[tI]))
+ {
+ sWork->receivedPlayerIndex = tI;
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SCROLLCHAT, 2);
+ tState = 7;
+ }
+ else
+ {
+ tState = tNextState;
+ }
+
+ tI++;
+ break;
+ case 7:
+ if (!RunDisplaySubtask(2))
+ tState = tNextState;
+ break;
+ case 4:
+ // Someone is leaving
+ if (sWork->multiplayerId == 0 && tCurrLinkPlayer != 0)
+ {
+ // You're the leader, and the person who left is not you
+ if (GetLinkPlayerCount() == 2)
+ {
+ sub_80FA4A8();
+ sWork->exitType = CHATEXIT_LEADER_LAST;
+ DestroyTask(taskId);
+ return;
+ }
+
+ sub_80FBD6C(tCurrLinkPlayer);
+ }
+
+ tState = 3;
+ break;
+ case 5:
+ // Person left
+ if (sWork->multiplayerId != 0)
+ sWork->exitType = CHATEXIT_DROPPED;
+
+ DestroyTask(taskId);
+ break;
+ case 6:
+ // The leader disbanded the chat
+ sWork->exitType = CHATEXIT_DISBANDED;
+ DestroyTask(taskId);
+ break;
+ case 2:
+ if (!GetRfuUnkCE8())
+ {
+ if (sWork->multiplayerId == 0)
+ sub_80FB030(sWork->linkPlayerCount);
+
+ tState = 1;
+ }
+ break;
+ }
+}
+
+#undef tNextState
+#undef tLinkPlayerCount
+#undef tBlockReceivedStatus
+#undef tCurrLinkPlayer
+#undef tI
+#undef tState
diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c
new file mode 100644
index 000000000..54aef8d65
--- /dev/null
+++ b/src/union_room_chat_display.c
@@ -0,0 +1,1339 @@
+#include "global.h"
+#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
+#include "graphics.h"
+#include "menu.h"
+#include "new_menu_helpers.h"
+#include "scanline_effect.h"
+#include "strings.h"
+#include "text_window.h"
+#include "union_room_chat.h"
+#include "union_room_chat_display.h"
+#include "union_room_chat_objects.h"
+
+#define STDMESSAGE_QUIT_CHATTING 0
+#define STDMESSAGE_REGISTER_WHERE 1
+#define STDMESSAGE_REGISTER_HERE 2
+#define STDMESSAGE_INPUT_TEXT 3
+#define STDMESSAGE_EXITING_CHAT 4
+#define STDMESSAGE_LEADER_LEFT 5
+#define STDMESSAGE_ASK_SAVE 6
+#define STDMESSAGE_ASK_OVERWRITE 7
+#define STDMESSAGE_SAVING_NO_OFF 8
+#define STDMESSAGE_SAVED_THE_GAME 9
+#define STDMESSAGE_WARN_LEADER_LEAVE 10
+
+struct UnionRoomChat2Subtask
+{
+ bool32 (*callback)(u8 *);
+ u8 active;
+ u8 state;
+};
+
+struct UnionRoomChat2
+{
+ struct UnionRoomChat2Subtask subtasks[3];
+ u16 yesNoMenuWinId;
+ u16 curLine;
+ u16 scrollCount;
+ u16 messageWindowId;
+ s16 bg1hofs;
+ u8 expandedPlaceholdersBuffer[0x106];
+ u8 bg0Buffer[BG_SCREEN_SIZE];
+ u8 bg1Buffer[BG_SCREEN_SIZE];
+ u8 bg3Buffer[BG_SCREEN_SIZE];
+ u8 bg2Buffer[BG_SCREEN_SIZE];
+ u8 unk2128[0x20];
+ u8 unk2148[0x20];
+};
+
+struct SubtaskInfo
+{
+ u16 idx;
+ bool32 (*callback)(u8 *);
+};
+
+struct MessageWindowInfo
+{
+ const u8 *text;
+ bool8 boxType;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ bool8 expandPlaceholders;
+ bool8 widerBox;
+};
+
+static EWRAM_DATA struct UnionRoomChat2 * sWork = NULL;
+
+static void InitWork(struct UnionRoomChat2 * ptr);
+static void UnionRoomChat_ResetDisplaySubtasks(void);
+static bool32 DisplaySubtask_LoadGfx(u8 *state);
+static bool32 DisplaySubtask_PrintWin3(u8 *state);
+static bool32 DisplaySubtask_HideWin3(u8 *state);
+static bool32 DisplaySubtask_SwitchPages(u8 *state);
+static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state);
+static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state);
+static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state);
+static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state);
+static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state);
+static bool32 DisplaySubtask_CancelRegister(u8 *state);
+static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state);
+static bool32 DisplaySubtask_ScrollChat(u8 *state);
+static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state);
+static bool32 DisplaySubtask_PrintInputText(u8 *state);
+static bool32 DisplaySubtask_PrintExitingChat(u8 *state);
+static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state);
+static bool32 DisplaySubtask_AskSave(u8 *state);
+static bool32 DisplaySubtask_AskOverwriteSave(u8 *state);
+static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state);
+static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state);
+static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state);
+static bool32 DisplaySubtaskDummy(u8 *state);
+static void PlaceYesNoMenuAt(u8 a0, u8 a1, u8 a2);
+static void HideYesNoMenuWindow(void);
+static void DestroyYesNoMenuWindow(void);
+static void PlaceStdMessageWindow(int id, u16 bg0vofs);
+static void HideStdMessageWindow(void);
+static void DestroyStdMessageWindow(void);
+static void FillWin1Rect(u16 x, u16 width, u8 fillValue);
+static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor);
+static void PrintCurrentKeyboardPage(void);
+static bool32 AnimateMoveBg1Right(void);
+static bool32 AnimateMoveBg1Left(void);
+static void PrintKeyboardSwapTextsOnWin3(void);
+static void ClearWin3(void);
+static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx);
+static void ResetGpuBgState(void);
+static void SetBgTilemapWorkBuffers(void);
+static void ClearBg0(void);
+static void LoadUnionRoomChatPanelGfx(void);
+static void LoadLinkMiscMenuGfx(void);
+static void LoadBg1Pal8(void);
+static void LoadWin0(void);
+static void LoadWin2(void);
+static void LoadWin1(void);
+static void LoadWin3(void);
+static void sub_812AD50(void);
+static void FillScanlineEffectWithValue1col(s16 a0);
+static void FillScanlineEffectWithValue2col(s16 a0);
+
+static const u16 sUnionRoomChatPanelBgPal_C[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal");
+static const u16 sBg1Pal8[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal");
+static const u16 sWin0PalF[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal");
+
+static const struct BgTemplate gUnknown_845AA84[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 7,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x0000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x0000
+ }, {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 23,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x0000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x0001
+ }
+};
+
+static const struct WindowTemplate gUnknown_845AA94[] = {
+ {
+ .bg = 3,
+ .tilemapLeft = 8,
+ .tilemapTop = 1,
+ .width = 21,
+ .height = 19,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+ }, {
+ .bg = 1,
+ .tilemapLeft = 9,
+ .tilemapTop = 18,
+ .width = 15,
+ .height = 2,
+ .paletteNum = 12,
+ .baseBlock = 0x07a
+ }, {
+ .bg = 1,
+ .tilemapLeft = 0,
+ .tilemapTop = 2,
+ .width = 6,
+ .height = 15,
+ .paletteNum = 7,
+ .baseBlock = 0x020
+ }, {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 2,
+ .width = 7,
+ .height = 9,
+ .paletteNum = 14,
+ .baseBlock = 0x013
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct SubtaskInfo sSubtaskInfo[] = {
+ {CHATDISPLAYROUTINE_LOADGFX, DisplaySubtask_LoadGfx},
+ {CHATDISPLAYROUTINE_SHOWKBSWAPMENU, DisplaySubtask_PrintWin3},
+ {CHATDISPLAYROUTINE_HIDEKBSWAPMENU, DisplaySubtask_HideWin3},
+ {CHATDISPLAYROUTINE_SWITCHPAGES, DisplaySubtask_SwitchPages},
+ {CHATDISPLAYROUTINE_MOVEKBCURSOR, DisplaySubtask_MoveSelectorCursorObj},
+ {CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, DisplaySubtask_ShowQuitChattingDialog},
+ {CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, DisplaySubtask_HideQuitChattingDialog},
+ {CHATDISPLAYROUTINE_PRINTMSG, DisplaySubtask_UpdateMessageBuffer},
+ {CHATDISPLAYROUTINE_PRINTREGISTERWHERE, DisplaySubtask_PrintRegisterWhere},
+ {CHATDISPLAYROUTINE_CANCELREGISTER, DisplaySubtask_CancelRegister},
+ {CHATDISPLAYROUTINE_RETURNTOKB, DisplaySubtask_ReturnToKeyboard},
+ {CHATDISPLAYROUTINE_SCROLLCHAT, DisplaySubtask_ScrollChat},
+ {CHATDISPLAYROUTINE_CURSORBLINK, DisplaySubtask_AnimateSelectorCursorBlink},
+ {CHATDISPLAYROUTINE_PRINTINPUTTEXT, DisplaySubtask_PrintInputText},
+ {CHATDISPLAYROUTINE_PRINTEXITINGCHAT, DisplaySubtask_PrintExitingChat},
+ {CHATDISPLAYROUTINE_PRINTLEADERLEFT, DisplaySubtask_PrintLeaderLeft},
+ {CHATDISPLAYROUTINE_ASKSAVE, DisplaySubtask_AskSave},
+ {CHATDISPLAYROUTINE_ASKOVERWRITESAVE, DisplaySubtask_AskOverwriteSave},
+ {CHATDISPLAYROUTINE_PRINTSAVING, DisplaySubtask_PrintSavingDontTurnOffPower},
+ {CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, DisplaySubtask_PrintSavedTheGame},
+ {CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, DisplaySubtask_ShowConfirmLeaderLeaveDialog}
+};
+
+static const struct MessageWindowInfo sMessageWindowInfo[] = {
+
+ [STDMESSAGE_QUIT_CHATTING] = {
+ .text = gText_QuitChatting,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_WHERE] = {
+ .text = gText_RegisterTextWhere,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_HERE] = {
+ .text = gText_RegisterTextHere,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_INPUT_TEXT] = {
+ .text = gText_InputText,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_EXITING_CHAT] = {
+ .text = gText_ExitingTheChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_LEADER_LEFT] = {
+ .text = gText_LeaderHasLeftEndingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 0,
+ .lineSpacing = 2,
+ .expandPlaceholders = TRUE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_ASK_SAVE] = {
+ .text = gText_RegisteredTextChanged_OKtoSave,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_ASK_OVERWRITE] = {
+ .text = gText_RegisteredTextChanged_AlreadySavedFile,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_SAVING_NO_OFF] = {
+ .text = gText_RegisteredTextChanged_SavingDontTurnOff,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_SAVED_THE_GAME] = {
+ .text = gText_RegisteredTextChanged_SavedTheGame,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = TRUE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_WARN_LEADER_LEAVE] = {
+ .text = gText_IfLeaderLeavesChatWillEnd,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ }
+};
+
+static const u8 gText_Ellipsis[] = _("…");
+
+static const struct MenuAction sKeyboardSwapTexts[] = {
+ {gText_Upper},
+ {gText_Lower},
+ {gText_Symbols},
+ {gText_Register2},
+ {gText_Exit}
+};
+
+bool8 UnionRoomChat_TryAllocGraphicsWork(void)
+{
+ sWork = Alloc(sizeof(*sWork));
+ if (sWork && UnionRoomChat_TryAllocSpriteWork())
+ {
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84));
+ InitWindows(gUnknown_845AA94);
+ ResetTempTileDataBuffers();
+ sub_812AD50();
+ InitWork(sWork);
+ UnionRoomChat_ResetDisplaySubtasks();
+ UnionRoomChat_StartDisplaySubtask(0, 0);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+bool32 UnionRoomChat_RunDisplaySubtask0(void)
+{
+ return RunDisplaySubtask(0);
+}
+
+void UnionRoomChat_FreeGraphicsWork(void)
+{
+ UnionRoomChat_FreeSpriteWork();
+ if (sWork != NULL)
+ FREE_AND_SET_NULL(sWork);
+
+ FreeAllWindowBuffers();
+ gScanlineEffect.state = 3;
+}
+
+static void InitWork(struct UnionRoomChat2 *arg0)
+{
+ arg0->yesNoMenuWinId = 0xFF;
+ arg0->messageWindowId = 0xFF;
+ arg0->curLine = 0;
+}
+
+void UnionRoomChat_ResetDisplaySubtasks(void)
+{
+ int i;
+
+ if (sWork == NULL)
+ return;
+
+ for (i = 0; i < 3; i++)
+ {
+ sWork->subtasks[i].callback = DisplaySubtaskDummy;
+ sWork->subtasks[i].active = FALSE;
+ sWork->subtasks[i].state = 0;
+ }
+}
+
+void UnionRoomChat_RunDisplaySubtasks(void)
+{
+ int i;
+
+ if (sWork == NULL)
+ return;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (sWork->subtasks[i].active)
+ sWork->subtasks[i].active = sWork->subtasks[i].callback(&sWork->subtasks[i].state);
+ }
+}
+
+void UnionRoomChat_StartDisplaySubtask(u16 arg0, u8 arg1)
+{
+ int i;
+
+ sWork->subtasks[arg1].callback = DisplaySubtaskDummy;
+ for (i = 0; i < NELEMS(sSubtaskInfo); i++)
+ {
+ if (sSubtaskInfo[i].idx == arg0)
+ {
+ sWork->subtasks[arg1].callback = sSubtaskInfo[i].callback;
+ sWork->subtasks[arg1].active = TRUE;
+ sWork->subtasks[arg1].state = 0;
+ break;
+ }
+ }
+}
+
+bool8 RunDisplaySubtask(u8 arg0)
+{
+ return sWork->subtasks[arg0].active;
+}
+
+static bool32 DisplaySubtask_LoadGfx(u8 *state)
+{
+ if (FreeTempTileDataBuffersIfPossible() == TRUE)
+ return TRUE;
+
+ switch (*state)
+ {
+ case 0:
+ ResetGpuBgState();
+ SetBgTilemapWorkBuffers();
+ break;
+ case 1:
+ ClearBg0();
+ break;
+ case 2:
+ LoadUnionRoomChatPanelGfx();
+ break;
+ case 3:
+ LoadLinkMiscMenuGfx();
+ break;
+ case 4:
+ LoadBg1Pal8();
+ break;
+ case 5:
+ LoadWin0();
+ LoadWin2();
+ LoadWin3();
+ LoadWin1();
+ break;
+ case 6:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UnionRoomChat_CreateSelectorCursorObj();
+ UnionRoomChat_SpawnTextEntryPointerSprites();
+ CreatePageSwitchUISprites();
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintWin3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PrintKeyboardSwapTextsOnWin3();
+ CopyWindowToVram(3, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_HideWin3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ ClearWin3();
+ CopyWindowToVram(3, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_SwitchPages(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_ToggleSelectorCursorObjVisibility(TRUE);
+ if (AnimateMoveBg1Right())
+ return TRUE;
+
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 2);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+ break;
+ case 2:
+ if (AnimateMoveBg1Left())
+ return TRUE;
+
+ UnionRoomChat_MoveSelectorCursorObj();
+ UnionRoomChat_ToggleSelectorCursorObjVisibility(FALSE);
+ UpdateVisibleUnionRoomChatIcon();
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state)
+{
+ UnionRoomChat_MoveSelectorCursorObj();
+ return FALSE;
+}
+
+static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0);
+ PlaceYesNoMenuAt(23, 11, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ HideStdMessageWindow();
+ HideYesNoMenuWindow();
+ CopyBgTilemapBufferToVram(0);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ DestroyStdMessageWindow();
+ DestroyYesNoMenuWindow();
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state)
+{
+ u32 start, length;
+ u8 *str;
+
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_GetBufferSelectionRegion(&start, &length);
+ FillWin1Rect(start, length, PIXEL_FILL(0));
+ str = UnionRoomChat_GetMessageEntryBuffer();
+ PrintOnWin1Parameterized(0, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UpdateVisibleUnionRoomChatIcon();
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state)
+{
+ u16 var0;
+ u8 *str;
+ u16 length;
+
+ switch (*state)
+ {
+ case 0:
+ var0 = UnionRoomChat_GetNumCharsInMessageEntryBuffer();
+ str = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ length = StringLength_Multibyte(str);
+ FillWin1Rect(var0, length, PIXEL_FILL(6));
+ PrintOnWin1Parameterized(var0, str, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ PlaceStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ UnionRoomChat_UpdateObjPalCycle(1);
+ else
+ return TRUE;
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_CancelRegister(u8 *state)
+{
+ u16 x;
+ u8 *str;
+ u16 length;
+
+ switch (*state)
+ {
+ case 0:
+ x = UnionRoomChat_GetNumCharsInMessageEntryBuffer();
+ str = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ length = StringLength_Multibyte(str);
+ FillWin1Rect(x, length, PIXEL_FILL(0));
+ PrintOnWin1Parameterized(x, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ HideStdMessageWindow();
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UnionRoomChat_UpdateObjPalCycle(0);
+ DestroyStdMessageWindow();
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 2);
+ (*state)++;
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+ else
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ScrollChat(u8 *state)
+{
+ u16 row;
+ u8 *str;
+ u8 colorIdx;
+
+ switch (*state)
+ {
+ case 0:
+ row = sWork->curLine;
+ str = UnionRoomChat_GetLastReceivedMessage();
+ colorIdx = UnionRoomChat_GetReceivedPlayerIndex();
+ PrintTextOnWin0Colorized(row, str, colorIdx);
+ CopyWindowToVram(0, 2);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ if (sWork->curLine < 9)
+ {
+ sWork->curLine++;
+ *state = 4;
+ return FALSE;
+ }
+ else
+ {
+ sWork->scrollCount = 0;
+ (*state)++;
+ }
+ // fall through
+ case 2:
+ ScrollWindow(0, 0, 5, PIXEL_FILL(1));
+ CopyWindowToVram(0, 2);
+ sWork->scrollCount++;
+ (*state)++;
+ // fall through
+ case 3:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ if (sWork->scrollCount < 3)
+ {
+ (*state)--;
+ return TRUE;
+ }
+ break;
+ case 4:
+ return FALSE;
+ default:
+ return TRUE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_SetSelectorCursorClosedImage();
+ (*state)++;
+ break;
+ case 1:
+ return UnionRoomChat_AnimateSelectorCursorReopen();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintInputText(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintExitingChat(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state)
+{
+ u8 *str;
+
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ str = UnionRoomChat_GetNameOfPlayerWhoDisbandedChat();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
+ PlaceStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AskSave(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_ASK_SAVE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AskOverwriteSave(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ PlaceStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtaskDummy(u8 *arg0)
+{
+ return FALSE;
+}
+
+static void PlaceYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos)
+{
+ struct WindowTemplate template;
+ template.bg = 0;
+ template.tilemapLeft = left;
+ template.tilemapTop = top;
+ template.width = 6;
+ template.height = 4;
+ template.paletteNum = 14;
+ template.baseBlock = 0x052;
+ sWork->yesNoMenuWinId = AddWindow(&template);
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1));
+ PutWindowTilemap(sWork->yesNoMenuWinId);
+ AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13);
+ Menu_InitCursor(sWork->yesNoMenuWinId, 2, 0, 2, 14, 2, initialCursorPos);
+ }
+}
+
+static void HideYesNoMenuWindow(void)
+{
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(sWork->yesNoMenuWinId, FALSE);
+ ClearWindowTilemap(sWork->yesNoMenuWinId);
+ }
+}
+
+static void DestroyYesNoMenuWindow(void)
+{
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ RemoveWindow(sWork->yesNoMenuWinId);
+ sWork->yesNoMenuWinId = 0xFF;
+ }
+}
+
+s8 UnionRoomChat_ProcessInput(void)
+{
+ return Menu_ProcessInput();
+}
+
+static void PlaceStdMessageWindow(int id, u16 bg0vofs)
+{
+ const u8 *str;
+ int windowId;
+ struct WindowTemplate template;
+ template.bg = 0;
+ template.tilemapLeft = 8;
+ template.tilemapTop = 16;
+ template.width = 21;
+ template.height = 4;
+ template.paletteNum = 14;
+ template.baseBlock = 0x06A;
+ if (sMessageWindowInfo[id].widerBox)
+ {
+ template.tilemapLeft -= 7;
+ template.width += 7;
+ }
+
+ sWork->messageWindowId = AddWindow(&template);
+ windowId = sWork->messageWindowId;
+ if (sWork->messageWindowId == 0xFF)
+ return;
+
+ if (sMessageWindowInfo[id].expandPlaceholders)
+ {
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(sWork->expandedPlaceholdersBuffer, sMessageWindowInfo[id].text);
+ str = sWork->expandedPlaceholdersBuffer;
+ }
+ else
+ {
+ str = sMessageWindowInfo[id].text;
+ }
+
+ ChangeBgY(0, bg0vofs * 256, 0);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (sMessageWindowInfo[id].boxType == 1)
+ {
+ DrawTextBorderInner(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ sMessageWindowInfo[id].x + 8,
+ sMessageWindowInfo[id].y + 8,
+ TEXT_SPEED_FF,
+ NULL,
+ sMessageWindowInfo[id].letterSpacing,
+ sMessageWindowInfo[id].lineSpacing);
+ }
+ else
+ {
+ DrawTextBorderOuter(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ sMessageWindowInfo[id].x,
+ sMessageWindowInfo[id].y,
+ TEXT_SPEED_FF,
+ NULL,
+ sMessageWindowInfo[id].letterSpacing,
+ sMessageWindowInfo[id].lineSpacing);
+ }
+
+ sWork->messageWindowId = windowId;
+}
+
+static void HideStdMessageWindow(void)
+{
+ if (sWork->messageWindowId != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(sWork->messageWindowId, FALSE);
+ ClearWindowTilemap(sWork->messageWindowId);
+ }
+
+ ChangeBgY(0, 0, 0);
+}
+
+static void DestroyStdMessageWindow(void)
+{
+ if (sWork->messageWindowId != 0xFF)
+ {
+ RemoveWindow(sWork->messageWindowId);
+ sWork->messageWindowId = 0xFF;
+ }
+}
+
+static void FillWin1Rect(u16 x, u16 width, u8 fillValue)
+{
+ FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
+}
+
+static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor)
+{
+ u8 color[3];
+ u8 strbuf[35];
+
+ if (bgColor != TEXT_COLOR_TRANSPARENT)
+ FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor);
+
+ color[0] = bgColor;
+ color[1] = fgColor;
+ color[2] = shadowColor;
+ strbuf[0] = EXT_CTRL_CODE_BEGIN;
+ strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ strbuf[2] = 8;
+ StringCopy(&strbuf[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strbuf);
+}
+
+static void PrintCurrentKeyboardPage(void)
+{
+ u8 page;
+ int i;
+ u16 left;
+ u16 top;
+ u8 color[3];
+ u8 str[45];
+ u8 *str2;
+
+ FillWindowPixelBuffer(2, PIXEL_FILL(15));
+ page = GetCurrentKeyboardPage();
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_DYNAMIC_COLOR_5;
+ color[2] = TEXT_DYNAMIC_COLOR_4;
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ str[2] = 8;
+
+ if (page == UNION_ROOM_KB_PAGE_EMOJI)
+ left = 6;
+ else
+ left = 8;
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
+ {
+ if (!gUnionRoomKeyboardText[page][i])
+ return;
+
+ StringCopy(&str[3], gUnionRoomKeyboardText[page][i]);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
+ }
+ }
+ else
+ {
+ left = 4;
+ for (i = 0, top = 0; i < 10; i++, top += 12)
+ {
+ str2 = UnionRoomChat_GetWorkRegisteredText(i);
+ if (GetStringWidth(0, str2, 0) <= 40)
+ {
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2);
+ }
+ else
+ {
+ int length = StringLength_Multibyte(str2);
+ do
+ {
+ length--;
+ StringCopyN_Multibyte(str, str2, length);
+ } while (GetStringWidth(0, str, 0) > 35);
+
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
+ AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, gText_Ellipsis);
+ }
+ }
+ }
+}
+
+static bool32 AnimateMoveBg1Right(void)
+{
+ if (sWork->bg1hofs < 56)
+ {
+ sWork->bg1hofs += 12;
+ if (sWork->bg1hofs >= 56)
+ sWork->bg1hofs = 56;
+
+ if (sWork->bg1hofs < 56)
+ {
+ FillScanlineEffectWithValue1col(sWork->bg1hofs);
+ return TRUE;
+ }
+ }
+
+ FillScanlineEffectWithValue2col(sWork->bg1hofs);
+ return FALSE;
+}
+
+static bool32 AnimateMoveBg1Left(void)
+{
+ if (sWork->bg1hofs > 0)
+ {
+ sWork->bg1hofs -= 12;
+ if (sWork->bg1hofs <= 0)
+ sWork->bg1hofs = 0;
+
+ if (sWork->bg1hofs > 0)
+ {
+ FillScanlineEffectWithValue1col(sWork->bg1hofs);
+ return TRUE;
+ }
+ }
+
+ FillScanlineEffectWithValue2col(sWork->bg1hofs);
+ return FALSE;
+}
+
+static void PrintKeyboardSwapTextsOnWin3(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ DrawTextBorderOuter(3, 1, 13);
+ UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, sKeyboardSwapTexts);
+ Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage());
+ PutWindowTilemap(3);
+}
+
+static void ClearWin3(void)
+{
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
+ ClearWindowTilemap(3);
+}
+
+static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx)
+// colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue
+{
+ u8 color[3];
+ color[0] = TEXT_COLOR_WHITE;
+ color[1] = colorIdx * 2 + 2;
+ color[2] = colorIdx * 2 + 3;
+ FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
+ AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str);
+}
+
+static void ResetGpuBgState(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3
+ | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
+}
+
+static void SetBgTilemapWorkBuffers(void)
+{
+ SetBgTilemapBuffer(0, sWork->bg0Buffer);
+ SetBgTilemapBuffer(1, sWork->bg1Buffer);
+ SetBgTilemapBuffer(3, sWork->bg3Buffer);
+ SetBgTilemapBuffer(2, sWork->bg2Buffer);
+}
+
+static void ClearBg0(void)
+{
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void LoadUnionRoomChatPanelGfx(void)
+{
+ LoadPalette(gUnionRoomChatPanelBgPal_7, 0x70, 0x20);
+ LoadPalette(sUnionRoomChatPanelBgPal_C, 0xC0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gUnionRoomChatPanelBgTiles, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, gUnionRoomChatPanelBgMap, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+}
+
+static void LoadLinkMiscMenuGfx(void)
+{
+ u8 *ptr;
+
+ LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
+ ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void LoadBg1Pal8(void)
+{
+ LoadPalette(sBg1Pal8, 0x80, 0x20);
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
+}
+
+static void LoadWin0(void)
+{
+ LoadPalette(sWin0PalF, 0xF0, 0x20);
+ PutWindowTilemap(0);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ CopyWindowToVram(0, 3);
+}
+
+static void LoadWin2(void)
+{
+ PutWindowTilemap(2);
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 3);
+}
+
+static void LoadWin1(void)
+{
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+static void LoadWin3(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ TextWindow_SetUserSelectedFrame(3, 1, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20);
+ LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20);
+}
+
+static void sub_812AD50(void)
+{
+ struct ScanlineEffectParams params;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.dmaDest = &REG_BG1HOFS;
+ params.initState = 1;
+ params.unused9 = 0;
+ sWork->bg1hofs = 0;
+ CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
+ ScanlineEffect_SetParams(params);
+}
+
+static void FillScanlineEffectWithValue1col(s16 arg0)
+{
+ CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
+}
+
+static void FillScanlineEffectWithValue2col(s16 arg0)
+{
+ CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
+ CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
+}
diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c
new file mode 100644
index 000000000..f97136a0a
--- /dev/null
+++ b/src/union_room_chat_objects.c
@@ -0,0 +1,318 @@
+#include "global.h"
+#include "gflib.h"
+#include "decompress.h"
+#include "graphics.h"
+#include "union_room_chat.h"
+
+struct UnionRoomChat3
+{
+ struct Sprite *selectorCursorSprite;
+ struct Sprite *characterSelectCursorSprite;
+ struct Sprite *textEntryCursorSprite;
+ struct Sprite *rButtonSprite;
+ struct Sprite *chatIconsSprite;
+ u16 cursorBlinkTimer;
+};
+
+static EWRAM_DATA struct UnionRoomChat3 *sWork = NULL;
+
+static void SpriteCB_TextEntryCursor(struct Sprite * sprite);
+static void SpriteCB_CharacterSelectCursor(struct Sprite * sprite);
+
+static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal");
+static const u32 sSelectorCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz");
+static const u32 sHorizontalBarGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz");
+static const u32 sMenuCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz");
+static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {sSelectorCursorGfxTiles, 0x1000, 0},
+ {sMenuCursorGfxTiles, 0x0040, 1},
+ {sHorizontalBarGfxTiles, 0x0040, 2},
+ {sRButtonGfxTiles, 0x0080, 3},
+ {gUnionRoomChatIcons, 0x0400, 4}
+};
+
+static const struct SpritePalette sSpritePalette = {
+ sUnionRoomChatInterfacePal, 0
+};
+
+static const struct OamData sOamData_64x32_1 = {
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .priority = 1
+};
+
+static const union AnimCmd sAnim_CursorSmallOpen[] = {
+ ANIMCMD_FRAME(0x00, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorSmallClosed[] = {
+ ANIMCMD_FRAME(0x20, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorLargeOpen[] = {
+ ANIMCMD_FRAME(0x40, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorLargeClosed[] = {
+ ANIMCMD_FRAME(0x60, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnims_SelectorCursor[] = {
+ sAnim_CursorSmallOpen,
+ sAnim_CursorSmallClosed,
+ sAnim_CursorLargeOpen,
+ sAnim_CursorLargeClosed
+};
+
+static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &sOamData_64x32_1,
+ .anims = sSpriteAnims_SelectorCursor,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_8x16_2 = {
+ .shape = SPRITE_SHAPE(8x16),
+ .size = SPRITE_SIZE(8x16),
+ .priority = 2
+};
+
+static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
+ .tileTag = 2,
+ .paletteTag = 0,
+ .oam = &sOamData_8x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_TextEntryCursor
+};
+
+static const struct SpriteTemplate sSpriteTemplate_CharacterSelectCursor = {
+ .tileTag = 1,
+ .paletteTag = 0,
+ .oam = &sOamData_8x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_CharacterSelectCursor
+};
+
+static const struct OamData sOamData_16x16_2 = {
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .priority = 2
+};
+
+static const struct OamData sOamData_32x16_2 = {
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .priority = 2
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_ToggleCase[] = {
+ ANIMCMD_FRAME(0x00, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy1[] = {
+ ANIMCMD_FRAME(0x08, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy2[] = {
+ ANIMCMD_FRAME(0x10, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Register[] = {
+ ANIMCMD_FRAME(0x18, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_UnionRoomChatIcons[] = {
+ sAnim_UnionRoomChatIcons_ToggleCase,
+ sAnim_UnionRoomChatIcons_Dummy1,
+ sAnim_UnionRoomChatIcons_Dummy2,
+ sAnim_UnionRoomChatIcons_Register
+};
+
+static const struct SpriteTemplate sSpriteTemplate_RButton = {
+ .tileTag = 3,
+ .paletteTag = 0,
+ .oam = &sOamData_16x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = {
+ .tileTag = 4,
+ .paletteTag = 0,
+ .oam = &sOamData_32x16_2,
+ .anims = sSpriteAnimTable_UnionRoomChatIcons,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+bool32 UnionRoomChat_TryAllocSpriteWork(void)
+{
+ int i;
+ for (i = 0; i < NELEMS(sSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
+
+ LoadSpritePalette(&sSpritePalette);
+ sWork = Alloc(sizeof(struct UnionRoomChat3));
+ if (sWork == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+void UnionRoomChat_FreeSpriteWork(void)
+{
+ if (sWork != NULL)
+ Free(sWork);
+}
+
+void UnionRoomChat_CreateSelectorCursorObj(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_SelectorCursor, 10, 24, 0);
+ sWork->selectorCursorSprite = &gSprites[spriteId];
+}
+
+void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible)
+{
+ sWork->selectorCursorSprite->invisible = invisible;
+}
+
+void UnionRoomChat_MoveSelectorCursorObj(void)
+{
+ u8 x, y;
+ u8 page = GetCurrentKeyboardPage();
+ UnionRoomChat_GetCursorColAndRow(&x, &y);
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ StartSpriteAnim(sWork->selectorCursorSprite, 0);
+ sWork->selectorCursorSprite->pos1.x = x * 8 + 10;
+ sWork->selectorCursorSprite->pos1.y = y * 12 + 24;
+ }
+ else
+ {
+ StartSpriteAnim(sWork->selectorCursorSprite, 2);
+ sWork->selectorCursorSprite->pos1.x = 24;
+ sWork->selectorCursorSprite->pos1.y = y * 12 + 24;
+ }
+}
+
+void UnionRoomChat_UpdateObjPalCycle(int arg0)
+{
+ const u16 *palette = &sUnionRoomChatInterfacePal[arg0 * 2 + 1];
+ u8 index = IndexOfSpritePaletteTag(0);
+ LoadPalette(palette, index * 16 + 0x101, 4);
+}
+
+void UnionRoomChat_SetSelectorCursorClosedImage(void)
+{
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
+ StartSpriteAnim(sWork->selectorCursorSprite, 1);
+ else
+ StartSpriteAnim(sWork->selectorCursorSprite, 3);
+
+ sWork->cursorBlinkTimer = 0;
+}
+
+bool32 UnionRoomChat_AnimateSelectorCursorReopen(void)
+{
+ if (sWork->cursorBlinkTimer > 3)
+ return FALSE;
+
+ if (++sWork->cursorBlinkTimer > 3)
+ {
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
+ StartSpriteAnim(sWork->selectorCursorSprite, 0);
+ else
+ StartSpriteAnim(sWork->selectorCursorSprite, 2);
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void UnionRoomChat_SpawnTextEntryPointerSprites(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2);
+ sWork->textEntryCursorSprite = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_CharacterSelectCursor, 64, 152, 1);
+ sWork->characterSelectCursorSprite = &gSprites[spriteId];
+}
+
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite)
+{
+ int var0 = UnionRoomChat_GetMessageEntryCursorPosition();
+ if (var0 == 15)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->pos1.x = var0 * 8 + 76;
+ }
+}
+
+static void SpriteCB_CharacterSelectCursor(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 4)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->pos2.x > 4)
+ sprite->pos2.x = 0;
+ }
+}
+
+void CreatePageSwitchUISprites(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_RButton, 8, 152, 3);
+ sWork->rButtonSprite = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_UnionRoomChatIcons, 32, 152, 4);
+ sWork->chatIconsSprite = &gSprites[spriteId];
+ sWork->chatIconsSprite->invisible = TRUE;
+}
+
+void UpdateVisibleUnionRoomChatIcon(void)
+{
+ if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT)
+ {
+ if (UnionRoomChat_LenMessageEntryBuffer() != 0)
+ {
+ // REGISTER
+ sWork->chatIconsSprite->invisible = FALSE;
+ StartSpriteAnim(sWork->chatIconsSprite, 3);
+ }
+ else
+ {
+ sWork->chatIconsSprite->invisible = TRUE;
+ }
+ }
+ else
+ {
+ int anim = UnionRoomChat_GetWhetherShouldShowCaseToggleIcon();
+ if (anim == 3)
+ {
+ sWork->chatIconsSprite->invisible = TRUE;
+ }
+ else
+ {
+ // A <--> a
+ sWork->chatIconsSprite->invisible = FALSE;
+ StartSpriteAnim(sWork->chatIconsSprite, anim);
+ }
+ }
+}
diff --git a/src/union_room_message.c b/src/union_room_message.c
index 9ca5aa15b..1d26d1968 100644
--- a/src/union_room_message.c
+++ b/src/union_room_message.c
@@ -1,10 +1,11 @@
#include "global.h"
#include "union_room_message.h"
#include "mevent_server.h"
+#include "constants/union_room.h"
-ALIGNED(4) const u8 gUnknown_84571AC[] = _("");
+ALIGNED(4) const u8 gUnionRoomActivity_Blank[] = _("");
ALIGNED(4) const u8 gUnknown_84571B0[] = _(":");
-ALIGNED(4) const u8 gUnknown_84571B4[] = _("{EXTRA 7}");
+ALIGNED(4) const u8 gUnknown_84571B4[] = _("{ID}");
ALIGNED(4) const u8 gUnknown_84571B8[] = _("Please start over from the beginning.");
ALIGNED(4) const u8 gUnknown_84571E0[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled.");
ALIGNED(4) const u8 gUnref_845721C[] = _("ともだちからの れんらくを\nまっています");
@@ -124,6 +125,7 @@ const u8 *const gUnknown_8457754[] = {
ALIGNED(4) const u8 gUnknown_845777C[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
ALIGNED(4) const u8 gUnknown_84577BC[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…");
+
ALIGNED(4) const u8 gUnknown_84577F8[] = _("The link with your friend has been\ndropped…");
ALIGNED(4) const u8 gUnknown_8457824[] = _("{STR_VAR_1} replied, “No…”");
@@ -150,11 +152,12 @@ const u8 *const gUnknown_8457898[] = {
ALIGNED(4) const u8 gUnknown_84578A0[] = _("はなしかけています…\nしょうしょう おまちください");
ALIGNED(4) const u8 gUnknown_84578BC[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…");
+
ALIGNED(4) const u8 gUnknown_84578E4[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
ALIGNED(4) const u8 gUnknown_8457950[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
ALIGNED(4) const u8 gUnknown_84579BC[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
-const u8 *const gUnknown_8457A34[] = {
+const u8 *const gURText_PleaseWaitMsgs[] = {
gUnknown_84578E4,
gUnknown_8457950,
gUnknown_84579BC
@@ -165,7 +168,7 @@ ALIGNED(4) const u8 gUnknown_8457A70[] = _("Hello!\nWould you like to do somethi
ALIGNED(4) const u8 gUnknown_8457A98[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?");
ALIGNED(4) const u8 gUnknown_8457AD0[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?");
-const u8 *const gUnknown_8457B04[][2] = {
+const u8 *const gURText_FriendPromptsForActivity[][2] = {
{
gUnknown_8457A40,
gUnknown_8457A70
@@ -237,6 +240,7 @@ const u8 *const gUnknown_8457F80[][2] = {
};
ALIGNED(4) const u8 gUnknown_8457F90[] = _("……\nThe TRAINER appears to be busy…\p");
+
ALIGNED(4) const u8 gUnknown_8457FB4[] = _("A battle, huh?\nAll right, just give me some time.");
ALIGNED(4) const u8 gUnknown_8457FE8[] = _("You want to chat, huh?\nSure, just wait a little.");
ALIGNED(4) const u8 gUnknown_845801C[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD.");
@@ -244,7 +248,7 @@ ALIGNED(4) const u8 gUnknown_8458054[] = _("A battle? Of course, but I need\ntim
ALIGNED(4) const u8 gUnknown_8458088[] = _("Did you want to chat?\nOkay, but please wait a moment.");
ALIGNED(4) const u8 gUnknown_84580C0[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
-const u8 *const gUnknown_84580F4[][4] = {
+const u8 *const gResponseToURoomActivityInviteStringPtrs[][4] = {
{
gUnknown_8457FB4,
gUnknown_8457FE8,
@@ -415,7 +419,8 @@ ALIGNED(4) const u8 gUnknown_8458AB8[] = _("Welcome to the TRADING BOARD.\pYou m
ALIGNED(4) const u8 gUnknown_8458B44[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?");
ALIGNED(4) const u8 gUnref_ThankYouForComing_JP[] = _("こうかんけいじばん の とうろくが\nかんりょう しました\pごりよう ありがとう\nございました!\p");
ALIGNED(4) const u8 gUnref_NoOneRegisteredMon[] = _("けいじばんに だれも ポケモンを\nとうろく していません\p\n");
-ALIGNED(4) const u8 gUnknown_8458CD4[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n");
+
+ALIGNED(4) const u8 gURText_PleaseChooseTypeOfMon[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n");
ALIGNED(4) const u8 gUnknown_8458D1C[] = _("Which of your party POKéMON will\nyou offer in trade?\p");
ALIGNED(4) const u8 gUnknown_8458D54[] = _("Registration has been canceled.\p");
ALIGNED(4) const u8 gUnknown_8458D78[] = _("Registration has been completed.\p");
@@ -439,9 +444,10 @@ const u8 *const gUnknown_8458F94[] = {
};
ALIGNED(4) const u8 gUnknown_8458F9C[] = _("Your trade offer was rejected.\p");
-ALIGNED(4) const u8 gUnknown_8458FBC[] = _("EGG TRADE");
+ALIGNED(4) const u8 gText_EggTrade[] = _("EGG TRADE");
ALIGNED(4) const u8 gUnknown_8458FC8[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL");
ALIGNED(4) const u8 gUnknown_8458FE4[] = _("Please choose a TRAINER.");
+
ALIGNED(4) const u8 gUnknown_8459000[] = _("Please choose a TRAINER for\na SINGLE BATTLE.");
ALIGNED(4) const u8 gUnknown_8459030[] = _("Please choose a TRAINER for\na DOUBLE BATTLE.");
ALIGNED(4) const u8 gUnknown_8459060[] = _("Please choose the LEADER\nfor a MULTI BATTLE.");
@@ -453,15 +459,15 @@ ALIGNED(4) const u8 gUnknown_8459160[] = _("BERRY CRUSH!\nPlease choose the LEAD
ALIGNED(4) const u8 gUnknown_8459188[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER.");
const u8 *const gUnknown_84591B8[] = {
- gUnknown_8459000,
- gUnknown_8459030,
- gUnknown_8459060,
- gUnknown_8459090,
- gUnknown_845912C,
- gUnknown_8459160,
- gUnknown_8459188,
- gUnknown_84590BC,
- gUnknown_84590F4
+ [LINK_GROUP_SINGLE_BATTLE] = gUnknown_8459000,
+ [LINK_GROUP_DOUBLE_BATTLE] = gUnknown_8459030,
+ [LINK_GROUP_MULTI_BATTLE] = gUnknown_8459060,
+ [LINK_GROUP_TRADE] = gUnknown_8459090,
+ [LINK_GROUP_POKEMON_JUMP] = gUnknown_845912C,
+ [LINK_GROUP_BERRY_CRUSH] = gUnknown_8459160,
+ [LINK_GROUP_BERRY_PICKING] = gUnknown_8459188,
+ [LINK_GROUP_WONDER_CARD] = gUnknown_84590BC,
+ [LINK_GROUP_WONDER_NEWS] = gUnknown_84590F4
};
ALIGNED(4) const u8 gUnknown_84591DC[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait...");
@@ -470,6 +476,7 @@ ALIGNED(4) const u8 gUnknown_8459238[] = _("Awaiting {STR_VAR_1}'s response…")
ALIGNED(4) const u8 gUnknown_8459250[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait.");
ALIGNED(4) const u8 gUnknown_845928C[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM.");
ALIGNED(4) const u8 gUnref_PlsWaitLittleWHile[] = _("ほかの さんかしゃが そろうまで\nしょうしょう おまちください");
+
ALIGNED(4) const u8 gUnknown_84592E8[] = _("No CARDS appear to be shared \nright now.");
ALIGNED(4) const u8 gUnknown_8459314[] = _("No NEWS appears to be shared\nright now.");
@@ -482,23 +489,26 @@ ALIGNED(4) const u8 gUnknown_8459344[] = _("BATTLE");
ALIGNED(4) const u8 gUnknown_845934C[] = _("CHAT");
ALIGNED(4) const u8 gUnknown_8459354[] = _("GREETINGS");
ALIGNED(4) const u8 gUnknown_8459360[] = _("EXIT");
+
ALIGNED(4) const u8 gUnknown_8459368[] = _("EXIT");
ALIGNED(4) const u8 gUnknown_8459370[] = _("INFO");
ALIGNED(4) const u8 gUnknown_8459378[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV.");
-ALIGNED(4) const u8 gUnknown_8459394[] = _("SINGLE BATTLE");
-ALIGNED(4) const u8 gUnknown_84593A4[] = _("DOUBLE BATTLE");
-ALIGNED(4) const u8 gUnknown_84593B4[] = _("MULTI BATTLE");
-ALIGNED(4) const u8 gUnknown_84593C4[] = _("POKéMON TRADES");
-ALIGNED(4) const u8 gUnknown_84593D4[] = _("CHAT");
-ALIGNED(4) const u8 gUnknown_84593DC[] = _("CARDS");
-ALIGNED(4) const u8 gUnknown_84593E4[] = _("WONDER CARDS");
-ALIGNED(4) const u8 gUnknown_84593F4[] = _("WONDER NEWS");
-ALIGNED(4) const u8 gUnknown_8459400[] = _("POKéMON JUMP");
-ALIGNED(4) const u8 gUnknown_8459410[] = _("BERRY CRUSH");
-ALIGNED(4) const u8 gUnknown_845941C[] = _("BERRY-PICKING");
-ALIGNED(4) const u8 gUnknown_845942C[] = _("SEARCH");
-ALIGNED(4) const u8 gUnknown_8459434[] = _("ぐるぐるこうかん");
-ALIGNED(4) const u8 gUnknown_8459440[] = _("アイテムトレード");
+
+ALIGNED(4) const u8 gUnionRoomActivity_SingleBattle[] = _("SINGLE BATTLE");
+ALIGNED(4) const u8 gUnionRoomActivity_DoubleBattle[] = _("DOUBLE BATTLE");
+ALIGNED(4) const u8 gUnionRoomActivity_MultiBattle[] = _("MULTI BATTLE");
+ALIGNED(4) const u8 gUnionRoomActivity_PokemonTrades[] = _("POKéMON TRADES");
+ALIGNED(4) const u8 gUnionRoomActivity_Chat[] = _("CHAT");
+ALIGNED(4) const u8 gUnionRoomActivity_Cards[] = _("CARDS");
+ALIGNED(4) const u8 gUnionRoomActivity_WonderCards[] = _("WONDER CARDS");
+ALIGNED(4) const u8 gunionRoomActivity_WonderNews[] = _("WONDER NEWS");
+ALIGNED(4) const u8 gUnionRoomActivity_PokemonJump[] = _("POKéMON JUMP");
+ALIGNED(4) const u8 gUnionRoomActivity_BerryCrush[] = _("BERRY CRUSH");
+ALIGNED(4) const u8 gUnionRoomActivity_BerryPicking[] = _("BERRY-PICKING");
+ALIGNED(4) const u8 gUnionRoomActivity_Search[] = _("SEARCH");
+ALIGNED(4) const u8 gUnionRoomActivity_SpinTradeJP[] = _("ぐるぐるこうかん");
+ALIGNED(4) const u8 gUnionRoomActivity_ItemTradeJP[] = _("アイテムトレード");
+
ALIGNED(4) const u8 gUnknown_845944C[] = _("It's a NORMAL CARD.");
ALIGNED(4) const u8 gUnknown_8459460[] = _("It's a BRONZE CARD!");
ALIGNED(4) const u8 gUnknown_8459474[] = _("It's a COPPER CARD!");
@@ -515,6 +525,7 @@ const u8 *const gUnknown_84594B0[] = {
ALIGNED(4) const u8 gUnknown_84594C4[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p");
ALIGNED(4) const u8 gUnknown_8459504[] = _("BATTLES: {SPECIAL_F7 0x00} WINS {SPECIAL_F7 0x02} LOSSES\nTRADES: {SPECIAL_F7 0x03} TIMES\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p");
+
ALIGNED(4) const u8 gUnknown_8459544[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
ALIGNED(4) const u8 gUnknown_8459564[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
diff --git a/src/unk_815C980.c b/src/unk_815C980.c
deleted file mode 100644
index 09b92c834..000000000
--- a/src/unk_815C980.c
+++ /dev/null
@@ -1,437 +0,0 @@
-#include "global.h"
-#include "malloc.h"
-#include "decompress.h"
-#include "unk_815C980.h"
-#include "main.h"
-#include "battle.h"
-
-struct UnkStruct2
-{
- bool8 isActive;
- u8 firstOamId;
- u8 field_2;
- u8 oamCount;
- u8 palTagIndex;
- u8 size;
- u8 shape;
- u8 priority;
- u8 xDelta;
- u8 field_9;
- u16 tileStart;
- s16 x;
- s16 y;
- u16 tileTag;
- u16 palTag;
- u32 field_14;
- s32 field_18;
-};
-
-struct UnkStruct1
-{
- u32 count;
- struct UnkStruct2 *array;
-};
-
-// this file's functions
-static u8 sub_815D244(u8 arg0);;
-static void sub_815CC28(struct UnkStruct2 *arg0);
-static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
-static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
-static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2);
-static bool32 SharesTileWithAnyActive(u32 id);
-static bool32 SharesPalWithAnyActive(u32 id);
-static void sub_8035648(void);
-static u8 sub_815D324(u32 shape, u32 size);
-
-// ewram
-static EWRAM_DATA struct UnkStruct1 *gUnknown_203F454 = {0};
-
-// const rom data
-static const u8 gUnknown_8479658[][4] =
-{
- {0x01, 0x04, 0x10, 0x40},
- {0x02, 0x04, 0x08, 0x20},
- {0x02, 0x04, 0x08, 0x20},
- {0x00, 0x00, 0x00, 0x00}
-};
-
-// code
-bool32 sub_815C980(u32 count)
-{
- u32 i;
-
- if (gUnknown_203F454 != NULL)
- sub_815C9F4();
-
- gUnknown_203F454 = Alloc(sizeof(*gUnknown_203F454));
- if (gUnknown_203F454 == NULL)
- return FALSE;
-
- gUnknown_203F454->array = Alloc(sizeof(struct UnkStruct2) * count);
- if (gUnknown_203F454->array == NULL)
- {
- Free(gUnknown_203F454);
- return FALSE;
- }
-
- gUnknown_203F454->count = count;
- for (i = 0; i < count; i++)
- {
- gUnknown_203F454->array[i].isActive = FALSE;
- gUnknown_203F454->array[i].firstOamId = 0xFF;
- }
-
- return TRUE;
-}
-
-void sub_815C9F4(void)
-{
- if (gUnknown_203F454 != NULL)
- {
- if (gUnknown_203F454->array != NULL)
- {
- u32 i;
-
- for (i = 0; i < gUnknown_203F454->count; i++)
- sub_815D108(i);
-
- Free(gUnknown_203F454->array);
- }
-
- FREE_AND_SET_NULL(gUnknown_203F454);
- }
-}
-
-bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2)
-{
- u32 i;
-
- if (gUnknown_203F454 == NULL)
- return FALSE;
- if (gUnknown_203F454->array[id].isActive)
- return FALSE;
-
- gUnknown_203F454->array[id].firstOamId = sub_815D244(arg2->field_1);
- if (gUnknown_203F454->array[id].firstOamId == 0xFF)
- return FALSE;
-
- gUnknown_203F454->array[id].tileStart = GetSpriteTileStartByTag(arg2->spriteSheet->tag);
- if (gUnknown_203F454->array[id].tileStart == 0xFFFF)
- {
- if (arg2->spriteSheet->size != 0)
- {
- gUnknown_203F454->array[id].tileStart = LoadSpriteSheet(arg2->spriteSheet);
- }
- else
- {
- struct CompressedSpriteSheet compObjectPic;
-
- compObjectPic = *(struct CompressedSpriteSheet*)(arg2->spriteSheet);
- compObjectPic.size = GetDecompressedDataSize(arg2->spriteSheet->data);
- gUnknown_203F454->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic);
- }
-
- if (gUnknown_203F454->array[id].tileStart == 0xFFFF)
- return FALSE;
- }
-
- gUnknown_203F454->array[id].palTagIndex = IndexOfSpritePaletteTag(arg2->spritePal->tag);
- if (gUnknown_203F454->array[id].palTagIndex == 0xFF)
- gUnknown_203F454->array[id].palTagIndex = LoadSpritePalette(arg2->spritePal);
-
- gUnknown_203F454->array[id].field_2 = arg2->field_0_0;
- gUnknown_203F454->array[id].oamCount = arg2->field_1;
- gUnknown_203F454->array[id].x = arg2->x;
- gUnknown_203F454->array[id].y = arg2->y;
- gUnknown_203F454->array[id].shape = arg2->shape;
- gUnknown_203F454->array[id].size = arg2->size;
- gUnknown_203F454->array[id].priority = arg2->priority;
- gUnknown_203F454->array[id].xDelta = arg2->xDelta;
- gUnknown_203F454->array[id].field_9 = sub_815D324(arg2->shape, arg2->size);
- gUnknown_203F454->array[id].tileTag = arg2->spriteSheet->tag;
- gUnknown_203F454->array[id].palTag = arg2->spritePal->tag;
- gUnknown_203F454->array[id].isActive = TRUE;
- gUnknown_203F454->array[id].field_14 = 1;
-
- for (i = 1; i < arg2->field_1; i++)
- gUnknown_203F454->array[id].field_14 *= 10;
-
- sub_815CC28(&gUnknown_203F454->array[id]);
- sub_815CD70(id, arg1);
-
- return TRUE;
-}
-
-static void sub_815CC28(struct UnkStruct2 *arg0)
-{
- u32 i;
- u32 oamId = arg0->firstOamId;
- u32 x = arg0->x;
- u32 oamCount = arg0->oamCount + 1;
-
- CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount);
- for (i = 0, oamId = arg0->firstOamId; i < oamCount; i++, oamId++)
- {
- gMain.oamBuffer[oamId].y = arg0->y;
- gMain.oamBuffer[oamId].x = x;
- gMain.oamBuffer[oamId].shape = arg0->shape;
- gMain.oamBuffer[oamId].size = arg0->size;
- gMain.oamBuffer[oamId].tileNum = arg0->tileStart;
- gMain.oamBuffer[oamId].priority = arg0->priority;
- gMain.oamBuffer[oamId].paletteNum = arg0->palTagIndex;
-
- x += arg0->xDelta;
- }
-
- oamId--;
- gMain.oamBuffer[oamId].x = arg0->x - arg0->xDelta;
- gMain.oamBuffer[oamId].affineMode = 2;
- gMain.oamBuffer[oamId].tileNum = arg0->tileStart + (arg0->field_9 * 10);
-}
-
-void sub_815CD70(u32 id, s32 arg1)
-{
- bool32 r2;
-
- if (gUnknown_203F454 == NULL)
- return;
- if (!gUnknown_203F454->array[id].isActive)
- return;
-
- gUnknown_203F454->array[id].field_18 = arg1;
- if (arg1 < 0)
- {
- r2 = TRUE;
- arg1 *= -1;
- }
- else
- {
- r2 = FALSE;
- }
-
- switch (gUnknown_203F454->array[id].field_2)
- {
- case 0:
- default:
- sub_815CDDC(&gUnknown_203F454->array[id], arg1, r2);
- break;
- case 1:
- sub_815CE90(&gUnknown_203F454->array[id], arg1, r2);
- break;
- case 2:
- sub_815CFEC(&gUnknown_203F454->array[id], arg1, r2);
- break;
- }
-}
-
-static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
-{
- u32 r5 = arg0->field_14;
- u32 oamId = arg0->firstOamId;
-
- while (r5 != 0)
- {
- u32 r4 = arg1 / r5;
- arg1 -= (r4 * r5);
- r5 /= 10;
-
- gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
- oamId++;
- }
-
- if (arg2)
- gMain.oamBuffer[oamId].affineMode = 0;
- else
- gMain.oamBuffer[oamId].affineMode = 2;
-}
-
-static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
-{
- u32 r5 = arg0->field_14;
- static int gUnknown_3002078;
- static int gUnknown_300207C;
- static int gUnknown_3002080;
-
- gUnknown_3002078 = arg0->firstOamId;
- gUnknown_300207C = 0;
- gUnknown_3002080 = -1;
-
- while (r5 != 0)
- {
- u32 r4 = arg1 / r5;
- arg1 -= (r4 * r5);
- r5 /= 10;
-
- if (r4 != 0 || gUnknown_3002080 != -1 || r5 == 0)
- {
- gMain.oamBuffer[gUnknown_3002078].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
- gMain.oamBuffer[gUnknown_3002078].affineMode = 0;
-
- if (gUnknown_3002080 == -1)
- gUnknown_3002080 = gUnknown_300207C;
- }
- else
- {
- gMain.oamBuffer[gUnknown_3002078].affineMode = 2;
- }
-
- gUnknown_3002078++;
- gUnknown_300207C++;
- }
-
- if (arg2)
- {
- gMain.oamBuffer[gUnknown_3002078].affineMode = 0;
- gMain.oamBuffer[gUnknown_3002078].x = arg0->x + ((gUnknown_3002080 - 1) * arg0->xDelta);
- }
- else
- {
- gMain.oamBuffer[gUnknown_3002078].affineMode = 2;
- }
-}
-
-static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
-{
- u32 r5 = arg0->field_14;
- u32 oamId = arg0->firstOamId;
- u32 var_28 = 0;
- s32 r9 = 0;
-
- while (r5 != 0)
- {
- u32 r4 = arg1 / r5;
- arg1 -= (r4 * r5);
- r5 /= 10;
-
- if (r4 != 0 || var_28 != 0 || r5 == 0)
- {
- var_28 = 1;
- gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
- gMain.oamBuffer[oamId].affineMode = 0;
-
- oamId++;
- r9++;
- }
- }
-
- while (r9 < arg0->oamCount)
- {
- gMain.oamBuffer[oamId].affineMode = 2;
- oamId++;
- r9++;
- }
-
- if (arg2)
- gMain.oamBuffer[oamId].affineMode = 0;
- else
- gMain.oamBuffer[oamId].affineMode = 2;
-}
-
-void sub_815D108(u32 id)
-{
- s32 oamId, oamCount, i;
-
- if (gUnknown_203F454 == NULL)
- return;
- if (!gUnknown_203F454->array[id].isActive)
- return;
-
- oamCount = gUnknown_203F454->array[id].oamCount + 1;
- oamId = gUnknown_203F454->array[id].firstOamId;
-
- for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 2;
-
- if (!SharesTileWithAnyActive(id))
- FreeSpriteTilesByTag(gUnknown_203F454->array[id].tileTag);
- if (!SharesPalWithAnyActive(id))
- FreeSpritePaletteByTag(gUnknown_203F454->array[id].palTag);
-
- gUnknown_203F454->array[id].isActive = FALSE;
-}
-
-void sub_815D1A8(u32 id, bool32 arg1)
-{
- s32 oamId, oamCount, i;
-
- if (gUnknown_203F454 == NULL)
- return;
- if (!gUnknown_203F454->array[id].isActive)
- return;
-
- oamCount = gUnknown_203F454->array[id].oamCount + 1;
- oamId = gUnknown_203F454->array[id].firstOamId;
- if (arg1)
- {
- for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 2;
- }
- else
- {
- for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 0;
-
- sub_815CD70(id, gUnknown_203F454->array[id].field_18);
- }
-}
-
-static u8 sub_815D244(u8 arg0)
-{
- u32 i;
- u16 oamCount = 64;
-
- for (i = 0; i < gUnknown_203F454->count; i++)
- {
- if (!gUnknown_203F454->array[i].isActive)
- {
- if (gUnknown_203F454->array[i].firstOamId != 0xFF && gUnknown_203F454->array[i].oamCount <= arg0)
- return gUnknown_203F454->array[i].firstOamId;
- }
- else
- {
- oamCount += 1 + gUnknown_203F454->array[i].oamCount;
- }
- }
-
- if (oamCount + arg0 + 1 > 128)
- return 0xFF;
- else
- return oamCount;
-}
-
-static bool32 SharesTileWithAnyActive(u32 id)
-{
- u32 i;
-
- for (i = 0; i < gUnknown_203F454->count; i++)
- {
- if (gUnknown_203F454->array[i].isActive && i != id
- && gUnknown_203F454->array[i].tileTag == gUnknown_203F454->array[id].tileTag)
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static bool32 SharesPalWithAnyActive(u32 id)
-{
- u32 i;
-
- for (i = 0; i < gUnknown_203F454->count; i++)
- {
- if (gUnknown_203F454->array[i].isActive && i != id
- && gUnknown_203F454->array[i].palTag == gUnknown_203F454->array[id].palTag)
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static u8 sub_815D324(u32 shape, u32 size)
-{
- return gUnknown_8479658[shape][size];
-}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index b35b6143e..9c9a4d67f 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -22,7 +22,6 @@
#include "field_player_avatar.h"
#include "event_object_80688E4.h"
#include "event_object_8097404.h"
-#include "unk_810c3a4.h"
#include "vs_seeker.h"
#include "constants/movement_commands.h"
#include "constants/object_events.h"
@@ -598,7 +597,7 @@ static void sub_810C3B8(u8 taskId)
{
if (sub_810CF04(i) == TRUE)
{
- if (gObjectEvents[i].mapobj_bit_1)
+ if (gObjectEvents[i].singleMovementActive)
return;
FreezeObjectEvent(&gObjectEvents[i]);
}
diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c
index 9be2823aa..7267d4ace 100644
--- a/src/wireless_communication_status_screen.c
+++ b/src/wireless_communication_status_screen.c
@@ -13,40 +13,32 @@
#include "dynamic_placeholder_text_util.h"
#include "overworld.h"
#include "sound.h"
+#include "strings.h"
#include "menu.h"
#include "librfu.h"
#include "link_rfu.h"
#include "union_room.h"
#include "constants/songs.h"
+#include "constants/union_room.h"
struct WirelessCommunicationStatusScreenStruct
{
- u32 field_00[4];
- u32 field_10[4];
- u32 field_20[16];
- u8 field_60;
- u8 field_61;
+ u32 counts[4];
+ u32 lastCounts[4];
+ u32 activities[16];
+ u8 taskId;
+ u8 rfuTaskId;
u8 filler_62[0xA];
};
-struct WirelessCommunicationStatusScreenStruct * gUnknown_3002040;
+static struct WirelessCommunicationStatusScreenStruct * sWCSS;
-extern const u8 gUnknown_841E2B4[];
-extern const u8 gUnknown_841E2BF[];
-extern const u8 gUnknown_841E2C9[];
-extern const u8 gUnknown_841E2D4[];
-extern const u8 gUnknown_841E245[];
-extern const u8 gUnknown_841E263[];
-extern const u8 gUnknown_841E273[];
-extern const u8 gUnknown_841E284[];
-extern const u8 gUnknown_841E29E[];
+static void CB2_InitWirelessCommunicationScreen(void);
+static void Task_WirelessCommunicationScreen(u8 taskId);
+static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx);
+static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId);
-void sub_814F1E4(void);
-void sub_814F46C(u8 taskId);
-void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx);
-bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId);
-
-const u16 gUnknown_846F4D0[][16] = {
+static const u16 sWCSS_Palettes[][16] = {
INCBIN_U16("graphics/misc/unk_846f4d0.gbapal"),
INCBIN_U16("graphics/misc/unk_846f4f0.gbapal"),
INCBIN_U16("graphics/misc/unk_846f510.gbapal"),
@@ -65,10 +57,10 @@ const u16 gUnknown_846F4D0[][16] = {
INCBIN_U16("graphics/misc/unk_846f6b0.gbapal")
};
-const u32 gUnknown_846F6D0[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz");
-const u16 gUnknown_846F8E0[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin");
+static const u32 sBgTilesGfx[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz");
+static const u16 sBgTilemap[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin");
-const struct BgTemplate gUnknown_846FA74[] = {
+static const struct BgTemplate sBGTemplates[] = {
{
.bg = 0,
.charBaseIndex = 2,
@@ -88,7 +80,7 @@ const struct BgTemplate gUnknown_846FA74[] = {
}
};
-const struct WindowTemplate gUnknown_846FA7C[] = {
+static const struct WindowTemplate sWindowTemplates[] = {
{
.bg = 0x00,
.tilemapLeft = 0x03,
@@ -116,47 +108,51 @@ const struct WindowTemplate gUnknown_846FA7C[] = {
}, DUMMY_WIN_TEMPLATE
};
-const u8 *const gUnknown_846FA9C[] = {
+static const u8 *const gUnknown_846FA9C[] = {
gUnknown_841E2B4,
gUnknown_841E2BF,
gUnknown_841E2C9,
gUnknown_841E2D4
};
-const u8 *const gUnknown_846FAAC[] = {
- gUnknown_841E245,
- gUnknown_841E263,
- gUnknown_841E273,
- gUnknown_841E284,
- gUnknown_841E29E
+
+static const u8 *const sHeaderTextPtrs[] = {
+ gText_WirelessCommunicationStatus,
+ gText_PeopleTrading,
+ gText_PeopleBattling,
+ gText_PeopleInUnionRoom,
+ gText_PeopleCommunicating
};
-const u8 gUnknown_846FAC0[][3] = {
- {0x01, 0x01, 0x02},
- {0x02, 0x01, 0x02},
- {0x03, 0x01, 0x04},
- {0x04, 0x00, 0x02},
- {0x15, 0x03, 0x02},
- {0x16, 0x03, 0x02},
- {0x09, 0x04, 0x00},
- {0x0a, 0x04, 0x00},
- {0x0b, 0x04, 0x00},
- {0x0c, 0xff, 0x00},
- {0x0d, 0x00, 0x00},
- {0x0e, 0xff, 0x00},
- {0x0f, 0x04, 0x00},
- {0x10, 0xff, 0x00},
- {0x40, 0x02, 0x01},
- {0x41, 0x02, 0x02},
- {0x44, 0x02, 0x02},
- {0x45, 0x02, 0x00},
- {0x48, 0x02, 0x02},
- {0x54, 0x02, 0x01},
- {0x53, 0x02, 0x02},
- {0x51, 0x02, 0x01},
- {0x52, 0x02, 0x01}
+static const u8 sCountParams[][3] = {
+ // activity, count idx, by
+ // by=0 means count all
+ // UB: no check for count idx == -1
+ {ACTIVITY_BATTLE, 1, 2},
+ {ACTIVITY_DBLBATTLE, 1, 2},
+ {ACTIVITY_MLTBATTLE, 1, 4},
+ {ACTIVITY_TRADE, 0, 2},
+ {ACTIVITY_WCARD2, 3, 2},
+ {ACTIVITY_WNEWS2, 3, 2},
+ {ACTIVITY_PJUMP, 4, 0},
+ {ACTIVITY_BCRUSH, 4, 0},
+ {ACTIVITY_BPICK, 4, 0},
+ {ACTIVITY_SEARCH, -1, 0},
+ {ACTIVITY_SPINTRADE, 0, 0},
+ {ACTIVITY_ITEMTRADE, -1, 0},
+ {0x0f, 4, 0},
+ {0x10, -1, 0},
+ {0x40, 2, 1},
+ {ACTIVITY_BATTLE | 0x40, 2, 2},
+ {ACTIVITY_TRADE | 0x40, 2, 2},
+ {ACTIVITY_CHAT | 0x40, 2, 0},
+ {ACTIVITY_CARD | 0x40, 2, 2},
+ {20 | 0x40, 2, 1},
+ {19 | 0x40, 2, 2},
+ {ACTIVITY_ACCEPT | 0x40, 2, 1},
+ {ACTIVITY_DECLINE | 0x40, 2, 1}
};
-void sub_814F19C(void)
+static void CB2_RunWirelessCommunicationScreen(void)
{
if (!IsDma3ManagerBusyWithBgCopy())
{
@@ -168,50 +164,50 @@ void sub_814F19C(void)
}
}
-void sub_814F1C0(void)
+static void VBlankCB_WirelessCommunicationScreen(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_814F1D4(void)
+void Special_WirelessCommunicationScreen(void)
{
- SetMainCallback2(sub_814F1E4);
+ SetMainCallback2(CB2_InitWirelessCommunicationScreen);
}
-void sub_814F1E4(void)
+static void CB2_InitWirelessCommunicationScreen(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
- gUnknown_3002040 = AllocZeroed(sizeof(*gUnknown_3002040));
+ sWCSS = AllocZeroed(sizeof(*sWCSS));
SetVBlankCallback(NULL);
- ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_846FA74, NELEMS(gUnknown_846FA74));
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates));
SetBgTilemapBuffer(1, Alloc(0x800));
SetBgTilemapBuffer(0, Alloc(0x800));
- DecompressAndLoadBgGfxUsingHeap(1, gUnknown_846F6D0, 0, 0, 0);
- CopyToBgTilemapBuffer(1, gUnknown_846F8E0, 0, 0);
- InitWindows(gUnknown_846FA7C);
+ DecompressAndLoadBgGfxUsingHeap(1, sBgTilesGfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, sBgTilemap, 0, 0);
+ InitWindows(sWindowTemplates);
DeactivateAllTextPrinters();
ResetPaletteFade();
ResetSpriteData();
ResetTasks();
ScanlineEffect_Stop();
m4aSoundVSyncOn();
- SetVBlankCallback(sub_814F1C0);
- gUnknown_3002040->field_60 = CreateTask(sub_814F46C, 0);
- gUnknown_3002040->field_61 = sub_8116DE0();
- gUnknown_3002040->field_10[3] = 1;
+ SetVBlankCallback(VBlankCB_WirelessCommunicationScreen);
+ sWCSS->taskId = CreateTask(Task_WirelessCommunicationScreen, 0);
+ sWCSS->rfuTaskId = CreateTask_ListenToWireless();
+ sWCSS->lastCounts[3] = 1;
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
- LoadPalette(gUnknown_846F4D0, 0, 0x20);
+ LoadPalette(sWCSS_Palettes, 0, 0x20);
Menu_LoadStdPalAt(0xf0);
DynamicPlaceholderTextUtil_Reset();
FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0xF);
CopyBgTilemapBufferToVram(1);
- SetMainCallback2(sub_814F19C);
+ SetMainCallback2(CB2_RunWirelessCommunicationScreen);
RunTasks();
RunTextPrinters();
AnimateSprites();
@@ -219,7 +215,7 @@ void sub_814F1E4(void)
UpdatePaletteFade();
}
-void sub_814F32C(void)
+static void ExitWirelessCommunicationStatusScreen(void)
{
s32 i;
@@ -228,55 +224,55 @@ void sub_814F32C(void)
{
Free(GetBgTilemapBuffer(i));
}
- Free(gUnknown_3002040);
+ Free(sWCSS);
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-void sub_814F364(s16 * unk0, s16 * unk1)
+static void WCSS_CyclePalette(s16 * frameCtr_p, s16 * palIdx_p)
{
s32 idx;
- (*unk0)++;
- if (*unk0 > 5)
+ (*frameCtr_p)++;
+ if (*frameCtr_p > 5)
{
- (*unk1)++;
- if (*unk1 == 14)
+ (*palIdx_p)++;
+ if (*palIdx_p == 14)
{
- *unk1 = 0;
+ *palIdx_p = 0;
}
- *unk0 = 0;
+ *frameCtr_p = 0;
}
- idx = *unk1 + 2;
- LoadPalette(gUnknown_846F4D0[idx], 0, 16);
+ idx = *palIdx_p + 2;
+ LoadPalette(sWCSS_Palettes[idx], 0, 16);
}
-void sub_814F3A8(void)
+static void PrintHeaderTexts(void)
{
s32 i;
u32 width;
- FillWindowPixelBuffer(0, 0);
- FillWindowPixelBuffer(1, 0);
- FillWindowPixelBuffer(2, 0);
- width = 0xC0 - GetStringWidth(3, gUnknown_846FAAC[0], 0);
- sub_814F65C(0, 3, gUnknown_846FAAC[0], width / 2, 6, 3);
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
+ width = 0xC0 - GetStringWidth(3, sHeaderTextPtrs[0], 0);
+ WCSS_AddTextPrinterParameterized(0, 3, sHeaderTextPtrs[0], width / 2, 6, 3);
for (i = 0; i < 3; i++)
{
- sub_814F65C(1, 3, gUnknown_846FAAC[i + 1], 0, 30 * i + 10, 1);
+ WCSS_AddTextPrinterParameterized(1, 3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 1);
}
- sub_814F65C(1, 3, gUnknown_846FAAC[i + 1], 0, 30 * i + 10, 2);
+ WCSS_AddTextPrinterParameterized(1, 3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 2);
PutWindowTilemap(0);
CopyWindowToVram(0, 2);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
}
-void sub_814F46C(u8 taskId)
+static void Task_WirelessCommunicationScreen(u8 taskId)
{
s32 i;
switch (gTasks[taskId].data[0])
{
case 0:
- sub_814F3A8();
+ PrintHeaderTexts();
gTasks[taskId].data[0]++;
break;
case 1:
@@ -291,16 +287,16 @@ void sub_814F46C(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- if (sub_814F7E4(gUnknown_3002040->field_00, gUnknown_3002040->field_10, gUnknown_3002040->field_20, gUnknown_3002040->field_61))
+ if (UpdateCommunicationCounts(sWCSS->counts, sWCSS->lastCounts, sWCSS->activities, sWCSS->rfuTaskId))
{
- FillWindowPixelBuffer(2, 0x00);
+ FillWindowPixelBuffer(2, PIXEL_FILL(0));
for (i = 0; i < 4; i++)
{
- ConvertIntToDecimalStringN(gStringVar4, gUnknown_3002040->field_00[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar4, sWCSS->counts[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
if (i != 3)
- sub_814F65C(2, 3, gStringVar4, 4, 30 * i + 10, 1);
+ WCSS_AddTextPrinterParameterized(2, 3, gStringVar4, 4, 30 * i + 10, 1);
else
- sub_814F65C(2, 3, gStringVar4, 4, 100, 2);
+ WCSS_AddTextPrinterParameterized(2, 3, gStringVar4, 4, 100, 2);
}
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
@@ -308,10 +304,10 @@ void sub_814F46C(u8 taskId)
if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
- gTasks[gUnknown_3002040->field_61].data[15] = 0xFF;
+ gTasks[sWCSS->rfuTaskId].data[15] = 0xFF;
gTasks[taskId].data[0]++;
}
- sub_814F364(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
+ WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]);
break;
case 4:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
@@ -320,117 +316,117 @@ void sub_814F46C(u8 taskId)
case 5:
if (!gPaletteFade.active)
{
- SetMainCallback2(sub_814F32C);
+ SetMainCallback2(ExitWirelessCommunicationStatusScreen);
DestroyTask(taskId);
}
break;
}
}
-void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx)
+static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx)
{
u8 textColor[3];
switch (palIdx)
{
case 0:
- textColor[0] = 0;
- textColor[1] = 2;
- textColor[2] = 3;
+ textColor[0] = TEXT_COLOR_TRANSPARENT;
+ textColor[1] = TEXT_COLOR_DARK_GREY;
+ textColor[2] = TEXT_COLOR_LIGHT_GREY;
break;
case 1:
- textColor[0] = 0;
- textColor[1] = 1;
- textColor[2] = 3;
+ textColor[0] = TEXT_COLOR_TRANSPARENT;
+ textColor[1] = TEXT_COLOR_WHITE;
+ textColor[2] = TEXT_COLOR_LIGHT_GREY;
break;
case 2:
- textColor[0] = 0;
- textColor[1] = 4;
- textColor[2] = 5;
+ textColor[0] = TEXT_COLOR_TRANSPARENT;
+ textColor[1] = TEXT_COLOR_RED;
+ textColor[2] = TEXT_COLOR_LIGHT_RED;
break;
case 3:
- textColor[0] = 0;
- textColor[1] = 7;
- textColor[2] = 6;
+ textColor[0] = TEXT_COLOR_TRANSPARENT;
+ textColor[1] = TEXT_COLOR_LIGHT_GREEN;
+ textColor[2] = TEXT_COLOR_GREEN;
break;
case 4:
- textColor[0] = 0;
- textColor[1] = 1;
- textColor[2] = 2;
+ textColor[0] = TEXT_COLOR_TRANSPARENT;
+ textColor[1] = TEXT_COLOR_WHITE;
+ textColor[2] = TEXT_COLOR_DARK_GREY;
break;
// default: UB
}
AddTextPrinterParameterized4(windowId, fontId,x, y, fontId == 0 ? 0 : 1, 0, textColor, -1, str);
}
-u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1)
+static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts)
{
- u32 r8 = unk20->unk.gname.unk_0a_0;
+ u32 activity = unk20->gname_uname.gname.activity;
s32 i, j, k;
- for (i = 0; i < NELEMS(gUnknown_846FAC0); i++)
+ for (i = 0; i < NELEMS(sCountParams); i++)
{
- if (r8 == gUnknown_846FAC0[i][0] && unk20->field_1A_0 == 1)
+ if (activity == sCountParams[i][0] && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN)
{
- if (gUnknown_846FAC0[i][2] == 0)
+ if (sCountParams[i][2] == 0)
{
k = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < RFU_CHILD_MAX; j++)
{
- if (unk20->unk.gname.unk_04[j] != 0) k++;
+ if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++;
}
k++;
- arg1[gUnknown_846FAC0[i][1]] += k;
+ counts[sCountParams[i][1]] += k;
}
else
{
- arg1[gUnknown_846FAC0[i][1]] += gUnknown_846FAC0[i][2];
+ counts[sCountParams[i][1]] += sCountParams[i][2];
}
}
}
- return r8;
+ return activity;
}
-bool32 sub_814F7BC(const u32 * ptr0, const u32 * ptr1)
+static bool32 HaveCountsChanged(const u32 * newCounts, const u32 * prevCounts)
{
s32 i;
for (i = 0; i < 4; i++)
{
- if (ptr0[i] != ptr1[i])
+ if (newCounts[i] != prevCounts[i])
return TRUE;
}
return FALSE;
}
-bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId)
+static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId)
{
- bool32 r8 = FALSE;
- u32 sp0[4] = {0, 0, 0, 0};
+ bool32 activitiesUpdated = FALSE;
+ u32 buffer[4] = {0, 0, 0, 0};
struct UnkStruct_Group * group = (void *)gTasks[taskId].data;
s32 i;
for (i = 0; i < 16; i++)
{
- u32 r1 = sub_814F714(&group->field_0->arr[i], sp0);
- if (r1 != a2[i])
+ u32 activity = CountMembersInGroup(&group->field_0->arr[i], buffer);
+ if (activity != activities[i])
{
- a2[i] = r1;
- r8 = TRUE;
+ activities[i] = activity;
+ activitiesUpdated = TRUE;
}
}
- if (sub_814F7BC(sp0, a1) == FALSE)
+ if (HaveCountsChanged(buffer, lastCounts) == FALSE)
{
- if (r8 == TRUE)
+ if (activitiesUpdated == TRUE)
return TRUE;
else
return FALSE;
}
- memcpy(a0, sp0, sizeof(sp0));
- memcpy(a1, sp0, sizeof(sp0));
- a0[3] = a0[0] + a0[1] + a0[2];
+ memcpy(counts, buffer, sizeof(buffer));
+ memcpy(lastCounts, buffer, sizeof(buffer));
+ counts[3] = counts[0] + counts[1] + counts[2];
return TRUE;
}
diff --git a/sym_bss.txt b/sym_bss.txt
index 5651e3366..ec3d7d947 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -86,9 +86,10 @@ gUnknown_3002030: @ 3002030
gUnknown_3002038: @ 3002038
.space 0x8
-gUnknown_3002040: @ 3002040
- .space 0x4
+ .align 2
+ .include "src/wireless_communication_status_screen.o"
+ .align 2
gUnknown_3002044: @ 3002044
.space 0x4
@@ -96,14 +97,15 @@ gUnknown_3002044: @ 3002044
.include "src/ereader_helpers.o"
.align 3
- .include "src/unk_815C980.o"
+ .include "src/digit_obj_util.o"
.align 3
.include "asm/m4a_1.o"
+ .align 3
.include "src/agb_flash.o"
-
- .space 0x4 @ This isn't needed for Ruby/Sapphire or Emerald.
-
+ .align 3
.include "*libgcc.a:dp-bit.o"
+ .align 3
.include "*libgcc.a:fp-bit.o"
+ .align 3
.include "*libc.a:syscalls.o"
diff --git a/sym_common.txt b/sym_common.txt
index d71df5ce2..e729f5515 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -91,7 +91,7 @@ gUnknown_3005078: @ 3005078
.align 4
.include "link_rfu_2.o"
.align 4
- .include "link_rfu.o"
+ .include "AgbRfu_LinkManager.o"
.align 4
.include "list_menu.o"
.align 2
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 3ab110c7b..32229ac11 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -369,17 +369,12 @@ gUnknown_203B098: @ 203B098
.align 2
.include "src/party_menu.o"
-
.align 2
-gUnknown_203B0E0: @ 203B0E0
- .space 0x4
-
-gUnknown_203B0E4: @ 203B0E4
- .space 0x4
-
-gUnknown_203B0E8: @ 203B0E8
- .space 0x4
-
+ .include "src/union_room_chat.o"
+ .align 2
+ .include "src/union_room_chat_display.o"
+ .align 2
+ .include "src/union_room_chat_objects.o"
.align 2
.include "src/help_system_812B1E0.o"
.align 2
@@ -448,7 +443,9 @@ gUnknown_203B170: @ 203B170
.align 2
.include "src/mevent_server.o"
.align 2
- .include "src/mevent_8145654.o"
+ .include "src/mevent_show_card.o"
+ .align 2
+ .include "src/mevent_show_news.o"
.align 2
.include "src/seagallop.o"
@@ -486,7 +483,7 @@ gUnknown_203F440: @ 203F440
.align 2
.include "src/teachy_tv.o"
.align 2
- .include "src/unk_815C980.o"
+ .include "src/digit_obj_util.o"
.align 2
.include "src/trainer_tower.o"
.align 2