convert potion_shop_shuffle into 'w' shop_shuffle flag

This commit is contained in:
Fabian Dill 2021-01-09 17:53:38 +01:00
parent aed763c58f
commit 9fcb317aca
7 changed files with 18 additions and 32 deletions

View File

@ -135,7 +135,6 @@ class World(object):
set_player_attr('triforce_pieces_required', 20) set_player_attr('triforce_pieces_required', 20)
set_player_attr('shop_shuffle', 'off') set_player_attr('shop_shuffle', 'off')
set_player_attr('shop_shuffle_slots', 0) set_player_attr('shop_shuffle_slots', 0)
set_player_attr('potion_shop_shuffle', '')
set_player_attr('shuffle_prizes', "g") set_player_attr('shuffle_prizes', "g")
set_player_attr('sprite_pool', []) set_player_attr('sprite_pool', [])
set_player_attr('dark_room_logic', "lamp") set_player_attr('dark_room_logic', "lamp")
@ -1339,7 +1338,6 @@ class Spoiler(object):
'triforce_pieces_required': self.world.triforce_pieces_required, 'triforce_pieces_required': self.world.triforce_pieces_required,
'shop_shuffle': self.world.shop_shuffle, 'shop_shuffle': self.world.shop_shuffle,
'shop_shuffle_slots': self.world.shop_shuffle_slots, 'shop_shuffle_slots': self.world.shop_shuffle_slots,
'potion_shop_shuffle': self.world.potion_shop_shuffle,
'shuffle_prizes': self.world.shuffle_prizes, 'shuffle_prizes': self.world.shuffle_prizes,
'sprite_pool': self.world.sprite_pool, 'sprite_pool': self.world.sprite_pool,
'restrict_dungeon_item_on_boss': self.world.restrict_dungeon_item_on_boss 'restrict_dungeon_item_on_boss': self.world.restrict_dungeon_item_on_boss

View File

@ -337,10 +337,6 @@ def parse_arguments(argv, no_defaults=False):
help=''' help='''
Maximum amount of shop slots able to be filled by items from the item pool. Maximum amount of shop slots able to be filled by items from the item pool.
''') ''')
parser.add_argument('--potion_shop_shuffle', default=defval(''), choices=['', 'a'], help='''\
Determine if potion shop shuffle items should be affected by the rules of shop shuffle.
Value `none` will only allow prices to be shuffled, `a` will allow any items to be shuffled.
''')
parser.add_argument('--shuffle_prizes', default=defval('g'), choices=['', 'g', 'b', 'gb']) parser.add_argument('--shuffle_prizes', default=defval('g'), choices=['', 'g', 'b', 'gb'])
parser.add_argument('--sprite_pool', help='''\ parser.add_argument('--sprite_pool', help='''\
Specifies a colon separated list of sprites used for random/randomonevent. If not specified, the full sprite pool is used.''') Specifies a colon separated list of sprites used for random/randomonevent. If not specified, the full sprite pool is used.''')
@ -401,7 +397,7 @@ def parse_arguments(argv, no_defaults=False):
'shufflebosses', 'enemy_shuffle', 'enemy_health', 'enemy_damage', 'shufflepots', 'shufflebosses', 'enemy_shuffle', 'enemy_health', 'enemy_damage', 'shufflepots',
'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor', 'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor',
'heartbeep', "skip_progression_balancing", "triforce_pieces_available", 'heartbeep', "skip_progression_balancing", "triforce_pieces_available",
"triforce_pieces_required", "shop_shuffle", "shop_shuffle_slots", "potion_shop_shuffle", "triforce_pieces_required", "shop_shuffle", "shop_shuffle_slots",
"required_medallions", "required_medallions",
"plando_items", "plando_texts", "plando_connections", "plando_items", "plando_texts", "plando_connections",
'remote_items', 'progressive', 'dungeon_counters', 'glitch_boots', 'killable_thieves', 'remote_items', 'progressive', 'dungeon_counters', 'glitch_boots', 'killable_thieves',

View File

@ -481,15 +481,14 @@ def shuffle_shops(world, items, player: int):
shops = [] shops = []
upgrade_shops = [] upgrade_shops = []
total_inventory = [] total_inventory = []
potion_option = world.potion_shop_shuffle[player]
for shop in world.shops: for shop in world.shops:
if shop.region.player == player: if shop.region.player == player:
if shop.type == ShopType.UpgradeShop: if shop.type == ShopType.UpgradeShop:
upgrade_shops.append(shop) upgrade_shops.append(shop)
elif shop.type == ShopType.Shop: elif shop.type == ShopType.Shop:
if shop.region.name == 'Potion Shop' and not potion_option: if shop.region.name == 'Potion Shop' and not 'w' in option:
upgrade_shops.append( # don't modify potion shop
shop) # just put it with the upgrade shops/caves so we don't shuffle the items, just prices pass
else: else:
shops.append(shop) shops.append(shop)
total_inventory.extend(shop.inventory) total_inventory.extend(shop.inventory)

View File

