From 7088c148a2372a58d74cbac082444708f976f882 Mon Sep 17 00:00:00 2001 From: Bonta-kun <40473493+Bonta0@users.noreply.github.com> Date: Mon, 30 Dec 2019 20:28:33 +0100 Subject: [PATCH] Beemizer: fix potentially replacing all heart containers for progression --- ItemList.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/ItemList.py b/ItemList.py index 01cfb3e1..19eb83e3 100644 --- a/ItemList.py +++ b/ItemList.py @@ -209,18 +209,7 @@ def generate_itempool(world, player): world.get_location(location, player).event = True world.get_location(location, player).locked = True - beeweights = {0: {None: 100}, - 1: {None: 75, 'trap': 25}, - 2: {None: 40, 'trap': 40, 'bee': 20}, - 3: {'trap': 50, 'bee': 50}, - 4: {'trap': 100}} - def beemizer(item): - if world.beemizer[item.player] and not item.advancement and not item.priority and not item.type: - choice = random.choices(list(beeweights[world.beemizer[item.player]].keys()), weights=list(beeweights[world.beemizer[item.player]].values()))[0] - return item if not choice else ItemFactory("Bee Trap", player) if choice == 'trap' else ItemFactory("Bee", player) - return item - - world.itempool += [beemizer(item) for item in ItemFactory(pool, player)] + items = ItemFactory(pool, player) world.lamps_needed_for_dark_rooms = lamps_needed_for_dark_rooms @@ -242,12 +231,25 @@ def generate_itempool(world, player): # rather than making all hearts/heart pieces progression items (which slows down generation considerably) # We mark one random heart container as an advancement item (or 4 heart pieces in expert mode) if world.difficulty[player] in ['normal', 'hard'] and not (world.custom and world.customitemarray[30] == 0): - [item for item in world.itempool if item.name == 'Boss Heart Container' and item.player == player][0].advancement = True + [item for item in items if item.name == 'Boss Heart Container'][0].advancement = True elif world.difficulty[player] in ['expert'] and not (world.custom and world.customitemarray[29] < 4): - adv_heart_pieces = [item for item in world.itempool if item.name == 'Piece of Heart' and item.player == player][0:4] + adv_heart_pieces = [item for item in items if item.name == 'Piece of Heart'][0:4] for hp in adv_heart_pieces: hp.advancement = True + beeweights = {0: {None: 100}, + 1: {None: 75, 'trap': 25}, + 2: {None: 40, 'trap': 40, 'bee': 20}, + 3: {'trap': 50, 'bee': 50}, + 4: {'trap': 100}} + def beemizer(item): + if world.beemizer[item.player] and not item.advancement and not item.priority and not item.type: + choice = random.choices(list(beeweights[world.beemizer[item.player]].keys()), weights=list(beeweights[world.beemizer[item.player]].values()))[0] + return item if not choice else ItemFactory("Bee Trap", player) if choice == 'trap' else ItemFactory("Bee", player) + return item + + world.itempool += [beemizer(item) for item in items] + # shuffle medallions mm_medallion = ['Ether', 'Quake', 'Bombos'][random.randint(0, 2)] tr_medallion = ['Ether', 'Quake', 'Bombos'][random.randint(0, 2)]