Exemplo n.º 1
0
def test_create_hints_nothing(empty_patches):
    # Setup
    asset_id = 1000
    pickup_index = PickupIndex(50)

    logbook_node, _, world_list = _create_world_list(asset_id, pickup_index)

    patches = dataclasses.replace(empty_patches,
                                  hints={
                                      logbook_node.resource():
                                      Hint(HintType.LOCATION,
                                           PrecisionPair.detailed(),
                                           pickup_index)
                                  })
    rng = MagicMock()

    # Run
    result = item_hints.create_hints(patches, world_list, rng)

    # Assert
    message = (
        "An &push;&main-color=#FF6705B3;Energy Transfer Module&pop; can be found in "
        "&push;&main-color=#FF3333;World - Area&pop;.")
    assert result == [{
        'asset_id': asset_id,
        'strings': [message, '', message]
    }]
Exemplo n.º 2
0
def test_create_hints_guardians(empty_patches, pickup_index_and_guardian,
                                pickup, item):
    # Setup
    asset_id = 1000
    pickup_index, guardian = pickup_index_and_guardian

    logbook_node, _, world_list = _create_world_list(asset_id, pickup_index)

    patches = dataclasses.replace(
        empty_patches,
        pickup_assignment={
            pickup_index: pickup,
        },
        hints={
            logbook_node.resource():
            Hint(HintType.GUARDIAN,
                 PrecisionPair(PrecisionPair.detailed(), item[0]),
                 pickup_index)
        })
    rng = MagicMock()

    # Run
    result = item_hints.create_hints(patches, world_list, rng)

    # Assert
    message = f"{guardian} is guarding {item[1]}."
    assert result == [{
        'asset_id': asset_id,
        'strings': [message, '', message]
    }]
def add_default_hints_to_patches(
    rng: Random,
    patches: GamePatches,
    world_list: WorldList,
) -> GamePatches:
    """
    Adds hints for the locations
    :param rng:
    :param patches:
    :param world_list:
    :return:
    """

    for node in world_list.all_nodes:
        if isinstance(
                node,
                LogbookNode) and node.lore_type == LoreType.LUMINOTH_WARRIOR:
            patches = patches.assign_hint(
                node.resource(),
                Hint(
                    HintType.KEYBEARER,
                    PrecisionPair(HintLocationPrecision.DETAILED,
                                  HintItemPrecision.PRECISE_CATEGORY),
                    PickupIndex(node.hint_index)))

    # TODO: this should be a flag in PickupNode
    indices_with_hint = [
        (PickupIndex(24), HintType.LIGHT_SUIT_LOCATION),  # Light Suit
        (PickupIndex(43), HintType.GUARDIAN),  # Dark Suit (Amorbis)
        (PickupIndex(79), HintType.GUARDIAN),  # Dark Visor (Chykka)
        (PickupIndex(115), HintType.GUARDIAN),  # Annihilator Beam (Quadraxis)
    ]
    all_logbook_assets = [
        node.resource() for node in world_list.all_nodes
        if isinstance(node, LogbookNode) and node.resource() not in
        patches.hints and node.lore_type.holds_generic_hint
    ]

    rng.shuffle(indices_with_hint)
    rng.shuffle(all_logbook_assets)

    for index, hint_type in indices_with_hint:
        if not all_logbook_assets:
            break

        logbook_asset = all_logbook_assets.pop()
        patches = patches.assign_hint(
            logbook_asset, Hint(hint_type, PrecisionPair.detailed(), index))

    return patches
 def _guardian_hint(number: int):
     return Hint(HintType.GUARDIAN, PrecisionPair.detailed(),
                 PickupIndex(number))
 def _light_suit_location_hint(number: int):
     return Hint(HintType.LIGHT_SUIT_LOCATION, PrecisionPair.detailed(),
                 PickupIndex(number))