Important key fix for logic placment
This commit is contained in:
3
Fill.py
3
Fill.py
@@ -172,7 +172,8 @@ def valid_key_placement(item, location, key_pool, world):
|
|||||||
if key_logic.prize_location:
|
if key_logic.prize_location:
|
||||||
prize_loc = world.get_location(key_logic.prize_location, location.player)
|
prize_loc = world.get_location(key_logic.prize_location, location.player)
|
||||||
cr_count = world.crystals_needed_for_gt[location.player]
|
cr_count = world.crystals_needed_for_gt[location.player]
|
||||||
return key_logic.check_placement(unplaced_keys, location if item.bigkey else None, prize_loc, cr_count)
|
wild_keys = world.keyshuffle[item.player] != 'none'
|
||||||
|
return key_logic.check_placement(unplaced_keys, wild_keys, location if item.bigkey else None, prize_loc, cr_count)
|
||||||
else:
|
else:
|
||||||
return not item.is_inside_dungeon_item(world)
|
return not item.is_inside_dungeon_item(world)
|
||||||
|
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ class KeyLogic(object):
|
|||||||
self.sm_doors = {}
|
self.sm_doors = {}
|
||||||
self.prize_location = None
|
self.prize_location = None
|
||||||
|
|
||||||
def check_placement(self, unplaced_keys, big_key_loc=None, prize_loc=None, cr_count=7):
|
def check_placement(self, unplaced_keys, wild_keys, big_key_loc=None, prize_loc=None, cr_count=7):
|
||||||
for rule in self.placement_rules:
|
for rule in self.placement_rules:
|
||||||
if not rule.is_satisfiable(self.outside_keys, unplaced_keys, big_key_loc, prize_loc, cr_count):
|
if not rule.is_satisfiable(self.outside_keys, wild_keys, unplaced_keys, big_key_loc, prize_loc, cr_count):
|
||||||
return False
|
return False
|
||||||
if big_key_loc:
|
if big_key_loc:
|
||||||
for rule_a, rule_b in itertools.combinations(self.placement_rules, 2):
|
for rule_a, rule_b in itertools.combinations(self.placement_rules, 2):
|
||||||
@@ -186,17 +186,20 @@ class PlacementRule(object):
|
|||||||
if not bk_blocked and check_locations is None:
|
if not bk_blocked and check_locations is None:
|
||||||
return True
|
return True
|
||||||
available_keys = outside_keys
|
available_keys = outside_keys
|
||||||
empty_chests = 0
|
|
||||||
# todo: sometimes we need an extra empty chest to accomodate the big key too
|
# todo: sometimes we need an extra empty chest to accomodate the big key too
|
||||||
# dungeon bias seed 563518200 for example
|
# dungeon bias seed 563518200 for example
|
||||||
threshold = self.needed_keys_wo_bk if bk_blocked else self.needed_keys_w_bk
|
threshold = self.needed_keys_wo_bk if bk_blocked else self.needed_keys_w_bk
|
||||||
for loc in check_locations:
|
if not wild_keys:
|
||||||
if not loc.item:
|
empty_chests = 0
|
||||||
empty_chests += 1
|
for loc in check_locations:
|
||||||
elif loc.item and loc.item.name == self.small_key:
|
if not loc.item:
|
||||||
available_keys += 1
|
empty_chests += 1
|
||||||
place_able_keys = min(empty_chests, unplaced_keys)
|
elif loc.item and loc.item.name == self.small_key:
|
||||||
available_keys += place_able_keys
|
available_keys += 1
|
||||||
|
place_able_keys = min(empty_chests, unplaced_keys)
|
||||||
|
available_keys += place_able_keys
|
||||||
|
else:
|
||||||
|
available_keys += unplaced_keys
|
||||||
return available_keys >= threshold
|
return available_keys >= threshold
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user