Esempio n. 1
0
def _create_pickup_list(cosmetic_patches: EchoesCosmeticPatches,
                        configuration: BaseConfiguration,
                        game: GameDescription, patches: GamePatches,
                        players_config: PlayersConfiguration, rng: Random):
    useless_target = PickupTarget(
        pickup_creator.create_echoes_useless_pickup(game.resource_database),
        players_config.player_index)

    if cosmetic_patches.disable_hud_popup:
        memo_data = _simplified_memo_data()
    else:
        memo_data = default_prime2_memo_data()

    pickup_list = pickup_exporter.export_all_indices(
        patches,
        useless_target,
        game.world_list,
        rng,
        configuration.pickup_model_style,
        configuration.pickup_model_data_source,
        exporter=pickup_exporter.create_pickup_exporter(
            game, memo_data, players_config),
        visual_etm=pickup_creator.create_visual_etm(),
    )

    return [
        echoes_pickup_details_to_patcher(details, rng)
        for details in pickup_list
    ]
Esempio n. 2
0
def test_get_single_hud_text_all_major_items(echoes_item_database, echoes_resource_database):
    memo_data = default_prime2_memo_data()

    # Run
    for item in echoes_item_database.major_items.values():
        pickup = pickup_creator.create_major_item(item, MajorItemState(), False, echoes_resource_database, None, False)

        result = patcher_file._get_all_hud_text(pickup, memo_data)
        for i, progression in enumerate(pickup.resources):
            assert progression.name in result[i]
        assert result
        for line in result:
            assert len(line) > 10
            assert isinstance(line, str)
def test_create_pickup_all_from_pool(echoes_resource_database,
                                     default_layout_configuration,
                                     disable_hud_popup: bool):
    item_pool = pool_creator.calculate_pool_results(
        default_layout_configuration, echoes_resource_database)
    index = PickupIndex(0)
    if disable_hud_popup:
        memo_data = patcher_file._SimplifiedMemo()
    else:
        memo_data = default_prime2_memo_data()
    creator = patcher_file.PickupCreatorSolo(MagicMock(), memo_data)

    for item in item_pool.pickups:
        creator.create_pickup(index, PickupTarget(item, 0), item,
                              PickupModelStyle.ALL_VISIBLE)
def test_get_single_hud_text_all_major_items(echoes_item_database, echoes_resource_database):
    memo_data = default_database.default_prime2_memo_data()

    # Run
    for item in echoes_item_database.major_items.values():
        pickup = pickup_creator.create_major_item(item, MajorItemState(), False, echoes_resource_database, None, False)

        result = pickup_exporter._get_all_hud_text(pickup_exporter._conditional_resources_for_pickup(pickup),
                                                   memo_data)
        for i, progression in enumerate(pickup.progression):
            assert progression[0].long_name in result[i]
        assert result
        for line in result:
            assert len(line) > 10
            assert isinstance(line, str)
def test_create_pickup_all_from_pool(echoes_resource_database,
                                     disable_hud_popup: bool
                                     ):
    layout_configuration = LayoutConfiguration.from_params()
    item_pool = pool_creator.calculate_pool_results(layout_configuration, echoes_resource_database)[0]
    index = PickupIndex(0)
    if disable_hud_popup:
        memo_data = None
    else:
        memo_data = default_prime2_memo_data()

    for item in item_pool:
        try:
            patcher_file._create_pickup(index, item, item, PickupModelStyle.ALL_VISIBLE, memo_data)
        except Exception as e:
            assert str(e) == item.name
Esempio n. 6
0
def test_create_pickup_all_from_pool(echoes_resource_database,
                                     default_layout_configuration,
                                     disable_hud_popup: bool):
    item_pool = pool_creator.calculate_pool_results(
        default_layout_configuration, echoes_resource_database)
    index = PickupIndex(0)
    if disable_hud_popup:
        memo_data = claris_patcher_file._simplified_memo_data()
    else:
        memo_data = default_prime2_memo_data()
    creator = pickup_exporter.PickupExporterSolo(memo_data)

    for item in item_pool.pickups:
        data = creator.export(index, PickupTarget(item, 0), item,
                              PickupModelStyle.ALL_VISIBLE)
        for hud_text in data.hud_text:
            assert not hud_text.startswith("Locked")
