diff --git a/ItemPool.py b/ItemPool.py index 90047454..1e31a65d 100644 --- a/ItemPool.py +++ b/ItemPool.py @@ -7,7 +7,7 @@ from Bosses import place_bosses from Dungeons import get_dungeon_item_pool from EntranceShuffle import connect_entrance from Fill import FillError, fill_restrictive -from Items import ItemFactory, trap_replaceable +from Items import ItemFactory, GetBeemizerItem from Rules import forbid_items_for_player # This file sets the item pools for various modes. Timed modes and triforce hunt are enforced first, and then extra items are specified per mode to fill in the remaining space. @@ -373,7 +373,7 @@ def generate_itempool(world, player: int): if world.goal[player] == 'icerodhunt': for item in dungeon_items: - world.itempool.append(ItemFactory('Nothing', player)) + world.itempool.append(ItemFactory(GetBeemizerItem(world, player, 'Nothing'), player)) world.push_precollected(item) else: world.itempool.extend([item for item in dungeon_items]) @@ -394,16 +394,8 @@ def generate_itempool(world, player: int): for item in items: if item.advancement or item.type: progressionitems.append(item) - elif world.beemizer[player] and item.name in trap_replaceable: - if world.random.random() < world.beemizer[item.player] * 0.25: - if world.random.random() < (0.5 + world.beemizer[item.player] * 0.1): - nonprogressionitems.append(ItemFactory("Bee Trap", player)) - else: - nonprogressionitems.append(ItemFactory("Bee", player)) - else: - nonprogressionitems.append(item) else: - nonprogressionitems.append(item) + nonprogressionitems.append(GetBeemizerItem(world, item.player, item)) world.random.shuffle(nonprogressionitems) if additional_triforce_pieces: diff --git a/Items.py b/Items.py index 37fb59b7..1792731a 100644 --- a/Items.py +++ b/Items.py @@ -1,6 +1,19 @@ import logging +def GetBeemizerItem(world, player, item): + item_name = item if isinstance(item, str) else item.name + if world.beemizer[player] and item_name in trap_replaceable: + if world.random.random() < world.beemizer[player] * 0.25: + if world.random.random() < (0.5 + world.beemizer[player] * 0.1): + return "Bee Trap" if isinstance(item, str) else ItemFactory("Bee Trap", player) + else: + return "Bee" if isinstance(item, str) else ItemFactory("Bee", player) + else: + return item + else: + return item + def ItemFactory(items, player): from BaseClasses import Item diff --git a/Shops.py b/Shops.py index 5a3fa1be..9c6d1b57 100644 --- a/Shops.py +++ b/Shops.py @@ -5,7 +5,7 @@ import logging from BaseClasses import Location from EntranceShuffle import door_addresses -from Items import item_name_groups, item_table, ItemFactory, trap_replaceable +from Items import item_name_groups, item_table, ItemFactory, trap_replaceable, GetBeemizerItem from Utils import int16_as_bytes logger = logging.getLogger("Shops") @@ -293,10 +293,10 @@ def create_shops(world, player: int): else: additional_item = 'Rupees (50)' else: - additional_item = 'Nothing' + additional_item = GetBeemizerItem(world, player, 'Nothing') loc.item = ItemFactory(additional_item, player) else: - loc.item = ItemFactory('Nothing', player) + loc.item = ItemFactory(GetBeemizerItem(world, player, 'Nothing'), player) loc.shop_slot_disabled = True shop.region.locations.append(loc) world.dynamic_locations.append(loc)