From 7a9d4272be786ef51047d60d0c7238ebef065cd7 Mon Sep 17 00:00:00 2001 From: axe-y <58866768+axe-y@users.noreply.github.com> Date: Wed, 19 Apr 2023 17:14:46 -0400 Subject: [PATCH] Generation bug fix (#1740) --- worlds/dlcquest/Regions.py | 2 +- worlds/dlcquest/Rules.py | 18 +++++++++--------- worlds/dlcquest/__init__.py | 9 +++++++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/worlds/dlcquest/Regions.py b/worlds/dlcquest/Regions.py index 5553cb48..8135a1c3 100644 --- a/worlds/dlcquest/Regions.py +++ b/worlds/dlcquest/Regions.py @@ -131,7 +131,7 @@ def create_regions(world: MultiWorld, player: int, World_Options: Options.DLCQue Entrance(player, "Forest Double Jump", Regforest)] Regforest.locations += [DLCQuestLocation(player, loc_name, location_table[loc_name], Regforest) for loc_name in Locforest_name] - add_coin_dlcquest(Regforest, 169, player) + add_coin_dlcquest(Regforest, 171, player) world.regions.append(Regforest) Regforestdoublejump = Region("The Forest whit double Jump", player, world) diff --git a/worlds/dlcquest/Rules.py b/worlds/dlcquest/Rules.py index ac9cd23d..c57976e7 100644 --- a/worlds/dlcquest/Rules.py +++ b/worlds/dlcquest/Rules.py @@ -15,13 +15,14 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): def has_enough_coin(player: int, coin: int): def has_coin(state, player: int, coins: int): coin_possessed = 0 - for i in [4, 7, 9, 10, 46, 50, 60, 76, 89, 100, 169, 203]: + for i in [4, 7, 9, 10, 46, 50, 60, 76, 89, 100, 171, 203]: name_coin = f"{i} coins" if state.has(name_coin, player): coin_possessed += i return coin_possessed >= coins + return lambda state: has_coin(state, player, coin) def has_enough_coin_freemium(player: int, coin: int): @@ -104,9 +105,8 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): number_of_bundle = math.floor(825 / World_Options[Options.CoinSanityRange]) for i in range(number_of_bundle): - item_coin = "DLC Quest: number Coin" - item_coin_loc = re.sub("number", str(World_Options[Options.CoinSanityRange] * (i + 1)), item_coin) - set_rule(world.get_location(item_coin_loc, player), + item_coin = f"DLC Quest: {World_Options[Options.CoinSanityRange] * (i + 1)} Coin" + set_rule(world.get_location(item_coin, player), has_enough_coin(player, World_Options[Options.CoinSanityRange] * (i + 1))) if 825 % World_Options[Options.CoinSanityRange] != 0: set_rule(world.get_location("DLC Quest: 825 Coin", player), @@ -195,7 +195,6 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): set_rule(world.get_location("Finish the Fight Pack", player), has_enough_coin(player, 5)) - if World_Options[Options.EndingChoice] == Options.EndingChoice.option_any: set_rule(world.get_location("Winning Basic", player), lambda state: state.has("Finish the Fight Pack", player)) @@ -210,8 +209,6 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): lambda state: state.has("Wall Jump Pack", player)) set_rule(world.get_entrance("Harmless Plants", player), lambda state: state.has("Harmless Plants Pack", player)) - set_rule(world.get_entrance("Pickaxe Hard Cave", player), - lambda state: state.has("Pickaxe", player)) set_rule(world.get_entrance("Name Change Entrance", player), lambda state: state.has("Name Change Pack", player)) set_rule(world.get_entrance("Cut Content Entrance", player), @@ -226,12 +223,17 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): lambda state: state.has("Death of Comedy Pack", player)) set_rule(world.get_location("Story is Important", player), lambda state: state.has("DLC NPC Pack", player)) + set_rule(world.get_entrance("Pickaxe Hard Cave", player), + lambda state: state.has("Pickaxe", player)) if World_Options[Options.ItemShuffle] == Options.ItemShuffle.option_disabled: set_rule(world.get_entrance("Vines", player), lambda state: state.has("Incredibly Important Pack", player)) set_rule(world.get_entrance("Behind Rocks", player), lambda state: state.can_reach("Cut Content", 'region', player)) + set_rule(world.get_entrance("Pickaxe Hard Cave", player), + lambda state: state.can_reach("Cut Content", 'region', player) and state.has("Name Change Pack", + player)) if World_Options[Options.ItemShuffle] == Options.ItemShuffle.option_shuffled: set_rule(world.get_entrance("Vines", player), @@ -357,8 +359,6 @@ def set_rules(world, player, World_Options: Options.DLCQuestOptions): set_rule(world.get_location("Remove Ads Pack", player), has_enough_coin_freemium(player, 25)) - - if World_Options[Options.Campaign] == Options.Campaign.option_basic: world.completion_condition[player] = lambda state: state.has("Victory Basic", player) diff --git a/worlds/dlcquest/__init__.py b/worlds/dlcquest/__init__.py index c30e4a8f..9569d0ef 100644 --- a/worlds/dlcquest/__init__.py +++ b/worlds/dlcquest/__init__.py @@ -6,6 +6,7 @@ from .Locations import location_table, DLCQuestLocation from .Options import DLCQuest_options, DLCQuestOptions, fetch_options from .Rules import set_rules from .Regions import create_regions +from . import Options client_version = 0 @@ -49,6 +50,7 @@ class DLCqworld(World): return DLCQuestItem(event, True, None, self.player) def create_items(self): + self.precollect_coinsanity() locations_count = len([location for location in self.multiworld.get_locations(self.player) if not location.event]) @@ -59,11 +61,18 @@ class DLCqworld(World): created_items = create_items(self, self.options, locations_count + len(items_to_exclude), self.multiworld.random) self.multiworld.itempool += created_items + self.multiworld.early_items[self.player]["Movement Pack"] = 1 for item in items_to_exclude: if item in self.multiworld.itempool: self.multiworld.itempool.remove(item) + def precollect_coinsanity(self): + if self.options[Options.Campaign] == Options.Campaign.option_basic: + if self.options[Options.CoinSanity] == Options.CoinSanity.option_coin and self.options[Options.CoinSanityRange] >= 5: + self.multiworld.push_precollected(self.create_item("Movement Pack")) + + def create_item(self, item: Union[str, ItemData]) -> DLCQuestItem: if isinstance(item, str): item = item_table[item]