Don't swap items that reduce access (#247)

This commit is contained in:
Brad Humphrey
2022-01-27 21:40:08 -07:00
committed by GitHub
parent 65a92746d1
commit dd61d0d395
2 changed files with 65 additions and 19 deletions

View File

@@ -115,6 +115,10 @@ def generate_items(count: int, player_id: int, advancement: bool = False, code:
return items
def names(objs: list) -> List[str]:
return map(lambda o: o.name, objs)
class TestFillRestrictive(unittest.TestCase):
def test_basic_fill(self):
multi_world = generate_multi_world()
@@ -331,6 +335,28 @@ class TestFillRestrictive(unittest.TestCase):
self.assertEqual(player2.locations[0].item, player1.prog_items[0])
self.assertEqual(player2.locations[1].item, player1.prog_items[1])
def test_restrictive_progress(self):
multi_world = generate_multi_world()
player1 = generate_player_data(multi_world, 1, prog_item_count=25)
items = player1.prog_items.copy()
multi_world.completion_condition[player1.id] = lambda state: state.has_all(
names(player1.prog_items), player1.id)
region1 = player1.generate_region(player1.menu, 5)
region2 = player1.generate_region(player1.menu, 5, lambda state: state.has_all(
names(items[2:7]), player1.id))
region3 = player1.generate_region(player1.menu, 5, lambda state: state.has_all(
names(items[7:12]), player1.id))
region4 = player1.generate_region(player1.menu, 5, lambda state: state.has_all(
names(items[12:17]), player1.id))
region5 = player1.generate_region(player1.menu, 5, lambda state: state.has_all(
names(items[17:22]), player1.id))
locations = multi_world.get_unfilled_locations()
fill_restrictive(multi_world, multi_world.state,
locations, player1.prog_items)
class TestDistributeItemsRestrictive(unittest.TestCase):
def test_basic_distribute(self):
@@ -546,7 +572,7 @@ class TestBalanceMultiworldProgression(unittest.TestCase):
# Sphere 1
region = player1.generate_region(player1.menu, 20)
items = fillRegion(multi_world, region, [
player1.prog_items[0]] + items)
player1.prog_items[0]] + items)
# Sphere 2
region = player1.generate_region(
@@ -558,7 +584,7 @@ class TestBalanceMultiworldProgression(unittest.TestCase):
region = player2.generate_region(
player2.menu, 20, lambda state: state.has(player2.prog_items[0].name, player2.id))
items = fillRegion(multi_world, region, [
player2.prog_items[1]] + items)
player2.prog_items[1]] + items)
multi_world.progression_balancing[player1.id] = True
multi_world.progression_balancing[player2.id] = True