Esempio n. 7
0
def test_pickup_data_for_pb_expansion_locked(simplified, echoes_item_database, echoes_resource_database):
    # Setup
    pickup = pickup_creator.create_ammo_expansion(
        echoes_item_database.ammo["Power Bomb Expansion"],
        [2],
        True,
        echoes_resource_database,
    )
    if simplified:
        memo = patch_data_factory._simplified_memo_data()
        hud_text = [
            "Power Bomb Expansion acquired, but the main Power Bomb is required to use it.",
            "Power Bomb Expansion acquired!",
        ]
    else:
        memo = default_database.default_prime2_memo_data()
        hud_text = [
            "Power Bomb Expansion acquired! \n"
            "Without the main Power Bomb item, you are still unable to release Power Bombs.",
            "Power Bomb Expansion acquired! \nMaximum Power Bomb carrying capacity increased by 2.",
        ]

    creator = pickup_exporter.PickupExporterSolo(memo)

    # Run
    details = creator.export(PickupIndex(0), PickupTarget(pickup, 0), pickup, PickupModelStyle.ALL_VISIBLE)
    result = patch_data_factory.echoes_pickup_details_to_patcher(details, MagicMock())

    # Assert
    assert result == {
        "pickup_index": 0,
        "scan": "Power Bomb Expansion. Provides 2 Power Bombs and 1 Item Percentage",
        "model": {"game": "prime2", "name": "PowerBombExpansion"},
        "hud_text": hud_text,
        'resources': [{'amount': 2, 'index': 72},
                      {'amount': 1, 'index': 47}],
        "conditional_resources": [
            {'item': 43,
             'resources': [{'amount': 2, 'index': 43},
                           {'amount': 1, 'index': 47}]}
        ],
        "convert": [],
    }
Esempio n. 8
0
def create_patcher_file(description: LayoutDescription,
                        players_config: PlayersConfiguration,
                        cosmetic_patches: CosmeticPatches,
                        ) -> dict:
    """

    :param description:
    :param players_config:
    :param cosmetic_patches:
    :return:
    """
    preset = description.permalink.get_preset(players_config.player_index)
    patcher_config = preset.patcher_configuration
    layout = preset.layout_configuration
    patches = description.all_patches[players_config.player_index]
    rng = Random(description.permalink.as_str)

    game = data_reader.decode_data(layout.game_data)
    useless_target = PickupTarget(pickup_creator.create_useless_pickup(game.resource_database),
                                  players_config.player_index)

    result = {}
    _add_header_data_to_result(description, result)

    # Add Spawn Point
    result["spawn_point"] = _create_spawn_point_field(patches, game.resource_database)

    result["starting_popup"] = _create_starting_popup(layout, game.resource_database, patches.starting_items)

    # Add the pickups
    if description.permalink.player_count == 1:
        if cosmetic_patches.disable_hud_popup:
            memo_data = _simplified_memo_data()
        else:
            memo_data = default_prime2_memo_data()
        creator = PickupCreatorSolo(rng, memo_data)
    else:
        creator = PickupCreatorMulti(rng, players_config.player_names)

    result["pickups"] = _create_pickup_list(patches,
                                            useless_target, _TOTAL_PICKUP_COUNT,
                                            rng,
                                            patcher_config.pickup_model_style,
                                            patcher_config.pickup_model_data_source,
                                            creator=creator,
                                            )

    # Add the elevators
    result["elevators"] = _create_elevators_field(patches, game)

    # Add translators
    result["translator_gates"] = _create_translator_gates_field(patches.translator_gates)

    # Scan hints
    result["string_patches"] = _create_string_patches(layout.hints, game, description.all_patches, players_config, rng)

    # TODO: if we're starting at ship, needs to collect 9 sky temple keys and want item loss,
    # we should disable hive_chamber_b_post_state
    result["specific_patches"] = {
        "hive_chamber_b_post_state": True,
        "intro_in_post_state": True,
        "warp_to_start": patcher_config.warp_to_start,
        "speed_up_credits": cosmetic_patches.speed_up_credits,
        "disable_hud_popup": cosmetic_patches.disable_hud_popup,
        "pickup_map_icons": cosmetic_patches.pickup_markers,
        "full_map_at_start": cosmetic_patches.open_map,
        "dark_world_varia_suit_damage": patcher_config.varia_suit_damage,
        "dark_world_dark_suit_damage": patcher_config.dark_suit_damage,
    }

    result["logbook_patches"] = [
        {"asset_id": 25, "connections": [81, 166, 195], },
        {"asset_id": 38, "connections": [4, 33, 120, 251, 364], },
        {"asset_id": 60, "connections": [38, 74, 154, 196], },
        {"asset_id": 74, "connections": [59, 75, 82, 102, 260], },
        {"asset_id": 81, "connections": [148, 151, 156], },
        {"asset_id": 119, "connections": [60, 254, 326], },
        {"asset_id": 124, "connections": [35, 152, 355], },
        {"asset_id": 129, "connections": [29, 118, 367], },
        {"asset_id": 154, "connections": [169, 200, 228, 243, 312, 342], },
        {"asset_id": 166, "connections": [45, 303, 317], },
        {"asset_id": 194, "connections": [1, 6], },
        {"asset_id": 195, "connections": [159, 221, 231], },
        {"asset_id": 196, "connections": [17, 19, 23, 162, 183, 379], },
        {"asset_id": 233, "connections": [58, 191, 373], },
        {"asset_id": 241, "connections": [223, 284], },
        {"asset_id": 254, "connections": [129, 233, 319], },
        {"asset_id": 318, "connections": [119, 216, 277, 343], },
        {"asset_id": 319, "connections": [52, 289, 329], },
        {"asset_id": 326, "connections": [124, 194, 241, 327], },
        {"asset_id": 327, "connections": [46, 275], },
    ]

    _apply_translator_gate_patches(result["specific_patches"], layout.elevators)

    return result
