diff --git a/worlds/ladx/Options.py b/worlds/ladx/Options.py index 2352e0fb..9c532c98 100644 --- a/worlds/ladx/Options.py +++ b/worlds/ladx/Options.py @@ -3,7 +3,7 @@ from dataclasses import dataclass import os.path import typing import logging -from Options import Choice, Toggle, DefaultOnToggle, Range, FreeText, PerGameCommonOptions, OptionGroup, Removed +from Options import Choice, Toggle, DefaultOnToggle, Range, FreeText, PerGameCommonOptions, OptionGroup, Removed, StartInventoryPool from collections import defaultdict import Utils @@ -665,6 +665,7 @@ class LinksAwakeningOptions(PerGameCommonOptions): tarins_gift: TarinsGift overworld: Overworld stabilize_item_pool: StabilizeItemPool + start_inventory_from_pool: StartInventoryPool warp_improvements: Removed additional_warp_points: Removed diff --git a/worlds/ladx/__init__.py b/worlds/ladx/__init__.py index a00076a6..e5b3d6cc 100644 --- a/worlds/ladx/__init__.py +++ b/worlds/ladx/__init__.py @@ -225,8 +225,6 @@ class LinksAwakeningWorld(World): def create_items(self) -> None: itempool = [] - exclude = [item.name for item in self.multiworld.precollected_items[self.player]] - self.prefill_original_dungeon = [ [], [], [], [], [], [], [], [], [] ] self.prefill_own_dungeons = [] self.pre_fill_items = [] @@ -243,50 +241,46 @@ class LinksAwakeningWorld(World): continue item_name = ladxr_item_to_la_item_name[ladx_item_name] for _ in range(count): - if item_name in exclude: - exclude.remove(item_name) # this is destructive. create unique list above - self.multiworld.itempool.append(self.create_item(self.get_filler_item_name())) - else: - item = self.create_item(item_name) + item = self.create_item(item_name) - if not self.options.tradequest and isinstance(item.item_data, TradeItemData): - location = self.multiworld.get_location(item.item_data.vanilla_location, self.player) - location.place_locked_item(item) - location.show_in_spoiler = False - continue + if not self.options.tradequest and isinstance(item.item_data, TradeItemData): + location = self.multiworld.get_location(item.item_data.vanilla_location, self.player) + location.place_locked_item(item) + location.show_in_spoiler = False + continue - if isinstance(item.item_data, DungeonItemData): - item_type = item.item_data.ladxr_id[:-1] - shuffle_type = self.dungeon_item_types[item_type] + if isinstance(item.item_data, DungeonItemData): + item_type = item.item_data.ladxr_id[:-1] + shuffle_type = self.dungeon_item_types[item_type] - if item.item_data.dungeon_item_type == DungeonItemType.INSTRUMENT and shuffle_type == ShuffleInstruments.option_vanilla: - # Find instrument, lock - # TODO: we should be able to pinpoint the region we want, save a lookup table please - found = False - for r in self.multiworld.get_regions(self.player): - if r.dungeon_index != item.item_data.dungeon_index: + if item.item_data.dungeon_item_type == DungeonItemType.INSTRUMENT and shuffle_type == ShuffleInstruments.option_vanilla: + # Find instrument, lock + # TODO: we should be able to pinpoint the region we want, save a lookup table please + found = False + for r in self.multiworld.get_regions(self.player): + if r.dungeon_index != item.item_data.dungeon_index: + continue + for loc in r.locations: + if not isinstance(loc, LinksAwakeningLocation): continue - for loc in r.locations: - if not isinstance(loc, LinksAwakeningLocation): - continue - if not isinstance(loc.ladxr_item, Instrument): - continue - loc.place_locked_item(item) - found = True - break - if found: - break - else: - if shuffle_type == DungeonItemShuffle.option_original_dungeon: - self.prefill_original_dungeon[item.item_data.dungeon_index - 1].append(item) - self.pre_fill_items.append(item) - elif shuffle_type == DungeonItemShuffle.option_own_dungeons: - self.prefill_own_dungeons.append(item) - self.pre_fill_items.append(item) - else: - itempool.append(item) + if not isinstance(loc.ladxr_item, Instrument): + continue + loc.place_locked_item(item) + found = True + break + if found: + break else: - itempool.append(item) + if shuffle_type == DungeonItemShuffle.option_original_dungeon: + self.prefill_original_dungeon[item.item_data.dungeon_index - 1].append(item) + self.pre_fill_items.append(item) + elif shuffle_type == DungeonItemShuffle.option_own_dungeons: + self.prefill_own_dungeons.append(item) + self.pre_fill_items.append(item) + else: + itempool.append(item) + else: + itempool.append(item) self.multi_key = self.generate_multi_key()