diff --git a/Items.py b/Items.py index 7cc2826cf9..c896e483c0 100644 --- a/Items.py +++ b/Items.py @@ -225,3 +225,6 @@ for basename, substring in _simple_groups: del (_simple_groups) progression_items = {name for name, data in item_table.items() if type(data[3]) == int and data[0]} +item_name_groups['Everything'] = {name for name, data in item_table.items() if type(data[3]) == int} +item_name_groups['Progression Items'] = progression_items +item_name_groups['Non Progression Items'] = item_name_groups['Everything'] - progression_items diff --git a/Main.py b/Main.py index e58dcdafa9..a011de6546 100644 --- a/Main.py +++ b/Main.py @@ -10,7 +10,7 @@ import zlib import concurrent.futures from BaseClasses import World, CollectionState, Item, Region, Location, Shop -from Items import ItemFactory, item_table +from Items import ItemFactory, item_table, item_name_groups from Regions import create_regions, create_shops, mark_light_world_regions, lookup_vanilla_location_to_entrance from InvertedRegions import create_inverted_regions, mark_dark_world_regions from EntranceShuffle import link_entrances, link_inverted_entrances @@ -118,6 +118,23 @@ def main(args, seed=None): # items can't be both local and non-local, prefer local world.non_local_items[player] -= world.local_items[player] + # dungeon items can't be in non-local if the appropriate dungeon item shuffle setting is not set. + if not world.mapshuffle[player]: + world.non_local_items[player] -= item_name_groups['Maps'] + + if not world.compassshuffle[player]: + world.non_local_items[player] -= item_name_groups['Compasses'] + + if not world.keyshuffle[player]: + world.non_local_items[player] -= item_name_groups['Small Keys'] + + if not world.bigkeyshuffle[player]: + world.non_local_items[player] -= item_name_groups['Big Keys'] + + # Not possible to place pendants/crystals out side of boss prizes yet. + world.non_local_items[player] -= item_name_groups['Pendants'] + world.non_local_items[player] -= item_name_groups['Crystals'] + world.triforce_pieces_available[player] = max(world.triforce_pieces_available[player], world.triforce_pieces_required[player]) if world.mode[player] != 'inverted':