From 2bd1cf20dd207363fbe7aa0e871896093128a24c Mon Sep 17 00:00:00 2001 From: gymnast86 Date: Tue, 6 Jan 2026 01:14:49 -0500 Subject: [PATCH] rework required bosses --- asm/custom_symbols.yaml | 315 +++++++++--------- asm/linker.ld | 1 + asm/patch_diffs/custom_funcs_diff.yaml | 193 +++++------ .../entrance_rando_features_diff.yaml | 30 +- asm/patch_diffs/fix_vanilla_bugs_diff.yaml | 126 +++---- asm/patch_diffs/flexible_entrances_diff.yaml | 18 +- .../flexible_hint_locations_diff.yaml | 22 +- .../flexible_item_locations_diff.yaml | 270 +++++++-------- .../make_all_figurines_obtainable_diff.yaml | 28 +- asm/patch_diffs/make_game_nonlinear_diff.yaml | 60 ++-- .../make_items_progressive_diff.yaml | 42 +-- asm/patch_diffs/misc_rando_features_diff.yaml | 254 +++++++------- asm/patch_diffs/remove_cutscenes_diff.yaml | 40 +-- .../remove_low_health_effects_diff.yaml | 18 +- asm/patch_diffs/required_bosses_diff.yaml | 24 ++ asm/patch_diffs/switch_op_diff.yaml | 82 ++--- asm/patch_diffs/swordless_diff.yaml | 38 +-- asm/patches/custom_funcs.asm | 24 ++ asm/patches/required_bosses.asm | 83 +++++ gui/desktop/CMakeLists.txt | 1 + gui/desktop/mainwindow.hpp | 19 +- gui/desktop/mainwindow.ui | 63 ++-- gui/desktop/tracker/tracker.cpp | 92 ++++- gui/desktop/tracker/tracker_label.cpp | 16 +- .../tracker_required_boss_checkbox.cpp | 18 + .../tracker_required_boss_checkbox.hpp | 27 ++ logic/Fill.cpp | 76 +---- logic/Hints.cpp | 4 +- logic/Location.hpp | 2 + logic/Search.cpp | 127 ++++--- logic/SpoilerLog.cpp | 9 +- logic/World.cpp | 98 +++--- logic/World.hpp | 7 +- logic/data/location_data.yaml | 6 + logic/data/macros.yaml | 6 + logic/data/world.yaml | 26 +- options.cpp | 80 +++++ options.hpp | 18 + tweaks.cpp | 31 ++ 39 files changed, 1415 insertions(+), 979 deletions(-) create mode 100644 asm/patch_diffs/required_bosses_diff.yaml create mode 100644 asm/patches/required_bosses.asm create mode 100644 gui/desktop/tracker/tracker_required_boss_checkbox.cpp create mode 100644 gui/desktop/tracker/tracker_required_boss_checkbox.hpp diff --git a/asm/custom_symbols.yaml b/asm/custom_symbols.yaml index 43f9c621..8314eb51 100644 --- a/asm/custom_symbols.yaml +++ b/asm/custom_symbols.yaml @@ -1,134 +1,137 @@ -beedle_dont_buy_blue_chu: 0x28F9AE4 -big_key_label_safestring: 0x28FA9CC -big_key_label_str: 0x28FA9B8 -boat_spawn_fallback_check: 0x28F9DE0 +beedle_dont_buy_blue_chu: 0x28F9B24 +big_key_label_safestring: 0x28FAA0C +big_key_label_str: 0x28FA9F8 +boat_spawn_fallback_check: 0x28F9E20 camera_preference: 0x28F8D66 -cap_file_restore_health: 0x28FA830 -cap_game_over_restore_health: 0x28FA848 -check_animate_rainbow_rupee_color: 0x28FA860 -check_barrier_triforce_requirement: 0x28F9D74 -check_buying_beedle_20_item: 0x28F9EB4 -check_can_defend: 0x28F9CBC -check_entering_door10_forwards: 0x28F9A34 -check_entering_door12_forwards: 0x28F9A4C -check_ganons_tower_chest_opened: 0x28FA034 -check_give_additional_figurines: 0x28FA3E8 -check_has_next_hint_message: 0x28F9E18 -check_hyrule_warp_unlocked: 0x28FACE0 -check_if_ganondorf: 0x28F9D04 -check_if_inside_warp: 0x28F9D2C -check_leaving_cabana: 0x28F9A64 -check_low_health_full: 0x28FADBC -check_outset_bgm: 0x28FAA10 -check_phantom_ganons_sword_should_disappear: 0x28FA05C -check_play_special_item_get_music: 0x28FA2A4 -check_player_in_casual_clothes: 0x28FA9D4 -check_run_new_text_commands: 0x28FA8B4 -check_shop_item_in_bait_bag_slot_sold_out: 0x28F9E84 -check_should_decrement_morth_counter: 0x28F9D98 -check_tingle_statue_owned: 0x28F9974 +cap_file_restore_health: 0x28FA870 +cap_game_over_restore_health: 0x28FA888 +check_animate_rainbow_rupee_color: 0x28FA8A0 +check_barrier_triforce_requirement: 0x28F9DB4 +check_buying_beedle_20_item: 0x28F9EF4 +check_can_defend: 0x28F9CFC +check_entering_door10_forwards: 0x28F9A74 +check_entering_door12_forwards: 0x28F9A8C +check_ganons_tower_chest_opened: 0x28FA074 +check_give_additional_figurines: 0x28FA428 +check_has_next_hint_message: 0x28F9E58 +check_hyrule_warp_unlocked: 0x28FAD20 +check_if_ganondorf: 0x28F9D44 +check_if_inside_warp: 0x28F9D6C +check_leaving_cabana: 0x28F9AA4 +check_low_health_full: 0x28FADFC +check_outset_bgm: 0x28FAA50 +check_phantom_ganons_sword_should_disappear: 0x28FA09C +check_play_special_item_get_music: 0x28FA2E4 +check_player_in_casual_clothes: 0x28FAA14 +check_required_bosses_defeated: 0x28FAEC0 +check_run_new_text_commands: 0x28FA8F4 +check_shop_item_in_bait_bag_slot_sold_out: 0x28F9EC4 +check_should_decrement_morth_counter: 0x28F9DD8 +check_stage_name: 0x28FAE54 +check_tingle_statue_owned: 0x28F99B4 convert_progressive_item_id: 0x28F8D9C -convert_progressive_item_id_for_createDemoItem: 0x28FA6FC -convert_progressive_item_id_for_dProcGetItem_init_1: 0x28FA754 -convert_progressive_item_id_for_dProcGetItem_init_2: 0x28FA784 -convert_progressive_item_id_for_daItem_create: 0x28FA728 -convert_progressive_item_id_for_shop_item: 0x28FA7AC -create_item_and_set_event_bit_for_townsperson: 0x28FA0BC -create_item_for_withered_trees_without_setting_speeds: 0x28F9F30 -create_pot_item: 0x28FA368 -create_stone_head_item: 0x28FA3B4 -custom_crawl_check: 0x28F9DB0 +convert_progressive_item_id_for_createDemoItem: 0x28FA73C +convert_progressive_item_id_for_dProcGetItem_init_1: 0x28FA794 +convert_progressive_item_id_for_dProcGetItem_init_2: 0x28FA7C4 +convert_progressive_item_id_for_daItem_create: 0x28FA768 +convert_progressive_item_id_for_shop_item: 0x28FA7EC +create_item_and_set_event_bit_for_townsperson: 0x28FA0FC +create_item_for_withered_trees_without_setting_speeds: 0x28F9F70 +create_pot_item: 0x28FA3A8 +create_stone_head_item: 0x28FA3F4 +custom_crawl_check: 0x28F9DF0 custom_createItem: 0x28F93D4 -custom_createItem_return_check: 0x28F9F04 -custom_damage_multiplier: 0x28FAB14 -custom_ff_label: 0x28FABFC -custom_ff_label_safestring: 0x28FAC04 -custom_getSelectItemNo_progressive: 0x28FA7D4 -custom_isTbox_for_unloaded_stage_save_info: 0x28F9A00 -custom_l_objectName: 0x28FAC38 -custom_searchName_loop_check: 0x28FAC44 -custom_warp_button_name: 0x28FABC4 -custom_warp_button_safestring: 0x28FABD4 -custom_warp_pot_env_color: 0x28FAB00 -custom_warp_pot_prm_color: 0x28FAAFC -daSwOp_Create: 0x28FAE04 -daSwOp_Delete: 0x28FAF04 -daSwOp_Draw: 0x28FAF0C -daSwOp_Execute: 0x28FB2D0 -daSwOp_IsDelete: 0x28FAEFC -daSwOp__conditionMetCheck: 0x28FB090 -daSwOp__conditionUnmetCheck: 0x28FB27C -daSwOp__eventEndCheck: 0x28FAF14 -daSwOp__eventStartCheck: 0x28FB1E0 -daSwOp__isCondition: 0x28FAF84 -daSwOp__timerCountdown: 0x28FB12C -dampa_minigame_item_id: 0x28FA130 -default_molgera_xz_pos: 0x28F9D24 -doc_bandam_blue_potion_slot_item_id: 0x28FA365 -doc_bandam_check_new_potion_and_give_free_item: 0x28FA308 -doc_bandam_green_potion_slot_item_id: 0x28FA364 -dragon_tingle_statue_item_get_func: 0x28F9884 -drc_big_key_item_get_func: 0x28F95DC -drc_compass_item_get_func: 0x28F9794 -drc_dungeon_map_item_get_func: 0x28F96A4 -drc_small_key_item_get_func: 0x28F9528 -earth_tingle_statue_item_get_func: 0x28F9914 -et_big_key_item_get_func: 0x28F9654 -et_compass_item_get_func: 0x28F9834 -et_dungeon_map_item_get_func: 0x28F9744 -et_small_key_item_get_func: 0x28F9594 -exec_curr_num_keys_text_command: 0x28FA8E0 -execute_switch_cases_start: 0x28FB300 -ff_compass_item_get_func: 0x28F980C -ff_dungeon_map_item_get_func: 0x28F971C -ff_warp_text_check: 0x28FAC20 +custom_createItem_return_check: 0x28F9F44 +custom_damage_multiplier: 0x28FAB54 +custom_ff_label: 0x28FAC3C +custom_ff_label_safestring: 0x28FAC44 +custom_getSelectItemNo_progressive: 0x28FA814 +custom_isTbox_for_unloaded_stage_save_info: 0x28F9A40 +custom_l_objectName: 0x28FAC78 +custom_searchName_loop_check: 0x28FAC84 +custom_warp_button_name: 0x28FAC04 +custom_warp_button_safestring: 0x28FAC14 +custom_warp_pot_env_color: 0x28FAB40 +custom_warp_pot_prm_color: 0x28FAB3C +daSwOp_Create: 0x28FAF14 +daSwOp_Delete: 0x28FB014 +daSwOp_Draw: 0x28FB01C +daSwOp_Execute: 0x28FB3E0 +daSwOp_IsDelete: 0x28FB00C +daSwOp__conditionMetCheck: 0x28FB1A0 +daSwOp__conditionUnmetCheck: 0x28FB38C +daSwOp__eventEndCheck: 0x28FB024 +daSwOp__eventStartCheck: 0x28FB2F0 +daSwOp__isCondition: 0x28FB094 +daSwOp__timerCountdown: 0x28FB23C +dampa_minigame_item_id: 0x28FA170 +default_molgera_xz_pos: 0x28F9D64 +doc_bandam_blue_potion_slot_item_id: 0x28FA3A5 +doc_bandam_check_new_potion_and_give_free_item: 0x28FA348 +doc_bandam_green_potion_slot_item_id: 0x28FA3A4 +dragon_tingle_statue_item_get_func: 0x28F98C4 +drc_big_key_item_get_func: 0x28F961C +drc_compass_item_get_func: 0x28F97D4 +drc_dungeon_map_item_get_func: 0x28F96E4 +drc_small_key_item_get_func: 0x28F9568 +earth_tingle_statue_item_get_func: 0x28F9954 +et_big_key_item_get_func: 0x28F9694 +et_compass_item_get_func: 0x28F9874 +et_dungeon_map_item_get_func: 0x28F9784 +et_small_key_item_get_func: 0x28F95D4 +exec_curr_num_keys_text_command: 0x28FA920 +execute_switch_cases_start: 0x28FB410 +ff_compass_item_get_func: 0x28F984C +ff_dungeon_map_item_get_func: 0x28F975C +ff_warp_text_check: 0x28FAC60 first_person_camera_preference: 0x28F8D67 -forbidden_tingle_statue_item_get_func: 0x28F98B4 -force_map_reload: 0x28F9DF8 -fully_refill_magic_meter_on_load_save: 0x28FA814 -fw_big_key_item_get_func: 0x28F9604 -fw_compass_item_get_func: 0x28F97BC -fw_dungeon_map_item_get_func: 0x28F96CC -fw_small_key_item_get_func: 0x28F954C -g_profile_SwitchOperator: 0x28FB374 -ganondorf_health_check: 0x28F9CEC +forbidden_tingle_statue_item_get_func: 0x28F98F4 +force_map_reload: 0x28F9E38 +fully_refill_magic_meter_on_load_save: 0x28FA854 +fw_big_key_item_get_func: 0x28F9644 +fw_compass_item_get_func: 0x28F97FC +fw_dungeon_map_item_get_func: 0x28F970C +fw_small_key_item_get_func: 0x28F958C +g_profile_SwitchOperator: 0x28FB484 +ganondorf_health_check: 0x28F9D2C +generic_is_dungeon_bit: 0x28F9488 generic_on_dungeon_bit: 0x28F9420 -generic_small_key_item_get_func: 0x28F9488 -get_num_owned_tingle_statues: 0x28FAA38 -give_pearl_and_raise_totg_if_necessary: 0x28FAD20 -give_temporary_sword_during_ganondorf_fight_in_swordless: 0x28FB3A4 -give_temporary_sword_in_orcas_house_in_swordless: 0x28FB3F8 -goddess_tingle_statue_item_get_func: 0x28F98E4 +generic_small_key_item_get_func: 0x28F94C8 +get_num_owned_tingle_statues: 0x28FAA78 +give_pearl_and_raise_totg_if_necessary: 0x28FAD60 +give_temporary_sword_during_ganondorf_fight_in_swordless: 0x28FB4B4 +give_temporary_sword_in_orcas_house_in_swordless: 0x28FB508 +goddess_tingle_statue_item_get_func: 0x28F9924 gyroscope_preference: 0x28F8D68 -hookshot_sight_failsafe_check: 0x28F9AAC +hookshot_sight_failsafe_check: 0x28F9AEC hurricane_spin_item_func: 0x28F93A4 -increment_custom_loop_counter: 0x28FAC74 -init_extra_button_location: 0x28FAB18 -init_extra_connections: 0x28FAB2C +increment_custom_loop_counter: 0x28FACB4 +init_extra_button_location: 0x28FAB58 +init_extra_connections: 0x28FAB6C init_save_with_tweaks: 0x28F87F4 init_starting_gear: 0x28F8C14 -initialize_actor_id: 0x28F9F20 +initialize_actor_id: 0x28F9F60 isEventBit_wrapper: 0x28F8D6C -l_daSwOp_Method: 0x28FB354 -last_korl_hint_message_number: 0x28F9E14 -lenzo_set_deluxe_picto_box_event_bit: 0x28FA134 -load_extra_button_part: 0x28FABDC -maggie_give_item_and_set_event_bit: 0x28FA20C -magtail_respawn_when_head_light_arrowed: 0x28F9C44 -makar_possible_wt_spawn_positions: 0x28FA52C -medli_possible_et_spawn_positions: 0x28FA628 -miniblin_set_death_switch_when_light_arrowed: 0x28F9B44 -molgera_warp_radius: 0x28F9D20 -multiply_damage: 0x28FAB04 -no_big_key_label_safestring: 0x28FA9C4 -no_big_key_label_str: 0x28FA9AC +l_daSwOp_Method: 0x28FB464 +last_korl_hint_message_number: 0x28F9E54 +lenzo_set_deluxe_picto_box_event_bit: 0x28FA174 +load_extra_button_part: 0x28FAC1C +maggie_give_item_and_set_event_bit: 0x28FA24C +magtail_respawn_when_head_light_arrowed: 0x28F9C84 +makar_possible_wt_spawn_positions: 0x28FA56C +medli_possible_et_spawn_positions: 0x28FA668 +miniblin_set_death_switch_when_light_arrowed: 0x28F9B84 +molgera_warp_radius: 0x28F9D60 +multiply_damage: 0x28FAB44 +no_big_key_label_safestring: 0x28FAA04 +no_big_key_label_str: 0x28FA9EC normal_magic_meter_item_func: 0x28F9378 open_drc: 0x28F8D6A -orca_counter_failsafe: 0x28F9AC8 +orca_counter_failsafe: 0x28F9B08 outset_pig_color: 0x28F8D64 -phantom_ganon_check_link_within_y_diff: 0x28F9C84 -phantom_ganon_maze_stage_name: 0x28FA0B4 -poe_fix_light_arrows_bug: 0x28F9B78 +phantom_ganon_check_link_within_y_diff: 0x28F9CC4 +phantom_ganon_maze_stage_name: 0x28FA0F4 +poe_fix_light_arrows_bug: 0x28F9BB8 progressive_bomb_bag_item_func: 0x28F91F8 progressive_bow_item_func: 0x28F9160 progressive_magic_always_double: 0x28F8D63 @@ -139,49 +142,51 @@ progressive_sail_item_func: 0x28F92CC progressive_shield_item_func: 0x28F9114 progressive_sword_item_func: 0x28F90A8 progressive_wallet_item_func: 0x28F91BC -rainbow_rupee_data: 0x28FA8A8 -read_custom_l_objectName_loop_for_dStage_getName: 0x28FAC80 -remove_low_health_anim_at_full_health: 0x28FADDC -remove_temporary_sword_when_loading_stage_in_swordless: 0x28FB458 -reset_makar_position_to_start_of_dungeon: 0x28FA4A0 -reset_medli_position_to_start_of_dungeon: 0x28FA59C -rito_cafe_postman_start_event_and_set_event_bit: 0x28FA250 -salvage_corp_give_item_and_set_event_bit: 0x28FA1C8 -set_dampa_event_bit: 0x28FA10C -set_env_color_for_warp_pot_particles: 0x28FAAD4 -set_ff_warp_msg_index: 0x28FAC0C -set_inactive_servant_when_player_leaves_room: 0x28FA698 -set_item_obtained_from_totg_tablet_event_bit: 0x28FA6BC -set_prm_color_for_warp_pot_particles: 0x28FAAAC -set_return_place_as_last_visited_ocean_sector: 0x28F9A94 -set_shop_item_in_bait_bag_slot_sold_out: 0x28F9E50 -set_starting_health: 0x28FA7F8 -set_up_custom_loop_counter: 0x28FAC68 +rainbow_rupee_data: 0x28FA8E8 +read_custom_l_objectName_loop_for_dStage_getName: 0x28FACC0 +remove_low_health_anim_at_full_health: 0x28FAE1C +remove_temporary_sword_when_loading_stage_in_swordless: 0x28FB568 +required_bosses: 0x28FAE44 +reset_makar_position_to_start_of_dungeon: 0x28FA4E0 +reset_medli_position_to_start_of_dungeon: 0x28FA5DC +rito_cafe_postman_start_event_and_set_event_bit: 0x28FA290 +salvage_corp_give_item_and_set_event_bit: 0x28FA208 +set_dampa_event_bit: 0x28FA14C +set_env_color_for_warp_pot_particles: 0x28FAB14 +set_ff_warp_msg_index: 0x28FAC4C +set_inactive_servant_when_player_leaves_room: 0x28FA6D8 +set_item_obtained_from_totg_tablet_event_bit: 0x28FA6FC +set_prm_color_for_warp_pot_particles: 0x28FAAEC +set_return_place_as_last_visited_ocean_sector: 0x28F9AD4 +set_shop_item_in_bait_bag_slot_sold_out: 0x28F9E90 +set_starting_health: 0x28FA838 +set_up_custom_loop_counter: 0x28FACA8 should_start_with_heros_clothes: 0x28F8C5C skip_rematch_bosses: 0x28F8C5E -spawn_drc_shortcut_warp: 0x28FACA8 -stalfos_kill_lower_body_when_upper_body_light_arrowed: 0x28F9AFC +spawn_drc_shortcut_warp: 0x28FACE8 +staircase_to_puppet_ganon_stage_name: 0x28FAE4C +stalfos_kill_lower_body_when_upper_body_light_arrowed: 0x28F9B3C starting_gear: 0x28F8C5F starting_magic: 0x28F8D62 starting_quarter_hearts: 0x28F8D60 -stop_sub_bgm_when_unloading_stage: 0x28F9CA0 +stop_sub_bgm_when_unloading_stage: 0x28F9CE0 swordless: 0x28F8C5D -tag_photo_check_lenzo_flag_order: 0x28FA6D8 +tag_photo_check_lenzo_flag_order: 0x28FA718 target_type_preference: 0x28F8D65 -totg_big_key_item_get_func: 0x28F962C -totg_compass_item_get_func: 0x28F97E4 -totg_dungeon_map_item_get_func: 0x28F96F4 -totg_small_key_item_get_func: 0x28F9570 +totg_big_key_item_get_func: 0x28F966C +totg_compass_item_get_func: 0x28F9824 +totg_dungeon_map_item_get_func: 0x28F9734 +totg_small_key_item_get_func: 0x28F95B0 ui_display_preference: 0x28F8D69 -use_different_korl_hyrule_text: 0x28F9E4C -wind_tingle_statue_item_get_func: 0x28F9944 -withered_tree_item_speeds: 0x28FA028 -withered_tree_item_try_give_momentum: 0x28F9F5C -wt_big_key_item_get_func: 0x28F967C -wt_compass_item_get_func: 0x28F985C -wt_dungeon_map_item_get_func: 0x28F976C -wt_small_key_item_get_func: 0x28F95B8 -zero_out_arrow_on_hit_callback: 0x28F9CAC -zunari_give_item_and_set_magic_armor_event_bit: 0x28FA168 -zunari_magic_armor_slot_item_id: 0x28FA1C4 +use_different_korl_hyrule_text: 0x28F9E8C +wind_tingle_statue_item_get_func: 0x28F9984 +withered_tree_item_speeds: 0x28FA068 +withered_tree_item_try_give_momentum: 0x28F9F9C +wt_big_key_item_get_func: 0x28F96BC +wt_compass_item_get_func: 0x28F989C +wt_dungeon_map_item_get_func: 0x28F97AC +wt_small_key_item_get_func: 0x28F95F8 +zero_out_arrow_on_hit_callback: 0x28F9CEC +zunari_give_item_and_set_magic_armor_event_bit: 0x28FA1A8 +zunari_magic_armor_slot_item_id: 0x28FA204 diff --git a/asm/linker.ld b/asm/linker.ld index 407dc612..c83497b0 100644 --- a/asm/linker.ld +++ b/asm/linker.ld @@ -48,6 +48,7 @@ onSwitch = 0x025b9e38; offSwitch = 0x025b9f7c; dSv_membit_c_isSwitch = 0x025b8dc8; /* dSv_memBit_c::isSwitch */ onDungeonItem = 0x025b9098; +isDungeonItem = 0x025b9100; onSymbol = 0x025b7cc0; isCollect = 0x025b7a2c; onCollect = 0x025b7944; diff --git a/asm/patch_diffs/custom_funcs_diff.yaml b/asm/patch_diffs/custom_funcs_diff.yaml index 0aff9d02..a6906de6 100644 --- a/asm/patch_diffs/custom_funcs_diff.yaml +++ b/asm/patch_diffs/custom_funcs_diff.yaml @@ -248,117 +248,122 @@ Data: 0xC4, 0x33, 0x78, 0x4B, 0xCB, 0xFC, 0x25, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x7C, 0x65, 0x1B, 0x78, - 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x07, 0xBC, 0x88, - 0x83, 0x00, 0x00, 0x7C, 0x04, 0x28, 0x00, 0x40, 0x82, 0x00, 0x28, 0x4B, 0xC2, - 0x6C, 0x25, 0x85, 0x83, 0x51, 0x50, 0x81, 0x8C, 0x01, 0x5C, 0x7D, 0x89, 0x03, - 0xA6, 0x4E, 0x80, 0x04, 0x21, 0x88, 0x03, 0x00, 0x09, 0x54, 0x00, 0x07, 0xFF, - 0x41, 0x82, 0x00, 0x2C, 0x48, 0x00, 0x00, 0x44, 0x3C, 0x60, 0x10, 0x20, 0x80, - 0x63, 0x84, 0xDC, 0x38, 0x63, 0x03, 0xA0, 0x1C, 0x85, 0x00, 0x24, 0x7C, 0x63, - 0x22, 0x14, 0x88, 0x83, 0x00, 0x20, 0x38, 0x84, 0x00, 0x01, 0x98, 0x83, 0x00, - 0x20, 0x48, 0x00, 0x00, 0x24, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, - 0x38, 0x63, 0x07, 0x98, 0x88, 0x83, 0x00, 0x20, 0x38, 0x84, 0x00, 0x01, 0x98, - 0x83, 0x00, 0x20, 0x48, 0x00, 0x00, 0x08, 0x4B, 0xC5, 0x4A, 0x91, 0x80, 0x01, + 0x7C, 0x86, 0x23, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, + 0x63, 0x03, 0xA0, 0x1C, 0x85, 0x00, 0x24, 0x7C, 0x63, 0x22, 0x14, 0x7C, 0xC4, + 0x33, 0x78, 0x4B, 0xCB, 0xFC, 0x4D, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, + 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, + 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x7C, 0x65, 0x1B, 0x78, 0x3C, + 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x07, 0xBC, 0x88, 0x83, + 0x00, 0x00, 0x7C, 0x04, 0x28, 0x00, 0x40, 0x82, 0x00, 0x28, 0x4B, 0xC2, 0x6B, + 0xE5, 0x85, 0x83, 0x51, 0x50, 0x81, 0x8C, 0x01, 0x5C, 0x7D, 0x89, 0x03, 0xA6, + 0x4E, 0x80, 0x04, 0x21, 0x88, 0x03, 0x00, 0x09, 0x54, 0x00, 0x07, 0xFF, 0x41, + 0x82, 0x00, 0x2C, 0x48, 0x00, 0x00, 0x44, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, + 0x84, 0xDC, 0x38, 0x63, 0x03, 0xA0, 0x1C, 0x85, 0x00, 0x24, 0x7C, 0x63, 0x22, + 0x14, 0x88, 0x83, 0x00, 0x20, 0x38, 0x84, 0x00, 0x01, 0x98, 0x83, 0x00, 0x20, + 0x48, 0x00, 0x00, 0x24, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, + 0x63, 0x07, 0x98, 0x88, 0x83, 0x00, 0x20, 0x38, 0x84, 0x00, 0x01, 0x98, 0x83, + 0x00, 0x20, 0x48, 0x00, 0x00, 0x08, 0x4B, 0xC5, 0x4A, 0x51, 0x80, 0x01, 0x00, + 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, + 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, + 0x60, 0x00, 0x03, 0x4B, 0xFF, 0xFF, 0x51, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, + 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, + 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x04, + 0x4B, 0xFF, 0xFF, 0x2D, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, + 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, + 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x05, 0x4B, 0xFF, 0xFF, + 0x09, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, + 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, + 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x06, 0x4B, 0xFF, 0xFE, 0xE5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x38, 0x60, 0x00, 0x03, 0x4B, 0xFF, 0xFF, 0x51, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0x38, 0x60, 0x00, 0x07, 0x4B, 0xFF, 0xFE, 0xC1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, - 0x04, 0x4B, 0xFF, 0xFF, 0x2D, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, - 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, - 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x05, 0x4B, 0xFF, - 0xFF, 0x09, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, - 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, - 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x06, 0x4B, 0xFF, 0xFE, 0xE5, 0x80, - 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, - 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, - 0x14, 0x38, 0x60, 0x00, 0x07, 0x4B, 0xFF, 0xFE, 0xC1, 0x80, 0x01, 0x00, 0x14, + 0x03, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0xF1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, - 0x00, 0x03, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFE, 0x31, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0xC9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, - 0x60, 0x00, 0x04, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFE, 0x09, 0x80, 0x01, + 0x60, 0x00, 0x05, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0xA1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x38, 0x60, 0x00, 0x05, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0xE1, 0x80, + 0x38, 0x60, 0x00, 0x06, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0x79, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, - 0x14, 0x38, 0x60, 0x00, 0x06, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0xB9, + 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, 0x51, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, - 0x00, 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, 0x00, 0x02, 0x4B, 0xFF, 0xFD, - 0x91, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, + 0x00, 0x14, 0x38, 0x60, 0x00, 0x03, 0x38, 0x80, 0x00, 0x00, 0x4B, 0xFF, 0xFD, + 0x29, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, - 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x03, 0x38, 0x80, 0x00, 0x00, 0x4B, 0xFF, - 0xFD, 0x69, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, + 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x04, 0x38, 0x80, 0x00, 0x00, 0x4B, 0xFF, + 0xFD, 0x01, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, - 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x04, 0x38, 0x80, 0x00, 0x00, 0x4B, - 0xFF, 0xFD, 0x41, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, + 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x05, 0x38, 0x80, 0x00, 0x00, 0x4B, + 0xFF, 0xFC, 0xD9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, - 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x05, 0x38, 0x80, 0x00, 0x00, - 0x4B, 0xFF, 0xFD, 0x19, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, + 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x02, 0x38, 0x80, 0x00, 0x00, + 0x4B, 0xFF, 0xFC, 0xB1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, - 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x02, 0x38, 0x80, 0x00, - 0x00, 0x4B, 0xFF, 0xFC, 0xF1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, + 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x06, 0x38, 0x80, 0x00, + 0x00, 0x4B, 0xFF, 0xFC, 0x89, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, - 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x06, 0x38, 0x80, - 0x00, 0x00, 0x4B, 0xFF, 0xFC, 0xC9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, + 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, + 0x00, 0x00, 0x4B, 0xFF, 0xFC, 0x61, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, - 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, - 0x80, 0x00, 0x00, 0x4B, 0xFF, 0xFC, 0xA1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, + 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x03, 0x38, + 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x39, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, - 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x03, - 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x79, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x04, + 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x11, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, - 0x04, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x51, 0x80, 0x01, 0x00, 0x14, + 0x05, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0xE9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, - 0x00, 0x05, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x29, 0x80, 0x01, 0x00, + 0x00, 0x02, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0xC1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, - 0x60, 0x00, 0x02, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFC, 0x01, 0x80, 0x01, + 0x60, 0x00, 0x06, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0x99, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x38, 0x60, 0x00, 0x06, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0xD9, 0x80, + 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0x71, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, - 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, 0x00, 0x01, 0x4B, 0xFF, 0xFB, 0xB1, + 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, + 0x38, 0x80, 0x6A, 0x04, 0x4B, 0xCB, 0xF2, 0x89, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, + 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, + 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, 0x6A, 0x08, + 0x4B, 0xCB, 0xF2, 0x59, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, + 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, + 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, + 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, 0x6A, 0x10, 0x4B, 0xCB, 0xF2, 0x29, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, - 0x44, 0x38, 0x80, 0x6A, 0x04, 0x4B, 0xCB, 0xF2, 0xC9, 0x80, 0x01, 0x00, 0x14, + 0x44, 0x38, 0x80, 0x6A, 0x20, 0x4B, 0xCB, 0xF1, 0xF9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, 0x6A, - 0x08, 0x4B, 0xCB, 0xF2, 0x99, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, + 0x40, 0x4B, 0xCB, 0xF1, 0xC9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, - 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, - 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, 0x6A, 0x10, 0x4B, 0xCB, 0xF2, - 0x69, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, - 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, - 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, - 0x06, 0x44, 0x38, 0x80, 0x6A, 0x20, 0x4B, 0xCB, 0xF2, 0x39, 0x80, 0x01, 0x00, - 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, - 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, - 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, - 0x6A, 0x40, 0x4B, 0xCB, 0xF2, 0x09, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, - 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, - 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x2C, 0x04, 0x00, 0x0F, 0x40, - 0x82, 0x00, 0x68, 0x2C, 0x03, 0x00, 0x03, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, - 0x00, 0x04, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, 0x00, 0x05, 0x41, 0x82, 0x00, - 0x28, 0x2C, 0x03, 0x00, 0x06, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, 0x00, 0x07, - 0x41, 0x82, 0x00, 0x28, 0x48, 0x00, 0x00, 0x3C, 0x38, 0x80, 0x6A, 0x04, 0x48, - 0x00, 0x00, 0x20, 0x38, 0x80, 0x6A, 0x08, 0x48, 0x00, 0x00, 0x18, 0x38, 0x80, - 0x6A, 0x10, 0x48, 0x00, 0x00, 0x10, 0x38, 0x80, 0x6A, 0x20, 0x48, 0x00, 0x00, - 0x08, 0x38, 0x80, 0x6A, 0x40, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, - 0x38, 0x63, 0x06, 0x44, 0x4B, 0xCB, 0xF1, 0xB1, 0x48, 0x00, 0x00, 0x08, 0x38, - 0x60, 0x00, 0x00, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, - 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, - 0xA6, 0x90, 0x01, 0x00, 0x14, 0x1C, 0x03, 0x00, 0x24, 0x3C, 0x60, 0x10, 0x20, - 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x03, 0xA0, 0x7C, 0x63, 0x02, 0x14, 0x4B, - 0xCB, 0xF2, 0x55, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, - 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] + 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x2C, 0x04, 0x00, 0x0F, 0x40, 0x82, + 0x00, 0x68, 0x2C, 0x03, 0x00, 0x03, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, 0x00, + 0x04, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, 0x00, 0x05, 0x41, 0x82, 0x00, 0x28, + 0x2C, 0x03, 0x00, 0x06, 0x41, 0x82, 0x00, 0x28, 0x2C, 0x03, 0x00, 0x07, 0x41, + 0x82, 0x00, 0x28, 0x48, 0x00, 0x00, 0x3C, 0x38, 0x80, 0x6A, 0x04, 0x48, 0x00, + 0x00, 0x20, 0x38, 0x80, 0x6A, 0x08, 0x48, 0x00, 0x00, 0x18, 0x38, 0x80, 0x6A, + 0x10, 0x48, 0x00, 0x00, 0x10, 0x38, 0x80, 0x6A, 0x20, 0x48, 0x00, 0x00, 0x08, + 0x38, 0x80, 0x6A, 0x40, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, + 0x63, 0x06, 0x44, 0x4B, 0xCB, 0xF1, 0x71, 0x48, 0x00, 0x00, 0x08, 0x38, 0x60, + 0x00, 0x00, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, + 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, + 0x90, 0x01, 0x00, 0x14, 0x1C, 0x03, 0x00, 0x24, 0x3C, 0x60, 0x10, 0x20, 0x80, + 0x63, 0x84, 0xDC, 0x38, 0x63, 0x03, 0xA0, 0x7C, 0x63, 0x02, 0x14, 0x4B, 0xCB, + 0xF2, 0x15, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, + 0x10, 0x4E, 0x80, 0x00, 0x20] Relocations: - {r_addend: 0x8F8C5D, r_info: 0x106, r_offset: 0x28F880E} - {r_addend: 0x8F8C5D, r_info: 0x104, r_offset: 0x28F8812} @@ -469,23 +474,25 @@ Relocations: - {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9452} - {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9466} - {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F946A} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F949A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F949E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F94D6} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F94DA} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F94FA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F94FE} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9892} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9896} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F98C2} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F98C6} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F98F2} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F98F6} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9922} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9926} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9952} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9956} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F99DA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F99DE} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9A12} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9A16} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F949E} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F94A2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F94DA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F94DE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9516} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F951A} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F953A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F953E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F98D2} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F98D6} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9902} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9906} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9932} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9936} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9962} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9966} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9992} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9996} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9A1A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9A1E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9A52} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9A56} diff --git a/asm/patch_diffs/entrance_rando_features_diff.yaml b/asm/patch_diffs/entrance_rando_features_diff.yaml index 34cec290..e0d50c28 100644 --- a/asm/patch_diffs/entrance_rando_features_diff.yaml +++ b/asm/patch_diffs/entrance_rando_features_diff.yaml @@ -1,18 +1,18 @@ Data: - 0x21271A0: [0x48, 0x7D, 0x28, 0x94] - 0x2129324: [0x48, 0x7D, 0x07, 0x28] - 0x21A4548: [0x48, 0x75, 0x55, 0x1C] - 0x25220C4: [0x48, 0x3D, 0x79, 0xD1] - 0x28F9A34: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, - 0x4B, 0x82, 0xD7, 0x6C, 0x88, 0x09, 0x07, 0xB8, 0x4B, 0x82, 0xD7, 0x5C] - 0x28F9A4C: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, - 0x4B, 0x82, 0xF8, 0xD8, 0x89, 0x8C, 0x07, 0xB8, 0x4B, 0x82, 0xF8, 0xC8] - 0x28F9A64: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x20, + 0x21271A0: [0x48, 0x7D, 0x28, 0xD4] + 0x2129324: [0x48, 0x7D, 0x07, 0x68] + 0x21A4548: [0x48, 0x75, 0x55, 0x5C] + 0x25220C4: [0x48, 0x3D, 0x7A, 0x11] + 0x28F9A74: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, + 0x4B, 0x82, 0xD7, 0x2C, 0x88, 0x09, 0x07, 0xB8, 0x4B, 0x82, 0xD7, 0x1C] + 0x28F9A8C: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, + 0x4B, 0x82, 0xF8, 0x98, 0x89, 0x8C, 0x07, 0xB8, 0x4B, 0x82, 0xF8, 0x88] + 0x28F9AA4: [0x88, 0x1F, 0x03, 0xBC, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x20, 0x38, 0x60, 0x00, 0x01, 0x98, 0x7F, 0x05, 0xA4, 0x7F, 0xE3, 0xFB, 0x78, 0x4B, - 0x8A, 0xA8, 0x9D, 0x38, 0x60, 0x00, 0x08, 0x98, 0x7F, 0x05, 0xA4, 0x4B, 0x8A, - 0xAA, 0xC8, 0x7F, 0xE3, 0xFB, 0x78, 0x4B, 0x8A, 0xAA, 0xBC] - 0x28F9A94: [0x3C, 0xA0, 0x10, 0x20, 0x80, 0xA5, 0x83, 0x44, 0x80, 0xA5, 0x02, 0x18, - 0x88, 0xA5, 0x00, 0x3E, 0x38, 0xA5, 0x00, 0x01, 0x4B, 0xCB, 0xB6, 0x34] + 0x8A, 0xA8, 0x5D, 0x38, 0x60, 0x00, 0x08, 0x98, 0x7F, 0x05, 0xA4, 0x4B, 0x8A, + 0xAA, 0x88, 0x7F, 0xE3, 0xFB, 0x78, 0x4B, 0x8A, 0xAA, 0x7C] + 0x28F9AD4: [0x3C, 0xA0, 0x10, 0x20, 0x80, 0xA5, 0x83, 0x44, 0x80, 0xA5, 0x02, 0x18, + 0x88, 0xA5, 0x00, 0x3E, 0x38, 0xA5, 0x00, 0x01, 0x4B, 0xCB, 0xB5, 0xF4] Relocations: -- {r_addend: 0x1F8344, r_info: 0x206, r_offset: 0x28F9A96} -- {r_addend: 0x1F8344, r_info: 0x204, r_offset: 0x28F9A9A} +- {r_addend: 0x1F8344, r_info: 0x206, r_offset: 0x28F9AD6} +- {r_addend: 0x1F8344, r_info: 0x204, r_offset: 0x28F9ADA} diff --git a/asm/patch_diffs/fix_vanilla_bugs_diff.yaml b/asm/patch_diffs/fix_vanilla_bugs_diff.yaml index 765cec17..a57089e3 100644 --- a/asm/patch_diffs/fix_vanilla_bugs_diff.yaml +++ b/asm/patch_diffs/fix_vanilla_bugs_diff.yaml @@ -1,26 +1,26 @@ Data: - 0x2053BB4: [0x48, 0x8A, 0x61, 0x38] - 0x2054658: [0x48, 0x8A, 0x56, 0x54] - 0x2102ED8: [0x48, 0x7F, 0x6E, 0x54] + 0x2053BB4: [0x48, 0x8A, 0x61, 0x78] + 0x2054658: [0x48, 0x8A, 0x56, 0x94] + 0x2102ED8: [0x48, 0x7F, 0x6E, 0x94] 0x210D8C8: [0x60, 0x00, 0x00, 0x00] - 0x2139B7C: [0x48, 0x7C, 0x01, 0x08] - 0x2176D58: [0x48, 0x78, 0x2D, 0x54] - 0x21A9F04: [0x48, 0x74, 0xFE, 0x94] - 0x21D90D0: [0x48, 0x72, 0x0B, 0x75] + 0x2139B7C: [0x48, 0x7C, 0x01, 0x48] + 0x2176D58: [0x48, 0x78, 0x2D, 0x94] + 0x21A9F04: [0x48, 0x74, 0xFE, 0xD4] + 0x21D90D0: [0x48, 0x72, 0x0B, 0xB5] 0x21D90D4: [0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00] - 0x2215864: [0x48, 0x6E, 0x42, 0x80] - 0x225AF14: [0x48, 0x69, 0xEB, 0xB4] - 0x23238E4: [0x48, 0x5D, 0x64, 0x90] - 0x23F0A1C: [0x48, 0x50, 0x92, 0xA1, 0x2C, 0x03, 0x00, 0x00] - 0x23FB970: [0x48, 0x4F, 0xE3, 0x4D, 0x2C, 0x03, 0x00, 0x00] - 0x244706C: [0x48, 0x4B, 0x2A, 0xD9] + 0x2215864: [0x48, 0x6E, 0x42, 0xC0] + 0x225AF14: [0x48, 0x69, 0xEB, 0xF4] + 0x23238E4: [0x48, 0x5D, 0x64, 0xD0] + 0x23F0A1C: [0x48, 0x50, 0x92, 0xE1, 0x2C, 0x03, 0x00, 0x00] + 0x23FB970: [0x48, 0x4F, 0xE3, 0x8D, 0x2C, 0x03, 0x00, 0x00] + 0x244706C: [0x48, 0x4B, 0x2B, 0x19] 0x244A694: [0x48, 0x00, 0x00, 0x08] - 0x244A6B8: [0x48, 0x4A, 0xF4, 0xC1] + 0x244A6B8: [0x48, 0x4A, 0xF5, 0x01] 0x244A6BC: [0x48, 0x00, 0x00, 0x98] - 0x249421C: [0x48, 0x46, 0x58, 0xE1] - 0x2519478: [0x48, 0x3E, 0x08, 0x8C] - 0x25B0AA0: [0x48, 0x34, 0x92, 0x00] + 0x249421C: [0x48, 0x46, 0x59, 0x21] + 0x2519478: [0x48, 0x3E, 0x08, 0xCC] + 0x25B0AA0: [0x48, 0x34, 0x92, 0x40] 0x26DD5C8: [0x60, 0x00, 0x00, 0x04, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00] 0x26DD5E0: [0x60, 0x00, 0x00, 0x02, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00] 0x26DD5F4: [0x40, 0x82, 0x00, 0x08, 0x60, 0x00, 0x00, 0x01] @@ -35,29 +35,29 @@ Data: 0x02, 0x40, 0x82, 0x00, 0x08, 0x39, 0x60, 0x00, 0x04, 0x91, 0x7F, 0x00, 0x60, 0x48, 0x00, 0x00, 0x40] 0x26DDA38: [0x39, 0x60, 0x00, 0x08] - 0x28F9AAC: [0x28, 0x1E, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, 0x48, 0x00, 0x00, 0x0C, - 0x38, 0x00, 0x00, 0x00, 0x4B, 0x87, 0xD2, 0xAC, 0x81, 0x5E, 0x02, 0xE0, 0x4B, - 0x87, 0xD2, 0x98] - 0x28F9AC8: [0x2C, 0x0C, 0x00, 0x38, 0x40, 0x82, 0x00, 0x08, 0x4B, 0x96, 0x14, 0x4C, - 0x2C, 0x0C, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x08, 0x4B, 0x96, 0x14, 0xD8, 0x4B, - 0x96, 0x14, 0xA0] - 0x28F9AE4: [0x40, 0x82, 0x00, 0x0C, 0x3B, 0xE0, 0x0F, 0x75, 0x4B, 0x91, 0xC2, 0x94, - 0x41, 0x80, 0x00, 0x08, 0x4B, 0x91, 0xBD, 0x74, 0x4B, 0x91, 0xBD, 0xA0] - 0x28F9AFC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xCD, 0xB7, 0x11, 0x28, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x24, 0x88, + 0x28F9AEC: [0x28, 0x1E, 0x00, 0x00, 0x41, 0x82, 0x00, 0x08, 0x48, 0x00, 0x00, 0x0C, + 0x38, 0x00, 0x00, 0x00, 0x4B, 0x87, 0xD2, 0x6C, 0x81, 0x5E, 0x02, 0xE0, 0x4B, + 0x87, 0xD2, 0x58] + 0x28F9B08: [0x2C, 0x0C, 0x00, 0x38, 0x40, 0x82, 0x00, 0x08, 0x4B, 0x96, 0x14, 0x0C, + 0x2C, 0x0C, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x08, 0x4B, 0x96, 0x14, 0x98, 0x4B, + 0x96, 0x14, 0x60] + 0x28F9B24: [0x40, 0x82, 0x00, 0x0C, 0x3B, 0xE0, 0x0F, 0x75, 0x4B, 0x91, 0xC2, 0x54, + 0x41, 0x80, 0x00, 0x08, 0x4B, 0x91, 0xBD, 0x34, 0x4B, 0x91, 0xBD, 0x60] + 0x28F9B3C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xCD, 0xB6, 0xD1, 0x28, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x24, 0x88, 0x03, 0x21, 0xF6, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x18, 0x88, 0x1F, 0x21, 0xF6, 0x2C, 0x00, 0x00, 0x00, 0x40, 0x82, 0x00, 0x0C, 0x38, 0x00, 0x00, 0x01, 0x98, 0x1F, 0x21, 0xF6, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9B44: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xC1, 0xCC, 0x2D, 0x88, 0x1D, 0x03, 0xD0, 0x2C, 0x00, 0x00, 0x00, 0x41, + 0x28F9B84: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xC1, 0xCB, 0xED, 0x88, 0x1D, 0x03, 0xD0, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x82, 0x00, 0x0C, 0x88, 0x1D, 0x03, 0xD4, 0x98, 0x1D, 0x0A, 0xAD, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9B78: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28F9BB8: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x88, 0x1F, 0x03, 0xA1, 0x7C, 0x00, 0x07, 0x75, 0x40, 0x81, 0x00, 0x14, 0x88, 0x1F, 0x09, 0xA6, 0x2C, 0x00, 0x00, 0x00, 0x41, 0x81, 0x00, 0x08, 0x48, 0x00, - 0x00, 0x94, 0x4B, 0xCD, 0xB9, 0x25, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, + 0x00, 0x94, 0x4B, 0xCD, 0xB8, 0xE5, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x88, 0x81, 0x81, 0x00, 0x18, 0x28, 0x0C, 0x00, 0x00, 0x41, 0x82, 0x00, 0x7C, 0x28, 0x0C, 0x00, 0x00, 0x41, 0x82, 0x00, 0x74, 0xA9, 0x6C, 0x00, 0x08, 0x2C, 0x0B, 0x00, 0xD3, 0x40, 0x82, 0x00, 0x68, 0xA9, 0x2C, 0x05, 0x62, 0x2C, 0x09, @@ -70,45 +70,45 @@ Data: 0x39, 0x20, 0x00, 0x00, 0x99, 0x3F, 0x09, 0xA6, 0x38, 0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x08, 0x38, 0x60, 0x00, 0x00, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9C44: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xC1, 0xC6, 0xB1, 0x39, 0x3F, 0x19, 0x90, 0x90, 0x61, 0x00, 0xD8, 0x91, + 0x28F9C84: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xC1, 0xC6, 0x71, 0x39, 0x3F, 0x19, 0x90, 0x90, 0x61, 0x00, 0xD8, 0x91, 0x21, 0x00, 0xEC, 0x80, 0xA3, 0x00, 0x10, 0x54, 0xA4, 0x02, 0xD7, 0x41, 0x82, 0x00, 0x0C, 0x38, 0x00, 0x00, 0x01, 0x98, 0x1F, 0x1D, 0xD4, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9C84: [0xC1, 0x41, 0x00, 0x24, 0xC0, 0x29, 0xEF, 0xE8, 0xFC, 0x0A, 0x08, 0x40, - 0x40, 0x80, 0x00, 0x0C, 0xED, 0x2B, 0x02, 0xF2, 0x4B, 0x83, 0xFE, 0xE8, 0x4B, - 0x84, 0x01, 0xB0] - 0x28F9CA0: [0x4B, 0xCE, 0x7C, 0x89, 0x4B, 0xC2, 0x64, 0x31, 0x4B, 0xCB, 0x6D, 0xFC] - 0x28F9CAC: [0x38, 0x00, 0x00, 0x00, 0x90, 0x1E, 0x05, 0x10, 0x38, 0x00, 0x00, 0x02, - 0x4B, 0x75, 0xA9, 0xA4] - 0x28F9CBC: [0xA0, 0x7F, 0x69, 0xB0, 0x28, 0x03, 0x00, 0x33, 0x41, 0x82, 0x00, 0x20, + 0x28F9CC4: [0xC1, 0x41, 0x00, 0x24, 0xC0, 0x29, 0xEF, 0xE8, 0xFC, 0x0A, 0x08, 0x40, + 0x40, 0x80, 0x00, 0x0C, 0xED, 0x2B, 0x02, 0xF2, 0x4B, 0x83, 0xFE, 0xA8, 0x4B, + 0x84, 0x01, 0x70] + 0x28F9CE0: [0x4B, 0xCE, 0x7C, 0x49, 0x4B, 0xC2, 0x63, 0xF1, 0x4B, 0xCB, 0x6D, 0xBC] + 0x28F9CEC: [0x38, 0x00, 0x00, 0x00, 0x90, 0x1E, 0x05, 0x10, 0x38, 0x00, 0x00, 0x02, + 0x4B, 0x75, 0xA9, 0x64] + 0x28F9CFC: [0xA0, 0x7F, 0x69, 0xB0, 0x28, 0x03, 0x00, 0x33, 0x41, 0x82, 0x00, 0x20, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x88, 0x63, 0x00, 0x2F, 0x28, 0x03, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x0C, 0x38, 0x60, 0x00, 0x00, 0x4E, 0x80, 0x00, 0x20, 0x38, 0x60, 0x00, 0x01, 0x4E, 0x80, 0x00, 0x20] - 0x28F9CEC: [0xC1, 0x2C, 0x03, 0x14, 0x89, 0x4C, 0x03, 0xA1, 0x2C, 0x0A, 0x00, 0x19, - 0x41, 0x81, 0x00, 0x08, 0x4B, 0x75, 0x9E, 0xBC, 0x4B, 0x75, 0x9F, 0x54] - 0x28F9D04: [0xA0, 0x7B, 0x00, 0x08, 0x28, 0x03, 0x00, 0xF6, 0x41, 0x82, 0x00, 0x0C, - 0x88, 0x7B, 0x03, 0x26, 0x4B, 0xC1, 0xF7, 0x68, 0x3B, 0xA0, 0x00, 0x20, 0x4B, - 0xC1, 0xF9, 0xE4] - 0x28F9D20: [0x43, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x42, 0x40, 0x00, + 0x28F9D2C: [0xC1, 0x2C, 0x03, 0x14, 0x89, 0x4C, 0x03, 0xA1, 0x2C, 0x0A, 0x00, 0x19, + 0x41, 0x81, 0x00, 0x08, 0x4B, 0x75, 0x9E, 0x7C, 0x4B, 0x75, 0x9F, 0x14] + 0x28F9D44: [0xA0, 0x7B, 0x00, 0x08, 0x28, 0x03, 0x00, 0xF6, 0x41, 0x82, 0x00, 0x0C, + 0x88, 0x7B, 0x03, 0x26, 0x4B, 0xC1, 0xF7, 0x28, 0x3B, 0xA0, 0x00, 0x20, 0x4B, + 0xC1, 0xF9, 0xA4] + 0x28F9D60: [0x43, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x42, 0x40, 0x00, 0xD1, 0x79, 0x00, 0x08, 0xC0, 0x39, 0x00, 0x00, 0xC0, 0x59, 0x00, 0x08, 0xEC, 0x21, 0x00, 0x72, 0xEC, 0x42, 0x00, 0xB2, 0xEC, 0x21, 0x10, 0x2A, 0x4B, 0xFF, - 0xA6, 0x41, 0x3C, 0x60, 0x02, 0x90, 0xC0, 0x43, 0x9D, 0x20, 0xFC, 0x01, 0x10, - 0x40, 0x41, 0x81, 0x00, 0x1C, 0x3C, 0x60, 0x02, 0x90, 0x38, 0x63, 0x9D, 0x24, + 0xA6, 0x01, 0x3C, 0x60, 0x02, 0x90, 0xC0, 0x43, 0x9D, 0x60, 0xFC, 0x01, 0x10, + 0x40, 0x41, 0x81, 0x00, 0x1C, 0x3C, 0x60, 0x02, 0x90, 0x38, 0x63, 0x9D, 0x64, 0xC0, 0x23, 0x00, 0x00, 0xD0, 0x39, 0x00, 0x00, 0xC0, 0x23, 0x00, 0x04, 0xD0, - 0x39, 0x00, 0x08, 0x4B, 0x80, 0x91, 0x6C] - 0x28F9D74: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0xD4, - 0x4B, 0xCB, 0xE0, 0x81, 0x2C, 0x03, 0x00, 0x08, 0x41, 0x80, 0x00, 0x0C, 0x4B, - 0xC2, 0x63, 0x49, 0x4B, 0xA2, 0x9B, 0x58, 0x4B, 0xA2, 0x9B, 0xA8] - 0x28F9D98: [0x88, 0x7F, 0x00, 0x0D, 0x2C, 0x03, 0x00, 0x02, 0x41, 0x82, 0x00, 0x08, - 0x4B, 0x8B, 0x01, 0x8C, 0x35, 0x6B, 0xFF, 0xFF, 0x4B, 0x8B, 0x01, 0x5C] + 0x39, 0x00, 0x08, 0x4B, 0x80, 0x91, 0x2C] + 0x28F9DB4: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0xD4, + 0x4B, 0xCB, 0xE0, 0x41, 0x2C, 0x03, 0x00, 0x08, 0x41, 0x80, 0x00, 0x0C, 0x4B, + 0xC2, 0x63, 0x09, 0x4B, 0xA2, 0x9B, 0x18, 0x4B, 0xA2, 0x9B, 0x68] + 0x28F9DD8: [0x88, 0x7F, 0x00, 0x0D, 0x2C, 0x03, 0x00, 0x02, 0x41, 0x82, 0x00, 0x08, + 0x4B, 0x8B, 0x01, 0x4C, 0x35, 0x6B, 0xFF, 0xFF, 0x4B, 0x8B, 0x01, 0x1C] Relocations: -- {r_addend: 0xEFE8, r_info: 0x204, r_offset: 0x28F9C8A} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9CCA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9CCE} -- {r_addend: 0x8F9D20, r_info: 0x106, r_offset: 0x28F9D4A} -- {r_addend: 0x8F9D20, r_info: 0x104, r_offset: 0x28F9D4E} -- {r_addend: 0x8F9D24, r_info: 0x106, r_offset: 0x28F9D5A} -- {r_addend: 0x8F9D24, r_info: 0x104, r_offset: 0x28F9D5E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9D76} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9D7A} +- {r_addend: 0xEFE8, r_info: 0x204, r_offset: 0x28F9CCA} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9D0A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9D0E} +- {r_addend: 0x8F9D60, r_info: 0x106, r_offset: 0x28F9D8A} +- {r_addend: 0x8F9D60, r_info: 0x104, r_offset: 0x28F9D8E} +- {r_addend: 0x8F9D64, r_info: 0x106, r_offset: 0x28F9D9A} +- {r_addend: 0x8F9D64, r_info: 0x104, r_offset: 0x28F9D9E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9DB6} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9DBA} diff --git a/asm/patch_diffs/flexible_entrances_diff.yaml b/asm/patch_diffs/flexible_entrances_diff.yaml index 3ae1b287..02633d81 100644 --- a/asm/patch_diffs/flexible_entrances_diff.yaml +++ b/asm/patch_diffs/flexible_entrances_diff.yaml @@ -2,15 +2,15 @@ Data: 0x205CB8C: [0x38, 0x60, 0x00, 0x01, 0x38, 0x80, 0x00, 0x00, 0x38, 0xA0, 0x00, 0x00, 0x38, 0xC6, 0x00, 0x00, 0x48, 0x56, 0x6B, 0xAD, 0x48, 0x4C, 0x35, 0x35, 0x38, 0x80, 0x00, 0x00, 0x98, 0x83, 0x51, 0x4D] - 0x2411DF4: [0x48, 0x4E, 0x7F, 0xBC] - 0x24136A8: [0x48, 0x4E, 0x67, 0x38] - 0x2657F04: [0x48, 0x2A, 0x1E, 0xF4] - 0x28F9DB0: [0xA0, 0xF8, 0x02, 0xF8, 0x70, 0xE7, 0x00, 0x01, 0x41, 0x82, 0x00, 0x20, + 0x2411DF4: [0x48, 0x4E, 0x7F, 0xFC] + 0x24136A8: [0x48, 0x4E, 0x67, 0x78] + 0x2657F04: [0x48, 0x2A, 0x1F, 0x34] + 0x28F9DF0: [0xA0, 0xF8, 0x02, 0xF8, 0x70, 0xE7, 0x00, 0x01, 0x41, 0x82, 0x00, 0x20, 0x88, 0xE9, 0x11, 0x77, 0x2C, 0x07, 0x00, 0x02, 0x41, 0x82, 0x00, 0x14, 0x2C, 0x07, 0x00, 0x03, 0x41, 0x82, 0x00, 0x0C, 0x38, 0xE0, 0x00, 0x02, 0x98, 0xE9, - 0x11, 0x77, 0x2C, 0x06, 0x00, 0x0E, 0x4B, 0xB1, 0x80, 0x1C] - 0x28F9DE0: [0x40, 0x82, 0x00, 0x14, 0x2C, 0x18, 0x00, 0x05, 0x40, 0x82, 0x00, 0x08, - 0x4B, 0xB1, 0x9A, 0x40, 0x4B, 0xB1, 0x98, 0xBC, 0x4B, 0xB1, 0x98, 0xDC] - 0x28F9DF8: [0x7C, 0x09, 0x58, 0x2E, 0x81, 0x83, 0x09, 0x20, 0x7C, 0x00, 0x60, 0x00, + 0x11, 0x77, 0x2C, 0x06, 0x00, 0x0E, 0x4B, 0xB1, 0x7F, 0xDC] + 0x28F9E20: [0x40, 0x82, 0x00, 0x14, 0x2C, 0x18, 0x00, 0x05, 0x40, 0x82, 0x00, 0x08, + 0x4B, 0xB1, 0x9A, 0x00, 0x4B, 0xB1, 0x98, 0x7C, 0x4B, 0xB1, 0x98, 0x9C] + 0x28F9E38: [0x7C, 0x09, 0x58, 0x2E, 0x81, 0x83, 0x09, 0x20, 0x7C, 0x00, 0x60, 0x00, 0x41, 0x82, 0x00, 0x0C, 0x39, 0x80, 0x00, 0x00, 0x91, 0x88, 0x00, 0x64, 0x4B, - 0xD5, 0xE0, 0xF8] + 0xD5, 0xE0, 0xB8] diff --git a/asm/patch_diffs/flexible_hint_locations_diff.yaml b/asm/patch_diffs/flexible_hint_locations_diff.yaml index b4f17fec..c43badeb 100644 --- a/asm/patch_diffs/flexible_hint_locations_diff.yaml +++ b/asm/patch_diffs/flexible_hint_locations_diff.yaml @@ -6,19 +6,19 @@ Data: 0x21E6900: [0x38, 0x60, 0x00, 0x00] 0x21E6924: [0x38, 0x60, 0x00, 0x00] 0x21E6950: [0x38, 0x60, 0x00, 0x00] - 0x2473514: [0x3C, 0x80, 0x02, 0x90, 0x88, 0x84, 0x9E, 0x4C, 0x2C, 0x04, 0x00, 0x00, + 0x2473514: [0x3C, 0x80, 0x02, 0x90, 0x88, 0x84, 0x9E, 0x8C, 0x2C, 0x04, 0x00, 0x00, 0x41, 0x82, 0x0C, 0xC0] 0x2473540: [0x48, 0x00, 0x0B, 0xEC] 0x2474194: [0x3B, 0xC0, 0x0D, 0x77] - 0x2481050: [0x48, 0x47, 0x8D, 0xC8] - 0x28F9E14: [0x00, 0x00, 0x0D, 0x73, 0x81, 0x9F, 0x06, 0x48, 0x2C, 0x0C, 0x0D, 0x73, - 0x41, 0x80, 0x00, 0x28, 0x3D, 0x60, 0x02, 0x90, 0x81, 0x6B, 0x9E, 0x14, 0x7C, + 0x2481050: [0x48, 0x47, 0x8E, 0x08] + 0x28F9E54: [0x00, 0x00, 0x0D, 0x73, 0x81, 0x9F, 0x06, 0x48, 0x2C, 0x0C, 0x0D, 0x73, + 0x41, 0x80, 0x00, 0x28, 0x3D, 0x60, 0x02, 0x90, 0x81, 0x6B, 0x9E, 0x54, 0x7C, 0x0C, 0x58, 0x00, 0x41, 0x81, 0x00, 0x18, 0x41, 0x82, 0x00, 0x10, 0x39, 0x8C, - 0x00, 0x01, 0x91, 0x9F, 0x06, 0x48, 0x4B, 0xB8, 0x76, 0x80, 0x4B, 0xB8, 0x76, - 0x98, 0x4B, 0xB8, 0x72, 0x0C] - 0x28F9E4C: [0x00, 0x00, 0x00, 0x00] + 0x00, 0x01, 0x91, 0x9F, 0x06, 0x48, 0x4B, 0xB8, 0x76, 0x40, 0x4B, 0xB8, 0x76, + 0x58, 0x4B, 0xB8, 0x71, 0xCC] + 0x28F9E8C: [0x00, 0x00, 0x00, 0x00] Relocations: -- {r_addend: 0x8F9E14, r_info: 0x106, r_offset: 0x28F9E26} -- {r_addend: 0x8F9E14, r_info: 0x104, r_offset: 0x28F9E2A} -- {r_addend: 0x8F9E4C, r_info: 0x106, r_offset: 0x2473516} -- {r_addend: 0x8F9E4C, r_info: 0x104, r_offset: 0x247351A} +- {r_addend: 0x8F9E54, r_info: 0x106, r_offset: 0x28F9E66} +- {r_addend: 0x8F9E54, r_info: 0x104, r_offset: 0x28F9E6A} +- {r_addend: 0x8F9E8C, r_info: 0x106, r_offset: 0x2473516} +- {r_addend: 0x8F9E8C, r_info: 0x104, r_offset: 0x247351A} diff --git a/asm/patch_diffs/flexible_item_locations_diff.yaml b/asm/patch_diffs/flexible_item_locations_diff.yaml index ab009f35..0aafe86b 100644 --- a/asm/patch_diffs/flexible_item_locations_diff.yaml +++ b/asm/patch_diffs/flexible_item_locations_diff.yaml @@ -4,30 +4,30 @@ Data: 0x2095B70: [0x28, 0x03, 0x00, 0x04] 0x2097064: [0x60, 0x00, 0x00, 0x00] 0x2097074: [0x60, 0x00, 0x00, 0x00] - 0x20C1CA0: [0x48, 0x83, 0x83, 0xBD] + 0x20C1CA0: [0x48, 0x83, 0x83, 0xFD] 0x20D0AE4: [0x88, 0x9F, 0x00, 0xB2] 0x20D0AF0: [0x39, 0x00, 0x00, 0x01] 0x21031F0: [0x38, 0xC0, 0x00, 0x00] 0x212456C: [0x88, 0x8C, 0x00, 0xB0] 0x2124578: [0x38, 0xE0, 0x00, 0x00] 0x2124580: [0x39, 0x00, 0x00, 0x00] - 0x213B624: [0x48, 0x7B, 0xEA, 0x11] + 0x213B624: [0x48, 0x7B, 0xEA, 0x51] 0x21A5940: [0x60, 0x00, 0x00, 0x00] 0x21FCCD4: [0x38, 0x60, 0x6A, 0x02, 0x60, 0x00, 0x00, 0x00] 0x21FCCE0: [0x48, 0x6F, 0xC0, 0x8D] - 0x2200D54: [0x48, 0x6F, 0x94, 0xFC] + 0x2200D54: [0x48, 0x6F, 0x95, 0x3C] 0x22022F0: [0x38, 0x60, 0x6A, 0x02, 0x60, 0x00, 0x00, 0x00, 0x48, 0x6F, 0x6A, 0x75] 0x2212C64: [0x7E, 0xF4, 0xBB, 0x78, 0x88, 0x7A, 0x09, 0x9F, 0x28, 0x03, 0x00, 0x04, 0x41, 0x82, 0x00, 0x3C, 0x28, 0x03, 0x00, 0x05, 0x41, 0x82, 0x00, 0x34, 0x48, - 0x6E, 0x72, 0x09, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x28, 0x48, 0x00, + 0x6E, 0x72, 0x49, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x28, 0x48, 0x00, 0x00, 0x14] - 0x221543C: [0x48, 0x6E, 0x4A, 0x79, 0x2C, 0x03, 0x00, 0x01] - 0x2215450: [0x48, 0x6E, 0x4A, 0x01] + 0x221543C: [0x48, 0x6E, 0x4A, 0xB9, 0x2C, 0x03, 0x00, 0x01] + 0x2215450: [0x48, 0x6E, 0x4A, 0x41] 0x22301DC: [0x48, 0x00, 0x01, 0x64] - 0x22313A8: [0x48, 0x6C, 0x8F, 0x61] - 0x2231414: [0x48, 0x6C, 0x8E, 0xF5] + 0x22313A8: [0x48, 0x6C, 0x8F, 0xA1] + 0x2231414: [0x48, 0x6C, 0x8F, 0x35] 0x22451D8: [0x48, 0x00, 0x00, 0x08] - 0x227C2B8: [0x48, 0x67, 0xDF, 0x55] + 0x227C2B8: [0x48, 0x67, 0xDF, 0x95] 0x227D200: [0x48, 0x00, 0x00, 0x40] 0x227D244: [0x38, 0x60, 0x6A, 0x01, 0x60, 0x00, 0x00, 0x00, 0x48, 0x67, 0xBB, 0x21] 0x2299404: [0x48, 0x00, 0x00, 0x6C] @@ -37,12 +37,12 @@ Data: 0x22BF178: [0x38, 0x60, 0x69, 0x10, 0x48, 0x63, 0x9B, 0xF1] 0x22BF310: [0x38, 0x60, 0x69, 0x04, 0x48, 0x63, 0x9A, 0x59] 0x22BFD4C: [0x38, 0x60, 0x69, 0x10, 0x48, 0x63, 0x90, 0x1D] - 0x22C1038: [0x48, 0x63, 0x90, 0x85] - 0x22C1064: [0x48, 0x63, 0x90, 0x59] + 0x22C1038: [0x48, 0x63, 0x90, 0xC5] + 0x22C1064: [0x48, 0x63, 0x90, 0x99] 0x22C3360: [0x38, 0x60, 0x69, 0x10, 0x48, 0x63, 0x5A, 0x09] 0x22C6440: [0x38, 0x60, 0x6A, 0x80] 0x22C6448: [0x48, 0x63, 0x29, 0x25] - 0x22C6454: [0x48, 0x63, 0x3C, 0xB8] + 0x22C6454: [0x48, 0x63, 0x3C, 0xF8] 0x22C6D94: [0x38, 0x60, 0x69, 0x08, 0x48, 0x63, 0x1F, 0xD5] 0x22C7AE0: [0x38, 0x60, 0x69, 0x10] 0x22C7AE8: [0x48, 0x63, 0x12, 0x85] @@ -50,59 +50,59 @@ Data: 0x22CC550: [0x38, 0x60, 0x69, 0x04] 0x22CC558: [0x48, 0x62, 0xC8, 0x15] 0x22CC578: [0x48, 0x62, 0xC7, 0xF5] - 0x22CFA80: [0x48, 0x62, 0xA6, 0xB5] + 0x22CFA80: [0x48, 0x62, 0xA6, 0xF5] 0x22D05B4: [0x38, 0x60, 0x69, 0x20, 0x48, 0x62, 0x87, 0xB5] 0x22D94E8: [0x38, 0x60, 0x69, 0x40, 0x60, 0x00, 0x00, 0x00, 0x48, 0x61, 0xF8, 0x7D] - 0x22DA8A4: [0x48, 0x61, 0xF8, 0xC5] + 0x22DA8A4: [0x48, 0x61, 0xF9, 0x05] 0x22E512C: [0x38, 0x60, 0x69, 0x80] 0x22E5154: [0x48, 0x61, 0x3C, 0x19] - 0x22E5FB0: [0x48, 0x61, 0x42, 0x19] - 0x22E5FDC: [0x48, 0x61, 0x41, 0xED] - 0x22E7B74: [0x48, 0x61, 0x1E, 0x01] - 0x22E7B88: [0x48, 0x61, 0x1D, 0xED] - 0x22E7B9C: [0x48, 0x61, 0x1D, 0xD9] - 0x22E7BB0: [0x48, 0x61, 0x1D, 0xC5] - 0x22E7BC4: [0x48, 0x61, 0x1D, 0xB1] - 0x22E954C: [0x48, 0x61, 0x04, 0x29] - 0x22E9748: [0x48, 0x61, 0x02, 0x2D] - 0x22EAA98: [0x48, 0x60, 0xEE, 0xDD] - 0x22EAAAC: [0x48, 0x60, 0xEE, 0xC9] - 0x22EAAC0: [0x48, 0x60, 0xEE, 0xB5] - 0x22EAAD4: [0x48, 0x60, 0xEE, 0xA1] - 0x22EAAE8: [0x48, 0x60, 0xEE, 0x8D] - 0x22EAE38: [0x48, 0x60, 0xEB, 0x3D] - 0x22EAE4C: [0x48, 0x60, 0xEB, 0x29] - 0x22EAE60: [0x48, 0x60, 0xEB, 0x15] - 0x22EAE74: [0x48, 0x60, 0xEB, 0x01] - 0x22EAE88: [0x48, 0x60, 0xEA, 0xED] - 0x22EB690: [0x48, 0x60, 0xE2, 0xE5] - 0x22EB6BC: [0x48, 0x60, 0xE2, 0xB9] - 0x22EB6E8: [0x48, 0x60, 0xE2, 0x8D] - 0x22EB714: [0x48, 0x60, 0xE2, 0x61] - 0x22EB740: [0x48, 0x60, 0xE2, 0x35] + 0x22E5FB0: [0x48, 0x61, 0x42, 0x59] + 0x22E5FDC: [0x48, 0x61, 0x42, 0x2D] + 0x22E7B74: [0x48, 0x61, 0x1E, 0x41] + 0x22E7B88: [0x48, 0x61, 0x1E, 0x2D] + 0x22E7B9C: [0x48, 0x61, 0x1E, 0x19] + 0x22E7BB0: [0x48, 0x61, 0x1E, 0x05] + 0x22E7BC4: [0x48, 0x61, 0x1D, 0xF1] + 0x22E954C: [0x48, 0x61, 0x04, 0x69] + 0x22E9748: [0x48, 0x61, 0x02, 0x6D] + 0x22EAA98: [0x48, 0x60, 0xEF, 0x1D] + 0x22EAAAC: [0x48, 0x60, 0xEF, 0x09] + 0x22EAAC0: [0x48, 0x60, 0xEE, 0xF5] + 0x22EAAD4: [0x48, 0x60, 0xEE, 0xE1] + 0x22EAAE8: [0x48, 0x60, 0xEE, 0xCD] + 0x22EAE38: [0x48, 0x60, 0xEB, 0x7D] + 0x22EAE4C: [0x48, 0x60, 0xEB, 0x69] + 0x22EAE60: [0x48, 0x60, 0xEB, 0x55] + 0x22EAE74: [0x48, 0x60, 0xEB, 0x41] + 0x22EAE88: [0x48, 0x60, 0xEB, 0x2D] + 0x22EB690: [0x48, 0x60, 0xE3, 0x25] + 0x22EB6BC: [0x48, 0x60, 0xE2, 0xF9] + 0x22EB6E8: [0x48, 0x60, 0xE2, 0xCD] + 0x22EB714: [0x48, 0x60, 0xE2, 0xA1] + 0x22EB740: [0x48, 0x60, 0xE2, 0x75] 0x22F42A8: [0x48, 0x00, 0x00, 0xB0] 0x22F50FC: [0x48, 0x00, 0x00, 0x38] 0x2341B0C: [0x38, 0x80, 0x00, 0x05, 0x38, 0x6C, 0x00, 0x20] 0x2341B14: [0x48, 0x27, 0x85, 0xAD] 0x2341B1C: [0x41, 0x82, 0x00, 0x74] - 0x2346F28: [0x48, 0x5B, 0x2F, 0xF8] - 0x2347ABC: [0x48, 0x5B, 0x24, 0x75] + 0x2346F28: [0x48, 0x5B, 0x30, 0x38] + 0x2347ABC: [0x48, 0x5B, 0x24, 0xB5] 0x2347AC0: [0x2C, 0x03, 0xFF, 0xFF] 0x2347ACC: [0x60, 0x00, 0x00, 0x00] - 0x2347C34: [0x48, 0x5B, 0x17, 0xA1, 0x48, 0x5B, 0x22, 0xCC] + 0x2347C34: [0x48, 0x5B, 0x17, 0xA1, 0x48, 0x5B, 0x23, 0x0C] 0x2347C48: [0x60, 0x00, 0x00, 0x00] 0x2347CB4: [0x60, 0x00, 0x00, 0x00] - 0x2347D18: [0x48, 0x5B, 0x22, 0x45] + 0x2347D18: [0x48, 0x5B, 0x22, 0x85] 0x2358A54: [0x60, 0x00, 0x00, 0x00] - 0x2358A8C: [0x48, 0x5A, 0x19, 0x28] - 0x23B6390: [0x48, 0x54, 0x35, 0xE5] - 0x23DBD88: [0x48, 0x51, 0xE5, 0x1C] + 0x2358A8C: [0x48, 0x5A, 0x19, 0x68] + 0x23B6390: [0x48, 0x54, 0x36, 0x25] + 0x23DBD88: [0x48, 0x51, 0xE5, 0x5C] 0x2442248: [0x38, 0x80, 0x69, 0x01] 0x24675F4: [0x2C, 0x1F, 0x00, 0x01, 0x41, 0x82, 0x00, 0x14, 0x2C, 0x1F, 0x00, 0x03, 0x41, 0x82, 0x00, 0x0C, 0x2C, 0x1F, 0x00, 0x05, 0x40, 0x82, 0x00, 0xAC, 0x3B, 0xFF, 0x00, 0x60] - 0x24CC08C: [0x48, 0x42, 0xE2, 0xDD] - 0x24CC134: [0x48, 0x42, 0xE2, 0x35] + 0x24CC08C: [0x48, 0x42, 0xE3, 0x1D] + 0x24CC134: [0x48, 0x42, 0xE2, 0x75] 0x2526490: [0x48, 0x3D, 0x2F, 0x45, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00] 0x254DCA8: [0x60, 0x00, 0x00, 0x00] @@ -112,165 +112,165 @@ Data: 0x259D780: [0x38, 0x60, 0x00, 0x01] 0x25D8A70: [0x60, 0x00, 0x00, 0x00] 0x25D8A84: [0x38, 0xA0, 0x00, 0x15] - 0x28F9E50: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xCC, 0x30, 0x71, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, - 0x63, 0x06, 0x44, 0x38, 0x80, 0x69, 0x02, 0x4B, 0xCB, 0xEC, 0xF9, 0x80, 0x01, + 0x28F9E90: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xCC, 0x30, 0x31, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, + 0x63, 0x06, 0x44, 0x38, 0x80, 0x69, 0x02, 0x4B, 0xCB, 0xEC, 0xB9, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, - 0x80, 0x69, 0x02, 0x4B, 0xCB, 0xEC, 0xF5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, + 0x80, 0x69, 0x02, 0x4B, 0xCB, 0xEC, 0xB5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9EB4: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28F9EF4: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0xA8, 0x63, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x40, 0x82, 0x00, 0x28, 0x88, 0x7B, 0x09, 0x9F, 0x28, 0x03, 0x00, 0x04, 0x41, 0x82, 0x00, 0x1C, 0x28, 0x03, 0x00, 0x05, 0x41, 0x82, 0x00, 0x14, 0x4B, 0xFF, 0xFF, 0xA5, 0x2C, 0x03, 0x00, 0x00, 0x38, 0x60, 0x00, 0x01, 0x41, 0x82, 0x00, 0x08, 0x38, 0x60, 0x00, 0x00, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9F04: [0x7C, 0x7E, 0x1B, 0x78, 0x2C, 0x1E, 0xFF, 0xFF, 0x41, 0x82, 0x00, 0x10, - 0x7F, 0xCA, 0xF3, 0x78, 0x91, 0x5F, 0x03, 0xA4, 0x4B, 0xA4, 0xDD, 0x28, 0x4B, - 0xA4, 0xDD, 0xB8] - 0x28F9F20: [0x38, 0x60, 0xFF, 0xFF, 0x90, 0x7E, 0x03, 0xA4, 0x7F, 0xC3, 0xF3, 0x78, - 0x4B, 0xA4, 0xD0, 0x00] - 0x28F9F30: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xFF, 0xF4, 0x99, 0x90, 0x7C, 0x03, 0xA4, 0x38, 0xA0, 0x00, 0x01, 0x98, + 0x28F9F44: [0x7C, 0x7E, 0x1B, 0x78, 0x2C, 0x1E, 0xFF, 0xFF, 0x41, 0x82, 0x00, 0x10, + 0x7F, 0xCA, 0xF3, 0x78, 0x91, 0x5F, 0x03, 0xA4, 0x4B, 0xA4, 0xDC, 0xE8, 0x4B, + 0xA4, 0xDD, 0x78] + 0x28F9F60: [0x38, 0x60, 0xFF, 0xFF, 0x90, 0x7E, 0x03, 0xA4, 0x7F, 0xC3, 0xF3, 0x78, + 0x4B, 0xA4, 0xCF, 0xC0] + 0x28F9F70: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xFF, 0xF4, 0x59, 0x90, 0x7C, 0x03, 0xA4, 0x38, 0xA0, 0x00, 0x01, 0x98, 0xBC, 0x03, 0x2E, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28F9F5C: [0x94, 0x21, 0xFF, 0xE0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x24, + 0x28F9F9C: [0x94, 0x21, 0xFF, 0xE0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x24, 0x93, 0xC1, 0x00, 0x18, 0x93, 0xE1, 0x00, 0x1C, 0x7C, 0x7E, 0x1B, 0x78, 0x80, 0x7E, 0x03, 0xA4, 0x3C, 0x83, 0x00, 0x01, 0x28, 0x04, 0xFF, 0xFF, 0x41, 0x82, - 0x00, 0x88, 0x38, 0x81, 0x00, 0x08, 0x4B, 0xCD, 0xB5, 0x3D, 0x2C, 0x03, 0x00, + 0x00, 0x88, 0x38, 0x81, 0x00, 0x08, 0x4B, 0xCD, 0xB4, 0xFD, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x5C, 0x80, 0x81, 0x00, 0x08, 0x2C, 0x04, 0x00, 0x00, 0x41, 0x82, 0x00, 0x6C, 0x81, 0x5E, 0x00, 0x04, 0x91, 0x44, 0x02, 0xE8, 0x88, 0xBE, 0x03, 0x2E, 0x2C, 0x05, 0x00, 0x00, 0x40, 0x82, 0x00, 0x58, 0x3D, 0x40, - 0x02, 0x90, 0x39, 0x4A, 0xA0, 0x28, 0xC0, 0x0A, 0x00, 0x00, 0xD0, 0x04, 0x03, + 0x02, 0x90, 0x39, 0x4A, 0xA0, 0x68, 0xC0, 0x0A, 0x00, 0x00, 0xD0, 0x04, 0x03, 0x70, 0xC0, 0x0A, 0x00, 0x04, 0xD0, 0x04, 0x03, 0x40, 0xC0, 0x0A, 0x00, 0x08, 0xD0, 0x04, 0x03, 0x74, 0x80, 0xA4, 0x02, 0xE0, 0x60, 0xA5, 0x00, 0x40, 0x90, 0xA4, 0x02, 0xE0, 0x38, 0xA0, 0x00, 0x01, 0x98, 0xBE, 0x03, 0x2E, 0x48, 0x00, 0x00, 0x20, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, - 0x44, 0x38, 0x80, 0x2E, 0x20, 0x4B, 0xCB, 0xEB, 0x6D, 0x38, 0x00, 0xFF, 0xFF, - 0x90, 0x1E, 0x03, 0xA4, 0x7F, 0xC3, 0xF3, 0x78, 0x4B, 0xA4, 0xD2, 0xB1, 0x80, + 0x44, 0x38, 0x80, 0x2E, 0x20, 0x4B, 0xCB, 0xEB, 0x2D, 0x38, 0x00, 0xFF, 0xFF, + 0x90, 0x1E, 0x03, 0xA4, 0x7F, 0xC3, 0xF3, 0x78, 0x4B, 0xA4, 0xD2, 0x71, 0x80, 0x01, 0x00, 0x24, 0x83, 0xC1, 0x00, 0x18, 0x83, 0xE1, 0x00, 0x1C, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x20, 0x4E, 0x80, 0x00, 0x20, 0x3F, 0xE0, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0xC0, 0x06, 0x66, 0x66] - 0x28FA034: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x38, 0x60, 0x00, 0x08, 0x38, 0x80, 0x00, 0x00, 0x4B, 0xC2, 0x68, 0x1D, 0x80, + 0x28FA074: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x38, 0x60, 0x00, 0x08, 0x38, 0x80, 0x00, 0x00, 0x4B, 0xC2, 0x67, 0xDD, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA05C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xCB, 0xEB, 0x2D, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x34, 0x4B, - 0xC2, 0x60, 0x61, 0x38, 0x63, 0x51, 0x33, 0x3C, 0x80, 0x02, 0x90, 0x38, 0x84, - 0xA0, 0xB4, 0x38, 0x84, 0xFF, 0xFF, 0x8C, 0xA3, 0x00, 0x01, 0x8C, 0xC4, 0x00, + 0x28FA09C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xCB, 0xEA, 0xED, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x34, 0x4B, + 0xC2, 0x60, 0x21, 0x38, 0x63, 0x51, 0x33, 0x3C, 0x80, 0x02, 0x90, 0x38, 0x84, + 0xA0, 0xF4, 0x38, 0x84, 0xFF, 0xFF, 0x8C, 0xA3, 0x00, 0x01, 0x8C, 0xC4, 0x00, 0x01, 0x7C, 0x05, 0x30, 0x40, 0x40, 0x82, 0x00, 0x0C, 0x28, 0x05, 0x00, 0x00, 0x40, 0x82, 0xFF, 0xEC, 0x7C, 0x65, 0x30, 0x51, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x47, 0x61, 0x6E, 0x6F, 0x6E, 0x4A, 0x00, 0x00] - 0x28FA0BC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FA0FC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x9F, 0x23, 0x78, 0x54, 0x84, 0x06, 0x3E, 0x4B, - 0xCD, 0xDD, 0x19, 0x57, 0xE4, 0x84, 0x3F, 0x41, 0x82, 0x00, 0x1C, 0x7C, 0x7F, + 0xCD, 0xDC, 0xD9, 0x57, 0xE4, 0x84, 0x3F, 0x41, 0x82, 0x00, 0x1C, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, - 0x44, 0x4B, 0xCB, 0xEA, 0x79, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, + 0x44, 0x4B, 0xCB, 0xEA, 0x39, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA10C: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, - 0x38, 0x80, 0x6A, 0x80, 0x4B, 0xCB, 0xEA, 0x4D, 0x3D, 0x80, 0x02, 0x90, 0x39, - 0x8C, 0xA1, 0x30, 0x89, 0x8C, 0x00, 0x00, 0x4B, 0x9C, 0xC3, 0x2C, 0xFD, 0x00, + 0x28FA14C: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, + 0x38, 0x80, 0x6A, 0x80, 0x4B, 0xCB, 0xEA, 0x0D, 0x3D, 0x80, 0x02, 0x90, 0x39, + 0x8C, 0xA1, 0x70, 0x89, 0x8C, 0x00, 0x00, 0x4B, 0x9C, 0xC2, 0xEC, 0xFD, 0x00, 0x00, 0x00] - 0x28FA134: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FA174: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x99, 0x5F, 0x0B, 0x39, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, - 0x63, 0x06, 0x44, 0x38, 0x80, 0x69, 0x20, 0x4B, 0xCB, 0xEA, 0x15, 0x80, 0x01, + 0x63, 0x06, 0x44, 0x38, 0x80, 0x69, 0x20, 0x4B, 0xCB, 0xE9, 0xD5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA168: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x9F, 0x23, 0x78, 0x4B, 0xCD, 0xDC, 0x71, 0x3C, - 0x80, 0x02, 0x90, 0x38, 0x84, 0xA1, 0xC4, 0x88, 0x84, 0x00, 0x00, 0x7C, 0x1F, + 0x28FA1A8: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x9F, 0x23, 0x78, 0x4B, 0xCD, 0xDC, 0x31, 0x3C, + 0x80, 0x02, 0x90, 0x38, 0x84, 0xA2, 0x04, 0x88, 0x84, 0x00, 0x00, 0x7C, 0x1F, 0x20, 0x00, 0x40, 0x82, 0x00, 0x20, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, 0x69, 0x40, - 0x4B, 0xCB, 0xE9, 0xC1, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, + 0x4B, 0xCB, 0xE9, 0x81, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x2A, 0x00, 0x00, 0x00] - 0x28FA1C8: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x93, 0xE1, 0x00, 0x0C, 0x4B, 0xCD, 0xDC, 0x15, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, + 0x28FA208: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x93, 0xE1, 0x00, 0x0C, 0x4B, 0xCD, 0xDB, 0xD5, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, - 0x69, 0x80, 0x4B, 0xCB, 0xE9, 0x79, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, + 0x69, 0x80, 0x4B, 0xCB, 0xE9, 0x39, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA20C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x93, 0xE1, 0x00, 0x0C, 0x4B, 0xCD, 0xDB, 0xD1, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, + 0x28FA24C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x93, 0xE1, 0x00, 0x0C, 0x4B, 0xCD, 0xDB, 0x91, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x38, 0x80, - 0x6A, 0x01, 0x4B, 0xCB, 0xE9, 0x35, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, + 0x6A, 0x01, 0x4B, 0xCB, 0xE8, 0xF5, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA250: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0x4B, 0xCD, 0xD7, 0xF5, 0xAB, + 0x28FA290: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0x4B, 0xCD, 0xD7, 0xB5, 0xAB, 0xFF, 0x09, 0xDA, 0x2C, 0x1F, 0x00, 0x00, 0x40, 0x82, 0x00, 0x20, 0x7C, 0x7F, 0x1B, 0x78, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, - 0x44, 0x38, 0x80, 0x6A, 0x02, 0x4B, 0xCB, 0xE8, 0xE1, 0x7F, 0xE3, 0xFB, 0x78, + 0x44, 0x38, 0x80, 0x6A, 0x02, 0x4B, 0xCB, 0xE8, 0xA1, 0x7F, 0xE3, 0xFB, 0x78, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA2A4: [0x28, 0x04, 0x00, 0x69, 0x41, 0x82, 0x00, 0x48, 0x28, 0x04, 0x00, 0x6A, + 0x28FA2E4: [0x28, 0x04, 0x00, 0x69, 0x41, 0x82, 0x00, 0x48, 0x28, 0x04, 0x00, 0x6A, 0x41, 0x82, 0x00, 0x40, 0x28, 0x04, 0x00, 0x6B, 0x41, 0x82, 0x00, 0x38, 0x28, 0x04, 0x00, 0x6D, 0x41, 0x82, 0x00, 0x3C, 0x28, 0x04, 0x00, 0x6E, 0x41, 0x82, 0x00, 0x34, 0x28, 0x04, 0x00, 0x6F, 0x41, 0x82, 0x00, 0x2C, 0x28, 0x04, 0x00, 0x70, 0x41, 0x82, 0x00, 0x24, 0x28, 0x04, 0x00, 0x71, 0x41, 0x82, 0x00, 0x1C, - 0x28, 0x04, 0x00, 0x72, 0x41, 0x82, 0x00, 0x14, 0x4B, 0xAE, 0x1A, 0xC4, 0x3C, - 0x60, 0x80, 0x00, 0x38, 0x63, 0x00, 0x4F, 0x4B, 0xAE, 0x1A, 0xB8, 0x3C, 0x60, - 0x80, 0x00, 0x38, 0x63, 0x00, 0x27, 0x4B, 0xAE, 0x1A, 0xAC] - 0x28FA308: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28, 0x04, 0x00, 0x72, 0x41, 0x82, 0x00, 0x14, 0x4B, 0xAE, 0x1A, 0x84, 0x3C, + 0x60, 0x80, 0x00, 0x38, 0x63, 0x00, 0x4F, 0x4B, 0xAE, 0x1A, 0x78, 0x3C, 0x60, + 0x80, 0x00, 0x38, 0x63, 0x00, 0x27, 0x4B, 0xAE, 0x1A, 0x6C] + 0x28FA348: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x80, 0x1E, 0x09, 0x98, 0x2C, 0x00, 0x1D, 0xCB, 0x40, 0x82, 0x00, 0x34, 0x2C, 0x04, 0x00, 0x52, 0x41, 0x82, 0x00, 0x10, 0x2C, 0x04, 0x00, 0x53, 0x41, 0x82, 0x00, 0x18, 0x48, 0x00, 0x00, 0x20, 0x3C, 0x80, 0x02, 0x90, 0x38, 0x84, 0xA3, - 0x64, 0x88, 0x84, 0x00, 0x00, 0x48, 0x00, 0x00, 0x10, 0x3C, 0x80, 0x02, 0x90, - 0x38, 0x84, 0xA3, 0x65, 0x88, 0x84, 0x00, 0x00, 0x4B, 0xCD, 0xDA, 0x9D, 0x80, + 0xA4, 0x88, 0x84, 0x00, 0x00, 0x48, 0x00, 0x00, 0x10, 0x3C, 0x80, 0x02, 0x90, + 0x38, 0x84, 0xA3, 0xA5, 0x88, 0x84, 0x00, 0x00, 0x4B, 0xCD, 0xDA, 0x5D, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x52, 0x53, 0x00, 0x00] - 0x28FA368: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FA3A8: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0xA1, 0x7B, 0x07, 0x98, 0x55, 0x6B, 0xC6, 0x3E, 0x2C, 0x0B, 0x00, 0xFF, 0x41, 0x82, 0x00, 0x20, 0x2C, 0x0B, 0x00, 0x00, 0x41, 0x82, 0x00, 0x18, 0x7D, 0x64, 0x5B, 0x78, 0x38, 0xE0, 0x00, 0x03, 0x39, 0x20, 0x00, 0x05, 0x4B, 0xCD, 0xE4, - 0xD9, 0x48, 0x00, 0x00, 0x08, 0x4B, 0xCD, 0xDD, 0x81, 0x80, 0x01, 0x00, 0x14, + 0x99, 0x48, 0x00, 0x00, 0x08, 0x4B, 0xCD, 0xDD, 0x41, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA3B4: [0xA1, 0x7F, 0x02, 0xF8, 0x55, 0x6B, 0x06, 0x3E, 0x2C, 0x0B, 0x00, 0xFF, + 0x28FA3F4: [0xA1, 0x7F, 0x02, 0xF8, 0x55, 0x6B, 0x06, 0x3E, 0x2C, 0x0B, 0x00, 0xFF, 0x41, 0x82, 0x00, 0x20, 0x2C, 0x0B, 0x00, 0x00, 0x41, 0x82, 0x00, 0x18, 0x7D, 0x64, 0x5B, 0x78, 0x38, 0xE0, 0x00, 0x03, 0x39, 0x20, 0x00, 0x05, 0x4B, 0xCD, - 0xE4, 0x99, 0x4B, 0xA5, 0xE6, 0xB4, 0x4B, 0xCD, 0xDD, 0x41, 0x4B, 0xA5, 0xE6, - 0xAC] + 0xE4, 0x59, 0x4B, 0xA5, 0xE6, 0x74, 0x4B, 0xCD, 0xDD, 0x01, 0x4B, 0xA5, 0xE6, + 0x6C] 0x10190192: [0x6B, 0x01] 0x101BD558: [0x10, 0x1E, 0xB8, 0x50] 0x101C399C: [0x69, 0x04] 0x101C39A0: [0x69, 0x08] 0x101C39AC: [0x69, 0x10] Relocations: -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9E62} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9E66} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9E92} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9E96} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9EA2} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9EA6} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9ED2} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9ED6} - {r_addend: 0x1EB850, r_info: 0x201, r_offset: 0x101BD558} -- {r_addend: 0x8FA028, r_info: 0x106, r_offset: 0x28F9FB6} -- {r_addend: 0x8FA028, r_info: 0x104, r_offset: 0x28F9FBA} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28F9FEE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28F9FF2} -- {r_addend: 0x8FA0B4, r_info: 0x106, r_offset: 0x28FA07E} -- {r_addend: 0x8FA0B4, r_info: 0x104, r_offset: 0x28FA082} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA0E6} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA0EA} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA10E} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA112} -- {r_addend: 0x8FA130, r_info: 0x106, r_offset: 0x28FA122} -- {r_addend: 0x8FA130, r_info: 0x104, r_offset: 0x28FA126} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA146} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA14A} -- {r_addend: 0x8FA1C4, r_info: 0x106, r_offset: 0x28FA182} -- {r_addend: 0x8FA1C4, r_info: 0x104, r_offset: 0x28FA186} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA19A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA19E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA1E2} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA1E6} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA226} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA22A} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA27A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA27E} -- {r_addend: 0x8FA364, r_info: 0x106, r_offset: 0x28FA336} -- {r_addend: 0x8FA364, r_info: 0x104, r_offset: 0x28FA33A} -- {r_addend: 0x8FA365, r_info: 0x106, r_offset: 0x28FA346} -- {r_addend: 0x8FA365, r_info: 0x104, r_offset: 0x28FA34A} +- {r_addend: 0x8FA068, r_info: 0x106, r_offset: 0x28F9FF6} +- {r_addend: 0x8FA068, r_info: 0x104, r_offset: 0x28F9FFA} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA02E} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA032} +- {r_addend: 0x8FA0F4, r_info: 0x106, r_offset: 0x28FA0BE} +- {r_addend: 0x8FA0F4, r_info: 0x104, r_offset: 0x28FA0C2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA126} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA12A} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA14E} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA152} +- {r_addend: 0x8FA170, r_info: 0x106, r_offset: 0x28FA162} +- {r_addend: 0x8FA170, r_info: 0x104, r_offset: 0x28FA166} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA186} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA18A} +- {r_addend: 0x8FA204, r_info: 0x106, r_offset: 0x28FA1C2} +- {r_addend: 0x8FA204, r_info: 0x104, r_offset: 0x28FA1C6} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA1DA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA1DE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA222} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA226} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA266} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA26A} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA2BA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA2BE} +- {r_addend: 0x8FA3A4, r_info: 0x106, r_offset: 0x28FA376} +- {r_addend: 0x8FA3A4, r_info: 0x104, r_offset: 0x28FA37A} +- {r_addend: 0x8FA3A5, r_info: 0x106, r_offset: 0x28FA386} +- {r_addend: 0x8FA3A5, r_info: 0x104, r_offset: 0x28FA38A} diff --git a/asm/patch_diffs/make_all_figurines_obtainable_diff.yaml b/asm/patch_diffs/make_all_figurines_obtainable_diff.yaml index a1cd75fb..3a13a8ff 100644 --- a/asm/patch_diffs/make_all_figurines_obtainable_diff.yaml +++ b/asm/patch_diffs/make_all_figurines_obtainable_diff.yaml @@ -1,5 +1,5 @@ Data: - 0x22A20C8: [0x48, 0x65, 0x83, 0x20] + 0x22A20C8: [0x48, 0x65, 0x83, 0x60] 0x22A20F4: [0x38, 0x60, 0x00, 0x88] 0x22A2180: [0x48, 0x00, 0x00, 0x30] 0x22A2194: [0x40, 0x82, 0x00, 0x44] @@ -12,18 +12,18 @@ Data: 0x22D02B8: [0x38, 0x80, 0x00, 0x01, 0x38, 0x69, 0x00, 0xD4, 0x48, 0x2E, 0x78, 0x51] 0x22D02D4: [0x38, 0x60, 0x00, 0x07, 0x48, 0x25, 0x07, 0xAD, 0x60, 0x00, 0x00, 0x00] 0x22D02F0: [0x38, 0x60, 0x00, 0x06, 0x48, 0x25, 0x07, 0x91, 0x60, 0x00, 0x00, 0x00] - 0x28FA3E8: [0x38, 0x60, 0x00, 0xBA, 0x4B, 0xCC, 0x32, 0x15, 0x54, 0x63, 0x06, 0x3E, + 0x28FA428: [0x38, 0x60, 0x00, 0xBA, 0x4B, 0xCC, 0x31, 0xD5, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, 0x40, 0x40, 0x82, 0x00, 0x1C, 0x38, 0x60, 0x00, 0xC6, 0x4B, - 0xCC, 0x32, 0x01, 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, 0x4B, 0x9A, - 0x5B, 0x7D, 0x4B, 0x9A, 0x7D, 0xC8, 0x38, 0x60, 0x00, 0x99, 0x4B, 0xCC, 0x31, - 0xE9, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, 0x40, 0x40, 0x82, 0x00, 0x1C, - 0x38, 0x60, 0x00, 0x9A, 0x4B, 0xCC, 0x31, 0xD5, 0x54, 0x64, 0x06, 0x3E, 0x7F, - 0xA3, 0xEB, 0x78, 0x4B, 0x9A, 0x5B, 0x51, 0x4B, 0x9A, 0x7D, 0x9C, 0x38, 0x60, - 0x00, 0xCE, 0x4B, 0xCC, 0x31, 0xBD, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, - 0x40, 0x40, 0x82, 0x00, 0x1C, 0x38, 0x60, 0x00, 0xCA, 0x4B, 0xCC, 0x31, 0xA9, - 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, 0x4B, 0x9A, 0x5B, 0x25, 0x4B, - 0x9A, 0x7D, 0x70, 0x38, 0x60, 0x00, 0xC4, 0x4B, 0xCC, 0x31, 0x91, 0x54, 0x63, + 0xCC, 0x31, 0xC1, 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, 0x4B, 0x9A, + 0x5B, 0x3D, 0x4B, 0x9A, 0x7D, 0x88, 0x38, 0x60, 0x00, 0x99, 0x4B, 0xCC, 0x31, + 0xA9, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, 0x40, 0x40, 0x82, 0x00, 0x1C, + 0x38, 0x60, 0x00, 0x9A, 0x4B, 0xCC, 0x31, 0x95, 0x54, 0x64, 0x06, 0x3E, 0x7F, + 0xA3, 0xEB, 0x78, 0x4B, 0x9A, 0x5B, 0x11, 0x4B, 0x9A, 0x7D, 0x5C, 0x38, 0x60, + 0x00, 0xCE, 0x4B, 0xCC, 0x31, 0x7D, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, + 0x40, 0x40, 0x82, 0x00, 0x1C, 0x38, 0x60, 0x00, 0xCA, 0x4B, 0xCC, 0x31, 0x69, + 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, 0x4B, 0x9A, 0x5A, 0xE5, 0x4B, + 0x9A, 0x7D, 0x30, 0x38, 0x60, 0x00, 0xC4, 0x4B, 0xCC, 0x31, 0x51, 0x54, 0x63, 0x06, 0x3E, 0x7C, 0x1F, 0x18, 0x40, 0x40, 0x82, 0x00, 0x1C, 0x38, 0x60, 0x00, - 0xC5, 0x4B, 0xCC, 0x31, 0x7D, 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, - 0x4B, 0x9A, 0x5A, 0xF9, 0x4B, 0x9A, 0x7D, 0x44, 0x38, 0x60, 0x00, 0x4A, 0x4B, - 0x9A, 0x7C, 0x30] + 0xC5, 0x4B, 0xCC, 0x31, 0x3D, 0x54, 0x64, 0x06, 0x3E, 0x7F, 0xA3, 0xEB, 0x78, + 0x4B, 0x9A, 0x5A, 0xB9, 0x4B, 0x9A, 0x7D, 0x04, 0x38, 0x60, 0x00, 0x4A, 0x4B, + 0x9A, 0x7B, 0xF0] diff --git a/asm/patch_diffs/make_game_nonlinear_diff.yaml b/asm/patch_diffs/make_game_nonlinear_diff.yaml index e343457d..9063ac83 100644 --- a/asm/patch_diffs/make_game_nonlinear_diff.yaml +++ b/asm/patch_diffs/make_game_nonlinear_diff.yaml @@ -21,16 +21,16 @@ Data: 0x220B5CC: [0x38, 0x60, 0x00, 0x01] 0x221F8D8: [0x48, 0x00, 0x00, 0x14] 0x221FAC4: [0x60, 0x00, 0x00, 0x00] - 0x221FAE8: [0x48, 0x6D, 0xA9, 0xB9] + 0x221FAE8: [0x48, 0x6D, 0xA9, 0xF9] 0x2227DA4: [0x3B, 0xE0, 0x00, 0x00, 0x48, 0x00, 0x00, 0x38] 0x222C6D8: [0x38, 0x80, 0x39, 0x40] 0x222C6E8: [0x2C, 0x03, 0x00, 0x01] 0x222C9BC: [0x48, 0x00, 0x00, 0x60] 0x2286314: [0x48, 0x00, 0x00, 0xD4] 0x2286A98: [0x60, 0x00, 0x00, 0x00] - 0x2286ABC: [0x48, 0x67, 0x3A, 0xE1] + 0x2286ABC: [0x48, 0x67, 0x3B, 0x21] 0x22AC06C: [0x48, 0x00, 0x00, 0x48] - 0x22AC2B8: [0x48, 0x64, 0xE3, 0xE0] + 0x22AC2B8: [0x48, 0x64, 0xE4, 0x20] 0x22AE9C8: [0x60, 0x00, 0x00, 0x00] 0x22C7A4C: [0x48, 0x00, 0x00, 0x24] 0x22C7D4C: [0x48, 0x00, 0x00, 0x24] @@ -43,7 +43,7 @@ Data: 0x231987C: [0x48, 0x00, 0x00, 0x38] 0x2339554: [0x38, 0x60, 0x00, 0x00] 0x23465DC: [0x60, 0x00, 0x00, 0x00] - 0x235BF38: [0x48, 0x59, 0xE7, 0x84] + 0x235BF38: [0x48, 0x59, 0xE7, 0xC4] 0x2372F74: [0x60, 0x00, 0x00, 0x00] 0x237305C: [0x4B, 0xFF, 0xFF, 0x1C] 0x2374648: [0x60, 0x00, 0x00, 0x00] @@ -55,7 +55,7 @@ Data: 0x2474B7C: [0x48, 0x00, 0x03, 0x94] 0x2474B9C: [0x48, 0x00, 0x03, 0x74] 0x247A574: [0x48, 0x00, 0x00, 0x58] - 0x24B22F4: [0x48, 0x44, 0x83, 0xE4] + 0x24B22F4: [0x48, 0x44, 0x84, 0x24] 0x24B2798: [0x48, 0x00, 0x00, 0x1C] 0x24D4F1C: [0x60, 0x00, 0x00, 0x00] 0x25221F0: [0x4E, 0x80, 0x00, 0x20] @@ -75,16 +75,16 @@ Data: 0x2677D3C: [0x4E, 0x80, 0x00, 0x20] 0x2678B74: [0x4E, 0x80, 0x00, 0x20] 0x26790B0: [0x38, 0x60, 0x00, 0x01] - 0x28FA4A0: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xC2, 0x5C, 0x29, 0xA9, 0x03, 0x51, 0x3C, 0x3D, 0x20, 0x02, 0x90, 0x39, - 0x29, 0xA5, 0x2C, 0x38, 0x00, 0x00, 0x07, 0x7C, 0x09, 0x03, 0xA6, 0x88, 0x09, + 0x28FA4E0: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xC2, 0x5B, 0xE9, 0xA9, 0x03, 0x51, 0x3C, 0x3D, 0x20, 0x02, 0x90, 0x39, + 0x29, 0xA5, 0x6C, 0x38, 0x00, 0x00, 0x07, 0x7C, 0x09, 0x03, 0xA6, 0x88, 0x09, 0x00, 0x00, 0x7C, 0x00, 0x40, 0x00, 0x41, 0x82, 0x00, 0x10, 0x39, 0x29, 0x00, 0x10, 0x42, 0x00, 0xFF, 0xF0, 0x48, 0x00, 0x00, 0x3C, 0x81, 0x09, 0x00, 0x04, 0x91, 0x05, 0x00, 0x00, 0x81, 0x09, 0x00, 0x08, 0x91, 0x05, 0x00, 0x04, 0x81, 0x09, 0x00, 0x0C, 0x91, 0x05, 0x00, 0x08, 0xA9, 0x09, 0x00, 0x02, 0xB1, 0x05, 0x00, 0x0C, 0x7D, 0x06, 0x43, 0x78, 0x7D, 0x19, 0x43, 0x78, 0x89, 0x09, 0x00, 0x01, 0x99, 0x05, 0x00, 0x0E, 0x7D, 0x07, 0x43, 0x78, 0x7D, 0x1A, 0x43, 0x78, - 0x38, 0x6A, 0x11, 0x48, 0x4B, 0xCB, 0xF3, 0x1D, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0x38, 0x6A, 0x11, 0x48, 0x4B, 0xCB, 0xF2, 0xDD, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x0F, 0x0F, 0x94, 0xA0, 0xC5, 0x64, 0x30, 0x52, 0x44, 0xC2, 0xB5, 0x71, 0x46, 0x4E, 0xCC, 0xCD, 0x16, 0x00, 0x40, 0x00, 0xC5, 0x83, 0x22, 0xA4, 0x44, 0x3C, 0xA1, 0x27, @@ -95,16 +95,16 @@ Data: 0x14, 0x02, 0x00, 0x00, 0xC2, 0xDE, 0x94, 0x7B, 0xC5, 0x61, 0x00, 0x00, 0xC4, 0xDA, 0x74, 0x7B, 0x46, 0x0C, 0x00, 0x00, 0x46, 0x5C, 0x50, 0x00, 0xC5, 0x9E, 0x33, 0xEC, 0x46, 0x11, 0x50, 0x00] - 0x28FA59C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xC2, 0x5B, 0x2D, 0xA9, 0x03, 0x51, 0x3C, 0x3D, 0x20, 0x02, 0x90, 0x39, - 0x29, 0xA6, 0x28, 0x38, 0x00, 0x00, 0x07, 0x7C, 0x09, 0x03, 0xA6, 0x88, 0x09, + 0x28FA5DC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xC2, 0x5A, 0xED, 0xA9, 0x03, 0x51, 0x3C, 0x3D, 0x20, 0x02, 0x90, 0x39, + 0x29, 0xA6, 0x68, 0x38, 0x00, 0x00, 0x07, 0x7C, 0x09, 0x03, 0xA6, 0x88, 0x09, 0x00, 0x00, 0x7C, 0x00, 0x40, 0x00, 0x41, 0x82, 0x00, 0x10, 0x39, 0x29, 0x00, 0x10, 0x42, 0x00, 0xFF, 0xF0, 0x48, 0x00, 0x00, 0x3C, 0x81, 0x09, 0x00, 0x04, 0x91, 0x05, 0x00, 0x00, 0x81, 0x09, 0x00, 0x08, 0x91, 0x05, 0x00, 0x04, 0x81, 0x09, 0x00, 0x0C, 0x91, 0x05, 0x00, 0x08, 0xA9, 0x09, 0x00, 0x02, 0xB1, 0x05, 0x00, 0x0C, 0x7D, 0x06, 0x43, 0x78, 0x7D, 0x1A, 0x43, 0x78, 0x89, 0x09, 0x00, 0x01, 0x99, 0x05, 0x00, 0x0E, 0x7D, 0x07, 0x43, 0x78, 0x7D, 0x1C, 0x43, 0x78, - 0x38, 0x6A, 0x11, 0x48, 0x4B, 0xCB, 0xF2, 0x21, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0x38, 0x6A, 0x11, 0x48, 0x4B, 0xCB, 0xF1, 0xE1, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x00, 0x00, 0x80, 0x00, 0xC5, 0xE1, 0x79, 0xAE, 0xC3, 0x48, 0x00, 0x00, 0x45, 0xA4, 0x56, 0x52, 0x16, 0x02, 0xE0, 0x00, 0xC4, 0xFB, 0xA3, 0x85, 0x43, 0x48, 0x00, 0x00, @@ -115,23 +115,23 @@ Data: 0x09, 0x07, 0x80, 0x00, 0x45, 0xC4, 0xE8, 0x7B, 0x44, 0xAF, 0x00, 0x00, 0x45, 0x13, 0x34, 0xA4, 0x11, 0x0F, 0x80, 0x00, 0xC5, 0xB4, 0xA0, 0x00, 0xC5, 0x0F, 0xC0, 0x00, 0x46, 0x17, 0x90, 0x00] - 0x28FA698: [0x3C, 0x60, 0x10, 0x48, 0x88, 0x63, 0xE6, 0xC8, 0x88, 0x9E, 0x03, 0x26, + 0x28FA6D8: [0x3C, 0x60, 0x10, 0x48, 0x88, 0x63, 0xE6, 0xC8, 0x88, 0x9E, 0x03, 0x26, 0x7C, 0x03, 0x20, 0x00, 0x41, 0x82, 0x00, 0x0C, 0x38, 0x60, 0xFF, 0xFF, 0x98, - 0x7E, 0x02, 0xFE, 0x7F, 0xC3, 0xF3, 0x78, 0x4B, 0x9B, 0x1C, 0x04] - 0x28FA6BC: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, - 0x38, 0x80, 0x25, 0x10, 0x4B, 0xCB, 0xE4, 0x9D, 0x80, 0x01, 0x00, 0x14, 0x4B, - 0xA6, 0x18, 0x68] - 0x28FA6D8: [0x38, 0x60, 0x17, 0x01, 0x4B, 0xFF, 0xE6, 0x91, 0x2C, 0x03, 0x00, 0x00, + 0x7E, 0x02, 0xFE, 0x7F, 0xC3, 0xF3, 0x78, 0x4B, 0x9B, 0x1B, 0xC4] + 0x28FA6FC: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, + 0x38, 0x80, 0x25, 0x10, 0x4B, 0xCB, 0xE4, 0x5D, 0x80, 0x01, 0x00, 0x14, 0x4B, + 0xA6, 0x18, 0x28] + 0x28FA718: [0x38, 0x60, 0x17, 0x01, 0x4B, 0xFF, 0xE6, 0x51, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x14, 0x3D, 0x80, 0x10, 0x20, 0x81, 0x8C, 0x84, 0xDC, 0x38, - 0x80, 0x16, 0x01, 0x4B, 0xBB, 0x7C, 0x04, 0x4B, 0xBB, 0x7C, 0x08] + 0x80, 0x16, 0x01, 0x4B, 0xBB, 0x7B, 0xC4, 0x4B, 0xBB, 0x7B, 0xC8] Relocations: -- {r_addend: 0x8FA52C, r_info: 0x106, r_offset: 0x28FA4B6} -- {r_addend: 0x8FA52C, r_info: 0x104, r_offset: 0x28FA4BA} -- {r_addend: 0x8FA628, r_info: 0x106, r_offset: 0x28FA5B2} -- {r_addend: 0x8FA628, r_info: 0x104, r_offset: 0x28FA5B6} -- {r_addend: 0x47E6C8, r_info: 0x206, r_offset: 0x28FA69A} -- {r_addend: 0x47E6C8, r_info: 0x204, r_offset: 0x28FA69E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA6BE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA6C2} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA6EA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA6EE} +- {r_addend: 0x8FA56C, r_info: 0x106, r_offset: 0x28FA4F6} +- {r_addend: 0x8FA56C, r_info: 0x104, r_offset: 0x28FA4FA} +- {r_addend: 0x8FA668, r_info: 0x106, r_offset: 0x28FA5F2} +- {r_addend: 0x8FA668, r_info: 0x104, r_offset: 0x28FA5F6} +- {r_addend: 0x47E6C8, r_info: 0x206, r_offset: 0x28FA6DA} +- {r_addend: 0x47E6C8, r_info: 0x204, r_offset: 0x28FA6DE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA6FE} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA702} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA72A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA72E} diff --git a/asm/patch_diffs/make_items_progressive_diff.yaml b/asm/patch_diffs/make_items_progressive_diff.yaml index 347fc405..2cbf2124 100644 --- a/asm/patch_diffs/make_items_progressive_diff.yaml +++ b/asm/patch_diffs/make_items_progressive_diff.yaml @@ -1,33 +1,33 @@ Data: - 0x21806FC: [0x48, 0x77, 0xA0, 0x2D] - 0x2215468: [0x48, 0x6E, 0x53, 0x6D] - 0x22155CC: [0x48, 0x6E, 0x52, 0x09] - 0x2215634: [0x48, 0x6E, 0x51, 0xA1] - 0x24217D8: [0x48, 0x4D, 0x8F, 0x7D] - 0x2421868: [0x48, 0x4D, 0x8E, 0xED] - 0x242188C: [0x48, 0x4D, 0x8E, 0xF9] - 0x2483900: [0x48, 0x47, 0x6E, 0xAD] - 0x25D7DAC: [0x48, 0x32, 0x29, 0x51] - 0x28FA6FC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x7F, 0xE3, 0xFB, 0x78, 0x4B, 0xFF, 0xE6, 0x91, 0x7C, 0x7F, 0x1B, 0x78, 0x57, + 0x21806FC: [0x48, 0x77, 0xA0, 0x6D] + 0x2215468: [0x48, 0x6E, 0x53, 0xAD] + 0x22155CC: [0x48, 0x6E, 0x52, 0x49] + 0x2215634: [0x48, 0x6E, 0x51, 0xE1] + 0x24217D8: [0x48, 0x4D, 0x8F, 0xBD] + 0x2421868: [0x48, 0x4D, 0x8F, 0x2D] + 0x242188C: [0x48, 0x4D, 0x8F, 0x39] + 0x2483900: [0x48, 0x47, 0x6E, 0xED] + 0x25D7DAC: [0x48, 0x32, 0x29, 0x91] + 0x28FA73C: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x7F, 0xE3, 0xFB, 0x78, 0x4B, 0xFF, 0xE6, 0x51, 0x7C, 0x7F, 0x1B, 0x78, 0x57, 0xE4, 0x06, 0x3E, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA728: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x88, 0x7E, 0x00, 0xB3, 0x4B, 0xFF, 0xE6, 0x65, 0x98, 0x7E, 0x00, 0xB3, 0x7C, + 0x28FA768: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x88, 0x7E, 0x00, 0xB3, 0x4B, 0xFF, 0xE6, 0x25, 0x98, 0x7E, 0x00, 0xB3, 0x7C, 0x60, 0x1B, 0x78, 0x80, 0x61, 0x00, 0x14, 0x7C, 0x68, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA754: [0x7C, 0x1F, 0x03, 0x78, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, - 0x90, 0x01, 0x00, 0x14, 0x80, 0x7E, 0x04, 0x28, 0x4B, 0xFF, 0xE6, 0x35, 0x7F, + 0x28FA794: [0x7C, 0x1F, 0x03, 0x78, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, + 0x90, 0x01, 0x00, 0x14, 0x80, 0x7E, 0x04, 0x28, 0x4B, 0xFF, 0xE5, 0xF5, 0x7F, 0xE0, 0xFB, 0x78, 0x7C, 0x7F, 0x1B, 0x78, 0x80, 0x61, 0x00, 0x14, 0x7C, 0x68, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA784: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x88, 0x63, 0x52, 0xA4, 0x4B, 0xFF, 0xE6, 0x09, 0x7C, 0x7F, 0x1B, 0x78, 0x80, + 0x28FA7C4: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x88, 0x63, 0x52, 0xA4, 0x4B, 0xFF, 0xE5, 0xC9, 0x7C, 0x7F, 0x1B, 0x78, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA7AC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x88, 0x7E, 0x00, 0xB3, 0x4B, 0xFF, 0xE5, 0xE1, 0x7C, 0x60, 0x1B, 0x78, 0x80, + 0x28FA7EC: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x88, 0x7E, 0x00, 0xB3, 0x4B, 0xFF, 0xE5, 0xA1, 0x7C, 0x60, 0x1B, 0x78, 0x80, 0x81, 0x00, 0x14, 0x7C, 0x88, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FA7D4: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x4B, 0xCC, 0x2A, 0x4D, 0x4B, 0xFF, 0xE5, 0xB9, 0x80, 0x01, 0x00, 0x14, 0x7C, + 0x28FA814: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x4B, 0xCC, 0x2A, 0x0D, 0x4B, 0xFF, 0xE5, 0x79, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] diff --git a/asm/patch_diffs/misc_rando_features_diff.yaml b/asm/patch_diffs/misc_rando_features_diff.yaml index fb80abd0..63ec96ed 100644 --- a/asm/patch_diffs/misc_rando_features_diff.yaml +++ b/asm/patch_diffs/misc_rando_features_diff.yaml @@ -1,70 +1,70 @@ Data: - 0x20238CC: [0x48, 0x8D, 0x71, 0x45] - 0x2025200: [0x48, 0x8D, 0x58, 0x11] + 0x20238CC: [0x48, 0x8D, 0x71, 0x85] + 0x2025200: [0x48, 0x8D, 0x58, 0x51] 0x2026804: [0x38, 0x60, 0x00, 0x01] - 0x20268C0: [0x48, 0x8D, 0x41, 0x51] - 0x20268D0: [0x48, 0x8D, 0x41, 0x41] + 0x20268C0: [0x48, 0x8D, 0x41, 0x91] + 0x20268D0: [0x48, 0x8D, 0x41, 0x81] 0x203F1F8: [0x3C, 0x63, 0x0D, 0x45] - 0x2083028: [0x48, 0x87, 0x79, 0xAD, 0x2C, 0x03, 0x00, 0x00] - 0x21836D4: [0x48, 0x77, 0x71, 0x8C] - 0x21E3210: [0x48, 0x71, 0x7A, 0x98] + 0x2083028: [0x48, 0x87, 0x79, 0xED, 0x2C, 0x03, 0x00, 0x00] + 0x21836D4: [0x48, 0x77, 0x71, 0xCC] + 0x21E3210: [0x48, 0x71, 0x7A, 0xD8] 0x227E5A4: [0x60, 0x00, 0x00, 0x00] 0x22830E0: [0x48, 0x00, 0x00, 0x6C] 0x2330C24: [0x39, 0x88, 0xFF, 0xFE] 0x234D08C: [0xD1, 0xBF, 0x04, 0x90] 0x234D094: [0xD1, 0xBF, 0x04, 0x1C] 0x234D0BC: [0x39, 0x80, 0x00, 0x3E] - 0x23BA514: [0x48, 0x54, 0x05, 0x98] - 0x23BA534: [0x48, 0x54, 0x05, 0xA0] + 0x23BA514: [0x48, 0x54, 0x05, 0xD8] + 0x23BA534: [0x48, 0x54, 0x05, 0xE0] 0x23E77CC: [0x60, 0x00, 0x00, 0x00] - 0x23F5218: [0x48, 0x50, 0x58, 0xEC] - 0x24126B8: [0x48, 0x4E, 0x83, 0x1D, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x14, + 0x23F5218: [0x48, 0x50, 0x59, 0x2C] + 0x24126B8: [0x48, 0x4E, 0x83, 0x5D, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x14, 0x48, 0x00, 0x00, 0x20] - 0x25499EC: [0x48, 0x3B, 0x0E, 0x5C] + 0x25499EC: [0x48, 0x3B, 0x0E, 0x9C] 0x25AECE4: [0x48, 0x34, 0x9B, 0x11] - 0x25B4DD4: [0x48, 0x34, 0x5A, 0x24] + 0x25B4DD4: [0x48, 0x34, 0x5A, 0x64] 0x25B4DDC: [0x60, 0x00, 0x00, 0x00] 0x25B4DE8: [0x60, 0x00, 0x00, 0x00] - 0x25BA940: [0x48, 0x33, 0xFE, 0xD4] - 0x25BAA3C: [0x48, 0x33, 0xFD, 0xF4] + 0x25BA940: [0x48, 0x33, 0xFF, 0x14] + 0x25BAA3C: [0x48, 0x33, 0xFE, 0x34] 0x25C10A4: [0x39, 0x40, 0x00, 0x00] 0x25C10D4: [0x39, 0x4A, 0x00, 0x01] - 0x25C10DC: [0x48, 0x33, 0x9B, 0x68] - 0x25C10F0: [0x48, 0x33, 0x9B, 0x78] - 0x25C112C: [0x48, 0x33, 0x9B, 0x48] - 0x25C1140: [0x48, 0x33, 0x9B, 0x40] - 0x2600634: [0x48, 0x2F, 0xA2, 0x80] - 0x263B250: [0x48, 0x2B, 0xF7, 0xE9] + 0x25C10DC: [0x48, 0x33, 0x9B, 0xA8] + 0x25C10F0: [0x48, 0x33, 0x9B, 0xB8] + 0x25C112C: [0x48, 0x33, 0x9B, 0x88] + 0x25C1140: [0x48, 0x33, 0x9B, 0x80] + 0x2600634: [0x48, 0x2F, 0xA2, 0xC0] + 0x263B250: [0x48, 0x2B, 0xF8, 0x29] 0x2678784: [0x3B, 0xA0, 0x00, 0x0A] 0x267A264: [0x39, 0x20, 0x00, 0x0A] - 0x267B4FC: [0x48, 0x27, 0xF6, 0x1C] + 0x267B4FC: [0x48, 0x27, 0xF6, 0x5C] 0x2681BC8: [0x3B, 0xA0, 0x00, 0x0A] - 0x2681CE0: [0x48, 0x27, 0x8E, 0x4C] - 0x26D9CE4: [0x48, 0x22, 0x0F, 0x28] - 0x26D9D28: [0x48, 0x22, 0x0E, 0xF8] + 0x2681CE0: [0x48, 0x27, 0x8E, 0x8C] + 0x26D9CE4: [0x48, 0x22, 0x0F, 0x68] + 0x26D9D28: [0x48, 0x22, 0x0F, 0x38] 0x26EF340: [0x3B, 0xA0, 0x00, 0x0A] - 0x26F0394: [0x48, 0x20, 0xA8, 0x48] - 0x28FA7F8: [0x3F, 0xE0, 0x02, 0x90, 0x3B, 0xFF, 0x8D, 0x60, 0xA1, 0x7F, 0x00, 0x00, + 0x26F0394: [0x48, 0x20, 0xA8, 0x88] + 0x28FA838: [0x3F, 0xE0, 0x02, 0x90, 0x3B, 0xFF, 0x8D, 0x60, 0xA1, 0x7F, 0x00, 0x00, 0xB1, 0x63, 0x00, 0x00, 0x55, 0x6B, 0x00, 0x3A, 0xB1, 0x63, 0x00, 0x02, 0x4B, - 0xCB, 0xA5, 0xC8] - 0x28FA814: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x33, + 0xCB, 0xA5, 0x88] + 0x28FA854: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x33, 0x88, 0x83, 0x00, 0x00, 0x98, 0x83, 0x00, 0x01, 0x3B, 0x80, 0x00, 0x00, 0x4B, - 0xCC, 0x01, 0x18] - 0x28FA830: [0xA0, 0x1F, 0x00, 0x00, 0x54, 0x00, 0x00, 0x3A, 0x28, 0x00, 0x00, 0x0C, - 0x40, 0x81, 0x00, 0x08, 0x38, 0x00, 0x00, 0x0C, 0x4B, 0xCC, 0x01, 0xFC] - 0x28FA848: [0xA0, 0x0C, 0x00, 0x20, 0x54, 0x00, 0x00, 0x3A, 0x28, 0x00, 0x00, 0x0C, - 0x40, 0x81, 0x00, 0x08, 0x38, 0x00, 0x00, 0x0C, 0x4B, 0xC4, 0xF1, 0x94] - 0x28FA860: [0x2C, 0x00, 0x00, 0x07, 0x41, 0x82, 0x00, 0x0C, 0x6C, 0x00, 0x80, 0x00, - 0x4B, 0x88, 0x8E, 0x6C, 0x6C, 0x00, 0x80, 0x00, 0xC0, 0x1F, 0x03, 0xA0, 0x3D, - 0x20, 0x02, 0x90, 0x39, 0x29, 0xA8, 0xA8, 0xC1, 0xA9, 0x00, 0x00, 0xEC, 0x00, + 0xCC, 0x00, 0xD8] + 0x28FA870: [0xA0, 0x1F, 0x00, 0x00, 0x54, 0x00, 0x00, 0x3A, 0x28, 0x00, 0x00, 0x0C, + 0x40, 0x81, 0x00, 0x08, 0x38, 0x00, 0x00, 0x0C, 0x4B, 0xCC, 0x01, 0xBC] + 0x28FA888: [0xA0, 0x0C, 0x00, 0x20, 0x54, 0x00, 0x00, 0x3A, 0x28, 0x00, 0x00, 0x0C, + 0x40, 0x81, 0x00, 0x08, 0x38, 0x00, 0x00, 0x0C, 0x4B, 0xC4, 0xF1, 0x54] + 0x28FA8A0: [0x2C, 0x00, 0x00, 0x07, 0x41, 0x82, 0x00, 0x0C, 0x6C, 0x00, 0x80, 0x00, + 0x4B, 0x88, 0x8E, 0x2C, 0x6C, 0x00, 0x80, 0x00, 0xC0, 0x1F, 0x03, 0xA0, 0x3D, + 0x20, 0x02, 0x90, 0x39, 0x29, 0xA8, 0xE8, 0xC1, 0xA9, 0x00, 0x00, 0xEC, 0x00, 0x68, 0x2A, 0xC1, 0xA9, 0x00, 0x04, 0xFC, 0x00, 0x68, 0x40, 0x41, 0x80, 0x00, 0x08, 0xC0, 0x09, 0x00, 0x08, 0xD0, 0x1F, 0x03, 0xA0, 0xFC, 0x00, 0x02, 0x10, - 0xFC, 0x20, 0x00, 0x18, 0x4B, 0x88, 0x8E, 0x50, 0x3E, 0x19, 0x99, 0x9A, 0x40, + 0xFC, 0x20, 0x00, 0x18, 0x4B, 0x88, 0x8E, 0x10, 0x3E, 0x19, 0x99, 0x9A, 0x40, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00] - 0x28FA8B4: [0x28, 0x00, 0x00, 0x07, 0x40, 0x82, 0x00, 0x20, 0xA0, 0x06, 0x00, 0x04, + 0x28FA8F4: [0x28, 0x00, 0x00, 0x07, 0x40, 0x82, 0x00, 0x20, 0xA0, 0x06, 0x00, 0x04, 0x28, 0x00, 0x00, 0x4B, 0x41, 0x80, 0x00, 0x14, 0x28, 0x00, 0x00, 0x4F, 0x41, 0x81, 0x00, 0x0C, 0x7C, 0x06, 0x03, 0x78, 0x48, 0x00, 0x00, 0x0C, 0x38, 0x60, - 0xFF, 0xFF, 0x4B, 0xD0, 0x5D, 0x5C, 0x94, 0x21, 0xFF, 0xE0, 0xBF, 0x61, 0x00, + 0xFF, 0xFF, 0x4B, 0xD0, 0x5D, 0x1C, 0x94, 0x21, 0xFF, 0xE0, 0xBF, 0x61, 0x00, 0x0C, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x24, 0x38, 0xC6, 0xFF, 0xB8, 0x7C, 0x7D, 0x1B, 0x78, 0x7C, 0x9E, 0x23, 0x78, 0x7C, 0xBF, 0x2B, 0x78, 0x3D, 0x20, 0x10, 0x20, 0x81, 0x29, 0x84, 0xDC, 0x39, 0x29, 0x07, 0xBC, 0x89, 0x49, @@ -73,27 +73,27 @@ Data: 0x7D, 0x29, 0x32, 0x14, 0x48, 0x00, 0x00, 0x10, 0x3D, 0x20, 0x10, 0x20, 0x81, 0x29, 0x84, 0xDC, 0x39, 0x29, 0x07, 0x98, 0x88, 0xC9, 0x00, 0x20, 0x7D, 0x3C, 0x4B, 0x78, 0x7F, 0xA3, 0xEB, 0x78, 0x7F, 0xC4, 0xF3, 0x78, 0x7F, 0xE5, 0xFB, - 0x78, 0x38, 0xE0, 0x00, 0x00, 0x39, 0x00, 0x00, 0x01, 0x4B, 0xD0, 0x22, 0x39, + 0x78, 0x38, 0xE0, 0x00, 0x00, 0x39, 0x00, 0x00, 0x01, 0x4B, 0xD0, 0x21, 0xF9, 0x7F, 0xFF, 0x1A, 0x14, 0x7C, 0x7B, 0x1B, 0x78, 0x88, 0xDC, 0x00, 0x21, 0x54, 0xC6, 0x07, 0x7B, 0x40, 0x82, 0x00, 0x10, 0x3C, 0xC0, 0x02, 0x90, 0x38, 0xC6, - 0xA9, 0xC4, 0x48, 0x00, 0x00, 0x0C, 0x3C, 0xC0, 0x02, 0x90, 0x38, 0xC6, 0xA9, - 0xCC, 0x7F, 0xA3, 0xEB, 0x78, 0x7F, 0xC4, 0xF3, 0x78, 0x7F, 0xE5, 0xFB, 0x78, - 0x4B, 0xD0, 0x24, 0xCD, 0x7C, 0x7B, 0x1A, 0x14, 0xBB, 0x61, 0x00, 0x0C, 0x80, + 0xAA, 0x04, 0x48, 0x00, 0x00, 0x0C, 0x3C, 0xC0, 0x02, 0x90, 0x38, 0xC6, 0xAA, + 0x0C, 0x7F, 0xA3, 0xEB, 0x78, 0x7F, 0xC4, 0xF3, 0x78, 0x7F, 0xE5, 0xFB, 0x78, + 0x4B, 0xD0, 0x24, 0x8D, 0x7C, 0x7B, 0x1A, 0x14, 0xBB, 0x61, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x24, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x20, 0x4E, 0x80, 0x00, 0x20, 0x55, 0x6E, 0x69, 0x74, 0x5F, 0x4B, 0x65, 0x79, 0x5F, 0x30, 0x30, 0x00, 0x55, 0x6E, 0x69, 0x74, 0x5F, 0x4B, 0x65, 0x79, 0x5F, 0x30, 0x31, 0x00, - 0x02, 0x8F, 0xA9, 0xAC, 0x10, 0x10, 0x39, 0x4C, 0x02, 0x8F, 0xA9, 0xB8, 0x10, + 0x02, 0x8F, 0xA9, 0xEC, 0x10, 0x10, 0x39, 0x4C, 0x02, 0x8F, 0xA9, 0xF8, 0x10, 0x10, 0x39, 0x4C] - 0x28FA9D4: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FAA14: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x02, 0x90, 0x38, 0x63, 0x8C, 0x5C, 0x88, 0x63, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x01, 0x41, 0x82, 0x00, 0x0C, 0x38, 0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x08, 0x38, 0x60, 0x00, 0x00, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FAA10: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FAA50: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0x60, 0x00, 0x0D, 0x38, 0x80, 0x00, 0x05, 0x4B, 0xFF, 0xEF, 0xDD, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FAA38: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FAA78: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x38, 0xC0, 0x00, 0x00, 0x38, 0x60, 0x00, 0x03, 0x38, 0x80, 0x00, 0x0F, 0x4B, 0xFF, 0xEF, 0x25, 0x7C, 0xC6, 0x1A, 0x14, 0x38, 0x60, 0x00, 0x04, 0x38, 0x80, 0x00, 0x0F, 0x4B, 0xFF, 0xEF, 0x15, 0x7C, 0xC6, 0x1A, 0x14, 0x38, 0x60, 0x00, @@ -102,100 +102,100 @@ Data: 0xC6, 0x1A, 0x14, 0x38, 0x60, 0x00, 0x07, 0x38, 0x80, 0x00, 0x0F, 0x4B, 0xFF, 0xEE, 0xE5, 0x7C, 0xC6, 0x1A, 0x14, 0x7C, 0xC3, 0x33, 0x78, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FAAAC: [0x7D, 0x8C, 0x02, 0x14, 0x81, 0x5F, 0x03, 0xD4, 0x2C, 0x0A, 0x00, 0x02, + 0x28FAAEC: [0x7D, 0x8C, 0x02, 0x14, 0x81, 0x5F, 0x03, 0xD4, 0x2C, 0x0A, 0x00, 0x02, 0x41, 0x82, 0x00, 0x0C, 0x2C, 0x0A, 0x00, 0x05, 0x40, 0x82, 0x00, 0x10, 0x3D, - 0x80, 0x02, 0x90, 0x39, 0x8C, 0xAA, 0xFC, 0x4B, 0xAB, 0xFA, 0x4C, 0x4B, 0xAB, - 0xFA, 0x48, 0x7D, 0x4A, 0x02, 0x14, 0x81, 0x7F, 0x03, 0xD4, 0x2C, 0x0B, 0x00, + 0x80, 0x02, 0x90, 0x39, 0x8C, 0xAB, 0x3C, 0x4B, 0xAB, 0xFA, 0x0C, 0x4B, 0xAB, + 0xFA, 0x08, 0x7D, 0x4A, 0x02, 0x14, 0x81, 0x7F, 0x03, 0xD4, 0x2C, 0x0B, 0x00, 0x02, 0x41, 0x82, 0x00, 0x0C, 0x2C, 0x0B, 0x00, 0x05, 0x40, 0x82, 0x00, 0x10, - 0x3D, 0x40, 0x02, 0x90, 0x39, 0x4A, 0xAB, 0x00, 0x4B, 0xAB, 0xFA, 0x44, 0x4B, - 0xAB, 0xFA, 0x40, 0xE5, 0x10, 0x1B, 0x80, 0x3C, 0x37, 0x9D, 0x80] - 0x28FAB04: [0x3D, 0x60, 0x02, 0x90, 0xC0, 0x0B, 0xAB, 0x14, 0xEF, 0xFF, 0x00, 0x32, - 0x4B, 0xAF, 0xA7, 0x0C, 0x40, 0x00, 0x00, 0x00] - 0x28FAB18: [0x9B, 0xE6, 0x00, 0x10, 0x3B, 0xE0, 0x00, 0xFD, 0x9B, 0xE6, 0x00, 0x12, - 0x9B, 0xE6, 0x00, 0x13, 0x4B, 0xD8, 0x09, 0xD8] - 0x28FAB2C: [0x4B, 0xD8, 0x6F, 0xA5, 0x38, 0x60, 0x00, 0x09, 0x4B, 0xD7, 0xF6, 0xD1, + 0x3D, 0x40, 0x02, 0x90, 0x39, 0x4A, 0xAB, 0x40, 0x4B, 0xAB, 0xFA, 0x04, 0x4B, + 0xAB, 0xFA, 0x00, 0xE5, 0x10, 0x1B, 0x80, 0x3C, 0x37, 0x9D, 0x80] + 0x28FAB44: [0x3D, 0x60, 0x02, 0x90, 0xC0, 0x0B, 0xAB, 0x54, 0xEF, 0xFF, 0x00, 0x32, + 0x4B, 0xAF, 0xA6, 0xCC, 0x40, 0x00, 0x00, 0x00] + 0x28FAB58: [0x9B, 0xE6, 0x00, 0x10, 0x3B, 0xE0, 0x00, 0xFD, 0x9B, 0xE6, 0x00, 0x12, + 0x9B, 0xE6, 0x00, 0x13, 0x4B, 0xD8, 0x09, 0x98] + 0x28FAB6C: [0x4B, 0xD8, 0x6F, 0x65, 0x38, 0x60, 0x00, 0x09, 0x4B, 0xD7, 0xF6, 0x91, 0x38, 0x81, 0x00, 0x34, 0x90, 0x61, 0x00, 0x34, 0x7C, 0xC4, 0x14, 0xAA, 0x38, 0xA1, 0x00, 0x1C, 0x7F, 0xC4, 0xF3, 0x78, 0x7F, 0xE3, 0xFB, 0x78, 0x7C, 0xC5, - 0x15, 0xAA, 0x38, 0xC0, 0x00, 0x01, 0x4B, 0xD8, 0x6F, 0x79, 0x38, 0x60, 0x00, - 0x09, 0x4B, 0xD7, 0xF6, 0xA5, 0x38, 0x81, 0x00, 0x28, 0x90, 0x61, 0x00, 0x28, + 0x15, 0xAA, 0x38, 0xC0, 0x00, 0x01, 0x4B, 0xD8, 0x6F, 0x39, 0x38, 0x60, 0x00, + 0x09, 0x4B, 0xD7, 0xF6, 0x65, 0x38, 0x81, 0x00, 0x28, 0x90, 0x61, 0x00, 0x28, 0x38, 0xA1, 0x00, 0x0A, 0x7C, 0xC4, 0x14, 0xAA, 0x7C, 0xA4, 0x2B, 0x78, 0x7F, - 0xE3, 0xFB, 0x78, 0x7C, 0xC5, 0x15, 0xAA, 0x4B, 0xD8, 0x62, 0x61, 0x7C, 0x7E, + 0xE3, 0xFB, 0x78, 0x7C, 0xC5, 0x15, 0xAA, 0x4B, 0xD8, 0x62, 0x21, 0x7C, 0x7E, 0x1B, 0x79, 0x41, 0x82, 0x00, 0x38, 0x38, 0x60, 0x00, 0x01, 0x98, 0x7E, 0x00, - 0x9A, 0x38, 0x60, 0x00, 0x00, 0x4B, 0xD7, 0xF6, 0x6D, 0x38, 0x81, 0x00, 0x34, + 0x9A, 0x38, 0x60, 0x00, 0x00, 0x4B, 0xD7, 0xF6, 0x2D, 0x38, 0x81, 0x00, 0x34, 0x90, 0x61, 0x00, 0x34, 0x7C, 0xC4, 0x14, 0xAA, 0x38, 0xA1, 0x00, 0x1C, 0x7F, 0xC4, 0xF3, 0x78, 0x7F, 0xE3, 0xFB, 0x78, 0x7C, 0xC5, 0x15, 0xAA, 0x38, 0xC0, - 0x00, 0x05, 0x4B, 0xD8, 0x6F, 0x15, 0x4B, 0xD8, 0x71, 0x24] - 0x28FABC4: [0x4C, 0x5F, 0x57, 0x61, 0x72, 0x70, 0x41, 0x72, 0x65, 0x61, 0x5F, 0x30, - 0x39, 0x00, 0x00, 0x00, 0x02, 0x8F, 0xAB, 0xC4, 0x10, 0x10, 0x39, 0x4C] - 0x28FABDC: [0x2C, 0x1E, 0x00, 0x0B, 0x40, 0x80, 0x00, 0x14, 0x3A, 0xE0, 0x00, 0x00, - 0x3F, 0xE0, 0x02, 0x90, 0x33, 0xFF, 0xAB, 0xD4, 0x4B, 0xDF, 0x54, 0x80, 0x38, - 0x60, 0x00, 0x01, 0x4B, 0xDF, 0x57, 0xA0] - 0x28FABFC: [0x30, 0x30, 0x30, 0x37, 0x36, 0x00, 0x00, 0x00, 0x02, 0x8F, 0xAB, 0xFC, + 0x00, 0x05, 0x4B, 0xD8, 0x6E, 0xD5, 0x4B, 0xD8, 0x70, 0xE4] + 0x28FAC04: [0x4C, 0x5F, 0x57, 0x61, 0x72, 0x70, 0x41, 0x72, 0x65, 0x61, 0x5F, 0x30, + 0x39, 0x00, 0x00, 0x00, 0x02, 0x8F, 0xAC, 0x04, 0x10, 0x10, 0x39, 0x4C] + 0x28FAC1C: [0x2C, 0x1E, 0x00, 0x0B, 0x40, 0x80, 0x00, 0x14, 0x3A, 0xE0, 0x00, 0x00, + 0x3F, 0xE0, 0x02, 0x90, 0x33, 0xFF, 0xAC, 0x14, 0x4B, 0xDF, 0x54, 0x40, 0x38, + 0x60, 0x00, 0x01, 0x4B, 0xDF, 0x57, 0x60] + 0x28FAC3C: [0x30, 0x30, 0x30, 0x37, 0x36, 0x00, 0x00, 0x00, 0x02, 0x8F, 0xAC, 0x3C, 0x10, 0x10, 0x39, 0x4C] - 0x28FAC0C: [0x39, 0x2A, 0x00, 0x08, 0x2C, 0x09, 0x00, 0x12, 0x40, 0x82, 0x00, 0x08, - 0x39, 0x20, 0x00, 0x33, 0x4B, 0xDD, 0xF0, 0xCC] - 0x28FAC20: [0x38, 0x81, 0x00, 0x08, 0x2C, 0x09, 0x00, 0x33, 0x40, 0x82, 0x00, 0x0C, - 0x3C, 0xA0, 0x02, 0x90, 0x30, 0xA5, 0xAC, 0x04, 0x4B, 0xDD, 0xF0, 0xF8, 0x53, + 0x28FAC4C: [0x39, 0x2A, 0x00, 0x08, 0x2C, 0x09, 0x00, 0x12, 0x40, 0x82, 0x00, 0x08, + 0x39, 0x20, 0x00, 0x33, 0x4B, 0xDD, 0xF0, 0x8C] + 0x28FAC60: [0x38, 0x81, 0x00, 0x08, 0x2C, 0x09, 0x00, 0x33, 0x40, 0x82, 0x00, 0x0C, + 0x3C, 0xA0, 0x02, 0x90, 0x30, 0xA5, 0xAC, 0x44, 0x4B, 0xDD, 0xF0, 0xB8, 0x53, 0x77, 0x4F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE4, 0xFF, 0x00] - 0x28FAC44: [0x28, 0x0A, 0x03, 0x29, 0x41, 0x80, 0x00, 0x18, 0x41, 0x82, 0x00, 0x0C, + 0x28FAC84: [0x28, 0x0A, 0x03, 0x29, 0x41, 0x80, 0x00, 0x18, 0x41, 0x82, 0x00, 0x0C, 0x28, 0x0A, 0x03, 0x2A, 0x40, 0x80, 0x00, 0x10, 0x3C, 0x60, 0x02, 0x90, 0x38, - 0x63, 0xAC, 0x38, 0x4B, 0xCC, 0x64, 0x4C, 0x4B, 0xCC, 0x64, 0x7C] - 0x28FAC68: [0x39, 0x60, 0x00, 0x00, 0x39, 0x40, 0x00, 0x00, 0x4B, 0xCC, 0x64, 0x84] - 0x28FAC74: [0x39, 0x6B, 0x00, 0x01, 0x39, 0x8C, 0x00, 0x0C, 0x4B, 0xCC, 0x64, 0xB4] - 0x28FAC80: [0x41, 0x82, 0x00, 0x20, 0x28, 0x0B, 0x03, 0x29, 0x41, 0x81, 0x00, 0x1C, - 0x3D, 0x80, 0x02, 0x90, 0x39, 0x8C, 0xAC, 0x38, 0x38, 0x00, 0x00, 0x01, 0x7C, - 0x09, 0x03, 0xA6, 0x4B, 0xCC, 0x64, 0x60, 0x4B, 0xCC, 0x64, 0xA4, 0x4B, 0xCC, - 0x64, 0xA4] - 0x28FACA8: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x05, 0x2C, + 0x63, 0xAC, 0x78, 0x4B, 0xCC, 0x64, 0x0C, 0x4B, 0xCC, 0x64, 0x3C] + 0x28FACA8: [0x39, 0x60, 0x00, 0x00, 0x39, 0x40, 0x00, 0x00, 0x4B, 0xCC, 0x64, 0x44] + 0x28FACB4: [0x39, 0x6B, 0x00, 0x01, 0x39, 0x8C, 0x00, 0x0C, 0x4B, 0xCC, 0x64, 0x74] + 0x28FACC0: [0x41, 0x82, 0x00, 0x20, 0x28, 0x0B, 0x03, 0x29, 0x41, 0x81, 0x00, 0x1C, + 0x3D, 0x80, 0x02, 0x90, 0x39, 0x8C, 0xAC, 0x78, 0x38, 0x00, 0x00, 0x01, 0x7C, + 0x09, 0x03, 0xA6, 0x4B, 0xCC, 0x64, 0x20, 0x4B, 0xCC, 0x64, 0x64, 0x4B, 0xCC, + 0x64, 0x64] + 0x28FACE8: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x05, 0x2C, 0x88, 0x83, 0x00, 0x10, 0x70, 0x84, 0x00, 0x80, 0x41, 0x82, 0x00, 0x1C, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x07, 0x98, 0x88, 0x83, 0x00, 0x10, 0x60, 0x84, 0x00, 0x40, 0x98, 0x83, 0x00, 0x10, 0x7F, 0xE3, 0xFB, - 0x78, 0x4B, 0x8E, 0x85, 0x38] + 0x78, 0x4B, 0x8E, 0x84, 0xF8] 0x10029A30: [0xBF, 0x06, 0xBC, 0xA2, 0x3F, 0x06, 0xBC, 0xA2] 0x10029A40: [0x41, 0x06, 0x38, 0x22] 0x100F7BD0: [0x00, 0x00, 0x00, 0x00] Relocations: -- {r_addend: 0x8F8D60, r_info: 0x106, r_offset: 0x28FA7FA} -- {r_addend: 0x8F8D60, r_info: 0x104, r_offset: 0x28FA7FE} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA816} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA81A} -- {r_addend: 0x8FA8A8, r_info: 0x106, r_offset: 0x28FA87A} -- {r_addend: 0x8FA8A8, r_info: 0x104, r_offset: 0x28FA87E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA902} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA906} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA91A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA91E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA932} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA936} -- {r_addend: 0x8FA9C4, r_info: 0x106, r_offset: 0x28FA972} -- {r_addend: 0x8FA9C4, r_info: 0x104, r_offset: 0x28FA976} -- {r_addend: 0x8FA9CC, r_info: 0x106, r_offset: 0x28FA97E} -- {r_addend: 0x8FA9CC, r_info: 0x104, r_offset: 0x28FA982} -- {r_addend: 0x8FA9AC, r_info: 0x101, r_offset: 0x28FA9C4} -- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FA9C8} -- {r_addend: 0x8FA9B8, r_info: 0x101, r_offset: 0x28FA9CC} -- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FA9D0} -- {r_addend: 0x8F8C5C, r_info: 0x106, r_offset: 0x28FA9E2} -- {r_addend: 0x8F8C5C, r_info: 0x104, r_offset: 0x28FA9E6} -- {r_addend: 0x8FAAFC, r_info: 0x106, r_offset: 0x28FAAC6} -- {r_addend: 0x8FAAFC, r_info: 0x104, r_offset: 0x28FAACA} -- {r_addend: 0x8FAB00, r_info: 0x106, r_offset: 0x28FAAEE} -- {r_addend: 0x8FAB00, r_info: 0x104, r_offset: 0x28FAAF2} -- {r_addend: 0x8FAB14, r_info: 0x106, r_offset: 0x28FAB06} -- {r_addend: 0x8FAB14, r_info: 0x104, r_offset: 0x28FAB0A} -- {r_addend: 0x8FABC4, r_info: 0x101, r_offset: 0x28FABD4} -- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FABD8} -- {r_addend: 0x8FABD4, r_info: 0x106, r_offset: 0x28FABEA} -- {r_addend: 0x8FABD4, r_info: 0x104, r_offset: 0x28FABEE} -- {r_addend: 0x8FABFC, r_info: 0x101, r_offset: 0x28FAC04} -- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FAC08} -- {r_addend: 0x8FAC04, r_info: 0x106, r_offset: 0x28FAC2E} -- {r_addend: 0x8FAC04, r_info: 0x104, r_offset: 0x28FAC32} -- {r_addend: 0x8FAC38, r_info: 0x106, r_offset: 0x28FAC5A} -- {r_addend: 0x8FAC38, r_info: 0x104, r_offset: 0x28FAC5E} -- {r_addend: 0x8FAC38, r_info: 0x106, r_offset: 0x28FAC8E} -- {r_addend: 0x8FAC38, r_info: 0x104, r_offset: 0x28FAC92} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FACAA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FACAE} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FACC2} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FACC6} +- {r_addend: 0x8F8D60, r_info: 0x106, r_offset: 0x28FA83A} +- {r_addend: 0x8F8D60, r_info: 0x104, r_offset: 0x28FA83E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA856} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA85A} +- {r_addend: 0x8FA8E8, r_info: 0x106, r_offset: 0x28FA8BA} +- {r_addend: 0x8FA8E8, r_info: 0x104, r_offset: 0x28FA8BE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA942} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA946} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA95A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA95E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FA972} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FA976} +- {r_addend: 0x8FAA04, r_info: 0x106, r_offset: 0x28FA9B2} +- {r_addend: 0x8FAA04, r_info: 0x104, r_offset: 0x28FA9B6} +- {r_addend: 0x8FAA0C, r_info: 0x106, r_offset: 0x28FA9BE} +- {r_addend: 0x8FAA0C, r_info: 0x104, r_offset: 0x28FA9C2} +- {r_addend: 0x8FA9EC, r_info: 0x101, r_offset: 0x28FAA04} +- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FAA08} +- {r_addend: 0x8FA9F8, r_info: 0x101, r_offset: 0x28FAA0C} +- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FAA10} +- {r_addend: 0x8F8C5C, r_info: 0x106, r_offset: 0x28FAA22} +- {r_addend: 0x8F8C5C, r_info: 0x104, r_offset: 0x28FAA26} +- {r_addend: 0x8FAB3C, r_info: 0x106, r_offset: 0x28FAB06} +- {r_addend: 0x8FAB3C, r_info: 0x104, r_offset: 0x28FAB0A} +- {r_addend: 0x8FAB40, r_info: 0x106, r_offset: 0x28FAB2E} +- {r_addend: 0x8FAB40, r_info: 0x104, r_offset: 0x28FAB32} +- {r_addend: 0x8FAB54, r_info: 0x106, r_offset: 0x28FAB46} +- {r_addend: 0x8FAB54, r_info: 0x104, r_offset: 0x28FAB4A} +- {r_addend: 0x8FAC04, r_info: 0x101, r_offset: 0x28FAC14} +- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FAC18} +- {r_addend: 0x8FAC14, r_info: 0x106, r_offset: 0x28FAC2A} +- {r_addend: 0x8FAC14, r_info: 0x104, r_offset: 0x28FAC2E} +- {r_addend: 0x8FAC3C, r_info: 0x101, r_offset: 0x28FAC44} +- {r_addend: 0x10394C, r_info: 0x201, r_offset: 0x28FAC48} +- {r_addend: 0x8FAC44, r_info: 0x106, r_offset: 0x28FAC6E} +- {r_addend: 0x8FAC44, r_info: 0x104, r_offset: 0x28FAC72} +- {r_addend: 0x8FAC78, r_info: 0x106, r_offset: 0x28FAC9A} +- {r_addend: 0x8FAC78, r_info: 0x104, r_offset: 0x28FAC9E} +- {r_addend: 0x8FAC78, r_info: 0x106, r_offset: 0x28FACCE} +- {r_addend: 0x8FAC78, r_info: 0x104, r_offset: 0x28FACD2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FACEA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FACEE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAD02} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAD06} diff --git a/asm/patch_diffs/remove_cutscenes_diff.yaml b/asm/patch_diffs/remove_cutscenes_diff.yaml index 73e2782f..d7ee464b 100644 --- a/asm/patch_diffs/remove_cutscenes_diff.yaml +++ b/asm/patch_diffs/remove_cutscenes_diff.yaml @@ -14,43 +14,43 @@ Data: 0x2482764: [0x60, 0x00, 0x00, 0x00] 0x24B7408: [0x48, 0x00, 0x00, 0x54] 0x24B74D4: [0x60, 0x00, 0x00, 0x00] - 0x24D4EC0: [0x48, 0x42, 0x5E, 0x21] + 0x24D4EC0: [0x48, 0x42, 0x5E, 0x61] 0x24D4F28: [0x60, 0x00, 0x00, 0x00] - 0x24D53D0: [0x48, 0x42, 0x59, 0x11] + 0x24D53D0: [0x48, 0x42, 0x59, 0x51] 0x24D602C: [0x38, 0x60, 0x00, 0x01, 0x4E, 0x80, 0x00, 0x20] - 0x254F52C: [0x48, 0x3A, 0xB7, 0xF4] - 0x254F540: [0x48, 0x3A, 0xB7, 0xE0] - 0x254F554: [0x48, 0x3A, 0xB7, 0xCC] + 0x254F52C: [0x48, 0x3A, 0xB8, 0x34] + 0x254F540: [0x48, 0x3A, 0xB8, 0x20] + 0x254F554: [0x48, 0x3A, 0xB8, 0x0C] 0x25542E0: [0x38, 0x60, 0x00, 0x02, 0x4B, 0xFC, 0xC7, 0xA1] 0x2554308: [0x38, 0x60, 0x00, 0x02, 0x4B, 0xFC, 0xC7, 0x79] 0x25AEDCC: [0x60, 0x00, 0x00, 0x00] 0x25AEDE0: [0x60, 0x00, 0x00, 0x00] 0x25AEE00: [0x48, 0x00, 0x00, 0x18] - 0x28FACE0: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FAD20: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0xD4, 0x4B, - 0xCB, 0xD1, 0x09, 0x2C, 0x03, 0x00, 0x08, 0x40, 0x80, 0x00, 0x0C, 0x38, 0x60, + 0xCB, 0xD0, 0xC9, 0x2C, 0x03, 0x00, 0x08, 0x40, 0x80, 0x00, 0x0C, 0x38, 0x60, 0x00, 0x00, 0x48, 0x00, 0x00, 0x08, 0x38, 0x60, 0x00, 0x01, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] - 0x28FAD20: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, - 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x9F, 0x23, 0x78, 0x4B, 0xCB, 0xCF, 0x8D, 0x3C, + 0x28FAD60: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x9F, 0x23, 0x78, 0x4B, 0xCB, 0xCF, 0x4D, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x06, 0x44, 0x2C, 0x1F, 0x00, 0x00, 0x41, 0x82, 0x00, 0x18, 0x2C, 0x1F, 0x00, 0x01, 0x41, 0x82, 0x00, 0x1C, 0x2C, 0x1F, 0x00, 0x02, 0x41, 0x82, 0x00, 0x20, 0x48, 0x00, 0x00, 0x24, - 0x38, 0x80, 0x14, 0x10, 0x4B, 0xCB, 0xDE, 0x05, 0x48, 0x00, 0x00, 0x18, 0x38, - 0x80, 0x14, 0x80, 0x4B, 0xCB, 0xDD, 0xF9, 0x48, 0x00, 0x00, 0x0C, 0x38, 0x80, - 0x14, 0x40, 0x4B, 0xCB, 0xDD, 0xED, 0x3C, 0xA0, 0x10, 0x20, 0x80, 0xA5, 0x84, + 0x38, 0x80, 0x14, 0x10, 0x4B, 0xCB, 0xDD, 0xC5, 0x48, 0x00, 0x00, 0x18, 0x38, + 0x80, 0x14, 0x80, 0x4B, 0xCB, 0xDD, 0xB9, 0x48, 0x00, 0x00, 0x0C, 0x38, 0x80, + 0x14, 0x40, 0x4B, 0xCB, 0xDD, 0xAD, 0x3C, 0xA0, 0x10, 0x20, 0x80, 0xA5, 0x84, 0xDC, 0x38, 0xA5, 0x00, 0xDF, 0x88, 0x85, 0x00, 0x00, 0x2C, 0x04, 0x00, 0x07, - 0x40, 0x82, 0x00, 0x14, 0x38, 0x80, 0x1E, 0x40, 0x4B, 0xCB, 0xDD, 0xCD, 0x38, - 0x80, 0x2E, 0x80, 0x4B, 0xCB, 0xDD, 0xC5, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, + 0x40, 0x82, 0x00, 0x14, 0x38, 0x80, 0x1E, 0x40, 0x4B, 0xCB, 0xDD, 0x8D, 0x38, + 0x80, 0x2E, 0x80, 0x4B, 0xCB, 0xDD, 0x85, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20] 0x101D232E: [0x00, 0x09] 0x101D233A: [0x00, 0x09] 0x101D2346: [0x00, 0x09] Relocations: -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FACEE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FACF2} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAD3A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAD3E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAD82} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAD86} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAD2E} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAD32} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAD7A} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAD7E} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FADC2} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FADC6} diff --git a/asm/patch_diffs/remove_low_health_effects_diff.yaml b/asm/patch_diffs/remove_low_health_effects_diff.yaml index 507ee60d..f35f41f5 100644 --- a/asm/patch_diffs/remove_low_health_effects_diff.yaml +++ b/asm/patch_diffs/remove_low_health_effects_diff.yaml @@ -1,13 +1,13 @@ Data: - 0x2024408: [0x48, 0x8D, 0x69, 0xB4] - 0x23DD1B8: [0x48, 0x51, 0xDC, 0x24] - 0x28FADBC: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0xA0, 0x63, 0x00, 0x20, + 0x2024408: [0x48, 0x8D, 0x69, 0xF4] + 0x23DD1B8: [0x48, 0x51, 0xDC, 0x64] + 0x28FADFC: [0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0xA0, 0x63, 0x00, 0x20, 0x28, 0x03, 0x00, 0x08, 0x41, 0x80, 0x00, 0x0C, 0x7F, 0xE3, 0xFB, 0x78, 0x4B, - 0x72, 0x96, 0x38, 0x4B, 0x72, 0x96, 0x80] - 0x28FADDC: [0xA0, 0x6C, 0x00, 0x20, 0xA0, 0x8C, 0x00, 0x22, 0x54, 0x63, 0x00, 0x3A, + 0x72, 0x95, 0xF8, 0x4B, 0x72, 0x96, 0x40] + 0x28FAE1C: [0xA0, 0x6C, 0x00, 0x20, 0xA0, 0x8C, 0x00, 0x22, 0x54, 0x63, 0x00, 0x3A, 0x7C, 0x64, 0x18, 0x10, 0x2C, 0x03, 0x00, 0x02, 0x40, 0x80, 0x00, 0x0C, 0x38, - 0x60, 0x00, 0x00, 0x4B, 0xAE, 0x23, 0xC4, 0x38, 0x60, 0x00, 0x01, 0x4B, 0xAE, - 0x23, 0xBC] + 0x60, 0x00, 0x00, 0x4B, 0xAE, 0x23, 0x84, 0x38, 0x60, 0x00, 0x01, 0x4B, 0xAE, + 0x23, 0x7C] Relocations: -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FADBE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FADC2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FADFE} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAE02} diff --git a/asm/patch_diffs/required_bosses_diff.yaml b/asm/patch_diffs/required_bosses_diff.yaml new file mode 100644 index 00000000..a48e41f9 --- /dev/null +++ b/asm/patch_diffs/required_bosses_diff.yaml @@ -0,0 +1,24 @@ +Data: + 0x2048430: [0x48, 0x8B, 0x2A, 0x24] + 0x28FAE44: [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x47, 0x61, 0x6E, 0x6F, + 0x6E, 0x4C, 0x00, 0x00, 0x2C, 0x03, 0x00, 0x00, 0x40, 0x82, 0x00, 0x48, 0x4B, + 0xC2, 0x52, 0x79, 0x38, 0x63, 0x51, 0x33, 0x3C, 0x80, 0x02, 0x90, 0x38, 0x84, + 0xAE, 0x4C, 0x38, 0x84, 0xFF, 0xFF, 0x8C, 0xA3, 0x00, 0x01, 0x8C, 0xC4, 0x00, + 0x01, 0x7C, 0x05, 0x30, 0x40, 0x40, 0x82, 0x00, 0x0C, 0x28, 0x05, 0x00, 0x00, + 0x40, 0x82, 0xFF, 0xEC, 0x7C, 0x65, 0x30, 0x51, 0x2C, 0x03, 0x00, 0x00, 0x40, + 0x82, 0x00, 0x20, 0x48, 0x00, 0x00, 0x2D, 0x2C, 0x03, 0x00, 0x01, 0x41, 0x82, + 0x00, 0x14, 0x3C, 0x60, 0x02, 0x04, 0x60, 0x63, 0x84, 0x48, 0x7C, 0x69, 0x03, + 0xA6, 0x4B, 0x74, 0xD5, 0x9C, 0x3C, 0x60, 0x02, 0x04, 0x60, 0x63, 0x84, 0x38, + 0x7C, 0x69, 0x03, 0xA6, 0x4B, 0x74, 0xD5, 0x7C, 0x94, 0x21, 0xFF, 0xF0, 0x7C, + 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x93, 0xE1, 0x00, 0x0C, 0x3F, 0xE0, + 0x02, 0x90, 0x3B, 0xFF, 0xAE, 0x44, 0x88, 0x7F, 0x00, 0x00, 0x48, 0x00, 0x00, + 0x18, 0x38, 0x80, 0x00, 0x03, 0x4B, 0xFF, 0xE5, 0xA5, 0x2C, 0x03, 0x00, 0x00, + 0x41, 0x82, 0x00, 0x14, 0x8C, 0x7F, 0x00, 0x01, 0x28, 0x03, 0x00, 0xFF, 0x40, + 0x82, 0xFF, 0xE8, 0x38, 0x60, 0x00, 0x01, 0x83, 0xE1, 0x00, 0x0C, 0x80, 0x01, + 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, + 0x20] +Relocations: +- {r_addend: 0x8FAE4C, r_info: 0x106, r_offset: 0x28FAE66} +- {r_addend: 0x8FAE4C, r_info: 0x104, r_offset: 0x28FAE6A} +- {r_addend: 0x8FAE44, r_info: 0x106, r_offset: 0x28FAED2} +- {r_addend: 0x8FAE44, r_info: 0x104, r_offset: 0x28FAED6} diff --git a/asm/patch_diffs/switch_op_diff.yaml b/asm/patch_diffs/switch_op_diff.yaml index de32f049..e10ed87f 100644 --- a/asm/patch_diffs/switch_op_diff.yaml +++ b/asm/patch_diffs/switch_op_diff.yaml @@ -1,19 +1,19 @@ Data: - 0x28FAE04: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, + 0x28FAF14: [0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0x81, 0x3F, 0x02, 0xE4, 0x55, - 0x29, 0x07, 0x39, 0x40, 0x82, 0x00, 0x14, 0x4B, 0xCD, 0xA0, 0xAD, 0x81, 0x3F, + 0x29, 0x07, 0x39, 0x40, 0x82, 0x00, 0x14, 0x4B, 0xCD, 0x9F, 0x9D, 0x81, 0x3F, 0x02, 0xE4, 0x61, 0x29, 0x00, 0x08, 0x91, 0x3F, 0x02, 0xE4, 0x81, 0x23, 0x00, 0xB0, 0x55, 0x2A, 0x07, 0x3E, 0x99, 0x43, 0x03, 0xAD, 0x55, 0x2A, 0xE7, 0xFE, 0x99, 0x43, 0x03, 0xAE, 0x7D, 0x2A, 0x46, 0x70, 0x99, 0x43, 0x03, 0xAF, 0x7D, 0x2A, 0x86, 0x70, 0x99, 0x43, 0x03, 0xB0, 0x55, 0x29, 0x46, 0x3E, 0x99, 0x23, 0x03, 0xB1, 0xA0, 0xA3, 0x02, 0xF8, 0x98, 0xA3, 0x03, 0xB2, 0xA1, 0x23, 0x02, 0xFC, 0x99, 0x23, 0x03, 0xB6, 0x54, 0xA5, 0x06, 0x3E, 0x38, 0x80, 0x00, 0x00, - 0x4B, 0xC2, 0x52, 0x5D, 0x38, 0x63, 0x52, 0xC4, 0x4B, 0xC4, 0x90, 0x91, 0xB0, + 0x4B, 0xC2, 0x51, 0x4D, 0x38, 0x63, 0x52, 0xC4, 0x4B, 0xC4, 0x8F, 0x81, 0xB0, 0x7F, 0x03, 0xB4, 0x89, 0x3F, 0x03, 0xB6, 0x99, 0x3F, 0x03, 0xB7, 0x88, 0x9F, 0x03, 0xAF, 0x2C, 0x04, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x05, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x40, 0x88, 0xBF, 0x03, 0x26, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, - 0xCB, 0xF2, 0x09, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x1C, 0x89, 0x3F, + 0xCB, 0xF0, 0xF9, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x1C, 0x89, 0x3F, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, 0xFF, 0xD0, 0x39, 0x20, 0x00, 0x04, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x0C, 0x39, 0x20, 0x00, 0x00, 0x99, 0x3F, 0x03, 0xAC, 0x38, 0x60, 0x00, 0x04, 0x80, 0x01, 0x00, 0x14, 0x7C, @@ -22,11 +22,11 @@ Data: 0x01, 0x4E, 0x80, 0x00, 0x20, 0x38, 0x60, 0x00, 0x01, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0xA8, 0x83, 0x03, 0xB4, 0x4B, 0xC2, - 0x51, 0xA9, 0x38, 0x63, 0x52, 0xC4, 0x4B, 0xC4, 0x91, 0x95, 0x2C, 0x03, 0x00, + 0x50, 0x99, 0x38, 0x63, 0x52, 0xC4, 0x4B, 0xC4, 0x90, 0x85, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0x00, 0x34, 0x89, 0x3F, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x04, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x0C, 0x39, 0x20, 0x00, 0x05, 0x99, 0x3F, 0x03, 0xAC, 0x4B, 0xC2, - 0x51, 0x75, 0xA1, 0x23, 0x52, 0xB8, 0x61, 0x29, 0x00, 0x08, 0xB1, 0x23, 0x52, + 0x50, 0x65, 0xA1, 0x23, 0x52, 0xB8, 0x61, 0x29, 0x00, 0x08, 0xB1, 0x23, 0x52, 0xB8, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x83, 0xE1, 0x00, 0x0C, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xE0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x24, 0x93, 0x61, 0x00, 0x0C, 0x93, 0x81, @@ -36,7 +36,7 @@ Data: 0x9C, 0x00, 0x01, 0x3B, 0xFF, 0x00, 0x01, 0x3B, 0xDE, 0x00, 0x01, 0x89, 0x3D, 0x03, 0xB1, 0x7C, 0x1E, 0x48, 0x00, 0x40, 0x80, 0x00, 0x2C, 0x88, 0xBD, 0x03, 0x26, 0x57, 0xE4, 0x06, 0x3E, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, - 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xF0, 0xD9, 0x2C, 0x03, 0x00, 0x00, 0x41, + 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEF, 0xC9, 0x2C, 0x03, 0x00, 0x00, 0x41, 0x82, 0xFF, 0xCC, 0x3B, 0x7B, 0x00, 0x01, 0x4B, 0xFF, 0xFF, 0xC8, 0x38, 0x60, 0x00, 0x00, 0x89, 0x3D, 0x03, 0xAD, 0x2C, 0x09, 0x00, 0x00, 0x40, 0x82, 0x00, 0x0C, 0x2C, 0x1C, 0x00, 0x00, 0x41, 0x82, 0x00, 0x58, 0x2C, 0x09, 0x00, 0x01, @@ -57,7 +57,7 @@ Data: 0xFF, 0xFF, 0x41, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x02, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x3C, 0x88, 0xBF, 0x03, 0x26, 0x88, 0x9F, 0x03, 0xAF, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, - 0xCB, 0xED, 0x45, 0x89, 0x3F, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, + 0xCB, 0xEC, 0x35, 0x89, 0x3F, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x04, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x0C, 0x39, 0x20, 0x00, 0x04, 0x99, 0x3F, 0x03, 0xAC, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x83, 0xE1, 0x00, 0x0C, 0x38, 0x21, 0x00, 0x10, 0x4E, @@ -70,7 +70,7 @@ Data: 0x4C, 0xA9, 0x3F, 0x03, 0xB4, 0x2C, 0x09, 0xFF, 0xFF, 0x41, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x02, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x40, 0x88, 0xBF, 0x03, 0x26, 0x88, 0x9F, 0x03, 0xAF, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, - 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEC, 0x95, 0x89, 0x3F, 0x03, + 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEB, 0x85, 0x89, 0x3F, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, 0x00, 0x1C, 0x39, 0x20, 0x00, 0x05, 0x99, 0x3F, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x10, 0x89, 0x3F, 0x03, 0xB7, 0x39, 0x29, 0xFF, 0xFF, 0x99, 0x3F, 0x03, 0xB7, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, @@ -79,23 +79,23 @@ Data: 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0xA1, 0x23, 0x00, 0xF8, 0x2C, 0x09, 0x00, 0x02, 0x40, 0x82, 0x00, 0x28, 0x39, 0x20, 0x00, 0x03, 0x99, 0x23, 0x03, 0xAC, 0x88, 0xA3, 0x03, 0x26, 0x88, 0x83, 0x03, 0xAF, 0x3C, 0x60, 0x10, - 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEC, 0x1D, + 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEB, 0x0D, 0x48, 0x00, 0x00, 0x48, 0x89, 0x23, 0x03, 0xAE, 0x2C, 0x09, 0x00, 0x00, 0x41, 0x82, 0x00, 0x1C, 0x4B, 0xFF, 0xFD, 0x55, 0x2C, 0x03, 0x00, 0x00, 0x40, 0x82, 0x00, 0x10, 0x39, 0x20, 0x00, 0x00, 0x99, 0x23, 0x03, 0xAC, 0x48, 0x00, 0x00, 0x24, 0x39, 0x00, 0x00, 0x01, 0x38, 0xE0, 0x00, 0x00, 0x38, 0xC0, 0x00, 0x00, 0x60, 0xC6, 0xFF, 0xFF, 0x88, 0xBF, 0x03, 0xB2, 0xA0, 0x9F, 0x03, 0xB4, 0x7F, - 0xE3, 0xFB, 0x78, 0x4B, 0xCD, 0xC7, 0xF5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, + 0xE3, 0xFB, 0x78, 0x4B, 0xCD, 0xC6, 0xE5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x83, 0xE1, 0x00, 0x0C, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF0, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x14, 0x93, 0xE1, 0x00, 0x0C, 0x7C, 0x7F, 0x1B, 0x78, 0x4B, 0xFF, 0xFC, 0xF5, 0x2C, 0x03, 0x00, 0x00, 0x40, 0x82, 0x00, 0x24, 0x39, 0x20, 0x00, 0x00, 0x99, 0x3F, 0x03, 0xAC, 0x88, 0xBF, 0x03, 0x26, 0x88, 0x9F, 0x03, 0xAF, 0x3C, 0x60, 0x10, - 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEC, 0xC5, + 0x20, 0x80, 0x63, 0x84, 0xDC, 0x38, 0x63, 0x00, 0x20, 0x4B, 0xCB, 0xEB, 0xB5, 0x80, 0x01, 0x00, 0x14, 0x7C, 0x08, 0x03, 0xA6, 0x93, 0xE1, 0x00, 0x0C, 0x38, 0x21, 0x00, 0x10, 0x4E, 0x80, 0x00, 0x20, 0x94, 0x21, 0xFF, 0xF8, 0x7C, 0x08, 0x02, 0xA6, 0x90, 0x01, 0x00, 0x0C, 0x89, 0x43, 0x03, 0xAC, 0x28, 0x0A, 0x00, - 0x04, 0x41, 0x81, 0x00, 0x5C, 0x3D, 0x20, 0x02, 0x90, 0x39, 0x29, 0xB3, 0x00, + 0x04, 0x41, 0x81, 0x00, 0x5C, 0x3D, 0x20, 0x02, 0x90, 0x39, 0x29, 0xB4, 0x10, 0x55, 0x4A, 0x10, 0x3A, 0x7D, 0x2A, 0x4A, 0x14, 0x7D, 0x29, 0x03, 0xA6, 0x4E, 0x80, 0x04, 0x20, 0x48, 0x00, 0x00, 0x18, 0x48, 0x00, 0x00, 0x1C, 0x48, 0x00, 0x00, 0x20, 0x48, 0x00, 0x00, 0x24, 0x48, 0x00, 0x00, 0x28, 0x48, 0x00, 0x00, @@ -103,35 +103,35 @@ Data: 0x48, 0x00, 0x00, 0x1C, 0x4B, 0xFF, 0xFE, 0xB9, 0x48, 0x00, 0x00, 0x14, 0x4B, 0xFF, 0xFB, 0xE5, 0x48, 0x00, 0x00, 0x0C, 0x4B, 0xFF, 0xFF, 0x45, 0x48, 0x00, 0x00, 0x04, 0x38, 0x60, 0x00, 0x01, 0x80, 0x01, 0x00, 0x0C, 0x7C, 0x08, 0x03, - 0xA6, 0x38, 0x21, 0x00, 0x08, 0x4E, 0x80, 0x00, 0x20, 0x02, 0x8F, 0xAE, 0x04, - 0x02, 0x8F, 0xAF, 0x04, 0x02, 0x8F, 0xB2, 0xD0, 0x02, 0x8F, 0xAE, 0xFC, 0x02, - 0x8F, 0xAF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA6, 0x38, 0x21, 0x00, 0x08, 0x4E, 0x80, 0x00, 0x20, 0x02, 0x8F, 0xAF, 0x14, + 0x02, 0x8F, 0xB0, 0x14, 0x02, 0x8F, 0xB3, 0xE0, 0x02, 0x8F, 0xB0, 0x0C, 0x02, + 0x8F, 0xB0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFD, 0x00, 0x07, 0xFF, 0xFD, 0x01, 0xE4, 0x00, 0x00, 0x10, 0x1F, 0x3B, 0xDC, 0x00, 0x00, 0x03, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1F, 0x30, 0x88, 0x00, 0x9F, 0x00, 0x00, 0x02, - 0x8F, 0xB3, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] - 0x101F4670: [0x02, 0x8F, 0xB3, 0x74] + 0x8F, 0xB4, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] + 0x101F4670: [0x02, 0x8F, 0xB4, 0x84] Relocations: -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAEAE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAEB2} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAFDE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAFE2} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB0EA} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB0EE} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB19A} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB19E} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB212} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB216} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB2AE} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB2B2} -- {r_addend: 0x8FB300, r_info: 0x106, r_offset: 0x28FB2EA} -- {r_addend: 0x8FB300, r_info: 0x104, r_offset: 0x28FB2EE} -- {r_addend: 0x8FAE04, r_info: 0x101, r_offset: 0x28FB354} -- {r_addend: 0x8FAF04, r_info: 0x101, r_offset: 0x28FB358} -- {r_addend: 0x8FB2D0, r_info: 0x101, r_offset: 0x28FB35C} -- {r_addend: 0x8FAEFC, r_info: 0x101, r_offset: 0x28FB360} -- {r_addend: 0x8FAF0C, r_info: 0x101, r_offset: 0x28FB364} -- {r_addend: 0x1F3BDC, r_info: 0x201, r_offset: 0x28FB380} -- {r_addend: 0x1F3088, r_info: 0x201, r_offset: 0x28FB390} -- {r_addend: 0x8FB354, r_info: 0x101, r_offset: 0x28FB398} -- {r_addend: 0x8FB374, r_info: 0x101, r_offset: 0x101F4670} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FAFBE} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FAFC2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB0EE} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB0F2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB1FA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB1FE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB2AA} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB2AE} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB322} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB326} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB3BE} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB3C2} +- {r_addend: 0x8FB410, r_info: 0x106, r_offset: 0x28FB3FA} +- {r_addend: 0x8FB410, r_info: 0x104, r_offset: 0x28FB3FE} +- {r_addend: 0x8FAF14, r_info: 0x101, r_offset: 0x28FB464} +- {r_addend: 0x8FB014, r_info: 0x101, r_offset: 0x28FB468} +- {r_addend: 0x8FB3E0, r_info: 0x101, r_offset: 0x28FB46C} +- {r_addend: 0x8FB00C, r_info: 0x101, r_offset: 0x28FB470} +- {r_addend: 0x8FB01C, r_info: 0x101, r_offset: 0x28FB474} +- {r_addend: 0x1F3BDC, r_info: 0x201, r_offset: 0x28FB490} +- {r_addend: 0x1F3088, r_info: 0x201, r_offset: 0x28FB4A0} +- {r_addend: 0x8FB464, r_info: 0x101, r_offset: 0x28FB4A8} +- {r_addend: 0x8FB484, r_info: 0x101, r_offset: 0x101F4670} diff --git a/asm/patch_diffs/swordless_diff.yaml b/asm/patch_diffs/swordless_diff.yaml index 9067cb21..fb0c1a8e 100644 --- a/asm/patch_diffs/swordless_diff.yaml +++ b/asm/patch_diffs/swordless_diff.yaml @@ -1,34 +1,34 @@ Data: 0x213AE90: [0x55, 0x48, 0x03, 0xDF] 0x213AEA8: [0x48, 0x00, 0x00, 0x14] - 0x25B2030: [0x48, 0x34, 0x93, 0x74] - 0x25B26F4: [0x48, 0x34, 0x8D, 0x04] - 0x25B26F8: [0x48, 0x34, 0x8D, 0x60] - 0x28FB3A4: [0x4B, 0xC2, 0x4D, 0x31, 0x38, 0x63, 0x51, 0x34, 0x3C, 0x80, 0x10, 0x05, + 0x25B2030: [0x48, 0x34, 0x94, 0x84] + 0x25B26F4: [0x48, 0x34, 0x8E, 0x14] + 0x25B26F8: [0x48, 0x34, 0x8E, 0x70] + 0x28FB4B4: [0x4B, 0xC2, 0x4C, 0x21, 0x38, 0x63, 0x51, 0x34, 0x3C, 0x80, 0x10, 0x05, 0x38, 0x84, 0x33, 0x6C, 0x8C, 0xA3, 0x00, 0x01, 0x8C, 0xC4, 0x00, 0x01, 0x7C, 0x05, 0x30, 0x40, 0x40, 0x82, 0x00, 0x0C, 0x28, 0x05, 0x00, 0x00, 0x40, 0x82, 0xFF, 0xEC, 0x7C, 0x65, 0x30, 0x51, 0x40, 0x82, 0x00, 0x20, 0x3F, 0xC0, 0x10, 0x20, 0x83, 0xDE, 0x84, 0xDC, 0x88, 0x1E, 0x00, 0x2E, 0x2C, 0x00, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x0C, 0x38, 0x00, 0x00, 0x3E, 0x98, 0x1E, 0x00, 0x2E, 0x4B, - 0xC2, 0x4C, 0xE5, 0x4B, 0xCB, 0x6C, 0x40] - 0x28FB3F8: [0x4B, 0xC2, 0x4C, 0xDD, 0x38, 0x63, 0x51, 0x34, 0x3C, 0x80, 0x10, 0x00, + 0xC2, 0x4B, 0xD5, 0x4B, 0xCB, 0x6B, 0x30] + 0x28FB508: [0x4B, 0xC2, 0x4B, 0xCD, 0x38, 0x63, 0x51, 0x34, 0x3C, 0x80, 0x10, 0x00, 0x38, 0x84, 0x3D, 0x28, 0x8C, 0xA3, 0x00, 0x01, 0x8C, 0xC4, 0x00, 0x01, 0x7C, 0x05, 0x30, 0x40, 0x40, 0x82, 0x00, 0x0C, 0x28, 0x05, 0x00, 0x00, 0x40, 0x82, 0xFF, 0xEC, 0x7C, 0x65, 0x30, 0x50, 0x2C, 0x03, 0x00, 0x00, 0x40, 0x82, 0x00, 0x28, 0x3C, 0x60, 0x10, 0x20, 0x80, 0x63, 0x84, 0xDC, 0x88, 0x03, 0x00, 0x2E, 0x2C, 0x00, 0x00, 0xFF, 0x40, 0x82, 0x00, 0x14, 0x38, 0x00, 0x00, 0x38, 0x98, - 0x03, 0x00, 0x2E, 0x7C, 0x65, 0x1B, 0x78, 0x4B, 0xCB, 0x72, 0xB0, 0x80, 0x9B, - 0x84, 0xDC, 0x4B, 0xCB, 0x72, 0xA4] - 0x28FB458: [0x88, 0x04, 0x00, 0xD4, 0x2C, 0x00, 0x00, 0x00, 0x40, 0x82, 0x00, 0x0C, + 0x03, 0x00, 0x2E, 0x7C, 0x65, 0x1B, 0x78, 0x4B, 0xCB, 0x71, 0xA0, 0x80, 0x9B, + 0x84, 0xDC, 0x4B, 0xCB, 0x71, 0x94] + 0x28FB568: [0x88, 0x04, 0x00, 0xD4, 0x2C, 0x00, 0x00, 0x00, 0x40, 0x82, 0x00, 0x0C, 0x38, 0x00, 0x00, 0xFF, 0x98, 0x04, 0x00, 0x2E, 0x88, 0xA4, 0x00, 0x68, 0x4B, - 0xCB, 0x72, 0x8C] + 0xCB, 0x71, 0x7C] Relocations: -- {r_addend: 0x5336C, r_info: 0x206, r_offset: 0x28FB3AE} -- {r_addend: 0x5336C, r_info: 0x204, r_offset: 0x28FB3B2} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB3D6} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB3DA} -- {r_addend: 0x3D28, r_info: 0x206, r_offset: 0x28FB402} -- {r_addend: 0x3D28, r_info: 0x204, r_offset: 0x28FB406} -- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB42E} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB432} -- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB452} +- {r_addend: 0x5336C, r_info: 0x206, r_offset: 0x28FB4BE} +- {r_addend: 0x5336C, r_info: 0x204, r_offset: 0x28FB4C2} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB4E6} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB4EA} +- {r_addend: 0x3D28, r_info: 0x206, r_offset: 0x28FB512} +- {r_addend: 0x3D28, r_info: 0x204, r_offset: 0x28FB516} +- {r_addend: 0x1F84DC, r_info: 0x206, r_offset: 0x28FB53E} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB542} +- {r_addend: 0x1F84DC, r_info: 0x204, r_offset: 0x28FB562} diff --git a/asm/patches/custom_funcs.asm b/asm/patches/custom_funcs.asm index 7ba4fb50..82010ed9 100644 --- a/asm/patches/custom_funcs.asm +++ b/asm/patches/custom_funcs.asm @@ -1118,6 +1118,30 @@ mtlr r0 addi sp, sp, 0x10 blr +.global generic_is_dungeon_bit +generic_is_dungeon_bit: +stwu sp, -0x10 (sp) +mflr r0 +stw r0, 0x14 (sp) + +mr r5, r3 ; Argument r3 to this func is the stage ID of the dungeon to add this item for +mr r6, r4 ; Argument r4 to this func is the bit index to set + +lis r3, gameInfo_ptr@ha +lwz r3, gameInfo_ptr@l(r3) +addi r3,r3,0x3a0 +mulli r4, r5, 0x24 ; Use stage ID of the dungeon as the index, each entry in the list is 0x24 bytes long +add r3, r3, r4 + +; Now call isDungeonBit with argument r3 being the stage info that was determined above. +mr r4, r6 ; Argument r4 is the bit index +bl isDungeonItem + +lwz r0, 0x14 (sp) +mtlr r0 +addi sp, sp, 0x10 +blr + .global generic_small_key_item_get_func generic_small_key_item_get_func: stwu sp, -0x10 (sp) diff --git a/asm/patches/required_bosses.asm b/asm/patches/required_bosses.asm new file mode 100644 index 00000000..fc61b56a --- /dev/null +++ b/asm/patches/required_bosses.asm @@ -0,0 +1,83 @@ +; Initial hook in function ALLdie_execute +.org 0x02048430 + b check_stage_name + +.org @NextFreeSpace +.global required_bosses +required_bosses: + .space 6, 0xFF ; Allocate space for dungeon scene indexes + .byte 0xFF + .align 2 ; Align to the next 4 bytes + +.global staircase_to_puppet_ganon_stage_name +staircase_to_puppet_ganon_stage_name: + .string "GanonL" + .align 2 ; Align to the next 4 bytes + +.global check_stage_name +check_stage_name: +; If the enemy pointer is not null, jump to the end of the original function + cmpwi r3, 0 + bne jump_back_to_all_die_end +; Check if we're currently on the staircase before Puppet Ganon stage + bl FUN_025200d4 + addi r3, r3, 0x5133 + lis r4, staircase_to_puppet_ganon_stage_name@ha + addi r4, r4, staircase_to_puppet_ganon_stage_name@l + subi r4, r4, 1 +strcmp_start: + lbzu r5, 0x1(r3) + lbzu r6, 0x1(r4) + cmplw r5, r6 + bne strncmp_end + cmplwi r5, 0 + bne strcmp_start +strncmp_end: + subf. r3, r5, r6 + +; If we aren't on the stage, jump back to the original function where mState and mTimer get set + cmpwi r3, 0 + bne jump_back_to_all_die_success + +; If we are on the stage, then check for each required boss being defeated. + bl check_required_bosses_defeated + cmpwi r3, 1 + beq jump_back_to_all_die_success + +; These addresses is too far away for a conditional branch instruction +jump_back_to_all_die_end: + b 0x02048448 +jump_back_to_all_die_success: + b 0x02048438 + + +; This function checks to see if all required bosses have been beaten. Returns 1 if all defeated and 0 if not all defeated +.global check_required_bosses_defeated +check_required_bosses_defeated: + stwu sp, -0x10 (sp) + mflr r0 + stw r0, 0x14 (sp) + stw r31, 0xC (sp) + + lis r31, required_bosses@ha + addi r31, r31, required_bosses@l + lbz r3, 0 (r31) + b check_required_bosses_check_continue_loop + +check_required_bosses_begin_loop: + li r4, 3 ; bit for boss being defeated + bl generic_is_dungeon_bit + cmpwi r3, 0 ; If the bit for the boss isn't set, jump to the end with 0 stored in r3 + beq end_check_required_bosses_defeated + lbzu r3, 1(r31) +check_required_bosses_check_continue_loop: + cmplwi r3, 0xFF ; check for terminator + bne+ check_required_bosses_begin_loop + li r3, 1 + +end_check_required_bosses_defeated: + lwz r31, 0xC (sp) + lwz r0, 0x14 (sp) + mtlr r0 + addi sp, sp, 0x10 + blr \ No newline at end of file diff --git a/gui/desktop/CMakeLists.txt b/gui/desktop/CMakeLists.txt index 456f9d3c..b46e2807 100644 --- a/gui/desktop/CMakeLists.txt +++ b/gui/desktop/CMakeLists.txt @@ -35,6 +35,7 @@ target_sources(wwhd_rando PRIVATE mainwindow.cpp mainwindow.ui player_customizat tracker/tracker_area_widget.cpp tracker/tracker_inventory_button.cpp tracker/tracker_label.cpp tracker/tracker.cpp tracker/tracker_preferences_dialog.ui tracker/tracker_preferences_dialog.cpp + tracker/tracker_required_boss_checkbox.cpp ${app_icon_resource_windows} ${app_icon_macos}) target_link_libraries(wwhd_rando PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) diff --git a/gui/desktop/mainwindow.hpp b/gui/desktop/mainwindow.hpp index d2fa457d..64f5c4ea 100644 --- a/gui/desktop/mainwindow.hpp +++ b/gui/desktop/mainwindow.hpp @@ -103,7 +103,13 @@ class MainWindow : public QMainWindow void load_locations(); void initialize_tracker(); - void initialize_tracker_world(Settings& settings, const GameItemPool& markedItems = {}, const std::vector& markedLocations = {}, const std::unordered_map& connectedEntrances = {}, const std::map& chartMappings = {}); + void initialize_tracker_world(Settings& settings, + const GameItemPool& markedItems = {}, + const std::vector& markedLocations = {}, + const std::unordered_map& connectedEntrances = {}, + const std::map& chartMappings = {}, + const std::set& requiredBosses = {}, + bool fromAutosave = false); void calculate_own_dungeon_key_locations(); void set_location_list_widget_background(const std::string& area); void clear_tracker_labels(QLayout* layout); @@ -306,6 +312,7 @@ private slots: void on_view_all_entrances_button_clicked(); void open_chart_mapping_list(uint8_t islandNum); void tracker_give_and_map_chart(TrackerLabel* label, GameItem chart); + void tracker_set_required_boss(const QString& bossName, Qt::CheckState checked); public: void update_items_color(); @@ -322,6 +329,16 @@ private slots: std::unordered_map> entrancePaths = {}; // Maps each location to its shortest path std::unordered_map entrancePathsByLocation = {}; + std::set requiredBosses = {}; + std::unordered_map bossNamesToLocations = { + {"Gohma", "Dragon Roost Cavern - Gohma Heart Container"}, + {"Kalle Demos", "Forbidden Woods - Kalle Demos Heart Container"}, + {"Gohdan", "Tower of the Gods - Gohdan Heart Container"}, + {"Helmaroc King", "Forsaken Fortress - Helmaroc King Heart Container"}, + {"Jalhalla", "Earth Temple - Jalhalla Heart Container"}, + {"Molgera", "Wind Temple - Molgera Heart Container"}, + }; + private: LocationPool trackerLocations = {}; diff --git a/gui/desktop/mainwindow.ui b/gui/desktop/mainwindow.ui index d3a56cb1..ffb4af8b 100644 --- a/gui/desktop/mainwindow.ui +++ b/gui/desktop/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 1072 - 822 + 836 @@ -35,7 +35,7 @@ 0 0 1054 - 654 + 668 @@ -69,7 +69,7 @@ - 5 + 6 @@ -2576,8 +2576,8 @@ font-size: 15px; 0 0 - 100 - 30 + 360 + 313 @@ -2849,7 +2849,7 @@ font-size: 15px; 0 0 360 - 30 + 265 @@ -2995,7 +2995,7 @@ font-size: 15px; 10 365 1028 - 161 + 181 @@ -3008,6 +3008,9 @@ font-size: 15px; 5 + + 0 + 3 @@ -3245,34 +3248,12 @@ font-weight: bold; 820 - 540 + 550 221 118 - - - - background: rgba(79, 79, 79, 0.85); -color: lightgray - - - View Charts - - - - - - - background: rgba(79, 79, 79, 0.85); -color: lightgray - - - Open Settings - - - @@ -3297,6 +3278,28 @@ color: lightgray + + + + background: rgba(79, 79, 79, 0.85); +color: lightgray + + + View Charts + + + + + + + background: rgba(79, 79, 79, 0.85); +color: lightgray + + + Open Settings + + + diff --git a/gui/desktop/tracker/tracker.cpp b/gui/desktop/tracker/tracker.cpp index eb5f9850..0815b5e4 100644 --- a/gui/desktop/tracker/tracker.cpp +++ b/gui/desktop/tracker/tracker.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -30,7 +31,9 @@ void MainWindow::initialize_tracker_world(Settings& settings, const GameItemPool& markedItems, const std::vector& markedLocations, const std::unordered_map& connectedEntrances, - const std::map& chartMappings) + const std::map& chartMappings, + const std::set& requiredBosses_, + bool fromAutosave) { trackerStarted = true; @@ -301,6 +304,33 @@ void MainWindow::initialize_tracker_world(Settings& settings, // Add vertical spacer to push labels up ui->entrance_scroll_layout->addSpacerItem(new QSpacerItem(40, 20, QSizePolicy::Minimum, QSizePolicy::Expanding)); + + // Update required boss checkboxes + requiredBosses = requiredBosses_; + for (RequiredBossCheckBox* checkBox : ui->other_areas_widget->findChildren()) + { + // Block signals so we don't needlessly autosave 6 extra times + checkBox->blockSignals(true); + if (trackerWorld.getSettings().num_required_dungeons > 0) + { + checkBox->setVisible(true); + if (fromAutosave && !requiredBosses.contains(checkBox->getBossName().toStdString())) + { + checkBox->setCheckState(Qt::Unchecked); + } + else + { + checkBox->setCheckState(Qt::Checked); + requiredBosses.insert(checkBox->getBossName().toStdString()); + } + } + else + { + checkBox->setVisible(false); + checkBox->setCheckState(Qt::Unchecked); + } + checkBox->blockSignals(false); + } } void MainWindow::on_start_tracker_button_clicked() @@ -381,6 +411,15 @@ bool MainWindow::autosave_current_tracker_config() } } + // Save required bosses + if(!requiredBosses.empty()) + { + for (const auto& boss : requiredBosses) + { + root["required_bosses"].push_back(boss); + } + } + std::ofstream autosave_file(trackerPreferences.autosaveFilePath); if (autosave_file.is_open() == false) { @@ -586,7 +625,18 @@ void MainWindow::load_tracker_autosave() } } - initialize_tracker_world(trackerConfig.settings, markedItems, markedLocations, entranceConnections, chartMappings); + // Load any saved required bosses + std::set requiredBosses_ = {}; + const auto& bosses = root["required_bosses"]; + if (bosses) + { + for (const auto& boss : bosses) + { + requiredBosses_.insert(boss.as()); + } + } + + initialize_tracker_world(trackerConfig.settings, markedItems, markedLocations, entranceConnections, chartMappings, requiredBosses_, true); update_tracker(); } @@ -731,6 +781,20 @@ void MainWindow::initialize_tracker() ui->other_areas_layout->addWidget(new TAW("Hyrule", "hyrule" ), 0, 8); ui->other_areas_layout->addWidget(new TAW("Ganon's Tower", "ganondorf"), 0, 9); + // Add required boss checkboxes + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Dragon Roost Cavern - Gohma Heart Container", "Gohma", nullptr), 1, 0, Qt::AlignRight); + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Forbidden Woods - Kalle Demos Heart Container", "Kalle Demos", nullptr), 1, 1, Qt::AlignRight); + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Tower of the Gods - Gohdan Heart Container", "Gohdan", nullptr), 1, 2, Qt::AlignRight); + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Forsaken Fortress - Helmaroc King Heart Container", "Helmaroc King", nullptr), 1, 3, Qt::AlignRight); + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Earth Temple - Jalhalla Heart Container", "Jalhalla", nullptr), 1, 4, Qt::AlignRight); + ui->other_areas_layout->addWidget(new RequiredBossCheckBox("Wind Temple - Molgera Heart Container", "Molgera", nullptr), 1, 5, Qt::AlignRight); + + // Connect required boss checkboxes with updating the required bosses + for (auto checkbox : ui->other_areas_widget->findChildren()) + { + connect(checkbox, &RequiredBossCheckBox::setRequiredBoss, this, &MainWindow::tracker_set_required_boss); + } + // Set world and inventory and connect inventory button actions to updating the tracker for (auto inventoryButton : ui->tracker_tab->findChildren()) { @@ -951,6 +1015,16 @@ void MainWindow::check_special_accessibility_conditions() } } } + + // If the user has not marked all required bosses as defeated, then Defeat Ganondorf is not possible + for (const auto& boss : requiredBosses) + { + if (!trackerWorld.locationTable[bossNamesToLocations[boss]]->marked) + { + trackerWorld.locationTable["Ganon's Tower - Defeat Ganondorf"]->hasBeenFound = false; + break; + } + } } void MainWindow::update_tracker_areas_and_autosave() @@ -1876,3 +1950,17 @@ QString prettyTrackerName(Item& item, const int& count, MainWindow* mainWindow) } } } + +void MainWindow::tracker_set_required_boss(const QString& bossName, Qt::CheckState checked) +{ + if (checked == Qt::Checked) + { + requiredBosses.insert(bossName.toStdString()); + } + else + { + requiredBosses.erase(bossName.toStdString()); + } + + update_tracker(); +} diff --git a/gui/desktop/tracker/tracker_label.cpp b/gui/desktop/tracker/tracker_label.cpp index 1977adcd..3caeda63 100644 --- a/gui/desktop/tracker/tracker_label.cpp +++ b/gui/desktop/tracker/tracker_label.cpp @@ -408,7 +408,7 @@ QString TrackerLabel::getTooltipText() auto str = text[i]; // Check for special shorthand cases // If we're listing the whole triforce, combine it into 1 item - if (str.contains("Triforce Shard 1") && text.size() > i + 7 && text[i + 7].contains("Triforce Shard 8")) + if (str.contains("Triforce Shard") && text.size() > i + 7 && text[i + 7].contains("Triforce Shard")) { QString color = TOOLTIP_MET; // Color the text red if we don't have even 1 shard @@ -445,6 +445,20 @@ QString TrackerLabel::getTooltipText() returnStr += "
  • "; } } + + // Add in required bosses for Defeat Ganondorf + if (type == TrackerLabelType::Location && location->getName() == "Ganon's Tower - Defeat Ganondorf") + { + + for (const auto& boss : mainWindow->requiredBosses) + { + returnStr += "
  • "; + std::string bossDefeatedText = boss + " Defeated"; + std::string color = mainWindow->trackerWorlds[0].locationTable[mainWindow->bossNamesToLocations[boss]]->marked ? TOOLTIP_MET : TOOLTIP_UNMET; + returnStr += "" + bossDefeatedText + ""; + } + } + returnStr += "
  • "; return returnStr; } diff --git a/gui/desktop/tracker/tracker_required_boss_checkbox.cpp b/gui/desktop/tracker/tracker_required_boss_checkbox.cpp new file mode 100644 index 00000000..b39c6a78 --- /dev/null +++ b/gui/desktop/tracker/tracker_required_boss_checkbox.cpp @@ -0,0 +1,18 @@ +#include "tracker_required_boss_checkbox.hpp" + +#include + +RequiredBossCheckBox::RequiredBossCheckBox(const QString& bossLocationName_, const QString& bossName_, QWidget* parent) : + QCheckBox{"Required", parent}, + bossLocationName{bossLocationName_}, + bossName{bossName_} +{ + setContentsMargins(4, 0, 0, 0); + set_font(this, "Fira Sans", 11); + connect(this, &QCheckBox::checkStateChanged, this, &RequiredBossCheckBox::emit_required_boss_signal); +} + +void RequiredBossCheckBox::emit_required_boss_signal() +{ + emit setRequiredBoss(bossName, checkState()); +} diff --git a/gui/desktop/tracker/tracker_required_boss_checkbox.hpp b/gui/desktop/tracker/tracker_required_boss_checkbox.hpp new file mode 100644 index 00000000..628e98c9 --- /dev/null +++ b/gui/desktop/tracker/tracker_required_boss_checkbox.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +class Location; + +class RequiredBossCheckBox : public QCheckBox +{ + Q_OBJECT +public: + RequiredBossCheckBox(const QString& bossLocationName_, const QString& bossName_, QWidget* parent); + + QString getBossLocationName () const { return bossLocationName; } + QString getBossName() const { return bossName; } +signals: + void setRequiredBoss(const QString& bossName_, Qt::CheckState checked); + +private: + QString bossLocationName = ""; + QString bossName = ""; + +private slots: + void emit_required_boss_signal(); + + +}; + diff --git a/logic/Fill.cpp b/logic/Fill.cpp index d84b9375..39cfdd0e 100644 --- a/logic/Fill.cpp +++ b/logic/Fill.cpp @@ -586,79 +586,6 @@ static FillError handleDungeonItems(WorldPool& worlds, ItemPool& itemPool) return FillError::NONE; } -static void generateRaceModeItems(const LocationPool& raceModeLocations, ItemPool& raceModeItems, ItemPool& itemsToChooseFrom, ItemPool& mainItemPool) -{ - shufflePool(itemsToChooseFrom); - while (!itemsToChooseFrom.empty() && raceModeItems.size() < raceModeLocations.size()) - { - raceModeItems.push_back(popRandomElement(itemsToChooseFrom)); - } - // Add back any unused elements - addElementsToPool(mainItemPool, itemsToChooseFrom); -} - -// Place progression items in specific locations at the end of dungeons to require the player -// to beat those dungeons. -static FillError placeRaceModeItems(WorldPool& worlds, ItemPool& itemPool, LocationPool& allLocations) -{ - LocationPool raceModeLocations; - ItemPool raceModeItems; - for (auto& world : worlds) - { - for (auto& [name, dungeon] : world.dungeons) - { - if (dungeon.isRequiredDungeon) - { - auto raceModeLocation = dungeon.raceModeLocation; - // If this location already has an item placed at it, then skip it - if (raceModeLocation->currentItem.getGameItemId() != GameItem::INVALID) - { - continue; - } - raceModeLocations.push_back(raceModeLocation); - } - } - } - - // Build up the list of race mode items starting with triforce shards... - auto triforceShards = filterAndEraseFromPool(itemPool, [](const Item& item){return item.getGameItemId() >= GameItem::TriforceShard1 && item.getGameItemId() <= GameItem::TriforceShard8;}); - generateRaceModeItems(raceModeLocations, raceModeItems, triforceShards, itemPool); - - // Then swords... - auto swords = filterAndEraseFromPool(itemPool, [](const Item& item){return item.getGameItemId() == GameItem::ProgressiveSword;}); - generateRaceModeItems(raceModeLocations, raceModeItems, swords, itemPool); - - // Then bows... - auto bows = filterAndEraseFromPool(itemPool, [](const Item& item){return item.getGameItemId() == GameItem::ProgressiveBow;}); - generateRaceModeItems(raceModeLocations, raceModeItems, bows, itemPool); - - // Then the rest of the major items if necessary. - auto majorItems = filterAndEraseFromPool(itemPool, [](const Item& item){return item.isMajorItem();}); - generateRaceModeItems(raceModeLocations, raceModeItems, majorItems, itemPool); - - // logItemPool("raceModeItems", raceModeItems); - - if (raceModeItems.size() < raceModeLocations.size()) - { - Utility::platformLog("WARNING: Not enough major items to place at race mode locations."); - } - - // Then place the items in the race mode locations - FillError err; - FILL_ERROR_CHECK(assumedFill(worlds, raceModeItems, itemPool, raceModeLocations)); - - // Set race mode locations which had items placed at them as having expected items - for (auto raceModeLoc : raceModeLocations) - { - raceModeLoc->hasExpectedItem = true; - } - - // Recalculate major items since new items may now be required depending on - // what items were placed at race mode locations - determineMajorItems(worlds, itemPool, allLocations); - return FillError::NONE; -} - static FillError placeNonProgressLocationPlandomizerItems(WorldPool& worlds, ItemPool& itemPool) { LOG_TO_DEBUG("Placing Non-Progress Plandomizer Items"); @@ -744,10 +671,9 @@ FillError fill(WorldPool& worlds) determineMajorItems(worlds, itemPool, allLocations); FILL_ERROR_CHECK(placeNonProgressLocationPlandomizerItems(worlds, itemPool)); - // Handle dungeon items and race mode dungeons first if necessary. Generally + // Handle dungeon items first if necessary. Generally // we need to place items that go into more restrictive location pools first before // we can place other items. - FILL_ERROR_CHECK(placeRaceModeItems(worlds, itemPool, allLocations)); FILL_ERROR_CHECK(handleDungeonItems(worlds, itemPool)); // Recalculate major items again since new items may now be required depending on diff --git a/logic/Hints.cpp b/logic/Hints.cpp index bcc98600..0b3a70db 100644 --- a/logic/Hints.cpp +++ b/logic/Hints.cpp @@ -598,7 +598,7 @@ static HintError generateLocationHintLocations(World& world, std::vectorprogression && !location->hasBeenHinted && !location->isRaceModeLocation) + if (location->progression && !location->hasBeenHinted) { if (location->hintPriority == "Always") { @@ -649,7 +649,7 @@ static HintError assignHoHoHints(World& world, WorldPool& worlds, std::listcurrentItem.isTriforceShard() && !location->isRaceModeLocation) + if (location->currentItem.isTriforceShard()) { locations.push_back(location); LOG_AND_RETURN_IF_ERR(generateItemHintMessage(location)); diff --git a/logic/Location.hpp b/logic/Location.hpp index af8876ce..ffb7ef68 100644 --- a/logic/Location.hpp +++ b/logic/Location.hpp @@ -72,6 +72,7 @@ class Location std::unordered_set categories; bool progression; bool isRaceModeLocation; + uint8_t stageId = 0; bool plandomized; bool hasBeenHinted; bool hasKnownVanillaItem; @@ -114,6 +115,7 @@ class Location categories({LocationCategory::INVALID}), progression(false), isRaceModeLocation(false), + stageId(0), plandomized(false), hasBeenHinted(false), hasKnownVanillaItem(false), diff --git a/logic/Search.cpp b/logic/Search.cpp index 75aca12c..1ef48a4b 100644 --- a/logic/Search.cpp +++ b/logic/Search.cpp @@ -142,10 +142,10 @@ LocationPool search(const SearchMode& searchMode, WorldPool& worlds, ItemPool it do { - // push_back an empty sphere if we're generating the playthroughs if (searchMode == SearchMode::GeneratePlaythrough) { + worlds[0].eventSpheres.emplace_back(); worlds[0].playthroughSpheres.emplace_back(); worlds[0].entranceSpheres.emplace_back(); } @@ -155,60 +155,83 @@ LocationPool search(const SearchMode& searchMode, WorldPool& worlds, ItemPool it newThingsFound = false; // Loop through and see if there are any events that we are now accessible. // Add them to the ownedEvents list if they are. - for (auto eventItr = eventsToTry.begin(); eventItr != eventsToTry.end(); ) + std::set accessibleEvents = {}; + bool newEventsOrExits = false; + // Continuously loop through events and exits until no new events or exits are + // found. Since they can unlock each other, this is necessart for proper sphere calculations + do { - auto eventAccess = *eventItr; - if (ownedEvents.contains(eventAccess->event)) + newEventsOrExits = false; + for (auto eventItr = eventsToTry.begin(); eventItr != eventsToTry.end(); ) { - eventItr = eventsToTry.erase(eventItr); - continue; - } - if (evaluateRequirement(eventAccess->world, eventAccess->requirement, &ownedItems, &ownedEvents)) - { - newThingsFound = true; - eventItr = eventsToTry.erase(eventItr); - ownedEvents.insert(eventAccess->event); - } - else - { - eventItr++; // Only increment if we don't erase - } - } - - // Search each exit in the exitsToTry list and explore any new areas found as well. - // For any exits which we try and don't meet the requirements for, put them - // into exitsToTry for the next iteration. Any locations we come across will - // be added to locationsToTry. - for (auto exitItr = exitsToTry.begin(); exitItr != exitsToTry.end(); ) - { - auto exit = *exitItr; - if (evaluateRequirement(exit->getWorld(), exit->getRequirement(), &ownedItems, &ownedEvents)) { - exit->setFound(true); - // Erase the exit from the list of exits if we've met its requirement - exitItr = exitsToTry.erase(exitItr); - if (exit->getConnectedArea() == nullptr) + auto eventAccess = *eventItr; + auto event = eventAccess->event; + if (ownedEvents.contains(event) || accessibleEvents.contains(event)) { + eventItr = eventsToTry.erase(eventItr); continue; } - // If we're generating the playthrough, add it to the entranceSpheres if it's randomized - if (searchMode == SearchMode::GeneratePlaythrough && exit->isShuffled()) + if (evaluateRequirement(eventAccess->world, eventAccess->requirement, &ownedItems, &ownedEvents)) { - worlds[0].entranceSpheres.back().push_back(exit); + newThingsFound = true; + newEventsOrExits = true; + eventItr = eventsToTry.erase(eventItr); + // If we're generating the playthrough, add it to the eventSpheres + if (searchMode == SearchMode::GeneratePlaythrough && eventAccess->world->isSphereEvent(event)) + { + worlds[0].eventSpheres.back().push_back(event); + accessibleEvents.insert(event); + } + else + { + ownedEvents.insert(event); + } } - // If this exit's connected region has not been explored yet, then explore it - auto connectedArea = exit->getConnectedArea(); - if (!connectedArea->isAccessible) + else { - newThingsFound = true; - connectedArea->isAccessible = true; - explore(searchMode, worlds, ownedItems, ownedEvents, connectedArea, eventsToTry, exitsToTry, locationsToTry); + eventItr++; // Only increment if we don't erase } } - else + + // Search each exit in the exitsToTry list and explore any new areas found as well. + // For any exits which we try and don't meet the requirements for, put them + // into exitsToTry for the next iteration. Any locations we come across will + // be added to locationsToTry. + for (auto exitItr = exitsToTry.begin(); exitItr != exitsToTry.end(); ) { - exitItr++; // Only increment if we don't erase + auto exit = *exitItr; + if (evaluateRequirement(exit->getWorld(), exit->getRequirement(), &ownedItems, &ownedEvents)) { + exit->setFound(true); + // Erase the exit from the list of exits if we've met its requirement + exitItr = exitsToTry.erase(exitItr); + if (exit->getConnectedArea() == nullptr) + { + continue; + } + // If we're generating the playthrough, add it to the entranceSpheres if it's randomized + if (searchMode == SearchMode::GeneratePlaythrough && exit->isShuffled()) + { + worlds[0].entranceSpheres.back().push_back(exit); + } + // If this exit's connected region has not been explored yet, then explore it + auto connectedArea = exit->getConnectedArea(); + if (!connectedArea->isAccessible) + { + newThingsFound = true; + newEventsOrExits = true; + connectedArea->isAccessible = true; + explore(searchMode, worlds, ownedItems, ownedEvents, connectedArea, eventsToTry, exitsToTry, locationsToTry); + } + } + else + { + exitItr++; // Only increment if we don't erase + } } - } + } while (newEventsOrExits); + + + // Note which locations are now accessible on this iteration LocationPool accessibleThisIteration = {}; for (auto locItr = locationsToTry.begin(); locItr != locationsToTry.end(); ) @@ -237,6 +260,12 @@ LocationPool search(const SearchMode& searchMode, WorldPool& worlds, ItemPool it } } + // Add events from this sphere to ownedEvents + for (auto event : accessibleEvents) + { + ownedEvents.insert(event); + } + // Now apply any effects of newly accessible locations for the next iteration. // This lets us properly keep track of spheres for playthrough generation for (auto location : accessibleThisIteration) @@ -286,7 +315,7 @@ bool gameBeatable(WorldPool& worlds) // for beating the game static void pareDownPlaythrough(WorldPool& worlds) { - + auto& eventSpheres = worlds[0].eventSpheres; auto& playthroughSpheres = worlds[0].playthroughSpheres; auto& entranceSpheres = worlds[0].entranceSpheres; // Keep track of all locations we temporarily take items away from to give them back @@ -334,6 +363,7 @@ static void pareDownPlaythrough(WorldPool& worlds) // Now regenerate the playthrough with only the required locations incase // some spheres were flattened by non-required locations having progress items + eventSpheres.clear(); playthroughSpheres.clear(); entranceSpheres.clear(); ItemPool emptyItems = {}; @@ -375,21 +405,24 @@ static void pareDownPlaythrough(WorldPool& worlds) entrance->connect(area); } - // Get rid of any empty spheres in both the item playthrough and entrance playthrough - // based only on if the item playthrough has empty spheres. Both the playthroughs + // Get rid of any empty spheres in all playthroughs + // based only on if the item playthrough has empty spheres. All playthroughs // will have the same number of spheres, so we only need to conditionally // check one of them. + auto eventItr = eventSpheres.begin(); auto itemItr = playthroughSpheres.begin(); auto entranceItr = entranceSpheres.begin(); while (itemItr != playthroughSpheres.end()) { - if (itemItr->empty() && entranceItr->empty()) + if (itemItr->empty() && entranceItr->empty() && eventItr->empty()) { + eventItr = eventSpheres.erase(eventItr); itemItr = playthroughSpheres.erase(itemItr); entranceItr = entranceSpheres.erase(entranceItr); } else { + eventItr++; itemItr++; // Only incremement if we don't erase entranceItr++; } diff --git a/logic/SpoilerLog.cpp b/logic/SpoilerLog.cpp index 5855b136..f7071696 100644 --- a/logic/SpoilerLog.cpp +++ b/logic/SpoilerLog.cpp @@ -99,6 +99,7 @@ void generateSpoilerLog(WorldPool& worlds) // Playthroughs are stored in world 1 for the time being, regardless of how // many worlds there are. + auto& eventSpheres = worlds[0].eventSpheres; auto& playthroughSpheres = worlds[0].playthroughSpheres; auto& entranceSpheres = worlds[0].entranceSpheres; @@ -153,15 +154,21 @@ void generateSpoilerLog(WorldPool& worlds) LOG_TO_DEBUG("Print Playthrough"); spoilerLog << "Playthrough:" << std::endl; int sphere = 0; - for (auto sphereItr = playthroughSpheres.begin(); sphereItr != playthroughSpheres.end(); sphereItr++, sphere++) + auto eventItr = eventSpheres.begin(); + for (auto sphereItr = playthroughSpheres.begin(); sphereItr != playthroughSpheres.end(); sphereItr++, eventItr++, sphere++) { spoilerLog << " Sphere " << std::to_string(sphere) << ":" << std::endl; + auto& sphereEvents = *eventItr; auto& sphereLocations = *sphereItr; sphereLocations.sort(PointerLess()); for (auto location : sphereLocations) { spoilerLog << " " << getSpoilerFormatLocation(location, longestNameLength, worlds) << std::endl; } + for (auto event : sphereEvents) + { + spoilerLog << " " << worlds[0].reverseEventMap[event] << std::endl; + } } spoilerLog << std::endl; diff --git a/logic/World.cpp b/logic/World.cpp index f2e3c19f..cf54eecf 100644 --- a/logic/World.cpp +++ b/logic/World.cpp @@ -459,49 +459,7 @@ World::WorldLoadingError World::determineRaceModeDungeons(WorldPool& worlds) do { shufflePool(dungeonPool); - int setRaceModeDungeons = 0; - // Loop through all the dungeons and see if any of them have items plandomized - // within them (or within their dependent locations). If they have major items - // plandomized, then select those dungeons as race mode dungeons - if (settings.plandomizer && settings.progression_dungeons == ProgressionDungeons::RaceMode) - { - for (const auto& dungeon : dungeonPool) - { - auto allDungeonLocations = dungeon.locations; - // Add any outside dependent locations from this dungeon's locations - auto outsideLocs = dungeon.getOutsideDependentLocations(); - allDungeonLocations.insert(allDungeonLocations.end(), outsideLocs.begin(), outsideLocs.end()); - for (auto dungeonLocation : allDungeonLocations) - { - if (plandomizer.locations.contains(dungeonLocation) && !plandomizer.locations[dungeonLocation].isJunkItem()) - { - // However, if the dungeon's naturally assigned race mode location is junk or excluded then - // that's an error on the user's part. - Location* raceModeLocation = dungeon.raceModeLocation; - bool raceModeLocationIsAcceptable = raceModeLocation->progression && (!plandomizer.locations.contains(raceModeLocation) || !plandomizer.locations[raceModeLocation].isJunkItem()); - if (dungeon.hasNaturalRaceModeLocation && !raceModeLocationIsAcceptable) - { - ErrorLog::getInstance().log("Plandomizer Error: Junk item placed at race mode location in dungeon \"" + dungeon.name + "\" with potentially major item"); - LOG_ERR_AND_RETURN(WorldLoadingError::PLANDOMIZER_ERROR); - } - LOG_TO_DEBUG("Chose race mode dungeon : " + dungeon.name); - dungeons[dungeon.name].isRequiredDungeon = true; - setRaceModeDungeons++; - break; - } - } - } - } - - // If too many are set, return an error - if (setRaceModeDungeons > settings.num_required_dungeons) - { - ErrorLog::getInstance().log("Plandomizer Error: Too many race mode locations set with potentially major items"); - ErrorLog::getInstance().log("Set race mode locations: " + std::to_string(setRaceModeDungeons)); - ErrorLog::getInstance().log("Set number of race mode dungeons: " + std::to_string(settings.num_required_dungeons)); - LOG_ERR_AND_RETURN(WorldLoadingError::PLANDOMIZER_ERROR); - } // Now check again and fill in any more dungeons that may be necessary // Also set non-race mode dungeons locations as non-progress @@ -512,11 +470,10 @@ World::WorldLoadingError World::determineRaceModeDungeons(WorldPool& worlds) { continue; } - // If this dungeon has a junk item placed as its race mode - // location or the race mode location is excluded, then skip it + // If this dungeon's race mode location is excluded, then skip it auto raceModeLocation = dungeon.raceModeLocation; - bool raceModeLocationIsAcceptable = raceModeLocation->progression && (!plandomizer.locations.contains(raceModeLocation) || !plandomizer.locations[raceModeLocation].isJunkItem()); - if (dungeon.hasNaturalRaceModeLocation && raceModeLocationIsAcceptable && setRaceModeDungeons < settings.num_required_dungeons) + bool raceModeLocationIsAcceptable = raceModeLocation->progression; + if (raceModeLocationIsAcceptable && setRaceModeDungeons < settings.num_required_dungeons) { LOG_TO_DEBUG("Chose race mode dungeon : " + dungeon.name); dungeons[dungeon.name].isRequiredDungeon = true; @@ -588,9 +545,18 @@ World::WorldLoadingError World::determineRaceModeDungeons(WorldPool& worlds) nonProgressRollbacks.clear(); } } while (!successfullyChoseRaceModeDungeons); + + // Set setting variables for required bosses + for (const auto& [dungeonName, dungeon] : dungeons) + { + if (dungeon.isRequiredDungeon) + { + settings.setRequiredBoss(dungeon.raceModeLocation->getName(), true); + } + } } - return WorldLoadingError::NONE; + return reparseMacro("All Required Bosses Defeated"); } RequirementError World::parseMacro(const std::string& macroLogicExpression, Requirement& reqOut) @@ -625,6 +591,24 @@ World::WorldLoadingError World::loadMacros(const YAML::Node& macroListTree) return WorldLoadingError::NONE; } +// Reparses a macro for specific situations (i.e. setting change) +World::WorldLoadingError World::reparseMacro(const std::string& macroName) +{ + if (!macroStrings.contains(macroName)) + { + return WorldLoadingError::MACRO_DOES_NOT_EXIST; + } + + auto& macroString = macroStrings[macroName]; + if (const RequirementError err = parseMacro(macroString, macros[macroNameMap[macroName]]); err != RequirementError::NONE) + { + lastError << " | Encountered reparsing macro of name " << macroName; + return WorldLoadingError::BAD_REQUIREMENT; + } + + return WorldLoadingError::NONE; +} + World::WorldLoadingError World::loadLocation(const YAML::Node& locationObject) { YAML_FIELD_CHECK(locationObject, "Names", WorldLoadingError::ITEM_MISSING_KEY); @@ -729,6 +713,11 @@ World::WorldLoadingError World::loadLocation(const YAML::Node& locationObject) raceModeLocations.push_back(location); } + if(locationObject["Stage ID"]) + { + location->stageId = locationObject["Stage ID"].as(); + } + if (locationObject["Goal Names"]) { for (const auto& language : Text::supported_languages) @@ -1471,6 +1460,21 @@ void World::flattenLogicRequirements() } } +bool World::isSphereEvent(const EventId& event) +{ + static const std::unordered_set sphereEvents = { + "Gohma Defeated", + "Kalle Demos Defeated", + "Gohdan Defeated", + "Helmaroc King Defeated", + "Jalhalla Defeated", + "Molgera Defeated", + }; + + auto eventName = reverseEventMap[event]; + return sphereEvents.contains(eventName) && settings.isRequiredBoss(eventName); +} + std::string World::errorToName(WorldLoadingError err) { switch(err) diff --git a/logic/World.hpp b/logic/World.hpp index 8e19f88c..37472d4d 100644 --- a/logic/World.hpp +++ b/logic/World.hpp @@ -80,7 +80,6 @@ class World ItemPool& getStartingItemsReference(); int getStartingHeartCount() const; LocationPool getLocations(bool onlyProgression = false); - LocationPool getRaceModeLocations() const; LocationPool getProgressionLocations(); size_t getNumOverworldProgressionLocations(); Area* getArea(const std::string& areaName); @@ -106,6 +105,7 @@ class World void addLocation(const std::string& locationName); Item getItem(const std::string& itemName); void flattenLogicRequirements(); + bool isSphereEvent(const EventId& event); // Stuff to help with debugging std::string errorToName(WorldLoadingError err); @@ -134,6 +134,7 @@ class World Location* bigOctoFairyHintLocation = nullptr; std::list> playthroughSpheres = {}; std::list> entranceSpheres = {}; + std::list> eventSpheres = {}; std::map chartMappings = {}; Settings originalSettings; @@ -144,10 +145,8 @@ class World private: bool chartLeadsToSunkenTreasure(Location* location, const std::string& itemPrefix); - - - // WorldLoadingError parseRequirementString( const std::string& str, Requirement& req); RequirementError parseMacro(const std::string& macroLogicExpression, Requirement& reqOut); + WorldLoadingError reparseMacro(const std::string& macroName); WorldLoadingError loadExit(const std::string& connectedAreaName, const std::string& logicExpression, Entrance& loadedExit, const std::string& parentArea); WorldLoadingError loadLocation(const YAML::Node& locationObject); WorldLoadingError loadEventRequirement(const std::string& eventName, const std::string& logicExpression, EventAccess& eventAccess); diff --git a/logic/data/location_data.yaml b/logic/data/location_data.yaml index 2e9bbfc6..7703413d 100644 --- a/logic/data/location_data.yaml +++ b/logic/data/location_data.yaml @@ -329,6 +329,7 @@ French: Forteresse Maudite - Réceptacle de Cœur du Roi Cuirasse Original Item: Heart Container Race Mode Location: true + Stage ID: 2 Goal Names: English: Helmaroc King Spanish: Kranos @@ -3737,6 +3738,7 @@ French: Caverne du Dragon - Réceptacle de Cœur de Gohma Original Item: Heart Container Race Mode Location: true + Stage ID: 3 Goal Names: English: Gohma Spanish: Gohma @@ -3979,6 +3981,7 @@ French: Bois Défendus - Réceptacle de Cœur de Karle Demos Original Item: Heart Container Race Mode Location: true + Stage ID: 4 Goal Names: English: Kalle Demos Spanish: Vilipendulia @@ -4197,6 +4200,7 @@ French: Tour des Dieux - Réceptacle de Cœur de Gordon Original Item: Heart Container Race Mode Location: true + Stage ID: 5 Goal Names: English: Gohdan Spanish: Deus Probatur @@ -4439,6 +4443,7 @@ French: Temple de la Terre - Réceptacle de Cœur de Jay Harla Original Item: Heart Container Race Mode Location: true + Stage ID: 6 Goal Names: English: Jalhalla Spanish: Fati Triputis @@ -4657,6 +4662,7 @@ French: Temple du Vent - Réceptacle de Cœur de Gayla Original Item: Heart Container Race Mode Location: true + Stage ID: 7 Goal Names: English: Molgera Spanish: Verminus diff --git a/logic/data/macros.yaml b/logic/data/macros.yaml index d2477673..e11d2f88 100644 --- a/logic/data/macros.yaml +++ b/logic/data/macros.yaml @@ -47,6 +47,12 @@ Deluxe Picto Box: count(2, Progressive_Picto_Box) Magic: count(1, Progressive_Magic_Meter) Double Magic: count(2, Progressive_Magic_Meter) or (count(1, Progressive_Magic_Meter) and Progressive_Magic_Always_Double == true) All 8 Shards: Triforce_Shard_1 and Triforce_Shard_2 and Triforce_Shard_3 and Triforce_Shard_4 and Triforce_Shard_5 and Triforce_Shard_6 and Triforce_Shard_7 and Triforce_Shard_8 +All Required Bosses Defeated: ('Gohma_Defeated' or Gohma_Required == false) and + ('Kalle_Demos_Defeated' or Kalle_Demos_Required == false) and + ('Gohdan_Defeated' or Gohdan_Required == false) and + ('Helmaroc_King_Defeated' or Helmaroc_King_Required == false) and + ('Jalhalla_Defeated' or Jalhalla_Required == false) and + ('Molgera_Defeated' or Molgera_Required == false) Can Defeat Phantom Ganon: (Outside_Swordless_Mode and Master_Sword) or (In_Swordless_Mode and Skull_Hammer) Can Get Past Hyrule Barrier: In_Swordless_Mode or (Full_Power_Master_Sword and All_8_Shards) Can Defeat Puppet Ganon: health(3) and Light_Arrows and Boomerang diff --git a/logic/data/world.yaml b/logic/data/world.yaml index c78fe257..910db964 100644 --- a/logic/data/world.yaml +++ b/logic/data/world.yaml @@ -40,16 +40,16 @@ Locations: Mailbox - Letter from Hoskit's Girlfriend: Can_Farm_Golden_Feathers and Can_Play_SoP and Spoils_Bag and can_access(Dragon Roost Rito Aerie) Mailbox - Letter from Baito's Mother: Can_Play_SoP and Note_to_Mom and Delivery_Bag - Mailbox - Letter from Baito: Can_Defeat_Jalhalla and can_access(Jalhalla Battle Arena) and Note_to_Mom and Delivery_Bag + Mailbox - Letter from Baito: Note_to_Mom and Delivery_Bag and 'Jalhalla_Defeated' Mailbox - Letter from Komali's Father: Farores_Pearl Mailbox - Letter Advertising Bombs: Bombs Mailbox - Letter Advertising Rock Spire Shop Ship: Wallet_Upgrade Mailbox - Beedle's Silver Membership Reward: Can_Play_SoP and (Bait_Bag or Bombs or Heros_Bow or Empty_Bottle) Mailbox - Beedle's Gold Membership Reward: Can_Play_SoP and (Bait_Bag or Bombs or Heros_Bow or Empty_Bottle) - Mailbox - Letter from Orca: Can_Defeat_Kalle_Demos and can_access(Kalle Demos Battle Arena) + Mailbox - Letter from Orca: "'Kalle_Demos_Defeated'" Mailbox - Letter from Grandma: Can_Play_SoP and can_access(Outset Link's House) and Empty_Bottle and 'Can_Get_Fairies' - Mailbox - Letter from Aryll: can_access(Helmaroc King Battle Arena) and Can_Defeat_Helmaroc_King and Can_Play_SoP - Mailbox - Letter from Tingle: can_access(Helmaroc King Battle Arena) and Can_Defeat_Helmaroc_King and Can_Play_SoP and 'Rescued_Tingle' + Mailbox - Letter from Aryll: Can_Play_SoP and 'Helmaroc_King_Defeated' + Mailbox - Letter from Tingle: Can_Play_SoP and 'Rescued_Tingle' and 'Helmaroc_King_Defeated' - Name: The Great Sea Hint Region: The Great Sea @@ -360,6 +360,8 @@ Forsaken Fortress Before Second Sidle Gap: Nothing # Can jump back across the platforms - Name: Helmaroc King Battle Arena + Events: + Helmaroc King Defeated: Can_Defeat_Helmaroc_King Locations: Forsaken Fortress - Helmaroc King Heart Container: Can_Defeat_Helmaroc_King Exits: @@ -2152,10 +2154,12 @@ - Name: Gohma Battle Arena Boss Room: Dragon Roost Cavern + Events: + Gohma Defeated: Can_Defeat_Gohma Locations: - Dragon Roost Cavern - Gohma Heart Container: Grappling_Hook + Dragon Roost Cavern - Gohma Heart Container: Can_Defeat_Gohma Exits: - DRC Boss Door Room Across Lava: Grappling_Hook + DRC Boss Door Room Across Lava: Can_Defeat_Gohma - Name: FW First Room Dungeon: Forbidden Woods @@ -2401,6 +2405,8 @@ - Name: Kalle Demos Battle Arena Boss Room: Forbidden Woods + Events: + Kalle Demos Defeated: Can_Defeat_Kalle_Demos Locations: Forbidden Woods - Kalle Demos Heart Container: Can_Defeat_Kalle_Demos Exits: @@ -2619,6 +2625,8 @@ - Name: Gohdan Battle Arena Boss Room: Tower of the Gods + Events: + Gohdan Defeated: Can_Defeat_Gohdan Locations: Tower of the Gods - Gohdan Heart Container: Can_Defeat_Gohdan Exits: @@ -2838,6 +2846,8 @@ - Name: Jalhalla Battle Arena Boss Room: Earth Temple + Events: + Jalhalla Defeated: Can_Defeat_Jalhalla Locations: Earth Temple - Jalhalla Heart Container: Can_Defeat_Jalhalla Exits: @@ -3125,6 +3135,8 @@ - Name: Molgera Battle Arena Boss Room: Wind Temple + Events: + Molgera Defeated: Can_Defeat_Molgera Locations: Wind Temple - Molgera Heart Container: Can_Defeat_Molgera Exits: @@ -3253,7 +3265,7 @@ - Name: Ganon's Tower Final Staircase Hint Region: Ganon's Tower Exits: - Ganon's Tower Puppet Ganon Boss Arena: Can_Defeat_Moblins and Can_Defeat_Mighty_Darknuts + Ganon's Tower Puppet Ganon Boss Arena: Can_Defeat_Moblins and Can_Defeat_Mighty_Darknuts and All_Required_Bosses_Defeated Ganon's Tower Middle Hub Room: Nothing - Name: Ganon's Tower Puppet Ganon Boss Arena diff --git a/options.cpp b/options.cpp index 22601fb5..fe591f4b 100644 --- a/options.cpp +++ b/options.cpp @@ -7,6 +7,7 @@ #include #include #include +#include Settings::Settings() { resetDefaultSettings(); @@ -119,6 +120,13 @@ void Settings::resetDefaultSettings() { open_drc = false; progressive_magic_always_double = false; + gohma_required = false; + kalle_demos_required = false; + gohdan_required = false; + helmaroc_king_required = false; + jalhalla_required = false; + molgera_required = false; + return; } @@ -336,6 +344,18 @@ uint8_t Settings::getSetting(const Option& option) const { return static_cast>(gyroscope); case Option::UIDisplay: return static_cast>(ui_display); + case Option::GohmaRequired: + return gohma_required; + case Option::KalleDemosRequired: + return kalle_demos_required; + case Option::GohdanRequired: + return gohdan_required; + case Option::HelmarocKingRequired: + return helmaroc_king_required; + case Option::JalhallaRequired: + return jalhalla_required; + case Option::MolgeraRequired: + return molgera_required; default: return 0; } @@ -531,6 +551,18 @@ void Settings::setSetting(const Option& option, const size_t& value) { gyroscope = static_cast(value); return; case Option::UIDisplay: ui_display = static_cast(value); return; + case Option::GohmaRequired: + gohma_required = value; return; + case Option::KalleDemosRequired: + kalle_demos_required = value; return; + case Option::GohdanRequired: + gohdan_required = value; return; + case Option::HelmarocKingRequired: + helmaroc_king_required = value; return; + case Option::JalhallaRequired: + jalhalla_required = value; return; + case Option::MolgeraRequired: + molgera_required = value; return; default: return; } @@ -546,6 +578,42 @@ int Settings::evaluateOption(const std::string& optionStr) const { return -1; } +void Settings::setRequiredBoss(const std::string& name, bool value) { + if (Utility::Str::contains(name, "Gohma")) + gohma_required = value; + else if (Utility::Str::contains(name, "Kalle Demos")) + kalle_demos_required = value; + else if (Utility::Str::contains(name, "Gohdan")) + gohdan_required = value; + else if (Utility::Str::contains(name, "Helmaroc King")) + helmaroc_king_required = value; + else if (Utility::Str::contains(name, "Jalhalla")) + jalhalla_required = value; + else if (Utility::Str::contains(name, "Molgera")) + molgera_required = value; + else + ErrorLog::getInstance().log(std::string("Unknown Boss Location \"") + name + "\""); +} + +bool Settings::isRequiredBoss(const std::string& name) const { + if (Utility::Str::contains(name, "Gohma")) + return gohma_required; + else if (Utility::Str::contains(name, "Kalle Demos")) + return kalle_demos_required; + else if (Utility::Str::contains(name, "Gohdan")) + return gohdan_required; + else if (Utility::Str::contains(name, "Helmaroc King")) + return helmaroc_king_required; + else if (Utility::Str::contains(name, "Jalhalla")) + return jalhalla_required; + else if (Utility::Str::contains(name, "Molgera")) + return molgera_required; + else + ErrorLog::getInstance().log(std::string("Unknown Boss Location \"") + name + "\""); + + return false; +} + static const std::unordered_map nameGameVersionMap = { {"HD", GameVersion::HD}, {"SD", GameVersion::SD} @@ -977,6 +1045,12 @@ Option nameToSetting(const std::string& name) { {"First-Person Camera", Option::FirstPersonCamera}, {"Gyroscope", Option::Gyroscope}, {"UI Display", Option::UIDisplay}, + {"Gohma Required", Option::GohmaRequired}, + {"Kalle Demos Required", Option::KalleDemosRequired}, + {"Gohdan Required", Option::GohdanRequired}, + {"Helmaroc King Required", Option::HelmarocKingRequired}, + {"Jalhalla Required", Option::JalhallaRequired}, + {"Molgera Required", Option::MolgeraRequired}, }; if (optionNameMap.contains(name)) @@ -1082,6 +1156,12 @@ std::string settingToName(const Option& setting) { {Option::FirstPersonCamera, "First-Person Camera"}, {Option::Gyroscope, "Gyroscope"}, {Option::UIDisplay, "UI Display"}, + {Option::GohmaRequired, "Gohma Required"}, + {Option::KalleDemosRequired, "Kalle Demos Required"}, + {Option::GohdanRequired, "Gohdan Required"}, + {Option::HelmarocKingRequired, "Helmaroc King Required"}, + {Option::JalhallaRequired, "Jalhalla Required"}, + {Option::MolgeraRequired, "Molgera Required"}, }; if (optionNameMap.contains(setting)) diff --git a/options.hpp b/options.hpp index 17b4e8f9..b5c3759a 100644 --- a/options.hpp +++ b/options.hpp @@ -218,6 +218,14 @@ enum struct Option { Gyroscope, UIDisplay, + // Required Bosses (not exposed to the user) + GohmaRequired, + KalleDemosRequired, + GohdanRequired, + HelmarocKingRequired, + JalhallaRequired, + MolgeraRequired, + COUNT }; @@ -329,6 +337,13 @@ class Settings { CustomModel selectedModel; + bool gohma_required; + bool kalle_demos_required; + bool gohdan_required; + bool helmaroc_king_required; + bool jalhalla_required; + bool molgera_required; + Settings(); void resetDefaultSettings(); void resetDefaultPreferences(const bool& paths = false); @@ -338,6 +353,9 @@ class Settings { int evaluateOption(const std::string& optionStr) const; bool anyEntrancesShuffled() const; + + void setRequiredBoss(const std::string& name, bool value); + bool isRequiredBoss(const std::string& name) const; }; GameVersion nameToGameVersion(const std::string& name); diff --git a/tweaks.cpp b/tweaks.cpp index d97ffa5e..57440c05 100644 --- a/tweaks.cpp +++ b/tweaks.cpp @@ -2216,6 +2216,35 @@ TweakError update_starting_gear(const Settings& settings) { return TweakError::NONE; } +TweakError update_required_bosses(const World& world) { + if(custom_symbols.count("required_bosses") == 0) LOG_ERR_AND_RETURN(TweakError::MISSING_SYMBOL); + const uint32_t required_bosses_array_addr = custom_symbols.at("required_bosses"); + + std::unordered_set requiredBossStageIds = {}; + for (const auto& [dungeonName, dungeon] : world.dungeons) + { + if (dungeon.isRequiredDungeon) + { + requiredBossStageIds.insert(dungeon.raceModeLocation->stageId); + } + } + + g_session.openGameFile("code/cking.rpx@RPX@ELF").addAction([=](RandoSession* session, FileType* data) -> int { + CAST_ENTRY_TO_FILETYPE(elf, FileTypes::ELF, data) + + size_t i = 0; + for (auto stageId : requiredBossStageIds) + { + RPX_ERROR_CHECK(elfUtil::write_u8(elf, elfUtil::AddressToOffset(elf, required_bosses_array_addr + i), stageId)); + ++i; + } + RPX_ERROR_CHECK(elfUtil::write_u8(elf, elfUtil::AddressToOffset(elf, required_bosses_array_addr + i), 0xFF)); + return true; + }); + + return TweakError::NONE; +} + TweakError add_hint_signs() { for (const auto& language : Text::supported_languages) { RandoSession::CacheEntry& entry = g_session.openGameFile("content/Common/Pack/permanent_2d_Us" + language + ".pack@SARC@message_msbt.szs@YAZ0@SARC@message.msbt@MSBT"); @@ -4093,6 +4122,7 @@ TweakError apply_necessary_tweaks(const Settings& settings) { LOG_AND_RETURN_IF_ERR(Apply_Patch(Utility::get_data_path() / "asm/patch_diffs/flexible_item_locations_diff.yaml")); LOG_AND_RETURN_IF_ERR(Apply_Patch(Utility::get_data_path() / "asm/patch_diffs/fix_vanilla_bugs_diff.yaml")); LOG_AND_RETURN_IF_ERR(Apply_Patch(Utility::get_data_path() / "asm/patch_diffs/misc_rando_features_diff.yaml")); + LOG_AND_RETURN_IF_ERR(Apply_Patch(Utility::get_data_path() / "asm/patch_diffs/required_bosses_diff.yaml")); LOG_AND_RETURN_IF_ERR(Apply_Patch(Utility::get_data_path() / "asm/patch_diffs/switch_op_diff.yaml")); g_session.openGameFile("code/cking.rpx@RPX@ELF").addAction([](RandoSession* session, FileType* data) -> int { @@ -4228,6 +4258,7 @@ TweakError apply_necessary_post_randomization_tweaks(World& world/* , const bool TWEAK_ERR_CHECK(add_ganons_tower_warp_to_ff2()); TWEAK_ERR_CHECK(add_more_magic_jars()); TWEAK_ERR_CHECK(add_pirate_ship_to_windfall()); + TWEAK_ERR_CHECK(update_required_bosses(world)); TWEAK_ERR_CHECK(add_hint_signs()); TWEAK_ERR_CHECK(prevent_reverse_door_softlocks()); TWEAK_ERR_CHECK(add_barren_dungeon_hint_triggers(world));