Esempio n. 9
0
def create_patcher_file(
    description: LayoutDescription,
    cosmetic_patches: CosmeticPatches,
) -> dict:
    """

    :param description:
    :param cosmetic_patches:
    :return:
    """
    patcher_config = description.permalink.patcher_configuration
    layout = description.permalink.layout_configuration
    patches = description.patches
    rng = Random(description.permalink.as_str)

    game = data_reader.decode_data(layout.game_data)
    useless_pickup = pickup_creator.create_useless_pickup(
        game.resource_database)

    result = {}
    _add_header_data_to_result(description, result)

    # Add Spawn Point
    result["spawn_point"] = _create_spawn_point_field(patches,
                                                      game.resource_database)

    result["starting_popup"] = _create_starting_popup(layout,
                                                      game.resource_database,
                                                      patches.starting_items)

    # Add the pickups
    if cosmetic_patches.disable_hud_popup:
        memo_data = None
    else:
        memo_data = default_prime2_memo_data()

    result["pickups"] = _create_pickup_list(
        patches,
        useless_pickup,
        _TOTAL_PICKUP_COUNT,
        rng,
        patcher_config.pickup_model_style,
        patcher_config.pickup_model_data_source,
        memo_data,
    )

    # Add the elevators
    result["elevators"] = _create_elevators_field(patches, game)

    # Add translators
    result["translator_gates"] = _create_translator_gates_field(
        patches.translator_gates)

    # Scan hints
    result["string_patches"] = _create_string_patches(layout.hints, game,
                                                      patches, rng)

    # TODO: if we're starting at ship, needs to collect 8 sky temple keys and want item loss,
    # we should disable hive_chamber_b_post_state
    result["specific_patches"] = {
        "hive_chamber_b_post_state": True,
        "intro_in_post_state": True,
        "warp_to_start": patcher_config.warp_to_start,
        "speed_up_credits": cosmetic_patches.speed_up_credits,
        "disable_hud_popup": cosmetic_patches.disable_hud_popup,
        "pickup_map_icons": cosmetic_patches.pickup_markers,
        "full_map_at_start": cosmetic_patches.open_map,
        "dark_world_varia_suit_damage": patcher_config.varia_suit_damage,
        "dark_world_dark_suit_damage": patcher_config.dark_suit_damage,
    }

    _apply_translator_gate_patches(result["specific_patches"],
                                   layout.elevators)

    return result