@ -84,7 +84,6 @@ def main(args, seed=None):
world.triforce_pieces_required = args.triforce_pieces_required.copy() world.triforce_pieces_required = args.triforce_pieces_required.copy()
world.shop_shuffle = args.shop_shuffle.copy() world.shop_shuffle = args.shop_shuffle.copy()
world.shop_shuffle_slots = args.shop_shuffle_slots.copy() world.shop_shuffle_slots = args.shop_shuffle_slots.copy()
world.potion_shop_shuffle = args.potion_shop_shuffle.copy()
world.progression_balancing = {player: not balance for player, balance in args.skip_progression_balancing.items()} world.progression_balancing = {player: not balance for player, balance in args.skip_progression_balancing.items()}
world.shuffle_prizes = args.shuffle_prizes.copy() world.shuffle_prizes = args.shuffle_prizes.copy()
world.sprite_pool = args.sprite_pool.copy() world.sprite_pool = args.sprite_pool.copy()

View File

@ -411,10 +411,6 @@ def roll_settings(weights, plando_options: typing.Set[str] = frozenset(("bosses"
if not ret.shop_shuffle: if not ret.shop_shuffle:
ret.shop_shuffle = '' ret.shop_shuffle = ''
ret.potion_shop_shuffle = get_choice('potion_shop_shuffle', weights, '')
if not ret.potion_shop_shuffle:
ret.potion_shop_shuffle = ''
ret.mode = get_choice('world_state', weights, None) # legacy support ret.mode = get_choice('world_state', weights, None) # legacy support
if ret.mode == 'retro': if ret.mode == 'retro':
ret.mode = 'open' ret.mode = 'open'

View File

@ -370,7 +370,6 @@ def create_shops(world, player: int):
ShopType.Shop: Shop, ShopType.Shop: Shop,
ShopType.TakeAny: TakeAny} ShopType.TakeAny: TakeAny}
option = world.shop_shuffle[player] option = world.shop_shuffle[player]
potion_option = world.potion_shop_shuffle[player]
my_shop_table = dict(shop_table) my_shop_table = dict(shop_table)
num_slots = int(world.shop_shuffle_slots[player]) num_slots = int(world.shop_shuffle_slots[player])
@ -385,21 +384,19 @@ def create_shops(world, player: int):
new_dark_shop = world.random.sample(shop_generation_types['default'], k=3) new_dark_shop = world.random.sample(shop_generation_types['default'], k=3)
for name, shop in my_shop_table.items(): for name, shop in my_shop_table.items():
typ, shop_id, keeper, custom, locked, items = shop typ, shop_id, keeper, custom, locked, items = shop
new_items = world.random.sample(shop_generation_types['default'], k=3)
if 'f' not in option:
if items == _basic_shop_defaults:
new_items = new_basic_shop
elif items == _dark_world_shop_defaults:
new_items = new_dark_shop
if name == 'Capacity Upgrade': if name == 'Capacity Upgrade':
continue pass
if name == 'Potion Shop': elif name == 'Potion Shop' and not "w" in option:
if 'b' in potion_option: pass
new_items = world.random.sample(shop_generation_types['potion_discount'] + shop_generation_types['bottle'], k=3) else:
elif 'a' not in potion_option: new_items = world.random.sample(shop_generation_types['default'], k=3)
new_items = items if 'f' not in option:
keeper = world.random.choice([0xA0, 0xC1, 0xFF]) if items == _basic_shop_defaults:
my_shop_table[name] = (typ, shop_id, keeper, custom, locked, new_items) new_items = new_basic_shop
elif items == _dark_world_shop_defaults:
new_items = new_dark_shop
keeper = world.random.choice([0xA0, 0xC1, 0xFF])
my_shop_table[name] = (typ, shop_id, keeper, custom, locked, new_items)
for region_name, (room_id, type, shopkeeper, custom, locked, inventory) in my_shop_table.items(): for region_name, (room_id, type, shopkeeper, custom, locked, inventory) in my_shop_table.items():
if world.mode[player] == 'inverted' and region_name == 'Dark Lake Hylia Shop': if world.mode[player] == 'inverted' and region_name == 'Dark Lake Hylia Shop':
@ -411,7 +408,7 @@ def create_shops(world, player: int):
world.shops.append(shop) world.shops.append(shop)
for index, item in enumerate(inventory): for index, item in enumerate(inventory):
shop.add_inventory(index, *item) shop.add_inventory(index, *item)
if region_name == 'Potion Shop' and 'a' not in potion_option: if region_name == 'Potion Shop' and 'w' not in option:
pass pass
elif region_name == 'Capacity Upgrade': elif region_name == 'Capacity Upgrade':
pass pass

View File

@ -227,6 +227,7 @@ shop_shuffle:
i: 0 # Shuffle default inventories of the shops around i: 0 # Shuffle default inventories of the shops around
p: 0 # Randomize the prices of the items in shop inventories p: 0 # Randomize the prices of the items in shop inventories
u: 0 # Shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld) u: 0 # Shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld)
w: 0 # Consider witch's hut like any other shop and shuffle/randomize it too
ip: 0 # Shuffle inventories and randomize prices ip: 0 # Shuffle inventories and randomize prices
fpu: 0 # Generate new inventories, randomize prices and shuffle capacity upgrades into item pool fpu: 0 # Generate new inventories, randomize prices and shuffle capacity upgrades into item pool
uip: 0 # Shuffle inventories, randomize prices and shuffle capacity upgrades into the item pool uip: 0 # Shuffle inventories, randomize prices and shuffle capacity upgrades into the item pool