From d44ac89faf146e069848d7ec40cec5eba67f3412 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 28 Dec 2023 17:22:36 -0700 Subject: [PATCH 1/2] fix(generation): reduce memory usage for bunny walk calculations fix(key logic): make partial the default --- BaseClasses.py | 4 ++-- CLI.py | 2 +- RELEASENOTES.md | 3 +++ Rules.py | 7 +++++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 6d7430f4..cfa4e48d 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -149,7 +149,7 @@ class World(object): set_player_attr('door_self_loops', False) set_player_attr('door_type_mode', 'original') set_player_attr('trap_door_mode', 'optional') - set_player_attr('key_logic_algorithm', 'default') + set_player_attr('key_logic_algorithm', 'partial') set_player_attr('shopsanity', False) set_player_attr('mixed_travel', 'prevent') @@ -1158,7 +1158,7 @@ class CollectionState(object): or self.has('Ice Rod', player) or self.has('Cane of Somaria', player) or self.has('Cane of Byrna', player)) - + def can_hit_crystal_through_barrier(self, player): return (self.can_use_bombs(player) or self.can_shoot_arrows(player) diff --git a/CLI.py b/CLI.py index 71023217..1cd4488a 100644 --- a/CLI.py +++ b/CLI.py @@ -216,7 +216,7 @@ def parse_settings(): 'intensity': 2, 'door_type_mode': 'original', 'trap_door_mode': 'optional', - 'key_logic_algorithm': 'default', + 'key_logic_algorithm': 'partial', 'decoupledoors': False, 'door_self_loops': False, 'experimental': False, diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0c754ac6..9f04d779 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,6 +109,9 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes +* 1.2.0.23u + * Generation: fix for bunny walk logic taking up too much memory + * Key Logic: Partial is now the new default * 1.2.0.22u * Flute can't be activated in rain state (except glitched modes) (Thanks codemann!) * ER: Minor fix for Link's House on DM in Insanity (escape cave should not be re-used) diff --git a/Rules.py b/Rules.py index 1560dba2..942eef33 100644 --- a/Rules.py +++ b/Rules.py @@ -1891,14 +1891,16 @@ def set_bunny_rules(world, player, inverted): # a) being able to reach it, and # b) being able to access all entrances from there to `region` queue = deque([(region, [], {region})]) + seen_sets = set([frozenset({region})]) while queue: (current, path, seen) = queue.popleft() for entrance in current.entrances: new_region = entrance.parent_region - if new_region.type in (RegionType.Cave, RegionType.Dungeon) and new_region in seen: + new_seen = seen.union({new_region}) + if new_region.type in (RegionType.Cave, RegionType.Dungeon) and new_seen in seen_sets: continue new_path = path + [entrance.access_rule] - new_seen = seen.union({new_region}) + seen_sets.add(frozenset(new_seen)) if not is_link(new_region): if world.logic[player] == 'owglitches': if region.type == RegionType.Dungeon and new_region.type != RegionType.Dungeon: @@ -1935,6 +1937,7 @@ def set_bunny_rules(world, player, inverted): else: continue if is_bunny(new_region): + # todo: if not owg or hmg and entrance is in bunny_impassible_doors, then skip this nonsense? queue.append((new_region, new_path, new_seen)) else: # we have reached pure light world, so we have a new possible option From 6357e4d979b555342fb894a633069f10ada51807 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 29 Dec 2023 11:16:31 -0700 Subject: [PATCH 2/2] build: bump version --- Main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Main.py b/Main.py index d5b39084..0fd377c6 100644 --- a/Main.py +++ b/Main.py @@ -34,7 +34,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new from source.tools.BPS import create_bps_from_data from source.classes.CustomSettings import CustomSettings -version_number = '1.2.0.22' +version_number = '1.2.0.23' version_branch = '-u' __version__ = f'{version_number}{version_branch}'