def from_json_dict(cls, json_dict: dict) -> "LayoutConfiguration": return LayoutConfiguration( trick_level_configuration=TrickLevelConfiguration.from_json( json_dict["trick_level"]), damage_strictness=LayoutDamageStrictness( json_dict["damage_strictness"]), sky_temple_keys=LayoutSkyTempleKeyMode( json_dict["sky_temple_keys"]), elevators=LayoutElevators(json_dict["elevators"]), starting_location=StartingLocation.from_json( json_dict["starting_location"]), available_locations=AvailableLocationsConfiguration.from_json( json_dict["available_locations"]), major_items_configuration=MajorItemsConfiguration.from_json( json_dict["major_items_configuration"], default_prime2_item_database(), ), ammo_configuration=AmmoConfiguration.from_json( json_dict["ammo_configuration"], default_prime2_item_database(), ), translator_configuration=TranslatorConfiguration.from_json( json_dict["translator_configuration"]), hints=HintConfiguration.from_json(json_dict["hints"]), beam_configuration=BeamConfiguration.from_json( json_dict["beam_configuration"]), skip_final_bosses=json_dict["skip_final_bosses"], energy_per_tank=json_dict["energy_per_tank"], split_beam_ammo=json_dict["split_beam_ammo"], )
def _create_config_for(game: RandovaniaGame, replace: dict): with get_data_path().joinpath("item_database", game.value, "default_state", "major-items.json").open() as open_file: default_data = json.load(open_file) default_data["minimum_random_starting_items"] = 0 default_data["maximum_random_starting_items"] = 0 data = copy.deepcopy(default_data) for field, value in replace.items(): for key, inner_value in value.items(): data[field][key] = inner_value return ( MajorItemsConfiguration.from_json(default_data, game), MajorItemsConfiguration.from_json(data, game), )
def test_decode(config_with_data): # Setup data, expected = config_with_data # Run decoder = BitPackDecoder(data) result = MajorItemsConfiguration.bit_pack_unpack(decoder, {}) # Assert assert result == expected
def test_decode_prime2(prime2_data): # Setup data, default, expected = prime2_data # Run decoder = BitPackDecoder(data) result = MajorItemsConfiguration.bit_pack_unpack(decoder, {"reference": default}) # Assert assert result == expected
def get_default_major_items_configurations() -> MajorItemsConfiguration: item_database = default_prime2_item_database() with get_data_path().joinpath("item_database", "default_state", "major-items.json").open() as open_file: data = json.load(open_file) return MajorItemsConfiguration( items_state={ item_database.major_items[name]: MajorItemState.from_json(state_data) for name, state_data in data["items_state"].items() } )
def _config_with_data(request): with get_data_path().joinpath("item_database", "default_state", "major-items.json").open() as open_file: data = json.load(open_file) data["progressive_suit"] = True data["progressive_grapple"] = True data["progressive_launcher"] = True data["minimum_random_starting_items"] = True data["maximum_random_starting_items"] = True for field, value in request.param["replace"].items(): for key, inner_value in value.items(): data[field][key] = inner_value return request.param["encoded"], MajorItemsConfiguration.from_json(data, default_prime2_item_database())
def from_json_dict(cls, json_dict: dict) -> "LayoutConfiguration": return cls.from_params( trick_level_configuration=TrickLevelConfiguration.from_json(json_dict["trick_level"]), sky_temple_keys=LayoutSkyTempleKeyMode(json_dict["sky_temple_keys"]), elevators=LayoutElevators(json_dict["elevators"]), starting_location=StartingLocation.from_json(json_dict["starting_location"]), randomization_mode=RandomizationMode(json_dict["randomization_mode"]), major_items_configuration=MajorItemsConfiguration.from_json( json_dict["major_items_configuration"], default_prime2_item_database(), ), ammo_configuration=AmmoConfiguration.from_json( json_dict["ammo_configuration"], default_prime2_item_database(), ), translator_configuration=TranslatorConfiguration.from_json(json_dict["translator_configuration"]), hints=HintConfiguration.from_json(json_dict["hints"]), split_beam_ammo=json_dict["split_beam_ammo"], )
def test_migrate_from_v1(option): old_data = { "version": 1, "options": { "hud_memo_popup_removal": True, "game_files_path": None, "show_advanced_options": False, "display_generate_help": True, "include_menu_mod": False, "layout_logic": "normal", "layout_mode": "standard", "layout_sky_temple_keys": "randomized", "layout_elevators": "vanilla", "layout_item_loss": "enabled", "quantity_for_pickup": {} } } # Run new_data = randovania.interface_common.persisted_options.get_persisted_options_from_data( old_data) option.load_from_persisted_options(new_data, False) # Assert expected_data = { "last_changelog_displayed": "0.22.0", "patcher_configuration": { "menu_mod": False, "warp_to_start": True, "pickup_model_style": "all-visible", "pickup_model_data_source": "etm", }, "layout_configuration": { "trick_level": { "global_level": "normal", "specific_levels": {}, }, "sky_temple_keys": 9, "starting_resources": "vanilla-item-loss-enabled", "starting_location": "ship", "elevators": "vanilla", "randomization_mode": "full", "major_items_configuration": MajorItemsConfiguration.default().as_json, "ammo_configuration": AmmoConfiguration.default().as_json, "translator_configuration": { "translator_requirement": {}, "fixed_gfmc_compound": True, "fixed_torvus_temple": True, "fixed_great_temple": True, }, "hints": {}, "split_beam_ammo": True, }, "cosmetic_patches": { "disable_hud_popup": True, "speed_up_credits": True, "open_map": True, "pickup_markers": True, } } assert new_data == expected_data