From fc62b4e0bd948b78d7fe5a7732b7092c593732eb Mon Sep 17 00:00:00 2001 From: pepperpow Date: Fri, 3 Sep 2021 13:17:50 -0500 Subject: [PATCH 01/46] Bartering Update --- data/basepatch.apbp | Bin 117484 -> 117888 bytes worlds/alttp/Rom.py | 2 +- worlds/alttp/Shops.py | 70 ++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/data/basepatch.apbp b/data/basepatch.apbp index 05b4ecfb2f1174d8f3e75c0cc1689c7a920fb7e3..a77bf1fbc621b67fdba98ed21ce47ef731485c2f 100644 GIT binary patch literal 117888 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 literal 117484 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 z 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 diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index a1cd2b9b..cb2ba14c 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -4,7 +4,7 @@ import Utils from Patch import read_rom JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '13a75c5dd28055fbcf8f69bd8161871d' +RANDOMIZERBASEHASH = 'e397fef0e947d1bd760c68c4fe99a600' import io import json diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index 5d4813da..29c1d639 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -18,6 +18,19 @@ class ShopType(Enum): TakeAny = 1 UpgradeShop = 2 +@unique +class ShopPriceType(Enum): + Rupees = 0 + Hearts = 1 + Magic = 2 + Bombs = 3 + Arrows = 4 + HeartContainer = 5 + BombUpgrade = 6 + ArrowUpgrade = 7 + Keys = 8 + Potion = 9 + Item = 10 class Shop(): slots: int = 3 # slot count is not dynamic in asm, however inventory can have None as empty slots @@ -87,10 +100,11 @@ class Shop(): def add_inventory(self, slot: int, item: str, price: int, max: int = 0, replacement: Optional[str] = None, replacement_price: int = 0, create_location: bool = False, - player: int = 0): + player: int = 0, price_type: int = ShopPriceType.Rupees): self.inventory[slot] = { 'item': item, 'price': price, + 'price_type': price_type, 'max': max, 'replacement': replacement, 'replacement_price': replacement_price, @@ -98,7 +112,7 @@ class Shop(): 'player': player } - def push_inventory(self, slot: int, item: str, price: int, max: int = 1, player: int = 0): + def push_inventory(self, slot: int, item: str, price: int, max: int = 1, player: int = 0, price_type: int = ShopPriceType.Rupees): if not self.inventory[slot]: raise ValueError("Inventory can't be pushed back if it doesn't exist") @@ -108,6 +122,7 @@ class Shop(): self.inventory[slot] = { 'item': item, 'price': price, + 'price_type': price_type, 'max': max, 'replacement': self.inventory[slot]["item"], 'replacement_price': self.inventory[slot]["price"], @@ -392,6 +407,7 @@ def set_up_shops(world, player: int): shop.push_inventory(next(slots), 'Single Arrow', 80) + def shuffle_shops(world, items, player: int): option = world.shop_shuffle[player] if 'u' in option: @@ -461,6 +477,14 @@ def shuffle_shops(world, items, player: int): for item in shop.inventory: adjust_item(item) + if 'P' in option: + print('Making funny prices.') + for item in total_inventory: + price_to_funny_price(item, world, player) + for shop in upgrade_shops: + for item in shop.inventory: + price_to_funny_price(item, world, player) + if 'i' in option: world.random.shuffle(total_inventory) @@ -469,3 +493,45 @@ def shuffle_shops(world, items, player: int): slots = shop.slots shop.inventory = total_inventory[i:i + slots] i += slots + +price_blacklist = { + ShopPriceType.Rupees: {'Rupees'}, + ShopPriceType.Hearts: {'Small Heart', 'Apple'}, + ShopPriceType.Magic: {'Magic Jar'}, + ShopPriceType.Bombs: {'Bombs', 'Single Bomb'}, + ShopPriceType.Arrows: {'Arrows', 'Single Arrow'}, + ShopPriceType.HeartContainer: {}, + ShopPriceType.BombUpgrade: {}, + ShopPriceType.ArrowUpgrade: {}, + ShopPriceType.Keys: {}, + ShopPriceType.Potion: {}, + # ShopPriceType.Item: {} +} + +price_chart = { + ShopPriceType.Rupees: lambda p: p, + ShopPriceType.Hearts: lambda p: min(1, p//5)*4, + ShopPriceType.Magic: lambda p: min(8, p//5)*4, + ShopPriceType.Bombs: lambda p: min(10, p//5), + ShopPriceType.Arrows: lambda p: min(30, p//5), + ShopPriceType.HeartContainer: lambda p: 0x8, + ShopPriceType.BombUpgrade: lambda p: 0x1, + ShopPriceType.ArrowUpgrade: lambda p: 0x1, + ShopPriceType.Keys: lambda p: min(3, (p//100)+1), + ShopPriceType.Potion: lambda p: (p//5)%5, + # ShopPriceType.Item: lambda p: 0, +} + +def price_to_funny_price(item, world, player): + if item is None: + return + my_price_types = [x for x in price_blacklist] + my_choices = world.random.sample(my_price_types, len(my_price_types)) + for p in my_choices: + if p in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade] or (p in [ShopPriceType.Keys] and world.smallkey_shuffle[player] == smallkey_shuffle.option_universal): + return + if any(x in item['item'] for x in price_blacklist[p]): + continue + else: + item['price'] = 0x8000 | 0x100*(p.value-1) | price_chart[p](item['price']) + break \ No newline at end of file From 4d68000692e04936695353c5abb95899f25e4ff5 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 12 Sep 2021 20:25:08 +0200 Subject: [PATCH 02/46] Shops: limit "funny_prices" to logic free choices --- BaseClasses.py | 11 ++--- Utils.py | 2 +- worlds/alttp/Rom.py | 5 ++- worlds/alttp/Shops.py | 99 +++++++++++++++++++++++++++---------------- 4 files changed, 72 insertions(+), 45 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index ba14dcda..130a7657 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1056,17 +1056,18 @@ class Spoiler(): listed_locations.update(other_locations) self.shops = [] - from worlds.alttp.Shops import ShopType + from worlds.alttp.Shops import ShopType, price_type_display_name for shop in self.world.shops: if not shop.custom: continue - shopdata = {'location': str(shop.region), - 'type': 'Take Any' if shop.type == ShopType.TakeAny else 'Shop' - } + shopdata = { + 'location': str(shop.region), + 'type': 'Take Any' if shop.type == ShopType.TakeAny else 'Shop' + } for index, item in enumerate(shop.inventory): if item is None: continue - shopdata['item_{}'.format(index)] = "{} — {}".format(item['item'], item['price']) if item['price'] else item['item'] + shopdata['item_{}'.format(index)] = f"{item['item']} — {item['price']} {price_type_display_name[item['price_type']]}" if item['player'] > 0: shopdata['item_{}'.format(index)] = shopdata['item_{}'.format(index)].replace('—', '(Player {}) — '.format(item['player'])) diff --git a/Utils.py b/Utils.py index 5f3cc0cb..d853513b 100644 --- a/Utils.py +++ b/Utils.py @@ -13,7 +13,7 @@ class Version(typing.NamedTuple): build: int -__version__ = "0.1.7" +__version__ = "0.1.8" version_tuple = tuplize_version(__version__) import builtins diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index cb2ba14c..e8a697e3 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -1709,9 +1709,10 @@ def write_custom_shops(rom, world, player): # [id][item][price-low][price-high][max][repl_id][repl_price-low][repl_price-high][player] for index, item in enumerate(shop.inventory): - slot = 0 if shop.type == ShopType.TakeAny else index if item is None: break + price_data = int16_as_bytes(0x8000 | 0x100 * (item["price_type"] - 1) | item['price']) + slot = 0 if shop.type == ShopType.TakeAny else index if not item['item'] in item_table: # item not native to ALTTP item_code = get_nonnative_item_sprite(item['item']) else: @@ -1719,7 +1720,7 @@ def write_custom_shops(rom, world, player): if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro[player]: rom.write_byte(0x186500 + shop.sram_offset + slot, arrow_mask) - item_data = [shop_id, item_code] + int16_as_bytes(item['price']) + \ + item_data = [shop_id, item_code] + price_data + \ [item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \ int16_as_bytes(item['replacement_price']) + [0 if item['player'] == player else item['player']] items_data.extend(item_data) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index 29c1d639..e62e8402 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -1,5 +1,5 @@ from __future__ import annotations -from enum import unique, Enum +from enum import unique, IntEnum from typing import List, Optional, Set, NamedTuple, Dict import logging @@ -13,13 +13,14 @@ logger = logging.getLogger("Shops") @unique -class ShopType(Enum): +class ShopType(IntEnum): Shop = 0 TakeAny = 1 UpgradeShop = 2 + @unique -class ShopPriceType(Enum): +class ShopPriceType(IntEnum): Rupees = 0 Hearts = 1 Magic = 2 @@ -32,6 +33,7 @@ class ShopPriceType(Enum): Potion = 9 Item = 10 + class Shop(): slots: int = 3 # slot count is not dynamic in asm, however inventory can have None as empty slots blacklist: Set[str] = set() # items that don't work, todo: actually check against this @@ -112,7 +114,8 @@ class Shop(): 'player': player } - def push_inventory(self, slot: int, item: str, price: int, max: int = 1, player: int = 0, price_type: int = ShopPriceType.Rupees): + def push_inventory(self, slot: int, item: str, price: int, max: int = 1, player: int = 0, + price_type: int = ShopPriceType.Rupees): if not self.inventory[slot]: raise ValueError("Inventory can't be pushed back if it doesn't exist") @@ -185,7 +188,8 @@ def ShopSlotFill(world): blacklist_word in item_name for blacklist_word in blacklist_words)} blacklist_words.add("Bee") - locations_per_sphere = list(sorted(sphere, key=lambda location: location.name) for sphere in world.get_spheres()) + locations_per_sphere = list( + sorted(sphere, key=lambda location: location.name) for sphere in world.get_spheres()) # currently special care needs to be taken so that Shop.region.locations.item is identical to Shop.inventory # Potentially create Locations as needed and make inventory the only source, to prevent divergence @@ -241,7 +245,8 @@ def ShopSlotFill(world): item_name = location.item.name if location.item.game != "A Link to the Past": price = world.random.randrange(1, 28) - elif any(x in item_name for x in ['Compass', 'Map', 'Single Bomb', 'Single Arrow', 'Piece of Heart']): + elif any(x in item_name for x in + ['Compass', 'Map', 'Single Bomb', 'Single Arrow', 'Piece of Heart']): price = world.random.randrange(1, 7) elif any(x in item_name for x in ['Arrow', 'Bomb', 'Clock']): price = world.random.randrange(2, 14) @@ -269,7 +274,9 @@ def create_shops(world, player: int): world.random.shuffle(single_purchase_slots) if 'g' in option or 'f' in option: - default_shop_table = [i for l in [shop_generation_types[x] for x in ['arrows', 'bombs', 'potions', 'shields', 'bottle'] if not world.retro[player] or x != 'arrows'] for i in l] + default_shop_table = [i for l in + [shop_generation_types[x] for x in ['arrows', 'bombs', 'potions', 'shields', 'bottle'] if + not world.retro[player] or x != 'arrows'] for i in l] new_basic_shop = world.random.sample(default_shop_table, k=3) new_dark_shop = world.random.sample(default_shop_table, k=3) for name, shop in player_shop_table.items(): @@ -287,7 +294,8 @@ def create_shops(world, player: int): # make sure that blue potion is available in inverted, special case locked = None; lock when done. player_shop_table["Dark Lake Hylia Shop"] = \ player_shop_table["Dark Lake Hylia Shop"]._replace(items=_inverted_hylia_shop_defaults, locked=None) - chance_100 = int(world.retro[player])*0.25+int(world.smallkey_shuffle[player] == smallkey_shuffle.option_universal) * 0.5 + chance_100 = int(world.retro[player]) * 0.25 + int( + world.smallkey_shuffle[player] == smallkey_shuffle.option_universal) * 0.5 for region_name, (room_id, type, shopkeeper, custom, locked, inventory, sram_offset) in player_shop_table.items(): region = world.get_region(region_name, player) shop: Shop = shop_class_mapping[type](region, room_id, shopkeeper, custom, locked, sram_offset) @@ -359,7 +367,8 @@ total_dynamic_shop_slots = sum(3 for shopname, data in shop_table.items() if not SHOP_ID_START = 0x400000 shop_table_by_location_id = dict(enumerate( - (f"{name} {Shop.slot_names[num]}" for name, shop_data in sorted(shop_table.items(), key=lambda item: item[1].sram_offset) + (f"{name} {Shop.slot_names[num]}" for name, shop_data in + sorted(shop_table.items(), key=lambda item: item[1].sram_offset) for num in range(3)), start=SHOP_ID_START)) shop_table_by_location_id[(SHOP_ID_START + total_shop_slots)] = "Old Man Sword Cave" @@ -386,7 +395,8 @@ def set_up_shops(world, player: int): if world.retro[player]: rss = world.get_region('Red Shield Shop', player).shop replacement_items = [['Red Potion', 150], ['Green Potion', 75], ['Blue Potion', 200], ['Bombs (10)', 50], - ['Blue Shield', 50], ['Small Heart', 10]] # Can't just replace the single arrow with 10 arrows as retro doesn't need them. + ['Blue Shield', 50], ['Small Heart', + 10]] # Can't just replace the single arrow with 10 arrows as retro doesn't need them. if world.smallkey_shuffle[player] == smallkey_shuffle.option_universal: replacement_items.append(['Small Key (Universal)', 100]) replacement_item = world.random.choice(replacement_items) @@ -407,7 +417,6 @@ def set_up_shops(world, player: int): shop.push_inventory(next(slots), 'Single Arrow', 80) - def shuffle_shops(world, items, player: int): option = world.shop_shuffle[player] if 'u' in option: @@ -437,7 +446,8 @@ def shuffle_shops(world, items, player: int): if not new_items: break else: - logging.warning(f"Not all upgrades put into Player{player}' item pool. Putting remaining items in Capacity Upgrade shop instead.") + logging.warning( + f"Not all upgrades put into Player{player}' item pool. Putting remaining items in Capacity Upgrade shop instead.") bombupgrades = sum(1 for item in new_items if 'Bomb Upgrade' in item) arrowupgrades = sum(1 for item in new_items if 'Arrow Upgrade' in item) if bombupgrades: @@ -478,7 +488,6 @@ def shuffle_shops(world, items, player: int): adjust_item(item) if 'P' in option: - print('Making funny prices.') for item in total_inventory: price_to_funny_price(item, world, player) for shop in upgrade_shops: @@ -494,6 +503,7 @@ def shuffle_shops(world, items, player: int): shop.inventory = total_inventory[i:i + slots] i += slots + price_blacklist = { ShopPriceType.Rupees: {'Rupees'}, ShopPriceType.Hearts: {'Small Heart', 'Apple'}, @@ -501,37 +511,52 @@ price_blacklist = { ShopPriceType.Bombs: {'Bombs', 'Single Bomb'}, ShopPriceType.Arrows: {'Arrows', 'Single Arrow'}, ShopPriceType.HeartContainer: {}, - ShopPriceType.BombUpgrade: {}, - ShopPriceType.ArrowUpgrade: {}, - ShopPriceType.Keys: {}, + ShopPriceType.BombUpgrade: {"Bomb Upgrade"}, + ShopPriceType.ArrowUpgrade: {"Arrow Upgrade"}, + ShopPriceType.Keys: {"Small Key"}, ShopPriceType.Potion: {}, - # ShopPriceType.Item: {} } price_chart = { ShopPriceType.Rupees: lambda p: p, - ShopPriceType.Hearts: lambda p: min(1, p//5)*4, - ShopPriceType.Magic: lambda p: min(8, p//5)*4, - ShopPriceType.Bombs: lambda p: min(10, p//5), - ShopPriceType.Arrows: lambda p: min(30, p//5), + ShopPriceType.Hearts: lambda p: min(1, p // 5) * 4, + ShopPriceType.Magic: lambda p: min(8, p // 5) * 4, + ShopPriceType.Bombs: lambda p: min(10, p // 5), + ShopPriceType.Arrows: lambda p: min(30, p // 5), ShopPriceType.HeartContainer: lambda p: 0x8, ShopPriceType.BombUpgrade: lambda p: 0x1, ShopPriceType.ArrowUpgrade: lambda p: 0x1, - ShopPriceType.Keys: lambda p: min(3, (p//100)+1), - ShopPriceType.Potion: lambda p: (p//5)%5, - # ShopPriceType.Item: lambda p: 0, + ShopPriceType.Keys: lambda p: min(3, (p // 100) + 1), + ShopPriceType.Potion: lambda p: (p // 5) % 5, } -def price_to_funny_price(item, world, player): - if item is None: - return - my_price_types = [x for x in price_blacklist] - my_choices = world.random.sample(my_price_types, len(my_price_types)) - for p in my_choices: - if p in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade] or (p in [ShopPriceType.Keys] and world.smallkey_shuffle[player] == smallkey_shuffle.option_universal): - return - if any(x in item['item'] for x in price_blacklist[p]): - continue - else: - item['price'] = 0x8000 | 0x100*(p.value-1) | price_chart[p](item['price']) - break \ No newline at end of file +price_type_display_name = { + ShopPriceType.Rupees: "Rupees", + ShopPriceType.Hearts: "Hearts", + ShopPriceType.Bombs: "Bombs", + ShopPriceType.Arrows: "Arrows", +} + +# prices with no? logic requirements +simple_price_types = [ + ShopPriceType.Rupees, + ShopPriceType.Hearts, + ShopPriceType.Bombs, + ShopPriceType.Arrows, +] + + +def price_to_funny_price(item: dict, world, player: int): + if item: + my_price_types = simple_price_types.copy() + world.random.shuffle(my_price_types) + for p in my_price_types: + if p in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade] or ( + p in [ShopPriceType.Keys] and world.smallkey_shuffle[player] == smallkey_shuffle.option_universal): + return + if any(x in item['item'] for x in price_blacklist[p]): + continue + else: + item['price'] = price_chart[p](item['price']) + item['price_type'] = p + break From 8cc045f37017ef1a44cdb925fc2ea1f9b5cb3b2e Mon Sep 17 00:00:00 2001 From: pepperpow Date: Sun, 12 Sep 2021 16:09:13 -0500 Subject: [PATCH 03/46] Fixes to barter pricing min/max, future key logic, spoiler log --- BaseClasses.py | 5 +++-- worlds/alttp/Rom.py | 10 +++++++-- worlds/alttp/Shops.py | 50 ++++++++++++++++++++++++++++++++----------- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 130a7657..350260d4 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1056,7 +1056,7 @@ class Spoiler(): listed_locations.update(other_locations) self.shops = [] - from worlds.alttp.Shops import ShopType, price_type_display_name + from worlds.alttp.Shops import ShopType, price_type_display_name, price_rate_display for shop in self.world.shops: if not shop.custom: continue @@ -1067,7 +1067,8 @@ class Spoiler(): for index, item in enumerate(shop.inventory): if item is None: continue - shopdata['item_{}'.format(index)] = f"{item['item']} — {item['price']} {price_type_display_name[item['price_type']]}" + my_price = item['price'] // price_rate_display.get(item['price_type'], 1) + shopdata['item_{}'.format(index)] = f"{item['item']} — {my_price} {price_type_display_name[item['price_type']]}" if item['player'] > 0: shopdata['item_{}'.format(index)] = shopdata['item_{}'.format(index)].replace('—', '(Player {}) — '.format(item['player'])) diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index e8a697e3..2f96c4c4 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -22,7 +22,7 @@ from typing import Optional from BaseClasses import CollectionState, Region from worlds.alttp.SubClasses import ALttPLocation -from worlds.alttp.Shops import ShopType +from worlds.alttp.Shops import ShopType, ShopPriceType from worlds.alttp.Dungeons import dungeon_music_addresses from worlds.alttp.Regions import location_table, old_location_address_to_new_location_address from worlds.alttp.Text import MultiByteTextMapper, text_addresses, Credits, TextTable @@ -1711,7 +1711,13 @@ def write_custom_shops(rom, world, player): for index, item in enumerate(shop.inventory): if item is None: break - price_data = int16_as_bytes(0x8000 | 0x100 * (item["price_type"] - 1) | item['price']) + if item['price_type'] != ShopPriceType.Rupees: + # Set special price flag 0x8000 + # Then set the type of price we're setting 0x7F00 (this starts from Hearts, not Rupees, subtract 1) + # Then append the price/index into the second byte 0x00FF + price_data = int16_as_bytes(0x8000 | 0x100 * (item["price_type"] - 1) | item['price']) + else: + price_data = int16_as_bytes(item['price']) slot = 0 if shop.type == ShopType.TakeAny else index if not item['item'] in item_table: # item not native to ALTTP item_code = get_nonnative_item_sprite(item['item']) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index e62e8402..b4dca40c 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -458,7 +458,7 @@ def shuffle_shops(world, items, player: int): for item in new_items: world.push_precollected(ItemFactory(item, player)) - if 'p' in option or 'i' in option: + if any(setting in option for setting in 'ipP'): shops = [] upgrade_shops = [] total_inventory = [] @@ -490,9 +490,12 @@ def shuffle_shops(world, items, player: int): if 'P' in option: for item in total_inventory: price_to_funny_price(item, world, player) + # Don't apply to upgrade shops + # Upgrade shop is only one place, and will generally be too easy to + # replenish hearts and bombs for shop in upgrade_shops: for item in shop.inventory: - price_to_funny_price(item, world, player) + pass if 'i' in option: world.random.shuffle(total_inventory) @@ -519,14 +522,14 @@ price_blacklist = { price_chart = { ShopPriceType.Rupees: lambda p: p, - ShopPriceType.Hearts: lambda p: min(1, p // 5) * 4, - ShopPriceType.Magic: lambda p: min(8, p // 5) * 4, - ShopPriceType.Bombs: lambda p: min(10, p // 5), - ShopPriceType.Arrows: lambda p: min(30, p // 5), + ShopPriceType.Hearts: lambda p: min(5, p // 5) * 8, # Each heart is 0x8 in memory, Max of 5 hearts (20 total??) + ShopPriceType.Magic: lambda p: min(15, p // 5) * 8, # Each pip is 0x8 in memory, Max of 15 pips (16 total...) + ShopPriceType.Bombs: lambda p: max(1, min(10, p // 5)), # 10 Bombs max + ShopPriceType.Arrows: lambda p: max(1, min(30, p // 5)), # 30 Arrows Max ShopPriceType.HeartContainer: lambda p: 0x8, ShopPriceType.BombUpgrade: lambda p: 0x1, ShopPriceType.ArrowUpgrade: lambda p: 0x1, - ShopPriceType.Keys: lambda p: min(3, (p // 100) + 1), + ShopPriceType.Keys: lambda p: min(3, (p // 100) + 1), # Max of 3 keys for a price ShopPriceType.Potion: lambda p: (p // 5) % 5, } @@ -535,6 +538,13 @@ price_type_display_name = { ShopPriceType.Hearts: "Hearts", ShopPriceType.Bombs: "Bombs", ShopPriceType.Arrows: "Arrows", + ShopPriceType.Keys: "Keys", +} + +# price division +price_rate_display = { + ShopPriceType.Hearts: 8, + ShopPriceType.Magic: 8, } # prices with no? logic requirements @@ -543,20 +553,34 @@ simple_price_types = [ ShopPriceType.Hearts, ShopPriceType.Bombs, ShopPriceType.Arrows, + ShopPriceType.Keys ] def price_to_funny_price(item: dict, world, player: int): + """ + Converts a raw Rupee price into a special price type + """ if item: my_price_types = simple_price_types.copy() world.random.shuffle(my_price_types) - for p in my_price_types: - if p in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade] or ( - p in [ShopPriceType.Keys] and world.smallkey_shuffle[player] == smallkey_shuffle.option_universal): + for p_type in my_price_types: + # Ignore rupee prices, logic-based prices or Keys (if we're not on universal keys) + if p_type in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade]: return - if any(x in item['item'] for x in price_blacklist[p]): + # If we're using keys... + # Check if we're in universal, check if our replacement isn't a Small Key + # Check if price isn't super small... (this will ideally be handled in a future table) + if p_type in [ShopPriceType.Keys]: + if world.smallkey_shuffle[player] != smallkey_shuffle.option_universal: + continue + elif item['replacement'] and 'Small Key' in item['replacement']: + continue + if item['price'] < 50: + continue + if any(x in item['item'] for x in price_blacklist[p_type]): continue else: - item['price'] = price_chart[p](item['price']) - item['price_type'] = p + item['price'] = min(price_chart[p_type](item['price']) , 255) + item['price_type'] = p_type break From 0c57d354028e43a31f90bc39afdc02bd69eb9835 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 12 Sep 2021 21:15:03 +0200 Subject: [PATCH 04/46] CommonClient: reduce blind sleep time of keep_alive --- CommonClient.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index b8438bdb..456311fa 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -224,13 +224,17 @@ class CommonContext(): pass -async def keep_alive(ctx: CommonContext): - """ some ISPs/network configurations drop TCP connections if no payload is sent (ignore TCP-keep-alive) - so we send a payload to prevent drop and if we were dropped anyway this will cause a reconnect.""" +async def keep_alive(ctx: CommonContext, seconds_between_checks=100): + """some ISPs/network configurations drop TCP connections if no payload is sent (ignore TCP-keep-alive) + so we send a payload to prevent drop and if we were dropped anyway this will cause an auto-reconnect.""" + seconds_elapsed = 0 while not ctx.exit_event.is_set(): - await asyncio.sleep(100) + await asyncio.sleep(1) # short sleep to not block program shutdown if ctx.server and ctx.slot: - await ctx.send_msgs([{"cmd": "Bounce", "slots": [ctx.slot]}]) + seconds_elapsed += 1 + if seconds_elapsed > seconds_between_checks: + await ctx.send_msgs([{"cmd": "Bounce", "slots": [ctx.slot]}]) + seconds_elapsed = 0 async def server_loop(ctx: CommonContext, address=None): From fbb220ce85f20545a6896a970ddc3e6b685a4a91 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Mon, 13 Sep 2021 02:51:59 +0200 Subject: [PATCH 05/46] remove pass --- worlds/alttp/Shops.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index b4dca40c..74e18089 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -493,9 +493,6 @@ def shuffle_shops(world, items, player: int): # Don't apply to upgrade shops # Upgrade shop is only one place, and will generally be too easy to # replenish hearts and bombs - for shop in upgrade_shops: - for item in shop.inventory: - pass if 'i' in option: world.random.shuffle(total_inventory) From 8411b76ee5e14bd4498de924c3da6993ea6c761b Mon Sep 17 00:00:00 2001 From: Edos512 <30857677+Edos512@users.noreply.github.com> Date: Fri, 24 Sep 2021 20:42:35 +0200 Subject: [PATCH 06/46] Update minecraft_es.md (#80) * Update minecraft_es.md Updated spanish minecraft tutorial --- .../assets/tutorial/minecraft/minecraft_es.md | 172 +++++++++--------- 1 file changed, 91 insertions(+), 81 deletions(-) diff --git a/WebHostLib/static/assets/tutorial/minecraft/minecraft_es.md b/WebHostLib/static/assets/tutorial/minecraft/minecraft_es.md index a0e9d71c..8cd35fba 100644 --- a/WebHostLib/static/assets/tutorial/minecraft/minecraft_es.md +++ b/WebHostLib/static/assets/tutorial/minecraft/minecraft_es.md @@ -1,52 +1,12 @@ # Guia instalación de Minecraft Randomizer +#Instalacion automatica para el huesped de partida +- descarga e instala [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases) and activa el modulo `Minecraft Client` + ## Software Requerido -### Servidor -- [Minecraft Forge](https://files.minecraftforge.net/net/minecraftforge/forge/index_1.16.5.html) -- [Minecraft Archipelago Randomizer Mod](https://github.com/KonoTyran/Minecraft_AP_Randomizer/releases) - -### Jugadores - [Minecraft Java Edition](https://www.minecraft.net/en-us/store/minecraft-java-edition) -## Procedimiento de instalación - -### Instalación de servidor dedicado -Solo una persona ha de realizar este proceso y hospedar un servidor dedicado para que los demas jueguen conectandose a él. -1. Descarga el instalador de **Minecraft Forge** 1.16.15 desde el enlace proporcionado, siempre asegurandose de bajar la version mas reciente. - -2. Ejecuta el fichero `forge-1.16.5-xx.x.x-installer.jar` y elije **install server**. - - En esta pagina elegiras ademas donde instalar el servidor, importante recordar esta localización en el siguiente paso. - -3. Navega al directorio donde hayas instalado el servidor y abre `forge-1.16.5-xx.x.x.jar` - - La primera vez que lances el servidor se cerrara (o no aparecerá nada en absoluto), debería haber un fichero nuevo en el directorio llamado `eula.txt`, el cual que contiene un enlace al EULA de minecraft, cambia la linea a `eula=true` para aceptar el EULA y poder utilizar el software de servidor. - - Esto creara la estructura de directorios apropiada para el siguiente paso - -4. Coloca el fichero `aprandomizer-x.x.x.jar` del segundo enlace en el directorio `mods` - - Cuando se ejecute el servidor de nuevo, generara el directorio `APData` que se necesitara para jugar - -### Instalación basica para jugadores -- Compra e instala Minecraft a traves del tercer enlace. - **Y listo!**. - Los jugadores solo necesitan una version no modificada de Minecraft para jugar! - -### Instalación avanzada para jugadores -***Esto no es requerido para jugar a minecraft randomizado.*** -Sin embargo lo recomendamos porque hace la experiencia mas llevadera. - -#### Recomended Mods -- [JourneyMap](https://www.curseforge.com/minecraft/mc-mods/journeymap) (Minimap) - - -1. Instala y ejecuta Minecraft al menos una vez. -2. Ejecuta el fichero `forge-1.16.5-xx.x.x-installer.jar` y elige **install client**. - - Ejecuta Minecraft forge al menos una vez para generar los directorios necesarios para el siguiente paso. -3. Navega a la carpeta de instalación de Minecraft y colocal los mods que quieras en el directorio `mods` - - Los directorios por defecto de instalación son: - - Windows `%APPDATA%\.minecraft\mods` - - macOS `~/Library/Application Support/minecraft/mods` - - Linux `~/.minecraft/mods` - ## Configura tu fichero YAML ### Que es un fichero YAML y potque necesito uno? @@ -58,42 +18,71 @@ pueden tener diferentes opciones ### Where do I get a YAML file? Un fichero basico yaml para minecraft tendra este aspecto. ```yaml -# Usado para describir tu yaml. Util si tienes multiples ficheros -description: Template Name -# Tu nombre en el juego. Los espacios son reemplazados por guiones bajos, limitado a 16 caracteres -name: YourName +description: Basic Minecraft Yaml +# Tu nombre en el juego. Espacios seran sustituidos por guinoes bajos y +# hay un limite de 16 caracteres +name: TuNombre game: Minecraft -accessibility: locations -# Recomendado no activar esto ya que el pool de objetos de Minecraft es bastante escueto, ademas hay muchas maneras alternativas de obtener los objetivos de Minecraft. -progression_balancing: off -# Cuantos avances se necesitan para hacer aparecer el Ender Dragon y acabar el juego. few = 30, normal = 50 , many = 70 -advancement_goal: - few: 0 - normal: 1 - many: 0 -# Modifica el nivel de objetos lógicamente requeridos para explorar areas peligrosas y pelear contra jefes. -combat_difficulty: - easy: 0 - normal: 1 - hard: 0 -# Avances que sean tediosos o basados en suerte tendran simplemente experiencia o cosas no necesarias -include_hard_advancements: - on: 0 - off: 1 -# Los avances extremadamente difíciles no seran requeridos; esto afecta a How Did We Get Here? y Adventuring Time. -include_insane_advancements: - on: 0 - off: 1 -# Los avances posteriores a Ender Dragon no tendrán objetos necesarios para que otros jugadores en el caso de un MW acaben su partida. -include_postgame_advancements: - on: 0 - off: 1 -# Actualmente desactivado; permite la mezcla de pueblos, puestos, fortalezas, bastiones y cuidades. -shuffle_structures: - on: 0 - off: 1 -``` +# Opciones compartidas por todos los juegos: +accessibility: locations +progression_balancing: on +# Opciones Especficicas para Minecraft + +Minecraft: + # Numero de logros requeridos (87 max) para que aparezca el Ender Dragon y completar el juego. + advancement_goal: 50 + + # Numero de trozos de huevo de dragon a obtener (30 max) antes de que el Ender Dragon aparezca. + egg_shards_required: 10 + + # Numero de huevos disponibles en la partida (30 max). + egg_shards_available: 15 + + # Modifica el nivel de objetos logicamente requeridos para + # explorar areas peligrosas y luchar contra jefes. + combat_difficulty: + easy: 0 + normal: 1 + hard: 0 + + # Si off, los logros que dependan de suerte o sean tediosos tendran objetos de apoyo, no necesarios para completar el juego. + include_hard_advancements: + on: 0 + off: 1 + + # Si off, los logros muy dificiles tendran objetos de apoyo, no necesarios para completar el juego. + # Solo afecta a How Did We Get Here? and Adventuring Time. + include_insane_advancements: + on: 0 + off: 1 + + # Algunos logros requieren derrotar al Ender Dragon; + # Si esto se queda en off, dichos logros no tendran objetos necesarios. + include_postgame_advancements: + on: 0 + off: 1 + + # Permite el mezclado de villas, puesto, fortalezas, bastiones y ciudades de END. + shuffle_structures: + on: 0 + off: 1 + + # Añade brujulas de estructura al juego, + # apuntaran a la estructura correspondiente mas cercana. + structure_compasses: + on: 0 + off: 1 + + # Reemplaza un porcentaje de objetos innecesarios por trampas abeja + # las cuales crearan multiples abejas agresivas alrededor de los jugadores cuando se reciba. + bee_traps: + 0: 1 + 25: 0 + 50: 0 + 75: 0 + 100: 0 +``` ## Unirse a un juego MultiWorld @@ -104,18 +93,39 @@ Cuando te unes a un juego multiworld, se te pedirá que entregues tu fichero YAM Una vez la generación acabe, el anfitrión te dará un enlace a tu fichero de datos o un zip con los ficheros de todos. Tu fichero de datos tiene una extensión `.apmc`. -Pon tu fichero de datos en el directorio `APData` de tu forge server. Asegurate de eliminar los que hubiera anteriormente - +Haz doble click en tu fichero `.apmc` para que se arranque el cliente de minecraft y el servidor forge se ejecute. ### Conectar al multiserver Despues de poner tu fichero en el directorio `APData`, arranca el Forge server y asegurate que tienes el estado OP tecleando `/op TuUsuarioMinecraft` en la consola del servidor y entonces conectate con tu cliente Minecraft. -Una vez en juego introduce `/connect ()` donde `` es la dirección del servidor -Archipelago. `()` +Una vez en juego introduce `/connect (Port) ()` donde `` es la dirección del servidor. `(Port)` solo es requerido si el servidor Archipelago no esta usando el puerto por defecto 38281. +`()` solo se necesita si el servidor Archipleago tiene un password activo. + ### Jugar al juego Cuando la consola te diga que te has unido a la sala, estas lista/o para empezar a jugar. Felicidades por unirte exitosamente a un juego multiworld! Llegados a este punto cualquier jugador adicional puede conectarse a tu servidor forge. +## Procedimiento de instalación manual +Solo es requerido si quieres usar una instalacion de forge por ti mismo, recomendamos usar el instalador de Archipelago +###Software Requerido +- [Minecraft Forge](https://files.minecraftforge.net/net/minecraftforge/forge/index_1.16.5.html) +- [Minecraft Archipelago Randomizer Mod](https://github.com/KonoTyran/Minecraft_AP_Randomizer/releases) +**NO INSTALES ESTO EN TU CLIENTE MINECRAFT** + + +### Instalación de servidor dedicado +Solo una persona ha de realizar este proceso y hospedar un servidor dedicado para que los demas jueguen conectandose a él. +1. Descarga el instalador de **Minecraft Forge** 1.16.5 desde el enlace proporcionado, siempre asegurandose de bajar la version mas reciente. + +2. Ejecuta el fichero `forge-1.16.5-xx.x.x-installer.jar` y elije **install server**. + - En esta pagina elegiras ademas donde instalar el servidor, importante recordar esta localización en el siguiente paso. + +3. Navega al directorio donde hayas instalado el servidor y abre `forge-1.16.5-xx.x.x.jar` + - La primera vez que lances el servidor se cerrara (o no aparecerá nada en absoluto), debería haber un fichero nuevo en el directorio llamado `eula.txt`, el cual que contiene un enlace al EULA de minecraft, cambia la linea a `eula=true` para aceptar el EULA y poder utilizar el software de servidor. + - Esto creara la estructura de directorios apropiada para el siguiente paso + +4. Coloca el fichero `aprandomizer-x.x.x.jar` del segundo enlace en el directorio `mods` + - Cuando se ejecute el servidor de nuevo, generara el directorio `APData` que se necesitara para jugar From ec0a5df5a14267b2c13c7b5fc7595918c76292c4 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Mon, 20 Sep 2021 15:58:13 -0500 Subject: [PATCH 07/46] give Song from Impa and ZL as starting items if skip_child_zelda is on --- worlds/oot/__init__.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 903dd1ef..ae22d603 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -650,12 +650,16 @@ class OOTWorld(World): # If skip child zelda is active and Song from Impa is unfilled, put a local giveable item into it. impa = self.world.get_location("Song from Impa", self.player) - if self.skip_child_zelda and impa.item is None: - from .SaveContext import SaveContext - item_to_place = self.world.random.choice(list(item for item in self.world.itempool if - item.player == self.player and item.name in SaveContext.giveable_items)) - impa.place_locked_item(item_to_place) - self.world.itempool.remove(item_to_place) + if self.skip_child_zelda: + if impa.item is None: + from .SaveContext import SaveContext + item_to_place = self.world.random.choice(list(item for item in self.world.itempool if + item.player == self.player and item.name in SaveContext.giveable_items)) + impa.place_locked_item(item_to_place) + self.world.itempool.remove(item_to_place) + # Give items to startinventory + self.world.push_precollected(impa.item) + self.world.push_precollected(self.create_item("Zeldas Letter")) # Exclude locations in Ganon's Castle proportional to the number of items required to make the bridge # Check for dungeon ER later From 5570440eb1d9963bbadd910f31597e8997b108e5 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Fri, 24 Sep 2021 13:28:10 -0500 Subject: [PATCH 08/46] Ocarina of Time webtracker --- WebHostLib/static/styles/ootTracker.css | 136 ++++++++++++++++++ WebHostLib/templates/ootTracker.html | 180 ++++++++++++++++++++++++ WebHostLib/tracker.py | 178 +++++++++++++++++++++++ 3 files changed, 494 insertions(+) create mode 100644 WebHostLib/static/styles/ootTracker.css create mode 100644 WebHostLib/templates/ootTracker.html diff --git a/WebHostLib/static/styles/ootTracker.css b/WebHostLib/static/styles/ootTracker.css new file mode 100644 index 00000000..579ed377 --- /dev/null +++ b/WebHostLib/static/styles/ootTracker.css @@ -0,0 +1,136 @@ +#player-tracker-wrapper{ + margin: 0; +} + +#inventory-table{ + border-top: 2px solid #000000; + border-left: 2px solid #000000; + border-right: 2px solid #000000; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding: 3px 3px 10px; + width: 448px; + background-color: rgb(60, 114, 157); +} + +#inventory-table td{ + width: 40px; + height: 40px; + text-align: center; + vertical-align: middle; +} + +#inventory-table img{ + height: 100%; + max-width: 40px; + max-height: 40px; + filter: grayscale(100%) contrast(75%) brightness(30%); +} + +#inventory-table img.acquired{ + filter: none; +} + +#inventory-table div.counted-item { + position: relative; +} + +#inventory-table div.item-count { + position: absolute; + color: white; + font-family: monospace; + font-weight: bold; + font-size: 1.1em; + bottom: 0px; + right: 8px; +} + +#location-table{ + width: 448px; + border-left: 2px solid #000000; + border-right: 2px solid #000000; + border-bottom: 2px solid #000000; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + background-color: rgb(60, 114, 157); + padding: 0 3px 3px; + font-family: monospace; + font-size: 15px; + cursor: default; +} + +#location-table th{ + vertical-align: middle; + text-align: left; + padding-right: 10px; +} + +#location-table td{ + padding-top: 2px; + padding-bottom: 2px; + line-height: 20px; +} + +#location-table td.counter { + text-align: right; + font-size: 15px; +} + +#location-table td.toggle-arrow { + text-align: right; +} + +#location-table tr#Total-header { + font-weight: bold; +} + +#location-table img{ + height: 100%; + max-width: 30px; + max-height: 30px; +} + +#location-table tbody.locations { + font-size: 13px; +} + +#location-table td.location-name { + padding-left: 16px; +} + +.hide { + display: none; +} + +.right-align { + text-align: right; + font-weight: bold; +} + +#location-table td:first-child { + width: 272px; +} + +.location-category td:first-child { + padding-right: 16px; +} + +#inventory-table img.acquired#lullaby{ + filter: sepia(100%) hue-rotate(-60deg); /* css trick to hue-shift a static image */ +} + +#inventory-table img.acquired#epona{ + filter: sepia(100%) hue-rotate(-20deg) saturate(250%); +} + +#inventory-table img.acquired#saria{ + filter: sepia(100%) hue-rotate(60deg) saturate(150%); +} + +#inventory-table img.acquired#sun{ + filter: sepia(100%) hue-rotate(15deg) saturate(200%) brightness(120%); +} + +#inventory-table img.acquired#time{ + filter: sepia(100%) hue-rotate(160deg) saturate(150%); +} diff --git a/WebHostLib/templates/ootTracker.html b/WebHostLib/templates/ootTracker.html new file mode 100644 index 00000000..64d61ae7 --- /dev/null +++ b/WebHostLib/templates/ootTracker.html @@ -0,0 +1,180 @@ + + + + {{ player_name }}'s Tracker + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
{{ hookshot_length }}
+
+
+
+ +
{{ bottle_count if bottle_count > 0 else '' }}
+
+
+
+ +
{{ wallet_size }}
+
+
+
+ +
Zelda
+
+
+
+ +
Epona
+
+
+
+ +
Saria
+
+
+
+ +
Sun
+
+
+
+ +
Time
+
+
+
+ +
Storms
+
+
+
+ +
{{ token_count }}
+
+
+
+ +
Min
+
+
+
+ +
Bol
+
+
+
+ +
Ser
+
+
+
+ +
Req
+
+
+
+ +
Noc
+
+
+
+ +
Pre
+
+
+
+ +
{{ piece_count if piece_count > 0 else '' }}
+
+
+ + + + + + + + {% for area in checks_done %} + + + + + + + + {% for location in location_info[area] %} + + + + + + + {% endfor %} + + {% endfor %} +
Items
{{ area }} {{'▼' if area != 'Total'}}{{ small_key_counts.get(area, '-') }}{{ boss_key_counts.get(area, '-') }}{{ checks_done[area] }} / {{ checks_in_area[area] }}
{{ location }}{{ '✔' if location_info[area][location] else '' }}
+
+ + diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py index 624335e0..b34c520d 100644 --- a/WebHostLib/tracker.py +++ b/WebHostLib/tracker.py @@ -524,6 +524,184 @@ def getPlayerTracker(tracker: UUID, tracked_team: int, tracked_player: int): checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, **display_data) + elif games[tracked_player] == "Ocarina of Time": + oot_icons = { + "Fairy Ocarina": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/97/OoT_Fairy_Ocarina_Icon.png", + "Ocarina of Time": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/4/4e/OoT_Ocarina_of_Time_Icon.png", + "Slingshot": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/3/32/OoT_Fairy_Slingshot_Icon.png", + "Boomerang": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/d/d5/OoT_Boomerang_Icon.png", + "Bottle": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/f/fc/OoT_Bottle_Icon.png", + "Rutos Letter": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/OoT_Letter_Icon.png", + "Bombs": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/1/11/OoT_Bomb_Icon.png", + "Bombchus": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/3/36/OoT_Bombchu_Icon.png", + "Lens of Truth": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/0/05/OoT_Lens_of_Truth_Icon.png", + "Bow": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/9a/OoT_Fairy_Bow_Icon.png", + "Hookshot": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/7/77/OoT_Hookshot_Icon.png", + "Longshot": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/a/a4/OoT_Longshot_Icon.png", + "Megaton Hammer": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/93/OoT_Megaton_Hammer_Icon.png", + "Fire Arrows": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/1/1e/OoT_Fire_Arrow_Icon.png", + "Ice Arrows": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/3/3c/OoT_Ice_Arrow_Icon.png", + "Light Arrows": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/7/76/OoT_Light_Arrow_Icon.png", + "Dins Fire": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/d/da/OoT_Din%27s_Fire_Icon.png", + "Farores Wind": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/7/7a/OoT_Farore%27s_Wind_Icon.png", + "Nayrus Love": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/b/be/OoT_Nayru%27s_Love_Icon.png", + "Kokiri Sword": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/5/53/OoT_Kokiri_Sword_Icon.png", + "Biggoron Sword": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/2e/OoT_Giant%27s_Knife_Icon.png", + "Mirror Shield": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/b/b0/OoT_Mirror_Shield_Icon_2.png", + "Goron Bracelet": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/b/b7/OoT_Goron%27s_Bracelet_Icon.png", + "Silver Gauntlets": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/b/b9/OoT_Silver_Gauntlets_Icon.png", + "Golden Gauntlets": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/6/6a/OoT_Golden_Gauntlets_Icon.png", + "Goron Tunic": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/1/1c/OoT_Goron_Tunic_Icon.png", + "Zora Tunic": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/2c/OoT_Zora_Tunic_Icon.png", + "Silver Scale": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/4/4e/OoT_Silver_Scale_Icon.png", + "Gold Scale": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/95/OoT_Golden_Scale_Icon.png", + "Iron Boots": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/3/34/OoT_Iron_Boots_Icon.png", + "Hover Boots": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/22/OoT_Hover_Boots_Icon.png", + "Adults Wallet": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/f/f9/OoT_Adult%27s_Wallet_Icon.png", + "Giants Wallet": r"https://static.wikia.nocookie.net/zelda_gamepedia_en/images/8/87/OoT_Giant%27s_Wallet_Icon.png", + "Small Magic": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/9f/OoT3D_Magic_Jar_Icon.png", + "Large Magic": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/3/3e/OoT3D_Large_Magic_Jar_Icon.png", + "Gerudo Membership Card": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/4/4e/OoT_Gerudo_Token_Icon.png", + "Gold Skulltula Token": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/4/47/OoT_Token_Icon.png", + "Triforce Piece": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/0/0b/SS_Triforce_Piece_Icon.png", + "Triforce": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/6/68/ALttP_Triforce_Title_Sprite.png", + "Zeldas Lullaby": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Eponas Song": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Sarias Song": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Suns Song": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Song of Time": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Song of Storms": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/2/21/Grey_Note.png", + "Minuet of Forest": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/e/e4/Green_Note.png", + "Bolero of Fire": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/f/f0/Red_Note.png", + "Serenade of Water": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/0/0f/Blue_Note.png", + "Requiem of Spirit": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/a/a4/Orange_Note.png", + "Nocturne of Shadow": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/97/Purple_Note.png", + "Prelude of Light": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/90/Yellow_Note.png", + "Small Key": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/e/e5/OoT_Small_Key_Icon.png", + "Boss Key": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/4/40/OoT_Boss_Key_Icon.png", + } + + display_data = {} + + # Determine display for progressive items + progressive_items = { + "Progressive Hookshot": 66128, + "Progressive Strength Upgrade": 66129, + "Progressive Wallet": 66133, + "Progressive Scale": 66134, + "Magic Meter": 66138, + "Ocarina": 66139, + } + progressive_names = { + "Progressive Hookshot": ["Hookshot", "Hookshot", "Longshot"], + "Progressive Strength Upgrade": ["Goron Bracelet", "Goron Bracelet", "Silver Gauntlets", "Golden Gauntlets"], + "Progressive Wallet": ["Adults Wallet", "Adults Wallet", "Giants Wallet", "Giants Wallet"], + "Progressive Scale": ["Silver Scale", "Silver Scale", "Gold Scale"], + "Magic Meter": ["Small Magic", "Small Magic", "Large Magic"], + "Ocarina": ["Fairy Ocarina", "Fairy Ocarina", "Ocarina of Time"] + } + for item_name, item_id in progressive_items.items(): + level = min(inventory[item_id], len(progressive_names[item_name])-1) + display_name = progressive_names[item_name][level] + if item_name.startswith("Progressive"): + base_name = item_name.split(maxsplit=1)[1].lower().replace(' ', '_') + else: + base_name = item_name.lower().replace(' ', '_') + display_data[base_name+"_url"] = oot_icons[display_name] + + if base_name == "hookshot": + display_data['hookshot_length'] = {0: '', 1: 'H', 2: 'L'}.get(level) + if base_name == "wallet": + display_data['wallet_size'] = {0: '99', 1: '200', 2: '500', 3: '999'}.get(level) + + # Determine display for bottles. Show letter if it's obtained, determine bottle count + bottle_ids = [66015, 66020, 66021, 66140, 66141, 66142, 66143, 66144, 66145, 66146, 66147, 66148] + display_data['bottle_count'] = min(sum(map(lambda item_id: inventory[item_id], bottle_ids)), 4) + display_data['bottle_url'] = oot_icons['Rutos Letter'] if inventory[66021] > 0 else oot_icons['Bottle'] + + # Determine bombchu display + display_data['has_bombchus'] = any(map(lambda item_id: inventory[item_id] > 0, [66003, 66106, 66107, 66137])) + + # Multi-items + multi_items = { + "Gold Skulltula Token": 66091, + "Triforce Piece": 66202, + } + for item_name, item_id in multi_items.items(): + base_name = item_name.split()[-1].lower() + count = inventory[item_id] + display_data[base_name+"_count"] = inventory[item_id] + + # Gather dungeon locations + area_id_ranges = { + "Overworld": (67000, 67280), + "Deku Tree": (67281, 67303), + "Dodongo's Cavern": (67304, 67334), + "Jabu Jabu's Belly": (67335, 67359), + "Bottom of the Well": (67360, 67384), + "Forest Temple": (67385, 67420), + "Fire Temple": (67421, 67457), + "Water Temple": (67458, 67484), + "Shadow Temple": (67485, 67532), + "Spirit Temple": (67533, 67582), + "Ice Cavern": (67583, 67596), + "Gerudo Training Grounds": (67597, 67635), + "Ganon's Castle": (67636, 67673), + } + def lookup_and_trim(id, area): + full_name = lookup_any_location_id_to_name[id] + if id == 67673: + return full_name[13:] # Ganons Tower Boss Key Chest + if area != 'Overworld': + return full_name[len(area):] # trim dungeon name. leaves an extra space that doesn't display, or trims fully for DC/Jabu/GC + return full_name + + checked_locations = multisave.get("location_checks", {}).get((tracked_team, tracked_player), set()).intersection(set(locations[tracked_player])) + location_info = {area: {lookup_and_trim(id, area): id in checked_locations for id in range(min_id, max_id+1) if id in locations[tracked_player]} + for area, (min_id, max_id) in area_id_ranges.items()} + checks_done = {area: len(list(filter(lambda x: x, location_info[area].values()))) for area in area_id_ranges} + checks_in_area = {area: len([id for id in range(min_id, max_id+1) if id in locations[tracked_player]]) + for area, (min_id, max_id) in area_id_ranges.items()} + checks_done['Total'] = sum(checks_done.values()) + checks_in_area['Total'] = sum(checks_in_area.values()) + + # Give skulltulas on non-tracked locations + non_tracked_locations = multisave.get("location_checks", {}).get((tracked_team, tracked_player), set()).difference(set(locations[tracked_player])) + for id in non_tracked_locations: + if "GS" in lookup_and_trim(id, ''): + display_data["token_count"] += 1 + + # Gather small and boss key info + small_key_counts = { + "Forest Temple": inventory[66175], + "Fire Temple": inventory[66176], + "Water Temple": inventory[66177], + "Spirit Temple": inventory[66178], + "Shadow Temple": inventory[66179], + "Bottom of the Well": inventory[66180], + "Gerudo Training Grounds": inventory[66181], + "Ganon's Castle": inventory[66183], + } + boss_key_counts = { + "Forest Temple": '✔' if inventory[66149] else '✕', + "Fire Temple": '✔' if inventory[66150] else '✕', + "Water Temple": '✔' if inventory[66151] else '✕', + "Spirit Temple": '✔' if inventory[66152] else '✕', + "Shadow Temple": '✔' if inventory[66153] else '✕', + "Ganon's Castle": '✔' if inventory[66154] else '✕', + } + + # Victory condition + game_state = multisave.get("client_game_state", {}).get((tracked_team, tracked_player), 0) + display_data['game_finished'] = game_state == 30 + + return render_template("ootTracker.html", + inventory=inventory, player=tracked_player, team=tracked_team, room=room, player_name=player_name, + icons=oot_icons, acquired_items={lookup_any_item_id_to_name[id] for id in inventory}, + checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, + small_key_counts=small_key_counts, boss_key_counts=boss_key_counts, + **display_data) + else: checked_locations = multisave.get("location_checks", {}).get((tracked_team, tracked_player), set()) player_received_items = {} From c3070be14afba40e3df4a49875e9df4d793aee75 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Fri, 24 Sep 2021 16:57:24 -0500 Subject: [PATCH 09/46] Update small and boss key counters during the normal update cycle --- WebHostLib/static/assets/ootTracker.js | 52 ++++++++++++++++++++++++++ WebHostLib/templates/ootTracker.html | 6 +-- 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 WebHostLib/static/assets/ootTracker.js diff --git a/WebHostLib/static/assets/ootTracker.js b/WebHostLib/static/assets/ootTracker.js new file mode 100644 index 00000000..3c4448a7 --- /dev/null +++ b/WebHostLib/static/assets/ootTracker.js @@ -0,0 +1,52 @@ +window.addEventListener('load', () => { + // Reload tracker every 15 seconds + const url = window.location; + setInterval(() => { + const ajax = new XMLHttpRequest(); + ajax.onreadystatechange = () => { + if (ajax.readyState !== 4) { return; } + + // Create a fake DOM using the returned HTML + const domParser = new DOMParser(); + const fakeDOM = domParser.parseFromString(ajax.responseText, 'text/html'); + + // Update item tracker + document.getElementById('inventory-table').innerHTML = fakeDOM.getElementById('inventory-table').innerHTML; + // Update only counters, small keys, and boss keys in the location-table + const types = ['counter', 'smallkeys', 'bosskeys']; + for (let j = 0; j < types.length; j++) { + let counters = document.getElementsByClassName(types[j]); + const fakeCounters = fakeDOM.getElementsByClassName(types[j]); + for (let i = 0; i < counters.length; i++) { + counters[i].innerHTML = fakeCounters[i].innerHTML; + } + } + }; + ajax.open('GET', url); + ajax.send(); + }, 15000) + + // Collapsible advancement sections + const categories = document.getElementsByClassName("location-category"); + for (let i = 0; i < categories.length; i++) { + let hide_id = categories[i].id.split('-')[0]; + if (hide_id == 'Total') { + continue; + } + categories[i].addEventListener('click', function() { + // Toggle the advancement list + document.getElementById(hide_id).classList.toggle("hide"); + // Change text of the header + const tab_header = document.getElementById(hide_id+'-header').children[0]; + const orig_text = tab_header.innerHTML; + let new_text; + if (orig_text.includes("▼")) { + new_text = orig_text.replace("▼", "▲"); + } + else { + new_text = orig_text.replace("▲", "▼"); + } + tab_header.innerHTML = new_text; + }); + } +}); diff --git a/WebHostLib/templates/ootTracker.html b/WebHostLib/templates/ootTracker.html index 64d61ae7..ea7a6d5a 100644 --- a/WebHostLib/templates/ootTracker.html +++ b/WebHostLib/templates/ootTracker.html @@ -3,7 +3,7 @@ {{ player_name }}'s Tracker - + @@ -159,8 +159,8 @@ {% for area in checks_done %} {{ area }} {{'▼' if area != 'Total'}} - {{ small_key_counts.get(area, '-') }} - {{ boss_key_counts.get(area, '-') }} + {{ small_key_counts.get(area, '-') }} + {{ boss_key_counts.get(area, '-') }} {{ checks_done[area] }} / {{ checks_in_area[area] }} From 1cef10b3095df8703d443ec2cd9cac35854c7b80 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 25 Sep 2021 01:13:42 +0200 Subject: [PATCH 10/46] Timespinner: hide it for now --- worlds/timespinner/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/worlds/timespinner/__init__.py b/worlds/timespinner/__init__.py index 3bd19c15..48352ed9 100644 --- a/worlds/timespinner/__init__.py +++ b/worlds/timespinner/__init__.py @@ -13,6 +13,7 @@ class TimespinnerWorld(World): game = "Timespinner" topology_present = True data_version = 1 + hidden = True item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {location.name: location.code for location in get_locations(None, None)} From 59529eba4efa0b23999bdfc6762cc150fad9ce0d Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 25 Sep 2021 02:31:32 +0200 Subject: [PATCH 11/46] Timespinner: some reformatting and type fixes --- worlds/timespinner/Locations.py | 10 +++++--- worlds/timespinner/__init__.py | 45 +++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/worlds/timespinner/Locations.py b/worlds/timespinner/Locations.py index ac9da501..699c2111 100644 --- a/worlds/timespinner/Locations.py +++ b/worlds/timespinner/Locations.py @@ -4,14 +4,16 @@ from .Options import is_option_enabled EventId: Optional[int] = None + class LocationData(NamedTuple): region: str name: str code: Optional[int] rule: Callable = lambda state: True -def get_locations(world: MultiWorld, player: int): - location_table: Tuple[LocationData] = ( + +def get_locations(world: Optional[MultiWorld], player: Optional[int]): + location_table: Tuple[LocationData, ...] = ( # PresentItemLocations LocationData('Tutorial', 'Yo Momma 1', 1337000), LocationData('Tutorial', 'Yo Momma 2', 1337001), @@ -194,7 +196,7 @@ def get_locations(world: MultiWorld, player: int): LocationData('Ancient Pyramid (right)', 'Killed Nightmare', EventId) ) - downloadable_items: Tuple[LocationData] = ( + downloadable_items: Tuple[LocationData, ...] = ( # DownloadTerminals LocationData('Libary', 'Library terminal 1', 1337157, lambda state: state.has('Tablet', player)), LocationData('Libary', 'Library terminal 2', 1337156, lambda state: state.has('Tablet', player)), @@ -217,7 +219,7 @@ def get_locations(world: MultiWorld, player: int): else: return location_table -starter_progression_locations: Tuple[str] = ( +starter_progression_locations: Tuple[str, ...] = ( 'Starter chest 2', 'Starter chest 3', 'Starter chest 1', diff --git a/worlds/timespinner/__init__.py b/worlds/timespinner/__init__.py index 48352ed9..860c7e84 100644 --- a/worlds/timespinner/__init__.py +++ b/worlds/timespinner/__init__.py @@ -1,4 +1,4 @@ -from typing import Dict, List +from typing import Dict, List, Set from BaseClasses import Item, MultiWorld from ..AutoWorld import World from .LogicMixin import TimespinnerLogic @@ -8,6 +8,7 @@ from .Regions import create_regions from .Options import is_option_enabled, timespinner_options from .PyramidKeys import get_pyramid_keys_unlock + class TimespinnerWorld(World): options = timespinner_options game = "Timespinner" @@ -16,7 +17,7 @@ class TimespinnerWorld(World): hidden = True item_name_to_id = {name: data.code for name, data in item_table.items()} - location_name_to_id = {location.name: location.code for location in get_locations(None, None)} + location_name_to_id = {location.name: location.code for location in get_locations(None, None)} locked_locations: Dict[int, List[str]] = {} pyramid_keys_unlock: Dict[int, str] = {} @@ -28,7 +29,8 @@ class TimespinnerWorld(World): self.item_name_groups = get_item_name_groups() def create_regions(self): - create_regions(self.world, self.player, get_locations(self.world, self.player), self.pyramid_keys_unlock[self.player]) + create_regions(self.world, self.player, get_locations(self.world, self.player), + self.pyramid_keys_unlock[self.player]) def create_item(self, name: str) -> Item: return create_item(name, self.player) @@ -43,11 +45,12 @@ class TimespinnerWorld(World): assign_starter_items(self.world, self.player, excluded_items, self.locked_locations[self.player]) - if not is_option_enabled(self.world, self.player, "QuickSeed") or not is_option_enabled(self.world, self.player, "Inverted"): + if not is_option_enabled(self.world, self.player, "QuickSeed") or \ + not is_option_enabled(self.world, self.player, "Inverted"): place_first_progression_item(self.world, self.player, excluded_items, self.locked_locations[self.player]) pool = get_item_pool(self.world, self.player, excluded_items) - + fill_item_pool_with_dummy_items(self.world, self.player, self.locked_locations[self.player], pool) self.world.itempool += pool @@ -62,14 +65,16 @@ class TimespinnerWorld(World): slot_data["StinkyMaw"] = 1 slot_data["ProgressiveVerticalMovement"] = 0 slot_data["ProgressiveKeycards"] = 0 - slot_data["PyramidKeysGate"] = self.pyramid_keys_unlock[self.player] + slot_data["PyramidKeysGate"] = self.pyramid_keys_unlock[self.player] return slot_data + def create_item(name: str, player: int) -> Item: data = item_table[name] return Item(name, data.progression, data.code, player) + def get_excluded_items_based_on_options(world: MultiWorld, player: int) -> List[str]: excluded_items = [] @@ -79,9 +84,10 @@ def get_excluded_items_based_on_options(world: MultiWorld, player: int) -> List[ excluded_items.append('Meyef') if is_option_enabled(world, player, "QuickSeed"): excluded_items.append('Talaria Attachment') - + return excluded_items + def assign_starter_items(world: MultiWorld, player: int, excluded_items: List[str], locked_locations: List[str]): melee_weapon = world.random.choice(starter_melee_weapons) spell = world.random.choice(starter_spells) @@ -91,13 +97,14 @@ def assign_starter_items(world: MultiWorld, player: int, excluded_items: List[st melee_weapon_item = create_item(melee_weapon, player) spell_item = create_item(spell, player) - + world.get_location('Yo Momma 1', player).place_locked_item(melee_weapon_item) world.get_location('Yo Momma 2', player).place_locked_item(spell_item) locked_locations.append('Yo Momma 1') locked_locations.append('Yo Momma 2') + def get_item_pool(world: MultiWorld, player: int, excluded_items: List[str]) -> List[Item]: pool = [] @@ -109,22 +116,26 @@ def get_item_pool(world: MultiWorld, player: int, excluded_items: List[str]) -> return pool + def fill_item_pool_with_dummy_items(world: MultiWorld, player: int, locked_locations: List[str], pool: List[Item]): for _ in range(len(get_locations(world, player)) - len(locked_locations) - len(pool)): item = create_item(world.random.choice(filler_items), player) pool.append(item) -def place_first_progression_item(world: MultiWorld, player: int, excluded_items: List[str], locked_locations: List[str]): + +def place_first_progression_item(world: MultiWorld, player: int, excluded_items: List[str], + locked_locations: List[str]): progression_item = world.random.choice(starter_progression_items) - location = world.random.choice(starter_progression_locations) + location = world.random.choice(starter_progression_locations) excluded_items.append(progression_item) locked_locations.append(location) - + item = create_item(progression_item, player) world.get_location(location, player).place_locked_item(item) - + + def update_progressive_state_based_flags(world: MultiWorld, player: int, name: str, data: Item) -> Item: if not data.advancement: return data @@ -136,6 +147,7 @@ def update_progressive_state_based_flags(world: MultiWorld, player: int, name: s return data + def setup_events(world: MultiWorld, player: int, locked_locations: List[str]): for location in get_locations(world, player): if location.code == EventId: @@ -146,10 +158,11 @@ def setup_events(world: MultiWorld, player: int, locked_locations: List[str]): location.place_locked_item(item) -def get_item_name_groups() -> Dict[str, List[str]]: - groups: Dict[str, List[str]] = {} + +def get_item_name_groups() -> Dict[str, Set[str]]: + groups: Dict[str, Set[str]] = {} for name, data in item_table.items(): - groups[data.category] = [ name ] if data.category not in groups else groups[data.category] + [ name ] + groups.setdefault(data.category, set()).add(name) - return groups \ No newline at end of file + return groups From ac534a688109e073e211c7cd39573589fb811e1c Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Fri, 24 Sep 2021 21:26:11 -0700 Subject: [PATCH 12/46] no free rocket silo if its recipe is randomized. --- worlds/factorio/Mod.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/worlds/factorio/Mod.py b/worlds/factorio/Mod.py index 79f36cf4..3f235f82 100644 --- a/worlds/factorio/Mod.py +++ b/worlds/factorio/Mod.py @@ -99,6 +99,9 @@ def generate_mod(world, output_directory: str): for factorio_option in Options.factorio_options: template_data[factorio_option] = getattr(multiworld, factorio_option)[player].value + + if getattr(multiworld, "silo")[player].value == Options.Silo.option_randomize_recipe: + template_data["free_sample_blacklist"]["rocket-silo"] = 1 control_code = control_template.render(**template_data) data_template_code = data_template.render(**template_data) From 655ebcdb076ebffed6d09a5b43f0bb70f278bff1 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 06:50:37 +0200 Subject: [PATCH 13/46] WebHost: allow .json, .yml on /generate --- WebHostLib/check.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/WebHostLib/check.py b/WebHostLib/check.py index e3657659..8b31ccc3 100644 --- a/WebHostLib/check.py +++ b/WebHostLib/check.py @@ -49,9 +49,7 @@ def get_yaml_data(file) -> Union[Dict[str, str], str]: for file in infolist: if file.filename.endswith(banned_zip_contents): return "Uploaded data contained a rom file, which is likely to contain copyrighted material. Your file was deleted." - elif file.filename.endswith(".yaml"): - options[file.filename] = zfile.open(file, "r").read() - elif file.filename.endswith(".txt"): + elif file.filename.endswith((".yaml", ".json", ".yml", ".txt")): options[file.filename] = zfile.open(file, "r").read() else: options = {file.filename: file.read()} From 8b9e278593bb3ee449ba58a88aedc20f1b90c941 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 07:24:47 +0200 Subject: [PATCH 14/46] Guides: Link to new LttP player-settings page --- WebHostLib/static/assets/tutorial/zelda3/multiworld_en.md | 2 +- WebHostLib/static/assets/tutorial/zelda3/multiworld_es.md | 4 ++-- WebHostLib/static/assets/tutorial/zelda3/multiworld_fr.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/WebHostLib/static/assets/tutorial/zelda3/multiworld_en.md b/WebHostLib/static/assets/tutorial/zelda3/multiworld_en.md index ea10c84b..c93a98d8 100644 --- a/WebHostLib/static/assets/tutorial/zelda3/multiworld_en.md +++ b/WebHostLib/static/assets/tutorial/zelda3/multiworld_en.md @@ -57,7 +57,7 @@ If you would like to validate your YAML file to make sure it works, you may do s [YAML Validator](/mysterycheck) page. ## Generating a Single-Player Game -1. Navigate to the [Generate Game](/player-settings), configure your options, and click the "Generate Game" button. +1. Navigate to the [Player Settings](/games/A%20Link%20to%20the%20Past/player-settings) page, configure your options, and click the "Generate Game" button. 2. You will be presented with a "Seed Info" page, where you can download your patch file. 3. Double-click on your patch file, and the emulator should launch with your game automatically. As the Client is unnecessary for single player games, you may close it and the WebUI. diff --git a/WebHostLib/static/assets/tutorial/zelda3/multiworld_es.md b/WebHostLib/static/assets/tutorial/zelda3/multiworld_es.md index a83bb68b..b8383b6a 100644 --- a/WebHostLib/static/assets/tutorial/zelda3/multiworld_es.md +++ b/WebHostLib/static/assets/tutorial/zelda3/multiworld_es.md @@ -43,7 +43,7 @@ Cada jugador en una partida de multiworld proveerá su propio fichero YAML. Esta que cada jugador disfrute de una experiencia personalizada a su gusto, y cada jugador dentro de la misma partida de multiworld puede tener diferentes opciones. ### Donde puedo obtener un fichero YAML? -La página "[Generate Game](/player-settings)" en el sitio web te permite configurar tu configuración personal y +La página "[Generate Game](/games/A%20Link%20to%20the%20Past/player-settings)" en el sitio web te permite configurar tu configuración personal y descargar un fichero "YAML". ### Configuración YAML avanzada @@ -67,7 +67,7 @@ Si quieres validar que tu fichero YAML para asegurarte que funciona correctament [YAML Validator](/mysterycheck). ## Generar una partida para un jugador -1. Navega a [la pagina Generate game](/player-settings), configura tus opciones, haz click en el boton "Generate game". +1. Navega a [la pagina Generate game](/games/A%20Link%20to%20the%20Past/player-settings), configura tus opciones, haz click en el boton "Generate game". 2. Se te redigirá a una pagina "Seed Info", donde puedes descargar tu archivo de parche. 3. Haz doble click en tu fichero de parche, y el emulador debería ejecutar tu juego automáticamente. Como el Cliente no es necesario para partidas de un jugador, puedes cerrarlo junto a la pagina web (que tiene como titulo "Multiworld WebUI") que se ha abierto automáticamente. diff --git a/WebHostLib/static/assets/tutorial/zelda3/multiworld_fr.md b/WebHostLib/static/assets/tutorial/zelda3/multiworld_fr.md index 877e75a0..b8e5e71d 100644 --- a/WebHostLib/static/assets/tutorial/zelda3/multiworld_fr.md +++ b/WebHostLib/static/assets/tutorial/zelda3/multiworld_fr.md @@ -49,7 +49,7 @@ sur comment il devrait générer votre seed. Chaque joueur d'un multiwolrd devra joueur d'apprécier une expérience customisée selon ses goûts, et les différents joueurs d'un même multiworld peuvent avoir différentes options. ### Où est-ce que j'obtiens un fichier YAML ? -La page [Génération de partie](/player-settings) vous permet de configurer vos paramètres personnels et de les exporter vers un fichier YAML. +La page [Génération de partie](/games/A%20Link%20to%20the%20Past/player-settings) vous permet de configurer vos paramètres personnels et de les exporter vers un fichier YAML. ### Configuration avancée du fichier YAML Une version plus avancée du fichier YAML peut être créée en utilisant la page des [paramètres de pondération](/weighted-settings), qui vous permet @@ -71,7 +71,7 @@ Si vous voulez valider votre fichier YAML pour être sûr qu'il fonctionne, vous [Validateur de YAML](/mysterycheck). ## Générer une partie pour un joueur -1. Aller sur la page [Génération de partie](/player-settings), configurez vos options, et cliquez sur le bouton "Generate Game". +1. Aller sur la page [Génération de partie](/games/A%20Link%20to%20the%20Past/player-settings), configurez vos options, et cliquez sur le bouton "Generate Game". 2. Il vous sera alors présenté une page d'informations sur la seed, où vous pourrez télécharger votre patch. 3. Double-cliquez sur le patch et l'émulateur devrait se lancer automatiquement avec la seed. Etant donné que le client n'est pas requis pour les parties à un joueur, vous pouvez le fermer ainsi que l'interface Web (WebUI). From 7f35f6f8f45bd8f1c33636fc55964c5f82a93280 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 08:49:32 +0200 Subject: [PATCH 15/46] Factorio/LttP: remove some things that were marked for removal --- FactorioClient.py | 12 +----------- worlds/alttp/Options.py | 2 -- worlds/factorio/Options.py | 1 - 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/FactorioClient.py b/FactorioClient.py index e7fd0d36..f64d6cdb 100644 --- a/FactorioClient.py +++ b/FactorioClient.py @@ -99,13 +99,7 @@ class FactorioContext(CommonContext): return f"AP_{self.seed_name}_{self.auth}.zip" def print_to_game(self, text): - # TODO: remove around version 0.2 - if self.mod_version < Utils.Version(0, 1, 6): - text = text.replace('"', '') - self.rcon_client.send_command(f"/sc game.print(\"[font=default-large-bold]Archipelago:[/font] " - f"{text}\")") - else: - self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] " + self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] " f"{text}") def on_package(self, cmd: str, args: dict): @@ -194,10 +188,6 @@ async def factorio_server_watcher(ctx: FactorioContext): factorio_server_logger.info(msg) if not ctx.rcon_client and "Starting RCON interface at IP ADDR:" in msg: ctx.rcon_client = factorio_rcon.RCONClient("localhost", rcon_port, rcon_password) - # TODO: remove around version 0.2 - if ctx.mod_version < Utils.Version(0, 1, 6): - ctx.rcon_client.send_command("/sc game.print('Starting Archipelago Bridge')") - ctx.rcon_client.send_command("/sc game.print('Starting Archipelago Bridge')") if not ctx.server: logger.info("Established bridge to Factorio Server. " "Ready to connect to Archipelago via /connect") diff --git a/worlds/alttp/Options.py b/worlds/alttp/Options.py index 22277625..d69bb0d2 100644 --- a/worlds/alttp/Options.py +++ b/worlds/alttp/Options.py @@ -120,7 +120,6 @@ class Progressive(Choice): alias_false = 0 alias_true = 2 default = 2 - alias_random = 1 def want_progressives(self, random): return random.choice([True, False]) if self.value == self.option_grouped_random else bool(self.value) @@ -189,7 +188,6 @@ class Palette(Choice): option_negative = 6 option_dizzy = 7 option_sick = 8 - alias_random = 1 class OWPalette(Palette): diff --git a/worlds/factorio/Options.py b/worlds/factorio/Options.py index f4b51ca1..26618f3c 100644 --- a/worlds/factorio/Options.py +++ b/worlds/factorio/Options.py @@ -108,7 +108,6 @@ class Progressive(Choice): alias_false = 0 alias_true = 2 default = 2 - alias_random = 1 def want_progressives(self, random): return random.choice([True, False]) if self.value == self.option_grouped_random else bool(self.value) From 952a155003e1823330c882ddd7007c180df0d4b6 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 09:06:12 +0200 Subject: [PATCH 16/46] MultiServer: move permissions to an IntEnum --- MultiServer.py | 7 ++++++- NetUtils.py | 19 +++++++++++++++++++ host.yaml | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/MultiServer.py b/MultiServer.py index ddf98100..28a510b9 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -31,7 +31,7 @@ from worlds import network_data_package, lookup_any_item_id_to_name, lookup_any_ import Utils from Utils import get_item_name_from_id, get_location_name_from_id, \ version_tuple, restricted_loads, Version -from NetUtils import Endpoint, ClientStatus, NetworkItem, decode, encode, NetworkPlayer +from NetUtils import Endpoint, ClientStatus, NetworkItem, decode, encode, NetworkPlayer, Permission colorama.init() @@ -469,8 +469,13 @@ async def on_client_connected(ctx: Context, client: Client): # Name them by feature or fork, as you feel is appropriate. 'tags': ctx.tags, 'version': Utils.version_tuple, + # TODO ~0.2.0 remove forfeit_mode and remaining_mode in favor of permissions 'forfeit_mode': ctx.forfeit_mode, 'remaining_mode': ctx.remaining_mode, + 'permissions': { + "forfeit": Permission.from_text(ctx.forfeit_mode), + "remaining": Permission.from_text(ctx.remaining_mode), + }, 'hint_cost': ctx.hint_cost, 'location_check_points': ctx.location_check_points, 'datapackage_version': network_data_package["version"], diff --git a/NetUtils.py b/NetUtils.py index 6b45c3ca..ee89ccc8 100644 --- a/NetUtils.py +++ b/NetUtils.py @@ -25,6 +25,25 @@ class ClientStatus(enum.IntEnum): CLIENT_GOAL = 30 +class Permission(enum.IntEnum): + disabled = 0b000 # 0, completely disables access + enabled = 0b001 # 1, allows manual use + goal = 0b010 # 2, allows manual use after goal completion + auto = 0b110 # 6, forces use after goal completion, only works for forfeit + auto_enabled = 0b111 # 7, forces use after goal completion, allows manual use any time + + @staticmethod + def from_text(text: str): + data = 0 + if "auto" in text: + data |= 0b110 + elif "goal" in text: + data |= 0b010 + if "enabled" in text: + data |= 0b001 + return Permission(data) + + class NetworkPlayer(typing.NamedTuple): team: int slot: int diff --git a/host.yaml b/host.yaml index ed65d37b..e8d1ee4c 100644 --- a/host.yaml +++ b/host.yaml @@ -27,6 +27,7 @@ server_options: # "enabled" -> clients can always forfeit # "auto" -> automatic forfeit on goal completion, "goal" -> clients can forfeit after achieving their goal # "auto-enabled" -> automatic forfeit on goal completion and manual forfeit is also enabled + # "goal" -> forfeit is allowed after goal completion forfeit_mode: "goal" # Remaining modes # !remaining handling, that tells a client which items remain in their pool From 8c525a5e33a7b50d671d6e7a13e40af6bd1bcbae Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 09:10:27 +0200 Subject: [PATCH 17/46] Datapackage: log custom mode use --- worlds/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/worlds/__init__.py b/worlds/__init__.py index ed48e32e..61014a2b 100644 --- a/worlds/__init__.py +++ b/worlds/__init__.py @@ -38,3 +38,5 @@ network_data_package = { # Set entire datapackage to version 0 if any of them are set to 0 if any(not world.data_version for world in AutoWorldRegister.world_types.values()): network_data_package["version"] = 0 + import logging + logging.warning("Datapackage is in custom mode.") From 9daf1abcd9999987202267e27e43064a78357701 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 09:55:54 +0200 Subject: [PATCH 18/46] LttP: fix shop shuffle u with grouped_random progressive --- worlds/alttp/Shops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index 5d4813da..3647670a 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -396,7 +396,7 @@ def shuffle_shops(world, items, player: int): option = world.shop_shuffle[player] if 'u' in option: progressive = world.progressive[player] - progressive = world.random.choice([True, False]) if progressive == 'random' else progressive == 'on' + progressive = world.random.choice([True, False]) if progressive == 'option_grouped_random' else progressive == 'on' progressive &= world.goal == 'icerodhunt' new_items = ["Bomb Upgrade (+5)"] * 6 new_items.append("Bomb Upgrade (+5)" if progressive else "Bomb Upgrade (+10)") From f9a9189687860e2f335db4cf47213e6246786229 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 26 Sep 2021 10:09:40 +0200 Subject: [PATCH 19/46] LttP: actually fix shop shuffle u with grouped_random progressive --- worlds/alttp/Shops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index 3647670a..296fb9bc 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -396,7 +396,7 @@ def shuffle_shops(world, items, player: int): option = world.shop_shuffle[player] if 'u' in option: progressive = world.progressive[player] - progressive = world.random.choice([True, False]) if progressive == 'option_grouped_random' else progressive == 'on' + progressive = world.random.choice([True, False]) if progressive == 'grouped_random' else progressive == 'on' progressive &= world.goal == 'icerodhunt' new_items = ["Bomb Upgrade (+5)"] * 6 new_items.append("Bomb Upgrade (+5)" if progressive else "Bomb Upgrade (+10)") From cf070e6dd97c8e6417eb9a7475d08294c9bff520 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Sun, 26 Sep 2021 14:02:19 -0700 Subject: [PATCH 20/46] Fixed non-deterministic rocket silo recipe. get_allowed_packs() was returning a list of the science packs in a non-deterministic random order, resulting in the recipe being non-deterministic. --- worlds/factorio/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index 9c08756e..de3c9811 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -272,7 +272,7 @@ class Factorio(World): if self.world.silo[self.player].value == Silo.option_randomize_recipe: valid_pool = [] - for pack in self.world.max_science_pack[self.player].get_allowed_packs(): + for pack in sorted(self.world.max_science_pack[self.player].get_allowed_packs()): valid_pool += sorted(science_pack_pools[pack]) new_recipe = self.make_balanced_recipe(recipes["rocket-silo"], valid_pool, factor=(self.world.max_science_pack[self.player].value + 1) / 7) From 1ffe5fc7bb9dee96eeae5391020f3adfc54b07e7 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Sun, 26 Sep 2021 14:22:46 -0500 Subject: [PATCH 21/46] Remove scraps only preset since it doesn't work. Increase item pool to 100. Add direct links in tutorial. --- .../static/assets/tutorial/ror2/setup_en.md | 10 +++------- worlds/ror2/Items.py | 16 +--------------- worlds/ror2/Locations.py | 2 +- worlds/ror2/Options.py | 6 ++---- 4 files changed, 7 insertions(+), 27 deletions(-) diff --git a/WebHostLib/static/assets/tutorial/ror2/setup_en.md b/WebHostLib/static/assets/tutorial/ror2/setup_en.md index df3c6378..925debc6 100644 --- a/WebHostLib/static/assets/tutorial/ror2/setup_en.md +++ b/WebHostLib/static/assets/tutorial/ror2/setup_en.md @@ -2,16 +2,12 @@ ## Install using r2modman ### Install r2modman -Head on over to the r2modman page on Thunderstore and follow the installation instructions. - -https://thunderstore.io/package/ebkr/r2modman/ +Head on over to the [r2modman page on Thunderstore](https://thunderstore.io/package/ebkr/r2modman/) and follow the installation instructions. ### Install Archipelago Mod using r2modman -You can install the Archipelago mod using r2modman in one of two ways. +You can install the [Archipelago mod](https://thunderstore.io/package/ArchipelagoMW/Archipelago/) using r2modman in one of two ways. One, you can use the Thunderstore website and click on the "Install with Mod Manager" link. -https://thunderstore.io/package/ArchipelagoMW/Archipelago/ - You can also search for the "Archipelago" mod in the r2modman interface. The mod manager should automatically install all necessary dependencies as well. @@ -72,7 +68,7 @@ Risk of Rain 2: | Name | Description | Allowed values | | ---- | ----------- | -------------- | -| total_locations | The total number of location checks that will be attributed to the Risk of Rain player. This option is ALSO the total number of items in the item pool for the Risk of Rain player. | 10 - 50 | +| total_locations | The total number of location checks that will be attributed to the Risk of Rain player. This option is ALSO the total number of items in the item pool for the Risk of Rain player. | 10 - 100 | | total_revivals | The total number of items in the Risk of Rain player's item pool (items other players pick up for them) replaced with `Dio's Best Friend`. | 0 - 5 | | start_with_revive | Starts the player off with a `Dio's Best Friend`. Functionally equivalent to putting a `Dio's Best Friend` in your `starting_inventory`. | true/false | | item_pickup_step | The number of item pickups which you are allowed to claim before they become an Archipelago location check. | 0 - 5 | diff --git a/worlds/ror2/Items.py b/worlds/ror2/Items.py index 3345fd6d..fa6f4d27 100644 --- a/worlds/ror2/Items.py +++ b/worlds/ror2/Items.py @@ -117,19 +117,6 @@ even_weights = { "Equipment": 1 } -scraps_only_weights = { - "Item Scrap, Green": 80, - "Item Scrap, Red": 40, - "Item Scrap, Yellow": 10, - "Item Scrap, White": 100, - "Common Item": 0, - "Uncommon Item": 0, - "Legendary Item": 0, - "Boss Item": 0, - "Lunar Item": 0, - "Equipment": 0 -} - item_pool_weights: typing.Dict[int, typing.Dict[str, int]] = { 0: default_weights, 1: new_weights, @@ -137,8 +124,7 @@ item_pool_weights: typing.Dict[int, typing.Dict[str, int]] = { 3: legendary_weights, 4: lunartic_weights, 6: no_scraps_weights, - 7: even_weights, - 8: scraps_only_weights + 7: even_weights } lookup_id_to_name: typing.Dict[int, str] = {id: name for name, id in item_table.items() if id} diff --git a/worlds/ror2/Locations.py b/worlds/ror2/Locations.py index 56585f5c..c2ef67ad 100644 --- a/worlds/ror2/Locations.py +++ b/worlds/ror2/Locations.py @@ -15,7 +15,7 @@ base_location_table = { } item_pickups = { - f"ItemPickup{i}": 37005+i for i in range(1, 51) + f"ItemPickup{i}": 37005+i for i in range(1, 101) } location_table = {**base_location_table, **item_pickups} diff --git a/worlds/ror2/Options.py b/worlds/ror2/Options.py index 1a011706..d659d420 100644 --- a/worlds/ror2/Options.py +++ b/worlds/ror2/Options.py @@ -6,7 +6,7 @@ class TotalLocations(Range): """Number of location checks which are added to the Risk of Rain playthrough.""" displayname = "Total Locations" range_start = 10 - range_end = 50 + range_end = 100 default = 20 @@ -130,8 +130,7 @@ class ItemWeights(Choice): lunartic makes everything a lunar item. chaos generates the pool completely at random with rarer items having a slight cap to prevent this option being too easy. no_scraps removes all scrap items from the item pool. - even generates the item pool with every item having an even weight. - scraps_only removes all non scrap items from the item pool.""" + even generates the item pool with every item having an even weight.""" displayname = "Item Weights" option_default = 0 option_new = 1 @@ -141,7 +140,6 @@ class ItemWeights(Choice): option_chaos = 5 option_no_scraps = 6 option_even = 7 - option_scraps_only = 8 #define a dictionary for the weights of the generated item pool. ror2_weights: typing.Dict[str, type(Option)] = { From df0335f7394d78be3ee2f30c968c10657144a116 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Sun, 26 Sep 2021 14:28:25 -0500 Subject: [PATCH 22/46] Fix formatting on item weight presets page. --- worlds/ror2/Options.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/worlds/ror2/Options.py b/worlds/ror2/Options.py index d659d420..b2cc89a1 100644 --- a/worlds/ror2/Options.py +++ b/worlds/ror2/Options.py @@ -123,14 +123,14 @@ class ItemPoolPresetToggle(DefaultOnToggle): displayname = "Item Weight Presets" class ItemWeights(Choice): - """Preset choices for determining the weights of the item pool. - New is a test for a potential adjustment to the default weights. - Uncommon puts a large number of uncommon items in the pool. - Legendary puts a large number of legendary items in the pool. - lunartic makes everything a lunar item. - chaos generates the pool completely at random with rarer items having a slight cap to prevent this option being too easy. - no_scraps removes all scrap items from the item pool. - even generates the item pool with every item having an even weight.""" + """Preset choices for determining the weights of the item pool.
+ New is a test for a potential adjustment to the default weights.
+ Uncommon puts a large number of uncommon items in the pool.
+ Legendary puts a large number of legendary items in the pool.
+ Lunartic makes everything a lunar item.
+ Chaos generates the pool completely at random with rarer items having a slight cap to prevent this option being too easy.
+ No Scraps removes all scrap items from the item pool.
+ Even generates the item pool with every item having an even weight.""" displayname = "Item Weights" option_default = 0 option_new = 1 From c0b25e1f6eed40caa68c0d9714bafece2b8bbccd Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Sun, 26 Sep 2021 20:56:04 -0500 Subject: [PATCH 23/46] Adjustment to chaos weights. Add progression logic. --- worlds/ror2/Rules.py | 32 +++++++++++++++++++++----------- worlds/ror2/__init__.py | 16 ++++++++-------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/worlds/ror2/Rules.py b/worlds/ror2/Rules.py index 3653f047..4f374832 100644 --- a/worlds/ror2/Rules.py +++ b/worlds/ror2/Rules.py @@ -7,27 +7,37 @@ class RiskOfRainLogic(LogicMixin): def _ror_has_items(self, player: int, amount: int) -> bool: count: int = self.item_count("Common Item", player) + self.item_count("Uncommon Item", player) + \ self.item_count("Legendary Item", player) + self.item_count("Boss Item", player) + \ - self.item_count("Lunar Item", player) + self.item_count("Equipment", player) + self.item_count("Lunar Item", player) + self.item_count("Equipment", player) + \ + self.item_count("Dio's Best Friend", player) return count >= amount def set_rules(world: MultiWorld, player: int): - total_checks = world.total_locations[player] # divide by 5 since 5 levels (then commencement) - items_per_level = total_checks / 5 - leftover = total_checks % 5 + items_per_level = max(int(world.total_locations[player] / 5 / (world.item_pickup_step[player]+1)), 1) - set_rule(world.get_location("Level One", player), - lambda state: state._ror_has_items(player, items_per_level + leftover)) + # lock item pickup access based on level completion + for i in range(1, items_per_level): + set_rule(world.get_location(f"Item Pickup {i}", player), lambda state: True) + for i in range(items_per_level, 2*items_per_level): + set_rule(world.get_location(f"Item Pickup {i}", player), lambda state: state.has("Beat Level One", player)) + for i in range(2*items_per_level, 3*items_per_level): + set_rule(world.get_location(f"Item Pickup {i}", player), lambda state: state.has("Beat Level Two", player)) + for i in range(3*items_per_level, 4*items_per_level): + set_rule(world.get_location(f"Item Pickup {i}", player), lambda state: state.has("Beat Level Three", player)) + for i in range(4*items_per_level, world.total_locations[player]+1): + set_rule(world.get_location(f"Item Pickup {i}", player), lambda state: state.has("Beat Level Four", player)) + + # require items to beat each stage set_rule(world.get_location("Level Two", player), - lambda state: state._ror_has_items(player, items_per_level) and state.has("Beat Level One", player)) + lambda state: state.has("Beat Level One", player) and state._ror_has_items(player, items_per_level)) set_rule(world.get_location("Level Three", player), - lambda state: state._ror_has_items(player, items_per_level) and state.has("Beat Level Two", player)) + lambda state: state._ror_has_items(player, 2 * items_per_level) and state.has("Beat Level Two", player)) set_rule(world.get_location("Level Four", player), - lambda state: state._ror_has_items(player, items_per_level) and state.has("Beat Level Three", player)) + lambda state: state._ror_has_items(player, 3 * items_per_level) and state.has("Beat Level Three", player)) set_rule(world.get_location("Level Five", player), - lambda state: state._ror_has_items(player, items_per_level) and state.has("Beat Level Four", player)) + lambda state: state._ror_has_items(player, 4 * items_per_level) and state.has("Beat Level Four", player)) set_rule(world.get_location("Victory", player), - lambda state: state._ror_has_items(player, items_per_level) and state.has("Beat Level Five", player)) + lambda state: state._ror_has_items(player, 5 * items_per_level) and state.has("Beat Level Five", player)) world.completion_condition[player] = lambda state: state.has("Victory", player) \ No newline at end of file diff --git a/worlds/ror2/__init__.py b/worlds/ror2/__init__.py index d3711760..483b4689 100644 --- a/worlds/ror2/__init__.py +++ b/worlds/ror2/__init__.py @@ -37,16 +37,16 @@ class RiskOfRainWorld(World): # generate chaos weights if the preset is chosen if pool_option == 5: junk_pool = { - "Item Scrap, Green": self.world.random.randint(0, 100), - "Item Scrap, Red": self.world.random.randint(0, 100), - "Item Scrap, Yellow": self.world.random.randint(0, 100), + "Item Scrap, Green": self.world.random.randint(0, 80), + "Item Scrap, Red": self.world.random.randint(0, 40), + "Item Scrap, Yellow": self.world.random.randint(0, 50), "Item Scrap, White": self.world.random.randint(0, 100), "Common Item": self.world.random.randint(0, 100), "Uncommon Item": self.world.random.randint(0, 70), "Legendary Item": self.world.random.randint(0, 45), "Boss Item": self.world.random.randint(0, 30), "Lunar Item": self.world.random.randint(0, 60), - "Equipment": self.world.random.randint(0, 50) + "Equipment": self.world.random.randint(0, 40) } else: junk_pool = item_pool_weights[pool_option].copy() @@ -64,15 +64,15 @@ class RiskOfRainWorld(World): "Equipment": self.world.equipment[self.player].value } + if not self.world.enable_lunar[self.player]: + junk_pool.pop("Lunar Item") + # Generate item pool itempool = [] # Add revive items for the player itempool += ["Dio's Best Friend"] * self.world.total_revivals[self.player] - if not self.world.enable_lunar[self.player]: - junk_pool.pop("Lunar Item") - # Fill remaining items with randomly generated junk itempool += self.world.random.choices(list(junk_pool.keys()), weights=list(junk_pool.values()), k=self.world.total_locations[self.player] - @@ -109,7 +109,7 @@ def create_regions(world, player: int): create_region(world, player, 'Menu', None, ['Lobby']), create_region(world, player, 'Petrichor V', [location for location in base_location_table] + - [f"ItemPickup{i}" for i in range(1, 1+world.total_locations[player])]) + [f"Item Pickup {i}" for i in range(1, world.start_with_revive[player].value+world.total_locations[player])]) ] world.get_entrance("Lobby", player).connect(world.get_region("Petrichor V", player)) From ea8b6e6438bad25d95f710b6d5b34736c220717c Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Mon, 27 Sep 2021 10:41:16 -0500 Subject: [PATCH 24/46] Adjustment to chaos weights. Add progression logic. --- worlds/ror2/Locations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/ror2/Locations.py b/worlds/ror2/Locations.py index c2ef67ad..fcb48a83 100644 --- a/worlds/ror2/Locations.py +++ b/worlds/ror2/Locations.py @@ -13,9 +13,9 @@ base_location_table = { "Level Four": None, "Level Five": None } - +# 37006 - 37106 item_pickups = { - f"ItemPickup{i}": 37005+i for i in range(1, 101) + f"Item Pickup {i}": 37005+i for i in range(1, 101) } location_table = {**base_location_table, **item_pickups} From 89c6fd6ac4268b7cf7190b3071ea9238e26443c1 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Mon, 27 Sep 2021 10:43:57 -0500 Subject: [PATCH 25/46] Put links back to being separate but still use them as hyperlinks --- WebHostLib/static/assets/tutorial/ror2/setup_en.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/WebHostLib/static/assets/tutorial/ror2/setup_en.md b/WebHostLib/static/assets/tutorial/ror2/setup_en.md index 925debc6..2c8fa68c 100644 --- a/WebHostLib/static/assets/tutorial/ror2/setup_en.md +++ b/WebHostLib/static/assets/tutorial/ror2/setup_en.md @@ -2,10 +2,15 @@ ## Install using r2modman ### Install r2modman -Head on over to the [r2modman page on Thunderstore](https://thunderstore.io/package/ebkr/r2modman/) and follow the installation instructions. +Head on over to the r2modman page on Thunderstore and follow the installation instructions. + +[https://thunderstore.io/package/ebkr/r2modman/](https://thunderstore.io/package/ebkr/r2modman/) ### Install Archipelago Mod using r2modman -You can install the [Archipelago mod](https://thunderstore.io/package/ArchipelagoMW/Archipelago/) using r2modman in one of two ways. +You can install the Archipelago mod using r2modman in one of two ways. + +[https://thunderstore.io/package/ArchipelagoMW/Archipelago/](https://thunderstore.io/package/ArchipelagoMW/Archipelago/) + One, you can use the Thunderstore website and click on the "Install with Mod Manager" link. You can also search for the "Archipelago" mod in the r2modman interface. From 16454dbc33381e2f2d5395f55e8bff9aff82a314 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Mon, 27 Sep 2021 12:15:15 -0500 Subject: [PATCH 26/46] Increment data version. --- worlds/ror2/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/ror2/__init__.py b/worlds/ror2/__init__.py index 483b4689..166e58b7 100644 --- a/worlds/ror2/__init__.py +++ b/worlds/ror2/__init__.py @@ -23,7 +23,7 @@ class RiskOfRainWorld(World): item_name_to_id = item_table location_name_to_id = location_table - data_version = 1 + data_version = 2 forced_auto_forfeit = True def generate_basic(self): From 345d4c58f35bf42ce3e90feae32112f0460901e9 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 28 Sep 2021 17:22:23 +0200 Subject: [PATCH 27/46] Network: Add docs for new permissions mapping and implement it in CommonClient.py --- CommonClient.py | 7 ++++--- docs/network protocol.md | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 9187159f..79d73a7e 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -9,7 +9,7 @@ import websockets import Utils from MultiServer import CommandProcessor -from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, color, ClientStatus +from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission from Utils import Version from worlds import network_data_package, AutoWorldRegister @@ -315,8 +315,9 @@ async def process_server_cmd(ctx: CommonContext, args: dict): logger.info("Server protocol tags: " + ", ".join(args["tags"])) if args['password']: logger.info('Password required') - logger.info(f"Forfeit setting: {args['forfeit_mode']}") - logger.info(f"Remaining setting: {args['remaining_mode']}") + for permission_name, permission_flag in args.get("permissions", {}).items(): + flag = Permission(permission_flag) + logger.info(f"{permission_name.capitalize()} permission: {flag.name}") logger.info( f"A !hint costs {args['hint_cost']}% of your total location count as points" f" and you get {args['location_check_points']}" diff --git a/docs/network protocol.md b/docs/network protocol.md index 2c5e556b..c4326a7c 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -53,8 +53,7 @@ Sent to clients when they connect to an Archipelago server. | version | NetworkVersion | Object denoting the version of Archipelago which the server is running. See [NetworkVersion](#NetworkVersion) for more details. | | tags | list\[str\] | Denotes special features or capabilities that the sender is capable of. Example: `WebHost` | | password | bool | Denoted whether a password is required to join this room.| -| forfeit_mode | str | `auto`, `enabled`, `disabled`, `auto-enabled` or `goal`. | -| remaining_mode | str | `enabled`, `disabled`, `goal` | +| permissions | dict\[str, Permission\[int\]\] | Mapping of permission name to Permission, known names: "forfeit" and "remaining". | | hint_cost | int | The amount of points it costs to receive a hint from the server. | | location_check_points | int | The amount of hint points you receive per item/location check completed. || | players | list\[NetworkPlayer\] | Sent only if the client is properly authenticated (see [Archipelago Connection Handshake](#Archipelago-Connection-Handshake)). Information on the players currently connected to the server. See [NetworkPlayer](#NetworkPlayer) for more details. | @@ -219,7 +218,7 @@ Sent to the server to update on the sender's status. Examples include readiness #### Arguments | Name | Type | Notes | | ---- | ---- | ----- | -| status | int | One of [Client States](#Client-States). Follow the link for more information. | +| status | ClientStatus\[int\] | One of [Client States](#Client-States). Send as int. Follow the link for more information. | ### Say Basic chat command which sends text to the server to be distributed to other clients. @@ -341,7 +340,7 @@ An enumeration containing the possible client states that may be used to inform ```python import enum -class CLientStatus(enum.IntEnum): +class ClientStatus(enum.IntEnum): CLIENT_UNKNOWN = 0 CLIENT_READY = 10 CLIENT_PLAYING = 20 @@ -358,6 +357,18 @@ class Version(NamedTuple): build: int ``` +### Permission +An enumeration containing the possible command permission, for commands that may be restricted. +```python +import enum +class Permission(enum.IntEnum): + disabled = 0b000 # 0, completely disables access + enabled = 0b001 # 1, allows manual use + goal = 0b010 # 2, allows manual use after goal completion + auto = 0b110 # 6, forces use after goal completion, only works for forfeit + auto_enabled = 0b111 # 7, forces use after goal completion, allows manual use any time +``` + ### Data Package Contents A data package is a JSON object which may contain arbitrary metadata to enable a client to interact with the Archipelago server most easily. Currently, this package is used to send ID to name mappings so that clients need not maintain their own mappings. From 0afbe7988e09809a709d1f2b23d1aacb0d956542 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 29 Sep 2021 04:44:20 +0200 Subject: [PATCH 28/46] Core: fix Item.code type and add Item.name type --- BaseClasses.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BaseClasses.py b/BaseClasses.py index 604321a8..831fc533 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -950,7 +950,8 @@ class Location(): class Item(): location: Optional[Location] = None world: Optional[MultiWorld] = None - code: Optional[str] = None # an item with ID None is called an Event, and does not get written to multidata + code: Optional[int] = None # an item with ID None is called an Event, and does not get written to multidata + name: str game: str = "Generic" type: str = None # change manually to ensure that a specific non-progression item never goes on an excluded location From bde02f696ba8eebe927413294321c56b9955489e Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 29 Sep 2021 05:21:33 +0200 Subject: [PATCH 29/46] Core: add Item.trap property --- BaseClasses.py | 2 ++ worlds/alttp/Items.py | 10 ++++++---- worlds/alttp/Rom.py | 5 ++++- worlds/alttp/SubClasses.py | 7 +++++-- worlds/factorio/__init__.py | 7 +++++-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 831fc533..6084c8a1 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -954,6 +954,8 @@ class Item(): name: str game: str = "Generic" type: str = None + # indicates if this is a negative impact item. Causes these to be handled differently by various games. + trap: bool = False # change manually to ensure that a specific non-progression item never goes on an excluded location never_exclude = False diff --git a/worlds/alttp/Items.py b/worlds/alttp/Items.py index f8b30a2d..7deb831d 100644 --- a/worlds/alttp/Items.py +++ b/worlds/alttp/Items.py @@ -45,6 +45,8 @@ class ItemData(typing.NamedTuple): witch_credit: typing.Optional[str] flute_boy_credit: typing.Optional[str] hint_text: typing.Optional[str] + trap: bool = False + # Format: Name: (Advancement, Type, ItemCode, Pedestal Hint Text, Pedestal Credit Text, Sick Kid Credit Text, Zora Credit Text, Witch Credit Text, Flute Boy Credit Text, Hint Text) item_table = {'Bow': ItemData(True, None, 0x0B, 'You have\nchosen the\narcher class.', 'the stick and twine', 'arrow-slinging kid', 'arrow sling for sale', 'witch and robin hood', 'archer boy shoots again', 'the Bow'), @@ -128,8 +130,8 @@ item_table = {'Bow': ItemData(True, None, 0x0B, 'You have\nchosen the\narcher cl 'Rupees (50)': ItemData(False, None, 0x41, 'A rupee pile!\nOkay?', 'and the rupee pile', 'the well-off kid', 'life lesson for sale', 'buying okay drugs', 'destitute boy has dinner again', 'fifty rupees'), 'Rupees (100)': ItemData(False, None, 0x40, 'A rupee stash!\nHell yeah!', 'and the rupee stash', 'the kind-of-rich kid', 'life lesson for sale', 'buying good drugs', 'affluent boy goes drinking again', 'one hundred rupees'), 'Rupees (300)': ItemData(False, None, 0x46, 'A rupee hoard!\nHell yeah!', 'and the rupee hoard', 'the really-rich kid', 'life lesson for sale', 'buying the best drugs', 'fat-cat boy is rich again', 'three hundred rupees'), - 'Rupoor': ItemData(False, None, 0x59, 'a debt collector', 'and the toll-booth', 'the toll-booth kid', 'double loss for sale', 'witch stole your rupees', 'affluent boy steals rupees', 'a rupoor'), - 'Red Clock': ItemData(False, None, 0x5B, 'a waste of time', 'the ruby clock', 'the ruby-time kid', 'red time for sale', 'for ruby time', 'moment boy travels time again', 'a red clock'), + 'Rupoor': ItemData(False, None, 0x59, 'a debt collector', 'and the toll-booth', 'the toll-booth kid', 'double loss for sale', 'witch stole your rupees', 'affluent boy steals rupees', 'a rupoor', True), + 'Red Clock': ItemData(False, None, 0x5B, 'a waste of time', 'the ruby clock', 'the ruby-time kid', 'red time for sale', 'for ruby time', 'moment boy travels time again', 'a red clock', True), 'Blue Clock': ItemData(False, None, 0x5C, 'a bit of time', 'the sapphire clock', 'sapphire-time kid', 'blue time for sale', 'for sapphire time', 'moment boy time travels again', 'a blue clock'), 'Green Clock': ItemData(False, None, 0x5D, 'a lot of time', 'the emerald clock', 'the emerald-time kid', 'green time for sale', 'for emerald time', 'moment boy adjusts time again', 'a red clock'), 'Single RNG': ItemData(False, None, 0x62, 'something you don\'t yet have', None, None, None, None, 'unknown boy somethings again', 'a new mystery'), @@ -192,7 +194,7 @@ item_table = {'Bow': ItemData(True, None, 0x0B, 'You have\nchosen the\narcher cl 'Map (Ganons Tower)': ItemData(False, 'Map', 0x72, 'A tightly folded map rests here', 'and the map', 'cartography kid', 'map for sale', 'a map to shrooms', 'map boy navigates again', 'a map to Ganon\'s Tower'), 'Small Key (Universal)': ItemData(False, None, 0xAF, 'A small key for any door', 'and the key', 'the unlocking kid', 'keys for sale', 'unlock the fungus', 'key boy opens door again', 'a small key'), 'Nothing': ItemData(False, None, 0x5A, 'Some Hot Air', 'and the Nothing', 'the zen kid', 'outright theft', 'shroom theft', 'empty boy is bored again', 'nothing'), - 'Bee Trap': ItemData(False, None, 0xB0, 'We will sting your face a whole lot!', 'and the sting buddies', 'the beekeeper kid', 'insects for sale', 'shroom pollenation', 'bottle boy has mad bees again', 'Friendship'), + 'Bee Trap': ItemData(False, None, 0xB0, 'We will sting your face a whole lot!', 'and the sting buddies', 'the beekeeper kid', 'insects for sale', 'shroom pollenation', 'bottle boy has mad bees again', 'Friendship', True), 'Faerie': ItemData(False, None, 0xB1, 'Save me and I will revive you', 'and the captive', 'the tingle kid','hostage for sale', 'fairy dust and shrooms', 'bottle boy has friend again', 'a faerie'), 'Good Bee': ItemData(False, None, 0xB2, 'Save me and I will sting you (sometimes)', 'and the captive', 'the tingle kid','hostage for sale', 'good dust and shrooms', 'bottle boy has friend again', 'a bee'), 'Magic Jar': ItemData(False, None, 0xB3, '', '', '','', '', '', ''), @@ -202,7 +204,7 @@ item_table = {'Bow': ItemData(True, None, 0x0B, 'You have\nchosen the\narcher cl 'Red Potion': ItemData(False, None, 0x2E, 'Hearty red goop!', 'and the red goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has red goo again', 'a red potion'), 'Green Potion': ItemData(False, None, 0x2F, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'), 'Blue Potion': ItemData(False, None, 0x30, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'), - 'Bee': ItemData(False, None, 0x0E, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee'), + 'Bee': ItemData(False, None, 0x0E, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee', True), 'Small Heart': ItemData(False, None, 0x42, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'), 'Activated Flute': ItemData(True, None, 0x4A, 'Save the duck\nand fly to\nfreedom!', 'and the duck call', 'the duck-call kid', 'duck call for sale', 'duck-calls for trade', 'flute boy plays again', 'the Flute'), 'Beat Agahnim 1': ItemData(True, 'Event', None, None, None, None, None, None, None, None), diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index 0f939023..69988638 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -766,7 +766,10 @@ def patch_rom(world, rom, player, enemized): if location.item is not None: if not location.native_item: - itemid = get_nonnative_item_sprite(location.item.game) + if location.item.trap: + itemid = 0x5A # Nothing, which disguises + else: + itemid = get_nonnative_item_sprite(location.item.name) # Keys in their native dungeon should use the orignal item code for keys elif location.parent_region.dungeon: if location.parent_region.dungeon.is_dungeon_item(location.item): diff --git a/worlds/alttp/SubClasses.py b/worlds/alttp/SubClasses.py index ee9c5bbd..a154f876 100644 --- a/worlds/alttp/SubClasses.py +++ b/worlds/alttp/SubClasses.py @@ -20,8 +20,9 @@ class ALttPItem(Item): game: str = "A Link to the Past" dungeon = None - def __init__(self, name, player, advancement=False, type=None, item_code=None, pedestal_hint=None, pedestal_credit=None, - sick_kid_credit=None, zora_credit=None, witch_credit=None, flute_boy_credit=None, hint_text=None): + def __init__(self, name, player, advancement=False, type=None, item_code=None, pedestal_hint=None, + pedestal_credit=None, sick_kid_credit=None, zora_credit=None, witch_credit=None, + flute_boy_credit=None, hint_text=None, trap=False): super(ALttPItem, self).__init__(name, advancement, item_code, player) self.type = type self._pedestal_hint_text = pedestal_hint @@ -31,6 +32,8 @@ class ALttPItem(Item): self.magicshop_credit_text = witch_credit self.fluteboy_credit_text = flute_boy_credit self._hint_text = hint_text + if trap: + self.trap = trap @property def crystal(self) -> bool: diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index de3c9811..99dba71e 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -292,5 +292,8 @@ class Factorio(World): return FactorioItem(name, name in advancement_technologies or name in self.additional_advancement_technologies, tech_table[name], self.player) - elif name in all_items: - return FactorioItem(name, False, all_items[name], self.player) + + item = FactorioItem(name, False, all_items[name], self.player) + if "Trap" in name: + item.trap = True + return item From 8b2433584defc57694aae0a15157db675b7860d3 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 30 Sep 2021 09:09:21 +0200 Subject: [PATCH 30/46] CommonClient: allow running it as text client CommonClient: move logging init to library Setup: add TextClient --- CommonClient.py | 85 +++++++++++++++++++++++++++++++++++++++++++++-- FactorioClient.py | 26 ++++++--------- LttPClient.py | 16 ++------- inno_setup_38.iss | 5 ++- kvui.py | 10 ++++++ setup.py | 1 + 6 files changed, 110 insertions(+), 33 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 79d73a7e..5c52fe8f 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -4,6 +4,7 @@ import typing import asyncio import urllib.parse import sys +import os import websockets @@ -17,6 +18,9 @@ logger = logging.getLogger("Client") gui_enabled = Utils.is_frozen() or "--nogui" not in sys.argv +log_folder = Utils.local_path("logs") +os.makedirs(log_folder, exist_ok=True) + class ClientCommandProcessor(CommandProcessor): def __init__(self, ctx: CommonContext): @@ -198,7 +202,7 @@ class CommonContext(): def event_invalid_game(self): raise Exception('Invalid Game; please verify that you connected with the right game to the correct world.') - async def server_auth(self, password_requested): + async def server_auth(self, password_requested: bool = False): if password_requested and not self.password: logger.info('Enter the password required to join this game:') self.password = await self.console_input() @@ -315,6 +319,7 @@ async def process_server_cmd(ctx: CommonContext, args: dict): logger.info("Server protocol tags: " + ", ".join(args["tags"])) if args['password']: logger.info('Password required') + for permission_name, permission_flag in args.get("permissions", {}).items(): flag = Permission(permission_flag) logger.info(f"{permission_name.capitalize()} permission: {flag.name}") @@ -324,8 +329,7 @@ async def process_server_cmd(ctx: CommonContext, args: dict): f" for each location checked. Use !hint for more information.") ctx.hint_cost = int(args['hint_cost']) ctx.check_points = int(args['location_check_points']) - ctx.forfeit_mode = args['forfeit_mode'] - ctx.remaining_mode = args['remaining_mode'] + if len(args['players']) < 1: logger.info('No player connected') else: @@ -453,3 +457,78 @@ async def console_loop(ctx: CommonContext): commandprocessor(input_text) except Exception as e: logger.exception(e) + + +def init_logging(name: str): + if gui_enabled: + logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, + filename=os.path.join(log_folder, f"{name}.txt"), filemode="w", force=True) + else: + logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, force=True) + logging.getLogger().addHandler(logging.FileHandler(os.path.join(log_folder, f"{name}.txt"), "w")) + + +if __name__ == '__main__': + # Text Mode to use !hint and such with games that have no text entry + init_logging("TextClient") + + class TextContext(CommonContext): + async def server_auth(self, password_requested: bool = False): + if password_requested and not self.password: + await super(TextContext, self).server_auth(password_requested) + if not self.auth: + logger.info('Enter slot name:') + self.auth = await self.console_input() + + await self.send_msgs([{"cmd": 'Connect', + 'password': self.password, 'name': self.auth, 'version': Utils.version_tuple, + 'tags': ['AP', 'IgnoreGame'], + 'uuid': Utils.get_unique_identifier(), 'game': self.game + }]) + + async def main(args): + ctx = TextContext(args.connect, args.password) + ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") + if gui_enabled: + input_task = None + from kvui import TextManager + ctx.ui = TextManager(ctx) + ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") + else: + input_task = asyncio.create_task(console_loop(ctx), name="Input") + ui_task = None + await ctx.exit_event.wait() + + ctx.server_address = None + if ctx.server and not ctx.server.socket.closed: + await ctx.server.socket.close() + if ctx.server_task: + await ctx.server_task + + while ctx.input_requests > 0: + ctx.input_queue.put_nowait(None) + ctx.input_requests -= 1 + + if ui_task: + await ui_task + + if input_task: + input_task.cancel() + + + import argparse + import colorama + + parser = argparse.ArgumentParser(description="Gameless Archipelago Client, for text interfaction.") + parser.add_argument('--connect', default=None, help='Address of the multiworld host.') + parser.add_argument('--password', default=None, help='Password of the multiworld host.') + if not Utils.is_frozen(): # Frozen state has no cmd window in the first place + parser.add_argument('--nogui', default=False, action='store_true', help="Turns off Client GUI.") + + args, rest = parser.parse_known_args() + colorama.init() + + loop = asyncio.get_event_loop() + loop.run_until_complete(main(args)) + loop.close() + colorama.deinit() diff --git a/FactorioClient.py b/FactorioClient.py index f64d6cdb..d9a4d856 100644 --- a/FactorioClient.py +++ b/FactorioClient.py @@ -10,7 +10,8 @@ import factorio_rcon import colorama import asyncio from queue import Queue -from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, logger, gui_enabled +from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, logger, gui_enabled, \ + init_logging from MultiServer import mark_raw import Utils @@ -19,17 +20,7 @@ from NetUtils import NetworkItem, ClientStatus, JSONtoTextParser, JSONMessagePar from worlds.factorio import Factorio -log_folder = Utils.local_path("logs") - -os.makedirs(log_folder, exist_ok=True) - - -if gui_enabled: - logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, - filename=os.path.join(log_folder, "FactorioClient.txt"), filemode="w", force=True) -else: - logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, force=True) - logging.getLogger().addHandler(logging.FileHandler(os.path.join(log_folder, "FactorioClient.txt"), "w")) +init_logging("FactorioClient") class FactorioCommandProcessor(ClientCommandProcessor): @@ -66,7 +57,7 @@ class FactorioContext(CommonContext): self.awaiting_bridge = False self.factorio_json_text_parser = FactorioJSONtoTextParser(self) - async def server_auth(self, password_requested): + async def server_auth(self, password_requested: bool = False): if password_requested and not self.password: await super(FactorioContext, self).server_auth(password_requested) @@ -100,7 +91,7 @@ class FactorioContext(CommonContext): def print_to_game(self, text): self.rcon_client.send_command(f"/ap-print [font=default-large-bold]Archipelago:[/font] " - f"{text}") + f"{text}") def on_package(self, cmd: str, args: dict): if cmd == "Connected": @@ -268,13 +259,15 @@ async def factorio_spinup_server(ctx: FactorioContext) -> bool: ctx.exit_event.set() else: - logger.info(f"Got World Information from AP Mod {tuple(ctx.mod_version)} for seed {ctx.seed_name} in slot {ctx.auth}") + logger.info( + f"Got World Information from AP Mod {tuple(ctx.mod_version)} for seed {ctx.seed_name} in slot {ctx.auth}") return True finally: factorio_process.terminate() factorio_process.wait(5) return False + async def main(args): ctx = FactorioContext(args.connect, args.password) ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") @@ -345,7 +338,8 @@ if __name__ == '__main__': args, rest = parser.parse_known_args() colorama.init() rcon_port = args.rcon_port - rcon_password = args.rcon_password if args.rcon_password else ''.join(random.choice(string.ascii_letters) for x in range(32)) + rcon_password = args.rcon_password if args.rcon_password else ''.join( + random.choice(string.ascii_letters) for x in range(32)) factorio_server_logger = logging.getLogger("FactorioServer") options = Utils.get_options() diff --git a/LttPClient.py b/LttPClient.py index 4d499ad2..a9c1d1c2 100644 --- a/LttPClient.py +++ b/LttPClient.py @@ -26,24 +26,14 @@ from NetUtils import * from worlds.alttp import Regions, Shops from worlds.alttp import Items import Utils -from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, gui_enabled +from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, gui_enabled, init_logging + +init_logging("LttPClient") snes_logger = logging.getLogger("SNES") from MultiServer import mark_raw -log_folder = Utils.local_path("logs") -os.makedirs(log_folder, exist_ok=True) - -# Log to file in gui case -if gui_enabled: - logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, - filename=os.path.join(log_folder, "LttPClient.txt"), filemode="w", force=True) -else: - logging.basicConfig(format='[%(name)s]: %(message)s', level=logging.INFO, force=True) - logging.getLogger().addHandler(logging.FileHandler(os.path.join(log_folder, "LttPClient.txt"), "w")) - - class LttPCommandProcessor(ClientCommandProcessor): def _cmd_slow_mode(self, toggle: str = ""): """Toggle slow mode, which limits how fast you send / receive items.""" diff --git a/inno_setup_38.iss b/inno_setup_38.iss index 7662c59e..15fa6c61 100644 --- a/inno_setup_38.iss +++ b/inno_setup_38.iss @@ -54,9 +54,10 @@ Name: "generator/lttp"; Description: "A Link to the Past ROM Setup"; Types: full Name: "generator/oot"; Description: "Ocarina of Time ROM Setup"; Types: full hosting Name: "server"; Description: "Server"; Types: full hosting Name: "client"; Description: "Clients"; Types: full playing -Name: "client/lttp"; Description: "A Link to the Past"; Types: full playing hosting +Name: "client/lttp"; Description: "A Link to the Past"; Types: full playing Name: "client/factorio"; Description: "Factorio"; Types: full playing Name: "client/minecraft"; Description: "Minecraft"; Types: full playing; ExtraDiskSpaceRequired: 226894278 +Name: "client/text"; Description: "Text, to !command and chat"; Types: full playing [Dirs] NAME: "{app}"; Flags: setntfscompression; Permissions: everyone-modify users-modify authusers-modify; @@ -71,6 +72,7 @@ Source: "{#sourcepath}\EnemizerCLI\*"; Excludes: "*.sfc, *.log"; DestDir: "{app} Source: "{#sourcepath}\ArchipelagoGenerate.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: generator Source: "{#sourcepath}\ArchipelagoServer.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: server Source: "{#sourcepath}\ArchipelagoFactorioClient.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/factorio +Source: "{#sourcepath}\ArchipelagoTextClient.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/text Source: "{#sourcepath}\ArchipelagoLttPClient.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/lttp Source: "{#sourcepath}\ArchipelagoLttPAdjuster.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/lttp Source: "{#sourcepath}\ArchipelagoMinecraftClient.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/minecraft @@ -82,6 +84,7 @@ Source: "{tmp}\forge-installer.jar"; DestDir: "{app}"; Flags: skipifsourcedoesnt [Icons] Name: "{group}\{#MyAppName} Folder"; Filename: "{app}"; Name: "{group}\{#MyAppName} Server"; Filename: "{app}\{#MyAppExeName}"; Components: server +Name: "{group}\{#MyAppName} Text Client"; Filename: "{app}\ArchipelagoTextClient.exe"; Components: client/lttp Name: "{group}\{#MyAppName} LttP Client"; Filename: "{app}\ArchipelagoLttPClient.exe"; Components: client/lttp Name: "{group}\{#MyAppName} Factorio Client"; Filename: "{app}\ArchipelagoFactorioClient.exe"; Components: client/factorio Name: "{group}\{#MyAppName} Minecraft Client"; Filename: "{app}\ArchipelagoMinecraftClient.exe"; Components: client/minecraft diff --git a/kvui.py b/kvui.py index 8dd296e6..75560007 100644 --- a/kvui.py +++ b/kvui.py @@ -16,6 +16,7 @@ from kivy.lang import Builder import Utils from NetUtils import JSONtoTextParser, JSONMessagePart + class GameManager(App): logging_pairs = [ ("Client", "Archipelago"), @@ -83,6 +84,7 @@ class FactorioManager(GameManager): ] title = "Archipelago Factorio Client" + class LttPManager(GameManager): logging_pairs = [ ("Client", "Archipelago"), @@ -90,6 +92,14 @@ class LttPManager(GameManager): ] title = "Archipelago LttP Client" + +class TextManager(GameManager): + logging_pairs = [ + ("Client", "Archipelago") + ] + title = "Archipelago Text Client" + + class LogtoUI(logging.Handler): def __init__(self, on_log): super(LogtoUI, self).__init__(logging.DEBUG) diff --git a/setup.py b/setup.py index 99c1b4c7..374a8638 100644 --- a/setup.py +++ b/setup.py @@ -74,6 +74,7 @@ scripts = { # Core "MultiServer.py": ("ArchipelagoServer", False, icon), "Generate.py": ("ArchipelagoGenerate", False, icon), + "CommonClient.py": ("ArchipelagoTextClient", True, icon), # LttP "LttPClient.py": ("ArchipelagoLttPClient", True, icon), "LttPAdjuster.py": ("ArchipelagoLttPAdjuster", True, icon), From 4801bb11780d2714bf547d5a3de335e89a2e857e Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 30 Sep 2021 09:28:40 +0200 Subject: [PATCH 31/46] Setup: Move Enemizer from generator to generator/lttp Setup: Add OoT Rom Size calculation Setup: Add LttP Rom Size calculation --- inno_setup_38.iss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inno_setup_38.iss b/inno_setup_38.iss index 15fa6c61..55f2c8d8 100644 --- a/inno_setup_38.iss +++ b/inno_setup_38.iss @@ -50,8 +50,8 @@ Name: "custom"; Description: "Custom installation"; Flags: iscustom [Components] Name: "core"; Description: "Core Files"; Types: full hosting playing custom; Flags: fixed Name: "generator"; Description: "Generator"; Types: full hosting -Name: "generator/lttp"; Description: "A Link to the Past ROM Setup"; Types: full hosting -Name: "generator/oot"; Description: "Ocarina of Time ROM Setup"; Types: full hosting +Name: "generator/lttp"; Description: "A Link to the Past ROM Setup and Enemizer"; Types: full hosting; ExtraDiskSpaceRequired: 5191680 +Name: "generator/oot"; Description: "Ocarina of Time ROM Setup"; Types: full hosting; ExtraDiskSpaceRequired: 100663296 Name: "server"; Description: "Server"; Types: full hosting Name: "client"; Description: "Clients"; Types: full playing Name: "client/lttp"; Description: "A Link to the Past"; Types: full playing @@ -67,7 +67,7 @@ Source: "{code:GetROMPath}"; DestDir: "{app}"; DestName: "Zelda no Densetsu - Ka Source: "{code:GetOoTROMPath}"; DestDir: "{app}"; DestName: "The Legend of Zelda - Ocarina of Time.z64"; Flags: external; Components: generator/oot Source: "{#sourcepath}\*"; Excludes: "*.sfc, *.log, data\sprites\alttpr, SNI, EnemizerCLI, Archipelago*.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "{#sourcepath}\SNI\*"; Excludes: "*.sfc, *.log"; DestDir: "{app}\SNI"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: client/lttp -Source: "{#sourcepath}\EnemizerCLI\*"; Excludes: "*.sfc, *.log"; DestDir: "{app}\EnemizerCLI"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: generator +Source: "{#sourcepath}\EnemizerCLI\*"; Excludes: "*.sfc, *.log"; DestDir: "{app}\EnemizerCLI"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: generator/lttp Source: "{#sourcepath}\ArchipelagoGenerate.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: generator Source: "{#sourcepath}\ArchipelagoServer.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: server From 858d4c74ce2aaa50d9a41f2aaa186e3863b61bc2 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 30 Sep 2021 19:49:36 +0200 Subject: [PATCH 32/46] Options: fix start_hints --- Main.py | 2 +- Options.py | 18 +++++++++++++++--- worlds/alttp/EntranceRandomizer.py | 6 ++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Main.py b/Main.py index 2f62bf79..f15c085e 100644 --- a/Main.py +++ b/Main.py @@ -289,7 +289,7 @@ def main(args, seed=None): location.item.code, False) precollected_hints[location.player].add(hint) precollected_hints[location.item.player].add(hint) - elif location.item.name in args.start_hints[location.item.player]: + elif location.item.name in world.start_hints[location.item.player]: hint = NetUtils.Hint(location.item.player, location.player, location.address, location.item.code, False, er_hint_data.get(location.player, {}).get(location.address, "")) diff --git a/Options.py b/Options.py index c2824197..fdb1b8a6 100644 --- a/Options.py +++ b/Options.py @@ -29,7 +29,9 @@ class AssembleOptions(type): def validate(self, *args, **kwargs): func(self, *args, **kwargs) self.value = self.schema.validate(self.value) + return validate + attrs["__init__"] = validate_decorator(attrs["__init__"]) return super(AssembleOptions, mcs).__new__(mcs, name, bases, attrs) @@ -241,9 +243,10 @@ class OptionNameSet(Option): class OptionDict(Option): default = {} supports_weighting = False + value: typing.Dict[str, typing.Any] def __init__(self, value: typing.Dict[str, typing.Any]): - self.value: typing.Dict[str, typing.Any] = value + self.value = value @classmethod def from_any(cls, data: typing.Dict[str, typing.Any]) -> OptionDict: @@ -255,8 +258,11 @@ class OptionDict(Option): def get_option_name(self, value): return ", ".join(f"{key}: {value}" for key, value in self.value.items()) + def __contains__(self, item): + return item in self.value -class OptionList(Option, list): + +class OptionList(Option): default = [] supports_weighting = False value: list @@ -278,8 +284,11 @@ class OptionList(Option, list): def get_option_name(self, value): return ", ".join(self.value) + def __contains__(self, item): + return item in self.value -class OptionSet(Option, set): + +class OptionSet(Option): default = frozenset() supports_weighting = False value: set @@ -303,6 +312,9 @@ class OptionSet(Option, set): def get_option_name(self, value): return ", ".join(self.value) + def __contains__(self, item): + return item in self.value + local_objective = Toggle # local triforce pieces, local dungeon prizes etc. diff --git a/worlds/alttp/EntranceRandomizer.py b/worlds/alttp/EntranceRandomizer.py index 74c1dee5..c5053335 100644 --- a/worlds/alttp/EntranceRandomizer.py +++ b/worlds/alttp/EntranceRandomizer.py @@ -4,12 +4,15 @@ import copy import textwrap import shlex +"""Legacy module, undergoing dismantling.""" + class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): def _get_help_string(self, action): return textwrap.dedent(action.help) + def parse_arguments(argv, no_defaults=False): def defval(value): return value if not no_defaults else None @@ -241,7 +244,6 @@ def parse_arguments(argv, no_defaults=False): parser.add_argument('--game', default="A Link to the Past") parser.add_argument('--race', default=defval(False), action='store_true') parser.add_argument('--outputname') - parser.add_argument('--start_hints') if multiargs.multi: for player in range(1, multiargs.multi + 1): parser.add_argument(f'--p{player}', default=defval(''), help=argparse.SUPPRESS) @@ -277,7 +279,7 @@ def parse_arguments(argv, no_defaults=False): 'sprite', "triforce_pieces_available", "triforce_pieces_required", "shop_shuffle", - "required_medallions", "start_hints", + "required_medallions", "plando_items", "plando_texts", "plando_connections", "er_seeds", 'dungeon_counters', 'shuffle_prizes', 'sprite_pool', 'dark_room_logic', From cff5db446d2f5f68b88587486a3f8009a09f121e Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Thu, 30 Sep 2021 19:51:07 +0200 Subject: [PATCH 33/46] Fixed some bugs + added documentation + added a few features (#87) * Refactorings + minor logic fix * Fixed unnececerly recalculation of item_name_groups * Enabled other itemId's so that they can be send to client when desired * Marked the loss of location 1337158 * Updated network graph * First draft tinmespinner documentation * Moved personal items to slot_data rather than location scouts * Disabled Remote Items * Updated docs * Fixed port override --- README.md | 1 + .../static/assets/gameInfo/en_Timespinner.md | 28 ++++ .../assets/tutorial/timespinner/setup_en.md | 60 ++++++++ .../static/assets/tutorial/tutorials.json | 19 +++ docs/network.png | Bin 105538 -> 111595 bytes worlds/AutoWorld.py | 4 +- worlds/timespinner/Items.py | 130 ++++++++++-------- worlds/timespinner/Locations.py | 4 +- worlds/timespinner/Options.py | 2 +- worlds/timespinner/PyramidKeys.py | 4 +- worlds/timespinner/Regions.py | 90 ++++++------ worlds/timespinner/__init__.py | 54 +++++--- 12 files changed, 264 insertions(+), 132 deletions(-) create mode 100644 WebHostLib/static/assets/gameInfo/en_Timespinner.md create mode 100644 WebHostLib/static/assets/tutorial/timespinner/setup_en.md diff --git a/README.md b/README.md index 06a04b13..c694adb0 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Currently, the following games are supported: * Slay the Spire * Risk of Rain 2 * The Legend of Zelda: Ocarina of Time +* Timespinner For setup and instructions check out our [tutorials page](http://archipelago.gg:48484/tutorial). Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled diff --git a/WebHostLib/static/assets/gameInfo/en_Timespinner.md b/WebHostLib/static/assets/gameInfo/en_Timespinner.md new file mode 100644 index 00000000..1b0eb0d4 --- /dev/null +++ b/WebHostLib/static/assets/gameInfo/en_Timespinner.md @@ -0,0 +1,28 @@ +# Timespinner + +## Where is the settings page? +The player settings page for this game is located
here. It contains all the options +you need to configure and export a config file. + +## What does randomization do to this game? +Items which the player would normally acquire throughout the game have been moved around. Logic remains, so the game +is always able to be completed, but because of the item shuffle the player may need to access certain areas before +they would in the vanilla game. All rings and spells are also randomized into those item locations, therefor you can nolonger craft them at the alchemist + +## What is the goal of Timespinner when randomized? +The goal remains unchanged. Kill the Sandman\Nightmare! + +## What items and locations get shuffled? +All main inventory items, orbs, collectables, and familiers can be shuffled, and all locations in the game which could +contain any of those items may have their contents changed. + +## Which items can be in another player's world? +Any of the items which can be shuffled may also be placed into another player's world. It is possible to choose to +limit certain items to your own world. + +## What does another world's item look like in Subnautica? +Items belonging to other worlds are represented by the vanilla item [Elemental Beads](https://timespinnerwiki.com/Use_Items), Elemental Beads have no use in the randomizer + +## When the player receives an item, what happens? +When the player receives an item, the same items popup will be displayed as when you would normally obtain the item + diff --git a/WebHostLib/static/assets/tutorial/timespinner/setup_en.md b/WebHostLib/static/assets/tutorial/timespinner/setup_en.md new file mode 100644 index 00000000..9dec349b --- /dev/null +++ b/WebHostLib/static/assets/tutorial/timespinner/setup_en.md @@ -0,0 +1,60 @@ +# Timespinner Randomizer Setup Guide + +## Required Software + +- [Timespinner (steam)](https://store.steampowered.com/app/368620/Timespinner/) or [Timespinner (drm free)](https://www.humblebundle.com/store/timespinner) +- [Timespinner Randomizer](https://github.com/JarnoWesthof/TsRandomizer) + +## General Concept + +The timespinner Randomizer loads Timespinner.exe from the same folder, and alters its state in memory to allow for randomization of the items + +## Installation Procedures + +Download latest version of [Timespinner Randomizer](https://github.com/JarnoWesthof/TsRandomizer) you can find the .zip files on the releases page, download the zip for your current platform. Then extract the zip to the folder where your Timespinner game is installed. Then just run TsRandomizer.exe instead of Timespinner.exe to start the game in randomized mode, for more info see the [readme](https://github.com/JarnoWesthof/TsRandomizer) + +## Joining a MultiWorld Game + +1. Run TsRandomizer.exe +2. Select "New Game" +3. Switch "<< Select Seed >>" to "<< Archiplago >>" by pressing left on the controller or keyboard +4. Select "<< Archiplago >>" to open a new menu where you can enter your Archipelago login credentails + * NOTE: the input fields support Ctrl + V pasting of values +5. Select "Connect" +6. If all went well you will be taken back the difficulty selection menu and the game will start as soon as you select a difficulty + +## YAML Settings +An example YAML would look like this: +```yaml +description: Default Timespinner Template +name: Lunais{number} # Your name in-game. Spaces will be replaced with underscores and there is a 16 character limit +game: + Timespinner: 1 +requires: + version: 0.1.8 +Timespinner: + StartWithJewelryBox: # Start with Jewelry Box unlocked + false: 50 + true: 0 + DownloadableItems: # With the tablet you will be able to download items at terminals + false: 50 + true: 50 + FacebookMode: # Requires Oculus Rift(ng) to spot the weakspots in walls and floors + false: 50 + true: 0 + StartWithMeyef: # Start with Meyef, ideal for when you want to play multiplayer + false: 50 + true: 50 + QuickSeed: # Start with Talaria Attachment, Nyoom! + false: 50 + true: 0 + SpecificKeycards: # Keycards can only open corresponding doors + false: 0 + true: 50 + Inverted: # Start in the past + false: 50 + true: 50 +``` +* All Options are either enabled or not, if values are specified for both true & false the generator will select one based on weight +* The Timespinner Randomizer option "StinkyMaw" is currently always enabled for Archipelago generated seeds +* The Timespinner Randomizer options "ProgressiveVerticalMovement" & "ProgressiveKeycards" are currently not supported on Archipelago generated seeds \ No newline at end of file diff --git a/WebHostLib/static/assets/tutorial/tutorials.json b/WebHostLib/static/assets/tutorial/tutorials.json index 4931e4b2..b477ea94 100644 --- a/WebHostLib/static/assets/tutorial/tutorials.json +++ b/WebHostLib/static/assets/tutorial/tutorials.json @@ -158,5 +158,24 @@ ] } ] + }, + { + "gameTitle": "Timespinner", + "tutorials": [ + { + "name": "Multiworld Setup Guide", + "description": "A guide to setting up the Timespinner randomizer connected to an Archipelago Multiworld", + "files": [ + { + "language": "English", + "filename": "timespinner/setup_en.md", + "link": "timespinner/setup/en", + "authors": [ + "Jarno" + ] + } + ] + } + ] } ] diff --git a/docs/network.png b/docs/network.png index 223a989001a4473ea98f9204f19fcc4eb22f8774..7eb996e217443afb6d21db0333756ecf275254c4 100644 GIT binary patch literal 111595 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 }yGFx8!&osHG?q^%BBm8Zz*RGng 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%0D&Gv^mB5#)M*?tRVR2osxS^;mnF|N6`% zmiX&0>|liLB=Nq(D+{?ngO@G;3A1l*N31o@Ma2Qb2?0}jk}2))@gm(Bm`w-FOV*Nq z`O=H@BQ}+6Fgmzh0cf7NO?8sF&6&Wx6txlqTvm5-=8;vk%bheeW|W)bO@PM$bn3YA zCXy3x;7zPdHWxrr)(cY_=G){Lih$Jty$KBC^^=u&D%2lLp{p;ty_ZTx0dRW4Swrrr z#hb~xhw15&-gabAB?N#G05`S;(2RWfZw3IjmK)?O)m+S%(!{rxetvd={tdJnUZtFM zM35aMvuldI?O|6mAEPaex(EwZ8@hG_P;Kl1$rg(gxA-Ac}qWF%NEez!5&bp!k*9s z@S@b6Ok52rBtuA1YKn|Iz8bc?pXoUUL;1SFLx(g&ucjIYYZX0-25HbcR6~N%E&~9W zGuySJjd>@qq=<;sou$QZ3Jz|E5UvYY2jCzgmOu{LSq`vYcl<9A$hIwxx?KcELK}(S zC_x2FyhjLgK1AzE!Ee&+_pfiznz~*AVC7IboV1z{k~5#w`xP5DQ_uZ~f1yQ&@hL~i zF+n;IG>TpKw#%@QEz=+I$qG@(qUJL*0%pW>AZUsk!vFaj?Esr=fWzu3+=^Jc+4M{| z<<>c^YUeUob)^uv`ID$G18agt=2SlPGRgwKv${gu$l@YEK|T9PHq;91kd|y08G=<% z#au&2C9%KA`rj3h#YEhqdX2I?*KcN!1lu05f>ASE9Y>DHN2WObxH}D)<+3T?8YGAJ z0rB2Lkx7v%1Uu7SH`|>x*CU-W(n-y0QhG&|nIrJYA*3&LcN$M1K8FU@q&lo?#S5Ly z-d1J{aObTP8<~aWIp1C45}DmR00U%PPR;&r(r$0&7#z3j&^v$Z{e@g|nR z9&E7egrL((Rx?H#@dPE&&=Tq5GQU$~a#v_BvtXB8A*fwcbgff8yAo#IXaTaJ<1i6w zi@>>%IlCcjc$DHP2s_UJ&l#Y1n*SNjCkPFO2*;!1d2Ore(EZ&|q%rRIf}?a3ctDKQ z4q0r02=(SS9|bsKuHXBtMQ*$q zLB;yPhTB2O`MX~{35d0~vB@vD57`XR_%};Pdw8KpiHGt8h5~GX`|1ue8Vc!2A`Iq& zI-{1$9jIpuP@)L_oloHRi~&CIGu$`;z{D6}WSg{pr}g<6yw2HiYGBF?R6DMjm=0H# z4cT-k9rjdJ<>)4kE$*U5#|YS27C|yzirJPRr2Dm=Q+bBlQt(mngwD}1a%uA^3M&_Ze$pwbM07S`Y&n_#d#!3$s z%ckg~Zahz*G0*{=(oo3QpXlA;(^WjWgC zFLAItU45D;F_>0wT(?L`WWsWa-&Gu}DPPr{XALY>=*2Mr+ zbA>l4R(WkuDvz4Uw47ktag^|*X5%{S`%(%V6pO(>zPM=Bj_B zhBi|pd=3MMz82CB7xVm*1Lxon$*D;#Ynvc29)XQi^}!|JFT4rw^v88?EGSmMU)LD% zI`rNK{f4zx5u)}J;*CDSkww6%YN1hspne462UtnZ@o9g7Gp6{5Q7}MaJ>XAc1pJm2 z(<5>A(Ez+;`<=H2c-4muI$t|(@HZAArP~#q{>gzqiK#dX!8>x;Tx=plU0ZOi%zCOH zopDeRJewol{uO+C@c1)>8ngB!AH@oKYE}Bhyv~v>;576HF)I%KzTPT4zE8#vZbgXY zF(Y{{A{erjYsR`(%_pc$Y!ZGAIEnZA71ndw59kkhX~xk2y!C4uoHn1*}Q zGdC~mW0-GhvLh0TUF~IPrU>d7r5MxlZptQp<@GP!E`pV02&yzIrcb<|c7QTtyY~=+ zT?sVEd-(>;#=EI(fIZR+N#LL;uhJXW3`%W1U=R$}3vN#*4psi54oSc{I!j1-k*-0+ z3gBqW^bdi4lZp4s)GusAyha#`8vW|vn|BB?D)VRSAnhBgb+|Pdw?`QAzCD{AE1Z0H z1hU}4eA#zg_j5lcOOTN?L_p`4_`cWVB?f3iL#Nf;qQBPjf{5tFm?y7{9!L$Y70ysQ(x~rwX~ko zBtiJ{A~5y?o$crf$%N;KGQ}b1aa2G?@jELLe1l`v_OY};fJ9JPW47cgq9z$K#^kFB zAb+KJeQF}&6?)$f?Bk!ktr&}7%$2w>7|a>*ns%=$%7g>w5V`dO=P*1tcpS1Dbcx#{ zeD?5^4!jkh4KWVB43t*C;YOp2v4YhJo~S$*l;OXVznnyry~9ht=+WobTX3q%Q+*@F zV@8a%!>hsMKaUAGB>(&&{Fbi(04byk=tur@&7A+AQvLh)?<@bjDf~TS0UUvU5<+=9 z^acLwuZm!p(~jEXe-Xn&q9g6UG^Kn+P>i`iXia*nPv~)p5_ro3|3wWGxBb@Ke7K4@ zp`9_I=yS-mJN!TmCdkVjEild?x}yqlXmSR+0=iy9a|>mITL1I);m`F$A?*dC#D9Hi zh)+`g;=pj50ayO#Hp4#`H&ldZ`}oUo08JK50Ic}0zcTsW+Paba1wphx7vef1&##_x zD-Vd;z&wLdX?l3>L2$C_^+J?Aq?Rf4fJOobdB}z$D+%C)1&ECUKZb=mIo1UXW?k8K zR#E2a89_DG8oP)x*mMQklSc62f{N|a`k0xT7MyBxj<5VCtTjKlvcW#Kx?*YgnPHh& zX2~>8hX**mC$B#B=qo?)oFnvIXCLSJB~idKyhJQRF=tN@`$To7>fCmK9;-y%a@iT@ z?4Pl6wHps-xePUiENt6D4ToMwx~%IwbJ-LPa#_5%N=x*hntL-cg|hU6!6*F!!mpdJ z&L-gaPa(z(%;~rf09h88;Q*hHx2Dbv@=w?V%u;m82y|Wpw%zK7j+$#+qrtZE%g@ioijo+?{@x9YNa2q&!FF z!alL{(=Pr8OSUVg_eoF4CvmbW&`C!h!^|YYhprC!JA^cZOUszgF;ny4BUwvL#-74$ zG1)|2KCQgQ9Pf@wv1VQ8RxSz;*B?@?5@Nb*xB0aSy3KxGD3}^1&GwfYrY)$~yxQGh0-BZDgiSyPGPA5&3mYMdOKKw}5zGtk`!!>zGZ2Nn(LMid zxz?82y=et<^8vQh_m2T8_9yO!CUhVwf_Ac4IUs|q_->T)@HCZ@1?RmQnR3>7-j}XZ ziusEKJ`n&>q5Rv0A95K-{X45LaCvVnA%hvrE3u_= zPc+)sVwk7N$_v&UfA3r3V!L6-njk&rX+Os}%L9Q4qL0#yc$wMVuk#;2`nL@{>T7c) zs+`1K-g=?%2TRr&HV^_E{Hr`F6^>YieolR?W${35MUhl7BC?CidIXjNtR$;iM(E zZzcSD4QFCI7;h-j@)u9jHi2?yEa@=I#oa1mwoUpO?CkaJ@x{@G4a=uTdlWaVy}L`> zwxj4*h)+px-x}+)yaJToJd{Rs$4TJ#Tq}e=LP_=0)|jLRgt;<@=N$%8NBRM;{(9;o3|2zJEwy64m44O0uR3T0qNd55XZOpW!< z2gc~tZrsFm*5EJ7c*~}HmE0Zg^BOkA)G2l-4mnIk-z%}uq3X4VagaI{iE7CTs4uYT z6wiYL4mypjF&Yn}&2uh=b?;1|>$v0|#kNa_Wd&yg)t+qC@3yZaY4(d$YD@Ry>*Z$2 z*cPg(d~7T4yIgdN9*lnB1oIhxJT6r4kpBIU4Q zUGSOfs#A-X7G=#?-Hb9p%zi&C!PAdlbU0$67ifV@j5#<9o~vxvCg$HM5S3 z5%1@;u^eQdcyDyn^;iGuRVQ=FCDAsuiVXGJX`H-P$=`hpne=|s;JN;_d)357ae%#P zdyr;V^_~fp2p4v8X3KfWV5z#zFO^~NhxMJZ=7Wf6N2T0r&m|w$lv~{{|BGkNA)`-D zFQTaQM(+<+`56|nS$*5N;M)4wuKLV_2H%0mosHG4k5g8iGPUDhwrMZ0&0BZf{4U@j zEAJg9L`cm>@XC#Tgh2VXoLr5!i|(#g8tk1izbWXl~1=biQlY8d?^_51fseL;17t$dml(CIT zE(ZDsR|Wh6HBtyCHsp2d&ZWp590aOj)T@D9=&Nv;_zC$?+Yc1oXE?suPLp=wnaAri zI}XxTs@z-rZXp!8$K8^tRyXRBAX4MG7_8gDQO&_>Csy+OLA3pbgx6UW=S#O^%n(@= z)&1gMn<5@*=n$^r27022AASGvRISF-WT7P}!*oXiQmAQBQkj0t98zzW6%9r)#}OCONQ0 z@zWe0L1bcAAi=<}*wL`Ngmvi}>dDIZn2;DqKO)CVdER$7&NqJ~^P~2)alE7#z(Sb*>6peG@H*|f6Nz)zYyQqw=!9BU8Zl?V|zrpLD z_)ajQF5*Re8xG1f0co|~De4^0Sh)sE;->ZCW;j!oshO(fJj`o2{;CYOBhcG;QC9o< z-AggA%ct_`8uqdH8^k=jEewU%PJ2j;=#IKC&zHo3t9SY7*qM&cuQgt^?K&fDhDP<2 z>uDX4Lmd;di@HLMJWN6}1`$;*B0WYmkq|OEr2QbhTOoL_f+gwVK>X~gqnrL!b=3^T zCfnncRCIWE)uyXh=eJ(f+#XWC<}{h*J7A-_K)^z2&OphxUWOkO56&%IUk`?J+o%>En>anl`D{e2 z=_|oP;t0duy2(X@%8j?SS4hZxx*62wUAXo)xZ9VB=9qlC!Qraln8}ALw<|4dT_5Tc zx7pn~SB(ZM^_a~b%zHR-Ezt3sOO7Nz6CDa;b?lCZtwlyM zlrHlY3AN8}bJki_)|=jO8sDQ{NMtn1UCuSSxuoz|=bP;soyTdPx>|<0XKSX%iuuWO z&F%V&3=ixIG^fYpeX9l1Z{}X9rzPJN>z+D!^HHp6e)>Jql#f>~ClC3o(zD6*(F<8R z`#D--yPl}B8u;&jwQwBFIqq#+=^1;ovKlDvPNN=#^B?i?-Na8By?mvX%cWQC92_Oc z(oOgPO^zAA*UsO(a^@z~>9{xS+0WSKKTW;H52(CjnN!53;jn}RU#IM~eK;**F=u5+$bY3@6o8}J7lakWuXyW1 zCVPAlZROMe^Ps|13h~*H>>EL##~X?MY*J`i46!RAccfIru5Ys<-(}P;O?A|cUwWrU z#)7Z{)pNh=4jmxn`;j-RdsZ(dL3Ny3a&ob^2 zy3IFQRz3fcFC9hrEcPQ=fgoAvr{^QI1>KIU(oP$~ z)|s@#)J8Q@J0xtWN!OF9&ekt6+!|uxnR+B#AN(UUKVc{HulK9datA-Y8kQV$&6O%) z^LYJ@vulq|#P^~aQRD;OCM&MLbepLXj!8`mD1Las14}|Fv-K_u&rdFnUF&!CKX(Xd zZv3?V@dCq=u%~d*~*fMG3gJbBZ>0ea1Dt}pjH?x2~Uw`vm;Y7Ne(Wm4&=EZ$q z1??8hfIO5ImADJ7=jU^hK+>XFu7L5YaRx*fW>n(XekS4HOpXJXyA|t~?g}MG1>eo@ zCm_nSlV;sN?^yA4M_h;g#@uSV6L zI!{$dmd!p3i-fHCW_H;(0AuaK$v52bKV|<-Rtkey3b;>3T_&nNPKV(V>L>n7Y@AEPcm~ae5PFU{3x@;F2?l02B`^e^P^IPbZeSlE8^j5 zh0Cx{t!S!QqQ`0IT;%r^JRKnBs?2?~fC~WCP79*A*Bn({(pHyynR;&o*f5!3fw2x4 zRX-A50NdGlbdintAdWm&z3AZ&K^yhrR0ucsrIw|(AI_r>R=`qY7)8s^UOjgz zvThj(Xt+X!2{L%coCaAS`&?od@g;ZL!Y`0}`I~{DLM}_zDNo#q0%hwjqRC-=%w{Dj| z=UYhH94zXX**Dq-ktOA5i$u*vNB#_+yUY6Vl>R#`ae_>1`$i$F%Oai|CpNzE*KQQ; z7}uU!%OM!vP$_>_b-*dp%uwqm7J>1%!etDx=$H`AXy zdO_`EEq`D8?AtO3Lm!5=0oQdaD6|9K4l0x7=!mFQDTW2MAx$zcpJG*^R!gQ!Z=+o< zEKo?Gqi!#?y}Fj(zZu_RZN_ZMrJ~M<;L(x>DWo! zecmTY=l!O5rPXL%xX6bO$g}p&KV`7A7#_Xm(PO7Ox@A}ZEwz3a_c!V}MzpRAWKEE7 z4V1+_1L2ifb0prWFIU<@zOP55Cc^vtaa`ThLdj!l3g29*B6$}LyGP%RvSLNh`Y@q2iv0=8L%}z> zYqoNA@d@xI1>S)_=qEUVL($rNBvEQa7 zJyUoE__N2p=ZOY;?kI(1+jddr#%JgNdvIdXoj4U_Why~m{TVDly2TrvD9)w`iSw6^ zmdif2M&61Qu2RpOCMFFBN_b3r*q20)#z<9Fja#yNy-Xo*A6!)U$tg2L=pNJojX3X6vLAC2f+!@dmczPn6imTur`N`_L?*FvozsxtRTDt)-(< zxd}%|3bQWtxkQFvv0wjgKKO1nh2u|of6Dix=E?gtZ*Nc)aM7nUC(xAow&o{%qCK!!J z0llBgXIj?)&cPmaNFk^K$}rk6SZ_D7H@|F812*IHjiN6> z(|JTrB!Lub8{7{VZVKc4iH{ND>r<-)o4--hm>rvZK}uAqs%ZqtLpN~6G`e4jK-FA? zD_;47uK1$&8zVK&9@c3lYbp(%^3ITAZpcY2d(XO++6sZ*BSHf zWA)xvn249BWZ>UleHYYprSQN#NJ8fv1CV3V&@9KXJQ=wV7V3*IH5oWp!2JC8YA^#8 zpd3n6Fzq^^6hvV1KbO2Y4AcX-4-()*aWQ6w6J{d-x{5CM`NIf?8Yvh0B;w#jj_CWr zsr@hF9iRgukw3^Zi1N179{&$Mp5Ko!uzx{o^8W(aw@6PeTJW4Rf_t$%I>u$Ux0g{*LNeZH@DGOw5wjegIn1Jop z2lFhSz-*#&P#sTQI z?ou;)^W8X!rY#OY``Q4=>A8CNNj3U-6Y>mzXxP={`Ru0PVbuIvh7Ng~2Oq5}+h$`q~E_@0@?c$tkhtM!^THp3duz-vs z7v*$Z<_m~o`z@G7t0!A03;H|j&{*sTY;UUMjIV29jKkzPP_cqoKojXky_kUE04@GL zpe5(t6d}aanZtP91-EFzBLr>72tApCyDotQV+X#}^}{AbK$`3R)>9|QOc5NkYziBQ zGlH=Ux*>9g9ihue_0$Xlx1)bC6~K1<9v;B?|D`Y$EEL`PbsCXi*xw2cAln4Q8qq5V z6r5Yt>6s2YiA|q5ds}2JB-*Nx&9+JsucNy&j=OHGH!N+?K-eegnX1<$rfd(_3&FP4`B<)JzEBG=ko+ zY6u5RbE-1s{OK+9-^qr}LvqilLK(Ru zE?ynil!b6SK%IE61)@mE8W#6^SR+H(HOjf&=P9U*z*+XPtRo)lHAEabn3HUWv0R@+ zJx;=RHE)QEt0C#vZ@75aJJY|=r5Qic4>NcBfeka=2tg@qp7BT0B5es2!k-TEnoSia^cL;mg-H9pHgaSkBlEGqN5cRY@}>zAkRO?J|in z#r-DiQKBy8bTB=f4|Hz)=*nK0{yRSK2B@KX}{J>zN<#k)MLPpZ|P3$oY1r-5tSJ(-lN%>Ymyl_2nJb}c|3^~DM zz*Ny4np2@`8`(AI8Hd_>qWdT=)~vQG0@ydB1nyb%HAgY>8sEMa8`WL7pmT!3^=|Zj z!`Zu}Niiz3a#$-m=(Afy@5f$!`xq;U6*#QD=o#ZL?yMsgOGk&u${*$83G$kcM14D zU_bfL_f$FA@qc2rY5EkyfT6hM(IkHx!+hR3##mMS8W&e9*Aa=r+Q8<{OT+}#L z1$daGa(L4%wE#|GVgq#oj6O2kC@()3!PYL!0b2Q{*Q-_-wHJajJcRLToUa9ELP#W; z)Q6!eC1GO-eV{rA{iSXa{^WOq2H`q`>q~y5I%m;H)(5C*2QnP&%vqV8AJgZOMY}5* z%Hw1cZ`q7IqrO=HI^KTR6MNLwSTEUc-q}mr(1+5gPq0wyUBM3+N=Sadb@m6IyS|a= z6fz9qBACI8R=I4;_>%8Ne(3%}NLgImkJTHPfOG(#f4LHVp0WE4oMPblxtoDr_weX^ zc`M80x z-Re=5_no>YitIkYwBaXBZSRzR9Fr?{gtA_z+ryJbM&{5|#l7=1hkE+4x7R3{G5RI& zoc=hfkYkU&%9aG=s&Yr{+Pq-pQ~QYe|RrTW!r>+sqEp|pGGg3v?yr>=(l$?qHa<7V8kzP zLo3`I+%Q~?)scP+VoxvR1MRB$RAynCv0s?g1)o1S$*sf*l z-AFHnL}-cy$?ToHi|4rCPS%eTEj6XC`ZZF=+q{Waz3`LgjdbGu3vGNl(&_-zlhD$GsTz)@3{e8}CH*)+AU1 z%}NF$wdtL`S*dBT@c6Fq!C?zY7bm|Hws*N7!PjPB<$k+eveuU#gJ_o(@=ALH={2s~ zGc2Yf)gn|fc;eLRwpscoS?e#^SS23&38Bu2CDu7#E4Af+9=ROSzPjNxkUN&M3Gx9BZoERg0DIrHl=tmC;CW5)I zw>#yu_CKjK%BKTpTd_H`tW@a~-J^8m_F!xb%_we3Uq8u9WBL`(jkw@Bj<6B`L94+ee6=F-o@O5oS8 z&41GU0G;iP#YLc zVAldkw78)$sH4>q8-uCQ=!wHiyd3%!|4s4zi>XnSH9P-1={qQ4lJI4@jo67-sCTK}6iE?)lq+qY%7$LM0LI7~x< zBU3Ja$dR#P3_@C0IEu`X6$!HMfz!(cxGBIcv8|)j=mii1L>Rg*Yj;afa_g$(jGQ_u zAPLZMK!!pLh=`-bY4NkZk>`K0ss68mNiNS3gw*pelCcQRwgEUDEKvV?rv?Zy7CX?m zo)46x&pR*m`jGt7{c6yD+;<&_-Bb<>I}o1-U^~t?66KpRAj+`VKVl5`rmO#Q`cNr) zv{BWJ;%E)#+=O8ZF3|0_Bg|&vt=NYP~UFl96QwAG-v}GB~~ia~~Q&Xj8oA18l!@&=Ii{s>n*+d zTcGvKC8ZPGWG(<9??A-U7~?9Z4cppDaKPzDwjae=ngw4Ulvp6GK-8ghvCC070cQ;o zOxrJ~m*)gbsE?sp=6pprm++P|AF||bg0{8tdZ-WJJSzfy`4BpZXs$kVA2{T< zeUVZZ*#qMKiefGCb9BxjH@>~dQHM7$G!68QdIe>>yUsK`Mgd@`1C{_!;8e{8l7GcY z0SrrTjizB91BotnN>qmTY0LWydYhoZhvoGg__p*4sU!{aeFcfik$Pa^Q6lmSYN=w7 zvp$uAkzh~i%RgFq%i6X=b&Ea5CZ8o3Mj=&fTFP_S9iudR%~xI zINE;9XC2feeJEu{vREX<7P-`&S9qA@BAIPCpY8?@#D>HT8Hw`N1#UnPy9cH20ni2m zeA=&lVD>p$eB9&+^Wy&$g+e($%3im~Nrn*2A%!Dw<+gaEv~nMMK%Q>xYHTe?7%A+K zj}#UX1X2mF!{%nql@~Tj&?TYg;gZTHA5u8TE-|)nTrx)gVP5 zdJ7Ok44b{|M2dTriqT^GDU5&dZLId(CN)V8DXT9lnGZJ8YNAmS2rxset3Pm%PZmSy z(Lz~YRl8iF89W@uVrkC@Mda z(6NsO84Xo=uNnrcTUt(?aRz4wbxE3v7**cPM5`Zk<%TXpg( zCPK>m^ctBlqsO)j&++pY)toLoh?2(!r)+h|c=x9+u%t5-9YE}<5LCbh9~1sSmxL)< z=V(R7Yuo-kpctT7Ac~ZN3L>yYLOLV|X%LA4wzRY`AYCeo5+aI%Al=;z zB^Wf)T_Vy5NcVeQ=)U85e(!I+>-C@eUal=M^PTHD<2XJ?02Tl1sVm5o5JXqCnR60s zl<&AC4ru^xlWMDc*qf}sqmY24QVtE*s*5P5NmS!lEt3=+1|NJs+SPMXftES5d?V#t zHrv##9uQ6;QcT88ndIhI?rI_8WegGR6HF}js?v&iZdWdrO8J@FcY;%BnBPL2vCaU* zUaDd0{zuvtRSp*DsuJpc-#-JN*;Q7DM)hs+{;Cj{lF#+Whjb5qcI{A|Lpmo2GiTz=B@@gGoJXwA0+X2{KG<~Exe>$Z>)l=Vuq^{8pm8h@&g+h&Dp^7&(&gjC$f$#C+vItR8-%23 z@$HXUHq|uDcK0PnmKg$oF-~oq-v?EY4Mx-Sz z-tMFD?2--Q_o58qkclPa?>5UvRJE)m+fO4X(PgVCi`K;sVSI;engQ+on)98h8XSeX z5pn>aj6Ua2H>Iz@J2elVGf9n*sMnuJX(%0)L(j|*i$H}cb!b*~rqY>1yL z?q#^=D7ZH4!+wYD8&z!*$0e=s30TqP|N2p1LWapdwp{#B6_-GE5>FI8MUVR{X(gza zKWt|VK5u<9-tSB;-zj}LLOUJpOLxE0-Y^jye|tjzm_LgXuP-L^DvSF=SX7N)ss+~E zqK;Q<2mU|~ca<}Y8Xe7Q;P#s2cjoFXWwuw(9NWGv{cLBj%B=nMjw{)L93izg|mytw!l2tXk%94^H3_$z5_)Lp1r~ZB_%H_{7#C`3K&^)QCEu} ztsAcN!CgkUy1CbqMELkiv^*Bwm&7b)6;(@^nNPS6#Aly$I@3Y%ZyGICN?(#A{QaMP%OHVYu0_5HgsU9mhB?C)AW3#8c5 zd2HDhvPqmRK#K+Ts+LE5DfQwZvU2#h0kkO`_K|V?id5?peD|0VbMR&*uMLDMn)9^U zSwx-v)D-V=eTC-57%nsi%V$UkmaY*VYd79x6<6GQEqbn8%0~L0T~Z_g6^#O>H9_aC z%39N=z0X^!;(&)TUev&U{@yt=`=Xz#aMP4HONuSbJ73Z|Cw=ySdNrazSw*bGlX)yX zFr><#gvVwUoXsaErw?G_G7Js00q^ou$yWg$N1ld`^t>6#qruMtKeIw{Id&LqN8V%TK^wb;`l$ zlQP3q34d3T_wD2@hZdSAE(w*x;lYl{Of}{X!_J-?;O$5E4g>b`5v(3{%!f|6o`>st z6BP9Qvs&drn1>8qmIsx7h2&$2E|P>&JUAU;JyEg?XPrfoD%X@Y-qTwaAzP^CA5SqT zXUXs?uN;y;8&Bp6xWJi&SFKMPn@h|1UwdnjGO*Y^BAz7ms|Q`dD5rG<+?^R2hvZG- zl_N<7pL*X4Ym%k<$sAPtoW1YpTCvNp5uTh`c!?iH}ywOL4Bk zBB_v6T-=FDaLCB!eNWyYwU#!s=gVnpj=qUDHil#fSd0-39yxkXHtmD5?ZNy!4|zUS z8ZS0)EzwD3Pgzy9$r5_P+MOlbI}wlaRP9j!W7#n_yrRZULx934u>@A*DnVbf?Js6p zf|QXkBL2BC&l1K~IzHdnC};I2a4NQgI=iv24_us~88}siNq4MS+IO7oXUcP(<{nr* z8U?#U)9x_XGHMu4Bn#Cpu$WA6RoXtxAn>s8^4Vi8c*Li?U82VY7YSA?8P>VZWIfk8B#VsM($X+>s{VH-#@|u-Mn15&f zQP3-j)PjA1z0v@_7TzdHIL5Wu@~7Ls4epBH5ZklxR-p ze(E7m>w%ufqD~G`U{2+%KYcXhdW@hz^Me|4m@jpwy`;lnu z?$YvN(d(bMAAKqwkDQ((q7Whe@uvl+R*JC@dy2gm@Q)=Zab5QJ6rmvRAK#JAAK%eC z20pCTzfCpXqrvS@?xQAO$0(FGSY8o4NoM*XmpxlW;aAF5R=jY^%$X7Q&Z|L6j~8S3 z`X9dY6$0WCz^4fP3Hph^RC}X{-?n^kEK&HS&gAT4ggxh^XN%l#4%8KkSku`~~J!{ivX<=$wH` zYYx=(4T!G+_i#Z|gh0vWL$psoRnLG4!U%!U7XMLrsTiVBsu9~g6>41V%V-4ye(gqh zUB1w*CCdL0fQZEyD{& zfm30u(*PEcT#X@m1O96+^4|j&#=2)#FtE5CD|K`eFc&xm!BHfJ{|(cgZcqO1JqBgk zvUcN_09tco+(2d*lFI3>Olw4IxD?wAn?Y-H@D9TFc0=2nUhtC|L5G`(PFn}S%Mv!x zO~J0T1Mc0D9}o8CUPjLX{*TTrW&%tKkfRN!ubtciuB8&$Af1rgII;VO2QGuV8XCPa z{7iR?E`ST6{|5(19x6kD@;U|3fgIfbb%Mj(!Fv)Frvkrf827dwu^*{8bS=y}D^y9Xu>bxuxxx(3b?6<&TjLSb<2HP@H=!%sD!Y)XQ=9`& zt{%*=Vfo|Rr*|VBr{NK;Qn(MJlzN*D{PQYyA*rYQ)&)815p4ju7UWVrz|T;Gk9N`q zWPlmyL2_V%QVXu{YlTPOGWIypVEuMhkWU)asJS2@rE;dc0u5y{ZA{ZihS%V$>xNps zU*`#0CxugG!}IFS3WAeq&Q*4dgfx8ixPVYR4GBwn;(`|%l{3i5(L7-jIteuPLe`E= zz$x@^izAEH#%B4}FS)`%_{8_X_+wTo$X5VX6S(jx$S-@qzioA~n4rhaE>KDmE}~c=N53b-5W<2Y1mJ7iZrhX+^6<4Q^R> z)DH;38@(U-A$1C1O9#)+HYz0@BP{Jl;gE^?3riU=noREm&VirXh{8D__?j-nmS$b^Ael@L{|#|yjd3Lo_~|Ny*vu&Xg>`{vAK3R8 zL=OpP2896b!M8^lX{kFDG*t09$^<;Oc>5C~Y&}epEW32<{7bYT0U;`>y*S~S7&=x% zO2KW9IxYjWLXG{zeaIM272DV^9fdlXxnMM1^rIY|~wCGSI%gsIHosYMY)a%gqS` zCzZ_DBrfWBFh8E?D-h+1qd4$;uDj$YkNp`O>rmYE1HoolVF{#H!s0KX2h$z0fYi(! zrXUD#;Dp0A9ri`PxgONy<)AI?7yN;J>eF!Dda$%{j0j7@FMFPW7<1^nQh>z7 z+~X!!3KAlQKl5t1us{ri2H~PkU~%1()YNc+TwyidzX@PQ-lJ!4F(TJ2wikgo0E$ou z1ET)SKjUma_Wzn?KfGlJ!U#*w>Sq~A&nX0@$AH0zCb*u#u_4diyZ$=-7X7;*mH(b` zi}G=5KhWQTIY|K=q_EDr(75l<_}Vb`zuTcR;N6}|%WcYm3YNeb3(potNdvkF**>THt^7 z_aHhbjMO9a$U-upH$wk)jRgD!-tIL_UWZn|@7@hh zG$iHzL$GsC$^(j zSUtW6^TSX2isHxE+HAOidi*vW4v(KzMQG>?*M+5!%Ss-ah+2ZVGZ(tmzOyFpzIlJ= zgsE8Qy={bPt$!q>3nNX9RS(-cWzP9*V9f@agaPPUZztS(d$bV7;5GghbIs8oFHQGE zy7yh|T=DMfMklUNUx9De%jC7KZun~$$=pMe*lifmAtp7U;u?A=ZX3IKa!~aE0T>cq zD4Ml*U+H0#uGZ056u7S6uTbN{%4@;+wIYPyzBTS86O{Og5e_4c=NpqObAYPR2jK|= zIdw2awwr9{KIsat5Bu>*2!R3IeHN511p8^yhlmA>e4^p}_>{hc;xBWhiwa#>j7Hh2e`zvSRX;y#fKbE(HXo0oi82Bs z4>ulQ`R9D6ph^&)&a)qI9ZykB3&(llYx zoiviydayrUP6N9LTBVZB8n~LQK%I5ptn;I^ZT05bNQ@I#VUO`S&|Y9XN7TUYg(Sv$ zS8)G>sUzE{9NAFH)}TxdV1Y4aMF%?H;27t}PG2#Y^9{al%aMr!CLC@(7>-ug`Q18uA(;D3}_ z?StXnY#l;%L4xyBoP#3 zW)I7Vo8V|E)w@FQ4%CP$P5K)B7b$^5x3ru5#xTawyuT>>Ts9t{yqeVkw9nXB|BhP~ zSDk>jJmfLlEWfSu%x85P$>5tWLrt@%bd*483kcWA{$T^^jLrO~E-=wXNg}IqpA}WV zFfsO2SEs_q#tP$ORk!8{SiJ685-EQeJLP_rl@L<{RtoH3|qVbU8TtwKVx_W1L=lyk) z07Rv;YIg#5Mj8kRe-=MNi>TR$rxa|eEj!cRk`+vsJzds?ksqi^nHon05&@uGhgP2{cd^iett!#rkRhb9C#}8 z+Y|&S%{R0#HC)MRisX!$_inSoC}b^9t1}s9)kPk zzxb!&)msSI`_&9WCaeqzbZtQTga;vvEDh0rNCwEtPq%Dp>R1-WG>^YFt)Oo89XaXR zgbCvN57dTQl;GPh`@HT)tzA6Dtl^vk%R;zmZa|CuFjjTnQ=4(R&+R=a6&3K)K}nLL zMv5U4y@Gw^tP)$sEsjV?LpJBbiHEV{LO?buq>;Vg^$Q{vE#Ev=$;53o_xA$&>;5V| zj6ad|$LhGZRDSCA34h}6q@?B#3&&2wTCi;vrqvFc6#h@TCVstC;IAD>jGC{OgHh#< z4awpUbUMclQD$jG>3mgX`9b-Hs?3p8Uk|EUb{kv}@sFvOhX*`BY-y#t3P)+5Bo%Iy zc)nAPu=xu%O8BkU5fJdA z;gu#9B8J@GIWKQurw@D)tU4M%b+@yiD%D3y$NWwm`AHBCJNT2(HK#BaPM;R~m02^Wk zFc#sbTVj35+|3_4a$y5A7)q_E*)oQUrJnir-lUe#T(3`5eE(A_Y!xCodJC=R3RsSF zIMb5W6q>eFpjP}aFWnsGVh zt@Avi7VWym<*buD`pQ_yzAecvUQ{terPzF_Tx!L<2||&(N`IVm-X`cPPYzKkRe@p}nywJN?qDXzJSYTHebkST$FG_D$BxSb^! z2FW-@>$xA1jU|65>`i(>ZyoU16bj#i0=hYKKnHe~Y@ks@-KUfWYY^ZHHTs|+`QG}D zH7X60t1Hd)Eillx^*t|?U9>mFoX%c1eoi)HuCO4%Qj_jkG#bV+Lo>36UQ>Z0`VAO?%A48g%OAW3O`nG@C=^ysdVJEse1 zwhCj$#*TqF*_Ur7yHNB3N@d_FW(j(C6&IC=$!mQu4$zwXaDE7BnSoNj5ZbchVM1&0 zE}UMdvEcRFf||`CxptZQ!eI|rQ}+2gA;GxK_RssU9vKEYP(1Mfsf*Y8K@1mGhj-Qh zDK-8eQ+1+T0NeLd*f{`cBg_W5eUpesNt<8{HEZP(*CpO}6mHztoYMwBh^~D4T@Z6= zG;d^X5qsWM9@DqGEcEmZR8Egmom8J@C@3s(6Ja<5dxN&vqmufIrAHEl!j<|)p>v-H zB~aMh>#t`qF|m=iB75`hy;sZ7>B&62(r7BNj)Lv}q zf`5IS%}22mG*_%b$2=Q?{!oveJO-s0;CQC~1wKL&Wf<^tRs-&O&r;D6qz*L+!}TBk z)83$XefKKwxrHa1o2d;=MNKp1R1LQ?7tR^fyf^1D&C_Ehu{-@Hee>%~*ShgOx_MT3 zc0AeiVg6DcBDl9fxM&Vy@^Ur8zowrc#L8>fU^2eJ0Uic6lpR9pAFi{_TH#qli+|C> z-qF}3R5>%$VeBYqa69*LkKLoCF1H<@o^_uFck1sNAq*rnsWe6_T?dU9ce&232lvQp ztobu58<7``mcM+eaqyxsjIB^E0%U%Q7PQT&$5h~Jbos55?_|g5VFOn3q1l0ZKfd_( z`a2>9{wdjzI54m#bi*6-;+7t7>%s95C{u&|El)5jGLr2Zr!S$iF8Fmlm-L6v^w_qU zgM>ydeI)ND$Gq&=u2q3v#Bf18YlCqkcOS2bLDbgwgN>KAO*?O7W!yfR`-9adw%jqz znCI`D9$}X^v`V~d4>U`fW~R+5H)qPid(QiNPv_5>R&Tf`^z6{?tEQ&y7d9XK;x?5z z`|QKQa_KQki`xc?!yBg6Vl9Su;o>s;QTKr!;8aBR_ZUt<@YmG>Gvf)-#(!1aDz*g! ze%=nc4pBSAo(;hW;MG38S9OLwrcHS}o1dx~7~WVOMom*())!!0@tkbyyc*Z0)#Dz% zzv-X87C1IfMnrb{ZG`Kqo`XQoAbgs6%G;3eBRrzJJ`JasTexG=nc&-#u6STBGvwz% zJSjVCv-@rO+#N=rzPq&MTPBse?`i1oh+KbjL3f8taOhJQ+QCF?Gz#{>Jx1(HqZyVEQ@NO=c zc=(Dlt8cOvz8$cA)l<~hm_gdlMY>)1$k@8yh==gL2OtQT!mVE=J+;!|We;BVSZag~ z4E4?AAFi~_)@kEg+ZF113v7owuX%-!2Jr8WRu1pjmvSUta;Kp{>9~4WWXWQ1N!KoH zLUCrHF`Fs((BhAJT1bW;5hbV$#Pg^9)vkvLD% zO??kes0W`Yu-MQpFp{1Va?aD+7g9>JuS$jIJfkUHI}9WG))sdBz7e97GVo zC+ZL_e}Dm(+{6#4)ft4;GUth>*o7>KEa)-7hvRAg^1oS$W)GGPa@qI!{J3w_7&dF- zFtlu(@4&k`BhVOoYHi_|l>?Wzpw8N7JO0d;6+g;`0`_qY=V-gg)k`F*`R444{bW9j zWj9F$ZZlzz(UVry=TI7pjD8j-$146dUIp9u(DcWv6k03JuD0_(wHXemfIzK zO?%pB7GQ}K3prCm!@K9Dxeqt_>=b%5Ok^ATNLRye9Z3BM-o!9f1-{Q<3Z_CBbF>Vx zf&uJo8f?qqdaUR!7iTRAm5x3*!5oPe5L-B1)pt@|17{@n`l>BH zKq_*dXhDqpV~e2h@M*akCek2t!*y8h7(qW$p`ExAd4TAOK2)cUh2#)d_YVgyQc9Yl zjAS;P8n^3xBmc&t^Vf*Jv!nl^_nW>we(KqQ@hxL)$9Vd3BQ(KU%o$~NGnciAr;pc0 zfN7p4^1;WMmDIcRAUHHEMCNFcEGDkPehAMR-J!xeV;-?IsrlV}d}QIG;Ykt?|Himu%}9JDUj52C zCCNl~Sf3zWShZ`Vo^i=cmTlaFBGc+ty^fq$USGZxxJ#b#f7~UrgsY0Y`FFLLYaI>E zyK`4h{1kZm0Izfx0FQ={!4Lsc1;bcW9)mXB)VymWgkKk0TAeAyd|9tMOS~$u`Kkzc zXV~Nw)GNF>a~&DD^m>zE>9(f@-H+*c#&Z_?ET`1;UP!By0EZpQA3DL|+Ab-K)>iP< z<6=Sc@Q|r3gm}PZrqn4&C&iLVNQQmkK&_Kxz`_#y^`p;tmFmP*hRTdxzwGp;K5pJ4{9SU9EOKxd`6HJ+R*DS&2kp53TEl@qlf5s>5V z>ane+9S6&3UabbQKis&}kypGkUdBp&5q9xIlHHm}H&RB@Uax4pRvIlL)Km^7S01fUQ-oiuNmKKa@X2G#AZw_XGe;LE~xfa)iSeZdp=$>r)k2QRc+R0Wt zXE@R!_EfeYl1Pd3!TY(ba^Ex@lYF_Y_hQd;=abBQlWH1G z|F}-EfeGD{XfJk!dWs{;u(@fU(wXf8mrwN}vVG94BO%AAxoRLRi62JI?bk(XWfC%E z)!V7y|Ge4|A7=}*Cfu+g-yiq-mPM%H^(omX!#Hi6X1VJ+Tkz>{2f83F({Z9FzMDrC zE)+;k;V~>|p@>FRL2ve+PAC*q{_*LCr2WS%&FA1TR7QAyLXm~YmmD-@S_0D6*5Lp4 z2CLlrH}?`op|AgyCo$0RCz|(ohPF=$If`_<=D&?(pt~ zsXFA=(G(M;BWQ{#n({~D?-`8TT_C527x1FN z{BY&(7ZS)NzrPBtB`<7xw2(CeSYRkOosD}}_3wYXvoTRc{|c}Tx5+96h#d+sM%8+# zUjk5A_daGJ{BWYaoHthy%H3hDz(jS2@ZDG-TvAuo!(3!kpCVhORou!mITdz#45o*x za*{W3`zR{@>+OFBGo`3wq%v%IiM$nhHUr>HG6PJyfhQU$gm-C;lD;nDiElS zS*ZIYx(;>`OBfi#6P{%5IU;@Vo^f>Ke(V9SUu#Dowg)2KXTcJ`LB{O9_jUIe|DTv% zIn(|h-=(Mjr;*41*Z0VbP6?h0!x^yBpcmOwtuVgV%8;BG!>|cNfFOu|2llifw`uc- z-_Pcr7x~X*b}w0)NVFE2;Lwx9WDFjh-(N-gcL)2wk3`W8IOHNYUPZFm-a^kQWage- zA|aBIfPQ^1@An@gi03H6mBV5hO>=W0-hM4V-UME=PJmyb;5$p$odB!8wH;0$1b= z6zw_4iGo5MVUabL21^NdR!@sy=*L^W1i>|z-67|S3%4G)QRsF`+B@Hx74pWLm6bIneB}`+$^|&7cVPUWL_$5HtT5fg z2Tr}D7O?D<>N9cl@V$V|6PAgi!{&WG9B%?+Zyv*%<4F62V6B%F-c1}Z1q3*)HdE|* zPqxh8(qZ^4!a@R{EKd~2+c>0>p~F}4&?1VVD{&}Hh`W6zLq)SftcAI8H~ z={S=WN&PZnmzN1^uZUFLuWj08>m6$TULO99s+2|K;6C|Y>$Ss;2)nvz*tY#tL8^WI z*QR(yjAvD3p%wMFzjirtHAKh*ILUgZkSPzlS5U{B`uf0*RK+^Wozt_58XtXk zX?;B^mV{oJ4yAk3oi%Y7v#o6MyG9Sc<%{xjUWJXqyXWU|n>GfQ&1B-fKZ-O+n=_F4 zd#KoSIq=~>5Li;G+1x`^U&m9vj%>blKQCG@GP+K}v6Y)tF!1H8Oavzt`Qg%`eGMB9 z+yXz9a_LOM{HIJDHrpyUA3pRbIR9dhzU;P}l*bk=&H7GyrekbJ;iIQ3bh~G|hlaeq z@=7qWif0ORjt8fJ*?&x~RyFa6N;RFp!3vG&zD}=8voRNq6_1fwbxnM6kPcfG9-4`Z zZD2pvFTJd*T>f5VUO+2kE|F=27B~l|b?GO!()9=ITaqg`l)UDp4~BK5{Jqk;*&fb} zb8;e~?vFR@{%gonH2X&8z!#pd-z3#(*9)!dCUF}Kt?Rm#i#@a{R$9j>9Rki+>uJVq zqzz}|$dAom=K`^j%Uv&5<}&h=EamLV3=$$0YL)YDV1ayQ;A z)1U2MS(^?|$Z}rd&J}pSOg6ao)q8iEv|lM~=#fWw{^Z{)y$|)NQ27HbZ7)wt|VoRr=RlU*)?&P;;tNbsiLe*eIwatFQ^QT{=Q35bwz&;;w1v_J=BiQ-m(WMcMgkjqc7mF5RZZ-8f36P2%EPWxqUATWI+muhgC zjEI`AZDCDc^YY?lJ<3}**ME*1`|9bhyrY+ot;mceyd7A&GyG6s9;Z}SER#`ueLiBH z>yG;hTW-R*rC|0?y!QMm!qho_WlB^y z@jZNa?~fC!s`+}H9%}4gJ8Pz9-Xm(RU0G~1#jueh+FLpQ^>$2|2;seOtbbSWO$@ryB<8-<(>jR63O)38O!4Fm|CB?=5 z0BMWTypX>KVt3ZhEdroLa^}>?m!nUlRlM%wD(w~cZI`OW5i80ri6I<=%U#p9oL7!z_eubLPg-jA^vv0-<97PRrwyI&>hrmW)-Any220i-U0|Ns zUbp;vc)OH!t(U&xsKXh_6l=0mxdGPJD-GJ`0+XK!s?Ak9-@4NFNT|kw)H{`NDd2-+ zLXW$<(HVa=HG+PJSv42i0GwmL;2aA+u1mjMVq@S`V(DYlC?{;1r#ZCQpruP=v6yU$ z9-|PnCy+6b=YKnUCP_q`SDxtfwCjk!BIA3H$6W{c-}~dssoaHA?WCTr(qv}|Css}6 z&Ko!iT>Q1Jro5sY?P`N7P<`)j1!zT&BvNKj*SP^?{=}wFkcAO!%JqgceC6O7n{rsxs>lV z%p|7qRoBh8hu&*Dxh*cLD$+5w_uT4`4gGa_#kf=1-b;cG1LyCs*Daig8}f*F@*F&* z$WYLjVBJhvp_;hyWa{)1Xg<1;=Qh;)idvFBN}V(-LE{?UM0G(fDuXsDuTy;=o))*p zOk2yaT>Md8sy}SRI+UZrZ{6rCu-G;17AVM2q^l+Qwg4AFLK-rCWg|1;?J|G$j87)< z<;9ncVeP!BT0KM8{A7mGW$4^HEcz_H#iq|6JD_)SE$P?%+~d|tvr(f7Jj)%AGLMoG zKHa=I1HqxoSRyNpUD7OueQ}Bfx<;ny?ZnEMNag1(yB%*=gAY( zLYE|8eYIodDyU&=8t4j79^bTQ}M+yq$1(MH1uEUCpGOGLZ@an@yNj&$jzxVxQ z+VmBL#ilwqugsXi#%$HiV|n_%fcDL;-U_V@admhS!j;=c>I);p4~2vt zX{1V1Q&h>Yuo>+DM5v-xNCB5btn8~u>|*N=-7}@Fyzep|cTnaiR+u>ezmwt4-&~h% zZs536&rC=AH(DKi$Mn!jmH4u9$$kYHbkKa14m2NP)p)C(Hmvbbxmr=Cw7Pl>nQUE< zx^1fh7L5hS%9E~fC5_E3CI`~NN`BR`ZmSGGw972(e`g26LL0N=}`59a=Yv)daxfx zWC=%+G!2(BKYQiwVY2ypU=UD^tfv$WPn}J)oz?HPkLMsK z$>9=Lji?Q)zdriX+B;US$OPhxODT~sVL8UDYrl}S1JXwZyEZ32V|6Q3uvuQUuR2kA>gUCJ?>>85S+3bYp87J8HQwZaefX0TbGX<>GQZVL zN`=c4()%N)jcC1N+40juY&V=Qw=P0#Bcivy`iI^Mmk9m$^`_4$9!rBIOHLm9$Nfvb zza4gNF@W0zd!2rRrb=>CC*FCOujx0LHRsui=7ifUP13oNBb=d+b@Sd^ee^zigNvUv zSYj$p=Ii+-XOUf7gHB9YCN*XBYFrloPX8(IWFo!onl#m@tB-^(ojYiUk+EUM|Iu9wz#x))AG-O#Ycu-d4zMZhF ztUQ&_YSDFQ`BKo^yAg^K0=q{tkKK)!lRPzNKss%A<(}K=N!Kea{3pU;SMh3(a_}-b zCk`dkbtWp(YZqLtIxOP({CB3;g2;6M8jYyP4jjLQS1)#o@)~SS!*S%kC~KUWot>kw zQ3%)XHEEPjR8u7oG`v_ERWFCJ{w(_Fo&1cOx_|+Hrx4Ll9gN%VZs{VvX;bpPuh+~^ z-%v>0sZ90b9=WC?_*MIB{H9Ir%_gz~H1D4pR&FOUyUeOPrCecSrgE!X(jg#4jK%skoKE=#WhGRFFHP9c)`!2;&#rtEcC!& zEJx!0@ov=*^RFW-XCHMeMCUDqebueRv&>xU5v3wIkDs_e-}vJW<9uQ9GN>=PR3^Gb zg;Esi9@93ESA4LTxM|GMf5z3q%uVFtAkPWF8Cr%}YH_%4H6|>#DCY9KHj$7K(>cC; ziIaA=G?)syr`~mw2X0X>x>}l6W1ivz&SXHz5z}e%qABrY`l%B=aG_Z3J4kNt!}RzV zy%mU9%7=&03<#YO~PEZg+w1QtsSYUU11&F*Y4lD>))v} zuQ6=+DY5p-gm-1-OL7uo#+J;6oL9zul4t)uo{?qn=-E;!K0Z@{)1BIYMnuOY;O{zgj-&w3NpCgjH@q6H&%kq5a^3yn%}hCsA>Y=@ z&y10C2B`7v>(EST3Tf^ir9QkzRQ2_D2wc`=y1URiycoE$P6;2y^`ya8ns*Bh-W2%? zS7!JcHm^TW7G1Nac-rnF>2xclo$9AR25-`tB*uS6seOj^Efh!VvXl%i!wkgCRU|%d zYR2N_)7fAPDIrb%s_9sXsY_FhOE0bPMo1JOPUU1yoh_l{@i{XKb*3hj8w@WN%VGpC z-PY5*u&gQeIXlooRNz>xQdz^0q61p00{P}J#Oj*uuT$;XdnYsm^c4{ z221XB|5GeeMIiM;`)@9)*pT*nu5%Sf2|X_3EHAgYu}xBJo8Z1Vw#yWmyu|h#)T2bZ6m%|44<5(VvrSnMsMW zH9g~MQ-QWJ>^fA)W(ApUE^~T_^i*yixDG*M3Do~@W82fPxl*D2t(`-IRSX61o)iXi zJn@eO0{vw{91OPguzxgmPgKDIhlCM8aCHD(+hiizS%vH^!9dlM_~*Cy|GiT{NS?hg zv!K=k8S|D2Im+NYB_ye*zUH|2`=5J0huV=#4?758(LEW{#q*$z3&nQ*wxa|o zfVg&=-60GOBXWz8J{qByLH)zIm(Pk``~O%p!3_V;2B|=;&%Z$oHszo;FagPG!9MaE zA4on@-Z-Y2XZiy9RJ8I;|K4Mgl37UnUp6r#c9kSl-LSSyQ+zLsC9tT#^UMJD1=m_7KiPrdMWzctlzmD3>{o5ldP~HX` z_8kSGOI)6zf(nLW05TEN;0@>mzi&oNhx*YYE`mTdgxT~BbM~weK-3vMtUV_L!IT}6DH6V4KbCD9+(6!YH^Oerx>iUE2~n2!7?6*OJy<;D;8f z_+kNw;1kj>Qg6-ye#G4Av@g-ufb1U#U~k;x|oeL3oPEE z!rFgu9q?Q;@ZqqVCKC|GR^L1(G`f>upDndEbXh5^M%ar@lIqO>Oy+^d1YBzNXZ0W+ zF$9auF|qp$pW%aQ^>Ov~Y?GTcH5HsoZ%CtQc=zll| zjWpyApd&o%EXgY*rlxuqf`DDawl&DJha%4roRH*mM{#0Q5%Cc9qjcpyc={`*n**7+ zD)Q*gQ731p<@5%sB*3FS@bgS>MQd5ba;J92OQlK|p#ptsVgInUC)N=&kv3I_3qYq; zWWYL4`wQ&BgmGS2$rM`qpFTw2NEfp-81@XeNR4PzwzTvY6+L`5j@(>Y<%46qV*jUv ztEWFp;tyrTn{qvDefU_>KW69y^bN(6w~(H`;(rmDlb4sfA=Fz3$`Pp_zUHo+tPYZGJ2nf21F|l=YSEixP1mYn_)jg z-I(!Wkh(HMKY2`r!xY(J83Xd=#X69I8Tjb==W)&uFv2qfFyD;~RZf+g*sqLS2VIom zEmybMU(8;E(5`f0U34`R_^Ec=w+iCq!fX1g0%?;{YMo1$F|EEi*J=k>M_KG|mhf6+JQusXsTF1t0wV zi>@%MtkPB>6>=0)i;lJ+YoZJ?Ren=Zf~qVLvRBpcL9KE zHeE=}_PdytpBIvf@DHn2w`)gv@OIOC^A+cE(w|gu3bjEG0t18NpK*s=%8Y_LM)L5lTF;#fCDLhwDf=^F+UTKS;e!Yb-ojP zEKx%DM`c1U=z6)%s+x5#zd@v`6Z3#<$^%bC$$I-MEKbaNAX6@seFfA+MdNOOYb#cE ziur*)_3>YsT-|@!VBb@P8PGkE!fV(@tW3m2qT=A9etnCz3LG#qFpqF-d;P@y{c<>R z18#DPt5qYp_Z9gzyvl=DmDow|vdW}0l$MXbApSwB zYhHdoK0<9nNJ!)rO$Z(rr(wuBxra2}!|KW|- z{imyI%x5?HRKos_AL$wjW6x;b`h_CV!@G3N9?ORMRvl-SP9SXksvodt`DQoH>f<+d z=V)U|vSoA{E2cmYH=5Y;eZwl{s8$f?1#~O1-#i(VekdgN27(C6CtgA*N|Y4DZa#=0 z+MO&u)d)6wmic+=dme|gM9i0r$S;BH=7eo9aU2i+i+Kh|yj#aAw;{-cGrVGyCt6HP z%7>^mb>Dy`thmLNx&wzKX*@Xyo*tjmE;t^|*G_rl7|95-yp3@jvwS8EpYV}*GRk(d zXtFbV*rnFyA%CfT%-^4|2fYCxHZm}a5O?d?IuzW~I)hIjN*1L$mAtqLNlOdnJguf` z{&(O8_LzFuzg{U^)2y@Ov>Q-nViI0=9=1nZ*0yEv3WS|TpKL$)C zK?Bef20pzk!%nI&ePdyNGUa}By2l=gw+ma$JteOZ7e+-AczJ2)C^l0C-<6%}a~gmWvm5wv+5j$7`*FETU1@vP-#1;r z_hHafk@jpKk;Pe%&wT}*TpHMP*v)a{O%c44C8luo)w_4)nkZ`UBEcu8*!{mH&|}(B zit+mhKAImYrRF>L$rxl`D>**tE_y>Mgt4y-X1Ivcr=fT6-YNg2*7hqH z>}yVb=6RG3%1i6*&50o`jF$>wz1{<|mF<(9MB^dMR?sD4r8pVu&Oy96)FJN46G_`( z@%hrWmA=2WO|g`g(%v-cFTf2h#*aSwN^&%gES_fjS3Sq9=RWf8zgBH+-8nE8R#WZC z4(-a)J*7^IIu116qoP}YYH>}rpA_dbJdHeLi!3fOoNFW)FgM*p?u@h8j$?)b^5=iS zM(z%T|5|`@p)*F34CS+J-Nt-28?AZa05r(%-R+^>o|lTkW}v5D)&^-6^mltI3-}`1 zz&a4cs#50P|A7TtaE-%@)={EIE$^~wb^oTR%KNKkKVodc1yk#94?zJ>5q6@WO<{Lv z(9M%qec6^~_m%&V7X(Qnu}7VUZzze`TA!e#@*e)Qz^|8t)yBHz|17h4rY$C^OmX?f z@q^5-{VwF)P!grsUw?9N>#NWUmA+seGufAO<4(Vp-nm!@hv&&#{VLhD<5@5#QtJTV zDjpyZW|iI~KX>mT;g&f@P3mgkz!jhGrK2BAuo6DeU0zcs8k?to?sEDih5Oyd*s?() zNg?!{DG5nQHHDZrP`yon7w|URqy0fMr(Yu*q&u5uO4e>PYVqW4=iy2_5xh@%xEp*z z?G#rai-o&sj06+%sb@FI&-5!h`%{BcOkogRAPS1q4tRv(;lDc$v@Fhf`k>6c4US|M(d}8&LDZH{98^*Uz+<* zP=v%R=x^#E2OEC#QK*LjE;6tL)#N06v-3;{%X+UHi9%EF9omaRVGw`&_H8){QvkT2 zrlH2}f}2HAqh!k+K znF4XK11_7NR*bp>&eQ2uXXfGjZd(TEO&S7fl9V2#vGLR{xcixOd$nR$9m)Zoew&+x zX?ayu;zH}AFA3lR+z!s)hI|qNkZ8Do%K*AOQJ`~Z!0ZKAlHK- z515&;7y?0NQW&fRHcxxX+JwErK@-aHWM zz3m?#m2{G{p(3P3_BKS>Q<+`rdcEZ=6ctY>7rNSN3AaqVphxyG_Fp4bZ+F_fK zz=N>@)|i)gQxCl41Yla30|8iAix}LRlu0OpA;1sA{;-B~8z3QHiaw7H=kSGxf9+rY zD-7h;3P)UiJxC)=NMwg@LCGp*cbFLKg|vt}XHPTcQKTm>Z%uBL0k@qwAd!zCXMp6x z1E5b|>!9d=d4!FHM7HI3`}e72^RI`{blTTh4jdRkdSRNL;q4_Dh{VI^a~1H&7O-;K zNNi!y@I)e79Bk0GXHYU5WZ%ZXxbgiBEv*3@hQBVL864~*4IQ)SLs&oeLc@K7iNI#5 zE$TH@&QP?LGX*yF0ukbF$YJAGk69#PH6-_^Np=howzBZGyxP8F&o5M@GwDuQ$J!TX z9c>o6oOiUN0qiselgeNK8ZR zh-tq;jn;Tpov?k|s8d$OP^3-T>guX@03>+-JdKrzTf8?hMGCg7(WC9uJL8D z;{1m11i4Jg>?@r0=t76Qj=Rtz^6k2{3JxMDHcj|6F{7i4wa^P3M4v&>hoNOg)}%}z`|INs^9gB`Ow)a|8}^=zC(vPd|m7{*j^-W zC)##bP$Ar;ek~`ai@$`jZ42q^b?dz0-ZabdBKluqhaW^4+(#h^!;S5Fius1XyQVs> z+-4cf>rMmi;CVE+8|z4a2Pu~yBduE?#-V@mM^axMNrrKlFtP|OM8n#;@t34-icQaz z0~tQW#i9Hdtsq^_BJB2R*O~`SFCPcEdm2Bt;~v_qs^EmDV~p~-WBMSDsoV>6BcpH) zv;#QWUr|5b;A_Nw_+mYOxM~qRgdQ(0IMvhm7XkioqO&t+x5{|HZqdu%2xb3RQZ3;d zrR&tC)k69P?fW*nLEl8I4`{Z5wl31Sr(y~TQ5uS@vBTO@Qr_zx;!OpaqXL2%Vxyy@ z!fzpEA#a@2Jqh~j*QECA{GE3~)eK~9DnH;(TlW$DNnh8E1ncvDb$j9a23ey?Pj-Gy zbB1AJ5=fOcx`zuFMA|28x`wieD$b14e<2ScpGC0Q5`^0Uoef~95{#AHQqvev6%GE` zkqQf7bKVTL=A!|oc)Vb}u%4%e_6c9?1u9%&X=+GIt?$mh!h^IKjo3F6Ga|nZ zeOQOt+=i$Pk%`fY&d%lDtjis_0xW^F1H&2|2{&Pn=Zib`1&?!BUZDS6v(GFT z74LD-B=-7FpH6PgNOHgUzu-cBRn*5W8R0IWM6EPaiH)Z)CkBOIScT?&ZsbUmaf*&0v zT%SQnKB?!#+Cqx4-n^_2kpqDL zFJ!ldTL*)YaX{c538Y6*PZzjOiRAyWovAQo+{@!5&r- zP?KmBbt>t7=iaO#f}5?P`*ky2J?XYtjZAE;)5;FZcoj1Wrus^Vh@^iV4x_XthJt)! zAb^dS$3*P`j$_#Z85B_?6%LUC7ej0juftj4Z&Jo@G`fY+1%vbZ&xKo-<{S76!7lLE z7D96W?rfj#A#);k4@h1(3kO0}TOn6m+^R5e&n^3BkKQRTrftl=+sKdomKs5lciPYC zBz5s33F}NUm_kiWQwOq`$s_J%5OkRAEh!>Rf-96Q?Jn=(hv72wt(ue6kH;A+2p3mM zv~#@0-evRz(2qFXlr@EiSc@&kx!CY(bc4mueb1S#!Gg%44JSGd$uQGG@JZkfu(B>| zx5Yh_{@gyntBXl^2q;aV2#BFht3{mWvsW^V;bDz?x$DXM+r%$q?kOAX@0PRIkX427 zTTj?Q2DbY91-WxA?2<2m9p~TQ!NnsM1x?MHd`bE^+z|N*=CAn`+@*P0{O-x^dCf&B zN2@8BxD&2=R#8|Jo6Ik)8}(A0W=)aU-#Ew8l7N7pcFAHv4m;*&7Me=ivpNQAw|9$G z7X%)-b-TcS!)a!#&*H80OfibQ+V2Y@5>;d8OraEu{8)LNC!4ejwOKuxHDFuxdvdr| zAl;#kLakfRqij3Ro@xfky#|&gnKW^C8OhPOP#64D&4nVPwKvq1yE3c%Qi~yTZO#j{ z6O@u{hu-O%KbTgxkH4UhUd2{^Eet!=wzhtC^o@9YGQ%Rh>A?k`){}F4KTuzI$$bkk z9-YB?@>cEMPwc%WNtya}*F081CaP>fBBC)b*1JH?)ALhE(u~X9jeV=@0a3$jDV1E_ zDu{k5Jg$KJ>omeS50MHnY{Eq3*k+;>_EQmoJ4))ni%yqIn-uY*kZ)Ysn0Y zO6l(zt`F(7M3P%zLlw=VZuHzT8uJHoNVKG<8nM3Fnhmv;tZNx-0#i|J#5zj|yL<11lWM@g*H=1b(bMpeTNAU6E+K2)fDgo- z^WZrZczVm@b7Eh%?x9X>%Y?at5)5|cRkwgS&f4%DDcoIB=PAL3H&wj?&|o-%&&|#l)5$y%)h9VeRrFo@h4VJ zhmnIMX5)v+Gf`*j7v1Ob&p6lomxjLSc zHhf7B&bh~yU>;LS4~t(^Q88A%24hhLpicteH3hdzngINWavMu*Gm5&4=P!d{U|PQm zbaHMmgfKY4s?pW|XxEgug+6xG5cI=iRCjPD)?%_b%Fe7|K{J)e@$8rl3RH347bPQR&N!pQvE(V z-Mr^oGnJo0$_ZXdZC)>>xi+VLtNh@%e~Vx%=b_%k)Rd2UHqr6L>_Z3;eThc^RddFpn*_4Pt!8?o_6B6(`4wh~drE^z&_Fi|{Kq z)Yrx+n_GZ~Jt%>KMo zUC<&?y+j`!wIV)xe>9_H%{SQVXUi9HWvVBuRwVATG8KiznmQXT8YRa%V35qX(9b=WpL!6K&{ucuch)5%Qr`#lH!;@ zDizVfdY2q1)s_#IGQ*X_dw2pPPdQS!b`h*qWV|&M*7k3wU(xS%thH+?Z?XUF!84w9M-W)tgtgqW7pC|J7j=53j zYE8WDq236+exYxhGtUBar<$X&U3B1v8aZPEqnZs4wx27la81fMr#PUL&7~&yg^AI2 zy7-1wl4cy_dn6!)M*Iay&`@E(_a z(fL)2(FaH6zTx^DCsd9q+Q%_-y^>}>x^`Y&(n)4?X*@nsBy6%K*ys(n;eEG^RBRDW z!?2g2?_yaQ6I687?ew`FpX+A7R^NQq+=m-}-ZIUggb%Q8@*NJD;S3Ad9iCQ*8@q44 zNB>cBRb5MBP|p2(o{Po`MI?J%yUAG->ENB-ufEFcNy#3b{9$e>V?=6tH>|p!bJwy6 zdEdkDefzhoNP9Dl(buKemAoH+*)A}*h~Kbnm>Sm>#n0T=c5rXf?w3ecLs};sRsm@k zed6vaY$a(p_to96PL&W{f#$63^%;}7*``?a%hB{C5IuCDLOx(6SLA}#H!}RQ4w@w< zV-{how$>iYd_UG{lys^gz$;h6lk8^MuR~1f{v`)@)46L3Ir&!pmKSyeov=Q3SUb- za=&WtWXTYy@3|c?8b_bcY8-+YucM5r_p3~=5;ti&fk#orZzCd>(??~*I&W=7oj&M0 z_VPN$8mO_WGP12)f9$!9csqx@AzwJJJX(`kZpZFM8agdAlob=QG=qzG^;WWHQ%V&J z6Z?6p)B0JUpNfTMucM%@IBT;_^x>R~Ie!s;2qiq9oX3y8XPs=}8Od61uvEehZ*E%_bHt3qanOyUk6`tB?g~>J)r?^+qzT_yn5NnFRVc3Khu?Qh z>Eg-!hAC=`mV@60<1yP{-S|Ucx5Q`YvSh)9ILO+0F2l>(u&fQlhgA1cN#)>V!iXw#V3)sJ8ry?YKdR+ z-WL1Gyi?ZA;ht^glvsUZN2mSO(T}R_1~czM^#j(6$HFDUj~SdX>U9*eJd{G*BUwLG zkax6{AUt*S?)J70Q$DH~?mSMDg;0CZyO(p^l1u3>hfpqAGGCVzu$$;wR(ZBDI3Rle z#IpvO(mu&X(VuaOus=l{$F){pN1QjZmw%AC5-nNje97G?JZ#y`#C+sTfWr7ckB^nz ztB1cjRlay2WBlWLQud74mhNE3DSlcM@fLbuk&J9A)4~tvB zWqcr%leeccp!^&tciIu!&EG1xN&t4y3eP$SzU?ZR*o!97m;_OL< zWefVJ#c+x=-1pxiORJ(*oz3_UZU+t=Sk#`Y;N5{qC`L4tl4uV5`ZJs1DC3cVr|GIf z*3?j#&1BU_pg`0#7~%_!nPoj9&wS9D(NIV$7&=Ve!eheAN*ex%W^AQvl&-tc2+W>=EIMrKk!bJ?yuqKbL) zahbV_TZXRu_D7O;5T6d%yD3LWDy9D&&c3~O%iZi&<|9VE1kNt3+tQk7+qC+U%3_O^ z?xLqtSfk7h$>h7XHJ1bu9*R&UvDjXdvppB-o2b-hzUxqXz3qb|wP-TIIgZ|oot?F( z;=X(LU}CM~^YNo45;qPX=_-p}S@AbgBswojzmOWvRl9vV)&|S;?f|ArG%}I_iU~70 zA`>rXX=jF-n86}yo14PN#RLnnyL2C03u=(9vKtK0GqPprxV_;2By(&W4G6IQIQm?y zMbkSOJVF3)_y{bg1E@yn>ro#_yKTP`fXz|Q^Xy2ARgVBsA!Qi%LV&uEYGXgBH&5gH z^tQjWHB-dx8a%Y#-^8S6u=E^}uLazePQ_`**^&uL4h+U)Ijgb8Z9^!{i_Nds6ooXm4;TpXsl;H%yk z*fNi%L=XhxC8XghF|5M&_SAf1us-J=12-e#`LUyG)YV&&B~CksntCZ(=2W_y@9JaZ z3mrsVl?M%ZFLAjkf8so;_L`%fp;Y}IE;)bQ)#x;vQ;=|M*~+naU%f%{kevHA`#Ya# zyW4*{)*0KUIxR^O`eaqXhcx}s$lL3YWu?%Z?nF2p6I-R#+Hzr*gaK+vo45-iE?+d`$9gX z+#~{i9$us_Hc>#S1Uue=SLzYxYp{OmZ!dhGuYCISX*WgKAb$#PKO9DTo%*z!Kap^u z7Gl^6VnYeKvhJ&5;U=y$cW4Y>E-eZP5(yRXw6m+(DTlt^=8IJ?&s=5S7V;)a$%Oa2 z2UMhz!*A`oE$_LMs>hs7x!KhF2&P!lh{z+kJn~`fFedlLf59hv#+zP#9pWH1={WJ& zt}UA$f2wqFftFopCjIqFJ%7%I5z8(v>sW$$-edem|Hb1u$w9*1#NYkKiF!{Y zD(XlJO=Z3mRff{>xIZP^JY% z{Ix}%j2)>rJwSM$CfO8V$gJ~H$Ds`Cy4qI0z$Lr-^WKNRIcSDP&}b$MEB4f1tq!9V zu-3o<^N|QZgQb^8j>+3`)7ef0bbSQ!AiyOoMyso}Ia()2rv22Zju^u{Z?Ma_VA zhVM{FJrJpZD$VR3zg{SO}5){lvq_5T=&OUI)rfI%-YAwFr&Wk)n@Rya@rcJ%c^W~15%*;g3`JvAg$t^fwz_|& zV;Dgu*OjwjDJMl5_`506sUcrWZTS-4duBO`)xTrvv8LUP^;Fb{9G6J}kIaIKx+2fy z=ftUU-^a+n$A8#q1%l^v{L%R#GA^+#xL6nlQsVm_MP+0|Gg;Kk@%UlXTT`k6>+>=I zi>wa-5(VSM0}AQTm+o?>$DB%(45-0{qv2Or>$3gx2tbn+(zV*N?w2jW^@Ru!$M94MH>5fHD2%g?n-P()TLXMjawf} zxu<4?J{LSi+;4T|IY%N;;Ffbg9~P@hje0B!epTYbB~iENxbIiZbf%tN+|4hM64dlk ziDPn}uQ9-gVV~T2g>({4P3+5UEWm>BnzcR$G-dD1osqYLVZad-Eg{T7^r`mMV*hxl zzT$RKpss%v3nkQF<@>{dk0~U4he^VSm&w{<2XAEP5!v~Sj>iCu{fxSE-f>I|j>78z zXQkm8x1lI_gjZPrA}$T6h`b%!i1u(M8yFwo&y@vU+Bn(3;9txJbVrAQF`eEAq9X9VLz%&pv#&et@ z_mMdmbSFZRha}*cjv!341Q5wf$l~IP;cj-ZYXDX|R!)!|eyIJysp0>^ zWGbTm3WM2OTU$FLgc(-_+4Vd?yeQlD@I|K-U^RR~4lAs=ZIE2**eu6j4z4a~?^ogP z0Qe4HF;<8?{%_pa)XWU9zIh5zHJvJF^K8gQC^{nSTS62PMgcim0of&8q%#J<7Jfp^ zknLLrK#YM6!TxVdKm)9CZ0H^{AQ%G~6l|_3K+W0;?C(NSwvCrie-E+{pISlzpAbmt zh}>|XK#%yJtL+aqemuw5cMJI`Crh%dha}K?!1&@ka;wI^mI3E1FQ)!B01I<~5o_^G zD6e^O`gho?S3?~bB_}wlr&1#v0r*}7|JVefos5jIgb}ov`#(_J%XtWEDyU`Hbub2D zh(Kd*gw}ahhBg+z|@z0C!>nc=>?2N=liD_!Z;@v$Q!ngESP$u@fy#@9?lKv;JBSa284{+qm2nd8=C5*=Y&DZtzEyo{p z`Tcty@|Ivhl(B#)#!M7KIr7b$>_}3 z??CYdOUx|-N6}I337b(kP^L?=8Y0Ej5!;zchY4YlgW>6w&D9gb55?Cf@N2n&W+g?P z9Gz(G;su0^igl6Ob-=De{o&k)!69Db%9Vf>y%vCS)1cVHLWA|L*JD-7}*8vV{A9a$7(sg+*6R zB4gbnX0FLskGA#zXF!X~YcbaH!x-954N$a}tt~|2c}f7khMTjb+oQ6*7g?4;h)EJ2 z7JVDh29GL^E}(GFL)cHjAQ10b5xjEc?PynSa%2)cM&lwdk?M#^Cruq6+iaEXR#sO2 z4itG0W=!xz#Ch|Il`Z@Y>(<8enRj8|p?q~JT>>GkWI=y$aIhfuXR0S$g8752zq-PQ zm=2$}_0)RapbD&lM@1c7NIUA^4}LF>3Msf;qea*4K1!R{#l%A;_Cs5rn8JW)(zA5n zOtB~V;5s{UbBsK^?eW7BX}SbX>{_XfACuVB<|f?JftLJlT+R%odRQV zEHb%OzDMyHt2qj2PJH?1jk4@bdhk28w=egGCy@q;f00FXKz>Puv*s$I8`RNp-y9b> zMdWU~{`7J`jA1uq+6GSK!k$JoKUrprk|0o0ThQToEa*~;h}?S>b@ia6q_?phaH3)U z*>$~0ZUK+Vw44G*?Na)lAs{HN@=hoYsL0qL^#IV|ndc{aaIm~+s&w3T|GDY*H6Y9Z zXL)fvC3{EBgKc-{S=BF1SIKA!AI)Uh1Xwg~?B-7UY3u2xQGNU*cO`WJpC)EsP>OP)YM}2*YFc;}(jZ zqgm{(c74*&n?9k-T^}%(yT1g^^}cY7(gCE=KxxrnMRYZkSKaBuRqp$W7xyu3UKLC> zJAv{L_=oavXCB4^n`9h_vPcDZm?W}Bguu0;vHdBLo`)R2E3$>LheQHd^hbk^b(5zn zFBry|Z#$f@J3hG<-sfegwY7gmY63=ZIh>o{ zQqv`BB^p(&7K(b{Ud#btzGDNZ-Z^!`MfqYrRntHy8V3U5j8wsXW2?Cx?222S@OAy( zzIg#L^8v8GqxJ?19AWLIuo+=9ge0FrFgbI6;BtY( z1|0k0s7iVs!_oHT>3t-=p+%cgXEFQKfpUX(;gZoWpu*n(s+I@ylauiKpkBgY{wfc+ zfkXvip`jlTJNn3Re-ZHVv&Fm2QAp0IgDL5r<7$fIs_7=46g?RTY@+#Njf|pU6rN*L z$`N>Zb4Hts*V_oKamzG$bgt==CPKH9&!aqNVAc>Nj z=)LqvCx6pp_PlG9Ua_KO&z+vY?5hNZ-W<#sS9%X4cDv2dy?>4gSc`BwXS>o}uJyHx zbiOyynOWHXRG_>09qj%o%NM7_e%{$nD`$9e7hJo+pE3gF9kIO(I&|&|BtFtCKbXWS zrbsWOKn_;LlFNgxsx=#rp^F$}o_N*M#UegQ&jvGbrk#JiICSVx>7&c0-gqZ@15gaD z?ZZ6jhaKjiS@7!1l@}SIvoBoUAJKk?s3^yPkj2MX8!m(!a#zyYHu$7TI=VCX-U8i1 z*~VHr{&1A8*UyNks8k4GSmD$t+WT^A=2eZ|mu)=h2c6EwMIF#%$!o$G2hp@H*Os#7 zynh2{Y`Mq_;5kA)m4@i|o5`w#GHP0n%giN zF9b(dWTCKl;`^KbtO1`qjNy1Jba=u3x1E#e@Y2KaB#Xlp@T>;C=dsjEDFs-D~ni#NF*8*O&E@a{#5Kk?iYnourm*7g;wgR*AKeY$37*EkGHoFHBuE+zAS79O5GL*k?H7wKInDa;A+9ye## zh62Y$n2$=-%4P%3<y61CRtEav1vEG1I!R~e`Wf;|=8DogE2St=tfDA3A_Uo9LeMD71_ly5k{s!+s7dB4T z*c@i4&oA`vU{iYZb83wBd^pQXAb<=bWm>M=yhTUpR0X3Wln-dnwE!&f5i**bQ+HZ3 zmZt86$rAdzxscpY*w+js$cc6ul}zplPxT&4{Ip3Ug=F^cAU*7+;9Up9kPW{B#A+pj zK+pQQL(v8Zx^zEW32cGOU})hs%z7sm1TPaYJ+DaNFIb=3l+3rIG72*2*a`^!dYk1s zdN-Xlv1kdI1GNZdj<8rTN;|dHwU_Q{Q*D<8t%;`-TQW)!QMt z{v*s|3}B#TSD8p!dnnLMNU)1Mw}#k}B;5Sc6?VdaygP}Pu|87Nawy;h74|UcWc$vY zJ3R#4kWnyjHZWR`LO!s!#aV(-2Png`gd4C)H!&#gG}F6xS6DGx6UeMmhQ>@s14#-=76(Bif4%n*7@ z%qRv5W7@mu=t-}`I5TWN09Zgt0T!s_&})-!N%ozkXD3Qc;y3$NfWKUbrO$f~B4f`1 zz{CEWsR!gF_MtQ#gZKq_-zlIUP(UnPc222%+DD8cnCh%=-n`kpI;^d1%`(PmLg+$P*~#nCUcV8aDy` zlFi;C$*W*DM)v(E#M+{^tOQnI7i9J2fHm2&C>ElSF6u~G+sBZ)`}$NZERxs{_YApa z#dfLgHZipi$33>L%nCQF%=d=Y6dh5H03;MWok8kO$3ELqLDtT2?W~(p`ihE*=y&?K zRA;h7)5Qm6MgL*6mgpjziU9Agt*g_7M55J}5fu3*9GtiGWw_}b^%amcZf-0!c^eEC zHgJ`q%B8Orlm+VI9)&#{z~>y0pKB4E%9C9Mo}~R6$P7o&p-q{xrJ82m9wZ3YhTxwz zLZ^h-;_&6u3D+h3X+ak$&^@%W4rOEa)KKOvg(Mj`H}tdaJc+C;22W54)q3bJ560{1T5}z-S}W8&QP9(_jUx<(r$m;JNfcaLaVFU@FU5+YHJ}g8j18Ua7o_Qe&UVMl z?5wANn>HULg86ja_B>K_#tsbdYaacp(t#o(6VME?QkIgrNl`V=)dAm>k zIfoGqsNcTPFfkrtWz*0&Oh73mc2%rwc%T`$XDAt$_TD6&Idi!)G$iEx3DsANP)ZeS z1U7jvjALop@eTSapNmZU$&a5j=r%3cu*;lu)hqfpdt7C3FMP=V*`?uAoAPRF;H_SBlM;9&fvlo%e%I+|IUK65_ zQ_ZxwZSYsNK7M)R01FGt66d}!rpj+r35iasq;@qXb2TdrbPW4STZ5PZR*vN2XYoEI zYPCl&@*KYFuFv`TpUpF-avG&|3pc6FP08|gOmeOsJf|4mv(=dp;Q1hAxmaF{*e<(JQQjwt#tR}Xej>`1jkApW<&#ZmD~JHb{T~Fdgc~o4KQ+QWK@$T` z&$%1O#03rI@P2phrq^+Vo_KUGh#f|S@X=##LS&$*ltoV$HgLHfzB9GOw9bvjR21H0+ zmEjOW&J5)%q)=Z%t@|$3r+%IpH;k{8?(d?#DYr|$ z<~=GkN>h}Rv6`9lrUt3y8rOaG-uw4SKW|*IOXei-?NLT2{cjY3$!;elDvFhmh{bdJ z#I^o=SQotK?Afy(j8ERfApq3P*VbigPD1!~YKRZ;)kh(k@H?VGhhy4AHctX>r>@+c zL&xw_X>(miT0RPaUPskC)}}Iz#J12OGsK3$7@MIKI)7bUsr*>?)k5>jdmg`Yh=1v7 zlhN4Q@f@OJ`o%{5_*y1CI^_P)q)kn;q-1v<7j%c_-ta zh>e73N5bY73EmYkx1#8$1`X4XGp2d(Dgj}{Tl}xK#A9l129j3Pr(Ayi1Jw^Fhw}w| z&2JP&@7+dKkRK`%x7ip?y1~8OSVBCKBj& z)h$KqXlvRh6`lF;-JMdeKU`WZ${Ne@Y~01aAgFZr`OIPk$Dr(-RpV{ODvJoUOwG3a z8LsL~NvY#hK0>QOQfNP0z%`Hay0q3#(b)h}@DQtox~qztsYmnr*cSlrWId`{_Q0 zl2nJd7?ONVvIh20I0n(d7vaz2w|(h{EM3eN?Li6KU$TG_=t7Vcgx==0@0nnA325S$ z0sWB!;`58`d&ZQ^Mw!yPjk-Vs%ZJ~{V#F!3+<6h z{zoIN4qQ8DtPqAfXw{byHP@E#U~b;NC4(Uj_?hnMb2?KM#Jh5?*GHt9ZvI{T47h;} z%rAP2FD8h|%v+cbjofmriRt#8m`NkfIsrMBolA9VfU-;p=Ui&UO1Guo!Z3Y{S1hfg zXnWYkL6zQ5hwRid@I(XFIg00cdHpZ1l#1?;ntx?~UYl)R@hodz$)_KE

&YhG+53 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

AP=z;f?=v?*&(0mRZzIhrr?I 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 VNSZ8Caz++;{D`J%%HebW{14+2BZL3| diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index 1af2aa0e..04d8c06a 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -81,7 +81,7 @@ class World(metaclass=AutoWorldRegister): # increment this every time something in your world's names/id mappings changes. # While this is set to 0 in *any* AutoWorld, the entire DataPackage is considered in testing mode and will be # retrieved by clients on every connection. - data_version = 1 + data_version: int = 1 hint_blacklist: Set[str] = frozenset() # any names that should not be hintable @@ -100,7 +100,7 @@ class World(metaclass=AutoWorldRegister): forced_auto_forfeit: bool = False # Hide World Type from various views. Does not remove functionality. - hidden = False + hidden: bool = False # autoset on creation: world: MultiWorld diff --git a/worlds/timespinner/Items.py b/worlds/timespinner/Items.py index 4f45b658..8641cb9a 100644 --- a/worlds/timespinner/Items.py +++ b/worlds/timespinner/Items.py @@ -1,4 +1,4 @@ -from typing import Dict, Tuple, NamedTuple +from typing import Dict, Set, Tuple, NamedTuple class ItemData(NamedTuple): category: str @@ -9,50 +9,50 @@ class ItemData(NamedTuple): # A lot of items arent normally dropped by the randomizer as they are mostly enemy drops, but they can be enabled if desired item_table: Dict[str, ItemData] = { 'Eternal Crown': ItemData('Equipment', 1337000), - #'Security Visor': ItemData('Equipment', 1337001), - #'Engineer Goggles': ItemData('Equipment', 1337002), - #'Leather Helmet': ItemData('Equipment', 1337003), - #'Copper Helmet': ItemData('Equipment', 1337004), + 'Security Visor': ItemData('Equipment', 1337001, 0), + 'Engineer Goggles': ItemData('Equipment', 1337002, 0), + 'Leather Helmet': ItemData('Equipment', 1337003, 0), + 'Copper Helmet': ItemData('Equipment', 1337004, 0), 'Pointy Hat': ItemData('Equipment', 1337005), - #'Dragoon Helmet': ItemData('Equipment', 1337006), + 'Dragoon Helmet': ItemData('Equipment', 1337006, 0), 'Buckle Hat': ItemData('Equipment', 1337007), - #'Advisor Hat': ItemData('Equipment', 1337008), + 'Advisor Hat': ItemData('Equipment', 1337008, 0), 'Librarian Hat': ItemData('Equipment', 1337009), - #'Combat Helmet': ItemData('Equipment', 1337010), + 'Combat Helmet': ItemData('Equipment', 1337010, 0), 'Captain\'s Cap': ItemData('Equipment', 1337011), 'Lab Glasses': ItemData('Equipment', 1337012), 'Empire Crown': ItemData('Equipment', 1337013), 'Viletian Crown': ItemData('Equipment', 1337014), - #'Sunglasses': ItemData('Equipment', 1337015), + 'Sunglasses': ItemData('Equipment', 1337015, 0), 'Old Coat': ItemData('Equipment', 1337016), - #'Trendy Jacket': ItemData('Equipment', 1337017), - #'Security Vest': ItemData('Equipment', 1337018), - #'Leather Jerkin': ItemData('Equipment', 1337019), - #'Copper Breastplate': ItemData('Equipment', 1337020), + 'Trendy Jacket': ItemData('Equipment', 1337017, 0), + 'Security Vest': ItemData('Equipment', 1337018, 0), + 'Leather Jerkin': ItemData('Equipment', 1337019, 0), + 'Copper Breastplate': ItemData('Equipment', 1337020, 0), 'Traveler\'s Cloak': ItemData('Equipment', 1337021), - #'Dragoon Armor': ItemData('Equipment', 1337022), + 'Dragoon Armor': ItemData('Equipment', 1337022, 0), 'Midnight Cloak': ItemData('Equipment', 1337023), - #'Advisor Robe': ItemData('Equipment', 1337024), + 'Advisor Robe': ItemData('Equipment', 1337024, 0), 'Librarian Robe': ItemData('Equipment', 1337025), - #'Military Armor': ItemData('Equipment', 1337026), + 'Military Armor': ItemData('Equipment', 1337026, 0), 'Captain\'s Uniform': ItemData('Equipment', 1337027), 'Lab Coat': ItemData('Equipment', 1337028), 'Empress Robe': ItemData('Equipment', 1337029), 'Princess Dress': ItemData('Equipment', 1337030), 'Eternal Coat': ItemData('Equipment', 1337031), - #'Synthetic Plume': ItemData('Equipment', 1337032), - #'Cheveur Plume': ItemData('Equipment', 1337033), + 'Synthetic Plume': ItemData('Equipment', 1337032, 0), + 'Cheveur Plume': ItemData('Equipment', 1337033, 0), 'Metal Wristband': ItemData('Equipment', 1337034), - #'Nymph Hairband': ItemData('Equipment', 1337035), - #'Mother o\' Pearl': ItemData('Equipment', 1337036), + 'Nymph Hairband': ItemData('Equipment', 1337035, 0), + 'Mother o\' Pearl': ItemData('Equipment', 1337036, 0), 'Bird Statue': ItemData('Equipment', 1337037), - #'Chaos Stole': ItemData('Equipment', 1337038), + 'Chaos Stole': ItemData('Equipment', 1337038, 0), 'Pendulum': ItemData('Equipment', 1337039), - #'Chaos Horn': ItemData('Equipment', 1337040), + 'Chaos Horn': ItemData('Equipment', 1337040, 0), 'Filigree Clasp': ItemData('Equipment', 1337041), - #'Azure Stole': ItemData('Equipment', 1337042), + 'Azure Stole': ItemData('Equipment', 1337042, 0), 'Ancient Coin': ItemData('Equipment', 1337043), - #'Shiny Rock': ItemData('Equipment', 1337044), + 'Shiny Rock': ItemData('Equipment', 1337044, 0), 'Galaxy Earrings': ItemData('Equipment', 1337045), 'Selen\'s Bangle': ItemData('Equipment', 1337046), 'Glass Pumpkin': ItemData('Equipment', 1337047), @@ -76,45 +76,45 @@ item_table: Dict[str, ItemData] = { 'Antidote': ItemData('UseItem', 1337065, 0), 'Chaos Rose': ItemData('UseItem', 1337066, 0), 'Warp Shard': ItemData('UseItem', 1337067), - #'Dream Wisp': ItemData('UseItem', 1337068), - #'PlaceHolderItem1': ItemData('UseItem', 1337069), - #'Lachiemi Sun': ItemData('UseItem', 1337070), + 'Dream Wisp': ItemData('UseItem', 1337068, 0), + 'PlaceHolderItem1': ItemData('UseItem', 1337069, 0), + 'Lachiemi Sun': ItemData('UseItem', 1337070, 0), 'Jerky': ItemData('UseItem', 1337071), - #'Biscuit': ItemData('UseItem', 1337072), - #'Fried Cheveur': ItemData('UseItem', 1337073), - #'Sautéed Wyvern Tail': ItemData('UseItem', 1337074), - #'Unagi Roll': ItemData('UseItem', 1337075), - #'Cheveur au Vin': ItemData('UseItem', 1337076), - #'Royal Casserole': ItemData('UseItem', 1337077), + 'Biscuit': ItemData('UseItem', 1337072, 0), + 'Fried Cheveur': ItemData('UseItem', 1337073, 0), + 'Sautéed Wyvern Tail': ItemData('UseItem', 1337074, 0), + 'Unagi Roll': ItemData('UseItem', 1337075, 0), + 'Cheveur au Vin': ItemData('UseItem', 1337076, 0), + 'Royal Casserole': ItemData('UseItem', 1337077, 0), 'Spaghetti': ItemData('UseItem', 1337078), - #'Plump Maggot': ItemData('UseItem', 1337079), - #'Orange Juice': ItemData('UseItem', 1337080), + 'Plump Maggot': ItemData('UseItem', 1337079, 0), + 'Orange Juice': ItemData('UseItem', 1337080, 0), 'Filigree Tea': ItemData('UseItem', 1337081), - #'Empress Cake': ItemData('UseItem', 1337082), - #'Rotten Tail': ItemData('UseItem', 1337083), - #'Alchemy Tools': ItemData('UseItem', 1337084), + 'Empress Cake': ItemData('UseItem', 1337082, 0), + 'Rotten Tail': ItemData('UseItem', 1337083, 0), + 'Alchemy Tools': ItemData('UseItem', 1337084, 0), 'Galaxy Stone': ItemData('UseItem', 1337085), - #1337086 Used interally - #'Essence Crystal': ItemData('UseItem', 1337087), - #'Gold Ring': ItemData('UseItem', 1337088), - #'Gold Necklace': ItemData('UseItem', 1337089), + # 1337086 Used interally + 'Essence Crystal': ItemData('UseItem', 1337087, 0), + 'Gold Ring': ItemData('UseItem', 1337088, 0), + 'Gold Necklace': ItemData('UseItem', 1337089, 0), 'Herb': ItemData('UseItem', 1337090), - #'Mushroom': ItemData('UseItem', 1337091), - #'Plasma Crystal': ItemData('UseItem', 1337092), + 'Mushroom': ItemData('UseItem', 1337091, 0), + 'Plasma Crystal': ItemData('UseItem', 1337092, 0), 'Plasma IV Bag': ItemData('UseItem', 1337093), - #'Cheveur Drumstick': ItemData('UseItem', 1337094), - #'Wyvern Tail': ItemData('UseItem', 1337095), - #'Eel Meat': ItemData('UseItem', 1337096), - #'Cheveux Breast': ItemData('UseItem', 1337097), + 'Cheveur Drumstick': ItemData('UseItem', 1337094, 0), + 'Wyvern Tail': ItemData('UseItem', 1337095, 0), + 'Eel Meat': ItemData('UseItem', 1337096, 0), + 'Cheveux Breast': ItemData('UseItem', 1337097, 0), 'Food Synthesizer': ItemData('UseItem', 1337098), - #'Cheveux Feather': ItemData('UseItem', 1337099), - #'Siren Ink': ItemData('UseItem', 1337100), - #'Plasma Core': ItemData('UseItem', 1337101), - #'Silver Ore': ItemData('UseItem', 1337102), - #'Historical Documents': ItemData('UseItem', 1337103), - #'MapReveal 0': ItemData('UseItem', 1337104), - #'MapReveal 1': ItemData('UseItem', 1337105), - #'MapReveal 2': ItemData('UseItem', 1337106), + 'Cheveux Feather': ItemData('UseItem', 1337099, 0), + 'Siren Ink': ItemData('UseItem', 1337100, 0), + 'Plasma Core': ItemData('UseItem', 1337101, 0), + 'Silver Ore': ItemData('UseItem', 1337102, 0), + 'Historical Documents': ItemData('UseItem', 1337103, 0), + 'MapReveal 0': ItemData('UseItem', 1337104, 0), + 'MapReveal 1': ItemData('UseItem', 1337105, 0), + 'MapReveal 2': ItemData('UseItem', 1337106, 0), 'Timespinner Wheel': ItemData('Relic', 1337107, progression=True), 'Timespinner Spindle': ItemData('Relic', 1337108, progression=True), 'Timespinner Gear 1': ItemData('Relic', 1337109, progression=True), @@ -193,7 +193,7 @@ item_table: Dict[str, ItemData] = { 'Max Sand': ItemData('Stat', 1337249, 14) } -starter_melee_weapons: Tuple[str] = ( +starter_melee_weapons: Tuple[str, ...] = ( 'Blue Orb', 'Blade Orb', 'Fire Orb', @@ -211,7 +211,7 @@ starter_melee_weapons: Tuple[str] = ( 'Radiant Orb' ) -starter_spells: Tuple[str] = ( +starter_spells: Tuple[str, ...] = ( 'Colossal Blade', 'Infernal Flames', 'Plasma Geyser', @@ -229,7 +229,7 @@ starter_spells: Tuple[str] = ( ) # weighted -starter_progression_items: Tuple[str] = ( +starter_progression_items: Tuple[str, ...] = ( 'Talaria Attachment', 'Talaria Attachment', 'Succubus Hairpin', @@ -241,7 +241,7 @@ starter_progression_items: Tuple[str] = ( 'Lightwall' ) -filler_items: Tuple[str] = ( +filler_items: Tuple[str, ...] = ( 'Potion', 'Ether', 'Hi-Potion', @@ -254,4 +254,12 @@ filler_items: Tuple[str] = ( 'Mind Refresh ULTRA', 'Antidote', 'Chaos Rose' -) \ No newline at end of file +) + +def get_item_names_per_category() -> Dict[str, Set[str]]: + categories: Dict[str, Set[str]] = {} + + for name, data in item_table.items(): + categories.setdefault(data.category, set()).add(name) + + return categories \ No newline at end of file diff --git a/worlds/timespinner/Locations.py b/worlds/timespinner/Locations.py index 699c2111..7e0a884d 100644 --- a/worlds/timespinner/Locations.py +++ b/worlds/timespinner/Locations.py @@ -4,14 +4,12 @@ from .Options import is_option_enabled EventId: Optional[int] = None - class LocationData(NamedTuple): region: str name: str code: Optional[int] rule: Callable = lambda state: True - def get_locations(world: Optional[MultiWorld], player: Optional[int]): location_table: Tuple[LocationData, ...] = ( # PresentItemLocations @@ -200,6 +198,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]): # DownloadTerminals LocationData('Libary', 'Library terminal 1', 1337157, lambda state: state.has('Tablet', player)), LocationData('Libary', 'Library terminal 2', 1337156, lambda state: state.has('Tablet', player)), + # 1337158 Is Lost in time LocationData('Libary', 'Library terminal 3', 1337159, lambda state: state.has('Tablet', player)), LocationData('Libary', 'V terminal 1', 1337160, lambda state: state.has_all(['Tablet', 'Library Keycard V'], player)), LocationData('Libary', 'V terminal 2', 1337161, lambda state: state.has_all(['Tablet', 'Library Keycard V'], player)), @@ -218,6 +217,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]): return ( *location_table, *downloadable_items ) else: return location_table + starter_progression_locations: Tuple[str, ...] = ( 'Starter chest 2', diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 3ee636cc..8d179ac7 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -19,7 +19,7 @@ class DownloadableItems(Toggle): display_name = "Downloadable items" class FacebookMode(Toggle): - "With the tablet you will be able to download items at terminals" + "Requires Oculus Rift(ng) to spot the weakspots in walls and floors" display_name = "Facebook mode" class StartWithMeyef(Toggle): diff --git a/worlds/timespinner/PyramidKeys.py b/worlds/timespinner/PyramidKeys.py index b9cb4368..761dccb9 100644 --- a/worlds/timespinner/PyramidKeys.py +++ b/worlds/timespinner/PyramidKeys.py @@ -3,7 +3,7 @@ from BaseClasses import MultiWorld from .Options import is_option_enabled def get_pyramid_keys_unlock(world: MultiWorld, player: int) -> str: - present_teleportation_gates: Tuple[str] = ( + present_teleportation_gates: Tuple[str, ...] = ( "GateKittyBoss", "GateLeftLibrary", "GateMilitairyGate", @@ -12,7 +12,7 @@ def get_pyramid_keys_unlock(world: MultiWorld, player: int) -> str: "GateLakeDesolation" ) - past_teleportation_gates: Tuple[str] = ( + past_teleportation_gates: Tuple[str, ...] = ( "GateLakeSirineRight", "GateAccessToPast", "GateCastleRamparts", diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index f3639927..1d02afcc 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -3,46 +3,46 @@ from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType from .Options import is_option_enabled from .Locations import LocationData -def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData], pyramid_keys_unlock: str): +def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location], pyramid_keys_unlock: str): locations_per_region = get_locations_per_region(locations) world.regions += [ - create_region(world, player, locations_per_region, 'Menu'), - create_region(world, player, locations_per_region, 'Tutorial'), - create_region(world, player, locations_per_region, 'Lake desolation'), - create_region(world, player, locations_per_region, 'Upper lake desolation'), - create_region(world, player, locations_per_region, 'Lower lake desolation'), - create_region(world, player, locations_per_region, 'Libary'), - create_region(world, player, locations_per_region, 'Libary top'), - create_region(world, player, locations_per_region, 'Varndagroth tower left'), - create_region(world, player, locations_per_region, 'Varndagroth tower right (upper)'), - create_region(world, player, locations_per_region, 'Varndagroth tower right (lower)'), - create_region(world, player, locations_per_region, 'Varndagroth tower right (elevator)'), - create_region(world, player, locations_per_region, 'Sealed Caves (Sirens)'), - create_region(world, player, locations_per_region, 'Militairy Fortress'), - create_region(world, player, locations_per_region, 'The lab'), - create_region(world, player, locations_per_region, 'The lab (power off)'), - create_region(world, player, locations_per_region, 'The lab (upper)'), - create_region(world, player, locations_per_region, 'Emperors tower'), - create_region(world, player, locations_per_region, 'Skeleton Shaft'), - create_region(world, player, locations_per_region, 'Sealed Caves (upper)'), - create_region(world, player, locations_per_region, 'Sealed Caves (Xarion)'), - create_region(world, player, locations_per_region, 'Refugee Camp'), - create_region(world, player, locations_per_region, 'Forest'), - create_region(world, player, locations_per_region, 'Left Side forest Caves'), - create_region(world, player, locations_per_region, 'Upper Lake Sirine'), - create_region(world, player, locations_per_region, 'Lower Lake Sirine'), - create_region(world, player, locations_per_region, 'Caves of Banishment (upper)'), - create_region(world, player, locations_per_region, 'Caves of Banishment (Maw)'), - create_region(world, player, locations_per_region, 'Caves of Banishment (Sirens)'), - create_region(world, player, locations_per_region, 'Caste Ramparts'), - create_region(world, player, locations_per_region, 'Caste Keep'), - create_region(world, player, locations_per_region, 'Royal towers (lower)'), - create_region(world, player, locations_per_region, 'Royal towers'), - create_region(world, player, locations_per_region, 'Royal towers (upper)'), - create_region(world, player, locations_per_region, 'Ancient Pyramid (left)'), - create_region(world, player, locations_per_region, 'Ancient Pyramid (right)'), - create_region(world, player, locations_per_region, 'Space time continuum') + create_region(world, player, locations_per_region, location_cache, 'Menu'), + create_region(world, player, locations_per_region, location_cache, 'Tutorial'), + create_region(world, player, locations_per_region, location_cache, 'Lake desolation'), + create_region(world, player, locations_per_region, location_cache, 'Upper lake desolation'), + create_region(world, player, locations_per_region, location_cache, 'Lower lake desolation'), + create_region(world, player, locations_per_region, location_cache, 'Libary'), + create_region(world, player, locations_per_region, location_cache, 'Libary top'), + create_region(world, player, locations_per_region, location_cache, 'Varndagroth tower left'), + create_region(world, player, locations_per_region, location_cache, 'Varndagroth tower right (upper)'), + create_region(world, player, locations_per_region, location_cache, 'Varndagroth tower right (lower)'), + create_region(world, player, locations_per_region, location_cache, 'Varndagroth tower right (elevator)'), + create_region(world, player, locations_per_region, location_cache, 'Sealed Caves (Sirens)'), + create_region(world, player, locations_per_region, location_cache, 'Militairy Fortress'), + create_region(world, player, locations_per_region, location_cache, 'The lab'), + create_region(world, player, locations_per_region, location_cache, 'The lab (power off)'), + create_region(world, player, locations_per_region, location_cache, 'The lab (upper)'), + create_region(world, player, locations_per_region, location_cache, 'Emperors tower'), + create_region(world, player, locations_per_region, location_cache, 'Skeleton Shaft'), + create_region(world, player, locations_per_region, location_cache, 'Sealed Caves (upper)'), + create_region(world, player, locations_per_region, location_cache, 'Sealed Caves (Xarion)'), + create_region(world, player, locations_per_region, location_cache, 'Refugee Camp'), + create_region(world, player, locations_per_region, location_cache, 'Forest'), + create_region(world, player, locations_per_region, location_cache, 'Left Side forest Caves'), + create_region(world, player, locations_per_region, location_cache, 'Upper Lake Sirine'), + create_region(world, player, locations_per_region, location_cache, 'Lower Lake Sirine'), + create_region(world, player, locations_per_region, location_cache, 'Caves of Banishment (upper)'), + create_region(world, player, locations_per_region, location_cache, 'Caves of Banishment (Maw)'), + create_region(world, player, locations_per_region, location_cache, 'Caves of Banishment (Sirens)'), + create_region(world, player, locations_per_region, location_cache, 'Caste Ramparts'), + create_region(world, player, locations_per_region, location_cache, 'Caste Keep'), + create_region(world, player, locations_per_region, location_cache, 'Royal towers (lower)'), + create_region(world, player, locations_per_region, location_cache, 'Royal towers'), + create_region(world, player, locations_per_region, location_cache, 'Royal towers (upper)'), + create_region(world, player, locations_per_region, location_cache, 'Ancient Pyramid (left)'), + create_region(world, player, locations_per_region, location_cache, 'Ancient Pyramid (right)'), + create_region(world, player, locations_per_region, location_cache, 'Space time continuum') ] connectStartingRegion(world, player) @@ -149,7 +149,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Space time continuum', 'Caves of Banishment (Maw)', lambda state: pyramid_keys_unlock == "GateMaw") connect(world, player, names, 'Space time continuum', 'Caves of Banishment (upper)', lambda state: pyramid_keys_unlock == "GateCavesOfBanishment") -def create_location(player: int, name: str, id: Optional[int], region: Region, rule: Callable) -> Location: +def create_location(player: int, name: str, id: Optional[int], region: Region, rule: Callable, location_cache: List[Location]) -> Location: location = Location(player, name, id, region) location.access_rule = rule @@ -157,19 +157,23 @@ def create_location(player: int, name: str, id: Optional[int], region: Region, r location.event = True location.locked = True + location_cache.append(location) + return location -def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], name: str) -> Region: + +def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], location_cache: List[Location], name: str) -> Region: region = Region(name, RegionType.Generic, name, player) region.world = world if name in locations_per_region: for location_data in locations_per_region[name]: - location = create_location(player, location_data.name, location_data.code, region, location_data.rule) + location = create_location(player, location_data.name, location_data.code, region, location_data.rule, location_cache) region.locations.append(location) return region + def connectStartingRegion(world: MultiWorld, player: int): menu = world.get_region('Menu', player) tutorial = world.get_region('Tutorial', player) @@ -192,6 +196,7 @@ def connectStartingRegion(world: MultiWorld, player: int): teleport_back_to_start.connect(starting_region) space_time_continuum.exits.append(teleport_back_to_start) + def connect(world: MultiWorld, player: int, used_names : Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): sourceRegion = world.get_region(source, player) targetRegion = world.get_region(target, player) @@ -211,10 +216,11 @@ def connect(world: MultiWorld, player: int, used_names : Dict[str, int], source: sourceRegion.exits.append(connection) connection.connect(targetRegion) -def get_locations_per_region(locations: Tuple[LocationData]) -> Dict[str, List[LocationData]]: + +def get_locations_per_region(locations: Tuple[LocationData, ...]) -> Dict[str, List[LocationData]]: per_region: Dict[str, List[LocationData]] = {} for location in locations: - per_region[location.region] = [ location ] if location.region not in per_region else per_region[location.region] + [ location ] + per_region.setdefault(location.region, []).append(location) return per_region \ No newline at end of file diff --git a/worlds/timespinner/__init__.py b/worlds/timespinner/__init__.py index 860c7e84..2adb3ca0 100644 --- a/worlds/timespinner/__init__.py +++ b/worlds/timespinner/__init__.py @@ -1,52 +1,60 @@ from typing import Dict, List, Set -from BaseClasses import Item, MultiWorld +from BaseClasses import Item, MultiWorld, Location from ..AutoWorld import World from .LogicMixin import TimespinnerLogic -from .Items import item_table, starter_melee_weapons, starter_spells, starter_progression_items, filler_items +from .Items import get_item_names_per_category, item_table, starter_melee_weapons, starter_spells, starter_progression_items, filler_items from .Locations import get_locations, starter_progression_locations, EventId from .Regions import create_regions from .Options import is_option_enabled, timespinner_options from .PyramidKeys import get_pyramid_keys_unlock - class TimespinnerWorld(World): + """ + Timespinner is a beautiful metroidvania inspired by classic 90s action-platformers. + Travel back in time to change fate itself. Join timekeeper Lunais on her quest for revenge against the empire that killed her family. + """ + options = timespinner_options game = "Timespinner" topology_present = True - data_version = 1 - hidden = True + remote_items = False + data_version = 2 item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {location.name: location.code for location in get_locations(None, None)} + item_name_groups = get_item_names_per_category() locked_locations: Dict[int, List[str]] = {} pyramid_keys_unlock: Dict[int, str] = {} + location_cache: Dict[int, List[Location]] = {} def generate_early(self): self.locked_locations[self.player] = [] + self.location_cache[self.player] = [] self.pyramid_keys_unlock[self.player] = get_pyramid_keys_unlock(self.world, self.player) - self.item_name_groups = get_item_name_groups() def create_regions(self): - create_regions(self.world, self.player, get_locations(self.world, self.player), - self.pyramid_keys_unlock[self.player]) + create_regions(self.world, self.player, get_locations(self.world, self.player), + self.location_cache[self.player], self.pyramid_keys_unlock[self.player]) + def create_item(self, name: str) -> Item: return create_item(name, self.player) + def set_rules(self): setup_events(self.world, self.player, self.locked_locations[self.player]) self.world.completion_condition[self.player] = lambda state: state.has('Killed Nightmare', self.player) + def generate_basic(self): excluded_items = get_excluded_items_based_on_options(self.world, self.player) assign_starter_items(self.world, self.player, excluded_items, self.locked_locations[self.player]) - if not is_option_enabled(self.world, self.player, "QuickSeed") or \ - not is_option_enabled(self.world, self.player, "Inverted"): + if not is_option_enabled(self.world, self.player, "QuickSeed") and not is_option_enabled(self.world, self.player, "Inverted"): place_first_progression_item(self.world, self.player, excluded_items, self.locked_locations[self.player]) pool = get_item_pool(self.world, self.player, excluded_items) @@ -55,17 +63,18 @@ class TimespinnerWorld(World): self.world.itempool += pool + def fill_slot_data(self) -> Dict: slot_data = {} for option_name in timespinner_options: - option = getattr(self.world, option_name)[self.player] - slot_data[option_name] = int(option.value) + slot_data[option_name] = is_option_enabled(self.world, self.player, option_name) - slot_data["StinkyMaw"] = 1 - slot_data["ProgressiveVerticalMovement"] = 0 - slot_data["ProgressiveKeycards"] = 0 + slot_data["StinkyMaw"] = True + slot_data["ProgressiveVerticalMovement"] = False + slot_data["ProgressiveKeycards"] = False slot_data["PyramidKeysGate"] = self.pyramid_keys_unlock[self.player] + slot_data["PersonalItems"] = get_personal_items(self.player, self.location_cache[self.player]) return slot_data @@ -106,7 +115,7 @@ def assign_starter_items(world: MultiWorld, player: int, excluded_items: List[st def get_item_pool(world: MultiWorld, player: int, excluded_items: List[str]) -> List[Item]: - pool = [] + pool: List[Item] = [] for name, data in item_table.items(): if not name in excluded_items: @@ -159,10 +168,11 @@ def setup_events(world: MultiWorld, player: int, locked_locations: List[str]): location.place_locked_item(item) -def get_item_name_groups() -> Dict[str, Set[str]]: - groups: Dict[str, Set[str]] = {} +def get_personal_items(player: int, locations: List[Location]) -> Dict[int, int]: + personal_items: Dict[int, int] = {} - for name, data in item_table.items(): - groups.setdefault(data.category, set()).add(name) - - return groups + for location in locations: + if location.address and location.item and location.item.code and location.item.player == player: + personal_items[location.address] = location.item.code + + return personal_items \ No newline at end of file From 391f42b4f2357fb98de6125c8ad9c6dc4934d2a0 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 30 Sep 2021 19:51:44 +0200 Subject: [PATCH 34/46] Timespinner: some game info fixes --- WebHostLib/static/assets/gameInfo/en_Timespinner.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebHostLib/static/assets/gameInfo/en_Timespinner.md b/WebHostLib/static/assets/gameInfo/en_Timespinner.md index 1b0eb0d4..577b164d 100644 --- a/WebHostLib/static/assets/gameInfo/en_Timespinner.md +++ b/WebHostLib/static/assets/gameInfo/en_Timespinner.md @@ -7,7 +7,7 @@ you need to configure and export a config file. ## What does randomization do to this game? Items which the player would normally acquire throughout the game have been moved around. Logic remains, so the game is always able to be completed, but because of the item shuffle the player may need to access certain areas before -they would in the vanilla game. All rings and spells are also randomized into those item locations, therefor you can nolonger craft them at the alchemist +they would in the vanilla game. All rings and spells are also randomized into those item locations, therefor you can no longer craft them at the alchemist ## What is the goal of Timespinner when randomized? The goal remains unchanged. Kill the Sandman\Nightmare! @@ -20,7 +20,7 @@ contain any of those items may have their contents changed. Any of the items which can be shuffled may also be placed into another player's world. It is possible to choose to limit certain items to your own world. -## What does another world's item look like in Subnautica? +## What does another world's item look like in Timespinner? Items belonging to other worlds are represented by the vanilla item [Elemental Beads](https://timespinnerwiki.com/Use_Items), Elemental Beads have no use in the randomizer ## When the player receives an item, what happens? From efe02e259189cfc5642fb02f931856b0e52738cb Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Fri, 17 Sep 2021 10:53:55 -0500 Subject: [PATCH 35/46] allow swamp BK in first chest in hybrid major glitches --- worlds/alttp/Rules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/alttp/Rules.py b/worlds/alttp/Rules.py index 35762fe2..f8ecbb28 100644 --- a/worlds/alttp/Rules.py +++ b/worlds/alttp/Rules.py @@ -261,7 +261,7 @@ def global_rules(world, player): if world.accessibility[player] != 'locations': set_always_allow(world.get_location('Swamp Palace - Big Chest', player), lambda state, item: item.name == 'Big Key (Swamp Palace)' and item.player == player) set_rule(world.get_entrance('Swamp Palace (North)', player), lambda state: state.has('Hookshot', player)) - if not world.smallkey_shuffle[player] and world.logic[player] != 'nologic': + if not world.smallkey_shuffle[player] and world.logic[player] not in ['hybridglitches', 'nologic']: forbid_item(world.get_location('Swamp Palace - Entrance', player), 'Big Key (Swamp Palace)', player) set_rule(world.get_entrance('Thieves Town Big Key Door', player), lambda state: state.has('Big Key (Thieves Town)', player)) From 4ca53a6ee08893ecca12d4c2f1e58582c04593ab Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Fri, 1 Oct 2021 08:31:05 -0500 Subject: [PATCH 36/46] ALttP: fix dungeon exits in HMG and NL if PoD, Hera or SP are there --- worlds/alttp/Rom.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index 69988638..bb358258 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -832,7 +832,9 @@ def patch_rom(world, rom, player, enemized): 'Skull Woods Final Section Exit', 'Ice Palace Exit', 'Misery Mire Exit', 'Palace of Darkness Exit', 'Swamp Palace Exit', 'Ganons Tower Exit', 'Desert Palace Exit (North)', 'Agahnims Tower Exit', 'Spiral Cave Exit (Top)', - 'Superbunny Cave Exit (Bottom)', 'Turtle Rock Ledge Exit (East)'}: + 'Superbunny Cave Exit (Bottom)', 'Turtle Rock Ledge Exit (East)'} and \ + (world.logic[player] not in ['hybridglitches', 'nologic'] or + exit.name not in {'Palace of Darkness Exit', 'Tower of Hera Exit', 'Swamp Palace Exit'}): # For exits that connot be reached from another, no need to apply offset fixes. rom.write_int16(0x15DB5 + 2 * offset, link_y) # same as final else elif room_id == 0x0059 and world.fix_skullwoods_exit[player]: From 4f7e3d7a45a53ea81efc1592c0a1ceacde2dec42 Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Fri, 1 Oct 2021 14:15:45 +0200 Subject: [PATCH 37/46] Fixed routing issue for Inverted seeds --- worlds/timespinner/Regions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index 1d02afcc..92856b27 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -98,7 +98,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Sealed Caves (Xarion)', 'Sealed Caves (upper)', lambda state: state._timespinner_has_forwarddash_doublejump(world, player)) connect(world, player, names, 'Sealed Caves (Xarion)', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Refugee Camp', 'Forest') - connect(world, player, names, 'Refugee Camp', 'Libary', lambda state: is_option_enabled(world, player, "Inverted")) + connect(world, player, names, 'Refugee Camp', 'Libary', lambda state: not is_option_enabled(world, player, "Inverted")) connect(world, player, names, 'Refugee Camp', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Forest', 'Refugee Camp') connect(world, player, names, 'Forest', 'Left Side forest Caves', lambda state: state.has('Talaria Attachment', player) or state._timespinner_has_timestop(world, player)) @@ -223,4 +223,4 @@ def get_locations_per_region(locations: Tuple[LocationData, ...]) -> Dict[str, L for location in locations: per_region.setdefault(location.region, []).append(location) - return per_region \ No newline at end of file + return per_region From 81afbb55cf7906f5254e6f2635f2c08221470ade Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 2 Oct 2021 07:00:16 +0200 Subject: [PATCH 38/46] Core: increment version --- Utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utils.py b/Utils.py index 8ff1834a..53e54090 100644 --- a/Utils.py +++ b/Utils.py @@ -13,7 +13,7 @@ class Version(typing.NamedTuple): build: int -__version__ = "0.1.8" +__version__ = "0.1.9" version_tuple = tuplize_version(__version__) import builtins From 72976da3a4cc593a403b6a88cbd7afc00283089c Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 2 Oct 2021 07:01:00 +0200 Subject: [PATCH 39/46] readme: adjust Z3randomizer link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c694adb0..0f1e49f6 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ If you are running Archipelago from a non-Windows system then the likely scenari ## Related Repositories This project makes use of multiple other projects. We wouldn't be here without these other repositories and the contributions of their developers, past and present. -* [z3randomizer](https://github.com/CaitSith2/z3randomizer) +* [z3randomizer](https://github.com/ArchipelagoMW/z3randomizer) * [Enemizer](https://github.com/Ijwu/Enemizer) * [Ocarina of Time Randomizer](https://github.com/TestRunnerSRL/OoT-Randomizer) From b7aa5a17b78ebccd6d692777c8848cd87f476ec2 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 2 Oct 2021 10:15:00 +0200 Subject: [PATCH 40/46] LttP: Bartering, add price types for replacement items --- BaseClasses.py | 2 +- Options.py | 1 - worlds/alttp/Rom.py | 21 +++++++++++++-------- worlds/alttp/Shops.py | 7 ++++++- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index f3bf1b39..6f9775b5 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1080,7 +1080,7 @@ class Spoiler(): if item['replacement'] is None: continue - shopdata['item_{}'.format(index)] += ", {} - {}".format(item['replacement'], item['replacement_price']) if item['replacement_price'] else item['replacement'] + shopdata['item_{}'.format(index)] += f", {item['replacement']} - {item['replacement_price']} {price_type_display_name[item['replacement_price_type']]}" self.shops.append(shopdata) for player in self.world.get_game_players("A Link to the Past"): diff --git a/Options.py b/Options.py index fdb1b8a6..3b73aba3 100644 --- a/Options.py +++ b/Options.py @@ -375,7 +375,6 @@ class ExcludeLocations(OptionSet): per_game_common_options = { - # placeholder until they're actually implemented "local_items": LocalItems, "non_local_items": NonLocalItems, "start_inventory": StartInventory, diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index 10354b5a..efedecb0 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -1678,6 +1678,16 @@ def patch_race_rom(rom, world, player): rom.encrypt(world, player) +def get_price_data(price: int, price_type: int) -> bytes: + if price_type != ShopPriceType.Rupees: + # Set special price flag 0x8000 + # Then set the type of price we're setting 0x7F00 (this starts from Hearts, not Rupees, subtract 1) + # Then append the price/index into the second byte 0x00FF + return int16_as_bytes(0x8000 | 0x100 * (price_type - 1) | price) + else: + return int16_as_bytes(price) + + def write_custom_shops(rom, world, player): shops = sorted([shop for shop in world.shops if shop.custom and shop.region.player == player], key=lambda shop: shop.sram_offset) @@ -1711,13 +1721,8 @@ def write_custom_shops(rom, world, player): for index, item in enumerate(shop.inventory): if item is None: break - if item['price_type'] != ShopPriceType.Rupees: - # Set special price flag 0x8000 - # Then set the type of price we're setting 0x7F00 (this starts from Hearts, not Rupees, subtract 1) - # Then append the price/index into the second byte 0x00FF - price_data = int16_as_bytes(0x8000 | 0x100 * (item["price_type"] - 1) | item['price']) - else: - price_data = int16_as_bytes(item['price']) + price_data = get_price_data(item['price'], item["price_type"]) + replacement_price_data = get_price_data(item['replacement_price'], item['replacement_price_type']) slot = 0 if shop.type == ShopType.TakeAny else index if not item['item'] in item_table: # item not native to ALTTP item_code = get_nonnative_item_sprite(item['item']) @@ -1728,7 +1733,7 @@ def write_custom_shops(rom, world, player): item_data = [shop_id, item_code] + price_data + \ [item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \ - int16_as_bytes(item['replacement_price']) + [0 if item['player'] == player else item['player']] + replacement_price_data + [0 if item['player'] == player else item['player']] items_data.extend(item_data) rom.write_bytes(0x184800, shop_data) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index a1c5ad5f..09ee8f9d 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -102,7 +102,8 @@ class Shop(): def add_inventory(self, slot: int, item: str, price: int, max: int = 0, replacement: Optional[str] = None, replacement_price: int = 0, create_location: bool = False, - player: int = 0, price_type: int = ShopPriceType.Rupees): + player: int = 0, price_type: int = ShopPriceType.Rupees, + replacement_price_type: int = ShopPriceType.Rupees): self.inventory[slot] = { 'item': item, 'price': price, @@ -110,6 +111,7 @@ class Shop(): 'max': max, 'replacement': replacement, 'replacement_price': replacement_price, + 'replacement_price_type': replacement_price_type, 'create_location': create_location, 'player': player } @@ -129,6 +131,7 @@ class Shop(): 'max': max, 'replacement': self.inventory[slot]["item"], 'replacement_price': self.inventory[slot]["price"], + 'replacement_price_type': self.inventory[slot]["price_type"], 'create_location': self.inventory[slot]["create_location"], 'player': player } @@ -257,6 +260,8 @@ def ShopSlotFill(world): shop.push_inventory(location.shop_slot, item_name, price * 5, 1, location.item.player if location.item.player != location.player else 0) + if 'P' in world.shop_shuffle[location.player]: + price_to_funny_price(shop.inventory[location.shop_slot], world, location.player) def create_shops(world, player: int): From 0d9e186e181f6e41a5ea3a102de51de6f6205e17 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 26 Sep 2021 22:47:58 -0500 Subject: [PATCH 41/46] OoT: place shop progression first rather than only tunics --- worlds/oot/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index ae22d603..6e9149e4 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -641,7 +641,7 @@ class OOTWorld(World): shop_locations = list( filter(lambda location: location.type == 'Shop' and location.name not in self.shop_prices, self.world.get_unfilled_locations(player=self.player))) - shop_items.sort(key=lambda item: 1 if item.name in {"Buy Goron Tunic", "Buy Zora Tunic"} else 0) + shop_items.sort(key=lambda item: int(item.advancement)) # place progression shop items first self.world.random.shuffle(shop_locations) for item in shop_items: self.world.itempool.remove(item) From fa1b93252cdac4968a231c8561880e139cd50e9f Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Fri, 1 Oct 2021 09:20:40 -0500 Subject: [PATCH 42/46] OoT: place Deku Shields first in closed forest + shopsanity --- worlds/oot/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 6e9149e4..309913f8 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -641,7 +641,11 @@ class OOTWorld(World): shop_locations = list( filter(lambda location: location.type == 'Shop' and location.name not in self.shop_prices, self.world.get_unfilled_locations(player=self.player))) - shop_items.sort(key=lambda item: int(item.advancement)) # place progression shop items first + shop_items.sort(key=lambda item: { + 'Buy Deku Shield': 3*int(self.open_forest == 'closed'), + 'Buy Goron Tunic': 2, + 'Buy Zora Tunic': 2 + }.get(item.name, int(item.advancement))) # place Deku Shields if needed, then tunics, then other advancement, then junk self.world.random.shuffle(shop_locations) for item in shop_items: self.world.itempool.remove(item) From 0c59ad7e22bc919467740ea013b242d0b2c0462e Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sat, 2 Oct 2021 11:28:07 -0500 Subject: [PATCH 43/46] OoT: reenable MQ dungeon support --- worlds/oot/Options.py | 10 +++++++++- worlds/oot/__init__.py | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/worlds/oot/Options.py b/worlds/oot/Options.py index eec8f506..88b6a68c 100644 --- a/worlds/oot/Options.py +++ b/worlds/oot/Options.py @@ -128,6 +128,14 @@ class LogicalChus(Toggle): displayname = "Bombchus Considered in Logic" +class MQDungeons(Range): + """Number of MQ dungeons. The dungeons to replace are randomly selected.""" + displayname = "Number of MQ Dungeons" + range_start = 0 + range_end = 12 + default = 0 + + world_options: typing.Dict[str, type(Option)] = { "starting_age": StartingAge, # "shuffle_interior_entrances": InteriorEntrances, @@ -141,7 +149,7 @@ world_options: typing.Dict[str, type(Option)] = { "triforce_goal": TriforceGoal, "extra_triforce_percentage": ExtraTriforces, "bombchus_in_logic": LogicalChus, - # "mq_dungeons": make_range(0, 12), + "mq_dungeons": MQDungeons, } diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 309913f8..dcf7a1d9 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -155,7 +155,6 @@ class OOTWorld(World): # Determine which dungeons are MQ # Possible future plan: allow user to pick which dungeons are MQ - self.mq_dungeons = 0 # temporary disable for client-side issues mq_dungeons = self.world.random.sample(dungeon_table, self.mq_dungeons) self.dungeon_mq = {item['name']: (item in mq_dungeons) for item in dungeon_table} From c937167a112460685d72f04c21820a8c21718f31 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 3 Oct 2021 14:40:25 +0200 Subject: [PATCH 44/46] Options: add option start_location_hints, works identical as start_hints, just for locations --- Main.py | 19 ++++++++++--------- Options.py | 5 +++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Main.py b/Main.py index f15c085e..f02aa155 100644 --- a/Main.py +++ b/Main.py @@ -278,6 +278,12 @@ def main(args, seed=None): for slot in world.player_ids: slot_data[slot] = world.worlds[slot].fill_slot_data() + def precollect_hint(location): + hint = NetUtils.Hint(location.item.player, location.player, location.address, + location.item.code, False) + precollected_hints[location.player].add(hint) + precollected_hints[location.item.player].add(hint) + locations_data: Dict[int, Dict[int, Tuple[int, int]]] = {player: {} for player in world.player_ids} for location in world.get_filled_locations(): if type(location.address) == int: @@ -285,16 +291,11 @@ def main(args, seed=None): assert location.item.code is not None locations_data[location.player][location.address] = location.item.code, location.item.player if location.player in sending_visible_players and location.item.player != location.player: - hint = NetUtils.Hint(location.item.player, location.player, location.address, - location.item.code, False) - precollected_hints[location.player].add(hint) - precollected_hints[location.item.player].add(hint) + precollect_hint(location) + elif location.name in world.start_location_hints[location.player]: + precollect_hint(location) elif location.item.name in world.start_hints[location.item.player]: - hint = NetUtils.Hint(location.item.player, location.player, location.address, - location.item.code, False, - er_hint_data.get(location.player, {}).get(location.address, "")) - precollected_hints[location.player].add(hint) - precollected_hints[location.item.player].add(hint) + precollect_hint(location) multidata = { "slot_data": slot_data, diff --git a/Options.py b/Options.py index 3b73aba3..ffc3b527 100644 --- a/Options.py +++ b/Options.py @@ -368,6 +368,10 @@ class StartHints(ItemSet): displayname = "Start Hints" +class StartLocationHints(OptionSet): + displayname = "Start Location Hints" + + class ExcludeLocations(OptionSet): """Prevent these locations from having an important item""" displayname = "Excluded Locations" @@ -379,6 +383,7 @@ per_game_common_options = { "non_local_items": NonLocalItems, "start_inventory": StartInventory, "start_hints": StartHints, + "start_location_hints": StartLocationHints, "exclude_locations": OptionSet } From 96d7277a226ebb2b5ad7cb577b43bfd4feef00ea Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Sun, 3 Oct 2021 12:37:06 +0200 Subject: [PATCH 45/46] Fixed Timespinner routing + some typing --- worlds/timespinner/Regions.py | 7 ++++--- worlds/timespinner/__init__.py | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index 92856b27..863f7339 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -47,7 +47,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connectStartingRegion(world, player) - names = {} + names: Dict[str, int] = {} connect(world, player, names, 'Lake desolation', 'Lower lake desolation', lambda state: state._timespinner_has_timestop(world, player or state.has('Talaria Attachment', player))) connect(world, player, names, 'Lake desolation', 'Upper lake desolation', lambda state: state._timespinner_has_fire(world, player) and state.can_reach('Upper Lake Sirine', 'Region', player)) @@ -60,7 +60,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Lower lake desolation', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Libary', 'Lower lake desolation') connect(world, player, names, 'Libary', 'Libary top', lambda state: state._timespinner_has_doublejump(world, player) or state.has('Talaria Attachment', player)) - connect(world, player, names, 'Libary', 'Varndagroth tower left', lambda state: state._timespinner_has_keycard_C(world, player)) + connect(world, player, names, 'Libary', 'Varndagroth tower left', lambda state: state._timespinner_has_keycard_D(world, player)) connect(world, player, names, 'Libary', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Libary top', 'Libary') connect(world, player, names, 'Varndagroth tower left', 'Libary') @@ -149,6 +149,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Space time continuum', 'Caves of Banishment (Maw)', lambda state: pyramid_keys_unlock == "GateMaw") connect(world, player, names, 'Space time continuum', 'Caves of Banishment (upper)', lambda state: pyramid_keys_unlock == "GateCavesOfBanishment") + def create_location(player: int, name: str, id: Optional[int], region: Region, rule: Callable, location_cache: List[Location]) -> Location: location = Location(player, name, id, region) location.access_rule = rule @@ -197,7 +198,7 @@ def connectStartingRegion(world: MultiWorld, player: int): space_time_continuum.exits.append(teleport_back_to_start) -def connect(world: MultiWorld, player: int, used_names : Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): +def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): sourceRegion = world.get_region(source, player) targetRegion = world.get_region(target, player) diff --git a/worlds/timespinner/__init__.py b/worlds/timespinner/__init__.py index 2adb3ca0..cf7e75dc 100644 --- a/worlds/timespinner/__init__.py +++ b/worlds/timespinner/__init__.py @@ -64,8 +64,8 @@ class TimespinnerWorld(World): self.world.itempool += pool - def fill_slot_data(self) -> Dict: - slot_data = {} + def fill_slot_data(self) -> Dict[str, object]: + slot_data: Dict[str, object] = {} for option_name in timespinner_options: slot_data[option_name] = is_option_enabled(self.world, self.player, option_name) @@ -85,7 +85,7 @@ def create_item(name: str, player: int) -> Item: def get_excluded_items_based_on_options(world: MultiWorld, player: int) -> List[str]: - excluded_items = [] + excluded_items: List[str] = [] if is_option_enabled(world, player, "StartWithJewelryBox"): excluded_items.append('Jewelry Box') From 46e9fd7ae32bb9eb7f12097e1580a477c7aa6997 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 3 Oct 2021 17:22:47 +0200 Subject: [PATCH 46/46] Rules.py: add typing info --- worlds/generic/Rules.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/worlds/generic/Rules.py b/worlds/generic/Rules.py index cc07d491..ed9b5542 100644 --- a/worlds/generic/Rules.py +++ b/worlds/generic/Rules.py @@ -1,4 +1,16 @@ -def locality_rules(world, player): +import typing + +if typing.TYPE_CHECKING: + import BaseClasses + + CollectionRule = typing.Callable[[BaseClasses.CollectionState], bool] + ItemRule = typing.Callable[[BaseClasses.Item], bool] +else: + CollectionRule = typing.Callable[[object], bool] + ItemRule = typing.Callable[[object], bool] + + +def locality_rules(world, player: int): if world.local_items[player].value: for location in world.get_locations(): if location.player != player: @@ -9,18 +21,18 @@ def locality_rules(world, player): forbid_items_for_player(location, world.non_local_items[player].value, player) -def exclusion_rules(world, player: int, exclude_locations: set): +def exclusion_rules(world, player: int, exclude_locations: typing.Set[str]): for loc_name in exclude_locations: location = world.get_location(loc_name, player) add_item_rule(location, lambda i: not (i.advancement or i.never_exclude)) location.excluded = True -def set_rule(spot, rule): +def set_rule(spot, rule: CollectionRule): spot.access_rule = rule -def add_rule(spot, rule, combine='and'): +def add_rule(spot, rule: CollectionRule, combine='and'): old_rule = spot.access_rule if combine == 'or': spot.access_rule = lambda state: rule(state) or old_rule(state) @@ -28,36 +40,36 @@ def add_rule(spot, rule, combine='and'): spot.access_rule = lambda state: rule(state) and old_rule(state) -def forbid_item(location, item, player: int): +def forbid_item(location, item: str, player: int): old_rule = location.item_rule location.item_rule = lambda i: (i.name != item or i.player != player) and old_rule(i) -def forbid_items_for_player(location, items: set, player: int): +def forbid_items_for_player(location, items: typing.Set[str], player: int): old_rule = location.item_rule location.item_rule = lambda i: (i.player != player or i.name not in items) and old_rule(i) -def forbid_items(location, items: set): +def forbid_items(location, items: typing.Set[str]): """unused, but kept as a debugging tool.""" old_rule = location.item_rule location.item_rule = lambda i: i.name not in items and old_rule(i) -def add_item_rule(location, rule): +def add_item_rule(location, rule: ItemRule): old_rule = location.item_rule location.item_rule = lambda item: rule(item) and old_rule(item) -def item_in_locations(state, item, player, locations): +def item_in_locations(state, item: str, player: int, locations: typing.Sequence): for location in locations: if item_name(state, location[0], location[1]) == (item, player): return True return False -def item_name(state, location, player): +def item_name(state, location: str, player: int) -> typing.Optional[typing.Tuple[str, int]]: location = state.world.get_location(location, player) if location.item is None: return None - return (location.item.name, location.item.player) \ No newline at end of file + return location.item.name, location.item.player