From 4e1f1551ea8f6a8bb003bef77bc5b81e0c31b854 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 17 Sep 2021 04:32:36 +0200 Subject: [PATCH] Subnautica: add 'valuable' item_pool --- worlds/subnautica/Items.py | 12 ++++++++++-- worlds/subnautica/Options.py | 13 +++++++++++++ worlds/subnautica/__init__.py | 13 +++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 worlds/subnautica/Options.py diff --git a/worlds/subnautica/Items.py b/worlds/subnautica/Items.py index d29ff3e3..b9377b7a 100644 --- a/worlds/subnautica/Items.py +++ b/worlds/subnautica/Items.py @@ -6,9 +6,17 @@ with open(os.path.join(os.path.dirname(__file__), 'items.json'), 'r') as file: lookup_id_to_name = {} lookup_name_to_item = {} +advancement_item_names = set() +non_advancement_item_names = set() + for item in item_table: - lookup_id_to_name[item["id"]] = item["name"] - lookup_name_to_item[item["name"]] = item + item_name = item["name"] + lookup_id_to_name[item["id"]] = item_name + lookup_name_to_item[item_name] = item + if item["progression"]: + advancement_item_names.add(item_name) + else: + non_advancement_item_names.add(item_name) lookup_id_to_name[None] = "Victory" diff --git a/worlds/subnautica/Options.py b/worlds/subnautica/Options.py new file mode 100644 index 00000000..0695a089 --- /dev/null +++ b/worlds/subnautica/Options.py @@ -0,0 +1,13 @@ +from Options import Choice + + +class ItemPool(Choice): + """Valuable item pool moves all not progression relevant items to starting inventory and + creates random duplicates of important items in their place.""" + option_standard = 0 + option_valuable = 1 + + +options = { + "item_pool": ItemPool +} diff --git a/worlds/subnautica/__init__.py b/worlds/subnautica/__init__.py index c3884d62..5ccac126 100644 --- a/worlds/subnautica/__init__.py +++ b/worlds/subnautica/__init__.py @@ -1,14 +1,14 @@ import logging -from typing import Set logger = logging.getLogger("Subnautica") from .Locations import lookup_name_to_id as locations_lookup_name_to_id -from .Items import item_table, lookup_name_to_item +from .Items import item_table, lookup_name_to_item, advancement_item_names from .Items import lookup_name_to_id as items_lookup_name_to_id from .Regions import create_regions from .Rules import set_rules +from .Options import options from BaseClasses import Region, Entrance, Location, MultiWorld, Item from ..AutoWorld import World @@ -24,6 +24,7 @@ class SubnauticaWorld(World): item_name_to_id = items_lookup_name_to_id location_name_to_id = locations_lookup_name_to_id + options = options def generate_basic(self): # Link regions @@ -32,13 +33,21 @@ class SubnauticaWorld(World): # Generate item pool pool = [] neptune_launch_platform = None + extras = 0 for item in item_table: for i in range(item["count"]): subnautica_item = self.create_item(item["name"]) if item["name"] == "Neptune Launch Platform": neptune_launch_platform = subnautica_item + elif not item["progression"] and self.world.item_pool[self.player] == "valuable": + self.world.push_precollected(subnautica_item) + extras += 1 else: pool.append(subnautica_item) + for item_name in self.world.random.choices(sorted(advancement_item_names - {"Neptune Launch Platform"}), + k=extras): + pool.append(self.create_item(item_name)) + self.world.itempool += pool # Victory item