Subnautica: add 'valuable' item_pool

This commit is contained in:
Fabian Dill 2021-09-17 04:32:36 +02:00
parent b82e3f2a8a
commit 4e1f1551ea
3 changed files with 34 additions and 4 deletions

View File

@ -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"

View File

@ -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
}

View File

@ -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