diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 4d0ceaec87a4..c86d63724317 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -37,4 +37,4 @@ jobs: python ModuleUpdate.py --yes --force --append "WebHostLib/requirements.txt" - name: Unittests run: | - pytest test + pytest diff --git a/BaseClasses.py b/BaseClasses.py index 8327dbeb9ce6..0989999d398c 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -1369,6 +1369,157 @@ def parse_data(self): self.bosses[str(player)]["Ganons Tower"] = "Agahnim 2" self.bosses[str(player)]["Ganon"] = "Ganon" + def create_playthrough(self, create_paths: bool = True): + """Destructive to the world while it is run, damage gets repaired afterwards.""" + from itertools import chain + # get locations containing progress items + multiworld = self.multiworld + prog_locations = {location for location in multiworld.get_filled_locations() if location.item.advancement} + state_cache = [None] + collection_spheres: List[Set[Location]] = [] + state = CollectionState(multiworld) + sphere_candidates = set(prog_locations) + logging.debug('Building up collection spheres.') + while sphere_candidates: + + # build up spheres of collection radius. + # Everything in each sphere is independent from each other in dependencies and only depends on lower spheres + + sphere = {location for location in sphere_candidates if state.can_reach(location)} + + for location in sphere: + state.collect(location.item, True, location) + + sphere_candidates -= sphere + collection_spheres.append(sphere) + state_cache.append(state.copy()) + + logging.debug('Calculated sphere %i, containing %i of %i progress items.', len(collection_spheres), + len(sphere), + len(prog_locations)) + if not sphere: + logging.debug('The following items could not be reached: %s', ['%s (Player %d) at %s (Player %d)' % ( + location.item.name, location.item.player, location.name, location.player) for location in + sphere_candidates]) + if any([multiworld.accessibility[location.item.player] != 'minimal' for location in sphere_candidates]): + raise RuntimeError(f'Not all progression items reachable ({sphere_candidates}). ' + f'Something went terribly wrong here.') + else: + self.unreachables = sphere_candidates + break + + # in the second phase, we cull each sphere such that the game is still beatable, + # reducing each range of influence to the bare minimum required inside it + restore_later = {} + for num, sphere in reversed(tuple(enumerate(collection_spheres))): + to_delete = set() + for location in sphere: + # we remove the item at location and check if game is still beatable + logging.debug('Checking if %s (Player %d) is required to beat the game.', location.item.name, + location.item.player) + old_item = location.item + location.item = None + if multiworld.can_beat_game(state_cache[num]): + to_delete.add(location) + restore_later[location] = old_item + else: + # still required, got to keep it around + location.item = old_item + + # cull entries in spheres for spoiler walkthrough at end + sphere -= to_delete + + # second phase, sphere 0 + removed_precollected = [] + for item in (i for i in chain.from_iterable(multiworld.precollected_items.values()) if i.advancement): + logging.debug('Checking if %s (Player %d) is required to beat the game.', item.name, item.player) + multiworld.precollected_items[item.player].remove(item) + multiworld.state.remove(item) + if not multiworld.can_beat_game(): + multiworld.push_precollected(item) + else: + removed_precollected.append(item) + + # we are now down to just the required progress items in collection_spheres. Unfortunately + # the previous pruning stage could potentially have made certain items dependant on others + # in the same or later sphere (because the location had 2 ways to access but the item originally + # used to access it was deemed not required.) So we need to do one final sphere collection pass + # to build up the correct spheres + + required_locations = {item for sphere in collection_spheres for item in sphere} + state = CollectionState(multiworld) + collection_spheres = [] + while required_locations: + state.sweep_for_events(key_only=True) + + sphere = set(filter(state.can_reach, required_locations)) + + for location in sphere: + state.collect(location.item, True, location) + + required_locations -= sphere + + collection_spheres.append(sphere) + + logging.debug('Calculated final sphere %i, containing %i of %i progress items.', len(collection_spheres), + len(sphere), len(required_locations)) + if not sphere: + raise RuntimeError(f'Not all required items reachable. Unreachable locations: {required_locations}') + + # we can finally output our playthrough + self.playthrough = {"0": sorted([str(item) for item in + chain.from_iterable(multiworld.precollected_items.values()) + if item.advancement])} + + for i, sphere in enumerate(collection_spheres): + self.playthrough[str(i + 1)] = { + str(location): str(location.item) for location in sorted(sphere)} + if create_paths: + self.create_paths(state, collection_spheres) + + # repair the multiworld again + for location, item in restore_later.items(): + location.item = item + + for item in removed_precollected: + multiworld.push_precollected(item) + + def create_paths(self, state: CollectionState, collection_spheres: List[Set[Location]]): + from itertools import zip_longest + multiworld = self.multiworld + + def flist_to_iter(node): + while node: + value, node = node + yield value + + def get_path(state, region): + reversed_path_as_flist = state.path.get(region, (region, None)) + string_path_flat = reversed(list(map(str, flist_to_iter(reversed_path_as_flist)))) + # Now we combine the flat string list into (region, exit) pairs + pathsiter = iter(string_path_flat) + pathpairs = zip_longest(pathsiter, pathsiter) + return list(pathpairs) + + self.paths = {} + topology_worlds = (player for player in multiworld.player_ids if multiworld.worlds[player].topology_present) + for player in topology_worlds: + self.paths.update( + {str(location): get_path(state, location.parent_region) + for sphere in collection_spheres for location in sphere + if location.player == player}) + if player in multiworld.get_game_players("A Link to the Past"): + # If Pyramid Fairy Entrance needs to be reached, also path to Big Bomb Shop + # Maybe move the big bomb over to the Event system instead? + if any(exit_path == 'Pyramid Fairy' for path in self.paths.values() + for (_, exit_path) in path): + if multiworld.mode[player] != 'inverted': + self.paths[str(multiworld.get_region('Big Bomb Shop', player))] = \ + get_path(state, multiworld.get_region('Big Bomb Shop', player)) + else: + self.paths[str(multiworld.get_region('Inverted Big Bomb Shop', player))] = \ + get_path(state, multiworld.get_region('Inverted Big Bomb Shop', player)) + def to_json(self): self.parse_data() out = OrderedDict() diff --git a/Main.py b/Main.py index f059f335b06e..78da52854536 100644 --- a/Main.py +++ b/Main.py @@ -1,5 +1,4 @@ import collections -from itertools import zip_longest, chain import logging import os import time @@ -417,7 +416,7 @@ def precollect_hint(location): if args.spoiler > 1: logger.info('Calculating playthrough.') - create_playthrough(world) + world.spoiler.create_playthrough(create_paths=args.spoiler > 2) if args.spoiler: world.spoiler.to_file(os.path.join(temp_dir, '%s_Spoiler.txt' % outfilebase)) @@ -431,143 +430,3 @@ def precollect_hint(location): logger.info('Done. Enjoy. Total Time: %s', time.perf_counter() - start) return world - - -def create_playthrough(world): - """Destructive to the world while it is run, damage gets repaired afterwards.""" - # get locations containing progress items - prog_locations = {location for location in world.get_filled_locations() if location.item.advancement} - state_cache = [None] - collection_spheres = [] - state = CollectionState(world) - sphere_candidates = set(prog_locations) - logging.debug('Building up collection spheres.') - while sphere_candidates: - - # build up spheres of collection radius. - # Everything in each sphere is independent from each other in dependencies and only depends on lower spheres - - sphere = {location for location in sphere_candidates if state.can_reach(location)} - - for location in sphere: - state.collect(location.item, True, location) - - sphere_candidates -= sphere - collection_spheres.append(sphere) - state_cache.append(state.copy()) - - logging.debug('Calculated sphere %i, containing %i of %i progress items.', len(collection_spheres), len(sphere), - len(prog_locations)) - if not sphere: - logging.debug('The following items could not be reached: %s', ['%s (Player %d) at %s (Player %d)' % ( - location.item.name, location.item.player, location.name, location.player) for location in - sphere_candidates]) - if any([world.accessibility[location.item.player] != 'minimal' for location in sphere_candidates]): - raise RuntimeError(f'Not all progression items reachable ({sphere_candidates}). ' - f'Something went terribly wrong here.') - else: - world.spoiler.unreachables = sphere_candidates - break - - # in the second phase, we cull each sphere such that the game is still beatable, - # reducing each range of influence to the bare minimum required inside it - restore_later = {} - for num, sphere in reversed(tuple(enumerate(collection_spheres))): - to_delete = set() - for location in sphere: - # we remove the item at location and check if game is still beatable - logging.debug('Checking if %s (Player %d) is required to beat the game.', location.item.name, - location.item.player) - old_item = location.item - location.item = None - if world.can_beat_game(state_cache[num]): - to_delete.add(location) - restore_later[location] = old_item - else: - # still required, got to keep it around - location.item = old_item - - # cull entries in spheres for spoiler walkthrough at end - sphere -= to_delete - - # second phase, sphere 0 - removed_precollected = [] - for item in (i for i in chain.from_iterable(world.precollected_items.values()) if i.advancement): - logging.debug('Checking if %s (Player %d) is required to beat the game.', item.name, item.player) - world.precollected_items[item.player].remove(item) - world.state.remove(item) - if not world.can_beat_game(): - world.push_precollected(item) - else: - removed_precollected.append(item) - - # we are now down to just the required progress items in collection_spheres. Unfortunately - # the previous pruning stage could potentially have made certain items dependant on others - # in the same or later sphere (because the location had 2 ways to access but the item originally - # used to access it was deemed not required.) So we need to do one final sphere collection pass - # to build up the correct spheres - - required_locations = {item for sphere in collection_spheres for item in sphere} - state = CollectionState(world) - collection_spheres = [] - while required_locations: - state.sweep_for_events(key_only=True) - - sphere = set(filter(state.can_reach, required_locations)) - - for location in sphere: - state.collect(location.item, True, location) - - required_locations -= sphere - - collection_spheres.append(sphere) - - logging.debug('Calculated final sphere %i, containing %i of %i progress items.', len(collection_spheres), - len(sphere), len(required_locations)) - if not sphere: - raise RuntimeError(f'Not all required items reachable. Unreachable locations: {required_locations}') - - def flist_to_iter(node): - while node: - value, node = node - yield value - - def get_path(state, region): - reversed_path_as_flist = state.path.get(region, (region, None)) - string_path_flat = reversed(list(map(str, flist_to_iter(reversed_path_as_flist)))) - # Now we combine the flat string list into (region, exit) pairs - pathsiter = iter(string_path_flat) - pathpairs = zip_longest(pathsiter, pathsiter) - return list(pathpairs) - - world.spoiler.paths = {} - topology_worlds = (player for player in world.player_ids if world.worlds[player].topology_present) - for player in topology_worlds: - world.spoiler.paths.update( - {str(location): get_path(state, location.parent_region) for sphere in collection_spheres for location in - sphere if location.player == player}) - if player in world.get_game_players("A Link to the Past"): - # If Pyramid Fairy Entrance needs to be reached, also path to Big Bomb Shop - # Maybe move the big bomb over to the Event system instead? - if any(exit_path == 'Pyramid Fairy' for path in world.spoiler.paths.values() for (_, exit_path) in path): - if world.mode[player] != 'inverted': - world.spoiler.paths[str(world.get_region('Big Bomb Shop', player))] = \ - get_path(state, world.get_region('Big Bomb Shop', player)) - else: - world.spoiler.paths[str(world.get_region('Inverted Big Bomb Shop', player))] = \ - get_path(state, world.get_region('Inverted Big Bomb Shop', player)) - - # we can finally output our playthrough - world.spoiler.playthrough = {"0": sorted([str(item) for item in - chain.from_iterable(world.precollected_items.values()) - if item.advancement])} - - for i, sphere in enumerate(collection_spheres): - world.spoiler.playthrough[str(i + 1)] = {str(location): str(location.item) for location in sorted(sphere)} - - # repair the world again - for location, item in restore_later.items(): - location.item = item - - for item in removed_precollected: - world.push_precollected(item) diff --git a/OoTAdjuster.py b/OoTAdjuster.py index 1010cb70225e..c2df9b074e3a 100644 --- a/OoTAdjuster.py +++ b/OoTAdjuster.py @@ -3,6 +3,7 @@ import logging import random import os +import zipfile from itertools import chain from BaseClasses import MultiWorld @@ -217,13 +218,18 @@ def adjust(args): # Load up the ROM rom = Rom(file=args.rom, force_use=True) delete_zootdec = True - elif os.path.splitext(args.rom)[-1] == '.apz5': + elif os.path.splitext(args.rom)[-1] in ['.apz5', '.zpf']: # Load vanilla ROM rom = Rom(file=args.vanilla_rom, force_use=True) + apz5_file = args.rom + base_name = os.path.splitext(apz5_file)[0] # Patch file - apply_patch_file(rom, args.rom) + apply_patch_file(rom, apz5_file, + sub_file=(os.path.basename(base_name) + '.zpf' + if zipfile.is_zipfile(apz5_file) + else None)) else: - raise Exception("Invalid file extension; requires .n64, .z64, .apz5") + raise Exception("Invalid file extension; requires .n64, .z64, .apz5, .zpf") # Call patch_cosmetics try: patch_cosmetics(ootworld, rom) diff --git a/OoTClient.py b/OoTClient.py index de428c73e22b..696bf390160f 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -3,6 +3,7 @@ import os import multiprocessing import subprocess +import zipfile from asyncio import StreamReader, StreamWriter # CommonClient import first to trigger ModuleUpdater @@ -50,7 +51,7 @@ oot_loc_name_to_id = network_data_package["games"]["Ocarina of Time"]["location_name_to_id"] -script_version: int = 2 +script_version: int = 3 def get_item_value(ap_id): return ap_id - 66000 @@ -85,6 +86,9 @@ def __init__(self, server_address, password): self.n64_status = CONNECTION_INITIAL_STATUS self.awaiting_rom = False self.location_table = {} + self.collectible_table = {} + self.collectible_override_flags_address = 0 + self.collectible_offsets = {} self.deathlink_enabled = False self.deathlink_pending = False self.deathlink_sent_this_death = False @@ -117,6 +121,13 @@ class OoTManager(GameManager): self.ui = OoTManager(self) self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + def on_package(self, cmd, args): + if cmd == 'Connected': + slot_data = args.get('slot_data', None) + if slot_data: + self.collectible_override_flags_address = slot_data.get('collectible_override_flags', 0) + self.collectible_offsets = slot_data.get('collectible_flag_offsets', {}) + def get_payload(ctx: OoTContext): if ctx.deathlink_enabled and ctx.deathlink_pending: @@ -125,11 +136,14 @@ def get_payload(ctx: OoTContext): else: trigger_death = False - return json.dumps({ + payload = json.dumps({ "items": [get_item_value(item.item) for item in ctx.items_received], "playerNames": [name for (i, name) in ctx.player_names.items() if i != 0], - "triggerDeath": trigger_death + "triggerDeath": trigger_death, + "collectibleOverrides": ctx.collectible_override_flags_address, + "collectibleOffsets": ctx.collectible_offsets }) + return payload async def parse_payload(payload: dict, ctx: OoTContext, force: bool): @@ -141,6 +155,7 @@ async def parse_payload(payload: dict, ctx: OoTContext, force: bool): ctx.deathlink_client_override = False ctx.finished_game = False ctx.location_table = {} + ctx.collectible_table = {} ctx.deathlink_pending = False ctx.deathlink_sent_this_death = False ctx.auth = payload['playerName'] @@ -161,11 +176,17 @@ async def parse_payload(payload: dict, ctx: OoTContext, force: bool): ctx.finished_game = True # Locations handling - if ctx.location_table != payload['locations']: - ctx.location_table = payload['locations'] + locations = payload['locations'] + collectibles = payload['collectibles'] + + if ctx.location_table != locations or ctx.collectible_table != collectibles: + ctx.location_table = locations + ctx.collectible_table = collectibles + locs1 = [oot_loc_name_to_id[loc] for loc, b in ctx.location_table.items() if b] + locs2 = [int(loc) for loc, b in ctx.collectible_table.items() if b] await ctx.send_msgs([{ "cmd": "LocationChecks", - "locations": [oot_loc_name_to_id[loc] for loc in ctx.location_table if ctx.location_table[loc]] + "locations": locs1 + locs2 }]) # Deathlink handling @@ -191,13 +212,6 @@ async def n64_sync_task(ctx: OoTContext): try: await asyncio.wait_for(writer.drain(), timeout=1.5) try: - # Data will return a dict with up to six fields: - # 1. str: player name (always) - # 2. int: script version (always) - # 3. bool: deathlink active (always) - # 4. dict[str, bool]: checked locations - # 5. bool: whether Link is currently at 0 HP - # 6. bool: whether the game currently registers as complete data = await asyncio.wait_for(reader.readline(), timeout=10) data_decoded = json.loads(data.decode()) reported_version = data_decoded.get('scriptVersion', 0) @@ -270,12 +284,16 @@ async def run_game(romfile): async def patch_and_run_game(apz5_file): + apz5_file = os.path.abspath(apz5_file) base_name = os.path.splitext(apz5_file)[0] decomp_path = base_name + '-decomp.z64' comp_path = base_name + '.z64' # Load vanilla ROM, patch file, compress ROM rom = Rom(Utils.local_path(Utils.get_options()["oot_options"]["rom_file"])) - apply_patch_file(rom, apz5_file) + apply_patch_file(rom, apz5_file, + sub_file=(os.path.basename(base_name) + '.zpf' + if zipfile.is_zipfile(apz5_file) + else None)) rom.write_to_file(decomp_path) os.chdir(data_path("Compress")) compress_rom_file(decomp_path, comp_path) diff --git a/PokemonClient.py b/PokemonClient.py index d5f6e09fc6a8..eb1f1243913b 100644 --- a/PokemonClient.py +++ b/PokemonClient.py @@ -15,6 +15,7 @@ get_base_parser from worlds.pokemon_rb.locations import location_data +from worlds.pokemon_rb.rom import RedDeltaPatch, BlueDeltaPatch location_map = {"Rod": {}, "EventFlag": {}, "Missable": {}, "Hidden": {}, "list": {}} location_bytes_bits = {} @@ -265,8 +266,16 @@ async def run_game(romfile): async def patch_and_run_game(game_version, patch_file, ctx): base_name = os.path.splitext(patch_file)[0] comp_path = base_name + '.gb' - with open(Utils.local_path(Utils.get_options()["pokemon_rb_options"][f"{game_version}_rom_file"]), "rb") as stream: - base_rom = bytes(stream.read()) + if game_version == "blue": + delta_patch = BlueDeltaPatch + else: + delta_patch = RedDeltaPatch + + try: + base_rom = delta_patch.get_source_data() + except Exception as msg: + logger.info(msg, extra={'compact_gui': True}) + ctx.gui_error('Error', msg) with zipfile.ZipFile(patch_file, 'r') as patch_archive: with patch_archive.open('delta.bsdiff4', 'r') as stream: diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 7431b6ea6198..de26cc151264 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -639,6 +639,13 @@ def request_unfinished_missions(ctx: SC2Context): _, unfinished_missions = calc_unfinished_missions(ctx, unlocks=unlocks) + # Removing All-In from location pool + final_mission = lookup_id_to_mission[ctx.final_mission] + if final_mission in unfinished_missions.keys(): + message = f"Final Mission Available: {final_mission}[{ctx.final_mission}]\n" + message + if unfinished_missions[final_mission] == -1: + unfinished_missions.pop(final_mission) + message += ", ".join(f"{mark_up_mission_name(ctx, mission, unlocks)}[{ctx.mission_req_table[mission].id}] " + mark_up_objectives( f"[{len(unfinished_missions[mission])}/" diff --git a/Utils.py b/Utils.py index 4694864142aa..fd6435d6aa43 100644 --- a/Utils.py +++ b/Utils.py @@ -99,7 +99,7 @@ def local_path(*path: str) -> str: local_path.cached_path = os.path.dirname(os.path.abspath(sys.argv[0])) else: import __main__ - if hasattr(__main__, "__file__"): + if hasattr(__main__, "__file__") and os.path.isfile(__main__.__file__): # we are running in a normal Python environment local_path.cached_path = os.path.dirname(os.path.abspath(__main__.__file__)) else: @@ -273,7 +273,7 @@ def get_default_options() -> OptionsType: "players": 0, "weights_file_path": "weights.yaml", "meta_file_path": "meta.yaml", - "spoiler": 2, + "spoiler": 3, "glitch_triforce_room": 1, "race": 0, "plando_options": "bosses", diff --git a/WebHostLib/downloads.py b/WebHostLib/downloads.py index 053fa35ce418..d9600d2d16d1 100644 --- a/WebHostLib/downloads.py +++ b/WebHostLib/downloads.py @@ -72,7 +72,14 @@ def download_slot_file(room_id, player_id: int): if name.endswith("info.json"): fname = name.rsplit("/", 1)[0] + ".zip" elif slot_data.game == "Ocarina of Time": - fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_P{slot_data.player_id}_{slot_data.player_name}.apz5" + stream = io.BytesIO(slot_data.data) + if zipfile.is_zipfile(stream): + with zipfile.ZipFile(stream) as zf: + for name in zf.namelist(): + if name.endswith(".zpf"): + fname = name.rsplit(".", 1)[0] + ".apz5" + else: # pre-ootr-7.0 support + fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_P{slot_data.player_id}_{slot_data.player_name}.apz5" elif slot_data.game == "VVVVVV": fname = f"AP_{app.jinja_env.filters['suuid'](room_id)}_SP.apv6" elif slot_data.game == "Zillion": diff --git a/WebHostLib/generate.py b/WebHostLib/generate.py index c229698c4957..6a2c720a5d5a 100644 --- a/WebHostLib/generate.py +++ b/WebHostLib/generate.py @@ -114,7 +114,7 @@ def task(): erargs = parse_arguments(['--multi', str(playercount)]) erargs.seed = seed erargs.name = {x: "" for x in range(1, playercount + 1)} # only so it can be overwritten in mystery - erargs.spoiler = 0 if race else 2 + erargs.spoiler = 0 if race else 3 erargs.race = race erargs.outputname = seedname erargs.outputpath = target.name diff --git a/WebHostLib/static/assets/sc2wolTracker.js b/WebHostLib/static/assets/sc2wolTracker.js new file mode 100644 index 000000000000..a698214b8dd6 --- /dev/null +++ b/WebHostLib/static/assets/sc2wolTracker.js @@ -0,0 +1,49 @@ +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 in the location-table + let counters = document.getElementsByClassName('counter'); + const fakeCounters = fakeDOM.getElementsByClassName('counter'); + 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/static/styles/ootTracker.css b/WebHostLib/static/styles/ootTracker.css index ec3cc1ad9903..697b5ac0c429 100644 --- a/WebHostLib/static/styles/ootTracker.css +++ b/WebHostLib/static/styles/ootTracker.css @@ -9,7 +9,7 @@ border-top-left-radius: 4px; border-top-right-radius: 4px; padding: 3px 3px 10px; - width: 448px; + width: 480px; background-color: rgb(60, 114, 157); } @@ -46,7 +46,7 @@ } #location-table{ - width: 448px; + width: 480px; border-left: 2px solid #000000; border-right: 2px solid #000000; border-bottom: 2px solid #000000; @@ -108,7 +108,7 @@ } #location-table td:first-child { - width: 272px; + width: 300px; } .location-category td:first-child { diff --git a/WebHostLib/static/styles/sc2wolTracker.css b/WebHostLib/static/styles/sc2wolTracker.css new file mode 100644 index 000000000000..b68668ecf60e --- /dev/null +++ b/WebHostLib/static/styles/sc2wolTracker.css @@ -0,0 +1,110 @@ +#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: 500px; + background-color: #525494; +} + +#inventory-table td{ + width: 40px; + height: 40px; + text-align: center; + vertical-align: middle; +} + +#inventory-table td.title{ + padding-top: 10px; + height: 20px; + font-family: "JuraBook", monospace; + font-size: 16px; + font-weight: bold; +} + +#inventory-table img{ + height: 100%; + max-width: 40px; + max-height: 40px; + border: 1px solid #000000; + filter: grayscale(100%) contrast(75%) brightness(20%); +} + +#inventory-table img.acquired{ + filter: none; +} + +#inventory-table div.counted-item { + position: relative; +} + +#inventory-table div.item-count { + text-align: left; + color: black; + font-family: "JuraBook", monospace; + font-weight: bold; +} + +#location-table{ + width: 500px; + 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: #525494; + padding: 10px 3px 3px; + font-family: "JuraBook", monospace; + font-size: 16px; + font-weight: bold; + 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: 14px; +} + +#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: 16px; +} + +#location-table td.location-name { + padding-left: 16px; +} + +.hide { + display: none; +} diff --git a/WebHostLib/templates/sc2wolTracker.html b/WebHostLib/templates/sc2wolTracker.html new file mode 100644 index 000000000000..a55ea6390515 --- /dev/null +++ b/WebHostLib/templates/sc2wolTracker.html @@ -0,0 +1,233 @@ + + + + {{ player_name }}'s Tracker + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Starting Resources +
+{{ minerals_count }}
+{{ vespene_count }}
+ Weapon & Armor Upgrades +
+ Base +
 
+ Infantry +
+ Vehicles +
+ Starships +
+ Dominion +
+ Mercenaries +
+ Lab Upgrades +
+ Protoss Units +
+ + {% for area in checks_in_area %} + {% if checks_in_area[area] > 0 %} + + + + + + {% for location in location_info[area] %} + + + + + {% endfor %} + + {% endif %} + {% endfor %} +
{{ area }} {{'▼' if area != 'Total'}}{{ 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 9528f4dc6fb0..dd823c8ed702 100644 --- a/WebHostLib/tracker.py +++ b/WebHostLib/tracker.py @@ -636,43 +636,47 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in # 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 Ground": (67597, 67635), - "Thieves' Hideout": (67259, 67263), - "Ganon's Castle": (67636, 67673), + "Overworld": ((67000, 67258), (67264, 67280), (67747, 68024), (68054, 68062)), + "Deku Tree": ((67281, 67303), (68063, 68077)), + "Dodongo's Cavern": ((67304, 67334), (68078, 68160)), + "Jabu Jabu's Belly": ((67335, 67359), (68161, 68188)), + "Bottom of the Well": ((67360, 67384), (68189, 68230)), + "Forest Temple": ((67385, 67420), (68231, 68281)), + "Fire Temple": ((67421, 67457), (68282, 68350)), + "Water Temple": ((67458, 67484), (68351, 68483)), + "Shadow Temple": ((67485, 67532), (68484, 68565)), + "Spirit Temple": ((67533, 67582), (68566, 68625)), + "Ice Cavern": ((67583, 67596), (68626, 68649)), + "Gerudo Training Ground": ((67597, 67635), (68650, 68656)), + "Thieves' Hideout": ((67259, 67263), (68025, 68053)), + "Ganon's Castle": ((67636, 67673), (68657, 68705)), } 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 'Ganons Tower' in full_name: + return full_name if area not in ["Overworld", "Thieves' Hideout"]: # trim dungeon name. leaves an extra space that doesn't display, or trims fully for DC/Jabu/GC return full_name[len(area):] return full_name checked_locations = multisave.get("location_checks", {}).get((team, player), set()).intersection(set(locations[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[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[player]]) - for area, (min_id, max_id) in area_id_ranges.items()} - - # Remove Thieves' Hideout checks from Overworld, since it's in the middle of the range - checks_in_area["Overworld"] -= checks_in_area["Thieves' Hideout"] - checks_done["Overworld"] -= checks_done["Thieves' Hideout"] - for loc in location_info["Thieves' Hideout"]: - del location_info["Overworld"][loc] + location_info = {} + checks_done = {} + checks_in_area = {} + for area, ranges in area_id_ranges.items(): + location_info[area] = {} + checks_done[area] = 0 + checks_in_area[area] = 0 + for r in ranges: + min_id, max_id = r + for id in range(min_id, max_id+1): + if id in locations[player]: + checked = id in checked_locations + location_info[area][lookup_and_trim(id, area)] = checked + checks_in_area[area] += 1 + checks_done[area] += checked checks_done['Total'] = sum(checks_done.values()) checks_in_area['Total'] = sum(checks_in_area.values()) @@ -683,25 +687,28 @@ def lookup_and_trim(id, area): if "GS" in lookup_and_trim(id, ''): display_data["token_count"] += 1 + oot_y = '✔' + oot_x = '✕' + # 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 Ground": inventory[66181], - "Thieves' Hideout": inventory[66182], - "Ganon's Castle": inventory[66183], + "Forest Temple": oot_y if inventory[66203] else inventory[66175], + "Fire Temple": oot_y if inventory[66204] else inventory[66176], + "Water Temple": oot_y if inventory[66205] else inventory[66177], + "Spirit Temple": oot_y if inventory[66206] else inventory[66178], + "Shadow Temple": oot_y if inventory[66207] else inventory[66179], + "Bottom of the Well": oot_y if inventory[66208] else inventory[66180], + "Gerudo Training Ground": oot_y if inventory[66209] else inventory[66181], + "Thieves' Hideout": oot_y if inventory[66210] else inventory[66182], + "Ganon's Castle": oot_y if inventory[66211] else 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 '✕', + "Forest Temple": oot_y if inventory[66149] else oot_x, + "Fire Temple": oot_y if inventory[66150] else oot_x, + "Water Temple": oot_y if inventory[66151] else oot_x, + "Spirit Temple": oot_y if inventory[66152] else oot_x, + "Shadow Temple": oot_y if inventory[66153] else oot_x, + "Ganon's Castle": oot_y if inventory[66154] else oot_x, } # Victory condition @@ -922,6 +929,250 @@ def __renderSuperMetroidTracker(multisave: Dict[str, Any], room: Room, locations checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, **display_data) +def __renderSC2WoLTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], + inventory: Counter, team: int, player: int, playerName: str, + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict) -> str: + + SC2WOL_LOC_ID_OFFSET = 1000 + SC2WOL_ITEM_ID_OFFSET = 1000 + + icons = { + "Starting Minerals": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/icons/icon-mineral-protoss.png", + "Starting Vespene": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/icons/icon-gas-terran.png", + "Starting Supply": "https://static.wikia.nocookie.net/starcraft/images/d/d3/TerranSupply_SC2_Icon1.gif", + + "Infantry Weapons Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryweaponslevel1.png", + "Infantry Weapons Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryweaponslevel2.png", + "Infantry Weapons Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryweaponslevel3.png", + "Infantry Armor Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryarmorlevel1.png", + "Infantry Armor Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryarmorlevel2.png", + "Infantry Armor Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-infantryarmorlevel3.png", + "Vehicle Weapons Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleweaponslevel1.png", + "Vehicle Weapons Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleweaponslevel2.png", + "Vehicle Weapons Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleweaponslevel3.png", + "Vehicle Armor Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleplatinglevel1.png", + "Vehicle Armor Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleplatinglevel2.png", + "Vehicle Armor Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-vehicleplatinglevel3.png", + "Ship Weapons Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipweaponslevel1.png", + "Ship Weapons Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipweaponslevel2.png", + "Ship Weapons Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipweaponslevel3.png", + "Ship Armor Level 1": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipplatinglevel1.png", + "Ship Armor Level 2": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipplatinglevel2.png", + "Ship Armor Level 3": "https://sclegacy.com/images/uploaded/starcraftii_beta/gamefiles/upgrades/btn-upgrade-terran-shipplatinglevel3.png", + + "Bunker": "https://static.wikia.nocookie.net/starcraft/images/c/c5/Bunker_SC2_Icon1.jpg", + "Missile Turret": "https://static.wikia.nocookie.net/starcraft/images/5/5f/MissileTurret_SC2_Icon1.jpg", + "Sensor Tower": "https://static.wikia.nocookie.net/starcraft/images/d/d2/SensorTower_SC2_Icon1.jpg", + + "Projectile Accelerator (Bunker)": "https://0rganics.org/archipelago/sc2wol/ProjectileAccelerator.png", + "Neosteel Bunker (Bunker)": "https://0rganics.org/archipelago/sc2wol/NeosteelBunker.png", + "Titanium Housing (Missile Turret)": "https://0rganics.org/archipelago/sc2wol/TitaniumHousing.png", + "Hellstorm Batteries (Missile Turret)": "https://0rganics.org/archipelago/sc2wol/HellstormBatteries.png", + "Advanced Construction (SCV)": "https://0rganics.org/archipelago/sc2wol/AdvancedConstruction.png", + "Dual-Fusion Welders (SCV)": "https://0rganics.org/archipelago/sc2wol/Dual-FusionWelders.png", + "Fire-Suppression System (Building)": "https://0rganics.org/archipelago/sc2wol/Fire-SuppressionSystem.png", + "Orbital Command (Building)": "https://0rganics.org/archipelago/sc2wol/OrbitalCommandCampaign.png", + + "Marine": "https://static.wikia.nocookie.net/starcraft/images/4/47/Marine_SC2_Icon1.jpg", + "Medic": "https://static.wikia.nocookie.net/starcraft/images/7/74/Medic_SC2_Rend1.jpg", + "Firebat": "https://static.wikia.nocookie.net/starcraft/images/3/3c/Firebat_SC2_Rend1.jpg", + "Marauder": "https://static.wikia.nocookie.net/starcraft/images/b/ba/Marauder_SC2_Icon1.jpg", + "Reaper": "https://static.wikia.nocookie.net/starcraft/images/7/7d/Reaper_SC2_Icon1.jpg", + + "Stimpack (Marine)": "https://0rganics.org/archipelago/sc2wol/StimpacksCampaign.png", + "Combat Shield (Marine)": "https://0rganics.org/archipelago/sc2wol/CombatShieldCampaign.png", + "Advanced Medic Facilities (Medic)": "https://0rganics.org/archipelago/sc2wol/AdvancedMedicFacilities.png", + "Stabilizer Medpacks (Medic)": "https://0rganics.org/archipelago/sc2wol/StabilizerMedpacks.png", + "Incinerator Gauntlets (Firebat)": "https://0rganics.org/archipelago/sc2wol/IncineratorGauntlets.png", + "Juggernaut Plating (Firebat)": "https://0rganics.org/archipelago/sc2wol/JuggernautPlating.png", + "Concussive Shells (Marauder)": "https://0rganics.org/archipelago/sc2wol/ConcussiveShellsCampaign.png", + "Kinetic Foam (Marauder)": "https://0rganics.org/archipelago/sc2wol/KineticFoam.png", + "U-238 Rounds (Reaper)": "https://0rganics.org/archipelago/sc2wol/U-238Rounds.png", + "G-4 Clusterbomb (Reaper)": "https://0rganics.org/archipelago/sc2wol/G-4Clusterbomb.png", + + "Hellion": "https://static.wikia.nocookie.net/starcraft/images/5/56/Hellion_SC2_Icon1.jpg", + "Vulture": "https://static.wikia.nocookie.net/starcraft/images/d/da/Vulture_WoL.jpg", + "Goliath": "https://static.wikia.nocookie.net/starcraft/images/e/eb/Goliath_WoL.jpg", + "Diamondback": "https://static.wikia.nocookie.net/starcraft/images/a/a6/Diamondback_WoL.jpg", + "Siege Tank": "https://static.wikia.nocookie.net/starcraft/images/5/57/SiegeTank_SC2_Icon1.jpg", + + "Twin-Linked Flamethrower (Hellion)": "https://0rganics.org/archipelago/sc2wol/Twin-LinkedFlamethrower.png", + "Thermite Filaments (Hellion)": "https://0rganics.org/archipelago/sc2wol/ThermiteFilaments.png", + "Cerberus Mine (Vulture)": "https://0rganics.org/archipelago/sc2wol/CerberusMine.png", + "Replenishable Magazine (Vulture)": "https://0rganics.org/archipelago/sc2wol/ReplenishableMagazine.png", + "Multi-Lock Weapons System (Goliath)": "https://0rganics.org/archipelago/sc2wol/Multi-LockWeaponsSystem.png", + "Ares-Class Targeting System (Goliath)": "https://0rganics.org/archipelago/sc2wol/Ares-ClassTargetingSystem.png", + "Tri-Lithium Power Cell (Diamondback)": "https://0rganics.org/archipelago/sc2wol/Tri-LithiumPowerCell.png", + "Shaped Hull (Diamondback)": "https://0rganics.org/archipelago/sc2wol/ShapedHull.png", + "Maelstrom Rounds (Siege Tank)": "https://0rganics.org/archipelago/sc2wol/MaelstromRounds.png", + "Shaped Blast (Siege Tank)": "https://0rganics.org/archipelago/sc2wol/ShapedBlast.png", + + "Medivac": "https://static.wikia.nocookie.net/starcraft/images/d/db/Medivac_SC2_Icon1.jpg", + "Wraith": "https://static.wikia.nocookie.net/starcraft/images/7/75/Wraith_WoL.jpg", + "Viking": "https://static.wikia.nocookie.net/starcraft/images/2/2a/Viking_SC2_Icon1.jpg", + "Banshee": "https://static.wikia.nocookie.net/starcraft/images/3/32/Banshee_SC2_Icon1.jpg", + "Battlecruiser": "https://static.wikia.nocookie.net/starcraft/images/f/f5/Battlecruiser_SC2_Icon1.jpg", + + "Rapid Deployment Tube (Medivac)": "https://0rganics.org/archipelago/sc2wol/RapidDeploymentTube.png", + "Advanced Healing AI (Medivac)": "https://0rganics.org/archipelago/sc2wol/AdvancedHealingAI.png", + "Tomahawk Power Cells (Wraith)": "https://0rganics.org/archipelago/sc2wol/TomahawkPowerCells.png", + "Displacement Field (Wraith)": "https://0rganics.org/archipelago/sc2wol/DisplacementField.png", + "Ripwave Missiles (Viking)": "https://0rganics.org/archipelago/sc2wol/RipwaveMissiles.png", + "Phobos-Class Weapons System (Viking)": "https://0rganics.org/archipelago/sc2wol/Phobos-ClassWeaponsSystem.png", + "Cross-Spectrum Dampeners (Banshee)": "https://0rganics.org/archipelago/sc2wol/Cross-SpectrumDampeners.png", + "Shockwave Missile Battery (Banshee)": "https://0rganics.org/archipelago/sc2wol/ShockwaveMissileBattery.png", + "Missile Pods (Battlecruiser)": "https://0rganics.org/archipelago/sc2wol/MissilePods.png", + "Defensive Matrix (Battlecruiser)": "https://0rganics.org/archipelago/sc2wol/DefensiveMatrix.png", + + "Ghost": "https://static.wikia.nocookie.net/starcraft/images/6/6e/Ghost_SC2_Icon1.jpg", + "Spectre": "https://static.wikia.nocookie.net/starcraft/images/0/0d/Spectre_WoL.jpg", + "Thor": "https://static.wikia.nocookie.net/starcraft/images/e/ef/Thor_SC2_Icon1.jpg", + + "Ocular Implants (Ghost)": "https://0rganics.org/archipelago/sc2wol/OcularImplants.png", + "Crius Suit (Ghost)": "https://0rganics.org/archipelago/sc2wol/CriusSuit.png", + "Psionic Lash (Spectre)": "https://0rganics.org/archipelago/sc2wol/PsionicLash.png", + "Nyx-Class Cloaking Module (Spectre)": "https://0rganics.org/archipelago/sc2wol/Nyx-ClassCloakingModule.png", + "330mm Barrage Cannon (Thor)": "https://0rganics.org/archipelago/sc2wol/330mmBarrageCannon.png", + "Immortality Protocol (Thor)": "https://0rganics.org/archipelago/sc2wol/ImmortalityProtocol.png", + + "War Pigs": "https://static.wikia.nocookie.net/starcraft/images/e/ed/WarPigs_SC2_Icon1.jpg", + "Devil Dogs": "https://static.wikia.nocookie.net/starcraft/images/3/33/DevilDogs_SC2_Icon1.jpg", + "Hammer Securities": "https://static.wikia.nocookie.net/starcraft/images/3/3b/HammerSecurity_SC2_Icon1.jpg", + "Spartan Company": "https://static.wikia.nocookie.net/starcraft/images/b/be/SpartanCompany_SC2_Icon1.jpg", + "Siege Breakers": "https://static.wikia.nocookie.net/starcraft/images/3/31/SiegeBreakers_SC2_Icon1.jpg", + "Hel's Angel": "https://static.wikia.nocookie.net/starcraft/images/6/63/HelsAngels_SC2_Icon1.jpg", + "Dusk Wings": "https://static.wikia.nocookie.net/starcraft/images/5/52/DuskWings_SC2_Icon1.jpg", + "Jackson's Revenge": "https://static.wikia.nocookie.net/starcraft/images/9/95/JacksonsRevenge_SC2_Icon1.jpg", + + "Ultra-Capacitors": "https://static.wikia.nocookie.net/starcraft/images/2/23/SC2_Lab_Ultra_Capacitors_Icon.png", + "Vanadium Plating": "https://static.wikia.nocookie.net/starcraft/images/6/67/SC2_Lab_VanPlating_Icon.png", + "Orbital Depots": "https://static.wikia.nocookie.net/starcraft/images/0/01/SC2_Lab_Orbital_Depot_Icon.png", + "Micro-Filtering": "https://static.wikia.nocookie.net/starcraft/images/2/20/SC2_Lab_MicroFilter_Icon.png", + "Automated Refinery": "https://static.wikia.nocookie.net/starcraft/images/7/71/SC2_Lab_Auto_Refinery_Icon.png", + "Command Center Reactor": "https://static.wikia.nocookie.net/starcraft/images/e/ef/SC2_Lab_CC_Reactor_Icon.png", + "Raven": "https://static.wikia.nocookie.net/starcraft/images/1/19/SC2_Lab_Raven_Icon.png", + "Science Vessel": "https://static.wikia.nocookie.net/starcraft/images/c/c3/SC2_Lab_SciVes_Icon.png", + "Tech Reactor": "https://static.wikia.nocookie.net/starcraft/images/c/c5/SC2_Lab_Tech_Reactor_Icon.png", + "Orbital Strike": "https://static.wikia.nocookie.net/starcraft/images/d/df/SC2_Lab_Orb_Strike_Icon.png", + + "Shrike Turret": "https://static.wikia.nocookie.net/starcraft/images/4/44/SC2_Lab_Shrike_Turret_Icon.png", + "Fortified Bunker": "https://static.wikia.nocookie.net/starcraft/images/4/4f/SC2_Lab_FortBunker_Icon.png", + "Planetary Fortress": "https://static.wikia.nocookie.net/starcraft/images/0/0b/SC2_Lab_PlanetFortress_Icon.png", + "Perdition Turret": "https://static.wikia.nocookie.net/starcraft/images/a/af/SC2_Lab_PerdTurret_Icon.png", + "Predator": "https://static.wikia.nocookie.net/starcraft/images/8/83/SC2_Lab_Predator_Icon.png", + "Hercules": "https://static.wikia.nocookie.net/starcraft/images/4/40/SC2_Lab_Hercules_Icon.png", + "Cellular Reactor": "https://static.wikia.nocookie.net/starcraft/images/d/d8/SC2_Lab_CellReactor_Icon.png", + "Regenerative Bio-Steel": "https://static.wikia.nocookie.net/starcraft/images/d/d3/SC2_Lab_BioSteel_Icon.png", + "Hive Mind Emulator": "https://static.wikia.nocookie.net/starcraft/images/b/bc/SC2_Lab_Hive_Emulator_Icon.png", + "Psi Disrupter": "https://static.wikia.nocookie.net/starcraft/images/c/cf/SC2_Lab_Psi_Disruptor_Icon.png", + + "Zealot": "https://static.wikia.nocookie.net/starcraft/images/6/6e/Icon_Protoss_Zealot.jpg", + "Stalker": "https://static.wikia.nocookie.net/starcraft/images/0/0d/Icon_Protoss_Stalker.jpg", + "High Templar": "https://static.wikia.nocookie.net/starcraft/images/a/a0/Icon_Protoss_High_Templar.jpg", + "Dark Templar": "https://static.wikia.nocookie.net/starcraft/images/9/90/Icon_Protoss_Dark_Templar.jpg", + "Immortal": "https://static.wikia.nocookie.net/starcraft/images/c/c1/Icon_Protoss_Immortal.jpg", + "Colossus": "https://static.wikia.nocookie.net/starcraft/images/4/40/Icon_Protoss_Colossus.jpg", + "Phoenix": "https://static.wikia.nocookie.net/starcraft/images/b/b1/Icon_Protoss_Phoenix.jpg", + "Void Ray": "https://static.wikia.nocookie.net/starcraft/images/1/1d/VoidRay_SC2_Rend1.jpg", + "Carrier": "https://static.wikia.nocookie.net/starcraft/images/2/2c/Icon_Protoss_Carrier.jpg", + + "Nothing": "", + } + + sc2wol_location_ids = { + "Liberation Day": [SC2WOL_LOC_ID_OFFSET + 100, SC2WOL_LOC_ID_OFFSET + 101, SC2WOL_LOC_ID_OFFSET + 102, SC2WOL_LOC_ID_OFFSET + 103, SC2WOL_LOC_ID_OFFSET + 104, SC2WOL_LOC_ID_OFFSET + 105, SC2WOL_LOC_ID_OFFSET + 106], + "The Outlaws": [SC2WOL_LOC_ID_OFFSET + 200, SC2WOL_LOC_ID_OFFSET + 201], + "Zero Hour": [SC2WOL_LOC_ID_OFFSET + 300, SC2WOL_LOC_ID_OFFSET + 301, SC2WOL_LOC_ID_OFFSET + 302, SC2WOL_LOC_ID_OFFSET + 303], + "Evacuation": [SC2WOL_LOC_ID_OFFSET + 400, SC2WOL_LOC_ID_OFFSET + 401, SC2WOL_LOC_ID_OFFSET + 402, SC2WOL_LOC_ID_OFFSET + 403], + "Outbreak": [SC2WOL_LOC_ID_OFFSET + 500, SC2WOL_LOC_ID_OFFSET + 501, SC2WOL_LOC_ID_OFFSET + 502], + "Safe Haven": [SC2WOL_LOC_ID_OFFSET + 600, SC2WOL_LOC_ID_OFFSET + 601, SC2WOL_LOC_ID_OFFSET + 602, SC2WOL_LOC_ID_OFFSET + 603], + "Haven's Fall": [SC2WOL_LOC_ID_OFFSET + 700, SC2WOL_LOC_ID_OFFSET + 701, SC2WOL_LOC_ID_OFFSET + 702, SC2WOL_LOC_ID_OFFSET + 703], + "Smash and Grab": [SC2WOL_LOC_ID_OFFSET + 800, SC2WOL_LOC_ID_OFFSET + 801, SC2WOL_LOC_ID_OFFSET + 802, SC2WOL_LOC_ID_OFFSET + 803, SC2WOL_LOC_ID_OFFSET + 804], + "The Dig": [SC2WOL_LOC_ID_OFFSET + 900, SC2WOL_LOC_ID_OFFSET + 901, SC2WOL_LOC_ID_OFFSET + 902, SC2WOL_LOC_ID_OFFSET + 903], + "The Moebius Factor": [SC2WOL_LOC_ID_OFFSET + 1000, SC2WOL_LOC_ID_OFFSET + 1003, SC2WOL_LOC_ID_OFFSET + 1004, SC2WOL_LOC_ID_OFFSET + 1005, SC2WOL_LOC_ID_OFFSET + 1006, SC2WOL_LOC_ID_OFFSET + 1007, SC2WOL_LOC_ID_OFFSET + 1008], + "Supernova": [SC2WOL_LOC_ID_OFFSET + 1100, SC2WOL_LOC_ID_OFFSET + 1101, SC2WOL_LOC_ID_OFFSET + 1102, SC2WOL_LOC_ID_OFFSET + 1103, SC2WOL_LOC_ID_OFFSET + 1104], + "Maw of the Void": [SC2WOL_LOC_ID_OFFSET + 1200, SC2WOL_LOC_ID_OFFSET + 1201, SC2WOL_LOC_ID_OFFSET + 1202, SC2WOL_LOC_ID_OFFSET + 1203, SC2WOL_LOC_ID_OFFSET + 1204, SC2WOL_LOC_ID_OFFSET + 1205], + "Devil's Playground": [SC2WOL_LOC_ID_OFFSET + 1300, SC2WOL_LOC_ID_OFFSET + 1301, SC2WOL_LOC_ID_OFFSET + 1302], + "Welcome to the Jungle": [SC2WOL_LOC_ID_OFFSET + 1400, SC2WOL_LOC_ID_OFFSET + 1401, SC2WOL_LOC_ID_OFFSET + 1402, SC2WOL_LOC_ID_OFFSET + 1403], + "Breakout": [SC2WOL_LOC_ID_OFFSET + 1500, SC2WOL_LOC_ID_OFFSET + 1501, SC2WOL_LOC_ID_OFFSET + 1502], + "Ghost of a Chance": [SC2WOL_LOC_ID_OFFSET + 1600, SC2WOL_LOC_ID_OFFSET + 1601, SC2WOL_LOC_ID_OFFSET + 1602, SC2WOL_LOC_ID_OFFSET + 1603, SC2WOL_LOC_ID_OFFSET + 1604, SC2WOL_LOC_ID_OFFSET + 1605], + "The Great Train Robbery": [SC2WOL_LOC_ID_OFFSET + 1700, SC2WOL_LOC_ID_OFFSET + 1701, SC2WOL_LOC_ID_OFFSET + 1702, SC2WOL_LOC_ID_OFFSET + 1703], + "Cutthroat": [SC2WOL_LOC_ID_OFFSET + 1800, SC2WOL_LOC_ID_OFFSET + 1801, SC2WOL_LOC_ID_OFFSET + 1802, SC2WOL_LOC_ID_OFFSET + 1803, SC2WOL_LOC_ID_OFFSET + 1804], + "Engine of Destruction": [SC2WOL_LOC_ID_OFFSET + 1900, SC2WOL_LOC_ID_OFFSET + 1901, SC2WOL_LOC_ID_OFFSET + 1902, SC2WOL_LOC_ID_OFFSET + 1903, SC2WOL_LOC_ID_OFFSET + 1904, SC2WOL_LOC_ID_OFFSET + 1905], + "Media Blitz": [SC2WOL_LOC_ID_OFFSET + 2000, SC2WOL_LOC_ID_OFFSET + 2001, SC2WOL_LOC_ID_OFFSET + 2002, SC2WOL_LOC_ID_OFFSET + 2003, SC2WOL_LOC_ID_OFFSET + 2004], + "Piercing the Shroud": [SC2WOL_LOC_ID_OFFSET + 2100, SC2WOL_LOC_ID_OFFSET + 2101, SC2WOL_LOC_ID_OFFSET + 2102, SC2WOL_LOC_ID_OFFSET + 2103, SC2WOL_LOC_ID_OFFSET + 2104, SC2WOL_LOC_ID_OFFSET + 2105], + "Whispers of Doom": [SC2WOL_LOC_ID_OFFSET + 2200, SC2WOL_LOC_ID_OFFSET + 2201, SC2WOL_LOC_ID_OFFSET + 2202, SC2WOL_LOC_ID_OFFSET + 2203], + "A Sinister Turn": [SC2WOL_LOC_ID_OFFSET + 2300, SC2WOL_LOC_ID_OFFSET + 2301, SC2WOL_LOC_ID_OFFSET + 2302, SC2WOL_LOC_ID_OFFSET + 2303], + "Echoes of the Future": [SC2WOL_LOC_ID_OFFSET + 2400, SC2WOL_LOC_ID_OFFSET + 2401, SC2WOL_LOC_ID_OFFSET + 2402], + "In Utter Darkness": [SC2WOL_LOC_ID_OFFSET + 2500, SC2WOL_LOC_ID_OFFSET + 2501, SC2WOL_LOC_ID_OFFSET + 2502], + "Gates of Hell": [SC2WOL_LOC_ID_OFFSET + 2600, SC2WOL_LOC_ID_OFFSET + 2601], + "Belly of the Beast": [SC2WOL_LOC_ID_OFFSET + 2700, SC2WOL_LOC_ID_OFFSET + 2701, SC2WOL_LOC_ID_OFFSET + 2702, SC2WOL_LOC_ID_OFFSET + 2703], + "Shatter the Sky": [SC2WOL_LOC_ID_OFFSET + 2800, SC2WOL_LOC_ID_OFFSET + 2801, SC2WOL_LOC_ID_OFFSET + 2802, SC2WOL_LOC_ID_OFFSET + 2803, SC2WOL_LOC_ID_OFFSET + 2804, SC2WOL_LOC_ID_OFFSET + 2805], + } + + display_data = {} + + # Determine display for progressive items + progressive_items = { + "Progressive Infantry Weapon": 100 + SC2WOL_ITEM_ID_OFFSET, + "Progressive Infantry Armor": 102 + SC2WOL_ITEM_ID_OFFSET, + "Progressive Vehicle Weapon": 103 + SC2WOL_ITEM_ID_OFFSET, + "Progressive Vehicle Armor": 104 + SC2WOL_ITEM_ID_OFFSET, + "Progressive Ship Weapon": 105 + SC2WOL_ITEM_ID_OFFSET, + "Progressive Ship Armor": 106 + SC2WOL_ITEM_ID_OFFSET + } + progressive_names = { + "Progressive Infantry Weapon": ["Infantry Weapons Level 1", "Infantry Weapons Level 1", "Infantry Weapons Level 2", "Infantry Weapons Level 3"], + "Progressive Infantry Armor": ["Infantry Armor Level 1", "Infantry Armor Level 1", "Infantry Armor Level 2", "Infantry Armor Level 3"], + "Progressive Vehicle Weapon": ["Vehicle Weapons Level 1", "Vehicle Weapons Level 1", "Vehicle Weapons Level 2", "Vehicle Weapons Level 3"], + "Progressive Vehicle Armor": ["Vehicle Armor Level 1", "Vehicle Armor Level 1", "Vehicle Armor Level 2", "Vehicle Armor Level 3"], + "Progressive Ship Weapon": ["Ship Weapons Level 1", "Ship Weapons Level 1", "Ship Weapons Level 2", "Ship Weapons Level 3"], + "Progressive Ship Armor": ["Ship Armor Level 1", "Ship Armor Level 1", "Ship Armor Level 2", "Ship Armor Level 3"] + } + 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] + base_name = item_name.split(maxsplit=1)[1].lower().replace(' ', '_') + display_data[base_name + "_level"] = level + display_data[base_name + "_url"] = icons[display_name] + + # Multi-items + multi_items = { + "+15 Starting Minerals": 800 + SC2WOL_ITEM_ID_OFFSET, + "+15 Starting Vespene": 801 + SC2WOL_ITEM_ID_OFFSET, + "+2 Starting Supply": 802 + SC2WOL_ITEM_ID_OFFSET + } + for item_name, item_id in multi_items.items(): + base_name = item_name.split()[-1].lower() + count = inventory[item_id] + if base_name == "supply": + count = count * 2 + display_data[base_name + "_count"] = count + else: + count = count * 15 + display_data[base_name + "_count"] = count + + # Victory condition + game_state = multisave.get("client_game_state", {}).get((team, player), 0) + display_data['game_finished'] = game_state == 30 + + # Turn location IDs into mission objective counts + checked_locations = multisave.get("location_checks", {}).get((team, player), set()) + lookup_name = lambda id: lookup_any_location_id_to_name[id] + location_info = {mission_name: {lookup_name(id): (id in checked_locations) for id in mission_locations if id in set(locations[player])} for mission_name, mission_locations in sc2wol_location_ids.items()} + checks_done = {mission_name: len([id for id in mission_locations if id in checked_locations and id in set(locations[player])]) for mission_name, mission_locations in sc2wol_location_ids.items()} + checks_done['Total'] = len(checked_locations) + checks_in_area = {mission_name: len([id for id in mission_locations if id in set(locations[player])]) for mission_name, mission_locations in sc2wol_location_ids.items()} + checks_in_area['Total'] = sum(checks_in_area.values()) + + return render_template("sc2wolTracker.html", + inventory=inventory, icons=icons, + acquired_items={lookup_any_item_id_to_name[id] for id in inventory if + id in lookup_any_item_id_to_name}, + player=player, team=team, room=room, player_name=playerName, + checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, + **display_data) + def __renderGenericTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, playerName: str, seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: @@ -1044,5 +1295,6 @@ def getTracker(tracker: UUID): "Ocarina of Time": __renderOoTTracker, "Timespinner": __renderTimespinnerTracker, "A Link to the Past": __renderAlttpTracker, - "Super Metroid": __renderSuperMetroidTracker + "Super Metroid": __renderSuperMetroidTracker, + "Starcraft 2 Wings of Liberty": __renderSC2WoLTracker } diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index 39499b2184b7..cfcf6e334d0b 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -2,8 +2,8 @@ local socket = require("socket") local json = require('json') local math = require('math') -local last_modified_date = '2022-07-24' -- Should be the last modified date -local script_version = 2 +local last_modified_date = '2022-11-27' -- Should be the last modified date +local script_version = 3 -------------------------------------------------- -- Heavily modified form of RiptideSage's tracker @@ -25,6 +25,9 @@ local inf_table_offset = save_context_offset + 0xEF8 -- 0x11B4C8 local temp_context = nil +local collectibles_overrides = nil +local collectible_offsets = nil + -- Offsets for scenes can be found here -- https://wiki.cloudmodding.com/oot/Scene_Table/NTSC_1.0 -- Each scene is 0x1c bits long, chests at 0x0, switches at 0x4, collectibles at 0xc @@ -40,12 +43,16 @@ end -- [1] is the scene id -- [2] is the location type, which varies as input to the function -- [3] is the location id within the scene, and represents the bit which was checked +-- REORDERED IN 7.0 TO scene id - location type - 0x00 - location id -- Note that temp_context is 0-indexed and expected_values is 1-indexed, because consistency. local check_temp_context = function(expected_values) - if temp_context[0] ~= 0x00 then return false end - for i=1,3 do - if temp_context[i] ~= expected_values[i] then return false end - end + -- if temp_context[0] ~= 0x00 then return false end + -- for i=1,3 do + -- if temp_context[i] ~= expected_values[i] then return false end + -- end + if temp_context[0] ~= expected_values[1] then return false end + if temp_context[1] ~= expected_values[2] then return false end + if temp_context[3] ~= expected_values[3] then return false end return true end @@ -67,7 +74,7 @@ local on_the_ground_check = function(scene_offset, bit_to_check) end local boss_item_check = function(scene_offset) - return chest_check(scene_offset, 0x1F) + return on_the_ground_check(scene_offset, 0x1F) or check_temp_context({scene_offset, 0x00, 0x4F}) end @@ -226,6 +233,8 @@ local read_kokiri_forest_checks = function() checks["KF Shop Item 6"] = shop_check(0x6, 0x1) checks["KF Shop Item 7"] = shop_check(0x6, 0x2) checks["KF Shop Item 8"] = shop_check(0x6, 0x3) + + checks["KF Shop Blue Rupee"] = on_the_ground_check(0x2D, 0x1) return checks end @@ -454,7 +463,7 @@ local read_kakariko_village_checks = function() checks["Kak Impas House Cow"] = cow_check(0x37, 0x18) checks["Kak GS Tree"] = skulltula_check(0x10, 0x5) - checks["Kak GS Guards House"] = skulltula_check(0x10, 0x1) + checks["Kak GS Near Gate Guard"] = skulltula_check(0x10, 0x1) checks["Kak GS Watchtower"] = skulltula_check(0x10, 0x2) checks["Kak GS Skulltula House"] = skulltula_check(0x10, 0x4) checks["Kak GS House Under Construction"] = skulltula_check(0x10, 0x3) @@ -480,7 +489,7 @@ local read_graveyard_checks = function() checks["Graveyard Royal Familys Tomb Chest"] = chest_check(0x41, 0x00) checks["Graveyard Freestanding PoH"] = on_the_ground_check(0x53, 0x4) checks["Graveyard Dampe Gravedigging Tour"] = on_the_ground_check(0x53, 0x8) - checks["Graveyard Hookshot Chest"] = chest_check(0x48, 0x00) + checks["Graveyard Dampe Race Hookshot Chest"] = chest_check(0x48, 0x00) checks["Graveyard Dampe Race Freestanding PoH"] = on_the_ground_check(0x48, 0x7) checks["Graveyard GS Bean Patch"] = skulltula_check(0x10, 0x0) @@ -545,7 +554,7 @@ local read_shadow_temple_checks = function(mq_table_address) checks["Shadow Temple Boss Key Chest"] = chest_check(0x07, 0x0B) checks["Shadow Temple Invisible Floormaster Chest"] = chest_check(0x07, 0x0D) - checks["Shadow Temple GS Like Like Room"] = skulltula_check(0x07, 0x3) + checks["Shadow Temple GS Invisible Blades Room"] = skulltula_check(0x07, 0x3) checks["Shadow Temple GS Falling Spikes Room"] = skulltula_check(0x07, 0x1) checks["Shadow Temple GS Single Giant Pot"] = skulltula_check(0x07, 0x0) checks["Shadow Temple GS Near Ship"] = skulltula_check(0x07, 0x4) @@ -723,9 +732,9 @@ local read_fire_temple_checks = function(mq_table_address) checks["Fire Temple MQ GS Big Lava Room Open Door"] = skulltula_check(0x4, 0x0) checks["Fire Temple MQ GS Skull On Fire"] = skulltula_check(0x4, 0x2) - checks["Fire Temple MQ GS Fire Wall Maze Center"] = skulltula_check(0x4, 0x3) - checks["Fire Temple MQ GS Fire Wall Maze Side Room"] = skulltula_check(0x4, 0x4) - checks["Fire Temple MQ GS Above Fire Wall Maze"] = skulltula_check(0x4, 0x1) + checks["Fire Temple MQ GS Flame Maze Center"] = skulltula_check(0x4, 0x3) + checks["Fire Temple MQ GS Flame Maze Side Room"] = skulltula_check(0x4, 0x4) + checks["Fire Temple MQ GS Above Flame Maze"] = skulltula_check(0x4, 0x1) end checks["Fire Temple Volvagia Heart"] = boss_item_check(0x15) @@ -743,6 +752,12 @@ local read_zoras_river_checks = function() checks["ZR Deku Scrub Grotto Front"] = scrub_sanity_check(0x15, 0x9) checks["ZR Deku Scrub Grotto Rear"] = scrub_sanity_check(0x15, 0x8) + checks["ZR Frogs Zeldas Lullaby"] = event_check(0xD, 0x1) + checks["ZR Frogs Eponas Song"] = event_check(0xD, 0x2) + checks["ZR Frogs Suns Song"] = event_check(0xD, 0x3) + checks["ZR Frogs Sarias Song"] = event_check(0xD, 0x4) + checks["ZR Frogs Song of Time"] = event_check(0xD, 0x5) + checks["ZR GS Tree"] = skulltula_check(0x11, 0x1) --NOTE: There is no GS in the soft soil. It's the only one that doesn't have one. checks["ZR GS Ladder"] = skulltula_check(0x11, 0x0) @@ -912,10 +927,10 @@ end local read_gerudo_fortress_checks = function() local checks = {} - checks["Hideout Jail Guard (1 Torch)"] = on_the_ground_check(0xC, 0xC) - checks["Hideout Jail Guard (2 Torches)"] = on_the_ground_check(0xC, 0xF) - checks["Hideout Jail Guard (3 Torches)"] = on_the_ground_check(0xC, 0xA) - checks["Hideout Jail Guard (4 Torches)"] = on_the_ground_check(0xC, 0xE) + checks["Hideout 1 Torch Jail Gerudo Key"] = on_the_ground_check(0xC, 0xC) + checks["Hideout 2 Torches Jail Gerudo Key"] = on_the_ground_check(0xC, 0xF) + checks["Hideout 3 Torches Jail Gerudo Key"] = on_the_ground_check(0xC, 0xA) + checks["Hideout 4 Torches Jail Gerudo Key"] = on_the_ground_check(0xC, 0xE) checks["Hideout Gerudo Membership Card"] = membership_card_check(0xC, 0x2) checks["GF Chest"] = chest_check(0x5D, 0x0) checks["GF HBA 1000 Points"] = info_table_check(0x33, 0x0) @@ -1170,9 +1185,22 @@ local check_all_locations = function(mq_table_address) for k,v in pairs(read_ganons_castle_checks(mq_table_address)) do location_checks[k] = v end for k,v in pairs(read_outside_ganons_castle_checks()) do location_checks[k] = v end for k,v in pairs(read_song_checks()) do location_checks[k] = v end + -- write 0 to temp context values + mainmemory.write_u32_be(0x40002C, 0) + mainmemory.write_u32_be(0x400030, 0) return location_checks end +local check_collectibles = function() + local retval = {} + if collectible_offsets ~= nil then + for id, data in pairs(collectible_offsets) do + local mem = mainmemory.readbyte(collectible_overrides + data[1] + bit.rshift(data[2], 3)) + retval[id] = bit.check(mem, data[2] % 8) + end + end + return retval +end -- convenience functions @@ -1557,9 +1585,10 @@ local outgoing_player_addr = coop_context + 18 local player_names_address = coop_context + 20 local player_name_length = 8 -- 8 bytes -local rom_name_location = player_names_address + 0x800 +local rom_name_location = player_names_address + 0x800 + 0x5 -- 0x800 player names, 0x5 CFG_FILE_SELECT_HASH -local master_quest_table_address = rando_context + (mainmemory.read_u32_be(rando_context + 0x0CE0) - 0x03480000) +-- TODO: load dynamically from slot data +local master_quest_table_address = rando_context + (mainmemory.read_u32_be(rando_context + 0x0E9F) - 0x03480000) local save_context_addr = 0x11A5D0 local internal_count_addr = save_context_addr + 0x90 @@ -1568,7 +1597,7 @@ local item_queue = {} local first_connect = true local game_complete = false -NUM_BIG_POES_REQUIRED = mainmemory.read_u8(rando_context + 0x0CEE) +NUM_BIG_POES_REQUIRED = mainmemory.read_u8(rando_context + 0x0EAD) local bytes_to_string = function(bytes) local string = '' @@ -1718,7 +1747,7 @@ function is_game_complete() end function deathlink_enabled() - local death_link_flag = mainmemory.read_u16_be(coop_context + 0xA) + local death_link_flag = mainmemory.readbyte(coop_context + 0xB) return death_link_flag > 0 end @@ -1774,6 +1803,13 @@ function process_block(block) mainmemory.write_u16_be(incoming_item_addr, item_queue[received_items_count+1]) end end + -- Record collectible data if necessary + if collectible_overrides == nil and block['collectibleOverrides'] ~= 0 then + collectible_overrides = mainmemory.read_u32_be(rando_context + block['collectibleOverrides']) - 0x80000000 + end + if collectible_offsets ~= block['collectibleOffsets'] then + collectible_offsets = block['collectibleOffsets'] + end return end @@ -1805,6 +1841,7 @@ function receive() retTable["deathlinkActive"] = deathlink_enabled() if InSafeState() then retTable["locations"] = check_all_locations(master_quest_table_address) + retTable["collectibles"] = check_collectibles() retTable["isDead"] = get_death_state() retTable["gameComplete"] = is_game_complete() end diff --git a/docs/world api.md b/docs/world api.md index 9961ccb4e5f6..68e7f901fb9b 100644 --- a/docs/world api.md +++ b/docs/world api.md @@ -660,6 +660,7 @@ def generate_output(self, output_directory: str): if location.item.player == self.player else "Remote" for location in self.multiworld.get_filled_locations(self.player)}, # store start_inventory from player's .yaml + # make sure to mark as not remote_start_inventory when connecting if stored in rom/mod "starter_items": [item.name for item in self.multiworld.precollected_items[self.player]], "final_boss_hp": self.final_boss_hp, diff --git a/host.yaml b/host.yaml index 4e94a9a30c8f..f2d90c873eeb 100644 --- a/host.yaml +++ b/host.yaml @@ -68,9 +68,10 @@ generator: meta_file_path: "meta.yaml" # Create a spoiler file # 0 -> None - # 1 -> Spoiler without playthrough - # 2 -> Full spoiler - spoiler: 2 + # 1 -> Spoiler without playthrough or paths to playthrough required items + # 2 -> Spoiler with playthrough (viable solution to goals) + # 3 -> Spoiler with playthrough and traversal paths towards items + spoiler: 3 # Glitch to Triforce room from Ganon # When disabled, you have to have a weapon that can hurt ganon (master sword or swordless/easy item functionality + hammer) # and have completed the goal required for killing ganon to be able to access the triforce room. diff --git a/test/TestBase.py b/test/TestBase.py index 754f38dbfed4..8a17232bd1fe 100644 --- a/test/TestBase.py +++ b/test/TestBase.py @@ -1,12 +1,17 @@ +import typing import unittest import pathlib +from argparse import Namespace import Utils +from test.general import gen_steps +from worlds import AutoWorld +from worlds.AutoWorld import call_all file_path = pathlib.Path(__file__).parent.parent Utils.local_path.cached_path = file_path -from BaseClasses import MultiWorld, CollectionState, ItemClassification +from BaseClasses import MultiWorld, CollectionState, ItemClassification, Item from worlds.alttp.Items import ItemFactory @@ -92,3 +97,94 @@ def _get_items_partial(self, item_pool, missing_item): new_items.remove(missing_item) items = ItemFactory(new_items, 1) return self.get_state(items) + + +class WorldTestBase(unittest.TestCase): + options: typing.Dict[str, typing.Any] = {} + multiworld: MultiWorld + + game: typing.ClassVar[str] # define game name in subclass, example "Secret of Evermore" + auto_construct: typing.ClassVar[bool] = True + """ automatically set up a world for each test in this class """ + + def setUp(self) -> None: + if self.auto_construct: + self.world_setup() + + def world_setup(self, seed: typing.Optional[int] = None) -> None: + if not hasattr(self, "game"): + raise NotImplementedError("didn't define game name") + self.multiworld = MultiWorld(1) + self.multiworld.game[1] = self.game + self.multiworld.player_name = {1: "Tester"} + self.multiworld.set_seed(seed) + args = Namespace() + for name, option in AutoWorld.AutoWorldRegister.world_types[self.game].option_definitions.items(): + setattr(args, name, { + 1: option.from_any(self.options.get(name, getattr(option, "default"))) + }) + self.multiworld.set_options(args) + self.multiworld.set_default_common_options() + for step in gen_steps: + call_all(self.multiworld, step) + + def collect_all_but(self, item_names: typing.Union[str, typing.Iterable[str]]) -> None: + if isinstance(item_names, str): + item_names = (item_names,) + for item in self.multiworld.get_items(): + if item.name not in item_names: + self.multiworld.state.collect(item) + + def get_item_by_name(self, item_name: str) -> Item: + for item in self.multiworld.get_items(): + if item.name == item_name: + return item + raise ValueError("No such item") + + def get_items_by_name(self, item_names: typing.Union[str, typing.Iterable[str]]) -> typing.List[Item]: + if isinstance(item_names, str): + item_names = (item_names,) + return [item for item in self.multiworld.itempool if item.name in item_names] + + def collect_by_name(self, item_names: typing.Union[str, typing.Iterable[str]]) -> typing.List[Item]: + """ collect all of the items in the item pool that have the given names """ + items = self.get_items_by_name(item_names) + self.collect(items) + return items + + def collect(self, items: typing.Union[Item, typing.Iterable[Item]]) -> None: + if isinstance(items, Item): + items = (items,) + for item in items: + self.multiworld.state.collect(item) + + def remove(self, items: typing.Union[Item, typing.Iterable[Item]]) -> None: + if isinstance(items, Item): + items = (items,) + for item in items: + if item.location and item.location.event and item.location in self.multiworld.state.events: + self.multiworld.state.events.remove(item.location) + self.multiworld.state.remove(item) + + def can_reach_location(self, location: str) -> bool: + return self.multiworld.state.can_reach(location, "Location", 1) + + def count(self, item_name: str) -> int: + return self.multiworld.state.count(item_name, 1) + + def assertAccessDependency(self, + locations: typing.List[str], + possible_items: typing.Iterable[typing.Iterable[str]]) -> None: + all_items = [item_name for item_names in possible_items for item_name in item_names] + + self.collect_all_but(all_items) + for location in self.multiworld.get_locations(): + self.assertEqual(self.multiworld.state.can_reach(location), location.name not in locations) + for item_names in possible_items: + items = self.collect_by_name(item_names) + for location in locations: + self.assertTrue(self.can_reach_location(location)) + self.remove(items) + + def assertBeatable(self, beatable: bool): + self.assertEqual(self.multiworld.can_beat_game(self.multiworld.state), beatable) diff --git a/test/__init__.py b/test/__init__.py index 059c45564f37..438a0a041e90 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -1,2 +1,3 @@ import warnings warnings.simplefilter("always") + diff --git a/test/programs/TestGenerate.py b/test/programs/TestGenerate.py index da227df5e2cd..1418ec05a4aa 100644 --- a/test/programs/TestGenerate.py +++ b/test/programs/TestGenerate.py @@ -9,14 +9,13 @@ import ModuleUpdate ModuleUpdate.update_ran = True # don't upgrade import Generate -import Utils class TestGenerateMain(unittest.TestCase): """This tests Generate.py (ArchipelagoGenerate.exe) main""" generate_dir = Path(Generate.__file__).parent - run_dir = generate_dir / 'test' # reproducible cwd that's neither __file__ nor Generate.__file__ + run_dir = generate_dir / "test" # reproducible cwd that's neither __file__ nor Generate.__file__ abs_input_dir = Path(__file__).parent / 'data' / 'OnePlayer' rel_input_dir = abs_input_dir.relative_to(run_dir) # directly supplied relative paths are relative to cwd yaml_input_dir = abs_input_dir.relative_to(generate_dir) # yaml paths are relative to user_path @@ -30,12 +29,29 @@ def assertOutput(self, output_dir: str): f"{list(output_path.glob('*'))}") def setUp(self): - Utils.local_path.cached_path = str(self.generate_dir) + self.original_argv = sys.argv.copy() + self.original_cwd = os.getcwd() + self.original_local_path = Generate.Utils.local_path.cached_path + self.original_user_path = Generate.Utils.user_path.cached_path + + # Force both user_path and local_path to a specific path. They have independent caches. + Generate.Utils.user_path.cached_path = Generate.Utils.local_path.cached_path = str(self.generate_dir) os.chdir(self.run_dir) self.output_tempdir = TemporaryDirectory(prefix='AP_out_') def tearDown(self): self.output_tempdir.cleanup() + os.chdir(self.original_cwd) + sys.argv = self.original_argv + Generate.Utils.local_path.cached_path = self.original_local_path + Generate.Utils.user_path.cached_path = self.original_user_path + + def test_paths(self): + self.assertTrue(os.path.exists(self.generate_dir)) + self.assertTrue(os.path.exists(self.run_dir)) + self.assertTrue(os.path.exists(self.abs_input_dir)) + self.assertTrue(os.path.exists(self.rel_input_dir)) + self.assertFalse(os.path.exists(self.yaml_input_dir)) # relative to user_path, not cwd def test_generate_absolute(self): sys.argv = [sys.argv[0], '--seed', '0', @@ -57,7 +73,7 @@ def test_generate_relative(self): def test_generate_yaml(self): # override host.yaml - defaults = Utils.get_options()["generator"] + defaults = Generate.Utils.get_options()["generator"] defaults["player_files_path"] = str(self.yaml_input_dir) defaults["players"] = 0 diff --git a/test/worlds/__init__.py b/test/worlds/__init__.py index e69de29bb2d1..84e08a00bba6 100644 --- a/test/worlds/__init__.py +++ b/test/worlds/__init__.py @@ -0,0 +1,14 @@ +def load_tests(loader, standard_tests, pattern): + import os + import unittest + from ..TestBase import file_path + from worlds.AutoWorld import AutoWorldRegister + + suite = unittest.TestSuite() + suite.addTests(standard_tests) + folders = [os.path.join(os.path.split(world.__file__)[0], "test") + for world in AutoWorldRegister.world_types.values()] + for folder in folders: + if os.path.exists(folder): + suite.addTests(loader.discover(folder, top_level_dir=file_path)) + return suite diff --git a/test/worlds/test_base.py b/test/worlds/test_base.py deleted file mode 100644 index 82c3d167cbee..000000000000 --- a/test/worlds/test_base.py +++ /dev/null @@ -1,98 +0,0 @@ -import typing -import unittest -from argparse import Namespace -from test.general import gen_steps -from BaseClasses import MultiWorld, Item -from worlds import AutoWorld -from worlds.AutoWorld import call_all - - -class WorldTestBase(unittest.TestCase): - options: typing.Dict[str, typing.Any] = {} - multiworld: MultiWorld - - game: typing.ClassVar[str] # define game name in subclass, example "Secret of Evermore" - auto_construct: typing.ClassVar[bool] = True - """ automatically set up a world for each test in this class """ - - def setUp(self) -> None: - if self.auto_construct: - self.world_setup() - - def world_setup(self, seed: typing.Optional[int] = None) -> None: - if not hasattr(self, "game"): - raise NotImplementedError("didn't define game name") - self.multiworld = MultiWorld(1) - self.multiworld.game[1] = self.game - self.multiworld.player_name = {1: "Tester"} - self.multiworld.set_seed(seed) - args = Namespace() - for name, option in AutoWorld.AutoWorldRegister.world_types[self.game].option_definitions.items(): - setattr(args, name, { - 1: option.from_any(self.options.get(name, getattr(option, "default"))) - }) - self.multiworld.set_options(args) - self.multiworld.set_default_common_options() - for step in gen_steps: - call_all(self.multiworld, step) - - def collect_all_but(self, item_names: typing.Union[str, typing.Iterable[str]]) -> None: - if isinstance(item_names, str): - item_names = (item_names,) - for item in self.multiworld.get_items(): - if item.name not in item_names: - self.multiworld.state.collect(item) - - def get_item_by_name(self, item_name: str) -> Item: - for item in self.multiworld.get_items(): - if item.name == item_name: - return item - raise ValueError("No such item") - - def get_items_by_name(self, item_names: typing.Union[str, typing.Iterable[str]]) -> typing.List[Item]: - if isinstance(item_names, str): - item_names = (item_names,) - return [item for item in self.multiworld.itempool if item.name in item_names] - - def collect_by_name(self, item_names: typing.Union[str, typing.Iterable[str]]) -> typing.List[Item]: - """ collect all of the items in the item pool that have the given names """ - items = self.get_items_by_name(item_names) - self.collect(items) - return items - - def collect(self, items: typing.Union[Item, typing.Iterable[Item]]) -> None: - if isinstance(items, Item): - items = (items,) - for item in items: - self.multiworld.state.collect(item) - - def remove(self, items: typing.Union[Item, typing.Iterable[Item]]) -> None: - if isinstance(items, Item): - items = (items,) - for item in items: - if item.location and item.location.event and item.location in self.multiworld.state.events: - self.multiworld.state.events.remove(item.location) - self.multiworld.state.remove(item) - - def can_reach_location(self, location: str) -> bool: - return self.multiworld.state.can_reach(location, "Location", 1) - - def count(self, item_name: str) -> int: - return self.multiworld.state.count(item_name, 1) - - def assertAccessDependency(self, - locations: typing.List[str], - possible_items: typing.Iterable[typing.Iterable[str]]) -> None: - all_items = [item_name for item_names in possible_items for item_name in item_names] - - self.collect_all_but(all_items) - for location in self.multiworld.get_locations(): - self.assertEqual(self.multiworld.state.can_reach(location), location.name not in locations) - for item_names in possible_items: - items = self.collect_by_name(item_names) - for location in locations: - self.assertTrue(self.can_reach_location(location)) - self.remove(items) - - def assertBeatable(self, beatable: bool): - self.assertEqual(self.multiworld.can_beat_game(self.multiworld.state), beatable) diff --git a/test/dungeons/__init__.py b/worlds/alttp/test/__init__.py similarity index 100% rename from test/dungeons/__init__.py rename to worlds/alttp/test/__init__.py diff --git a/test/dungeons/TestAgahnimsTower.py b/worlds/alttp/test/dungeons/TestAgahnimsTower.py similarity index 96% rename from test/dungeons/TestAgahnimsTower.py rename to worlds/alttp/test/dungeons/TestAgahnimsTower.py index 1c71d51b49d7..6d0e1085f5cb 100644 --- a/test/dungeons/TestAgahnimsTower.py +++ b/worlds/alttp/test/dungeons/TestAgahnimsTower.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestAgahnimsTower(TestDungeon): diff --git a/test/dungeons/TestDarkPalace.py b/worlds/alttp/test/dungeons/TestDarkPalace.py similarity index 98% rename from test/dungeons/TestDarkPalace.py rename to worlds/alttp/test/dungeons/TestDarkPalace.py index 48c1928ed2bc..e3974e777da3 100644 --- a/test/dungeons/TestDarkPalace.py +++ b/worlds/alttp/test/dungeons/TestDarkPalace.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestDarkPalace(TestDungeon): diff --git a/test/dungeons/TestDesertPalace.py b/worlds/alttp/test/dungeons/TestDesertPalace.py similarity index 97% rename from test/dungeons/TestDesertPalace.py rename to worlds/alttp/test/dungeons/TestDesertPalace.py index 82255146b2b8..8423e681cf16 100644 --- a/test/dungeons/TestDesertPalace.py +++ b/worlds/alttp/test/dungeons/TestDesertPalace.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestDesertPalace(TestDungeon): diff --git a/test/dungeons/TestDungeon.py b/worlds/alttp/test/dungeons/TestDungeon.py similarity index 100% rename from test/dungeons/TestDungeon.py rename to worlds/alttp/test/dungeons/TestDungeon.py diff --git a/test/dungeons/TestEasternPalace.py b/worlds/alttp/test/dungeons/TestEasternPalace.py similarity index 96% rename from test/dungeons/TestEasternPalace.py rename to worlds/alttp/test/dungeons/TestEasternPalace.py index 775fa8a1508a..0497a1132ee3 100644 --- a/test/dungeons/TestEasternPalace.py +++ b/worlds/alttp/test/dungeons/TestEasternPalace.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestEasternPalace(TestDungeon): diff --git a/test/dungeons/TestGanonsTower.py b/worlds/alttp/test/dungeons/TestGanonsTower.py similarity index 99% rename from test/dungeons/TestGanonsTower.py rename to worlds/alttp/test/dungeons/TestGanonsTower.py index 1517dc254956..f81509273f00 100644 --- a/test/dungeons/TestGanonsTower.py +++ b/worlds/alttp/test/dungeons/TestGanonsTower.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestGanonsTower(TestDungeon): diff --git a/test/dungeons/TestIcePalace.py b/worlds/alttp/test/dungeons/TestIcePalace.py similarity index 99% rename from test/dungeons/TestIcePalace.py rename to worlds/alttp/test/dungeons/TestIcePalace.py index e415c5d0326b..3c075fe5ea48 100644 --- a/test/dungeons/TestIcePalace.py +++ b/worlds/alttp/test/dungeons/TestIcePalace.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestIcePalace(TestDungeon): diff --git a/test/dungeons/TestMiseryMire.py b/worlds/alttp/test/dungeons/TestMiseryMire.py similarity index 99% rename from test/dungeons/TestMiseryMire.py rename to worlds/alttp/test/dungeons/TestMiseryMire.py index 5f0a354c06ab..ea5fb288450d 100644 --- a/test/dungeons/TestMiseryMire.py +++ b/worlds/alttp/test/dungeons/TestMiseryMire.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestMiseryMire(TestDungeon): diff --git a/test/dungeons/TestSkullWoods.py b/worlds/alttp/test/dungeons/TestSkullWoods.py similarity index 98% rename from test/dungeons/TestSkullWoods.py rename to worlds/alttp/test/dungeons/TestSkullWoods.py index f7103cf22159..2dab840cf449 100644 --- a/test/dungeons/TestSkullWoods.py +++ b/worlds/alttp/test/dungeons/TestSkullWoods.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestSkullWoods(TestDungeon): diff --git a/test/dungeons/TestSwampPalace.py b/worlds/alttp/test/dungeons/TestSwampPalace.py similarity index 99% rename from test/dungeons/TestSwampPalace.py rename to worlds/alttp/test/dungeons/TestSwampPalace.py index 534939c91638..51440f6ccc4d 100644 --- a/test/dungeons/TestSwampPalace.py +++ b/worlds/alttp/test/dungeons/TestSwampPalace.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestSwampPalace(TestDungeon): diff --git a/test/dungeons/TestThievesTown.py b/worlds/alttp/test/dungeons/TestThievesTown.py similarity index 97% rename from test/dungeons/TestThievesTown.py rename to worlds/alttp/test/dungeons/TestThievesTown.py index 5fdf9037478c..a7e20bc52014 100644 --- a/test/dungeons/TestThievesTown.py +++ b/worlds/alttp/test/dungeons/TestThievesTown.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestThievesTown(TestDungeon): diff --git a/test/dungeons/TestTowerOfHera.py b/worlds/alttp/test/dungeons/TestTowerOfHera.py similarity index 96% rename from test/dungeons/TestTowerOfHera.py rename to worlds/alttp/test/dungeons/TestTowerOfHera.py index 9762d20841f2..04685a66a876 100644 --- a/test/dungeons/TestTowerOfHera.py +++ b/worlds/alttp/test/dungeons/TestTowerOfHera.py @@ -1,4 +1,4 @@ -from test.dungeons.TestDungeon import TestDungeon +from .TestDungeon import TestDungeon class TestTowerOfHera(TestDungeon): diff --git a/test/inverted/__init__.py b/worlds/alttp/test/dungeons/__init__.py similarity index 100% rename from test/inverted/__init__.py rename to worlds/alttp/test/dungeons/__init__.py diff --git a/test/inverted/TestInverted.py b/worlds/alttp/test/inverted/TestInverted.py similarity index 100% rename from test/inverted/TestInverted.py rename to worlds/alttp/test/inverted/TestInverted.py diff --git a/test/inverted/TestInvertedBombRules.py b/worlds/alttp/test/inverted/TestInvertedBombRules.py similarity index 100% rename from test/inverted/TestInvertedBombRules.py rename to worlds/alttp/test/inverted/TestInvertedBombRules.py diff --git a/test/inverted/TestInvertedDarkWorld.py b/worlds/alttp/test/inverted/TestInvertedDarkWorld.py similarity index 99% rename from test/inverted/TestInvertedDarkWorld.py rename to worlds/alttp/test/inverted/TestInvertedDarkWorld.py index e7d5a0076836..710ee07f2b6d 100644 --- a/test/inverted/TestInvertedDarkWorld.py +++ b/worlds/alttp/test/inverted/TestInvertedDarkWorld.py @@ -1,4 +1,4 @@ -from test.inverted.TestInverted import TestInverted +from .TestInverted import TestInverted class TestInvertedDarkWorld(TestInverted): diff --git a/test/inverted/TestInvertedDeathMountain.py b/worlds/alttp/test/inverted/TestInvertedDeathMountain.py similarity index 99% rename from test/inverted/TestInvertedDeathMountain.py rename to worlds/alttp/test/inverted/TestInvertedDeathMountain.py index 77fdb8ac9365..aedec2a1daa6 100644 --- a/test/inverted/TestInvertedDeathMountain.py +++ b/worlds/alttp/test/inverted/TestInvertedDeathMountain.py @@ -1,4 +1,4 @@ -from test.inverted.TestInverted import TestInverted +from .TestInverted import TestInverted class TestInvertedDeathMountain(TestInverted): diff --git a/test/inverted/TestInvertedEntrances.py b/worlds/alttp/test/inverted/TestInvertedEntrances.py similarity index 99% rename from test/inverted/TestInvertedEntrances.py rename to worlds/alttp/test/inverted/TestInvertedEntrances.py index 3e884adcbb74..06a82de26cfc 100644 --- a/test/inverted/TestInvertedEntrances.py +++ b/worlds/alttp/test/inverted/TestInvertedEntrances.py @@ -1,4 +1,4 @@ -from test.inverted.TestInverted import TestInverted +from .TestInverted import TestInverted class TestEntrances(TestInverted): diff --git a/test/inverted/TestInvertedLightWorld.py b/worlds/alttp/test/inverted/TestInvertedLightWorld.py similarity index 99% rename from test/inverted/TestInvertedLightWorld.py rename to worlds/alttp/test/inverted/TestInvertedLightWorld.py index 890fa08b2724..9d4b9099daae 100644 --- a/test/inverted/TestInvertedLightWorld.py +++ b/worlds/alttp/test/inverted/TestInvertedLightWorld.py @@ -1,4 +1,4 @@ -from test.inverted.TestInverted import TestInverted +from .TestInverted import TestInverted class TestInvertedLightWorld(TestInverted): diff --git a/test/inverted/TestInvertedTurtleRock.py b/worlds/alttp/test/inverted/TestInvertedTurtleRock.py similarity index 99% rename from test/inverted/TestInvertedTurtleRock.py rename to worlds/alttp/test/inverted/TestInvertedTurtleRock.py index df55143cb214..533e3c650f70 100644 --- a/test/inverted/TestInvertedTurtleRock.py +++ b/worlds/alttp/test/inverted/TestInvertedTurtleRock.py @@ -1,4 +1,4 @@ -from test.inverted.TestInverted import TestInverted +from .TestInverted import TestInverted class TestInvertedTurtleRock(TestInverted): diff --git a/test/inverted_minor_glitches/__init__.py b/worlds/alttp/test/inverted/__init__.py similarity index 100% rename from test/inverted_minor_glitches/__init__.py rename to worlds/alttp/test/inverted/__init__.py diff --git a/test/inverted_minor_glitches/TestInvertedDarkWorld.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedDarkWorld.py similarity index 98% rename from test/inverted_minor_glitches/TestInvertedDarkWorld.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedDarkWorld.py index e8015df81023..69f564489700 100644 --- a/test/inverted_minor_glitches/TestInvertedDarkWorld.py +++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedDarkWorld.py @@ -1,4 +1,4 @@ -from test.inverted_minor_glitches.TestInvertedMinor import TestInvertedMinor +from .TestInvertedMinor import TestInvertedMinor class TestInvertedDarkWorld(TestInvertedMinor): diff --git a/test/inverted_minor_glitches/TestInvertedDeathMountain.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedDeathMountain.py similarity index 99% rename from test/inverted_minor_glitches/TestInvertedDeathMountain.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedDeathMountain.py index 179f1d7fbd0e..c68a8e5f0c89 100644 --- a/test/inverted_minor_glitches/TestInvertedDeathMountain.py +++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedDeathMountain.py @@ -1,4 +1,4 @@ -from test.inverted_minor_glitches.TestInvertedMinor import TestInvertedMinor +from .TestInvertedMinor import TestInvertedMinor class TestInvertedDeathMountain(TestInvertedMinor): diff --git a/test/inverted_minor_glitches/TestInvertedEntrances.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedEntrances.py similarity index 98% rename from test/inverted_minor_glitches/TestInvertedEntrances.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedEntrances.py index 24ba74e31f2f..6dcd59079dc5 100644 --- a/test/inverted_minor_glitches/TestInvertedEntrances.py +++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedEntrances.py @@ -1,4 +1,4 @@ -from test.inverted_minor_glitches.TestInvertedMinor import TestInvertedMinor +from .TestInvertedMinor import TestInvertedMinor class TestEntrances(TestInvertedMinor): diff --git a/test/inverted_minor_glitches/TestInvertedLightWorld.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedLightWorld.py similarity index 99% rename from test/inverted_minor_glitches/TestInvertedLightWorld.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedLightWorld.py index cada88cc5be4..376e7b4bec49 100644 --- a/test/inverted_minor_glitches/TestInvertedLightWorld.py +++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedLightWorld.py @@ -1,4 +1,4 @@ -from test.inverted_minor_glitches.TestInvertedMinor import TestInvertedMinor +from .TestInvertedMinor import TestInvertedMinor class TestInvertedLightWorld(TestInvertedMinor): diff --git a/test/inverted_minor_glitches/TestInvertedMinor.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py similarity index 100% rename from test/inverted_minor_glitches/TestInvertedMinor.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py diff --git a/test/inverted_minor_glitches/TestInvertedTurtleRock.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedTurtleRock.py similarity index 99% rename from test/inverted_minor_glitches/TestInvertedTurtleRock.py rename to worlds/alttp/test/inverted_minor_glitches/TestInvertedTurtleRock.py index f176bec445a5..a25d89a6f4f9 100644 --- a/test/inverted_minor_glitches/TestInvertedTurtleRock.py +++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedTurtleRock.py @@ -1,4 +1,4 @@ -from test.inverted_minor_glitches.TestInvertedMinor import TestInvertedMinor +from .TestInvertedMinor import TestInvertedMinor class TestInvertedTurtleRock(TestInvertedMinor): diff --git a/test/inverted_owg/__init__.py b/worlds/alttp/test/inverted_minor_glitches/__init__.py similarity index 100% rename from test/inverted_owg/__init__.py rename to worlds/alttp/test/inverted_minor_glitches/__init__.py diff --git a/test/inverted_owg/TestDarkWorld.py b/worlds/alttp/test/inverted_owg/TestDarkWorld.py similarity index 97% rename from test/inverted_owg/TestDarkWorld.py rename to worlds/alttp/test/inverted_owg/TestDarkWorld.py index 753f7d65b69a..e7e720d2b853 100644 --- a/test/inverted_owg/TestDarkWorld.py +++ b/worlds/alttp/test/inverted_owg/TestDarkWorld.py @@ -1,4 +1,4 @@ -from test.inverted_owg.TestInvertedOWG import TestInvertedOWG +from .TestInvertedOWG import TestInvertedOWG class TestDarkWorld(TestInvertedOWG): diff --git a/test/inverted_owg/TestDeathMountain.py b/worlds/alttp/test/inverted_owg/TestDeathMountain.py similarity index 99% rename from test/inverted_owg/TestDeathMountain.py rename to worlds/alttp/test/inverted_owg/TestDeathMountain.py index 346e3981d5fd..79796a7aeb1e 100644 --- a/test/inverted_owg/TestDeathMountain.py +++ b/worlds/alttp/test/inverted_owg/TestDeathMountain.py @@ -1,4 +1,4 @@ -from test.inverted_owg.TestInvertedOWG import TestInvertedOWG +from .TestInvertedOWG import TestInvertedOWG class TestDeathMountain(TestInvertedOWG): diff --git a/test/inverted_owg/TestDungeons.py b/worlds/alttp/test/inverted_owg/TestDungeons.py similarity index 99% rename from test/inverted_owg/TestDungeons.py rename to worlds/alttp/test/inverted_owg/TestDungeons.py index abd9d193f5d8..f5d07544aaea 100644 --- a/test/inverted_owg/TestDungeons.py +++ b/worlds/alttp/test/inverted_owg/TestDungeons.py @@ -1,4 +1,5 @@ -from test.inverted_owg.TestInvertedOWG import TestInvertedOWG +from .TestInvertedOWG import TestInvertedOWG + class TestDungeons(TestInvertedOWG): diff --git a/test/inverted_owg/TestInvertedOWG.py b/worlds/alttp/test/inverted_owg/TestInvertedOWG.py similarity index 100% rename from test/inverted_owg/TestInvertedOWG.py rename to worlds/alttp/test/inverted_owg/TestInvertedOWG.py diff --git a/test/inverted_owg/TestLightWorld.py b/worlds/alttp/test/inverted_owg/TestLightWorld.py similarity index 99% rename from test/inverted_owg/TestLightWorld.py rename to worlds/alttp/test/inverted_owg/TestLightWorld.py index 848122b39c09..de92b4ef854d 100644 --- a/test/inverted_owg/TestLightWorld.py +++ b/worlds/alttp/test/inverted_owg/TestLightWorld.py @@ -1,4 +1,4 @@ -from test.inverted_owg.TestInvertedOWG import TestInvertedOWG +from .TestInvertedOWG import TestInvertedOWG class TestLightWorld(TestInvertedOWG): diff --git a/test/items/__init__.py b/worlds/alttp/test/inverted_owg/__init__.py similarity index 100% rename from test/items/__init__.py rename to worlds/alttp/test/inverted_owg/__init__.py diff --git a/test/items/TestDifficulty.py b/worlds/alttp/test/items/TestDifficulty.py similarity index 100% rename from test/items/TestDifficulty.py rename to worlds/alttp/test/items/TestDifficulty.py diff --git a/test/minecraft/__init__.py b/worlds/alttp/test/items/__init__.py similarity index 100% rename from test/minecraft/__init__.py rename to worlds/alttp/test/items/__init__.py diff --git a/test/minor_glitches/TestDarkWorld.py b/worlds/alttp/test/minor_glitches/TestDarkWorld.py similarity index 99% rename from test/minor_glitches/TestDarkWorld.py rename to worlds/alttp/test/minor_glitches/TestDarkWorld.py index 10c8f89ecbf9..3a6f97254c95 100644 --- a/test/minor_glitches/TestDarkWorld.py +++ b/worlds/alttp/test/minor_glitches/TestDarkWorld.py @@ -1,4 +1,4 @@ -from test.minor_glitches.TestMinor import TestMinor +from .TestMinor import TestMinor class TestDarkWorld(TestMinor): diff --git a/test/minor_glitches/TestDeathMountain.py b/worlds/alttp/test/minor_glitches/TestDeathMountain.py similarity index 99% rename from test/minor_glitches/TestDeathMountain.py rename to worlds/alttp/test/minor_glitches/TestDeathMountain.py index 14f5dae437f9..2603aaeb7b9e 100644 --- a/test/minor_glitches/TestDeathMountain.py +++ b/worlds/alttp/test/minor_glitches/TestDeathMountain.py @@ -1,4 +1,4 @@ -from test.minor_glitches.TestMinor import TestMinor +from .TestMinor import TestMinor class TestDeathMountain(TestMinor): diff --git a/test/minor_glitches/TestEntrances.py b/worlds/alttp/test/minor_glitches/TestEntrances.py similarity index 99% rename from test/minor_glitches/TestEntrances.py rename to worlds/alttp/test/minor_glitches/TestEntrances.py index 828b05b7e9b4..29dec862d498 100644 --- a/test/minor_glitches/TestEntrances.py +++ b/worlds/alttp/test/minor_glitches/TestEntrances.py @@ -1,4 +1,4 @@ -from test.minor_glitches.TestMinor import TestMinor +from .TestMinor import TestMinor class TestEntrances(TestMinor): diff --git a/test/minor_glitches/TestLightWorld.py b/worlds/alttp/test/minor_glitches/TestLightWorld.py similarity index 99% rename from test/minor_glitches/TestLightWorld.py rename to worlds/alttp/test/minor_glitches/TestLightWorld.py index bcabf5623241..bdfdc2349691 100644 --- a/test/minor_glitches/TestLightWorld.py +++ b/worlds/alttp/test/minor_glitches/TestLightWorld.py @@ -1,4 +1,4 @@ -from test.minor_glitches.TestMinor import TestMinor +from .TestMinor import TestMinor class TestLightWorld(TestMinor): diff --git a/test/minor_glitches/TestMinor.py b/worlds/alttp/test/minor_glitches/TestMinor.py similarity index 100% rename from test/minor_glitches/TestMinor.py rename to worlds/alttp/test/minor_glitches/TestMinor.py diff --git a/test/minor_glitches/__init__.py b/worlds/alttp/test/minor_glitches/__init__.py similarity index 100% rename from test/minor_glitches/__init__.py rename to worlds/alttp/test/minor_glitches/__init__.py diff --git a/test/options/TestPlandoBosses.py b/worlds/alttp/test/options/TestPlandoBosses.py similarity index 100% rename from test/options/TestPlandoBosses.py rename to worlds/alttp/test/options/TestPlandoBosses.py diff --git a/test/options/__init__.py b/worlds/alttp/test/options/__init__.py similarity index 100% rename from test/options/__init__.py rename to worlds/alttp/test/options/__init__.py diff --git a/test/owg/TestDarkWorld.py b/worlds/alttp/test/owg/TestDarkWorld.py similarity index 99% rename from test/owg/TestDarkWorld.py rename to worlds/alttp/test/owg/TestDarkWorld.py index 8010437984c4..93324656bd93 100644 --- a/test/owg/TestDarkWorld.py +++ b/worlds/alttp/test/owg/TestDarkWorld.py @@ -1,4 +1,4 @@ -from test.owg.TestVanillaOWG import TestVanillaOWG +from .TestVanillaOWG import TestVanillaOWG class TestDarkWorld(TestVanillaOWG): diff --git a/test/owg/TestDeathMountain.py b/worlds/alttp/test/owg/TestDeathMountain.py similarity index 99% rename from test/owg/TestDeathMountain.py rename to worlds/alttp/test/owg/TestDeathMountain.py index 83dd2c54eba8..41031c65c593 100644 --- a/test/owg/TestDeathMountain.py +++ b/worlds/alttp/test/owg/TestDeathMountain.py @@ -1,4 +1,4 @@ -from test.owg.TestVanillaOWG import TestVanillaOWG +from .TestVanillaOWG import TestVanillaOWG class TestDeathMountain(TestVanillaOWG): diff --git a/test/owg/TestDungeons.py b/worlds/alttp/test/owg/TestDungeons.py similarity index 99% rename from test/owg/TestDungeons.py rename to worlds/alttp/test/owg/TestDungeons.py index cb4dc075ae06..284b489b1626 100644 --- a/test/owg/TestDungeons.py +++ b/worlds/alttp/test/owg/TestDungeons.py @@ -1,4 +1,4 @@ -from test.owg.TestVanillaOWG import TestVanillaOWG +from .TestVanillaOWG import TestVanillaOWG class TestDungeons(TestVanillaOWG): diff --git a/test/owg/TestLightWorld.py b/worlds/alttp/test/owg/TestLightWorld.py similarity index 99% rename from test/owg/TestLightWorld.py rename to worlds/alttp/test/owg/TestLightWorld.py index e58553fb66ad..f3f1ba0c2703 100644 --- a/test/owg/TestLightWorld.py +++ b/worlds/alttp/test/owg/TestLightWorld.py @@ -1,4 +1,4 @@ -from test.owg.TestVanillaOWG import TestVanillaOWG +from .TestVanillaOWG import TestVanillaOWG class TestLightWorld(TestVanillaOWG): diff --git a/test/owg/TestVanillaOWG.py b/worlds/alttp/test/owg/TestVanillaOWG.py similarity index 100% rename from test/owg/TestVanillaOWG.py rename to worlds/alttp/test/owg/TestVanillaOWG.py diff --git a/test/overcooked2/__init__.py b/worlds/alttp/test/owg/__init__.py similarity index 100% rename from test/overcooked2/__init__.py rename to worlds/alttp/test/owg/__init__.py diff --git a/test/shops/TestSram.py b/worlds/alttp/test/shops/TestSram.py similarity index 100% rename from test/shops/TestSram.py rename to worlds/alttp/test/shops/TestSram.py diff --git a/test/owg/__init__.py b/worlds/alttp/test/shops/__init__.py similarity index 100% rename from test/owg/__init__.py rename to worlds/alttp/test/shops/__init__.py diff --git a/test/vanilla/TestDarkWorld.py b/worlds/alttp/test/vanilla/TestDarkWorld.py similarity index 99% rename from test/vanilla/TestDarkWorld.py rename to worlds/alttp/test/vanilla/TestDarkWorld.py index 885af449b04c..ecb3e5583098 100644 --- a/test/vanilla/TestDarkWorld.py +++ b/worlds/alttp/test/vanilla/TestDarkWorld.py @@ -1,4 +1,4 @@ -from test.vanilla.TestVanilla import TestVanilla +from .TestVanilla import TestVanilla class TestDarkWorld(TestVanilla): diff --git a/test/vanilla/TestDeathMountain.py b/worlds/alttp/test/vanilla/TestDeathMountain.py similarity index 99% rename from test/vanilla/TestDeathMountain.py rename to worlds/alttp/test/vanilla/TestDeathMountain.py index 821dd7bcfa4a..ecb3831f6ad1 100644 --- a/test/vanilla/TestDeathMountain.py +++ b/worlds/alttp/test/vanilla/TestDeathMountain.py @@ -1,4 +1,4 @@ -from test.vanilla.TestVanilla import TestVanilla +from .TestVanilla import TestVanilla class TestDeathMountain(TestVanilla): diff --git a/test/vanilla/TestEntrances.py b/worlds/alttp/test/vanilla/TestEntrances.py similarity index 99% rename from test/vanilla/TestEntrances.py rename to worlds/alttp/test/vanilla/TestEntrances.py index 5bcd557f4e70..dbbebbd1a736 100644 --- a/test/vanilla/TestEntrances.py +++ b/worlds/alttp/test/vanilla/TestEntrances.py @@ -1,4 +1,4 @@ -from test.vanilla.TestVanilla import TestVanilla +from .TestVanilla import TestVanilla class TestEntrances(TestVanilla): diff --git a/test/vanilla/TestLightWorld.py b/worlds/alttp/test/vanilla/TestLightWorld.py similarity index 99% rename from test/vanilla/TestLightWorld.py rename to worlds/alttp/test/vanilla/TestLightWorld.py index c3a03bc0f490..977e807290d1 100644 --- a/test/vanilla/TestLightWorld.py +++ b/worlds/alttp/test/vanilla/TestLightWorld.py @@ -1,4 +1,4 @@ -from test.vanilla.TestVanilla import TestVanilla +from .TestVanilla import TestVanilla class TestLightWorld(TestVanilla): diff --git a/test/vanilla/TestVanilla.py b/worlds/alttp/test/vanilla/TestVanilla.py similarity index 100% rename from test/vanilla/TestVanilla.py rename to worlds/alttp/test/vanilla/TestVanilla.py diff --git a/test/shops/__init__.py b/worlds/alttp/test/vanilla/__init__.py similarity index 100% rename from test/shops/__init__.py rename to worlds/alttp/test/vanilla/__init__.py diff --git a/test/minecraft/TestAdvancements.py b/worlds/minecraft/test/TestAdvancements.py similarity index 78% rename from test/minecraft/TestAdvancements.py rename to worlds/minecraft/test/TestAdvancements.py index f86d5a733308..5fc64f76bf44 100644 --- a/test/minecraft/TestAdvancements.py +++ b/worlds/minecraft/test/TestAdvancements.py @@ -1,6 +1,7 @@ -from test.minecraft.TestMinecraft import TestMinecraft +from .TestMinecraft import TestMinecraft -# Format: + +# Format: # [location, expected_result, given_items, [excluded_items]] # Every advancement has its own test, named by its internal ID number. class TestAdvancements(TestMinecraft): @@ -18,12 +19,12 @@ def test_42000(self): def test_42001(self): self.run_location_tests([ - ["Oh Shiny", False, []], - ["Oh Shiny", False, [], ['Progressive Resource Crafting']], - ["Oh Shiny", False, [], ['Flint and Steel']], - ["Oh Shiny", False, [], ['Progressive Tools']], - ["Oh Shiny", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Oh Shiny", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Oh Shiny", False, []], + ["Oh Shiny", False, [], ['Progressive Resource Crafting']], + ["Oh Shiny", False, [], ['Flint and Steel']], + ["Oh Shiny", False, [], ['Progressive Tools']], + ["Oh Shiny", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Oh Shiny", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["Oh Shiny", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) @@ -44,55 +45,55 @@ def test_42003(self): ["Very Very Frightening", False, [], ['Enchanting']], ["Very Very Frightening", False, [], ['Progressive Tools']], ["Very Very Frightening", False, [], ['Progressive Weapons']], - ["Very Very Frightening", True, ['Progressive Weapons', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', + ["Very Very Frightening", True, ['Progressive Weapons', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Enchanting', 'Progressive Resource Crafting', 'Progressive Resource Crafting', 'Channeling Book']], ]) def test_42004(self): self.run_location_tests([ - ["Hot Stuff", False, []], + ["Hot Stuff", False, []], ["Hot Stuff", False, [], ["Bucket"]], ["Hot Stuff", False, [], ["Progressive Resource Crafting"]], ["Hot Stuff", False, [], ["Progressive Tools"]], - ["Hot Stuff", True, ["Bucket", "Progressive Resource Crafting", "Progressive Tools"]], + ["Hot Stuff", True, ["Bucket", "Progressive Resource Crafting", "Progressive Tools"]], ]) def test_42005(self): self.run_location_tests([ - ["Free the End", False, []], - ["Free the End", False, [], ['Progressive Resource Crafting']], - ["Free the End", False, [], ['Flint and Steel']], - ["Free the End", False, [], ['Progressive Tools']], - ["Free the End", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["Free the End", False, [], ['Progressive Armor']], - ["Free the End", False, [], ['Brewing']], - ["Free the End", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Free the End", False, []], + ["Free the End", False, [], ['Progressive Resource Crafting']], + ["Free the End", False, [], ['Flint and Steel']], + ["Free the End", False, [], ['Progressive Tools']], + ["Free the End", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["Free the End", False, [], ['Progressive Armor']], + ["Free the End", False, [], ['Brewing']], + ["Free the End", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Free the End", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["Free the End", False, [], ['Archery']], + ["Free the End", False, [], ['Archery']], ["Free the End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Free the End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Free the End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) - def test_42006(self): + def test_42006(self): self.run_location_tests([ - ["A Furious Cocktail", False, []], - ["A Furious Cocktail", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["A Furious Cocktail", False, [], ['Flint and Steel']], - ["A Furious Cocktail", False, [], ['Progressive Tools']], - ["A Furious Cocktail", False, [], ['Progressive Weapons']], - ["A Furious Cocktail", False, [], ['Progressive Armor', 'Shield']], - ["A Furious Cocktail", False, [], ['Brewing']], - ["A Furious Cocktail", False, [], ['Bottles']], - ["A Furious Cocktail", False, [], ['Fishing Rod']], - ["A Furious Cocktail", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["A Furious Cocktail", False, []], + ["A Furious Cocktail", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], + ["A Furious Cocktail", False, [], ['Flint and Steel']], + ["A Furious Cocktail", False, [], ['Progressive Tools']], + ["A Furious Cocktail", False, [], ['Progressive Weapons']], + ["A Furious Cocktail", False, [], ['Progressive Armor', 'Shield']], + ["A Furious Cocktail", False, [], ['Brewing']], + ["A Furious Cocktail", False, [], ['Bottles']], + ["A Furious Cocktail", False, [], ['Fishing Rod']], + ["A Furious Cocktail", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], ["A Furious Cocktail", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', - 'Progressive Armor', 'Progressive Armor', + 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', + 'Progressive Armor', 'Progressive Armor', 'Enchanting', 'Brewing', 'Bottles', 'Fishing Rod']], ]) @@ -103,80 +104,80 @@ def test_42007(self): def test_42008(self): self.run_location_tests([ - ["Bring Home the Beacon", False, []], - ["Bring Home the Beacon", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["Bring Home the Beacon", False, [], ['Flint and Steel']], - ["Bring Home the Beacon", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Bring Home the Beacon", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["Bring Home the Beacon", False, ['Progressive Armor'], ['Progressive Armor']], - ["Bring Home the Beacon", False, [], ['Enchanting']], + ["Bring Home the Beacon", False, []], + ["Bring Home the Beacon", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], + ["Bring Home the Beacon", False, [], ['Flint and Steel']], + ["Bring Home the Beacon", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Bring Home the Beacon", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["Bring Home the Beacon", False, ['Progressive Armor'], ['Progressive Armor']], + ["Bring Home the Beacon", False, [], ['Enchanting']], ["Bring Home the Beacon", False, [], ['Brewing']], - ["Bring Home the Beacon", False, [], ['Bottles']], + ["Bring Home the Beacon", False, [], ['Bottles']], ["Bring Home the Beacon", True, [], ['Bucket']], - ["Bring Home the Beacon", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', - 'Progressive Armor', 'Progressive Armor', + ["Bring Home the Beacon", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', + 'Progressive Armor', 'Progressive Armor', 'Enchanting', 'Brewing', 'Bottles']], ]) def test_42009(self): self.run_location_tests([ - ["Not Today, Thank You", False, []], - ["Not Today, Thank You", False, [], ["Shield"]], - ["Not Today, Thank You", False, [], ["Progressive Resource Crafting"]], - ["Not Today, Thank You", False, [], ["Progressive Tools"]], - ["Not Today, Thank You", True, ["Shield", "Progressive Resource Crafting", "Progressive Tools"]], + ["Not Today, Thank You", False, []], + ["Not Today, Thank You", False, [], ["Shield"]], + ["Not Today, Thank You", False, [], ["Progressive Resource Crafting"]], + ["Not Today, Thank You", False, [], ["Progressive Tools"]], + ["Not Today, Thank You", True, ["Shield", "Progressive Resource Crafting", "Progressive Tools"]], ]) def test_42010(self): self.run_location_tests([ - ["Isn't It Iron Pick", False, []], - ["Isn't It Iron Pick", True, ["Progressive Tools", "Progressive Tools"], ["Progressive Tools"]], - ["Isn't It Iron Pick", False, [], ["Progressive Tools", "Progressive Tools"]], - ["Isn't It Iron Pick", False, [], ["Progressive Resource Crafting"]], - ["Isn't It Iron Pick", False, ["Progressive Tools", "Progressive Resource Crafting"]], - ["Isn't It Iron Pick", True, ["Progressive Tools", "Progressive Tools", "Progressive Resource Crafting"]], + ["Isn't It Iron Pick", False, []], + ["Isn't It Iron Pick", True, ["Progressive Tools", "Progressive Tools"], ["Progressive Tools"]], + ["Isn't It Iron Pick", False, [], ["Progressive Tools", "Progressive Tools"]], + ["Isn't It Iron Pick", False, [], ["Progressive Resource Crafting"]], + ["Isn't It Iron Pick", False, ["Progressive Tools", "Progressive Resource Crafting"]], + ["Isn't It Iron Pick", True, ["Progressive Tools", "Progressive Tools", "Progressive Resource Crafting"]], ]) - def test_42011(self): + def test_42011(self): self.run_location_tests([ - ["Local Brewery", False, []], - ["Local Brewery", False, [], ['Progressive Resource Crafting']], - ["Local Brewery", False, [], ['Flint and Steel']], - ["Local Brewery", False, [], ['Progressive Tools']], - ["Local Brewery", False, [], ['Progressive Weapons']], - ["Local Brewery", False, [], ['Progressive Armor', 'Shield']], - ["Local Brewery", False, [], ['Brewing']], + ["Local Brewery", False, []], + ["Local Brewery", False, [], ['Progressive Resource Crafting']], + ["Local Brewery", False, [], ['Flint and Steel']], + ["Local Brewery", False, [], ['Progressive Tools']], + ["Local Brewery", False, [], ['Progressive Weapons']], + ["Local Brewery", False, [], ['Progressive Armor', 'Shield']], + ["Local Brewery", False, [], ['Brewing']], ["Local Brewery", False, [], ['Bottles']], - ["Local Brewery", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Local Brewery", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], - ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], + ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], + ["Local Brewery", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], ]) def test_42012(self): self.run_location_tests([ - ["The Next Generation", False, []], - ["The Next Generation", False, [], ['Progressive Resource Crafting']], - ["The Next Generation", False, [], ['Flint and Steel']], - ["The Next Generation", False, [], ['Progressive Tools']], - ["The Next Generation", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["The Next Generation", False, [], ['Progressive Armor']], - ["The Next Generation", False, [], ['Brewing']], - ["The Next Generation", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["The Next Generation", False, []], + ["The Next Generation", False, [], ['Progressive Resource Crafting']], + ["The Next Generation", False, [], ['Flint and Steel']], + ["The Next Generation", False, [], ['Progressive Tools']], + ["The Next Generation", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["The Next Generation", False, [], ['Progressive Armor']], + ["The Next Generation", False, [], ['Brewing']], + ["The Next Generation", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["The Next Generation", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["The Next Generation", False, [], ['Archery']], - ["The Next Generation", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The Next Generation", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + ["The Next Generation", False, [], ['Archery']], + ["The Next Generation", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The Next Generation", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) @@ -189,33 +190,33 @@ def test_42013(self): def test_42014(self): self.run_location_tests([ - ["Hot Tourist Destinations", False, []], - ["Hot Tourist Destinations", False, [], ['Progressive Resource Crafting']], - ["Hot Tourist Destinations", False, [], ['Flint and Steel']], - ["Hot Tourist Destinations", False, [], ['Progressive Tools']], - ["Hot Tourist Destinations", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Hot Tourist Destinations", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Hot Tourist Destinations", False, []], + ["Hot Tourist Destinations", False, [], ['Progressive Resource Crafting']], + ["Hot Tourist Destinations", False, [], ['Flint and Steel']], + ["Hot Tourist Destinations", False, [], ['Progressive Tools']], + ["Hot Tourist Destinations", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Hot Tourist Destinations", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["Hot Tourist Destinations", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) def test_42015(self): self.run_location_tests([ - ["This Boat Has Legs", False, []], - ["This Boat Has Legs", False, [], ['Progressive Resource Crafting']], - ["This Boat Has Legs", False, [], ['Flint and Steel']], - ["This Boat Has Legs", False, [], ['Progressive Tools']], - ["This Boat Has Legs", False, [], ['Progressive Weapons']], - ["This Boat Has Legs", False, [], ['Progressive Armor', 'Shield']], + ["This Boat Has Legs", False, []], + ["This Boat Has Legs", False, [], ['Progressive Resource Crafting']], + ["This Boat Has Legs", False, [], ['Flint and Steel']], + ["This Boat Has Legs", False, [], ['Progressive Tools']], + ["This Boat Has Legs", False, [], ['Progressive Weapons']], + ["This Boat Has Legs", False, [], ['Progressive Armor', 'Shield']], ["This Boat Has Legs", False, [], ['Fishing Rod']], ["This Boat Has Legs", False, [], ['Saddle']], - ["This Boat Has Legs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Bucket', 'Fishing Rod']], + ["This Boat Has Legs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Bucket', 'Fishing Rod']], ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']], - ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Flint and Steel', 'Bucket', 'Fishing Rod']], + ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Flint and Steel', 'Bucket', 'Fishing Rod']], ["This Boat Has Legs", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Fishing Rod']], ]) - def test_42016(self): + def test_42016(self): self.run_location_tests([ ["Sniper Duel", False, []], ["Sniper Duel", False, [], ['Archery']], @@ -224,60 +225,60 @@ def test_42016(self): def test_42017(self): self.run_location_tests([ - ["Nether", False, []], - ["Nether", False, [], ['Progressive Resource Crafting']], - ["Nether", False, [], ['Flint and Steel']], - ["Nether", False, [], ['Progressive Tools']], - ["Nether", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Nether", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Nether", False, []], + ["Nether", False, [], ['Progressive Resource Crafting']], + ["Nether", False, [], ['Flint and Steel']], + ["Nether", False, [], ['Progressive Tools']], + ["Nether", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Nether", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["Nether", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) def test_42018(self): self.run_location_tests([ - ["Great View From Up Here", False, []], - ["Great View From Up Here", False, [], ['Progressive Resource Crafting']], - ["Great View From Up Here", False, [], ['Flint and Steel']], - ["Great View From Up Here", False, [], ['Progressive Tools']], - ["Great View From Up Here", False, [], ['Progressive Weapons']], - ["Great View From Up Here", False, [], ['Progressive Armor', 'Shield']], - ["Great View From Up Here", False, [], ['Brewing']], - ["Great View From Up Here", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Great View From Up Here", False, []], + ["Great View From Up Here", False, [], ['Progressive Resource Crafting']], + ["Great View From Up Here", False, [], ['Flint and Steel']], + ["Great View From Up Here", False, [], ['Progressive Tools']], + ["Great View From Up Here", False, [], ['Progressive Weapons']], + ["Great View From Up Here", False, [], ['Progressive Armor', 'Shield']], + ["Great View From Up Here", False, [], ['Brewing']], + ["Great View From Up Here", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Great View From Up Here", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Great View From Up Here", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42019(self): self.run_location_tests([ - ["How Did We Get Here?", False, []], - ["How Did We Get Here?", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["How Did We Get Here?", False, [], ['Flint and Steel']], - ["How Did We Get Here?", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["How Did We Get Here?", False, ['Progressive Weapons', 'Progressive Weapons'], ['Progressive Weapons']], - ["How Did We Get Here?", False, ['Progressive Armor'], ['Progressive Armor']], - ["How Did We Get Here?", False, [], ['Shield']], - ["How Did We Get Here?", False, [], ['Enchanting']], - ["How Did We Get Here?", False, [], ['Brewing']], - ["How Did We Get Here?", False, [], ['Bottles']], - ["How Did We Get Here?", False, [], ['Archery']], - ["How Did We Get Here?", False, [], ['Fishing Rod']], + ["How Did We Get Here?", False, []], + ["How Did We Get Here?", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], + ["How Did We Get Here?", False, [], ['Flint and Steel']], + ["How Did We Get Here?", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["How Did We Get Here?", False, ['Progressive Weapons', 'Progressive Weapons'], ['Progressive Weapons']], + ["How Did We Get Here?", False, ['Progressive Armor'], ['Progressive Armor']], + ["How Did We Get Here?", False, [], ['Shield']], + ["How Did We Get Here?", False, [], ['Enchanting']], + ["How Did We Get Here?", False, [], ['Brewing']], + ["How Did We Get Here?", False, [], ['Bottles']], + ["How Did We Get Here?", False, [], ['Archery']], + ["How Did We Get Here?", False, [], ['Fishing Rod']], ["How Did We Get Here?", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["How Did We Get Here?", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', 'Flint and Steel', - 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', - 'Progressive Armor', 'Progressive Armor', 'Shield', - 'Enchanting', 'Brewing', 'Archery', 'Bottles', 'Fishing Rod', + ["How Did We Get Here?", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', 'Flint and Steel', + 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', + 'Progressive Armor', 'Progressive Armor', 'Shield', + 'Enchanting', 'Brewing', 'Archery', 'Bottles', 'Fishing Rod', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) @@ -292,30 +293,30 @@ def test_42020(self): def test_42021(self): self.run_location_tests([ - ["Spooky Scary Skeleton", False, []], - ["Spooky Scary Skeleton", False, [], ['Progressive Resource Crafting']], - ["Spooky Scary Skeleton", False, [], ['Flint and Steel']], - ["Spooky Scary Skeleton", False, [], ['Progressive Tools']], - ["Spooky Scary Skeleton", False, [], ['Progressive Weapons']], - ["Spooky Scary Skeleton", False, [], ['Progressive Armor', 'Shield']], - ["Spooky Scary Skeleton", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor']], + ["Spooky Scary Skeleton", False, []], + ["Spooky Scary Skeleton", False, [], ['Progressive Resource Crafting']], + ["Spooky Scary Skeleton", False, [], ['Flint and Steel']], + ["Spooky Scary Skeleton", False, [], ['Progressive Tools']], + ["Spooky Scary Skeleton", False, [], ['Progressive Weapons']], + ["Spooky Scary Skeleton", False, [], ['Progressive Armor', 'Shield']], + ["Spooky Scary Skeleton", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor']], ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor']], - ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], + ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], ["Spooky Scary Skeleton", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield']], ]) def test_42022(self): self.run_location_tests([ ["Two by Two", False, []], - ["Two by Two", False, [], ['Progressive Resource Crafting']], - ["Two by Two", False, [], ['Flint and Steel']], - ["Two by Two", False, [], ['Progressive Tools']], + ["Two by Two", False, [], ['Progressive Resource Crafting']], + ["Two by Two", False, [], ['Flint and Steel']], + ["Two by Two", False, [], ['Progressive Tools']], ["Two by Two", False, [], ['Progressive Weapons']], ["Two by Two", False, [], ['Bucket']], ["Two by Two", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Two by Two", False, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons']], - ["Two by Two", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], + ["Two by Two", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], ]) def test_42023(self): @@ -335,12 +336,12 @@ def test_42024(self): def test_42025(self): self.run_location_tests([ - ["We Need to Go Deeper", False, []], - ["We Need to Go Deeper", False, [], ['Progressive Resource Crafting']], - ["We Need to Go Deeper", False, [], ['Flint and Steel']], - ["We Need to Go Deeper", False, [], ['Progressive Tools']], - ["We Need to Go Deeper", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["We Need to Go Deeper", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["We Need to Go Deeper", False, []], + ["We Need to Go Deeper", False, [], ['Progressive Resource Crafting']], + ["We Need to Go Deeper", False, [], ['Flint and Steel']], + ["We Need to Go Deeper", False, [], ['Progressive Tools']], + ["We Need to Go Deeper", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["We Need to Go Deeper", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["We Need to Go Deeper", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) @@ -371,53 +372,53 @@ def test_42028(self): def test_42029(self): self.run_location_tests([ - ["Zombie Doctor", False, []], - ["Zombie Doctor", False, [], ['Progressive Resource Crafting']], - ["Zombie Doctor", False, [], ['Flint and Steel']], - ["Zombie Doctor", False, [], ['Progressive Tools']], - ["Zombie Doctor", False, [], ['Progressive Weapons']], - ["Zombie Doctor", False, [], ['Progressive Armor', 'Shield']], - ["Zombie Doctor", False, [], ['Brewing']], + ["Zombie Doctor", False, []], + ["Zombie Doctor", False, [], ['Progressive Resource Crafting']], + ["Zombie Doctor", False, [], ['Flint and Steel']], + ["Zombie Doctor", False, [], ['Progressive Tools']], + ["Zombie Doctor", False, [], ['Progressive Weapons']], + ["Zombie Doctor", False, [], ['Progressive Armor', 'Shield']], + ["Zombie Doctor", False, [], ['Brewing']], ["Zombie Doctor", False, [], ['Bottles']], - ["Zombie Doctor", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Zombie Doctor", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], + ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], - ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], + ["Zombie Doctor", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], ]) def test_42030(self): self.run_location_tests([ - ["The City at the End of the Game", False, []], - ["The City at the End of the Game", False, [], ['Progressive Resource Crafting']], - ["The City at the End of the Game", False, [], ['Flint and Steel']], - ["The City at the End of the Game", False, [], ['Progressive Tools']], - ["The City at the End of the Game", False, [], ['Progressive Weapons']], - ["The City at the End of the Game", False, [], ['Progressive Armor', 'Shield']], - ["The City at the End of the Game", False, [], ['Brewing']], - ["The City at the End of the Game", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["The City at the End of the Game", False, []], + ["The City at the End of the Game", False, [], ['Progressive Resource Crafting']], + ["The City at the End of the Game", False, [], ['Flint and Steel']], + ["The City at the End of the Game", False, [], ['Progressive Tools']], + ["The City at the End of the Game", False, [], ['Progressive Weapons']], + ["The City at the End of the Game", False, [], ['Progressive Armor', 'Shield']], + ["The City at the End of the Game", False, [], ['Brewing']], + ["The City at the End of the Game", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["The City at the End of the Game", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The City at the End of the Game", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42031(self): self.run_location_tests([ - ["Ice Bucket Challenge", False, []], + ["Ice Bucket Challenge", False, []], ["Ice Bucket Challenge", False, ["Progressive Tools", "Progressive Tools"], ["Progressive Tools"]], ["Ice Bucket Challenge", False, [], ["Progressive Resource Crafting"]], ["Ice Bucket Challenge", True, ["Progressive Tools", "Progressive Tools", "Progressive Tools", "Progressive Resource Crafting"]], @@ -425,54 +426,54 @@ def test_42031(self): def test_42032(self): self.run_location_tests([ - ["Remote Getaway", False, []], - ["Remote Getaway", False, [], ['Progressive Resource Crafting']], - ["Remote Getaway", False, [], ['Flint and Steel']], - ["Remote Getaway", False, [], ['Progressive Tools']], - ["Remote Getaway", False, [], ['Progressive Weapons']], - ["Remote Getaway", False, [], ['Progressive Armor', 'Shield']], - ["Remote Getaway", False, [], ['Brewing']], - ["Remote Getaway", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Remote Getaway", False, []], + ["Remote Getaway", False, [], ['Progressive Resource Crafting']], + ["Remote Getaway", False, [], ['Flint and Steel']], + ["Remote Getaway", False, [], ['Progressive Tools']], + ["Remote Getaway", False, [], ['Progressive Weapons']], + ["Remote Getaway", False, [], ['Progressive Armor', 'Shield']], + ["Remote Getaway", False, [], ['Brewing']], + ["Remote Getaway", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Remote Getaway", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Remote Getaway", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42033(self): self.run_location_tests([ - ["Into Fire", False, []], - ["Into Fire", False, [], ['Progressive Resource Crafting']], - ["Into Fire", False, [], ['Flint and Steel']], - ["Into Fire", False, [], ['Progressive Tools']], - ["Into Fire", False, [], ['Progressive Weapons']], - ["Into Fire", False, [], ['Progressive Armor', 'Shield']], - ["Into Fire", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor']], + ["Into Fire", False, []], + ["Into Fire", False, [], ['Progressive Resource Crafting']], + ["Into Fire", False, [], ['Flint and Steel']], + ["Into Fire", False, [], ['Progressive Tools']], + ["Into Fire", False, [], ['Progressive Weapons']], + ["Into Fire", False, [], ['Progressive Armor', 'Shield']], + ["Into Fire", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor']], ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor']], - ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], + ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], ["Into Fire", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield']], ]) def test_42034(self): self.run_location_tests([ - ["War Pigs", False, []], - ["War Pigs", False, [], ['Progressive Resource Crafting']], - ["War Pigs", False, [], ['Flint and Steel']], - ["War Pigs", False, [], ['Progressive Tools']], - ["War Pigs", False, [], ['Progressive Weapons']], - ["War Pigs", False, [], ['Progressive Armor', 'Shield']], - ["War Pigs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["War Pigs", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], + ["War Pigs", False, []], + ["War Pigs", False, [], ['Progressive Resource Crafting']], + ["War Pigs", False, [], ['Flint and Steel']], + ["War Pigs", False, [], ['Progressive Tools']], + ["War Pigs", False, [], ['Progressive Weapons']], + ["War Pigs", False, [], ['Progressive Armor', 'Shield']], + ["War Pigs", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["War Pigs", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield']], ["War Pigs", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield']], ]) @@ -490,7 +491,7 @@ def test_42036(self): ["Total Beelocation", False, [], ['Silk Touch Book']], ["Total Beelocation", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], ["Total Beelocation", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Total Beelocation", True, ['Enchanting', 'Silk Touch Book', 'Progressive Resource Crafting', 'Progressive Resource Crafting', + ["Total Beelocation", True, ['Enchanting', 'Silk Touch Book', 'Progressive Resource Crafting', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools']], ]) @@ -501,34 +502,34 @@ def test_42037(self): ["Arbalistic", False, [], ['Piercing IV Book']], ["Arbalistic", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], ["Arbalistic", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Arbalistic", False, [], ['Archery']], - ["Arbalistic", True, ['Enchanting', 'Piercing IV Book', 'Progressive Resource Crafting', 'Progressive Resource Crafting', + ["Arbalistic", False, [], ['Archery']], + ["Arbalistic", True, ['Enchanting', 'Piercing IV Book', 'Progressive Resource Crafting', 'Progressive Resource Crafting', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Archery']], ]) - def test_42038(self): + def test_42038(self): self.run_location_tests([ - ["The End... Again...", False, []], - ["The End... Again...", False, [], ['Progressive Resource Crafting']], - ["The End... Again...", False, [], ['Flint and Steel']], - ["The End... Again...", False, [], ['Progressive Tools']], - ["The End... Again...", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["The End... Again...", False, [], ['Progressive Armor']], - ["The End... Again...", False, [], ['Brewing']], - ["The End... Again...", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["The End... Again...", False, []], + ["The End... Again...", False, [], ['Progressive Resource Crafting']], + ["The End... Again...", False, [], ['Flint and Steel']], + ["The End... Again...", False, [], ['Progressive Tools']], + ["The End... Again...", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["The End... Again...", False, [], ['Progressive Armor']], + ["The End... Again...", False, [], ['Brewing']], + ["The End... Again...", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["The End... Again...", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["The End... Again...", False, [], ['Archery']], - ["The End... Again...", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End... Again...", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + ["The End... Again...", False, [], ['Archery']], + ["The End... Again...", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The End... Again...", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Archery', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42039(self): self.run_location_tests([ - ["Acquire Hardware", False, []], + ["Acquire Hardware", False, []], ["Acquire Hardware", False, [], ["Progressive Tools"]], ["Acquire Hardware", False, [], ["Progressive Resource Crafting"]], ["Acquire Hardware", True, ["Progressive Tools", "Progressive Resource Crafting"]], @@ -536,12 +537,12 @@ def test_42039(self): def test_42040(self): self.run_location_tests([ - ["Not Quite \"Nine\" Lives", False, []], - ["Not Quite \"Nine\" Lives", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["Not Quite \"Nine\" Lives", False, [], ['Flint and Steel']], - ["Not Quite \"Nine\" Lives", False, [], ['Progressive Tools']], - ["Not Quite \"Nine\" Lives", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Not Quite \"Nine\" Lives", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Not Quite \"Nine\" Lives", False, []], + ["Not Quite \"Nine\" Lives", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], + ["Not Quite \"Nine\" Lives", False, [], ['Flint and Steel']], + ["Not Quite \"Nine\" Lives", False, [], ['Progressive Tools']], + ["Not Quite \"Nine\" Lives", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Not Quite \"Nine\" Lives", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["Not Quite \"Nine\" Lives", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) @@ -556,26 +557,26 @@ def test_42041(self): def test_42042(self): self.run_location_tests([ - ["Sky's the Limit", False, []], - ["Sky's the Limit", False, [], ['Progressive Resource Crafting']], - ["Sky's the Limit", False, [], ['Flint and Steel']], - ["Sky's the Limit", False, [], ['Progressive Tools']], - ["Sky's the Limit", False, [], ['Progressive Weapons']], - ["Sky's the Limit", False, [], ['Progressive Armor', 'Shield']], - ["Sky's the Limit", False, [], ['Brewing']], - ["Sky's the Limit", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Sky's the Limit", False, []], + ["Sky's the Limit", False, [], ['Progressive Resource Crafting']], + ["Sky's the Limit", False, [], ['Flint and Steel']], + ["Sky's the Limit", False, [], ['Progressive Tools']], + ["Sky's the Limit", False, [], ['Progressive Weapons']], + ["Sky's the Limit", False, [], ['Progressive Armor', 'Shield']], + ["Sky's the Limit", False, [], ['Brewing']], + ["Sky's the Limit", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Sky's the Limit", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["Sky's the Limit", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) @@ -589,12 +590,12 @@ def test_42043(self): def test_42044(self): self.run_location_tests([ - ["Return to Sender", False, []], - ["Return to Sender", False, [], ['Progressive Resource Crafting']], - ["Return to Sender", False, [], ['Flint and Steel']], - ["Return to Sender", False, [], ['Progressive Tools']], - ["Return to Sender", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Return to Sender", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], + ["Return to Sender", False, []], + ["Return to Sender", False, [], ['Progressive Resource Crafting']], + ["Return to Sender", False, [], ['Flint and Steel']], + ["Return to Sender", False, [], ['Progressive Tools']], + ["Return to Sender", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Return to Sender", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket']], ["Return to Sender", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools']], ]) @@ -610,27 +611,27 @@ def test_42045(self): def test_42046(self): self.run_location_tests([ - ["You Need a Mint", False, []], - ["You Need a Mint", False, [], ['Progressive Resource Crafting']], - ["You Need a Mint", False, [], ['Flint and Steel']], - ["You Need a Mint", False, [], ['Progressive Tools']], - ["You Need a Mint", False, [], ['Progressive Weapons']], - ["You Need a Mint", False, [], ['Progressive Armor', 'Shield']], - ["You Need a Mint", False, [], ['Brewing']], - ["You Need a Mint", False, [], ['Bottles']], - ["You Need a Mint", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["You Need a Mint", False, []], + ["You Need a Mint", False, [], ['Progressive Resource Crafting']], + ["You Need a Mint", False, [], ['Flint and Steel']], + ["You Need a Mint", False, [], ['Progressive Tools']], + ["You Need a Mint", False, [], ['Progressive Weapons']], + ["You Need a Mint", False, [], ['Progressive Armor', 'Shield']], + ["You Need a Mint", False, [], ['Brewing']], + ["You Need a Mint", False, [], ['Bottles']], + ["You Need a Mint", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["You Need a Mint", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', - '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], - ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', + '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], + ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', - '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], - ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', 'Brewing', + 'Progressive Weapons', 'Shield', 'Brewing', + '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], + ["You Need a Mint", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Bottles']], ]) @@ -641,22 +642,22 @@ def test_42047(self): def test_42048(self): self.run_location_tests([ - ["Monsters Hunted", False, []], - ["Monsters Hunted", False, [], ['Progressive Resource Crafting']], - ["Monsters Hunted", False, [], ['Flint and Steel']], - ["Monsters Hunted", False, [], ['Progressive Tools']], - ["Monsters Hunted", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["Monsters Hunted", False, [], ['Progressive Armor']], - ["Monsters Hunted", False, [], ['Brewing']], - ["Monsters Hunted", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Monsters Hunted", False, []], + ["Monsters Hunted", False, [], ['Progressive Resource Crafting']], + ["Monsters Hunted", False, [], ['Flint and Steel']], + ["Monsters Hunted", False, [], ['Progressive Tools']], + ["Monsters Hunted", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["Monsters Hunted", False, [], ['Progressive Armor']], + ["Monsters Hunted", False, [], ['Brewing']], + ["Monsters Hunted", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Monsters Hunted", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["Monsters Hunted", False, [], ['Archery']], - ["Monsters Hunted", False, [], ['Enchanting']], - ["Monsters Hunted", False, [], ['Fishing Rod']], - ["Monsters Hunted", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Archery', - 'Progressive Armor', 'Progressive Armor', 'Enchanting', - 'Fishing Rod', 'Brewing', 'Bottles', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["Monsters Hunted", False, [], ['Archery']], + ["Monsters Hunted", False, [], ['Enchanting']], + ["Monsters Hunted", False, [], ['Fishing Rod']], + ["Monsters Hunted", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Archery', + 'Progressive Armor', 'Progressive Armor', 'Enchanting', + 'Fishing Rod', 'Brewing', 'Bottles', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42049(self): @@ -681,64 +682,64 @@ def test_42050(self): def test_42051(self): self.run_location_tests([ - ["Eye Spy", False, []], - ["Eye Spy", False, [], ['Progressive Resource Crafting']], - ["Eye Spy", False, [], ['Flint and Steel']], - ["Eye Spy", False, [], ['Progressive Tools']], - ["Eye Spy", False, [], ['Progressive Weapons']], - ["Eye Spy", False, [], ['Progressive Armor', 'Shield']], - ["Eye Spy", False, [], ['Brewing']], - ["Eye Spy", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Eye Spy", False, []], + ["Eye Spy", False, [], ['Progressive Resource Crafting']], + ["Eye Spy", False, [], ['Flint and Steel']], + ["Eye Spy", False, [], ['Progressive Tools']], + ["Eye Spy", False, [], ['Progressive Weapons']], + ["Eye Spy", False, [], ['Progressive Armor', 'Shield']], + ["Eye Spy", False, [], ['Brewing']], + ["Eye Spy", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Eye Spy", False, [], ['3 Ender Pearls']], - ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls']], - ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls']], - ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls']], - ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls']], + ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls']], + ["Eye Spy", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls']], ]) def test_42052(self): self.run_location_tests([ - ["The End", False, []], - ["The End", False, [], ['Progressive Resource Crafting']], - ["The End", False, [], ['Flint and Steel']], - ["The End", False, [], ['Progressive Tools']], - ["The End", False, [], ['Progressive Weapons']], - ["The End", False, [], ['Progressive Armor', 'Shield']], - ["The End", False, [], ['Brewing']], - ["The End", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["The End", False, []], + ["The End", False, [], ['Progressive Resource Crafting']], + ["The End", False, [], ['Flint and Steel']], + ["The End", False, [], ['Progressive Tools']], + ["The End", False, [], ['Progressive Weapons']], + ["The End", False, [], ['Progressive Armor', 'Shield']], + ["The End", False, [], ['Brewing']], + ["The End", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["The End", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The End", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42053(self): self.run_location_tests([ - ["Serious Dedication", False, []], - ["Serious Dedication", False, [], ['Progressive Resource Crafting']], - ["Serious Dedication", False, [], ['Flint and Steel']], - ["Serious Dedication", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Serious Dedication", False, [], ['Progressive Weapons']], - ["Serious Dedication", False, [], ['Progressive Armor', 'Shield']], - ["Serious Dedication", False, [], ['Brewing']], + ["Serious Dedication", False, []], + ["Serious Dedication", False, [], ['Progressive Resource Crafting']], + ["Serious Dedication", False, [], ['Flint and Steel']], + ["Serious Dedication", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Serious Dedication", False, [], ['Progressive Weapons']], + ["Serious Dedication", False, [], ['Progressive Armor', 'Shield']], + ["Serious Dedication", False, [], ['Brewing']], ["Serious Dedication", False, [], ['Bottles']], ["Serious Dedication", False, [], ['Bed']], - ["Serious Dedication", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Serious Dedication", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles', 'Bed']], - ["Serious Dedication", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Serious Dedication", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles', 'Bed']], ]) @@ -749,7 +750,7 @@ def test_42054(self): ["Postmortal", False, [], ['Progressive Armor']], ["Postmortal", False, [], ['Shield']], ["Postmortal", False, [], ['Progressive Resource Crafting']], - ["Postmortal", False, [], ['Progressive Tools']], + ["Postmortal", False, [], ['Progressive Tools']], ["Postmortal", True, ['Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Shield', 'Progressive Resource Crafting', 'Progressive Tools']], ]) @@ -774,13 +775,13 @@ def test_42057(self): def test_42058(self): self.run_location_tests([ - ["Those Were the Days", False, []], - ["Those Were the Days", False, [], ['Progressive Resource Crafting']], - ["Those Were the Days", False, [], ['Flint and Steel']], - ["Those Were the Days", False, [], ['Progressive Tools']], - ["Those Were the Days", False, [], ['Progressive Weapons']], - ["Those Were the Days", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Those Were the Days", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], + ["Those Were the Days", False, []], + ["Those Were the Days", False, [], ['Progressive Resource Crafting']], + ["Those Were the Days", False, [], ['Flint and Steel']], + ["Those Were the Days", False, [], ['Progressive Tools']], + ["Those Were the Days", False, [], ['Progressive Weapons']], + ["Those Were the Days", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Those Were the Days", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], ["Those Were the Days", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons']], ]) @@ -791,59 +792,59 @@ def test_42059(self): ["Hero of the Village", False, [], ['Progressive Armor']], ["Hero of the Village", False, [], ['Shield']], ["Hero of the Village", False, [], ['Progressive Resource Crafting']], - ["Hero of the Village", False, [], ['Progressive Tools']], + ["Hero of the Village", False, [], ['Progressive Tools']], ["Hero of the Village", True, ['Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Shield', 'Progressive Resource Crafting', 'Progressive Tools']], ]) def test_42060(self): self.run_location_tests([ - ["Hidden in the Depths", False, []], - ["Hidden in the Depths", False, [], ['Progressive Resource Crafting']], - ["Hidden in the Depths", False, [], ['Flint and Steel']], - ["Hidden in the Depths", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Hidden in the Depths", False, [], ['Progressive Weapons']], - ["Hidden in the Depths", False, [], ['Progressive Armor', 'Shield']], - ["Hidden in the Depths", False, [], ['Brewing']], + ["Hidden in the Depths", False, []], + ["Hidden in the Depths", False, [], ['Progressive Resource Crafting']], + ["Hidden in the Depths", False, [], ['Flint and Steel']], + ["Hidden in the Depths", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Hidden in the Depths", False, [], ['Progressive Weapons']], + ["Hidden in the Depths", False, [], ['Progressive Armor', 'Shield']], + ["Hidden in the Depths", False, [], ['Brewing']], ["Hidden in the Depths", False, [], ['Bottles']], ["Hidden in the Depths", False, [], ['Bed']], - ["Hidden in the Depths", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Hidden in the Depths", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles', 'Bed']], - ["Hidden in the Depths", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Hidden in the Depths", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles', 'Bed']], ]) def test_42061(self): self.run_location_tests([ - ["Beaconator", False, []], - ["Beaconator", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["Beaconator", False, [], ['Flint and Steel']], - ["Beaconator", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Beaconator", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["Beaconator", False, ['Progressive Armor'], ['Progressive Armor']], + ["Beaconator", False, []], + ["Beaconator", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], + ["Beaconator", False, [], ['Flint and Steel']], + ["Beaconator", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Beaconator", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["Beaconator", False, ['Progressive Armor'], ['Progressive Armor']], ["Beaconator", False, [], ['Brewing']], - ["Beaconator", False, [], ['Bottles']], - ["Beaconator", False, [], ['Enchanting']], + ["Beaconator", False, [], ['Bottles']], + ["Beaconator", False, [], ['Enchanting']], ["Beaconator", True, [], ['Bucket']], - ["Beaconator", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', + ["Beaconator", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', 'Brewing', 'Bottles', 'Enchanting']], ]) def test_42062(self): self.run_location_tests([ - ["Withering Heights", False, []], - ["Withering Heights", False, [], ['Progressive Resource Crafting']], - ["Withering Heights", False, [], ['Flint and Steel']], - ["Withering Heights", False, [], ['Progressive Tools']], - ["Withering Heights", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], - ["Withering Heights", False, ['Progressive Armor'], ['Progressive Armor']], - ["Withering Heights", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Withering Heights", False, []], + ["Withering Heights", False, [], ['Progressive Resource Crafting']], + ["Withering Heights", False, [], ['Flint and Steel']], + ["Withering Heights", False, [], ['Progressive Tools']], + ["Withering Heights", False, ['Progressive Weapons'], ['Progressive Weapons', 'Progressive Weapons']], + ["Withering Heights", False, ['Progressive Armor'], ['Progressive Armor']], + ["Withering Heights", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Withering Heights", False, [], ['Brewing']], - ["Withering Heights", False, [], ['Bottles']], - ["Withering Heights", False, [], ['Enchanting']], - ["Withering Heights", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', + ["Withering Heights", False, [], ['Bottles']], + ["Withering Heights", False, [], ['Enchanting']], + ["Withering Heights", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', 'Brewing', 'Bottles', 'Enchanting']], ]) @@ -852,38 +853,38 @@ def test_42063(self): ["A Balanced Diet", False, []], ["A Balanced Diet", False, [], ['Bottles']], ["A Balanced Diet", False, ['Progressive Resource Crafting'], ['Progressive Resource Crafting']], - ["A Balanced Diet", False, [], ['Flint and Steel']], - ["A Balanced Diet", False, [], ['Progressive Tools']], - ["A Balanced Diet", False, [], ['Progressive Weapons']], - ["A Balanced Diet", False, [], ['Progressive Armor', 'Shield']], - ["A Balanced Diet", False, [], ['Brewing']], - ["A Balanced Diet", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["A Balanced Diet", False, [], ['Flint and Steel']], + ["A Balanced Diet", False, [], ['Progressive Tools']], + ["A Balanced Diet", False, [], ['Progressive Weapons']], + ["A Balanced Diet", False, [], ['Progressive Armor', 'Shield']], + ["A Balanced Diet", False, [], ['Brewing']], + ["A Balanced Diet", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["A Balanced Diet", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Bottles', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', 'Bottles', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Bottles', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', - 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', 'Bottles', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', 'Bottles', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Bottles', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Bottles', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["A Balanced Diet", True, ['Progressive Resource Crafting', 'Progressive Resource Crafting', + 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Bottles', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) def test_42064(self): self.run_location_tests([ - ["Subspace Bubble", False, []], - ["Subspace Bubble", False, [], ['Progressive Resource Crafting']], - ["Subspace Bubble", False, [], ['Flint and Steel']], - ["Subspace Bubble", False, [], ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Subspace Bubble", True, ['Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Flint and Steel', 'Progressive Resource Crafting']], + ["Subspace Bubble", False, []], + ["Subspace Bubble", False, [], ['Progressive Resource Crafting']], + ["Subspace Bubble", False, [], ['Flint and Steel']], + ["Subspace Bubble", False, [], ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Subspace Bubble", True, ['Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Flint and Steel', 'Progressive Resource Crafting']], ]) def test_42065(self): @@ -893,18 +894,18 @@ def test_42065(self): def test_42066(self): self.run_location_tests([ - ["Country Lode, Take Me Home", False, []], - ["Country Lode, Take Me Home", False, [], ['Progressive Resource Crafting']], - ["Country Lode, Take Me Home", False, [], ['Flint and Steel']], - ["Country Lode, Take Me Home", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Country Lode, Take Me Home", False, [], ['Progressive Weapons']], - ["Country Lode, Take Me Home", False, [], ['Progressive Armor', 'Shield']], - ["Country Lode, Take Me Home", False, [], ['Brewing']], + ["Country Lode, Take Me Home", False, []], + ["Country Lode, Take Me Home", False, [], ['Progressive Resource Crafting']], + ["Country Lode, Take Me Home", False, [], ['Flint and Steel']], + ["Country Lode, Take Me Home", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Country Lode, Take Me Home", False, [], ['Progressive Weapons']], + ["Country Lode, Take Me Home", False, [], ['Progressive Armor', 'Shield']], + ["Country Lode, Take Me Home", False, [], ['Brewing']], ["Country Lode, Take Me Home", False, [], ['Bottles']], ["Country Lode, Take Me Home", False, [], ['Bed']], - ["Country Lode, Take Me Home", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Country Lode, Take Me Home", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles', 'Bed']], - ["Country Lode, Take Me Home", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Country Lode, Take Me Home", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles', 'Bed']], ]) @@ -928,33 +929,33 @@ def test_42068(self): def test_42069(self): self.run_location_tests([ - ["Uneasy Alliance", False, []], - ["Uneasy Alliance", False, [], ['Progressive Resource Crafting']], - ["Uneasy Alliance", False, [], ['Flint and Steel']], - ["Uneasy Alliance", False, [], ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Uneasy Alliance", False, [], ['Fishing Rod']], - ["Uneasy Alliance", True, ['Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Flint and Steel', 'Progressive Resource Crafting', 'Fishing Rod']], + ["Uneasy Alliance", False, []], + ["Uneasy Alliance", False, [], ['Progressive Resource Crafting']], + ["Uneasy Alliance", False, [], ['Flint and Steel']], + ["Uneasy Alliance", False, [], ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Uneasy Alliance", False, [], ['Fishing Rod']], + ["Uneasy Alliance", True, ['Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Flint and Steel', 'Progressive Resource Crafting', 'Fishing Rod']], ]) def test_42070(self): self.run_location_tests([ - ["Diamonds!", False, []], - ["Diamonds!", True, ["Progressive Tools", "Progressive Tools"], ["Progressive Tools"]], - ["Diamonds!", False, [], ["Progressive Tools", "Progressive Tools"]], - ["Diamonds!", False, [], ["Progressive Resource Crafting"]], - ["Diamonds!", False, ["Progressive Tools", "Progressive Resource Crafting"]], - ["Diamonds!", True, ["Progressive Tools", "Progressive Tools", "Progressive Resource Crafting"]], + ["Diamonds!", False, []], + ["Diamonds!", True, ["Progressive Tools", "Progressive Tools"], ["Progressive Tools"]], + ["Diamonds!", False, [], ["Progressive Tools", "Progressive Tools"]], + ["Diamonds!", False, [], ["Progressive Resource Crafting"]], + ["Diamonds!", False, ["Progressive Tools", "Progressive Resource Crafting"]], + ["Diamonds!", True, ["Progressive Tools", "Progressive Tools", "Progressive Resource Crafting"]], ]) def test_42071(self): self.run_location_tests([ - ["A Terrible Fortress", False, []], - ["A Terrible Fortress", False, [], ['Progressive Resource Crafting']], - ["A Terrible Fortress", False, [], ['Flint and Steel']], - ["A Terrible Fortress", False, [], ['Progressive Tools']], - ["A Terrible Fortress", False, [], ['Progressive Weapons']], - ["A Terrible Fortress", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["A Terrible Fortress", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], + ["A Terrible Fortress", False, []], + ["A Terrible Fortress", False, [], ['Progressive Resource Crafting']], + ["A Terrible Fortress", False, [], ['Flint and Steel']], + ["A Terrible Fortress", False, [], ['Progressive Tools']], + ["A Terrible Fortress", False, [], ['Progressive Weapons']], + ["A Terrible Fortress", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["A Terrible Fortress", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons']], ["A Terrible Fortress", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons']], ]) @@ -992,43 +993,43 @@ def test_42075(self): def test_42076(self): self.run_location_tests([ - ["Cover Me in Debris", False, []], - ["Cover Me in Debris", False, [], ['Progressive Resource Crafting']], - ["Cover Me in Debris", False, [], ['Flint and Steel']], - ["Cover Me in Debris", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], - ["Cover Me in Debris", False, [], ['Progressive Weapons']], - ["Cover Me in Debris", False, ['Progressive Armor'], ['Progressive Armor']], - ["Cover Me in Debris", False, [], ['Brewing']], + ["Cover Me in Debris", False, []], + ["Cover Me in Debris", False, [], ['Progressive Resource Crafting']], + ["Cover Me in Debris", False, [], ['Flint and Steel']], + ["Cover Me in Debris", False, ['Progressive Tools', 'Progressive Tools'], ['Progressive Tools']], + ["Cover Me in Debris", False, [], ['Progressive Weapons']], + ["Cover Me in Debris", False, ['Progressive Armor'], ['Progressive Armor']], + ["Cover Me in Debris", False, [], ['Brewing']], ["Cover Me in Debris", False, [], ['Bottles']], ["Cover Me in Debris", False, [], ['Bed']], ["Cover Me in Debris", False, ['8 Netherite Scrap'], ['8 Netherite Scrap']], - ["Cover Me in Debris", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', + ["Cover Me in Debris", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Progressive Armor', 'Brewing', 'Bottles', 'Bed', '8 Netherite Scrap', '8 Netherite Scrap']], ]) def test_42077(self): self.run_location_tests([ - ["The End?", False, []], - ["The End?", False, [], ['Progressive Resource Crafting']], - ["The End?", False, [], ['Flint and Steel']], - ["The End?", False, [], ['Progressive Tools']], - ["The End?", False, [], ['Progressive Weapons']], - ["The End?", False, [], ['Progressive Armor', 'Shield']], - ["The End?", False, [], ['Brewing']], - ["The End?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["The End?", False, []], + ["The End?", False, [], ['Progressive Resource Crafting']], + ["The End?", False, [], ['Flint and Steel']], + ["The End?", False, [], ['Progressive Tools']], + ["The End?", False, [], ['Progressive Weapons']], + ["The End?", False, [], ['Progressive Armor', 'Shield']], + ["The End?", False, [], ['Brewing']], + ["The End?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["The End?", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], - ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', + ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', + 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], + ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', - 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], - ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', + ["The End?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls']], ]) @@ -1096,40 +1097,40 @@ def test_42087(self): def test_42088(self): self.run_location_tests([ - ["When Pigs Fly", False, []], - ["When Pigs Fly", False, [], ['Progressive Resource Crafting']], - ["When Pigs Fly", False, [], ['Progressive Tools']], - ["When Pigs Fly", False, [], ['Progressive Weapons']], - ["When Pigs Fly", False, [], ['Progressive Armor', 'Shield']], - ["When Pigs Fly", False, [], ['Fishing Rod']], - ["When Pigs Fly", False, [], ['Saddle']], - ["When Pigs Fly", False, ['Progressive Weapons'], ['Flint and Steel', 'Progressive Weapons', 'Progressive Weapons']], - ["When Pigs Fly", False, ['Progressive Tools', 'Progressive Tools', 'Progressive Weapons'], ['Bucket', 'Progressive Tools', 'Progressive Weapons', 'Progressive Weapons']], - ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Fishing Rod']], + ["When Pigs Fly", False, []], + ["When Pigs Fly", False, [], ['Progressive Resource Crafting']], + ["When Pigs Fly", False, [], ['Progressive Tools']], + ["When Pigs Fly", False, [], ['Progressive Weapons']], + ["When Pigs Fly", False, [], ['Progressive Armor', 'Shield']], + ["When Pigs Fly", False, [], ['Fishing Rod']], + ["When Pigs Fly", False, [], ['Saddle']], + ["When Pigs Fly", False, ['Progressive Weapons'], ['Flint and Steel', 'Progressive Weapons', 'Progressive Weapons']], + ["When Pigs Fly", False, ['Progressive Tools', 'Progressive Tools', 'Progressive Weapons'], ['Bucket', 'Progressive Tools', 'Progressive Weapons', 'Progressive Weapons']], + ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Fishing Rod']], ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Progressive Armor', 'Fishing Rod']], - ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield', 'Fishing Rod']], + ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Shield', 'Fishing Rod']], ["When Pigs Fly", True, ['Saddle', 'Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Fishing Rod']], ["When Pigs Fly", True, ['Saddle', 'Progressive Weapons', 'Progressive Weapons', 'Progressive Armor', 'Shield', 'Progressive Resource Crafting', 'Progressive Tools', 'Fishing Rod']], ]) def test_42089(self): self.run_location_tests([ - ["Overkill", False, []], - ["Overkill", False, [], ['Progressive Resource Crafting']], - ["Overkill", False, [], ['Flint and Steel']], - ["Overkill", False, [], ['Progressive Tools']], - ["Overkill", False, [], ['Progressive Weapons']], - ["Overkill", False, [], ['Progressive Armor', 'Shield']], - ["Overkill", False, [], ['Brewing']], + ["Overkill", False, []], + ["Overkill", False, [], ['Progressive Resource Crafting']], + ["Overkill", False, [], ['Flint and Steel']], + ["Overkill", False, [], ['Progressive Tools']], + ["Overkill", False, [], ['Progressive Weapons']], + ["Overkill", False, [], ['Progressive Armor', 'Shield']], + ["Overkill", False, [], ['Brewing']], ["Overkill", False, [], ['Bottles']], - ["Overkill", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Overkill", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], - ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], - ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', 'Bottles']], + ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', + 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], + ["Overkill", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Shield', 'Brewing', 'Bottles']], ]) @@ -1158,7 +1159,7 @@ def test_42092(self): ["Wax On", False, []], ["Wax On", False, [], ["Progressive Tools"]], ["Wax On", False, [], ["Campfire"]], - ["Wax On", False, ["Progressive Resource Crafting"], ["Progressive Resource Crafting"]], + ["Wax On", False, ["Progressive Resource Crafting"], ["Progressive Resource Crafting"]], ["Wax On", True, ["Progressive Tools", "Progressive Resource Crafting", "Progressive Resource Crafting", "Campfire"]], ]) @@ -1167,7 +1168,7 @@ def test_42093(self): ["Wax Off", False, []], ["Wax Off", False, [], ["Progressive Tools"]], ["Wax Off", False, [], ["Campfire"]], - ["Wax Off", False, ["Progressive Resource Crafting"], ["Progressive Resource Crafting"]], + ["Wax Off", False, ["Progressive Resource Crafting"], ["Progressive Resource Crafting"]], ["Wax Off", True, ["Progressive Tools", "Progressive Resource Crafting", "Progressive Resource Crafting", "Campfire"]], ]) @@ -1201,40 +1202,40 @@ def test_42096(self): def test_42097(self): self.run_location_tests([ - ["Is It a Balloon?", False, []], - ["Is It a Balloon?", False, [], ['Progressive Resource Crafting']], - ["Is It a Balloon?", False, [], ['Flint and Steel']], - ["Is It a Balloon?", False, [], ['Progressive Tools']], + ["Is It a Balloon?", False, []], + ["Is It a Balloon?", False, [], ['Progressive Resource Crafting']], + ["Is It a Balloon?", False, [], ['Flint and Steel']], + ["Is It a Balloon?", False, [], ['Progressive Tools']], ["Is It a Balloon?", False, [], ['Progressive Weapons']], ["Is It a Balloon?", False, [], ['Spyglass']], - ["Is It a Balloon?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], - ["Is It a Balloon?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Spyglass']], + ["Is It a Balloon?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Is It a Balloon?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', 'Progressive Weapons', 'Spyglass']], ["Is It a Balloon?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', 'Progressive Weapons', 'Spyglass']], ]) def test_42098(self): self.run_location_tests([ - ["Is It a Plane?", False, []], - ["Is It a Plane?", False, [], ['Progressive Resource Crafting']], - ["Is It a Plane?", False, [], ['Flint and Steel']], - ["Is It a Plane?", False, [], ['Progressive Tools']], - ["Is It a Plane?", False, [], ['Progressive Weapons']], - ["Is It a Plane?", False, [], ['Progressive Armor', 'Shield']], - ["Is It a Plane?", False, [], ['Brewing']], - ["Is It a Plane?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], + ["Is It a Plane?", False, []], + ["Is It a Plane?", False, [], ['Progressive Resource Crafting']], + ["Is It a Plane?", False, [], ['Flint and Steel']], + ["Is It a Plane?", False, [], ['Progressive Tools']], + ["Is It a Plane?", False, [], ['Progressive Weapons']], + ["Is It a Plane?", False, [], ['Progressive Armor', 'Shield']], + ["Is It a Plane?", False, [], ['Brewing']], + ["Is It a Plane?", False, ['Progressive Tools', 'Progressive Tools'], ['Bucket', 'Progressive Tools']], ["Is It a Plane?", False, ['3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls'], ['3 Ender Pearls']], ["Is It a Plane?", False, [], ['Spyglass']], ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', - '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], - ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Progressive Armor', 'Brewing', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', + '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], + ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Progressive Armor', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Bucket', - 'Progressive Weapons', 'Shield', 'Brewing', - '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], - ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', - 'Progressive Weapons', 'Shield', 'Brewing', + 'Progressive Weapons', 'Shield', 'Brewing', + '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], + ["Is It a Plane?", True, ['Progressive Resource Crafting', 'Progressive Tools', 'Flint and Steel', 'Progressive Tools', 'Progressive Tools', + 'Progressive Weapons', 'Shield', 'Brewing', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', '3 Ender Pearls', 'Spyglass']], ]) @@ -1246,7 +1247,7 @@ def test_42099(self): ["Surge Protector", False, [], ['Enchanting']], ["Surge Protector", False, [], ['Progressive Tools']], ["Surge Protector", False, [], ['Progressive Weapons']], - ["Surge Protector", True, ['Progressive Weapons', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', + ["Surge Protector", True, ['Progressive Weapons', 'Progressive Tools', 'Progressive Tools', 'Progressive Tools', 'Enchanting', 'Progressive Resource Crafting', 'Progressive Resource Crafting', 'Channeling Book']], ]) diff --git a/test/minecraft/TestEntrances.py b/worlds/minecraft/test/TestEntrances.py similarity index 99% rename from test/minecraft/TestEntrances.py rename to worlds/minecraft/test/TestEntrances.py index 460199fca5c5..8e80a1353a3c 100644 --- a/test/minecraft/TestEntrances.py +++ b/worlds/minecraft/test/TestEntrances.py @@ -1,4 +1,5 @@ -from test.minecraft.TestMinecraft import TestMinecraft +from .TestMinecraft import TestMinecraft + class TestEntrances(TestMinecraft): diff --git a/test/minecraft/TestMinecraft.py b/worlds/minecraft/test/TestMinecraft.py similarity index 92% rename from test/minecraft/TestMinecraft.py rename to worlds/minecraft/test/TestMinecraft.py index cd87296c5a53..dc5c81c031b5 100644 --- a/test/minecraft/TestMinecraft.py +++ b/worlds/minecraft/test/TestMinecraft.py @@ -1,11 +1,12 @@ -import worlds.minecraft.Options from test.TestBase import TestBase from BaseClasses import MultiWorld, ItemClassification from worlds import AutoWorld from worlds.minecraft import MinecraftWorld from worlds.minecraft.Items import MinecraftItem, item_table -from worlds.minecraft.Options import * -from Options import Toggle, Range +from Options import Toggle +from worlds.minecraft.Options import AdvancementGoal, EggShardsRequired, EggShardsAvailable, BossGoal, BeeTraps, \ + ShuffleStructures, CombatDifficulty + # Converts the name of an item into an item object def MCItemFactory(items, player: int): @@ -27,6 +28,7 @@ def MCItemFactory(items, player: int): return ret[0] return ret + class TestMinecraft(TestBase): def setUp(self): @@ -39,10 +41,10 @@ def setUp(self): setattr(self.multiworld, "advancement_goal", {1: AdvancementGoal(30)}) setattr(self.multiworld, "egg_shards_required", {1: EggShardsRequired(0)}) setattr(self.multiworld, "egg_shards_available", {1: EggShardsAvailable(0)}) - setattr(self.multiworld, "required_bosses", {1: BossGoal(1)}) # ender dragon + setattr(self.multiworld, "required_bosses", {1: BossGoal(1)}) # ender dragon setattr(self.multiworld, "shuffle_structures", {1: ShuffleStructures(False)}) setattr(self.multiworld, "bee_traps", {1: BeeTraps(0)}) - setattr(self.multiworld, "combat_difficulty", {1: CombatDifficulty(1)}) # normal + setattr(self.multiworld, "combat_difficulty", {1: CombatDifficulty(1)}) # normal setattr(self.multiworld, "structure_compasses", {1: Toggle(False)}) setattr(self.multiworld, "death_link", {1: Toggle(False)}) AutoWorld.call_single(self.multiworld, "create_regions", 1) @@ -64,4 +66,3 @@ def _get_items_partial(self, item_pool, missing_item): new_items.remove(missing_item) items = MCItemFactory(new_items, 1) return self.get_state(items) - diff --git a/test/vanilla/__init__.py b/worlds/minecraft/test/__init__.py similarity index 100% rename from test/vanilla/__init__.py rename to worlds/minecraft/test/__init__.py diff --git a/worlds/oot/Cosmetics.py b/worlds/oot/Cosmetics.py index 520641db63d6..e132c2ceb15c 100644 --- a/worlds/oot/Cosmetics.py +++ b/worlds/oot/Cosmetics.py @@ -39,6 +39,13 @@ def patch_dpad(rom, ootworld, symbols): rom.write_byte(symbols['CFG_DISPLAY_DPAD'], 0x00) +def patch_dpad_info(rom, ootworld, symbols): + # Display D-Pad HUD in pause menu for either dungeon info or equips + if ootworld.dpad_dungeon_menu: + rom.write_byte(symbols['CFG_DPAD_DUNGEON_INFO_ENABLE'], 0x01) + else: + rom.write_byte(symbols['CFG_DPAD_DUNGEON_INFO_ENABLE'], 0x00) + def patch_music(rom, ootworld, symbols): # patch music @@ -648,6 +655,7 @@ def patch_instrument(rom, ootworld, symbols): 0x03480810, ] +patch_sets = {} global_patch_sets = [ patch_targeting, patch_music, @@ -656,115 +664,108 @@ def patch_instrument(rom, ootworld, symbols): patch_sword_trails, patch_gauntlet_colors, patch_shield_frame_colors, + # patch_voices, patch_sfx, patch_instrument, ] -patch_sets = { - 0x1F04FA62: { - "patches": [ - patch_dpad, - patch_sword_trails, - ], - "symbols": { - "CFG_DISPLAY_DPAD": 0x0004, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, - }, - }, - 0x1F05D3F9: { - "patches": [ - patch_dpad, - patch_sword_trails, - ], - "symbols": { - "CFG_DISPLAY_DPAD": 0x0004, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, - }, - }, - 0x1F0693FB: { - "patches": [ - patch_dpad, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_DISPLAY_DPAD": 0x0010, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0011, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0012, - } - }, - 0x1F073FC9: { - "patches": [ - patch_dpad, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - patch_button_colors, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_A_BUTTON_COLOR": 0x0010, - "CFG_B_BUTTON_COLOR": 0x0016, - "CFG_C_BUTTON_COLOR": 0x001C, - "CFG_TEXT_CURSOR_COLOR": 0x0022, - "CFG_SHOP_CURSOR_COLOR": 0x0028, - "CFG_A_NOTE_COLOR": 0x002E, - "CFG_C_NOTE_COLOR": 0x0034, - "CFG_DISPLAY_DPAD": 0x003A, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x003B, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x003C, - } - }, - 0x1F073FD8: { - "patches": [ - patch_dpad, - patch_navi_colors, - patch_sword_trails, - patch_heart_colors, - patch_magic_colors, - patch_button_colors, - patch_boomerang_trails, - patch_bombchu_trails, - ], - "symbols": { - "CFG_MAGIC_COLOR": 0x0004, - "CFG_HEART_COLOR": 0x000A, - "CFG_A_BUTTON_COLOR": 0x0010, - "CFG_B_BUTTON_COLOR": 0x0016, - "CFG_C_BUTTON_COLOR": 0x001C, - "CFG_TEXT_CURSOR_COLOR": 0x0022, - "CFG_SHOP_CURSOR_COLOR": 0x0028, - "CFG_A_NOTE_COLOR": 0x002E, - "CFG_C_NOTE_COLOR": 0x0034, - "CFG_BOOM_TRAIL_INNER_COLOR": 0x003A, - "CFG_BOOM_TRAIL_OUTER_COLOR": 0x003D, - "CFG_BOMBCHU_TRAIL_INNER_COLOR": 0x0040, - "CFG_BOMBCHU_TRAIL_OUTER_COLOR": 0x0043, - "CFG_DISPLAY_DPAD": 0x0046, - "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0047, - "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0048, - "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": 0x0049, - "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": 0x004A, - "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": 0x004B, - "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": 0x004C, - "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": 0x004D, - "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": 0x004E, - "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": 0x004F, - "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": 0x0050, - "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": 0x0051, - "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": 0x0052, - "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": 0x0053, - "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": 0x0054, - } +# 3.14.1 +patch_sets[0x1F04FA62] = { + "patches": [ + patch_dpad, + patch_sword_trails, + ], + "symbols": { + "CFG_DISPLAY_DPAD": 0x0004, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0005, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0006, }, } +# 3.14.11 +patch_sets[0x1F05D3F9] = { + "patches": patch_sets[0x1F04FA62]["patches"] + [], + "symbols": {**patch_sets[0x1F04FA62]["symbols"]}, +} + +# 4.5.7 +patch_sets[0x1F0693FB] = { + "patches": patch_sets[0x1F05D3F9]["patches"] + [ + patch_heart_colors, + patch_magic_colors, + ], + "symbols": { + "CFG_MAGIC_COLOR": 0x0004, + "CFG_HEART_COLOR": 0x000A, + "CFG_DISPLAY_DPAD": 0x0010, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0011, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0012, + } +} + +# 5.2.6 +patch_sets[0x1F073FC9] = { + "patches": patch_sets[0x1F0693FB]["patches"] + [ + patch_button_colors, + ], + "symbols": { + "CFG_MAGIC_COLOR": 0x0004, + "CFG_HEART_COLOR": 0x000A, + "CFG_A_BUTTON_COLOR": 0x0010, + "CFG_B_BUTTON_COLOR": 0x0016, + "CFG_C_BUTTON_COLOR": 0x001C, + "CFG_TEXT_CURSOR_COLOR": 0x0022, + "CFG_SHOP_CURSOR_COLOR": 0x0028, + "CFG_A_NOTE_COLOR": 0x002E, + "CFG_C_NOTE_COLOR": 0x0034, + "CFG_DISPLAY_DPAD": 0x003A, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x003B, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x003C, + } +} + +# 5.2.76 +patch_sets[0x1F073FD8] = { + "patches": patch_sets[0x1F073FC9]["patches"] + [ + patch_navi_colors, + patch_boomerang_trails, + patch_bombchu_trails, + ], + "symbols": { + **patch_sets[0x1F073FC9]["symbols"], + "CFG_BOOM_TRAIL_INNER_COLOR": 0x003A, + "CFG_BOOM_TRAIL_OUTER_COLOR": 0x003D, + "CFG_BOMBCHU_TRAIL_INNER_COLOR": 0x0040, + "CFG_BOMBCHU_TRAIL_OUTER_COLOR": 0x0043, + "CFG_DISPLAY_DPAD": 0x0046, + "CFG_RAINBOW_SWORD_INNER_ENABLED": 0x0047, + "CFG_RAINBOW_SWORD_OUTER_ENABLED": 0x0048, + "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": 0x0049, + "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": 0x004A, + "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": 0x004B, + "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": 0x004C, + "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": 0x004D, + "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": 0x004E, + "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": 0x004F, + "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": 0x0050, + "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": 0x0051, + "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": 0x0052, + "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": 0x0053, + "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": 0x0054, + } +} + +# 6.2.218 +patch_sets[0x1F073FD9] = { + "patches": patch_sets[0x1F073FD8]["patches"] + [ + patch_dpad_info, + ], + "symbols": { + **patch_sets[0x1F073FD8]["symbols"], + "CFG_DPAD_DUNGEON_INFO_ENABLE": 0x0055, + } +} + def patch_cosmetics(ootworld, rom): # Use the world's slot seed for cosmetics diff --git a/worlds/oot/Dungeon.py b/worlds/oot/Dungeon.py index 98da609f3d7b..d0074d0d9895 100644 --- a/worlds/oot/Dungeon.py +++ b/worlds/oot/Dungeon.py @@ -1,22 +1,15 @@ class Dungeon(object): - def __init__(self, world, name, hint, font_color, boss_key, small_keys, dungeon_items): - def to_array(obj): - if obj == None: - return [] - if isinstance(obj, list): - return obj - else: - return [obj] - - self.multiworld = world + def __init__(self, world, name, hint, font_color): + + self.world = world self.name = name self.hint_text = hint self.font_color = font_color self.regions = [] - self.boss_key = to_array(boss_key) - self.small_keys = to_array(small_keys) - self.dungeon_items = to_array(dungeon_items) + self.boss_key = [] + self.small_keys = [] + self.dungeon_items = [] for region in world.multiworld.regions: if region.player == world.player and region.dungeon == self.name: @@ -48,6 +41,10 @@ def is_dungeon_item(self, item): return item.name in [dungeon_item.name for dungeon_item in self.all_items] + def item_name(self, name): + return f"{name} ({self.name})" + + def __str__(self): return str(self.__unicode__()) diff --git a/worlds/oot/DungeonList.py b/worlds/oot/DungeonList.py index ab4fc881259e..f1d61cb33f94 100644 --- a/worlds/oot/DungeonList.py +++ b/worlds/oot/DungeonList.py @@ -136,15 +136,15 @@ def create_dungeons(ootworld): ootworld.load_regions_from_json(dungeon_json) - boss_keys = [ootworld.create_item(f'Boss Key ({name})') for i in range(dungeon_info['boss_key'])] - if not ootworld.dungeon_mq[dungeon_info['name']]: - small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key'])] - else: - small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key_mq'])] - dungeon_items = [ootworld.create_item(f'Map ({name})'), ootworld.create_item(f'Compass ({name})')] * dungeon_info['dungeon_item'] - if ootworld.shuffle_mapcompass in ['any_dungeon', 'overworld']: - for item in dungeon_items: - item.priority = True + # boss_keys = [ootworld.create_item(f'Boss Key ({name})') for i in range(dungeon_info['boss_key'])] + # if not ootworld.dungeon_mq[dungeon_info['name']]: + # small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key'])] + # else: + # small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key_mq'])] + # dungeon_items = [ootworld.create_item(f'Map ({name})'), ootworld.create_item(f'Compass ({name})')] * dungeon_info['dungeon_item'] + # if ootworld.shuffle_mapcompass in ['any_dungeon', 'overworld']: + # for item in dungeon_items: + # item.priority = True - ootworld.dungeons.append(Dungeon(ootworld, name, hint, font_color, boss_keys, small_keys, dungeon_items)) + ootworld.dungeons.append(Dungeon(ootworld, name, hint, font_color)) diff --git a/worlds/oot/EntranceShuffle.py b/worlds/oot/EntranceShuffle.py index c9910e815a65..833d28189a0a 100644 --- a/worlds/oot/EntranceShuffle.py +++ b/worlds/oot/EntranceShuffle.py @@ -95,6 +95,8 @@ def build_one_way_targets(world, types_to_include, exclude=(), target_region_nam ('Ice Cavern Beginning -> ZF Ice Ledge', { 'index': 0x03D4 })), ('Dungeon', ('Gerudo Fortress -> Gerudo Training Ground Lobby', { 'index': 0x0008 }), ('Gerudo Training Ground Lobby -> Gerudo Fortress', { 'index': 0x03A8 })), + ('DungeonSpecial', ('Ganons Castle Grounds -> Ganons Castle Lobby', { 'index': 0x0467 }), + ('Ganons Castle Lobby -> Castle Grounds From Ganons Castle', { 'index': 0x023D })), ('Interior', ('Kokiri Forest -> KF Midos House', { 'index': 0x0433 }), ('KF Midos House -> Kokiri Forest', { 'index': 0x0443 })), @@ -238,8 +240,8 @@ def build_one_way_targets(world, types_to_include, exclude=(), target_region_nam ('KF Storms Grotto -> Kokiri Forest', { 'grotto_id': 0x1B })), ('Grotto', ('Zoras Domain -> ZD Storms Grotto', { 'grotto_id': 0x1C, 'entrance': 0x036D, 'content': 0xFF, 'scene': 0x58 }), ('ZD Storms Grotto -> Zoras Domain', { 'grotto_id': 0x1C })), - ('Grotto', ('Gerudo Fortress -> GF Storms Grotto', { 'grotto_id': 0x1D, 'entrance': 0x036D, 'content': 0xFF, 'scene': 0x5D }), - ('GF Storms Grotto -> Gerudo Fortress', { 'grotto_id': 0x1D })), + ('Grotto', ('GF Entrances Behind Crates -> GF Storms Grotto', { 'grotto_id': 0x1D, 'entrance': 0x036D, 'content': 0xFF, 'scene': 0x5D }), + ('GF Storms Grotto -> GF Entrances Behind Crates', { 'grotto_id': 0x1D })), ('Grotto', ('GV Fortress Side -> GV Storms Grotto', { 'grotto_id': 0x1E, 'entrance': 0x05BC, 'content': 0xF0, 'scene': 0x5A }), ('GV Storms Grotto -> GV Fortress Side', { 'grotto_id': 0x1E })), ('Grotto', ('GV Grotto Ledge -> GV Octorok Grotto', { 'grotto_id': 0x1F, 'entrance': 0x05AC, 'content': 0xF2, 'scene': 0x5A }), @@ -263,7 +265,7 @@ def build_one_way_targets(world, types_to_include, exclude=(), target_region_nam ('Overworld', ('Lost Woods -> GC Woods Warp', { 'index': 0x04E2 }), ('GC Woods Warp -> Lost Woods', { 'index': 0x04D6 })), ('Overworld', ('Lost Woods -> Zora River', { 'index': 0x01DD }), - ('Zora River -> Lost Woods', { 'index': 0x04DA })), + ('Zora River -> LW Underwater Entrance', { 'index': 0x04DA })), ('Overworld', ('LW Beyond Mido -> SFM Entryway', { 'index': 0x00FC }), ('SFM Entryway -> LW Beyond Mido', { 'index': 0x01A9 })), ('Overworld', ('LW Bridge -> Hyrule Field', { 'index': 0x0185 }), @@ -329,6 +331,74 @@ def build_one_way_targets(world, types_to_include, exclude=(), target_region_nam ] +def _add_boss_entrances(): + # Compute this at load time to save a lot of duplication + dungeon_data = {} + for type, forward, *reverse in entrance_shuffle_table: + if type != 'Dungeon': + continue + if not reverse: + continue + name, forward = forward + reverse = reverse[0][1] + if 'blue_warp' not in reverse: + continue + dungeon_data[name] = { + 'dungeon_index': forward['index'], + 'exit_index': reverse['index'], + 'exit_blue_warp': reverse['blue_warp'] + } + + for type, source, target, dungeon, index, rindex, addresses in [ + ( + 'ChildBoss', 'Deku Tree Boss Door', 'Queen Gohma Boss Room', + 'KF Outside Deku Tree -> Deku Tree Lobby', + 0x040f, 0x0252, [ 0xB06292, 0xBC6162, 0xBC60AE ] + ), + ( + 'ChildBoss', 'Dodongos Cavern Boss Door', 'King Dodongo Boss Room', + 'Death Mountain -> Dodongos Cavern Beginning', + 0x040b, 0x00c5, [ 0xB062B6, 0xBC616E ] + ), + ( + 'ChildBoss', 'Jabu Jabus Belly Boss Door', 'Barinade Boss Room', + 'Zoras Fountain -> Jabu Jabus Belly Beginning', + 0x0301, 0x0407, [ 0xB062C2, 0xBC60C2 ] + ), + ( + 'AdultBoss', 'Forest Temple Boss Door', 'Phantom Ganon Boss Room', + 'SFM Forest Temple Entrance Ledge -> Forest Temple Lobby', + 0x000c, 0x024E, [ 0xB062CE, 0xBC6182 ] + ), + ( + 'AdultBoss', 'Fire Temple Boss Door', 'Volvagia Boss Room', + 'DMC Fire Temple Entrance -> Fire Temple Lower', + 0x0305, 0x0175, [ 0xB062DA, 0xBC60CE ] + ), + ( + 'AdultBoss', 'Water Temple Boss Door', 'Morpha Boss Room', + 'Lake Hylia -> Water Temple Lobby', + 0x0417, 0x0423, [ 0xB062E6, 0xBC6196 ] + ), + ( + 'AdultBoss', 'Spirit Temple Boss Door', 'Twinrova Boss Room', + 'Desert Colossus -> Spirit Temple Lobby', + 0x008D, 0x02F5, [ 0xB062F2, 0xBC6122 ] + ), + ( + 'AdultBoss', 'Shadow Temple Boss Door', 'Bongo Bongo Boss Room', + 'Graveyard Warp Pad Region -> Shadow Temple Entryway', + 0x0413, 0x02B2, [ 0xB062FE, 0xBC61AA ] + ) + ]: + d = {'index': index, 'patch_addresses': addresses} + d.update(dungeon_data[dungeon]) + entrance_shuffle_table.append( + (type, (f"{source} -> {target}", d), (f"{target} -> {source}", {'index': rindex})) + ) +_add_boss_entrances() + + # Basically, the entrances in the list above that go to: # - DMC Central Local (child access for the bean and skull) # - Desert Colossus (child access to colossus and spirit) @@ -395,11 +465,24 @@ def shuffle_random_entrances(ootworld): one_way_priorities['Requiem'] = priority_entrance_table['Requiem'] if ootworld.spawn_positions: one_way_entrance_pools['Spawn'] = ootworld.get_shufflable_entrances(type='Spawn') + if 'child' not in ootworld.spawn_positions: + one_way_entrance_pools['Spawn'].remove(ootworld.get_entrance('Child Spawn -> KF Links House')) + if 'adult' not in ootworld.spawn_positions: + one_way_entrance_pools['Spawn'].remove(ootworld.get_entrance('Adult Spawn -> Temple of Time')) + + if ootworld.shuffle_bosses == 'full': + entrance_pools['Boss'] = ootworld.get_shufflable_entrances(type='ChildBoss', only_primary=True) + entrance_pools['Boss'] += ootworld.get_shufflable_entrances(type='AdultBoss', only_primary=True) + elif ootworld.shuffle_bosses == 'limited': + entrance_pools['ChildBoss'] = ootworld.get_shufflable_entrances(type='ChildBoss', only_primary=True) + entrance_pools['AdultBoss'] = ootworld.get_shufflable_entrances(type='AdultBoss', only_primary=True) if ootworld.shuffle_dungeon_entrances: entrance_pools['Dungeon'] = ootworld.get_shufflable_entrances(type='Dungeon', only_primary=True) if ootworld.open_forest == 'closed': - entrance_pools['Dungeon'].remove(world.get_entrance('KF Outside Deku Tree -> Deku Tree Lobby', player)) + entrance_pools['Dungeon'].remove(ootworld.get_entrance('KF Outside Deku Tree -> Deku Tree Lobby', player)) + if ootworld.shuffle_special_dungeon_entrances: + entrance_pools['Dungeon'] += ootworld.get_shufflable_entrances(type='DungeonSpecial', only_primary=True) if ootworld.decouple_entrances: entrance_pools['DungeonReverse'] = [entrance.reverse for entrance in entrance_pools['Dungeon']] if ootworld.shuffle_interior_entrances != 'off': diff --git a/worlds/oot/HintList.py b/worlds/oot/HintList.py index 7fc298b0d7be..556e16518475 100644 --- a/worlds/oot/HintList.py +++ b/worlds/oot/HintList.py @@ -147,10 +147,20 @@ def tokens_required_by_settings(world): 'Song from Ocarina of Time': lambda world: stones_required_by_settings(world) < 2, 'HF Ocarina of Time Item': lambda world: stones_required_by_settings(world) < 2, 'Sheik in Kakariko': lambda world: medallions_required_by_settings(world) < 5, - 'DMT Biggoron': lambda world: world.logic_earliest_adult_trade != 'claim_check' or world.logic_latest_adult_trade != 'claim_check', - 'Kak 30 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 30, - 'Kak 40 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 40, - 'Kak 50 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 50, + 'DMT Biggoron': lambda world: world.adult_trade_start != {'Claim Check'}, + 'Kak 30 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 30 and '30_skulltulas' not in world.misc_hints, + 'Kak 40 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 40 and '40_skulltulas' not in world.misc_hints, + 'Kak 50 Gold Skulltula Reward': lambda world: tokens_required_by_settings(world) < 50 and '50_skulltulas' not in world.misc_hints, +} + +# Entrance hints required under certain settings +conditional_entrance_always = { + 'Ganons Castle Grounds -> Ganons Castle Lobby': lambda world: (world.bridge != 'open' + and (world.bridge != 'stones' or world.bridge_stones > 1) + and (world.bridge != 'medallions' or world.bridge_medallions > 1) + and (world.bridge != 'dungeons' or world.bridge_rewards > 2) + and (world.bridge != 'tokens' or world.bridge_tokens > 20) + and (world.bridge != 'hearts' or world.bridge_hearts > world.starting_hearts + 1)), } @@ -160,7 +170,16 @@ def tokens_required_by_settings(world): # @ will print the player name # # sets color to white (currently only used for dungeon reward hints). hintTable = { - 'Triforce Piece': (["a triumph fork", "cheese", "a gold fragment"], "a Piece of the Triforce", "item"), + 'Kokiri Emerald': (["a tree's farewell", "the Spiritual Stone of the Forest"], "the Kokiri Emerald", 'item'), + 'Goron Ruby': (["the Gorons' hidden treasure", "the Spiritual Stone of Fire"], "the Goron Ruby", 'item'), + 'Zora Sapphire': (["an engagement ring", "the Spiritual Stone of Water"], "the Zora Sapphire", 'item'), + 'Light Medallion': (["Rauru's sagely power", "a yellow disc"], "the Light Medallion", 'item'), + 'Forest Medallion': (["Saria's sagely power", "a green disc"], "the Forest Medallion", 'item'), + 'Fire Medallion': (["Darunia's sagely power", "a red disc"], "the Fire Medallion", 'item'), + 'Water Medallion': (["Ruto's sagely power", "a blue disc"], "the Water Medallion", 'item'), + 'Shadow Medallion': (["Impa's sagely power", "a purple disc"], "the Shadow Medallion", 'item'), + 'Spirit Medallion': (["Nabooru's sagely power", "an orange disc"], "the Spirit Medallion", 'item'), + 'Triforce Piece': (["a triumph fork", "cheese", "a gold fragment"], "a Piece of the Triforce", 'item'), 'Magic Meter': (["mystic training", "pixie dust", "a green rectangle"], "a Magic Meter", 'item'), 'Double Defense': (["a white outline", "damage decrease", "strengthened love"], "Double Defense", 'item'), 'Slingshot': (["a seed shooter", "a rubberband", "a child's catapult"], "a Slingshot", 'item'), @@ -245,11 +264,55 @@ def tokens_required_by_settings(world): 'Eyedrops': (["a vision vial"], "the Eyedrops", 'item'), 'Claim Check': (["a three day wait"], "the Claim Check", 'item'), 'Map': (["a dungeon atlas", "blueprints"], "a Map", 'item'), + 'Map (Deku Tree)': (["an atlas of an ancient tree", "blueprints of an ancient tree"], "a Map of the Deku Tree", 'item'), + 'Map (Dodongos Cavern)': (["an atlas of an immense cavern", "blueprints of an immense cavern"], "a Map of Dodongo's Cavern", 'item'), + 'Map (Jabu Jabus Belly)': (["an atlas of the belly of a deity", "blueprints of the belly of a deity"], "a Map of Jabu Jabu's Belly", 'item'), + 'Map (Forest Temple)': (["an atlas of a deep forest", "blueprints of a deep forest"], "a Map of the Forest Temple", 'item'), + 'Map (Fire Temple)': (["an atlas of a high mountain", "blueprints of a high mountain"], "a Map of the Fire Temple", 'item'), + 'Map (Water Temple)': (["an atlas of a vast lake", "blueprints of a vast lake"], "a Map of the Water Temple", 'item'), + 'Map (Shadow Temple)': (["an atlas of the house of the dead", "blueprints of the house of the dead"], "a Map of the Shadow Temple", 'item'), + 'Map (Spirit Temple)': (["an atlas of the goddess of the sand", "blueprints of the goddess of the sand"], "a Map of the Spirit Temple", 'item'), + 'Map (Bottom of the Well)': (["an atlas of a shadow's prison", "blueprints of a shadow's prison"], "a Map of the Bottom of the Well", 'item'), + 'Map (Ice Cavern)': (["an atlas of a frozen maze", "blueprints of a frozen maze"], "a Map of the Ice Cavern", 'item'), 'Compass': (["a treasure tracker", "a magnetic needle"], "a Compass", 'item'), + 'Compass (Deku Tree)': (["a treasure tracker for an ancient tree", "a magnetic needle for an ancient tree"], "a Deku Tree Compass", 'item'), + 'Compass (Dodongos Cavern)': (["a treasure tracker for an immense cavern", "a magnetic needle for an immense cavern"], "a Dodongo's Cavern Compass", 'item'), + 'Compass (Jabu Jabus Belly)': (["a treasure tracker for the belly of a deity", "a magnetic needle for the belly of a deity"], "a Jabu Jabu's Belly Compass", 'item'), + 'Compass (Forest Temple)': (["a treasure tracker for a deep forest", "a magnetic needle for a deep forest"], "a Forest Temple Compass", 'item'), + 'Compass (Fire Temple)': (["a treasure tracker for a high mountain", "a magnetic needle for a high mountain"], "a Fire Temple Compass", 'item'), + 'Compass (Water Temple)': (["a treasure tracker for a vast lake", "a magnetic needle for a vast lake"], "a Water Temple Compass", 'item'), + 'Compass (Shadow Temple)': (["a treasure tracker for the house of the dead", "a magnetic needle for the house of the dead"], "a Shadow Temple Compass", 'item'), + 'Compass (Spirit Temple)': (["a treasure tracker for a goddess of the sand", "a magnetic needle for a goddess of the sand"], "a Spirit Temple Compass", 'item'), + 'Compass (Bottom of the Well)': (["a treasure tracker for a shadow's prison", "a magnetic needle for a shadow's prison"], "a Bottom of the Well Compass", 'item'), + 'Compass (Ice Cavern)': (["a treasure tracker for a frozen maze", "a magnetic needle for a frozen maze"], "an Ice Cavern Compass", 'item'), 'BossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'), 'GanonBossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'), 'SmallKey': (["a tool for unlocking", "a dungeon pass", "a lock remover", "a lockpick"], "a Small Key", 'item'), 'HideoutSmallKey': (["a get out of jail free card"], "a Jail Key", 'item'), + 'Boss Key (Forest Temple)': (["a master of unlocking for a deep forest", "a master pass for a deep forest"], "the Forest Temple Boss Key", 'item'), + 'Boss Key (Fire Temple)': (["a master of unlocking for a high mountain", "a master pass for a high mountain"], "the Fire Temple Boss Key", 'item'), + 'Boss Key (Water Temple)': (["a master of unlocking for under a vast lake", "a master pass for under a vast lake"], "the Water Temple Boss Key", 'item'), + 'Boss Key (Shadow Temple)': (["a master of unlocking for the house of the dead", "a master pass for the house of the dead"], "the Shadow Temple Boss Key", 'item'), + 'Boss Key (Spirit Temple)': (["a master of unlocking for a goddess of the sand", "a master pass for a goddess of the sand"], "the Spirit Temple Boss Key", 'item'), + 'Boss Key (Ganons Castle)': (["an master of unlocking", "a floating dungeon's master pass"], "Ganon's Castle Boss Key", 'item'), + 'Small Key (Forest Temple)': (["a tool for unlocking a deep forest", "a dungeon pass for a deep forest", "a lock remover for a deep forest", "a lockpick for a deep forest"], "a Forest Temple Small Key", 'item'), + 'Small Key (Fire Temple)': (["a tool for unlocking a high mountain", "a dungeon pass for a high mountain", "a lock remover for a high mountain", "a lockpick for a high mountain"], "a Fire Temple Small Key", 'item'), + 'Small Key (Water Temple)': (["a tool for unlocking a vast lake", "a dungeon pass for under a vast lake", "a lock remover for under a vast lake", "a lockpick for under a vast lake"], "a Water Temple Small Key", 'item'), + 'Small Key (Shadow Temple)': (["a tool for unlocking the house of the dead", "a dungeon pass for the house of the dead", "a lock remover for the house of the dead", "a lockpick for the house of the dead"], "a Shadow Temple Small Key", 'item'), + 'Small Key (Spirit Temple)': (["a tool for unlocking a goddess of the sand", "a dungeon pass for a goddess of the sand", "a lock remover for a goddess of the sand", "a lockpick for a goddess of the sand"], "a Spirit Temple Small Key", 'item'), + 'Small Key (Bottom of the Well)': (["a tool for unlocking a shadow's prison", "a dungeon pass for a shadow's prison", "a lock remover for a shadow's prison", "a lockpick for a shadow's prison"], "a Bottom of the Well Small Key", 'item'), + 'Small Key (Gerudo Training Ground)': (["a tool for unlocking the test of thieves", "a dungeon pass for the test of thieves", "a lock remover for the test of thieves", "a lockpick for the test of thieves"], "a Gerudo Training Ground Small Key", 'item'), + 'Small Key (Ganons Castle)': (["a tool for unlocking a conquered citadel", "a dungeon pass for a conquered citadel", "a lock remover for a conquered citadel", "a lockpick for a conquered citadel"], "a Ganon's Castle Small Key", 'item'), + 'Small Key (Thieves Hideout)': (["a get out of jail free card"], "a Jail Key", 'item'), + 'Small Key Ring (Forest Temple)': (["a toolbox for unlocking a deep forest", "a dungeon season pass for a deep forest", "a jingling ring for a deep forest", "a skeleton key for a deep forest"], "a Forest Temple Small Key Ring", 'item'), + 'Small Key Ring (Fire Temple)': (["a toolbox for unlocking a high mountain", "a dungeon season pass for a high mountain", "a jingling ring for a high mountain", "a skeleton key for a high mountain"], "a Fire Temple Small Key Ring", 'item'), + 'Small Key Ring (Water Temple)': (["a toolbox for unlocking a vast lake", "a dungeon season pass for under a vast lake", "a jingling ring for under a vast lake", "a skeleton key for under a vast lake"], "a Water Temple Small Key Ring", 'item'), + 'Small Key Ring (Shadow Temple)': (["a toolbox for unlocking the house of the dead", "a dungeon season pass for the house of the dead", "a jingling ring for the house of the dead", "a skeleton key for the house of the dead"], "a Shadow Temple Small Key Ring", 'item'), + 'Small Key Ring (Spirit Temple)': (["a toolbox for unlocking a goddess of the sand", "a dungeon season pass for a goddess of the sand", "a jingling ring for a goddess of the sand", "a skeleton key for a goddess of the sand"], "a Spirit Temple Small Key Ring", 'item'), + 'Small Key Ring (Bottom of the Well)': (["a toolbox for unlocking a shadow's prison", "a dungeon season pass for a shadow's prison", "a jingling ring for a shadow's prison", "a skeleton key for a shadow's prison"], "a Bottom of the Well Small Key Ring", 'item'), + 'Small Key Ring (Gerudo Training Ground)': (["a toolbox for unlocking the test of thieves", "a dungeon season pass for the test of thieves", "a jingling ring for the test of thieves", "a skeleton key for the test of thieves"], "a Gerudo Training Ground Small Key Ring", 'item'), + 'Small Key Ring (Ganons Castle)': (["a toolbox for unlocking a conquered citadel", "a dungeon season pass for a conquered citadel", "a jingling ring for a conquered citadel", "a skeleton key for a conquered citadel"], "a Ganon's Castle Small Key Ring", 'item'), + 'Small Key Ring (Thieves Hideout)': (["a deck of get out of jail free cards"], "a Jail Key Ring", 'item'), 'KeyError': (["something mysterious", "an unknown treasure"], "An Error (Please Report This)", 'item'), 'Arrows (5)': (["a few danger darts", "a few sharp shafts"], "Arrows (5 pieces)", 'item'), 'Arrows (10)': (["some danger darts", "some sharp shafts"], "Arrows (10 pieces)", 'item'), @@ -259,6 +322,7 @@ def tokens_required_by_settings(world): 'Bombs (20)': (["lots-o-explosives", "plenty of blast balls"], "Bombs (20 pieces)", 'item'), 'Ice Trap': (["a gift from Ganon", "a chilling discovery", "frosty fun"], "an Ice Trap", 'item'), 'Magic Bean': (["a wizardly legume"], "a Magic Bean", 'item'), + 'Buy Magic Bean': (["a wizardly legume"], "a Magic Bean", 'item'), 'Magic Bean Pack': (["wizardly legumes"], "Magic Beans", 'item'), 'Bombchus': (["mice bombs", "proximity mice", "wall crawlers", "trail blazers"], "Bombchus", 'item'), 'Bombchus (5)': (["a few mice bombs", "a few proximity mice", "a few wall crawlers", "a few trail blazers"], "Bombchus (5 pieces)", 'item'), @@ -306,12 +370,17 @@ def tokens_required_by_settings(world): 'ZF GS Hidden Cave': ("a spider high #above the icy waters# holds", None, ['overworld', 'sometimes']), 'Wasteland Chest': (["#deep in the wasteland# is", "beneath #the sands#, flames reveal"], None, ['overworld', 'sometimes']), 'Wasteland GS': ("a #spider in the wasteland# holds", None, ['overworld', 'sometimes']), - 'Royal Familys Tomb Chest': (["#flames in the royal tomb# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']), + 'Graveyard Royal Familys Tomb Chest': (["#flames in the royal tomb# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']), 'ZF Bottom Freestanding PoH': ("#under the icy waters# lies", None, ['overworld', 'sometimes']), 'GC Pot Freestanding PoH': ("spinning #Goron pottery# contains", None, ['overworld', 'sometimes']), 'ZD King Zora Thawed': ("a #defrosted dignitary# gifts", "unfreezing #King Zora# grants", ['overworld', 'sometimes']), 'DMC Deku Scrub': ("a single #scrub in the crater# sells", None, ['overworld', 'sometimes']), 'DMC GS Crate': ("a spider under a #crate in the crater# holds", None, ['overworld', 'sometimes']), + 'LW Target in Woods': ("shooting a #target in the woods# grants", None, ['overworld', 'sometimes']), + 'ZR Frogs in the Rain': ("#frogs in a storm# gift", None, ['overworld', 'sometimes']), + 'LH Lab Dive': ("a #diving experiment# is rewarded with", None, ['overworld', 'sometimes']), + 'HC Great Fairy Reward': ("the #fairy of fire# holds", "a #fairy outside Hyrule Castle# holds", ['overworld', 'sometimes']), + 'OGC Great Fairy Reward': ("the #fairy of strength# holds", "a #fairy outside Ganon's Castle# holds", ['overworld', 'sometimes']), 'Deku Tree MQ After Spinning Log Chest': ("a #temporal stone within a tree# contains", "a #temporal stone within the Deku Tree# contains", ['dungeon', 'sometimes']), 'Deku Tree MQ GS Basement Graves Room': ("a #spider on a ceiling in a tree# holds", "a #spider on a ceiling in the Deku Tree# holds", ['dungeon', 'sometimes']), @@ -324,8 +393,10 @@ def tokens_required_by_settings(world): 'Fire Temple MQ Chest On Fire': ("the #Flare Dancer atop the volcano# guards a chest containing", "the #Flare Dancer atop the Fire Temple# guards a chest containing", ['dungeon', 'sometimes']), 'Fire Temple MQ GS Skull On Fire': ("a #spider under a block in the volcano# holds", "a #spider under a block in the Fire Temple# holds", ['dungeon', 'sometimes']), 'Water Temple River Chest': ("beyond the #river under the lake# waits", "beyond the #river in the Water Temple# waits", ['dungeon', 'sometimes']), + 'Water Temple Central Pillar Chest': ("beneath a #tall tower under a vast lake# lies", "a chest in the #central pillar of Water Temple# contains", ['dungeon', 'sometimes']), 'Water Temple Boss Key Chest': ("dodging #rolling boulders under the lake# leads to", "dodging #rolling boulders in the Water Temple# leads to", ['dungeon', 'sometimes']), 'Water Temple GS Behind Gate': ("a spider behind a #gate under the lake# holds", "a spider behind a #gate in the Water Temple# holds", ['dungeon', 'sometimes']), + 'Water Temple MQ Central Pillar Chest': ("beneath a #tall tower under a vast lake# lies", "a chest in the #central pillar of Water Temple# contains", ['dungeon', 'sometimes']), 'Water Temple MQ Freestanding Key': ("hidden in a #box under the lake# lies", "hidden in a #box in the Water Temple# lies", ['dungeon', 'sometimes']), 'Water Temple MQ GS Freestanding Key Area': ("the #locked spider under the lake# holds", "the #locked spider in the Water Temple# holds", ['dungeon', 'sometimes']), 'Water Temple MQ GS Triple Wall Torch': ("a spider behind a #gate under the lake# holds", "a spider behind a #gate in the Water Temple# holds", ['dungeon', 'sometimes']), @@ -333,15 +404,64 @@ def tokens_required_by_settings(world): 'Gerudo Training Ground MQ Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']), 'Gerudo Training Ground Maze Path Final Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), 'Gerudo Training Ground MQ Ice Arrows Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), - 'Bottom of the Well Lens of Truth Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']), - 'Bottom of the Well MQ Compass Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']), 'Spirit Temple Silver Gauntlets Chest': ("the treasure #sought by Nabooru# is", "upon the #Colossus's right hand# is", ['dungeon', 'sometimes']), 'Spirit Temple Mirror Shield Chest': ("upon the #Colossus's left hand# is", None, ['dungeon', 'sometimes']), 'Spirit Temple MQ Child Hammer Switch Chest': ("a #temporal paradox in the Colossus# yields", "a #temporal paradox in the Spirit Temple# yields", ['dungeon', 'sometimes']), 'Spirit Temple MQ Symphony Room Chest': ("a #symphony in the Colossus# yields", "a #symphony in the Spirit Temple# yields", ['dungeon', 'sometimes']), 'Spirit Temple MQ GS Symphony Room': ("a #spider's symphony in the Colossus# yields", "a #spider's symphony in the Spirit Temple# yields", ['dungeon', 'sometimes']), - 'Shadow Temple Invisible Floormaster Chest': ("shadows in an #invisible maze# guard", None, ['dungeon', 'sometimes']), + 'Shadow Temple Freestanding Key': ("a #burning skull in the house of the dead# holds", "a #giant pot in the Shadow Temple# holds", ['dungeon', 'sometimes']), 'Shadow Temple MQ Bomb Flower Chest': ("shadows in an #invisible maze# guard", None, ['dungeon', 'sometimes']), + 'Shadow Temple MQ Stalfos Room Chest': ("near an #empty pedestal within the house of the dead# lies", "#stalfos in the Shadow Temple# guard", ['dungeon', 'sometimes']), + 'Ice Cavern Iron Boots Chest': ("a #monster in a frozen cavern# guards", "the #final treasure of Ice Cavern# is", ['dungeon', 'sometimes']), + 'Ice Cavern MQ Iron Boots Chest': ("a #monster in a frozen cavern# guards", "the #final treasure of Ice Cavern# is", ['dungeon', 'sometimes']), + 'Ganons Castle Shadow Trial Golden Gauntlets Chest': ("#deep in the test of darkness# lies", "a #like-like in Ganon's Shadow Trial# guards", ['dungeon', 'sometimes']), + 'Ganons Castle MQ Shadow Trial Eye Switch Chest': ("#deep in the test of darkness# lies", "shooting an #eye switch in Ganon's Shadow Trial# reveals", ['dungeon', 'sometimes']), + + 'Deku Theater Rewards': ("the #Skull Mask and Mask of Truth# reward...^", None, 'dual'), + 'HF Ocarina of Time Retrieval': ("during her escape, #Princess Zelda# entrusted you with both...^", "the #Ocarina of Time# rewards both...^", 'dual'), + 'HF Valley Grotto': ("in a grotto with a #spider and a cow# you will find...^", None, 'dual'), + 'Market Bombchu Bowling Rewards': ("at the #Bombchu Bowling Alley#, you will be rewarded with...^", None, 'dual'), + 'ZR Frogs Rewards': ("the #Frogs of Zora River# will reward you with...^", None, 'dual'), + 'LH Lake Lab Pool': ("inside the #lakeside lab# a person and a spider hold...^", None, 'dual'), + 'LH Adult Bean Destination Checks': ("#riding the bean in Lake Hylia# leads to...^", None, 'dual'), + 'GV Pieces of Heart Ledges': ("within the #valley#, the crate and waterfall conceal...^", None, 'dual'), + 'GF Horseback Archery Rewards': ("the #Gerudo Horseback Archery# rewards...^", None, 'dual'), + 'Colossus Nighttime GS': ("#at the Desert Colossus#, skulltulas at night hold...^", None, 'dual'), + 'Graveyard Dampe Race Rewards': ("racing #Dampé's ghost# rewards...^", None, 'dual'), + 'Graveyard Royal Family Tomb Contents': ("inside the #Royal Family Tomb#, you will find...^", None, 'dual'), + 'DMC Child Upper Checks': ("in the #crater, a spider in a crate and a single scrub# guard...^", None, 'dual'), + 'Haunted Wasteland Checks': ("deep in the #wasteland a spider and a chest# hold...^", None, 'dual'), + + 'Deku Tree MQ Basement GS': ("in the back of the #basement of the Great Deku Tree# two spiders hold...^", None, 'dual'), + 'Dodongos Cavern Upper Business Scrubs': ("deep in #Dodongo's Cavern a pair of scrubs# sell...^", None, 'dual'), + 'Dodongos Cavern MQ Larvae Room': ("amid #larvae in Dodongo's Cavern# a chest and a spider hold...^", None, 'dual'), + 'Fire Temple Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), + 'Fire Temple MQ Lower Loop': ("under the #entrance of the Fire Temple# a blocked path leads to...^", None, 'dual'), + 'Water Temple River Loop Chests': ("#chests past a shadowy fight# in the Water Temple hold...^", "#chests past Dark Link# in the Water Temple hold...^", 'dual'), + 'Water Temple River Checks': ("in the #river in the Water Temple# lies...^", None, 'dual'), + 'Water Temple North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), + 'Water Temple MQ North Basement Checks': ("the #northern basement of the Water Temple# contains...^", None, 'dual'), + 'Water Temple MQ Lower Checks': ("#a chest and a crate in locked basements# in the Water Temple hold...^", None, 'dual'), + 'Spirit Temple Colossus Hands': ("upon the #Colossus's right and left hands# lie...^", None, 'dual'), + 'Spirit Temple Child Lower': ("between the #crawl spaces in the Spirit Temple# chests contain...^", None, 'dual'), + 'Spirit Temple Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold...^", None, 'dual'), + 'Spirit Temple Adult Lower': ("past a #silver block in the Spirit Temple# boulders and a melody conceal...^", None, 'dual'), + 'Spirit Temple MQ Child Top': ("on the path to the #right hand of the Spirit Temple# a chest and a spider hold respectively...^", None, 'dual'), + 'Spirit Temple MQ Symphony Room': ("#the symphony room# in the Spirit Temple protects...^", None, 'dual'), + 'Spirit Temple MQ Throne Room GS': ("in the #nine thrones room# of the Spirit Temple spiders hold...^", None, 'dual'), + 'Shadow Temple Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), + 'Shadow Temple Single Pot Room': ("a room containing #a single skull-shaped pot# holds...^", "a room containing a #large pot in the Shadow Temple# holds...^", 'dual'), + 'Shadow Temple Spike Walls Room': ("#wooden walls# in the Shadow Temple hide...^", None, 'dual'), + 'Shadow Temple MQ Upper Checks': ("#before the Truth Spinner gap# in the Shadow Temple locked chests contain...^", None, 'dual'), + 'Shadow Temple MQ Invisible Blades Chests': ("an #invisible spinning blade# in the Shadow Temple guards...^", None, 'dual'), + 'Shadow Temple MQ Spike Walls Room': ("#wooden walls# in the Shadow Temple hide...^", None, 'dual'), + 'Bottom of the Well Inner Rooms GS': ("in the #central rooms of the well# spiders hold...^", None, 'dual'), + 'Bottom of the Well Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), + 'Bottom of the Well MQ Dead Hand Room': ("#Dead Hand in the well# guards...^", None, 'dual'), + 'Bottom of the Well MQ Basement': ("in the #depths of the well# a spider and a chest hold...^", None, 'dual'), + 'Ice Cavern Final Room': ("the #final treasures of Ice Cavern# are...^", None, 'dual'), + 'Ice Cavern MQ Final Room': ("the #final treasures of Ice Cavern# are...^", None, 'dual'), + 'Ganons Castle Spirit Trial Chests': ("#within the Spirit Trial#, chests contain...^", None, 'dual'), 'KF Kokiri Sword Chest': ("the #hidden treasure of the Kokiri# is", None, 'exclude'), 'KF Midos Top Left Chest': ("the #leader of the Kokiri# hides", "#inside Mido's house# is", 'exclude'), @@ -353,7 +473,7 @@ def tokens_required_by_settings(world): 'GC Maze Right Chest': ("in #Goron City# explosives unlock", None, 'exclude'), 'GC Maze Center Chest': ("in #Goron City# explosives unlock", None, 'exclude'), 'ZD Chest': ("fire #beyond a waterfall# reveals", None, 'exclude'), - 'Graveyard Hookshot Chest': ("a chest hidden by a #speedy spectre# holds", "#dead Dampé's first prize# is", 'exclude'), + 'Graveyard Dampe Race Hookshot Chest': ("a chest hidden by a #speedy spectre# holds", "#dead Dampé's first prize# is", 'exclude'), 'GF Chest': ("on a #rooftop in the desert# lies", None, 'exclude'), 'Kak Redead Grotto Chest': ("#zombies beneath the earth# guard", None, 'exclude'), 'SFM Wolfos Grotto Chest': ("#wolves beneath the earth# guard", None, 'exclude'), @@ -370,11 +490,9 @@ def tokens_required_by_settings(world): 'ToT Light Arrows Cutscene': ("the #final gift of a princess# is", None, 'exclude'), 'LW Gift from Saria': (["a #potato hoarder# holds", "a rooty tooty #flutey cutey# gifts"], "#Saria's Gift# is", 'exclude'), 'ZF Great Fairy Reward': ("the #fairy of winds# holds", None, 'exclude'), - 'HC Great Fairy Reward': ("the #fairy of fire# holds", None, 'exclude'), 'Colossus Great Fairy Reward': ("the #fairy of love# holds", None, 'exclude'), 'DMT Great Fairy Reward': ("a #magical fairy# gifts", None, 'exclude'), 'DMC Great Fairy Reward': ("a #magical fairy# gifts", None, 'exclude'), - 'OGC Great Fairy Reward': ("the #fairy of strength# holds", None, 'exclude'), 'Song from Impa': ("#deep in a castle#, Impa teaches", None, 'exclude'), 'Song from Malon': ("#a farm girl# sings", None, 'exclude'), @@ -386,7 +504,6 @@ def tokens_required_by_settings(world): 'ZD Diving Minigame': ("an #unsustainable business model# gifts", "those who #dive for Zora rupees# will find", 'exclude'), 'LH Child Fishing': ("#fishing in youth# bestows", None, 'exclude'), 'LH Adult Fishing': ("#fishing in maturity# bestows", None, 'exclude'), - 'LH Lab Dive': ("a #diving experiment# is rewarded with", None, 'exclude'), 'GC Rolling Goron as Adult': ("#comforting yourself# provides", "#reassuring a young Goron# is rewarded with", 'exclude'), 'Market Bombchu Bowling First Prize': ("the #first explosive prize# is", None, 'exclude'), 'Market Bombchu Bowling Second Prize': ("the #second explosive prize# is", None, 'exclude'), @@ -395,17 +512,16 @@ def tokens_required_by_settings(world): 'Kak 10 Gold Skulltula Reward': (["#10 bug badges# rewards", "#10 spider souls# yields", "#10 auriferous arachnids# lead to"], "slaying #10 Gold Skulltulas# reveals", 'exclude'), 'Kak Man on Roof': ("a #rooftop wanderer# holds", None, 'exclude'), 'ZR Magic Bean Salesman': ("a seller of #colorful crops# has", "a #bean seller# offers", 'exclude'), - 'ZR Frogs in the Rain': ("#frogs in a storm# gift", None, 'exclude'), 'GF HBA 1000 Points': ("scoring 1000 in #horseback archery# grants", None, 'exclude'), 'Market Shooting Gallery Reward': ("#shooting in youth# grants", None, 'exclude'), 'Kak Shooting Gallery Reward': ("#shooting in maturity# grants", None, 'exclude'), - 'LW Target in Woods': ("shooting a #target in the woods# grants", None, 'exclude'), 'Kak Anju as Adult': ("a #chicken caretaker# offers adults", None, 'exclude'), 'LLR Talons Chickens': ("#finding Super Cuccos# is rewarded with", None, 'exclude'), 'GC Rolling Goron as Child': ("the prize offered by a #large rolling Goron# is", None, 'exclude'), 'LH Underwater Item': ("the #sunken treasure in a lake# is", None, 'exclude'), 'Hideout Gerudo Membership Card': ("#rescuing captured carpenters# is rewarded with", None, 'exclude'), 'Wasteland Bombchu Salesman': ("a #carpet guru# sells", None, 'exclude'), + 'GC Medigoron': ("#Medigoron# sells", None, 'exclude'), 'Kak Impas House Freestanding PoH': ("#imprisoned in a house# lies", None, 'exclude'), 'HF Tektite Grotto Freestanding PoH': ("#deep underwater in a hole# is", None, 'exclude'), @@ -424,10 +540,16 @@ def tokens_required_by_settings(world): 'DMT Freestanding PoH': ("above a #mountain cavern entrance# is", None, 'exclude'), 'DMC Wall Freestanding PoH': ("nestled in a #volcanic wall# is", None, 'exclude'), 'DMC Volcano Freestanding PoH': ("obscured by #volcanic ash# is", None, 'exclude'), - 'Hideout Jail Guard (1 Torch)': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'Hideout Jail Guard (2 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'Hideout Jail Guard (3 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'Hideout Jail Guard (4 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout 1 Torch Jail Gerudo Key': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout 2 Torches Jail Gerudo Key': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout 3 Torches Jail Gerudo Key': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout 4 Torches Jail Gerudo Key': ("#defeating Gerudo guards# reveals", None, 'exclude'), + + 'ZR Frogs Zeldas Lullaby': ("after hearing #Zelda's Lullaby, frogs gift#", None, 'exclude'), + 'ZR Frogs Eponas Song': ("after hearing #Epona's Song, frogs gift#", None, 'exclude'), + 'ZR Frogs Sarias Song': ("after hearing #Saria's Song, frogs gift#", None, 'exclude'), + 'ZR Frogs Suns Song': ("after hearing the #Sun's Song, frogs gift#", None, 'exclude'), + 'ZR Frogs Song of Time': ("after hearing the #Song of Time, frogs gift#", None, 'exclude'), 'Deku Tree Map Chest': ("in the #center of the Deku Tree# lies", None, 'exclude'), 'Deku Tree Slingshot Chest': ("the #treasure guarded by a scrub# in the Deku Tree is", None, 'exclude'), @@ -480,13 +602,14 @@ def tokens_required_by_settings(world): 'Forest Temple Raised Island Courtyard Chest': ("a #chest on a small island# in the Forest Temple holds", None, 'exclude'), 'Forest Temple Falling Ceiling Room Chest': ("beneath a #checkerboard falling ceiling# lies", None, 'exclude'), 'Forest Temple Eye Switch Chest': ("a #sharp eye# will spot", "#blocks of stone# in the Forest Temple surround", 'exclude'), - 'Forest Temple Boss Key Chest': ("a #turned trunk# contains", None, 'exclude'), 'Forest Temple Floormaster Chest': ("deep in the forest #shadows guard a chest# containing", None, 'exclude'), 'Forest Temple Bow Chest': ("an #army of the dead# guards", "#Stalfos deep in the Forest Temple# guard", 'exclude'), 'Forest Temple Red Poe Chest': ("#Joelle# guards", "a #red ghost# guards", 'exclude'), 'Forest Temple Blue Poe Chest': ("#Beth# guards", "a #blue ghost# guards", 'exclude'), 'Forest Temple Basement Chest': ("#revolving walls# in the Forest Temple conceal", None, 'exclude'), + 'Forest Temple Boss Key Chest': ("a #turned trunk# contains", "a #sideways chest in the Forest Temple# hides", 'exclude'), + 'Forest Temple MQ Boss Key Chest': ("a #turned trunk# contains", "a #sideways chest in the Forest Temple# hides", 'exclude'), 'Forest Temple MQ First Room Chest': ("a #tree in the Forest Temple# supports", None, 'exclude'), 'Forest Temple MQ Wolfos Chest': ("#defeating enemies beneath a falling ceiling# in Forest Temple yields", None, 'exclude'), 'Forest Temple MQ Bow Chest': ("an #army of the dead# guards", "#Stalfos deep in the Forest Temple# guard", 'exclude'), @@ -498,7 +621,6 @@ def tokens_required_by_settings(world): 'Forest Temple MQ Falling Ceiling Room Chest': ("beneath a #checkerboard falling ceiling# lies", None, 'exclude'), 'Forest Temple MQ Basement Chest': ("#revolving walls# in the Forest Temple conceal", None, 'exclude'), 'Forest Temple MQ Redead Chest': ("deep in the forest #undead guard a chest# containing", None, 'exclude'), - 'Forest Temple MQ Boss Key Chest': ("a #turned trunk# contains", None, 'exclude'), 'Fire Temple Near Boss Chest': ("#near a dragon# is", None, 'exclude'), 'Fire Temple Flare Dancer Chest': ("the #Flare Dancer behind a totem# guards", None, 'exclude'), @@ -530,11 +652,9 @@ def tokens_required_by_settings(world): 'Water Temple Torches Chest': ("#fire in the Water Temple# reveals", None, 'exclude'), 'Water Temple Dragon Chest': ("a #serpent's prize# in the Water Temple is", None, 'exclude'), 'Water Temple Central Bow Target Chest': ("#blinding an eye# in the Water Temple leads to", None, 'exclude'), - 'Water Temple Central Pillar Chest': ("in the #depths of the Water Temple# lies", None, 'exclude'), 'Water Temple Cracked Wall Chest': ("#through a crack# in the Water Temple is", None, 'exclude'), 'Water Temple Longshot Chest': (["#facing yourself# reveals", "a #dark reflection# of yourself guards"], "#Dark Link# guards", 'exclude'), - 'Water Temple MQ Central Pillar Chest': ("in the #depths of the Water Temple# lies", None, 'exclude'), 'Water Temple MQ Boss Key Chest': ("fire in the Water Temple unlocks a #vast gate# revealing a chest with", None, 'exclude'), 'Water Temple MQ Longshot Chest': ("#through a crack# in the Water Temple is", None, 'exclude'), 'Water Temple MQ Compass Chest': ("#fire in the Water Temple# reveals", None, 'exclude'), @@ -591,8 +711,8 @@ def tokens_required_by_settings(world): 'Shadow Temple After Wind Enemy Chest': ("#mummies guarding a ferry# hide", None, 'exclude'), 'Shadow Temple After Wind Hidden Chest': ("#mummies guarding a ferry# hide", None, 'exclude'), 'Shadow Temple Spike Walls Left Chest': ("#walls consumed by a ball of fire# reveal", None, 'exclude'), + 'Shadow Temple Invisible Floormaster Chest': ("shadows in an #invisible maze# guard", None, 'exclude'), 'Shadow Temple Boss Key Chest': ("#walls consumed by a ball of fire# reveal", None, 'exclude'), - 'Shadow Temple Freestanding Key': ("#inside a burning skull# lies", None, 'exclude'), 'Shadow Temple MQ Compass Chest': ("the #Eye of Truth# pierces a hall of faces to reveal", None, 'exclude'), 'Shadow Temple MQ Hover Boots Chest': ("#Dead Hand in the Shadow Temple# holds", None, 'exclude'), @@ -605,7 +725,6 @@ def tokens_required_by_settings(world): 'Shadow Temple MQ Invisible Spikes Chest': ("the #dead roam among invisible spikes# guarding", None, 'exclude'), 'Shadow Temple MQ Boss Key Chest': ("#walls consumed by a ball of fire# reveal", None, 'exclude'), 'Shadow Temple MQ Spike Walls Left Chest': ("#walls consumed by a ball of fire# reveal", None, 'exclude'), - 'Shadow Temple MQ Stalfos Room Chest': ("near an #empty pedestal# within the Shadow Temple lies", None, 'exclude'), 'Shadow Temple MQ Invisible Blades Invisible Chest': ("#invisible blades# guard", None, 'exclude'), 'Shadow Temple MQ Invisible Blades Visible Chest': ("#invisible blades# guard", None, 'exclude'), 'Shadow Temple MQ Wind Hint Chest': ("an #invisible chest guarded by the dead# holds", None, 'exclude'), @@ -627,18 +746,18 @@ def tokens_required_by_settings(world): 'Bottom of the Well Fire Keese Chest': ("#perilous pits# in the well guard the path to", None, 'exclude'), 'Bottom of the Well Like Like Chest': ("#locked in a cage# in the well lies", None, 'exclude'), 'Bottom of the Well Freestanding Key': ("#inside a coffin# hides", None, 'exclude'), + 'Bottom of the Well Lens of Truth Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", 'exclude'), + 'Bottom of the Well MQ Compass Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", 'exclude'), 'Bottom of the Well MQ Map Chest': ("a #royal melody in the well# uncovers", None, 'exclude'), 'Bottom of the Well MQ Lens of Truth Chest': ("an #army of the dead# in the well guards", None, 'exclude'), 'Bottom of the Well MQ Dead Hand Freestanding Key': ("#Dead Hand's explosive secret# is", None, 'exclude'), 'Bottom of the Well MQ East Inner Room Freestanding Key': ("an #invisible path in the well# leads to", None, 'exclude'), - 'Ice Cavern Map Chest': ("#winds of ice# surround", None, 'exclude'), + 'Ice Cavern Map Chest': ("#winds of ice# surround", "a chest #atop a pillar of ice# contains", 'exclude'), 'Ice Cavern Compass Chest': ("a #wall of ice# protects", None, 'exclude'), - 'Ice Cavern Iron Boots Chest': ("a #monster in a frozen cavern# guards", None, 'exclude'), 'Ice Cavern Freestanding PoH': ("a #wall of ice# protects", None, 'exclude'), - 'Ice Cavern MQ Iron Boots Chest': ("a #monster in a frozen cavern# guards", None, 'exclude'), 'Ice Cavern MQ Compass Chest': ("#winds of ice# surround", None, 'exclude'), 'Ice Cavern MQ Map Chest': ("a #wall of ice# protects", None, 'exclude'), 'Ice Cavern MQ Freestanding PoH': ("#winds of ice# surround", None, 'exclude'), @@ -686,7 +805,6 @@ def tokens_required_by_settings(world): 'Ganons Castle Water Trial Left Chest': ("the #test of the seas# holds", None, 'exclude'), 'Ganons Castle Water Trial Right Chest': ("the #test of the seas# holds", None, 'exclude'), 'Ganons Castle Shadow Trial Front Chest': ("#music in the test of darkness# unveils", None, 'exclude'), - 'Ganons Castle Shadow Trial Golden Gauntlets Chest': ("#light in the test of darkness# unveils", None, 'exclude'), 'Ganons Castle Spirit Trial Crystal Switch Chest': ("the #test of the sands# holds", None, 'exclude'), 'Ganons Castle Spirit Trial Invisible Chest': ("the #test of the sands# holds", None, 'exclude'), 'Ganons Castle Light Trial First Left Chest': ("the #test of radiance# holds", None, 'exclude'), @@ -703,7 +821,6 @@ def tokens_required_by_settings(world): 'Ganons Castle MQ Forest Trial Frozen Eye Switch Chest': ("the #test of the wilds# holds", None, 'exclude'), 'Ganons Castle MQ Light Trial Lullaby Chest': ("#music in the test of radiance# reveals", None, 'exclude'), 'Ganons Castle MQ Shadow Trial Bomb Flower Chest': ("the #test of darkness# holds", None, 'exclude'), - 'Ganons Castle MQ Shadow Trial Eye Switch Chest': ("the #test of darkness# holds", None, 'exclude'), 'Ganons Castle MQ Spirit Trial Golden Gauntlets Chest': ("#reflected light in the test of the sands# reveals", None, 'exclude'), 'Ganons Castle MQ Spirit Trial Sun Back Right Chest': ("#reflected light in the test of the sands# reveals", None, 'exclude'), 'Ganons Castle MQ Spirit Trial Sun Back Left Chest': ("#reflected light in the test of the sands# reveals", None, 'exclude'), @@ -721,6 +838,16 @@ def tokens_required_by_settings(world): 'Spirit Temple Twinrova Heart': ("the #Sorceress Sisters# hold", "#Twinrova# holds", 'exclude'), 'Shadow Temple Bongo Bongo Heart': ("the #Phantom Shadow Beast# holds", "#Bongo Bongo# holds", 'exclude'), + 'Queen Gohma': ("the #Parasitic Armored Arachnid# holds", "#Queen Gohma# holds", 'exclude'), + 'King Dodongo': ("the #Infernal Dinosaur# holds", "#King Dodongo# holds", 'exclude'), + 'Barinade': ("the #Bio-Electric Anemone# holds", "#Barinade# holds", 'exclude'), + 'Phantom Ganon': ("the #Evil Spirit from Beyond# holds", "#Phantom Ganon# holds", 'exclude'), + 'Volvagia': ("the #Subterranean Lava Dragon# holds", "#Volvagia# holds", 'exclude'), + 'Morpha': ("the #Giant Aquatic Amoeba# holds", "#Morpha# holds", 'exclude'), + 'Bongo Bongo': ("the #Sorceress Sisters# hold", "#Twinrova# holds", 'exclude'), + 'Twinrova': ("the #Phantom Shadow Beast# holds", "#Bongo Bongo# holds", 'exclude'), + 'Links Pocket': ("#@'s pocket# holds", "@ already has", 'exclude'), + 'Deku Tree GS Basement Back Room': ("a #spider deep within the Deku Tree# hides", None, 'exclude'), 'Deku Tree GS Basement Gate': ("a #web protects a spider# within the Deku Tree holding", None, 'exclude'), 'Deku Tree GS Basement Vines': ("a #web protects a spider# within the Deku Tree holding", None, 'exclude'), @@ -768,10 +895,10 @@ def tokens_required_by_settings(world): 'Fire Temple GS Scarecrow Top': ("a #spider-friendly scarecrow# atop a volcano hides", "a #spider-friendly scarecrow# atop the Fire Temple hides", 'exclude'), 'Fire Temple GS Scarecrow Climb': ("a #spider-friendly scarecrow# atop a volcano hides", "a #spider-friendly scarecrow# atop the Fire Temple hides", 'exclude'), - 'Fire Temple MQ GS Above Fire Wall Maze': ("a #spider above a fiery maze# holds", None, 'exclude'), - 'Fire Temple MQ GS Fire Wall Maze Center': ("a #spider within a fiery maze# holds", None, 'exclude'), + 'Fire Temple MQ GS Above Flame Maze': ("a #spider above a fiery maze# holds", None, 'exclude'), + 'Fire Temple MQ GS Flame Maze Center': ("a #spider within a fiery maze# holds", None, 'exclude'), 'Fire Temple MQ GS Big Lava Room Open Door': ("a #Goron trapped near lava# befriended a spider with", None, 'exclude'), - 'Fire Temple MQ GS Fire Wall Maze Side Room': ("a #spider beside a fiery maze# holds", None, 'exclude'), + 'Fire Temple MQ GS Flame Maze Side Room': ("a #spider beside a fiery maze# holds", None, 'exclude'), 'Water Temple GS Falling Platform Room': ("a #spider over a waterfall# in the Water Temple holds", None, 'exclude'), 'Water Temple GS Central Pillar': ("a #spider in the center of the Water Temple# holds", None, 'exclude'), @@ -796,7 +923,7 @@ def tokens_required_by_settings(world): 'Shadow Temple GS Single Giant Pot': ("#beyond a burning skull# lies a spider with", None, 'exclude'), 'Shadow Temple GS Falling Spikes Room': ("a #spider beyond falling spikes# holds", None, 'exclude'), 'Shadow Temple GS Triple Giant Pot': ("#beyond three burning skulls# lies a spider with", None, 'exclude'), - 'Shadow Temple GS Like Like Room': ("a spider guarded by #invisible blades# holds", None, 'exclude'), + 'Shadow Temple GS Invisible Blades Room': ("a spider guarded by #invisible blades# holds", None, 'exclude'), 'Shadow Temple GS Near Ship': ("a spider near a #docked ship# hoards", None, 'exclude'), 'Shadow Temple MQ GS Falling Spikes Room': ("a #spider beyond falling spikes# holds", None, 'exclude'), @@ -853,7 +980,7 @@ def tokens_required_by_settings(world): 'Kak GS House Under Construction': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), 'Kak GS Skulltula House': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), - 'Kak GS Guards House': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), + 'Kak GS Near Gate Guard': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), 'Kak GS Tree': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), 'Kak GS Watchtower': ("night in the past reveals a #spider in a town# holding", None, 'exclude'), 'Kak GS Above Impas House': ("night in the future reveals a #spider in a town# holding", None, 'exclude'), @@ -1030,7 +1157,7 @@ def tokens_required_by_settings(world): 'Desert Colossus -> Colossus Grotto': ("lifting a #rock in the desert# reveals", None, 'entrance'), 'GV Grotto Ledge -> GV Octorok Grotto': ("a rock on #a ledge in the valley# hides", None, 'entrance'), 'GC Grotto Platform -> GC Grotto': ("a #pool of lava# in Goron City blocks the way to", None, 'entrance'), - 'Gerudo Fortress -> GF Storms Grotto': ("a #storm within Gerudo's Fortress# reveals", None, 'entrance'), + 'GF Entrances Behind Crates -> GF Storms Grotto': ("a #storm within Gerudo's Fortress# reveals", None, 'entrance'), 'Zoras Domain -> ZD Storms Grotto': ("a #storm within Zora's Domain# reveals", None, 'entrance'), 'Hyrule Castle Grounds -> HC Storms Grotto': ("a #storm near the castle# reveals", None, 'entrance'), 'GV Fortress Side -> GV Storms Grotto': ("a #storm in the valley# reveals", None, 'entrance'), @@ -1044,6 +1171,8 @@ def tokens_required_by_settings(world): 'Zoras Fountain -> Jabu Jabus Belly Beginning': ("inside #Jabu Jabu#, one can find", None, 'entrance'), 'Kakariko Village -> Bottom of the Well': ("a #village well# leads to", None, 'entrance'), + 'Ganons Castle Grounds -> Ganons Castle Lobby': ("the #rainbow bridge# leads to", None, 'entrance'), + 'KF Links House': ("Link's House", None, 'region'), 'Temple of Time': ("the #Temple of Time#", None, 'region'), 'KF Midos House': ("Mido's house", None, 'region'), @@ -1087,7 +1216,7 @@ def tokens_required_by_settings(world): 'ZF Great Fairy Fountain': ("a #Great Fairy Fountain#", None, 'region'), 'Graveyard Shield Grave': ("a #grave with a free chest#", None, 'region'), 'Graveyard Heart Piece Grave': ("a chest spawned by #Sun's Song#", None, 'region'), - 'Royal Familys Tomb': ("the #Royal Family's Tomb#", None, 'region'), + 'Graveyard Royal Familys Tomb': ("the #Royal Family's Tomb#", None, 'region'), 'Graveyard Dampes Grave': ("Dampé's Grave", None, 'region'), 'DMT Cow Grotto': ("a solitary #Cow#", None, 'region'), 'HC Storms Grotto': ("a sandy grotto with #fragile walls#", None, 'region'), @@ -1123,114 +1252,272 @@ def tokens_required_by_settings(world): 'ZD Storms Grotto': ("a small #Fairy Fountain#", None, 'region'), 'GF Storms Grotto': ("a small #Fairy Fountain#", None, 'region'), - # '1001': ("Ganondorf 2022!", None, 'junk'), - '1002': ("They say that monarchy is a terrible system of governance.", None, 'junk'), - '1003': ("They say that Zelda is a poor leader.", None, 'junk'), + # Junk hints must satisfy all of the following conditions: + # - They aren't inappropriate. + # - They aren't absurdly long copy pastas. + # - They aren't quotes or references that are simply not funny when out-of-context. + # To elaborate on this last point: junk hints need to be able to be understood + # by everyone, and not just those who get the obscure references. + # Zelda references are considered fair game. + + # First generation junk hints + '1002': ("${12 68 79}They say that monarchy is a terrible system of governance.", None, 'junk'), # sfx: Zelda gasp + '1003': ("${12 68 79}They say that Zelda is a poor leader.", None, 'junk'), # sfx: Zelda gasp '1004': ("These hints can be quite useful. This is an exception.", None, 'junk'), '1006': ("They say that all the Zora drowned in Wind Waker.", None, 'junk'), - '1008': ("'Member when Ganon was a blue pig?^I 'member.", None, 'junk'), + '1008': ("Remember when Ganon was a blue pig?^I remember.", None, 'junk'), # ref: A Link to the Past '1009': ("One who does not have Triforce can't go in.", None, 'junk'), '1010': ("Save your future, end the Happy Mask Salesman.", None, 'junk'), '1012': ("I'm stoned. Get it?", None, 'junk'), - '1013': ("Hoot! Hoot! Would you like me to repeat that?", None, 'junk'), - '1014': ("Gorons are stupid. They eat rocks.", None, 'junk'), + '1013': ("Hoot! Hoot! Would you like me to repeat that?", None, 'junk'), # ref: Kaepora Gaebora (the owl) + '1014': ("Gorons are stupid. They eat rocks. Except, apparently, the big rock blocking Dodongo's Cavern.", None, 'junk'), '1015': ("They say that Lon Lon Ranch prospered under Ingo.", None, 'junk'), - '1016': ("The single rupee is a unique item.", None, 'junk'), '1017': ("Without the Lens of Truth, the Treasure Chest Mini-Game is a 1 out of 32 chance.^Good luck!", None, 'junk'), '1018': ("Use bombs wisely.", None, 'junk'), - '1021': ("I found you, faker!", None, 'junk'), - '1022': ("You're comparing yourself to me?^Ha! You're not even good enough to be my fake.", None, 'junk'), - '1023': ("I'll make you eat those words.", None, 'junk'), + '1022': ("You're comparing yourself to me?^Ha! You're not even good enough to be my fake.", None, 'junk'), # ref: SA2 '1024': ("What happened to Sheik?", None, 'junk'), - # '1025': ("L2P @.", None, 'junk'), - '1026': ("I've heard Sploosh Kaboom is a tricky game.", None, 'junk'), - '1027': ("I'm Lonk from Pennsylvania.", None, 'junk'), + '1026': ("I've heard Sploosh Kaboom is a tricky game.", None, 'junk'), # ref: Wind Waker '1028': ("I bet you'd like to have more bombs.", None, 'junk'), '1029': ("When all else fails, use Fire.", None, 'junk'), # '1030': ("Here's a hint, @. Don't be bad.", None, 'junk'), - '1031': ("Game Over. Return of Ganon.", None, 'junk'), + '1031': ("Game Over. Return of Ganon.", None, 'junk'), # ref: Zelda II '1032': ("May the way of the Hero lead to the Triforce.", None, 'junk'), '1033': ("Can't find an item? Scan an Amiibo.", None, 'junk'), '1034': ("They say this game has just a few glitches.", None, 'junk'), - '1035': ("BRRING BRRING This is Ulrira. Wrong number?", None, 'junk'), - '1036': ("Tingle Tingle Kooloo Limpah", None, 'junk'), - '1037': ("L is real 2041", None, 'junk'), + '1035': ("BRRING BRRING This is Ulrira. Wrong number?", None, 'junk'), # ref: Link's Awakening + '1036': ("Tingle Tingle Kooloo Limpah", None, 'junk'), # ref: Majora's Mask '1038': ("They say that Ganondorf will appear in the next Mario Tennis.", None, 'junk'), '1039': ("Medigoron sells the earliest Breath of the Wild demo.", None, 'junk'), - '1040': ("There's a reason why I am special inquisitor!", None, 'junk'), '1041': ("You were almost a @ sandwich.", None, 'junk'), '1042': ("I'm a helpful hint Gossip Stone!^See, I'm helping.", None, 'junk'), - '1043': ("Dear @, please come to the castle. I've baked a cake for you.&Yours truly, princess Zelda.", None, 'junk'), - '1044': ("They say all toasters toast toast.", None, 'junk'), - '1045': ("They say that Okami is the best Zelda game.", None, 'junk'), + '1043': ("Dear @, please come to the castle. I've baked a cake for you.&Yours truly, princess Zelda.", None, 'junk'), # ref: Super Mario 64 + '1044': ("They say all toasters toast toast.", None, 'junk'), # ref: Hotel Mario + '1045': ("They say that Okami is the best Zelda game.", None, 'junk'), # ref: people often say that Okami feels and plays like a Zelda game '1046': ("They say that quest guidance can be found at a talking rock.", None, 'junk'), # '1047': ("They say that the final item you're looking for can be found somewhere in Hyrule.", None, 'junk'), - '1048': ("Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.", None, 'junk'), + '1048': ("${12 68 7a}Mweep${07 04 51}", None, 'junk'), # Mweep '1049': ("They say that Barinade fears Deku Nuts.", None, 'junk'), - '1050': ("They say that Flare Dancers do not fear Goron-crafted blades.", None, 'junk'), + '1050': ("They say that Flare Dancers do not fear Goron-crafted blades.", None, 'junk'), '1051': ("They say that Morpha is easily trapped in a corner.", None, 'junk'), '1052': ("They say that Bongo Bongo really hates the cold.", None, 'junk'), '1053': ("They say that crouch stabs mimic the effects of your last attack.", None, 'junk'), '1054': ("They say that bombing the hole Volvagia last flew into can be rewarding.", None, 'junk'), '1055': ("They say that invisible ghosts can be exposed with Deku Nuts.", None, 'junk'), '1056': ("They say that the real Phantom Ganon is bright and loud.", None, 'junk'), - '1057': ("They say that walking backwards is very fast.", None, 'junk'), + '1057': ("They say that the fastest way forward is walking backwards.", None, 'junk'), '1058': ("They say that leaping above the Market entrance enriches most children.", None, 'junk'), - '1059': ("They say that looking into darkness may find darkness looking back into you.", None, 'junk'), + '1059': ("They say that looking into darkness may find darkness looking back into you.", None, 'junk'), # ref: Nietzsche '1060': ("You found a spiritual Stone! By which I mean, I worship Nayru.", None, 'junk'), - '1061': ("They say that the stick is mightier than the sword.", None, 'junk'), - '1062': ("Open your eyes.^Open your eyes.^Wake up, @.", None, 'junk'), + '1061': ("A broken stick is just as good as a Master Sword. Who knew?", None, 'junk'), + '1062': ("Open your eyes.^Open your eyes.^Wake up, @.", None, 'junk'), # ref: Breath of the Wild '1063': ("They say that arbitrary code execution leads to the credits sequence.", None, 'junk'), '1064': ("They say that Twinrova always casts the same spell the first three times.", None, 'junk'), # '1065': ("They say that the Development branch may be unstable.", None, 'junk'), - '1066': ("You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!", None, 'junk'), + '1066': ("You're playing a Randomizer. I'm randomized!^${12 48 31}Here's a random number: #4#.&Enjoy your Randomizer!", None, 'junk'), # ref: xkcd comic / sfx: get small item from chest '1067': ("They say Ganondorf's bolts can be reflected with glass or steel.", None, 'junk'), - '1068': ("They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, boomerangs...^...rods, shovels, iron balls, angry bees...", None, 'junk'), + '1068': ("They say Ganon's tail is vulnerable to nuts, arrows, swords, explosives, hammers...^...sticks, seeds, boomerangs...^...rods, shovels, iron balls, angry bees...", None, 'junk'), # ref: various Zelda games '1069': ("They say that you're wasting time reading this hint, but I disagree. Talk to me again!", None, 'junk'), '1070': ("They say Ganondorf knows where to find the instrument of his doom.", None, 'junk'), '1071': ("I heard @ is pretty good at Zelda.", None, 'junk'), - 'Deku Tree': ("an ancient tree", "Deku Tree", 'dungeonName'), + # Second generation junk hints + '1072': ("Fingers-Mazda, the first thief in the world, stole fire from the gods.^But he was unable to fence it.&It was too hot.&He got really burned on that deal.", None, 'junk'), # ref: Discworld + '1073': ("Boing-oing!^There are times in life when one should seek the help of others...^Thus, when standing alone fails to help, stand together.", None, 'junk'), # ref: Gossip Stone in Phantom Hourglass + '1074': ("They say that if you don't use your slingshot at all when you play the slingshot minigame, the owner gets upset with you.", None, 'junk'), + '1075': ("Hey! Wait! Don't go out! It's unsafe!^Wild Pokémon live in tall grass!^You need your own Pokémon for your protection.", None, 'junk'), # ref: Pokémon + '1076': ("They say it's 106 miles to Hyrule Castle, we have half a bar of magic, it's dark, and we're wearing sunglasses.", None, 'junk'), # ref: Blues Brothers + '1078': ("It would be a shame if something... unfortunate... were to happen to you.^Have you considered saving lately?", None, 'junk'), # ref: meme + '1079': ("They say that something wonderful happens when playing the Song of Storms after planting a magic bean.", None, 'junk'), + '1080': ("Long time watcher, first time player. Greetings from Termina. Incentive goes to Randobot's choice.", None, 'junk'), # ref: GDQ meme + '1081': ("No matter what happens...Do not give up, do not complain, and do NOT stay up all night playing!", None, 'junk'), # ref: Wind Waker + '1082': ("That's a nice wall you got there. Would be a shame if I just... clipped right through that.", None, 'junk'), + '1083': ("Ganondorf used to be an adventurer like me, but then he took a light arrow to the knee.", None, 'junk'), # ref: Skyrim + '1084': ("They say that the easiest way to kill Peahats is using Din's Fire while they're grounded.", None, 'junk'), + '1085': ("They say that the castle guards' routes have major security vulnerabilities.", None, 'junk'), + '1086': ("They say that Epona is an exceptional horse. Able to clear canyons in a single bound.", None, 'junk'), + '1087': ("They say only one heart piece in all of Hyrule will declare the holder a winner.", None, 'junk'), + # '1088': ("Are you stuck? Try asking for help in our Discord server or check out our Wiki!", None, 'junk'), + '1089': ("You would be surprised at all the things you can Hookshot in the Spirit Temple!", None, 'junk'), + '1090': ("I once glued a set of false teeth to the Boomerang.^${12 39 c7}That came back to bite me.", None, 'junk'), # sfx: Ganondorf laugh + '1091': ("They say that most of the water in Hyrule flows through King Zora's buttocks.", None, 'junk'), + '1092': ("Space, space, wanna go to space, yes, please space. Space space. Go to space.", None, 'junk'), # ref: Portal 2 + '1093': ("They say that you must read the names of \"Special Deal\" items in shops carefully.", None, 'junk'), + '1094': ("Did you know that the Boomerang instantly stuns Phantom Ganon's second form?", None, 'junk'), + '1095': ("I came here to chew bubblegum and play rando. And I'm all out of bubblegum.", None, 'junk'), # ref: They Live + '1096': ("Did you know that Stalchildren leave you alone when wearing the Bunny Hood?", None, 'junk'), + '1097': ("This Gossip Stone Is Dedicated to Those Who Perished Before Ganon Was Defeated.", None, 'junk'), + '1098': ("Did you know that Blue Fire destroys mud walls and detonates Bomb Flowers?", None, 'junk'), + '1099': ("Are you sure you want to play this? Wanna go get some tacos or something?", None, 'junk'), + '1100': ("What did Zelda suggest that Link do when diplomacy didn't work?^${12 39 C7}Triforce.", None, 'junk'), # sfx: Ganondorf laugh + '1101': ("They say that bombing the hole Volvagia last flew into can be rewarding.", None, 'junk'), + '1102': ("Hi @, we've been trying to reach you about your horse's extended warranty.", None, 'junk'), + '1103': ("Ganondorf brushes his rotten teeth with salted slug flavoured tooth paste!", None, 'junk'), # ref: Banjo Kazooie + '1104': ("I'm Commander Shepard, and this is my favorite Gossip Stone in Hyrule!", None, 'junk'), # ref: Mass Effect + '1105': ("They say that tossing a bomb will cause a Blue Bubble to go after it.", None, 'junk'), + '1106': ("They say that the Lizalfos in Dodongo's Cavern like to play in lava.", None, 'junk'), + '1107': ("Why won't anyone acknowledge the housing crisis in Kakariko Village?", None, 'junk'), + '1108': ("Don't believe in yourself. Believe in the me that believes in you!", None, 'junk'), # ref: Anime + '1109': ("This is a haiku&Five syllables then seven&Five more to finish", None, 'junk'), + '1110': ("They say that beating Bongo Bongo quickly requires an even tempo.", None, 'junk'), + '1111': ("Did you know that you can tune a piano but you can't tune a fish?", None, 'junk'), # Studio Album by REO Speedwagon + '1112': ("You thought it would be a useful hint, but it was me, Junk Hint!", None, 'junk'), # ref: Jojo's Bizarre Adventure + '1113': ("They say you can cut corners to get to your destination faster.", None, 'junk'), + '1114': ("Three things are certain: death, taxes, and forgetting a check.", None, 'junk'), # ref: Benjamin Franklin, allegedly + '1115': ("Have you thought about going where the items are?^Just saying.", None, 'junk'), + '1116': ("They say that the true reward is the friends we made along the way.", None, 'junk'), # ref: common meme with unknown origins + '1117': ("Gossip Stone Shuffle must be on. I'm normally in Zora's Domain!", None, 'junk'), + '1118': ("When ASM is used to code a randomizer they should call it ASMR.", None, 'junk'), + '1119': ("It's so lonely being stuck here with nobody else to talk to...", None, 'junk'), + '1120': ("Why are they called Wallmasters if they come from the ceiling?", None, 'junk'), + '1121': ("They say that Zelda's Lullaby can be used to repair broken signs.", None, 'junk'), + '1122': ("Fell for it, didn't you, fool? Junk hint cross split attack!", None, 'junk'), # ref: Jojo's Bizarre Adventure + '1123': ("Please don't abandon this seed. Our world deserves saving!", None, 'junk'), + '1124': ("I wanna be a rocketship, @! Please help me live my dreams!", None, 'junk'), + '1125': ("They say that King Zora needs to build a taller fence.", None, 'junk'), + '1126': ("They say Goron fabrics protect against more than fire.", None, 'junk'), + '1127': ("Did you know that ReDead mourn their defeated friends?", None, 'junk'), + '1128': ("Did you know that ReDead eat their defeated friends?", None, 'junk'), + '1129': ("What is a Hylian? A miserable little pile of secrets!", None, 'junk'), # ref: Castlevania + '1130': ("The hint stone you have dialed&has been disconnected.", None, 'junk'), # ref: telephone error message + '1131': ("We don't make mistakes, we have happy accidents.", None, 'junk'), # ref: Bob Ross + '1132': ("I've heard Ganon dislikes lemon-flavored popsicles.", None, 'junk'), + '1133': ("If Gorons eat rocks, does that mean I'm in danger?", None, 'junk'), + '1134': ("They say Ingo is not very good at planning ahead.", None, 'junk'), + '1136': ("They say that Anju needs to stop losing her chickens.", None, 'junk'), + '1137': ("Can you move me? I don't get great service here.", None, 'junk'), + '1138': ("Have you embraced the power of the Deku Nut yet?", None, 'junk'), + '1139': ("They say that Mido is easily confused by sick flips.", None, 'junk'), # ref: Mido Skip + '1140': ("They say that the path to Termina is a one-way trip.", None, 'junk'), # ref: Majora's Mask + '1141': ("They say that @ deserves a hug. Everyone does!", None, 'junk'), + '1142': ("I hear Termina is a great spot for a vacation!", None, 'junk'), # ref: Majora's Mask + '1144': ("You've met with a terrible fate, haven't you?", None, 'junk'), # ref: Majora's Mask + '1145': ("Try using various items and weapons on me :)", None, 'junk'), + '1146': ("On second thought, let's not go to Hyrule Castle. 'Tis a silly place.", None, 'junk'), # ref: Monty Python + '1147': ("If you see something suspicious, bomb it!", None, 'junk'), + '1148': ("Don't forget to write down your hints :)", None, 'junk'), + '1149': ("Would you kindly...&close this textbox?", None, 'junk'), # ref: Bioshock + '1150': ("They say that King Dodongo dislikes smoke.", None, 'junk'), # ref: Zelda 1 + '1151': ("Never give up. Trust your instincts!", None, 'junk'), # ref: Star Fox 64 + '1152': ("I love to gossip! Wanna be friends?", None, 'junk'), + '1153': ("This isn't where I parked my horse!", None, 'junk'), # ref: EuroTrip + '1156': ("Anything not saved will be lost.", None, 'junk'), # ref: Nintendo (various games and platforms) + '1157': ("I was voted least helpful hint stone five years in a row!", None, 'junk'), + '1158': ("They say that the Groose is loose.", None, 'junk'), # ref: Skyward Sword + '1159': ("Twenty-three is number one!^And thirty-one is number two!", None, 'junk'), # ref: Deku Scrubs in Deku Tree + '1160': ("Ya ha ha! You found me!", None, 'junk'), # ref: Breath of the Wild + '1161': ("Do you like Like Likes?", None, 'junk'), + '1162': ("Next you'll say:^\"Why am I still reading these?\"", None, 'junk'), # ref: Jojo's Bizarre Adventure + '1165': ("You're a cool cat, @.", None, 'junk'), + '1167': ("This hint is in another castle.", None, 'junk'), # ref: Mario + '1169': ("Hydrate!", None, 'junk'), + '1170': ("They say that there is an alcove with a Recovery Heart behind the lava wall in Dodongo's Cavern.", None, 'junk'), + '1171': ("Having regrets? Reset without saving!", None, 'junk'), + '1172': ("Did you know that Gorons understood SRM long before speedrunners did?", None, 'junk'), # ref: Goron City murals + # '1173': ("Did you know that the Discord server has a public Plandomizer library?", None, 'junk'), + '1174': ("${12 28 DF}Moo!", None, 'junk'), # sfx: cow + '1175': ("${12 28 D8}Woof!", None, 'junk'), # sfx: dog + '1176': ("${12 68 08}Aah! You startled me!", None, 'junk'), # sfx: adult Link scream (when falling) + '1178': ("Use Multiworld to cross the gaps between worlds and engage in jolly co-operation!", None, 'junk'), # ref: Dark Souls + '1179': ("${12 68 51}What in tarnation!", None, 'junk'), # sfx: Talon surprised at being woken + '1180': ("Press \u00A5\u00A5\u00A6\u00A6\u00A7\u00A8\u00A7\u00A8\u00A0\u009F to warp to&the credits.", None, 'junk'), # ref: Konami Code + '1181': ("Oh!^Oh-oh!^C'mon!^Come on! Come on! Come on!^HOT!!^What a hot beat!^WHOOOOAH!^YEEEEAH!^YAHOOO!!", None, 'junk'), # ref: Darunia dancing + '1182': ("${12 68 5F}Hey! Listen!", None, 'junk'), # sfx: Navi: "Hey!" + '1183': ("I am the King of Gossip Stones, but fear not - I have the common touch! That means I can make conversation with everyone^from foreign dignitaries to the lowliest bumpkin - such as yourself!", None, 'junk'), # ref: Dragon Quest XI + '1184': ("I am @, hero of the Gossip Stones! Hear my name and tremble!", None, 'junk'), # ref: Link the Goron + '1185': ("Having trouble defeating Dark Link?^Look away from him while holding Z-Target and then when Dark Link walks up behind you, strafe sideways and slash your sword.", None, 'junk'), + '1186': ("They say that if Link could say a few words, he'd be a better public speaker.", None, 'junk'), + '1187': ("Did you know that you only need to play the Song of Time to open the Door of Time? The Spiritual Stones are not needed.", None, 'junk'), + '1188': ("Where did Anju meet her lover?^${12 39 C7}At a Kafei.", None, 'junk'), # ref: Majora's Mask / sfx: Ganondorf laugh + '1189': ("Did you know that you can access the Fire Temple boss door without dropping the pillar by using the Hover boots?", None, 'junk'), + '1190': ("Key-locked in Fire Temple? Maybe Volvagia has your Small Key.", None, 'junk'), + # '1191': ("Expired Spoiler Log? Don't worry! The OoTR Discord staff can help you out.", None, 'junk'), + '1192': ("Try holding a D-pad button on the item screen.", None, 'junk'), + '1193': ("Did you know that in the Forest Temple you can reach the alcove in the block push room with Hover Boots?", None, 'junk'), + '1194': ("Dodongo's Cavern is much easier and faster to clear as Adult.", None, 'junk'), + '1195': ("Did you know that the solution to the Truth Spinner in Shadow Temple is never one of the two positions closest to the initial position?", None, 'junk'), + '1196': ("Did you know that the Kokiri Sword is as effective as Deku Sticks against Dead Hand?", None, 'junk'), + '1197': ("Did you know that Ruto is strong enough to defeat enemies and activate ceiling switches inside Jabu Jabu's Belly?", None, 'junk'), + '1198': ("Did you know that Barinade, Volvagia and Twinrova hard require the Boomerang, Megaton Hammer and Mirror Shield, respectively?", None, 'junk'), + '1199': ("Did you know that Dark Link's max health is equal to @'s max health?", None, 'junk'), + '1200': ("Did you know that you can reach the invisible Hookshot target before the fans room in Shadow Temple with just the Hookshot if you backflip onto the chest?", None, 'junk'), + '1201': ("${12 68 54}Objection!", None, 'junk'), # ref: Ace Attorney / sfx: Ingo's BWAAAAAH + '1202': ("They say that in the castle courtyard you can see a portrait of a young Talon.", None, 'junk'), # ref: Talon = Mario joke + '1203': ("They say that Phantom Ganon is a big Louisa May Alcott fan.", None, 'junk'), # ref: The Poe Sisters are named after characters from one of her novels + '1204': ("Have you found all 41 Gossip Stones?^Only 40 of us give hints.", None, 'junk'), # The 41th stone is the Lake Hylia water level stone + '1205': ("It's time for you to look inward and begin asking yourself the big questions:^How did Medigoron get inside that hole, and how does he get out for the credits?", None, 'junk'), # ref: Avatar The Last Airbender + '1206': ("They say that Jabu Jabu is no longer a pescetarian in Master Quest.", None, 'junk'), + '1207': ("Why are the floating skulls called \"Bubbles\" and the floating bubbles \"Shaboms\"?", None, 'junk'), + '1208': ("Why aren't ReDead called ReAlive?", None, 'junk'), + '1209': ("${12 48 27}Songs are hard, aren't they?", None, 'junk'), # sfx: failing a song + '1210': ("Did you know that you can Boomerang items that are freestanding Heart Pieces in the unrandomized game?", None, 'junk'), + '1211': ("Did you know that ReDead won't attack if you walk very slowly?", None, 'junk'), + '1212': ("Did you know that ReDead and Gibdo have their own version of Sun's Song that freezes you?", None, 'junk'), + '1213': ("${12 28 B1}\u009F \u00A7\u00A8\u00A6 \u00A7\u00A8\u00A6 \u009F\u00A6 \u009F\u00A6 \u00A8\u00A7\u009F", None, 'junk'), # ref: Frogs 2 / sfx: Frogs + '1214': ("${12 28 A2}Help! I'm melting away!", None, 'junk'), # sfx: red ice melting + '1215': ("${12 38 80}Eek!^I'm a little shy...", None, 'junk'), # sfx: Scrub hurt/stunned by Link + '1216': ("Master, there is a 0 percent chance that this hint is useful in any way.", None, 'junk'), # ref: Skyward Sword + '1217': ("${12 48 0B}Here, have a heart <3", None, 'junk'), # sfx: get Recovery Heart + '1218': ("${12 48 03}Here, have a Rupee.", None, 'junk'), # sfx: get Rupee + '1219': ("${12 68 31}Don't forget to stand up and stretch regularly.", None, 'junk'), # sfx: child Link stretching and yawning + '1220': ("Remember that time you did that really embarrassing thing?^${12 68 3A}Yikes.", None, 'junk'), # sfx: child Link fall damage + '1221': ("@ tries to read the Gossip Stone...^${12 48 06}but he's standing on the wrong side of it!", None, 'junk'), # ref: Dragon Quest XI / sfx: error (e.g. trying to equip an item as the wrong age) + '1222': ("Plandomizer is a pathway to many abilities some consider to be... unnatural.", None, 'junk'), # ref: Star Wars + '1223': ("Did you know that you can have complete control over the item placement, item pool, and more, using Plandomizer?", None, 'junk'), + '1224': ("They say that the earth is round.^Just like pizza.", None, 'junk'), + '1225': ("${12 68 62}Keeeyaaaah!^What is this?! A Hylian?!", None, 'junk'), # ref: Ruto meeting Big Octo / sfx: Ruto screaming + '1226': ("For you, the day you read this hint was the most important day of your life.^But for me, it was Tuesday.", None, 'junk'), # ref: Street Fighter (the movie) + '1227': ("Did you know that Barinade is allergic to bananas?", None, 'junk'), + '1228': ("Have you seen my dodongo? Very large, eats everything, responds to \"King\".^Call Darunia in Goron City if found. Huge rupee reward!", None, 'junk'), + '1229': ("Having trouble breathing underwater?^Have you tried wearing more BLUE?", None, 'junk'), + # '1230': ("Hi! I'm currently on an exchange program from Termina.^They say that East Clock Town is on the way of the hero.", None, 'junk'), # ref: Majora's Mask + '1231': ("Why are you asking me? I don't have any answers! I'm just as confused as you are!", None, 'junk'), + '1232': ("What do you call a group of Gorons?^${12 39 C7}A rock band.", None, 'junk'), # sfx: Ganondorf laugh + '1233': ("When the moon hits Termina like a big pizza pie that's game over.", None, 'junk'), # ref: That's Amore by Dean Martin + Majora's Mask + '1234': ("Ganondorf doesn't specialize in hiding items, nor in keeping secrets for that matter.", None, 'junk'), + '1235': ("While you're wasting time reading this hint, the others are playing the seed.", None, 'junk'), + '1236': ("Have you ever tried hammering the ground or wall in a room with Torch Slugs, Flare Dancers, Tektites, Walltulas, Scrubs or Deku Babas?", None, 'junk'), + '1237': ("Did you know that there's a 1/201 chance per Rupee that the Zora from the diving minigame tosses a 500 Rupee?^Keep winning and the odds go up!", None, 'junk'), + '1238': ("J = 0;&while J < 10;& Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;& J++;^ Press \u009F;^break;", None, 'junk'), # \u009F = A button + + 'Deku Tree': ("an ancient tree", "the Deku Tree", 'dungeonName'), 'Dodongos Cavern': ("an immense cavern", "Dodongo's Cavern", 'dungeonName'), 'Jabu Jabus Belly': ("the belly of a deity", "Jabu Jabu's Belly", 'dungeonName'), - 'Forest Temple': ("a deep forest", "Forest Temple", 'dungeonName'), - 'Fire Temple': ("a high mountain", "Fire Temple", 'dungeonName'), - 'Water Temple': ("a vast lake", "Water Temple", 'dungeonName'), - 'Shadow Temple': ("the house of the dead", "Shadow Temple", 'dungeonName'), - 'Spirit Temple': ("the goddess of the sand", "Spirit Temple", 'dungeonName'), - 'Ice Cavern': ("a frozen maze", "Ice Cavern", 'dungeonName'), - 'Bottom of the Well': ("a shadow\'s prison", "Bottom of the Well", 'dungeonName'), - 'Gerudo Training Ground': ("the test of thieves", "Gerudo Training Ground", 'dungeonName'), - 'Ganons Castle': ("a conquered citadel", "Inside Ganon's Castle", 'dungeonName'), - - 'Queen Gohma': ("One inside an #ancient tree#...", "One in the #Deku Tree#...", 'boss'), - 'King Dodongo': ("One within an #immense cavern#...", "One in #Dodongo's Cavern#...", 'boss'), - 'Barinade': ("One in the #belly of a deity#...", "One in #Jabu Jabu's Belly#...", 'boss'), - 'Phantom Ganon': ("One in a #deep forest#...", "One in the #Forest Temple#...", 'boss'), - 'Volvagia': ("One on a #high mountain#...", "One in the #Fire Temple#...", 'boss'), - 'Morpha': ("One under a #vast lake#...", "One in the #Water Temple#...", 'boss'), - 'Bongo Bongo': ("One within the #house of the dead#...", "One in the #Shadow Temple#...", 'boss'), - 'Twinrova': ("One inside a #goddess of the sand#...", "One in the #Spirit Temple#...", 'boss'), - 'Links Pocket': ("One in #@'s pocket#...", "One #@ already has#...", 'boss'), + 'Forest Temple': ("a deep forest", "the Forest Temple", 'dungeonName'), + 'Fire Temple': ("a high mountain", "the Fire Temple", 'dungeonName'), + 'Water Temple': ("a vast lake", "the Water Temple", 'dungeonName'), + 'Shadow Temple': ("the house of the dead", "the Shadow Temple", 'dungeonName'), + 'Spirit Temple': ("the goddess of the sand", "the Spirit Temple", 'dungeonName'), + 'Ice Cavern': ("a frozen maze", "the Ice Cavern", 'dungeonName'), + 'Bottom of the Well': ("a shadow's prison", "the Bottom of the Well", 'dungeonName'), + 'Gerudo Training Ground': ("the test of thieves", "the Gerudo Training Ground", 'dungeonName'), + 'Ganons Castle': ("a conquered citadel", "inside Ganon's Castle", 'dungeonName'), 'bridge_vanilla': ("the #Shadow and Spirit Medallions# as well as the #Light Arrows#", None, 'bridge'), 'bridge_stones': ("Spiritual Stones", None, 'bridge'), 'bridge_medallions': ("Medallions", None, 'bridge'), 'bridge_dungeons': ("Spiritual Stones and Medallions", None, 'bridge'), 'bridge_tokens': ("Gold Skulltula Tokens", None, 'bridge'), + 'bridge_hearts': ("hearts", None, 'bridge'), 'ganonBK_dungeon': ("hidden somewhere #inside its castle#", None, 'ganonBossKey'), + 'ganonBK_regional': ("hidden somewhere #inside or nearby its castle#", None, 'ganonBossKey'), 'ganonBK_vanilla': ("kept in a big chest #inside its tower#", None, 'ganonBossKey'), 'ganonBK_overworld': ("hidden #outside of dungeons# in Hyrule", None, 'ganonBossKey'), 'ganonBK_any_dungeon': ("hidden #inside a dungeon# in Hyrule", None, 'ganonBossKey'), - 'ganonBK_keysanity': ("hidden somewhere #in Hyrule#", None, 'ganonBossKey'), + 'ganonBK_keysanity': ("hidden #anywhere in Hyrule#", None, 'ganonBossKey'), 'ganonBK_triforce': ("given to the Hero once the #Triforce# is completed", None, 'ganonBossKey'), + 'ganonBK_medallions': ("Medallions", None, 'ganonBossKey'), + 'ganonBK_stones': ("Spiritual Stones", None, 'ganonBossKey'), + 'ganonBK_dungeons': ("Spiritual Stones and Medallions", None, 'ganonBossKey'), + 'ganonBK_tokens': ("Gold Skulltula Tokens", None, 'ganonBossKey'), + 'ganonBK_hearts': ("hearts", None, 'ganonBossKey'), 'lacs_vanilla': ("the #Shadow and Spirit Medallions#", None, 'lacs'), 'lacs_medallions': ("Medallions", None, 'lacs'), 'lacs_stones': ("Spiritual Stones", None, 'lacs'), 'lacs_dungeons': ("Spiritual Stones and Medallions", None, 'lacs'), 'lacs_tokens': ("Gold Skulltula Tokens", None, 'lacs'), + 'lacs_hearts': ("hearts", None, 'lacs'), 'Spiritual Stone Text Start': ("3 Spiritual Stones found in Hyrule...", None, 'altar'), 'Child Altar Text End': ("\x13\x07Ye who may become a Hero...&Stand with the Ocarina and&play the Song of Time.", None, 'altar'), @@ -1238,7 +1525,6 @@ def tokens_required_by_settings(world): 'Adult Altar Text End': ("Together with the Hero of Time,&the awakened ones will bind the&evil and return the light of peace&to the world...", None, 'altar'), 'Validation Line': ("Hmph... Since you made it this far,&I'll let you know what glorious&prize of Ganon's you likely&missed out on in my tower.^Behold...^", None, 'validation line'), - 'Light Arrow Location': ("Ha ha ha... You'll never beat me by&reflecting my lightning bolts&and unleashing the arrows from&", None, 'Light Arrow Location'), '2001': ("Oh! It's @.&I was expecting someone called&Sheik. Do you know what&happened to them?", None, 'ganonLine'), '2002': ("I knew I shouldn't have put the key&on the other side of my door.", None, 'ganonLine'), '2003': ("Looks like it's time for a&round of tennis.", None, 'ganonLine'), @@ -1252,6 +1538,140 @@ def tokens_required_by_settings(world): '2011': ("Today, let's begin down&'The Hero is Defeated' timeline.", None, 'ganonLine'), } +# Table containing the groups of locations for the multi hints (dual, etc.) +# The is used in order to add the locations to the checked list +multiTable = { + 'Deku Theater Rewards': ['Deku Theater Skull Mask', 'Deku Theater Mask of Truth'], + 'HF Ocarina of Time Retrieval': ['HF Ocarina of Time Item', 'Song from Ocarina of Time'], + 'HF Valley Grotto': ['HF Cow Grotto Cow', 'HF GS Cow Grotto'], + 'Market Bombchu Bowling Rewards': ['Market Bombchu Bowling First Prize', 'Market Bombchu Bowling Second Prize'], + 'ZR Frogs Rewards': ['ZR Frogs in the Rain', 'ZR Frogs Ocarina Game'], + 'LH Lake Lab Pool': ['LH Lab Dive', 'LH GS Lab Crate'], + 'LH Adult Bean Destination Checks': ['LH Freestanding PoH', 'LH Adult Fishing'], + 'GV Pieces of Heart Ledges': ['GV Crate Freestanding PoH', 'GV Waterfall Freestanding PoH'], + 'GF Horseback Archery Rewards': ['GF HBA 1000 Points', 'GF HBA 1500 Points'], + 'Colossus Nighttime GS': ['Colossus GS Tree', 'Colossus GS Hill'], + 'Graveyard Dampe Race Rewards': ['Graveyard Dampe Race Hookshot Chest', 'Graveyard Dampe Race Freestanding PoH'], + 'Graveyard Royal Family Tomb Contents': ['Graveyard Royal Familys Tomb Chest', 'Song from Royal Familys Tomb'], + 'DMC Child Upper Checks': ['DMC GS Crate', 'DMC Deku Scrub'], + 'Haunted Wasteland Checks': ['Wasteland Chest', 'Wasteland GS'], + + 'Deku Tree MQ Basement GS': ['Deku Tree MQ GS Basement Graves Room','Deku Tree MQ GS Basement Back Room'], + 'Dodongos Cavern Upper Business Scrubs': ['Dodongos Cavern Deku Scrub Near Bomb Bag Left', 'Dodongos Cavern Deku Scrub Near Bomb Bag Right'], + 'Dodongos Cavern MQ Larvae Room': ['Dodongos Cavern MQ Larvae Room Chest', 'Dodongos Cavern MQ GS Larvae Room'], + 'Fire Temple Lower Loop': ['Fire Temple Flare Dancer Chest', 'Fire Temple Boss Key Chest'], + 'Fire Temple MQ Lower Loop': ['Fire Temple MQ Megaton Hammer Chest', 'Fire Temple MQ Map Chest'], + 'Water Temple River Loop Chests': ['Water Temple Longshot Chest', 'Water Temple River Chest'], + 'Water Temple River Checks': ['Water Temple GS River', 'Water Temple River Chest'], + 'Water Temple North Basement Checks': ['Water Temple GS Near Boss Key Chest', 'Water Temple Boss Key Chest'], + 'Water Temple MQ North Basement Checks': ['Water Temple MQ Freestanding Key', 'Water Temple MQ GS Freestanding Key Area'], + 'Water Temple MQ Lower Checks': ['Water Temple MQ Boss Key Chest', 'Water Temple MQ Freestanding Key'], + 'Spirit Temple Colossus Hands': ['Spirit Temple Silver Gauntlets Chest', 'Spirit Temple Mirror Shield Chest'], + 'Spirit Temple Child Lower': ['Spirit Temple Child Bridge Chest', 'Spirit Temple Child Early Torches Chest'], + 'Spirit Temple Child Top': ['Spirit Temple Sun Block Room Chest', 'Spirit Temple GS Hall After Sun Block Room'], + 'Spirit Temple Adult Lower': ['Spirit Temple Early Adult Right Chest', 'Spirit Temple Compass Chest'], + 'Spirit Temple MQ Child Top': ['Spirit Temple MQ Sun Block Room Chest', 'Spirit Temple MQ GS Sun Block Room'], + 'Spirit Temple MQ Symphony Room': ['Spirit Temple MQ Symphony Room Chest', 'Spirit Temple MQ GS Symphony Room'], + 'Spirit Temple MQ Throne Room GS': ['Spirit Temple MQ GS Nine Thrones Room West', 'Spirit Temple MQ GS Nine Thrones Room North'], + 'Shadow Temple Invisible Blades Chests': ['Shadow Temple Invisible Blades Visible Chest', 'Shadow Temple Invisible Blades Invisible Chest'], + 'Shadow Temple Single Pot Room': ['Shadow Temple Freestanding Key', 'Shadow Temple GS Single Giant Pot'], + 'Shadow Temple Spike Walls Room': ['Shadow Temple Spike Walls Left Chest', 'Shadow Temple Boss Key Chest'], + 'Shadow Temple MQ Upper Checks': ['Shadow Temple MQ Compass Chest', 'Shadow Temple MQ Hover Boots Chest'], + 'Shadow Temple MQ Invisible Blades Chests': ['Shadow Temple MQ Invisible Blades Visible Chest', 'Shadow Temple MQ Invisible Blades Invisible Chest'], + 'Shadow Temple MQ Spike Walls Room': ['Shadow Temple MQ Spike Walls Left Chest', 'Shadow Temple MQ Boss Key Chest'], + 'Bottom of the Well Inner Rooms GS': ['Bottom of the Well GS West Inner Room', 'Bottom of the Well GS East Inner Room'], + 'Bottom of the Well Dead Hand Room': ['Bottom of the Well Lens of Truth Chest', 'Bottom of the Well Invisible Chest'], + 'Bottom of the Well MQ Dead Hand Room': ['Bottom of the Well MQ Compass Chest', 'Bottom of the Well MQ Dead Hand Freestanding Key'], + 'Bottom of the Well MQ Basement': ['Bottom of the Well MQ GS Basement', 'Bottom of the Well MQ Lens of Truth Chest'], + 'Ice Cavern Final Room': ['Ice Cavern Iron Boots Chest', 'Sheik in Ice Cavern'], + 'Ice Cavern MQ Final Room': ['Ice Cavern MQ Iron Boots Chest', 'Sheik in Ice Cavern'], + 'Ganons Castle Spirit Trial Chests': ['Ganons Castle Spirit Trial Crystal Switch Chest', 'Ganons Castle Spirit Trial Invisible Chest'], +} + +misc_item_hint_table = { + 'dampe_diary': { + 'id': 0x5003, + 'hint_location': 'Dampe Diary Hint', + 'default_item': 'Progressive Hookshot', + 'default_item_text': "Whoever reads this, please enter {area}. I will let you have my stretching, shrinking keepsake.^I'm waiting for you.&--Dampé", + 'custom_item_text': "Whoever reads this, please enter {area}. I will let you have {item}.^I'm waiting for you.&--Dampé", + 'default_item_fallback': "Whoever reads this, I'm sorry, but I seem to have #misplaced# my stretching, shrinking keepsake.&--Dampé", + 'custom_item_fallback': "Whoever reads this, I'm sorry, but I seem to have #misplaced# {item}.&--Dampé", + 'replace': { + "enter #your pocket#. I will let you have": "check #your pocket#. You will find", + }, + 'use_alt_hint': False, + 'local_only': True, + }, + 'ganondorf': { + 'id': 0x70CC, + 'hint_location': 'Ganondorf Hint', + 'default_item': 'Light Arrows', + 'default_item_text': "Ha ha ha... You'll never beat me by reflecting my lightning bolts and unleashing the arrows from {area}!", + 'custom_item_text': "Ha ha ha... You'll never find {item} from {area}!", + 'replace': { + "from #inside Ganon's Castle#": "from #inside my castle#", + "from #outside Ganon's Castle#": "from #outside my castle#", + "from #Ganondorf's Chamber#": "from #those pots over there#", + }, + 'use_alt_hint': True, + 'local_only': False, + }, +} + +misc_location_hint_table = { + '10_skulltulas': { + 'id': 0x9004, + 'hint_location': '10 Skulltulas Reward Hint', + 'item_location': 'Kak 10 Gold Skulltula Reward', + 'location_text': "Yeaaarrgh! I'm cursed!! Please save me by destroying \x05\x4110 Spiders of the Curse\x05\x40 and I will give you \x05\x42{item}\x05\x40.", + 'location_fallback': "Yeaaarrgh! I'm cursed!!", + }, + '20_skulltulas': { + 'id': 0x9005, + 'hint_location': '20 Skulltulas Reward Hint', + 'item_location': 'Kak 20 Gold Skulltula Reward', + 'location_text': "Yeaaarrgh! I'm cursed!! Please save me by destroying \x05\x4120 Spiders of the Curse\x05\x40 and I will give you \x05\x42{item}\x05\x40.", + 'location_fallback': "Yeaaarrgh! I'm cursed!!", + }, + '30_skulltulas': { + 'id': 0x9006, + 'hint_location': '30 Skulltulas Reward Hint', + 'item_location': 'Kak 30 Gold Skulltula Reward', + 'location_text': "Yeaaarrgh! I'm cursed!! Please save me by destroying \x05\x4130 Spiders of the Curse\x05\x40 and I will give you \x05\x42{item}\x05\x40.", + 'location_fallback': "Yeaaarrgh! I'm cursed!!", + }, + '40_skulltulas': { + 'id': 0x9007, + 'hint_location': '40 Skulltulas Reward Hint', + 'item_location': 'Kak 40 Gold Skulltula Reward', + 'location_text': "Yeaaarrgh! I'm cursed!! Please save me by destroying \x05\x4140 Spiders of the Curse\x05\x40 and I will give you \x05\x42{item}\x05\x40.", + 'location_fallback': "Yeaaarrgh! I'm cursed!!", + }, + '50_skulltulas': { + 'id': 0x9008, + 'hint_location': '50 Skulltulas Reward Hint', + 'item_location': 'Kak 50 Gold Skulltula Reward', + 'location_text': "Yeaaarrgh! I'm cursed!! Please save me by destroying \x05\x4150 Spiders of the Curse\x05\x40 and I will give you \x05\x42{item}\x05\x40.", + 'location_fallback': "Yeaaarrgh! I'm cursed!!", + }, +} + +# Separate table for goal names to avoid duplicates in the hint table. +# Link's Pocket will always be an empty goal, but it's included here to +# prevent key errors during the dungeon reward lookup. +goalTable = { + 'Queen Gohma': ("path to the #Spider#", "path to #Queen Gohma#", "Green"), + 'King Dodongo': ("path to the #Dinosaur#", "path to #King Dodongo#", "Red"), + 'Barinade': ("path to the #Tentacle#", "path to #Barinade#", "Blue"), + 'Phantom Ganon': ("path to the #Puppet#", "path to #Phantom Ganon#", "Green"), + 'Volvagia': ("path to the #Dragon#", "path to #Volvagia#", "Red"), + 'Morpha': ("path to the #Amoeba#", "path to #Morpha#", "Blue"), + 'Bongo Bongo': ("path to the #Hands#", "path to #Bongo Bongo#", "Pink"), + 'Twinrova': ("path to the #Witches#", "path to #Twinrova#", "Yellow"), + 'Links Pocket': ("path to #Links Pocket#", "path to #Links Pocket#", "Light Blue"), +} + # This specifies which hints will never appear due to either having known or known useless contents or due to the locations not existing. def hintExclusions(world, clear_cache=False): @@ -1272,10 +1692,13 @@ def hintExclusions(world, clear_cache=False): hint = getHint(name, world.clearer_hints) if any(item in hint.type for item in ['always', + 'dual_always', 'sometimes', 'overworld', 'dungeon', - 'song']): + 'song', + 'dual', + 'exclude']): location_hints.append(hint) for hint in location_hints: @@ -1287,9 +1710,9 @@ def hintExclusions(world, clear_cache=False): def nameIsLocation(name, hint_type, world): if isinstance(hint_type, (list, tuple)): for htype in hint_type: - if htype in ['sometimes', 'song', 'overworld', 'dungeon', 'always'] and name not in hintExclusions(world): + if htype in ['sometimes', 'song', 'overworld', 'dungeon', 'always', 'exclude'] and name not in hintExclusions(world): return True - elif hint_type in ['sometimes', 'song', 'overworld', 'dungeon', 'always'] and name not in hintExclusions(world): + elif hint_type in ['sometimes', 'song', 'overworld', 'dungeon', 'always', 'exclude'] and name not in hintExclusions(world): return True return False diff --git a/worlds/oot/Hints.py b/worlds/oot/Hints.py index 37b24c888915..70e17f78bb27 100644 --- a/worlds/oot/Hints.py +++ b/worlds/oot/Hints.py @@ -10,8 +10,10 @@ import json from enum import Enum +from BaseClasses import Region from .Items import OOTItem -from .HintList import getHint, getHintGroup, Hint, hintExclusions +from .HintList import getHint, getHintGroup, Hint, hintExclusions, \ + misc_item_hint_table, misc_location_hint_table from .Messages import COLOR_MAP, update_message_by_id from .TextBox import line_wrap from .Utils import data_path, read_json @@ -24,7 +26,10 @@ ) defaultHintDists = [ - 'balanced.json', 'bingo.json', 'ddr.json', 'scrubs.json', 'strong.json', 'tournament.json', 'useless.json', 'very_strong.json' + 'async.json', 'balanced.json', 'bingo.json', 'chaos.json', 'coop2.json', + 'ddr.json', 'league.json', 'mw3.json', 'scrubs.json', 'strong.json', + 'tournament.json', 'useless.json', 'very_strong.json', + 'very_strong_magic.json', 'weekly.json' ] class RegionRestriction(Enum): @@ -294,6 +299,151 @@ class HintAreaNotFound(RuntimeError): pass +class HintArea(Enum): + # internal name prepositions display name short name color internal dungeon name + # vague clear + ROOT = 'in', 'in', "Link's pocket", 'Free', 'White', None + HYRULE_FIELD = 'in', 'in', 'Hyrule Field', 'Hyrule Field', 'Light Blue', None + LON_LON_RANCH = 'at', 'at', 'Lon Lon Ranch', 'Lon Lon Ranch', 'Light Blue', None + MARKET = 'in', 'in', 'the Market', 'Market', 'Light Blue', None + TEMPLE_OF_TIME = 'inside', 'inside', 'the Temple of Time', 'Temple of Time', 'Light Blue', None + CASTLE_GROUNDS = 'on', 'on', 'the Castle Grounds', None, 'Light Blue', None # required for warp songs + HYRULE_CASTLE = 'at', 'at', 'Hyrule Castle', 'Hyrule Castle', 'Light Blue', None + OUTSIDE_GANONS_CASTLE = None, None, "outside Ganon's Castle", "Outside Ganon's Castle", 'Light Blue', None + INSIDE_GANONS_CASTLE = 'inside', None, "inside Ganon's Castle", "Inside Ganon's Castle", 'Light Blue', 'Ganons Castle' + GANONDORFS_CHAMBER = 'in', 'in', "Ganondorf's Chamber", "Ganondorf's Chamber", 'Light Blue', None + KOKIRI_FOREST = 'in', 'in', 'Kokiri Forest', "Kokiri Forest", 'Green', None + DEKU_TREE = 'inside', 'inside', 'the Deku Tree', "Deku Tree", 'Green', 'Deku Tree' + LOST_WOODS = 'in', 'in', 'the Lost Woods', "Lost Woods", 'Green', None + SACRED_FOREST_MEADOW = 'at', 'at', 'the Sacred Forest Meadow', "Sacred Forest Meadow", 'Green', None + FOREST_TEMPLE = 'in', 'in', 'the Forest Temple', "Forest Temple", 'Green', 'Forest Temple' + DEATH_MOUNTAIN_TRAIL = 'on', 'on', 'the Death Mountain Trail', "Death Mountain Trail", 'Red', None + DODONGOS_CAVERN = 'within', 'in', "Dodongo's Cavern", "Dodongo's Cavern", 'Red', 'Dodongos Cavern' + GORON_CITY = 'in', 'in', 'Goron City', "Goron City", 'Red', None + DEATH_MOUNTAIN_CRATER = 'in', 'in', 'the Death Mountain Crater', "Death Mountain Crater", 'Red', None + FIRE_TEMPLE = 'on', 'in', 'the Fire Temple', "Fire Temple", 'Red', 'Fire Temple' + ZORA_RIVER = 'at', 'at', "Zora's River", "Zora's River", 'Blue', None + ZORAS_DOMAIN = 'at', 'at', "Zora's Domain", "Zora's Domain", 'Blue', None + ZORAS_FOUNTAIN = 'at', 'at', "Zora's Fountain", "Zora's Fountain", 'Blue', None + JABU_JABUS_BELLY = 'in', 'inside', "Jabu Jabu's Belly", "Jabu Jabu's Belly", 'Blue', 'Jabu Jabus Belly' + ICE_CAVERN = 'inside', 'in' , 'the Ice Cavern', "Ice Cavern", 'Blue', 'Ice Cavern' + LAKE_HYLIA = 'at', 'at', 'Lake Hylia', "Lake Hylia", 'Blue', None + WATER_TEMPLE = 'under', 'in', 'the Water Temple', "Water Temple", 'Blue', 'Water Temple' + KAKARIKO_VILLAGE = 'in', 'in', 'Kakariko Village', "Kakariko Village", 'Pink', None + BOTTOM_OF_THE_WELL = 'within', 'at', 'the Bottom of the Well', "Bottom of the Well", 'Pink', 'Bottom of the Well' + GRAVEYARD = 'in', 'in', 'the Graveyard', "Graveyard", 'Pink', None + SHADOW_TEMPLE = 'within', 'in', 'the Shadow Temple', "Shadow Temple", 'Pink', 'Shadow Temple' + GERUDO_VALLEY = 'at', 'at', 'Gerudo Valley', "Gerudo Valley", 'Yellow', None + GERUDO_FORTRESS = 'at', 'at', "Gerudo's Fortress", "Gerudo's Fortress", 'Yellow', None + GERUDO_TRAINING_GROUND = 'within', 'on', 'the Gerudo Training Ground', "Gerudo Training Ground", 'Yellow', 'Gerudo Training Ground' + HAUNTED_WASTELAND = 'in', 'in', 'the Haunted Wasteland', "Haunted Wasteland", 'Yellow', None + DESERT_COLOSSUS = 'at', 'at', 'the Desert Colossus', "Desert Colossus", 'Yellow', None + SPIRIT_TEMPLE = 'inside', 'in', 'the Spirit Temple', "Spirit Temple", 'Yellow', 'Spirit Temple' + + # Performs a breadth first search to find the closest hint area from a given spot (region, location, or entrance). + # May fail to find a hint if the given spot is only accessible from the root and not from any other region with a hint area + @staticmethod + def at(spot, use_alt_hint=False): + if isinstance(spot, Region): + original_parent = spot + else: + original_parent = spot.parent_region + already_checked = [] + spot_queue = [spot] + + while spot_queue: + current_spot = spot_queue.pop(0) + already_checked.append(current_spot) + + if isinstance(current_spot, Region): + parent_region = current_spot + else: + parent_region = current_spot.parent_region + + if parent_region.hint and (original_parent.name == 'Root' or parent_region.name != 'Root'): + if use_alt_hint and parent_region.alt_hint: + return parent_region.alt_hint + return parent_region.hint + + spot_queue.extend(list(filter(lambda ent: ent not in already_checked, parent_region.entrances))) + + raise HintAreaNotFound('No hint area could be found for %s [World %d]' % (spot, spot.world.player)) + + @classmethod + def for_dungeon(cls, dungeon_name: str): + if '(' in dungeon_name and ')' in dungeon_name: + # A dungeon item name was passed in - get the name of the dungeon from it. + dungeon_name = dungeon_name[dungeon_name.index('(') + 1:dungeon_name.index(')')] + + if dungeon_name == "Thieves Hideout": + # Special case for Thieves' Hideout - change this if it gets its own hint area. + return HintArea.GERUDO_FORTRESS + + for hint_area in cls: + if hint_area.dungeon_name == dungeon_name: + return hint_area + return None + + def preposition(self, clearer_hints): + return self.value[1 if clearer_hints else 0] + + def __str__(self): + return self.value[2] + + # used for dungeon reward locations in the pause menu + @property + def short_name(self): + return self.value[3] + + # Hint areas are further grouped into colored sections of the map by association with the medallions. + # These colors are used to generate the text boxes for shuffled warp songs. + @property + def color(self): + return self.value[4] + + @property + def dungeon_name(self): + return self.value[5] + + @property + def is_dungeon(self): + return self.dungeon_name is not None + + def is_dungeon_item(self, item): + for dungeon in item.world.dungeons: + if dungeon.name == self.dungeon_name: + return dungeon.is_dungeon_item(item) + return False + + # Formats the hint text for this area with proper grammar. + # Dungeons are hinted differently depending on the clearer_hints setting. + def text(self, clearer_hints, preposition=False, world=None): + if self.is_dungeon: + text = getHint(self.dungeon_name, clearer_hints).text + else: + text = str(self) + prefix, suffix = text.replace('#', '').split(' ', 1) + if world is None: + if prefix == "Link's": + text = f"@'s {suffix}" + else: + replace_prefixes = ('a', 'an', 'the') + move_prefixes = ('outside', 'inside') + if prefix in replace_prefixes: + text = f"world {world}'s {suffix}" + elif prefix in move_prefixes: + text = f"{prefix} world {world}'s {suffix}" + elif prefix == "Link's": + text = f"player {world}'s {suffix}" + else: + text = f"world {world}'s {text}" + if '#' not in text: + text = f'#{text}#' + if preposition and self.preposition(clearer_hints) is not None: + text = f'{self.preposition(clearer_hints)} {text}' + return text + + # Peforms a breadth first search to find the closest hint area from a given spot (location or entrance) # May fail to find a hint if the given spot is only accessible from the root and not from any other region with a hint area # Returns the name of the location if the spot is not in OoT @@ -643,7 +793,7 @@ def buildWorldGossipHints(world, checkedLocations=None): # If Ganondorf hints Light Arrows and is reachable without them, add to checkedLocations to prevent extra hinting # Can only be forced with vanilla bridge or trials - if world.bridge != 'vanilla' and world.trials == 0 and world.misc_hints: + if world.bridge != 'vanilla' and world.trials == 0 and 'ganondorf' in world.misc_hints: try: light_arrow_location = world.multiworld.find_item("Light Arrows", world.player) checkedLocations[light_arrow_location.player].add(light_arrow_location.name) @@ -885,12 +1035,17 @@ def buildAltarHints(world, messages, include_rewards=True, include_wincons=True) # pulls text string from hintlist for reward after sending the location to hintlist. def buildBossString(reward, color, world): - for location in world.multiworld.get_filled_locations(world.player): - if location.item.name == reward: - item_icon = chr(location.item.special['item_id']) - location_text = getHint(location.name, world.clearer_hints).text - return str(GossipText("\x08\x13%s%s" % (item_icon, location_text), [color], prefix='')) + '\x04' - return '' + item_icon = chr(world.create_item(reward).special['item_id']) + if world.multiworld.state.has(reward, world.player): + if world.clearer_hints: + text = GossipText(f"\x08\x13{item_icon}One #@ already has#...", [color], prefix='') + else: + text = GossipText(f"\x08\x13{item_icon}One in #@'s pocket#...", [color], prefix='') + else: + location = world.hinted_dungeon_reward_locations[reward] + location_text = HintArea.at(location).text(world.clearer_hints, preposition=True) + text = GossipText(f"\x08\x13{item_icon}One {location_text}...", [color], prefix='') + return str(text) + '\x04' def buildBridgeReqsString(world): @@ -907,6 +1062,8 @@ def buildBridgeReqsString(world): item_req_string = str(world.bridge_rewards) + ' ' + item_req_string elif world.bridge == 'tokens': item_req_string = str(world.bridge_tokens) + ' ' + item_req_string + elif world.bridge == 'hearts': + item_req_string = str(world.bridge_hearts) + ' ' + item_req_string if '#' not in item_req_string: item_req_string = '#%s#' % item_req_string string += "The awakened ones will await for the Hero to collect %s." % item_req_string @@ -928,9 +1085,26 @@ def buildGanonBossKeyString(world): item_req_string = str(world.lacs_rewards) + ' ' + item_req_string elif world.lacs_condition == 'tokens': item_req_string = str(world.lacs_tokens) + ' ' + item_req_string + elif world.lacs_condition == 'hearts': + item_req_string = str(world.lacs_hearts) + ' ' + item_req_string if '#' not in item_req_string: item_req_string = '#%s#' % item_req_string bk_location_string = "provided by Zelda once %s are retrieved" % item_req_string + elif world.shuffle_ganon_bosskey in ['stones', 'medallions', 'dungeons', 'tokens', 'hearts']: + item_req_string = getHint('ganonBK_' + world.shuffle_ganon_bosskey, world.clearer_hints).text + if world.shuffle_ganon_bosskey == 'medallions': + item_req_string = str(world.ganon_bosskey_medallions) + ' ' + item_req_string + elif world.shuffle_ganon_bosskey == 'stones': + item_req_string = str(world.ganon_bosskey_stones) + ' ' + item_req_string + elif world.shuffle_ganon_bosskey == 'dungeons': + item_req_string = str(world.ganon_bosskey_rewards) + ' ' + item_req_string + elif world.shuffle_ganon_bosskey == 'tokens': + item_req_string = str(world.ganon_bosskey_tokens) + ' ' + item_req_string + elif world.shuffle_ganon_bosskey == 'hearts': + item_req_string = str(world.ganon_bosskey_hearts) + ' ' + item_req_string + if '#' not in item_req_string: + item_req_string = '#%s#' % item_req_string + bk_location_string = "automatically granted once %s are retrieved" % item_req_string else: bk_location_string = getHint('ganonBK_' + world.shuffle_ganon_bosskey, world.clearer_hints).text string += "And the \x05\x41evil one\x05\x40's key will be %s." % bk_location_string @@ -950,30 +1124,52 @@ def buildGanonText(world, messages): text = get_raw_text(ganonLines.pop().text) update_message_by_id(messages, 0x70CB, text) - # light arrow hint or validation chest item - if world.starting_items['Light Arrows'] > 0: - text = get_raw_text(getHint('Light Arrow Location', world.clearer_hints).text) - text += "\x05\x42your pocket\x05\x40" - else: - try: - find_light_arrows = world.multiworld.find_item('Light Arrows', world.player) - text = get_raw_text(getHint('Light Arrow Location', world.clearer_hints).text) - location = find_light_arrows - location_hint = get_hint_area(location) - if world.player != location.player: - text += "\x05\x42%s's\x05\x40 %s" % (world.multiworld.get_player_name(location.player), get_raw_text(location_hint)) - else: - location_hint = location_hint.replace('Ganon\'s Castle', 'my castle') - text += get_raw_text(location_hint) - except StopIteration: - text = get_raw_text(getHint('Validation Line', world.clearer_hints).text) - for location in world.multiworld.get_filled_locations(world.player): - if location.name == 'Ganons Tower Boss Key Chest': - text += get_raw_text(getHint(getItemGenericName(location.item), world.clearer_hints).text) - break - text += '!' - update_message_by_id(messages, 0x70CC, text) +# Modified from original. Uses optimized AP methods, no support for custom items. +def buildMiscItemHints(world, messages): + for hint_type, data in misc_item_hint_table.items(): + if hint_type in world.misc_hints: + item_locations = world.multiworld.find_item_locations(data['default_item'], world.player) + if data['local_only']: + item_locations = [loc for loc in item_locations if loc.player == world.player] + + if world.multiworld.state.has(data['default_item'], world.player) > 0: + text = data['default_item_text'].format(area='#your pocket#') + elif item_locations: + location = item_locations[0] + player_text = '' + if location.player != world.player: + player_text = world.multiworld.get_player_name(location.player) + "'s " + if location.game == 'Ocarina of Time': + area = HintArea.at(location, use_alt_hint=data['use_alt_hint']).text(world.clearer_hints, world=None) + else: + area = location.name + text = data['default_item_text'].format(area=(player_text + area)) + elif 'default_item_fallback' in data: + text = data['default_item_fallback'] + else: + text = getHint('Validation Line', world.clearer_hints).text + location = world.get_location('Ganons Tower Boss Key Chest') + text += f"#{getHint(getItemGenericName(location.item), world.clearer_hints).text}#" + for find, replace in data.get('replace', {}).items(): + text = text.replace(find, replace) + + update_message_by_id(messages, data['id'], str(GossipText(text, ['Green'], prefix=''))) + + +# Modified from original to use optimized AP methods +def buildMiscLocationHints(world, messages): + for hint_type, data in misc_location_hint_table.items(): + text = data['location_fallback'] + if hint_type in world.misc_hints: + location = world.get_location(data['item_location']) + item = location.item + item_text = getHint(getItemGenericName(item), world.clearer_hints).text + if item.player != world.player: + item_text += f' for {world.multiworld.get_player_name(item.player)}' + text = data['location_text'].format(item=item_text) + + update_message_by_id(messages, data['id'], str(GossipText(text, ['Green'], prefix='')), 0x23) def get_raw_text(string): diff --git a/worlds/oot/ItemPool.py b/worlds/oot/ItemPool.py index 524fa659289c..94e1011ddc63 100644 --- a/worlds/oot/ItemPool.py +++ b/worlds/oot/ItemPool.py @@ -1,13 +1,14 @@ from collections import namedtuple from itertools import chain from .Items import item_table +from .Location import DisableType from .LocationList import location_groups from decimal import Decimal, ROUND_HALF_UP -# Generates itempools and places fixed items based on settings. +# Generates item pools and places fixed items based on settings. -alwaysitems = ([ +plentiful_items = ([ 'Biggoron Sword', 'Boomerang', 'Lens of Truth', @@ -17,47 +18,6 @@ 'Zora Tunic', 'Hover Boots', 'Mirror Shield', - 'Stone of Agony', - 'Fire Arrows', - 'Ice Arrows', - 'Light Arrows', - 'Dins Fire', - 'Farores Wind', - 'Nayrus Love', - 'Rupee (1)'] - + ['Progressive Hookshot'] * 2 - + ['Deku Shield'] - + ['Hylian Shield'] - + ['Progressive Strength Upgrade'] * 3 - + ['Progressive Scale'] * 2 - + ['Recovery Heart'] * 6 - + ['Bow'] * 3 - + ['Slingshot'] * 3 - + ['Bomb Bag'] * 3 - + ['Bombs (5)'] * 2 - + ['Bombs (10)'] - + ['Bombs (20)'] - + ['Arrows (5)'] - + ['Arrows (10)'] * 5 - + ['Progressive Wallet'] * 2 - + ['Magic Meter'] * 2 - + ['Double Defense'] - + ['Deku Stick Capacity'] * 2 - + ['Deku Nut Capacity'] * 2 - + ['Piece of Heart (Treasure Chest Game)']) - - -easy_items = ([ - 'Biggoron Sword', - 'Kokiri Sword', - 'Boomerang', - 'Lens of Truth', - 'Megaton Hammer', - 'Iron Boots', - 'Goron Tunic', - 'Zora Tunic', - 'Hover Boots', - 'Mirror Shield', 'Fire Arrows', 'Light Arrows', 'Dins Fire', @@ -72,16 +32,114 @@ 'Slingshot', 'Bomb Bag', 'Double Defense'] + - ['Heart Container'] * 16 + - ['Piece of Heart'] * 3) + ['Heart Container'] * 8 +) + +# Ludicrous replaces all health upgrades with heart containers +# as done in plentiful. The item list is used separately to +# dynamically replace all junk with even levels of each item. +ludicrous_health = ['Heart Container'] * 8 + +# List of items that can be multiplied in ludicrous mode. +# Used to filter the pre-plando pool for candidates instead +# of appending directly, making this list settings-independent. +# Excludes Gold Skulltula Tokens, Triforce Pieces, and health +# upgrades as they are directly tied to win conditions and +# already have a large count relative to available locations +# in the game. +# +# Base items will always be candidates to replace junk items, +# even if the player starts with all "normal" copies of an item. +ludicrous_items_base = [ + 'Light Arrows', + 'Megaton Hammer', + 'Progressive Hookshot', + 'Progressive Strength Upgrade', + 'Dins Fire', + 'Hover Boots', + 'Mirror Shield', + 'Boomerang', + 'Iron Boots', + 'Fire Arrows', + 'Progressive Scale', + 'Progressive Wallet', + 'Magic Meter', + 'Bow', + 'Slingshot', + 'Bomb Bag', + 'Bombchus', + 'Lens of Truth', + 'Goron Tunic', + 'Zora Tunic', + 'Biggoron Sword', + 'Double Defense', + 'Farores Wind', + 'Nayrus Love', + 'Stone of Agony', + 'Ice Arrows', + 'Deku Stick Capacity', + 'Deku Nut Capacity' +] -normal_items = ( - ['Heart Container'] * 8 + - ['Piece of Heart'] * 35) +ludicrous_items_extended = [ + 'Zeldas Lullaby', + 'Eponas Song', + 'Suns Song', + 'Sarias Song', + 'Song of Time', + 'Song of Storms', + 'Minuet of Forest', + 'Prelude of Light', + 'Bolero of Fire', + 'Serenade of Water', + 'Nocturne of Shadow', + 'Requiem of Spirit', + 'Ocarina', + 'Kokiri Sword', + 'Boss Key (Ganons Castle)', + 'Boss Key (Forest Temple)', + 'Boss Key (Fire Temple)', + 'Boss Key (Water Temple)', + 'Boss Key (Shadow Temple)', + 'Boss Key (Spirit Temple)', + 'Gerudo Membership Card', + 'Small Key (Thieves Hideout)', + 'Small Key (Shadow Temple)', + 'Small Key (Ganons Castle)', + 'Small Key (Forest Temple)', + 'Small Key (Spirit Temple)', + 'Small Key (Fire Temple)', + 'Small Key (Water Temple)', + 'Small Key (Bottom of the Well)', + 'Small Key (Gerudo Training Ground)', + 'Small Key Ring (Thieves Hideout)', + 'Small Key Ring (Shadow Temple)', + 'Small Key Ring (Ganons Castle)', + 'Small Key Ring (Forest Temple)', + 'Small Key Ring (Spirit Temple)', + 'Small Key Ring (Fire Temple)', + 'Small Key Ring (Water Temple)', + 'Small Key Ring (Bottom of the Well)', + 'Small Key Ring (Gerudo Training Ground)', + 'Magic Bean Pack' +] +ludicrous_exclusions = [ + 'Triforce Piece', + 'Gold Skulltula Token', + 'Rutos Letter', + 'Heart Container', + 'Piece of Heart', + 'Piece of Heart (Treasure Chest Game)' +] item_difficulty_max = { - 'plentiful': {}, + 'ludicrous': { + 'Piece of Heart': 3, + }, + 'plentiful': { + 'Piece of Heart': 3, + }, 'balanced': {}, 'scarce': { 'Bombchus': 3, @@ -102,8 +160,8 @@ 'Bombchus (5)': 1, 'Bombchus (10)': 0, 'Bombchus (20)': 0, - 'Nayrus Love': 0, 'Magic Meter': 1, + 'Nayrus Love': 1, 'Double Defense': 0, 'Deku Stick Capacity': 0, 'Deku Nut Capacity': 0, @@ -115,197 +173,11 @@ }, } -DT_vanilla = ( - ['Recovery Heart'] * 2) - -DT_MQ = ( - ['Deku Shield'] * 2 + - ['Rupees (50)']) - -DC_vanilla = ( - ['Rupees (20)']) - -DC_MQ = ( - ['Hylian Shield'] + - ['Rupees (5)']) - -JB_MQ = ( - ['Deku Nuts (5)'] * 4 + - ['Recovery Heart'] + - ['Deku Shield'] + - ['Deku Stick (1)']) - -FoT_vanilla = ( - ['Recovery Heart'] + - ['Arrows (10)'] + - ['Arrows (30)']) - -FoT_MQ = ( - ['Arrows (5)']) - -FiT_vanilla = ( - ['Rupees (200)']) - -FiT_MQ = ( - ['Bombs (20)'] + - ['Hylian Shield']) - -SpT_vanilla = ( - ['Deku Shield'] * 2 + - ['Recovery Heart'] + - ['Bombs (20)']) - -SpT_MQ = ( - ['Rupees (50)'] * 2 + - ['Arrows (30)']) - -ShT_vanilla = ( - ['Arrows (30)']) - -ShT_MQ = ( - ['Arrows (5)'] * 2 + - ['Rupees (20)']) - -BW_vanilla = ( - ['Recovery Heart'] + - ['Bombs (10)'] + - ['Rupees (200)'] + - ['Deku Nuts (5)'] + - ['Deku Nuts (10)'] + - ['Deku Shield'] + - ['Hylian Shield']) - -GTG_vanilla = ( - ['Arrows (30)'] * 3 + - ['Rupees (200)']) - -GTG_MQ = ( - ['Rupee (Treasure Chest Game)'] * 2 + - ['Arrows (10)'] + - ['Rupee (1)'] + - ['Rupees (50)']) - -GC_vanilla = ( - ['Rupees (5)'] * 3 + - ['Arrows (30)']) - -GC_MQ = ( - ['Arrows (10)'] * 2 + - ['Bombs (5)'] + - ['Rupees (20)'] + - ['Recovery Heart']) - - -normal_bottles = [ - 'Bottle', - 'Bottle with Milk', - 'Bottle with Red Potion', - 'Bottle with Green Potion', - 'Bottle with Blue Potion', - 'Bottle with Fairy', - 'Bottle with Fish', - 'Bottle with Bugs', - 'Bottle with Poe', - 'Bottle with Big Poe', - 'Bottle with Blue Fire'] - -bottle_count = 4 - - -dungeon_rewards = [ - 'Kokiri Emerald', - 'Goron Ruby', - 'Zora Sapphire', - 'Forest Medallion', - 'Fire Medallion', - 'Water Medallion', - 'Shadow Medallion', - 'Spirit Medallion', - 'Light Medallion' -] - - -normal_rupees = ( - ['Rupees (5)'] * 13 + - ['Rupees (20)'] * 5 + - ['Rupees (50)'] * 7 + - ['Rupees (200)'] * 3) - shopsanity_rupees = ( - ['Rupees (5)'] * 2 + - ['Rupees (20)'] * 10 + - ['Rupees (50)'] * 10 + - ['Rupees (200)'] * 5 + - ['Progressive Wallet']) - - -vanilla_shop_items = { - 'KF Shop Item 1': 'Buy Deku Shield', - 'KF Shop Item 2': 'Buy Deku Nut (5)', - 'KF Shop Item 3': 'Buy Deku Nut (10)', - 'KF Shop Item 4': 'Buy Deku Stick (1)', - 'KF Shop Item 5': 'Buy Deku Seeds (30)', - 'KF Shop Item 6': 'Buy Arrows (10)', - 'KF Shop Item 7': 'Buy Arrows (30)', - 'KF Shop Item 8': 'Buy Heart', - 'Kak Potion Shop Item 1': 'Buy Deku Nut (5)', - 'Kak Potion Shop Item 2': 'Buy Fish', - 'Kak Potion Shop Item 3': 'Buy Red Potion [30]', - 'Kak Potion Shop Item 4': 'Buy Green Potion', - 'Kak Potion Shop Item 5': 'Buy Blue Fire', - 'Kak Potion Shop Item 6': 'Buy Bottle Bug', - 'Kak Potion Shop Item 7': 'Buy Poe', - 'Kak Potion Shop Item 8': 'Buy Fairy\'s Spirit', - 'Market Bombchu Shop Item 1': 'Buy Bombchu (5)', - 'Market Bombchu Shop Item 2': 'Buy Bombchu (10)', - 'Market Bombchu Shop Item 3': 'Buy Bombchu (10)', - 'Market Bombchu Shop Item 4': 'Buy Bombchu (10)', - 'Market Bombchu Shop Item 5': 'Buy Bombchu (20)', - 'Market Bombchu Shop Item 6': 'Buy Bombchu (20)', - 'Market Bombchu Shop Item 7': 'Buy Bombchu (20)', - 'Market Bombchu Shop Item 8': 'Buy Bombchu (20)', - 'Market Potion Shop Item 1': 'Buy Green Potion', - 'Market Potion Shop Item 2': 'Buy Blue Fire', - 'Market Potion Shop Item 3': 'Buy Red Potion [30]', - 'Market Potion Shop Item 4': 'Buy Fairy\'s Spirit', - 'Market Potion Shop Item 5': 'Buy Deku Nut (5)', - 'Market Potion Shop Item 6': 'Buy Bottle Bug', - 'Market Potion Shop Item 7': 'Buy Poe', - 'Market Potion Shop Item 8': 'Buy Fish', - 'Market Bazaar Item 1': 'Buy Hylian Shield', - 'Market Bazaar Item 2': 'Buy Bombs (5) [35]', - 'Market Bazaar Item 3': 'Buy Deku Nut (5)', - 'Market Bazaar Item 4': 'Buy Heart', - 'Market Bazaar Item 5': 'Buy Arrows (10)', - 'Market Bazaar Item 6': 'Buy Arrows (50)', - 'Market Bazaar Item 7': 'Buy Deku Stick (1)', - 'Market Bazaar Item 8': 'Buy Arrows (30)', - 'Kak Bazaar Item 1': 'Buy Hylian Shield', - 'Kak Bazaar Item 2': 'Buy Bombs (5) [35]', - 'Kak Bazaar Item 3': 'Buy Deku Nut (5)', - 'Kak Bazaar Item 4': 'Buy Heart', - 'Kak Bazaar Item 5': 'Buy Arrows (10)', - 'Kak Bazaar Item 6': 'Buy Arrows (50)', - 'Kak Bazaar Item 7': 'Buy Deku Stick (1)', - 'Kak Bazaar Item 8': 'Buy Arrows (30)', - 'ZD Shop Item 1': 'Buy Zora Tunic', - 'ZD Shop Item 2': 'Buy Arrows (10)', - 'ZD Shop Item 3': 'Buy Heart', - 'ZD Shop Item 4': 'Buy Arrows (30)', - 'ZD Shop Item 5': 'Buy Deku Nut (5)', - 'ZD Shop Item 6': 'Buy Arrows (50)', - 'ZD Shop Item 7': 'Buy Fish', - 'ZD Shop Item 8': 'Buy Red Potion [50]', - 'GC Shop Item 1': 'Buy Bombs (5) [25]', - 'GC Shop Item 2': 'Buy Bombs (10)', - 'GC Shop Item 3': 'Buy Bombs (20)', - 'GC Shop Item 4': 'Buy Bombs (30)', - 'GC Shop Item 5': 'Buy Goron Tunic', - 'GC Shop Item 6': 'Buy Heart', - 'GC Shop Item 7': 'Buy Red Potion [40]', - 'GC Shop Item 8': 'Buy Heart', -} - + ['Rupees (20)'] * 5 + + ['Rupees (50)'] * 3 + + ['Rupees (200)'] * 2 +) min_shop_items = ( ['Buy Deku Shield'] + @@ -317,384 +189,102 @@ ['Buy Deku Seeds (30)'] + ['Buy Arrows (10)'] * 2 + ['Buy Arrows (30)'] + ['Buy Arrows (50)'] + ['Buy Bombchu (5)'] + ['Buy Bombchu (10)'] * 2 + ['Buy Bombchu (20)'] + - ['Buy Bombs (5) [25]'] + ['Buy Bombs (5) [35]'] + ['Buy Bombs (10)'] + ['Buy Bombs (20)'] + + ['Buy Bombs (5) for 25 Rupees'] + ['Buy Bombs (5) for 35 Rupees'] + ['Buy Bombs (10)'] + ['Buy Bombs (20)'] + ['Buy Green Potion'] + - ['Buy Red Potion [30]'] + + ['Buy Red Potion for 30 Rupees'] + ['Buy Blue Fire'] + - ['Buy Fairy\'s Spirit'] + + ["Buy Fairy's Spirit"] + ['Buy Bottle Bug'] + - ['Buy Fish']) - - -vanilla_deku_scrubs = { - 'ZR Deku Scrub Grotto Rear': 'Buy Red Potion [30]', - 'ZR Deku Scrub Grotto Front': 'Buy Green Potion', - 'SFM Deku Scrub Grotto Rear': 'Buy Red Potion [30]', - 'SFM Deku Scrub Grotto Front': 'Buy Green Potion', - 'LH Deku Scrub Grotto Left': 'Buy Deku Nut (5)', - 'LH Deku Scrub Grotto Right': 'Buy Bombs (5) [35]', - 'LH Deku Scrub Grotto Center': 'Buy Arrows (30)', - 'GV Deku Scrub Grotto Rear': 'Buy Red Potion [30]', - 'GV Deku Scrub Grotto Front': 'Buy Green Potion', - 'LW Deku Scrub Near Deku Theater Right': 'Buy Deku Nut (5)', - 'LW Deku Scrub Near Deku Theater Left': 'Buy Deku Stick (1)', - 'LW Deku Scrub Grotto Rear': 'Buy Arrows (30)', - 'Colossus Deku Scrub Grotto Rear': 'Buy Red Potion [30]', - 'Colossus Deku Scrub Grotto Front': 'Buy Green Potion', - 'DMC Deku Scrub': 'Buy Bombs (5) [35]', - 'DMC Deku Scrub Grotto Left': 'Buy Deku Nut (5)', - 'DMC Deku Scrub Grotto Right': 'Buy Bombs (5) [35]', - 'DMC Deku Scrub Grotto Center': 'Buy Arrows (30)', - 'GC Deku Scrub Grotto Left': 'Buy Deku Nut (5)', - 'GC Deku Scrub Grotto Right': 'Buy Bombs (5) [35]', - 'GC Deku Scrub Grotto Center': 'Buy Arrows (30)', - 'LLR Deku Scrub Grotto Left': 'Buy Deku Nut (5)', - 'LLR Deku Scrub Grotto Right': 'Buy Bombs (5) [35]', - 'LLR Deku Scrub Grotto Center': 'Buy Arrows (30)', -} - - -deku_scrubs_items = ( - ['Deku Nuts (5)'] * 5 + - ['Deku Stick (1)'] + - ['Bombs (5)'] * 5 + - ['Recovery Heart'] * 4 + - ['Rupees (5)'] * 4) # ['Green Potion'] - - -songlist = [ - 'Zeldas Lullaby', - 'Eponas Song', - 'Suns Song', - 'Sarias Song', - 'Song of Time', - 'Song of Storms', - 'Minuet of Forest', - 'Prelude of Light', - 'Bolero of Fire', - 'Serenade of Water', - 'Nocturne of Shadow', - 'Requiem of Spirit'] - - -skulltula_locations = ([ - 'KF GS Know It All House', - 'KF GS Bean Patch', - 'KF GS House of Twins', - 'LW GS Bean Patch Near Bridge', - 'LW GS Bean Patch Near Theater', - 'LW GS Above Theater', - 'SFM GS', - 'HF GS Near Kak Grotto', - 'HF GS Cow Grotto', - 'Market GS Guard House', - 'HC GS Tree', - 'HC GS Storms Grotto', - 'OGC GS', - 'LLR GS Tree', - 'LLR GS Rain Shed', - 'LLR GS House Window', - 'LLR GS Back Wall', - 'Kak GS House Under Construction', - 'Kak GS Skulltula House', - 'Kak GS Guards House', - 'Kak GS Tree', - 'Kak GS Watchtower', - 'Kak GS Above Impas House', - 'Graveyard GS Wall', - 'Graveyard GS Bean Patch', - 'DMT GS Bean Patch', - 'DMT GS Near Kak', - 'DMT GS Falling Rocks Path', - 'DMT GS Above Dodongos Cavern', - 'GC GS Boulder Maze', - 'GC GS Center Platform', - 'DMC GS Crate', - 'DMC GS Bean Patch', - 'ZR GS Ladder', - 'ZR GS Tree', - 'ZR GS Near Raised Grottos', - 'ZR GS Above Bridge', - 'ZD GS Frozen Waterfall', - 'ZF GS Tree', - 'ZF GS Above the Log', - 'ZF GS Hidden Cave', - 'LH GS Bean Patch', - 'LH GS Lab Wall', - 'LH GS Small Island', - 'LH GS Tree', - 'LH GS Lab Crate', - 'GV GS Small Bridge', - 'GV GS Bean Patch', - 'GV GS Behind Tent', - 'GV GS Pillar', - 'GF GS Archery Range', - 'GF GS Top Floor', - 'Wasteland GS', - 'Colossus GS Bean Patch', - 'Colossus GS Tree', - 'Colossus GS Hill']) - - -tradeitems = ( - 'Pocket Egg', - 'Pocket Cucco', - 'Cojiro', - 'Odd Mushroom', - 'Poachers Saw', - 'Broken Sword', - 'Prescription', - 'Eyeball Frog', - 'Eyedrops', - 'Claim Check') - -tradeitemoptions = ( - 'pocket_egg', - 'pocket_cucco', - 'cojiro', - 'odd_mushroom', - 'poachers_saw', - 'broken_sword', - 'prescription', - 'eyeball_frog', - 'eyedrops', - 'claim_check') - - -fixedlocations = { - 'Ganon': 'Triforce', - 'Pierre': 'Scarecrow Song', - 'Deliver Rutos Letter': 'Deliver Letter', - 'Master Sword Pedestal': 'Time Travel', - 'Market Bombchu Bowling Bombchus': 'Bombchu Drop', -} - -droplocations = { - 'Deku Baba Sticks': 'Deku Stick Drop', - 'Deku Baba Nuts': 'Deku Nut Drop', - 'Stick Pot': 'Deku Stick Drop', - 'Nut Pot': 'Deku Nut Drop', - 'Nut Crate': 'Deku Nut Drop', - 'Blue Fire': 'Blue Fire', - 'Lone Fish': 'Fish', - 'Fish Group': 'Fish', - 'Bug Rock': 'Bugs', - 'Bug Shrub': 'Bugs', - 'Wandering Bugs': 'Bugs', - 'Fairy Pot': 'Fairy', - 'Free Fairies': 'Fairy', - 'Wall Fairy': 'Fairy', - 'Butterfly Fairy': 'Fairy', - 'Gossip Stone Fairy': 'Fairy', - 'Bean Plant Fairy': 'Fairy', - 'Fairy Pond': 'Fairy', - 'Big Poe Kill': 'Big Poe', -} - -vanillaBK = { - 'Fire Temple Boss Key Chest': 'Boss Key (Fire Temple)', - 'Shadow Temple Boss Key Chest': 'Boss Key (Shadow Temple)', - 'Spirit Temple Boss Key Chest': 'Boss Key (Spirit Temple)', - 'Water Temple Boss Key Chest': 'Boss Key (Water Temple)', - 'Forest Temple Boss Key Chest': 'Boss Key (Forest Temple)', - - 'Fire Temple MQ Boss Key Chest': 'Boss Key (Fire Temple)', - 'Shadow Temple MQ Boss Key Chest': 'Boss Key (Shadow Temple)', - 'Spirit Temple MQ Boss Key Chest': 'Boss Key (Spirit Temple)', - 'Water Temple MQ Boss Key Chest': 'Boss Key (Water Temple)', - 'Forest Temple MQ Boss Key Chest': 'Boss Key (Forest Temple)', -} - -vanillaMC = { - 'Bottom of the Well Compass Chest': 'Compass (Bottom of the Well)', - 'Deku Tree Compass Chest': 'Compass (Deku Tree)', - 'Dodongos Cavern Compass Chest': 'Compass (Dodongos Cavern)', - 'Fire Temple Compass Chest': 'Compass (Fire Temple)', - 'Forest Temple Blue Poe Chest': 'Compass (Forest Temple)', - 'Ice Cavern Compass Chest': 'Compass (Ice Cavern)', - 'Jabu Jabus Belly Compass Chest': 'Compass (Jabu Jabus Belly)', - 'Shadow Temple Compass Chest': 'Compass (Shadow Temple)', - 'Spirit Temple Compass Chest': 'Compass (Spirit Temple)', - 'Water Temple Compass Chest': 'Compass (Water Temple)', - - 'Bottom of the Well Map Chest': 'Map (Bottom of the Well)', - 'Deku Tree Map Chest': 'Map (Deku Tree)', - 'Dodongos Cavern Map Chest': 'Map (Dodongos Cavern)', - 'Fire Temple Map Chest': 'Map (Fire Temple)', - 'Forest Temple Map Chest': 'Map (Forest Temple)', - 'Ice Cavern Map Chest': 'Map (Ice Cavern)', - 'Jabu Jabus Belly Map Chest': 'Map (Jabu Jabus Belly)', - 'Shadow Temple Map Chest': 'Map (Shadow Temple)', - 'Spirit Temple Map Chest': 'Map (Spirit Temple)', - 'Water Temple Map Chest': 'Map (Water Temple)', - - 'Bottom of the Well MQ Compass Chest': 'Compass (Bottom of the Well)', - 'Deku Tree MQ Compass Chest': 'Compass (Deku Tree)', - 'Dodongos Cavern MQ Compass Chest': 'Compass (Dodongos Cavern)', - 'Fire Temple MQ Compass Chest': 'Compass (Fire Temple)', - 'Forest Temple MQ Compass Chest': 'Compass (Forest Temple)', - 'Ice Cavern MQ Compass Chest': 'Compass (Ice Cavern)', - 'Jabu Jabus Belly MQ Compass Chest': 'Compass (Jabu Jabus Belly)', - 'Shadow Temple MQ Compass Chest': 'Compass (Shadow Temple)', - 'Spirit Temple MQ Compass Chest': 'Compass (Spirit Temple)', - 'Water Temple MQ Compass Chest': 'Compass (Water Temple)', - - 'Bottom of the Well MQ Map Chest': 'Map (Bottom of the Well)', - 'Deku Tree MQ Map Chest': 'Map (Deku Tree)', - 'Dodongos Cavern MQ Map Chest': 'Map (Dodongos Cavern)', - 'Fire Temple MQ Map Chest': 'Map (Fire Temple)', - 'Forest Temple MQ Map Chest': 'Map (Forest Temple)', - 'Ice Cavern MQ Map Chest': 'Map (Ice Cavern)', - 'Jabu Jabus Belly MQ Map Chest': 'Map (Jabu Jabus Belly)', - 'Shadow Temple MQ Map Chest': 'Map (Shadow Temple)', - 'Spirit Temple MQ Map Chest': 'Map (Spirit Temple)', - 'Water Temple MQ Map Chest': 'Map (Water Temple)', -} - -vanillaSK = { - 'Bottom of the Well Front Left Fake Wall Chest': 'Small Key (Bottom of the Well)', - 'Bottom of the Well Right Bottom Fake Wall Chest': 'Small Key (Bottom of the Well)', - 'Bottom of the Well Freestanding Key': 'Small Key (Bottom of the Well)', - 'Fire Temple Big Lava Room Blocked Door Chest': 'Small Key (Fire Temple)', - 'Fire Temple Big Lava Room Lower Open Door Chest': 'Small Key (Fire Temple)', - 'Fire Temple Boulder Maze Shortcut Chest': 'Small Key (Fire Temple)', - 'Fire Temple Boulder Maze Lower Chest': 'Small Key (Fire Temple)', - 'Fire Temple Boulder Maze Side Room Chest': 'Small Key (Fire Temple)', - 'Fire Temple Boulder Maze Upper Chest': 'Small Key (Fire Temple)', - 'Fire Temple Near Boss Chest': 'Small Key (Fire Temple)', - 'Fire Temple Highest Goron Chest': 'Small Key (Fire Temple)', - 'Forest Temple First Stalfos Chest': 'Small Key (Forest Temple)', - 'Forest Temple First Room Chest': 'Small Key (Forest Temple)', - 'Forest Temple Floormaster Chest': 'Small Key (Forest Temple)', - 'Forest Temple Red Poe Chest': 'Small Key (Forest Temple)', - 'Forest Temple Well Chest': 'Small Key (Forest Temple)', - 'Ganons Castle Light Trial Invisible Enemies Chest': 'Small Key (Ganons Castle)', - 'Ganons Castle Light Trial Lullaby Chest': 'Small Key (Ganons Castle)', - 'Gerudo Training Ground Beamos Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Eye Statue Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Hammer Room Switch Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Heavy Block Third Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Hidden Ceiling Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Near Scarecrow Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Stalfos Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground Freestanding Key': 'Small Key (Gerudo Training Ground)', - 'Shadow Temple After Wind Hidden Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple Early Silver Rupee Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple Falling Spikes Switch Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple Invisible Floormaster Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple Freestanding Key': 'Small Key (Shadow Temple)', - 'Spirit Temple Child Early Torches Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple Early Adult Right Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple Near Four Armos Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple Statue Room Hand Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple Sun Block Room Chest': 'Small Key (Spirit Temple)', - 'Water Temple Central Bow Target Chest': 'Small Key (Water Temple)', - 'Water Temple Central Pillar Chest': 'Small Key (Water Temple)', - 'Water Temple Cracked Wall Chest': 'Small Key (Water Temple)', - 'Water Temple Dragon Chest': 'Small Key (Water Temple)', - 'Water Temple River Chest': 'Small Key (Water Temple)', - 'Water Temple Torches Chest': 'Small Key (Water Temple)', - - 'Bottom of the Well MQ Dead Hand Freestanding Key': 'Small Key (Bottom of the Well)', - 'Bottom of the Well MQ East Inner Room Freestanding Key': 'Small Key (Bottom of the Well)', - 'Fire Temple MQ Big Lava Room Blocked Door Chest': 'Small Key (Fire Temple)', - 'Fire Temple MQ Near Boss Chest': 'Small Key (Fire Temple)', - 'Fire Temple MQ Lizalfos Maze Side Room Chest': 'Small Key (Fire Temple)', - 'Fire Temple MQ Chest On Fire': 'Small Key (Fire Temple)', - 'Fire Temple MQ Freestanding Key': 'Small Key (Fire Temple)', - 'Forest Temple MQ Wolfos Chest': 'Small Key (Forest Temple)', - 'Forest Temple MQ First Room Chest': 'Small Key (Forest Temple)', - 'Forest Temple MQ Raised Island Courtyard Lower Chest': 'Small Key (Forest Temple)', - 'Forest Temple MQ Raised Island Courtyard Upper Chest': 'Small Key (Forest Temple)', - 'Forest Temple MQ Redead Chest': 'Small Key (Forest Temple)', - 'Forest Temple MQ Well Chest': 'Small Key (Forest Temple)', - 'Ganons Castle MQ Shadow Trial Eye Switch Chest': 'Small Key (Ganons Castle)', - 'Ganons Castle MQ Spirit Trial Sun Back Left Chest': 'Small Key (Ganons Castle)', - 'Ganons Castle MQ Forest Trial Freestanding Key': 'Small Key (Ganons Castle)', - 'Gerudo Training Ground MQ Dinolfos Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground MQ Flame Circle Chest': 'Small Key (Gerudo Training Ground)', - 'Gerudo Training Ground MQ Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)', - 'Shadow Temple MQ Falling Spikes Switch Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple MQ Invisible Blades Invisible Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple MQ Early Gibdos Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple MQ Near Ship Invisible Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple MQ Wind Hint Chest': 'Small Key (Shadow Temple)', - 'Shadow Temple MQ Freestanding Key': 'Small Key (Shadow Temple)', - 'Spirit Temple MQ Child Hammer Switch Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Child Climb South Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Map Room Enemy Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Entrance Back Left Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Entrance Front Right Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Mirror Puzzle Invisible Chest': 'Small Key (Spirit Temple)', - 'Spirit Temple MQ Silver Block Hallway Chest': 'Small Key (Spirit Temple)', - 'Water Temple MQ Central Pillar Chest': 'Small Key (Water Temple)', - 'Water Temple MQ Freestanding Key': 'Small Key (Water Temple)', + ['Buy Fish'] +) + +deku_scrubs_items = { + 'Buy Deku Shield': 'Deku Shield', + 'Buy Deku Nut (5)': 'Deku Nuts (5)', + 'Buy Deku Stick (1)': 'Deku Stick (1)', + 'Buy Bombs (5) for 35 Rupees': 'Bombs (5)', + 'Buy Red Potion for 30 Rupees': 'Recovery Heart', + 'Buy Green Potion': 'Rupees (5)', + 'Buy Arrows (30)': [('Arrows (30)', 3), ('Deku Seeds (30)', 1)], + 'Buy Deku Seeds (30)': [('Arrows (30)', 3), ('Deku Seeds (30)', 1)], } -junk_pool_base = [ - ('Bombs (5)', 8), - ('Bombs (10)', 2), - ('Arrows (5)', 8), - ('Arrows (10)', 2), - ('Deku Stick (1)', 5), - ('Deku Nuts (5)', 5), - ('Deku Seeds (30)', 5), - ('Rupees (5)', 10), - ('Rupees (20)', 4), - ('Rupees (50)', 1), +trade_items = ( + "Pocket Egg", + "Pocket Cucco", + "Cojiro", + "Odd Mushroom", + #"Odd Potion", + "Poachers Saw", + "Broken Sword", + "Prescription", + "Eyeball Frog", + "Eyedrops", + "Claim Check", +) + +def get_spec(tup, key, default): + special = tup[3] + if special is None: + return default + return special.get(key, default) + +normal_bottles = [k for k, v in item_table.items() if get_spec(v, 'bottle', False) and k not in {'Deliver Letter', 'Sell Big Poe'}] +normal_bottles.append('Bottle with Big Poe') +song_list = [k for k, v in item_table.items() if v[0] == 'Song'] +junk_pool_base = [(k, v[3]['junk']) for k, v in item_table.items() if get_spec(v, 'junk', -1) > 0] +remove_junk_items = [k for k, v in item_table.items() if get_spec(v, 'junk', -1) >= 0] + +remove_junk_ludicrous_items = [ + 'Ice Arrows', + 'Deku Nut Capacity', + 'Deku Stick Capacity', + 'Double Defense', + 'Biggoron Sword' ] +# a useless placeholder item placed at some skipped and inaccessible locations +# (e.g. HC Malon Egg with Skip Child Zelda, or the carpenters with Open Gerudo Fortress) +IGNORE_LOCATION = 'Recovery Heart' + pending_junk_pool = [] junk_pool = [] - -remove_junk_items = [ - 'Bombs (5)', - 'Deku Nuts (5)', - 'Deku Stick (1)', - 'Recovery Heart', - 'Arrows (5)', - 'Arrows (10)', - 'Arrows (30)', - 'Rupees (5)', - 'Rupees (20)', - 'Rupees (50)', - 'Rupees (200)', - 'Deku Nuts (10)', - 'Bombs (10)', - 'Bombs (20)', - 'Deku Seeds (30)', - 'Ice Trap', -] -remove_junk_set = set(remove_junk_items) - -exclude_from_major = [ +exclude_from_major = [ 'Deliver Letter', 'Sell Big Poe', 'Magic Bean', + 'Buy Magic Bean', 'Zeldas Letter', 'Bombchus (5)', 'Bombchus (10)', 'Bombchus (20)', 'Odd Potion', - 'Triforce Piece' + 'Triforce Piece', + 'Heart Container', + 'Piece of Heart', + 'Piece of Heart (Treasure Chest Game)', ] item_groups = { 'Junk': remove_junk_items, 'JunkSong': ('Prelude of Light', 'Serenade of Water'), - 'AdultTrade': tradeitems, + 'AdultTrade': trade_items, 'Bottle': normal_bottles, 'Spell': ('Dins Fire', 'Farores Wind', 'Nayrus Love'), 'Shield': ('Deku Shield', 'Hylian Shield'), - 'Song': songlist, - 'NonWarpSong': songlist[0:6], - 'WarpSong': songlist[6:], - 'HealthUpgrade': ('Heart Container', 'Piece of Heart'), - 'ProgressItem': [name for (name, data) in item_table.items() if data[0] == 'Item' and data[1]], - 'MajorItem': [name for (name, data) in item_table.items() if (data[0] == 'Item' or data[0] == 'Song') and data[1] and name not in exclude_from_major], - 'DungeonReward': dungeon_rewards, + 'Song': song_list, + 'NonWarpSong': song_list[6:], + 'WarpSong': song_list[0:6], + 'HealthUpgrade': ('Heart Container', 'Piece of Heart', 'Piece of Heart (Treasure Chest Game)'), + 'ProgressItem': sorted([name for name, item in item_table.items() if item[0] == 'Item' and item[1]]), + 'MajorItem': sorted([name for name, item in item_table.items() if item[0] in ['Item', 'Song'] and item[1] and name not in exclude_from_major]), + 'DungeonReward': [name for name in sorted([n for n, i in item_table.items() if i[0] == 'DungeonReward'], + key=lambda x: item_table[x][3]['item_id'])], + 'Map': sorted([name for name, item in item_table.items() if item[0] == 'Map']), + 'Compass': sorted([name for name, item in item_table.items() if item[0] == 'Compass']), + 'BossKey': sorted([name for name, item in item_table.items() if item[0] == 'BossKey']), + 'SmallKey': sorted([name for name, item in item_table.items() if item[0] == 'SmallKey']), 'ForestFireWater': ('Forest Medallion', 'Fire Medallion', 'Water Medallion'), 'FireWater': ('Fire Medallion', 'Water Medallion'), @@ -755,636 +345,395 @@ def generate_itempool(ootworld): junk_pool = get_junk_pool(ootworld) - fixed_locations = filter(lambda loc: loc.name in fixedlocations, ootworld.get_locations()) - for location in fixed_locations: - item = fixedlocations[location.name] - location.place_locked_item(ootworld.create_item(item)) - - drop_locations = filter(lambda loc: loc.type == 'Drop', ootworld.get_locations()) - for drop_location in drop_locations: - item = droplocations[drop_location.name] - drop_location.place_locked_item(ootworld.create_item(item)) - # set up item pool - (pool, placed_items, skip_in_spoiler_locations) = get_pool_core(ootworld) + (pool, placed_items) = get_pool_core(ootworld) ootworld.itempool = [ootworld.create_item(item) for item in pool] for (location_name, item) in placed_items.items(): location = world.get_location(location_name, player) location.place_locked_item(ootworld.create_item(item)) - if location_name in skip_in_spoiler_locations: - location.show_in_spoiler = False - - - -# def try_collect_heart_container(world, pool): -# if 'Heart Container' in pool: -# pool.remove('Heart Container') -# pool.extend(get_junk_item()) -# world.state.collect(ItemFactory('Heart Container')) -# return True -# return False - - -# def try_collect_pieces_of_heart(world, pool): -# n = pool.count('Piece of Heart') + pool.count('Piece of Heart (Treasure Chest Game)') -# if n >= 4: -# for i in range(4): -# if 'Piece of Heart' in pool: -# pool.remove('Piece of Heart') -# world.state.collect(ItemFactory('Piece of Heart')) -# else: -# pool.remove('Piece of Heart (Treasure Chest Game)') -# world.state.collect(ItemFactory('Piece of Heart (Treasure Chest Game)')) -# pool.extend(get_junk_item()) -# return True -# return False - - -# def collect_pieces_of_heart(world, pool): -# success = try_collect_pieces_of_heart(world, pool) -# if not success: -# try_collect_heart_container(world, pool) - - -# def collect_heart_container(world, pool): -# success = try_collect_heart_container(world, pool) -# if not success: -# try_collect_pieces_of_heart(world, pool) def get_pool_core(world): global random pool = [] - placed_items = { - 'HC Zeldas Letter': 'Zeldas Letter', - } - skip_in_spoiler_locations = [] - - if world.shuffle_kokiri_sword: - pool.append('Kokiri Sword') - else: - placed_items['KF Kokiri Sword Chest'] = 'Kokiri Sword' - + placed_items = {} + remain_shop_items = [] ruto_bottles = 1 + if world.zora_fountain == 'open': ruto_bottles = 0 - elif world.item_pool_value == 'plentiful': - ruto_bottles += 1 - - if world.skip_child_zelda: - placed_items['HC Malon Egg'] = 'Recovery Heart' - skip_in_spoiler_locations.append('HC Malon Egg') - elif world.shuffle_weird_egg: - pool.append('Weird Egg') - else: - placed_items['HC Malon Egg'] = 'Weird Egg' - if world.shuffle_ocarinas: - pool.extend(['Ocarina'] * 2) - if world.item_pool_value == 'plentiful': - pending_junk_pool.append('Ocarina') - else: - placed_items['LW Gift from Saria'] = 'Ocarina' - placed_items['HF Ocarina of Time Item'] = 'Ocarina' + if world.shopsanity not in ['off', '0']: + pending_junk_pool.append('Progressive Wallet') - if world.shuffle_cows: - pool.extend(get_junk_item(10 if world.dungeon_mq['Jabu Jabus Belly'] else 9)) - else: - cow_locations = ['LLR Stables Left Cow', 'LLR Stables Right Cow', 'LLR Tower Left Cow', 'LLR Tower Right Cow', - 'KF Links House Cow', 'Kak Impas House Cow', 'GV Cow', 'DMT Cow Grotto Cow', 'HF Cow Grotto Cow'] - if world.dungeon_mq['Jabu Jabus Belly']: - cow_locations.append('Jabu Jabus Belly MQ Cow') - for loc in cow_locations: - placed_items[loc] = 'Milk' - skip_in_spoiler_locations.append(loc) - - if world.shuffle_beans: - pool.append('Magic Bean Pack') - if world.item_pool_value == 'plentiful': + if world.item_pool_value == 'plentiful': + pending_junk_pool.extend(plentiful_items) + if world.zora_fountain != 'open': + ruto_bottles += 1 + if world.shuffle_kokiri_sword: + pending_junk_pool.append('Kokiri Sword') + if world.shuffle_ocarinas: + pending_junk_pool.append('Ocarina') + if world.shuffle_beans and world.multiworld.start_inventory[world.player].value.get('Magic Bean Pack', 0): pending_junk_pool.append('Magic Bean Pack') - else: - placed_items['ZR Magic Bean Salesman'] = 'Magic Bean' - skip_in_spoiler_locations.append('ZR Magic Bean Salesman') - - if world.shuffle_medigoron_carpet_salesman: - pool.append('Giants Knife') - else: - placed_items['GC Medigoron'] = 'Giants Knife' - skip_in_spoiler_locations.append('GC Medigoron') - - if world.dungeon_mq['Deku Tree']: - skulltula_locations_final = skulltula_locations + [ - 'Deku Tree MQ GS Lobby', - 'Deku Tree MQ GS Compass Room', - 'Deku Tree MQ GS Basement Graves Room', - 'Deku Tree MQ GS Basement Back Room'] - else: - skulltula_locations_final = skulltula_locations + [ - 'Deku Tree GS Compass Room', - 'Deku Tree GS Basement Vines', - 'Deku Tree GS Basement Gate', - 'Deku Tree GS Basement Back Room'] - if world.dungeon_mq['Dodongos Cavern']: - skulltula_locations_final.extend([ - 'Dodongos Cavern MQ GS Scrub Room', - 'Dodongos Cavern MQ GS Song of Time Block Room', - 'Dodongos Cavern MQ GS Lizalfos Room', - 'Dodongos Cavern MQ GS Larvae Room', - 'Dodongos Cavern MQ GS Back Area']) - else: - skulltula_locations_final.extend([ - 'Dodongos Cavern GS Side Room Near Lower Lizalfos', - 'Dodongos Cavern GS Vines Above Stairs', - 'Dodongos Cavern GS Back Room', - 'Dodongos Cavern GS Alcove Above Stairs', - 'Dodongos Cavern GS Scarecrow']) - if world.dungeon_mq['Jabu Jabus Belly']: - skulltula_locations_final.extend([ - 'Jabu Jabus Belly MQ GS Tailpasaran Room', - 'Jabu Jabus Belly MQ GS Invisible Enemies Room', - 'Jabu Jabus Belly MQ GS Boomerang Chest Room', - 'Jabu Jabus Belly MQ GS Near Boss']) - else: - skulltula_locations_final.extend([ - 'Jabu Jabus Belly GS Water Switch Room', - 'Jabu Jabus Belly GS Lobby Basement Lower', - 'Jabu Jabus Belly GS Lobby Basement Upper', - 'Jabu Jabus Belly GS Near Boss']) - if world.dungeon_mq['Forest Temple']: - skulltula_locations_final.extend([ - 'Forest Temple MQ GS First Hallway', - 'Forest Temple MQ GS Block Push Room', - 'Forest Temple MQ GS Raised Island Courtyard', - 'Forest Temple MQ GS Level Island Courtyard', - 'Forest Temple MQ GS Well']) - else: - skulltula_locations_final.extend([ - 'Forest Temple GS First Room', - 'Forest Temple GS Lobby', - 'Forest Temple GS Raised Island Courtyard', - 'Forest Temple GS Level Island Courtyard', - 'Forest Temple GS Basement']) - if world.dungeon_mq['Fire Temple']: - skulltula_locations_final.extend([ - 'Fire Temple MQ GS Above Fire Wall Maze', - 'Fire Temple MQ GS Fire Wall Maze Center', - 'Fire Temple MQ GS Big Lava Room Open Door', - 'Fire Temple MQ GS Fire Wall Maze Side Room', - 'Fire Temple MQ GS Skull On Fire']) - else: - skulltula_locations_final.extend([ - 'Fire Temple GS Song of Time Room', - 'Fire Temple GS Boulder Maze', - 'Fire Temple GS Scarecrow Climb', - 'Fire Temple GS Scarecrow Top', - 'Fire Temple GS Boss Key Loop']) - if world.dungeon_mq['Water Temple']: - skulltula_locations_final.extend([ - 'Water Temple MQ GS Before Upper Water Switch', - 'Water Temple MQ GS Freestanding Key Area', - 'Water Temple MQ GS Lizalfos Hallway', - 'Water Temple MQ GS River', - 'Water Temple MQ GS Triple Wall Torch']) - else: - skulltula_locations_final.extend([ - 'Water Temple GS Behind Gate', - 'Water Temple GS River', - 'Water Temple GS Falling Platform Room', - 'Water Temple GS Central Pillar', - 'Water Temple GS Near Boss Key Chest']) - if world.dungeon_mq['Spirit Temple']: - skulltula_locations_final.extend([ - 'Spirit Temple MQ GS Symphony Room', - 'Spirit Temple MQ GS Leever Room', - 'Spirit Temple MQ GS Nine Thrones Room West', - 'Spirit Temple MQ GS Nine Thrones Room North', - 'Spirit Temple MQ GS Sun Block Room']) - else: - skulltula_locations_final.extend([ - 'Spirit Temple GS Metal Fence', - 'Spirit Temple GS Sun on Floor Room', - 'Spirit Temple GS Hall After Sun Block Room', - 'Spirit Temple GS Boulder Room', - 'Spirit Temple GS Lobby']) - if world.dungeon_mq['Shadow Temple']: - skulltula_locations_final.extend([ - 'Shadow Temple MQ GS Falling Spikes Room', - 'Shadow Temple MQ GS Wind Hint Room', - 'Shadow Temple MQ GS After Wind', - 'Shadow Temple MQ GS After Ship', - 'Shadow Temple MQ GS Near Boss']) - else: - skulltula_locations_final.extend([ - 'Shadow Temple GS Like Like Room', - 'Shadow Temple GS Falling Spikes Room', - 'Shadow Temple GS Single Giant Pot', - 'Shadow Temple GS Near Ship', - 'Shadow Temple GS Triple Giant Pot']) - if world.dungeon_mq['Bottom of the Well']: - skulltula_locations_final.extend([ - 'Bottom of the Well MQ GS Basement', - 'Bottom of the Well MQ GS Coffin Room', - 'Bottom of the Well MQ GS West Inner Room']) - else: - skulltula_locations_final.extend([ - 'Bottom of the Well GS West Inner Room', - 'Bottom of the Well GS East Inner Room', - 'Bottom of the Well GS Like Like Cage']) - if world.dungeon_mq['Ice Cavern']: - skulltula_locations_final.extend([ - 'Ice Cavern MQ GS Scarecrow', - 'Ice Cavern MQ GS Ice Block', - 'Ice Cavern MQ GS Red Ice']) - else: - skulltula_locations_final.extend([ - 'Ice Cavern GS Spinning Scythe Room', - 'Ice Cavern GS Heart Piece Room', - 'Ice Cavern GS Push Block Room']) - if world.tokensanity == 'off': - for location in skulltula_locations_final: - placed_items[location] = 'Gold Skulltula Token' - skip_in_spoiler_locations.append(location) - elif world.tokensanity == 'dungeons': - for location in skulltula_locations_final: - if world.get_location(location).scene >= 0x0A: - placed_items[location] = 'Gold Skulltula Token' - skip_in_spoiler_locations.append(location) + if (world.gerudo_fortress != "open" + and world.shuffle_hideoutkeys in ['any_dungeon', 'overworld', 'keysanity', 'regional']): + if 'Thieves Hideout' in world.key_rings and world.gerudo_fortress != "fast": + pending_junk_pool.extend(['Small Key Ring (Thieves Hideout)']) else: - pool.append('Gold Skulltula Token') - elif world.tokensanity == 'overworld': - for location in skulltula_locations_final: - if world.get_location(location).scene < 0x0A: - placed_items[location] = 'Gold Skulltula Token' - skip_in_spoiler_locations.append(location) - else: - pool.append('Gold Skulltula Token') - else: - pool.extend(['Gold Skulltula Token'] * 100) - + pending_junk_pool.append('Small Key (Thieves Hideout)') + if world.shuffle_gerudo_card: + pending_junk_pool.append('Gerudo Membership Card') + if world.shuffle_smallkeys in ['any_dungeon', 'overworld', 'keysanity', 'regional']: + for dungeon in ['Forest Temple', 'Fire Temple', 'Water Temple', 'Shadow Temple', 'Spirit Temple', + 'Bottom of the Well', 'Gerudo Training Ground', 'Ganons Castle']: + if dungeon in world.key_rings: + pending_junk_pool.append(f"Small Key Ring ({dungeon})") + else: + pending_junk_pool.append(f"Small Key ({dungeon})") + if world.shuffle_bosskeys in ['any_dungeon', 'overworld', 'keysanity', 'regional']: + for dungeon in ['Forest Temple', 'Fire Temple', 'Water Temple', 'Shadow Temple', 'Spirit Temple']: + pending_junk_pool.append(f"Boss Key ({dungeon})") + if world.shuffle_ganon_bosskey in ['any_dungeon', 'overworld', 'keysanity', 'regional']: + pending_junk_pool.append('Boss Key (Ganons Castle)') + if world.shuffle_song_items == 'any': + pending_junk_pool.extend(song_list) + + if world.item_pool_value == 'ludicrous': + pending_junk_pool.extend(ludicrous_health) - if world.bombchus_in_logic: - pool.extend(['Bombchus'] * 4) - if world.dungeon_mq['Jabu Jabus Belly']: - pool.extend(['Bombchus']) - if world.dungeon_mq['Spirit Temple']: - pool.extend(['Bombchus'] * 2) - if not world.dungeon_mq['Bottom of the Well']: - pool.extend(['Bombchus']) - if world.dungeon_mq['Gerudo Training Ground']: - pool.extend(['Bombchus']) - if world.shuffle_medigoron_carpet_salesman: - pool.append('Bombchus') - - else: - pool.extend(['Bombchus (5)'] + ['Bombchus (10)'] * 2) - if world.dungeon_mq['Jabu Jabus Belly']: - pool.extend(['Bombchus (10)']) - if world.dungeon_mq['Spirit Temple']: - pool.extend(['Bombchus (10)'] * 2) - if not world.dungeon_mq['Bottom of the Well']: - pool.extend(['Bombchus (10)']) - if world.dungeon_mq['Gerudo Training Ground']: - pool.extend(['Bombchus (10)']) - if world.dungeon_mq['Ganons Castle']: - pool.extend(['Bombchus (10)']) - else: - pool.extend(['Bombchus (20)']) - if world.shuffle_medigoron_carpet_salesman: - pool.append('Bombchus (10)') - - if not world.shuffle_medigoron_carpet_salesman: - placed_items['Wasteland Bombchu Salesman'] = 'Bombchus (10)' - skip_in_spoiler_locations.append('Wasteland Bombchu Salesman') - - pool.extend(['Ice Trap']) - if not world.dungeon_mq['Gerudo Training Ground']: - pool.extend(['Ice Trap']) - if not world.dungeon_mq['Ganons Castle']: - pool.extend(['Ice Trap'] * 4) - - if world.gerudo_fortress == 'open': - placed_items['Hideout Jail Guard (1 Torch)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['Hideout Jail Guard (1 Torch)', 'Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) - elif world.shuffle_fortresskeys in ['any_dungeon', 'overworld', 'keysanity']: - if world.gerudo_fortress == 'fast': - pool.append('Small Key (Thieves Hideout)') - placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) - else: - pool.extend(['Small Key (Thieves Hideout)'] * 4) - if world.item_pool_value == 'plentiful': - pending_junk_pool.append('Small Key (Thieves Hideout)') - else: - if world.gerudo_fortress == 'fast': - placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Thieves Hideout)' - placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' - placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) - else: - placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Thieves Hideout)' - placed_items['Hideout Jail Guard (2 Torches)'] = 'Small Key (Thieves Hideout)' - placed_items['Hideout Jail Guard (3 Torches)'] = 'Small Key (Thieves Hideout)' - placed_items['Hideout Jail Guard (4 Torches)'] = 'Small Key (Thieves Hideout)' - - if world.shuffle_gerudo_card and world.gerudo_fortress != 'open': - pool.append('Gerudo Membership Card') - elif world.shuffle_gerudo_card: - pending_junk_pool.append('Gerudo Membership Card') - placed_items['Hideout Gerudo Membership Card'] = 'Ice Trap' - skip_in_spoiler_locations.append('Hideout Gerudo Membership Card') - else: - card = world.create_item('Gerudo Membership Card') - world.multiworld.push_precollected(card) - placed_items['Hideout Gerudo Membership Card'] = 'Gerudo Membership Card' - skip_in_spoiler_locations.append('Hideout Gerudo Membership Card') - if world.shuffle_gerudo_card and world.item_pool_value == 'plentiful': - pending_junk_pool.append('Gerudo Membership Card') - - if world.item_pool_value == 'plentiful' and world.shuffle_smallkeys in ['any_dungeon', 'overworld', 'keysanity']: - pending_junk_pool.append('Small Key (Bottom of the Well)') - pending_junk_pool.append('Small Key (Forest Temple)') - pending_junk_pool.append('Small Key (Fire Temple)') - pending_junk_pool.append('Small Key (Water Temple)') - pending_junk_pool.append('Small Key (Shadow Temple)') - pending_junk_pool.append('Small Key (Spirit Temple)') - pending_junk_pool.append('Small Key (Gerudo Training Ground)') - pending_junk_pool.append('Small Key (Ganons Castle)') - - if world.item_pool_value == 'plentiful' and world.shuffle_bosskeys in ['any_dungeon', 'overworld', 'keysanity']: - pending_junk_pool.append('Boss Key (Forest Temple)') - pending_junk_pool.append('Boss Key (Fire Temple)') - pending_junk_pool.append('Boss Key (Water Temple)') - pending_junk_pool.append('Boss Key (Shadow Temple)') - pending_junk_pool.append('Boss Key (Spirit Temple)') - - if world.item_pool_value == 'plentiful' and world.shuffle_ganon_bosskey in ['any_dungeon', 'overworld', 'keysanity']: - pending_junk_pool.append('Boss Key (Ganons Castle)') - - if world.shopsanity == 'off': - placed_items.update(vanilla_shop_items) - if world.bombchus_in_logic: - placed_items['KF Shop Item 8'] = 'Buy Bombchu (5)' - placed_items['Market Bazaar Item 4'] = 'Buy Bombchu (5)' - placed_items['Kak Bazaar Item 4'] = 'Buy Bombchu (5)' - pool.extend(normal_rupees) - skip_in_spoiler_locations.extend(vanilla_shop_items.keys()) - if world.bombchus_in_logic: - skip_in_spoiler_locations.remove('KF Shop Item 8') - skip_in_spoiler_locations.remove('Market Bazaar Item 4') - skip_in_spoiler_locations.remove('Kak Bazaar Item 4') + if world.triforce_hunt: + triforce_count = int((Decimal(100 + world.extra_triforce_percentage)/100 * world.triforce_goal).to_integral_value(rounding=ROUND_HALF_UP)) + pending_junk_pool.extend(['Triforce Piece'] * triforce_count) - else: - remain_shop_items = list(vanilla_shop_items.values()) + # Use the vanilla items in the world's locations when appropriate. + for location in world.get_locations(): + if location.vanilla_item is None: + continue + + item = location.vanilla_item + shuffle_item = None # None for don't handle, False for place item, True for add to pool. + + # Always Placed Items + if (location.vanilla_item in ['Zeldas Letter', 'Triforce', 'Scarecrow Song', + 'Deliver Letter', 'Time Travel', 'Bombchu Drop'] + or location.type == 'Drop'): + shuffle_item = False + if location.vanilla_item != 'Zeldas Letter': + location.show_in_spoiler = False + + # Gold Skulltula Tokens + elif location.vanilla_item == 'Gold Skulltula Token': + shuffle_item = (world.tokensanity == 'all' + or (world.tokensanity == 'dungeons' and location.dungeon) + or (world.tokensanity == 'overworld' and not location.dungeon)) + location.show_in_spoiler = shuffle_item + + # Shops + elif location.type == "Shop": + if world.shopsanity == 'off': + if world.bombchus_in_logic and location.name in ['KF Shop Item 8', 'Market Bazaar Item 4', 'Kak Bazaar Item 4']: + item = 'Buy Bombchu (5)' + shuffle_item = False + location.show_in_spoiler = False + else: + remain_shop_items.append(item) + + # Business Scrubs + elif location.type in ["Scrub", "GrottoScrub"]: + if location.vanilla_item in ['Piece of Heart', 'Deku Stick Capacity', 'Deku Nut Capacity']: + shuffle_item = True + elif world.shuffle_scrubs == 'off': + shuffle_item = False + location.show_in_spoiler = False + else: + item = deku_scrubs_items[location.vanilla_item] + if isinstance(item, list): + item = random.choices([i[0] for i in item], weights=[i[1] for i in item], k=1)[0] + shuffle_item = True + + # Kokiri Sword + elif location.vanilla_item == 'Kokiri Sword': + shuffle_item = world.shuffle_kokiri_sword + + # Weird Egg + elif location.vanilla_item == 'Weird Egg': + if world.shuffle_child_trade == 'skip_child_zelda': + item = IGNORE_LOCATION + shuffle_item = False + location.show_in_spoiler = False + world.multiworld.push_precollected(world.create_item('Weird Egg')) + world.remove_from_start_inventory.append('Weird Egg') + else: + shuffle_item = world.shuffle_child_trade != 'vanilla' + + # Ocarinas + elif location.vanilla_item == 'Ocarina': + shuffle_item = world.shuffle_ocarinas + + # Giant's Knife + elif location.vanilla_item == 'Giants Knife': + shuffle_item = world.shuffle_medigoron_carpet_salesman + if not shuffle_item: + location.show_in_spoiler = False + + # Bombchus + elif location.vanilla_item in ['Bombchus', 'Bombchus (5)', 'Bombchus (10)', 'Bombchus (20)']: + if world.bombchus_in_logic: + item = 'Bombchus' + shuffle_item = location.name != 'Wasteland Bombchu Salesman' or world.shuffle_medigoron_carpet_salesman + if not shuffle_item: + location.show_in_spoiler = False + + # Cows + elif location.vanilla_item == 'Milk': + if world.shuffle_cows: + item = get_junk_item()[0] + shuffle_item = world.shuffle_cows + if not shuffle_item: + location.show_in_spoiler = False + + # Gerudo Card + elif location.vanilla_item == 'Gerudo Membership Card': + shuffle_item = world.shuffle_gerudo_card and world.gerudo_fortress != 'open' + if world.shuffle_gerudo_card and world.gerudo_fortress == 'open': + pending_junk_pool.append(item) + item = IGNORE_LOCATION + location.show_in_spoiler = False + + # Bottles + elif location.vanilla_item in ['Bottle', 'Bottle with Milk', 'Rutos Letter']: + if ruto_bottles: + item = 'Rutos Letter' + ruto_bottles -= 1 + else: + item = random.choice(normal_bottles) + shuffle_item = True + + # Magic Beans + elif location.vanilla_item == 'Buy Magic Bean': + if world.shuffle_beans: + item = 'Magic Bean Pack' if not world.multiworld.start_inventory[world.player].value.get('Magic Bean Pack', 0) else get_junk_item()[0] + shuffle_item = world.shuffle_beans + if not shuffle_item: + location.show_in_spoiler = False + + # Frogs Purple Rupees + elif location.scene == 0x54 and location.vanilla_item == 'Rupees (50)': + shuffle_item = world.shuffle_frog_song_rupees + if not shuffle_item: + location.show_in_spoiler = False + + # Adult Trade Item + elif location.vanilla_item == 'Pocket Egg': + potential_trade_items = world.adult_trade_start if world.adult_trade_start else trade_items + item = random.choice(sorted(potential_trade_items)) + world.selected_adult_trade_item = item + shuffle_item = True + + # Thieves' Hideout + elif location.vanilla_item == 'Small Key (Thieves Hideout)': + shuffle_item = world.shuffle_hideoutkeys != 'vanilla' + if (world.gerudo_fortress == 'open' + or world.gerudo_fortress == 'fast' and location.name != 'Hideout 1 Torch Jail Gerudo Key'): + item = IGNORE_LOCATION + shuffle_item = False + location.show_in_spoiler = False + if shuffle_item and world.gerudo_fortress == 'normal' and 'Thieves Hideout' in world.key_rings: + item = get_junk_item()[0] if location.name != 'Hideout 1 Torch Jail Gerudo Key' else 'Small Key Ring (Thieves Hideout)' + + # Freestanding Rupees and Hearts + elif location.type in ['ActorOverride', 'Freestanding', 'RupeeTower']: + if world.shuffle_freestanding_items == 'all': + shuffle_item = True + elif world.shuffle_freestanding_items == 'dungeons' and location.dungeon is not None: + shuffle_item = True + elif world.shuffle_freestanding_items == 'overworld' and location.dungeon is None: + shuffle_item = True + else: + shuffle_item = False + location.disabled = DisableType.DISABLED + location.show_in_spoiler = False + + # Pots + elif location.type in ['Pot', 'FlyingPot']: + if world.shuffle_pots == 'all': + shuffle_item = True + elif world.shuffle_pots == 'dungeons' and (location.dungeon is not None or location.parent_region.is_boss_room): + shuffle_item = True + elif world.shuffle_pots == 'overworld' and not (location.dungeon is not None or location.parent_region.is_boss_room): + shuffle_item = True + else: + shuffle_item = False + location.disabled = DisableType.DISABLED + location.show_in_spoiler = False + + # Crates + elif location.type in ['Crate', 'SmallCrate']: + if world.shuffle_crates == 'all': + shuffle_item = True + elif world.shuffle_crates == 'dungeons' and location.dungeon is not None: + shuffle_item = True + elif world.shuffle_crates == 'overworld' and location.dungeon is None: + shuffle_item = True + else: + shuffle_item = False + location.disabled = DisableType.DISABLED + location.show_in_spoiler = False + + # Beehives + elif location.type == 'Beehive': + if world.shuffle_beehives: + shuffle_item = True + else: + shuffle_item = False + location.disabled = DisableType.DISABLED + location.show_in_spoiler = False + + # Dungeon Items + elif location.dungeon is not None: + dungeon = location.dungeon + shuffle_setting = None + dungeon_collection = None + + # Boss Key + if location.vanilla_item == dungeon.item_name("Boss Key"): + shuffle_setting = world.shuffle_bosskeys if dungeon.name != 'Ganons Castle' else world.shuffle_ganon_bosskey + dungeon_collection = dungeon.boss_key + if shuffle_setting == 'vanilla': + shuffle_item = False + # Map or Compass + elif location.vanilla_item in [dungeon.item_name("Map"), dungeon.item_name("Compass")]: + shuffle_setting = world.shuffle_mapcompass + dungeon_collection = dungeon.dungeon_items + if shuffle_setting == 'vanilla': + shuffle_item = False + # Small Key + elif location.vanilla_item == dungeon.item_name("Small Key"): + shuffle_setting = world.shuffle_smallkeys + dungeon_collection = dungeon.small_keys + if shuffle_setting == 'vanilla': + shuffle_item = False + elif dungeon.name in world.key_rings and not dungeon.small_keys: + item = dungeon.item_name("Small Key Ring") + elif dungeon.name in world.key_rings: + item = get_junk_item()[0] + shuffle_item = True + # Any other item in a dungeon. + elif location.type in ["Chest", "NPC", "Song", "Collectable", "Cutscene", "BossHeart"]: + shuffle_item = True + + # Handle dungeon item. + if shuffle_setting is not None and not shuffle_item: + dungeon_collection.append(world.create_item(item)) + if shuffle_setting in ['remove', 'startwith']: + world.multiworld.push_precollected(dungeon_collection[-1]) + world.remove_from_start_inventory.append(dungeon_collection[-1].name) + item = get_junk_item()[0] + shuffle_item = True + elif shuffle_setting in ['any_dungeon', 'overworld', 'regional']: + dungeon_collection[-1].priority = True + + # The rest of the overworld items. + elif location.type in ["Chest", "NPC", "Song", "Collectable", "Cutscene", "BossHeart"]: + shuffle_item = True + + # Now, handle the item as necessary. + if shuffle_item: + pool.append(item) + elif shuffle_item is not None: + placed_items[location.name] = item + # End of Locations loop. + + # add unrestricted dungeon items to main item pool + pool.extend([item.name for item in get_unrestricted_dungeon_items(world)]) + + if world.shopsanity != 'off': pool.extend(min_shop_items) for item in min_shop_items: remain_shop_items.remove(item) shop_slots_count = len(remain_shop_items) - shop_nonitem_count = len(world.shop_prices) - shop_item_count = shop_slots_count - shop_nonitem_count + shop_non_item_count = len(world.shop_prices) + shop_item_count = shop_slots_count - shop_non_item_count pool.extend(random.sample(remain_shop_items, shop_item_count)) - if shop_nonitem_count: - pool.extend(get_junk_item(shop_nonitem_count)) - if world.shopsanity == '0': - pool.extend(normal_rupees) - else: - pool.extend(shopsanity_rupees) - - if world.shuffle_scrubs != 'off': - if world.dungeon_mq['Deku Tree']: - pool.append('Deku Shield') - if world.dungeon_mq['Dodongos Cavern']: - pool.extend(['Deku Stick (1)', 'Deku Shield', 'Recovery Heart']) - else: - pool.extend(['Deku Nuts (5)', 'Deku Stick (1)', 'Deku Shield']) - if not world.dungeon_mq['Jabu Jabus Belly']: - pool.append('Deku Nuts (5)') - if world.dungeon_mq['Ganons Castle']: - pool.extend(['Bombs (5)', 'Recovery Heart', 'Rupees (5)', 'Deku Nuts (5)']) - else: - pool.extend(['Bombs (5)', 'Recovery Heart', 'Rupees (5)']) - pool.extend(deku_scrubs_items) - for _ in range(7): - pool.append('Arrows (30)' if random.randint(0,3) > 0 else 'Deku Seeds (30)') - - else: - if world.dungeon_mq['Deku Tree']: - placed_items['Deku Tree MQ Deku Scrub'] = 'Buy Deku Shield' - skip_in_spoiler_locations.append('Deku Tree MQ Deku Scrub') - if world.dungeon_mq['Dodongos Cavern']: - placed_items['Dodongos Cavern MQ Deku Scrub Lobby Rear'] = 'Buy Deku Stick (1)' - placed_items['Dodongos Cavern MQ Deku Scrub Lobby Front'] = 'Buy Deku Seeds (30)' - placed_items['Dodongos Cavern MQ Deku Scrub Staircase'] = 'Buy Deku Shield' - placed_items['Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos'] = 'Buy Red Potion [30]' - skip_in_spoiler_locations.extend(['Dodongos Cavern MQ Deku Scrub Lobby Rear', - 'Dodongos Cavern MQ Deku Scrub Lobby Front', - 'Dodongos Cavern MQ Deku Scrub Staircase', - 'Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos']) - else: - placed_items['Dodongos Cavern Deku Scrub Near Bomb Bag Left'] = 'Buy Deku Nut (5)' - placed_items['Dodongos Cavern Deku Scrub Side Room Near Dodongos'] = 'Buy Deku Stick (1)' - placed_items['Dodongos Cavern Deku Scrub Near Bomb Bag Right'] = 'Buy Deku Seeds (30)' - placed_items['Dodongos Cavern Deku Scrub Lobby'] = 'Buy Deku Shield' - skip_in_spoiler_locations.extend(['Dodongos Cavern Deku Scrub Near Bomb Bag Left', - 'Dodongos Cavern Deku Scrub Side Room Near Dodongos', - 'Dodongos Cavern Deku Scrub Near Bomb Bag Right', - 'Dodongos Cavern Deku Scrub Lobby']) - if not world.dungeon_mq['Jabu Jabus Belly']: - placed_items['Jabu Jabus Belly Deku Scrub'] = 'Buy Deku Nut (5)' - skip_in_spoiler_locations.append('Jabu Jabus Belly Deku Scrub') - if world.dungeon_mq['Ganons Castle']: - placed_items['Ganons Castle MQ Deku Scrub Right'] = 'Buy Deku Nut (5)' - placed_items['Ganons Castle MQ Deku Scrub Center-Left'] = 'Buy Bombs (5) [35]' - placed_items['Ganons Castle MQ Deku Scrub Center'] = 'Buy Arrows (30)' - placed_items['Ganons Castle MQ Deku Scrub Center-Right'] = 'Buy Red Potion [30]' - placed_items['Ganons Castle MQ Deku Scrub Left'] = 'Buy Green Potion' - skip_in_spoiler_locations.extend(['Ganons Castle MQ Deku Scrub Right', - 'Ganons Castle MQ Deku Scrub Center-Left', - 'Ganons Castle MQ Deku Scrub Center', - 'Ganons Castle MQ Deku Scrub Center-Right', - 'Ganons Castle MQ Deku Scrub Left']) - else: - placed_items['Ganons Castle Deku Scrub Center-Left'] = 'Buy Bombs (5) [35]' - placed_items['Ganons Castle Deku Scrub Center-Right'] = 'Buy Arrows (30)' - placed_items['Ganons Castle Deku Scrub Right'] = 'Buy Red Potion [30]' - placed_items['Ganons Castle Deku Scrub Left'] = 'Buy Green Potion' - skip_in_spoiler_locations.extend(['Ganons Castle Deku Scrub Right', - 'Ganons Castle Deku Scrub Center-Left', - 'Ganons Castle Deku Scrub Center-Right', - 'Ganons Castle Deku Scrub Left']) - placed_items.update(vanilla_deku_scrubs) - skip_in_spoiler_locations.extend(vanilla_deku_scrubs.keys()) - - pool.extend(alwaysitems) - - if world.dungeon_mq['Deku Tree']: - pool.extend(DT_MQ) - else: - pool.extend(DT_vanilla) - if world.dungeon_mq['Dodongos Cavern']: - pool.extend(DC_MQ) - else: - pool.extend(DC_vanilla) - if world.dungeon_mq['Jabu Jabus Belly']: - pool.extend(JB_MQ) - if world.dungeon_mq['Forest Temple']: - pool.extend(FoT_MQ) - else: - pool.extend(FoT_vanilla) - if world.dungeon_mq['Fire Temple']: - pool.extend(FiT_MQ) - else: - pool.extend(FiT_vanilla) - if world.dungeon_mq['Spirit Temple']: - pool.extend(SpT_MQ) - else: - pool.extend(SpT_vanilla) - if world.dungeon_mq['Shadow Temple']: - pool.extend(ShT_MQ) - else: - pool.extend(ShT_vanilla) - if not world.dungeon_mq['Bottom of the Well']: - pool.extend(BW_vanilla) - if world.dungeon_mq['Gerudo Training Ground']: - pool.extend(GTG_MQ) - else: - pool.extend(GTG_vanilla) - if world.dungeon_mq['Ganons Castle']: - pool.extend(GC_MQ) - else: - pool.extend(GC_vanilla) - - for i in range(bottle_count): - if i >= ruto_bottles: - bottle = random.choice(normal_bottles) - pool.append(bottle) - else: - pool.append('Rutos Letter') - - earliest_trade = tradeitemoptions.index(world.logic_earliest_adult_trade) - latest_trade = tradeitemoptions.index(world.logic_latest_adult_trade) - if earliest_trade > latest_trade: - earliest_trade, latest_trade = latest_trade, earliest_trade - tradeitem = random.choice(tradeitems[earliest_trade:latest_trade+1]) - world.selected_adult_trade_item = tradeitem - pool.append(tradeitem) - - pool.extend(songlist) - if world.shuffle_song_items == 'any' and world.item_pool_value == 'plentiful': - pending_junk_pool.extend(songlist) + if shop_non_item_count: + pool.extend(get_junk_item(shop_non_item_count)) + + # Extra rupees for shopsanity. + if world.shopsanity not in ['off', '0']: + for rupee in shopsanity_rupees: + if 'Rupees (5)' in pool: + pool[pool.index('Rupees (5)')] = rupee + else: + pending_junk_pool.append(rupee) if world.free_scarecrow: - item = world.create_item('Scarecrow Song') - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) + world.multiworld.push_precollected(world.create_item('Scarecrow Song')) + world.remove_from_start_inventory.append('Scarecrow Song') if world.no_epona_race: - item = world.create_item('Epona') - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - - if world.shuffle_mapcompass == 'remove' or world.shuffle_mapcompass == 'startwith': - for item in [item for dungeon in world.dungeons for item in dungeon.dungeon_items]: - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - pool.extend(get_junk_item()) - if world.shuffle_smallkeys == 'remove': - for item in [item for dungeon in world.dungeons for item in dungeon.small_keys]: - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - pool.extend(get_junk_item()) - if world.shuffle_bosskeys == 'remove': - for item in [item for dungeon in world.dungeons if dungeon.name != 'Ganons Castle' for item in dungeon.boss_key]: - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - pool.extend(get_junk_item()) - if world.shuffle_ganon_bosskey in ['remove', 'triforce']: - for item in [item for dungeon in world.dungeons if dungeon.name == 'Ganons Castle' for item in dungeon.boss_key]: - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - pool.extend(get_junk_item()) - - if world.shuffle_mapcompass == 'vanilla': - for location, item in vanillaMC.items(): - try: - world.get_location(location) - placed_items[location] = item - except KeyError: - continue + world.multiworld.push_precollected(world.create_item('Epona')) + world.remove_from_start_inventory.append('Epona') + if world.shuffle_smallkeys == 'vanilla': - for location, item in vanillaSK.items(): - try: - world.get_location(location) - placed_items[location] = item - except KeyError: - continue # Logic cannot handle vanilla key layout in some dungeons # this is because vanilla expects the dungeon major item to be # locked behind the keys, which is not always true in rando. # We can resolve this by starting with some extra keys if world.dungeon_mq['Spirit Temple']: # Yes somehow you need 3 keys. This dungeon is bonkers - items = [world.create_item('Small Key (Spirit Temple)') for i in range(3)] - for item in items: - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - #if not world.dungeon_mq['Fire Temple']: - # world.state.collect(ItemFactory('Small Key (Fire Temple)')) - if world.shuffle_bosskeys == 'vanilla': - for location, item in vanillaBK.items(): - try: - world.get_location(location) - placed_items[location] = item - except KeyError: - continue - - - if not world.keysanity and not world.dungeon_mq['Fire Temple']: - item = world.create_item('Small Key (Fire Temple)') - world.multiworld.push_precollected(item) - world.remove_from_start_inventory.append(item.name) - - if world.triforce_hunt: - triforce_count = int((Decimal(100 + world.extra_triforce_percentage)/100 * world.triforce_goal).to_integral_value(rounding=ROUND_HALF_UP)) - pending_junk_pool.extend(['Triforce Piece'] * triforce_count) + keys = [world.create_item('Small Key (Spirit Temple)') for _ in range(3)] + for k in keys: + world.multiworld.push_precollected(k) + world.remove_from_start_inventory.append(k.name) + if 'Shadow Temple' in world.dungeon_shortcuts: + # Reverse Shadow is broken with vanilla keys in both vanilla/MQ + keys = [world.create_item('Small Key (Shadow Temple)') for _ in range(2)] + for k in keys: + world.multiworld.push_precollected(k) + world.remove_from_start_inventory.append(k.name) + + if (not world.keysanity or (world.empty_dungeons['Fire Temple'] and world.shuffle_smallkeys != 'remove'))\ + and not world.dungeon_mq['Fire Temple']: + world.multiworld.push_precollected(world.create_item('Small Key (Fire Temple)')) + world.remove_from_start_inventory.append('Small Key (Fire Temple)') if world.shuffle_ganon_bosskey == 'on_lacs': placed_items['ToT Light Arrows Cutscene'] = 'Boss Key (Ganons Castle)' - elif world.shuffle_ganon_bosskey == 'vanilla': - placed_items['Ganons Tower Boss Key Chest'] = 'Boss Key (Ganons Castle)' - if world.item_pool_value == 'plentiful': - pool.extend(easy_items) + if world.shuffle_ganon_bosskey in ['stones', 'medallions', 'dungeons', 'tokens', 'hearts', 'triforce']: + placed_items['Gift from Sages'] = 'Boss Key (Ganons Castle)' + pool.extend(get_junk_item()) else: - pool.extend(normal_items) - - if not world.shuffle_kokiri_sword: - replace_max_item(pool, 'Kokiri Sword', 0) + placed_items['Gift from Sages'] = IGNORE_LOCATION + world.get_location('Gift from Sages').show_in_spoiler = False - if world.junk_ice_traps == 'off': + if world.junk_ice_traps == 'off': replace_max_item(pool, 'Ice Trap', 0) elif world.junk_ice_traps == 'onslaught': for item in [item for item, weight in junk_pool_base] + ['Recovery Heart', 'Bombs (20)', 'Arrows (30)']: replace_max_item(pool, item, 0) - for item,max in item_difficulty_max[world.item_pool_value].items(): - replace_max_item(pool, item, max) - - if world.damage_multiplier in ['ohko', 'quadruple'] and world.item_pool_value == 'minimal': - pending_junk_pool.append('Nayrus Love') + for item, maximum in item_difficulty_max[world.item_pool_value].items(): + replace_max_item(pool, item, maximum) # world.distribution.alter_pool(world, pool) # Make sure our pending_junk_pool is empty. If not, remove some random junk here. if pending_junk_pool: + # for item in set(pending_junk_pool): + # # Ensure pending_junk_pool contents don't exceed values given by distribution file + # if item in world.distribution.item_pool: + # while pending_junk_pool.count(item) > world.distribution.item_pool[item].count: + # pending_junk_pool.remove(item) + # # Remove pending junk already added to the pool by alter_pool from the pending_junk_pool + # if item in pool: + # count = min(pool.count(item), pending_junk_pool.count(item)) + # for _ in range(count): + # pending_junk_pool.remove(item) remove_junk_pool, _ = zip(*junk_pool_base) # Omits Rupees (200) and Deku Nuts (10) @@ -1398,23 +747,26 @@ def get_pool_core(world): while pending_junk_pool: pending_item = pending_junk_pool.pop() if not junk_candidates: - raise RuntimeError("Not enough junk exists in item pool for %s to be added." % pending_item) + raise RuntimeError("Not enough junk exists in item pool for %s (+%d others) to be added." % (pending_item, len(pending_junk_pool) - 1)) junk_item = random.choice(junk_candidates) junk_candidates.remove(junk_item) pool.remove(junk_item) pool.append(pending_item) - return (pool, placed_items, skip_in_spoiler_locations) + return pool, placed_items + -def add_dungeon_items(ootworld): +def get_unrestricted_dungeon_items(ootworld): """Adds maps, compasses, small keys, boss keys, and Ganon boss key into item pool if they are not placed.""" - skip_add_settings = {'remove', 'startwith', 'vanilla', 'on_lacs'} + unrestricted_dungeon_items = [] + add_settings = {'dungeon', 'any_dungeon', 'overworld', 'keysanity', 'regional'} for dungeon in ootworld.dungeons: - if ootworld.shuffle_mapcompass not in skip_add_settings: - ootworld.itempool.extend(dungeon.dungeon_items) - if ootworld.shuffle_smallkeys not in skip_add_settings: - ootworld.itempool.extend(dungeon.small_keys) - if dungeon.name != 'Ganons Castle' and ootworld.shuffle_bosskeys not in skip_add_settings: - ootworld.itempool.extend(dungeon.boss_key) - if dungeon.name == 'Ganons Castle' and ootworld.shuffle_ganon_bosskey not in skip_add_settings: - ootworld.itempool.extend(dungeon.boss_key) + if ootworld.shuffle_mapcompass in add_settings: + unrestricted_dungeon_items.extend(dungeon.dungeon_items) + if ootworld.shuffle_smallkeys in add_settings: + unrestricted_dungeon_items.extend(dungeon.small_keys) + if dungeon.name != 'Ganons Castle' and ootworld.shuffle_bosskeys in add_settings: + unrestricted_dungeon_items.extend(dungeon.boss_key) + if dungeon.name == 'Ganons Castle' and ootworld.shuffle_ganon_bosskey in add_settings: + unrestricted_dungeon_items.extend(dungeon.boss_key) + return unrestricted_dungeon_items diff --git a/worlds/oot/Items.py b/worlds/oot/Items.py index 77e1d1c2eb03..232560026c16 100644 --- a/worlds/oot/Items.py +++ b/worlds/oot/Items.py @@ -64,37 +64,37 @@ def dungeonitem(self) -> bool: # None -> Normal # Item: (type, Progressive, GetItemID, special), item_table = { - 'Bombs (5)': ('Item', None, 0x01, None), - 'Deku Nuts (5)': ('Item', None, 0x02, None), + 'Bombs (5)': ('Item', None, 0x01, {'junk': 8}), + 'Deku Nuts (5)': ('Item', None, 0x02, {'junk': 5}), 'Bombchus (10)': ('Item', True, 0x03, None), 'Boomerang': ('Item', True, 0x06, None), - 'Deku Stick (1)': ('Item', None, 0x07, None), + 'Deku Stick (1)': ('Item', None, 0x07, {'junk': 5}), 'Lens of Truth': ('Item', True, 0x0A, None), 'Megaton Hammer': ('Item', True, 0x0D, None), - 'Cojiro': ('Item', True, 0x0E, None), + 'Cojiro': ('Item', True, 0x0E, {'trade': True}), 'Bottle': ('Item', True, 0x0F, {'bottle': float('Inf')}), 'Bottle with Milk': ('Item', True, 0x14, {'bottle': float('Inf')}), 'Rutos Letter': ('Item', True, 0x15, None), 'Deliver Letter': ('Item', True, None, {'bottle': float('Inf')}), 'Sell Big Poe': ('Item', True, None, {'bottle': float('Inf')}), - 'Magic Bean': ('Item', True, 0x16, None), - 'Skull Mask': ('Item', True, 0x17, None), - 'Spooky Mask': ('Item', None, 0x18, None), - 'Keaton Mask': ('Item', None, 0x1A, None), - 'Bunny Hood': ('Item', None, 0x1B, None), - 'Mask of Truth': ('Item', True, 0x1C, None), - 'Pocket Egg': ('Item', True, 0x1D, None), - 'Pocket Cucco': ('Item', True, 0x1E, None), - 'Odd Mushroom': ('Item', True, 0x1F, None), - 'Odd Potion': ('Item', True, 0x20, None), - 'Poachers Saw': ('Item', True, 0x21, None), - 'Broken Sword': ('Item', True, 0x22, None), - 'Prescription': ('Item', True, 0x23, None), - 'Eyeball Frog': ('Item', True, 0x24, None), - 'Eyedrops': ('Item', True, 0x25, None), - 'Claim Check': ('Item', True, 0x26, None), + 'Magic Bean': ('Item', True, 0x16, {'progressive': 10}), + 'Skull Mask': ('Item', True, 0x17, {'trade': True}), + 'Spooky Mask': ('Item', None, 0x18, {'trade': True}), + 'Keaton Mask': ('Item', None, 0x1A, {'trade': True}), + 'Bunny Hood': ('Item', None, 0x1B, {'trade': True}), + 'Mask of Truth': ('Item', True, 0x1C, {'trade': True}), + 'Pocket Egg': ('Item', True, 0x1D, {'trade': True}), + 'Pocket Cucco': ('Item', True, 0x1E, {'trade': True}), + 'Odd Mushroom': ('Item', True, 0x1F, {'trade': True}), + 'Odd Potion': ('Item', True, 0x20, {'trade': True}), + 'Poachers Saw': ('Item', True, 0x21, {'trade': True}), + 'Broken Sword': ('Item', True, 0x22, {'trade': True}), + 'Prescription': ('Item', True, 0x23, {'trade': True}), + 'Eyeball Frog': ('Item', True, 0x24, {'trade': True}), + 'Eyedrops': ('Item', True, 0x25, {'trade': True}), + 'Claim Check': ('Item', True, 0x26, {'trade': True}), 'Kokiri Sword': ('Item', True, 0x27, None), - 'Giants Knife': ('Item', True, 0x28, None), + 'Giants Knife': ('Item', None, 0x28, None), 'Deku Shield': ('Item', None, 0x29, None), 'Hylian Shield': ('Item', None, 0x2A, None), 'Mirror Shield': ('Item', True, 0x2B, None), @@ -104,28 +104,27 @@ def dungeonitem(self) -> bool: 'Hover Boots': ('Item', True, 0x2F, None), 'Stone of Agony': ('Item', True, 0x39, None), 'Gerudo Membership Card': ('Item', True, 0x3A, None), - 'Heart Container': ('Item', None, 0x3D, None), - 'Piece of Heart': ('Item', None, 0x3E, None), + 'Heart Container': ('Item', True, 0x3D, {'alias': ('Piece of Heart', 4), 'progressive': float('Inf')}), + 'Piece of Heart': ('Item', True, 0x3E, {'progressive': float('Inf')}), 'Boss Key': ('BossKey', True, 0x3F, None), 'Compass': ('Compass', None, 0x40, None), 'Map': ('Map', None, 0x41, None), 'Small Key': ('SmallKey', True, 0x42, {'progressive': float('Inf')}), - 'Weird Egg': ('Item', True, 0x47, None), - 'Recovery Heart': ('Item', None, 0x48, None), - 'Arrows (5)': ('Item', None, 0x49, None), - 'Arrows (10)': ('Item', None, 0x4A, None), - 'Arrows (30)': ('Item', None, 0x4B, None), - 'Rupee (1)': ('Item', None, 0x4C, None), - 'Rupees (5)': ('Item', None, 0x4D, None), - 'Rupees (20)': ('Item', None, 0x4E, None), - 'Heart Container (Boss)': ('Item', None, 0x4F, None), + 'Weird Egg': ('Item', True, 0x47, {'trade': True}), + 'Recovery Heart': ('Item', None, 0x48, {'junk': 0}), + 'Arrows (5)': ('Item', None, 0x49, {'junk': 8}), + 'Arrows (10)': ('Item', None, 0x4A, {'junk': 2}), + 'Arrows (30)': ('Item', None, 0x4B, {'junk': 0}), + 'Rupee (1)': ('Item', None, 0x4C, {'junk': -1}), + 'Rupees (5)': ('Item', None, 0x4D, {'junk': 10}), + 'Rupees (20)': ('Item', None, 0x4E, {'junk': 4}), 'Milk': ('Item', None, 0x50, None), 'Goron Mask': ('Item', None, 0x51, None), 'Zora Mask': ('Item', None, 0x52, None), 'Gerudo Mask': ('Item', None, 0x53, None), - 'Rupees (50)': ('Item', None, 0x55, None), - 'Rupees (200)': ('Item', None, 0x56, None), - 'Biggoron Sword': ('Item', True, 0x57, None), + 'Rupees (50)': ('Item', None, 0x55, {'junk': 1}), + 'Rupees (200)': ('Item', None, 0x56, {'junk': 0}), + 'Biggoron Sword': ('Item', None, 0x57, None), 'Fire Arrows': ('Item', True, 0x58, None), 'Ice Arrows': ('Item', True, 0x59, None), 'Light Arrows': ('Item', True, 0x5A, None), @@ -133,15 +132,15 @@ def dungeonitem(self) -> bool: 'Dins Fire': ('Item', True, 0x5C, None), 'Nayrus Love': ('Item', True, 0x5E, None), 'Farores Wind': ('Item', True, 0x5D, None), - 'Deku Nuts (10)': ('Item', None, 0x64, None), - 'Bombs (10)': ('Item', None, 0x66, None), - 'Bombs (20)': ('Item', None, 0x67, None), - 'Deku Seeds (30)': ('Item', None, 0x69, None), + 'Deku Nuts (10)': ('Item', None, 0x64, {'junk': 0}), + 'Bombs (10)': ('Item', None, 0x66, {'junk': 2}), + 'Bombs (20)': ('Item', None, 0x67, {'junk': 0}), + 'Deku Seeds (30)': ('Item', None, 0x69, {'junk': 5}), 'Bombchus (5)': ('Item', True, 0x6A, None), 'Bombchus (20)': ('Item', True, 0x6B, None), 'Rupee (Treasure Chest Game)': ('Item', None, 0x72, None), - 'Piece of Heart (Treasure Chest Game)': ('Item', None, 0x76, None), - 'Ice Trap': ('Item', None, 0x7C, None), + 'Piece of Heart (Treasure Chest Game)': ('Item', True, 0x76, {'alias': ('Piece of Heart', 1), 'progressive': float('Inf')}), + 'Ice Trap': ('Item', None, 0x7C, {'junk': 0}), 'Progressive Hookshot': ('Item', True, 0x80, {'progressive': 2}), 'Progressive Strength Upgrade': ('Item', True, 0x81, {'progressive': 3}), 'Bomb Bag': ('Item', True, 0x82, None), @@ -168,40 +167,41 @@ def dungeonitem(self) -> bool: 'Boss Key (Water Temple)': ('BossKey', True, 0x97, None), 'Boss Key (Spirit Temple)': ('BossKey', True, 0x98, None), 'Boss Key (Shadow Temple)': ('BossKey', True, 0x99, None), - 'Boss Key (Ganons Castle)': ('GanonBossKey',True,0x9A,None), - 'Compass (Deku Tree)': ('Compass', None, 0x9B, None), - 'Compass (Dodongos Cavern)': ('Compass', None, 0x9C, None), - 'Compass (Jabu Jabus Belly)': ('Compass', None, 0x9D, None), - 'Compass (Forest Temple)': ('Compass', None, 0x9E, None), - 'Compass (Fire Temple)': ('Compass', None, 0x9F, None), - 'Compass (Water Temple)': ('Compass', None, 0xA0, None), - 'Compass (Spirit Temple)': ('Compass', None, 0xA1, None), - 'Compass (Shadow Temple)': ('Compass', None, 0xA2, None), - 'Compass (Bottom of the Well)': ('Compass', None, 0xA3, None), - 'Compass (Ice Cavern)': ('Compass', None, 0xA4, None), - 'Map (Deku Tree)': ('Map', None, 0xA5, None), - 'Map (Dodongos Cavern)': ('Map', None, 0xA6, None), - 'Map (Jabu Jabus Belly)': ('Map', None, 0xA7, None), - 'Map (Forest Temple)': ('Map', None, 0xA8, None), - 'Map (Fire Temple)': ('Map', None, 0xA9, None), - 'Map (Water Temple)': ('Map', None, 0xAA, None), - 'Map (Spirit Temple)': ('Map', None, 0xAB, None), - 'Map (Shadow Temple)': ('Map', None, 0xAC, None), - 'Map (Bottom of the Well)': ('Map', None, 0xAD, None), - 'Map (Ice Cavern)': ('Map', None, 0xAE, None), + 'Boss Key (Ganons Castle)': ('GanonBossKey', True, 0x9A, None), + 'Compass (Deku Tree)': ('Compass', False, 0x9B, None), + 'Compass (Dodongos Cavern)': ('Compass', False, 0x9C, None), + 'Compass (Jabu Jabus Belly)': ('Compass', False, 0x9D, None), + 'Compass (Forest Temple)': ('Compass', False, 0x9E, None), + 'Compass (Fire Temple)': ('Compass', False, 0x9F, None), + 'Compass (Water Temple)': ('Compass', False, 0xA0, None), + 'Compass (Spirit Temple)': ('Compass', False, 0xA1, None), + 'Compass (Shadow Temple)': ('Compass', False, 0xA2, None), + 'Compass (Bottom of the Well)': ('Compass', False, 0xA3, None), + 'Compass (Ice Cavern)': ('Compass', False, 0xA4, None), + 'Map (Deku Tree)': ('Map', False, 0xA5, None), + 'Map (Dodongos Cavern)': ('Map', False, 0xA6, None), + 'Map (Jabu Jabus Belly)': ('Map', False, 0xA7, None), + 'Map (Forest Temple)': ('Map', False, 0xA8, None), + 'Map (Fire Temple)': ('Map', False, 0xA9, None), + 'Map (Water Temple)': ('Map', False, 0xAA, None), + 'Map (Spirit Temple)': ('Map', False, 0xAB, None), + 'Map (Shadow Temple)': ('Map', False, 0xAC, None), + 'Map (Bottom of the Well)': ('Map', False, 0xAD, None), + 'Map (Ice Cavern)': ('Map', False, 0xAE, None), 'Small Key (Forest Temple)': ('SmallKey', True, 0xAF, {'progressive': float('Inf')}), 'Small Key (Fire Temple)': ('SmallKey', True, 0xB0, {'progressive': float('Inf')}), 'Small Key (Water Temple)': ('SmallKey', True, 0xB1, {'progressive': float('Inf')}), 'Small Key (Spirit Temple)': ('SmallKey', True, 0xB2, {'progressive': float('Inf')}), 'Small Key (Shadow Temple)': ('SmallKey', True, 0xB3, {'progressive': float('Inf')}), 'Small Key (Bottom of the Well)': ('SmallKey', True, 0xB4, {'progressive': float('Inf')}), - 'Small Key (Gerudo Training Ground)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}), - 'Small Key (Thieves Hideout)': ('HideoutSmallKey',True, 0xB6, {'progressive': float('Inf')}), + 'Small Key (Gerudo Training Ground)': ('SmallKey', True, 0xB5, {'progressive': float('Inf')}), + 'Small Key (Thieves Hideout)': ('HideoutSmallKey', True, 0xB6, {'progressive': float('Inf')}), 'Small Key (Ganons Castle)': ('SmallKey', True, 0xB7, {'progressive': float('Inf')}), - 'Double Defense': ('Item', True, 0xB8, None), - 'Magic Bean Pack': ('Item', True, 0xC9, None), + 'Double Defense': ('Item', None, 0xB8, None), + 'Buy Magic Bean': ('Item', True, 0x16, {'alias': ('Magic Bean', 10), 'progressive': 10}), + 'Magic Bean Pack': ('Item', True, 0xC9, {'alias': ('Magic Bean', 10), 'progressive': 10}), 'Triforce Piece': ('Item', True, 0xCA, {'progressive': float('Inf')}), - 'Zeldas Letter': ('Item', True, 0x0B, None), + 'Zeldas Letter': ('Item', True, 0x0B, {'trade': True}), 'Time Travel': ('Event', True, None, None), 'Scarecrow Song': ('Event', True, None, None), 'Triforce': ('Event', True, None, None), @@ -224,6 +224,7 @@ def dungeonitem(self) -> bool: 'Bugs': ('Drop', True, None, None), 'Big Poe': ('Drop', True, None, None), 'Bombchu Drop': ('Drop', True, None, None), + 'Deku Shield Drop': ('Drop', True, None, None), # Consumable refills defined mostly to placate 'starting with' options 'Arrows': ('Refill', None, None, None), @@ -306,15 +307,25 @@ def dungeonitem(self) -> bool: 'item_id': 0x65, }), + 'Small Key Ring (Forest Temple)': ('SmallKey', True, 0xCB, {'alias': ('Small Key (Forest Temple)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Fire Temple)': ('SmallKey', True, 0xCC, {'alias': ('Small Key (Fire Temple)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Water Temple)': ('SmallKey', True, 0xCD, {'alias': ('Small Key (Water Temple)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Spirit Temple)': ('SmallKey', True, 0xCE, {'alias': ('Small Key (Spirit Temple)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Shadow Temple)': ('SmallKey', True, 0xCF, {'alias': ('Small Key (Shadow Temple)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Bottom of the Well)': ('SmallKey', True, 0xD0, {'alias': ('Small Key (Bottom of the Well)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Gerudo Training Ground)': ('SmallKey', True, 0xD1, {'alias': ('Small Key (Gerudo Training Ground)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Thieves Hideout)': ('HideoutSmallKey', True, 0xD2, {'alias': ('Small Key (Thieves Hideout)', 10), 'progressive': float('Inf')}), + 'Small Key Ring (Ganons Castle)': ('SmallKey', True, 0xD3, {'alias': ('Small Key (Ganons Castle)', 10), 'progressive': float('Inf')}), + 'Buy Deku Nut (5)': ('Shop', True, 0x00, {'object': 0x00BB, 'price': 15}), 'Buy Arrows (30)': ('Shop', False, 0x01, {'object': 0x00D8, 'price': 60}), 'Buy Arrows (50)': ('Shop', False, 0x02, {'object': 0x00D8, 'price': 90}), - 'Buy Bombs (5) [25]': ('Shop', False, 0x03, {'object': 0x00CE, 'price': 25}), + 'Buy Bombs (5) for 25 Rupees': ('Shop', False, 0x03, {'object': 0x00CE, 'price': 25}), 'Buy Deku Nut (10)': ('Shop', True, 0x04, {'object': 0x00BB, 'price': 30}), 'Buy Deku Stick (1)': ('Shop', True, 0x05, {'object': 0x00C7, 'price': 10}), 'Buy Bombs (10)': ('Shop', False, 0x06, {'object': 0x00CE, 'price': 50}), 'Buy Fish': ('Shop', True, 0x07, {'object': 0x00F4, 'price': 200}), - 'Buy Red Potion [30]': ('Shop', False, 0x08, {'object': 0x00EB, 'price': 30}), + 'Buy Red Potion for 30 Rupees': ('Shop', False, 0x08, {'object': 0x00EB, 'price': 30}), 'Buy Green Potion': ('Shop', False, 0x09, {'object': 0x00EB, 'price': 30}), 'Buy Blue Potion': ('Shop', False, 0x0A, {'object': 0x00EB, 'price': 100}), 'Buy Hylian Shield': ('Shop', True, 0x0C, {'object': 0x00DC, 'price': 80}), @@ -334,9 +345,9 @@ def dungeonitem(self) -> bool: 'Buy Arrows (10)': ('Shop', False, 0x2C, {'object': 0x00D8, 'price': 20}), 'Buy Bombs (20)': ('Shop', False, 0x2D, {'object': 0x00CE, 'price': 80}), 'Buy Bombs (30)': ('Shop', False, 0x2E, {'object': 0x00CE, 'price': 120}), - 'Buy Bombs (5) [35]': ('Shop', False, 0x2F, {'object': 0x00CE, 'price': 35}), - 'Buy Red Potion [40]': ('Shop', False, 0x30, {'object': 0x00EB, 'price': 40}), - 'Buy Red Potion [50]': ('Shop', False, 0x31, {'object': 0x00EB, 'price': 50}), + 'Buy Bombs (5) for 35 Rupees': ('Shop', False, 0x2F, {'object': 0x00CE, 'price': 35}), + 'Buy Red Potion for 40 Rupees': ('Shop', False, 0x30, {'object': 0x00EB, 'price': 40}), + 'Buy Red Potion for 50 Rupees': ('Shop', False, 0x31, {'object': 0x00EB, 'price': 50}), 'Kokiri Emerald': ('DungeonReward', True, None, { diff --git a/worlds/oot/LICENSE b/worlds/oot/LICENSE index c10701c6c923..f4e4d2fba6cf 100644 --- a/worlds/oot/LICENSE +++ b/worlds/oot/LICENSE @@ -1,7 +1,7 @@ MIT License Copyright (c) 2017 Amazing Ampharos -Copyright (c) 2021 espeon65536 +Copyright (c) 2022 espeon65536 Credit for contributions to Junglechief87 on this and to LLCoolDave and KevinCathcart for their work on the Zelda Lttp Entrance Randomizer which diff --git a/worlds/oot/Location.py b/worlds/oot/Location.py index a8b659e70097..e2b0e52e4dc5 100644 --- a/worlds/oot/Location.py +++ b/worlds/oot/Location.py @@ -1,14 +1,37 @@ +from enum import Enum from .LocationList import location_table from BaseClasses import Location location_id_offset = 67000 -location_name_to_id = {name: (location_id_offset + index) for (index, name) in enumerate(location_table) - if location_table[name][0] not in ['Boss', 'Event', 'Drop', 'HintStone', 'Hint']} +locnames_pre_70 = { + "Gift from Sages", + "ZR Frogs Zeldas Lullaby", + "ZR Frogs Eponas Song", + "ZR Frogs Sarias Song", + "ZR Frogs Suns Song", + "ZR Frogs Song of Time", +} +loctypes_70 = {'Beehive', 'Pot', 'FlyingPot', 'Crate', 'SmallCrate', 'RupeeTower', 'Freestanding', 'ActorOverride'} +new_name_order = sorted(location_table.keys(), + key=lambda name: 2 if location_table[name][0] in loctypes_70 + else 1 if name in locnames_pre_70 + else 0) + +location_name_to_id = {name: (location_id_offset + index) for (index, name) in enumerate(new_name_order) + if location_table[name][0] not in {'Boss', 'Event', 'Drop', 'HintStone', 'Hint'}} + +class DisableType(Enum): + ENABLED = 0 + PENDING = 1 + DISABLED = 2 class OOTLocation(Location): game: str = 'Ocarina of Time' - def __init__(self, player, name='', code=None, address1=None, address2=None, default=None, type='Chest', scene=None, parent=None, filter_tags=None, internal=False): + def __init__(self, player, name='', code=None, address1=None, address2=None, + default=None, type='Chest', scene=None, parent=None, filter_tags=None, + internal=False, vanilla_item=None + ): super(OOTLocation, self).__init__(player, name, code, parent) self.address1 = address1 self.address2 = address2 @@ -16,15 +39,21 @@ def __init__(self, player, name='', code=None, address1=None, address2=None, def self.type = type self.scene = scene self.internal = internal + self.vanilla_item = vanilla_item if filter_tags is None: self.filter_tags = None else: self.filter_tags = list(filter_tags) self.never = False # no idea what this does + self.disabled = DisableType.ENABLED if type == 'Event': self.event = True + @property + def dungeon(self): + return self.parent_region.dungeon + def LocationFactory(locations, player: int): ret = [] @@ -42,7 +71,10 @@ def LocationFactory(locations, player: int): if addresses is None: addresses = (None, None) address1, address2 = addresses - ret.append(OOTLocation(player, match_location, location_name_to_id.get(match_location, None), address1, address2, default, type, scene, filter_tags=filter_tags)) + ret.append(OOTLocation(player, match_location, + location_name_to_id.get(match_location, None), + address1, address2, default, type, scene, + filter_tags=filter_tags, vanilla_item=vanilla_item)) else: raise KeyError('Unknown Location: %s', location) diff --git a/worlds/oot/LocationList.py b/worlds/oot/LocationList.py index 5a965ea08a1d..3f4602c428c1 100644 --- a/worlds/oot/LocationList.py +++ b/worlds/oot/LocationList.py @@ -28,861 +28,2007 @@ def shop_address(shop_id, shelf_id): # The order of this table is reflected in the spoiler's list of locations (except Hints aren't included). # Within a section, the order of types is: gifts/freestanding/chests, Deku Scrubs, Cows, Gold Skulltulas, Shops. -# NPC Scrubs are on the overworld, while GrottoNPC is a special handler for Grottos +# Scrubs are on the overworld, while GrottoScrub is a special handler for Grottos # Grottos scrubs are the same scene and actor, so we use a unique grotto ID for the scene # Note that the scene for skulltulas is not the actual scene the token appears in # Rather, it is the index of the grouping used when storing skulltula collection # For example, zora river, zora's domain, and zora fountain are all a single 'scene' for skulltulas -# Location: Type Scene Default Addresses Vanilla Item Categories +# For pot/crate/freestanding locations, the Default variable contains a tuple of the format (Room ID, Scene Setup, Actor ID) where: +# Room ID - The room index in the scene +# Scene Setup - The scene setup that the location exists in. This is a number 0-3: 0=Child Day, 1=Child Night, 2=Adult Day, 3=Adult Night. +# Actor ID - The position of the actor in the actor table. +# The default variable can also be a list of such tuples in the case that multiple scene setups contain the same locations to be shuffled together. + +# Note: for ActorOverride locations, the "Addresses" variable is in the form ([addresses], [bytes]) where addresses is a list of memory locations in ROM to be updated, and bytes is the data that will be written to that location + +# Location: Type Scene Default Addresses Vanilla Item Categories location_table = OrderedDict([ ## Dungeon Rewards - ("Links Pocket", ("Boss", None, None, None, 'Light Medallion', None)), - ("Queen Gohma", ("Boss", None, 0x6C, (0x0CA315F, 0x2079571), 'Kokiri Emerald', None)), - ("King Dodongo", ("Boss", None, 0x6D, (0x0CA30DF, 0x2223309), 'Goron Ruby', None)), - ("Barinade", ("Boss", None, 0x6E, (0x0CA36EB, 0x2113C19), 'Zora Sapphire', None)), - ("Phantom Ganon", ("Boss", None, 0x66, (0x0CA3D07, 0x0D4ED79), 'Forest Medallion', None)), - ("Volvagia", ("Boss", None, 0x67, (0x0CA3D93, 0x0D10135), 'Fire Medallion', None)), - ("Morpha", ("Boss", None, 0x68, (0x0CA3E1F, 0x0D5A3A9), 'Water Medallion', None)), - ("Bongo Bongo", ("Boss", None, 0x6A, (0x0CA3F43, 0x0D13E19), 'Shadow Medallion', None)), - ("Twinrova", ("Boss", None, 0x69, (0x0CA3EB3, 0x0D39FF1), 'Spirit Medallion', None)), - ("Ganon", ("Event", None, None, None, 'Triforce', None)), + ("Links Pocket", ("Boss", None, None, None, 'Light Medallion', None)), + ("Queen Gohma", ("Boss", None, 0x6C, (0x0CA315F, 0x2079571), 'Kokiri Emerald', None)), + ("King Dodongo", ("Boss", None, 0x6D, (0x0CA30DF, 0x2223309), 'Goron Ruby', None)), + ("Barinade", ("Boss", None, 0x6E, (0x0CA36EB, 0x2113C19), 'Zora Sapphire', None)), + ("Phantom Ganon", ("Boss", None, 0x66, (0x0CA3D07, 0x0D4ED79), 'Forest Medallion', None)), + ("Volvagia", ("Boss", None, 0x67, (0x0CA3D93, 0x0D10135), 'Fire Medallion', None)), + ("Morpha", ("Boss", None, 0x68, (0x0CA3E1F, 0x0D5A3A9), 'Water Medallion', None)), + ("Bongo Bongo", ("Boss", None, 0x6A, (0x0CA3F43, 0x0D13E19), 'Shadow Medallion', None)), + ("Twinrova", ("Boss", None, 0x69, (0x0CA3EB3, 0x0D39FF1), 'Spirit Medallion', None)), + ("Ganon", ("Event", None, None, None, 'Triforce', None)), + ("Gift from Sages", ("Cutscene", 0xFF, 0x03, None, None, None)), ## Songs - ("Song from Impa", ("Song", 0xFF, 0x26, (0x2E8E925, 0x2E8E925), 'Zeldas Lullaby', ("Hyrule Castle", "Market", "Songs"))), - ("Song from Malon", ("Song", 0xFF, 0x27, (0x0D7EB53, 0x0D7EBCF), 'Eponas Song', ("Lon Lon Ranch", "Songs",))), - ("Song from Saria", ("Song", 0xFF, 0x28, (0x20B1DB1, 0x20B1DB1), 'Sarias Song', ("Sacred Forest Meadow", "Forest", "Songs"))), - ("Song from Royal Familys Tomb", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))), - ("Song from Ocarina of Time", ("Song", 0xFF, 0x2A, (0x252FC89, 0x252FC89), 'Song of Time', ("Hyrule Field", "Songs", "Need Spiritual Stones"))), - ("Song from Windmill", ("Song", 0xFF, 0x2B, (0x0E42C07, 0x0E42B8B), 'Song of Storms', ("Kakariko Village", "Kakariko", "Songs"))), - ("Sheik in Forest", ("Song", 0xFF, 0x20, (0x20B0809, 0x20B0809), 'Minuet of Forest', ("Sacred Forest Meadow", "Forest", "Songs"))), - ("Sheik in Crater", ("Song", 0xFF, 0x21, (0x224D7F1, 0x224D7F1), 'Bolero of Fire', ("Death Mountain Crater", "Death Mountain", "Songs"))), - ("Sheik in Ice Cavern", ("Song", 0xFF, 0x22, (0x2BEC889, 0x2BEC889), 'Serenade of Water', ("Ice Cavern", "Songs",))), - ("Sheik at Colossus", ("Song", 0xFF, 0x23, (0x218C57D, 0x218C57D), 'Requiem of Spirit', ("Desert Colossus", "Songs",))), - ("Sheik in Kakariko", ("Song", 0xFF, 0x24, (0x2000FE1, 0x2000FE1), 'Nocturne of Shadow', ("Kakariko Village", "Kakariko", "Songs"))), - ("Sheik at Temple", ("Song", 0xFF, 0x25, (0x2531329, 0x2531329), 'Prelude of Light', ("Temple of Time", "Market", "Songs"))), + ("Song from Impa", ("Song", 0xFF, 0x26, (0x2E8E925, 0x2E8E925), 'Zeldas Lullaby', ("Hyrule Castle", "Market", "Songs"))), + ("Song from Malon", ("Song", 0xFF, 0x27, (0x0D7EB53, 0x0D7EBCF), 'Eponas Song', ("Lon Lon Ranch", "Songs",))), + ("Song from Saria", ("Song", 0xFF, 0x28, (0x20B1DB1, 0x20B1DB1), 'Sarias Song', ("Sacred Forest Meadow", "Forest", "Songs"))), + ("Song from Royal Familys Tomb", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))), + ("Song from Ocarina of Time", ("Song", 0xFF, 0x2A, (0x252FC89, 0x252FC89), 'Song of Time', ("Hyrule Field", "Songs", "Need Spiritual Stones"))), + ("Song from Windmill", ("Song", 0xFF, 0x2B, (0x0E42C07, 0x0E42B8B), 'Song of Storms', ("Kakariko Village", "Kakariko", "Songs"))), + ("Sheik in Forest", ("Song", 0xFF, 0x20, (0x20B0809, 0x20B0809), 'Minuet of Forest', ("Sacred Forest Meadow", "Forest", "Songs"))), + ("Sheik in Crater", ("Song", 0xFF, 0x21, (0x224D7F1, 0x224D7F1), 'Bolero of Fire', ("Death Mountain Crater", "Death Mountain", "Songs"))), + ("Sheik in Ice Cavern", ("Song", 0xFF, 0x22, (0x2BEC889, 0x2BEC889), 'Serenade of Water', ("Ice Cavern", "Songs",))), + ("Sheik at Colossus", ("Song", 0xFF, 0x23, (0x218C57D, 0x218C57D), 'Requiem of Spirit', ("Desert Colossus", "Songs",))), + ("Sheik in Kakariko", ("Song", 0xFF, 0x24, (0x2000FE1, 0x2000FE1), 'Nocturne of Shadow', ("Kakariko Village", "Kakariko", "Songs"))), + ("Sheik at Temple", ("Song", 0xFF, 0x25, (0x2531329, 0x2531329), 'Prelude of Light', ("Temple of Time", "Market", "Songs"))), ## Overworld # Kokiri Forest - ("KF Midos Top Left Chest", ("Chest", 0x28, 0x00, None, 'Rupees (5)', ("Kokiri Forest", "Forest",))), - ("KF Midos Top Right Chest", ("Chest", 0x28, 0x01, None, 'Rupees (5)', ("Kokiri Forest", "Forest",))), - ("KF Midos Bottom Left Chest", ("Chest", 0x28, 0x02, None, 'Rupee (1)', ("Kokiri Forest", "Forest",))), - ("KF Midos Bottom Right Chest", ("Chest", 0x28, 0x03, None, 'Recovery Heart', ("Kokiri Forest", "Forest",))), - ("KF Kokiri Sword Chest", ("Chest", 0x55, 0x00, None, 'Kokiri Sword', ("Kokiri Forest", "Forest",))), - ("KF Storms Grotto Chest", ("Chest", 0x3E, 0x0C, None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos"))), - ("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("Kokiri Forest", "Forest", "Cow", "Minigames"))), - ("KF GS Know It All House", ("GS Token", 0x0C, 0x02, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), - ("KF GS Bean Patch", ("GS Token", 0x0C, 0x01, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), - ("KF GS House of Twins", ("GS Token", 0x0C, 0x04, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), - ("KF Shop Item 1", ("Shop", 0x2D, 0x30, (shop_address(0, 0), None), 'Buy Deku Shield', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 2", ("Shop", 0x2D, 0x31, (shop_address(0, 1), None), 'Buy Deku Nut (5)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 3", ("Shop", 0x2D, 0x32, (shop_address(0, 2), None), 'Buy Deku Nut (10)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 4", ("Shop", 0x2D, 0x33, (shop_address(0, 3), None), 'Buy Deku Stick (1)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 5", ("Shop", 0x2D, 0x34, (shop_address(0, 4), None), 'Buy Deku Seeds (30)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 6", ("Shop", 0x2D, 0x35, (shop_address(0, 5), None), 'Buy Arrows (10)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 7", ("Shop", 0x2D, 0x36, (shop_address(0, 6), None), 'Buy Arrows (30)', ("Kokiri Forest", "Forest", "Shops"))), - ("KF Shop Item 8", ("Shop", 0x2D, 0x37, (shop_address(0, 7), None), 'Buy Heart', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Midos Top Left Chest", ("Chest", 0x28, 0x00, None, 'Rupees (5)', ("Kokiri Forest", "Forest"))), + ("KF Midos Top Right Chest", ("Chest", 0x28, 0x01, None, 'Rupees (5)', ("Kokiri Forest", "Forest"))), + ("KF Midos Bottom Left Chest", ("Chest", 0x28, 0x02, None, 'Rupee (1)', ("Kokiri Forest", "Forest"))), + ("KF Midos Bottom Right Chest", ("Chest", 0x28, 0x03, None, 'Recovery Heart', ("Kokiri Forest", "Forest"))), + ("KF Kokiri Sword Chest", ("Chest", 0x55, 0x00, None, 'Kokiri Sword', ("Kokiri Forest", "Forest"))), + ("KF Storms Grotto Chest", ("Chest", 0x3E, 0x0C, None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos"))), + ("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("Kokiri Forest", "Forest", "Cow", "Minigames"))), + ("KF GS Know It All House", ("GS Token", 0x0C, 0x02, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas"))), + ("KF GS Bean Patch", ("GS Token", 0x0C, 0x01, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas"))), + ("KF GS House of Twins", ("GS Token", 0x0C, 0x04, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas"))), + ("KF Shop Item 1", ("Shop", 0x2D, 0x30, (shop_address(0, 0), None), 'Buy Deku Shield', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 2", ("Shop", 0x2D, 0x31, (shop_address(0, 1), None), 'Buy Deku Nut (5)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 3", ("Shop", 0x2D, 0x32, (shop_address(0, 2), None), 'Buy Deku Nut (10)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 4", ("Shop", 0x2D, 0x33, (shop_address(0, 3), None), 'Buy Deku Stick (1)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 5", ("Shop", 0x2D, 0x34, (shop_address(0, 4), None), 'Buy Deku Seeds (30)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 6", ("Shop", 0x2D, 0x35, (shop_address(0, 5), None), 'Buy Arrows (10)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 7", ("Shop", 0x2D, 0x36, (shop_address(0, 6), None), 'Buy Arrows (30)', ("Kokiri Forest", "Forest", "Shops"))), + ("KF Shop Item 8", ("Shop", 0x2D, 0x37, (shop_address(0, 7), None), 'Buy Heart', ("Kokiri Forest", "Forest", "Shops"))), + # Kokiri Forest Freestanding + ("KF Behind Midos Blue Rupee", ("Freestanding", 0x55, (0,0,6), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Boulder Maze Blue Rupee 1", ("Freestanding", 0x55, (2,0,1), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Boulder Maze Blue Rupee 2", ("Freestanding", 0x55, (2,0,2), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF End of Bridge Blue Rupee", ("Freestanding", 0x55, (0,0,7), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Top of Sarias Recovery Heart 1", ("Freestanding", 0x55, (0,0,20), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Top of Sarias Recovery Heart 2", ("Freestanding", 0x55, (0,0,21), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Top of Sarias Recovery Heart 3", ("Freestanding", 0x55, (0,0,22), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Bean Platform Green Rupee 1", ("RupeeTower", 0x55, [(0,2,0x40), + (0,3,0x40)], ([0x020816A0, 0x2081910], None), 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Green Rupee 2", ("RupeeTower", 0x55, [(0,2,0x41), + (0,3,0x41)], None, 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Green Rupee 3", ("RupeeTower", 0x55, [(0,2,0x42), + (0,3,0x42)], None, 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Green Rupee 4", ("RupeeTower", 0x55, [(0,2,0x43), + (0,3,0x43)], None, 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Green Rupee 5", ("RupeeTower", 0x55, [(0,2,0x44), + (0,3,0x44)], None, 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Green Rupee 6", ("RupeeTower", 0x55, [(0,2,0x45), + (0,3,0x45)], None, 'Rupee (1)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Bean Platform Red Rupee", ("RupeeTower", 0x55, [(0,2,0x46), + (0,3,0x46)], None, 'Rupees (20)', ("Kokiri Forest", "Forest", "RupeeTower"))), + ("KF Grass Near Ramp Green Rupee 1", ("Freestanding", 0x55, (0,0,2), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Grass Near Ramp Green Rupee 2", ("Freestanding", 0x55, (0,0,3), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Grass Near Midos Green Rupee 1", ("Freestanding", 0x55, (0,0,4), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Grass Near Midos Green Rupee 2", ("Freestanding", 0x55, (0,0,5), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Sarias House Recovery Heart 1", ("Freestanding", 0x29, (0,0,3), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Sarias House Recovery Heart 2", ("Freestanding", 0x29, (0,0,4), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Sarias House Recovery Heart 3", ("Freestanding", 0x29, (0,0,5), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Sarias House Recovery Heart 4", ("Freestanding", 0x29, (0,0,6), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Freestanding"))), + ("KF Shop Blue Rupee", ("ActorOverride",0x2D, 0x01, ([0x02587098], [ + 0x00, 0x15, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06 ]), 'Rupees (5)', ("Kokiri Forest", "Forest", "Freestanding"))), + # Kokiri Forest Pots + ("KF Links House Pot", ("Pot", 0x34, (0,0,3), None, 'Recovery Heart', ("Kokiri Forest", "Forest", "Pot"))), + ("KF Know it All House Pot 1", ("Pot", 0x26, (0,0,7), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Pot"))), + ("KF Know it All House Pot 2", ("Pot", 0x26, (0,0,8), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Pot"))), + ("KF House of Twins Pot 1", ("Pot", 0x27, (0,0,3), None, 'Rupee (1)', ("Kokiri Forest", "Forest", "Pot"))), + ("KF House of Twins Pot 2", ("Pot", 0x27, (0,0,4), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Pot"))), + # Kokiri Forest Beehives + ("KF Storms Grotto Beehive 1", ("Beehive", 0x3E, (0,0, 0x48 + (0x0C * 2)), None, 'Rupees (5)', ("Kokiri Forest", "Forest", "Grottos", "Beehive"))), + ("KF Storms Grotto Beehive 2", ("Beehive", 0x3E, (0,0, 0x49 + (0x0C * 2)), None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos", "Beehive"))), # Lost Woods - ("LW Gift from Saria", ("Cutscene", 0xFF, 0x02, None, 'Ocarina', ("the Lost Woods", "Forest",))), - ("LW Ocarina Memory Game", ("NPC", 0x5B, 0x76, None, 'Piece of Heart', ("the Lost Woods", "Forest", "Minigames"))), - ("LW Target in Woods", ("NPC", 0x5B, 0x60, None, 'Slingshot', ("the Lost Woods", "Forest",))), - ("LW Near Shortcuts Grotto Chest", ("Chest", 0x3E, 0x14, None, 'Rupees (5)', ("the Lost Woods", "Forest", "Grottos"))), - ("Deku Theater Skull Mask", ("NPC", 0x3E, 0x77, None, 'Deku Stick Capacity', ("the Lost Woods", "Forest", "Grottos"))), - ("Deku Theater Mask of Truth", ("NPC", 0x3E, 0x7A, None, 'Deku Nut Capacity', ("the Lost Woods", "Forest", "Need Spiritual Stones", "Grottos"))), - ("LW Skull Kid", ("NPC", 0x5B, 0x3E, None, 'Piece of Heart', ("the Lost Woods", "Forest",))), - ("LW Deku Scrub Near Bridge", ("NPC", 0x5B, 0x77, None, 'Deku Stick Capacity', ("the Lost Woods", "Forest", "Deku Scrub", "Deku Scrub Upgrades"))), - ("LW Deku Scrub Near Deku Theater Left", ("NPC", 0x5B, 0x31, None, 'Buy Deku Stick (1)', ("the Lost Woods", "Forest", "Deku Scrub"))), - ("LW Deku Scrub Near Deku Theater Right", ("NPC", 0x5B, 0x30, None, 'Buy Deku Nut (5)', ("the Lost Woods", "Forest", "Deku Scrub"))), - ("LW Deku Scrub Grotto Front", ("GrottoNPC", 0xF5, 0x79, None, 'Deku Nut Capacity', ("the Lost Woods", "Forest", "Deku Scrub", "Deku Scrub Upgrades", "Grottos"))), - ("LW Deku Scrub Grotto Rear", ("GrottoNPC", 0xF5, 0x33, None, 'Buy Deku Seeds (30)', ("the Lost Woods", "Forest", "Deku Scrub", "Grottos"))), - ("LW GS Bean Patch Near Bridge", ("GS Token", 0x0D, 0x01, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas",))), - ("LW GS Bean Patch Near Theater", ("GS Token", 0x0D, 0x02, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas",))), - ("LW GS Above Theater", ("GS Token", 0x0D, 0x04, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas",))), + ("LW Gift from Saria", ("Cutscene", 0xFF, 0x02, None, 'Ocarina', ("the Lost Woods", "Forest"))), + ("LW Ocarina Memory Game", ("NPC", 0x5B, 0x76, None, 'Piece of Heart', ("the Lost Woods", "Forest", "Minigames"))), + ("LW Target in Woods", ("NPC", 0x5B, 0x60, None, 'Slingshot', ("the Lost Woods", "Forest"))), + ("LW Near Shortcuts Grotto Chest", ("Chest", 0x3E, 0x14, None, 'Rupees (5)', ("the Lost Woods", "Forest", "Grottos"))), + ("Deku Theater Skull Mask", ("NPC", 0x3E, 0x77, None, 'Deku Stick Capacity', ("the Lost Woods", "Forest", "Grottos"))), + ("Deku Theater Mask of Truth", ("NPC", 0x3E, 0x7A, None, 'Deku Nut Capacity', ("the Lost Woods", "Forest", "Need Spiritual Stones", "Grottos"))), + ("LW Skull Kid", ("NPC", 0x5B, 0x3E, None, 'Piece of Heart', ("the Lost Woods", "Forest"))), + ("LW Deku Scrub Near Bridge", ("Scrub", 0x5B, 0x77, None, 'Deku Stick Capacity', ("the Lost Woods", "Forest", "Deku Scrub", "Deku Scrub Upgrades"))), + ("LW Deku Scrub Near Deku Theater Left", ("Scrub", 0x5B, 0x31, None, 'Buy Deku Stick (1)', ("the Lost Woods", "Forest", "Deku Scrub"))), + ("LW Deku Scrub Near Deku Theater Right", ("Scrub", 0x5B, 0x30, None, 'Buy Deku Nut (5)', ("the Lost Woods", "Forest", "Deku Scrub"))), + ("LW Deku Scrub Grotto Front", ("GrottoScrub", 0xF5, 0x79, None, 'Deku Nut Capacity', ("the Lost Woods", "Forest", "Deku Scrub", "Deku Scrub Upgrades", "Grottos"))), + ("LW Deku Scrub Grotto Rear", ("GrottoScrub", 0xF5, 0x33, None, 'Buy Deku Seeds (30)', ("the Lost Woods", "Forest", "Deku Scrub", "Grottos"))), + ("LW GS Bean Patch Near Bridge", ("GS Token", 0x0D, 0x01, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas"))), + ("LW GS Bean Patch Near Theater", ("GS Token", 0x0D, 0x02, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas"))), + ("LW GS Above Theater", ("GS Token", 0x0D, 0x04, None, 'Gold Skulltula Token', ("the Lost Woods", "Skulltulas"))), + # Lost Woods Freestanding + ("LW Under Boulder Blue Rupee", ("Freestanding", 0x5B, [(7,0,5), (7,2,2)], None, 'Rupees (5)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 1", ("Freestanding", 0x5B, (3,0,5), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 2", ("Freestanding", 0x5B, (3,0,6), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Shortcut Green Rupee", ("Freestanding", 0x5B, (3,0,7), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 3", ("Freestanding", 0x5B, (3,0,8), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 4", ("Freestanding", 0x5B, (3,0,9), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 5", ("Freestanding", 0x5B, (3,0,10), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 6", ("Freestanding", 0x5B, (3,0,11), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + ("LW Underwater Green Rupee 7", ("Freestanding", 0x5B, (3,0,12), None, 'Rupee (1)', ("the Lost Woods", "Forest", "Freestanding"))), + # Lost Woods Beehives + ("LW Near Shortcuts Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x14 * 2)), None, 'Rupees (5)', ("the Lost Woods", "Forest", "Grottos", "Beehive"))), + ("LW Near Shortcuts Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x14 * 2)), None, 'Rupees (20)', ("the Lost Woods", "Forest", "Grottos", "Beehive"))), + ("LW Scrubs Grotto Beehive", ("Beehive", 0x3E, (6,0,0x44 + (0x15 * 2)), None, 'Rupees (20)', ("the Lost Woods", "Forest", "Grottos", "Beehive"))), # Sacred Forest Meadow - ("SFM Wolfos Grotto Chest", ("Chest", 0x3E, 0x11, None, 'Rupees (50)', ("Sacred Forest Meadow", "Forest", "Grottos"))), - ("SFM Deku Scrub Grotto Front", ("GrottoNPC", 0xEE, 0x3A, None, 'Buy Green Potion', ("Sacred Forest Meadow", "Forest", "Deku Scrub", "Grottos"))), - ("SFM Deku Scrub Grotto Rear", ("GrottoNPC", 0xEE, 0x39, None, 'Buy Red Potion [30]', ("Sacred Forest Meadow", "Forest", "Deku Scrub", "Grottos"))), - ("SFM GS", ("GS Token", 0x0D, 0x08, None, 'Gold Skulltula Token', ("Sacred Forest Meadow", "Skulltulas",))), + ("SFM Wolfos Grotto Chest", ("Chest", 0x3E, 0x11, None, 'Rupees (50)', ("Sacred Forest Meadow", "Forest", "Grottos"))), + ("SFM Deku Scrub Grotto Front", ("GrottoScrub", 0xEE, 0x3A, None, 'Buy Green Potion', ("Sacred Forest Meadow", "Forest", "Deku Scrub", "Grottos"))), + ("SFM Deku Scrub Grotto Rear", ("GrottoScrub", 0xEE, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Sacred Forest Meadow", "Forest", "Deku Scrub", "Grottos"))), + ("SFM GS", ("GS Token", 0x0D, 0x08, None, 'Gold Skulltula Token', ("Sacred Forest Meadow", "Skulltulas"))), + # Sacred Forest Meadow Beehives + ("SFM Storms Grotto Beehive", ("Beehive", 0x3E, (9,0,0x43 + (0x0E * 2)), None, 'Rupees (20)', ("Sacred Forest Meadow", "Forest", "Grottos", "Beehive"))), # Hyrule Field - ("HF Ocarina of Time Item", ("NPC", 0x51, 0x0C, None, 'Ocarina', ("Hyrule Field", "Need Spiritual Stones",))), - ("HF Near Market Grotto Chest", ("Chest", 0x3E, 0x00, None, 'Rupees (5)', ("Hyrule Field", "Grottos",))), - ("HF Tektite Grotto Freestanding PoH", ("Collectable", 0x3E, 0x01, None, 'Piece of Heart', ("Hyrule Field", "Grottos",))), - ("HF Southeast Grotto Chest", ("Chest", 0x3E, 0x02, None, 'Rupees (20)', ("Hyrule Field", "Grottos",))), - ("HF Open Grotto Chest", ("Chest", 0x3E, 0x03, None, 'Rupees (5)', ("Hyrule Field", "Grottos",))), - ("HF Deku Scrub Grotto", ("GrottoNPC", 0xE6, 0x3E, None, 'Piece of Heart', ("Hyrule Field", "Deku Scrub", "Deku Scrub Upgrades", "Grottos"))), - ("HF Cow Grotto Cow", ("NPC", 0x3E, 0x16, None, 'Milk', ("Hyrule Field", "Cow", "Grottos"))), - ("HF GS Cow Grotto", ("GS Token", 0x0A, 0x01, None, 'Gold Skulltula Token', ("Hyrule Field", "Skulltulas", "Grottos"))), - ("HF GS Near Kak Grotto", ("GS Token", 0x0A, 0x02, None, 'Gold Skulltula Token', ("Hyrule Field", "Skulltulas", "Grottos"))), + ("HF Ocarina of Time Item", ("NPC", 0x51, 0x0C, None, 'Ocarina', ("Hyrule Field", "Need Spiritual Stones"))), + ("HF Near Market Grotto Chest", ("Chest", 0x3E, 0x00, None, 'Rupees (5)', ("Hyrule Field", "Grottos"))), + ("HF Tektite Grotto Freestanding PoH", ("Collectable", 0x3E, 0x01, None, 'Piece of Heart', ("Hyrule Field", "Grottos"))), + ("HF Southeast Grotto Chest", ("Chest", 0x3E, 0x02, None, 'Rupees (20)', ("Hyrule Field", "Grottos"))), + ("HF Open Grotto Chest", ("Chest", 0x3E, 0x03, None, 'Rupees (5)', ("Hyrule Field", "Grottos"))), + ("HF Deku Scrub Grotto", ("GrottoScrub", 0xE6, 0x3E, None, 'Piece of Heart', ("Hyrule Field", "Deku Scrub", "Deku Scrub Upgrades", "Grottos"))), + ("HF Cow Grotto Cow", ("NPC", 0x3E, 0x16, None, 'Milk', ("Hyrule Field", "Cow", "Grottos"))), + ("HF GS Cow Grotto", ("GS Token", 0x0A, 0x01, None, 'Gold Skulltula Token', ("Hyrule Field", "Skulltulas", "Grottos"))), + ("HF GS Near Kak Grotto", ("GS Token", 0x0A, 0x02, None, 'Gold Skulltula Token', ("Hyrule Field", "Skulltulas", "Grottos"))), + # Hyrule Field Pots + ("HF Cow Grotto Pot 1", ("Pot", 0x3E, (4,0,6), None, 'Deku Nuts (5)', ("Hyrule Field", "Grottos", "Pot"))), + ("HF Cow Grotto Pot 2", ("Pot", 0x3E, (4,0,8), None, 'Rupees (5)', ("Hyrule Field", "Grottos", "Pot"))), + # Hyrule Field Beehives + ("HF Near Market Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x00 * 2)), None, 'Rupees (5)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Near Market Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x00 * 2)), None, 'Rupees (20)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Open Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x03 * 2)), None, 'Rupees (5)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Open Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x03 * 2)), None, 'Rupees (20)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Southeast Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x02 * 2)), None, 'Rupees (5)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Southeast Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x02 * 2)), None, 'Rupees (20)', ("Hyrule Field", "Grottos", "Beehive"))), + ("HF Inside Fence Grotto Beehive", ("Beehive", 0x3E, (1,0,0x42 + (0x06 * 2)), None, 'Rupees (20)', ("Hyrule Field", "Grottos", "Beehive"))), # Market - ("Market Shooting Gallery Reward", ("NPC", 0x42, 0x60, None, 'Slingshot', ("the Market", "Market", "Minigames"))), - ("Market Bombchu Bowling First Prize", ("NPC", 0x4B, 0x34, None, 'Bomb Bag', ("the Market", "Market", "Minigames"))), - ("Market Bombchu Bowling Second Prize", ("NPC", 0x4B, 0x3E, None, 'Piece of Heart', ("the Market", "Market", "Minigames"))), - ("Market Bombchu Bowling Bombchus", ("Event", 0x4B, None, None, 'Bombchu Drop', ("the Market", "Market", "Minigames"))), - ("Market Lost Dog", ("NPC", 0x35, 0x3E, None, 'Piece of Heart', ("the Market", "Market",))), - ("Market Treasure Chest Game Reward", ("Chest", 0x10, 0x0A, None, 'Piece of Heart (Treasure Chest Game)', ("the Market", "Market", "Minigames"))), - ("Market 10 Big Poes", ("NPC", 0x4D, 0x0F, None, 'Bottle', ("the Market", "Hyrule Castle",))), - ("Market GS Guard House", ("GS Token", 0x0E, 0x08, None, 'Gold Skulltula Token', ("the Market", "Skulltulas",))), - ("Market Bazaar Item 1", ("Shop", 0x2C, 0x30, (shop_address(4, 0), None), 'Buy Hylian Shield', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 2", ("Shop", 0x2C, 0x31, (shop_address(4, 1), None), 'Buy Bombs (5) [35]', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 3", ("Shop", 0x2C, 0x32, (shop_address(4, 2), None), 'Buy Deku Nut (5)', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 4", ("Shop", 0x2C, 0x33, (shop_address(4, 3), None), 'Buy Heart', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 5", ("Shop", 0x2C, 0x34, (shop_address(4, 4), None), 'Buy Arrows (10)', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 6", ("Shop", 0x2C, 0x35, (shop_address(4, 5), None), 'Buy Arrows (50)', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 7", ("Shop", 0x2C, 0x36, (shop_address(4, 6), None), 'Buy Deku Stick (1)', ("the Market", "Market", "Shops"))), - ("Market Bazaar Item 8", ("Shop", 0x2C, 0x37, (shop_address(4, 7), None), 'Buy Arrows (30)', ("the Market", "Market", "Shops"))), - - ("Market Potion Shop Item 1", ("Shop", 0x31, 0x30, (shop_address(3, 0), None), 'Buy Green Potion', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 2", ("Shop", 0x31, 0x31, (shop_address(3, 1), None), 'Buy Blue Fire', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 3", ("Shop", 0x31, 0x32, (shop_address(3, 2), None), 'Buy Red Potion [30]', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 4", ("Shop", 0x31, 0x33, (shop_address(3, 3), None), 'Buy Fairy\'s Spirit', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 5", ("Shop", 0x31, 0x34, (shop_address(3, 4), None), 'Buy Deku Nut (5)', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 6", ("Shop", 0x31, 0x35, (shop_address(3, 5), None), 'Buy Bottle Bug', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 7", ("Shop", 0x31, 0x36, (shop_address(3, 6), None), 'Buy Poe', ("the Market", "Market", "Shops"))), - ("Market Potion Shop Item 8", ("Shop", 0x31, 0x37, (shop_address(3, 7), None), 'Buy Fish', ("the Market", "Market", "Shops"))), - - ("Market Bombchu Shop Item 1", ("Shop", 0x32, 0x30, (shop_address(2, 0), None), 'Buy Bombchu (5)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 2", ("Shop", 0x32, 0x31, (shop_address(2, 1), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 3", ("Shop", 0x32, 0x32, (shop_address(2, 2), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 4", ("Shop", 0x32, 0x33, (shop_address(2, 3), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 5", ("Shop", 0x32, 0x34, (shop_address(2, 4), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 6", ("Shop", 0x32, 0x35, (shop_address(2, 5), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 7", ("Shop", 0x32, 0x36, (shop_address(2, 6), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), - ("Market Bombchu Shop Item 8", ("Shop", 0x32, 0x37, (shop_address(2, 7), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), - - ("ToT Light Arrows Cutscene", ("Cutscene", 0xFF, 0x01, None, 'Light Arrows', ("Temple of Time", "Market",))), + ("Market Shooting Gallery Reward", ("NPC", 0x42, 0x60, None, 'Slingshot', ("the Market", "Market", "Minigames"))), + ("Market Bombchu Bowling First Prize", ("NPC", 0x4B, 0x34, None, 'Bomb Bag', ("the Market", "Market", "Minigames"))), + ("Market Bombchu Bowling Second Prize", ("NPC", 0x4B, 0x3E, None, 'Piece of Heart', ("the Market", "Market", "Minigames"))), + ("Market Bombchu Bowling Bombchus", ("Event", 0x4B, None, None, 'Bombchu Drop', ("the Market", "Market", "Minigames"))), + ("Market Lost Dog", ("NPC", 0x35, 0x3E, None, 'Piece of Heart', ("the Market", "Market"))), + ("Market Treasure Chest Game Reward", ("Chest", 0x10, 0x0A, None, 'Piece of Heart (Treasure Chest Game)', ("the Market", "Market", "Minigames"))), + ("Market 10 Big Poes", ("NPC", 0x4D, 0x0F, None, 'Bottle', ("the Market", "Hyrule Castle"))), + ("Market GS Guard House", ("GS Token", 0x0E, 0x08, None, 'Gold Skulltula Token', ("the Market", "Skulltulas"))), + ("Market Bazaar Item 1", ("Shop", 0x2C, 0x30, (shop_address(4, 0), None), 'Buy Hylian Shield', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 2", ("Shop", 0x2C, 0x31, (shop_address(4, 1), None), 'Buy Bombs (5) for 35 Rupees', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 3", ("Shop", 0x2C, 0x32, (shop_address(4, 2), None), 'Buy Deku Nut (5)', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 4", ("Shop", 0x2C, 0x33, (shop_address(4, 3), None), 'Buy Heart', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 5", ("Shop", 0x2C, 0x34, (shop_address(4, 4), None), 'Buy Arrows (10)', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 6", ("Shop", 0x2C, 0x35, (shop_address(4, 5), None), 'Buy Arrows (50)', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 7", ("Shop", 0x2C, 0x36, (shop_address(4, 6), None), 'Buy Deku Stick (1)', ("the Market", "Market", "Shops"))), + ("Market Bazaar Item 8", ("Shop", 0x2C, 0x37, (shop_address(4, 7), None), 'Buy Arrows (30)', ("the Market", "Market", "Shops"))), + + ("Market Potion Shop Item 1", ("Shop", 0x31, 0x30, (shop_address(3, 0), None), 'Buy Green Potion', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 2", ("Shop", 0x31, 0x31, (shop_address(3, 1), None), 'Buy Blue Fire', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 3", ("Shop", 0x31, 0x32, (shop_address(3, 2), None), 'Buy Red Potion for 30 Rupees', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 4", ("Shop", 0x31, 0x33, (shop_address(3, 3), None), 'Buy Fairy\'s Spirit', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 5", ("Shop", 0x31, 0x34, (shop_address(3, 4), None), 'Buy Deku Nut (5)', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 6", ("Shop", 0x31, 0x35, (shop_address(3, 5), None), 'Buy Bottle Bug', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 7", ("Shop", 0x31, 0x36, (shop_address(3, 6), None), 'Buy Poe', ("the Market", "Market", "Shops"))), + ("Market Potion Shop Item 8", ("Shop", 0x31, 0x37, (shop_address(3, 7), None), 'Buy Fish', ("the Market", "Market", "Shops"))), + + ("Market Bombchu Shop Item 1", ("Shop", 0x32, 0x30, (shop_address(2, 0), None), 'Buy Bombchu (5)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 2", ("Shop", 0x32, 0x31, (shop_address(2, 1), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 3", ("Shop", 0x32, 0x32, (shop_address(2, 2), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 4", ("Shop", 0x32, 0x33, (shop_address(2, 3), None), 'Buy Bombchu (10)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 5", ("Shop", 0x32, 0x34, (shop_address(2, 4), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 6", ("Shop", 0x32, 0x35, (shop_address(2, 5), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 7", ("Shop", 0x32, 0x36, (shop_address(2, 6), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), + ("Market Bombchu Shop Item 8", ("Shop", 0x32, 0x37, (shop_address(2, 7), None), 'Buy Bombchu (20)', ("the Market", "Market", "Shops"))), + + ("ToT Light Arrows Cutscene", ("Cutscene", 0xFF, 0x01, None, 'Light Arrows', ("Temple of Time", "Market"))), + + # Market Pots/Crates + ("Market Night Red Rupee Crate", ("Crate", 0x21, (0,0,23), None, 'Rupees (20)', ("the Market", "Market", "Crate"))), + ("Market Night Green Rupee Crate 1", ("Crate", 0x21, (0,0,24), None, 'Rupee (1)', ("the Market", "Market", "Crate"))), + ("Market Night Green Rupee Crate 2", ("Crate", 0x21, (0,0,25), None, 'Rupee (1)', ("the Market", "Market", "Crate"))), + ("Market Night Green Rupee Crate 3", ("Crate", 0x21, (0,0,26), None, 'Rupee (1)', ("the Market", "Market", "Crate"))), + ("Market Dog Lady House Crate", ("Crate", 0x35, (0,0,3), None, 'Rupees (5)', ("Market", "Market", "Crate"))), + ("Market Guard House Child Crate", ("Crate", 0x4D, (0,0,6), None, 'Rupee (1)', ("the Market", "Market", "Crate"))), + ("Market Guard House Child Pot 1", ("Pot", 0x4D, (0,0,9), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 2", ("Pot", 0x4D, (0,0,10), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 3", ("Pot", 0x4D, (0,0,11), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 4", ("Pot", 0x4D, (0,0,12), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 5", ("Pot", 0x4D, (0,0,13), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 6", ("Pot", 0x4D, (0,0,14), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 7", ("Pot", 0x4D, (0,0,15), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 8", ("Pot", 0x4D, (0,0,16), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 9", ("Pot", 0x4D, (0,0,17), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 10", ("Pot", 0x4D, (0,0,18), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 11", ("Pot", 0x4D, (0,0,19), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 12", ("Pot", 0x4D, (0,0,20), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 13", ("Pot", 0x4D, (0,0,21), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 14", ("Pot", 0x4D, (0,0,22), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 15", ("Pot", 0x4D, (0,0,23), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 16", ("Pot", 0x4D, (0,0,24), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 17", ("Pot", 0x4D, (0,0,25), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 18", ("Pot", 0x4D, (0,0,26), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 19", ("Pot", 0x4D, (0,0,27), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 20", ("Pot", 0x4D, (0,0,28), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 21", ("Pot", 0x4D, (0,0,29), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 22", ("Pot", 0x4D, (0,0,30), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 23", ("Pot", 0x4D, (0,0,31), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 24", ("Pot", 0x4D, (0,0,32), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 25", ("Pot", 0x4D, (0,0,33), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 26", ("Pot", 0x4D, (0,0,34), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 27", ("Pot", 0x4D, (0,0,35), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 28", ("Pot", 0x4D, (0,0,36), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 29", ("Pot", 0x4D, (0,0,37), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 30", ("Pot", 0x4D, (0,0,38), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 31", ("Pot", 0x4D, (0,0,39), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 32", ("Pot", 0x4D, (0,0,40), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 33", ("Pot", 0x4D, (0,0,41), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 34", ("Pot", 0x4D, (0,0,42), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 35", ("Pot", 0x4D, (0,0,43), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 36", ("Pot", 0x4D, (0,0,44), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 37", ("Pot", 0x4D, (0,0,45), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 38", ("Pot", 0x4D, (0,0,46), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 39", ("Pot", 0x4D, (0,0,47), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 40", ("Pot", 0x4D, (0,0,48), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 41", ("Pot", 0x4D, (0,0,49), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 42", ("Pot", 0x4D, (0,0,50), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 43", ("Pot", 0x4D, (0,0,51), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Child Pot 44", ("Pot", 0x4D, (0,0,52), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 1", ("Pot", 0x4D, (0,2,2), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 2", ("Pot", 0x4D, (0,2,4), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 3", ("Pot", 0x4D, (0,2,5), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 4", ("Pot", 0x4D, (0,2,7), None, 'Rupees (20)', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 5", ("Pot", 0x4D, (0,2,8), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 6", ("Pot", 0x4D, (0,2,10), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Guard House Adult Pot 7", ("Pot", 0x4D, (0,2,12), None, 'Rupee (1)', ("the Market", "Market", "Pot"))), + ("Market Man in Green House Pot 1", ("Pot", 0x2B, (0,0,3), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Man in Green House Pot 2", ("Pot", 0x2B, (0,0,4), None, 'Recovery Heart', ("the Market", "Market", "Pot"))), + ("Market Man in Green House Pot 3", ("Pot", 0x2B, (0,0,5), None, 'Rupees (5)', ("the Market", "Market", "Pot"))), # Hyrule Castle - ("HC Malon Egg", ("NPC", 0x5F, 0x47, None, 'Weird Egg', ("Hyrule Castle", "Market",))), - ("HC Zeldas Letter", ("NPC", 0x4A, 0x0B, None, 'Zeldas Letter', ("Hyrule Castle", "Market",))), - ("HC Great Fairy Reward", ("Cutscene", 0xFF, 0x11, None, 'Dins Fire', ("Hyrule Castle", "Market", "Fairies"))), - ("HC GS Tree", ("GS Token", 0x0E, 0x04, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas",))), - ("HC GS Storms Grotto", ("GS Token", 0x0E, 0x02, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas", "Grottos"))), + ("HC Malon Egg", ("NPC", 0x5F, 0x47, None, 'Weird Egg', ("Hyrule Castle", "Market"))), + ("HC Zeldas Letter", ("NPC", 0x4A, 0x0B, None, 'Zeldas Letter', ("Hyrule Castle", "Market"))), + ("HC Great Fairy Reward", ("Cutscene", 0xFF, 0x11, None, 'Dins Fire', ("Hyrule Castle", "Market", "Fairies"))), + ("HC GS Tree", ("GS Token", 0x0E, 0x04, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas"))), + ("HC GS Storms Grotto", ("GS Token", 0x0E, 0x02, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas", "Grottos"))), + ("HC Storms Grotto Pot 1", ("Pot", 0x3E, (8,0,7), None, 'Rupees (20)', ("Hyrule Castle", "Grottos", "Pot"))), + ("HC Storms Grotto Pot 2", ("Pot", 0x3E, (8,0,8), None, 'Bombs (5)', ("Hyrule Castle", "Grottos", "Pot"))), + ("HC Storms Grotto Pot 3", ("Pot", 0x3E, (8,0,10), None, 'Arrows (5)', ("Hyrule Castle", "Grottos", "Pot"))), + ("HC Storms Grotto Pot 4", ("Pot", 0x3E, (8,0,12), None, 'Deku Nuts (5)', ("Hyrule Castle", "Grottos", "Pot"))), # Lon Lon Ranch - ("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Minigames"))), - ("LLR Freestanding PoH", ("Collectable", 0x4C, 0x01, None, 'Piece of Heart', ("Lon Lon Ranch",))), - ("LLR Deku Scrub Grotto Left", ("GrottoNPC", 0xFC, 0x30, None, 'Buy Deku Nut (5)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), - ("LLR Deku Scrub Grotto Center", ("GrottoNPC", 0xFC, 0x33, None, 'Buy Deku Seeds (30)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), - ("LLR Deku Scrub Grotto Right", ("GrottoNPC", 0xFC, 0x37, None, 'Buy Bombs (5) [35]', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), - ("LLR Stables Left Cow", ("NPC", 0x36, 0x15, None, 'Milk', ("Lon Lon Ranch", "Cow",))), - ("LLR Stables Right Cow", ("NPC", 0x36, 0x16, None, 'Milk', ("Lon Lon Ranch", "Cow",))), - ("LLR Tower Left Cow", ("NPC", 0x4C, 0x16, None, 'Milk', ("Lon Lon Ranch", "Cow",))), - ("LLR Tower Right Cow", ("NPC", 0x4C, 0x15, None, 'Milk', ("Lon Lon Ranch", "Cow",))), - ("LLR GS House Window", ("GS Token", 0x0B, 0x04, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas",))), - ("LLR GS Tree", ("GS Token", 0x0B, 0x08, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas",))), - ("LLR GS Rain Shed", ("GS Token", 0x0B, 0x02, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas",))), - ("LLR GS Back Wall", ("GS Token", 0x0B, 0x01, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas",))), + ("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Minigames"))), + ("LLR Freestanding PoH", ("Collectable", 0x4C, 0x01, None, 'Piece of Heart', ("Lon Lon Ranch"))), + ("LLR Deku Scrub Grotto Left", ("GrottoScrub", 0xFC, 0x30, None, 'Buy Deku Nut (5)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), + ("LLR Deku Scrub Grotto Center", ("GrottoScrub", 0xFC, 0x33, None, 'Buy Deku Seeds (30)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), + ("LLR Deku Scrub Grotto Right", ("GrottoScrub", 0xFC, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), + ("LLR Stables Left Cow", ("NPC", 0x36, 0x15, None, 'Milk', ("Lon Lon Ranch", "Cow"))), + ("LLR Stables Right Cow", ("NPC", 0x36, 0x16, None, 'Milk', ("Lon Lon Ranch", "Cow"))), + ("LLR Tower Left Cow", ("NPC", 0x4C, 0x16, None, 'Milk', ("Lon Lon Ranch", "Cow"))), + ("LLR Tower Right Cow", ("NPC", 0x4C, 0x15, None, 'Milk', ("Lon Lon Ranch", "Cow"))), + ("LLR GS House Window", ("GS Token", 0x0B, 0x04, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas"))), + ("LLR GS Tree", ("GS Token", 0x0B, 0x08, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas"))), + ("LLR GS Rain Shed", ("GS Token", 0x0B, 0x02, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas"))), + ("LLR GS Back Wall", ("GS Token", 0x0B, 0x01, None, 'Gold Skulltula Token', ("Lon Lon Ranch", "Skulltulas"))), + # Lon Lon Ranch Pots/Crates + ("LLR Front Pot 1", ("Pot", 0x63, [(0,0,6), + (0,1,5)], None, 'Recovery Heart', ("Lon Lon Ranch", "Pot"))), + ("LLR Front Pot 2", ("Pot", 0x63, [(0,0,4), + (0,1,3)], None, 'Recovery Heart', ("Lon Lon Ranch", "Pot"))), + ("LLR Front Pot 3", ("Pot", 0x63, [(0,0,7), + (0,1,6)], None, 'Rupee (1)', ("Lon Lon Ranch", "Pot"))), + ("LLR Front Pot 4", ("Pot", 0x63, [(0,0,5), + (0,1,4)], None, 'Rupee (1)', ("Lon Lon Ranch", "Pot"))), + ("LLR Rain Shed Pot 1", ("Pot", 0x63, [(0,0,8), + (0,1,7)], None, 'Recovery Heart', ("Lon Lon Ranch", "Pot"))), + ("LLR Rain Shed Pot 2", ("Pot", 0x63, [(0,0,9), + (0,1,8)], None, 'Recovery Heart', ("Lon Lon Ranch", "Pot"))), + ("LLR Rain Shed Pot 3", ("Pot", 0x63, [(0,0,10), + (0,1,9)], None, 'Recovery Heart', ("Lon Lon Ranch", "Pot"))), + ("LLR Talons House Pot 1", ("Pot", 0x4C, (2,0,1), None, 'Rupees (5)', ("Lon Lon Ranch", "Pot"))), + ("LLR Talons House Pot 2", ("Pot", 0x4C, (2,0,2), None, 'Rupees (5)', ("Lon Lon Ranch", "Pot"))), + ("LLR Talons House Pot 3", ("Pot", 0x4C, (2,0,3), None, 'Rupees (5)', ("Lon Lon Ranch", "Pot"))), + ("LLR Child Crate", ("Crate", 0x63, [(0,0,25), + (0,1,30)], None, 'Rupee (1)', ("Lon Lon Ranch", "Crate"))), + # Lon Lon Ranch Beehives + ("LLR Grotto Beehive", ("Beehive", 0x3E, (12,0,0x44 + (0x1C * 2)), None, 'Rupees (20)', ("Lon Lon Ranch", "Grottos", "Beehive"))), # Kakariko - ("Kak Anju as Child", ("NPC", 0x52, 0x0F, None, 'Bottle', ("Kakariko Village", "Kakariko", "Minigames"))), - ("Kak Anju as Adult", ("NPC", 0x52, 0x1D, None, 'Pocket Egg', ("Kakariko Village", "Kakariko",))), - ("Kak Impas House Freestanding PoH", ("Collectable", 0x37, 0x01, None, 'Piece of Heart', ("Kakariko Village", "Kakariko",))), - ("Kak Windmill Freestanding PoH", ("Collectable", 0x48, 0x01, None, 'Piece of Heart', ("Kakariko Village", "Kakariko",))), - ("Kak Man on Roof", ("NPC", 0x52, 0x3E, None, 'Piece of Heart', ("Kakariko Village", "Kakariko",))), - ("Kak Open Grotto Chest", ("Chest", 0x3E, 0x08, None, 'Rupees (20)', ("Kakariko Village", "Kakariko", "Grottos"))), - ("Kak Redead Grotto Chest", ("Chest", 0x3E, 0x0A, None, 'Rupees (200)', ("Kakariko Village", "Kakariko", "Grottos"))), - ("Kak Shooting Gallery Reward", ("NPC", 0x42, 0x30, None, 'Bow', ("Kakariko Village", "Kakariko", "Minigames"))), - ("Kak 10 Gold Skulltula Reward", ("NPC", 0x50, 0x45, None, 'Progressive Wallet', ("Kakariko Village", "Kakariko", "Skulltula House"))), - ("Kak 20 Gold Skulltula Reward", ("NPC", 0x50, 0x39, None, 'Stone of Agony', ("Kakariko Village", "Kakariko", "Skulltula House"))), - ("Kak 30 Gold Skulltula Reward", ("NPC", 0x50, 0x46, None, 'Progressive Wallet', ("Kakariko Village", "Kakariko", "Skulltula House"))), - ("Kak 40 Gold Skulltula Reward", ("NPC", 0x50, 0x03, None, 'Bombchus (10)', ("Kakariko Village", "Kakariko", "Skulltula House"))), - ("Kak 50 Gold Skulltula Reward", ("NPC", 0x50, 0x3E, None, 'Piece of Heart', ("Kakariko Village", "Kakariko", "Skulltula House"))), - ("Kak Impas House Cow", ("NPC", 0x37, 0x15, None, 'Milk', ("Kakariko Village", "Kakariko", "Cow"))), - ("Kak GS Tree", ("GS Token", 0x10, 0x20, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak GS Guards House", ("GS Token", 0x10, 0x02, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak GS Watchtower", ("GS Token", 0x10, 0x04, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak GS Skulltula House", ("GS Token", 0x10, 0x10, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak GS House Under Construction", ("GS Token", 0x10, 0x08, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak GS Above Impas House", ("GS Token", 0x10, 0x40, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas",))), - ("Kak Bazaar Item 1", ("Shop", 0x2C, 0x38, (shop_address(5, 0), None), 'Buy Hylian Shield', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 2", ("Shop", 0x2C, 0x39, (shop_address(5, 1), None), 'Buy Bombs (5) [35]', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 3", ("Shop", 0x2C, 0x3A, (shop_address(5, 2), None), 'Buy Deku Nut (5)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 4", ("Shop", 0x2C, 0x3B, (shop_address(5, 3), None), 'Buy Heart', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 5", ("Shop", 0x2C, 0x3D, (shop_address(5, 4), None), 'Buy Arrows (10)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 6", ("Shop", 0x2C, 0x3E, (shop_address(5, 5), None), 'Buy Arrows (50)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 7", ("Shop", 0x2C, 0x3F, (shop_address(5, 6), None), 'Buy Deku Stick (1)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Bazaar Item 8", ("Shop", 0x2C, 0x40, (shop_address(5, 7), None), 'Buy Arrows (30)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 1", ("Shop", 0x30, 0x30, (shop_address(1, 0), None), 'Buy Deku Nut (5)', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 2", ("Shop", 0x30, 0x31, (shop_address(1, 1), None), 'Buy Fish', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 3", ("Shop", 0x30, 0x32, (shop_address(1, 2), None), 'Buy Red Potion [30]', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 4", ("Shop", 0x30, 0x33, (shop_address(1, 3), None), 'Buy Green Potion', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 5", ("Shop", 0x30, 0x34, (shop_address(1, 4), None), 'Buy Blue Fire', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 6", ("Shop", 0x30, 0x35, (shop_address(1, 5), None), 'Buy Bottle Bug', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 7", ("Shop", 0x30, 0x36, (shop_address(1, 6), None), 'Buy Poe', ("Kakariko Village", "Kakariko", "Shops"))), - ("Kak Potion Shop Item 8", ("Shop", 0x30, 0x37, (shop_address(1, 7), None), 'Buy Fairy\'s Spirit', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Anju as Child", ("NPC", 0x52, 0x0F, None, 'Bottle', ("Kakariko Village", "Kakariko", "Minigames"))), + ("Kak Anju as Adult", ("NPC", 0x52, 0x1D, None, 'Pocket Egg', ("Kakariko Village", "Kakariko"))), + ("Kak Impas House Freestanding PoH", ("Collectable", 0x37, 0x01, None, 'Piece of Heart', ("Kakariko Village", "Kakariko"))), + ("Kak Windmill Freestanding PoH", ("Collectable", 0x48, 0x01, None, 'Piece of Heart', ("Kakariko Village", "Kakariko"))), + ("Kak Man on Roof", ("NPC", 0x52, 0x3E, None, 'Piece of Heart', ("Kakariko Village", "Kakariko"))), + ("Kak Open Grotto Chest", ("Chest", 0x3E, 0x08, None, 'Rupees (20)', ("Kakariko Village", "Kakariko", "Grottos"))), + ("Kak Redead Grotto Chest", ("Chest", 0x3E, 0x0A, None, 'Rupees (200)', ("Kakariko Village", "Kakariko", "Grottos"))), + ("Kak Shooting Gallery Reward", ("NPC", 0x42, 0x30, None, 'Bow', ("Kakariko Village", "Kakariko", "Minigames"))), + ("Kak 10 Gold Skulltula Reward", ("NPC", 0x50, 0x45, None, 'Progressive Wallet', ("Kakariko Village", "Kakariko", "Skulltula House"))), + ("Kak 20 Gold Skulltula Reward", ("NPC", 0x50, 0x39, None, 'Stone of Agony', ("Kakariko Village", "Kakariko", "Skulltula House"))), + ("Kak 30 Gold Skulltula Reward", ("NPC", 0x50, 0x46, None, 'Progressive Wallet', ("Kakariko Village", "Kakariko", "Skulltula House"))), + ("Kak 40 Gold Skulltula Reward", ("NPC", 0x50, 0x03, None, 'Bombchus (10)', ("Kakariko Village", "Kakariko", "Skulltula House"))), + ("Kak 50 Gold Skulltula Reward", ("NPC", 0x50, 0x3E, None, 'Piece of Heart', ("Kakariko Village", "Kakariko", "Skulltula House"))), + ("Kak Impas House Cow", ("NPC", 0x37, 0x15, None, 'Milk', ("Kakariko Village", "Kakariko", "Cow"))), + ("Kak GS Tree", ("GS Token", 0x10, 0x20, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak GS Near Gate Guard", ("GS Token", 0x10, 0x02, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak GS Watchtower", ("GS Token", 0x10, 0x04, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak GS Skulltula House", ("GS Token", 0x10, 0x10, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak GS House Under Construction", ("GS Token", 0x10, 0x08, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak GS Above Impas House", ("GS Token", 0x10, 0x40, None, 'Gold Skulltula Token', ("Kakariko Village", "Skulltulas"))), + ("Kak Bazaar Item 1", ("Shop", 0x2C, 0x38, (shop_address(5, 0), None), 'Buy Hylian Shield', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 2", ("Shop", 0x2C, 0x39, (shop_address(5, 1), None), 'Buy Bombs (5) for 35 Rupees', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 3", ("Shop", 0x2C, 0x3A, (shop_address(5, 2), None), 'Buy Deku Nut (5)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 4", ("Shop", 0x2C, 0x3B, (shop_address(5, 3), None), 'Buy Heart', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 5", ("Shop", 0x2C, 0x3D, (shop_address(5, 4), None), 'Buy Arrows (10)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 6", ("Shop", 0x2C, 0x3E, (shop_address(5, 5), None), 'Buy Arrows (50)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 7", ("Shop", 0x2C, 0x3F, (shop_address(5, 6), None), 'Buy Deku Stick (1)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Bazaar Item 8", ("Shop", 0x2C, 0x40, (shop_address(5, 7), None), 'Buy Arrows (30)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 1", ("Shop", 0x30, 0x30, (shop_address(1, 0), None), 'Buy Deku Nut (5)', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 2", ("Shop", 0x30, 0x31, (shop_address(1, 1), None), 'Buy Fish', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 3", ("Shop", 0x30, 0x32, (shop_address(1, 2), None), 'Buy Red Potion for 30 Rupees', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 4", ("Shop", 0x30, 0x33, (shop_address(1, 3), None), 'Buy Green Potion', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 5", ("Shop", 0x30, 0x34, (shop_address(1, 4), None), 'Buy Blue Fire', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 6", ("Shop", 0x30, 0x35, (shop_address(1, 5), None), 'Buy Bottle Bug', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 7", ("Shop", 0x30, 0x36, (shop_address(1, 6), None), 'Buy Poe', ("Kakariko Village", "Kakariko", "Shops"))), + ("Kak Potion Shop Item 8", ("Shop", 0x30, 0x37, (shop_address(1, 7), None), 'Buy Fairy\'s Spirit', ("Kakariko Village", "Kakariko", "Shops"))), + # Kak Pots + ("Kak Near Potion Shop Pot 1", ("Pot", 0x52, [(0,0,9),(0,1,8)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Potion Shop Pot 2", ("Pot", 0x52, [(0,0,10),(0,1,9)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Potion Shop Pot 3", ("Pot", 0x52, [(0,0,11),(0,1,10)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Impas House Pot 1", ("Pot", 0x52, [(0,0,12),(0,1,11)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Impas House Pot 2", ("Pot", 0x52, [(0,0,13),(0,1,12)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Impas House Pot 3", ("Pot", 0x52, [(0,0,14),(0,1,13)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Guards House Pot 1", ("Pot", 0x52, [(0,0,15),(0,1,14)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Guards House Pot 2", ("Pot", 0x52, [(0,0,16),(0,1,15)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Guards House Pot 3", ("Pot", 0x52, [(0,0,17),(0,1,16)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Odd Medicine Building Pot 1", ("Pot", 0x52, [(0,0,18),(0,1,17)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Near Odd Medicine Building Pot 2", ("Pot", 0x52, [(0,0,19),(0,1,18)], None, 'Recovery Heart', ("Kakariko Village", "Kakariko", "Pot"))), + ("Kak Adult Red Rupee Crate", ("Crate", 0x52, [(0,2,46),(0,3,43)], None, 'Rupees (20)', ("Kakariko Village", "Kakariko", "Crate"))), # update crate flags to not conflict w/ child pots. These move day/night + ("Kak Adult Arrows Crate", ("Crate", 0x52, [(0,2,37),(0,3,40)], None, 'Arrows (10)', ("Kakariko Village", "Kakariko", "Crate"))), # update crate flags to not conflict w/ child pots. These move day/night + # Kak Beehives + ("Kak Open Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x08 * 2)), None, 'Rupees (5)', ("Kakariko Village", "Kakariko", "Grottos", "Beehive"))), + ("Kak Open Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x08 * 2)), None, 'Rupees (20)', ("Kakariko Village", "Kakariko", "Grottos", "Beehive"))), # Graveyard - ("Graveyard Shield Grave Chest", ("Chest", 0x40, 0x00, None, 'Hylian Shield', ("the Graveyard", "Kakariko",))), - ("Graveyard Heart Piece Grave Chest", ("Chest", 0x3F, 0x00, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), - ("Graveyard Royal Familys Tomb Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko",))), - ("Graveyard Freestanding PoH", ("Collectable", 0x53, 0x04, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), - ("Graveyard Dampe Gravedigging Tour", ("Collectable", 0x53, 0x08, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), - ("Graveyard Hookshot Chest", ("Chest", 0x48, 0x00, None, 'Progressive Hookshot', ("the Graveyard", "Kakariko",))), - ("Graveyard Dampe Race Freestanding PoH", ("Collectable", 0x48, 0x07, None, 'Piece of Heart', ("the Graveyard", "Kakariko", "Minigames"))), - ("Graveyard GS Bean Patch", ("GS Token", 0x10, 0x01, None, 'Gold Skulltula Token', ("the Graveyard", "Skulltulas",))), - ("Graveyard GS Wall", ("GS Token", 0x10, 0x80, None, 'Gold Skulltula Token', ("the Graveyard", "Skulltulas",))), + ("Graveyard Shield Grave Chest", ("Chest", 0x40, 0x00, None, 'Hylian Shield', ("the Graveyard", "Kakariko"))), + ("Graveyard Heart Piece Grave Chest", ("Chest", 0x3F, 0x00, None, 'Piece of Heart', ("the Graveyard", "Kakariko"))), + ("Graveyard Royal Familys Tomb Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko"))), + ("Graveyard Freestanding PoH", ("Collectable", 0x53, 0x04, None, 'Piece of Heart', ("the Graveyard", "Kakariko"))), + ("Graveyard Dampe Gravedigging Tour", ("Collectable", 0x53, 0x08, None, 'Piece of Heart', ("the Graveyard", "Kakariko"))), + ("Graveyard Dampe Race Hookshot Chest", ("Chest", 0x48, 0x00, None, 'Progressive Hookshot', ("the Graveyard", "Kakariko"))), + ("Graveyard Dampe Race Freestanding PoH", ("Collectable", 0x48, 0x07, None, 'Piece of Heart', ("the Graveyard", "Kakariko", "Minigames"))), + ("Graveyard GS Bean Patch", ("GS Token", 0x10, 0x01, None, 'Gold Skulltula Token', ("the Graveyard", "Skulltulas"))), + ("Graveyard GS Wall", ("GS Token", 0x10, 0x80, None, 'Gold Skulltula Token', ("the Graveyard", "Skulltulas"))), + # Graveyard Freestanding + ("Graveyard Dampe Race Rupee 1", ("Freestanding", 0x48, (1,0,1), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 2", ("Freestanding", 0x48, (1,0,2), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 3", ("Freestanding", 0x48, (1,0,3), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 4", ("Freestanding", 0x48, (2,0,1), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 5", ("Freestanding", 0x48, (2,0,2), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 6", ("Freestanding", 0x48, (2,0,3), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 7", ("Freestanding", 0x48, (3,0,1), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + ("Graveyard Dampe Race Rupee 8", ("Freestanding", 0x48, (3,0,2), None, 'Rupee (1)', ("the Graveyard", "Kakariko", "Freestanding"))), + # Graveyard Pots/Crates + ("Graveyard Dampe Pot 1", ("Pot", 0x48, (0,0,1), None, 'Recovery Heart', ("the Graveyard", "Kakariko", "Pot"))), + ("Graveyard Dampe Pot 2", ("Pot", 0x48, (0,0,2), None, 'Deku Nuts (5)', ("the Graveyard", "Kakariko", "Pot"))), + ("Graveyard Dampe Pot 3", ("Pot", 0x48, (0,0,3), None, 'Bombs (5)', ("the Graveyard", "Kakariko", "Pot"))), + ("Graveyard Dampe Pot 4", ("Pot", 0x48, (0,0,4), None, 'Arrows (10)', ("the Graveyard", "Kakariko", "Pot"))), + ("Graveyard Dampe Pot 5", ("Pot", 0x48, (0,0,5), None, 'Rupees (20)', ("the Graveyard", "Kakariko", "Pot"))), + ("Graveyard Dampe Pot 6", ("Pot", 0x48, (0,0,6), None, 'Rupees (20)', ("the Graveyard", "Kakariko", "Pot"))), # Death Mountain Trail - ("DMT Freestanding PoH", ("Collectable", 0x60, 0x1E, None, 'Piece of Heart', ("Death Mountain Trail", "Death Mountain",))), - ("DMT Chest", ("Chest", 0x60, 0x01, None, 'Rupees (50)', ("Death Mountain Trail", "Death Mountain",))), - ("DMT Storms Grotto Chest", ("Chest", 0x3E, 0x17, None, 'Rupees (200)', ("Death Mountain Trail", "Death Mountain", "Grottos"))), - ("DMT Great Fairy Reward", ("Cutscene", 0xFF, 0x13, None, 'Magic Meter', ("Death Mountain Trail", "Death Mountain", "Fairies"))), - ("DMT Biggoron", ("NPC", 0x60, 0x57, None, 'Biggoron Sword', ("Death Mountain Trail", "Death Mountain",))), - ("DMT Cow Grotto Cow", ("NPC", 0x3E, 0x15, None, 'Milk', ("Death Mountain Trail", "Death Mountain", "Cow", "Grottos"))), - ("DMT GS Near Kak", ("GS Token", 0x0F, 0x04, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), - ("DMT GS Bean Patch", ("GS Token", 0x0F, 0x02, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), - ("DMT GS Above Dodongos Cavern", ("GS Token", 0x0F, 0x08, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), - ("DMT GS Falling Rocks Path", ("GS Token", 0x0F, 0x10, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), + ("DMT Freestanding PoH", ("Collectable", 0x60, 0x1E, None, 'Piece of Heart', ("Death Mountain Trail", "Death Mountain",))), + ("DMT Chest", ("Chest", 0x60, 0x01, None, 'Rupees (50)', ("Death Mountain Trail", "Death Mountain",))), + ("DMT Storms Grotto Chest", ("Chest", 0x3E, 0x17, None, 'Rupees (200)', ("Death Mountain Trail", "Death Mountain", "Grottos"))), + ("DMT Great Fairy Reward", ("Cutscene", 0xFF, 0x13, None, 'Magic Meter', ("Death Mountain Trail", "Death Mountain", "Fairies"))), + ("DMT Biggoron", ("NPC", 0x60, 0x57, None, 'Biggoron Sword', ("Death Mountain Trail", "Death Mountain",))), + ("DMT Cow Grotto Cow", ("NPC", 0x3E, 0x15, None, 'Milk', ("Death Mountain Trail", "Death Mountain", "Cow", "Grottos"))), + ("DMT GS Near Kak", ("GS Token", 0x0F, 0x04, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), + ("DMT GS Bean Patch", ("GS Token", 0x0F, 0x02, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), + ("DMT GS Above Dodongos Cavern", ("GS Token", 0x0F, 0x08, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), + ("DMT GS Falling Rocks Path", ("GS Token", 0x0F, 0x10, None, 'Gold Skulltula Token', ("Death Mountain Trail", "Skulltulas",))), + # Death Mountain Trail Freestanding + ("DMT Rock Red Rupee", ("Freestanding", 0x60, (0,0,2), None, 'Rupees (20)', ("Death Mountain Trail", "Death Mountain", "Freestanding"))), + ("DMT Rock Blue Rupee", ("Freestanding", 0x60, (0,0,3), None, 'Rupees (5)', ("Death Mountain Trail", "Death Mountain", "Freestanding"))), + ("DMT Cow Grotto Green Rupee 1", ("RupeeTower", 0x3E, (3,0,0x40), ([0x026D2098], None), 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Green Rupee 2", ("RupeeTower", 0x3E, (3,0,0x41), None, 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Green Rupee 3", ("RupeeTower", 0x3E, (3,0,0x42), None, 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Green Rupee 4", ("RupeeTower", 0x3E, (3,0,0x43), None, 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Green Rupee 5", ("RupeeTower", 0x3E, (3,0,0x44), None, 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Green Rupee 6", ("RupeeTower", 0x3E, (3,0,0x45), None, 'Rupee (1)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Red Rupee", ("RupeeTower", 0x3E, (3,0,0x46), None, 'Rupees (20)', ("Death Mountain Trail", "Death Mountain", "Grottos", "RupeeTower"))), + ("DMT Cow Grotto Recovery Heart 1", ("Freestanding", 0x3E, (3,0,7), None, 'Recovery Heart', ("Death Mountain Trail", "Death Mountain", "Grottos", "Freestanding"))), + ("DMT Cow Grotto Recovery Heart 2", ("Freestanding", 0x3E, (3,0,8), None, 'Recovery Heart', ("Death Mountain Trail", "Death Mountain", "Grottos", "Freestanding"))), + ("DMT Cow Grotto Recovery Heart 3", ("Freestanding", 0x3E, (3,0,9), None, 'Recovery Heart', ("Death Mountain Trail", "Death Mountain", "Grottos", "Freestanding"))), + ("DMT Cow Grotto Recovery Heart 4", ("Freestanding", 0x3E, (3,0,10), None, 'Recovery Heart', ("Death Mountain Trail", "Death Mountain", "Grottos", "Freestanding"))), + # Death Mountain Trial Beehives + ("DMT Cow Grotto Beehive", ("Beehive", 0x3E, (3,0,0x44 + (0x18 * 2)), None, 'Rupees (20)', ("Death Mountain Trail", "Death Mountain", "Grottos", "Beehive"))), + ("DMT Storms Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x17 * 2)), None, 'Rupees (5)', ("Death Mountain Trail", "Death Mountain", "Grottos", "Beehive"))), + ("DMT Storms Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x17 * 2)), None, 'Rupees (20)', ("Death Mountain Trail", "Death Mountain", "Grottos", "Beehive"))), # Goron City - ("GC Darunias Joy", ("NPC", 0x62, 0x54, None, 'Progressive Strength Upgrade', ("Goron City",))), - ("GC Pot Freestanding PoH", ("Collectable", 0x62, 0x1F, None, 'Piece of Heart', ("Goron City", "Goron City",))), - ("GC Rolling Goron as Child", ("NPC", 0x62, 0x34, None, 'Bomb Bag', ("Goron City",))), - ("GC Rolling Goron as Adult", ("NPC", 0x62, 0x2C, None, 'Goron Tunic', ("Goron City",))), - ("GC Medigoron", ("NPC", 0x62, 0x28, None, 'Giants Knife', ("Goron City",))), - ("GC Maze Left Chest", ("Chest", 0x62, 0x00, None, 'Rupees (200)', ("Goron City",))), - ("GC Maze Right Chest", ("Chest", 0x62, 0x01, None, 'Rupees (50)', ("Goron City",))), - ("GC Maze Center Chest", ("Chest", 0x62, 0x02, None, 'Rupees (50)', ("Goron City",))), - ("GC Deku Scrub Grotto Left", ("GrottoNPC", 0xFB, 0x30, None, 'Buy Deku Nut (5)', ("Goron City", "Deku Scrub", "Grottos"))), - ("GC Deku Scrub Grotto Center", ("GrottoNPC", 0xFB, 0x33, None, 'Buy Arrows (30)', ("Goron City", "Deku Scrub", "Grottos"))), - ("GC Deku Scrub Grotto Right", ("GrottoNPC", 0xFB, 0x37, None, 'Buy Bombs (5) [35]', ("Goron City", "Deku Scrub", "Grottos"))), - ("GC GS Center Platform", ("GS Token", 0x0F, 0x20, None, 'Gold Skulltula Token', ("Goron City", "Skulltulas",))), - ("GC GS Boulder Maze", ("GS Token", 0x0F, 0x40, None, 'Gold Skulltula Token', ("Goron City", "Skulltulas",))), - ("GC Shop Item 1", ("Shop", 0x2E, 0x30, (shop_address(8, 0), None), 'Buy Bombs (5) [25]', ("Goron City", "Shops",))), - ("GC Shop Item 2", ("Shop", 0x2E, 0x31, (shop_address(8, 1), None), 'Buy Bombs (10)', ("Goron City", "Shops",))), - ("GC Shop Item 3", ("Shop", 0x2E, 0x32, (shop_address(8, 2), None), 'Buy Bombs (20)', ("Goron City", "Shops",))), - ("GC Shop Item 4", ("Shop", 0x2E, 0x33, (shop_address(8, 3), None), 'Buy Bombs (30)', ("Goron City", "Shops",))), - ("GC Shop Item 5", ("Shop", 0x2E, 0x34, (shop_address(8, 4), None), 'Buy Goron Tunic', ("Goron City", "Shops",))), - ("GC Shop Item 6", ("Shop", 0x2E, 0x35, (shop_address(8, 5), None), 'Buy Heart', ("Goron City", "Shops",))), - ("GC Shop Item 7", ("Shop", 0x2E, 0x36, (shop_address(8, 6), None), 'Buy Red Potion [40]', ("Goron City", "Shops",))), - ("GC Shop Item 8", ("Shop", 0x2E, 0x37, (shop_address(8, 7), None), 'Buy Heart', ("Goron City", "Shops",))), + ("GC Darunias Joy", ("NPC", 0x62, 0x54, None, 'Progressive Strength Upgrade', ("Goron City"))), + ("GC Pot Freestanding PoH", ("Collectable", 0x62, 0x1F, None, 'Piece of Heart', ("Goron City", "Goron City"))), + ("GC Rolling Goron as Child", ("NPC", 0x62, 0x34, None, 'Bomb Bag', ("Goron City"))), + ("GC Rolling Goron as Adult", ("NPC", 0x62, 0x2C, None, 'Goron Tunic', ("Goron City"))), + ("GC Medigoron", ("NPC", 0x62, 0x28, None, 'Giants Knife', ("Goron City"))), + ("GC Maze Left Chest", ("Chest", 0x62, 0x00, None, 'Rupees (200)', ("Goron City"))), + ("GC Maze Right Chest", ("Chest", 0x62, 0x01, None, 'Rupees (50)', ("Goron City"))), + ("GC Maze Center Chest", ("Chest", 0x62, 0x02, None, 'Rupees (50)', ("Goron City"))), + ("GC Deku Scrub Grotto Left", ("GrottoScrub", 0xFB, 0x30, None, 'Buy Deku Nut (5)', ("Goron City", "Deku Scrub", "Grottos"))), + ("GC Deku Scrub Grotto Center", ("GrottoScrub", 0xFB, 0x33, None, 'Buy Arrows (30)', ("Goron City", "Deku Scrub", "Grottos"))), + ("GC Deku Scrub Grotto Right", ("GrottoScrub", 0xFB, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Goron City", "Deku Scrub", "Grottos"))), + ("GC GS Center Platform", ("GS Token", 0x0F, 0x20, None, 'Gold Skulltula Token', ("Goron City", "Skulltulas"))), + ("GC GS Boulder Maze", ("GS Token", 0x0F, 0x40, None, 'Gold Skulltula Token', ("Goron City", "Skulltulas"))), + ("GC Shop Item 1", ("Shop", 0x2E, 0x30, (shop_address(8, 0), None), 'Buy Bombs (5) for 25 Rupees', ("Goron City", "Shops"))), + ("GC Shop Item 2", ("Shop", 0x2E, 0x31, (shop_address(8, 1), None), 'Buy Bombs (10)', ("Goron City", "Shops"))), + ("GC Shop Item 3", ("Shop", 0x2E, 0x32, (shop_address(8, 2), None), 'Buy Bombs (20)', ("Goron City", "Shops"))), + ("GC Shop Item 4", ("Shop", 0x2E, 0x33, (shop_address(8, 3), None), 'Buy Bombs (30)', ("Goron City", "Shops"))), + ("GC Shop Item 5", ("Shop", 0x2E, 0x34, (shop_address(8, 4), None), 'Buy Goron Tunic', ("Goron City", "Shops"))), + ("GC Shop Item 6", ("Shop", 0x2E, 0x35, (shop_address(8, 5), None), 'Buy Heart', ("Goron City", "Shops"))), + ("GC Shop Item 7", ("Shop", 0x2E, 0x36, (shop_address(8, 6), None), 'Buy Red Potion for 40 Rupees', ("Goron City", "Shops"))), + ("GC Shop Item 8", ("Shop", 0x2E, 0x37, (shop_address(8, 7), None), 'Buy Heart', ("Goron City", "Shops"))), + ("GC Spinning Pot Bomb Drop 1", ("RupeeTower", 0x62, (3,0,0x41), ([0x22A82F4], None), 'Bombs (5)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot Bomb Drop 2", ("RupeeTower", 0x62, (3,0,0x42), None, 'Bombs (5)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot Bomb Drop 3", ("RupeeTower", 0x62, (3,0,0x43), None, 'Bombs (5)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot Rupee Drop 1", ("RupeeTower", 0x62, (3,0,0x44), None, 'Rupee (1)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot Rupee Drop 2", ("RupeeTower", 0x62, (3,0,0x45), None, 'Rupee (1)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot Rupee Drop 3", ("RupeeTower", 0x62, (3,0,0x46), None, 'Rupee (1)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot PoH Drop Rupee 1", ("RupeeTower", 0x62, (3,0,0x47), None, 'Rupees (20)', ("Goron City", "RupeeTower"))), + ("GC Spinning Pot PoH Drop Rupee 2", ("RupeeTower", 0x62, (3,0,0x48), None, 'Rupees (5)', ("Goron City", "RupeeTower"))), + # Goron City Pots. + ("GC Darunia Pot 1", ("Pot", 0x62, [(1,0,6),(1,2,2)], None, 'Deku Stick (1)', ("Goron City", "Pot"))), + ("GC Darunia Pot 2", ("Pot", 0x62, [(1,0,7),(1,2,3)], None, 'Rupee (1)', ("Goron City", "Pot"))), + ("GC Darunia Pot 3", ("Pot", 0x62, [(1,0,8),(1,2,4)], None, 'Deku Stick (1)', ("Goron City", "Pot"))), + ("GC Medigoron Pot", ("Pot", 0x62, [(2,0,4),(2,2,4)], None, 'Rupees (5)', ("Goron City", "Pot"))), + ("GC Lower Staircase Pot 1", ("Pot", 0x62, [(3,0,42),(3,2,9)], None, 'Deku Stick (1)', ("Goron City", "Pot"))), + ("GC Lower Staircase Pot 2", ("Pot", 0x62, [(3,0,46),(3,2,13)],None, 'Recovery Heart', ("Goron City", "Pot"))), + ("GC Upper Staircase Pot 1", ("Pot", 0x62, [(3,0,43),(3,2,10)],None, 'Rupees (5)', ("Goron City", "Pot"))), + ("GC Upper Staircase Pot 2", ("Pot", 0x62, [(3,0,44),(3,2,11)],None, 'Rupee (1)', ("Goron City", "Pot"))), + ("GC Upper Staircase Pot 3", ("Pot", 0x62, [(3,0,45),(3,2,12)],None, 'Rupees (5)', ("Goron City", "Pot"))), + ("GC Boulder Maze Crate", ("Crate", 0x62, [(0,0,50),(0,2,47)], None, 'Rupee (1)', ("Goron City", "Crate"))), + # Goron City Beehives + ("GC Grotto Beehive", ("Beehive", 0x3E, (12,0,0x44 + (0x1B * 2)), None, 'Rupees (20)', ("Goron City", "Grottos", "Beehive"))), # Death Mountain Crater - ("DMC Volcano Freestanding PoH", ("Collectable", 0x61, 0x08, None, 'Piece of Heart', ("Death Mountain Crater", "Death Mountain",))), - ("DMC Wall Freestanding PoH", ("Collectable", 0x61, 0x02, None, 'Piece of Heart', ("Death Mountain Crater", "Death Mountain",))), - ("DMC Upper Grotto Chest", ("Chest", 0x3E, 0x1A, None, 'Bombs (20)', ("Death Mountain Crater", "Death Mountain", "Grottos"))), - ("DMC Great Fairy Reward", ("Cutscene", 0xFF, 0x14, None, 'Magic Meter', ("Death Mountain Crater", "Death Mountain", "Fairies",))), - ("DMC Deku Scrub", ("NPC", 0x61, 0x37, None, 'Buy Bombs (5) [35]', ("Death Mountain Crater", "Death Mountain", "Deku Scrub"))), - ("DMC Deku Scrub Grotto Left", ("GrottoNPC", 0xF9, 0x30, None, 'Buy Deku Nut (5)', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), - ("DMC Deku Scrub Grotto Center", ("GrottoNPC", 0xF9, 0x33, None, 'Buy Arrows (30)', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), - ("DMC Deku Scrub Grotto Right", ("GrottoNPC", 0xF9, 0x37, None, 'Buy Bombs (5) [35]', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), - ("DMC GS Crate", ("GS Token", 0x0F, 0x80, None, 'Gold Skulltula Token', ("Death Mountain Crater", "Skulltulas",))), - ("DMC GS Bean Patch", ("GS Token", 0x0F, 0x01, None, 'Gold Skulltula Token', ("Death Mountain Crater", "Skulltulas",))), + ("DMC Volcano Freestanding PoH", ("Collectable", 0x61, 0x08, None, 'Piece of Heart', ("Death Mountain Crater", "Death Mountain"))), + ("DMC Wall Freestanding PoH", ("Collectable", 0x61, 0x02, None, 'Piece of Heart', ("Death Mountain Crater", "Death Mountain"))), + ("DMC Upper Grotto Chest", ("Chest", 0x3E, 0x1A, None, 'Bombs (20)', ("Death Mountain Crater", "Death Mountain", "Grottos"))), + ("DMC Great Fairy Reward", ("Cutscene", 0xFF, 0x14, None, 'Magic Meter', ("Death Mountain Crater", "Death Mountain", "Fairies"))), + ("DMC Deku Scrub", ("Scrub", 0x61, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Death Mountain Crater", "Death Mountain", "Deku Scrub"))), + ("DMC Deku Scrub Grotto Left", ("GrottoScrub", 0xF9, 0x30, None, 'Buy Deku Nut (5)', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), + ("DMC Deku Scrub Grotto Center", ("GrottoScrub", 0xF9, 0x33, None, 'Buy Arrows (30)', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), + ("DMC Deku Scrub Grotto Right", ("GrottoScrub", 0xF9, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Death Mountain Crater", "Death Mountain", "Deku Scrub", "Grottos"))), + ("DMC GS Crate", ("GS Token", 0x0F, 0x80, None, 'Gold Skulltula Token', ("Death Mountain Crater", "Skulltulas"))), + ("DMC GS Bean Patch", ("GS Token", 0x0F, 0x01, None, 'Gold Skulltula Token', ("Death Mountain Crater", "Skulltulas"))), + # Death Mountain Crater Freestanding + ("DMC Adult Green Rupee 1", ("RupeeTower", 0x61, (1,2,0x40),([0x0225E63C], None ), 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Green Rupee 2", ("RupeeTower", 0x61, (1,2,0x41), None, 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Green Rupee 3", ("RupeeTower", 0x61, (1,2,0x42), None, 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Green Rupee 4", ("RupeeTower", 0x61, (1,2,0x43), None, 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Green Rupee 5", ("RupeeTower", 0x61, (1,2,0x44), None, 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Green Rupee 6", ("RupeeTower", 0x61, (1,2,0x45), None, 'Rupee (1)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Adult Red Rupee", ("RupeeTower", 0x61, (1,2,0x46), None, 'Rupees (20)', ("Death Mountain Crater", "Death Mountain", "RupeeTower"))), + ("DMC Child Red Rupee 1", ("Freestanding", 0x61, (1,0,2), None, 'Rupees (20)', ("Death Mountain Crater", "Death Mountain","Freestanding",))), + ("DMC Child Red Rupee 2", ("Freestanding", 0x61, (1,0,3), None, 'Rupees (20)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 1", ("Freestanding", 0x61, (1,0,4), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 2", ("Freestanding", 0x61, (1,0,5), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 3", ("Freestanding", 0x61, (1,0,6), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 4", ("Freestanding", 0x61, (1,0,7), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 5", ("Freestanding", 0x61, (1,0,8), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + ("DMC Child Blue Rupee 6", ("Freestanding", 0x61, (1,0,9), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Freestanding",))), + # Death Mountain Crater Pots + ("DMC Near GC Pot 1", ("Pot", 0x61, (1,2,14), None, 'Recovery Heart', ("Death Mountain Crater", "Death Mountain", "Pot"))), + ("DMC Near GC Pot 2", ("Pot", 0x61, (1,2,15), None, 'Arrows (10)', ("Death Mountain Crater", "Death Mountain", "Pot"))), + ("DMC Near GC Pot 3", ("Pot", 0x61, (1,2,16), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Pot"))), + ("DMC Near GC Pot 4", ("Pot", 0x61, (1,2,17), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Pot"))), + # Death mountain Crater Beehives + ("DMC Upper Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x1A * 2)), None, 'Rupees (5)', ("Death Mountain Crater", "Death Mountain", "Grottos", "Beehive"))), + ("DMC Upper Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x1A * 2)), None, 'Rupees (20)', ("Death Mountain Crater", "Death Mountain", "Grottos", "Beehive"))), + ("DMC Hammer Grotto Beehive", ("Beehive", 0x3E, (12,0,0x44 + (0x19 * 2)), None, 'Rupees (20)', ("Death Mountain Crater", "Death Mountain", "Grottos", "Beehive"))), # Zora's River - ("ZR Magic Bean Salesman", ("NPC", 0x54, 0x16, None, 'Magic Bean', ("Zora's River",))), - ("ZR Open Grotto Chest", ("Chest", 0x3E, 0x09, None, 'Rupees (20)', ("Zora's River", "Grottos",))), - ("ZR Frogs in the Rain", ("NPC", 0x54, 0x3E, None, 'Piece of Heart', ("Zora's River", "Minigames",))), - ("ZR Frogs Ocarina Game", ("NPC", 0x54, 0x76, None, 'Piece of Heart', ("Zora's River",))), - ("ZR Near Open Grotto Freestanding PoH", ("Collectable", 0x54, 0x04, None, 'Piece of Heart', ("Zora's River",))), - ("ZR Near Domain Freestanding PoH", ("Collectable", 0x54, 0x0B, None, 'Piece of Heart', ("Zora's River",))), - ("ZR Deku Scrub Grotto Front", ("GrottoNPC", 0xEB, 0x3A, None, 'Buy Green Potion', ("Zora's River", "Deku Scrub", "Grottos"))), - ("ZR Deku Scrub Grotto Rear", ("GrottoNPC", 0xEB, 0x39, None, 'Buy Red Potion [30]', ("Zora's River", "Deku Scrub", "Grottos"))), - ("ZR GS Tree", ("GS Token", 0x11, 0x02, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas",))), - ("ZR GS Ladder", ("GS Token", 0x11, 0x01, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas",))), - ("ZR GS Near Raised Grottos", ("GS Token", 0x11, 0x10, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas",))), - ("ZR GS Above Bridge", ("GS Token", 0x11, 0x08, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas",))), + ("ZR Magic Bean Salesman", ("NPC", 0x54, 0x16, None, 'Buy Magic Bean', ("Zora's River"))), + ("ZR Open Grotto Chest", ("Chest", 0x3E, 0x09, None, 'Rupees (20)', ("Zora's River", "Grottos"))), + ("ZR Frogs Zeldas Lullaby", ("NPC", 0x54, 0x65, None, 'Rupees (50)', ("Zora's River", "Minigames"))), + ("ZR Frogs Eponas Song", ("NPC", 0x54, 0x66, None, 'Rupees (50)', ("Zora's River", "Minigames"))), + ("ZR Frogs Sarias Song", ("NPC", 0x54, 0x67, None, 'Rupees (50)', ("Zora's River", "Minigames"))), + ("ZR Frogs Suns Song", ("NPC", 0x54, 0x68, None, 'Rupees (50)', ("Zora's River", "Minigames"))), + ("ZR Frogs Song of Time", ("NPC", 0x54, 0x69, None, 'Rupees (50)', ("Zora's River", "Minigames"))), + ("ZR Frogs in the Rain", ("NPC", 0x54, 0x3E, None, 'Piece of Heart', ("Zora's River", "Minigames"))), + ("ZR Frogs Ocarina Game", ("NPC", 0x54, 0x76, None, 'Piece of Heart', ("Zora's River"))), + ("ZR Near Open Grotto Freestanding PoH", ("Collectable", 0x54, 0x04, None, 'Piece of Heart', ("Zora's River"))), + ("ZR Near Domain Freestanding PoH", ("Collectable", 0x54, 0x0B, None, 'Piece of Heart', ("Zora's River"))), + ("ZR Deku Scrub Grotto Front", ("GrottoScrub", 0xEB, 0x3A, None, 'Buy Green Potion', ("Zora's River", "Deku Scrub", "Grottos"))), + ("ZR Deku Scrub Grotto Rear", ("GrottoScrub", 0xEB, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Zora's River", "Deku Scrub", "Grottos"))), + ("ZR GS Tree", ("GS Token", 0x11, 0x02, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas"))), + ("ZR GS Ladder", ("GS Token", 0x11, 0x01, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas"))), + ("ZR GS Near Raised Grottos", ("GS Token", 0x11, 0x10, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas"))), + ("ZR GS Above Bridge", ("GS Token", 0x11, 0x08, None, 'Gold Skulltula Token', ("Zora's River", "Skulltulas"))), + # Zora's River Freestanding + ("ZR Waterfall Red Rupee 1", ("Freestanding", 0x54, (1,2,2), None, 'Rupees (20)', ("Zora's River", "Freestanding"))), + ("ZR Waterfall Red Rupee 2", ("Freestanding", 0x54, (1,2,3), None, 'Rupees (20)', ("Zora's River", "Freestanding"))), + ("ZR Waterfall Red Rupee 3", ("Freestanding", 0x54, (1,2,4), None, 'Rupees (20)', ("Zora's River", "Freestanding"))), + ("ZR Waterfall Red Rupee 4", ("Freestanding", 0x54, (1,2,5), None, 'Rupees (20)', ("Zora's River", "Freestanding"))), + # Zora's River Beehives + ("ZR Open Grotto Beehive 1", ("Beehive", 0x3E, (0,0,0x48 + (0x09 * 2)), None, 'Rupees (5)', ("Zora's River", "Grottos", "Beehive"))), + ("ZR Open Grotto Beehive 2", ("Beehive", 0x3E, (0,0,0x49 + (0x09 * 2)), None, 'Rupees (20)', ("Zora's River", "Grottos", "Beehive"))), + ("ZR Storms Grotto Beehive", ("Beehive", 0x3E, (9,0,0x43 + (0x0B * 2)), None, 'Rupees (20)', ("Zora's River", "Grottos", "Beehive"))), # Zora's Domain - ("ZD Diving Minigame", ("NPC", 0x58, 0x37, None, 'Progressive Scale', ("Zora's Domain", "Minigames",))), - ("ZD Chest", ("Chest", 0x58, 0x00, None, 'Piece of Heart', ("Zora's Domain", ))), - ("ZD King Zora Thawed", ("NPC", 0x58, 0x2D, None, 'Zora Tunic', ("Zora's Domain",))), - ("ZD GS Frozen Waterfall", ("GS Token", 0x11, 0x40, None, 'Gold Skulltula Token', ("Zora's Domain", "Skulltulas",))), - ("ZD Shop Item 1", ("Shop", 0x2F, 0x30, (shop_address(7, 0), None), 'Buy Zora Tunic', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 2", ("Shop", 0x2F, 0x31, (shop_address(7, 1), None), 'Buy Arrows (10)', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 3", ("Shop", 0x2F, 0x32, (shop_address(7, 2), None), 'Buy Heart', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 4", ("Shop", 0x2F, 0x33, (shop_address(7, 3), None), 'Buy Arrows (30)', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 5", ("Shop", 0x2F, 0x34, (shop_address(7, 4), None), 'Buy Deku Nut (5)', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 6", ("Shop", 0x2F, 0x35, (shop_address(7, 5), None), 'Buy Arrows (50)', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 7", ("Shop", 0x2F, 0x36, (shop_address(7, 6), None), 'Buy Fish', ("Zora's Domain", "Shops",))), - ("ZD Shop Item 8", ("Shop", 0x2F, 0x37, (shop_address(7, 7), None), 'Buy Red Potion [50]', ("Zora's Domain", "Shops",))), + ("ZD Diving Minigame", ("NPC", 0x58, 0x37, None, 'Progressive Scale', ("Zora's Domain", "Minigames"))), + ("ZD Chest", ("Chest", 0x58, 0x00, None, 'Piece of Heart', ("Zora's Domain", ))), + ("ZD King Zora Thawed", ("NPC", 0x58, 0x2D, None, 'Zora Tunic', ("Zora's Domain",))), + ("ZD GS Frozen Waterfall", ("GS Token", 0x11, 0x40, None, 'Gold Skulltula Token', ("Zora's Domain", "Skulltulas"))), + ("ZD Shop Item 1", ("Shop", 0x2F, 0x30, (shop_address(7, 0), None), 'Buy Zora Tunic', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 2", ("Shop", 0x2F, 0x31, (shop_address(7, 1), None), 'Buy Arrows (10)', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 3", ("Shop", 0x2F, 0x32, (shop_address(7, 2), None), 'Buy Heart', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 4", ("Shop", 0x2F, 0x33, (shop_address(7, 3), None), 'Buy Arrows (30)', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 5", ("Shop", 0x2F, 0x34, (shop_address(7, 4), None), 'Buy Deku Nut (5)', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 6", ("Shop", 0x2F, 0x35, (shop_address(7, 5), None), 'Buy Arrows (50)', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 7", ("Shop", 0x2F, 0x36, (shop_address(7, 6), None), 'Buy Fish', ("Zora's Domain", "Shops"))), + ("ZD Shop Item 8", ("Shop", 0x2F, 0x37, (shop_address(7, 7), None), 'Buy Red Potion for 50 Rupees', ("Zora's Domain", "Shops"))), + # Zora's Domain Pots + ("ZD Pot 1", ("Pot", 0x58, [(1,2,6),(1,0,22)], None, 'Deku Stick (1)', ("Zora's Domain", "Pot"))), + ("ZD Pot 2", ("Pot", 0x58, [(1,2,5),(1,0,23)], None, 'Deku Nuts (5)', ("Zora's Domain", "Pot"))), + ("ZD Pot 3", ("Pot", 0x58, [(1,2,4),(1,0,24)], None, 'Recovery Heart', ("Zora's Domain", "Pot"))), + ("ZD Pot 4", ("Pot", 0x58, [(1,2,3),(1,0,25)], None, 'Recovery Heart', ("Zora's Domain", "Pot"))), + ("ZD Pot 5", ("Pot", 0x58, [(1,2,2),(1,0,26)], None, 'Rupees (5)', ("Zora's Domain", "Pot"))), + # Zora's Domain Beehives + ("ZD In Front of King Zora Beehive 1", ("Beehive", 0x58, (0,0,10), None, 'Rupees (20)', ("Zora's Domain", "Beehive"))), + ("ZD In Front of King Zora Beehive 2", ("Beehive", 0x58, (0,0,11), None, 'Rupees (20)', ("Zora's Domain", "Beehive"))), + ("ZD Behind King Zora Beehive", ("Beehive", 0x58, (0,0,12), None, 'Rupees (20)', ("Zora's Domain", "Beehive"))), # Zora's Fountain - ("ZF Great Fairy Reward", ("Cutscene", 0xFF, 0x10, None, 'Farores Wind', ("Zora's Fountain", "Fairies",))), - ("ZF Iceberg Freestanding PoH", ("Collectable", 0x59, 0x01, None, 'Piece of Heart', ("Zora's Fountain",))), - ("ZF Bottom Freestanding PoH", ("Collectable", 0x59, 0x14, None, 'Piece of Heart', ("Zora's Fountain",))), - ("ZF GS Above the Log", ("GS Token", 0x11, 0x04, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas",))), - ("ZF GS Tree", ("GS Token", 0x11, 0x80, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas",))), - ("ZF GS Hidden Cave", ("GS Token", 0x11, 0x20, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas",))), + ("ZF Great Fairy Reward", ("Cutscene", 0xFF, 0x10, None, 'Farores Wind', ("Zora's Fountain", "Fairies"))), + ("ZF Iceberg Freestanding PoH", ("Collectable", 0x59, 0x01, None, 'Piece of Heart', ("Zora's Fountain"))), + ("ZF Bottom Freestanding PoH", ("Collectable", 0x59, 0x14, None, 'Piece of Heart', ("Zora's Fountain"))), + ("ZF GS Above the Log", ("GS Token", 0x11, 0x04, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas"))), + ("ZF GS Tree", ("GS Token", 0x11, 0x80, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas"))), + ("ZF GS Hidden Cave", ("GS Token", 0x11, 0x20, None, 'Gold Skulltula Token', ("Zora's Fountain", "Skulltulas"))), + # Zora's Fountain Freestanding + ("ZF Bottom Green Rupee 1", ("Freestanding", 0x59, (0,2,1), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 2", ("Freestanding", 0x59, (0,2,2), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 3", ("Freestanding", 0x59, (0,2,3), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 4", ("Freestanding", 0x59, (0,2,4), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 5", ("Freestanding", 0x59, (0,2,5), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 6", ("Freestanding", 0x59, (0,2,6), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 7", ("Freestanding", 0x59, (0,2,7), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 8", ("Freestanding", 0x59, (0,2,8), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 9", ("Freestanding", 0x59, (0,2,9), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 10", ("Freestanding", 0x59, (0,2,10), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 11", ("Freestanding", 0x59, (0,2,11), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 12", ("Freestanding", 0x59, (0,2,12), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 13", ("Freestanding", 0x59, (0,2,13), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 14", ("Freestanding", 0x59, (0,2,14), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 15", ("Freestanding", 0x59, (0,2,15), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 16", ("Freestanding", 0x59, (0,2,16), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 17", ("Freestanding", 0x59, (0,2,17), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + ("ZF Bottom Green Rupee 18", ("Freestanding", 0x59, (0,2,18), None, 'Rupee (1)', ("Zora's Fountain", "Freestanding"))), + # Zora's Fountain Pots + ("ZF Hidden Cave Pot 1", ("Pot", 0x59, (0,2,43), None, 'Rupees (5)', ("Zora's Fountain", "Pot"))), + ("ZF Hidden Cave Pot 2", ("Pot", 0x59, (0,2,44), None, 'Rupees (5)', ("Zora's Fountain", "Pot"))), + ("ZF Hidden Cave Pot 3", ("Pot", 0x59, (0,2,45), None, 'Arrows (10)', ("Zora's Fountain", "Pot"))), + ("ZF Near Jabu Pot 1", ("Pot", 0x59, [(0,0,20),(0,1,20)], None, 'Rupee (1)', ("Zora's Fountain", "Pot"))), + ("ZF Near Jabu Pot 2", ("Pot", 0x59, [(0,0,22),(0,1,22)], None, 'Rupee (1)', ("Zora's Fountain", "Pot"))), + ("ZF Near Jabu Pot 3", ("Pot", 0x59, [(0,0,23),(0,1,23)], None, 'Rupee (1)', ("Zora's Fountain", "Pot"))), + ("ZF Near Jabu Pot 4", ("Pot", 0x59, [(0,0,24),(0,1,24)], None, 'Recovery Heart', ("Zora's Fountain", "Pot"))), # Lake Hylia - ("LH Underwater Item", ("NPC", 0x57, 0x15, None, 'Rutos Letter', ("Lake Hylia",))), - ("LH Child Fishing", ("NPC", 0x49, 0x3E, None, 'Piece of Heart', ("Lake Hylia", "Minigames",))), - ("LH Adult Fishing", ("NPC", 0x49, 0x38, None, 'Progressive Scale', ("Lake Hylia", "Minigames",))), - ("LH Lab Dive", ("NPC", 0x38, 0x3E, None, 'Piece of Heart', ("Lake Hylia",))), - ("LH Freestanding PoH", ("Collectable", 0x57, 0x1E, None, 'Piece of Heart', ("Lake Hylia",))), - ("LH Sun", ("NPC", 0x57, 0x58, None, 'Fire Arrows', ("Lake Hylia",))), - ("LH Deku Scrub Grotto Left", ("GrottoNPC", 0xEF, 0x30, None, 'Buy Deku Nut (5)', ("Lake Hylia", "Deku Scrub", "Grottos"))), - ("LH Deku Scrub Grotto Center", ("GrottoNPC", 0xEF, 0x33, None, 'Buy Deku Seeds (30)', ("Lake Hylia", "Deku Scrub", "Grottos"))), - ("LH Deku Scrub Grotto Right", ("GrottoNPC", 0xEF, 0x37, None, 'Buy Bombs (5) [35]', ("Lake Hylia", "Deku Scrub", "Grottos"))), - ("LH GS Bean Patch", ("GS Token", 0x12, 0x01, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas",))), - ("LH GS Lab Wall", ("GS Token", 0x12, 0x04, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas",))), - ("LH GS Small Island", ("GS Token", 0x12, 0x02, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas",))), - ("LH GS Lab Crate", ("GS Token", 0x12, 0x08, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas",))), - ("LH GS Tree", ("GS Token", 0x12, 0x10, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas",))), + ("LH Underwater Item", ("NPC", 0x57, 0x15, None, 'Rutos Letter', ("Lake Hylia"))), + ("LH Child Fishing", ("NPC", 0x49, 0x3E, None, 'Piece of Heart', ("Lake Hylia", "Minigames"))), + ("LH Adult Fishing", ("NPC", 0x49, 0x38, None, 'Progressive Scale', ("Lake Hylia", "Minigames"))), + ("LH Lab Dive", ("NPC", 0x38, 0x3E, None, 'Piece of Heart', ("Lake Hylia"))), + ("LH Freestanding PoH", ("Collectable", 0x57, 0x1E, None, 'Piece of Heart', ("Lake Hylia"))), + ("LH Sun", ("NPC", 0x57, 0x58, None, 'Fire Arrows', ("Lake Hylia"))), + ("LH Deku Scrub Grotto Left", ("GrottoScrub", 0xEF, 0x30, None, 'Buy Deku Nut (5)', ("Lake Hylia", "Deku Scrub", "Grottos"))), + ("LH Deku Scrub Grotto Center", ("GrottoScrub", 0xEF, 0x33, None, 'Buy Deku Seeds (30)', ("Lake Hylia", "Deku Scrub", "Grottos"))), + ("LH Deku Scrub Grotto Right", ("GrottoScrub", 0xEF, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Lake Hylia", "Deku Scrub", "Grottos"))), + ("LH GS Bean Patch", ("GS Token", 0x12, 0x01, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas"))), + ("LH GS Lab Wall", ("GS Token", 0x12, 0x04, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas"))), + ("LH GS Small Island", ("GS Token", 0x12, 0x02, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas"))), + ("LH GS Lab Crate", ("GS Token", 0x12, 0x08, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas"))), + ("LH GS Tree", ("GS Token", 0x12, 0x10, None, 'Gold Skulltula Token', ("Lake Hylia", "Skulltulas"))), + # Lake Hylia Freestanding + ("LH Underwater Near Shore Green Rupee", ("Freestanding", 0x57, (0,0,50), None, 'Rupee (1)', ("Lake Hylia", "Freestanding"))), + ("LH Underwater Green Rupee 1", ("Freestanding", 0x57, (0,0,51), None, 'Rupee (1)', ("Lake Hylia", "Freestanding"))), + ("LH Underwater Green Rupee 2", ("Freestanding", 0x57, (0,0,52), None, 'Rupee (1)', ("Lake Hylia", "Freestanding"))), + ("LH Lab Dive Red Rupee 1", ("Freestanding", 0x38, (0,0,2), None, 'Rupees (20)', ("Lake Hylia", "Freestanding"))), + ("LH Lab Dive Red Rupee 2", ("Freestanding", 0x38, (0,0,3), None, 'Rupees (20)', ("Lake Hylia", "Freestanding"))), + ("LH Lab Dive Red Rupee 3", ("Freestanding", 0x38, (0,0,4), None, 'Rupees (20)', ("Lake Hylia", "Freestanding"))), + #Lake Hylia Beehives + ("LH Grotto Beehive", ("Beehive", 0x3E, (12,0,0x44 + (0x0F * 2)), None, 'Rupees (20)', ("Lake Hylia", "Grottos", "Beehive"))), # Gerudo Valley - ("GV Crate Freestanding PoH", ("Collectable", 0x5A, 0x02, None, 'Piece of Heart', ("Gerudo Valley", "Gerudo",))), - ("GV Waterfall Freestanding PoH", ("Collectable", 0x5A, 0x01, None, 'Piece of Heart', ("Gerudo Valley", "Gerudo",))), - ("GV Chest", ("Chest", 0x5A, 0x00, None, 'Rupees (50)', ("Gerudo Valley", "Gerudo",))), - ("GV Deku Scrub Grotto Front", ("GrottoNPC", 0xF0, 0x3A, None, 'Buy Green Potion', ("Gerudo Valley", "Gerudo", "Deku Scrub", "Grottos"))), - ("GV Deku Scrub Grotto Rear", ("GrottoNPC", 0xF0, 0x39, None, 'Buy Red Potion [30]', ("Gerudo Valley", "Gerudo", "Deku Scrub", "Grottos"))), - ("GV Cow", ("NPC", 0x5A, 0x15, None, 'Milk', ("Gerudo Valley", "Gerudo", "Cow"))), - ("GV GS Small Bridge", ("GS Token", 0x13, 0x02, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), - ("GV GS Bean Patch", ("GS Token", 0x13, 0x01, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), - ("GV GS Behind Tent", ("GS Token", 0x13, 0x08, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), - ("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), - - # Thieves' Hideout - ("Hideout Jail Guard (1 Torch)", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), - ("Hideout Jail Guard (2 Torches)", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), - ("Hideout Jail Guard (3 Torches)", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), - ("Hideout Jail Guard (4 Torches)", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), - ("Hideout Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Thieves' Hideout", "Gerudo",))), + ("GV Crate Freestanding PoH", ("Collectable", 0x5A, 0x02, None, 'Piece of Heart', ("Gerudo Valley", "Gerudo"))), + ("GV Waterfall Freestanding PoH", ("Collectable", 0x5A, 0x01, None, 'Piece of Heart', ("Gerudo Valley", "Gerudo"))), + ("GV Chest", ("Chest", 0x5A, 0x00, None, 'Rupees (50)', ("Gerudo Valley", "Gerudo"))), + ("GV Deku Scrub Grotto Front", ("GrottoScrub", 0xF0, 0x3A, None, 'Buy Green Potion', ("Gerudo Valley", "Gerudo", "Deku Scrub", "Grottos"))), + ("GV Deku Scrub Grotto Rear", ("GrottoScrub", 0xF0, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Gerudo Valley", "Gerudo", "Deku Scrub", "Grottos"))), + ("GV Cow", ("NPC", 0x5A, 0x15, None, 'Milk', ("Gerudo Valley", "Gerudo", "Cow"))), + ("GV GS Small Bridge", ("GS Token", 0x13, 0x02, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas"))), + ("GV GS Bean Patch", ("GS Token", 0x13, 0x01, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas"))), + ("GV GS Behind Tent", ("GS Token", 0x13, 0x08, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas"))), + ("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas"))), + # Gerudo Valley Freestanding + ("GV Octorok Grotto Red Rupee", ("Freestanding", 0x3E, (5,0,9), None, 'Rupees (20)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Blue Rupee 1", ("Freestanding", 0x3E, (5,0,2), None, 'Rupees (5)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Blue Rupee 2", ("Freestanding", 0x3E, (5,0,3), None, 'Rupees (5)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Blue Rupee 3", ("Freestanding", 0x3E, (5,0,4), None, 'Rupees (5)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Green Rupee 1", ("Freestanding", 0x3E, (5,0,5), None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Green Rupee 2", ("Freestanding", 0x3E, (5,0,6), None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Green Rupee 3", ("Freestanding", 0x3E, (5,0,7), None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + ("GV Octorok Grotto Green Rupee 4", ("Freestanding", 0x3E, (5,0,8), None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Grottos", "Freestanding"))), + # Gerudo Valley Pots/Crates + ("GV Crate Near Cow", ("Crate", 0x5A, (0,0,38), None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Crate"))), + ("GV Freestanding PoH Crate", ("Crate", 0x5A, [(0,2,31),(0,0,39)], None, 'Rupee (1)', ("Gerudo Valley", "Gerudo", "Crate"))), + # Gerudo Valley Beehives + ("GV Storms Grotto Beehive", ("Beehive", 0x3E, (9,0,0x43 + (0x10 * 2)), None, 'Rupees (20)', ("Gerudo Valley", "Gerudo", "Grottos", "Beehive"))), # Gerudo's Fortress - ("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))), - ("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))), - ("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))), - ("GF GS Top Floor", ("GS Token", 0x14, 0x02, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), - ("GF GS Archery Range", ("GS Token", 0x14, 0x01, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), + ("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo"))), + ("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))), + ("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))), + ("GF GS Top Floor", ("GS Token", 0x14, 0x02, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas"))), + ("GF GS Archery Range", ("GS Token", 0x14, 0x01, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas"))), + # Gerudo's Fortress Crates/Pots + ("GF Above Jail Crate", ("Crate", 0x5D, [(0,2,19),(0,3,19)], None, 'Rupees (50)', ("Gerudo's Fortress", "Gerudo", "Crate"))), + + # Thieves' Hideout + ("Hideout 1 Torch Jail Gerudo Key", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo"))), + ("Hideout 2 Torches Jail Gerudo Key", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo"))), + ("Hideout 3 Torches Jail Gerudo Key", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo"))), + ("Hideout 4 Torches Jail Gerudo Key", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo"))), + ("Hideout Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Thieves' Hideout", "Gerudo"))), + # Thieves' Hideout Pots/Crates + ("Hideout Break Room Pot 1", ("Pot", 0x0C, (0,0,5), None, 'Arrows (10)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout Break Room Pot 2", ("Pot", 0x0C, (0,0,6), None, 'Rupees (5)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 1 Torch Jail Pot 1", ("Pot", 0x0C, (2,0,7), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 1 Torch Jail Pot 2", ("Pot", 0x0C, (2,0,8), None, 'Arrows (10)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 1 Torch Jail Pot 3", ("Pot", 0x0C, (2,0,9), None, 'Rupees (20)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout Kitchen Pot 1", ("Pot", 0x0C, (3,0,6), None, 'Arrows (10)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout Kitchen Pot 2", ("Pot", 0x0C, (3,0,7), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 4 Torch Jail Pot 1", ("Pot", 0x0C, (4,0,10), None, 'Rupees (5)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 4 Torch Jail Pot 2", ("Pot", 0x0C, (4,0,11), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail Pot 1", ("Pot", 0x0C, (5,0,8), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail Pot 2", ("Pot", 0x0C, (5,0,9), None, 'Rupees (5)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail Pot 3", ("Pot", 0x0C, (5,0,10), None, 'Rupees (20)', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail In Cell Pot 1", ("Pot", 0x0C, (5,0,11), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail In Cell Pot 2", ("Pot", 0x0C, (5,0,12), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail In Cell Pot 3", ("Pot", 0x0C, (5,0,13), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout 2 Torch Jail In Cell Pot 4", ("Pot", 0x0C, (5,0,14), None, 'Recovery Heart', ("Thieves' Hideout", "Gerudo", "Pot"))), + ("Hideout Break Room Crate 1", ("Crate", 0x0C, (0,0,7), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Break Room Crate 2", ("Crate", 0x0C, (0,0,8), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Break Room Hallway Crate 1", ("Crate", 0x0C, (0,0,9), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Break Room Hallway Crate 2", ("Crate", 0x0C, (0,0,10), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout 3 Torch Jail Crate", ("Crate", 0x0C, (1,0,11), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout 1 Torch Jail Crate", ("Crate", 0x0C, (2,0,11), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Near Kitchen Crate 1", ("Crate", 0x0C, (3,0,8), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Near Kitchen Crate 2", ("Crate", 0x0C, (3,0,11), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Near Kitchen Crate 3", ("Crate", 0x0C, (3,0,12), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Near Kitchen Crate 4", ("Crate", 0x0C, (3,0,13), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout Near Kitchen Crate 5", ("Crate", 0x0C, (3,0,14), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout 2 Torch Jail Crate 1", ("Crate", 0x0C, (5,0,16), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), + ("Hideout 2 Torch Jail Crate 2", ("Crate", 0x0C, (5,0,17), None, 'Rupee (1)', ("Thieves' Hideout", "Gerudo", "Crate"))), # Wasteland - ("Wasteland Bombchu Salesman", ("NPC", 0x5E, 0x03, None, 'Bombchus (10)', ("Haunted Wasteland",))), - ("Wasteland Chest", ("Chest", 0x5E, 0x00, None, 'Rupees (50)', ("Haunted Wasteland",))), - ("Wasteland GS", ("GS Token", 0x15, 0x02, None, 'Gold Skulltula Token', ("Haunted Wasteland", "Skulltulas",))), + ("Wasteland Bombchu Salesman", ("NPC", 0x5E, 0x03, None, 'Bombchus (10)', ("Haunted Wasteland"))), + ("Wasteland Chest", ("Chest", 0x5E, 0x00, None, 'Rupees (50)', ("Haunted Wasteland"))), + ("Wasteland GS", ("GS Token", 0x15, 0x02, None, 'Gold Skulltula Token', ("Haunted Wasteland", "Skulltulas"))), + # Wasteland Pots/Crates + ("Wasteland Near GS Pot 1", ("Pot", 0x5E, (0,0,1), None, 'Recovery Heart', ("Haunted Wasteland", "Pot"))), + ("Wasteland Near GS Pot 2", ("Pot", 0x5E, (0,0,2), None, 'Deku Nuts (5)', ("Haunted Wasteland", "Pot"))), + #("Wasteland Near GS Pot 3", ("Pot", 0x5E, (0,0,3), None, 'Rupees (5)', ("Haunted Wasteland", "Pot"))), Fairy + ("Wasteland Near GS Pot 3", ("Pot", 0x5E, (0,0,4), None, 'Rupees (5)', ("Haunted Wasteland", "Pot"))), + ("Wasteland Crate Before Quicksand", ("Crate", 0x5E, (1,0,38),None, 'Rupee (1)', ("Haunted Wasteland", "Crate"))), + ("Wasteland Crate After Quicksand 1", ("Crate", 0x5E, (1,0,35),None, 'Rupee (1)', ("Haunted Wasteland", "Crate"))), + ("Wasteland Crate After Quicksand 2", ("Crate", 0x5E, (1,0,36),None, 'Rupee (1)', ("Haunted Wasteland", "Crate"))), + ("Wasteland Crate After Quicksand 3", ("Crate", 0x5E, (1,0,37),None, 'Rupee (1)', ("Haunted Wasteland", "Crate"))), + ("Wasteland Crate Near Colossus", ("Crate", 0x5E, (1,0,34),None, 'Rupee (1)', ("Haunted Wasteland", "Crate"))), # Colossus - ("Colossus Great Fairy Reward", ("Cutscene", 0xFF, 0x12, None, 'Nayrus Love', ("Desert Colossus", "Fairies",))), - ("Colossus Freestanding PoH", ("Collectable", 0x5C, 0x0D, None, 'Piece of Heart', ("Desert Colossus",))), - ("Colossus Deku Scrub Grotto Front", ("GrottoNPC", 0xFD, 0x3A, None, 'Buy Green Potion', ("Desert Colossus", "Deku Scrub", "Grottos"))), - ("Colossus Deku Scrub Grotto Rear", ("GrottoNPC", 0xFD, 0x39, None, 'Buy Red Potion [30]', ("Desert Colossus", "Deku Scrub", "Grottos"))), - ("Colossus GS Bean Patch", ("GS Token", 0x15, 0x01, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))), - ("Colossus GS Tree", ("GS Token", 0x15, 0x08, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))), - ("Colossus GS Hill", ("GS Token", 0x15, 0x04, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))), + ("Colossus Great Fairy Reward", ("Cutscene", 0xFF, 0x12, None, 'Nayrus Love', ("Desert Colossus", "Fairies"))), + ("Colossus Freestanding PoH", ("Collectable", 0x5C, 0x0D, None, 'Piece of Heart', ("Desert Colossus"))), + ("Colossus Deku Scrub Grotto Front", ("GrottoScrub", 0xFD, 0x3A, None, 'Buy Green Potion', ("Desert Colossus", "Deku Scrub", "Grottos"))), + ("Colossus Deku Scrub Grotto Rear", ("GrottoScrub", 0xFD, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Desert Colossus", "Deku Scrub", "Grottos"))), + ("Colossus GS Bean Patch", ("GS Token", 0x15, 0x01, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas"))), + ("Colossus GS Tree", ("GS Token", 0x15, 0x08, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas"))), + ("Colossus GS Hill", ("GS Token", 0x15, 0x04, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas"))), + # Colossus Beehives + ("Colossus Grotto Beehive", ("Beehive", 0x3E, (9,0,0x43 + (0x1D * 2)), None, 'Rupees (20)', ("Desert Colossus", "Grottos", "Beehive"))), # Outside Ganon's Castle - ("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("Outside Ganon's Castle", "Market", "Fairies"))), - ("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("Outside Ganon's Castle", "Skulltulas",))), + ("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("Outside Ganon's Castle", "Market", "Fairies"))), + ("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("Outside Ganon's Castle", "Skulltulas"))), ## Dungeons # Deku Tree vanilla - ("Deku Tree Map Chest", ("Chest", 0x00, 0x03, None, 'Map (Deku Tree)', ("Deku Tree", "Vanilla",))), - ("Deku Tree Slingshot Room Side Chest", ("Chest", 0x00, 0x05, None, 'Recovery Heart', ("Deku Tree", "Vanilla",))), - ("Deku Tree Slingshot Chest", ("Chest", 0x00, 0x01, None, 'Slingshot', ("Deku Tree", "Vanilla",))), - ("Deku Tree Compass Chest", ("Chest", 0x00, 0x02, None, 'Compass (Deku Tree)', ("Deku Tree", "Vanilla",))), - ("Deku Tree Compass Room Side Chest", ("Chest", 0x00, 0x06, None, 'Recovery Heart', ("Deku Tree", "Vanilla",))), - ("Deku Tree Basement Chest", ("Chest", 0x00, 0x04, None, 'Recovery Heart', ("Deku Tree", "Vanilla",))), - ("Deku Tree GS Compass Room", ("GS Token", 0x00, 0x08, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas",))), - ("Deku Tree GS Basement Vines", ("GS Token", 0x00, 0x04, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas",))), - ("Deku Tree GS Basement Gate", ("GS Token", 0x00, 0x02, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas",))), - ("Deku Tree GS Basement Back Room", ("GS Token", 0x00, 0x01, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas",))), + ("Deku Tree Map Chest", ("Chest", 0x00, 0x03, None, 'Map (Deku Tree)', ("Deku Tree", "Vanilla"))), + ("Deku Tree Slingshot Room Side Chest", ("Chest", 0x00, 0x05, None, 'Recovery Heart', ("Deku Tree", "Vanilla"))), + ("Deku Tree Slingshot Chest", ("Chest", 0x00, 0x01, None, 'Slingshot', ("Deku Tree", "Vanilla"))), + ("Deku Tree Compass Chest", ("Chest", 0x00, 0x02, None, 'Compass (Deku Tree)', ("Deku Tree", "Vanilla"))), + ("Deku Tree Compass Room Side Chest", ("Chest", 0x00, 0x06, None, 'Recovery Heart', ("Deku Tree", "Vanilla"))), + ("Deku Tree Basement Chest", ("Chest", 0x00, 0x04, None, 'Recovery Heart', ("Deku Tree", "Vanilla"))), + ("Deku Tree GS Compass Room", ("GS Token", 0x00, 0x08, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas"))), + ("Deku Tree GS Basement Vines", ("GS Token", 0x00, 0x04, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas"))), + ("Deku Tree GS Basement Gate", ("GS Token", 0x00, 0x02, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas"))), + ("Deku Tree GS Basement Back Room", ("GS Token", 0x00, 0x01, None, 'Gold Skulltula Token', ("Deku Tree", "Vanilla", "Skulltulas"))), + # Deku Tree Freestanding + ("Deku Tree Lower Lobby Recovery Heart", ("Freestanding", 0x00, (0,0,26), None, 'Recovery Heart', ("Deku Tree", "Vanilla", "Freestanding"))), + ("Deku Tree Upper Lobby Recovery Heart", ("Freestanding", 0x00, (0,0,27), None, 'Recovery Heart', ("Deku Tree", "Vanilla", "Freestanding"))), + ("Deku Tree Basement Recovery Heart 1", ("Freestanding", 0x00, (9,0,7), None, 'Recovery Heart', ("Deku Tree", "Vanilla", "Freestanding"))), + ("Deku Tree Basement Recovery Heart 2", ("Freestanding", 0x00, (9,0,8), None, 'Recovery Heart', ("Deku Tree", "Vanilla", "Freestanding"))), + ("Deku Tree Basement Recovery Heart 3", ("Freestanding", 0x00, (9,0,9), None, 'Recovery Heart', ("Deku Tree", "Vanilla", "Freestanding"))), + # Deku Tree MQ - ("Deku Tree MQ Map Chest", ("Chest", 0x00, 0x03, None, 'Map (Deku Tree)', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Slingshot Chest", ("Chest", 0x00, 0x06, None, 'Slingshot', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Slingshot Room Back Chest", ("Chest", 0x00, 0x02, None, 'Deku Shield', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Compass Chest", ("Chest", 0x00, 0x01, None, 'Compass (Deku Tree)', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Basement Chest", ("Chest", 0x00, 0x04, None, 'Deku Shield', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Before Spinning Log Chest", ("Chest", 0x00, 0x05, None, 'Recovery Heart', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ After Spinning Log Chest", ("Chest", 0x00, 0x00, None, 'Rupees (50)', ("Deku Tree", "Master Quest",))), - ("Deku Tree MQ Deku Scrub", ("NPC", 0x00, 0x34, None, 'Buy Deku Shield', ("Deku Tree", "Master Quest", "Deku Scrub",))), - ("Deku Tree MQ GS Lobby", ("GS Token", 0x00, 0x02, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas",))), - ("Deku Tree MQ GS Compass Room", ("GS Token", 0x00, 0x08, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas",))), - ("Deku Tree MQ GS Basement Graves Room", ("GS Token", 0x00, 0x04, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas",))), - ("Deku Tree MQ GS Basement Back Room", ("GS Token", 0x00, 0x01, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas",))), + ("Deku Tree MQ Map Chest", ("Chest", 0x00, 0x03, None, 'Map (Deku Tree)', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Slingshot Chest", ("Chest", 0x00, 0x06, None, 'Slingshot', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Slingshot Room Back Chest", ("Chest", 0x00, 0x02, None, 'Deku Shield', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Compass Chest", ("Chest", 0x00, 0x01, None, 'Compass (Deku Tree)', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Basement Chest", ("Chest", 0x00, 0x04, None, 'Deku Shield', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Before Spinning Log Chest", ("Chest", 0x00, 0x05, None, 'Recovery Heart', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ After Spinning Log Chest", ("Chest", 0x00, 0x00, None, 'Rupees (50)', ("Deku Tree", "Master Quest"))), + ("Deku Tree MQ Deku Scrub", ("Scrub", 0x00, 0x34, None, 'Buy Deku Shield', ("Deku Tree", "Master Quest", "Deku Scrub"))), + ("Deku Tree MQ GS Lobby", ("GS Token", 0x00, 0x02, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas"))), + ("Deku Tree MQ GS Compass Room", ("GS Token", 0x00, 0x08, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas"))), + ("Deku Tree MQ GS Basement Graves Room", ("GS Token", 0x00, 0x04, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas"))), + ("Deku Tree MQ GS Basement Back Room", ("GS Token", 0x00, 0x01, None, 'Gold Skulltula Token', ("Deku Tree", "Master Quest", "Skulltulas"))), + # Deku Tree MQ Freestanding + ("Deku Tree MQ Lower Lobby Recovery Heart", ("Freestanding", 0x00, (0,0,19), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Near Compass Room Recovery Heart", ("Freestanding", 0x00, (1,0,5), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Compass Room Recovery Heart", ("Freestanding", 0x00, (2,0,12), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Basement Recovery Heart 1", ("Freestanding", 0x00, (9,0,7), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Basement Recovery Heart 2", ("Freestanding", 0x00, (9,0,8), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Basement Recovery Heart 3", ("Freestanding", 0x00, (9,0,9), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + ("Deku Tree MQ Slingshot Room Recovery Heart", ("Freestanding", 0x00, (10,0,6), None, 'Recovery Heart', ("Deku Tree", "Master Quest", "Freestanding"))), + # Deku Tree MQ Pots/Crates + ("Deku Tree MQ Lobby Crate", ("Crate", 0x0, (0,0,29), None, 'Rupee (1)', ("Deku Tree", "Master Quest", "Crate"))), + ("Deku Tree MQ Slingshot Room Crate 1", ("Crate", 0x0, (10,0,17), None, 'Rupee (1)', ("Deku Tree", "Master Quest", "Crate"))), + ("Deku Tree MQ Slingshot Room Crate 2", ("Crate", 0x0, (10,0,18), None, 'Rupee (1)', ("Deku Tree", "Master Quest", "Crate"))), + # Deku Tree shared - ("Deku Tree Queen Gohma Heart", ("BossHeart", 0x11, 0x4F, None, 'Heart Container', ("Deku Tree", "Vanilla", "Master Quest",))), + ("Deku Tree Queen Gohma Heart", ("BossHeart", 0x11, 0x4F, None, 'Heart Container', ("Deku Tree", "Vanilla", "Master Quest"))), # Dodongo's Cavern vanilla - ("Dodongos Cavern Map Chest", ("Chest", 0x01, 0x08, None, 'Map (Dodongos Cavern)', ("Dodongo's Cavern", "Vanilla",))), - ("Dodongos Cavern Compass Chest", ("Chest", 0x01, 0x05, None, 'Compass (Dodongos Cavern)', ("Dodongo's Cavern", "Vanilla",))), - ("Dodongos Cavern Bomb Flower Platform Chest", ("Chest", 0x01, 0x06, None, 'Rupees (20)', ("Dodongo's Cavern", "Vanilla",))), - ("Dodongos Cavern Bomb Bag Chest", ("Chest", 0x01, 0x04, None, 'Bomb Bag', ("Dodongo's Cavern", "Vanilla",))), - ("Dodongos Cavern End of Bridge Chest", ("Chest", 0x01, 0x0A, None, 'Deku Shield', ("Dodongo's Cavern", "Vanilla",))), - ("Dodongos Cavern Deku Scrub Side Room Near Dodongos", ("NPC", 0x01, 0x31, None, 'Buy Deku Stick (1)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub",))), - ("Dodongos Cavern Deku Scrub Lobby", ("NPC", 0x01, 0x34, None, 'Buy Deku Shield', ("Dodongo's Cavern", "Vanilla", "Deku Scrub",))), - ("Dodongos Cavern Deku Scrub Near Bomb Bag Left", ("NPC", 0x01, 0x30, None, 'Buy Deku Nut (5)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub",))), - ("Dodongos Cavern Deku Scrub Near Bomb Bag Right", ("NPC", 0x01, 0x33, None, 'Buy Deku Seeds (30)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub",))), - ("Dodongos Cavern GS Side Room Near Lower Lizalfos", ("GS Token", 0x01, 0x10, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas",))), - ("Dodongos Cavern GS Scarecrow", ("GS Token", 0x01, 0x02, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas",))), - ("Dodongos Cavern GS Alcove Above Stairs", ("GS Token", 0x01, 0x04, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas",))), - ("Dodongos Cavern GS Vines Above Stairs", ("GS Token", 0x01, 0x01, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas",))), - ("Dodongos Cavern GS Back Room", ("GS Token", 0x01, 0x08, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas",))), + ("Dodongos Cavern Map Chest", ("Chest", 0x01, 0x08, None, 'Map (Dodongos Cavern)', ("Dodongo's Cavern", "Vanilla"))), + ("Dodongos Cavern Compass Chest", ("Chest", 0x01, 0x05, None, 'Compass (Dodongos Cavern)', ("Dodongo's Cavern", "Vanilla"))), + ("Dodongos Cavern Bomb Flower Platform Chest", ("Chest", 0x01, 0x06, None, 'Rupees (20)', ("Dodongo's Cavern", "Vanilla"))), + ("Dodongos Cavern Bomb Bag Chest", ("Chest", 0x01, 0x04, None, 'Bomb Bag', ("Dodongo's Cavern", "Vanilla"))), + ("Dodongos Cavern End of Bridge Chest", ("Chest", 0x01, 0x0A, None, 'Deku Shield', ("Dodongo's Cavern", "Vanilla"))), + ("Dodongos Cavern Deku Scrub Side Room Near Dodongos", ("Scrub", 0x01, 0x31, None, 'Buy Deku Stick (1)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub"))), + ("Dodongos Cavern Deku Scrub Lobby", ("Scrub", 0x01, 0x34, None, 'Buy Deku Shield', ("Dodongo's Cavern", "Vanilla", "Deku Scrub"))), + ("Dodongos Cavern Deku Scrub Near Bomb Bag Left", ("Scrub", 0x01, 0x30, None, 'Buy Deku Nut (5)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub"))), + ("Dodongos Cavern Deku Scrub Near Bomb Bag Right", ("Scrub", 0x01, 0x33, None, 'Buy Deku Seeds (30)', ("Dodongo's Cavern", "Vanilla", "Deku Scrub"))), + ("Dodongos Cavern GS Side Room Near Lower Lizalfos", ("GS Token", 0x01, 0x10, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas"))), + ("Dodongos Cavern GS Scarecrow", ("GS Token", 0x01, 0x02, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas"))), + ("Dodongos Cavern GS Alcove Above Stairs", ("GS Token", 0x01, 0x04, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas"))), + ("Dodongos Cavern GS Vines Above Stairs", ("GS Token", 0x01, 0x01, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas"))), + ("Dodongos Cavern GS Back Room", ("GS Token", 0x01, 0x08, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Vanilla", "Skulltulas"))), + # Dodongo's Cavern Vanilla Freestanding + ("Dodongos Cavern Lizalfos Upper Recovery Heart 1", ("Freestanding", 0x01, (3,0,7), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Freestanding"))), + ("Dodongos Cavern Lizalfos Upper Recovery Heart 2", ("Freestanding", 0x01, (3,0,8), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Freestanding"))), + ("Dodongos Cavern Blade Room Behind Block Recovery Heart", ("Freestanding", 0x01, (9,0,14), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Freestanding"))), + # Dodongo's Cavern Vanilla Pots + ("Dodongos Cavern Right Side Pot 1", ("Pot", 0x01, (1,0,13), None, 'Rupee (1)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Right Side Pot 2", ("Pot", 0x01, (1,0,14), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Right Side Pot 3", ("Pot", 0x01, (1,0,16), None, 'Rupee (1)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Right Side Pot 4", ("Pot", 0x01, (1,0,17), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Right Side Pot 5", ("Pot", 0x01, (1,0,18), None, 'Rupee (1)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Right Side Pot 6", ("Pot", 0x01, (1,0,19), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Lower Lizalfos Pot 1", ("Pot", 0x01, (3,0,9), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Lower Lizalfos Pot 2", ("Pot", 0x01, (3,0,10), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Lower Lizalfos Pot 3", ("Pot", 0x01, (3,0,11), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Lower Lizalfos Pot 4", ("Pot", 0x01, (3,0,12), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Torch Room Pot 1", ("Pot", 0x01, (4,0,11), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Torch Room Pot 2", ("Pot", 0x01, (4,0,12), None, 'Rupee (1)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Torch Room Pot 3", ("Pot", 0x01, (4,0,13), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Torch Room Pot 4", ("Pot", 0x01, (4,0,14), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Staircase Pot 1", ("Pot", 0x01, (2,0,24), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Staircase Pot 2", ("Pot", 0x01, (2,0,25), None, 'Rupees (20)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Staircase Pot 3", ("Pot", 0x01, (2,0,26), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Staircase Pot 4", ("Pot", 0x01, (2,0,27), None, 'Rupees (20)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Last Block Pot 1", ("Pot", 0x01, (7,0,7), None, 'Bombs (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Last Block Pot 2", ("Pot", 0x01, (7,0,8), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Last Block Pot 3", ("Pot", 0x01, (8,0,7), None, 'Deku Seeds (30)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + #("Dodongos Cavern Last Block Pot 4", ("Pot", 0x01, 0x21, None, 'Rupee (1)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Blade Room Pot 1", ("Pot", 0x01, (9,0,15), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Blade Room Pot 2", ("Pot", 0x01, (9,0,16), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Single Eye Switch Room Pot 1", ("Pot", 0x01, (10,0,7), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Single Eye Switch Room Pot 2", ("Pot", 0x01, (10,0,8), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Double Eye Switch Room Pot 1", ("Pot", 0x01, (12,0,6), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Pot"))), + ("Dodongos Cavern Double Eye Switch Room Pot 2", ("Pot", 0x01, (12,0,7), None, 'Rupees (5)', ("Dodongo's Cavern", "Vanilla", "Pot"))), + # Dodongo's Cavern MQ - ("Dodongos Cavern MQ Map Chest", ("Chest", 0x01, 0x00, None, 'Map (Dodongos Cavern)', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Bomb Bag Chest", ("Chest", 0x01, 0x04, None, 'Bomb Bag', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Torch Puzzle Room Chest", ("Chest", 0x01, 0x03, None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Larvae Room Chest", ("Chest", 0x01, 0x02, None, 'Deku Shield', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Compass Chest", ("Chest", 0x01, 0x05, None, 'Compass (Dodongos Cavern)', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Under Grave Chest", ("Chest", 0x01, 0x01, None, 'Hylian Shield', ("Dodongo's Cavern", "Master Quest",))), - ("Dodongos Cavern MQ Deku Scrub Lobby Front", ("NPC", 0x01, 0x33, None, 'Buy Deku Seeds (30)', ("Dodongo's Cavern", "Master Quest", "Deku Scrub",))), - ("Dodongos Cavern MQ Deku Scrub Lobby Rear", ("NPC", 0x01, 0x31, None, 'Buy Deku Stick (1)', ("Dodongo's Cavern", "Master Quest", "Deku Scrub",))), - ("Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos", ("NPC", 0x01, 0x39, None, 'Buy Red Potion [30]', ("Dodongo's Cavern", "Master Quest", "Deku Scrub",))), - ("Dodongos Cavern MQ Deku Scrub Staircase", ("NPC", 0x01, 0x34, None, 'Buy Deku Shield', ("Dodongo's Cavern", "Master Quest", "Deku Scrub",))), - ("Dodongos Cavern MQ GS Scrub Room", ("GS Token", 0x01, 0x02, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas",))), - ("Dodongos Cavern MQ GS Larvae Room", ("GS Token", 0x01, 0x10, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas",))), - ("Dodongos Cavern MQ GS Lizalfos Room", ("GS Token", 0x01, 0x04, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas",))), - ("Dodongos Cavern MQ GS Song of Time Block Room", ("GS Token", 0x01, 0x08, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas",))), - ("Dodongos Cavern MQ GS Back Area", ("GS Token", 0x01, 0x01, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas",))), + ("Dodongos Cavern MQ Map Chest", ("Chest", 0x01, 0x00, None, 'Map (Dodongos Cavern)', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Bomb Bag Chest", ("Chest", 0x01, 0x04, None, 'Bomb Bag', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Torch Puzzle Room Chest", ("Chest", 0x01, 0x03, None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Larvae Room Chest", ("Chest", 0x01, 0x02, None, 'Deku Shield', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Compass Chest", ("Chest", 0x01, 0x05, None, 'Compass (Dodongos Cavern)', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Under Grave Chest", ("Chest", 0x01, 0x01, None, 'Hylian Shield', ("Dodongo's Cavern", "Master Quest"))), + ("Dodongos Cavern MQ Deku Scrub Lobby Front", ("Scrub", 0x01, 0x33, None, 'Buy Deku Seeds (30)', ("Dodongo's Cavern", "Master Quest", "Deku Scrub"))), + ("Dodongos Cavern MQ Deku Scrub Lobby Rear", ("Scrub", 0x01, 0x31, None, 'Buy Deku Stick (1)', ("Dodongo's Cavern", "Master Quest", "Deku Scrub"))), + ("Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos", ("Scrub", 0x01, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Dodongo's Cavern", "Master Quest", "Deku Scrub"))), + ("Dodongos Cavern MQ Deku Scrub Staircase", ("Scrub", 0x01, 0x34, None, 'Buy Deku Shield', ("Dodongo's Cavern", "Master Quest", "Deku Scrub"))), + ("Dodongos Cavern MQ GS Scrub Room", ("GS Token", 0x01, 0x02, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas"))), + ("Dodongos Cavern MQ GS Larvae Room", ("GS Token", 0x01, 0x10, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas"))), + ("Dodongos Cavern MQ GS Lizalfos Room", ("GS Token", 0x01, 0x04, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas"))), + ("Dodongos Cavern MQ GS Song of Time Block Room", ("GS Token", 0x01, 0x08, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas"))), + ("Dodongos Cavern MQ GS Back Area", ("GS Token", 0x01, 0x01, None, 'Gold Skulltula Token', ("Dodongo's Cavern", "Master Quest", "Skulltulas"))), + # Dodongo's Cavern MQ Freestanding + ("Dodongos Cavern MQ Torch Puzzle Room Recovery Heart", ("Freestanding", 0x01, (9,0,6), None, 'Recovery Heart', ("Dodongo's Cavern", "Master Quest", "Freestanding"))), + # Dodongo's Cavern MQ Pots + ("Dodongos Cavern MQ Right Side Pot 1", ("Pot", 0x01, (1,0,8), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Right Side Pot 2", ("Pot", 0x01, (1,0,9), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Right Side Pot 3", ("Pot", 0x01, (1,0,10), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Right Side Pot 4", ("Pot", 0x01, (1,0,11), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Staircase Pot 1", ("Pot", 0x01, (2,0,17), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Staircase Pot 2", ("Pot", 0x01, (2,0,18), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Staircase Pot 3", ("Pot", 0x01, (2,0,19), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Staircase Pot 4", ("Pot", 0x01, (2,0,20), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Upper Lizalfos Pot 1", ("Pot", 0x01, (3,0,8), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Upper Lizalfos Pot 2", ("Pot", 0x01, (3,0,9), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Upper Lizalfos Pot 3", ("Pot", 0x01, (3,0,10), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Upper Lizalfos Pot 4", ("Pot", 0x01, (3,0,11), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Poes Room Pot 1", ("Pot", 0x01, (4,0,6), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Poes Room Pot 2", ("Pot", 0x01, (4,0,7), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Poes Room Pot 3", ("Pot", 0x01, (4,0,8), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Poes Room Pot 4", ("Pot", 0x01, (4,0,9), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Room Before Boss Pot 1", ("Pot", 0x01, (7,0,7), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Room Before Boss Pot 2", ("Pot", 0x01, (7,0,8), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Armos Army Room Upper Pot", ("Pot", 0x01, (8,0,20), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Armos Army Room Pot 1", ("Pot", 0x01, (8,0,22), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Armos Army Room Pot 2", ("Pot", 0x01, (8,0,23), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Torch Puzzle Room Pot Pillar", ("Pot", 0x01, (9,0,12), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Torch Puzzle Room Pot Corner", ("Pot", 0x01, (9,0,13), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Before Upper Lizalfos Pot 1", ("Pot", 0x01, (10,0,17), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Before Upper Lizalfos Pot 2", ("Pot", 0x01, (10,0,18), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ After Upper Lizalfos Pot 1", ("Pot", 0x01, (12,0,6), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ After Upper Lizalfos Pot 2", ("Pot", 0x01, (12,0,7), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Back Poe Room Pot 1", ("Pot", 0x01, (14,0,3), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + ("Dodongos Cavern MQ Back Poe Room Pot 2", ("Pot", 0x01, (14,0,4), None, 'Rupees (5)', ("Dodongo's Cavern", "Master Quest", "Pot"))), + # Dodongo's Cavern MQ Crates + ("Dodongos Cavern MQ Staircase Crate Bottom Left", ("Crate", 0x1, (2,0,41), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Staircase Crate Bottom Right", ("Crate", 0x1, (2,0,42), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Staircase Crate Mid Left", ("Crate", 0x1, (2,0,39), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Staircase Crate Top Left", ("Crate", 0x1, (2,0,40), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Staircase Crate Mid Right", ("Crate", 0x1, (2,0,43), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Staircase Crate Top Right", ("Crate", 0x1, (2,0,44), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 5", ("Crate", 0x1, (4,0,23),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 6", ("Crate", 0x1, (4,0,24),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 1", ("Crate", 0x1, (4,0,25),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 2", ("Crate", 0x1, (4,0,26),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 3", ("Crate", 0x1, (4,0,27),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 4", ("Crate", 0x1, (4,0,28),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate Near Bomb Flower", ("Crate", 0x1, (4,0,29),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Poes Room Crate 7", ("Crate", 0x1, (4,0,30),None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 1", ("Crate", 0x1, (6,0,7), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 2", ("Crate", 0x1, (6,0,8), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 3", ("Crate", 0x1, (6,0,9), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 4", ("Crate", 0x1, (6,0,10), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 5", ("Crate", 0x1, (6,0,11), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ Larvae Room Crate 6", ("Crate", 0x1, (6,0,12), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ After Upper Lizalfos Crate 1", ("Crate", 0x1, (12,0,11), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), + ("Dodongos Cavern MQ After Upper Lizalfos Crate 2", ("Crate", 0x1, (12,0,12), None, 'Rupee (1)', ("Dodongo's Cavern", "Master Quest", "Crate"))), # Dodongo's Cavern shared - ("Dodongos Cavern Boss Room Chest", ("Chest", 0x12, 0x00, None, 'Bombs (5)', ("Dodongo's Cavern", "Vanilla", "Master Quest",))), - ("Dodongos Cavern King Dodongo Heart", ("BossHeart", 0x12, 0x4F, None, 'Heart Container', ("Dodongo's Cavern", "Vanilla", "Master Quest",))), + ("Dodongos Cavern Lower Lizalfos Hidden Recovery Heart", ("Freestanding", 0x01, (3,0,6), None, 'Recovery Heart', ("Dodongo's Cavern", "Vanilla", "Master Quest", "Freestanding"))), + ("Dodongos Cavern Boss Room Chest", ("Chest", 0x12, 0x00, None, 'Bombs (5)', ("Dodongo's Cavern", "Vanilla", "Master Quest"))), + ("Dodongos Cavern King Dodongo Heart", ("BossHeart", 0x12, 0x4F, None, 'Heart Container', ("Dodongo's Cavern", "Vanilla", "Master Quest"))), # Jabu Jabu's Belly vanilla - ("Jabu Jabus Belly Boomerang Chest", ("Chest", 0x02, 0x01, None, 'Boomerang', ("Jabu Jabu's Belly", "Vanilla",))), - ("Jabu Jabus Belly Map Chest", ("Chest", 0x02, 0x02, None, 'Map (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Vanilla",))), - ("Jabu Jabus Belly Compass Chest", ("Chest", 0x02, 0x04, None, 'Compass (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Vanilla",))), - ("Jabu Jabus Belly Deku Scrub", ("NPC", 0x02, 0x30, None, 'Buy Deku Nut (5)', ("Jabu Jabu's Belly", "Vanilla", "Deku Scrub",))), - ("Jabu Jabus Belly GS Water Switch Room", ("GS Token", 0x02, 0x08, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas",))), - ("Jabu Jabus Belly GS Lobby Basement Lower", ("GS Token", 0x02, 0x01, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas",))), - ("Jabu Jabus Belly GS Lobby Basement Upper", ("GS Token", 0x02, 0x02, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas",))), - ("Jabu Jabus Belly GS Near Boss", ("GS Token", 0x02, 0x04, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas",))), + ("Jabu Jabus Belly Boomerang Chest", ("Chest", 0x02, 0x01, None, 'Boomerang', ("Jabu Jabu's Belly", "Vanilla"))), + ("Jabu Jabus Belly Map Chest", ("Chest", 0x02, 0x02, None, 'Map (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Vanilla"))), + ("Jabu Jabus Belly Compass Chest", ("Chest", 0x02, 0x04, None, 'Compass (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Vanilla"))), + ("Jabu Jabus Belly Deku Scrub", ("Scrub", 0x02, 0x30, None, 'Buy Deku Nut (5)', ("Jabu Jabu's Belly", "Vanilla", "Deku Scrub"))), + ("Jabu Jabus Belly GS Water Switch Room", ("GS Token", 0x02, 0x08, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas"))), + ("Jabu Jabus Belly GS Lobby Basement Lower", ("GS Token", 0x02, 0x01, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas"))), + ("Jabu Jabus Belly GS Lobby Basement Upper", ("GS Token", 0x02, 0x02, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas"))), + ("Jabu Jabus Belly GS Near Boss", ("GS Token", 0x02, 0x04, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Vanilla", "Skulltulas"))), + # Jabu Jabu's Belly Vanilla Pots + #("Jabu Jabus Belly Above Big Octo Pot X", ("Pot", 0x02, 0x28, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Above Big Octo Pot 1", ("Pot", 0x02, (6,0,8), None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Above Big Octo Pot 2", ("Pot", 0x02, (6,0,9), None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + #("Jabu Jabus Belly DLC Pot X", ("Pot", 0x02, 0x20, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement 2 Octoroks Pot 1", ("Pot", 0x02, (13,0,5), None, 'Rupees (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement 2 Octoroks Pot 2", ("Pot", 0x02, (13,0,6), None, 'Rupees (20)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement 2 Octoroks Pot 3", ("Pot", 0x02, (13,0,7), None, 'Rupees (20)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement 2 Octoroks Pot 4", ("Pot", 0x02, (13,0,8), None, 'Rupees (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement Switch Room Pot 1", ("Pot", 0x02, (14,0,8), None, 'Deku Seeds (30)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + #("Jabu Jabus Belly Basement Switch Room Pot X", ("Pot", 0x02, (14,0,9), None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Basement Switch Room Pot 2", ("Pot", 0x02, (14,0,10), None, 'Deku Seeds (30)', ("Jabu Jabu's Belly", "Vanilla", "Pot"))), + ("Jabu Jabus Belly Small Wooden Crate", ("SmallCrate", 0x02, (1,0,8), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "SmallCrate"))), + # Jabu Jabu's Belly MQ - ("Jabu Jabus Belly MQ Map Chest", ("Chest", 0x02, 0x03, None, 'Map (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ First Room Side Chest", ("Chest", 0x02, 0x05, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Second Room Lower Chest", ("Chest", 0x02, 0x02, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Compass Chest", ("Chest", 0x02, 0x00, None, 'Compass (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Basement Near Switches Chest", ("Chest", 0x02, 0x08, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Basement Near Vines Chest", ("Chest", 0x02, 0x04, None, 'Bombchus (10)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Boomerang Room Small Chest", ("Chest", 0x02, 0x01, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Boomerang Chest", ("Chest", 0x02, 0x06, None, 'Boomerang', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Falling Like Like Room Chest", ("Chest", 0x02, 0x09, None, 'Deku Stick (1)', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Second Room Upper Chest", ("Chest", 0x02, 0x07, None, 'Recovery Heart', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Near Boss Chest", ("Chest", 0x02, 0x0A, None, 'Deku Shield', ("Jabu Jabu's Belly", "Master Quest",))), - ("Jabu Jabus Belly MQ Cow", ("NPC", 0x02, 0x15, None, 'Milk', ("Jabu Jabu's Belly", "Master Quest", "Cow",))), - ("Jabu Jabus Belly MQ GS Boomerang Chest Room", ("GS Token", 0x02, 0x01, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas",))), - ("Jabu Jabus Belly MQ GS Tailpasaran Room", ("GS Token", 0x02, 0x04, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas",))), - ("Jabu Jabus Belly MQ GS Invisible Enemies Room", ("GS Token", 0x02, 0x08, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas",))), - ("Jabu Jabus Belly MQ GS Near Boss", ("GS Token", 0x02, 0x02, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas",))), + ("Jabu Jabus Belly MQ Map Chest", ("Chest", 0x02, 0x03, None, 'Map (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ First Room Side Chest", ("Chest", 0x02, 0x05, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Second Room Lower Chest", ("Chest", 0x02, 0x02, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Compass Chest", ("Chest", 0x02, 0x00, None, 'Compass (Jabu Jabus Belly)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Basement Near Switches Chest", ("Chest", 0x02, 0x08, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Basement Near Vines Chest", ("Chest", 0x02, 0x04, None, 'Bombchus (10)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Boomerang Room Small Chest", ("Chest", 0x02, 0x01, None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Boomerang Chest", ("Chest", 0x02, 0x06, None, 'Boomerang', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Falling Like Like Room Chest", ("Chest", 0x02, 0x09, None, 'Deku Stick (1)', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Second Room Upper Chest", ("Chest", 0x02, 0x07, None, 'Recovery Heart', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Near Boss Chest", ("Chest", 0x02, 0x0A, None, 'Deku Shield', ("Jabu Jabu's Belly", "Master Quest"))), + ("Jabu Jabus Belly MQ Cow", ("NPC", 0x02, 0x15, None, 'Milk', ("Jabu Jabu's Belly", "Master Quest", "Cow"))), + ("Jabu Jabus Belly MQ GS Boomerang Chest Room", ("GS Token", 0x02, 0x01, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas"))), + ("Jabu Jabus Belly MQ GS Tailpasaran Room", ("GS Token", 0x02, 0x04, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas"))), + ("Jabu Jabus Belly MQ GS Invisible Enemies Room", ("GS Token", 0x02, 0x08, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas"))), + ("Jabu Jabus Belly MQ GS Near Boss", ("GS Token", 0x02, 0x02, None, 'Gold Skulltula Token', ("Jabu Jabu's Belly", "Master Quest", "Skulltulas"))), + # Jabu Jabu's Belly MQ Freestanding + ("Jabu Jabus Belly MQ Underwater Green Rupee 1", ("Freestanding", 0x02, (1,0,1), None, 'Rupee (1)', ("Jabu Jabu's Belly", "Master Quest", "Freestanding"))), + ("Jabu Jabus Belly MQ Underwater Green Rupee 2", ("Freestanding", 0x02, (1,0,2), None, 'Rupee (1)', ("Jabu Jabu's Belly", "Master Quest", "Freestanding"))), + ("Jabu Jabus Belly MQ Underwater Green Rupee 3", ("Freestanding", 0x02, (1,0,3), None, 'Rupee (1)', ("Jabu Jabu's Belly", "Master Quest", "Freestanding"))), + ("Jabu Jabus Belly MQ Recovery Heart 1", ("Freestanding", 0x02, (1,0,9), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Master Quest", "Freestanding"))), + ("Jabu Jabus Belly MQ Recovery Heart 2", ("Freestanding", 0x02, (1,0,10), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Master Quest", "Freestanding"))), + # Jabu Jabu's Belly MQ Pots + ("Jabu Jabus Belly MQ First Room Pot 1", ("Pot", 0x02, (0,0,16), None, 'Bombs (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ First Room Pot 2", ("Pot", 0x02, (0,0,17), None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Elevator Room Pot 1", ("Pot", 0x02, (1,0,22), None, 'Arrows (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Elevator Room Pot 2", ("Pot", 0x02, (1,0,23), None, 'Deku Nuts (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + #("Jabu Jabus Belly MQ Near Boss Pot", ("Pot", 0x02, 0x31, None, 'N/A', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Falling Like Like Room Pot 1", ("Pot", 0x02, (11,0,27), None, 'Arrows (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Falling Like Like Room Pot 2", ("Pot", 0x02, (11,0,31), None, 'Bombs (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Boomerang Room Pot 1", ("Pot", 0x02, (14,0,11), None, 'Bombs (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), + ("Jabu Jabus Belly MQ Boomerang Room Pot 2", ("Pot", 0x02, (14,0,15), None, 'Bombs (5)', ("Jabu Jabu's Belly", "Master Quest", "Pot"))), # Jabu Jabu's Belly shared - ("Jabu Jabus Belly Barinade Heart", ("BossHeart", 0x13, 0x4F, None, 'Heart Container', ("Jabu Jabu's Belly", "Vanilla", "Master Quest",))), + ("Jabu Jabus Belly Barinade Heart", ("BossHeart", 0x13, 0x4F, None, 'Heart Container', ("Jabu Jabu's Belly", "Vanilla", "Master Quest"))), + ("Jabu Jabus Belly Barinade Pot 1", ("Pot", 0x13, (1,0,2), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), + ("Jabu Jabus Belly Barinade Pot 2", ("Pot", 0x13, (1,0,3), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), + ("Jabu Jabus Belly Barinade Pot 3", ("Pot", 0x13, (1,0,4), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), + ("Jabu Jabus Belly Barinade Pot 4", ("Pot", 0x13, (1,0,5), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), + ("Jabu Jabus Belly Barinade Pot 5", ("Pot", 0x13, (1,0,6), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), + ("Jabu Jabus Belly Barinade Pot 6", ("Pot", 0x13, (1,0,7), None, 'Recovery Heart', ("Jabu Jabu's Belly", "Vanilla", "Master Quest", "Pot"))), # Bottom of the Well vanilla - ("Bottom of the Well Front Left Fake Wall Chest", ("Chest", 0x08, 0x08, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Front Center Bombable Chest", ("Chest", 0x08, 0x02, None, 'Bombchus (10)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Back Left Bombable Chest", ("Chest", 0x08, 0x04, None, 'Deku Nuts (10)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Underwater Left Chest", ("Chest", 0x08, 0x09, None, 'Recovery Heart', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Freestanding Key", ("Collectable", 0x08, 0x01, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Compass Chest", ("Chest", 0x08, 0x01, None, 'Compass (Bottom of the Well)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Center Skulltula Chest", ("Chest", 0x08, 0x0E, None, 'Deku Nuts (5)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Right Bottom Fake Wall Chest", ("Chest", 0x08, 0x05, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Fire Keese Chest", ("Chest", 0x08, 0x0A, None, 'Deku Shield', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Like Like Chest", ("Chest", 0x08, 0x0C, None, 'Hylian Shield', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Map Chest", ("Chest", 0x08, 0x07, None, 'Map (Bottom of the Well)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Underwater Front Chest", ("Chest", 0x08, 0x10, None, 'Bombs (10)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Invisible Chest", ("Chest", 0x08, 0x14, None, 'Rupees (200)', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well Lens of Truth Chest", ("Chest", 0x08, 0x03, None, 'Lens of Truth', ("Bottom of the Well", "Vanilla",))), - ("Bottom of the Well GS West Inner Room", ("GS Token", 0x08, 0x04, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas",))), - ("Bottom of the Well GS East Inner Room", ("GS Token", 0x08, 0x02, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas",))), - ("Bottom of the Well GS Like Like Cage", ("GS Token", 0x08, 0x01, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas",))), + ("Bottom of the Well Front Left Fake Wall Chest", ("Chest", 0x08, 0x08, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Front Center Bombable Chest", ("Chest", 0x08, 0x02, None, 'Bombchus (10)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Back Left Bombable Chest", ("Chest", 0x08, 0x04, None, 'Deku Nuts (10)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Underwater Left Chest", ("Chest", 0x08, 0x09, None, 'Recovery Heart', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Freestanding Key", ("Collectable", 0x08, 0x01, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Compass Chest", ("Chest", 0x08, 0x01, None, 'Compass (Bottom of the Well)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Center Skulltula Chest", ("Chest", 0x08, 0x0E, None, 'Deku Nuts (5)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Right Bottom Fake Wall Chest", ("Chest", 0x08, 0x05, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Fire Keese Chest", ("Chest", 0x08, 0x0A, None, 'Deku Shield', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Like Like Chest", ("Chest", 0x08, 0x0C, None, 'Hylian Shield', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Map Chest", ("Chest", 0x08, 0x07, None, 'Map (Bottom of the Well)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Underwater Front Chest", ("Chest", 0x08, 0x10, None, 'Bombs (10)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Invisible Chest", ("Chest", 0x08, 0x14, None, 'Rupees (200)', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well Lens of Truth Chest", ("Chest", 0x08, 0x03, None, 'Lens of Truth', ("Bottom of the Well", "Vanilla"))), + ("Bottom of the Well GS West Inner Room", ("GS Token", 0x08, 0x04, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas"))), + ("Bottom of the Well GS East Inner Room", ("GS Token", 0x08, 0x02, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas"))), + ("Bottom of the Well GS Like Like Cage", ("GS Token", 0x08, 0x01, None, 'Gold Skulltula Token', ("Bottom of the Well", "Vanilla", "Skulltulas"))), + # Bottom of the Well Vanilla Freestanding + ("Bottom of the Well Center Room Pit Fall Blue Rupee 1", ("Freestanding", 0x08, (1,0,27), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Center Room Pit Fall Blue Rupee 2", ("Freestanding", 0x08, (1,0,28), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Center Room Pit Fall Blue Rupee 3", ("Freestanding", 0x08, (1,0,29), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Center Room Pit Fall Blue Rupee 4", ("Freestanding", 0x08, (1,0,30), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Center Room Pit Fall Blue Rupee 5", ("Freestanding", 0x08, (1,0,31), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Coffin Recovery Heart 1", ("Freestanding", 0x08, (2,0,14), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Freestanding"))), + ("Bottom of the Well Coffin Recovery Heart 2", ("Freestanding", 0x08, (2,0,15), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Freestanding"))), + # Bottom of the Well Vanilla Pots + ("Bottom of the Well Left Side Pot 1", ("Pot", 0x08, (0,0,23), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Left Side Pot 2", ("Pot", 0x08, (0,0,24), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Left Side Pot 3", ("Pot", 0x08, (0,0,25), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Near Entrance Pot 1", ("Pot", 0x08, (0,0,27), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Near Entrance Pot 2", ("Pot", 0x08, (0,0,28), None, 'Rupees (20)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Underwater Pot", ("Pot", 0x08, (0,0,30), None, 'Bombs (10)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 1", ("Pot", 0x08, (1,0,45), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 2", ("Pot", 0x08, (1,0,46), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 3", ("Pot", 0x08, (1,0,47), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 4", ("Pot", 0x08, (1,0,48), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 5", ("Pot", 0x08, (1,0,49), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 6", ("Pot", 0x08, (1,0,50), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 7", ("Pot", 0x08, (1,0,51), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 8", ("Pot", 0x08, (1,0,52), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 9", ("Pot", 0x08, (1,0,53), None, 'Deku Nuts (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 10", ("Pot", 0x08, (1,0,54), None, 'Rupees (20)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 11", ("Pot", 0x08, (1,0,55), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Basement Pot 12", ("Pot", 0x08, (1,0,56), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well Fire Keese Pot", ("Pot", 0x08, (3,0,7), None, 'Rupees (5)', ("Bottom of the Well", "Vanilla", "Pot"))), + ("Bottom of the Well West Inner Room Flying Pot 1", ("FlyingPot", 0x08, (6,0,3), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "FlyingPot"))), + ("Bottom of the Well West Inner Room Flying Pot 2", ("FlyingPot", 0x08, (6,0,4), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "FlyingPot"))), + ("Bottom of the Well West Inner Room Flying Pot 3", ("FlyingPot", 0x08, (6,0,5), None, 'Recovery Heart', ("Bottom of the Well", "Vanilla", "FlyingPot"))), + # Bottom of the Well MQ - ("Bottom of the Well MQ Map Chest", ("Chest", 0x08, 0x03, None, 'Map (Bottom of the Well)', ("Bottom of the Well", "Master Quest",))), - ("Bottom of the Well MQ East Inner Room Freestanding Key", ("Collectable", 0x08, 0x01, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Master Quest",))), - ("Bottom of the Well MQ Compass Chest", ("Chest", 0x08, 0x02, None, 'Compass (Bottom of the Well)', ("Bottom of the Well", "Master Quest",))), - ("Bottom of the Well MQ Dead Hand Freestanding Key", ("Collectable", 0x08, 0x02, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Master Quest",))), - ("Bottom of the Well MQ Lens of Truth Chest", ("Chest", 0x08, 0x01, None, 'Lens of Truth', ("Bottom of the Well", "Master Quest",))), - ("Bottom of the Well MQ GS Coffin Room", ("GS Token", 0x08, 0x04, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas",))), - ("Bottom of the Well MQ GS West Inner Room", ("GS Token", 0x08, 0x02, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas",))), - ("Bottom of the Well MQ GS Basement", ("GS Token", 0x08, 0x01, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas",))), + ("Bottom of the Well MQ Map Chest", ("Chest", 0x08, 0x03, None, 'Map (Bottom of the Well)', ("Bottom of the Well", "Master Quest"))), + ("Bottom of the Well MQ East Inner Room Freestanding Key", ("Collectable", 0x08, 0x01, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Master Quest"))), + ("Bottom of the Well MQ Compass Chest", ("Chest", 0x08, 0x02, None, 'Compass (Bottom of the Well)', ("Bottom of the Well", "Master Quest"))), + ("Bottom of the Well MQ Dead Hand Freestanding Key", ("Collectable", 0x08, 0x02, None, 'Small Key (Bottom of the Well)', ("Bottom of the Well", "Master Quest"))), + ("Bottom of the Well MQ Lens of Truth Chest", ("Chest", 0x08, 0x01, None, 'Lens of Truth', ("Bottom of the Well", "Master Quest"))), + ("Bottom of the Well MQ GS Coffin Room", ("GS Token", 0x08, 0x04, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas"))), + ("Bottom of the Well MQ GS West Inner Room", ("GS Token", 0x08, 0x02, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas"))), + ("Bottom of the Well MQ GS Basement", ("GS Token", 0x08, 0x01, None, 'Gold Skulltula Token', ("Bottom of the Well", "Master Quest", "Skulltulas"))), + # Bottom of the Well MQ Freestanding + ("Bottom of the Well MQ Bombable Recovery Heart 1", ("Freestanding", 0x08, (0,0,37), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Bombable Recovery Heart 2", ("Freestanding", 0x08, (0,0,38), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Basement Recovery Heart 1", ("Freestanding", 0x08, (1,0,28), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Basement Recovery Heart 2", ("Freestanding", 0x08, (1,0,29), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Basement Recovery Heart 3", ("Freestanding", 0x08, (1,0,30), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Coffin Recovery Heart 1", ("Freestanding", 0x08, (2,0,11), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + ("Bottom of the Well MQ Coffin Recovery Heart 2", ("Freestanding", 0x08, (2,0,12), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Freestanding"))), + # Bottom of the Well MQ Pots + ("Bottom of the Well MQ Center Room Right Pot 1", ("Pot", 0x08, (0,0,41), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Pot"))), + ("Bottom of the Well MQ Center Room Right Pot 2", ("Pot", 0x08, (0,0,43), None, 'Arrows (10)', ("Bottom of the Well", "Master Quest", "Pot"))), + ("Bottom of the Well MQ Center Room Right Pot 3", ("Pot", 0x08, (0,0,45), None, 'Bombs (5)', ("Bottom of the Well", "Master Quest", "Pot"))), + #("Bottom of the Well MQ Perimiter Behind Gate Bot", ("Pot", 0x08, 0x2A, None, 'N/A', ("Bottom of the Well", "Master Quest", "Pot"))), + ("Bottom of the Well MQ East Inner Room Pot 1", ("Pot", 0x08, (5,0,7), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Pot"))), + ("Bottom of the Well MQ East Inner Room Pot 2", ("Pot", 0x08, (5,0,8), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Pot"))), + ("Bottom of the Well MQ East Inner Room Pot 3", ("Pot", 0x08, (5,0,9), None, 'Recovery Heart', ("Bottom of the Well", "Master Quest", "Pot"))), # Forest Temple vanilla - ("Forest Temple First Room Chest", ("Chest", 0x03, 0x03, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple First Stalfos Chest", ("Chest", 0x03, 0x00, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Raised Island Courtyard Chest", ("Chest", 0x03, 0x05, None, 'Recovery Heart', ("Forest Temple", "Vanilla",))), - ("Forest Temple Map Chest", ("Chest", 0x03, 0x01, None, 'Map (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Well Chest", ("Chest", 0x03, 0x09, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Eye Switch Chest", ("Chest", 0x03, 0x04, None, 'Arrows (30)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Boss Key Chest", ("Chest", 0x03, 0x0E, None, 'Boss Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Floormaster Chest", ("Chest", 0x03, 0x02, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Red Poe Chest", ("Chest", 0x03, 0x0D, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Bow Chest", ("Chest", 0x03, 0x0C, None, 'Bow', ("Forest Temple", "Vanilla",))), - ("Forest Temple Blue Poe Chest", ("Chest", 0x03, 0x0F, None, 'Compass (Forest Temple)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Falling Ceiling Room Chest", ("Chest", 0x03, 0x07, None, 'Arrows (10)', ("Forest Temple", "Vanilla",))), - ("Forest Temple Basement Chest", ("Chest", 0x03, 0x0B, None, 'Arrows (5)', ("Forest Temple", "Vanilla",))), - ("Forest Temple GS First Room", ("GS Token", 0x03, 0x02, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas",))), - ("Forest Temple GS Lobby", ("GS Token", 0x03, 0x08, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas",))), - ("Forest Temple GS Raised Island Courtyard", ("GS Token", 0x03, 0x01, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas",))), - ("Forest Temple GS Level Island Courtyard", ("GS Token", 0x03, 0x04, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas",))), - ("Forest Temple GS Basement", ("GS Token", 0x03, 0x10, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas",))), + ("Forest Temple First Room Chest", ("Chest", 0x03, 0x03, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple First Stalfos Chest", ("Chest", 0x03, 0x00, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Raised Island Courtyard Chest", ("Chest", 0x03, 0x05, None, 'Recovery Heart', ("Forest Temple", "Vanilla"))), + ("Forest Temple Map Chest", ("Chest", 0x03, 0x01, None, 'Map (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Well Chest", ("Chest", 0x03, 0x09, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Eye Switch Chest", ("Chest", 0x03, 0x04, None, 'Arrows (30)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Boss Key Chest", ("Chest", 0x03, 0x0E, None, 'Boss Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Floormaster Chest", ("Chest", 0x03, 0x02, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Red Poe Chest", ("Chest", 0x03, 0x0D, None, 'Small Key (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Bow Chest", ("Chest", 0x03, 0x0C, None, 'Bow', ("Forest Temple", "Vanilla"))), + ("Forest Temple Blue Poe Chest", ("Chest", 0x03, 0x0F, None, 'Compass (Forest Temple)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Falling Ceiling Room Chest", ("Chest", 0x03, 0x07, None, 'Arrows (10)', ("Forest Temple", "Vanilla"))), + ("Forest Temple Basement Chest", ("Chest", 0x03, 0x0B, None, 'Arrows (5)', ("Forest Temple", "Vanilla"))), + ("Forest Temple GS First Room", ("GS Token", 0x03, 0x02, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas"))), + ("Forest Temple GS Lobby", ("GS Token", 0x03, 0x08, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas"))), + ("Forest Temple GS Raised Island Courtyard", ("GS Token", 0x03, 0x01, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas"))), + ("Forest Temple GS Level Island Courtyard", ("GS Token", 0x03, 0x04, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas"))), + ("Forest Temple GS Basement", ("GS Token", 0x03, 0x10, None, 'Gold Skulltula Token', ("Forest Temple", "Vanilla", "Skulltulas"))), + # Forest Temple Vanilla Freestanding + ("Forest Temple Courtyard Recovery Heart 1", ("Freestanding", 0x03, (8,0,10), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Freestanding"))), + ("Forest Temple Courtyard Recovery Heart 2", ("Freestanding", 0x03, (8,0,11), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Freestanding"))), + ("Forest Temple Well Recovery Heart 1", ("Freestanding", 0x03, (9,0,3), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Freestanding"))), + ("Forest Temple Well Recovery Heart 2", ("Freestanding", 0x03, (9,0,4), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Freestanding"))), + # Forest Temple Vanilla Pots + ("Forest Temple Center Room Right Pot 1", ("Pot", 0x03, (2,0,16), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Center Room Right Pot 2", ("Pot", 0x03, (2,0,12), None, 'Rupees (5)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Center Room Right Pot 3", ("Pot", 0x03, (2,0,14), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Center Room Left Pot 1", ("Pot", 0x03, (2,0,17), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Center Room Left Pot 2", ("Pot", 0x03, (2,0,13), None, 'Rupees (5)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Center Room Left Pot 3", ("Pot", 0x03, (2,0,15), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Lower Stalfos Pot", ("Pot", 0x03, (6,0,6), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + #("Forest Temple Lower Stalfos Pot 2", ("Pot", 0x03, (6,0,7), None, 'Rupees (20)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Upper Stalfos Pot 1", ("Pot", 0x03, (6,0,8), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Upper Stalfos Pot 2", ("Pot", 0x03, (6,0,9), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Upper Stalfos Pot 3", ("Pot", 0x03, (6,0,10), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Upper Stalfos Pot 4", ("Pot", 0x03, (6,0,11), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Blue Poe Room Pot 1", ("Pot", 0x03, (13,0,6), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Blue Poe Room Pot 2", ("Pot", 0x03, (13,0,7), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Blue Poe Room Pot 3", ("Pot", 0x03, (13,0,8), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Frozen Eye Switch Room Pot 1", ("Pot", 0x03, (14,0,6), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Frozen Eye Switch Room Pot 2", ("Pot", 0x03, (14,0,7), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Green Poe Room Pot 1", ("Pot", 0x03, (16,0,7), None, 'Recovery Heart', ("Forest Temple", "Vanilla", "Pot"))), + ("Forest Temple Green Poe Room Pot 2", ("Pot", 0x03, (16,0,8), None, 'Arrows (10)', ("Forest Temple", "Vanilla", "Pot"))), + # Forest Temple MQ - ("Forest Temple MQ First Room Chest", ("Chest", 0x03, 0x03, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Wolfos Chest", ("Chest", 0x03, 0x00, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Well Chest", ("Chest", 0x03, 0x09, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Raised Island Courtyard Lower Chest", ("Chest", 0x03, 0x01, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Raised Island Courtyard Upper Chest", ("Chest", 0x03, 0x05, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Boss Key Chest", ("Chest", 0x03, 0x0E, None, 'Boss Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Redead Chest", ("Chest", 0x03, 0x02, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Map Chest", ("Chest", 0x03, 0x0D, None, 'Map (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Bow Chest", ("Chest", 0x03, 0x0C, None, 'Bow', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Compass Chest", ("Chest", 0x03, 0x0F, None, 'Compass (Forest Temple)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Falling Ceiling Room Chest", ("Chest", 0x03, 0x06, None, 'Arrows (5)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ Basement Chest", ("Chest", 0x03, 0x0B, None, 'Arrows (5)', ("Forest Temple", "Master Quest",))), - ("Forest Temple MQ GS First Hallway", ("GS Token", 0x03, 0x02, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas",))), - ("Forest Temple MQ GS Raised Island Courtyard", ("GS Token", 0x03, 0x01, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas",))), - ("Forest Temple MQ GS Level Island Courtyard", ("GS Token", 0x03, 0x04, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas",))), - ("Forest Temple MQ GS Well", ("GS Token", 0x03, 0x08, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas",))), - ("Forest Temple MQ GS Block Push Room", ("GS Token", 0x03, 0x10, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas",))), + ("Forest Temple MQ First Room Chest", ("Chest", 0x03, 0x03, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Wolfos Chest", ("Chest", 0x03, 0x00, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Well Chest", ("Chest", 0x03, 0x09, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Raised Island Courtyard Lower Chest", ("Chest", 0x03, 0x01, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Raised Island Courtyard Upper Chest", ("Chest", 0x03, 0x05, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Boss Key Chest", ("Chest", 0x03, 0x0E, None, 'Boss Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Redead Chest", ("Chest", 0x03, 0x02, None, 'Small Key (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Map Chest", ("Chest", 0x03, 0x0D, None, 'Map (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Bow Chest", ("Chest", 0x03, 0x0C, None, 'Bow', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Compass Chest", ("Chest", 0x03, 0x0F, None, 'Compass (Forest Temple)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Falling Ceiling Room Chest", ("Chest", 0x03, 0x06, None, 'Arrows (5)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ Basement Chest", ("Chest", 0x03, 0x0B, None, 'Arrows (5)', ("Forest Temple", "Master Quest"))), + ("Forest Temple MQ GS First Hallway", ("GS Token", 0x03, 0x02, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas"))), + ("Forest Temple MQ GS Raised Island Courtyard", ("GS Token", 0x03, 0x01, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas"))), + ("Forest Temple MQ GS Level Island Courtyard", ("GS Token", 0x03, 0x04, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas"))), + ("Forest Temple MQ GS Well", ("GS Token", 0x03, 0x08, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas"))), + ("Forest Temple MQ GS Block Push Room", ("GS Token", 0x03, 0x10, None, 'Gold Skulltula Token', ("Forest Temple", "Master Quest", "Skulltulas"))), + # Forest Temple MQ Freestanding + ("Forest Temple MQ Courtyard Recovery Heart 1", ("Freestanding", 0x03, (8,0,11), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + ("Forest Temple MQ Courtyard Recovery Heart 2", ("Freestanding", 0x03, (8,0,12), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + ("Forest Temple MQ Courtyard Recovery Heart 3", ("Freestanding", 0x03, (8,0,13), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + ("Forest Temple MQ Well Recovery Heart 1", ("Freestanding", 0x03, (9,0,5), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + ("Forest Temple MQ Well Recovery Heart 2", ("Freestanding", 0x03, (9,0,6), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + ("Forest Temple MQ Well Recovery Heart 3", ("Freestanding", 0x03, (9,0,7), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Freestanding"))), + # Forest Temple MQ Pots + ("Forest Temple MQ Center Room Right Pot 1", ("Pot", 0x03, (2,0,10), None, 'Rupees (5)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Center Room Right Pot 2", ("Pot", 0x03, (2,0,12), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Center Room Right Pot 3", ("Pot", 0x03, (2,0,14), None, 'Arrows (10)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Center Room Left Pot 1", ("Pot", 0x03, (2,0,11), None, 'Rupees (5)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Center Room Left Pot 2", ("Pot", 0x03, (2,0,13), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Center Room Left Pot 3", ("Pot", 0x03, (2,0,15), None, 'Arrows (10)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Wolfos Room Pot", ("Pot", 0x03, (6,0,7), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + #("Forest Temple MQ Wolfos Room Pot 2", ("Pot", 0x03, (6,0,8), None, 'N/A', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Upper Stalfos Pot 1", ("Pot", 0x03, (6,0,9), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Upper Stalfos Pot 2", ("Pot", 0x03, (6,0,10), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Upper Stalfos Pot 3", ("Pot", 0x03, (6,0,11), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Upper Stalfos Pot 4", ("Pot", 0x03, (6,0,12), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Blue Poe Room Pot 1", ("Pot", 0x03, (13,0,6), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Blue Poe Room Pot 2", ("Pot", 0x03, (13,0,7), None, 'Arrows (10)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Blue Poe Room Pot 3", ("Pot", 0x03, (13,0,8), None, 'Arrows (10)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Green Poe Room Pot 1", ("Pot", 0x03, (16,0,7), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Green Poe Room Pot 2", ("Pot", 0x03, (16,0,8), None, 'Arrows (10)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Basement Pot 1", ("Pot", 0x03, (17,0,12), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Basement Pot 2", ("Pot", 0x03, (17,0,13), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Basement Pot 3", ("Pot", 0x03, (17,0,14), None, 'Bombs (5)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Basement Pot 4", ("Pot", 0x03, (17,0,15), None, 'Arrows (5)', ("Forest Temple", "Master Quest", "Pot"))), + ("Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 1", ("SmallCrate", 0x03, (14,0,8), None, 'Recovery Heart', ("Forest Temple", "Master Quest", "SmallCrate"))), + ("Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 2", ("SmallCrate", 0x03, (14,0,9), None, 'Arrows (5)', ("Forest Temple", "Master Quest", "SmallCrate"))), + ("Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 3", ("SmallCrate", 0x03, (14,0,10), None, 'Arrows (5)', ("Forest Temple", "Master Quest", "SmallCrate"))), + # Forest Temple shared - ("Forest Temple Phantom Ganon Heart", ("BossHeart", 0x14, 0x4F, None, 'Heart Container', ("Forest Temple", "Vanilla", "Master Quest",))), + ("Forest Temple Phantom Ganon Heart", ("BossHeart", 0x14, 0x4F, None, 'Heart Container', ("Forest Temple", "Vanilla", "Master Quest"))), # Fire Temple vanilla - ("Fire Temple Near Boss Chest", ("Chest", 0x04, 0x01, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Flare Dancer Chest", ("Chest", 0x04, 0x00, None, 'Bombs (10)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Boss Key Chest", ("Chest", 0x04, 0x0C, None, 'Boss Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Big Lava Room Lower Open Door Chest", ("Chest", 0x04, 0x04, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Big Lava Room Blocked Door Chest", ("Chest", 0x04, 0x02, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Boulder Maze Lower Chest", ("Chest", 0x04, 0x03, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Boulder Maze Side Room Chest", ("Chest", 0x04, 0x08, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Map Chest", ("Chest", 0x04, 0x0A, None, 'Map (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Boulder Maze Shortcut Chest", ("Chest", 0x04, 0x0B, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Boulder Maze Upper Chest", ("Chest", 0x04, 0x06, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Scarecrow Chest", ("Chest", 0x04, 0x0D, None, 'Rupees (200)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Compass Chest", ("Chest", 0x04, 0x07, None, 'Compass (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple Megaton Hammer Chest", ("Chest", 0x04, 0x05, None, 'Megaton Hammer', ("Fire Temple", "Vanilla",))), - ("Fire Temple Highest Goron Chest", ("Chest", 0x04, 0x09, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla",))), - ("Fire Temple GS Boss Key Loop", ("GS Token", 0x04, 0x02, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas",))), - ("Fire Temple GS Song of Time Room", ("GS Token", 0x04, 0x01, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas",))), - ("Fire Temple GS Boulder Maze", ("GS Token", 0x04, 0x04, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas",))), - ("Fire Temple GS Scarecrow Climb", ("GS Token", 0x04, 0x10, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas",))), - ("Fire Temple GS Scarecrow Top", ("GS Token", 0x04, 0x08, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas",))), + ("Fire Temple Near Boss Chest", ("Chest", 0x04, 0x01, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Flare Dancer Chest", ("Chest", 0x04, 0x00, None, 'Bombs (10)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Boss Key Chest", ("Chest", 0x04, 0x0C, None, 'Boss Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Big Lava Room Lower Open Door Chest", ("Chest", 0x04, 0x04, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Big Lava Room Blocked Door Chest", ("Chest", 0x04, 0x02, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Boulder Maze Lower Chest", ("Chest", 0x04, 0x03, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Boulder Maze Side Room Chest", ("Chest", 0x04, 0x08, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Map Chest", ("Chest", 0x04, 0x0A, None, 'Map (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Boulder Maze Shortcut Chest", ("Chest", 0x04, 0x0B, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Boulder Maze Upper Chest", ("Chest", 0x04, 0x06, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Scarecrow Chest", ("Chest", 0x04, 0x0D, None, 'Rupees (200)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Compass Chest", ("Chest", 0x04, 0x07, None, 'Compass (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple Megaton Hammer Chest", ("Chest", 0x04, 0x05, None, 'Megaton Hammer', ("Fire Temple", "Vanilla"))), + ("Fire Temple Highest Goron Chest", ("Chest", 0x04, 0x09, None, 'Small Key (Fire Temple)', ("Fire Temple", "Vanilla"))), + ("Fire Temple GS Boss Key Loop", ("GS Token", 0x04, 0x02, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas"))), + ("Fire Temple GS Song of Time Room", ("GS Token", 0x04, 0x01, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas"))), + ("Fire Temple GS Boulder Maze", ("GS Token", 0x04, 0x04, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas"))), + ("Fire Temple GS Scarecrow Climb", ("GS Token", 0x04, 0x10, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas"))), + ("Fire Temple GS Scarecrow Top", ("GS Token", 0x04, 0x08, None, 'Gold Skulltula Token', ("Fire Temple", "Vanilla", "Skulltulas"))), + # Fire Temple Vanilla Freestanding + ("Fire Temple Elevator Room Recovery Heart 1", ("Freestanding", 0x04, (21,0,7), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Elevator Room Recovery Heart 2", ("Freestanding", 0x04, (21,0,8), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Elevator Room Recovery Heart 3", ("Freestanding", 0x04, (21,0,9), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Narrow Path Room Recovery Heart 1", ("Freestanding", 0x04, (6,0,1), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Narrow Path Room Recovery Heart 2", ("Freestanding", 0x04, (6,0,2), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Narrow Path Room Recovery Heart 3", ("Freestanding", 0x04, (6,0,3), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Moving Fire Room Recovery Heart 1", ("Freestanding", 0x04, (16,0,8), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Moving Fire Room Recovery Heart 2", ("Freestanding", 0x04, (16,0,9), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + ("Fire Temple Moving Fire Room Recovery Heart 3", ("Freestanding", 0x04, (16,0,10), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Freestanding"))), + # Fire Temple Vanilla Pots + ("Fire Temple Big Lava Room Pot 1", ("Pot", 0x04, (1,0,27), None, 'Arrows (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Big Lava Room Pot 2", ("Pot", 0x04, (1,0,28), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Big Lava Room Pot 3", ("Pot", 0x04, (1,0,29), None, 'Arrows (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Near Boss Pot 1", ("Pot", 0x04, (2,0,10), None, 'Bombs (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Near Boss Pot 2", ("Pot", 0x04, (2,0,11), None, 'Bombs (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Right Side Pot 1", ("Pot", 0x04, (10,0,52), None, 'Bombs (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Right Side Pot 2", ("Pot", 0x04, (10,0,53), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Right Side Pot 3", ("Pot", 0x04, (10,0,54), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Right Side Pot 4", ("Pot", 0x04, (10,0,55), None, 'Bombs (10)', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Left Side Pot 1", ("Pot", 0x04, (10,0,56), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Left Side Pot 2", ("Pot", 0x04, (10,0,57), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Left Side Pot 3", ("Pot", 0x04, (10,0,58), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + ("Fire Temple Flame Maze Left Side Pot 4", ("Pot", 0x04, (10,0,59), None, 'Recovery Heart', ("Fire Temple", "Vanilla", "Pot"))), + # Fire Temple MQ - ("Fire Temple MQ Map Room Side Chest", ("Chest", 0x04, 0x02, None, 'Hylian Shield', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Megaton Hammer Chest", ("Chest", 0x04, 0x00, None, 'Megaton Hammer', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Map Chest", ("Chest", 0x04, 0x0C, None, 'Map (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Near Boss Chest", ("Chest", 0x04, 0x07, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Big Lava Room Blocked Door Chest", ("Chest", 0x04, 0x01, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Boss Key Chest", ("Chest", 0x04, 0x04, None, 'Boss Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Lizalfos Maze Side Room Chest", ("Chest", 0x04, 0x08, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Compass Chest", ("Chest", 0x04, 0x0B, None, 'Compass (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Lizalfos Maze Upper Chest", ("Chest", 0x04, 0x06, None, 'Bombs (10)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Lizalfos Maze Lower Chest", ("Chest", 0x04, 0x03, None, 'Bombs (10)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Freestanding Key", ("Collectable", 0x04, 0x1C, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ Chest On Fire", ("Chest", 0x04, 0x05, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest",))), - ("Fire Temple MQ GS Big Lava Room Open Door", ("GS Token", 0x04, 0x01, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas",))), - ("Fire Temple MQ GS Skull On Fire", ("GS Token", 0x04, 0x04, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas",))), - ("Fire Temple MQ GS Fire Wall Maze Center", ("GS Token", 0x04, 0x08, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas",))), - ("Fire Temple MQ GS Fire Wall Maze Side Room", ("GS Token", 0x04, 0x10, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas",))), - ("Fire Temple MQ GS Above Fire Wall Maze", ("GS Token", 0x04, 0x02, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas",))), + ("Fire Temple MQ Map Room Side Chest", ("Chest", 0x04, 0x02, None, 'Hylian Shield', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Megaton Hammer Chest", ("Chest", 0x04, 0x00, None, 'Megaton Hammer', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Map Chest", ("Chest", 0x04, 0x0C, None, 'Map (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Near Boss Chest", ("Chest", 0x04, 0x07, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Big Lava Room Blocked Door Chest", ("Chest", 0x04, 0x01, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Boss Key Chest", ("Chest", 0x04, 0x04, None, 'Boss Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Lizalfos Maze Side Room Chest", ("Chest", 0x04, 0x08, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Compass Chest", ("Chest", 0x04, 0x0B, None, 'Compass (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Lizalfos Maze Upper Chest", ("Chest", 0x04, 0x06, None, 'Bombs (10)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Lizalfos Maze Lower Chest", ("Chest", 0x04, 0x03, None, 'Bombs (10)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Freestanding Key", ("Collectable", 0x04, 0x1C, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ Chest On Fire", ("Chest", 0x04, 0x05, None, 'Small Key (Fire Temple)', ("Fire Temple", "Master Quest"))), + ("Fire Temple MQ GS Big Lava Room Open Door", ("GS Token", 0x04, 0x01, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas"))), + ("Fire Temple MQ GS Skull On Fire", ("GS Token", 0x04, 0x04, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas"))), + ("Fire Temple MQ GS Flame Maze Center", ("GS Token", 0x04, 0x08, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas"))), + ("Fire Temple MQ GS Flame Maze Side Room", ("GS Token", 0x04, 0x10, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas"))), + ("Fire Temple MQ GS Above Flame Maze", ("GS Token", 0x04, 0x02, None, 'Gold Skulltula Token', ("Fire Temple", "Master Quest", "Skulltulas"))), + # Fire Temple MQ Freestanding + ("Fire Temple MQ Elevator Room Recovery Heart 1", ("Freestanding", 0x04, (21,0,3), None, 'Recovery Heart', ("Fire Temple", "Master Quest", "Freestanding"))), + ("Fire Temple MQ Elevator Room Recovery Heart 2", ("Freestanding", 0x04, (21,0,4), None, 'Recovery Heart', ("Fire Temple", "Master Quest", "Freestanding"))), + ("Fire Temple MQ Elevator Room Recovery Heart 3", ("Freestanding", 0x04, (21,0,5), None, 'Recovery Heart', ("Fire Temple", "Master Quest", "Freestanding"))), + # Fire Temple MQ Pots/Crates + ("Fire Temple MQ First Room Pot 1", ("Pot", 0x04, (0,0,10), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ First Room Pot 2", ("Pot", 0x04, (0,0,11), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Big Lava Room Left Pot", ("Pot", 0x04, (1,0,18), None, 'Arrows (10)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Big Lava Room Right Pot", ("Pot", 0x04, (1,0,20), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Big Lava Room Alcove Pot", ("Pot", 0x04, (1,0,19), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Near Boss Pot 1", ("Pot", 0x04, (2,0,9), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Near Boss Pot 2", ("Pot", 0x04, (2,0,10), None, 'Arrows (30)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Narrow Path Room Pot 1", ("Pot", 0x04, (6,0,3), None, 'Arrows (10)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Narrow Path Room Pot 2", ("Pot", 0x04, (6,0,4), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Narrow Path Room Pot 3", ("Pot", 0x04, (6,0,2), None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Flame Maze Right Upper Pot 1", ("Pot", 0x04, (10,0,48), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Flame Maze Right Upper Pot 2", ("Pot", 0x04, (10,0,49), None, 'Recovery Heart', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Flame Maze Right Pot 1", ("Pot", 0x04, (10,0,50), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Flame Maze Right Pot 2", ("Pot", 0x04, (10,0,51), None, 'Recovery Heart', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Flame Maze Left Pot 2", ("Pot", 0x04, (10,0,52), None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Flame Maze Left Pot 1", ("Pot", 0x04, (10,0,53), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Shoot Torch On Wall Room Pot 1", ("Pot", 0x04, (16,0,6), None, 'Arrows (10)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Shoot Torch On Wall Room Pot 2", ("Pot", 0x04, (16,0,7), None, 'Arrows (10)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Iron Knuckle Room Pot 1", ("Pot", 0x04, (18,0,10), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Iron Knuckle Room Pot 2", ("Pot", 0x04, (18,0,12), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Iron Knuckle Room Pot 3", ("Pot", 0x04, (18,0,13), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Iron Knuckle Room Pot 4", ("Pot", 0x04, (18,0,14), None, 'Bombs (5)', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Iron Knuckle Room Pot 5", ("Pot", 0x04, (18,0,9)0x2F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Iron Knuckle Room Pot 6", ("Pot", 0x04, (18,0,15)0x35, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Iron Knuckle Room Pot 7", ("Pot", 0x04, (18,0,16)0x36, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Iron Knuckle Room Pot 8", ("Pot", 0x04, (18,0,11)0x31, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + ("Fire Temple MQ Boss Key Chest Room Pot", ("Pot", 0x04, (19,0,15), None, 'Rupees (5)', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Boss Key Chest Room Pot 2", ("Pot", 0x04, (19,0,14), None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Upper Maze Small Wooden Crate 1", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Upper Maze Small Wooden Crate 2", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Shoot Torch On Wall Room Small Wooden Crate 1", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Shoot Torch On Wall Room Small Wooden Crate 2", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Shoot Torch On Wall Room Small Wooden Crate 3", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Shoot Torch On Wall Room Small Wooden Crate 4", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + #("Fire Temple MQ Shoot Torch On Wall Room Small Wooden Crate 5", ("Pot", 0x04, 0x3F, None, 'N/A', ("Fire Temple", "Master Quest", "Pot"))), + # Fire Temple MQ Crates + ("Fire Temple MQ Near Boss Left Crate 1", ("Crate", 0x04, (2,0,14), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Near Boss Left Crate 2", ("Crate", 0x04, (2,0,15), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Near Boss Right Lower Crate 1", ("Crate", 0x04, (2,0,11), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Near Boss Right Lower Crate 2", ("Crate", 0x04, (2,0,12), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Near Boss Right Mid Crate", ("Crate", 0x04, (2,0,13), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Near Boss Right Upper Crate", ("Crate", 0x04, (2,0,16), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 1", ("Crate", 0x04, (4,0,11), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 2", ("Crate", 0x04, (4,0,12), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 3", ("Crate", 0x04, (4,0,13), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 4", ("Crate", 0x04, (4,0,14), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 5", ("Crate", 0x04, (4,0,15), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shortcut Crate 6", ("Crate", 0x04, (4,0,16), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Lower Lizalfos Maze Crate 1", ("Crate", 0x04, (5,0,28), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Lower Lizalfos Maze Crate 2", ("Crate", 0x04, (5,0,29), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Lower Lizalfos Maze Crate 3", ("Crate", 0x04, (5,0,30), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Upper Lizalfos Maze Crate 1", ("Crate", 0x04, (5,0,25), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Upper Lizalfos Maze Crate 2", ("Crate", 0x04, (5,0,26), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Upper Lizalfos Maze Crate 3", ("Crate", 0x04, (5,0,27), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shoot Torch On Wall Room Right Crate 1", ("Crate", 0x04, (16,0,11), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shoot Torch On Wall Room Right Crate 2", ("Crate", 0x04, (16,0,13), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shoot Torch On Wall Room Center Crate", ("Crate", 0x04, (16,0,10), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shoot Torch On Wall Room Left Crate 1", ("Crate", 0x04, (16,0,12), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + ("Fire Temple MQ Shoot Torch On Wall Room Left Crate 2", ("Crate", 0x04, (16,0,9), None, 'Rupee (1)', ("Fire Temple", "Master Quest", "Crate"))), + # Fire Temple shared - ("Fire Temple Volvagia Heart", ("BossHeart", 0x15, 0x4F, None, 'Heart Container', ("Fire Temple", "Vanilla", "Master Quest",))), + ("Fire Temple Volvagia Heart", ("BossHeart", 0x15, 0x4F, None, 'Heart Container', ("Fire Temple", "Vanilla", "Master Quest"))), # Water Temple vanilla - ("Water Temple Compass Chest", ("Chest", 0x05, 0x09, None, 'Compass (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Map Chest", ("Chest", 0x05, 0x02, None, 'Map (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Cracked Wall Chest", ("Chest", 0x05, 0x00, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Torches Chest", ("Chest", 0x05, 0x01, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Boss Key Chest", ("Chest", 0x05, 0x05, None, 'Boss Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Central Pillar Chest", ("Chest", 0x05, 0x06, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Central Bow Target Chest", ("Chest", 0x05, 0x08, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Longshot Chest", ("Chest", 0x05, 0x07, None, 'Progressive Hookshot', ("Water Temple", "Vanilla",))), - ("Water Temple River Chest", ("Chest", 0x05, 0x03, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple Dragon Chest", ("Chest", 0x05, 0x0A, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla",))), - ("Water Temple GS Behind Gate", ("GS Token", 0x05, 0x01, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas",))), - ("Water Temple GS Near Boss Key Chest", ("GS Token", 0x05, 0x08, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas",))), - ("Water Temple GS Central Pillar", ("GS Token", 0x05, 0x04, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas",))), - ("Water Temple GS Falling Platform Room", ("GS Token", 0x05, 0x02, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas",))), - ("Water Temple GS River", ("GS Token", 0x05, 0x10, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas",))), + ("Water Temple Compass Chest", ("Chest", 0x05, 0x09, None, 'Compass (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Map Chest", ("Chest", 0x05, 0x02, None, 'Map (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Cracked Wall Chest", ("Chest", 0x05, 0x00, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Torches Chest", ("Chest", 0x05, 0x01, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Boss Key Chest", ("Chest", 0x05, 0x05, None, 'Boss Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Central Pillar Chest", ("Chest", 0x05, 0x06, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Central Bow Target Chest", ("Chest", 0x05, 0x08, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Longshot Chest", ("Chest", 0x05, 0x07, None, 'Progressive Hookshot', ("Water Temple", "Vanilla"))), + ("Water Temple River Chest", ("Chest", 0x05, 0x03, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple Dragon Chest", ("Chest", 0x05, 0x0A, None, 'Small Key (Water Temple)', ("Water Temple", "Vanilla"))), + ("Water Temple GS Behind Gate", ("GS Token", 0x05, 0x01, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas"))), + ("Water Temple GS Near Boss Key Chest", ("GS Token", 0x05, 0x08, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas"))), + ("Water Temple GS Central Pillar", ("GS Token", 0x05, 0x04, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas"))), + ("Water Temple GS Falling Platform Room", ("GS Token", 0x05, 0x02, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas"))), + ("Water Temple GS River", ("GS Token", 0x05, 0x10, None, 'Gold Skulltula Token', ("Water Temple", "Vanilla", "Skulltulas"))), + # Water Temple Vanilla Freestanding + ("Water Temple River Recovery Heart 1", ("Freestanding", 0x05, (21,0,12), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Freestanding"))), + ("Water Temple River Recovery Heart 2", ("Freestanding", 0x05, (21,0,13), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Freestanding"))), + ("Water Temple River Recovery Heart 3", ("Freestanding", 0x05, (21,0,16), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Freestanding"))), + ("Water Temple River Recovery Heart 4", ("Freestanding", 0x05, (21,0,17), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Freestanding"))), + # Water Temple Vanilla Pots + ("Water Temple Main Room L2 Pot 1", ("Pot", 0x05, (0,0,24), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Main Room L2 Pot 2", ("Pot", 0x05, (0,0,25), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Behind Gate Pot 1", ("Pot", 0x05, (3,0,10), None, 'Bombs (5)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Behind Gate Pot 2", ("Pot", 0x05, (3,0,11), None, 'Bombs (5)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Behind Gate Pot 3", ("Pot", 0x05, (3,0,14), None, 'Arrows (10)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Behind Gate Pot 4", ("Pot", 0x05, (3,0,15), None, 'Arrows (10)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Near Compass Pot 1", ("Pot", 0x05, (4,0,9), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Near Compass Pot 2", ("Pot", 0x05, (4,0,10), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Near Compass Pot 3", ("Pot", 0x05, (4,0,11), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Like Like Pot 1", ("Pot", 0x05, (6,0,7), None, 'Rupees (5)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Like Like Pot 2", ("Pot", 0x05, (6,0,8), None, 'Rupees (5)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple North Basement Block Puzzle Pot 1", ("Pot", 0x05, (14,0,12), None, 'Bombs (5)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple North Basement Block Puzzle Pot 2", ("Pot", 0x05, (14,0,13), None, 'Bombs (5)', ("Water Temple", "Vanilla", "Pot"))), + #("Water Temple Boss Key Pot 1", ("Pot", 0x05, 0x3D, None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + #("Water Temple Boss Key Pot 2", ("Pot", 0x05, 0x3E, None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple L1 Torch Pot 1", ("Pot", 0x05, (17,0,8), None, 'Arrows (10)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple L1 Torch Pot 2", ("Pot", 0x05, (17,0,9), None, 'Arrows (10)', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple River Pot 1", ("Pot", 0x05, (21,0,14), None, 'Arrows (10)', ("Water Temple", "Vanilla", "Pot"))), + #("Water Temple River Pot 2", ("Pot", 0x05, (21,0,15), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Central Bow Target Pot 1", ("Pot", 0x05, (20,0,4), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + ("Water Temple Central Bow Target Pot 2", ("Pot", 0x05, (20,0,5), None, 'Recovery Heart', ("Water Temple", "Vanilla", "Pot"))), + # Water Temple MQ - ("Water Temple MQ Longshot Chest", ("Chest", 0x05, 0x00, None, 'Progressive Hookshot', ("Water Temple", "Master Quest",))), - ("Water Temple MQ Map Chest", ("Chest", 0x05, 0x02, None, 'Map (Water Temple)', ("Water Temple", "Master Quest",))), - ("Water Temple MQ Compass Chest", ("Chest", 0x05, 0x01, None, 'Compass (Water Temple)', ("Water Temple", "Master Quest",))), - ("Water Temple MQ Central Pillar Chest", ("Chest", 0x05, 0x06, None, 'Small Key (Water Temple)', ("Water Temple", "Master Quest",))), - ("Water Temple MQ Boss Key Chest", ("Chest", 0x05, 0x05, None, 'Boss Key (Water Temple)', ("Water Temple", "Master Quest",))), - ("Water Temple MQ Freestanding Key", ("Collectable", 0x05, 0x01, None, 'Small Key (Water Temple)', ("Water Temple", "Master Quest",))), - ("Water Temple MQ GS Lizalfos Hallway", ("GS Token", 0x05, 0x01, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas",))), - ("Water Temple MQ GS Before Upper Water Switch", ("GS Token", 0x05, 0x04, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas",))), - ("Water Temple MQ GS River", ("GS Token", 0x05, 0x02, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas",))), - ("Water Temple MQ GS Freestanding Key Area", ("GS Token", 0x05, 0x08, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas",))), - ("Water Temple MQ GS Triple Wall Torch", ("GS Token", 0x05, 0x10, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas",))), + ("Water Temple MQ Longshot Chest", ("Chest", 0x05, 0x00, None, 'Progressive Hookshot', ("Water Temple", "Master Quest"))), + ("Water Temple MQ Map Chest", ("Chest", 0x05, 0x02, None, 'Map (Water Temple)', ("Water Temple", "Master Quest"))), + ("Water Temple MQ Compass Chest", ("Chest", 0x05, 0x01, None, 'Compass (Water Temple)', ("Water Temple", "Master Quest"))), + ("Water Temple MQ Central Pillar Chest", ("Chest", 0x05, 0x06, None, 'Small Key (Water Temple)', ("Water Temple", "Master Quest"))), + ("Water Temple MQ Boss Key Chest", ("Chest", 0x05, 0x05, None, 'Boss Key (Water Temple)', ("Water Temple", "Master Quest"))), + ("Water Temple MQ Freestanding Key", ("Collectable", 0x05, 0x01, None, 'Small Key (Water Temple)', ("Water Temple", "Master Quest"))), + ("Water Temple MQ GS Lizalfos Hallway", ("GS Token", 0x05, 0x01, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas"))), + ("Water Temple MQ GS Before Upper Water Switch", ("GS Token", 0x05, 0x04, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas"))), + ("Water Temple MQ GS River", ("GS Token", 0x05, 0x02, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas"))), + ("Water Temple MQ GS Freestanding Key Area", ("GS Token", 0x05, 0x08, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas"))), + ("Water Temple MQ GS Triple Wall Torch", ("GS Token", 0x05, 0x10, None, 'Gold Skulltula Token', ("Water Temple", "Master Quest", "Skulltulas"))), + # Water Temple MQ Pots + ("Water Temple MQ Triple Wall Torch Pot 1", ("Pot", 0x05, (3,0,20), None, 'Arrows (10)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Triple Wall Torch Pot 2", ("Pot", 0x05, (3,0,21), None, 'Arrows (10)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Triple Wall Torch Pot 3", ("Pot", 0x05, (3,0,26), None, 'Bombs (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Triple Wall Torch Pot 4", ("Pot", 0x05, (3,0,27), None, 'Bombs (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Storage Room Pot 1", ("Pot", 0x05, (4,0,14), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Storage Room Pot 2", ("Pot", 0x05, (4,0,15), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Storage Room Pot 3", ("Pot", 0x05, (4,0,16), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Dark Link Top Pot 1", ("Pot", 0x05, (6,0,8), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Dark Link Top Pot 2", ("Pot", 0x05, (6,0,9), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Dark Link Lower Pot", ("Pot", 0x05, (6,0,10), None, 'Deku Nuts (5)', ("Water Temple", "Master Quest", "Pot"))), + #("Water Tempe MQ Before Dark Link Lower Pot 2", ("Pot", 0x05, (6,0,11), None, 'N/A', ("Water Temple", "Master Quest", "Pot"))), + #("Water Tempe MQ Before Dark Link Lower Pot 3", ("Pot", 0x05, (6,0,12), None, 'N/A', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Room After Dark Link Pot", ("Pot", 0x05, (7,0,3), None, 'Arrows (30)', ("Water Temple", "Master Quest", "Pot"))), + #("Water Tempe MQ Room After Dark Link Pot 2", ("Pot", 0x05, (7,0,4), None, 'N/A', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Boss Key Chest Room Pot", ("Pot", 0x05, (9,0,16), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Upper Water Switch Pot 1", ("Pot", 0x05, (10,0,18), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Upper Water Switch Pot 2", ("Pot", 0x05, (10,0,19), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Before Upper Water Switch Pot 3", ("Pot", 0x05, (10,0,20), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Dodongo Room Pot 1", ("Pot", 0x05, (14,0,15), None, 'Bombs (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Dodongo Room Pot 2", ("Pot", 0x05, (14,0,16), None, 'Bombs (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Freestanding Key Room Pot", ("Pot", 0x05, (16,0,10), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + #("Water Temple MQ Freestanding Item Room Pot 2", ("Pot", 0x05, (16,0,9), None, 'N/A', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ L1 Torch Pot 1", ("Pot", 0x05, (17,0,14), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ L1 Torch Pot 2", ("Pot", 0x05, (17,0,15), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Lizalfos Hallway Pot 1", ("Pot", 0x05, (20,0,18), None, 'Rupees (20)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Lizalfos Hallway Pot 2", ("Pot", 0x05, (20,0,19), None, 'Arrows (10)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Lizalfos Hallway Pot 3", ("Pot", 0x05, (20,0,20), None, 'Rupees (5)', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Lizalfos Hallway Gate Pot 1", ("Pot", 0x05, (20,0,21), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ Lizalfos Hallway Gate Pot 2", ("Pot", 0x05, (20,0,22), None, 'Recovery Heart', ("Water Temple", "Master Quest", "Pot"))), + ("Water Temple MQ River Pot", ("Pot", 0x05, (21,0,19), None, 'Arrows (10)', ("Water Temple", "Master Quest", "Pot"))), + #("Water Temple MQ River Pot 2", ("Pot", 0x05, (21,0,20), None, 'N/A', ("Water Temple", "Master Quest", "Pot"))), + # Water Temple MQ Crates + ("Water Temple MQ Central Pillar Upper Crate 1", ("Crate", 0x05, (1,0,4), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Upper Crate 2", ("Crate", 0x05, (1,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 1", ("Crate", 0x05, (2,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 2", ("Crate", 0x05, (2,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 3", ("Crate", 0x05, (2,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 4", ("Crate", 0x05, (2,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 5", ("Crate", 0x05, (2,0,14), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 6", ("Crate", 0x05, (2,0,15), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 7", ("Crate", 0x05, (2,0,16), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 8", ("Crate", 0x05, (2,0,17), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 9", ("Crate", 0x05, (2,0,18), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 10", ("Crate", 0x05, (2,0,19), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 11", ("Crate", 0x05, (2,0,20), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 12", ("Crate", 0x05, (2,0,21), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 13", ("Crate", 0x05, (2,0,22), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Central Pillar Lower Crate 14", ("Crate", 0x05, (2,0,23), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 1", ("Crate", 0x05, (3,0,8), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 2", ("Crate", 0x05, (3,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 3", ("Crate", 0x05, (3,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 4", ("Crate", 0x05, (3,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 5", ("Crate", 0x05, (3,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Submerged Crate 6", ("Crate", 0x05, (3,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Behind Gate Crate 1", ("Crate", 0x05, (3,0,14), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Behind Gate Crate 2", ("Crate", 0x05, (3,0,15), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Triple Wall Torch Behind Gate Crate 3", ("Crate", 0x05, (3,0,16), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 1", ("Crate", 0x05, (4,0,3), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 2", ("Crate", 0x05, (4,0,4), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 3", ("Crate", 0x05, (4,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 4", ("Crate", 0x05, (4,0,6), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 5", ("Crate", 0x05, (4,0,7), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 6", ("Crate", 0x05, (4,0,8), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Storage Room Crate 7", ("Crate", 0x05, (4,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue By Torches Crate 1", ("Crate", 0x05, (8,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue By Torches Crate 2", ("Crate", 0x05, (8,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Submerged Crate 1", ("Crate", 0x05, (8,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Submerged Crate 2", ("Crate", 0x05, (8,0,14), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Submerged Crate 3", ("Crate", 0x05, (8,0,15), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Submerged Crate 4", ("Crate", 0x05, (8,0,16), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Near Door Crate 1", ("Crate", 0x05, (8,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dragon Statue Near Door Crate 2", ("Crate", 0x05, (8,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Boss Key Chest Room Upper Crate", ("Crate", 0x05, (9,0,3), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Boss Key Chest Room Lower Crate 1", ("Crate", 0x05, (9,0,2), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Boss Key Chest Room Lower Crate 2", ("Crate", 0x05, (9,0,4), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Boss Key Chest Room Lower Crate 3", ("Crate", 0x05, (9,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Boss Key Chest Room Lower Crate 4", ("Crate", 0x05, (9,0,6), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 1", ("Crate", 0x05, (10,0,4), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 2", ("Crate", 0x05, (10,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 3", ("Crate", 0x05, (10,0,6), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 4", ("Crate", 0x05, (10,0,7), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 5", ("Crate", 0x05, (10,0,8), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Lower Crate 6", ("Crate", 0x05, (10,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Upper Crate 1", ("Crate", 0x05, (10,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Before Upper Water Switch Upper Crate 2", ("Crate", 0x05, (10,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Behind Gate Crate 1", ("Crate", 0x05, (12,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Behind Gate Crate 2", ("Crate", 0x05, (12,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Behind Gate Crate 3", ("Crate", 0x05, (12,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Behind Gate Crate 4", ("Crate", 0x05, (12,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Front Crate 1", ("Crate", 0x05, (12,0,14), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Front Crate 2", ("Crate", 0x05, (12,0,15), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 1", ("Crate", 0x05, (12,0,16), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 2", ("Crate", 0x05, (12,0,17), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 3", ("Crate", 0x05, (12,0,18), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 4", ("Crate", 0x05, (12,0,19), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 5", ("Crate", 0x05, (12,0,20), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Area Submerged Crate 6", ("Crate", 0x05, (12,0,21), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dodongo Room Lower Crate 1", ("Crate", 0x05, (14,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dodongo Room Lower Crate 2", ("Crate", 0x05, (14,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dodongo Room Lower Crate 3", ("Crate", 0x05, (14,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dodongo Room Upper Crate", ("Crate", 0x05, (14,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Dodongo Room Hall Crate", ("Crate", 0x05, (14,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Room Crate 1", ("Crate", 0x05, (16,0,3), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Room Crate 2", ("Crate", 0x05, (16,0,4), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Room Crate 3", ("Crate", 0x05, (16,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Room Crate 4", ("Crate", 0x05, (16,0,6), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Freestanding Key Room Crate 5", ("Crate", 0x05, (16,0,7), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Gate Crate 1", ("Crate", 0x05, (20,0,5), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Gate Crate 2", ("Crate", 0x05, (20,0,6), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Room Crate 1", ("Crate", 0x05, (20,0,7), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Room Crate 2", ("Crate", 0x05, (20,0,8), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Room Crate 3", ("Crate", 0x05, (20,0,9), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Room Crate 4", ("Crate", 0x05, (20,0,10), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Room Crate 5", ("Crate", 0x05, (20,0,11), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Hall Crate 1", ("Crate", 0x05, (20,0,12), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Hall Crate 2", ("Crate", 0x05, (20,0,13), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + ("Water Temple MQ Lizalfos Hallway Hall Crate 3", ("Crate", 0x05, (20,0,14), None, 'Rupee (1)', ("Water Temple", "Master Quest", "Crate"))), + # Water Temple shared - ("Water Temple Morpha Heart", ("BossHeart", 0x16, 0x4F, None, 'Heart Container', ("Water Temple", "Vanilla", "Master Quest",))), + ("Water Temple Morpha Heart", ("BossHeart", 0x16, 0x4F, None, 'Heart Container', ("Water Temple", "Vanilla", "Master Quest"))), # Shadow Temple vanilla - ("Shadow Temple Map Chest", ("Chest", 0x07, 0x01, None, 'Map (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Hover Boots Chest", ("Chest", 0x07, 0x07, None, 'Hover Boots', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Compass Chest", ("Chest", 0x07, 0x03, None, 'Compass (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Early Silver Rupee Chest", ("Chest", 0x07, 0x02, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Invisible Blades Visible Chest", ("Chest", 0x07, 0x0C, None, 'Rupees (5)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Invisible Blades Invisible Chest", ("Chest", 0x07, 0x16, None, 'Arrows (30)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Falling Spikes Lower Chest", ("Chest", 0x07, 0x05, None, 'Arrows (10)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Falling Spikes Upper Chest", ("Chest", 0x07, 0x06, None, 'Rupees (5)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Falling Spikes Switch Chest", ("Chest", 0x07, 0x04, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Invisible Spikes Chest", ("Chest", 0x07, 0x09, None, 'Rupees (5)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Freestanding Key", ("Collectable", 0x07, 0x01, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Wind Hint Chest", ("Chest", 0x07, 0x15, None, 'Arrows (10)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple After Wind Enemy Chest", ("Chest", 0x07, 0x08, None, 'Rupees (5)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple After Wind Hidden Chest", ("Chest", 0x07, 0x14, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Spike Walls Left Chest", ("Chest", 0x07, 0x0A, None, 'Rupees (5)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Boss Key Chest", ("Chest", 0x07, 0x0B, None, 'Boss Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple Invisible Floormaster Chest", ("Chest", 0x07, 0x0D, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla",))), - ("Shadow Temple GS Like Like Room", ("GS Token", 0x07, 0x08, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas",))), - ("Shadow Temple GS Falling Spikes Room", ("GS Token", 0x07, 0x02, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas",))), - ("Shadow Temple GS Single Giant Pot", ("GS Token", 0x07, 0x01, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas",))), - ("Shadow Temple GS Near Ship", ("GS Token", 0x07, 0x10, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas",))), - ("Shadow Temple GS Triple Giant Pot", ("GS Token", 0x07, 0x04, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas",))), + ("Shadow Temple Map Chest", ("Chest", 0x07, 0x01, None, 'Map (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Hover Boots Chest", ("Chest", 0x07, 0x07, None, 'Hover Boots', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Compass Chest", ("Chest", 0x07, 0x03, None, 'Compass (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Early Silver Rupee Chest", ("Chest", 0x07, 0x02, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Invisible Blades Visible Chest", ("Chest", 0x07, 0x0C, None, 'Rupees (5)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Invisible Blades Invisible Chest", ("Chest", 0x07, 0x16, None, 'Arrows (30)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Falling Spikes Lower Chest", ("Chest", 0x07, 0x05, None, 'Arrows (10)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Falling Spikes Upper Chest", ("Chest", 0x07, 0x06, None, 'Rupees (5)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Falling Spikes Switch Chest", ("Chest", 0x07, 0x04, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Invisible Spikes Chest", ("Chest", 0x07, 0x09, None, 'Rupees (5)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Freestanding Key", ("Collectable", 0x07, 0x01, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Wind Hint Chest", ("Chest", 0x07, 0x15, None, 'Arrows (10)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple After Wind Enemy Chest", ("Chest", 0x07, 0x08, None, 'Rupees (5)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple After Wind Hidden Chest", ("Chest", 0x07, 0x14, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Spike Walls Left Chest", ("Chest", 0x07, 0x0A, None, 'Rupees (5)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Boss Key Chest", ("Chest", 0x07, 0x0B, None, 'Boss Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple Invisible Floormaster Chest", ("Chest", 0x07, 0x0D, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Vanilla"))), + ("Shadow Temple GS Invisible Blades Room", ("GS Token", 0x07, 0x08, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas"))), + ("Shadow Temple GS Falling Spikes Room", ("GS Token", 0x07, 0x02, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas"))), + ("Shadow Temple GS Single Giant Pot", ("GS Token", 0x07, 0x01, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas"))), + ("Shadow Temple GS Near Ship", ("GS Token", 0x07, 0x10, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas"))), + ("Shadow Temple GS Triple Giant Pot", ("GS Token", 0x07, 0x04, None, 'Gold Skulltula Token', ("Shadow Temple", "Vanilla", "Skulltulas"))), + # Shadow Temple Vanilla Freestanding + ("Shadow Temple Invisible Blades Recovery Heart 1", ("Freestanding", 0x07, (16,0,5), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple Invisible Blades Recovery Heart 2", ("Freestanding", 0x07, (16,0,6), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple Before Boat Recovery Heart 1", ("Freestanding", 0x07, (21,0,7), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple Before Boat Recovery Heart 2", ("Freestanding", 0x07, (21,0,8), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple After Boat Upper Recovery Heart 1", ("Freestanding", 0x07, (21,0,9), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple After Boat Upper Recovery Heart 2", ("Freestanding", 0x07, (21,0,10), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple After Boat Lower Recovery Heart", ("Freestanding", 0x07, (21,0,11), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Freestanding"))), + ("Shadow Temple 3 Spinning Pots Rupee 1", ("RupeeTower", 0x07, (12,0,20), ([0x280D0D4, 0x280D0E4, 0x280D0F4], None), 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 2", ("RupeeTower", 0x07, (12,0,21), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 3", ("RupeeTower", 0x07, (12,0,22), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 4", ("RupeeTower", 0x07, (12,0,23), None, 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 5", ("RupeeTower", 0x07, (12,0,24), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 6", ("RupeeTower", 0x07, (12,0,25), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 7", ("RupeeTower", 0x07, (12,0,26), None, 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 8", ("RupeeTower", 0x07, (12,0,27), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple 3 Spinning Pots Rupee 9", ("RupeeTower", 0x07, (12,0,28), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + #Shadow Temple Vanilla Pots + ("Shadow Temple Whispering Walls Near Dead Hand Pot", ("Pot", 0x07, (0,0,1), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Left Pot 1", ("Pot", 0x07, (0,0,2), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Left Pot 2", ("Pot", 0x07, (0,0,3), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Left Pot 3", ("Pot", 0x07, (0,0,4), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Front Pot 1", ("Pot", 0x07, (0,0,5), None, 'Deku Nuts (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Front Pot 2", ("Pot", 0x07, (0,0,6), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Whispering Walls Flying Pot", ("FlyingPot", 0x07, (0,0,7), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "FlyingPot"))), + ("Shadow Temple Map Chest Room Pot 1", ("Pot", 0x07, (1,0,4), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Map Chest Room Pot 2", ("Pot", 0x07, (1,0,5), None, 'Arrows (10)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Falling Spikes Lower Pot 2", ("Pot", 0x07, (10,0,4), None, 'Bombs (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Falling Spikes Lower Pot 1", ("Pot", 0x07, (10,0,5), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Falling Spikes Upper Pot 1", ("Pot", 0x07, (10,0,6), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Falling Spikes Upper Pot 2", ("Pot", 0x07, (10,0,7), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Spike Walls Pot", ("Pot", 0x07, (13,0,3), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Invisible Floormaster Pot 1", ("Pot", 0x07, (17,0,2), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Invisible Floormaster Pot 2", ("Pot", 0x07, (17,0,3), None, 'Arrows (30)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple After Wind Pot 1", ("Pot", 0x07, (20,0,3), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple After Wind Pot 2", ("Pot", 0x07, (20,0,4), None, 'Deku Nuts (5)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple After Wind Flying Pot 1", ("FlyingPot", 0x07, (20,0,5), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "FlyingPot"))), + ("Shadow Temple After Wind Flying Pot 2", ("FlyingPot", 0x07, (20,0,6), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "FlyingPot"))), + ("Shadow Temple After Boat Pot", ("Pot", 0x07, (21,0,17), None, 'Arrows (10)', ("Shadow Temple", "Vanilla", "Pot"))), + #("Shadow Temple After Boat Pot 2" ("Pot", 0x07, (21,0,18), None, 'Recovery Heart', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Near Boss Pot 1", ("Pot", 0x07, (21,0,19), None, 'Arrows (30)', ("Shadow Temple", "Vanilla", "Pot"))), + ("Shadow Temple Near Boss Pot 2", ("Pot", 0x07, (21,0,20), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "Pot"))), + # Shadow Temple MQ - ("Shadow Temple MQ Early Gibdos Chest", ("Chest", 0x07, 0x03, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Map Chest", ("Chest", 0x07, 0x02, None, 'Map (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Near Ship Invisible Chest", ("Chest", 0x07, 0x0E, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Compass Chest", ("Chest", 0x07, 0x01, None, 'Compass (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Hover Boots Chest", ("Chest", 0x07, 0x07, None, 'Hover Boots', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Invisible Blades Invisible Chest", ("Chest", 0x07, 0x16, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Invisible Blades Visible Chest", ("Chest", 0x07, 0x0C, None, 'Rupees (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Beamos Silver Rupees Chest", ("Chest", 0x07, 0x0F, None, 'Arrows (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Falling Spikes Lower Chest", ("Chest", 0x07, 0x05, None, 'Arrows (10)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Falling Spikes Upper Chest", ("Chest", 0x07, 0x06, None, 'Rupees (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Falling Spikes Switch Chest", ("Chest", 0x07, 0x04, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Invisible Spikes Chest", ("Chest", 0x07, 0x09, None, 'Rupees (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Stalfos Room Chest", ("Chest", 0x07, 0x10, None, 'Rupees (20)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Wind Hint Chest", ("Chest", 0x07, 0x15, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ After Wind Hidden Chest", ("Chest", 0x07, 0x14, None, 'Arrows (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ After Wind Enemy Chest", ("Chest", 0x07, 0x08, None, 'Rupees (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Boss Key Chest", ("Chest", 0x07, 0x0B, None, 'Boss Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Spike Walls Left Chest", ("Chest", 0x07, 0x0A, None, 'Rupees (5)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Freestanding Key", ("Collectable", 0x07, 0x06, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ Bomb Flower Chest", ("Chest", 0x07, 0x0D, None, 'Arrows (10)', ("Shadow Temple", "Master Quest",))), - ("Shadow Temple MQ GS Falling Spikes Room", ("GS Token", 0x07, 0x02, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas",))), - ("Shadow Temple MQ GS Wind Hint Room", ("GS Token", 0x07, 0x01, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas",))), - ("Shadow Temple MQ GS After Wind", ("GS Token", 0x07, 0x08, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas",))), - ("Shadow Temple MQ GS After Ship", ("GS Token", 0x07, 0x10, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas",))), - ("Shadow Temple MQ GS Near Boss", ("GS Token", 0x07, 0x04, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas",))), + ("Shadow Temple MQ Early Gibdos Chest", ("Chest", 0x07, 0x03, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Map Chest", ("Chest", 0x07, 0x02, None, 'Map (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Near Ship Invisible Chest", ("Chest", 0x07, 0x0E, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Compass Chest", ("Chest", 0x07, 0x01, None, 'Compass (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Hover Boots Chest", ("Chest", 0x07, 0x07, None, 'Hover Boots', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Invisible Blades Invisible Chest", ("Chest", 0x07, 0x16, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Invisible Blades Visible Chest", ("Chest", 0x07, 0x0C, None, 'Rupees (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Beamos Silver Rupees Chest", ("Chest", 0x07, 0x0F, None, 'Arrows (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Falling Spikes Lower Chest", ("Chest", 0x07, 0x05, None, 'Arrows (10)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Falling Spikes Upper Chest", ("Chest", 0x07, 0x06, None, 'Rupees (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Falling Spikes Switch Chest", ("Chest", 0x07, 0x04, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Invisible Spikes Chest", ("Chest", 0x07, 0x09, None, 'Rupees (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Stalfos Room Chest", ("Chest", 0x07, 0x10, None, 'Rupees (20)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Wind Hint Chest", ("Chest", 0x07, 0x15, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ After Wind Hidden Chest", ("Chest", 0x07, 0x14, None, 'Arrows (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ After Wind Enemy Chest", ("Chest", 0x07, 0x08, None, 'Rupees (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Boss Key Chest", ("Chest", 0x07, 0x0B, None, 'Boss Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Spike Walls Left Chest", ("Chest", 0x07, 0x0A, None, 'Rupees (5)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Freestanding Key", ("Collectable", 0x07, 0x06, None, 'Small Key (Shadow Temple)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ Bomb Flower Chest", ("Chest", 0x07, 0x0D, None, 'Arrows (10)', ("Shadow Temple", "Master Quest"))), + ("Shadow Temple MQ GS Falling Spikes Room", ("GS Token", 0x07, 0x02, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas"))), + ("Shadow Temple MQ GS Wind Hint Room", ("GS Token", 0x07, 0x01, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas"))), + ("Shadow Temple MQ GS After Wind", ("GS Token", 0x07, 0x08, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas"))), + ("Shadow Temple MQ GS After Ship", ("GS Token", 0x07, 0x10, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas"))), + ("Shadow Temple MQ GS Near Boss", ("GS Token", 0x07, 0x04, None, 'Gold Skulltula Token', ("Shadow Temple", "Master Quest", "Skulltulas"))), + # Shadow Temple MQ Freestanding + ("Shadow Temple MQ Invisible Blades Recovery Heart 1", ("Freestanding", 0x07, (16,0,5), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ Invisible Blades Recovery Heart 2", ("Freestanding", 0x07, (16,0,6), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ Before Boat Recovery Heart 1", ("Freestanding", 0x07, (21,0,10), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ Before Boat Recovery Heart 2", ("Freestanding", 0x07, (21,0,11), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ After Boat Upper Recovery Heart 1", ("Freestanding", 0x07, (21,0,12), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ After Boat Upper Recovery Heart 2", ("Freestanding", 0x07, (21,0,13), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ After Boat Lower Recovery Heart", ("Freestanding", 0x07, (21,0,14), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Freestanding"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 1", ("RupeeTower", 0x07, (12,0,20), ([0x28127b8, 0x28127c8, 0x28127d8], None), 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 2", ("RupeeTower", 0x07, (12,0,21), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 3", ("RupeeTower", 0x07, (12,0,22), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 4", ("RupeeTower", 0x07, (12,0,23), None, 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 5", ("RupeeTower", 0x07, (12,0,24), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 6", ("RupeeTower", 0x07, (12,0,25), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 7", ("RupeeTower", 0x07, (12,0,26), None, 'Rupee (1)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 8", ("RupeeTower", 0x07, (12,0,27), None, 'Rupees (5)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + ("Shadow Temple MQ 3 Spinning Pots Rupee 9", ("RupeeTower", 0x07, (12,0,28), None, 'Rupees (20)', ("Shadow Temple", "Vanilla", "RupeeTower"))), + # Shadow Temple MQ Pots/Crates + ("Shadow Temple MQ Whispering Walls Pot 1", ("Pot", 0x07, (0,0,5), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Whispering Walls Pot 2", ("Pot", 0x07, (0,0,6), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Whispering Walls After Time Block Flying Pot 1",("FlyingPot", 0x07, (0,0,7), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ Whispering Walls After Time Block Flying Pot 2",("FlyingPot", 0x07, (0,0,9), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ Whispering Walls Before Time Block Flying Pot 1",("FlyingPot", 0x07, (0,0,8), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ Whispering Walls Before Time Block Flying Pot 2",("FlyingPot", 0x07, (0,0,10), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ Compass Room Pot 1", ("Pot", 0x07, (1,0,5), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Compass Room Pot 2", ("Pot", 0x07, (1,0,6), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Falling Spikes Lower Pot 1", ("Pot", 0x07, (10,0,4), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Falling Spikes Lower Pot 2", ("Pot", 0x07, (10,0,5), None, 'Bombs (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Falling Spikes Upper Pot 1", ("Pot", 0x07, (10,0,6), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Falling Spikes Upper Pot 2", ("Pot", 0x07, (10,0,7), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ After Wind Pot 1", ("Pot", 0x07, (20,0,4), None, 'Rupees (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ After Wind Pot 2", ("Pot", 0x07, (20,0,5), None, 'Deku Nuts (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ After Wind Flying Pot 1", ("FlyingPot", 0x07, (20,0,6), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ After Wind Flying Pot 2", ("FlyingPot", 0x07, (20,0,7), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "FlyingPot"))), + ("Shadow Temple MQ After Boat Pot 1", ("Pot", 0x07, (21,0,20), None, 'Arrows (10)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ After Boat Pot 2", ("Pot", 0x07, (21,0,21), None, 'Arrows (10)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Near Boss Pot 1", ("Pot", 0x07, (21,0,22), None, 'Rupees (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Near Boss Pot 2", ("Pot", 0x07, (21,0,23), None, 'Arrows (30)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Bomb Flower Room Pot 1", ("Pot", 0x07, (17,0,2), None, 'Arrows (30)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Bomb Flower Room Pot 2", ("Pot", 0x07, (17,0,3), None, 'Bombs (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Spike Walls Pot", ("Pot", 0x07, (13,0,9), None, 'Rupees (5)', ("Shadow Temple", "Master Quest", "Pot"))), + ("Shadow Temple MQ Truth Spinner Small Wooden Crate 1", ("SmallCrate", 0x07, (2,0,16), None, 'Arrows (10)', ("Shadow Temple", "Master Quest", "SmallCrate"))), + ("Shadow Temple MQ Truth Spinner Small Wooden Crate 2", ("SmallCrate", 0x07, (2,0,17), None, 'Rupees (5)', ("Shadow Temple", "Master Quest", "SmallCrate"))), + ("Shadow Temple MQ Truth Spinner Small Wooden Crate 3", ("SmallCrate", 0x07, (2,0,18), None, 'Bombs (5)', ("Shadow Temple", "Master Quest", "SmallCrate"))), + ("Shadow Temple MQ Truth Spinner Small Wooden Crate 4", ("SmallCrate", 0x07, (2,0,19), None, 'Recovery Heart', ("Shadow Temple", "Master Quest", "SmallCrate"))), + # Shadow Temple shared - ("Shadow Temple Bongo Bongo Heart", ("BossHeart", 0x18, 0x4F, None, 'Heart Container', ("Shadow Temple", "Vanilla", "Master Quest",))), + ("Shadow Temple Bongo Bongo Heart", ("BossHeart", 0x18, 0x4F, None, 'Heart Container', ("Shadow Temple", "Vanilla", "Master Quest"))), # Spirit Temple shared # Vanilla and MQ locations are mixed to ensure the positions of Silver Gauntlets/Mirror Shield chests are correct for both versions - ("Spirit Temple Child Bridge Chest", ("Chest", 0x06, 0x08, None, 'Deku Shield', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Child Early Torches Chest", ("Chest", 0x06, 0x00, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Child Climb North Chest", ("Chest", 0x06, 0x06, None, 'Bombchus (10)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Child Climb East Chest", ("Chest", 0x06, 0x0C, None, 'Deku Shield', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Map Chest", ("Chest", 0x06, 0x03, None, 'Map (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Sun Block Room Chest", ("Chest", 0x06, 0x01, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple MQ Entrance Front Left Chest", ("Chest", 0x06, 0x1A, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Entrance Back Right Chest", ("Chest", 0x06, 0x1F, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Entrance Front Right Chest", ("Chest", 0x06, 0x1B, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Entrance Back Left Chest", ("Chest", 0x06, 0x1E, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Map Chest", ("Chest", 0x06, 0x00, None, 'Map (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Map Room Enemy Chest", ("Chest", 0x06, 0x08, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Child Climb North Chest", ("Chest", 0x06, 0x06, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Child Climb South Chest", ("Chest", 0x06, 0x0C, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Compass Chest", ("Chest", 0x06, 0x03, None, 'Compass (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Silver Block Hallway Chest", ("Chest", 0x06, 0x1C, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Sun Block Room Chest", ("Chest", 0x06, 0x01, None, 'Recovery Heart', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple Silver Gauntlets Chest", ("Chest", 0x5C, 0x0B, None, 'Progressive Strength Upgrade', ("Spirit Temple", "Vanilla", "Master Quest", "Desert Colossus"))), - - ("Spirit Temple Compass Chest", ("Chest", 0x06, 0x04, None, 'Compass (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Early Adult Right Chest", ("Chest", 0x06, 0x07, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple First Mirror Left Chest", ("Chest", 0x06, 0x0D, None, 'Ice Trap', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple First Mirror Right Chest", ("Chest", 0x06, 0x0E, None, 'Recovery Heart', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Statue Room Northeast Chest", ("Chest", 0x06, 0x0F, None, 'Rupees (5)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Statue Room Hand Chest", ("Chest", 0x06, 0x02, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Near Four Armos Chest", ("Chest", 0x06, 0x05, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Hallway Right Invisible Chest", ("Chest", 0x06, 0x14, None, 'Recovery Heart', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Hallway Left Invisible Chest", ("Chest", 0x06, 0x15, None, 'Recovery Heart', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple MQ Child Hammer Switch Chest", ("Chest", 0x06, 0x1D, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Statue Room Lullaby Chest", ("Chest", 0x06, 0x0F, None, 'Rupees (5)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Statue Room Invisible Chest", ("Chest", 0x06, 0x02, None, 'Recovery Heart', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Leever Room Chest", ("Chest", 0x06, 0x04, None, 'Rupees (50)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Symphony Room Chest", ("Chest", 0x06, 0x07, None, 'Rupees (50)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Beamos Room Chest", ("Chest", 0x06, 0x19, None, 'Recovery Heart', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Chest Switch Chest", ("Chest", 0x06, 0x18, None, 'Ice Trap', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple MQ Boss Key Chest", ("Chest", 0x06, 0x05, None, 'Boss Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - ("Spirit Temple Mirror Shield Chest", ("Chest", 0x5C, 0x09, None, 'Mirror Shield', ("Spirit Temple", "Vanilla", "Master Quest", "Desert Colossus"))), - - ("Spirit Temple Boss Key Chest", ("Chest", 0x06, 0x0A, None, 'Boss Key (Spirit Temple)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple Topmost Chest", ("Chest", 0x06, 0x12, None, 'Bombs (20)', ("Spirit Temple", "Vanilla",))), - ("Spirit Temple MQ Mirror Puzzle Invisible Chest", ("Chest", 0x06, 0x12, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest",))), - - ("Spirit Temple GS Metal Fence", ("GS Token", 0x06, 0x10, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas",))), - ("Spirit Temple GS Sun on Floor Room", ("GS Token", 0x06, 0x08, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas",))), - ("Spirit Temple GS Hall After Sun Block Room", ("GS Token", 0x06, 0x01, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas",))), - ("Spirit Temple GS Lobby", ("GS Token", 0x06, 0x04, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas",))), - ("Spirit Temple GS Boulder Room", ("GS Token", 0x06, 0x02, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas",))), - ("Spirit Temple MQ GS Sun Block Room", ("GS Token", 0x06, 0x01, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas",))), - ("Spirit Temple MQ GS Leever Room", ("GS Token", 0x06, 0x02, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas",))), - ("Spirit Temple MQ GS Symphony Room", ("GS Token", 0x06, 0x08, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas",))), - ("Spirit Temple MQ GS Nine Thrones Room West", ("GS Token", 0x06, 0x04, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas",))), - ("Spirit Temple MQ GS Nine Thrones Room North", ("GS Token", 0x06, 0x10, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas",))), - - ("Spirit Temple Twinrova Heart", ("BossHeart", 0x17, 0x4F, None, 'Heart Container', ("Spirit Temple", "Vanilla", "Master Quest",))), + ("Spirit Temple Child Bridge Chest", ("Chest", 0x06, 0x08, None, 'Deku Shield', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Child Early Torches Chest", ("Chest", 0x06, 0x00, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Child Climb North Chest", ("Chest", 0x06, 0x06, None, 'Bombchus (10)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Child Climb East Chest", ("Chest", 0x06, 0x0C, None, 'Deku Shield', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Map Chest", ("Chest", 0x06, 0x03, None, 'Map (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Sun Block Room Chest", ("Chest", 0x06, 0x01, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple MQ Entrance Front Left Chest", ("Chest", 0x06, 0x1A, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Entrance Back Right Chest", ("Chest", 0x06, 0x1F, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Entrance Front Right Chest", ("Chest", 0x06, 0x1B, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Entrance Back Left Chest", ("Chest", 0x06, 0x1E, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Map Chest", ("Chest", 0x06, 0x00, None, 'Map (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Map Room Enemy Chest", ("Chest", 0x06, 0x08, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Child Climb North Chest", ("Chest", 0x06, 0x06, None, 'Bombchus (10)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Child Climb South Chest", ("Chest", 0x06, 0x0C, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Compass Chest", ("Chest", 0x06, 0x03, None, 'Compass (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Silver Block Hallway Chest", ("Chest", 0x06, 0x1C, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Sun Block Room Chest", ("Chest", 0x06, 0x01, None, 'Recovery Heart', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple Silver Gauntlets Chest", ("Chest", 0x5C, 0x0B, None, 'Progressive Strength Upgrade', ("Spirit Temple", "Vanilla", "Master Quest", "Desert Colossus"))), + + ("Spirit Temple Compass Chest", ("Chest", 0x06, 0x04, None, 'Compass (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Early Adult Right Chest", ("Chest", 0x06, 0x07, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple First Mirror Left Chest", ("Chest", 0x06, 0x0D, None, 'Ice Trap', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple First Mirror Right Chest", ("Chest", 0x06, 0x0E, None, 'Recovery Heart', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Statue Room Northeast Chest", ("Chest", 0x06, 0x0F, None, 'Rupees (5)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Statue Room Hand Chest", ("Chest", 0x06, 0x02, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Near Four Armos Chest", ("Chest", 0x06, 0x05, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Hallway Right Invisible Chest", ("Chest", 0x06, 0x14, None, 'Recovery Heart', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Hallway Left Invisible Chest", ("Chest", 0x06, 0x15, None, 'Recovery Heart', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple MQ Child Hammer Switch Chest", ("Chest", 0x06, 0x1D, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Statue Room Lullaby Chest", ("Chest", 0x06, 0x0F, None, 'Rupees (5)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Statue Room Invisible Chest", ("Chest", 0x06, 0x02, None, 'Recovery Heart', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Leever Room Chest", ("Chest", 0x06, 0x04, None, 'Rupees (50)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Symphony Room Chest", ("Chest", 0x06, 0x07, None, 'Rupees (50)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Beamos Room Chest", ("Chest", 0x06, 0x19, None, 'Recovery Heart', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Chest Switch Chest", ("Chest", 0x06, 0x18, None, 'Ice Trap', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple MQ Boss Key Chest", ("Chest", 0x06, 0x05, None, 'Boss Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + ("Spirit Temple Mirror Shield Chest", ("Chest", 0x5C, 0x09, None, 'Mirror Shield', ("Spirit Temple", "Vanilla", "Master Quest", "Desert Colossus"))), + + ("Spirit Temple Boss Key Chest", ("Chest", 0x06, 0x0A, None, 'Boss Key (Spirit Temple)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple Topmost Chest", ("Chest", 0x06, 0x12, None, 'Bombs (20)', ("Spirit Temple", "Vanilla"))), + ("Spirit Temple MQ Mirror Puzzle Invisible Chest", ("Chest", 0x06, 0x12, None, 'Small Key (Spirit Temple)', ("Spirit Temple", "Master Quest"))), + + ("Spirit Temple GS Metal Fence", ("GS Token", 0x06, 0x10, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas"))), + ("Spirit Temple GS Sun on Floor Room", ("GS Token", 0x06, 0x08, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas"))), + ("Spirit Temple GS Hall After Sun Block Room", ("GS Token", 0x06, 0x01, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas"))), + ("Spirit Temple GS Lobby", ("GS Token", 0x06, 0x04, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas"))), + ("Spirit Temple GS Boulder Room", ("GS Token", 0x06, 0x02, None, 'Gold Skulltula Token', ("Spirit Temple", "Vanilla", "Skulltulas"))), + ("Spirit Temple MQ GS Sun Block Room", ("GS Token", 0x06, 0x01, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas"))), + ("Spirit Temple MQ GS Leever Room", ("GS Token", 0x06, 0x02, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas"))), + ("Spirit Temple MQ GS Symphony Room", ("GS Token", 0x06, 0x08, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas"))), + ("Spirit Temple MQ GS Nine Thrones Room West", ("GS Token", 0x06, 0x04, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas"))), + ("Spirit Temple MQ GS Nine Thrones Room North", ("GS Token", 0x06, 0x10, None, 'Gold Skulltula Token', ("Spirit Temple", "Master Quest", "Skulltulas"))), + + ("Spirit Temple Twinrova Heart", ("BossHeart", 0x17, 0x4F, None, 'Heart Container', ("Spirit Temple", "Vanilla", "Master Quest"))), + + # Spirit Temple Freestanding + ("Spirit Temple Shifting Wall Recovery Heart 1", ("Freestanding", 0x06, (23,0,3), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Freestanding"))), + ("Spirit Temple Shifting Wall Recovery Heart 2", ("Freestanding", 0x06, (23,0,4), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Freestanding"))), + ("Spirit Temple MQ Child Recovery Heart 1", ("Freestanding", 0x06, (1,0,14), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Freestanding"))), + ("Spirit Temple MQ Child Recovery Heart 2", ("Freestanding", 0x06, (1,0,15), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Freestanding"))), + + # Spirit Temple Vanilla Pots/Crates + ("Spirit Temple Lobby Pot 1", ("Pot", 0x06, (0,0,11), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Lobby Pot 2", ("Pot", 0x06, (0,0,12), None, 'Rupees (5)', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Lobby Flying Pot 1", ("FlyingPot", 0x06, (0,0,13), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Lobby Flying Pot 2", ("FlyingPot", 0x06, (0,0,14), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Child Climb Pot", ("Pot", 0x06, (4,0,11), None, 'Deku Seeds (30)', ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 1", ("Pot", 0x06, 0x24, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 2", ("Pot", 0x06, 0x25, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 3", ("Pot", 0x06, 0x26, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 4", ("Pot", 0x06, 0x27, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 5", ("Pot", 0x06, 0x28, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Statue Room Pot 6", ("Pot", 0x06, 0x29, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Hall After Sun Block Room Pot 1", ("Pot", 0x06, (9,0,8), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Hall After Sun Block Room Pot 2", ("Pot", 0x06, (9,0,9), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Beamos Hall Pot", ("Pot", 0x06, (16,0,6), None, 'Bombs (5)', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Child Anubis Pot", ("Pot", 0x06, (27,0,7), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Child Bridge Flying Pot", ("FlyingPot", 0x06, (3,0,6), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Before Child Climb Small Wooden Crate 1", ("SmallCrate", 0x06, (1,0,10), None, 'Deku Nuts (5)', ("Spirit Temple", "Vanilla", "SmallCrate"))), # Overwrite original flag 0x2C because it conflicts w/ Beamos hall pot + ("Spirit Temple Before Child Climb Small Wooden Crate 2", ("SmallCrate", 0x06, (1,0,11), None, 'Bombs (5)', ("Spirit Temple", "Vanilla", "SmallCrate"))), + #("Spirit Temple Child Anubis Pot", ("Pot", 0x07, 0x2F, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Child Anubis Pot", ("Pot", 0x07, 0x2F, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + #("Spirit Temple Child Anubis Pot", ("Pot", 0x07, 0x2F, None, 'Recovery Heart' ("Spirit Temple", "Vanilla", "Pot"))), + ("Spirit Temple Central Chamber Flying Pot 1", ("FlyingPot", 0x06, (5,0,21), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Central Chamber Flying Pot 2", ("FlyingPot", 0x06, (5,0,22), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Adult Climb Flying Pot 1", ("FlyingPot", 0x06, (15,0,11), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Adult Climb Flying Pot 2", ("FlyingPot", 0x06, (15,0,12), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 1", ("FlyingPot", 0x06, (25,0,5), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 2", ("FlyingPot", 0x06, (25,0,6), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 3", ("FlyingPot", 0x06, (25,0,7), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 4", ("FlyingPot", 0x06, (25,0,8), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 5", ("FlyingPot", 0x06, (25,0,9), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + ("Spirit Temple Big Mirror Flying Pot 6", ("FlyingPot", 0x06, (25,0,10), None, 'Recovery Heart', ("Spirit Temple", "Vanilla", "FlyingPot"))), + + # Spirit Temple MQ Pots + ("Spirit Temple MQ Lobby Pot 1", ("Pot", 0x06, (0,0,18), None, 'Bombs (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Lobby Pot 2", ("Pot", 0x06, (0,0,19), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Lobby Pot 3", ("Pot", 0x06, (0,0,20), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Lobby Pot 4", ("Pot", 0x06, (0,0,22), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child Torch Slugs Room Pot", ("Pot", 0x06, (1,0,12), None, 'Bombs (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child 3 Gibdo Room Pot 1", ("Pot", 0x06, (2,0,13), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child 3 Gibdo Room Pot 2", ("Pot", 0x06, (2,0,14), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child Stalfos Fight Pot 1", ("Pot", 0x06, (27,0,10), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child Stalfos Fight Pot 2", ("Pot", 0x06, (27,0,11), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child Stalfos Fight Pot 3", ("Pot", 0x06, (27,0,12), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + #("Spirit Temple MQ Child Stalfos Fight Pot 4", ("Pot", 0x06, (27,0,13), None, 'N/A', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Child Climb Pot", ("Pot", 0x06, (4,0,13), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + #("Spirit Temple MQ Central Chamber Flying Pot 1", ("FlyingPot", 0x06, 0x25, None, 'N/A', ("Spirit Temple", "Master Quest", "FlyingPot"))), + #("Spirit Temple MQ Central Chamber Flying Pot 2", ("FlyingPot", 0x06, 0x28, None, 'N/A', ("Spirit Temple", "Master Quest", "FlyingPot"))), + #("Spirit Temple MQ Central Chamber Flying Pot 3", ("FlyingPot", 0x06, 0x36, None, 'N/A', ("Spirit Temple", "Master Quest", "FlyingPot"))), + ("Spirit Temple MQ Central Chamber Floor Pot 1", ("Pot", 0x06, (5,0,31), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Central Chamber Floor Pot 2", ("Pot", 0x06, (5,0,35), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Central Chamber Floor Pot 3", ("Pot", 0x06, (5,0,36), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Central Chamber Top Left Pot (Left)", ("Pot", 0x06, (5,0,34), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Central Chamber Top Left Pot (Right)", ("Pot", 0x06, (5,0,33), None, 'Arrows (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Sun Block Room Pot 1", ("Pot", 0x06, (8,0,23), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Sun Block Room Pot 2", ("Pot", 0x06, (8,0,25), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Below 4 Wallmasters Pot 1", ("Pot", 0x06, (15,0,15), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Below 4 Wallmasters Pot 2", ("Pot", 0x06, (15,0,16), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Shifting Wall Pot 1", ("Pot", 0x06, (23,0,16), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Shifting Wall Pot 2", ("Pot", 0x06, (23,0,17), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ After Shifting Wall Room Pot 1", ("Pot", 0x06, (24,0,4), None, 'Bombs (5)', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ After Shifting Wall Room Pot 2", ("Pot", 0x06, (24,0,5), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Big Mirror Pot 1", ("Pot", 0x06, (25,0,10), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Big Mirror Pot 2", ("Pot", 0x06, (25,0,11), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Big Mirror Pot 3", ("Pot", 0x06, (25,0,12), None, 'Recovery Heart', ("Spirit Temple", "Master Quest", "Pot"))), + ("Spirit Temple MQ Big Mirror Pot 4", ("Pot", 0x06, (25,0,13), None, 'Rupees (5)', ("Spirit Temple", "Master Quest", "Pot"))), + # Spirit Temple MQ Crates + ("Spirit Temple MQ Central Chamber Crate 1", ("Crate", 0x06, (5,0,12), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), + ("Spirit Temple MQ Central Chamber Crate 2", ("Crate", 0x06, (5,0,13), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), + ("Spirit Temple MQ Big Mirror Crate 1", ("Crate", 0x06, (25,0,2), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), + ("Spirit Temple MQ Big Mirror Crate 2", ("Crate", 0x06, (25,0,3), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), + ("Spirit Temple MQ Big Mirror Crate 3", ("Crate", 0x06, (25,0,4), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), + ("Spirit Temple MQ Big Mirror Crate 4", ("Crate", 0x06, (25,0,5), None, 'Rupee (1)', ("Spirit Temple", "Master Quest", "Crate"))), # Ice Cavern vanilla - ("Ice Cavern Map Chest", ("Chest", 0x09, 0x00, None, 'Map (Ice Cavern)', ("Ice Cavern", "Vanilla",))), - ("Ice Cavern Compass Chest", ("Chest", 0x09, 0x01, None, 'Compass (Ice Cavern)', ("Ice Cavern", "Vanilla",))), - ("Ice Cavern Freestanding PoH", ("Collectable", 0x09, 0x01, None, 'Piece of Heart', ("Ice Cavern", "Vanilla",))), - ("Ice Cavern Iron Boots Chest", ("Chest", 0x09, 0x02, None, 'Iron Boots', ("Ice Cavern", "Vanilla",))), - ("Ice Cavern GS Spinning Scythe Room", ("GS Token", 0x09, 0x02, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas",))), - ("Ice Cavern GS Heart Piece Room", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas",))), - ("Ice Cavern GS Push Block Room", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas",))), + ("Ice Cavern Map Chest", ("Chest", 0x09, 0x00, None, 'Map (Ice Cavern)', ("Ice Cavern", "Vanilla"))), + ("Ice Cavern Compass Chest", ("Chest", 0x09, 0x01, None, 'Compass (Ice Cavern)', ("Ice Cavern", "Vanilla"))), + ("Ice Cavern Iron Boots Chest", ("Chest", 0x09, 0x02, None, 'Iron Boots', ("Ice Cavern", "Vanilla"))), + ("Ice Cavern GS Spinning Scythe Room", ("GS Token", 0x09, 0x02, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas"))), + ("Ice Cavern GS Heart Piece Room", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas"))), + ("Ice Cavern GS Push Block Room", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Vanilla", "Skulltulas"))), + ("Ice Cavern Freestanding PoH", ("Collectable", 0x09, 0x01, None, 'Piece of Heart', ("Ice Cavern", "Vanilla"))), + # Ice Cavern Vanilla Freestanding + ("Ice Cavern Frozen Blue Rupee", ("Freestanding", 0x09, (1,0,1), None, 'Rupees (5)', ("Ice Cavern", "Vanilla", "Freestanding"))), + ("Ice Cavern Map Room Recovery Heart 1", ("Freestanding", 0x09, (9,0,7), None, 'Recovery Heart', ("Ice Cavern", "Vanilla","Freestanding"))), + ("Ice Cavern Map Room Recovery Heart 2", ("Freestanding", 0x09, (9,0,8), None, 'Recovery Heart', ("Ice Cavern", "Vanilla","Freestanding"))), + ("Ice Cavern Map Room Recovery Heart 3", ("Freestanding", 0x09, (9,0,9), None, 'Recovery Heart', ("Ice Cavern", "Vanilla","Freestanding"))), + ("Ice Cavern Block Room Red Rupee 1", ("Freestanding", 0x09, (5,0,1), None, 'Rupees (20)', ("Ice Cavern", "Vanilla","Freestanding"))), + ("Ice Cavern Block Room Red Rupee 2", ("Freestanding", 0x09, (5,0,2), None, 'Rupees (20)', ("Ice Cavern", "Vanilla","Freestanding"))), + ("Ice Cavern Block Room Red Rupee 3", ("Freestanding", 0x09, (5,0,3), None, 'Rupees (20)', ("Ice Cavern", "Vanilla","Freestanding"))), + # Ice Cavern Vanilla Pots + ("Ice Cavern Hall Pot 1", ("Pot", 0x09, (2,0,1), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Hall Pot 2", ("Pot", 0x09, (2,0,2), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Spinning Blade Pot 1", ("Pot", 0x09, (3,0,9), None, 'Arrows (10)', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Spinning Blade Pot 2", ("Pot", 0x09, (3,0,10), None, 'Rupees (5)', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Spinning Blade Pot 3", ("Pot", 0x09, (3,0,11), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Spinning Blade Flying Pot", ("FlyingPot", 0x09, (3,0,12), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "FlyingPot"))), + ("Ice Cavern Near End Pot 1", ("Pot", 0x09, (6,0,1), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Near End Pot 2", ("Pot", 0x09, (6,0,2), None, 'Recovery Heart', ("Ice Cavern", "Vanilla", "Pot"))), + ("Ice Cavern Frozen Pot", ("Pot", 0x09, (9,0,10), None, 'Rupees (50)', ("Ice Cavern", "Vanilla", "Pot"))), + # Ice Cavern MQ - ("Ice Cavern MQ Map Chest", ("Chest", 0x09, 0x01, None, 'Map (Ice Cavern)', ("Ice Cavern", "Master Quest",))), - ("Ice Cavern MQ Compass Chest", ("Chest", 0x09, 0x00, None, 'Compass (Ice Cavern)', ("Ice Cavern", "Master Quest",))), - ("Ice Cavern MQ Freestanding PoH", ("Collectable", 0x09, 0x01, None, 'Piece of Heart', ("Ice Cavern", "Master Quest",))), - ("Ice Cavern MQ Iron Boots Chest", ("Chest", 0x09, 0x02, None, 'Iron Boots', ("Ice Cavern", "Master Quest",))), - ("Ice Cavern MQ GS Red Ice", ("GS Token", 0x09, 0x02, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))), - ("Ice Cavern MQ GS Ice Block", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))), - ("Ice Cavern MQ GS Scarecrow", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))), + ("Ice Cavern MQ Map Chest", ("Chest", 0x09, 0x01, None, 'Map (Ice Cavern)', ("Ice Cavern", "Master Quest"))), + ("Ice Cavern MQ Compass Chest", ("Chest", 0x09, 0x00, None, 'Compass (Ice Cavern)', ("Ice Cavern", "Master Quest"))), + ("Ice Cavern MQ Freestanding PoH", ("Collectable", 0x09, 0x01, None, 'Piece of Heart', ("Ice Cavern", "Master Quest"))), + ("Ice Cavern MQ Iron Boots Chest", ("Chest", 0x09, 0x02, None, 'Iron Boots', ("Ice Cavern", "Master Quest"))), + ("Ice Cavern MQ GS Red Ice", ("GS Token", 0x09, 0x02, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas"))), + ("Ice Cavern MQ GS Ice Block", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas"))), + ("Ice Cavern MQ GS Scarecrow", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas"))), + # Ice Cavern MQ Pots + ("Ice Cavern MQ First Hall Pot", ("Pot", 0x09, (0,0,4), None, 'Recovery Heart', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Tektite Room Pot 1", ("Pot", 0x09, (1,0,6), None, 'Recovery Heart', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Tektite Room Pot 2", ("Pot", 0x09, (1,0,7), None, 'Recovery Heart', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Center Room Pot 1", ("Pot", 0x09, (3,0,14), None, 'Rupees (5)', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Center Room Pot 2", ("Pot", 0x09, (3,0,16), None, 'Recovery Heart', ("Ice Cavern", "Master Quest", "Pot"))), + #("Ice Cavern MQ Center Room Pot 3", ("Pot", 0x09, (3,0,13), None, 'N/A', ("Ice Cavern", "Master Quest", "Pot"))), + #("Ice Cavern MQ Center Room Pot 4", ("Pot", 0x09, (3,0,19), None, 'N/A', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Near End Pot", ("Pot", 0x09, (6,0,7), None, 'Rupees (5)', ("Ice Cavern", "Master Quest", "Pot"))), + #("Ice Cavern MQ Near End Pot 2", ("Pot", 0x09, (6,0,6), None, 'N/A', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Compass Room Pot 1", ("Pot", 0x09, (9,0,11), None, 'Bombs (5)', ("Ice Cavern", "Master Quest", "Pot"))), + ("Ice Cavern MQ Compass Room Pot 2", ("Pot", 0x09, (9,0,12), None, 'Bombs (5)', ("Ice Cavern", "Master Quest", "Pot"))), # Gerudo Training Ground vanilla - ("Gerudo Training Ground Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), - ("Gerudo Training Ground Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla"))), + ("Gerudo Training Ground Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Ground", "Vanilla"))), + # Gerudo Training Ground Vanilla Freestanding + ("Gerudo Training Ground Beamos Recovery Heart 1", ("Freestanding", 0x0B, (7,0,11), None, 'Recovery Heart', ("Gerudo Training Ground", "Vanilla", "Freestanding"))), + ("Gerudo Training Ground Beamos Recovery Heart 2", ("Freestanding", 0x0B, (7,0,12), None, 'Recovery Heart', ("Gerudo Training Ground", "Vanilla", "Freestanding"))), + # Gerudo Training Ground MQ - ("Gerudo Training Ground MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))), - ("Gerudo Training Ground MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest"))), + ("Gerudo Training Ground MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Master Quest"))), + # Gerudo Training Ground MQ Pots/Crates + ("Gerudo Training Ground MQ Lobby Left Pot 1", ("Pot", 0x0B, (0,0,6), None, 'Recovery Heart', ("Gerudo Training Ground", "Master Quest", "Pot"))), + ("Gerudo Training Ground MQ Lobby Left Pot 2", ("Pot", 0x0B, (0,0,7), None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest", "Pot"))), + ("Gerudo Training Ground MQ Lobby Right Pot 1", ("Pot", 0x0B, (0,0,8), None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest", "Pot"))), + ("Gerudo Training Ground MQ Lobby Right Pot 2", ("Pot", 0x0B, (0,0,9), None, 'Recovery Heart', ("Gerudo Training Ground", "Master Quest", "Pot"))), + ("Gerudo Training Ground MQ Maze Crate", ("Crate", 0x0B, (8,0,2), None, 'Rupee (1)', ("Gerudo Training Ground", "Master Quest", "Crate"))), # Ganon's Castle vanilla - ("Ganons Castle Forest Trial Chest", ("Chest", 0x0D, 0x09, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Water Trial Left Chest", ("Chest", 0x0D, 0x07, None, 'Ice Trap', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Water Trial Right Chest", ("Chest", 0x0D, 0x06, None, 'Recovery Heart', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Shadow Trial Front Chest", ("Chest", 0x0D, 0x08, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Shadow Trial Golden Gauntlets Chest", ("Chest", 0x0D, 0x05, None, 'Progressive Strength Upgrade', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial First Left Chest", ("Chest", 0x0D, 0x0C, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Second Left Chest", ("Chest", 0x0D, 0x0B, None, 'Ice Trap', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Third Left Chest", ("Chest", 0x0D, 0x0D, None, 'Recovery Heart', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial First Right Chest", ("Chest", 0x0D, 0x0E, None, 'Ice Trap', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Second Right Chest", ("Chest", 0x0D, 0x0A, None, 'Arrows (30)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Third Right Chest", ("Chest", 0x0D, 0x0F, None, 'Ice Trap', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Invisible Enemies Chest", ("Chest", 0x0D, 0x10, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Light Trial Lullaby Chest", ("Chest", 0x0D, 0x11, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Spirit Trial Crystal Switch Chest", ("Chest", 0x0D, 0x12, None, 'Bombchus (20)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Spirit Trial Invisible Chest", ("Chest", 0x0D, 0x14, None, 'Arrows (10)', ("Ganon's Castle", "Vanilla",))), - ("Ganons Castle Deku Scrub Left", ("NPC", 0x0D, 0x3A, None, 'Buy Green Potion', ("Ganon's Castle", "Vanilla", "Deku Scrub",))), - ("Ganons Castle Deku Scrub Center-Left", ("NPC", 0x0D, 0x37, None, 'Buy Bombs (5) [35]', ("Ganon's Castle", "Vanilla", "Deku Scrub",))), - ("Ganons Castle Deku Scrub Center-Right", ("NPC", 0x0D, 0x33, None, 'Buy Arrows (30)', ("Ganon's Castle", "Vanilla", "Deku Scrub",))), - ("Ganons Castle Deku Scrub Right", ("NPC", 0x0D, 0x39, None, 'Buy Red Potion [30]', ("Ganon's Castle", "Vanilla", "Deku Scrub",))), + ("Ganons Castle Forest Trial Chest", ("Chest", 0x0D, 0x09, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Water Trial Left Chest", ("Chest", 0x0D, 0x07, None, 'Ice Trap', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Water Trial Right Chest", ("Chest", 0x0D, 0x06, None, 'Recovery Heart', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Shadow Trial Front Chest", ("Chest", 0x0D, 0x08, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Shadow Trial Golden Gauntlets Chest", ("Chest", 0x0D, 0x05, None, 'Progressive Strength Upgrade', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial First Left Chest", ("Chest", 0x0D, 0x0C, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Second Left Chest", ("Chest", 0x0D, 0x0B, None, 'Ice Trap', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Third Left Chest", ("Chest", 0x0D, 0x0D, None, 'Recovery Heart', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial First Right Chest", ("Chest", 0x0D, 0x0E, None, 'Ice Trap', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Second Right Chest", ("Chest", 0x0D, 0x0A, None, 'Arrows (30)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Third Right Chest", ("Chest", 0x0D, 0x0F, None, 'Ice Trap', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Invisible Enemies Chest", ("Chest", 0x0D, 0x10, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Light Trial Lullaby Chest", ("Chest", 0x0D, 0x11, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Spirit Trial Crystal Switch Chest", ("Chest", 0x0D, 0x12, None, 'Bombchus (20)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Spirit Trial Invisible Chest", ("Chest", 0x0D, 0x14, None, 'Arrows (10)', ("Ganon's Castle", "Vanilla"))), + ("Ganons Castle Deku Scrub Left", ("Scrub", 0x0D, 0x3A, None, 'Buy Green Potion', ("Ganon's Castle", "Vanilla", "Deku Scrub"))), + ("Ganons Castle Deku Scrub Center-Left", ("Scrub", 0x0D, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Ganon's Castle", "Vanilla", "Deku Scrub"))), + ("Ganons Castle Deku Scrub Center-Right", ("Scrub", 0x0D, 0x33, None, 'Buy Arrows (30)', ("Ganon's Castle", "Vanilla", "Deku Scrub"))), + ("Ganons Castle Deku Scrub Right", ("Scrub", 0x0D, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Ganon's Castle", "Vanilla", "Deku Scrub"))), + # Ganons Castle Vanilla Freestanding + ("Ganons Castle Shadow Trial Recovery Heart 1", ("Freestanding", 0x0D, (12,0,9), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Freestanding"))), + ("Ganons Castle Shadow Trial Recovery Heart 2", ("Freestanding", 0x0D, (12,0,11), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Freestanding"))), + ("Ganons Castle Shadow Trial Recovery Heart 3", ("Freestanding", 0x0D, (12,0,13), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Freestanding"))), + ("Ganons Castle Fire Trial Recovery Heart", ("Freestanding", 0x0D, (14,0,20), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Freestanding"))), + ("Ganons Castle Spirit Trial Recovery Heart", ("Freestanding", 0x0D, (17,0,28), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Freestanding"))), + # Ganons Castle Vanilla Pots + ("Ganons Castle Water Trial Pot 1", ("Pot", 0x0D, (4,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Water Trial Pot 2", ("Pot", 0x0D, (4,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Forest Trial Pot 1", ("Pot", 0x0D, (7,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Forest Trial Pot 2", ("Pot", 0x0D, (7,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Light Trial Boulder Pot", ("Pot", 0x0D, (8,0,11), None, 'Arrows (30)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Light Trial Pot 1", ("Pot", 0x0D, (11,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Light Trial Pot 2", ("Pot", 0x0D, (11,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Shadow Trial Like Like Pot 1", ("Pot", 0x0D, (12,0,15), None, 'Arrows (10)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Shadow Trial Like Like Pot 2", ("Pot", 0x0D, (12,0,16), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Shadow Trial Pot 1", ("Pot", 0x0D, (13,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Shadow Trial Pot 2", ("Pot", 0x0D, (13,0,6), None, 'Arrows (10)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Fire Trial Pot 1", ("Pot", 0x0D, (15,0,5), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Fire Trial Pot 2", ("Pot", 0x0D, (15,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Spirit Trial Pot 1", ("Pot", 0x0D, (19,0,5), None, 'Deku Nuts (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + ("Ganons Castle Spirit Trial Pot 2", ("Pot", 0x0D, (19,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Vanilla", "Pot"))), + # Ganon's Castle MQ - ("Ganons Castle MQ Forest Trial Freestanding Key", ("Collectable", 0x0D, 0x01, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Forest Trial Eye Switch Chest", ("Chest", 0x0D, 0x02, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Forest Trial Frozen Eye Switch Chest", ("Chest", 0x0D, 0x03, None, 'Bombs (5)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Water Trial Chest", ("Chest", 0x0D, 0x01, None, 'Rupees (20)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Shadow Trial Bomb Flower Chest", ("Chest", 0x0D, 0x00, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Shadow Trial Eye Switch Chest", ("Chest", 0x0D, 0x05, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Light Trial Lullaby Chest", ("Chest", 0x0D, 0x04, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial First Chest", ("Chest", 0x0D, 0x0A, None, 'Bombchus (10)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial Invisible Chest", ("Chest", 0x0D, 0x14, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial Sun Front Left Chest", ("Chest", 0x0D, 0x09, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial Sun Back Left Chest", ("Chest", 0x0D, 0x08, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial Sun Back Right Chest", ("Chest", 0x0D, 0x07, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Spirit Trial Golden Gauntlets Chest", ("Chest", 0x0D, 0x06, None, 'Progressive Strength Upgrade', ("Ganon's Castle", "Master Quest",))), - ("Ganons Castle MQ Deku Scrub Left", ("NPC", 0x0D, 0x3A, None, 'Buy Green Potion', ("Ganon's Castle", "Master Quest", "Deku Scrub",))), - ("Ganons Castle MQ Deku Scrub Center-Left", ("NPC", 0x0D, 0x37, None, 'Buy Bombs (5) [35]', ("Ganon's Castle", "Master Quest", "Deku Scrub",))), - ("Ganons Castle MQ Deku Scrub Center", ("NPC", 0x0D, 0x33, None, 'Buy Arrows (30)', ("Ganon's Castle", "Master Quest", "Deku Scrub",))), - ("Ganons Castle MQ Deku Scrub Center-Right", ("NPC", 0x0D, 0x39, None, 'Buy Red Potion [30]', ("Ganon's Castle", "Master Quest", "Deku Scrub",))), - ("Ganons Castle MQ Deku Scrub Right", ("NPC", 0x0D, 0x30, None, 'Buy Deku Nut (5)', ("Ganon's Castle", "Master Quest", "Deku Scrub",))), + ("Ganons Castle MQ Forest Trial Freestanding Key", ("Collectable", 0x0D, 0x01, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Forest Trial Eye Switch Chest", ("Chest", 0x0D, 0x02, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Forest Trial Frozen Eye Switch Chest", ("Chest", 0x0D, 0x03, None, 'Bombs (5)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Water Trial Chest", ("Chest", 0x0D, 0x01, None, 'Rupees (20)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Shadow Trial Bomb Flower Chest", ("Chest", 0x0D, 0x00, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Shadow Trial Eye Switch Chest", ("Chest", 0x0D, 0x05, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Light Trial Lullaby Chest", ("Chest", 0x0D, 0x04, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial First Chest", ("Chest", 0x0D, 0x0A, None, 'Bombchus (10)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial Invisible Chest", ("Chest", 0x0D, 0x14, None, 'Arrows (10)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial Sun Front Left Chest", ("Chest", 0x0D, 0x09, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial Sun Back Left Chest", ("Chest", 0x0D, 0x08, None, 'Small Key (Ganons Castle)', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial Sun Back Right Chest", ("Chest", 0x0D, 0x07, None, 'Recovery Heart', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Spirit Trial Golden Gauntlets Chest", ("Chest", 0x0D, 0x06, None, 'Progressive Strength Upgrade', ("Ganon's Castle", "Master Quest"))), + ("Ganons Castle MQ Deku Scrub Left", ("Scrub", 0x0D, 0x3A, None, 'Buy Green Potion', ("Ganon's Castle", "Master Quest", "Deku Scrub"))), + ("Ganons Castle MQ Deku Scrub Center-Left", ("Scrub", 0x0D, 0x37, None, 'Buy Bombs (5) for 35 Rupees', ("Ganon's Castle", "Master Quest", "Deku Scrub"))), + ("Ganons Castle MQ Deku Scrub Center", ("Scrub", 0x0D, 0x33, None, 'Buy Arrows (30)', ("Ganon's Castle", "Master Quest", "Deku Scrub"))), + ("Ganons Castle MQ Deku Scrub Center-Right", ("Scrub", 0x0D, 0x39, None, 'Buy Red Potion for 30 Rupees', ("Ganon's Castle", "Master Quest", "Deku Scrub"))), + ("Ganons Castle MQ Deku Scrub Right", ("Scrub", 0x0D, 0x30, None, 'Buy Deku Nut (5)', ("Ganon's Castle", "Master Quest", "Deku Scrub"))), + # Ganon's Castle MQ Freestanding + ("Ganons Castle MQ Water Trial Recovery Heart", ("Freestanding", 0x0D, (2,0,30), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Freestanding"))), + ("Ganons Castle MQ Light Trial Recovery Heart 1", ("Freestanding", 0x0D, (8,0,6), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Freestanding"))), + ("Ganons Castle MQ Light Trial Recovery Heart 2", ("Freestanding", 0x0D, (8,0,7), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Freestanding"))), + # Ganon's Castle MQ Pots + ("Ganons Castle MQ Water Trial Pot 1", ("Pot", 0x0D, (4,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Water Trial Pot 2", ("Pot", 0x0D, (4,0,6), None, 'Arrows (10)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Forest Trial Pot 1", ("Pot", 0x0D, (7,0,5), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Forest Trial Pot 2", ("Pot", 0x0D, (7,0,6), None, 'Rupees (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Light Trial Pot 1", ("Pot", 0x0D, (11,0,5), None, 'Rupees (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Light Trial Pot 2", ("Pot", 0x0D, (11,0,6), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Shadow Trial Pot 1", ("Pot", 0x0D, (13,0,5), None, 'Rupees (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Shadow Trial Pot 2", ("Pot", 0x0D, (13,0,6), None, 'Arrows (10)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Fire Trial Pot 1", ("Pot", 0x0D, (15,0,5), None, 'Rupees (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Fire Trial Pot 2", ("Pot", 0x0D, (15,0,6), None, 'Recovery Heart', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Spirit Trial Pot 1", ("Pot", 0x0D, (19,0,5), None, 'Rupees (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + ("Ganons Castle MQ Spirit Trial Pot 2", ("Pot", 0x0D, (19,0,6), None, 'Deku Nuts (5)', ("Ganon's Castle", "Master Quest", "Pot"))), + # Ganon's Castle shared - ("Ganons Tower Boss Key Chest", ("Chest", 0x0A, 0x0B, None, 'Boss Key (Ganons Castle)', ("Ganon's Castle", "Vanilla", "Master Quest",))), + ("Ganons Tower Boss Key Chest", ("Chest", 0x0A, 0x0B, None, 'Boss Key (Ganons Castle)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest"))), + + # Ganon's Tower Pots + ("Ganons Tower Pot 1", ("Pot", 0x0A, [(8,0,2),(0,0,48)], None, 'Rupees (5)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 2", ("Pot", 0x0A, [(8,0,3),(0,0,49)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 3", ("Pot", 0x0A, [(8,0,4),(0,0,50)], None, 'Arrows (10)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 4", ("Pot", 0x0A, [(8,0,5),(0,0,51)], None, 'Rupees (5)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 5", ("Pot", 0x0A, [(8,0,6),(0,0,52)], None, 'Arrows (10)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 6", ("Pot", 0x0A, [(8,0,7),(0,0,53)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 7", ("Pot", 0x0A, [(8,0,8),(0,0,54)], None, 'Rupees (5)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 8", ("Pot", 0x0A, [(8,0,9),(0,0,56)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 9", ("Pot", 0x0A, [(8,0,12),(0,0,58)], None, 'Arrows (10)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 10", ("Pot", 0x0A, [(8,0,13),(0,0,59)], None, 'Arrows (10)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 11", ("Pot", 0x0A, [(8,0,14),(0,0,60)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 12", ("Pot", 0x0A, [(8,0,15),(0,0,61)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 13", ("Pot", 0x0A, [(8,0,16),(0,0,62)], None, 'Recovery Heart', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), + ("Ganons Tower Pot 14", ("Pot", 0x0A, [(8,0,19),(0,0,65)], None, 'Arrows (10)', ("Ganon's Castle", "Ganon's Tower", "Vanilla", "Master Quest", "Pot"))), ## Events and Drops - ("Pierre", ("Event", None, None, None, 'Scarecrow Song', None)), - ("Deliver Rutos Letter", ("Event", None, None, None, 'Deliver Letter', None)), - ("Master Sword Pedestal", ("Event", None, None, None, 'Time Travel', None)), - - ("Deku Baba Sticks", ("Drop", None, None, None, 'Deku Stick Drop', None)), - ("Deku Baba Nuts", ("Drop", None, None, None, 'Deku Nut Drop', None)), - ("Stick Pot", ("Drop", None, None, None, 'Deku Stick Drop', None)), - ("Nut Pot", ("Drop", None, None, None, 'Deku Nut Drop', None)), - ("Nut Crate", ("Drop", None, None, None, 'Deku Nut Drop', None)), - ("Blue Fire", ("Drop", None, None, None, 'Blue Fire', None)), - ("Lone Fish", ("Drop", None, None, None, 'Fish', None)), - ("Fish Group", ("Drop", None, None, None, 'Fish', None)), - ("Bug Rock", ("Drop", None, None, None, 'Bugs', None)), - ("Bug Shrub", ("Drop", None, None, None, 'Bugs', None)), - ("Wandering Bugs", ("Drop", None, None, None, 'Bugs', None)), - ("Fairy Pot", ("Drop", None, None, None, 'Fairy', None)), - ("Free Fairies", ("Drop", None, None, None, 'Fairy', None)), - ("Wall Fairy", ("Drop", None, None, None, 'Fairy', None)), - ("Butterfly Fairy", ("Drop", None, None, None, 'Fairy', None)), - ("Gossip Stone Fairy", ("Drop", None, None, None, 'Fairy', None)), - ("Bean Plant Fairy", ("Drop", None, None, None, 'Fairy', None)), - ("Fairy Pond", ("Drop", None, None, None, 'Fairy', None)), - ("Big Poe Kill", ("Drop", None, None, None, 'Big Poe', None)), + ("Pierre", ("Event", None, None, None, 'Scarecrow Song', None)), + ("Deliver Rutos Letter", ("Event", None, None, None, 'Deliver Letter', None)), + ("Master Sword Pedestal", ("Event", None, None, None, 'Time Travel', None)), + + ("Deku Baba Sticks", ("Drop", None, None, None, 'Deku Stick Drop', None)), + ("Deku Baba Nuts", ("Drop", None, None, None, 'Deku Nut Drop', None)), + ("Stick Pot", ("Drop", None, None, None, 'Deku Stick Drop', None)), + ("Nut Pot", ("Drop", None, None, None, 'Deku Nut Drop', None)), + ("Nut Crate", ("Drop", None, None, None, 'Deku Nut Drop', None)), + ("Blue Fire", ("Drop", None, None, None, 'Blue Fire', None)), + ("Lone Fish", ("Drop", None, None, None, 'Fish', None)), + ("Fish Group", ("Drop", None, None, None, 'Fish', None)), + ("Bug Rock", ("Drop", None, None, None, 'Bugs', None)), + ("Bug Shrub", ("Drop", None, None, None, 'Bugs', None)), + ("Wandering Bugs", ("Drop", None, None, None, 'Bugs', None)), + ("Fairy Pot", ("Drop", None, None, None, 'Fairy', None)), + ("Free Fairies", ("Drop", None, None, None, 'Fairy', None)), + ("Wall Fairy", ("Drop", None, None, None, 'Fairy', None)), + ("Butterfly Fairy", ("Drop", None, None, None, 'Fairy', None)), + ("Gossip Stone Fairy", ("Drop", None, None, None, 'Fairy', None)), + ("Bean Plant Fairy", ("Drop", None, None, None, 'Fairy', None)), + ("Fairy Pond", ("Drop", None, None, None, 'Fairy', None)), + ("Big Poe Kill", ("Drop", None, None, None, 'Big Poe', None)), + ("Deku Shield Pot", ("Drop", None, None, None, 'Deku Shield Drop', None)), ## Hints # These are not actual locations, but are filler spots used for hint reachability. # Hint location types must start with 'Hint'. - ("DMC Gossip Stone", ("HintStone", None, None, None, None, None)), - ("DMT Gossip Stone", ("HintStone", None, None, None, None, None)), - ("Colossus Gossip Stone", ("HintStone", None, None, None, None, None)), - ("Dodongos Cavern Gossip Stone", ("HintStone", None, None, None, None, None)), - ("GV Gossip Stone", ("HintStone", None, None, None, None, None)), - ("GC Maze Gossip Stone", ("HintStone", None, None, None, None, None)), - ("GC Medigoron Gossip Stone", ("HintStone", None, None, None, None, None)), - ("Graveyard Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HC Malon Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HC Rock Wall Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HC Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HF Cow Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("KF Deku Tree Gossip Stone (Left)", ("HintStone", None, None, None, None, None)), - ("KF Deku Tree Gossip Stone (Right)", ("HintStone", None, None, None, None, None)), - ("KF Gossip Stone", ("HintStone", None, None, None, None, None)), - ("LH Lab Gossip Stone", ("HintStone", None, None, None, None, None)), - ("LH Gossip Stone (Southeast)", ("HintStone", None, None, None, None, None)), - ("LH Gossip Stone (Southwest)", ("HintStone", None, None, None, None, None)), - ("LW Gossip Stone", ("HintStone", None, None, None, None, None)), - ("SFM Maze Gossip Stone (Lower)", ("HintStone", None, None, None, None, None)), - ("SFM Maze Gossip Stone (Upper)", ("HintStone", None, None, None, None, None)), - ("SFM Saria Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ToT Gossip Stone (Left)", ("HintStone", None, None, None, None, None)), - ("ToT Gossip Stone (Left-Center)", ("HintStone", None, None, None, None, None)), - ("ToT Gossip Stone (Right)", ("HintStone", None, None, None, None, None)), - ("ToT Gossip Stone (Right-Center)", ("HintStone", None, None, None, None, None)), - ("ZD Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ZF Fairy Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ZF Jabu Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ZR Near Grottos Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ZR Near Domain Gossip Stone", ("HintStone", None, None, None, None, None)), - - ("HF Near Market Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HF Southeast Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("HF Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("Kak Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("ZR Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("KF Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("LW Near Shortcuts Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("DMT Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - ("DMC Upper Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), - - ("Ganondorf Hint", ("Hint", None, None, None, None, None)), + ("DMC Gossip Stone", ("HintStone", None, None, None, None, None)), + ("DMT Gossip Stone", ("HintStone", None, None, None, None, None)), + ("Colossus Gossip Stone", ("HintStone", None, None, None, None, None)), + ("Dodongos Cavern Gossip Stone", ("HintStone", None, None, None, None, None)), + ("GV Gossip Stone", ("HintStone", None, None, None, None, None)), + ("GC Maze Gossip Stone", ("HintStone", None, None, None, None, None)), + ("GC Medigoron Gossip Stone", ("HintStone", None, None, None, None, None)), + ("Graveyard Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HC Malon Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HC Rock Wall Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HC Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HF Cow Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("KF Deku Tree Gossip Stone (Left)", ("HintStone", None, None, None, None, None)), + ("KF Deku Tree Gossip Stone (Right)", ("HintStone", None, None, None, None, None)), + ("KF Gossip Stone", ("HintStone", None, None, None, None, None)), + ("LH Lab Gossip Stone", ("HintStone", None, None, None, None, None)), + ("LH Gossip Stone (Southeast)", ("HintStone", None, None, None, None, None)), + ("LH Gossip Stone (Southwest)", ("HintStone", None, None, None, None, None)), + ("LW Gossip Stone", ("HintStone", None, None, None, None, None)), + ("SFM Maze Gossip Stone (Lower)", ("HintStone", None, None, None, None, None)), + ("SFM Maze Gossip Stone (Upper)", ("HintStone", None, None, None, None, None)), + ("SFM Saria Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ToT Gossip Stone (Left)", ("HintStone", None, None, None, None, None)), + ("ToT Gossip Stone (Left-Center)", ("HintStone", None, None, None, None, None)), + ("ToT Gossip Stone (Right)", ("HintStone", None, None, None, None, None)), + ("ToT Gossip Stone (Right-Center)", ("HintStone", None, None, None, None, None)), + ("ZD Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ZF Fairy Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ZF Jabu Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ZR Near Grottos Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ZR Near Domain Gossip Stone", ("HintStone", None, None, None, None, None)), + + ("HF Near Market Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HF Southeast Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("HF Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("Kak Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("ZR Open Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("KF Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("LW Near Shortcuts Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("DMT Storms Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + ("DMC Upper Grotto Gossip Stone", ("HintStone", None, None, None, None, None)), + + ("ToT Child Altar Hint", ("Hint", None, None, None, None, None)), + ("ToT Adult Altar Hint", ("Hint", None, None, None, None, None)), + ("Dampe Diary Hint", ("Hint", None, None, None, None, None)), + ("10 Skulltulas Reward Hint", ("Hint", None, None, None, None, None)), + ("20 Skulltulas Reward Hint", ("Hint", None, None, None, None, None)), + ("30 Skulltulas Reward Hint", ("Hint", None, None, None, None, None)), + ("40 Skulltulas Reward Hint", ("Hint", None, None, None, None, None)), + ("50 Skulltulas Reward Hint", ("Hint", None, None, None, None, None)), + ("Ganondorf Hint", ("Hint", None, None, None, None, None)), ]) location_sort_order = { @@ -909,16 +2055,24 @@ def shop_address(shop_id, shelf_id): location_groups = { 'Song': [name for (name, data) in location_table.items() if data[0] == 'Song'], 'Chest': [name for (name, data) in location_table.items() if data[0] == 'Chest'], - 'Collectable': [name for (name, data) in location_table.items() if data[0] == 'Collectable'], + 'Collectable': [name for (name, data) in location_table.items() if data[0] in ['Collectable']], + 'Boss': [name for (name, data) in location_table.items() if data[0] == 'Boss'], + 'ActorOverride': [name for (name, data) in location_table.items() if data[0] == 'ActorOverride'], 'BossHeart': [name for (name, data) in location_table.items() if data[0] == 'BossHeart'], 'CollectableLike': [name for (name, data) in location_table.items() if data[0] in ('Collectable', 'BossHeart', 'GS Token')], 'CanSee': [name for (name, data) in location_table.items() - if data[0] in ('Collectable', 'BossHeart', 'GS Token', 'Shop') + if data[0] in ('Collectable', 'BossHeart', 'GS Token', 'Shop', 'Freestanding', 'ActorOverride', 'RupeeTower', 'Pot', 'Crate', 'FlyingPot', 'SmallCrate', 'Beehive') # Treasure Box Shop, Bombchu Bowling, Hyrule Field (OoT), Lake Hylia (RL/FA) or data[0:2] in [('Chest', 0x10), ('NPC', 0x4B), ('NPC', 0x51), ('NPC', 0x57)]], 'Dungeon': [name for (name, data) in location_table.items() if data[5] is not None and any(dungeon in data[5] for dungeon in dungeons)], } + +def location_is_viewable(loc_name, correct_chest_appearances, fast_chests): + return (((correct_chest_appearances in ['textures', 'both', 'classic'] or not fast_chests) and loc_name in location_groups['Chest']) + or loc_name in location_groups['CanSee']) + + # relevant for both dungeon item fill and song fill dungeon_song_locations = [ "Deku Tree Queen Gohma Heart", @@ -938,10 +2092,6 @@ def shop_address(shop_id, shelf_id): ] -def location_is_viewable(loc_name, correct_chest_sizes): - return correct_chest_sizes and loc_name in location_groups['Chest'] or loc_name in location_groups['CanSee'] - - # Function to run exactly once after after placing items in drop locations for each world # Sets all Drop locations to a unique name in order to avoid name issues and to identify locations in the spoiler # Also cause them to not be shown in the list of locations, only in playthrough diff --git a/worlds/oot/LogicTricks.py b/worlds/oot/LogicTricks.py index 548b7b969f50..d4873856126f 100644 --- a/worlds/oot/LogicTricks.py +++ b/worlds/oot/LogicTricks.py @@ -1,26 +1,6 @@ known_logic_tricks = { - 'Fewer Tunic Requirements': { - 'name' : 'logic_fewer_tunic_requirements', - 'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Ground", "Zora's Fountain",), - 'tooltip' : '''\ - Allows the following possible without Tunics: - - Enter Water Temple. The key below the center - pillar still requires Zora Tunic. - - Enter Fire Temple. Only the first floor is - accessible, and not Volvagia. - - Zora's Fountain Bottom Freestanding PoH. - Might not have enough health to resurface. - - Gerudo Training Ground Underwater - Silver Rupee Chest. May need to make multiple - trips. - '''}, - 'Hidden Grottos without Stone of Agony': { - 'name' : 'logic_grottos_without_agony', - 'tags' : ("General", "Entrance",), - 'tooltip' : '''\ - Allows entering hidden grottos without the - Stone of Agony. - '''}, + # General tricks + 'Pass Through Visible One-Way Collisions': { 'name' : 'logic_visible_collisions', 'tags' : ("Entrance", "Kakariko Village",), @@ -30,125 +10,108 @@ going through the Kakariko Village Gate as child when coming from the Mountain Trail side. '''}, - 'Child Deadhand without Kokiri Sword': { - 'name' : 'logic_child_deadhand', - 'tags' : ("Bottom of the Well",), - 'tooltip' : '''\ - Requires 9 sticks or 5 jump slashes. - '''}, - 'Second Dampe Race as Child': { - 'name' : 'logic_child_dampe_race_poh', - 'tags' : ("the Graveyard", "Entrance",), - 'tooltip' : '''\ - It is possible to complete the second dampe - race as child in under a minute, but it is - a strict time limit. - '''}, - 'Man on Roof without Hookshot': { - 'name' : 'logic_man_on_roof', - 'tags' : ("Kakariko Village",), - 'tooltip' : '''\ - Can be reached by side-hopping off - the watchtower. - '''}, - "Dodongo's Cavern Staircase with Bow": { - 'name' : 'logic_dc_staircase', - 'tags' : ("Dodongo's Cavern",), - 'tooltip' : '''\ - The Bow can be used to knock down the stairs - with two well-timed shots. - '''}, - "Dodongo's Cavern Spike Trap Room Jump without Hover Boots": { - 'name' : 'logic_dc_jump', - 'tags' : ("Dodongo's Cavern",), + 'Hidden Grottos without Stone of Agony': { + 'name' : 'logic_grottos_without_agony', + 'tags' : ("General", "Entrance",), 'tooltip' : '''\ - Jump is adult only. + Allows entering hidden grottos without the + Stone of Agony. '''}, - "Dodongo's Cavern Vines GS from Below with Longshot": { - 'name' : 'logic_dc_vines_gs', - 'tags' : ("Dodongo's Cavern", "Skulltulas",), + 'Fewer Tunic Requirements': { + 'name' : 'logic_fewer_tunic_requirements', + 'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Ground", "Zora's Fountain", "Death Mountain Crater", "MQ",), 'tooltip' : '''\ - The vines upon which this Skulltula rests are one- - sided collision. You can use the Longshot to get it - from below, by shooting it through the vines, - bypassing the need to lower the staircase. + Allows the following possible without Tunics: + - Enter Water Temple. The area below the center + pillar still requires Zora Tunic. Applies to + MQ also. + - Enter Fire Temple. Only the first floor is + accessible, and not Volvagia. Applies to + MQ also. + - Zora's Fountain Bottom Freestanding PoH. + Might not have enough health to resurface. + - Gerudo Training Ground Underwater + Silver Rupee Chest. May need to make multiple + trips. Applies to MQ also. '''}, - '''Thieves' Hideout "Kitchen" with No Additional Items''': { - 'name' : 'logic_gerudo_kitchen', - 'tags' : ("Thieves' Hideout", "Gerudo's Fortress"), + 'Beehives with Bombchus' : { + 'name' : 'logic_beehives_bombchus', + 'tags' : ("Beehives",), 'tooltip' : '''\ - The logic normally guarantees one of Bow, Hookshot, - or Hover Boots. + Puts breaking beehives with bombchus into logic. + Using bombs is already expected on beehives that + that are low enough that a bomb throw will reach. '''}, - 'Deku Tree Basement Vines GS with Jump Slash': { - 'name' : 'logic_deku_basement_gs', - 'tags' : ("Deku Tree", "Skulltulas",), + 'Hammer Rusted Switches Through Walls': { + 'name' : 'logic_rusted_switches', + 'tags' : ("Fire Temple", "Ganon's Castle", "MQ",), 'tooltip' : '''\ - Can be defeated by doing a precise jump slash. + Applies to: + - Fire Temple Highest Goron Chest. + - MQ Fire Temple Lizalfos Maze. + - MQ Spirit Trial. '''}, - 'Deku Tree Basement Web to Gohma with Bow': { - 'name' : 'logic_deku_b1_webs_with_bow', - 'tags' : ("Deku Tree", "Entrance",), - 'tooltip' : '''\ - All spider web walls in the Deku Tree basement can be burnt - as adult with just a bow by shooting through torches. This - trick only applies to the circular web leading to Gohma; - the two vertical webs are always in logic. - Backflip onto the chest near the torch at the bottom of - the vine wall. With precise positioning you can shoot - through the torch to the right edge of the circular web. + # Overworld tricks - This allows completion of adult Deku Tree with no fire source. + 'Adult Kokiri Forest GS with Hover Boots': { + 'name' : 'logic_adult_kokiri_gs', + 'tags' : ("Kokiri Forest", "Skulltulas",), + 'tooltip' : '''\ + Can be obtained without Hookshot by using the Hover + Boots off of one of the roots. '''}, - 'Deku Tree MQ Roll Under the Spiked Log': { - 'name' : 'logic_deku_mq_log', - 'tags' : ("Deku Tree",), + 'Jump onto the Lost Woods Bridge as Adult with Nothing': { + 'name' : 'logic_lost_woods_bridge', + 'tags' : ("the Lost Woods", "Entrance",), 'tooltip' : '''\ - You can get past the spiked log by rolling - to briefly shrink your hitbox. As adult, - the timing is a bit more precise. + With very precise movement it's possible for + adult to jump onto the bridge without needing + Longshot, Hover Boots, or Bean. '''}, - 'Hammer Rusted Switches Through Walls': { - 'name' : 'logic_rusted_switches', - 'tags' : ("Fire Temple", "Ganon's Castle",), + 'Backflip over Mido as Adult': { + 'name' : 'logic_mido_backflip', + 'tags' : ("the Lost Woods",), 'tooltip' : '''\ - Applies to: - - Fire Temple Highest Goron Chest. - - MQ Fire Temple Lizalfos Maze. - - MQ Spirit Trial. + With a specific position and angle, you can + backflip over Mido. '''}, - 'Bottom of the Well Map Chest with Strength & Sticks': { - 'name' : 'logic_botw_basement', - 'tags' : ("Bottom of the Well",), + 'Lost Woods Adult GS without Bean': { + 'name' : 'logic_lost_woods_gs_bean', + 'tags' : ("the Lost Woods", "Skulltulas",), 'tooltip' : '''\ - The chest in the basement can be reached with - strength by doing a jump slash with a lit - stick to access the bomb flowers. + You can collect the token with a precise + Hookshot use, as long as you can kill the + Skulltula somehow first. It can be killed + using Longshot, Bow, Bombchus or Din's Fire. '''}, - 'Bottom of the Well MQ Jump Over the Pits': { - 'name' : 'logic_botw_mq_pits', - 'tags' : ("Bottom of the Well",), + 'Hyrule Castle Storms Grotto GS with Just Boomerang': { + 'name' : 'logic_castle_storms_gs', + 'tags' : ("Hyrule Castle", "Skulltulas",), 'tooltip' : '''\ - While the pits in Bottom of the Well don't allow you to - jump just by running straight at them, you can still get - over them by side-hopping or backflipping across. With - explosives, this allows you to access the central areas - without Zelda's Lullaby. With Zelda's Lullaby, it allows - you to access the west inner room without explosives. + With precise throws, the Boomerang alone can + kill the Skulltula and collect the token, + without first needing to blow up the wall. '''}, - 'Skip Forest Temple MQ Block Puzzle with Bombchu': { - 'name' : 'logic_forest_mq_block_puzzle', - 'tags' : ("Forest Temple",), + 'Man on Roof without Hookshot': { + 'name' : 'logic_man_on_roof', + 'tags' : ("Kakariko Village",), 'tooltip' : '''\ - Send the Bombchu straight up the center of the - wall directly to the left upon entering the room. + Can be reached by side-hopping off + the watchtower as either age, or by + jumping onto the potion shop's roof + from the ledge as adult. '''}, - 'Spirit Temple Child Side Bridge with Bombchu': { - 'name' : 'logic_spirit_child_bombchu', - 'tags' : ("Spirit Temple",), + 'Kakariko Tower GS with Jump Slash': { + 'name' : 'logic_kakariko_tower_gs', + 'tags' : ("Kakariko Village", "Skulltulas",), 'tooltip' : '''\ - A carefully-timed Bombchu can hit the switch. + Climb the tower as high as you can without + touching the Gold Skulltula, then let go and + jump slash immediately. By jump-slashing from + as low on the ladder as possible to still + hit the Skulltula, this trick can be done + without taking fall damage. '''}, 'Windmill PoH as Adult with Nothing': { 'name' : 'logic_windmill_poh', @@ -157,95 +120,131 @@ Can jump up to the spinning platform from below as adult. '''}, - "Crater's Bean PoH with Hover Boots": { - 'name' : 'logic_crater_bean_poh_with_hovers', - 'tags' : ("Death Mountain Crater",), + 'Kakariko Rooftop GS with Hover Boots': { + 'name' : 'logic_kakariko_rooftop_gs', + 'tags' : ("Kakariko Village", "Skulltulas",), 'tooltip' : '''\ - Hover from the base of the bridge - near Goron City and walk up the - very steep slope. + Take the Hover Boots from the entrance to Impa's + House over to the rooftop of Skulltula House. From + there, a precise Hover Boots backwalk with backflip + can be used to get onto a hill above the side of + the village. And then from there you can Hover onto + Impa's rooftop to kill the Skulltula and backflip + into the token. '''}, - "Zora's Domain Entry with Cucco": { - 'name' : 'logic_zora_with_cucco', - 'tags' : ("Zora's River",), + 'Graveyard Freestanding PoH with Boomerang': { + 'name' : 'logic_graveyard_poh', + 'tags' : ("the Graveyard",), 'tooltip' : '''\ - Can fly behind the waterfall with - a cucco as child. + Using a precise moving setup you can obtain + the Piece of Heart by having the Boomerang + interact with it along the return path. '''}, - 'Water Temple MQ Central Pillar with Fire Arrows': { - 'name' : 'logic_water_mq_central_pillar', - 'tags' : ("Water Temple",), + 'Second Dampe Race as Child': { + 'name' : 'logic_child_dampe_race_poh', + 'tags' : ("the Graveyard", "Entrance",), 'tooltip' : '''\ - Slanted torches have misleading hitboxes. Whenever - you see a slanted torch jutting out of the wall, - you can expect most or all of its hitbox is actually - on the other side that wall. This can make slanted - torches very finicky to light when using arrows. The - torches in the central pillar of MQ Water Temple are - a particularly egregious example. Logic normally - expects Din's Fire and Song of Time. + It is possible to complete the second dampe + race as child in under a minute, but it is + a strict time limit. '''}, - 'Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot': { - 'name' : 'logic_gtg_mq_with_hookshot', - 'tags' : ("Gerudo Training Ground",), + 'Shadow Temple Entry with Fire Arrows': { + 'name' : 'logic_shadow_fire_arrow_entry', + 'tags' : ("Shadow Temple",), 'tooltip' : '''\ - The highest silver rupee can be obtained by - hookshotting the target and then immediately jump - slashing toward the rupee. + It is possible to light all of the torches to + open the Shadow Temple entrance with just Fire + Arrows, but you must be very quick, precise, + and strategic with how you take your shots. '''}, - 'Forest Temple East Courtyard Vines with Hookshot': { - 'name' : 'logic_forest_vines', - 'tags' : ("Forest Temple",), + 'Death Mountain Trail Soil GS without Destroying Boulder': { + 'name' : 'logic_dmt_soil_gs', + 'tags' : ("Death Mountain Trail", "Skulltulas",), 'tooltip' : '''\ - The vines in Forest Temple leading to where the well - drain switch is in the standard form can be barely - reached with just the Hookshot. + Bugs will go into the soft soil even while the boulder is + still blocking the entrance. + Then, using a precise moving setup you can kill the Gold + Skulltula and obtain the token by having the Boomerang + interact with it along the return path. '''}, - 'Forest Temple East Courtyard GS with Boomerang': { - 'name' : 'logic_forest_outdoor_east_gs', - 'tags' : ("Forest Temple", "Entrance", "Skulltulas",), + 'Death Mountain Trail Chest with Strength': { + 'name' : 'logic_dmt_bombable', + 'tags' : ("Death Mountain Trail",), 'tooltip' : '''\ - Precise Boomerang throws can allow child to - kill the Skulltula and collect the token. + Child Link can blow up the wall using a nearby bomb + flower. You must backwalk with the flower and then + quickly throw it toward the wall. '''}, - 'Forest Temple First Room GS with Difficult-to-Use Weapons': { - 'name' : 'logic_forest_first_gs', - 'tags' : ("Forest Temple", "Entrance", "Skulltulas",), + 'Death Mountain Trail Lower Red Rock GS with Hookshot': { + 'name' : 'logic_trail_gs_lower_hookshot', + 'tags' : ("Death Mountain Trail", "Skulltulas",), 'tooltip' : '''\ - Allows killing this Skulltula with Sword or Sticks by - jump slashing it as you let go from the vines. You will - take fall damage. - Also allows killing it as Child with a Bomb throw. It's - much more difficult to use a Bomb as child due to - Child Link's shorter height. - '''}, - 'Swim Through Forest Temple MQ Well with Hookshot': { - 'name' : 'logic_forest_well_swim', - 'tags' : ("Forest Temple",), + After killing the Skulltula, the token can be fished + out of the rock without needing to destroy it, by + using the Hookshot in the correct way. + '''}, + 'Death Mountain Trail Lower Red Rock GS with Hover Boots': { + 'name' : 'logic_trail_gs_lower_hovers', + 'tags' : ("Death Mountain Trail", "Skulltulas",), 'tooltip' : '''\ - Shoot the vines in the well as low and as far to - the right as possible, and then immediately swim - under the ceiling to the right. This can only be - required if Forest Temple is in its Master Quest - form. + After killing the Skulltula, the token can be + collected without needing to destroy the rock by + backflipping down onto it with the Hover Boots. + First use the Hover Boots to stand on a nearby + fence, and go for the Skulltula Token from there. '''}, - 'Forest Temple MQ Twisted Hallway Switch with Jump Slash': { - 'name' : 'logic_forest_mq_hallway_switch_jumpslash', - 'tags' : ("Forest Temple",), + 'Death Mountain Trail Lower Red Rock GS with Magic Bean': { + 'name' : 'logic_trail_gs_lower_bean', + 'tags' : ("Death Mountain Trail", "Skulltulas",), 'tooltip' : '''\ - The switch to twist the hallway can be hit with - a jump slash through the glass block. To get in - front of the switch, either use the Hover Boots - or hit the shortcut switch at the top of the - room and jump from the glass blocks that spawn. + After killing the Skulltula, the token can be + collected without needing to destroy the rock by + jumping down onto it from the bean plant, + midflight, with precise timing and positioning. '''}, - 'Death Mountain Trail Chest with Strength': { - 'name' : 'logic_dmt_bombable', + 'Death Mountain Trail Climb with Hover Boots': { + 'name' : 'logic_dmt_climb_hovers', 'tags' : ("Death Mountain Trail",), 'tooltip' : '''\ - Child Link can blow up the wall using a nearby bomb - flower. You must backwalk with the flower and then - quickly throw it toward the wall. + It is possible to use the Hover Boots to bypass + needing to destroy the boulders blocking the path + to the top of Death Mountain. + '''}, + 'Death Mountain Trail Upper Red Rock GS without Hammer': { + 'name' : 'logic_trail_gs_upper', + 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'tooltip' : '''\ + After killing the Skulltula, the token can be collected + by backflipping into the rock at the correct angle. + '''}, + 'Deliver Eye Drops with Bolero of Fire': { + 'name' : 'logic_biggoron_bolero', + 'tags' : ("Death Mountain Trail",), + 'tooltip' : '''\ + Playing a warp song normally causes a trade item to + spoil immediately, however, it is possible use Bolero + to reach Biggoron and still deliver the Eye Drops + before they spoil. If you do not wear the Goron Tunic, + the heat timer inside the crater will override the trade + item's timer. When you exit to Death Mountain Trail you + will have one second to show the Eye Drops before they + expire. You can get extra time to show the Eye Drops if + you warp immediately upon receiving them. If you don't + have many hearts, you may have to reset the heat timer + by quickly dipping in and out of Darunia's chamber or + quickly equipping and unequipping the Goron Tunic. + This trick does not apply if "Randomize Warp Song + Destinations" is enabled, or if the settings are such + that trade items do not need to be delivered within a + time limit. + '''}, + 'Goron City Spinning Pot PoH with Bombchu': { + 'name' : 'logic_goron_city_pot', + 'tags' : ("Goron City",), + 'tooltip' : '''\ + A Bombchu can be used to stop the spinning + pot, but it can be quite finicky to get it + to work. '''}, 'Goron City Spinning Pot PoH with Strength': { 'name' : 'logic_goron_city_pot_with_strength', @@ -255,237 +254,172 @@ Pot using a bomb flower alone, requiring strength in lieu of inventory explosives. '''}, - 'Adult Kokiri Forest GS with Hover Boots': { - 'name' : 'logic_adult_kokiri_gs', - 'tags' : ("Kokiri Forest", "Skulltulas",), + 'Rolling Goron (Hot Rodder Goron) as Child with Strength': { + 'name' : 'logic_child_rolling_with_strength', + 'tags' : ("Goron City",), 'tooltip' : '''\ - Can be obtained without Hookshot by using the Hover - Boots off of one of the roots. + Use the bombflower on the stairs or near Medigoron. + Timing is tight, especially without backwalking. '''}, - 'Spirit Temple MQ Frozen Eye Switch without Fire': { - 'name' : 'logic_spirit_mq_frozen_eye', - 'tags' : ("Spirit Temple",), + "Stop Link the Goron with Din's Fire": { + 'name' : 'logic_link_goron_dins', + 'tags' : ("Goron City",), 'tooltip' : '''\ - You can melt the ice by shooting an arrow through a - torch. The only way to find a line of sight for this - shot is to first spawn a Song of Time block, and then - stand on the very edge of it. + The timing is quite awkward. '''}, - 'Spirit Temple Shifting Wall with No Additional Items': { - 'name' : 'logic_spirit_wall', - 'tags' : ("Spirit Temple",), + 'Goron City Maze Left Chest with Hover Boots': { + 'name' : 'logic_goron_city_leftmost', + 'tags' : ("Goron City",), 'tooltip' : '''\ - The logic normally guarantees a way of dealing with both - the Beamos and the Walltula before climbing the wall. + A precise backwalk starting from on top of the + crate and ending with a precisely-timed backflip + can reach this chest without needing either + the Hammer or Silver Gauntlets. '''}, - 'Spirit Temple Main Room GS with Boomerang': { - 'name' : 'logic_spirit_lobby_gs', - 'tags' : ("Spirit Temple", "Skulltulas",), + 'Goron City Grotto with Hookshot While Taking Damage': { + 'name' : 'logic_goron_grotto', + 'tags' : ("Goron City",), 'tooltip' : '''\ - Standing on the highest part of the arm of the statue, a - precise Boomerang throw can kill and obtain this Gold - Skulltula. You must throw the Boomerang slightly off to - the side so that it curves into the Skulltula, as aiming - directly at it will clank off of the wall in front. + It is possible to reach the Goron City Grotto by + quickly using the Hookshot while in the midst of + taking damage from the lava floor. This trick will + not be expected on OHKO or quadruple damage. '''}, - 'Spirit Temple Main Room Jump from Hands to Upper Ledges': { - 'name' : 'logic_spirit_lobby_jump', - 'tags' : ("Spirit Temple", "Skulltulas",), + "Crater's Bean PoH with Hover Boots": { + 'name' : 'logic_crater_bean_poh_with_hovers', + 'tags' : ("Death Mountain Crater",), 'tooltip' : '''\ - A precise jump to obtain the following as adult - without needing one of Hookshot or Hover Boots: - - Spirit Temple Statue Room Northeast Chest - - Spirit Temple GS Lobby + Hover from the base of the bridge + near Goron City and walk up the + very steep slope. '''}, - 'Spirit Temple MQ Sun Block Room GS with Boomerang': { - 'name' : 'logic_spirit_mq_sun_block_gs', - 'tags' : ("Spirit Temple", "Skulltulas",), + 'Death Mountain Crater Jump to Bolero': { + 'name' : 'logic_crater_bolero_jump', + 'tags' : ("Death Mountain Crater",), 'tooltip' : '''\ - Throw the Boomerang in such a way that it - curves through the side of the glass block - to hit the Gold Skulltula. + Using a shield to drop a pot while you have + the perfect speed and position, the pot can + push you that little extra distance you + need to jump across the gap in the bridge. '''}, - 'Jabu Scrub as Adult with Jump Dive': { - 'name' : 'logic_jabu_scrub_jump_dive', - 'tags' : ("Jabu Jabu's Belly", "Entrance",), + 'Death Mountain Crater Upper to Lower with Hammer': { + 'name' : 'logic_crater_boulder_jumpslash', + 'tags' : ("Death Mountain Crater",), 'tooltip' : '''\ - Standing above the underwater tunnel leading to the scrub, - jump down and swim through the tunnel. This allows adult to - access the scrub with no Scale or Iron Boots. + With the Hammer, you can jump slash the rock twice + in the same jump in order to destroy it before you + fall into the lava. '''}, - 'Jabu MQ Song of Time Block GS with Boomerang': { - 'name' : 'logic_jabu_mq_sot_gs', - 'tags' : ("Jabu Jabu's Belly", "Skulltulas",), + 'Death Mountain Crater Upper to Lower Boulder Skip': { + 'name' : 'logic_crater_boulder_skip', + 'tags' : ("Death Mountain Crater",), 'tooltip' : '''\ - Allow the Boomerang to return to you through - the Song of Time block to grab the token. + With careful positioning, you can jump to the ledge + where the boulder is, then use repeated ledge grabs + to shimmy to a climbable ledge. This trick supersedes + "Death Mountain Crater Upper to Lower with Hammer". '''}, - 'Bottom of the Well MQ Dead Hand Freestanding Key with Boomerang': { - 'name' : 'logic_botw_mq_dead_hand_key', - 'tags' : ("Bottom of the Well",), + "Zora's River Lower Freestanding PoH as Adult with Nothing": { + 'name' : 'logic_zora_river_lower', + 'tags' : ("Zora's River",), 'tooltip' : '''\ - Boomerang can fish the item out of the rubble without - needing explosives to blow it up. + Adult can reach this PoH with a precise jump, + no Hover Boots required. '''}, - 'Fire Temple Flame Wall Maze Skip': { - 'name' : 'logic_fire_flame_maze', - 'tags' : ("Fire Temple",), + "Zora's River Upper Freestanding PoH as Adult with Nothing": { + 'name' : 'logic_zora_river_upper', + 'tags' : ("Zora's River",), 'tooltip' : '''\ - If you move quickly you can sneak past the edge of - a flame wall before it can rise up to block you. - To do it without taking damage is more precise. - Allows you to progress without needing either a - Small Key or Hover Boots. + Adult can reach this PoH with a precise jump, + no Hover Boots required. '''}, - 'Fire Temple MQ Flame Wall Maze Skip': { - 'name' : 'logic_fire_mq_flame_maze', - 'tags' : ("Fire Temple", "Skulltulas",), + "Zora's Domain Entry with Cucco": { + 'name' : 'logic_zora_with_cucco', + 'tags' : ("Zora's River",), 'tooltip' : '''\ - If you move quickly you can sneak past the edge of - a flame wall before it can rise up to block you. - To do it without taking damage is more precise. - Allows you to reach the side room GS without needing - Song of Time or Hover Boots. If either of "Fire Temple - MQ Lower to Upper Lizalfos Maze with Hover Boots" or - "with Precise Jump" are enabled, this also allows you - to progress deeper into the dungeon without Hookshot. + Can fly behind the waterfall with + a cucco as child. '''}, - 'Fire Temple MQ Climb without Fire Source': { - 'name' : 'logic_fire_mq_climb', - 'tags' : ("Fire Temple",), + "Zora's Domain Entry with Hover Boots": { + 'name' : 'logic_zora_with_hovers', + 'tags' : ("Zora's River",), 'tooltip' : '''\ - You can use the Hover Boots to hover around to - the climbable wall, skipping the need to use a - fire source and spawn a Hookshot target. + Can hover behind the waterfall as adult. '''}, - 'Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots': { - 'name' : 'logic_fire_mq_maze_hovers', - 'tags' : ("Fire Temple",), + "Zora's River Rupees with Jump Dive": { + 'name' : 'logic_zora_river_rupees', + 'tags' : ("Zora's River", "Freestandings",), 'tooltip' : '''\ - Use the Hover Boots off of a crate to - climb to the upper maze without needing - to spawn and use the Hookshot targets. + You can jump down onto them from + above to skip needing Iron Boots. '''}, - 'Fire Temple MQ Chest Near Boss without Breaking Crate': { - 'name' : 'logic_fire_mq_near_boss', - 'tags' : ("Fire Temple",), + 'Skip King Zora as Adult with Nothing': { + 'name' : 'logic_king_zora_skip', + 'tags' : ("Zora's Domain",), 'tooltip' : '''\ - The hitbox for the torch extends a bit outside of the crate. - Shoot a flaming arrow at the side of the crate to light the - torch without needing to get over there and break the crate. + With a precise jump as adult, it is possible to + get on the fence next to King Zora from the front + to access Zora's Fountain. '''}, - 'Fire Temple MQ Lizalfos Maze Side Room without Box': { - 'name' : 'logic_fire_mq_maze_side_room', - 'tags' : ("Fire Temple",), + "Zora's Domain GS with No Additional Items": { + 'name' : 'logic_domain_gs', + 'tags' : ("Zora's Domain", "Skulltulas",), 'tooltip' : '''\ - You can walk from the blue switch to the door and - quickly open the door before the bars reclose. This - skips needing to reach the upper sections of the - maze to get a box to place on the switch. - '''}, - 'Fire Temple MQ Boss Key Chest without Bow': { - 'name' : 'logic_fire_mq_bk_chest', - 'tags' : ("Fire Temple",), + A precise jump slash can kill the Skulltula and + recoil back onto the top of the frozen waterfall. + To kill it, the logic normally guarantees one of + Hookshot, Bow, or Magic. + '''}, + 'Lake Hylia Lab Wall GS with Jump Slash': { + 'name' : 'logic_lab_wall_gs', + 'tags' : ("Lake Hylia", "Skulltulas",), 'tooltip' : '''\ - It is possible to light both of the timed torches - to unbar the door to the boss key chest's room - with just Din's Fire if you move very quickly - between the two torches. It is also possible to - unbar the door with just Din's by abusing an - oversight in the way the game counts how many - torches have been lit. + The jump slash to actually collect the + token is somewhat precise. '''}, - 'Fire Temple MQ Above Flame Wall Maze GS from Below with Longshot': { - 'name' : 'logic_fire_mq_above_maze_gs', - 'tags' : ("Fire Temple", "Skulltulas",), - 'tooltip' : '''\ - The floor of the room that contains this Skulltula - is only solid from above. From the maze below, the - Longshot can be shot through the ceiling to obtain - the token with two fewer small keys than normal. - '''}, - "Zora's River Lower Freestanding PoH as Adult with Nothing": { - 'name' : 'logic_zora_river_lower', - 'tags' : ("Zora's River",), - 'tooltip' : '''\ - Adult can reach this PoH with a precise jump, - no Hover Boots required. - '''}, - 'Water Temple Cracked Wall with Hover Boots': { - 'name' : 'logic_water_cracked_wall_hovers', - 'tags' : ("Water Temple",), - 'tooltip' : '''\ - With a midair side-hop while wearing the Hover - Boots, you can reach the cracked wall without - needing to raise the water up to the middle level. - '''}, - 'Shadow Temple Freestanding Key with Bombchu': { - 'name' : 'logic_shadow_freestanding_key', - 'tags' : ("Shadow Temple",), - 'tooltip' : '''\ - Release the Bombchu with good timing so that - it explodes near the bottom of the pot. - '''}, - 'Shadow Temple MQ Invisible Blades Silver Rupees without Song of Time': { - 'name' : 'logic_shadow_mq_invisible_blades', - 'tags' : ("Shadow Temple",), - 'tooltip' : '''\ - The Like Like can be used to boost you into the - silver rupee that normally requires Song of Time. - This cannot be performed on OHKO since the Like - Like does not boost you high enough if you die. - '''}, - 'Shadow Temple MQ Lower Huge Pit without Fire Source': { - 'name' : 'logic_shadow_mq_huge_pit', - 'tags' : ("Shadow Temple",), + 'Lake Hylia Lab Dive without Gold Scale': { + 'name' : 'logic_lab_diving', + 'tags' : ("Lake Hylia",), 'tooltip' : '''\ - Normally a frozen eye switch spawns some platforms - that you can use to climb down, but there's actually - a small piece of ground that you can stand on that - you can just jump down to. + Remove the Iron Boots in the midst of + Hookshotting the underwater crate. '''}, - 'Backflip over Mido as Adult': { - 'name' : 'logic_mido_backflip', - 'tags' : ("the Lost Woods",), + 'Water Temple Entry without Iron Boots using Hookshot': { + 'name' : 'logic_water_hookshot_entry', + 'tags' : ("Lake Hylia",), 'tooltip' : '''\ - With a specific position and angle, you can - backflip over Mido. + When entering Water Temple using Gold Scale instead + of Iron Boots, the Longshot is usually used to be + able to hit the switch and open the gate. But, by + standing in a particular spot, the switch can be hit + with only the reach of the Hookshot. '''}, - 'Fire Temple Boss Door without Hover Boots or Pillar': { - 'name' : 'logic_fire_boss_door_jump', - 'tags' : ("Fire Temple",), + 'Gerudo Valley Crate PoH as Adult with Hover Boots': { + 'name' : 'logic_valley_crate_hovers', + 'tags' : ("Gerudo Valley",), 'tooltip' : '''\ - The Fire Temple Boss Door can be reached with a precise - jump. You must be touching the side wall of the room so - that Link will grab the ledge from farther away than - is normally possible. + From the far side of Gerudo Valley, a precise + Hover Boots movement and jump-slash recoil can + allow adult to reach the ledge with the crate + PoH without needing Longshot. You will take + fall damage. '''}, - 'Lake Hylia Lab Dive without Gold Scale': { - 'name' : 'logic_lab_diving', - 'tags' : ("Lake Hylia",), + '''Thieves' Hideout "Kitchen" with No Additional Items''': { + 'name' : 'logic_gerudo_kitchen', + 'tags' : ("Thieves' Hideout", "Gerudo's Fortress",), 'tooltip' : '''\ - Remove the Iron Boots in the midst of - Hookshotting the underwater crate. + Allows passing through the kitchen by avoiding being + seen by the guards. The logic normally guarantees + Bow or Hookshot to stun them from a distance, or + Hover Boots to cross the room without needing to + deal with the guards. '''}, - 'Deliver Eye Drops with Bolero of Fire': { - 'name' : 'logic_biggoron_bolero', - 'tags' : ("Death Mountain Trail",), + "Gerudo's Fortress Ledge Jumps": { + 'name' : 'logic_gf_jump', + 'tags' : ("Gerudo's Fortress",), 'tooltip' : '''\ - Playing a warp song normally causes a trade item to - spoil immediately, however, it is possible use Bolero - to reach Biggoron and still deliver the Eye Drops - before they spoil. If you do not wear the Goron Tunic, - the heat timer inside the crater will override the trade - item's timer. When you exit to Death Mountain Trail you - will have one second to show the Eye Drops before they - expire. You can get extra time to show the Eye Drops if - you warp immediately upon receiving them. If you don't - have many hearts, you may have to reset the heat timer - by quickly dipping in and out of Darunia's chamber. - This trick does not apply if "Randomize Warp Song - Destinations" is enabled, or if the settings are such - that trade items do not need to be delivered within a - time limit. + Adult can jump onto the top roof of the fortress + without going through the interior of the hideout. '''}, 'Wasteland Crossing without Hover Boots or Longshot': { 'name' : 'logic_wasteland_crossing', @@ -493,6 +427,35 @@ 'tooltip' : '''\ You can beat the quicksand by backwalking across it in a specific way. + Note that jumping to the carpet merchant as child + typically requires a fairly precise jump slash. + '''}, + 'Lensless Wasteland': { + 'name' : 'logic_lens_wasteland', + 'tags' : ("Lens of Truth", "Haunted Wasteland",), + 'tooltip' : '''\ + By memorizing the path, you can travel through the + Wasteland without using the Lens of Truth to see + the Poe. + The equivalent trick for going in reverse through + the Wasteland is "Reverse Wasteland". + '''}, + 'Reverse Wasteland': { + 'name' : 'logic_reverse_wasteland', + 'tags' : ("Haunted Wasteland",), + 'tooltip' : '''\ + By memorizing the path, you can travel through the + Wasteland in reverse. + Note that jumping to the carpet merchant as child + typically requires a fairly precise jump slash. + The equivalent trick for going forward through the + Wasteland is "Lensless Wasteland". + To cross the river of sand with no additional items, + be sure to also enable "Wasteland Crossing without + Hover Boots or Longshot". + Unless all overworld entrances are randomized, child + Link will not be expected to do anything at Gerudo's + Fortress. '''}, 'Colossus Hill GS with Hookshot': { 'name' : 'logic_colossus_gs', @@ -502,245 +465,377 @@ you can get enough of a break to take some time to aim more carefully. '''}, - "Dodongo's Cavern Scarecrow GS with Armos Statue": { - 'name' : 'logic_dc_scarecrow_gs', - 'tags' : ("Dodongo's Cavern", "Skulltulas",), + + # Dungeons + + 'Deku Tree Basement Vines GS with Jump Slash': { + 'name' : 'logic_deku_basement_gs', + 'tags' : ("Deku Tree", "Skulltulas",), 'tooltip' : '''\ - You can jump off an Armos Statue to reach the - alcove with the Gold Skulltula. It takes quite - a long time to pull the statue the entire way. - The jump to the alcove can be a bit picky when - done as child. + Can be defeated by doing a precise jump slash. '''}, - 'Kakariko Tower GS with Jump Slash': { - 'name' : 'logic_kakariko_tower_gs', - 'tags' : ("Kakariko Village", "Skulltulas",), + 'Deku Tree Basement without Slingshot': { + 'name' : 'logic_deku_b1_skip', + 'tags' : ("Deku Tree", "MQ",), 'tooltip' : '''\ - Climb the tower as high as you can without - touching the Gold Skulltula, then let go and - jump slash immediately. You will take fall - damage. + A precise jump can be used to skip + needing to use the Slingshot to go + around B1 of the Deku Tree. If used + with the "Closed Forest" setting, a + Slingshot will not be guaranteed to + exist somewhere inside the Forest. + This trick applies to both Vanilla + and Master Quest. + '''}, + 'Deku Tree Basement Web to Gohma with Bow': { + 'name' : 'logic_deku_b1_webs_with_bow', + 'tags' : ("Deku Tree", "Entrance",), + 'tooltip' : '''\ + All spider web walls in the Deku Tree basement can be burnt + as adult with just a bow by shooting through torches. This + trick only applies to the circular web leading to Gohma; + the two vertical webs are always in logic. + + Backflip onto the chest near the torch at the bottom of + the vine wall. With precise positioning you can shoot + through the torch to the right edge of the circular web. + + This allows completion of adult Deku Tree with no fire source. '''}, 'Deku Tree MQ Compass Room GS Boulders with Just Hammer': { 'name' : 'logic_deku_mq_compass_gs', - 'tags' : ("Deku Tree", "Skulltulas",), + 'tags' : ("Deku Tree", "Skulltulas", "MQ",), 'tooltip' : '''\ Climb to the top of the vines, then let go and jump slash immediately to destroy the boulders using the Hammer, without needing to spawn a Song of Time block. '''}, - 'Lake Hylia Lab Wall GS with Jump Slash': { - 'name' : 'logic_lab_wall_gs', - 'tags' : ("Lake Hylia", "Skulltulas",), + 'Deku Tree MQ Roll Under the Spiked Log': { + 'name' : 'logic_deku_mq_log', + 'tags' : ("Deku Tree", "MQ",), 'tooltip' : '''\ - The jump slash to actually collect the - token is somewhat precise. + You can get past the spiked log by rolling + to briefly shrink your hitbox. As adult, + the timing is a bit more precise. '''}, - 'Spirit Temple MQ Lower Adult without Fire Arrows': { - 'name' : 'logic_spirit_mq_lower_adult', - 'tags' : ("Spirit Temple",), + "Dodongo's Cavern Scarecrow GS with Armos Statue": { + 'name' : 'logic_dc_scarecrow_gs', + 'tags' : ("Dodongo's Cavern", "Skulltulas",), 'tooltip' : '''\ - It can be done with Din's Fire and Bow. - Whenever an arrow passes through a lit torch, it - resets the timer. It's finicky but it's also - possible to stand on the pillar next to the center - torch, which makes it easier. + You can jump off an Armos Statue to reach the + alcove with the Gold Skulltula. It takes quite + a long time to pull the statue the entire way. + The jump to the alcove can be a bit picky when + done as child. '''}, - 'Spirit Temple Map Chest with Bow': { - 'name' : 'logic_spirit_map_chest', - 'tags' : ("Spirit Temple",), + "Dodongo's Cavern Vines GS from Below with Longshot": { + 'name' : 'logic_dc_vines_gs', + 'tags' : ("Dodongo's Cavern", "Skulltulas",), 'tooltip' : '''\ - To get a line of sight from the upper torch to - the map chest torches, you must pull an Armos - statue all the way up the stairs. + The vines upon which this Skulltula rests are one- + sided collision. You can use the Longshot to get it + from below, by shooting it through the vines, + bypassing the need to lower the staircase. '''}, - 'Spirit Temple Sun Block Room Chest with Bow': { - 'name' : 'logic_spirit_sun_chest', - 'tags' : ("Spirit Temple",), + "Dodongo's Cavern Staircase with Bow": { + 'name' : 'logic_dc_staircase', + 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ - Using the blocks in the room as platforms you can - get lines of sight to all three torches. The timer - on the torches is quite short so you must move - quickly in order to light all three. + The Bow can be used to knock down the stairs + with two well-timed shots. '''}, - 'Spirit Temple MQ Sun Block Room as Child without Song of Time': { - 'name' : 'logic_spirit_mq_sun_block_sot', - 'tags' : ("Spirit Temple",), + "Dodongo's Cavern Child Slingshot Skips": { + 'name' : 'logic_dc_slingshot_skip', + 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ - While adult can easily jump directly to the switch that - unbars the door to the sun block room, child Link cannot - make the jump without spawning a Song of Time block to - jump from. You can skip this by throwing the crate down - onto the switch from above, which does unbar the door, - however the crate immediately breaks, so you must move - quickly to get through the door before it closes back up. + With precise platforming, child can cross the + platforms while the flame circles are there. + When enabling this trick, it's recommended that + you also enable the Adult variant: "Dodongo's + Cavern Spike Trap Room Jump without Hover Boots". '''}, - 'Shadow Trial MQ Torch with Bow': { - 'name' : 'logic_shadow_trial_mq', - 'tags' : ("Ganon's Castle",), + "Dodongo's Cavern Two Scrub Room with Strength": { + 'name' : 'logic_dc_scrub_room', + 'tags' : ("Dodongo's Cavern",), 'tooltip' : '''\ - You can light the torch in this room without a fire - source by shooting an arrow through the lit torch - at the beginning of the room. Because the room is - so dark and the unlit torch is so far away, it can - be difficult to aim the shot correctly. + With help from a conveniently-positioned block, + Adult can quickly carry a bomb flower over to + destroy the mud wall blocking the room with two + Deku Scrubs. '''}, - 'Forest Temple NE Outdoors Ledge with Hover Boots': { - 'name' : 'logic_forest_outdoors_ledge', - 'tags' : ("Forest Temple", "Entrance",), + "Dodongo's Cavern Spike Trap Room Jump without Hover Boots": { + 'name' : 'logic_dc_jump', + 'tags' : ("Dodongo's Cavern", "MQ",), 'tooltip' : '''\ - With precise Hover Boots movement you can fall down - to this ledge from upper balconies. If done precisely - enough, it is not necessary to take fall damage. - In MQ, this skips a Longshot requirement. - In Vanilla, this can skip a Hookshot requirement in - entrance randomizer. + The jump is adult Link only. Applies to both Vanilla and MQ. '''}, - 'Water Temple Boss Key Region with Hover Boots': { - 'name' : 'logic_water_boss_key_region', - 'tags' : ("Water Temple",), + "Dodongo's Cavern Smash the Boss Lobby Floor": { + 'name' : 'logic_dc_hammer_floor', + 'tags' : ("Dodongo's Cavern", "Entrance", "MQ",), 'tooltip' : '''\ - With precise Hover Boots movement it is possible - to reach the boss key chest's region without - needing the Longshot. It is not necessary to take - damage from the spikes. The Gold Skulltula Token - in the following room can also be obtained with - just the Hover Boots. + The bombable floor before King Dodongo can be destroyed + with Hammer if hit in the very center. This is only + relevant with Shuffle Boss Entrances or if Dodongo's Cavern + is MQ and either variant of "Dodongo's Cavern MQ Light the + Eyes with Strength" is on. '''}, - 'Water Temple MQ North Basement GS without Small Key': { - 'name' : 'logic_water_mq_locked_gs', - 'tags' : ("Water Temple", "Skulltulas",), + "Dodongo's Cavern MQ Early Bomb Bag Area as Child": { + 'name' : 'logic_dc_mq_child_bombs', + 'tags' : ("Dodongo's Cavern", "MQ",), 'tooltip' : '''\ - There is an invisible Hookshot target that can be used - to get over the gate that blocks you from going to this - Skulltula early. This avoids going through some rooms - that normally require a Small Key to access. If "Water - Temple North Basement Ledge with Precise Jump" is not - enabled, this also skips needing Hover Boots or - Scarecrow's Song to reach the locked door. + With a precise jump slash from above, you + can reach the Bomb Bag area as only child + without needing a Slingshot. You will + take fall damage. '''}, - 'Water Temple Falling Platform Room GS with Hookshot': { - 'name' : 'logic_water_falling_platform_gs_hookshot', - 'tags' : ("Water Temple", "Skulltulas",), + "Dodongo's Cavern MQ Light the Eyes with Strength as Child": { + 'name' : 'logic_dc_mq_eyes_child', + 'tags' : ("Dodongo's Cavern", "MQ",), 'tooltip' : '''\ - If you stand on the very edge of the platform, this - Gold Skulltula can be obtained with only the Hookshot. + If you move very quickly, it is possible to use + the bomb flower at the top of the room to light + the eyes. To perform this trick as child is + significantly more difficult than adult. The + player is also expected to complete the DC back + area without explosives, including getting past + the Armos wall to the switch for the boss door. '''}, - 'Water Temple Falling Platform Room GS with Boomerang': { - 'name' : 'logic_water_falling_platform_gs_boomerang', - 'tags' : ("Water Temple", "Skulltulas", "Entrance",), + "Dodongo's Cavern MQ Light the Eyes with Strength as Adult": { + 'name' : 'logic_dc_mq_eyes_adult', + 'tags' : ("Dodongo's Cavern", "MQ",), 'tooltip' : '''\ - If you stand on the very edge of the platform, this - Gold Skulltula can be obtained with only the Boomerang. + If you move very quickly, it is possible to use + the bomb flower at the top of the room to light + the eyes. '''}, - 'Water Temple River GS without Iron Boots': { - 'name' : 'logic_water_river_gs', - 'tags' : ("Water Temple", "Skulltulas",), + 'Jabu Underwater Alcove as Adult with Jump Dive': { + 'name' : 'logic_jabu_alcove_jump_dive', + 'tags' : ("Jabu Jabu's Belly", "Entrance", "MQ",), 'tooltip' : '''\ - Standing on the exposed ground toward the end of - the river, a precise Longshot use can obtain the - token. The Longshot cannot normally reach far - enough to kill the Skulltula, however. You'll - first have to find some other way of killing it. + Standing above the underwater tunnel leading to the scrub, + jump down and swim through the tunnel. This allows adult to + access the alcove with no Scale or Iron Boots. In vanilla Jabu, + this alcove has a business scrub. In MQ Jabu, it has the compass + chest and a door switch for the main floor. '''}, - 'Water Temple Entry without Iron Boots using Hookshot': { - 'name' : 'logic_water_hookshot_entry', - 'tags' : ("Lake Hylia",), + 'Jabu Near Boss Room with Hover Boots': { + 'name' : 'logic_jabu_boss_hover', + 'tags' : ("Jabu Jabu's Belly", "Skulltulas", "Entrance",), 'tooltip' : '''\ - When entering Water Temple using Gold Scale instead - of Iron Boots, the Longshot is usually used to be - able to hit the switch and open the gate. But, by - standing in a particular spot, the switch can be hit - with only the reach of the Hookshot. + A box for the blue switch can be carried over + by backwalking with one while the elevator is + at its peak. Alternatively, you can skip + transporting a box by quickly rolling from the + switch and opening the door before it closes. + However, the timing for this is very tight. + '''}, + 'Jabu Near Boss Ceiling Switch/GS without Boomerang or Explosives': { + 'name' : 'logic_jabu_near_boss_ranged', + 'tags' : ("Jabu Jabu's Belly", "Skulltulas", "Entrance", "MQ",), + 'tooltip' : '''\ + Vanilla Jabu: From near the entrance into the room, you can + hit the switch that opens the door to the boss room using a + precisely-aimed use of the Slingshot, Bow, or Longshot. As well, + if you climb to the top of the vines you can stand on the right + edge of the platform and shoot around the glass. From this + distance, even the Hookshot can reach the switch. This trick is + only relevant if "Shuffle Boss Entrances" is enabled. + + MQ Jabu: A Gold Skulltula Token can be collected with the + Hookshot or Longshot using the same methods as hitting the switch + in vanilla. This trick is usually only relevant if Jabu dungeon + shortcuts are enabled. + '''}, + 'Jabu Near Boss Ceiling Switch with Explosives': { + 'name' : 'logic_jabu_near_boss_explosives', + 'tags' : ("Jabu Jabu's Belly", "Entrance",), + 'tooltip' : '''\ + You can hit the switch that opens the door to the boss + room using a precisely-aimed Bombchu. Also, using the + Hover Boots, adult can throw a Bomb at the switch. This + trick is only relevant if "Shuffle Boss Entrances" is + enabled. '''}, - 'Death Mountain Trail Climb with Hover Boots': { - 'name' : 'logic_dmt_climb_hovers', - 'tags' : ("Death Mountain Trail",), + 'Jabu MQ without Lens of Truth': { + 'name' : 'logic_lens_jabu_mq', + 'tags' : ("Lens of Truth", "Jabu Jabu's Belly", "MQ",), 'tooltip' : '''\ - It is possible to use the Hover Boots to bypass - needing to destroy the boulders blocking the path - to the top of Death Mountain. + Removes the requirements for the Lens of Truth + in Jabu MQ. + '''}, + 'Jabu MQ Compass Chest with Boomerang': { + 'name' : 'logic_jabu_mq_rang_jump', + 'tags' : ("Jabu Jabu's Belly", "MQ",), + 'tooltip' : '''\ + Boomerang can reach the cow switch to spawn the chest by + targeting the cow, jumping off of the ledge where the + chest spawns, and throwing the Boomerang in midair. This + is only relevant with Jabu Jabu's Belly dungeon shortcuts + enabled. '''}, - 'Death Mountain Trail Upper Red Rock GS without Hammer': { - 'name' : 'logic_trail_gs_upper', - 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'Jabu MQ Song of Time Block GS with Boomerang': { + 'name' : 'logic_jabu_mq_sot_gs', + 'tags' : ("Jabu Jabu's Belly", "Skulltulas", "MQ",), 'tooltip' : '''\ - After killing the Skulltula, the token can be collected - by backflipping into the rock at the correct angle. + Allow the Boomerang to return to you through + the Song of Time block to grab the token. '''}, - 'Death Mountain Trail Lower Red Rock GS with Hookshot': { - 'name' : 'logic_trail_gs_lower_hookshot', - 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'Bottom of the Well without Lens of Truth': { + 'name' : 'logic_lens_botw', + 'tags' : ("Lens of Truth", "Bottom of the Well",), 'tooltip' : '''\ - After killing the Skulltula, the token can be fished - out of the rock without needing to destroy it, by - using the Hookshot in the correct way. + Removes the requirements for the Lens of Truth + in Bottom of the Well. '''}, - 'Death Mountain Trail Lower Red Rock GS with Hover Boots': { - 'name' : 'logic_trail_gs_lower_hovers', - 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'Child Dead Hand without Kokiri Sword': { + 'name' : 'logic_child_deadhand', + 'tags' : ("Bottom of the Well",), 'tooltip' : '''\ - After killing the Skulltula, the token can be - collected without needing to destroy the rock by - backflipping down onto it with the Hover Boots. - First use the Hover Boots to stand on a nearby - fence, and go for the Skulltula Token from there. + Requires 9 sticks or 5 jump slashes. + '''}, + 'Bottom of the Well Map Chest with Strength & Sticks': { + 'name' : 'logic_botw_basement', + 'tags' : ("Bottom of the Well",), + 'tooltip' : '''\ + The chest in the basement can be reached with + strength by doing a jump slash with a lit + stick to access the bomb flowers. '''}, - 'Death Mountain Trail Lower Red Rock GS with Magic Bean': { - 'name' : 'logic_trail_gs_lower_bean', - 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'Bottom of the Well MQ Jump Over the Pits': { + 'name' : 'logic_botw_mq_pits', + 'tags' : ("Bottom of the Well", "MQ",), 'tooltip' : '''\ - After killing the Skulltula, the token can be - collected without needing to destroy the rock by - jumping down onto it from the bean plant, - midflight, with precise timing and positioning. + While the pits in Bottom of the Well don't allow you to + jump just by running straight at them, you can still get + over them by side-hopping or backflipping across. With + explosives, this allows you to access the central areas + without Zelda's Lullaby. With Zelda's Lullaby, it allows + you to access the west inner room without explosives. '''}, - 'Death Mountain Crater Upper to Lower with Hammer': { - 'name' : 'logic_crater_upper_to_lower', - 'tags' : ("Death Mountain Crater",), + 'Bottom of the Well MQ Dead Hand Freestanding Key with Boomerang': { + 'name' : 'logic_botw_mq_dead_hand_key', + 'tags' : ("Bottom of the Well", "MQ",), 'tooltip' : '''\ - With the Hammer, you can jump slash the rock twice - in the same jump in order to destroy it before you - fall into the lava. + Boomerang can fish the item out of the rubble without + needing explosives to blow it up. '''}, - "Zora's Domain Entry with Hover Boots": { - 'name' : 'logic_zora_with_hovers', - 'tags' : ("Zora's River",), + 'Forest Temple First Room GS with Difficult-to-Use Weapons': { + 'name' : 'logic_forest_first_gs', + 'tags' : ("Forest Temple", "Entrance", "Skulltulas",), 'tooltip' : '''\ - Can hover behind the waterfall as adult. + Allows killing this Skulltula with Sword or Sticks by + jump slashing it as you let go from the vines. You can + avoid taking fall damage by recoiling onto the tree. + Also allows killing it as Child with a Bomb throw. It's + much more difficult to use a Bomb as child due to + Child Link's shorter height. '''}, - "Zora's Domain GS with No Additional Items": { - 'name' : 'logic_domain_gs', - 'tags' : ("Zora's Domain", "Skulltulas",), + 'Forest Temple East Courtyard GS with Boomerang': { + 'name' : 'logic_forest_outdoor_east_gs', + 'tags' : ("Forest Temple", "Entrance", "Skulltulas",), 'tooltip' : '''\ - A precise jump slash can kill the Skulltula and - recoil back onto the top of the frozen waterfall. - To kill it, the logic normally guarantees one of - Hookshot, Bow, or Magic. + Precise Boomerang throws can allow child to + kill the Skulltula and collect the token. + '''}, + 'Forest Temple East Courtyard Vines with Hookshot': { + 'name' : 'logic_forest_vines', + 'tags' : ("Forest Temple", "MQ",), + 'tooltip' : '''\ + The vines in Forest Temple leading to where the well + drain switch is in the standard form can be barely + reached with just the Hookshot. Applies to MQ also. '''}, - 'Skip King Zora as Adult with Nothing': { - 'name' : 'logic_king_zora_skip', - 'tags' : ("Zora's Domain",), + 'Forest Temple NE Outdoors Ledge with Hover Boots': { + 'name' : 'logic_forest_outdoors_ledge', + 'tags' : ("Forest Temple", "Entrance", "MQ",), 'tooltip' : '''\ - With a precise jump as adult, it is possible to - get on the fence next to King Zora from the front - to access Zora's Fountain. + With precise Hover Boots movement you can fall down + to this ledge from upper balconies. If done precisely + enough, it is not necessary to take fall damage. + In MQ, this skips a Longshot requirement. + In Vanilla, this can skip a Hookshot requirement in + entrance randomizer. '''}, - 'Shadow Temple River Statue with Bombchu': { - 'name' : 'logic_shadow_statue', - 'tags' : ("Shadow Temple",), + 'Forest Temple East Courtyard Door Frame with Hover Boots': { + 'name' : 'logic_forest_door_frame', + 'tags' : ("Forest Temple", "MQ",), 'tooltip' : '''\ - By sending a Bombchu around the edge of the - gorge, you can knock down the statue without - needing a Bow. - Applies in both vanilla and MQ Shadow. + A precise Hover Boots movement from the upper + balconies in this courtyard can be used to get on + top of the door frame. Applies to both Vanilla and + Master Quest. In Vanilla, from on top the door + frame you can summon Pierre, allowing you to access + the falling ceiling room early. In Master Quest, + this allows you to obtain the GS on the door frame + as adult without Hookshot or Song of Time. + '''}, + 'Forest Temple Outside Backdoor with Jump Slash': { + 'name' : 'logic_forest_outside_backdoor', + 'tags' : ("Forest Temple", "MQ",), + 'tooltip' : '''\ + A jump slash recoil can be used to reach the + ledge in the block puzzle room that leads to + the west courtyard. This skips a potential + Hover Boots requirement in vanilla, and it + can sometimes apply in MQ as well. This trick + can be performed as both ages. '''}, - "Stop Link the Goron with Din's Fire": { - 'name' : 'logic_link_goron_dins', - 'tags' : ("Goron City",), + 'Swim Through Forest Temple MQ Well with Hookshot': { + 'name' : 'logic_forest_well_swim', + 'tags' : ("Forest Temple", "MQ",), 'tooltip' : '''\ - The timing is quite awkward. + Shoot the vines in the well as low and as far to + the right as possible, and then immediately swim + under the ceiling to the right. This can only be + required if Forest Temple is in its Master Quest + form. + '''}, + 'Skip Forest Temple MQ Block Puzzle with Bombchu': { + 'name' : 'logic_forest_mq_block_puzzle', + 'tags' : ("Forest Temple", "MQ",), + 'tooltip' : '''\ + Send the Bombchu straight up the center of the + wall directly to the left upon entering the room. + '''}, + 'Forest Temple MQ Twisted Hallway Switch with Jump Slash': { + 'name' : 'logic_forest_mq_hallway_switch_jumpslash', + 'tags' : ("Forest Temple", "MQ",), + 'tooltip' : '''\ + The switch to twist the hallway can be hit with + a jump slash through the glass block. To get in + front of the switch, either use the Hover Boots + or hit the shortcut switch at the top of the + room and jump from the glass blocks that spawn. + Sticks can be used as child, but the Kokiri + Sword is too short to reach through the glass. + '''}, + #'Forest Temple MQ Twisted Hallway Switch with Hookshot': { + # 'name' : 'logic_forest_mq_hallway_switch_hookshot', + # 'tags' : ("Forest Temple", "MQ",), + # 'tooltip' : '''\ + # There's a very small gap between the glass block + # and the wall. Through that gap you can hookshot + # the target on the ceiling. + # '''}, + 'Forest Temple MQ Twisted Hallway Switch with Boomerang': { + 'name' : 'logic_forest_mq_hallway_switch_boomerang', + 'tags' : ("Forest Temple", "Entrance", "MQ",), + 'tooltip' : '''\ + The Boomerang can return to Link through walls, + allowing child to hit the hallway switch. This + can be used to allow adult to pass through later, + or in conjuction with "Forest Temple Outside + Backdoor with Jump Slash". + '''}, + 'Fire Temple Boss Door without Hover Boots or Pillar': { + 'name' : 'logic_fire_boss_door_jump', + 'tags' : ("Fire Temple", "MQ",), + 'tooltip' : '''\ + The Fire Temple Boss Door can be reached with a precise + jump. You must be touching the side wall of the room so + that Link will grab the ledge from farther away than + is normally possible. '''}, 'Fire Temple Song of Time Room GS without Song of Time': { 'name' : 'logic_fire_song_of_time', @@ -755,188 +850,132 @@ A precise jump can be used to skip pushing the block. '''}, - 'Fire Temple MQ Big Lava Room Blocked Door without Hookshot': { - 'name' : 'logic_fire_mq_blocked_chest', + "Fire Temple East Tower without Scarecrow's Song": { + 'name' : 'logic_fire_scarecrow', 'tags' : ("Fire Temple",), 'tooltip' : '''\ - There is a gap between the hitboxes of the flame - wall in the big lava room. If you know where this - gap is located, you can jump through it and skip - needing to use the Hookshot. To do this without - taking damage is more precise. + Also known as "Pixelshot". + The Longshot can reach the target on the elevator + itself, allowing you to skip needing to spawn the + scarecrow. '''}, - 'Fire Temple MQ Lower to Upper Lizalfos Maze with Precise Jump': { - 'name' : 'logic_fire_mq_maze_jump', + 'Fire Temple Flame Wall Maze Skip': { + 'name' : 'logic_fire_flame_maze', 'tags' : ("Fire Temple",), - 'tooltip' : '''\ - A precise jump off of a crate can be used to - climb to the upper maze without needing to spawn - and use the Hookshot targets. This trick - supersedes both "Fire Temple MQ Lower to Upper - Lizalfos Maze with Hover Boots" and "Fire Temple - MQ Lizalfos Maze Side Room without Box". - '''}, - 'Light Trial MQ without Hookshot': { - 'name' : 'logic_light_trial_mq', - 'tags' : ("Ganon's Castle",), 'tooltip' : '''\ If you move quickly you can sneak past the edge of a flame wall before it can rise up to block you. - In this case to do it without taking damage is - especially precise. - '''}, - 'Ice Cavern MQ Scarecrow GS with No Additional Items': { - 'name' : 'logic_ice_mq_scarecrow', - 'tags' : ("Ice Cavern", "Skulltulas",), - 'tooltip' : '''\ - A precise jump can be used to reach this alcove. - '''}, - 'Ice Cavern MQ Red Ice GS without Song of Time': { - 'name' : 'logic_ice_mq_red_ice_gs', - 'tags' : ("Ice Cavern", "Skulltulas",), - 'tooltip' : '''\ - If you side-hop into the perfect position, you - can briefly stand on the platform with the red - ice just long enough to dump some blue fire. - '''}, - 'Ice Cavern Block Room GS with Hover Boots': { - 'name' : 'logic_ice_block_gs', - 'tags' : ("Ice Cavern", "Skulltulas",), - 'tooltip' : '''\ - The Hover Boots can be used to get in front of the - Skulltula to kill it with a jump slash. Then, the - Hover Boots can again be used to obtain the Token, - all without Hookshot or Boomerang. - '''}, - 'Reverse Wasteland': { - 'name' : 'logic_reverse_wasteland', - 'tags' : ("Haunted Wasteland",), - 'tooltip' : '''\ - By memorizing the path, you can travel through the - Wasteland in reverse. - Note that jumping to the carpet merchant as child - typically requires a fairly precise jump slash. - The equivalent trick for going forward through the - Wasteland is "Lensless Wasteland". - To cross the river of sand with no additional items, - be sure to also enable "Wasteland Crossing without - Hover Boots or Longshot". - Unless all overworld entrances are randomized, child - Link will not be expected to do anything at Gerudo's - Fortress. + To do it without taking damage is more precise. + Allows you to progress without needing either a + Small Key or Hover Boots. '''}, - "Zora's River Upper Freestanding PoH as Adult with Nothing": { - 'name' : 'logic_zora_river_upper', - 'tags' : ("Zora's River",), + 'Fire Temple MQ Chest Near Boss without Breaking Crate': { + 'name' : 'logic_fire_mq_near_boss', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - Adult can reach this PoH with a precise jump, - no Hover Boots required. + The hitbox for the torch extends a bit outside of the crate. + Shoot a flaming arrow at the side of the crate to light the + torch without needing to get over there and break the crate. '''}, - 'Shadow Temple MQ Truth Spinner Gap with Longshot': { - 'name' : 'logic_shadow_mq_gap', - 'tags' : ("Shadow Temple",), + 'Fire Temple MQ Big Lava Room Blocked Door without Hookshot': { + 'name' : 'logic_fire_mq_blocked_chest', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - You can Longshot a torch and jump-slash recoil onto - the tongue. It works best if you Longshot the right - torch from the left side of the room. + There is a gap between the hitboxes of the flame + wall in the big lava room. If you know where this + gap is located, you can jump through it and skip + needing to use the Hookshot. To do this without + taking damage is more precise. '''}, - 'Lost Woods Adult GS without Bean': { - 'name' : 'logic_lost_woods_gs_bean', - 'tags' : ("the Lost Woods", "Skulltulas",), + 'Fire Temple MQ Boss Key Chest without Bow': { + 'name' : 'logic_fire_mq_bk_chest', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - You can collect the token with a precise - Hookshot use, as long as you can kill the - Skulltula somehow first. It can be killed - using Longshot, Bow, Bombchus or Din's Fire. + It is possible to light both of the timed torches + to unbar the door to the boss key chest's room + with just Din's Fire if you move very quickly + between the two torches. It is also possible to + unbar the door with just Din's by abusing an + oversight in the way the game counts how many + torches have been lit. '''}, - 'Jabu Near Boss GS without Boomerang as Adult': { - 'name' : 'logic_jabu_boss_gs_adult', - 'tags' : ("Jabu Jabu's Belly", "Skulltulas", "Entrance",), + 'Fire Temple MQ Climb without Fire Source': { + 'name' : 'logic_fire_mq_climb', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - You can easily get over to the door to the - near boss area early with Hover Boots. The - tricky part is getting through the door - without being able to use a box to keep the - switch pressed. One way is to quickly roll - from the switch and open the door before it - closes. + You can use the Hover Boots to hover around to + the climbable wall, skipping the need to use a + fire source and spawn a Hookshot target. '''}, - 'Kakariko Rooftop GS with Hover Boots': { - 'name' : 'logic_kakariko_rooftop_gs', - 'tags' : ("Kakariko Village", "Skulltulas",), + 'Fire Temple MQ Lizalfos Maze Side Room without Box': { + 'name' : 'logic_fire_mq_maze_side_room', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - Take the Hover Boots from the entrance to Impa's - House over to the rooftop of Skulltula House. From - there, a precise Hover Boots backwalk with backflip - can be used to get onto a hill above the side of - the village. And then from there you can Hover onto - Impa's rooftop to kill the Skulltula and backflip - into the token. + You can walk from the blue switch to the door and + quickly open the door before the bars reclose. This + skips needing to reach the upper sections of the + maze to get a box to place on the switch. '''}, - 'Graveyard Freestanding PoH with Boomerang': { - 'name' : 'logic_graveyard_poh', - 'tags' : ("the Graveyard",), + 'Fire Temple MQ Lower to Upper Lizalfos Maze with Hover Boots': { + 'name' : 'logic_fire_mq_maze_hovers', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - Using a precise moving setup you can obtain - the Piece of Heart by having the Boomerang - interact with it along the return path. + Use the Hover Boots off of a crate to + climb to the upper maze without needing + to spawn and use the Hookshot targets. '''}, - 'Hyrule Castle Storms Grotto GS with Just Boomerang': { - 'name' : 'logic_castle_storms_gs', - 'tags' : ("Hyrule Castle", "Skulltulas",), + 'Fire Temple MQ Lower to Upper Lizalfos Maze with Precise Jump': { + 'name' : 'logic_fire_mq_maze_jump', + 'tags' : ("Fire Temple", "MQ",), 'tooltip' : '''\ - With precise throws, the Boomerang alone can - kill the Skulltula and collect the token, - without first needing to blow up the wall. + A precise jump off of a crate can be used to + climb to the upper maze without needing to spawn + and use the Hookshot targets. This trick + supersedes both "Fire Temple MQ Lower to Upper + Lizalfos Maze with Hover Boots" and "Fire Temple + MQ Lizalfos Maze Side Room without Box". '''}, - 'Death Mountain Trail Soil GS without Destroying Boulder': { - 'name' : 'logic_dmt_soil_gs', - 'tags' : ("Death Mountain Trail", "Skulltulas",), + 'Fire Temple MQ Above Flame Wall Maze GS from Below with Longshot': { + 'name' : 'logic_fire_mq_above_maze_gs', + 'tags' : ("Fire Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - Bugs will go into the soft soil even while the boulder is - still blocking the entrance. - Then, using a precise moving setup you can kill the Gold - Skulltula and obtain the token by having the Boomerang - interact with it along the return path. - '''}, - 'Gerudo Training Ground Left Side Silver Rupees without Hookshot': { - 'name' : 'logic_gtg_without_hookshot', - 'tags' : ("Gerudo Training Ground",), + The floor of the room that contains this Skulltula + is only solid from above. From the maze below, the + Longshot can be shot through the ceiling to obtain + the token with two fewer small keys than normal. + '''}, + 'Fire Temple MQ Flame Wall Maze Skip': { + 'name' : 'logic_fire_mq_flame_maze', + 'tags' : ("Fire Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - After collecting the rest of the silver rupees in the room, - you can reach the final silver rupee on the ceiling by being - pulled up into it after getting grabbed by the Wallmaster. - Then, you must also reach the exit of the room without the - use of the Hookshot. If you move quickly you can sneak past - the edge of a flame wall before it can rise up to block you. - To do so without taking damage is more precise. + If you move quickly you can sneak past the edge of + a flame wall before it can rise up to block you. + To do it without taking damage is more precise. + Allows you to reach the side room GS without needing + Song of Time or Hover Boots. If either of "Fire Temple + MQ Lower to Upper Lizalfos Maze with Hover Boots" or + "with Precise Jump" are enabled, this also allows you + to progress deeper into the dungeon without Hookshot. '''}, - 'Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot': { - 'name' : 'logic_gtg_mq_without_hookshot', - 'tags' : ("Gerudo Training Ground",), + 'Water Temple Torch Longshot': { + 'name' : 'logic_water_temple_torch_longshot', + 'tags' : ("Water Temple",), 'tooltip' : '''\ - After collecting the rest of the silver rupees in the room, - you can reach the final silver rupee on the ceiling by being - pulled up into it after getting grabbed by the Wallmaster. - The Wallmaster will not track you to directly underneath the - rupee. You should take the last step to be under the rupee - after the Wallmaster has begun its attempt to grab you. - Also included with this trick is that fact that the switch - that unbars the door to the final chest of GTG can be hit - without a projectile, using a precise jump slash. - This trick supersedes "Gerudo Training Ground MQ Left Side - Silver Rupees with Hookshot". + Stand on the eastern side of the central pillar and longshot + the torches on the bottom level. Swim through the corridor + and float up to the top level. This allows access to this + area and lower water levels without Iron Boots. + The majority of the tricks that allow you to skip Iron Boots + in the Water Temple are not going to be relevant unless this + trick is first enabled. '''}, - 'Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots': { - 'name' : 'logic_gtg_fake_wall', - 'tags' : ("Gerudo Training Ground",), + 'Water Temple Cracked Wall with Hover Boots': { + 'name' : 'logic_water_cracked_wall_hovers', + 'tags' : ("Water Temple",), 'tooltip' : '''\ - A precise Hover Boots use from the top of the chest can allow - you to grab the ledge without needing the usual requirements. - In Master Quest, this always skips a Song of Time requirement. - In Vanilla, this skips a Hookshot requirement, but is only - relevant if "Gerudo Training Ground Left Side Silver Rupees - without Hookshot" is enabled. + With a midair side-hop while wearing the Hover + Boots, you can reach the cracked wall without + needing to raise the water up to the middle level. '''}, 'Water Temple Cracked Wall with No Additional Items': { 'name' : 'logic_water_cracked_wall_nothing', @@ -948,9 +987,20 @@ level. This trick supersedes "Water Temple Cracked Wall with Hover Boots". '''}, + 'Water Temple Boss Key Region with Hover Boots': { + 'name' : 'logic_water_boss_key_region', + 'tags' : ("Water Temple",), + 'tooltip' : '''\ + With precise Hover Boots movement it is possible + to reach the boss key chest's region without + needing the Longshot. It is not necessary to take + damage from the spikes. The Gold Skulltula Token + in the following room can also be obtained with + just the Hover Boots. + '''}, 'Water Temple North Basement Ledge with Precise Jump': { 'name' : 'logic_water_north_basement_ledge_jump', - 'tags' : ("Water Temple",), + 'tags' : ("Water Temple", "MQ",), 'tooltip' : '''\ In the northern basement there's a ledge from where, in vanilla Water Temple, boulders roll out into the room. @@ -959,17 +1009,16 @@ be done without them. This trick applies to both Vanilla and Master Quest. '''}, - 'Water Temple Torch Longshot': { - 'name' : 'logic_water_temple_torch_longshot', + 'Water Temple Boss Key Jump Dive': { + 'name' : 'logic_water_bk_jump_dive', 'tags' : ("Water Temple",), 'tooltip' : '''\ - Stand on the eastern side of the central pillar and longshot - the torches on the bottom level. Swim through the corridor - and float up to the top level. This allows access to this - area and lower water levels without Iron Boots. - The majority of the tricks that allow you to skip Iron Boots - in the Water Temple are not going to be relevant unless this - trick is first enabled. + Stand on the very edge of the raised corridor leading from the + push block room to the rolling boulder corridor. Face the + gold skulltula on the waterfall and jump over the boulder + corridor floor into the pool of water, swimming right once + underwater. This allows access to the boss key room without + Iron boots. '''}, "Water Temple Central Pillar GS with Farore's Wind": { 'name' : 'logic_water_central_gs_fw', @@ -991,21 +1040,45 @@ Iron Boots to go through the door after the water has been raised, you can obtain the Skulltula Token with the Hookshot. - '''}, - 'Water Temple Boss Key Jump Dive': { - 'name' : 'logic_water_bk_jump_dive', + '''}, + 'Water Temple Central Bow Target without Longshot or Hover Boots': { + 'name' : 'logic_water_central_bow', 'tags' : ("Water Temple",), 'tooltip' : '''\ - Stand on the very edge of the raised corridor leading from the - push block room to the rolling boulder corridor. Face the - gold skulltula on the waterfall and jump over the boulder - corridor floor into the pool of water, swimming right once - underwater. This allows access to the boss key room without - Iron boots. + A very precise Bow shot can hit the eye + switch from the floor above. Then, you + can jump down into the hallway and make + through it before the gate closes. + It can also be done as child, using the + Slingshot instead of the Bow. + '''}, + 'Water Temple Falling Platform Room GS with Hookshot': { + 'name' : 'logic_water_falling_platform_gs_hookshot', + 'tags' : ("Water Temple", "Skulltulas",), + 'tooltip' : '''\ + If you stand on the very edge of the platform, this + Gold Skulltula can be obtained with only the Hookshot. + '''}, + 'Water Temple Falling Platform Room GS with Boomerang': { + 'name' : 'logic_water_falling_platform_gs_boomerang', + 'tags' : ("Water Temple", "Skulltulas", "Entrance",), + 'tooltip' : '''\ + If you stand on the very edge of the platform, this + Gold Skulltula can be obtained with only the Boomerang. + '''}, + 'Water Temple River GS without Iron Boots': { + 'name' : 'logic_water_river_gs', + 'tags' : ("Water Temple", "Skulltulas",), + 'tooltip' : '''\ + Standing on the exposed ground toward the end of + the river, a precise Longshot use can obtain the + token. The Longshot cannot normally reach far + enough to kill the Skulltula, however. You'll + first have to find some other way of killing it. '''}, 'Water Temple Dragon Statue Jump Dive': { 'name' : 'logic_water_dragon_jump_dive', - 'tags' : ("Water Temple",), + 'tags' : ("Water Temple", "MQ",), 'tooltip' : '''\ If you come into the dragon statue room from the serpent river, you can jump down from above and get @@ -1043,316 +1116,432 @@ Temple Dragon Statue Switch from Above the Water as Adult" for adult's variant of this trick. '''}, - 'Goron City Maze Left Chest with Hover Boots': { - 'name' : 'logic_goron_city_leftmost', - 'tags' : ("Goron City",), + 'Water Temple MQ Central Pillar with Fire Arrows': { + 'name' : 'logic_water_mq_central_pillar', + 'tags' : ("Water Temple", "MQ",), 'tooltip' : '''\ - A precise backwalk starting from on top of the - crate and ending with a precisely-timed backflip - can reach this chest without needing either - the Hammer or Silver Gauntlets. + Slanted torches have misleading hitboxes. Whenever + you see a slanted torch jutting out of the wall, + you can expect most or all of its hitbox is actually + on the other side that wall. This can make slanted + torches very finicky to light when using arrows. The + torches in the central pillar of MQ Water Temple are + a particularly egregious example. Logic normally + expects Din's Fire and Song of Time. '''}, - 'Goron City Grotto with Hookshot While Taking Damage': { - 'name' : 'logic_goron_grotto', - 'tags' : ("Goron City",), + 'Water Temple MQ North Basement GS without Small Key': { + 'name' : 'logic_water_mq_locked_gs', + 'tags' : ("Water Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - It is possible to reach the Goron City Grotto by - quickly using the Hookshot while in the midst of - taking damage from the lava floor. This trick will - not be expected on OHKO or quadruple damage. + There is an invisible Hookshot target that can be used + to get over the gate that blocks you from going to this + Skulltula early, skipping a small key as well as + needing Hovers or Scarecrow to reach the locked door. '''}, - 'Deku Tree Basement without Slingshot': { - 'name' : 'logic_deku_b1_skip', - 'tags' : ("Deku Tree",), + 'Shadow Temple Stationary Objects without Lens of Truth': { + 'name' : 'logic_lens_shadow', + 'tags' : ("Lens of Truth", "Shadow Temple",), 'tooltip' : '''\ - A precise jump can be used to skip - needing to use the Slingshot to go - around B1 of the Deku Tree. If used - with the "Closed Forest" setting, a - Slingshot will not be guaranteed to - exist somewhere inside the Forest. - This trick applies to both Vanilla - and Master Quest. + Removes the requirements for the Lens of Truth + in Shadow Temple for most areas in the dungeon + except for crossing the moving platform in the huge + pit room and for fighting Bongo Bongo. '''}, - 'Spirit Temple Lower Adult Switch with Bombs': { - 'name' : 'logic_spirit_lower_adult_switch', - 'tags' : ("Spirit Temple",), + 'Shadow Temple Invisible Moving Platform without Lens of Truth': { + 'name' : 'logic_lens_shadow_platform', + 'tags' : ("Lens of Truth", "Shadow Temple",), 'tooltip' : '''\ - A bomb can be used to hit the switch on the ceiling, - but it must be thrown from a particular distance - away and with precise timing. + Removes the requirements for the Lens of Truth + in Shadow Temple to cross the invisible moving + platform in the huge pit room in either direction. '''}, - 'Forest Temple Outside Backdoor with Jump Slash': { - 'name' : 'logic_forest_outside_backdoor', - 'tags' : ("Forest Temple",), + 'Shadow Temple Bongo Bongo without Lens of Truth': { + 'name' : 'logic_lens_bongo', + 'tags' : ("Shadow Temple", "Entrance", "MQ",), 'tooltip' : '''\ - With a precise jump slash from above, - you can reach the backdoor to the west - courtyard without Hover Boots. Applies - to both Vanilla and Master Quest. + Bongo Bongo can be defeated without the use of + Lens of Truth, as the hands give a pretty good + idea of where the eye is. '''}, - 'Forest Temple East Courtyard Door Frame with Hover Boots': { - 'name' : 'logic_forest_door_frame', - 'tags' : ("Forest Temple",), + 'Shadow Temple Stone Umbrella Skip': { + 'name' : 'logic_shadow_umbrella', + 'tags' : ("Shadow Temple", "MQ",), 'tooltip' : '''\ - A precise Hover Boots movement from the upper - balconies in this courtyard can be used to get on - top of the door frame. Applies to both Vanilla and - Master Quest. In Vanilla, from on top the door - frame you can summon Pierre, allowing you to access - the falling ceiling room early. In Master Quest, - this allows you to obtain the GS on the door frame - as adult without Hookshot or Song of Time. + A very precise Hover Boots movement + from off of the lower chest can get you + on top of the crushing spikes without + needing to pull the block. Applies to + both Vanilla and Master Quest. '''}, - "Dodongo's Cavern MQ Early Bomb Bag Area as Child": { - 'name' : 'logic_dc_mq_child_bombs', - 'tags' : ("Dodongo's Cavern",), + 'Shadow Temple Falling Spikes GS with Hover Boots': { + 'name' : 'logic_shadow_umbrella_gs', + 'tags' : ("Shadow Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - With a precise jump slash from above, you - can reach the Bomb Bag area as only child - without needing a Slingshot. You will - take fall damage. + After killing the Skulltula, a very precise Hover Boots + movement from off of the lower chest can get you on top + of the crushing spikes without needing to pull the block. + From there, another very precise Hover Boots movement can + be used to obtain the token without needing the Hookshot. + Applies to both Vanilla and Master Quest. For obtaining + the chests in this room with just Hover Boots, be sure to + enable "Shadow Temple Stone Umbrella Skip". + '''}, + 'Shadow Temple Freestanding Key with Bombchu': { + 'name' : 'logic_shadow_freestanding_key', + 'tags' : ("Shadow Temple",), + 'tooltip' : '''\ + Release the Bombchu with good timing so that + it explodes near the bottom of the pot. '''}, - "Dodongo's Cavern Two Scrub Room with Strength": { - 'name' : 'logic_dc_scrub_room', - 'tags' : ("Dodongo's Cavern",), + 'Shadow Temple River Statue with Bombchu': { + 'name' : 'logic_shadow_statue', + 'tags' : ("Shadow Temple", "MQ",), 'tooltip' : '''\ - With help from a conveniently-positioned block, - Adult can quickly carry a bomb flower over to - destroy the mud wall blocking the room with two - Deku Scrubs. + By sending a Bombchu around the edge of the + gorge, you can knock down the statue without + needing a Bow. + Applies in both vanilla and MQ Shadow. '''}, - "Dodongo's Cavern Child Slingshot Skips": { - 'name' : 'logic_dc_slingshot_skip', - 'tags' : ("Dodongo's Cavern",), + 'Shadow Temple Bongo Bongo without projectiles': { + 'name' : 'logic_shadow_bongo', + 'tags' : ("Shadow Temple", "Entrance",), 'tooltip' : '''\ - With precise platforming, child can cross the - platforms while the flame circles are there. - When enabling this trick, it's recommended that - you also enable the Adult variant: "Dodongo's - Cavern Spike Trap Room Jump without Hover Boots". + Using precise sword slashes, Bongo Bongo can be + defeated without using projectiles. This is + only relevant in conjunction with Shadow Temple + dungeon shortcuts or shuffled boss entrances. '''}, - "Dodongo's Cavern MQ Light the Eyes with Strength": { - 'name' : 'logic_dc_mq_eyes', - 'tags' : ("Dodongo's Cavern",), + 'Shadow Temple MQ Stationary Objects without Lens of Truth': { + 'name' : 'logic_lens_shadow_mq', + 'tags' : ("Lens of Truth", "Shadow Temple", "MQ",), 'tooltip' : '''\ - If you move very quickly, it is possible to use - the bomb flower at the top of the room to light - the eyes. To perform this trick as child is - significantly more difficult, but child will never - be expected to do so unless "Dodongo's Cavern MQ - Back Areas as Child without Explosives" is enabled. - Also, the bombable floor before King Dodongo can be - destroyed with Hammer if hit in the very center. - '''}, - "Dodongo's Cavern MQ Back Areas as Child without Explosives": { - 'name' : 'logic_dc_mq_child_back', - 'tags' : ("Dodongo's Cavern",), + Removes the requirements for the Lens of Truth + in Shadow Temple MQ for most areas in the dungeon. + See "Shadow Temple MQ Invisible Moving Platform + without Lens of Truth", "Shadow Temple MQ Invisible + Blades Silver Rupees without Lens of Truth", + "Shadow Temple MQ 2nd Dead Hand without Lens of Truth", + and "Shadow Temple Bongo Bongo without Lens of Truth" + for exceptions. + '''}, + 'Shadow Temple MQ Invisible Blades Silver Rupees without Lens of Truth': { + 'name' : 'logic_lens_shadow_mq_invisible_blades', + 'tags' : ("Lens of Truth", "Shadow Temple", "MQ",), + 'tooltip' : '''\ + Removes the requirement for the Lens of Truth or + Nayru's Love in Shadow Temple MQ for the Invisible + Blades room silver rupee collection. + '''}, + 'Shadow Temple MQ Invisible Moving Platform without Lens of Truth': { + 'name' : 'logic_lens_shadow_mq_platform', + 'tags' : ("Lens of Truth", "Shadow Temple", "MQ",), + 'tooltip' : '''\ + Removes the requirements for the Lens of Truth + in Shadow Temple MQ to cross the invisible moving + platform in the huge pit room in either direction. + '''}, + 'Shadow Temple MQ 2nd Dead Hand without Lens of Truth': { + 'name' : 'logic_lens_shadow_mq_dead_hand', + 'tags' : ("Lens of Truth", "Shadow Temple", "MQ",), + 'tooltip' : '''\ + Dead Hand spawns in a random spot within the room. + Having Lens removes the hassle of having to comb + the room looking for his spawn location. + '''}, + 'Shadow Temple MQ Truth Spinner Gap with Longshot': { + 'name' : 'logic_shadow_mq_gap', + 'tags' : ("Shadow Temple", "MQ",), + 'tooltip' : '''\ + You can Longshot a torch and jump-slash recoil onto + the tongue. It works best if you Longshot the right + torch from the left side of the room. + '''}, + 'Shadow Temple MQ Invisible Blades without Song of Time': { + 'name' : 'logic_shadow_mq_invisible_blades', + 'tags' : ("Shadow Temple", "MQ",), + 'tooltip' : '''\ + The Like Like can be used to boost you into the + silver rupee or recovery hearts that normally + require Song of Time. This cannot be performed + on OHKO since the Like Like does not boost you + high enough if you die. + '''}, + 'Shadow Temple MQ Lower Huge Pit without Fire Source': { + 'name' : 'logic_shadow_mq_huge_pit', + 'tags' : ("Shadow Temple", "MQ",), + 'tooltip' : '''\ + Normally a frozen eye switch spawns some platforms + that you can use to climb down, but there's actually + a small piece of ground that you can stand on that + you can just jump down to. + '''}, + 'Shadow Temple MQ Windy Walkway Reverse without Hover Boots': { + 'name' : 'logic_shadow_mq_windy_walkway', + 'tags' : ("Shadow Temple", "MQ",), + 'tooltip' : '''\ + With shadow dungeon shortcuts enabled, it is possible + to jump from the alcove in the windy hallway to the + middle platform. There are two methods: wait out the fan + opposite the door and hold forward, or jump to the right + to be pushed by the fan there towards the platform ledge. + Note that jumps of this distance are inconsistent, but + still possible. + '''}, + 'Spirit Temple without Lens of Truth': { + 'name' : 'logic_lens_spirit', + 'tags' : ("Lens of Truth", "Spirit Temple",), + 'tooltip' : '''\ + Removes the requirements for the Lens of Truth + in Spirit Temple. + '''}, + 'Spirit Temple Child Side Bridge with Bombchu': { + 'name' : 'logic_spirit_child_bombchu', + 'tags' : ("Spirit Temple",), + 'tooltip' : '''\ + A carefully-timed Bombchu can hit the switch. + '''}, + 'Spirit Temple Main Room GS with Boomerang': { + 'name' : 'logic_spirit_lobby_gs', + 'tags' : ("Spirit Temple", "Skulltulas",), + 'tooltip' : '''\ + Standing on the highest part of the arm of the statue, a + precise Boomerang throw can kill and obtain this Gold + Skulltula. You must throw the Boomerang slightly off to + the side so that it curves into the Skulltula, as aiming + directly at it will clank off of the wall in front. + '''}, + 'Spirit Temple Lower Adult Switch with Bombs': { + 'name' : 'logic_spirit_lower_adult_switch', + 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - Child can progress through the back areas without - explosives by throwing a pot at a switch to lower a - fire wall, and by defeating Armos to detonate bomb - flowers (among other methods). While these techniques - themselves are relatively simple, they're not - relevant unless "Dodongo's Cavern MQ Light the Eyes - with Strength" is enabled, which is a trick that - is particularly difficult for child to perform. + A bomb can be used to hit the switch on the ceiling, + but it must be thrown from a particular distance + away and with precise timing. '''}, - 'Rolling Goron (Hot Rodder Goron) as Child with Strength': { - 'name' : 'logic_child_rolling_with_strength', - 'tags' : ("Goron City",), + 'Spirit Temple Main Room Jump from Hands to Upper Ledges': { + 'name' : 'logic_spirit_lobby_jump', + 'tags' : ("Spirit Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - Use the bombflower on the stairs or near Medigoron. - Timing is tight, especially without backwalking. + A precise jump to obtain the following as adult + without needing one of Hover Boots, or Hookshot + (in vanilla) or Song of Time (in MQ): + - Spirit Temple Statue Room Northeast Chest + - Spirit Temple GS Lobby + - Spirit Temple MQ Central Chamber Top Left Pot 1 + - Spirit Temple MQ Central Chamber Top Left Pot 2 '''}, - 'Goron City Spinning Pot PoH with Bombchu': { - 'name' : 'logic_goron_city_pot', - 'tags' : ("Goron City",), + 'Spirit Temple Main Room Hookshot to Boss Platform': { + 'name' : 'logic_spirit_platform_hookshot', + 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - A Bombchu can be used to stop the spinning - pot, but it can be quite finicky to get it - to work. + Precise hookshot aiming at the platform chains can be + used to reach the boss platform from the middle landings. + Using a jump slash immediately after reaching a chain + makes aiming more lenient. Relevant only when Spirit + Temple boss shortcuts are on. '''}, - 'Gerudo Valley Crate PoH as Adult with Hover Boots': { - 'name' : 'logic_valley_crate_hovers', - 'tags' : ("Gerudo Valley",), + 'Spirit Temple Map Chest with Bow': { + 'name' : 'logic_spirit_map_chest', + 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - From the far side of Gerudo Valley, a precise - Hover Boots movement and jump-slash recoil can - allow adult to reach the ledge with the crate - PoH without needing Longshot. You will take - fall damage. + To get a line of sight from the upper torch to + the map chest torches, you must pull an Armos + statue all the way up the stairs. '''}, - 'Jump onto the Lost Woods Bridge as Adult with Nothing': { - 'name' : 'logic_lost_woods_bridge', - 'tags' : ("the Lost Woods", "Entrance",), + 'Spirit Temple Sun Block Room Chest with Bow': { + 'name' : 'logic_spirit_sun_chest', + 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - With very precise movement it's possible for - adult to jump onto the bridge without needing - Longshot, Hover Boots, or Bean. + Using the blocks in the room as platforms you can + get lines of sight to all three torches. The timer + on the torches is quite short so you must move + quickly in order to light all three. '''}, - 'Spirit Trial without Hookshot': { - 'name' : 'logic_spirit_trial_hookshot', - 'tags' : ("Ganon's Castle",), + 'Spirit Temple Shifting Wall with No Additional Items': { + 'name' : 'logic_spirit_wall', + 'tags' : ("Spirit Temple",), 'tooltip' : '''\ - A precise jump off of an Armos can - collect the highest rupee. + Logic normally guarantees a way of dealing with both + the Beamos and the Walltula before climbing the wall. '''}, - 'Shadow Temple Stone Umbrella Skip': { - 'name' : 'logic_shadow_umbrella', - 'tags' : ("Shadow Temple",), + 'Spirit Temple MQ without Lens of Truth': { + 'name' : 'logic_lens_spirit_mq', + 'tags' : ("Lens of Truth", "Spirit Temple", "MQ",), 'tooltip' : '''\ - A very precise Hover Boots movement - from off of the lower chest can get you - on top of the crushing spikes without - needing to pull the block. Applies to - both Vanilla and Master Quest. + Removes the requirements for the Lens of Truth + in Spirit Temple MQ. '''}, - 'Shadow Temple Falling Spikes GS with Hover Boots': { - 'name' : 'logic_shadow_umbrella_gs', - 'tags' : ("Shadow Temple", "Skulltulas",), + 'Spirit Temple MQ Sun Block Room as Child without Song of Time': { + 'name' : 'logic_spirit_mq_sun_block_sot', + 'tags' : ("Spirit Temple", "MQ",), 'tooltip' : '''\ - After killing the Skulltula, a very precise Hover Boots - movement from off of the lower chest can get you on top - of the crushing spikes without needing to pull the block. - From there, another very precise Hover Boots movement can - be used to obtain the token without needing the Hookshot. - Applies to both Vanilla and Master Quest. For obtaining - the chests in this room with just Hover Boots, be sure to - enable "Shadow Temple Stone Umbrella Skip". + While adult can easily jump directly to the switch that + unbars the door to the sun block room, child Link cannot + make the jump without spawning a Song of Time block to + jump from. You can skip this by throwing the crate down + onto the switch from above, which does unbar the door, + however the crate immediately breaks, so you must move + quickly to get through the door before it closes back up. '''}, - 'Water Temple Central Bow Target without Longshot or Hover Boots': { - 'name' : 'logic_water_central_bow', - 'tags' : ("Water Temple",), + 'Spirit Temple MQ Sun Block Room GS with Boomerang': { + 'name' : 'logic_spirit_mq_sun_block_gs', + 'tags' : ("Spirit Temple", "Skulltulas", "MQ",), 'tooltip' : '''\ - A very precise Bow shot can hit the eye - switch from the floor above. Then, you - can jump down into the hallway and make - through it before the gate closes. - It can also be done as child, using the - Slingshot instead of the Bow. + Throw the Boomerang in such a way that it + curves through the side of the glass block + to hit the Gold Skulltula. + '''}, + 'Spirit Temple MQ Lower Adult without Fire Arrows': { + 'name' : 'logic_spirit_mq_lower_adult', + 'tags' : ("Spirit Temple", "MQ",), + 'tooltip' : '''\ + By standing in a precise position it is possible to + "ight two of the torches with a single use of D"n's + Fire. This saves enough time to be able to light all + "hree torches with only Di"'s. '''}, - "Fire Temple East Tower without Scarecrow's Song": { - 'name' : 'logic_fire_scarecrow', - 'tags' : ("Fire Temple",), + 'Spirit Temple MQ Frozen Eye Switch without Fire': { + 'name' : 'logic_spirit_mq_frozen_eye', + 'tags' : ("Spirit Temple", "MQ",), 'tooltip' : '''\ - Also known as "Pixelshot". - The Longshot can reach the target on the elevator - itself, allowing you to skip needing to spawn the - scarecrow. + You can melt the ice by shooting an arrow through a + torch. The only way to find a line of sight for this + shot is to first spawn a Song of Time block, and then + stand on the very edge of it. '''}, - 'Fire Trial MQ with Hookshot': { - 'name' : 'logic_fire_trial_mq', - 'tags' : ("Ganon's Castle",), + 'Ice Cavern Block Room GS with Hover Boots': { + 'name' : 'logic_ice_block_gs', + 'tags' : ("Ice Cavern", "Skulltulas",), 'tooltip' : '''\ - It's possible to hook the target at the end of - fire trial with just Hookshot, but it requires - precise aim and perfect positioning. The main - difficulty comes from getting on the very corner - of the obelisk without falling into the lava. + The Hover Boots can be used to get in front of the + Skulltula to kill it with a jump slash. Then, the + Hover Boots can again be used to obtain the Token, + all without Hookshot or Boomerang. '''}, - 'Shadow Temple Entry with Fire Arrows': { - 'name' : 'logic_shadow_fire_arrow_entry', - 'tags' : ("Shadow Temple",), + 'Ice Cavern MQ Red Ice GS without Song of Time': { + 'name' : 'logic_ice_mq_red_ice_gs', + 'tags' : ("Ice Cavern", "Skulltulas", "MQ",), 'tooltip' : '''\ - It is possible to light all of the torches to - open the Shadow Temple entrance with just Fire - Arrows, but you must be very quick, precise, - and strategic with how you take your shots. + If you side-hop into the perfect position, you + can briefly stand on the platform with the red + ice just long enough to dump some blue fire. '''}, - 'Lensless Wasteland': { - 'name' : 'logic_lens_wasteland', - 'tags' : ("Lens of Truth","Haunted Wasteland",), + 'Ice Cavern MQ Scarecrow GS with No Additional Items': { + 'name' : 'logic_ice_mq_scarecrow', + 'tags' : ("Ice Cavern", "Skulltulas", "MQ",), 'tooltip' : '''\ - By memorizing the path, you can travel through the - Wasteland without using the Lens of Truth to see - the Poe. - The equivalent trick for going in reverse through - the Wasteland is "Reverse Wasteland". + A precise jump can be used to reach this alcove. '''}, - 'Bottom of the Well without Lens of Truth': { - 'name' : 'logic_lens_botw', - 'tags' : ("Lens of Truth","Bottom of the Well",), + 'Gerudo Training Ground without Lens of Truth': { + 'name' : 'logic_lens_gtg', + 'tags' : ("Lens of Truth", "Gerudo Training Ground",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth - in Bottom of the Well. + in Gerudo Training Ground. '''}, - "Ganon's Castle MQ without Lens of Truth": { - 'name' : 'logic_lens_castle_mq', - 'tags' : ("Lens of Truth","Ganon's Castle",), + 'Gerudo Training Ground Left Side Silver Rupees without Hookshot': { + 'name' : 'logic_gtg_without_hookshot', + 'tags' : ("Gerudo Training Ground",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Ganon's Castle MQ. + After collecting the rest of the silver rupees in the room, + you can reach the final silver rupee on the ceiling by being + pulled up into it after getting grabbed by the Wallmaster. + Then, you must also reach the exit of the room without the + use of the Hookshot. If you move quickly you can sneak past + the edge of a flame wall before it can rise up to block you. + To do so without taking damage is more precise. '''}, - "Ganon's Castle without Lens of Truth": { - 'name' : 'logic_lens_castle', - 'tags' : ("Lens of Truth","Ganon's Castle",), + 'Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots': { + 'name' : 'logic_gtg_fake_wall', + 'tags' : ("Gerudo Training Ground", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Ganon's Castle. + A precise Hover Boots use from the top of the chest can allow + you to grab the ledge without needing the usual requirements. + In Master Quest, this always skips a Song of Time requirement. + In Vanilla, this skips a Hookshot requirement, but is only + relevant if "Gerudo Training Ground Left Side Silver Rupees + without Hookshot" is enabled. '''}, 'Gerudo Training Ground MQ without Lens of Truth': { 'name' : 'logic_lens_gtg_mq', - 'tags' : ("Lens of Truth","Gerudo Training Ground",), + 'tags' : ("Lens of Truth", "Gerudo Training Ground", "MQ",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth in Gerudo Training Ground MQ. '''}, - 'Gerudo Training Ground without Lens of Truth': { - 'name' : 'logic_lens_gtg', - 'tags' : ("Lens of Truth","Gerudo Training Ground",), + 'Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot': { + 'name' : 'logic_gtg_mq_with_hookshot', + 'tags' : ("Gerudo Training Ground", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Gerudo Training Ground. + The highest silver rupee can be obtained by + hookshotting the target and then immediately jump + slashing toward the rupee. '''}, - 'Jabu MQ without Lens of Truth': { - 'name' : 'logic_lens_jabu_mq', - 'tags' : ("Lens of Truth","Jabu Jabu's Belly",), + 'Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot': { + 'name' : 'logic_gtg_mq_without_hookshot', + 'tags' : ("Gerudo Training Ground", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Jabu MQ. - '''}, - 'Shadow Temple MQ before Invisible Moving Platform without Lens of Truth': { - 'name' : 'logic_lens_shadow_mq', - 'tags' : ("Lens of Truth","Shadow Temple",), + After collecting the rest of the silver rupees in the room, + you can reach the final silver rupee on the ceiling by being + pulled up into it after getting grabbed by the Wallmaster. + The Wallmaster will not track you to directly underneath the + rupee. You should take the last step to be under the rupee + after the Wallmaster has begun its attempt to grab you. + Also included with this trick is that fact that the switch + that unbars the door to the final chest of GTG can be hit + without a projectile, using a precise jump slash. + This trick supersedes "Gerudo Training Ground MQ Left Side + Silver Rupees with Hookshot". + '''}, + "Ganon's Castle without Lens of Truth": { + 'name' : 'logic_lens_castle', + 'tags' : ("Lens of Truth", "Ganon's Castle",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth - in Shadow Temple MQ before the invisible moving platform. + in Ganon's Castle. '''}, - 'Shadow Temple MQ beyond Invisible Moving Platform without Lens of Truth': { - 'name' : 'logic_lens_shadow_mq_back', - 'tags' : ("Lens of Truth","Shadow Temple",), + 'Spirit Trial without Hookshot': { + 'name' : 'logic_spirit_trial_hookshot', + 'tags' : ("Ganon's Castle",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Shadow Temple MQ beyond the invisible moving platform. + A precise jump off of an Armos can + collect the highest rupee. '''}, - 'Shadow Temple before Invisible Moving Platform without Lens of Truth': { - 'name' : 'logic_lens_shadow', - 'tags' : ("Lens of Truth","Shadow Temple",), + "Ganon's Castle MQ without Lens of Truth": { + 'name' : 'logic_lens_castle_mq', + 'tags' : ("Lens of Truth", "Ganon's Castle", "MQ",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth - in Shadow Temple before the invisible moving platform. + in Ganon's Castle MQ. '''}, - 'Shadow Temple beyond Invisible Moving Platform without Lens of Truth': { - 'name' : 'logic_lens_shadow_back', - 'tags' : ("Lens of Truth","Shadow Temple",), + 'Fire Trial MQ with Hookshot': { + 'name' : 'logic_fire_trial_mq', + 'tags' : ("Ganon's Castle", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Shadow Temple beyond the invisible moving platform. + It's possible to hook the target at the end of + fire trial with just Hookshot, but it requires + precise aim and perfect positioning. The main + difficulty comes from getting on the very corner + of the obelisk without falling into the lava. '''}, - 'Spirit Temple MQ without Lens of Truth': { - 'name' : 'logic_lens_spirit_mq', - 'tags' : ("Lens of Truth","Spirit Temple",), + 'Shadow Trial MQ Torch with Bow': { + 'name' : 'logic_shadow_trial_mq', + 'tags' : ("Ganon's Castle", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Spirit Temple MQ. + You can light the torch in this room without a fire + source by shooting an arrow through the lit torch + at the beginning of the room. Because the room is + so dark and the unlit torch is so far away, it can + be difficult to aim the shot correctly. '''}, - 'Spirit Temple without Lens of Truth': { - 'name' : 'logic_lens_spirit', - 'tags' : ("Lens of Truth","Spirit Temple",), + 'Light Trial MQ without Hookshot': { + 'name' : 'logic_light_trial_mq', + 'tags' : ("Ganon's Castle", "MQ",), 'tooltip' : '''\ - Removes the requirements for the Lens of Truth - in Spirit Temple. + If you move quickly you can sneak past the edge of + a flame wall before it can rise up to block you. + In this case to do it without taking damage is + especially precise. '''}, } diff --git a/worlds/oot/Messages.py b/worlds/oot/Messages.py index a1a50549dd4a..25c2a9934dd4 100644 --- a/worlds/oot/Messages.py +++ b/worlds/oot/Messages.py @@ -1,8 +1,9 @@ # text details: https://wiki.cloudmodding.com/oot/Text_Format -import logging import random +from .HintList import misc_item_hint_table, misc_location_hint_table from .TextBox import line_wrap +from .Utils import find_last TEXT_START = 0x92D000 ENG_TEXT_SIZE_LIMIT = 0x39000 @@ -51,38 +52,39 @@ 0x1F: ('time', 0, lambda _: '' ), } +# Maps unicode characters to corresponding bytes in OOTR's character set. +CHARACTER_MAP = { + 'Ⓐ': 0x9F, + 'Ⓑ': 0xA0, + 'Ⓒ': 0xA1, + 'Ⓛ': 0xA2, + 'Ⓡ': 0xA3, + 'Ⓩ': 0xA4, + '⯅': 0xA5, + '⯆': 0xA6, + '⯇': 0xA7, + '⯈': 0xA8, + chr(0xA9): 0xA9, # Down arrow -- not sure what best supports this + chr(0xAA): 0xAA, # Analog stick -- not sure what best supports this +} +# Support other ways of directly specifying controller inputs in OOTR's character set. +# (This is backwards-compatibility support for ShadowShine57's previous patch.) +CHARACTER_MAP.update(tuple((chr(v), v) for v in CHARACTER_MAP.values())) + +# Characters 0x20 thru 0x7D map perfectly. range() excludes the last element. +CHARACTER_MAP.update((chr(c), c) for c in range(0x20, 0x7e)) + +# Other characters, source: https://wiki.cloudmodding.com/oot/Text_Format +CHARACTER_MAP.update((c, ix) for ix, c in enumerate( + ( + '\u203e' # 0x7f + 'ÀîÂÄÇÈÉÊËÏÔÖÙÛÜß' # 0x80 .. #0x8f + 'àáâäçèéêëïôöùûü' # 0x90 .. #0x9e + ), + start=0x7f +)) + SPECIAL_CHARACTERS = { - 0x80: 'À', - 0x81: 'Á', - 0x82: 'Â', - 0x83: 'Ä', - 0x84: 'Ç', - 0x85: 'È', - 0x86: 'É', - 0x87: 'Ê', - 0x88: 'Ë', - 0x89: 'Ï', - 0x8A: 'Ô', - 0x8B: 'Ö', - 0x8C: 'Ù', - 0x8D: 'Û', - 0x8E: 'Ü', - 0x8F: 'ß', - 0x90: 'à', - 0x91: 'á', - 0x92: 'â', - 0x93: 'ä', - 0x94: 'ç', - 0x95: 'è', - 0x96: 'é', - 0x97: 'ê', - 0x98: 'ë', - 0x99: 'ï', - 0x9A: 'ô', - 0x9B: 'ö', - 0x9C: 'ù', - 0x9D: 'û', - 0x9E: 'ü', 0x9F: '[A]', 0xA0: '[B]', 0xA1: '[C]', @@ -97,44 +99,16 @@ 0xAA: '[Control Stick]', } -UTF8_TO_OOT_SPECIAL = { - (0xc3, 0x80): 0x80, - (0xc3, 0xae): 0x81, - (0xc3, 0x82): 0x82, - (0xc3, 0x84): 0x83, - (0xc3, 0x87): 0x84, - (0xc3, 0x88): 0x85, - (0xc3, 0x89): 0x86, - (0xc3, 0x8a): 0x87, - (0xc3, 0x8b): 0x88, - (0xc3, 0x8f): 0x89, - (0xc3, 0x94): 0x8A, - (0xc3, 0x96): 0x8B, - (0xc3, 0x99): 0x8C, - (0xc3, 0x9b): 0x8D, - (0xc3, 0x9c): 0x8E, - (0xc3, 0x9f): 0x8F, - (0xc3, 0xa0): 0x90, - (0xc3, 0xa1): 0x91, - (0xc3, 0xa2): 0x92, - (0xc3, 0xa4): 0x93, - (0xc3, 0xa7): 0x94, - (0xc3, 0xa8): 0x95, - (0xc3, 0xa9): 0x96, - (0xc3, 0xaa): 0x97, - (0xc3, 0xab): 0x98, - (0xc3, 0xaf): 0x99, - (0xc3, 0xb4): 0x9A, - (0xc3, 0xb6): 0x9B, - (0xc3, 0xb9): 0x9C, - (0xc3, 0xbb): 0x9D, - (0xc3, 0xbc): 0x9E, -} +REVERSE_MAP = list(chr(x) for x in range(256)) + +for char, byte in CHARACTER_MAP.items(): + SPECIAL_CHARACTERS.setdefault(byte, char) + REVERSE_MAP[byte] = char +# [0x0500,0x0560] (inclusive) are reserved for plandomakers GOSSIP_STONE_MESSAGES = list( range(0x0401, 0x04FF) ) # ids of the actual hints GOSSIP_STONE_MESSAGES += [0x2053, 0x2054] # shared initial stone messages TEMPLE_HINTS_MESSAGES = [0x7057, 0x707A] # dungeon reward hints from the temple of time pedestal -LIGHT_ARROW_HINT = [0x70CC] # ganondorf's light arrow hint line GS_TOKEN_MESSAGES = [0x00B4, 0x00B5] # Get Gold Skulltula Token messages ERROR_MESSAGE = 0x0001 @@ -248,12 +222,13 @@ 0x00B4: "\x08You got a \x05\x41Gold Skulltula Token\x05\x40!\x01You've collected \x05\x41\x19\x05\x40 tokens in total.", 0x00B5: "\x08You destroyed a \x05\x41Gold Skulltula\x05\x40.\x01You got a token proving you \x01destroyed it!", #Unused 0x00C2: "\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01Collect four pieces total to get\x01another Heart Container.", + 0x90C2: "\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01You are already at\x01maximum health.", 0x00C3: "\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01So far, you've collected two \x01pieces.", 0x00C4: "\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01Now you've collected three \x01pieces!", 0x00C5: "\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01You've completed another Heart\x01Container!", 0x00C6: "\x08\x13\x72You got a \x05\x41Heart Container\x05\x40!\x01Your maximum life energy is \x01increased by one heart.", + 0x90C6: "\x08\x13\x72You got a \x05\x41Heart Container\x05\x40!\x01You are already at\x01maximum health.", 0x00C7: "\x08\x13\x74You got the \x05\x41Boss Key\x05\x40!\x01Now you can get inside the \x01chamber where the Boss lurks.", - 0x9002: "\x08You are a \x05\x43FOOL\x05\x40!", 0x00CC: "\x08You got a \x05\x43Blue Rupee\x05\x40!\x01That's \x05\x43five Rupees\x05\x40!", 0x00CD: "\x08\x13\x53You got the \x05\x43Silver Scale\x05\x40!\x01You can dive deeper than you\x01could before.", 0x00CE: "\x08\x13\x54You got the \x05\x43Golden Scale\x05\x40!\x01Now you can dive much\x01deeper than you could before!", @@ -274,6 +249,12 @@ 0x00F1: "\x08You got a \x05\x45Purple Rupee\x05\x40!\x01That's \x05\x45fifty Rupees\x05\x40!", 0x00F2: "\x08You got a \x05\x46Huge Rupee\x05\x40!\x01This Rupee is worth a whopping\x01\x05\x46two hundred Rupees\x05\x40!", 0x00F9: "\x08\x13\x1EYou put a \x05\x41Big Poe \x05\x40in a bottle!\x01Let's sell it at the \x05\x41Ghost Shop\x05\x40!\x01Something good might happen!", + 0x00FA: "\x08\x06\x49\x05\x41WINNER\x05\x40!\x04\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01Collect four pieces total to get\x01another Heart Container.", + 0x00FB: "\x08\x06\x49\x05\x41WINNER\x05\x40!\x04\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01So far, you've collected two \x01pieces.", + 0x00FC: "\x08\x06\x49\x05\x41WINNER\x05\x40!\x04\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01Now you've collected three \x01pieces!", + 0x00FD: "\x08\x06\x49\x05\x41WINNER\x05\x40!\x04\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01You've completed another Heart\x01Container!", + 0x90FA: "\x08\x06\x49\x05\x41WINNER\x05\x40!\x04\x08\x13\x73You got a \x05\x41Piece of Heart\x05\x40!\x01You are already at\x01maximum health.", + 0x9002: "\x08You are a \x05\x43FOOL\x05\x40!", 0x9003: "\x08You found a piece of the \x05\x41Triforce\x05\x40!", 0x9097: "\x08You got an \x05\x41Archipelago item\x05\x40!\x01It seems \x05\x41important\x05\x40!", 0x9098: "\x08You got an \x05\x43Archipelago item\x05\x40!\x01Doesn't seem like it's needed.", @@ -307,7 +288,7 @@ 0x0094: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x41Fire Temple\x05\x40!\x09", 0x0095: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x43Water Temple\x05\x40!\x09", 0x009B: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", - 0x009F: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo Training\x01Grounds\x05\x40!\x09", + 0x009F: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo Training\x01Ground\x05\x40!\x09", 0x00A0: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Thieves' Hideout\x05\x40!\x09", 0x00A1: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for \x05\x41Ganon's Castle\x05\x40!\x09", 0x00A2: "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", @@ -315,6 +296,15 @@ 0x00A5: "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", 0x00A6: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Spirit Temple\x05\x40!\x09", 0x00A9: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09", + 0x9010: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x42Forest Temple\x05\x40!\x09", + 0x9011: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x41Fire Temple\x05\x40!\x09", + 0x9012: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x43Water Temple\x05\x40!\x09", + 0x9013: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x46Spirit Temple\x05\x40!\x09", + 0x9014: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09", + 0x9015: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", + 0x9016: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x46Gerudo Training\x01Ground\x05\x40!\x09", + 0x9017: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for the \x05\x46Thieves' Hideout\x05\x40!\x09", + 0x9018: "\x13\x77\x08You found a \x05\x41Small Key Ring\x05\x40\x01for \x05\x41Ganon's Castle\x05\x40!\x09", } COLOR_MAP = { @@ -338,7 +328,18 @@ ), None), 0x0422: ("They say that once \x05\x41Morpha's Curse\x05\x40\x01is lifted, striking \x05\x42this stone\x05\x40 can\x01shift the tides of \x05\x44Lake Hylia\x05\x40.\x02", 0x23), 0x401C: ("Please find my dear \05\x41Princess Ruto\x05\x40\x01immediately... Zora!\x12\x68\x7A", 0x23), - 0x9100: ("I am out of goods now.\x01Sorry!\x04The mark that will lead you to\x01the Spirit Temple is the \x05\x41flag on\x01the left \x05\x40outside the shop.\x01Be seeing you!\x02", 0x00) + 0x9100: ("I am out of goods now.\x01Sorry!\x04The mark that will lead you to\x01the Spirit Temple is the \x05\x41flag on\x01the left \x05\x40outside the shop.\x01Be seeing you!\x02", 0x00), + 0x0451: ("\x12\x68\x7AMweep\x07\x04\x52", 0x23), + 0x0452: ("\x12\x68\x7AMweep\x07\x04\x53", 0x23), + 0x0453: ("\x12\x68\x7AMweep\x07\x04\x54", 0x23), + 0x0454: ("\x12\x68\x7AMweep\x07\x04\x55", 0x23), + 0x0455: ("\x12\x68\x7AMweep\x07\x04\x56", 0x23), + 0x0456: ("\x12\x68\x7AMweep\x07\x04\x57", 0x23), + 0x0457: ("\x12\x68\x7AMweep\x07\x04\x58", 0x23), + 0x0458: ("\x12\x68\x7AMweep\x07\x04\x59", 0x23), + 0x0459: ("\x12\x68\x7AMweep\x07\x04\x5A", 0x23), + 0x045A: ("\x12\x68\x7AMweep\x07\x04\x5B", 0x23), + 0x045B: ("\x12\x68\x7AMweep", 0x23) } @@ -359,23 +360,35 @@ def display_code_list(codes): return message +def encode_text_string(text): + result = [] + it = iter(text) + for ch in it: + n = ord(ch) + mapped = CHARACTER_MAP.get(ch) + if mapped: + result.append(mapped) + continue + if n in CONTROL_CODES: + result.append(n) + for _ in range(CONTROL_CODES[n][1]): + result.append(ord(next(it))) + continue + if n in CHARACTER_MAP.values(): # Character has already been translated + result.append(n) + continue + raise ValueError(f"While encoding {text!r}: Unable to translate unicode character {ch!r} ({n}). (Already decoded: {result!r})") + return result + + def parse_control_codes(text): if isinstance(text, list): bytes = text elif isinstance(text, bytearray): bytes = list(text) else: - bytes = list(text.encode('utf-8')) - - # Special characters encoded to utf-8 must be re-encoded to OoT's values for them. - # Tuple is used due to utf-8 encoding using two bytes. - i = 0 - while i < len(bytes) - 1: - if (bytes[i], bytes[i+1]) in UTF8_TO_OOT_SPECIAL: - bytes[i] = UTF8_TO_OOT_SPECIAL[(bytes[i], bytes[i+1])] - del bytes[i+1] - i += 1 - + bytes = encode_text_string(text) + text_codes = [] index = 0 while index < len(bytes): @@ -396,8 +409,7 @@ def parse_control_codes(text): # holds a single character or control code of a string -class Text_Code(): - +class Text_Code: def display(self): if self.code in CONTROL_CODES: return CONTROL_CODES[self.code][2](self.data) @@ -434,7 +446,8 @@ def get_string(self): ret = chr(self.code) + ret return ret else: - return chr(self.code) + # raise ValueError(repr(REVERSE_MAP)) + return REVERSE_MAP[self.code] # writes the code to the given offset, and returns the offset of the next byte def size(self): @@ -465,16 +478,18 @@ def __init__(self, code, data): __str__ = __repr__ = display -# holds a single message, and all its data -class Message(): +# holds a single message, and all its data +class Message: def display(self): - meta_data = ["#" + str(self.index), - "ID: 0x" + "{:04x}".format(self.id), - "Offset: 0x" + "{:06x}".format(self.offset), - "Length: 0x" + "{:04x}".format(self.unpadded_length) + "/0x" + "{:04x}".format(self.length), - "Box Type: " + str(self.box_type), - "Postion: " + str(self.position)] + meta_data = [ + "#" + str(self.index), + "ID: 0x" + "{:04x}".format(self.id), + "Offset: 0x" + "{:06x}".format(self.offset), + "Length: 0x" + "{:04x}".format(self.unpadded_length) + "/0x" + "{:04x}".format(self.length), + "Box Type: " + str(self.box_type), + "Postion: " + str(self.position) + ] return ', '.join(meta_data) + '\n' + self.text def get_python_string(self): @@ -485,14 +500,17 @@ def get_python_string(self): # check if this is an unused message that just contains it's own id as text def is_id_message(self): - if self.unpadded_length == 5: - for i in range(4): - code = self.text_codes[i].code - if not (code in range(ord('0'),ord('9')+1) or code in range(ord('A'),ord('F')+1) or code in range(ord('a'),ord('f')+1) ): - return False - return True - return False - + if self.unpadded_length != 5: + return False + for i in range(4): + code = self.text_codes[i].code + if not ( + code in range(ord('0'), ord('9')+1) + or code in range(ord('A'), ord('F')+1) + or code in range(ord('a'), ord('f')+1) + ): + return False + return True def parse_text(self): self.text_codes = parse_control_codes(self.raw_text) @@ -500,26 +518,26 @@ def parse_text(self): index = 0 for text_code in self.text_codes: index += text_code.size() - if text_code.code == 0x02: # message end code + if text_code.code == 0x02: # message end code break - if text_code.code == 0x07: # goto + if text_code.code == 0x07: # goto self.has_goto = True self.ending = text_code - if text_code.code == 0x0A: # keep-open + if text_code.code == 0x0A: # keep-open self.has_keep_open = True self.ending = text_code - if text_code.code == 0x0B: # event + if text_code.code == 0x0B: # event self.has_event = True self.ending = text_code - if text_code.code == 0x0E: # fade out + if text_code.code == 0x0E: # fade out self.has_fade = True self.ending = text_code - if text_code.code == 0x10: # ocarina + if text_code.code == 0x10: # ocarina self.has_ocarina = True self.ending = text_code - if text_code.code == 0x1B: # two choice + if text_code.code == 0x1B: # two choice self.has_two_choice = True - if text_code.code == 0x1C: # three choice + if text_code.code == 0x1C: # three choice self.has_three_choice = True self.text = display_code_list(self.text_codes) self.unpadded_length = index @@ -527,7 +545,6 @@ def parse_text(self): def is_basic(self): return not (self.has_goto or self.has_keep_open or self.has_event or self.has_fade or self.has_ocarina or self.has_two_choice or self.has_three_choice) - # computes the size of a message, including padding def size(self): size = 0 @@ -541,16 +558,17 @@ def size(self): # applies whatever transformations we want to the dialogs def transform(self, replace_ending=False, ending=None, always_allow_skip=True, speed_up_text=True): - ending_codes = [0x02, 0x07, 0x0A, 0x0B, 0x0E, 0x10] box_breaks = [0x04, 0x0C] slows_text = [0x08, 0x09, 0x14] + slow_icons = [0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x04, 0x02] text_codes = [] + instant_text_code = Text_Code(0x08, 0) # # speed the text if speed_up_text: - text_codes.append(Text_Code(0x08, 0)) # allow instant + text_codes.append(instant_text_code) # allow instant # write the message for code in self.text_codes: @@ -566,31 +584,34 @@ def transform(self, replace_ending=False, ending=None, always_allow_skip=True, s elif speed_up_text and code.code in box_breaks: # some special cases for text that needs to be on a timer if (self.id == 0x605A or # twinrova transformation - self.id == 0x706C or # raru ending text + self.id == 0x706C or # rauru ending text self.id == 0x70DD or # ganondorf ending text - self.id == 0x7070): # zelda ending text + self.id in (0x706F, 0x7091, 0x7092, 0x7093, 0x7094, 0x7095, 0x7070) # zelda ending text + ): text_codes.append(code) - text_codes.append(Text_Code(0x08, 0)) # allow instant + text_codes.append(instant_text_code) # allow instant else: - text_codes.append(Text_Code(0x04, 0)) # un-delayed break - text_codes.append(Text_Code(0x08, 0)) # allow instant + text_codes.append(Text_Code(0x04, 0)) # un-delayed break + text_codes.append(instant_text_code) # allow instant + elif speed_up_text and code.code == 0x13 and code.data in slow_icons: + text_codes.append(code) + text_codes.pop(find_last(text_codes, instant_text_code)) # remove last instance of instant text + text_codes.append(instant_text_code) # allow instant else: text_codes.append(code) if replace_ending: if ending: - if speed_up_text and ending.code == 0x10: # ocarina - text_codes.append(Text_Code(0x09, 0)) # disallow instant text - text_codes.append(ending) # write special ending - text_codes.append(Text_Code(0x02, 0)) # write end code + if speed_up_text and ending.code == 0x10: # ocarina + text_codes.append(Text_Code(0x09, 0)) # disallow instant text + text_codes.append(ending) # write special ending + text_codes.append(Text_Code(0x02, 0)) # write end code self.text_codes = text_codes - # writes a Message back into the rom, using the given index and offset to update the table # returns the offset of the next message def write(self, rom, index, offset): - # construct the table entry id_bytes = int_to_bytes(self.id, 2) offset_bytes = int_to_bytes(offset, 3) @@ -609,7 +630,6 @@ def write(self, rom, index, offset): def __init__(self, raw_text, index, id, opts, offset, length): - self.raw_text = raw_text self.index = index @@ -634,7 +654,6 @@ def __init__(self, raw_text, index, id, opts, offset, length): # read a single message from rom @classmethod def from_rom(cls, rom, index): - entry_offset = ENG_TABLE_START + 8 * index entry = rom.read_bytes(entry_offset, 8) next = rom.read_bytes(entry_offset + 8, 8) @@ -650,19 +669,7 @@ def from_rom(cls, rom, index): @classmethod def from_string(cls, text, id=0, opts=0x00): - bytes = list(text.encode('utf-8')) + [0x02] - - # Clean up garbage values added when encoding special characters again. - bytes = list(filter(lambda a: a != 194, bytes)) # 0xC2 added before each accent char. - i = 0 - while i < len(bytes) - 1: - if bytes[i] in SPECIAL_CHARACTERS and bytes[i] not in UTF8_TO_OOT_SPECIAL.values(): # This indicates it's one of the button chars (A button, etc). - # Have to delete 2 inserted garbage values. - del bytes[i-1] - del bytes[i-2] - i -= 2 - i+= 1 - + bytes = text + "\x02" return cls(bytes, 0, id, opts, 0, len(bytes) + 1) @classmethod @@ -872,7 +879,7 @@ def make_player_message(text): wrapped_text = line_wrap(new_text, False, False, False) if wrapped_text != new_text: - new_text = line_wrap(new_text, True, True, False) + new_text = line_wrap(new_text, True, False, False) return new_text @@ -882,7 +889,7 @@ def make_player_message(text): def update_item_messages(messages, world): new_item_messages = {**ITEM_MESSAGES, **KEYSANITY_MESSAGES} for id, text in new_item_messages.items(): - if len(world.multiworld.worlds) > 1: + if world.multiworld.players > 1: update_message_by_id(messages, id, make_player_message(text), 0x23) else: update_message_by_id(messages, id, text, 0x23) @@ -968,7 +975,9 @@ def shuffle_messages(messages, except_hints=True, always_allow_skip=True): def is_exempt(m): hint_ids = ( - GOSSIP_STONE_MESSAGES + TEMPLE_HINTS_MESSAGES + LIGHT_ARROW_HINT + + GOSSIP_STONE_MESSAGES + TEMPLE_HINTS_MESSAGES + + [data['id'] for data in misc_item_hint_table.values()] + + [data['id'] for data in misc_location_hint_table.values()] + list(KEYSANITY_MESSAGES.keys()) + shuffle_messages.shop_item_messages + shuffle_messages.scrubs_message_ids + [0x5036, 0x70F5] # Chicken count and poe count respectively @@ -1009,7 +1018,9 @@ def shuffle_group(group): return permutation # Update warp song text boxes for ER -def update_warp_song_text(messages, ootworld): +def update_warp_song_text(messages, world): + from .Hints import HintArea + msg_list = { 0x088D: 'Minuet of Forest Warp -> Sacred Forest Meadow', 0x088E: 'Bolero of Fire Warp -> DMC Central Local', @@ -1019,18 +1030,17 @@ def update_warp_song_text(messages, ootworld): 0x0892: 'Prelude of Light Warp -> Temple of Time', } - for id, entr in msg_list.items(): - destination = ootworld.multiworld.get_entrance(entr, ootworld.player).connected_region - - if destination.pretty_name: - destination_name = destination.pretty_name - elif destination.hint_text: - destination_name = destination.hint_text - elif destination.dungeon: - destination_name = destination.dungeon.hint - else: - destination_name = destination.name - color = COLOR_MAP[destination.font_color or 'White'] + if world.logic_rules != "glitched": # Entrances not set on glitched logic so following code will error + for id, entr in msg_list.items(): + if 'warp_songs' in world.misc_hints or not world.warp_songs: + destination = world.get_entrance(entr).connected_region + destination_name = HintArea.at(destination) + color = COLOR_MAP[destination_name.color] + if destination_name.preposition(True) is not None: + destination_name = f'to {destination_name}' + else: + destination_name = 'to a mysterious place' + color = COLOR_MAP['White'] - new_msg = f"\x08\x05{color}Warp to {destination_name}?\x05\40\x09\x01\x01\x1b\x05{color}OK\x01No\x05\40" - update_message_by_id(messages, id, new_msg) + new_msg = f"\x08\x05{color}Warp {destination_name}?\x05\40\x09\x01\x01\x1b\x05\x42OK\x01No\x05\40" + update_message_by_id(messages, id, new_msg) diff --git a/worlds/oot/N64Patch.py b/worlds/oot/N64Patch.py index 01c8e0f6a81a..5af3279e8077 100644 --- a/worlds/oot/N64Patch.py +++ b/worlds/oot/N64Patch.py @@ -88,7 +88,7 @@ def write_block_section(start, key_skip, in_data, patch_data, is_continue): # xor_range is the range the XOR key will read from. This range is not # too important, but I tried to choose from a section that didn't really # have big gaps of 0s which we want to avoid. -def create_patch_file(rom, file, xor_range=(0x00B8AD30, 0x00F029A0)): +def create_patch_file(rom, xor_range=(0x00B8AD30, 0x00F029A0)): dma_start, dma_end = rom.get_dma_table_range() # add header @@ -169,9 +169,7 @@ def create_patch_file(rom, file, xor_range=(0x00B8AD30, 0x00F029A0)): patch_data = bytes(patch_data.buffer) patch_data = zlib.compress(patch_data) - # save the patch file - with open(file, 'wb') as outfile: - outfile.write(patch_data) + return patch_data # This will apply a patch file to a source rom to generate a patched rom. diff --git a/worlds/oot/Options.py b/worlds/oot/Options.py index 7e0c9c5dccd4..7df8da21df35 100644 --- a/worlds/oot/Options.py +++ b/worlds/oot/Options.py @@ -1,6 +1,6 @@ import typing import random -from Options import Option, DefaultOnToggle, Toggle, Range, OptionList, DeathLink +from Options import Option, DefaultOnToggle, Toggle, Range, OptionList, OptionSet, DeathLink from .LogicTricks import normalized_name_tricks from .ColorSFXOptions import * @@ -92,6 +92,7 @@ class Bridge(Choice): option_medallions = 3 option_dungeons = 4 option_tokens = 5 + option_hearts = 6 default = 3 @@ -135,9 +136,21 @@ class GrottoEntrances(Toggle): display_name = "Shuffle Grotto/Grave Entrances" -class DungeonEntrances(Toggle): - """Shuffles dungeon entrances, excluding Ganon's Castle. Opens Deku, Fire and BotW to both ages.""" +class DungeonEntrances(Choice): + """Shuffles dungeon entrances. Opens Deku, Fire and BotW to both ages. "All" includes Ganon's Castle.""" display_name = "Shuffle Dungeon Entrances" + option_off = 0 + option_simple = 1 + option_all = 2 + alias_true = 1 + + +class BossEntrances(Choice): + """Shuffles boss entrances. "Limited" prevents age-mixing of bosses.""" + display_name = "Shuffle Boss Entrances" + option_off = 0 + option_limited = 1 + option_full = 2 class OverworldEntrances(Toggle): @@ -155,9 +168,14 @@ class WarpSongs(Toggle): display_name = "Randomize Warp Songs" -class SpawnPositions(Toggle): +class SpawnPositions(Choice): """Randomizes the starting position on loading a save. Consistent between savewarps.""" display_name = "Randomize Spawn Positions" + option_off = 0 + option_child = 1 + option_adult = 2 + option_both = 3 + alias_true = 3 class MixEntrancePools(Choice): @@ -203,14 +221,96 @@ class LogicalChus(Toggle): display_name = "Bombchus Considered in Logic" -class MQDungeons(TrackRandomRange): - """Number of MQ dungeons. The dungeons to replace are randomly selected.""" - display_name = "Number of MQ Dungeons" +class DungeonShortcuts(Choice): + """Shortcuts to dungeon bosses are available without any requirements.""" + display_name = "Dungeon Boss Shortcuts Mode" + option_off = 0 + option_choice = 1 + option_all = 2 + option_random_dungeons = 3 + + +class DungeonShortcutsList(OptionSet): + """Chosen dungeons to have shortcuts.""" + display_name = "Shortcut Dungeons" + valid_keys = { + "Deku Tree", + "Dodongo's Cavern", + "Jabu Jabu's Belly", + "Forest Temple", + "Fire Temple", + "Water Temple", + "Shadow Temple", + "Spirit Temple", + } + + +class MQDungeons(Choice): + """Choose between vanilla and Master Quest dungeon layouts.""" + display_name = "MQ Dungeon Mode" + option_vanilla = 0 + option_mq = 1 + option_specific = 2 + option_count = 3 + + +class MQDungeonList(OptionSet): + """Chosen dungeons to be MQ layout.""" + display_name = "MQ Dungeon List" + valid_keys = { + "Deku Tree", + "Dodongo's Cavern", + "Jabu Jabu's Belly", + "Forest Temple", + "Fire Temple", + "Water Temple", + "Shadow Temple", + "Spirit Temple", + "Bottom of the Well", + "Ice Cavern", + "Gerudo Training Ground", + "Ganon's Castle", + } + + +class MQDungeonCount(TrackRandomRange): + """Number of MQ dungeons, chosen randomly.""" + display_name = "MQ Dungeon Count" range_start = 0 range_end = 12 default = 0 +class EmptyDungeons(Choice): + """Pre-completed dungeons are barren and rewards are given for free.""" + display_name = "Pre-completed Dungeons Mode" + option_none = 0 + option_specific = 1 + option_count = 2 + + +class EmptyDungeonList(OptionSet): + """Chosen dungeons to be pre-completed.""" + display_name = "Pre-completed Dungeon List" + valid_keys = { + "Deku Tree", + "Dodongo's Cavern", + "Jabu Jabu's Belly", + "Forest Temple", + "Fire Temple", + "Water Temple", + "Shadow Temple", + "Spirit Temple", + } + + +class EmptyDungeonCount(Range): + display_name = "Pre-completed Dungeon Count" + range_start = 1 + range_end = 8 + default = 2 + + world_options: typing.Dict[str, type(Option)] = { "starting_age": StartingAge, "shuffle_interior_entrances": InteriorEntrances, @@ -220,65 +320,76 @@ class MQDungeons(TrackRandomRange): "owl_drops": OwlDrops, "warp_songs": WarpSongs, "spawn_positions": SpawnPositions, + "shuffle_bosses": BossEntrances, # "mix_entrance_pools": MixEntrancePools, # "decouple_entrances": DecoupleEntrances, "triforce_hunt": TriforceHunt, "triforce_goal": TriforceGoal, "extra_triforce_percentage": ExtraTriforces, "bombchus_in_logic": LogicalChus, - "mq_dungeons": MQDungeons, + + "dungeon_shortcuts": DungeonShortcuts, + "dungeon_shortcuts_list": DungeonShortcutsList, + + "mq_dungeons_mode": MQDungeons, + "mq_dungeons_list": MQDungeonList, + "mq_dungeons_count": MQDungeonCount, + + # "empty_dungeons_mode": EmptyDungeons, + # "empty_dungeons_list": EmptyDungeonList, + # "empty_dungeon_count": EmptyDungeonCount, } -class LacsCondition(Choice): - """Set the requirements for the Light Arrow Cutscene in the Temple of Time.""" - display_name = "Light Arrow Cutscene Requirement" - option_vanilla = 0 - option_stones = 1 - option_medallions = 2 - option_dungeons = 3 - option_tokens = 4 +# class LacsCondition(Choice): +# """Set the requirements for the Light Arrow Cutscene in the Temple of Time.""" +# display_name = "Light Arrow Cutscene Requirement" +# option_vanilla = 0 +# option_stones = 1 +# option_medallions = 2 +# option_dungeons = 3 +# option_tokens = 4 -class LacsStones(Range): - """Set the number of Spiritual Stones required for LACS.""" - display_name = "Spiritual Stones Required for LACS" - range_start = 0 - range_end = 3 - default = 3 +# class LacsStones(Range): +# """Set the number of Spiritual Stones required for LACS.""" +# display_name = "Spiritual Stones Required for LACS" +# range_start = 0 +# range_end = 3 +# default = 3 -class LacsMedallions(Range): - """Set the number of medallions required for LACS.""" - display_name = "Medallions Required for LACS" - range_start = 0 - range_end = 6 - default = 6 +# class LacsMedallions(Range): +# """Set the number of medallions required for LACS.""" +# display_name = "Medallions Required for LACS" +# range_start = 0 +# range_end = 6 +# default = 6 -class LacsRewards(Range): - """Set the number of dungeon rewards required for LACS.""" - display_name = "Dungeon Rewards Required for LACS" - range_start = 0 - range_end = 9 - default = 9 +# class LacsRewards(Range): +# """Set the number of dungeon rewards required for LACS.""" +# display_name = "Dungeon Rewards Required for LACS" +# range_start = 0 +# range_end = 9 +# default = 9 -class LacsTokens(Range): - """Set the number of Gold Skulltula Tokens required for LACS.""" - display_name = "Tokens Required for LACS" - range_start = 0 - range_end = 100 - default = 40 +# class LacsTokens(Range): +# """Set the number of Gold Skulltula Tokens required for LACS.""" +# display_name = "Tokens Required for LACS" +# range_start = 0 +# range_end = 100 +# default = 40 -lacs_options: typing.Dict[str, type(Option)] = { - "lacs_condition": LacsCondition, - "lacs_stones": LacsStones, - "lacs_medallions": LacsMedallions, - "lacs_rewards": LacsRewards, - "lacs_tokens": LacsTokens, -} +# lacs_options: typing.Dict[str, type(Option)] = { +# "lacs_condition": LacsCondition, +# "lacs_stones": LacsStones, +# "lacs_medallions": LacsMedallions, +# "lacs_rewards": LacsRewards, +# "lacs_tokens": LacsTokens, +# } class BridgeStones(Range): @@ -313,11 +424,20 @@ class BridgeTokens(Range): default = 40 +class BridgeHearts(Range): + """Set the number of hearts required for the rainbow bridge.""" + display_name = "Hearts Required for Bridge" + range_start = 4 + range_end = 20 + default = 20 + + bridge_options: typing.Dict[str, type(Option)] = { "bridge_stones": BridgeStones, "bridge_medallions": BridgeMedallions, "bridge_rewards": BridgeRewards, "bridge_tokens": BridgeTokens, + "bridge_hearts": BridgeHearts, } @@ -346,6 +466,17 @@ class ShopSlots(Range): range_end = 4 +class ShopPrices(Choice): + """Controls prices of shop items. "Normal" is a distribution from 0 to 300. "X Wallet" requires that wallet at max. "Affordable" is always 10 rupees.""" + display_name = "Shopsanity Prices" + option_normal = 0 + option_affordable = 1 + option_starting_wallet = 2 + option_adults_wallet = 3 + option_giants_wallet = 4 + option_tycoons_wallet = 5 + + class TokenShuffle(Choice): """Token rewards from Gold Skulltulas are shuffled into the pool.""" display_name = "Tokensanity" @@ -381,9 +512,14 @@ class ShuffleOcarinas(Toggle): display_name = "Shuffle Ocarinas" -class ShuffleEgg(Toggle): - """Shuffle the Weird Egg from Malon at Hyrule Castle.""" - display_name = "Shuffle Weird Egg" +class ShuffleChildTrade(Choice): + """Controls the behavior of the start of the child trade quest.""" + display_name = "Shuffle Child Trade Item" + option_vanilla = 0 + option_shuffle = 1 + option_skip_child_zelda = 2 + alias_false = 0 + alias_true = 1 class ShuffleCard(Toggle): @@ -401,19 +537,62 @@ class ShuffleMedigoronCarpet(Toggle): display_name = "Shuffle Medigoron & Carpet Salesman" +class ShuffleFreestanding(Choice): + """Shuffles freestanding rupees, recovery hearts, Shadow Temple Spinning Pots, and Goron Pot.""" + display_name = "Shuffle Rupees & Hearts" + option_off = 0 + option_all = 1 + option_overworld = 2 + option_dungeons = 3 + + +class ShufflePots(Choice): + """Shuffles pots and flying pots which normally contain an item.""" + display_name = "Shuffle Pots" + option_off = 0 + option_all = 1 + option_overworld = 2 + option_dungeons = 3 + + +class ShuffleCrates(Choice): + """Shuffles large and small crates containing an item.""" + display_name = "Shuffle Crates" + option_off = 0 + option_all = 1 + option_overworld = 2 + option_dungeons = 3 + + +class ShuffleBeehives(Toggle): + """Beehives drop an item when destroyed by an explosion, the Hookshot, or the Boomerang.""" + display_name = "Shuffle Beehives" + + +class ShuffleFrogRupees(Toggle): + """Shuffles the purple rupees received from the Zora's River frogs.""" + display_name = "Shuffle Frog Song Rupees" + + shuffle_options: typing.Dict[str, type(Option)] = { "shuffle_song_items": SongShuffle, - "shopsanity": ShopShuffle, + "shopsanity": ShopShuffle, "shop_slots": ShopSlots, - "tokensanity": TokenShuffle, + "shopsanity_prices": ShopPrices, + "tokensanity": TokenShuffle, "shuffle_scrubs": ScrubShuffle, - "shuffle_cows": ShuffleCows, + "shuffle_child_trade": ShuffleChildTrade, + "shuffle_freestanding_items": ShuffleFreestanding, + "shuffle_pots": ShufflePots, + "shuffle_crates": ShuffleCrates, + "shuffle_cows": ShuffleCows, + "shuffle_beehives": ShuffleBeehives, "shuffle_kokiri_sword": ShuffleSword, "shuffle_ocarinas": ShuffleOcarinas, - "shuffle_weird_egg": ShuffleEgg, "shuffle_gerudo_card": ShuffleCard, - "shuffle_beans": ShuffleBeans, + "shuffle_beans": ShuffleBeans, "shuffle_medigoron_carpet_salesman": ShuffleMedigoronCarpet, + "shuffle_frog_song_rupees": ShuffleFrogRupees, } @@ -427,6 +606,7 @@ class ShuffleMapCompass(Choice): option_overworld = 4 option_any_dungeon = 5 option_keysanity = 6 + option_regional = 7 default = 1 alias_anywhere = 6 @@ -440,6 +620,7 @@ class ShuffleKeys(Choice): option_overworld = 4 option_any_dungeon = 5 option_keysanity = 6 + option_regional = 7 default = 3 alias_keysy = 0 alias_anywhere = 6 @@ -452,6 +633,7 @@ class ShuffleGerudoKeys(Choice): option_overworld = 1 option_any_dungeon = 2 option_keysanity = 3 + option_regional = 4 alias_anywhere = 3 @@ -464,13 +646,14 @@ class ShuffleBossKeys(Choice): option_overworld = 4 option_any_dungeon = 5 option_keysanity = 6 + option_regional = 7 default = 3 alias_keysy = 0 alias_anywhere = 6 class ShuffleGanonBK(Choice): - """Control where to shuffle the Ganon's Castle Boss Key.""" + """Control how to shuffle the Ganon's Castle Boss Key.""" display_name = "Ganon's Boss Key" option_remove = 0 option_vanilla = 2 @@ -479,6 +662,12 @@ class ShuffleGanonBK(Choice): option_any_dungeon = 5 option_keysanity = 6 option_on_lacs = 7 + option_regional = 8 + option_stones = 9 + option_medallions = 10 + option_dungeons = 11 + option_tokens = 12 + option_hearts = 13 default = 0 alias_keysy = 0 alias_anywhere = 6 @@ -489,21 +678,88 @@ class EnhanceMC(Toggle): display_name = "Maps and Compasses Give Information" +class GanonBKMedallions(Range): + """Set how many medallions are required to receive Ganon BK.""" + display_name = "Medallions Required for Ganon's BK" + range_start = 1 + range_end = 6 + default = 6 + + +class GanonBKStones(Range): + """Set how many Spiritual Stones are required to receive Ganon BK.""" + display_name = "Spiritual Stones Required for Ganon's BK" + range_start = 1 + range_end = 3 + default = 3 + + +class GanonBKRewards(Range): + """Set how many dungeon rewards are required to receive Ganon BK.""" + display_name = "Dungeon Rewards Required for Ganon's BK" + range_start = 1 + range_end = 9 + default = 9 + + +class GanonBKTokens(Range): + """Set how many Gold Skulltula Tokens are required to receive Ganon BK.""" + display_name = "Tokens Required for Ganon's BK" + range_start = 1 + range_end = 100 + default = 40 + + +class GanonBKHearts(Range): + """Set how many hearts are required to receive Ganon BK.""" + display_name = "Hearts Required for Ganon's BK" + range_start = 4 + range_end = 20 + default = 20 + + +class KeyRings(Choice): + """Dungeons have all small keys found at once, rather than individually.""" + display_name = "Key Rings Mode" + option_off = 0 + option_choose = 1 + option_all = 2 + option_random_dungeons = 3 + + +class KeyRingList(OptionSet): + """Select areas with keyrings rather than individual small keys.""" + display_name = "Key Ring Areas" + valid_keys = { + "Thieves' Hideout", + "Forest Temple", + "Fire Temple", + "Water Temple", + "Shadow Temple", + "Spirit Temple", + "Bottom of the Well", + "Gerudo Training Ground", + "Ganon's Castle" + } + + dungeon_items_options: typing.Dict[str, type(Option)] = { "shuffle_mapcompass": ShuffleMapCompass, "shuffle_smallkeys": ShuffleKeys, - "shuffle_fortresskeys": ShuffleGerudoKeys, + "shuffle_hideoutkeys": ShuffleGerudoKeys, "shuffle_bosskeys": ShuffleBossKeys, - "shuffle_ganon_bosskey": ShuffleGanonBK, "enhance_map_compass": EnhanceMC, + "shuffle_ganon_bosskey": ShuffleGanonBK, + "ganon_bosskey_medallions": GanonBKMedallions, + "ganon_bosskey_stones": GanonBKStones, + "ganon_bosskey_rewards": GanonBKRewards, + "ganon_bosskey_tokens": GanonBKTokens, + "ganon_bosskey_hearts": GanonBKHearts, + "key_rings": KeyRings, + "key_rings_list": KeyRingList, } -class SkipChildZelda(Toggle): - """Game starts with Zelda's Letter, the item at Zelda's Lullaby, and the relevant events already completed.""" - display_name = "Skip Child Zelda" - - class SkipEscape(DefaultOnToggle): """Skips the tower collapse sequence between the Ganondorf and Ganon fights.""" display_name = "Skip Tower Escape Sequence" @@ -550,6 +806,11 @@ class FastBunny(Toggle): display_name = "Fast Bunny Hood" +class PlantBeans(Toggle): + """Pre-plants all 10 magic beans in the soft soil spots.""" + display_name = "Plant Magic Beans" + + class ChickenCount(Range): """Controls the number of Cuccos for Anju to give an item as child.""" display_name = "Cucco Count" @@ -566,8 +827,15 @@ class BigPoeCount(Range): default = 1 +class FAETorchCount(Range): + """Number of lit torches required to open Shadow Temple.""" + display_name = "Fire Arrow Entry Torch Count" + range_start = 1 + range_end = 24 + default = 24 + + timesavers_options: typing.Dict[str, type(Option)] = { - "skip_child_zelda": SkipChildZelda, "no_escape_sequence": SkipEscape, "no_guard_stealth": SkipStealth, "no_epona_race": SkipEponaRace, @@ -577,14 +845,38 @@ class BigPoeCount(Range): "fast_chests": FastChests, "free_scarecrow": FreeScarecrow, "fast_bunny_hood": FastBunny, + "plant_beans": PlantBeans, "chicken_count": ChickenCount, "big_poe_count": BigPoeCount, + "fae_torch_count": FAETorchCount, } -class CSMC(Toggle): - """Changes chests containing progression into large chests, and nonprogression into small chests.""" - display_name = "Chest Size Matches Contents" +class CorrectChestAppearance(Choice): + """Changes chest textures and/or sizes to match their contents. "Classic" is the old behavior of CSMC.""" + display_name = "Chest Appearance Matches Contents" + option_off = 0 + option_textures = 1 + option_both = 2 + option_classic = 3 + + +class MinorInMajor(Toggle): + """Hylian Shield, Deku Shield, and Bombchus appear in big/gold chests.""" + display_name = "Minor Items in Big/Gold Chests" + + +class InvisibleChests(Toggle): + """Chests visible only with Lens of Truth. Logic is not changed.""" + display_name = "Invisible Chests" + + +class CorrectPotCrateAppearance(Choice): + """Unchecked pots and crates have a different texture; unchecked beehives will wiggle. With textures_content, pots and crates have an appearance based on their contents; with textures_unchecked, all unchecked pots/crates have the same appearance.""" + display_name = "Pot, Crate, and Beehive Appearance" + option_off = 0 + option_textures_content = 1 + option_textures_unchecked = 2 class Hints(Choice): @@ -598,7 +890,7 @@ class Hints(Choice): class MiscHints(DefaultOnToggle): - """Controls whether the Temple of Time altar gives dungeon prize info and whether Ganondorf hints the Light Arrows.""" + """The Temple of Time altar hints dungeon rewards, bridge info, and Ganon BK info; Ganondorf hints the Light Arrows; Dampe's diary hints a local Hookshot if one exists; Skulltula House locations hint their item.""" display_name = "Misc Hints" @@ -608,7 +900,7 @@ class HintDistribution(Choice): option_balanced = 0 option_ddr = 1 option_league = 2 - option_mw2 = 3 + option_mw3 = 3 option_scrubs = 4 option_strong = 5 option_tournament = 6 @@ -637,6 +929,17 @@ class DamageMultiplier(Choice): default = 1 +class DeadlyBonks(Choice): + """Bonking on a wall or object will hurt Link. "Normal" is a half heart of damage.""" + display_name = "Bonks Do Damage" + option_none = 0 + option_half = 1 + option_normal = 2 + option_double = 3 + option_quadruple = 4 + option_ohko = 5 + + class HeroMode(Toggle): """Hearts will not drop from enemies or objects.""" display_name = "Hero Mode" @@ -656,6 +959,16 @@ class StartingToD(Choice): option_witching_hour = 8 +class BlueFireArrows(Toggle): + """Ice arrows can melt red ice and break the mud walls in Dodongo's Cavern.""" + display_name = "Blue Fire Arrows" + + +class FixBrokenDrops(Toggle): + """Fixes two broken vanilla drops: deku shield in child Spirit Temple, and magic drop on GTG eye statue.""" + display_name = "Fix Broken Drops" + + class ConsumableStart(Toggle): """Start the game with full Deku Sticks and Deku Nuts.""" display_name = "Start with Consumables" @@ -667,14 +980,20 @@ class RupeeStart(Toggle): misc_options: typing.Dict[str, type(Option)] = { - "correct_chest_sizes": CSMC, + "correct_chest_appearances": CorrectChestAppearance, + "minor_items_as_major_chest": MinorInMajor, + "invisible_chests": InvisibleChests, + "correct_potcrate_appearances": CorrectPotCrateAppearance, "hints": Hints, "misc_hints": MiscHints, "hint_dist": HintDistribution, "text_shuffle": TextShuffle, "damage_multiplier": DamageMultiplier, + "deadly_bonks": DeadlyBonks, "no_collectible_hearts": HeroMode, "starting_tod": StartingToD, + "blue_fire_arrows": BlueFireArrows, + "fix_broken_drops": FixBrokenDrops, "start_with_consumables": ConsumableStart, "start_with_rupees": RupeeStart, } @@ -709,37 +1028,29 @@ class IceTrapVisual(Choice): option_anything = 2 -class AdultTradeItem(Choice): - option_pocket_egg = 0 - option_pocket_cucco = 1 - option_cojiro = 2 - option_odd_mushroom = 3 - option_poachers_saw = 4 - option_broken_sword = 5 - option_prescription = 6 - option_eyeball_frog = 7 - option_eyedrops = 8 - option_claim_check = 9 - - -class EarlyTradeItem(AdultTradeItem): - """Earliest item that can appear in the adult trade sequence.""" - display_name = "Adult Trade Sequence Earliest Item" - default = 6 - - -class LateTradeItem(AdultTradeItem): - """Latest item that can appear in the adult trade sequence.""" - display_name = "Adult Trade Sequence Latest Item" - default = 9 +class AdultTradeStart(OptionSet): + """Choose the items that can appear to start the adult trade sequence. By default it is Claim Check only.""" + display_name = "Adult Trade Sequence Items" + default = {"Claim Check"} + valid_keys = { + "Pocket Egg", + "Pocket Cucco", + "Cojiro", + "Odd Mushroom", + "Poacher's Saw", + "Broken Sword", + "Prescription", + "Eyeball Frog", + "Eyedrops", + "Claim Check", + } itempool_options: typing.Dict[str, type(Option)] = { "item_pool_value": ItemPoolValue, "junk_ice_traps": IceTraps, "ice_trap_appearance": IceTrapVisual, - "logic_earliest_adult_trade": EarlyTradeItem, - "logic_latest_adult_trade": LateTradeItem, + "adult_trade_start": AdultTradeStart, } # Start of cosmetic options @@ -756,6 +1067,11 @@ class DisplayDpad(DefaultOnToggle): display_name = "Display D-Pad HUD" +class DpadDungeonMenu(DefaultOnToggle): + """Show separated menus on the pause screen for dungeon keys, rewards, and Vanilla/MQ info.""" + display_name = "Display D-Pad Dungeon Info" + + class CorrectColors(DefaultOnToggle): """Makes in-game models match their HUD element colors.""" display_name = "Item Model Colors Match Cosmetics" @@ -793,6 +1109,7 @@ class SwordTrailDuration(Range): cosmetic_options: typing.Dict[str, type(Option)] = { "default_targeting": Targeting, "display_dpad": DisplayDpad, + "dpad_dungeon_menu": DpadDungeonMenu, "correct_model_colors": CorrectColors, "background_music": BackgroundMusic, "fanfares": Fanfares, @@ -869,7 +1186,7 @@ class LogicTricks(OptionList): **world_options, **bridge_options, **dungeon_items_options, - **lacs_options, + # **lacs_options, **shuffle_options, **timesavers_options, **misc_options, diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index 4dcf47d4aea8..5e4d5cba094d 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -2,21 +2,53 @@ import itertools import re import zlib +import zipfile +import os +import datetime from collections import defaultdict from functools import partial from .Items import OOTItem +from .Location import DisableType from .LocationList import business_scrubs +from .HintList import getHint from .Hints import writeGossipStoneHints, buildAltarHints, \ - buildGanonText, getSimpleHintNoPrefix + buildGanonText, getSimpleHintNoPrefix, HintArea, getItemGenericName, \ + buildMiscItemHints, buildMiscLocationHints from .Utils import data_path from .Messages import read_messages, update_message_by_id, read_shop_items, update_warp_song_text, \ write_shop_items, remove_unused_messages, make_player_message, \ add_item_messages, repack_messages, shuffle_messages, \ - get_message_by_id + get_message_by_id, Text_Code from .MQ import patch_files, File, update_dmadata, insert_space, add_relocations -from .SaveContext import SaveContext +from .Rom import Rom +from .SaveContext import SaveContext, Scenes, FlagType +from .SceneFlags import get_alt_list_bytes, get_collectible_flag_table, get_collectible_flag_table_bytes, \ + get_collectible_flag_addresses from .TextBox import character_table, NORMAL_LINE_WIDTH +from .texture_util import ci4_rgba16patch_to_ci8, rgba16_patch +from .Utils import __version__ + +from worlds.Files import APContainer +from Utils import __version__ as ap_version + +AP_PROGRESSION = 0xD4 +AP_JUNK = 0xD5 + + +class OoTContainer(APContainer): + game: str = 'Ocarina of Time' + + def __init__(self, patch_data: bytes, base_path: str, output_directory: str, + player = None, player_name: str = "", server: str = ""): + self.patch_data = patch_data + self.zpf_path = base_path + ".zpf" + container_path = os.path.join(output_directory, base_path + ".apz5") + super().__init__(container_path, player, player_name, server) + + def write_contents(self, opened_zipfile: zipfile.ZipFile) -> None: + opened_zipfile.writestr(self.zpf_path, self.patch_data) + super().write_contents(opened_zipfile) # "Spoiler" argument deleted; can probably be replaced with calls to world.world @@ -50,7 +82,7 @@ def patch_rom(world, rom): # Load Triforce model into a file triforce_obj_file = File({ 'Name': 'object_gi_triforce' }) triforce_obj_file.copy(rom) - with open(data_path('triforce.bin'), 'rb') as stream: + with open(data_path('triforce.zobj'), 'rb') as stream: obj_data = stream.read() rom.write_bytes(triforce_obj_file.start, obj_data) triforce_obj_file.end = triforce_obj_file.start + len(obj_data) @@ -75,16 +107,93 @@ def patch_rom(world, rom): # Add it to the extended object table add_to_extended_object_table(rom, 0x194, dd_obj_file) + # Load Key Ring model into a file + keyring_obj_file = File({ 'Name': 'object_gi_keyring' }) + keyring_obj_file.copy(rom) + with open(data_path('KeyRing.zobj'), 'rb') as stream: + obj_data = stream.read() + rom.write_bytes(keyring_obj_file.start, obj_data) + keyring_obj_file.end = keyring_obj_file.start + len(obj_data) + update_dmadata(rom, keyring_obj_file) + # Add it to the extended object table + add_to_extended_object_table(rom, 0x195, keyring_obj_file) + + # Create the textures for pots/crates. Note: No copyrighted material can be distributed w/ the randomizer. Because of this, patch files are used to create the new textures from the original texture in ROM. + # Apply patches for custom textures for pots and crates and add as new files in rom + # Crates are ci4 textures in the normal ROM but for pot/crate textures match contents were upgraded to ci8 to support more colors + # Pot textures are rgba16 + # Get the texture table from rom (see textures.c) + texture_table_start = rom.sym('texture_table') # Get the address of the texture table + + # texture list. See textures.h for texture IDs + # ID, texture_name, Rom Address CI4 Pallet Addr Size Patching function Patch file (None for default) + crate_textures = [ + (1, 'texture_pot_gold', 0x01738000, None, 2048, rgba16_patch, 'textures/pot/pot_gold_rgba16_patch.bin'), + (2, 'texture_pot_key', 0x01738000, None, 2048, rgba16_patch, 'textures/pot/pot_key_rgba16_patch.bin'), + (3, 'texture_pot_bosskey', 0x01738000, None, 2048, rgba16_patch, 'textures/pot/pot_bosskey_rgba16_patch.bin'), + (4, 'texture_pot_skull', 0x01738000, None, 2048, rgba16_patch, 'textures/pot/pot_skull_rgba16_patch.bin'), + (5, 'texture_crate_default', 0x18B6020, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, None), + (6, 'texture_crate_gold' , 0x18B6020, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'textures/crate/crate_gold_rgba16_patch.bin'), + (7, 'texture_crate_key', 0x18B6020, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'textures/crate/crate_key_rgba16_patch.bin'), + (8, 'texture_crate_skull', 0x18B6020, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'textures/crate/crate_skull_rgba16_patch.bin'), + (9, 'texture_crate_bosskey', 0x18B6020, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'textures/crate/crate_bosskey_rgba16_patch.bin'), + (10, 'texture_smallcrate_gold', 0xF7ECA0, None, 2048, rgba16_patch, 'textures/crate/smallcrate_gold_rgba16_patch.bin' ), + (11, 'texture_smallcrate_key', 0xF7ECA0, None, 2048, rgba16_patch, 'textures/crate/smallcrate_key_rgba16_patch.bin'), + (12, 'texture_smallcrate_skull', 0xF7ECA0, None, 2048, rgba16_patch, 'textures/crate/smallcrate_skull_rgba16_patch.bin'), + (13, 'texture_smallcrate_bosskey', 0xF7ECA0, None, 2048, rgba16_patch, 'textures/crate/smallcrate_bosskey_rgba16_patch.bin') + ] + + # Loop through the textures and apply the patch. Add the new texture as a new file in rom. + for texture_id, texture_name, rom_address_base, rom_address_palette, size,func, patchfile in crate_textures: + texture_file = File({'Name': texture_name}) # Create a new file for the texture + texture_file.copy(rom) # Relocate this file to free space is the rom + texture_data = func(rom, rom_address_base, rom_address_palette, size, data_path(patchfile) if patchfile else None) # Apply the texture patch. Resulting texture will be stored in texture_data as a bytearray + rom.write_bytes(texture_file.start, texture_data) # write the bytes to our new file + texture_file.end = texture_file.start + len(texture_data) # Get size of the new texture + update_dmadata(rom, texture_file) # Update DMA table with new file + + # update the texture table with the rom addresses of the texture files + entry = read_rom_texture(rom, texture_id) + entry['file_vrom_start'] = texture_file.start + entry['file_size'] = texture_file.end - texture_file.start + write_rom_texture(rom, texture_id, entry) + + # Apply chest texture diffs to vanilla wooden chest texture for Chest Texture Matches Content setting + # new texture, vanilla texture, num bytes + textures = [(rom.sym('SILVER_CHEST_FRONT_TEXTURE'), 0xFEC798, 4096), + (rom.sym('SILVER_CHEST_BASE_TEXTURE'), 0xFED798, 2048), + (rom.sym('GILDED_CHEST_FRONT_TEXTURE'), 0xFEC798, 4096), + (rom.sym('GILDED_CHEST_BASE_TEXTURE'), 0xFED798, 2048), + (rom.sym('SKULL_CHEST_FRONT_TEXTURE'), 0xFEC798, 4096), + (rom.sym('SKULL_CHEST_BASE_TEXTURE'), 0xFED798, 2048)] + # Diff texture is the new texture minus the vanilla texture with byte overflow. + # This is done to avoid distributing copyrighted material with the randomizer, + # as the new textures are derivations of the wood chest textures. + # The following rebuilds the texture from the diff. + for diff_tex, vanilla_tex, size in textures: + db = rom.read_bytes(diff_tex, size) + vb = rom.read_bytes(vanilla_tex, size) + # bytes are immutable in python, can't edit in place + new_tex = bytearray(size) + for i in range(len(vb)): + new_tex[i] = (db[i] + vb[i]) & 0xFF + rom.write_bytes(diff_tex, new_tex) + + # Create an option so that recovery hearts no longer drop by changing the code which checks Link's health when an item is spawned. + if world.no_collectible_hearts: + symbol = rom.sym('NO_COLLECTIBLE_HEARTS') + rom.write_byte(symbol, 0x01) + + # Remove color commands inside certain object display lists + rom.write_int32s(0x1455818, [0x00000000, 0x00000000, 0x00000000, 0x00000000]) # Small Key + rom.write_int32s(0x14B9F20, [0x00000000, 0x00000000, 0x00000000, 0x00000000]) # Boss Key + # Set default targeting option to Hold. I got fed up enough with this that I made it a main option if world.default_targeting == 'hold': rom.write_byte(0xB71E6D, 0x01) else: rom.write_byte(0xB71E6D, 0x00) - # Create an option so that recovery hearts no longer drop by changing the code which checks Link's health when an item is spawned. - if world.no_collectible_hearts: - rom.write_byte(0xA895B7, 0x2E) - # Force language to be English in the event a Japanese rom was submitted rom.write_byte(0x3E, 0x45) rom.force_patch.append(0x3E) @@ -140,6 +249,40 @@ def patch_rom(world, rom): if world.bombchus_in_logic: rom.write_int32(rom.sym('BOMBCHUS_IN_LOGIC'), 1) + # show seed info on file select screen + def makebytes(txt, size): + _bytes = list(ord(c) for c in txt[:size-1]) + [0] * size + return _bytes[:size] + + def truncstr(txt, size): + if len(txt) > size: + txt = txt[:size-3] + "..." + return txt + + line_len = 21 + version_str = "version " + __version__ + if len(version_str) > line_len: + version_str = "ver. " + __version__ + rom.write_bytes(rom.sym('VERSION_STRING_TXT'), makebytes(version_str, 25)) + + if world.multiworld.players > 1: + world_str = f"{world.player} of {world.multiworld.players}" + else: + world_str = "" + rom.write_bytes(rom.sym('WORLD_STRING_TXT'), makebytes(world_str, 12)) + + time_str = datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M") + " UTC" + rom.write_bytes(rom.sym('TIME_STRING_TXT'), makebytes(time_str, 25)) + + rom.write_byte(rom.sym('CFG_SHOW_SETTING_INFO'), 0x01) + + msg = [f"Archipelago {ap_version}", world.multiworld.get_player_name(world.player)] + for idx,part in enumerate(msg): + part_bytes = list(ord(c) for c in part) + [0] * (line_len+1) + part_bytes = part_bytes[:(line_len+1)] + symbol = rom.sym('CFG_CUSTOM_MESSAGE_{}'.format(idx+1)) + rom.write_bytes(symbol, part_bytes) + # Change graveyard graves to not allow grabbing on to the ledge rom.write_byte(0x0202039D, 0x20) rom.write_byte(0x0202043C, 0x24) @@ -590,6 +733,14 @@ def patch_rom(world, rom): # Speed up Death Mountain Trail Owl Flight rom.write_bytes(0x223B6B2, [0x00, 0x01]) + # Speed up magic arrow equips + rom.write_int16(0xBB84CE, 0x0000) # Skips the initial growing glowing orb phase + rom.write_byte(0xBB84B7, 0xFF) # Set glowing orb above magic arrow to be small sized immediately + rom.write_byte(0xBB84CB, 0x01) # Sets timer for holding icon above magic arrow (1 frame) + rom.write_byte(0xBB7E67, 0x04) # speed up magic arrow icon -> bow icon interpolation (4 frames) + rom.write_byte(0xBB8957, 0x01) # Sets timer for holding icon above bow (1 frame) + rom.write_byte(0xBB854B, 0x05) # speed up bow icon -> c button interpolation (5 frames) + # Poacher's Saw no longer messes up Forest Stage rom.write_bytes(0xAE72CC, [0x00, 0x00, 0x00, 0x00]) @@ -798,8 +949,58 @@ def add_scene_exits(scene_start, offset = 0): return exit_table + if (world.shuffle_bosses != 'off'): + # Credit to rattus128 for this ASM block. + # Gohma's save/death warp is optimized to use immediate 0 for the + # deku tree respawn. Use the delay slot before the switch table + # to hold Gohmas jump entrance as actual data so we can substitute + # the entrance index later. + rom.write_int32(0xB06290, 0x240E0000) #li t6, 0 + rom.write_int32(0xB062B0, 0xAE0E0000) #sw t6, 0(s0) + rom.write_int32(0xBC60AC, 0x24180000) #li t8, 0 + rom.write_int32(0xBC6160, 0x24180000) #li t8, 0 + rom.write_int32(0xBC6168, 0xAD380000) #sw t8, 0(t1) + + # Credit to engineer124 + # Update the Jabu-Jabu Boss Exit to actually useful coordinates (and to load the correct room) + rom.write_int16(0x273E08E, 0xF7F4) # Z coordinate of Jabu Boss Door Spawn + rom.write_byte(0x273E27B, 0x05) # Set Spawn Room to be correct def set_entrance_updates(entrances): + + # Boss shuffle + blue_warp_remaps = {} + if (world.shuffle_bosses != 'off'): + # Connect lake hylia fill exit to revisit exit + rom.write_int16(0xAC995A, 0x060C) + + # First pass for boss shuffle + # We'll need to iterate more than once, so make a copy so we can iterate more than once. + entrances = list(entrances) + for entrance in entrances: + if entrance.type not in('ChildBoss', 'AdultBoss') or not entrance.replaces or 'patch_addresses' not in entrance.data: + continue + if entrance == entrance.replaces: + # This can happen if something is plando'd vanilla. + continue + + new_boss = entrance.replaces.data + original_boss = entrance.data + + # Fixup save/quit and death warping entrance IDs on bosses. + for address in new_boss['patch_addresses']: + rom.write_int16(address, original_boss['dungeon_index']) + + # Update blue warps. + # If dungeons are shuffled, we'll this in the next step -- that's fine. + copy_entrance_record(original_boss['exit_index'], new_boss['exit_blue_warp'], 2) + copy_entrance_record(original_boss['exit_blue_warp'] + 2, new_boss['exit_blue_warp'] + 2, 2) + + # If dungeons are shuffled but their bosses are moved, they're going to refer to the wrong blue warp + # slots. Create a table to remap them for later. + blue_warp_remaps[original_boss['exit_blue_warp']] = new_boss['exit_blue_warp'] + # Boss shuffle done(?) + for entrance in entrances: new_entrance = entrance.data replaced_entrance = entrance.replaces.data @@ -809,9 +1010,16 @@ def set_entrance_updates(entrances): for address in new_entrance.get('addresses', []): rom.write_int16(address, replaced_entrance['index']) + patch_value = replaced_entrance.get('patch_value') + if patch_value is not None: + for address in new_entrance['patch_addresses']: + rom.write_int16(address, patch_value) + if "blue_warp" in new_entrance: + blue_warp = new_entrance["blue_warp"] + blue_warp = blue_warp_remaps.get(blue_warp, blue_warp) if "blue_warp" in replaced_entrance: - blue_out_data = replaced_entrance["blue_warp"] + blue_out_data = replaced_entrance["blue_warp"] else: blue_out_data = replaced_entrance["index"] # Blue warps have multiple hardcodes leading to them. The good news is @@ -822,8 +1030,8 @@ def set_entrance_updates(entrances): # vanilla as it never took you to the exit and the lake fill is handled # above by removing the cutscene completely. Child has problems with Adult # blue warps, so always use the return entrance if a child. - copy_entrance_record(blue_out_data + 2, new_entrance["blue_warp"] + 2, 2) - copy_entrance_record(replaced_entrance["index"], new_entrance["blue_warp"], 2) + copy_entrance_record(blue_out_data + 2, blue_warp + 2, 2) + copy_entrance_record(replaced_entrance["index"], blue_warp, 2) exit_table = generate_exit_lookup_table() @@ -876,7 +1084,8 @@ def set_entrance_updates(entrances): # Purge temp flags on entrance to spirit from colossus through the front door. rom.write_byte(0x021862E3, 0xC2) - if world.shuffle_overworld_entrances or world.shuffle_dungeon_entrances: + if (world.shuffle_overworld_entrances or world.shuffle_dungeon_entrances + or world.shuffle_bosses != 'off'): # Remove deku sprout and drop player at SFM after forest completion rom.write_int16(0xAC9F96, 0x0608) @@ -900,16 +1109,92 @@ def set_entrance_updates(entrances): configure_dungeon_info(rom, world) - hash_icons = 0 - for i,icon in enumerate(world.file_hash): - hash_icons |= (icon << (5 * i)) - rom.write_int32(rom.sym('cfg_file_select_hash'), hash_icons) + rom.write_bytes(rom.sym('CFG_FILE_SELECT_HASH'), world.file_hash) save_context = SaveContext() # Initial Save Data - if not world.useful_cutscenes: + if not world.useful_cutscenes and ('Forest Temple' not in world.dungeon_shortcuts): save_context.write_bits(0x00D4 + 0x03 * 0x1C + 0x04 + 0x0, 0x08) # Forest Temple switch flag (Poe Sisters cutscene) + + if 'Deku Tree' in world.dungeon_shortcuts: + # Deku Tree, flags are the same between vanilla/MQ + save_context.write_permanent_flag(Scenes.DEKU_TREE, FlagType.SWITCH, 0x1, 0x01) # Deku Block down + save_context.write_permanent_flag(Scenes.DEKU_TREE, FlagType.CLEAR, 0x2, 0x02) # Deku 231/312 + save_context.write_permanent_flag(Scenes.DEKU_TREE, FlagType.SWITCH, 0x3, 0x20) # Deku 1st Web + save_context.write_permanent_flag(Scenes.DEKU_TREE, FlagType.SWITCH, 0x3, 0x40) # Deku 2nd Web + + if 'Dodongos Cavern' in world.dungeon_shortcuts: + # Dodongo's Cavern, flags are the same between vanilla/MQ + save_context.write_permanent_flag(Scenes.DODONGOS_CAVERN, FlagType.SWITCH, 0x3, 0x80) # DC Entrance Mud Wall + save_context.write_permanent_flag(Scenes.DODONGOS_CAVERN, FlagType.SWITCH, 0x0, 0x04) # DC Mouth + # Extra permanent flag in MQ for the child route + if world.dungeon_mq['Dodongos Cavern']: + save_context.write_permanent_flag(Scenes.DODONGOS_CAVERN, FlagType.SWITCH, 0x0, 0x02) # Armos wall switch + + if 'Jabu Jabus Belly' in world.dungeon_shortcuts: + # Jabu + if not world.dungeon_mq['Jabu Jabus Belly']: + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.SWITCH, 0x0, 0x20) # Jabu Pathway down + else: + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.SWITCH, 0x1, 0x20) # Jabu Lobby Slingshot Door open + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.SWITCH, 0x0, 0x20) # Jabu Pathway down + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.CLEAR, 0x2, 0x01) # Jabu Red Slimy Thing defeated + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.SWITCH, 0x2, 0x08) # Jabu Red Slimy Thing not in front of boss lobby + save_context.write_permanent_flag(Scenes.JABU_JABU, FlagType.SWITCH, 0x1, 0x10) # Jabu Boss Door Switch Activated + + if 'Forest Temple' in world.dungeon_shortcuts: + # Forest, flags are the same between vanilla/MQ + save_context.write_permanent_flag(Scenes.FOREST_TEMPLE, FlagType.SWITCH, 0x0, 0x10) # Forest Elevator up + save_context.write_permanent_flag(Scenes.FOREST_TEMPLE, FlagType.SWITCH, 0x1, 0x01 + 0x02 + 0x04) # Forest Basement Puzzle Done + + if 'Fire Temple' in world.dungeon_shortcuts: + # Fire, flags are the same between vanilla/MQ + save_context.write_permanent_flag(Scenes.FIRE_TEMPLE, FlagType.SWITCH, 0x2, 0x40) # Fire Pillar down + + if 'Spirit Temple' in world.dungeon_shortcuts: + # Spirit + if not world.dungeon_mq['Spirit Temple']: + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x1, 0x80) # Spirit Chains + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x2, 0x02 + 0x08 + 0x10) # Spirit main room elevator (N block, Rusted Switch, E block) + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x3, 0x10) # Spirit Face + else: + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x2, 0x10) # Spirit Bombchu Boulder + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x2, 0x02) # Spirit Silver Block + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x1, 0x80) # Spirit Chains + save_context.write_permanent_flag(Scenes.SPIRIT_TEMPLE, FlagType.SWITCH, 0x3, 0x10) # Spirit Face + + if 'Shadow Temple' in world.dungeon_shortcuts: + # Shadow + if not world.dungeon_mq['Shadow Temple']: + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x0, 0x08) # Shadow Truthspinner + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x0, 0x20) # Shadow Boat Block + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x1, 0x01) # Shadow Bird Bridge + else: + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x2, 0x08) # Shadow Truthspinner + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x3, 0x20) # Shadow Fire Arrow Platform + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x3, 0x80) # Shadow Spinning Blades room Skulltulas defeated + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.CLEAR, 0x3, 0x40) # Shadow Spinning Blades room Skulltulas defeated + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x0, 0x20) # Shadow Boat Block + save_context.write_permanent_flag(Scenes.SHADOW_TEMPLE, FlagType.SWITCH, 0x1, 0x01) # Shadow Bird Bridge + + if world.region_has_shortcuts('King Dodongo Boss Room'): + save_context.write_permanent_flag(Scenes.KING_DODONGO_LOBBY, FlagType.SWITCH, 0x3, 0x02) # DC Boss Floor + + set_spirit_shortcut_actors(rom) # Change elevator starting position to avoid waiting a half cycle from the temple entrance + + if world.plant_beans: + save_context.write_permanent_flag(Scenes.GRAVEYARD, FlagType.SWITCH, 0x3, 0x08) # Plant Graveyard bean + save_context.write_permanent_flag(Scenes.ZORAS_RIVER, FlagType.SWITCH, 0x3, 0x08) # Plant Zora's River bean + save_context.write_permanent_flag(Scenes.KOKIRI_FOREST, FlagType.SWITCH, 0x2, 0x02) # Plant Kokiri Forest bean + save_context.write_permanent_flag(Scenes.LAKE_HYLIA, FlagType.SWITCH, 0x3, 0x02) # Plant Lake Hylia bean + save_context.write_permanent_flag(Scenes.GERUDO_VALLEY, FlagType.SWITCH, 0x3, 0x08) # Plant Gerudo Valley bean + save_context.write_permanent_flag(Scenes.LOST_WOODS, FlagType.SWITCH, 0x3, 0x10) # Plant Lost Woods bridge bean + save_context.write_permanent_flag(Scenes.LOST_WOODS, FlagType.SWITCH, 0x1, 0x04) # Plant Lost Woods theater bean + save_context.write_permanent_flag(Scenes.DESERT_COLOSSUS, FlagType.SWITCH, 0x0, 0x1) # Plant Desert Colossus bean + save_context.write_permanent_flag(Scenes.DEATH_MOUNTAIN_TRAIL, FlagType.SWITCH, 0x3, 0x40) # Plant Death Mountain Trail bean + save_context.write_permanent_flag(Scenes.DEATH_MOUNTAIN_CRATER, FlagType.SWITCH, 0x3, 0x08) # Plant Death Mountain Crater bean + save_context.write_bits(0x00D4 + 0x05 * 0x1C + 0x04 + 0x1, 0x01) # Water temple switch flag (Ruto) save_context.write_bits(0x00D4 + 0x51 * 0x1C + 0x04 + 0x2, 0x08) # Hyrule Field switch flag (Owl) save_context.write_bits(0x00D4 + 0x55 * 0x1C + 0x04 + 0x0, 0x80) # Kokiri Forest switch flag (Owl) @@ -978,6 +1263,9 @@ def set_entrance_updates(entrances): save_context.write_bits(0x0EEB, 0x01) # "Entered Dodongo's Cavern" save_context.write_bits(0x0F08, 0x08) # "Entered Hyrule Castle" + if world.dungeon_mq['Shadow Temple']: + save_context.write_bits(0x019F, 0x80) # "Turn On Clear Wall Blocking Hover Boots Room" + # Set the number of chickens to collect rom.write_byte(0x00E1E523, world.chicken_count) @@ -999,17 +1287,17 @@ def set_entrance_updates(entrances): if world.complete_mask_quest: rom.write_byte(rom.sym('COMPLETE_MASK_QUEST'), 1) - if world.skip_child_zelda: - save_context.give_item('Zeldas Letter') + if world.shuffle_child_trade == 'skip_child_zelda': + save_context.give_item(world, 'Zeldas Letter') # Archipelago forces this item to be local so it can always be given to the player. Usually it's a song so it's no problem. item = world.get_location('Song from Impa').item - save_context.give_raw_item(item.name) + save_context.give_item(world, item.name) if item.name == 'Slingshot': - save_context.give_raw_item("Deku Seeds (30)") + save_context.give_item(world, "Deku Seeds (30)") elif item.name == 'Bow': - save_context.give_raw_item("Arrows (30)") + save_context.give_item(world, "Arrows (30)") elif item.name == 'Bomb Bag': - save_context.give_raw_item("Bombs (20)") + save_context.give_item(world, "Bombs (20)") save_context.write_bits(0x0ED7, 0x04) # "Obtained Malon's Item" save_context.write_bits(0x0ED7, 0x08) # "Woke Talon in castle" save_context.write_bits(0x0ED7, 0x10) # "Talon has fled castle" @@ -1052,10 +1340,35 @@ def set_entrance_updates(entrances): elif world.bridge == 'tokens': rom.write_int32(symbol, 5) rom.write_int16(count_symbol, world.bridge_tokens) + elif world.bridge == 'hearts': + rom.write_int32(symbol, 6) + rom.write_int16(count_symbol, world.bridge_hearts * 0x10) if world.triforce_hunt: - rom.write_int16(rom.sym('triforce_pieces_requied'), world.triforce_goal) - rom.write_int16(rom.sym('triforce_hunt_enabled'), 1) + rom.write_int16(rom.sym('TRIFORCE_PIECES_REQUIRED'), world.triforce_goal) + rom.write_int16(rom.sym('TRIFORCE_HUNT_ENABLED'), 1) + + # Set up Ganon's Boss Key conditions. + symbol = rom.sym('GANON_BOSS_KEY_CONDITION') + count_symbol = rom.sym('GANON_BOSS_KEY_CONDITION_COUNT') + if world.shuffle_ganon_bosskey == 'medallions': + rom.write_byte(symbol, 1) + rom.write_int16(count_symbol, world.ganon_bosskey_medallions) + elif world.shuffle_ganon_bosskey == 'dungeons': + rom.write_byte(symbol, 2) + rom.write_int16(count_symbol, world.ganon_bosskey_rewards) + elif world.shuffle_ganon_bosskey == 'stones': + rom.write_byte(symbol, 3) + rom.write_int16(count_symbol, world.ganon_bosskey_stones) + elif world.shuffle_ganon_bosskey == 'tokens': + rom.write_byte(symbol, 4) + rom.write_int16(count_symbol, world.ganon_bosskey_tokens) + elif world.shuffle_ganon_bosskey == 'hearts': + rom.write_byte(symbol, 5) + rom.write_int16(count_symbol, world.ganon_bosskey_hearts * 0x10) + else: + rom.write_byte(symbol, 0) + rom.write_int16(count_symbol, 0) # Set up LACS conditions. symbol = rom.sym('LACS_CONDITION') @@ -1072,6 +1385,9 @@ def set_entrance_updates(entrances): elif world.lacs_condition == 'tokens': rom.write_int32(symbol, 4) rom.write_int16(count_symbol, world.lacs_tokens) + elif world.lacs_condition == 'hearts': + rom.write_int32(symbol, 5) + rom.write_int16(count_symbol, world.lacs_hearts * 0x10) else: rom.write_int32(symbol, 0) @@ -1120,14 +1436,11 @@ def set_entrance_updates(entrances): save_context.write_bits(0x00D4 + 0x0C * 0x1C + 0x04 + 0x3, 0xDC) # Thieves' Hideout switch flags (heard yells/unlocked doors) save_context.write_bits(0x00D4 + 0x0C * 0x1C + 0x0C + 0x2, 0xC4) # Thieves' Hideout collection flags (picked up keys, marks fights finished as well) - # Add a gate-opening guard on the Wasteland side of the Gerudo gate when the card is shuffled or certain levels of ER. + # Add a gate opening guard on the Wasteland side of the Gerudo Fortress' gate # Overrides the generic guard at the bottom of the ladder in Gerudo Fortress - if world.shuffle_gerudo_card or world.shuffle_overworld_entrances or \ - world.shuffle_special_interior_entrances or world.spawn_positions: - # Add a gate opening guard on the Wasteland side of the Gerudo Fortress' gate - new_gate_opening_guard = [0x0138, 0xFAC8, 0x005D, 0xF448, 0x0000, 0x95B0, 0x0000, 0x0301] - rom.write_int16s(0x21BD3EC, new_gate_opening_guard) # Adult Day - rom.write_int16s(0x21BD62C, new_gate_opening_guard) # Adult Night + new_gate_opening_guard = [0x0138, 0xFAC8, 0x005D, 0xF448, 0x0000, 0x95B0, 0x0000, 0x0301] + rom.write_int16s(0x21BD3EC, new_gate_opening_guard) # Adult Day + rom.write_int16s(0x21BD62C, new_gate_opening_guard) # Adult Night # start with maps/compasses if world.shuffle_mapcompass == 'startwith': @@ -1138,6 +1451,8 @@ def set_entrance_updates(entrances): if world.shuffle_smallkeys == 'vanilla': if world.dungeon_mq['Spirit Temple']: save_context.addresses['keys']['spirit'].value = 3 + if 'Shadow Temple' in world.dungeon_shortcuts: + save_context.addresses['keys']['shadow'].value = 2 if world.start_with_rupees: rom.write_byte(rom.sym('MAX_RUPEES'), 0x01) @@ -1165,6 +1480,13 @@ def set_entrance_updates(entrances): save_context.addresses['equip_items']['kokiri_boots'].value = True # (to avoid issues when going back child for the first time) save_context.write_byte(0x0F33, 0x00) # Unset Swordless Flag (to avoid issues with sword getting unequipped) + # For Inventory_SwapAgeEquipment going child -> adult: + # Change range in which items are read from slot instead of items + # Extended to include hookshot and ocarina + rom.write_byte(0xAE5867, 0x07) # >= ITEM_OCARINA_FAIRY + rom.write_byte(0xAE5873, 0x0C) # <= ITEM_LONGSHOT + rom.write_byte(0xAE587B, 0x14) # >= ITEM_BOTTLE + # Revert change that Skips the Epona Race if not world.no_epona_race: rom.write_int32(0xA9E838, 0x03E00008) @@ -1276,20 +1598,82 @@ def set_entrance_updates(entrances): new_message = "\x08What should I do!?\x01My \x05\x41Cuccos\x05\x40 have all flown away!\x04You, little boy, please!\x01Please gather at least \x05\x41%d Cuccos\x05\x40\x01for me.\x02" % world.chicken_count update_message_by_id(messages, 0x5036, new_message) + # Find an item location behind the Jabu boss door by searching regions breadth-first without going back into Jabu proper + if world.logic_rules == 'glitched': + location = world.get_location('Barinade') + else: + jabu_reward_regions = {world.get_entrance('Jabu Jabus Belly Boss Door -> Barinade Boss Room').connected_region} + already_checked = set() + location = None + while jabu_reward_regions: + locations = [ + loc + for region in jabu_reward_regions + for loc in region.locations + if loc.item is not None + ] + if locations: + # Location types later in the list will be preferred over earlier ones or ones not in the list. + # This ensures that if the region behind the boss door is a boss arena, the medallion or stone will be used. + priority_types = ("GS Token", "GrottoScrub", "Scrub", "Shop", "NPC", "Collectable", "Freestanding", "ActorOverride", "RupeeTower", "Pot", "Crate", "FlyingPot", "SmallCrate", "Beehive", "Chest", "Cutscene", "Song", "BossHeart", "Boss") + best_type = max((location.type for location in locations), key=lambda type: priority_types.index(type) if type in priority_types else -1) + location = world.hint_rng.choice(list(filter(lambda loc: loc.type == best_type, locations))) + break + already_checked |= jabu_reward_regions + jabu_reward_regions = [ + exit.connected_region + for region in jabu_reward_regions + for exit in region.exits + if exit.connected_region.dungeon != 'Jabu Jabus Belly' and exit.connected_region.name not in already_checked + ] + + if location is None: + jabu_item = None + reward_text = None + elif getattr(location.item, 'looks_like_item', None) is not None: + jabu_item = location.item.looks_like_item + reward_text = create_fake_name(getHint(getItemGenericName(location.item.looks_like_item), True).text) + else: + jabu_item = location.item + reward_text = getHint(getItemGenericName(location.item), True).text + # Update "Princess Ruto got the Spiritual Stone!" text before the midboss in Jabu - reward_text = {'Kokiri Emerald': "\x05\x42Kokiri Emerald\x05\x40", - 'Goron Ruby': "\x05\x41Goron Ruby\x05\x40", - 'Zora Sapphire': "\x05\x43Zora Sapphire\x05\x40", - 'Forest Medallion': "\x05\x42Forest Medallion\x05\x40", - 'Fire Medallion': "\x05\x41Fire Medallion\x05\x40", - 'Water Medallion': "\x05\x43Water Medallion\x05\x40", - 'Spirit Medallion': "\x05\x46Spirit Medallion\x05\x40", - 'Shadow Medallion': "\x05\x45Shadow Medallion\x05\x40", - 'Light Medallion': "\x05\x44Light Medallion\x05\x40" - } - new_message = "\x1a\x08Princess Ruto got the \x01%s!\x09\x01\x14\x02But\x14\x00 why Princess Ruto?\x02" % reward_text[world.get_location('Barinade').item.name] + if reward_text is None: + new_message = f"\x08Princess Ruto got \x01\x05\x43nothing\x05\x40!\x01Well, that's disappointing...\x02" + else: + reward_texts = { + 'Kokiri Emerald': "the \x05\x42Kokiri Emerald\x05\x40", + 'Goron Ruby': "the \x05\x41Goron Ruby\x05\x40", + 'Zora Sapphire': "the \x05\x43Zora Sapphire\x05\x40", + 'Forest Medallion': "the \x05\x42Forest Medallion\x05\x40", + 'Fire Medallion': "the \x05\x41Fire Medallion\x05\x40", + 'Water Medallion': "the \x05\x43Water Medallion\x05\x40", + 'Spirit Medallion': "the \x05\x46Spirit Medallion\x05\x40", + 'Shadow Medallion': "the \x05\x45Shadow Medallion\x05\x40", + 'Light Medallion': "the \x05\x44Light Medallion\x05\x40", + } + reward_text = reward_texts.get(location.item.name, f'\x05\x43{reward_text}\x05\x40') + new_message = f"\x08Princess Ruto got \x01{reward_text}!\x01But why Princess Ruto?\x02" update_message_by_id(messages, 0x4050, new_message) + # Set Dungeon Reward Actor in Jabu Jabu to be accurate + # Vanilla and MQ Jabu Jabu addresses are the same for this object and actor + if location is not None: #TODO make actor invisible if no item? + jabu_item = location.item + jabu_stone_object = jabu_item.special['object_id'] + rom.write_int16(0x277D068, jabu_stone_object) + rom.write_int16(0x277D168, jabu_stone_object) + jabu_stone_type = jabu_item.special['actor_type'] + rom.write_byte(0x277D0BB, jabu_stone_type) + rom.write_byte(0x277D19B, jabu_stone_type) + jabu_actor_type = jabu_item.special['actor_type'] + set_jabu_stone_actors(rom, jabu_actor_type) + # Also set the right object for the actor, since medallions and stones require different objects + # MQ is handled separately, as we include both objects in the object list in mqu.json (Scene 2, Room 6) + if not world.dungeon_mq['Jabu Jabus Belly']: + rom.write_int16(0x277D068, jabu_stone_object) + rom.write_int16(0x277D168, jabu_stone_object) + # use faster jabu elevator if not world.dungeon_mq['Jabu Jabus Belly'] and world.shuffle_scrubs == 'off': symbol = rom.sym('JABU_ELEVATOR_ENABLE') @@ -1319,11 +1703,49 @@ def set_entrance_updates(entrances): # build silly ganon lines - if world.misc_hints: + if 'ganondorf' in world.misc_hints: buildGanonText(world, messages) + # build misc. item hints + buildMiscItemHints(world, messages) + + # build misc. location hints + buildMiscLocationHints(world, messages) + + # Patch freestanding items + if world.shuffle_freestanding_items: + # Get freestanding item locations + actor_override_locations = [location for location in world.get_locations() if location.disabled == DisableType.ENABLED and location.type == 'ActorOverride'] + rupeetower_locations = [location for location in world.get_locations() if location.disabled == DisableType.ENABLED and location.type == 'RupeeTower'] + + for location in actor_override_locations: + patch_actor_override(location, rom) + for location in rupeetower_locations: + patch_rupee_tower(location, rom) + + # Write flag table data + collectible_flag_table, alt_list = get_collectible_flag_table(world) + collectible_flag_table_bytes, num_collectible_flags = get_collectible_flag_table_bytes(collectible_flag_table) + alt_list_bytes = get_alt_list_bytes(alt_list) + if(len(collectible_flag_table_bytes) > 600): + raise(RuntimeError(f'Exceeded collectible override table size: {len(collectible_flag_table_bytes)}')) + rom.write_bytes(rom.sym('collectible_scene_flags_table'), collectible_flag_table_bytes) + num_collectible_flags += num_collectible_flags % 8 + rom.write_bytes(rom.sym('num_override_flags'), num_collectible_flags.to_bytes(2, 'big')) + if(len(alt_list) > 64): + raise(RuntimeError(f'Exceeded alt override table size: {len(alt_list)}')) + rom.write_bytes(rom.sym('alt_overrides'), alt_list_bytes) + + # Gather addresses and bitflags for client + world.collectible_override_flags = rom.sym('collectible_override_flags') - rom.sym('RANDO_CONTEXT') + world.collectible_flag_offsets = get_collectible_flag_addresses(world, collectible_flag_table_bytes) + world.collectible_flags_available.set() + # Write item overrides + # check_location_dupes(world) override_table = get_override_table(world) + if len(override_table) >= 1536: + raise(RuntimeError(f'Exceeded override table size: {len(override_table)}')) rom.write_bytes(rom.sym('cfg_item_overrides'), get_override_table_bytes(override_table)) rom.write_byte(rom.sym('PLAYER_ID'), min(world.player, 255)) # Write player ID rom.write_bytes(rom.sym('AP_PLAYER_NAME'), bytearray(world.connect_name, encoding='ascii')) @@ -1331,6 +1753,8 @@ def set_entrance_updates(entrances): if world.death_link: rom.write_byte(rom.sym('DEATH_LINK'), 0x01) + rom.write_byte(rom.sym('MW_SEND_OWN_ITEMS'), 0x01) + # Revert Song Get Override Injection if not songs_as_items: # general get song @@ -1358,6 +1782,19 @@ def set_entrance_updates(entrances): if world.damage_multiplier == 'ohko': rom.write_byte(rom.sym('CFG_DAMAGE_MULTIPLYER'), 3) + if world.deadly_bonks != 'none': + rom.write_int32(rom.sym('CFG_DEADLY_BONKS'), 1) + if world.deadly_bonks == 'half': + rom.write_int16(rom.sym('CFG_BONK_DAMAGE'), 0x0004) + if world.deadly_bonks == 'normal': + rom.write_int16(rom.sym('CFG_BONK_DAMAGE'), 0x0008) + if world.deadly_bonks == 'double': + rom.write_int16(rom.sym('CFG_BONK_DAMAGE'), 0x0010) + if world.deadly_bonks == 'quadruple': + rom.write_int16(rom.sym('CFG_BONK_DAMAGE'), 0x0020) + if world.deadly_bonks == 'ohko': + rom.write_int16(rom.sym('CFG_BONK_DAMAGE'), 0xFFFE) + # Patch songs and boss rewards for location in world.multiworld.get_filled_locations(world.player): item = location.item @@ -1405,7 +1842,7 @@ def set_entrance_updates(entrances): rom.write_byte(0x218C589, special['text_id']) #Fix text box elif location.type == 'Boss': if location.name == 'Links Pocket': - save_context.give_item(item.name) + save_context.give_item(world, item.name) else: rom.write_byte(locationaddress, special['item_id']) rom.write_byte(secondaryaddress, special['addr2_data']) @@ -1440,8 +1877,10 @@ def set_entrance_updates(entrances): shuffle_messages.shop_item_messages = [] # kokiri shop + shop_locations = [location for location in world.get_region( + 'KF Kokiri Shop').locations if location.type == 'Shop'] # Need to filter because of the freestanding item in KF Shop shop_objs = place_shop_items(rom, world, shop_items, messages, - world.get_region('KF Kokiri Shop').locations, True) + shop_locations, True) shop_objs |= {0x00FC, 0x00B2, 0x0101, 0x0102, 0x00FD, 0x00C5} # Shop objects rom.write_byte(0x2587029, len(shop_objs)) rom.write_int32(0x258702C, 0x0300F600) @@ -1601,30 +2040,66 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name update_message_by_id(messages, 0x304D, "How do you like it?\x02") update_message_by_id(messages, 0x304F, "How about buying this cool item for \x01200 Rupees?\x01\x1B\x05\x42Buy\x01Don't buy\x05\x40\x02") - if world.shuffle_smallkeys == 'remove' or world.shuffle_bosskeys == 'remove' or world.shuffle_ganon_bosskey == 'remove': - locked_doors = get_locked_doors(rom, world) - for _,[door_byte, door_bits] in locked_doors.items(): - save_context.write_bits(door_byte, door_bits) + if world.shuffle_pots != 'off': # Update the first BK door in ganon's castle to use a separate flag so it can be unlocked to get to the pots + patch_ganons_tower_bk_door(rom, 0x15) # Using flag 0x15 for the door. GBK doors normally use 0x14. + locked_doors = get_doors_to_unlock(rom, world) + for _, [door_byte, door_bits] in locked_doors.items(): + save_context.write_bits(door_byte, door_bits) # Fix chest animations - if world.bombchus_in_logic: + BROWN_CHEST = 0 + GOLD_CHEST = 2 + GILDED_CHEST = 12 + SILVER_CHEST = 13 + SKULL_CHEST_SMALL = 14 + SKULL_CHEST_BIG = 15 + if world.bombchus_in_logic or world.minor_items_as_major_chest: bombchu_ids = [0x6A, 0x03, 0x6B] for i in bombchu_ids: item = read_rom_item(rom, i) - item['chest_type'] = 0 + item['chest_type'] = GILDED_CHEST write_rom_item(rom, i, item) - if world.bridge == 'tokens' or world.lacs_condition == 'tokens': + if world.bridge == 'tokens' or world.lacs_condition == 'tokens' or world.shuffle_ganon_bosskey == 'tokens': item = read_rom_item(rom, 0x5B) - item['chest_type'] = 0 + item['chest_type'] = SKULL_CHEST_BIG write_rom_item(rom, 0x5B, item) - - # Update chest type sizes - if world.correct_chest_sizes: + if world.bridge == 'hearts' or world.lacs_condition == 'hearts' or world.shuffle_ganon_bosskey == 'hearts': + heart_ids = [0x3D, 0x3E, 0x76] + for i in heart_ids: + item = read_rom_item(rom, i) + item['chest_type'] = GILDED_CHEST + write_rom_item(rom, i, item) + if world.minor_items_as_major_chest: + # Deku + item = read_rom_item(rom, 0x29) + item['chest_type'] = GILDED_CHEST + write_rom_item(rom, 0x29, item) + # Hylian + item = read_rom_item(rom, 0x2A) + item['chest_type'] = GILDED_CHEST + write_rom_item(rom, 0x2A, item) + + # Update chest type appearance + if world.correct_chest_appearances == 'textures': + symbol = rom.sym('CHEST_TEXTURE_MATCH_CONTENTS') + rom.write_int32(symbol, 0x00000001) + if world.correct_chest_appearances == 'classic': symbol = rom.sym('CHEST_SIZE_MATCH_CONTENTS') rom.write_int32(symbol, 0x00000001) + if world.correct_chest_appearances == 'both': + symbol = rom.sym('CHEST_SIZE_TEXTURE') + rom.write_int32(symbol, 0x00000001) # Move Ganon's Castle's Zelda's Lullaby Chest back so is reachable if large + if world.correct_chest_appearances == 'classic' or world.correct_chest_appearances == 'both': if not world.dungeon_mq['Ganons Castle']: - rom.write_int16(0x321B176, 0xFC40) # original 0xFC48 + chest_name = 'Ganons Castle Light Trial Lullaby Chest' + location = world.get_location(chest_name) + if location.item.game == 'Ocarina of Time': + item = read_rom_item(rom, location.item.index) + else: + item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK) + if item['chest_type'] in (GOLD_CHEST, GILDED_CHEST, SKULL_CHEST_BIG): + rom.write_int16(0x321B176, 0xFC40) # original 0xFC48 # Move Spirit Temple Compass Chest if it is a small chest so it is reachable with hookshot if not world.dungeon_mq['Spirit Temple']: @@ -1633,13 +2108,11 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name location = world.get_location(chest_name) if location.item.game == 'Ocarina of Time': item = read_rom_item(rom, location.item.index) - if item['chest_type'] in (1, 3): - rom.write_int16(chest_address + 2, 0x0190) # X pos - rom.write_int16(chest_address + 6, 0xFABC) # Z pos else: - if not location.item.advancement: - rom.write_int16(chest_address + 2, 0x0190) # X pos - rom.write_int16(chest_address + 6, 0xFABC) # Z pos + item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK) + if item['chest_type'] in (BROWN_CHEST, SILVER_CHEST, SKULL_CHEST_SMALL): + rom.write_int16(chest_address + 2, 0x0190) # X pos + rom.write_int16(chest_address + 6, 0xFABC) # Z pos # Move Silver Gauntlets chest if it is small so it is reachable from Spirit Hover Seam if world.logic_rules != 'glitchless': @@ -1649,60 +2122,81 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name location = world.get_location(chest_name) if location.item.game == 'Ocarina of Time': item = read_rom_item(rom, location.item.index) - if item['chest_type'] in (1, 3): - rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos - rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos else: - if not location.item.advancement: - rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos - rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos + item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK) + if item['chest_type'] in (BROWN_CHEST, SILVER_CHEST, SKULL_CHEST_SMALL): + rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos + rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos + + # Make all chests invisible + if world.invisible_chests: + symbol = rom.sym('CHEST_LENS_ONLY') + rom.write_int32(symbol, 0x00000001) + + # Update pot type appearance + ptmc_options = { + 'off': 0, + 'textures_content' : 1, + 'textures_unchecked': 2, + } + symbol = rom.sym('POTCRATE_TEXTURES_MATCH_CONTENTS') + rom.write_byte(symbol, ptmc_options[world.correct_potcrate_appearances]) # give dungeon items the correct messages add_item_messages(messages, shop_items, world) if world.enhance_map_compass: - reward_list = {'Kokiri Emerald': "\x05\x42Kokiri Emerald\x05\x40", - 'Goron Ruby': "\x05\x41Goron Ruby\x05\x40", - 'Zora Sapphire': "\x05\x43Zora Sapphire\x05\x40", - 'Forest Medallion': "\x05\x42Forest Medallion\x05\x40", - 'Fire Medallion': "\x05\x41Fire Medallion\x05\x40", - 'Water Medallion': "\x05\x43Water Medallion\x05\x40", - 'Spirit Medallion': "\x05\x46Spirit Medallion\x05\x40", - 'Shadow Medallion': "\x05\x45Shadow Medallion\x05\x40", - 'Light Medallion': "\x05\x44Light Medallion\x05\x40" + reward_list = { + 'Kokiri Emerald': "\x05\x42Kokiri Emerald\x05\x40", + 'Goron Ruby': "\x05\x41Goron Ruby\x05\x40", + 'Zora Sapphire': "\x05\x43Zora Sapphire\x05\x40", + 'Forest Medallion': "\x05\x42Forest Medallion\x05\x40", + 'Fire Medallion': "\x05\x41Fire Medallion\x05\x40", + 'Water Medallion': "\x05\x43Water Medallion\x05\x40", + 'Spirit Medallion': "\x05\x46Spirit Medallion\x05\x40", + 'Shadow Medallion': "\x05\x45Shadow Medallion\x05\x40", + 'Light Medallion': "\x05\x44Light Medallion\x05\x40", } - dungeon_list = {'Deku Tree': ("the \x05\x42Deku Tree", 'Queen Gohma', 0x62, 0x88), - 'Dodongos Cavern': ("\x05\x41Dodongo\'s Cavern", 'King Dodongo', 0x63, 0x89), - 'Jabu Jabus Belly': ("\x05\x43Jabu Jabu\'s Belly", 'Barinade', 0x64, 0x8a), - 'Forest Temple': ("the \x05\x42Forest Temple", 'Phantom Ganon', 0x65, 0x8b), - 'Fire Temple': ("the \x05\x41Fire Temple", 'Volvagia', 0x7c, 0x8c), - 'Water Temple': ("the \x05\x43Water Temple", 'Morpha', 0x7d, 0x8e), - 'Spirit Temple': ("the \x05\x46Spirit Temple", 'Twinrova', 0x7e, 0x8f), - 'Ice Cavern': ("the \x05\x44Ice Cavern", None, 0x87, 0x92), - 'Bottom of the Well': ("the \x05\x45Bottom of the Well", None, 0xa2, 0xa5), - 'Shadow Temple': ("the \x05\x45Shadow Temple", 'Bongo Bongo', 0x7f, 0xa3), + dungeon_list = { + # dungeon name boss name compass map + 'Deku Tree': ("the \x05\x42Deku Tree", 'Queen Gohma', 0x62, 0x88), + 'Dodongos Cavern': ("\x05\x41Dodongo\'s Cavern", 'King Dodongo', 0x63, 0x89), + 'Jabu Jabus Belly': ("\x05\x43Jabu Jabu\'s Belly", 'Barinade', 0x64, 0x8a), + 'Forest Temple': ("the \x05\x42Forest Temple", 'Phantom Ganon', 0x65, 0x8b), + 'Fire Temple': ("the \x05\x41Fire Temple", 'Volvagia', 0x7c, 0x8c), + 'Water Temple': ("the \x05\x43Water Temple", 'Morpha', 0x7d, 0x8e), + 'Spirit Temple': ("the \x05\x46Spirit Temple", 'Twinrova', 0x7e, 0x8f), + 'Ice Cavern': ("the \x05\x44Ice Cavern", None, 0x87, 0x92), + 'Bottom of the Well': ("the \x05\x45Bottom of the Well", None, 0xa2, 0xa5), + 'Shadow Temple': ("the \x05\x45Shadow Temple", 'Bongo Bongo', 0x7f, 0xa3), } for dungeon in world.dungeon_mq: if dungeon in ['Gerudo Training Ground', 'Ganons Castle']: pass elif dungeon in ['Bottom of the Well', 'Ice Cavern']: dungeon_name, boss_name, compass_id, map_id = dungeon_list[dungeon] - if len(world.multiworld.worlds) > 1: + if world.multiworld.players > 1: map_message = "\x13\x76\x08\x05\x42\x0F\x05\x40 found the \x05\x41Dungeon Map\x05\x40\x01for %s\x05\x40!\x09" % (dungeon_name) else: map_message = "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for %s\x05\x40!\x01It\'s %s!\x09" % (dungeon_name, "masterful" if world.dungeon_mq[dungeon] else "ordinary") - if world.mq_dungeons_random or world.mq_dungeons != 0 and world.mq_dungeons != 12: + if world.mq_dungeons_random or world.mq_dungeons_count != 0 and world.mq_dungeons_count != 12: update_message_by_id(messages, map_id, map_message) else: dungeon_name, boss_name, compass_id, map_id = dungeon_list[dungeon] - dungeon_reward = reward_list[world.get_location(boss_name).item.name] - if len(world.multiworld.worlds) > 1: + if world.multiworld.players > 1: compass_message = "\x13\x75\x08\x05\x42\x0F\x05\x40 found the \x05\x41Compass\x05\x40\x01for %s\x05\x40!\x09" % (dungeon_name) + elif world.shuffle_bosses != 'off': + vanilla_reward = world.get_location(boss_name).vanilla_item + vanilla_reward_location = world.multiworld.find_item(vanilla_reward, world.player) # hinted_dungeon_reward_locations[vanilla_reward.name] + area = HintArea.at(vanilla_reward_location).text(world.clearer_hints, preposition=True) + compass_message = "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for %s\x05\x40!\x01The %s can be found\x01%s!\x09" % (dungeon_name, vanilla_reward, area) else: + boss_location = next(filter(lambda loc: loc.type == 'Boss', world.get_entrance(f'{dungeon} Boss Door -> {boss_name} Boss Room').connected_region.locations)) + dungeon_reward = reward_list[boss_location.item.name] compass_message = "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for %s\x05\x40!\x01It holds the %s!\x09" % (dungeon_name, dungeon_reward) update_message_by_id(messages, compass_id, compass_message) - if world.mq_dungeons_random or world.mq_dungeons != 0 and world.mq_dungeons != 12: - if len(world.multiworld.worlds) > 1: + if world.mq_dungeons_random or world.mq_dungeons_count != 0 and world.mq_dungeons_count != 12: + if world.multiworld.players > 1: map_message = "\x13\x76\x08\x05\x42\x0F\x05\x40 found the \x05\x41Dungeon Map\x05\x40\x01for %s\x05\x40!\x09" % (dungeon_name) else: map_message = "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for %s\x05\x40!\x01It\'s %s!\x09" % (dungeon_name, "masterful" if world.dungeon_mq[dungeon] else "ordinary") @@ -1711,17 +2205,18 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name # Set hints on the altar inside ToT rom.write_int16(0xE2ADB2, 0x707A) rom.write_int16(0xE2ADB6, 0x7057) - buildAltarHints(world, messages, include_rewards=world.misc_hints and not world.enhance_map_compass, include_wincons=world.misc_hints) - - # Set Dungeon Reward actors in Jabu Jabu to be accurate - jabu_actor_type = world.get_location('Barinade').item.special['actor_type'] - set_jabu_stone_actors(rom, jabu_actor_type) - # Also set the right object for the actor, since medallions and stones require different objects - # MQ is handled separately, as we include both objects in the object list in mqu.json (Scene 2, Room 6) - if not world.dungeon_mq['Jabu Jabus Belly']: - jabu_stone_object = world.get_location('Barinade').item.special['object_id'] - rom.write_int16(0x277D068, jabu_stone_object) - rom.write_int16(0x277D168, jabu_stone_object) + buildAltarHints(world, messages, + include_rewards='altar' in world.misc_hints and not world.enhance_map_compass, + include_wincons='altar' in world.misc_hints) + + # Fix Dead Hand spawn coordinates in vanilla shadow temple and bottom of the well to be the exact centre of the room + # This prevents the extremely small possibility of Dead Hand spawning outside of collision + if not world.dungeon_mq['Shadow Temple']: + rom.write_int16(0x27DC0AE, 0xF67E) # x-coordinate spawn in shadow temple + rom.write_int16(0x27DC0B2, 0xFE6B) # z-coordinate spawn in shadow temple + if not world.dungeon_mq['Bottom of the Well']: + rom.write_int16(0x32FB08E, 0x0500) # x-coordinate spawn in bottom of the well + rom.write_int16(0x32FB092, 0x00D2) # z-coordinate spawn in bottom of the well # update happy mask shop to use new SOLD OUT text id rom.write_int16(shop_item_file.start + 0x1726, shop_items[0x26].description_message) @@ -1730,12 +2225,29 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name rom.write_int16(0xB6D57E, 0x0003) rom.write_int16(0xB6EC52, 999) tycoon_message = "\x08\x13\x57You got a \x05\x43Tycoon's Wallet\x05\x40!\x01Now you can hold\x01up to \x05\x46999\x05\x40 \x05\x46Rupees\x05\x40." - if len(world.multiworld.worlds) > 1: + if world.multiworld.players > 1: tycoon_message = make_player_message(tycoon_message) update_message_by_id(messages, 0x00F8, tycoon_message, 0x23) write_shop_items(rom, shop_item_file.start + 0x1DEC, shop_items) + # set end credits text to automatically fade without player input, + # with timing depending on the number of lines in the text box + for message_id in (0x706F, 0x7091, 0x7092, 0x7093, 0x7094, 0x7095): + text_codes = [] + chars_in_section = 1 + for code in get_message_by_id(messages, message_id).text_codes: + if code.code == 0x04: # box-break + text_codes.append(Text_Code(0x0c, 80 + chars_in_section)) + chars_in_section = 1 + elif code.code == 0x02: # end + text_codes.append(Text_Code(0x0e, 80 + chars_in_section)) + text_codes.append(code) + else: + chars_in_section += 1 + text_codes.append(code) + update_message_by_id(messages, message_id, ''.join(code.get_string() for code in text_codes)) + permutation = None # text shuffle @@ -1744,9 +2256,25 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name elif world.text_shuffle == 'complete': permutation = shuffle_messages(messages, except_hints=False) - # If Warp Song ER is on, update text boxes - if world.warp_songs: - update_warp_song_text(messages, world) + # update warp song preview text boxes + update_warp_song_text(messages, world) + + if world.blue_fire_arrows: + rom.write_byte(0xC230C1, 0x29) #Adds AT_TYPE_OTHER to arrows to allow collision with red ice + rom.write_byte(0xDB38FE, 0xEF) #disables ice arrow collision on secondary cylinder for red ice crystals + rom.write_byte(0xC9F036, 0x10) #enable ice arrow collision on mud walls + #increase cylinder radius/height for red ice sheets + rom.write_byte(0xDB391B, 0x50) + rom.write_byte(0xDB3927, 0x5A) + + bfa_message = "\x08\x13\x0CYou got the \x05\x43Blue Fire Arrow\x05\x40!\x01This is a cool arrow you can\x01use on red ice." + if world.multiworld.players > 1: + bfa_message = make_player_message(bfa_message) + update_message_by_id(messages, 0x0071, bfa_message, 0x23) + + with open(data_path('blue_fire_arrow_item_name_eng.ia4'), 'rb') as stream: + bfa_name_bytes = stream.read() + rom.write_bytes(0x8a1c00, bfa_name_bytes) repack_messages(rom, messages, permutation) @@ -1774,7 +2302,41 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name for (name, count) in world.starting_items.items(): if count == 0: continue - save_context.give_item(name, count) + save_context.give_item(world, name, count) + + if world.fix_broken_drops: + symbol = rom.sym('FIX_BROKEN_DROPS') + rom.write_byte(symbol, 0x01) + + # Autocollect incoming_item_id for magic jars are swapped in vanilla code + rom.write_int16(0xA88066, 0x0044) # Change GI_MAGIC_SMALL to GI_MAGIC_LARGE + rom.write_int16(0xA88072, 0x0043) # Change GI_MAGIC_LARGE to GI_MAGIC_SMALL + else: + # Remove deku shield drop from spirit pot because it's "vanilla behavior" + # Replace actor parameters in scene 06, room 27 actor list + rom.write_int16(0x2BDC0C6, 0x603F) + + # Have the Gold Skulltula Count in the pause menu turn red when equal to the + # available number of skulls in the world instead of 100. + rom.write_int16(0xBB340E, world.available_tokens) + + # replace_songs(world, rom, + # frog=world.ocarina_songs in ('frog', 'all'), + # warp=world.ocarina_songs in ('warp', 'all'), + # ) + + # Sets the torch count to open the entrance to Shadow Temple + if world.easier_fire_arrow_entry: + torch_count = world.fae_torch_count + rom.write_byte(0xCA61E3, torch_count) + + if world.blue_fire_arrows: + rom.write_byte(0xC230C1, 0x29) #Adds AT_TYPE_OTHER to arrows to allow collision with red ice + rom.write_byte(0xDB38FE, 0xEF) #disables ice arrow collision on secondary cylinder for red ice crystals + rom.write_byte(0xC9F036, 0x10) #enable ice arrow collision on mud walls + #increase cylinder radius/height for red ice sheets + rom.write_byte(0xDB391B, 0x50) + rom.write_byte(0xDB3927, 0x5A) if world.starting_age == 'adult': # When starting as adult, the pedestal doesn't handle child default equips when going back child the first time, so we have to equip them ourselves @@ -1782,17 +2344,24 @@ def update_scrub_text(message, text_replacement, default_price, price, item_name save_context.equip_current_items(world.starting_age) save_context.write_save_table(rom) + # Write numeric seed truncated to 32 bits for rng seeding + # Overwritten with new seed every time a new rng value is generated + rng_seed = world.multiworld.slot_seeds[world.player].getrandbits(32) + rom.write_int32(rom.sym('RNG_SEED_INT'), rng_seed) + # Static initial seed value for one-time random actions like the Hylian Shield discount + rom.write_int32(rom.sym('RANDOMIZER_RNG_SEED'), rng_seed) + # Write data into AP autotracking context - rom.write_int32(rom.sym('DUNGEON_IS_MQ_ADDRESS'), rom.sym('cfg_dungeon_is_mq')) - rom.write_int32(rom.sym('DUNGEON_REWARDS_ADDRESS'), rom.sym('cfg_dungeon_rewards')) + rom.write_int32(rom.sym('DUNGEON_IS_MQ_ADDRESS'), rom.sym('CFG_DUNGEON_IS_MQ')) + rom.write_int32(rom.sym('DUNGEON_REWARDS_ADDRESS'), rom.sym('CFG_DUNGEON_REWARDS')) rom.write_byte(rom.sym('BIG_POE_COUNT'), world.big_poe_count) if world.enhance_map_compass: rom.write_byte(rom.sym('ENHANCE_MAP_COMPASS'), 0x01) - if world.enhance_map_compass or world.misc_hints: + if world.enhance_map_compass or 'altar' in world.misc_hints: rom.write_byte(rom.sym('SHOW_DUNGEON_REWARDS'), 0x01) if world.shuffle_smallkeys == 'remove': rom.write_byte(rom.sym('SMALL_KEY_SHUFFLE'), 0x01) - elif world.shuffle_smallkeys in ['overworld', 'any_dungeon', 'keysanity']: + elif world.shuffle_smallkeys in ['overworld', 'any_dungeon', 'keysanity', 'regional']: rom.write_byte(rom.sym('SMALL_KEY_SHUFFLE'), 0x02) if world.shuffle_scrubs != 'off': rom.write_byte(rom.sym('SHUFFLE_SCRUBS'), 0x01) @@ -1821,10 +2390,10 @@ def add_to_extended_object_table(rom, object_id, object_file): rom.write_int32s(extended_object_table + extended_id * 8, [object_file.start, object_file.end]) -item_row_struct = struct.Struct('>BBHHBBIIhh') # Match item_row_t in item_table.h +item_row_struct = struct.Struct('>BBHHBBIIhhBxxx') # Match item_row_t in item_table.h item_row_fields = [ 'base_item_id', 'action_id', 'text_id', 'object_id', 'graphic_id', 'chest_type', - 'upgrade_fn', 'effect_fn', 'effect_arg1', 'effect_arg2', + 'upgrade_fn', 'effect_fn', 'effect_arg1', 'effect_arg2', 'collectible' ] @@ -1842,26 +2411,44 @@ def write_rom_item(rom, item_id, item): rom.write_bytes(addr, row_bytes) +texture_struct = struct.Struct('>HBxxxxxII') # Match texture_t in textures.c +texture_fields = ['texture_id', 'file_buf', 'file_vrom_start', 'file_size'] + +def read_rom_texture(rom, texture_id): + addr = rom.sym('texture_table') + (texture_id * texture_struct.size) + row_bytes = rom.read_bytes(addr, texture_struct.size) + row = texture_struct.unpack(row_bytes) + return {texture_fields[i]: row[i] for i in range(len(texture_fields))} +def write_rom_texture(rom, texture_id, texture): + addr = rom.sym('texture_table') + (texture_id * texture_struct.size) + row = [texture[f] for f in texture_fields] + row_bytes = texture_struct.pack(*row) + rom.write_bytes(addr, row_bytes) + def get_override_table(world): return list(filter(lambda val: val != None, map(partial(get_override_entry, world), world.multiworld.get_filled_locations(world.player)))) -override_struct = struct.Struct('>xBBBHBB') # match override_t in get_items.c +override_struct = struct.Struct('>BBHHBB') # match override_t in get_items.c def get_override_table_bytes(override_table): return b''.join(sorted(itertools.starmap(override_struct.pack, override_table))) def get_override_entry(ootworld, location): + # Don't add freestanding items, pots/crates, beehives to the override table if they're disabled. We use this check to determine how to draw and interact with them + if location.type in ["ActorOverride", "Freestanding", "RupeeTower", "Pot", "Crate", "FlyingPot", "SmallCrate", "Beehive"] and location.disabled != DisableType.ENABLED: + return None + scene = location.scene default = location.default player_id = 0 if ootworld.player == location.item.player else min(location.item.player, 255) if location.item.game != 'Ocarina of Time': # This is an AP sendable. It's guaranteed to not be None. if location.item.advancement: - item_id = 0xCB + item_id = AP_PROGRESSION else: - item_id = 0xCC + item_id = AP_JUNK else: item_id = location.item.index if None in [scene, default, item_id]: @@ -1873,18 +2460,26 @@ def get_override_entry(ootworld, location): else: looks_like_item_id = 0 - if location.type in ['NPC', 'BossHeart']: + if location.type in ['NPC', 'Scrub', 'BossHeart']: type = 0 elif location.type == 'Chest': type = 1 default &= 0x1F - elif location.type == 'Collectable': + elif location.type in ['Freestanding', 'Pot', 'Crate', 'FlyingPot', 'SmallCrate', 'RupeeTower', 'Beehive']: + type = 6 + if not (isinstance(location.default, list) or isinstance(location.default, tuple)): + raise Exception("Not right") + if(isinstance(location.default, list)): + default = location.default[0] + room, scene_setup, flag = default + default = (room << 8) + (scene_setup << 14) + flag + elif location.type in ['Collectable', 'ActorOverride']: type = 2 elif location.type == 'GS Token': type = 3 elif location.type == 'Shop' and not (isinstance(location.item, OOTItem) and location.item.type == 'Shop'): type = 0 - elif location.type == 'GrottoNPC' and not (isinstance(location.item, OOTItem) and location.item.type == 'Shop'): + elif location.type == 'GrottoScrub' and not (isinstance(location.item, OOTItem) and location.item.type == 'Shop'): type = 4 elif location.type in ['Song', 'Cutscene']: type = 5 @@ -2073,30 +2668,51 @@ def set_jabu_stone_actor(rom, actor_id, actor, scene): get_actor_list(rom, set_jabu_stone_actor) -def get_locked_doors(rom, world): - def locked_door(rom, actor_id, actor, scene): +def set_spirit_shortcut_actors(rom): + def set_spirit_shortcut(rom, actor_id, actor, scene): + if actor_id == 0x018e and scene == 6: # raise initial elevator height + rom.write_int16(actor + 4, 0x015E) + + get_actor_list(rom, set_spirit_shortcut) + + +# Gets a dict of doors to unlock based on settings +# Returns: dict with entries address: [byte_offset, bit] +# Where: address = rom address of the door +# byte_offset = the offset, in bytes, of the door flag in the SaveContext +# bit = the bit offset within the byte for the door flag +# If small keys are set to remove, returns all small key doors +# If boss keys are set to remove, returns boss key doors +# If ganons boss key is set to remove, returns ganons boss key doors +# If pot/crate shuffle is enabled, returns the first ganon's boss key door so that it can be unlocked separately to allow access to the room w/ the pots.. +def get_doors_to_unlock(rom, world): + def get_door_to_unlock(rom, actor_id, actor, scene): actor_var = rom.read_int16(actor + 14) - actor_type = actor_var >> 6 - actor_flag = actor_var & 0x003F + door_type = actor_var >> 6 + switch_flag = actor_var & 0x003F - flag_id = (1 << actor_flag) - flag_byte = 3 - (actor_flag >> 3) - flag_bits = 1 << (actor_flag & 0x07) + flag_id = (1 << switch_flag) + flag_byte = 3 - (switch_flag >> 3) + flag_bits = 1 << (switch_flag & 0x07) - # If locked door, set the door's unlock flag + # Return small key doors that should be unlocked if world.shuffle_smallkeys == 'remove': - if actor_id == 0x0009 and actor_type == 0x02: + if actor_id == 0x0009 and door_type == 0x02: return [0x00D4 + scene * 0x1C + 0x04 + flag_byte, flag_bits] - if actor_id == 0x002E and actor_type == 0x0B: + if actor_id == 0x002E and door_type == 0x0B: return [0x00D4 + scene * 0x1C + 0x04 + flag_byte, flag_bits] - # If boss door, set the door's unlock flag - if (world.shuffle_bosskeys == 'remove' and scene != 0x0A) or ( - world.shuffle_ganon_bosskey == 'remove' and scene == 0x0A and not world.triforce_hunt): - if actor_id == 0x002E and actor_type == 0x05: + # Return Boss Doors that should be unlocked + if (world.shuffle_bosskeys == 'remove' and scene != 0x0A) or (world.shuffle_ganon_bosskey == 'remove' and scene == 0x0A) or (world.shuffle_pots and scene == 0x0A and switch_flag == 0x15): + if actor_id == 0x002E and door_type == 0x05: return [0x00D4 + scene * 0x1C + 0x04 + flag_byte, flag_bits] - return get_actor_list(rom, locked_door) + return get_actor_list(rom, get_door_to_unlock) + + +# Too difficult to keep the censor around with arbitrary item names being passed in here. +def create_fake_name(item_name): + return item_name + "???" def place_shop_items(rom, world, shop_items, messages, locations, init_shop_id=False): @@ -2122,7 +2738,7 @@ def place_shop_items(rom, world, shop_items, messages, locations, init_shop_id=F else: rom_item = read_rom_item(rom, item_display.index) else: - display_index = 0xCB if location.item.advancement else 0xCC + display_index = AP_PROGRESSION if location.item.advancement else AP_JUNK rom_item = read_rom_item(rom, display_index) shop_objs.add(rom_item['object_id']) @@ -2185,12 +2801,8 @@ def place_shop_items(rom, world, shop_items, messages, locations, init_shop_id=F return shop_objs -def create_fake_name(item_name): - return item_name + "???" - - -def boss_reward_index(world, boss_name): - code = world.get_location(boss_name).item.special['item_id'] +def boss_reward_index(item): + code = item.special['item_id'] if code >= 0x6C: return code - 0x6C else: @@ -2198,24 +2810,60 @@ def boss_reward_index(world, boss_name): def configure_dungeon_info(rom, world): - mq_enable = (world.mq_dungeons_random or world.mq_dungeons != 0 and world.mq_dungeons != 12) + mq_enable = (world.mq_dungeons_mode == 'random' or world.mq_dungeons_random or world.mq_dungeons_count != 0 and world.mq_dungeons_count != 12) enhance_map_compass = world.enhance_map_compass - bosses = ['Queen Gohma', 'King Dodongo', 'Barinade', 'Phantom Ganon', - 'Volvagia', 'Morpha', 'Twinrova', 'Bongo Bongo'] - dungeon_rewards = [boss_reward_index(world, boss) for boss in bosses] - codes = ['Deku Tree', 'Dodongos Cavern', 'Jabu Jabus Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Bottom of the Well', 'Ice Cavern', 'Tower (N/A)', 'Gerudo Training Ground', 'Hideout (N/A)', 'Ganons Castle'] + + dungeon_rewards = [0xff] * 14 + dungeon_reward_areas = bytearray() + for reward in ('Kokiri Emerald', 'Goron Ruby', 'Zora Sapphire', 'Light Medallion', 'Forest Medallion', 'Fire Medallion', 'Water Medallion', 'Shadow Medallion', 'Spirit Medallion'): + location = next(filter(lambda loc: loc.item.name == reward, world.multiworld.get_filled_locations(player=world.player))) + area = HintArea.at(location) + dungeon_reward_areas += area.short_name.encode('ascii').ljust(0x16) + b'\0' + if area.is_dungeon: + dungeon_rewards[codes.index(area.dungeon_name)] = boss_reward_index(location.item) + dungeon_is_mq = [1 if world.dungeon_mq.get(c) else 0 for c in codes] - rom.write_int32(rom.sym('cfg_dungeon_info_enable'), 1) - rom.write_int32(rom.sym('cfg_dungeon_info_mq_enable'), int(mq_enable)) - rom.write_int32(rom.sym('cfg_dungeon_info_mq_need_map'), int(enhance_map_compass)) - rom.write_int32(rom.sym('cfg_dungeon_info_reward_enable'), int(world.misc_hints or enhance_map_compass)) - rom.write_int32(rom.sym('cfg_dungeon_info_reward_need_compass'), int(enhance_map_compass)) - rom.write_int32(rom.sym('cfg_dungeon_info_reward_need_altar'), int(not enhance_map_compass)) - rom.write_bytes(rom.sym('cfg_dungeon_rewards'), dungeon_rewards) - rom.write_bytes(rom.sym('cfg_dungeon_is_mq'), dungeon_is_mq) + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_ENABLE'), 2) + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_MQ_ENABLE'), int(mq_enable)) + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_MQ_NEED_MAP'), int(enhance_map_compass)) + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_REWARD_ENABLE'), int('altar' in world.misc_hints or enhance_map_compass)) + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_REWARD_NEED_COMPASS'), (2 if False else 1) if enhance_map_compass else 0) #TODO set to 2 if boss reward shuffle and/or mixed pools bosses are on + rom.write_int32(rom.sym('CFG_DUNGEON_INFO_REWARD_NEED_ALTAR'), int(not enhance_map_compass)) + # if hasattr(world, 'mix_entrance_pools'): + # rom.write_int32(rom.sym('CFG_DUNGEON_INFO_REWARD_SUMMARY_ENABLE'), int('Boss' not in world.mix_entrance_pools)) + rom.write_bytes(rom.sym('CFG_DUNGEON_REWARDS'), dungeon_rewards) + rom.write_bytes(rom.sym('CFG_DUNGEON_IS_MQ'), dungeon_is_mq) + rom.write_bytes(rom.sym('CFG_DUNGEON_REWARD_AREAS'), dungeon_reward_areas) + +# Overwrite an actor in rom w/ the actor data from LocationList +def patch_actor_override(location, rom: Rom): + addresses = location.address1 + patch = location.address2 + if addresses is not None and patch is not None: + for address in addresses: + rom.write_bytes(address, patch) + +# Patch rupee towers (circular patterns of rupees) to include their flag in their actor initialization data z rotation. +# Also used for goron pot, shadow spinning pots +def patch_rupee_tower(location, rom: Rom): + flag = location.default + if(isinstance(location.default, tuple)): + room, scene_setup, flag = location.default + elif isinstance(location.default, list): + room, scene_setup, flag = location.default[0] + flag = flag + (room << 8) + if location.address1: + for address in location.address1: + rom.write_bytes(address + 12, flag.to_bytes(2, byteorder='big')) + +# Patch the first boss key door in ganons tower that leads to the room w/ the pots +def patch_ganons_tower_bk_door(rom: Rom, flag): + var = (0x05 << 6) + (flag & 0x3F) + bytes = [(var & 0xFF00) >> 8, var & 0xFF] + rom.write_bytes(0x2EE30FE, bytes) diff --git a/worlds/oot/Regions.py b/worlds/oot/Regions.py index eeb9c70581fc..3fa946ba24bb 100644 --- a/worlds/oot/Regions.py +++ b/worlds/oot/Regions.py @@ -1,6 +1,7 @@ from enum import unique, Enum from BaseClasses import Region +from .Hints import HintArea # copied from OoT-Randomizer/Region.py @@ -31,8 +32,10 @@ class TimeOfDay(object): class OOTRegion(Region): game: str = "Ocarina of Time" - def __init__(self, name: str, type, hint, player: int): + def __init__(self, name: str, type, hint, player: int): super(OOTRegion, self).__init__(name, type, hint, player) + self._oot_hint = None + self.alt_hint = None self.price = None self.time_passes = False self.provides_time = TimeOfDay.NONE @@ -40,6 +43,7 @@ def __init__(self, name: str, type, hint, player: int): self.dungeon = None self.pretty_name = None self.font_color = None + self.is_boss_room = False def get_scene(self): if self.scene: @@ -61,3 +65,15 @@ def can_reach(self, state): else: # we don't care about age return self in state.child_reachable_regions[self.player] or self in state.adult_reachable_regions[self.player] + def set_hint_data(self, hint): + if self.dungeon: + self._oot_hint = HintArea.for_dungeon(self.dungeon) + else: + self._oot_hint = HintArea[hint] + self.hint_text = str(self._oot_hint) + + # This is too generic of a name to risk not breaking in the future. + # This lets us possibly switch it out later if AP starts using it. + @property + def hint(self): + return self._oot_hint diff --git a/worlds/oot/RuleParser.py b/worlds/oot/RuleParser.py index e6de24609a10..0791ad5d1a3f 100644 --- a/worlds/oot/RuleParser.py +++ b/worlds/oot/RuleParser.py @@ -508,3 +508,6 @@ def has_bottle(self, node): def can_live_dmg(self, node): return ast.parse(f"state._oot_can_live_dmg({self.player}, {node.args[0].value})", mode='eval').body + + def region_has_shortcuts(self, node): + return ast.parse(f"state._oot_region_has_shortcuts({self.player}, '{node.args[0].value}')", mode='eval').body diff --git a/worlds/oot/Rules.py b/worlds/oot/Rules.py index 1ad4d9e486ab..1f44cebdcfe2 100644 --- a/worlds/oot/Rules.py +++ b/worlds/oot/Rules.py @@ -1,7 +1,6 @@ from collections import deque import logging -from .SaveContext import SaveContext from .Regions import TimeOfDay from .Items import oot_is_item_of_type @@ -21,9 +20,18 @@ def _oot_has_medallions(self, count, player): def _oot_has_dungeon_rewards(self, count, player): return self.has_group("rewards", player, count) + def _oot_has_hearts(self, count, player): + containers = self.count("Heart Container", player) + pieces = self.count("Piece of Heart", player) + self.count("Piece of Heart (Treasure Chest Game)", player) + total_hearts = 3 + containers + int(pieces / 4) + return total_hearts >= count + def _oot_has_bottle(self, player): return self.has_group("logic_bottles", player) + def _oot_has_beans(self, player): + return self.has("Magic Bean Pack", player) or self.has("Buy Magic Bean", player) or self.has("Magic Bean", player, 10) + # Used for fall damage and other situations where damage is unavoidable def _oot_can_live_dmg(self, player, hearts): mult = self.multiworld.worlds[player].damage_multiplier @@ -32,6 +40,11 @@ def _oot_can_live_dmg(self, player, hearts): else: return mult != 'ohko' + # Figure out if the given region's parent dungeon has shortcuts enabled + def _oot_region_has_shortcuts(self, player, regionname): + return self.multiworld.worlds[player].region_has_shortcuts(regionname) + + # This function operates by assuming different behavior based on the "level of recursion", handled manually. # If it's called while self.age[player] is None, then it will set the age variable and then attempt to reach the region. # If self.age[player] is not None, then it will compare it to the 'age' parameter, and return True iff they are equal. @@ -125,12 +138,14 @@ def set_rules(ootworld): # is_child = ootworld.parser.parse_rule('is_child') guarantee_hint = ootworld.parser.parse_rule('guarantee_hint') - for location in filter(lambda location: location.name in ootworld.shop_prices or 'Deku Scrub' in location.name, ootworld.get_locations()): + for location in filter(lambda location: location.name in ootworld.shop_prices + or location.type in {'Scrub', 'GrottoScrub'}, ootworld.get_locations()): if location.type == 'Shop': location.price = ootworld.shop_prices[location.name] add_rule(location, create_shop_rule(location, ootworld.parser)) - if ootworld.dungeon_mq['Forest Temple'] and ootworld.shuffle_bosskeys == 'dungeon' and ootworld.shuffle_smallkeys == 'dungeon' and ootworld.tokensanity == 'off': + if (ootworld.dungeon_mq['Forest Temple'] and ootworld.shuffle_bosskeys == 'dungeon' + and ootworld.shuffle_smallkeys == 'dungeon' and ootworld.tokensanity == 'off'): # First room chest needs to be a small key. Make sure the boss key isn't placed here. location = world.get_location('Forest Temple MQ First Room Chest', player) forbid_item(location, 'Boss Key (Forest Temple)', ootworld.player) @@ -141,11 +156,6 @@ def set_rules(ootworld): location = world.get_location('Sheik in Ice Cavern', player) add_item_rule(location, lambda item: item.player == player and oot_is_item_of_type(item, 'Song')) - if ootworld.skip_child_zelda: - # If skip child zelda is on, the item at Song from Impa must be giveable by the save context. - location = world.get_location('Song from Impa', player) - add_item_rule(location, lambda item: item.name in SaveContext.giveable_items) - for name in ootworld.always_hints: add_rule(world.get_location(name, player), guarantee_hint) diff --git a/worlds/oot/SaveContext.py b/worlds/oot/SaveContext.py index 27156b27f028..53a11ca0fc3c 100644 --- a/worlds/oot/SaveContext.py +++ b/worlds/oot/SaveContext.py @@ -1,4 +1,37 @@ from itertools import chain +from enum import IntEnum +from .ItemPool import IGNORE_LOCATION + +class Scenes(IntEnum): + # Dungeons + DEKU_TREE = 0x00 + DODONGOS_CAVERN = 0x01 + KING_DODONGO_LOBBY = 0x12 + JABU_JABU = 0x02 + FOREST_TEMPLE = 0x03 + FIRE_TEMPLE = 0x04 + WATER_TEMPLE = 0x05 + SPIRIT_TEMPLE = 0x06 + SHADOW_TEMPLE = 0x07 + # Bean patch scenes + GRAVEYARD = 0x53 + ZORAS_RIVER = 0x54 + KOKIRI_FOREST = 0x55 + LAKE_HYLIA = 0x57 + GERUDO_VALLEY = 0x5A + LOST_WOODS = 0x5B + DESERT_COLOSSUS = 0x5C + DEATH_MOUNTAIN_TRAIL = 0x60 + DEATH_MOUNTAIN_CRATER = 0x61 + +class FlagType(IntEnum): + CHEST = 0x00 + SWITCH = 0x01 + CLEAR = 0x02 + COLLECT = 0x03 + # 0x04 unused + VISITED_ROOM = 0x05 + VISITED_FLOOR = 0x06 class Address(): prev_address = None @@ -156,6 +189,14 @@ def write_save_entry(self, address): else: address.get_writes(self) + def write_permanent_flag(self, scene, type, byte_offset, bit_values): + # Save format is described here: https://wiki.cloudmodding.com/oot/Save_Format + # Permanent flags start at offset 0x00D4. Each scene has 7 types of flags, one + # of which is unused. Each flag type is 4 bytes wide per-scene, thus each scene + # takes 28 (0x1C) bytes. + # Scenes and FlagType enums are defined for increased readability when using + # this function. + self.write_bits(0x00D4 + scene * 0x1C + type * 0x04 + byte_offset, bit_values) def set_ammo_max(self): ammo_maxes = { @@ -218,18 +259,16 @@ def give_health(self, health): self.addresses['health_capacity'].value = int(health) * 0x10 self.addresses['health'].value = int(health) * 0x10 - self.addresses['quest']['heart_pieces'].value = int((health % 1) * 4) + self.addresses['quest']['heart_pieces'].value = int((health % 1) * 4) * 0x10 - def give_raw_item(self, item): + def give_item(self, world, item, count=1): if item.endswith(')'): - item_base, count = item[:-1].split(' (', 1) - if count.isdigit(): - return self.give_item(item_base, count=int(count)) - return self.give_item(item) + item_base, implicit_count = item[:-1].split(' (', 1) + if implicit_count.isdigit(): + item = item_base + count *= int(implicit_count) - - def give_item(self, item, count=1): if item in SaveContext.bottle_types: self.give_bottle(item, count) elif item in ["Piece of Heart", "Piece of Heart (Treasure Chest Game)"]: @@ -237,9 +276,53 @@ def give_item(self, item, count=1): elif item == "Heart Container": self.give_health(count) elif item == "Bombchu Item": - self.give_bombchu_item() + self.give_bombchu_item(world) + elif item == IGNORE_LOCATION: + pass # used to disable some skipped and inaccessible locations elif item in SaveContext.save_writes_table: - for address, value in SaveContext.save_writes_table[item].items(): + if item.startswith('Small Key Ring ('): + dungeon = item[:-1].split(' (', 1)[1] + save_writes = { + "Forest Temple" : { + 'keys.forest': 6 if world.dungeon_mq[dungeon] else 5, + 'total_keys.forest': 6 if world.dungeon_mq[dungeon] else 5, + }, + "Fire Temple" : { + 'keys.fire': 5 if world.dungeon_mq[dungeon] else 8, + 'total_keys.fire': 5 if world.dungeon_mq[dungeon] else 8, + }, + "Water Temple" : { + 'keys.water': 2 if world.dungeon_mq[dungeon] else 6, + 'total_keys.water': 2 if world.dungeon_mq[dungeon] else 6, + }, + "Spirit Temple" : { + 'keys.spirit': 7 if world.dungeon_mq[dungeon] else 5, + 'total_keys.spirit': 7 if world.dungeon_mq[dungeon] else 5, + }, + "Shadow Temple" : { + 'keys.shadow': 6 if world.dungeon_mq[dungeon] else 5, + 'total_keys.shadow': 6 if world.dungeon_mq[dungeon] else 5, + }, + "Bottom of the Well" : { + 'keys.botw': 2 if world.dungeon_mq[dungeon] else 3, + 'total_keys.botw': 2 if world.dungeon_mq[dungeon] else 3, + }, + "Gerudo Training Ground" : { + 'keys.gtg': 3 if world.dungeon_mq[dungeon] else 9, + 'total_keys.gtg': 3 if world.dungeon_mq[dungeon] else 9, + }, + "Thieves Hideout" : { + 'keys.fortress': 4, + 'total_keys.fortress': 4, + }, + "Ganons Castle" : { + 'keys.gc': 3 if world.dungeon_mq[dungeon] else 2, + 'total_keys.gc': 3 if world.dungeon_mq[dungeon] else 2, + }, + }[dungeon] + else: + save_writes = SaveContext.save_writes_table[item] + for address, value in save_writes.items(): if value is None: value = count elif isinstance(value, list): @@ -269,8 +352,8 @@ def give_item(self, item, count=1): raise ValueError("Cannot give unknown starting item %s" % item) - def give_bombchu_item(self): - self.give_item("Bombchus", 0) + def give_bombchu_item(self, world): + self.give_item(world, "Bombchus", 0) def equip_default_items(self, age): @@ -455,7 +538,7 @@ def get_save_context_addresses(self): 'kokiri_sword' : Address(0x009C, size=2, mask=0x0001), 'master_sword' : Address(0x009C, size=2, mask=0x0002), 'biggoron_sword' : Address(0x009C, size=2, mask=0x0004), - 'broken_knife' : Address(0x009C, size=2, mask=0x0008), + 'broken_giants_knife' : Address(0x009C, size=2, mask=0x0008), 'deku_shield' : Address(0x009C, size=2, mask=0x0010), 'hylian_shield' : Address(0x009C, size=2, mask=0x0020), 'mirror_shield' : Address(0x009C, size=2, mask=0x0040), @@ -610,7 +693,24 @@ def get_save_context_addresses(self): }, 'defense_hearts' : Address(size=1, max=20), 'gs_tokens' : Address(size=2, max=100), + 'total_keys' : { # Upper half of unused word in own scene + 'deku' : Address(0xD4 + 0x1C * 0x00 + 0x10, size=2), + 'dodongo' : Address(0xD4 + 0x1C * 0x01 + 0x10, size=2), + 'jabu' : Address(0xD4 + 0x1C * 0x02 + 0x10, size=2), + 'forest' : Address(0xD4 + 0x1C * 0x03 + 0x10, size=2), + 'fire' : Address(0xD4 + 0x1C * 0x04 + 0x10, size=2), + 'water' : Address(0xD4 + 0x1C * 0x05 + 0x10, size=2), + 'spirit' : Address(0xD4 + 0x1C * 0x06 + 0x10, size=2), + 'shadow' : Address(0xD4 + 0x1C * 0x07 + 0x10, size=2), + 'botw' : Address(0xD4 + 0x1C * 0x08 + 0x10, size=2), + 'ice' : Address(0xD4 + 0x1C * 0x09 + 0x10, size=2), + 'gt' : Address(0xD4 + 0x1C * 0x0A + 0x10, size=2), + 'gtg' : Address(0xD4 + 0x1C * 0x0B + 0x10, size=2), + 'fortress' : Address(0xD4 + 0x1C * 0x0C + 0x10, size=2), + 'gc' : Address(0xD4 + 0x1C * 0x0D + 0x10, size=2), + }, 'triforce_pieces' : Address(0xD4 + 0x1C * 0x48 + 0x10, size=4), # Unused word in scene x48 + 'pending_freezes' : Address(0xD4 + 0x1C * 0x49 + 0x10, size=4), # Unused word in scene x49 } @@ -667,7 +767,7 @@ def get_save_context_addresses(self): 'odd_mushroom' : 0x30, 'odd_potion' : 0x31, 'poachers_saw' : 0x32, - 'broken_gorons_sword' : 0x33, + 'broken_sword' : 0x33, 'prescription' : 0x34, 'eyeball_frog' : 0x35, 'eye_drops' : 0x36, @@ -789,6 +889,11 @@ def get_save_context_addresses(self): 'item_slot.stick' : 'stick', 'upgrades.stick_upgrade' : [2,3], }, + "Deku Stick": { + 'item_slot.stick' : 'stick', + 'upgrades.stick_upgrade' : 1, + 'ammo.stick' : None, + }, "Deku Sticks": { 'item_slot.stick' : 'stick', 'upgrades.stick_upgrade' : 1, @@ -849,7 +954,7 @@ def get_save_context_addresses(self): "Cojiro" : {'item_slot.adult_trade' : 'cojiro'}, "Odd Mushroom" : {'item_slot.adult_trade' : 'odd_mushroom'}, "Poachers Saw" : {'item_slot.adult_trade' : 'poachers_saw'}, - "Broken Sword" : {'item_slot.adult_trade' : 'broken_knife'}, + "Broken Sword" : {'item_slot.adult_trade' : 'broken_sword'}, "Prescription" : {'item_slot.adult_trade' : 'prescription'}, "Eyeball Frog" : {'item_slot.adult_trade' : 'eyeball_frog'}, "Eyedrops" : {'item_slot.adult_trade' : 'eye_drops'}, @@ -916,17 +1021,116 @@ def get_save_context_addresses(self): 'double_magic' : [False, True], }, "Rupee" : {'rupees' : None}, + "Rupee (Treasure Chest Game)" : {'rupees' : None}, "Rupees" : {'rupees' : None}, "Magic Bean Pack" : { 'item_slot.beans' : 'beans', 'ammo.beans' : 10 }, + "Ice Trap" : {'pending_freezes': None}, "Triforce Piece" : {'triforce_pieces': None}, + "Boss Key (Forest Temple)" : {'dungeon_items.forest.boss_key': True}, + "Boss Key (Fire Temple)" : {'dungeon_items.fire.boss_key': True}, + "Boss Key (Water Temple)" : {'dungeon_items.water.boss_key': True}, + "Boss Key (Spirit Temple)" : {'dungeon_items.spirit.boss_key': True}, + "Boss Key (Shadow Temple)" : {'dungeon_items.shadow.boss_key': True}, + "Boss Key (Ganons Castle)" : {'dungeon_items.gt.boss_key': True}, + "Compass (Deku Tree)" : {'dungeon_items.deku.compass': True}, + "Compass (Dodongos Cavern)" : {'dungeon_items.dodongo.compass': True}, + "Compass (Jabu Jabus Belly)" : {'dungeon_items.jabu.compass': True}, + "Compass (Forest Temple)" : {'dungeon_items.forest.compass': True}, + "Compass (Fire Temple)" : {'dungeon_items.fire.compass': True}, + "Compass (Water Temple)" : {'dungeon_items.water.compass': True}, + "Compass (Spirit Temple)" : {'dungeon_items.spirit.compass': True}, + "Compass (Shadow Temple)" : {'dungeon_items.shadow.compass': True}, + "Compass (Bottom of the Well)" : {'dungeon_items.botw.compass': True}, + "Compass (Ice Cavern)" : {'dungeon_items.ice.compass': True}, + "Map (Deku Tree)" : {'dungeon_items.deku.map': True}, + "Map (Dodongos Cavern)" : {'dungeon_items.dodongo.map': True}, + "Map (Jabu Jabus Belly)" : {'dungeon_items.jabu.map': True}, + "Map (Forest Temple)" : {'dungeon_items.forest.map': True}, + "Map (Fire Temple)" : {'dungeon_items.fire.map': True}, + "Map (Water Temple)" : {'dungeon_items.water.map': True}, + "Map (Spirit Temple)" : {'dungeon_items.spirit.map': True}, + "Map (Shadow Temple)" : {'dungeon_items.shadow.map': True}, + "Map (Bottom of the Well)" : {'dungeon_items.botw.map': True}, + "Map (Ice Cavern)" : {'dungeon_items.ice.map': True}, + "Small Key (Forest Temple)" : { + 'keys.forest': None, + 'total_keys.forest': None, + }, + "Small Key (Fire Temple)" : { + 'keys.fire': None, + 'total_keys.fire': None, + }, + "Small Key (Water Temple)" : { + 'keys.water': None, + 'total_keys.water': None, + }, + "Small Key (Spirit Temple)" : { + 'keys.spirit': None, + 'total_keys.spirit': None, + }, + "Small Key (Shadow Temple)" : { + 'keys.shadow': None, + 'total_keys.shadow': None, + }, + "Small Key (Bottom of the Well)" : { + 'keys.botw': None, + 'total_keys.botw': None, + }, + "Small Key (Gerudo Training Ground)" : { + 'keys.gtg': None, + 'total_keys.gtg': None, + }, + "Small Key (Thieves Hideout)" : { + 'keys.fortress': None, + 'total_keys.fortress': None, + }, + "Small Key (Ganons Castle)" : { + 'keys.gc': None, + 'total_keys.gc': None, + }, + #HACK: these counts aren't used since exact counts based on whether the dungeon is MQ are defined above, + # but the entries need to be there for key rings to be valid starting items + "Small Key Ring (Forest Temple)" : { + 'keys.forest': 6, + 'total_keys.forest': 6, + }, + "Small Key Ring (Fire Temple)" : { + 'keys.fire': 8, + 'total_keys.fire': 8, + }, + "Small Key Ring (Water Temple)" : { + 'keys.water': 6, + 'total_keys.water': 6, + }, + "Small Key Ring (Spirit Temple)" : { + 'keys.spirit': 7, + 'total_keys.spirit': 7, + }, + "Small Key Ring (Shadow Temple)" : { + 'keys.shadow': 6, + 'total_keys.shadow': 6, + }, + "Small Key Ring (Bottom of the Well)" : { + 'keys.botw': 3, + 'total_keys.botw': 3, + }, + "Small Key Ring (Gerudo Training Ground)" : { + 'keys.gtg': 9, + 'total_keys.gtg': 9, + }, + "Small Key Ring (Thieves Hideout)" : { + 'keys.fortress': 4, + 'total_keys.fortress': 4, + }, + "Small Key Ring (Ganons Castle)" : { + 'keys.gc': 3, + 'total_keys.gc': 3, + }, } - giveable_items = set(chain(save_writes_table.keys(), bottle_types.keys(), - ["Piece of Heart", "Piece of Heart (Treasure Chest Game)", "Heart Container", "Rupee (1)"])) - equipable_items = { 'equips_adult' : { @@ -977,7 +1181,6 @@ def get_save_context_addresses(self): 'bombchu', 'nayrus_love', 'beans', - 'child_trade', 'bottle_1', 'bottle_2', 'bottle_3', diff --git a/worlds/oot/SceneFlags.py b/worlds/oot/SceneFlags.py new file mode 100644 index 000000000000..6e475136fe90 --- /dev/null +++ b/worlds/oot/SceneFlags.py @@ -0,0 +1,120 @@ +from math import ceil + +from .LocationList import location_table + +# Create a dict of dicts of the format: +# { +# scene_number_n : { +# room_setup_number: max_flags +# } +# } +# where room_setup_number defines the room + scene setup as ((setup << 6) + room) for scene n +# and max_flags is the highest used enemy flag for that setup/room +def get_collectible_flag_table(world): + scene_flags = {} + alt_list = [] + for i in range(0, 101): + max_room_num = 0 + max_enemy_flag = 0 + scene_flags[i] = {} + for location in world.get_locations(): + if(location.scene == i and location.type in ["Freestanding", "Pot", "FlyingPot", "Crate", "SmallCrate", "Beehive", "RupeeTower"]): + default = location.default + if(isinstance(default, list)): #List of alternative room/setup/flag to use + primary_tuple = default[0] + for c in range(1,len(default)): + alt_list.append((location, default[c], primary_tuple)) + default = location.default[0] #Use the first tuple as the primary tuple + if(isinstance(default, tuple)): + room, setup, flag = default + room_setup = room + (setup << 6) + if(room_setup in scene_flags[i].keys()): + curr_room_max_flag = scene_flags[i][room_setup] + if flag > curr_room_max_flag: + scene_flags[i][room_setup] = flag + else: + scene_flags[i][room_setup] = flag + if len(scene_flags[i].keys()) == 0: + del scene_flags[i] + #scene_flags.append((i, max_enemy_flag)) + return (scene_flags, alt_list) + +# Create a byte array from the scene flag table created by get_collectible_flag_table +def get_collectible_flag_table_bytes(scene_flag_table): + num_flag_bytes = 0 + bytes = bytearray() + bytes.append(len(scene_flag_table.keys())) + for scene_id in scene_flag_table.keys(): + rooms = scene_flag_table[scene_id] + room_count = len(rooms.keys()) + bytes.append(scene_id) + bytes.append(room_count) + for room in rooms: + bytes.append(room) + bytes.append((num_flag_bytes & 0xFF00) >> 8) + bytes.append(num_flag_bytes & 0x00FF ) + num_flag_bytes += ceil((rooms[room] + 1) / 8) + + return bytes, num_flag_bytes + +def get_alt_list_bytes(alt_list): + bytes = bytearray() + for entry in alt_list: + location, alt, primary = entry + room, scene_setup, flag = alt + alt_override = (room << 8) + (scene_setup << 14) + flag + room, scene_setup, flag = primary + primary_override = (room << 8) + (scene_setup << 14) + flag + bytes.append(location.scene) + bytes.append(0x06) + bytes.append((alt_override & 0xFF00) >> 8) + bytes.append(alt_override & 0xFF) + bytes.append(location.scene) + bytes.append(0x06) + bytes.append((primary_override & 0xFF00) >> 8) + bytes.append(primary_override & 0xFF) + return bytes + +# AP method to retrieve address + bit for each item +# Based on get_collectible_flag_offset in the C code +def get_collectible_flag_addresses(world, collectible_scene_flags_table): + + # Ported directly from get_items.c + def get_collectible_flag_offset(scene: int, room: int, setup_id: int) -> int: + num_scenes = collectible_scene_flags_table[0] + index = 1 + scene_id = 0 + room_id = 0 + room_setup_count = 0 + room_byte_offset = 0 + # Loop through collectible_scene_flags_table until we find the right scene + while num_scenes > 0: + scene_id = collectible_scene_flags_table[index] + room_setup_count = collectible_scene_flags_table[index+1] + index += 2 + if scene_id == scene: # found the scene + # Loop through each room/setup combination until we find the right one. + for i in range(room_setup_count): + room_id = collectible_scene_flags_table[index] & 0x3F + setup_id_temp = (collectible_scene_flags_table[index] & 0xC0) >> 6 + room_byte_offset = (collectible_scene_flags_table[index+1] << 8) + collectible_scene_flags_table[index+2] + index += 3 + if room_id == room and setup_id_temp == setup_id: + return room_byte_offset + else: # Not the right scene, skip to the next one + index += 3 * room_setup_count + num_scenes -= 1 + return -1 + + collectible_flag_addresses = {} + for location in world.get_locations(): + if location.type in ["Freestanding", "Pot", "FlyingPot", "Crate", "SmallCrate", "Beehive", "RupeeTower"]: + default = location.default + if isinstance(default, list): + default = default[0] + room, setup, flag = default + offset = get_collectible_flag_offset(location.scene, room, setup) + item_id = location.address + collectible_flag_addresses[item_id] = [offset, flag] + return collectible_flag_addresses + diff --git a/worlds/oot/Utils.py b/worlds/oot/Utils.py index 075d7e8f066f..c2444cd1fee9 100644 --- a/worlds/oot/Utils.py +++ b/worlds/oot/Utils.py @@ -4,7 +4,7 @@ import Utils from functools import lru_cache -__version__ = '6.1.0 f.LUM' +__version__ = '7.1.0' def data_path(*args): @@ -97,3 +97,9 @@ def compare_version(a, b): if sa[i] < sb[i]: return -1 return 0 + +# https://stackoverflow.com/a/23146126 +def find_last(source_list, sought_element): + for reverse_index, element in enumerate(reversed(source_list)): + if element == sought_element: + return len(source_list) - 1 - reverse_index diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index f7a35026b07d..7dfdbaa9cd44 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -1,7 +1,8 @@ import logging import threading import copy -from typing import Optional, List, AbstractSet # remove when 3.8 support is dropped +import functools +from typing import Optional, List, AbstractSet, Union # remove when 3.8 support is dropped from collections import Counter, deque from string import printable @@ -10,8 +11,9 @@ from .Location import OOTLocation, LocationFactory, location_name_to_id from .Entrance import OOTEntrance from .EntranceShuffle import shuffle_random_entrances, entrance_shuffle_table, EntranceShuffleError +from .Hints import HintArea from .Items import OOTItem, item_table, oot_data_to_ap_id, oot_is_item_of_type -from .ItemPool import generate_itempool, add_dungeon_items, get_junk_item, get_junk_pool +from .ItemPool import generate_itempool, get_junk_item, get_junk_pool from .Regions import OOTRegion, TimeOfDay from .Rules import set_rules, set_shop_rules, set_entrances_based_rules from .RuleParser import Rule_AST_Transformer @@ -21,22 +23,19 @@ from .DungeonList import dungeon_table, create_dungeons from .LogicTricks import normalized_name_tricks from .Rom import Rom -from .Patches import patch_rom +from .Patches import OoTContainer, patch_rom from .N64Patch import create_patch_file from .Cosmetics import patch_cosmetics from .Hints import hint_dist_keys, get_hint_area, buildWorldGossipHints from .HintList import getRequiredHints -from .SaveContext import SaveContext -from Utils import get_options, output_path +from Utils import get_options from BaseClasses import MultiWorld, CollectionState, RegionType, Tutorial, LocationProgressType -from Options import Range, Toggle, OptionList +from Options import Range, Toggle, VerifyKeys from Fill import fill_restrictive, fast_fill, FillError from worlds.generic.Rules import exclusion_rules, add_item_rule from ..AutoWorld import World, AutoLogicRegister, WebWorld -location_id_offset = 67000 - # OoT's generate_output doesn't benefit from more than 2 threads, instead it uses a lot of memory. i_o_limiter = threading.Semaphore(2) @@ -100,13 +99,18 @@ class OOTWorld(World): option_definitions: dict = oot_options topology_present: bool = True item_name_to_id = {item_name: oot_data_to_ap_id(data, False) for item_name, data in item_table.items() if - data[2] is not None} + data[2] is not None and item_name not in { + 'Keaton Mask', 'Skull Mask', 'Spooky Mask', 'Bunny Hood', + 'Mask of Truth', 'Goron Mask', 'Zora Mask', 'Gerudo Mask', + 'Buy Magic Bean', 'Milk', + 'Small Key', 'Map', 'Compass', 'Boss Key', + }} # These are items which aren't used, but have get-item values location_name_to_id = location_name_to_id web = OOTWeb() - data_version = 2 + data_version = 3 - required_client_version = (0, 3, 2) + required_client_version = (0, 3, 6) item_name_groups = { # internal groups @@ -133,6 +137,7 @@ class OOTWorld(World): def __init__(self, world, player): self.hint_data_available = threading.Event() + self.collectible_flags_available = threading.Event() super(OOTWorld, self).__init__(world, player) @classmethod @@ -148,7 +153,7 @@ def generate_early(self): option_value = int(result) elif isinstance(result, Toggle): option_value = bool(result) - elif isinstance(result, OptionList): + elif isinstance(result, VerifyKeys): option_value = result.value else: option_value = result.current_key @@ -161,6 +166,7 @@ def generate_early(self): self.songs_as_items = False self.file_hash = [self.multiworld.random.randint(0, 31) for i in range(5)] self.connect_name = ''.join(self.multiworld.random.choices(printable, k=16)) + self.collectible_flag_addresses = {} # Incompatible option handling # ER and glitched logic are not compatible; glitched takes priority @@ -171,7 +177,15 @@ def generate_early(self): self.shuffle_overworld_entrances = False self.owl_drops = False self.warp_songs = False - self.spawn_positions = False + self.spawn_positions = 'off' + + # Fix spawn positions option + new_sp = [] + if self.spawn_positions in {'child', 'both'}: + new_sp.append('child') + if self.spawn_positions in {'adult', 'both'}: + new_sp.append('adult') + self.spawn_positions = new_sp # Closed forest and adult start are not compatible; closed forest takes priority if self.open_forest == 'closed': @@ -180,13 +194,9 @@ def generate_early(self): if (self.shuffle_interior_entrances == 'all' or self.shuffle_overworld_entrances or self.warp_songs or self.spawn_positions): self.open_forest = 'closed_deku' - # Skip child zelda and shuffle egg are not compatible; skip-zelda takes priority - if self.skip_child_zelda: - self.shuffle_weird_egg = False - # Ganon boss key should not be in itempool in triforce hunt if self.triforce_hunt: - self.shuffle_ganon_bosskey = 'remove' + self.shuffle_ganon_bosskey = 'triforce' # If songs/keys locked to own world by settings, add them to local_items local_types = [] @@ -196,7 +206,7 @@ def generate_early(self): local_types += ['Map', 'Compass'] if self.shuffle_smallkeys != 'keysanity': local_types.append('SmallKey') - if self.shuffle_fortresskeys != 'keysanity': + if self.shuffle_hideoutkeys != 'keysanity': local_types.append('HideoutSmallKey') if self.shuffle_bosskeys != 'keysanity': local_types.append('BossKey') @@ -219,15 +229,6 @@ def generate_early(self): chosen_trials = self.multiworld.random.sample(trial_list, self.trials) # chooses a list of trials to NOT skip self.skipped_trials = {trial: (trial not in chosen_trials) for trial in trial_list} - # Determine which dungeons are MQ - # Possible future plan: allow user to pick which dungeons are MQ - if self.logic_rules == 'glitchless': - mq_dungeons = self.multiworld.random.sample(dungeon_table, self.mq_dungeons) - else: - self.mq_dungeons = 0 - mq_dungeons = [] - self.dungeon_mq = {item['name']: (item in mq_dungeons) for item in dungeon_table} - # Determine tricks in logic if self.logic_rules == 'glitchless': for trick in self.logic_tricks: @@ -245,15 +246,31 @@ def generate_early(self): setattr(self, trick['name'], True) # Not implemented for now, but needed to placate the generator. Remove as they are implemented - self.mq_dungeons_random = False # this will be a deprecated option later self.ocarina_songs = False # just need to pull in the OcarinaSongs module self.mix_entrance_pools = False self.decouple_entrances = False + self.available_tokens = 100 + # Deprecated LACS options + self.lacs_condition = 'vanilla' + self.lacs_stones = 3 + self.lacs_medallions = 6 + self.lacs_rewards = 9 + self.lacs_tokens = 100 + self.lacs_hearts = 20 + # RuleParser hack + self.triforce_goal_per_world = self.triforce_goal # Set internal names used by the OoT generator self.keysanity = self.shuffle_smallkeys in ['keysanity', 'remove', 'any_dungeon', 'overworld'] self.trials_random = self.multiworld.trials[self.player].randomized - self.mq_dungeons_random = self.multiworld.mq_dungeons[self.player].randomized + self.mq_dungeons_random = self.multiworld.mq_dungeons_count[self.player].randomized + self.easier_fire_arrow_entry = self.fae_torch_count < 24 + + if self.misc_hints: + self.misc_hints = ['ganondorf', 'altar', 'warp_songs', 'dampe_diary', + '10_skulltulas', '20_skulltulas', '30_skulltulas', '40_skulltulas', '50_skulltulas'] + else: + self.misc_hints = [] # Hint stuff self.clearer_hints = True # this is being enforced since non-oot items do not have non-clear hint text @@ -261,8 +278,11 @@ def generate_early(self): self.required_locations = [] self.empty_areas = {} self.major_item_locations = [] + self.hinted_dungeon_reward_locations = {} # ER names + self.shuffle_special_dungeon_entrances = self.shuffle_dungeon_entrances == 'all' + self.shuffle_dungeon_entrances = self.shuffle_dungeon_entrances != 'off' self.ensure_tod_access = (self.shuffle_interior_entrances != 'off') or self.shuffle_overworld_entrances or self.spawn_positions self.entrance_shuffle = (self.shuffle_interior_entrances != 'off') or self.shuffle_grotto_entrances or self.shuffle_dungeon_entrances or \ self.shuffle_overworld_entrances or self.owl_drops or self.warp_songs or self.spawn_positions @@ -275,6 +295,60 @@ def generate_early(self): elif self.shopsanity == 'fixed_number': self.shopsanity = str(self.shop_slots) + # Rename options + self.dungeon_shortcuts_choice = self.dungeon_shortcuts + if self.dungeon_shortcuts_choice == 'random_dungeons': + self.dungeon_shortcuts_choice = 'random' + self.key_rings_list = {s.replace("'", "") for s in self.key_rings_list} + self.dungeon_shortcuts = {s.replace("'", "") for s in self.dungeon_shortcuts_list} + self.mq_dungeons_specific = {s.replace("'", "") for s in self.mq_dungeons_list} + # self.empty_dungeons_specific = {s.replace("'", "") for s in self.empty_dungeons_list} + + # Determine which dungeons have key rings. + keyring_dungeons = [d['name'] for d in dungeon_table if d['small_key']] + ['Thieves Hideout'] + if self.key_rings == 'off': + self.key_rings = [] + elif self.key_rings == 'all': + self.key_rings = keyring_dungeons + elif self.key_rings == 'choose': + self.key_rings = self.key_rings_list + elif self.key_rings == 'random_dungeons': + self.key_rings = self.multiworld.random.sample(keyring_dungeons, + self.multiworld.random.randint(0, len(keyring_dungeons))) + + # Determine which dungeons are MQ. Not compatible with glitched logic. + mq_dungeons = set() + if self.logic_rules != 'glitched': + if self.mq_dungeons_mode == 'mq': + mq_dungeons = dungeon_table.keys() + elif self.mq_dungeons_mode == 'specific': + mq_dungeons = self.mq_dungeons_specific + elif self.mq_dungeons_mode == 'count': + mq_dungeons = self.multiworld.random.sample(dungeon_table, self.mq_dungeons_count) + else: + self.mq_dungeons_mode = 'count' + self.mq_dungeons_count = 0 + self.dungeon_mq = {item['name']: (item['name'] in mq_dungeons) for item in dungeon_table} + + # Empty dungeon placeholder for the moment + self.empty_dungeons = {name: False for name in self.dungeon_mq} + + # Determine which dungeons have shortcuts. Not compatible with glitched logic. + shortcut_dungeons = ['Deku Tree', 'Dodongos Cavern', \ + 'Jabu Jabus Belly', 'Forest Temple', 'Fire Temple', \ + 'Water Temple', 'Shadow Temple', 'Spirit Temple'] + if self.logic_rules != 'glitched': + if self.dungeon_shortcuts_choice == 'off': + self.dungeon_shortcuts = set() + elif self.dungeon_shortcuts_choice == 'all': + self.dungeon_shortcuts = set(shortcut_dungeons) + elif self.dungeon_shortcuts_choice == 'random': + self.dungeon_shortcuts = self.multiworld.random.sample(shortcut_dungeons, + self.multiworld.random.randint(0, len(shortcut_dungeons))) + # == 'choice', leave as previous + else: + self.dungeon_shortcuts = set() + # fixing some options # Fixes starting time spelling: "witching_hour" -> "witching-hour" self.starting_tod = self.starting_tod.replace('_', '-') @@ -286,7 +360,7 @@ def generate_early(self): self.added_hint_types = {} self.item_added_hint_types = {} self.hint_exclusions = set() - if self.skip_child_zelda: + if self.shuffle_child_trade == 'skip_child_zelda': self.hint_exclusions.add('Song from Impa') self.hint_type_overrides = {} self.item_hint_type_overrides = {} @@ -317,7 +391,7 @@ def generate_early(self): self.always_hints = [hint.name for hint in getRequiredHints(self)] # Determine items which are not considered advancement based on settings. They will never be excluded. - self.nonadvancement_items = {'Double Defense', 'Ice Arrows'} + self.nonadvancement_items = {'Double Defense'} if (self.damage_multiplier != 'ohko' and self.damage_multiplier != 'quadruple' and self.shuffle_scrubs == 'off' and not self.shuffle_grotto_entrances): # nayru's love may be required to prevent forced damage @@ -330,6 +404,22 @@ def generate_early(self): # Serenade and Prelude are never required unless one of those settings is enabled self.nonadvancement_items.add('Serenade of Water') self.nonadvancement_items.add('Prelude of Light') + if not self.blue_fire_arrows: + # Ice Arrows serve no purpose if they're not hacked to have one + self.nonadvancement_items.add('Ice Arrows') + if not self.bombchus_in_logic: + # Nonrenewable bombchus are not a default logical explosive + self.nonadvancement_items.update({ + 'Bombchus (5)', + 'Bombchus (10)', + 'Bombchus (20)', + }) + if not (self.bridge == 'hearts' or self.shuffle_ganon_bosskey == 'hearts'): + self.nonadvancement_items.update({ + 'Heart Container', + 'Piece of Heart', + 'Piece of Heart (Treasure Chest Game)' + }) if self.logic_rules == 'glitchless': # Both two-handed swords can be required in glitch logic, so only consider them nonprogression in glitchless self.nonadvancement_items.add('Biggoron Sword') @@ -350,10 +440,14 @@ def load_regions_from_json(self, file_path): new_region.font_color = region['font_color'] if 'scene' in region: new_region.scene = region['scene'] - if 'hint' in region: - new_region.hint_text = region['hint'] if 'dungeon' in region: new_region.dungeon = region['dungeon'] + if 'is_boss_room' in region: + new_region.is_boss_room = region['is_boss_room'] + if 'hint' in region: + new_region.set_hint_data(region['hint']) + if 'alt_hint' in region: + new_region.alt_hint = HintArea[region['alt_hint']] if 'time_passes' in region: new_region.time_passes = region['time_passes'] new_region.provides_time = TimeOfDay.ALL @@ -404,7 +498,7 @@ def load_regions_from_json(self, file_path): def set_scrub_prices(self): # Get Deku Scrub Locations - scrub_locations = [location for location in self.get_locations() if 'Deku Scrub' in location.name] + scrub_locations = [location for location in self.get_locations() if location.type in {'Scrub', 'GrottoScrub'}] scrub_dictionary = {} self.scrub_prices = {} for location in scrub_locations: @@ -442,7 +536,18 @@ def random_shop_prices(self): for location in region.locations: if location.type == 'Shop': if location.name[-1:] in shop_item_indexes[:shop_item_count]: - self.shop_prices[location.name] = int(self.multiworld.random.betavariate(1.5, 2) * 60) * 5 + if self.shopsanity_prices == 'normal': + self.shop_prices[location.name] = int(self.multiworld.random.betavariate(1.5, 2) * 60) * 5 + elif self.shopsanity_prices == 'affordable': + self.shop_prices[location.name] = 10 + elif self.shopsanity_prices == 'starting_wallet': + self.shop_prices[location.name] = self.multiworld.random.randrange(0,100,5) + elif self.shopsanity_prices == 'adults_wallet': + self.shop_prices[location.name] = self.multiworld.random.randrange(0,201,5) + elif self.shopsanity_prices == 'giants_wallet': + self.shop_prices[location.name] = self.multiworld.random.randrange(0,501,5) + elif self.shopsanity_prices == 'tycoons_wallet': + self.shop_prices[location.name] = self.multiworld.random.randrange(0,1000,5) def fill_bosses(self, bossCount=9): boss_location_names = ( @@ -471,6 +576,7 @@ def fill_bosses(self, bossCount=9): loc = prize_locs.pop() loc.place_locked_item(item) self.multiworld.itempool.remove(item) + self.hinted_dungeon_reward_locations[item.name] = loc def create_item(self, name: str): if name in item_table: @@ -495,11 +601,13 @@ def create_regions(self): # create and link regions else: world_type = 'Glitched World' overworld_data_path = data_path(world_type, 'Overworld.json') + bosses_data_path = data_path(world_type, 'Bosses.json') menu = OOTRegion('Menu', None, None, self.player) start = OOTEntrance(self.player, self.multiworld, 'New Game', menu) menu.exits.append(start) self.multiworld.regions.append(menu) self.load_regions_from_json(overworld_data_path) + self.load_regions_from_json(bosses_data_path) start.connect(self.multiworld.get_region('Root', self.player)) create_dungeons(self) self.parser.create_delayed_rules() @@ -514,9 +622,10 @@ def create_regions(self): # create and link regions exit.connect(self.multiworld.get_region(exit.vanilla_connected_region, self.player)) def create_items(self): + # Uniquely rename drop locations for each region and erase them from the spoiler + set_drop_location_names(self) # Generate itempool generate_itempool(self) - add_dungeon_items(self) # Add dungeon rewards rewardlist = sorted(list(self.item_name_groups['rewards'])) self.itempool += map(self.create_item, rewardlist) @@ -529,16 +638,13 @@ def create_items(self): self.remove_from_start_inventory.remove(item.name) removed_items.append(item.name) else: - if item.name not in SaveContext.giveable_items: - raise Exception(f"Invalid OoT starting item: {item.name}") - else: - self.starting_items[item.name] += 1 - if item.type == 'Song': - self.songs_as_items = True - # Call the junk fill and get a replacement - if item in self.itempool: - self.itempool.remove(item) - self.itempool.append(self.create_item(*get_junk_item(pool=junk_pool))) + self.starting_items[item.name] += 1 + if item.type == 'Song': + self.songs_as_items = True + # Call the junk fill and get a replacement + if item in self.itempool: + self.itempool.remove(item) + self.itempool.append(self.create_item(*get_junk_item(pool=junk_pool))) if self.start_with_consumables: self.starting_items['Deku Sticks'] = 30 self.starting_items['Deku Nuts'] = 40 @@ -548,6 +654,9 @@ def create_items(self): self.multiworld.itempool += self.itempool self.remove_from_start_inventory.extend(removed_items) + # Fill boss prizes. needs to happen before entrance shuffle + self.fill_bosses() + def set_rules(self): # This has to run AFTER creating items but BEFORE set_entrances_based_rules if self.entrance_shuffle: @@ -587,12 +696,6 @@ def set_rules(self): def generate_basic(self): # mostly killing locations that shouldn't exist by settings - # Fill boss prizes. needs to happen before killing unreachable locations - self.fill_bosses() - - # Uniquely rename drop locations for each region and erase them from the spoiler - set_drop_location_names(self) - # Gather items for ice trap appearances self.fake_items = [] if self.ice_trap_appearance in ['major_only', 'anything']: @@ -628,72 +731,32 @@ def generate_basic(self): # mostly killing locations that shouldn't exist by se def pre_fill(self): - def get_names(items): - for item in items: - yield item.name - - # Place/set rules for dungeon items - itempools = { - 'dungeon': set(), - 'overworld': set(), - 'any_dungeon': set(), - } - any_dungeon_locations = [] - for dungeon in self.dungeons: - itempools['dungeon'] = set() - # Put the dungeon items into their appropriate pools. - # Build in reverse order since we need to fill boss key first and pop() returns the last element - if self.shuffle_mapcompass in itempools: - itempools[self.shuffle_mapcompass].update(get_names(dungeon.dungeon_items)) - if self.shuffle_smallkeys in itempools: - itempools[self.shuffle_smallkeys].update(get_names(dungeon.small_keys)) - shufflebk = self.shuffle_bosskeys if dungeon.name != 'Ganons Castle' else self.shuffle_ganon_bosskey - if shufflebk in itempools: - itempools[shufflebk].update(get_names(dungeon.boss_key)) - - # We can't put a dungeon item on the end of a dungeon if a song is supposed to go there. Make sure not to include it. - dungeon_locations = [loc for region in dungeon.regions for loc in region.locations - if loc.item is None and ( - self.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)] - if itempools['dungeon']: # only do this if there's anything to shuffle - dungeon_itempool = [item for item in self.multiworld.itempool if item.player == self.player and item.name in itempools['dungeon']] - for item in dungeon_itempool: - self.multiworld.itempool.remove(item) - self.multiworld.random.shuffle(dungeon_locations) - fill_restrictive(self.multiworld, self.multiworld.get_all_state(False), dungeon_locations, - dungeon_itempool, True, True) - any_dungeon_locations.extend(dungeon_locations) # adds only the unfilled locations - - # Now fill items that can go into any dungeon. Retrieve the Gerudo Fortress keys from the pool if necessary - if self.shuffle_fortresskeys == 'any_dungeon': - itempools['any_dungeon'].add('Small Key (Thieves Hideout)') - if itempools['any_dungeon']: - any_dungeon_itempool = [item for item in self.multiworld.itempool if item.player == self.player and item.name in itempools['any_dungeon']] - for item in any_dungeon_itempool: - self.multiworld.itempool.remove(item) - any_dungeon_itempool.sort(key=lambda item: - {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0)) - self.multiworld.random.shuffle(any_dungeon_locations) - fill_restrictive(self.multiworld, self.multiworld.get_all_state(False), any_dungeon_locations, - any_dungeon_itempool, True, True) - - # If anything is overworld-only, fill into local non-dungeon locations - if self.shuffle_fortresskeys == 'overworld': - itempools['overworld'].add('Small Key (Thieves Hideout)') - if itempools['overworld']: - overworld_itempool = [item for item in self.multiworld.itempool if item.player == self.player and item.name in itempools['overworld']] - for item in overworld_itempool: - self.multiworld.itempool.remove(item) - overworld_itempool.sort(key=lambda item: - {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0)) - non_dungeon_locations = [loc for loc in self.get_locations() if - not loc.item and loc not in any_dungeon_locations and - (loc.type != 'Shop' or loc.name in self.shop_prices) and - (loc.type != 'Song' or self.shuffle_song_items != 'song') and - (loc.name not in dungeon_song_locations or self.shuffle_song_items != 'dungeon')] - self.multiworld.random.shuffle(non_dungeon_locations) - fill_restrictive(self.multiworld, self.multiworld.get_all_state(False), non_dungeon_locations, - overworld_itempool, True, True) + # Place dungeon items + special_fill_types = ['GanonBossKey', 'BossKey', 'SmallKey', 'HideoutSmallKey', 'Map', 'Compass'] + world_items = [item for item in self.multiworld.itempool if item.player == self.player] + for fill_stage in special_fill_types: + stage_items = list(filter(lambda item: oot_is_item_of_type(item, fill_stage), world_items)) + if not stage_items: + continue + if fill_stage in ['GanonBossKey', 'HideoutSmallKey']: + locations = gather_locations(self.multiworld, fill_stage, self.player) + if isinstance(locations, list): + for item in stage_items: + self.multiworld.itempool.remove(item) + self.multiworld.random.shuffle(locations) + fill_restrictive(self.multiworld, self.multiworld.get_all_state(False), locations, stage_items, + single_player_placement=True, lock=True) + else: + for dungeon_info in dungeon_table: + dungeon_name = dungeon_info['name'] + locations = gather_locations(self.multiworld, fill_stage, self.player, dungeon=dungeon_name) + if isinstance(locations, list): + dungeon_items = list(filter(lambda item: dungeon_name in item.name, stage_items)) + for item in dungeon_items: + self.multiworld.itempool.remove(item) + self.multiworld.random.shuffle(locations) + fill_restrictive(self.multiworld, self.multiworld.get_all_state(False), locations, dungeon_items, + single_player_placement=True, lock=True) # Place songs # 5 built-in retries because this section can fail sometimes @@ -778,10 +841,10 @@ def get_names(items): # If skip child zelda is active and Song from Impa is unfilled, put a local giveable item into it. impa = self.multiworld.get_location("Song from Impa", self.player) - if self.skip_child_zelda: + if self.shuffle_child_trade == 'skip_child_zelda': if impa.item is None: - item_to_place = self.multiworld.random.choice(list(item for item in self.multiworld.itempool if - item.player == self.player and item.name in SaveContext.giveable_items)) + item_to_place = self.multiworld.random.choice( + list(item for item in self.multiworld.itempool if item.player == self.player)) impa.place_locked_item(item_to_place) self.multiworld.itempool.remove(item_to_place) # Give items to startinventory @@ -801,11 +864,14 @@ def get_names(items): ganon_junk_fill = 2 / 9 elif self.bridge == 'tokens': ganon_junk_fill = self.bridge_tokens / 100 + elif self.bridge == 'hearts': + ganon_junk_fill = self.bridge_hearts / 20 elif self.bridge == 'open': ganon_junk_fill = 0 else: raise Exception("Unexpected bridge setting") + ganon_junk_fill = min(1, ganon_junk_fill) gc = next(filter(lambda dungeon: dungeon.name == 'Ganons Castle', self.dungeons)) locations = [loc.name for region in gc.regions for loc in region.locations if loc.item is None] junk_fill_locations = self.multiworld.random.sample(locations, round(len(locations) * ganon_junk_fill)) @@ -816,48 +882,12 @@ def get_names(items): for loc in self.get_locations(): if loc.address is not None and ( not loc.show_in_spoiler or oot_is_item_of_type(loc.item, 'Shop') - or (self.skip_child_zelda and loc.name in ['HC Zeldas Letter', 'Song from Impa'])): + or (self.shuffle_child_trade == 'skip_child_zelda' and loc.name in ['HC Zeldas Letter', 'Song from Impa'])): loc.address = None # Handle item-linked dungeon items and songs @classmethod def stage_pre_fill(cls, multiworld: MultiWorld): - - def gather_locations(item_type: str, players: AbstractSet[int], dungeon: str = '') -> Optional[List[OOTLocation]]: - type_to_setting = { - 'Song': 'shuffle_song_items', - 'Map': 'shuffle_mapcompass', - 'Compass': 'shuffle_mapcompass', - 'SmallKey': 'shuffle_smallkeys', - 'BossKey': 'shuffle_bosskeys', - 'HideoutSmallKey': 'shuffle_fortresskeys', - 'GanonBossKey': 'shuffle_ganon_bosskey', - } - fill_opts = {p: getattr(multiworld.worlds[p], type_to_setting[item_type]) for p in players} - locations = [] - if item_type == 'Song': - if any(map(lambda v: v == 'any', fill_opts.values())): - return None - for player, option in fill_opts.items(): - if option == 'song': - condition = lambda location: location.type == 'Song' - elif option == 'dungeon': - condition = lambda location: location.name in dungeon_song_locations - locations += filter(condition, multiworld.get_unfilled_locations(player=player)) - else: - if any(map(lambda v: v == 'keysanity', fill_opts.values())): - return None - for player, option in fill_opts.items(): - if option == 'dungeon': - condition = lambda location: getattr(location.parent_region.dungeon, 'name', None) == dungeon - elif option == 'overworld': - condition = lambda location: location.parent_region.dungeon is None - elif option == 'any_dungeon': - condition = lambda location: location.parent_region.dungeon is not None - locations += filter(condition, multiworld.get_unfilled_locations(player=player)) - - return locations - special_fill_types = ['Song', 'GanonBossKey', 'BossKey', 'SmallKey', 'HideoutSmallKey', 'Map', 'Compass'] for group_id, group in multiworld.groups.items(): if group['game'] != cls.game: @@ -869,7 +899,7 @@ def gather_locations(item_type: str, players: AbstractSet[int], dungeon: str = ' continue if fill_stage in ['Song', 'GanonBossKey', 'HideoutSmallKey']: # No need to subdivide by dungeon name - locations = gather_locations(fill_stage, group['players']) + locations = gather_locations(multiworld, fill_stage, group['players']) if isinstance(locations, list): for item in group_stage_items: multiworld.itempool.remove(item) @@ -889,7 +919,7 @@ def gather_locations(item_type: str, players: AbstractSet[int], dungeon: str = ' # Perform the fill task once per dungeon for dungeon_info in dungeon_table: dungeon_name = dungeon_info['name'] - locations = gather_locations(fill_stage, group['players'], dungeon=dungeon_name) + locations = gather_locations(multiworld, fill_stage, group['players'], dungeon=dungeon_name) if isinstance(locations, list): group_dungeon_items = list(filter(lambda item: dungeon_name in item.name, group_stage_items)) for item in group_dungeon_items: @@ -916,12 +946,20 @@ def generate_output(self, output_directory: str): rom = Rom(file=get_options()['oot_options']['rom_file']) if self.hints != 'none': buildWorldGossipHints(self) + # try: patch_rom(self, rom) + # except Exception as e: + # print(e) patch_cosmetics(self, rom) rom.update_header() - create_patch_file(rom, output_path(output_directory, outfile_name + '.apz5')) + patch_data = create_patch_file(rom) rom.restore() + apz5 = OoTContainer(patch_data, outfile_name, output_directory, + player=self.player, + player_name=self.multiworld.get_player_name(self.player)) + apz5.write() + # Write entrances to spoiler log all_entrances = self.get_shuffled_entrances() all_entrances.sort(reverse=True, key=lambda x: x.name) @@ -966,7 +1004,7 @@ def hint_type_players(hint_type: str) -> set: items_by_region[player][r.hint_text] = {'dungeon': False, 'weight': 0, 'is_barren': True} for d in multiworld.worlds[player].dungeons: items_by_region[player][d.hint_text] = {'dungeon': True, 'weight': 0, 'is_barren': True} - del (items_by_region[player]["Link's Pocket"]) + del (items_by_region[player]["Link's pocket"]) del (items_by_region[player][None]) if item_hint_players: # loop once over all locations to gather major items. Check oot locations for barren/woth if needed @@ -980,7 +1018,7 @@ def hint_type_players(hint_type: str) -> set: if loc.game == "Ocarina of Time" and loc.item.code and (not loc.locked or (oot_is_item_of_type(loc.item, 'Song') or (oot_is_item_of_type(loc.item, 'SmallKey') and multiworld.worlds[loc.player].shuffle_smallkeys == 'any_dungeon') or - (oot_is_item_of_type(loc.item, 'HideoutSmallKey') and multiworld.worlds[loc.player].shuffle_fortresskeys == 'any_dungeon') or + (oot_is_item_of_type(loc.item, 'HideoutSmallKey') and multiworld.worlds[loc.player].shuffle_hideoutkeys == 'any_dungeon') or (oot_is_item_of_type(loc.item, 'BossKey') and multiworld.worlds[loc.player].shuffle_bosskeys == 'any_dungeon') or (oot_is_item_of_type(loc.item, 'GanonBossKey') and multiworld.worlds[loc.player].shuffle_ganon_bosskey == 'any_dungeon'))): if loc.player in barren_hint_players: @@ -1017,22 +1055,42 @@ def hint_type_players(hint_type: str) -> set: for autoworld in multiworld.get_game_worlds("Ocarina of Time"): autoworld.hint_data_available.set() + def fill_slot_data(self): + self.collectible_flags_available.wait() + return { + 'collectible_override_flags': self.collectible_override_flags, + 'collectible_flag_offsets': self.collectible_flag_offsets + } + def modify_multidata(self, multidata: dict): # Replace connect name multidata['connect_names'][self.connect_name] = multidata['connect_names'][self.multiworld.player_name[self.player]] + # Remove undesired items from start_inventory + # This is because we don't want them to show up in the autotracker, + # they just don't exist in-game. + for item_name in self.remove_from_start_inventory: + item_id = self.item_name_to_id.get(item_name, None) + if item_id is None: + continue + multidata["precollected_items"][self.player].remove(item_id) + + def extend_hint_information(self, er_hint_data: dict): + + er_hint_data[self.player] = {} + hint_entrances = set() for entrance in entrance_shuffle_table: - hint_entrances.add(entrance[1][0]) - if len(entrance) > 2: - hint_entrances.add(entrance[2][0]) + if entrance[0] in {'Dungeon', 'DungeonSpecial', 'Interior', 'SpecialInterior', 'Grotto', 'Grave'}: + hint_entrances.add(entrance[1][0]) # Get main hint entrance to region. # If the region is directly adjacent to a hint-entrance, we return that one. # If it's in a dungeon, scan all the entrances for all the regions in the dungeon. # This should terminate on the first region anyway, but we scan everything to be safe. # If it's one of the special cases, go one level deeper. + # If it's a boss room, go one level deeper to the boss door region, which is in a dungeon. # Otherwise return None. def get_entrance_to_region(region): special_case_regions = { @@ -1048,33 +1106,50 @@ def get_entrance_to_region(region): for e in r.entrances: if e.name in hint_entrances: return e - if region.name in special_case_regions: + if region.is_boss_room or region.name in special_case_regions: return get_entrance_to_region(region.entrances[0].parent_region) return None - # Remove undesired items from start_inventory - # This is because we don't want them to show up in the autotracker, - # they just don't exist in-game. - for item_name in self.remove_from_start_inventory: - item_id = self.item_name_to_id.get(item_name, None) - if item_id is None: - continue - multidata["precollected_items"][self.player].remove(item_id) - - # Add ER hint data - if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances: - er_hint_data = {} + if (self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances + or self.shuffle_grotto_entrances or self.shuffle_bosses != 'off'): for region in self.regions: if not any(bool(loc.address) for loc in region.locations): # check if region has any non-event locations continue main_entrance = get_entrance_to_region(region) - if main_entrance is not None and main_entrance.shuffled: + if main_entrance is not None and (main_entrance.shuffled or (region.is_boss_room and self.shuffle_bosses != 'off')): for location in region.locations: if type(location.address) == int: - er_hint_data[location.address] = main_entrance.name - multidata['er_hint_data'][self.player] = er_hint_data + er_hint_data[self.player][location.address] = main_entrance.name + logger.debug(f"Set {location.name} hint data to {main_entrance.name}") + + # Key ring handling: + # Key rings are multiple items glued together into one, so we need to give + # the appropriate number of keys in the collection state when they are + # picked up. + def collect(self, state: CollectionState, item: OOTItem) -> bool: + if item.advancement and item.special and item.special.get('alias', False): + alt_item_name, count = item.special.get('alias') + state.prog_items[alt_item_name, self.player] += count + return True + return super().collect(state, item) + + def remove(self, state: CollectionState, item: OOTItem) -> bool: + if item.advancement and item.special and item.special.get('alias', False): + alt_item_name, count = item.special.get('alias') + state.prog_items[alt_item_name, self.player] -= count + if state.prog_items[alt_item_name, self.player] < 1: + del (state.prog_items[alt_item_name, self.player]) + return True + return super().remove(state, item) + # Helper functions + def region_has_shortcuts(self, regionname): + region = self.get_region(regionname) + if not region.dungeon: + region = region.entrances[0].parent_region + return region.dungeon.name in self.dungeon_shortcuts + def get_shufflable_entrances(self, type=None, only_primary=False): return [entrance for entrance in self.multiworld.get_entrances() if (entrance.player == self.player and (type == None or entrance.type == type) and @@ -1115,7 +1190,7 @@ def is_major_item(self, item: OOTItem): return False if item.type == 'SmallKey' and self.shuffle_smallkeys in ['dungeon', 'vanilla']: return False - if item.type == 'HideoutSmallKey' and self.shuffle_fortresskeys == 'vanilla': + if item.type == 'HideoutSmallKey' and self.shuffle_hideoutkeys == 'vanilla': return False if item.type == 'BossKey' and self.shuffle_bosskeys in ['dungeon', 'vanilla']: return False @@ -1130,7 +1205,7 @@ def get_state_with_complete_itempool(self): all_state = self.multiworld.get_all_state(use_cache=False) # Remove event progression items for item, player in all_state.prog_items: - if player == self.player and (item not in item_table or (item_table[item][2] is None and item_table[item][0] != 'DungeonReward')): + if player == self.player and (item not in item_table or item_table[item][2] is None): all_state.prog_items[(item, player)] = 0 # Remove all events and checked locations all_state.locations_checked = {loc for loc in all_state.locations_checked if loc.player != self.player} @@ -1152,3 +1227,63 @@ def get_state_with_complete_itempool(self): def get_filler_item_name(self) -> str: return get_junk_item(count=1, pool=get_junk_pool(self))[0] + + +def valid_dungeon_item_location(world: OOTWorld, option: str, dungeon: str, loc: OOTLocation) -> bool: + if option == 'dungeon': + return (getattr(loc.parent_region.dungeon, 'name', None) == dungeon + and (world.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)) + elif option == 'any_dungeon': + return (loc.parent_region.dungeon is not None + and (world.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)) + elif option == 'overworld': + return (loc.parent_region.dungeon is None + and (loc.type != 'Shop' or loc.name in world.shop_prices) + and (world.shuffle_song_items != 'song' or loc.type != 'Song') + and (world.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)) + elif option == 'regional': + color = HintArea.for_dungeon(dungeon).color + return (HintArea.at(loc).color == color + and (loc.type != 'Shop' or loc.name in world.shop_prices) + and (world.shuffle_song_items != 'song' or loc.type != 'Song') + and (world.shuffle_song_items != 'dungeon' or loc.name not in dungeon_song_locations)) + return False + # raise ValueError(f'Unexpected argument to valid_dungeon_item_location: {option}') + + +def gather_locations(multiworld: MultiWorld, + item_type: str, + players: Union[int, AbstractSet[int]], + dungeon: str = '' +) -> Optional[List[OOTLocation]]: + type_to_setting = { + 'Song': 'shuffle_song_items', + 'Map': 'shuffle_mapcompass', + 'Compass': 'shuffle_mapcompass', + 'SmallKey': 'shuffle_smallkeys', + 'BossKey': 'shuffle_bosskeys', + 'HideoutSmallKey': 'shuffle_hideoutkeys', + 'GanonBossKey': 'shuffle_ganon_bosskey', + } + if isinstance(players, int): + players = {players} + fill_opts = {p: getattr(multiworld.worlds[p], type_to_setting[item_type]) for p in players} + locations = [] + if item_type == 'Song': + if any(map(lambda v: v == 'any', fill_opts.values())): + return None + for player, option in fill_opts.items(): + if option == 'song': + condition = lambda location: location.type == 'Song' + elif option == 'dungeon': + condition = lambda location: location.name in dungeon_song_locations + locations += filter(condition, multiworld.get_unfilled_locations(player=player)) + else: + if any(map(lambda v: v in {'keysanity'}, fill_opts.values())): + return None + for player, option in fill_opts.items(): + condition = functools.partial(valid_dungeon_item_location, + multiworld.worlds[player], option, dungeon) + locations += filter(condition, multiworld.get_unfilled_locations(player=player)) + + return locations diff --git a/worlds/oot/data/Glitched World/Bosses.json b/worlds/oot/data/Glitched World/Bosses.json new file mode 100644 index 000000000000..8871c4665f48 --- /dev/null +++ b/worlds/oot/data/Glitched World/Bosses.json @@ -0,0 +1,3 @@ +{ + # This is a placeholder until Glitch 2.0 logic happens and boss shuffle is supported by it. +} diff --git a/worlds/oot/data/Glitched World/Deku Tree MQ.json b/worlds/oot/data/Glitched World/Deku Tree MQ.json index c78710561590..9bb8e77697fa 100644 --- a/worlds/oot/data/Glitched World/Deku Tree MQ.json +++ b/worlds/oot/data/Glitched World/Deku Tree MQ.json @@ -31,7 +31,7 @@ "region_name": "Deku Tree Boss Room", "dungeon": "Deku Tree", "events": { - "Deku Tree Clear": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)" + "Deku Tree Clear": "Deku_Shield and (Kokiri_Sword or Sticks)" }, "locations": { "Deku Tree MQ Before Spinning Log Chest": "True", @@ -39,8 +39,8 @@ "Deku Tree MQ GS Basement Graves Room": "Boomerang and can_play(Song_of_Time)", "Deku Tree MQ GS Basement Back Room": "Boomerang", "Deku Tree MQ Deku Scrub": "True", - "Deku Tree Queen Gohma Heart": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)", - "Queen Gohma": "Buy_Deku_Shield and (Kokiri_Sword or Sticks)" + "Deku Tree Queen Gohma Heart": "Deku_Shield and (Kokiri_Sword or Sticks)", + "Queen Gohma": "Deku_Shield and (Kokiri_Sword or Sticks)" }, "exits": { "Deku Tree Lobby": "True" diff --git a/worlds/oot/data/Glitched World/Deku Tree.json b/worlds/oot/data/Glitched World/Deku Tree.json index ca9ea714de8b..72ef4fc826df 100644 --- a/worlds/oot/data/Glitched World/Deku Tree.json +++ b/worlds/oot/data/Glitched World/Deku Tree.json @@ -22,7 +22,7 @@ }, "exits": { "Deku Tree Slingshot Room": "here(has_shield)", - "Deku Tree Boss Room": "here(has_fire_source_with_torch()) or can_shield + "Deku Tree Boss Door": "here(has_fire_source_with_torch()) or can_shield or is_adult" } }, @@ -38,7 +38,15 @@ } }, { - "region_name": "Deku Tree Boss Room", + "region_name": "Deku Tree Boss Door", + "scene": "Deku Tree", + "dungeon": "Deku Tree", + "exits": { + "Queen Gohma Boss Room": "True" + } + }, + { + "region_name": "Queen Gohma Boss Room", "dungeon": "Deku Tree", "events": { "Deku Tree Clear": "(Nuts or can_use(Slingshot) or has_bombchus or can_use(Hookshot) or can_use(Bow) or can_use(Boomerang)) and diff --git a/worlds/oot/data/Glitched World/Dodongos Cavern MQ.json b/worlds/oot/data/Glitched World/Dodongos Cavern MQ.json index 21c456750687..931000e22bba 100644 --- a/worlds/oot/data/Glitched World/Dodongos Cavern MQ.json +++ b/worlds/oot/data/Glitched World/Dodongos Cavern MQ.json @@ -44,11 +44,11 @@ "Dodongos Cavern Gossip Stone": "True" }, "exits": { - "Dodongos Cavern Boss Area": "has_explosives" + "King Dodongo Boss Room": "has_explosives" } }, { - "region_name": "Dodongos Cavern Boss Area", + "region_name": "King Dodongo Boss Room", "dungeon": "Dodongos Cavern", "locations": { "Dodongos Cavern MQ Under Grave Chest": "True", diff --git a/worlds/oot/data/Glitched World/Dodongos Cavern.json b/worlds/oot/data/Glitched World/Dodongos Cavern.json index 9271f5945813..b2b2353f872c 100644 --- a/worlds/oot/data/Glitched World/Dodongos Cavern.json +++ b/worlds/oot/data/Glitched World/Dodongos Cavern.json @@ -63,12 +63,20 @@ or (can_live_dmg(0.5) and can_use(Hover_Boots)) or can_hover" }, "exits": { - "Dodongos Cavern Boss Area": "has_explosives", + "Dodongos Cavern Boss Door": "has_explosives", "Dodongos Cavern Lobby": "True" } }, { - "region_name": "Dodongos Cavern Boss Area", + "region_name": "Dodongos Cavern Boss Door", + "scene": "Dodongos Cavern", + "dungeon": "Dodongos Cavern", + "exits": { + "King Dodongo Boss Room": "True" + } + }, + { + "region_name": "King Dodongo Boss Room", "dungeon": "Dodongos Cavern", "locations": { "Dodongos Cavern Boss Room Chest": "True", diff --git a/worlds/oot/data/Glitched World/Fire Temple.json b/worlds/oot/data/Glitched World/Fire Temple.json index 7b46428b244f..c8e41cc6bcbc 100644 --- a/worlds/oot/data/Glitched World/Fire Temple.json +++ b/worlds/oot/data/Glitched World/Fire Temple.json @@ -8,17 +8,12 @@ ((Small_Key_Fire_Temple, 8) or not keysanity) and (can_use(Megaton_Hammer) or can_use(Hookshot) or has_explosives)", "Fire Temple Boss Key Chest": "( ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)) or (can_mega and can_use(Hookshot))", - "Fire Temple Volvagia Heart": " - (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and - (Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))", - "Volvagia": " - (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer) and - (Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))", "Fire Temple GS Boss Key Loop": " ((Small_Key_Fire_Temple, 8) or not keysanity)" }, "exits": { - "Fire Temple Big Lava Room":"(Small_Key_Fire_Temple, 2)" + "Fire Temple Big Lava Room":"(Small_Key_Fire_Temple, 2)", + "Fire Temple Boss Door": "True" } }, { @@ -92,5 +87,24 @@ "Fire Temple Megaton Hammer Chest": "has_explosives or can_use(Megaton_Hammer)" } + }, + { + "region_name": "Fire Temple Boss Door", + "scene": "Fire Temple", + "dungeon": "Fire Temple", + "exits": { + "Volvagia Boss Room": "(Boss_Key_Fire_Temple or at('Fire Temple Flame Maze', True))" + } + }, + { + "region_name": "Volvagia Boss Room", + "scene": "Fire Temple", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Volvagia Heart": " + (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer)", + "Volvagia": " + (can_use(Goron_Tunic) or (Fairy and has_explosives)) and can_use(Megaton_Hammer)" + } } ] diff --git a/worlds/oot/data/Glitched World/Forest Temple.json b/worlds/oot/data/Glitched World/Forest Temple.json index 68ab4273dc57..4cc2068145ed 100644 --- a/worlds/oot/data/Glitched World/Forest Temple.json +++ b/worlds/oot/data/Glitched World/Forest Temple.json @@ -19,7 +19,7 @@ "Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)", "Forest Temple Basement": "(Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg) or (can_use(Hover_Boots) and can_mega)", "Forest Temple Falling Room": "can_hover or (can_use(Hover_Boots) and Bombs and can_live_dmg(0.5))", - "Forest Temple Boss Room": "is_adult" + "Forest Temple Boss Door": "is_adult" } }, { @@ -34,10 +34,10 @@ "Forest Temple Outdoors High Balconies": " is_adult or (has_explosives or - ((can_use(Boomerang) or Nuts or Buy_Deku_Shield) and + ((can_use(Boomerang) or Nuts or Deku_Shield) and (Sticks or Kokiri_Sword or can_use(Slingshot))))", "Forest Temple Outside Upper Ledge": "can_hover or (can_use(Hover_Boots) and has_explosives and can_live_dmg(0.5))", - "Forest Temple Boss Room": "is_child and can_live_dmg(0.5)" + "Forest Temple Boss Door": "is_child and can_live_dmg(0.5)" } }, { @@ -147,11 +147,19 @@ "Forest Temple GS Basement": "can_use(Hookshot) or can_use(Boomerang) or can_hover" }, "exits":{ - "Forest Temple Boss Room": "Boss_Key_Forest_Temple" + "Forest Temple Boss Door": "Boss_Key_Forest_Temple" } }, { - "region_name": "Forest Temple Boss Room", + "region_name": "Forest Temple Boss Door", + "scene": "Forest Temple", + "dungeon": "Forest Temple", + "exits": { + "Phantom Ganon Boss Room": "True" + } + }, + { + "region_name": "Phantom Ganon Boss Room", "dungeon": "Forest Temple", "locations": { "Forest Temple Phantom Ganon Heart": "(can_use(Hookshot) or can_use(Bow)) or diff --git a/worlds/oot/data/Glitched World/Jabu Jabus Belly.json b/worlds/oot/data/Glitched World/Jabu Jabus Belly.json index 572fa711747b..ed326d887169 100644 --- a/worlds/oot/data/Glitched World/Jabu Jabus Belly.json +++ b/worlds/oot/data/Glitched World/Jabu Jabus Belly.json @@ -31,11 +31,19 @@ }, "exits": { "Jabu Jabus Belly Main": "True", - "Jabu Jabus Belly Boss Area": "can_use(Boomerang) or can_use(Hover_Boots) or can_mega" + "Jabu Jabus Belly Boss Door": "can_use(Boomerang) or can_use(Hover_Boots) or can_mega" } }, { - "region_name": "Jabu Jabus Belly Boss Area", + "region_name": "Jabu Jabus Belly Boss Door", + "scene": "Jabu Jabus Belly", + "dungeon": "Jabu Jabus Belly", + "exits": { + "Barinade Boss Room": "True" + } + }, + { + "region_name": "Barinade Boss Room", "dungeon": "Jabu Jabus Belly", "locations": { "Jabu Jabus Belly Barinade Heart": "can_use(Boomerang) and (Sticks or Kokiri_Sword)", diff --git a/worlds/oot/data/Glitched World/Overworld.json b/worlds/oot/data/Glitched World/Overworld.json index f47c85a0b383..d0fec0ed100d 100644 --- a/worlds/oot/data/Glitched World/Overworld.json +++ b/worlds/oot/data/Glitched World/Overworld.json @@ -1,21 +1,22 @@ [ { "region_name": "Root", - "hint": "Link's Pocket", + "hint": "ROOT", "locations": { - "Links Pocket": "True" + "Links Pocket": "True", + "Gift from Sages": "can_receive_ganon_bosskey" }, "exits": { "Root Exits": "is_starting_age or Time_Travel", - "HC Garden Locations": "skip_child_zelda" + "HC Garden Locations": "shuffle_child_trade == 'skip_child_zelda'" } }, { "region_name": "Root Exits", "exits": { - "KF Links House": "is_child and (starting_age == 'child' or Time_Travel)", + "KF Links House": "is_child", "Temple of Time": " - (is_adult and (starting_age == 'adult' or Time_Travel)) or + is_adult or (can_play(Prelude_of_Light) and can_leave_forest)", "Sacred Forest Meadow": "can_play(Minuet_of_Forest)", "DMC Central": "can_play(Bolero_of_Fire) and can_leave_forest", @@ -26,9 +27,9 @@ }, { "region_name": "Kokiri Forest", - "hint": "Kokiri Forest", + "hint": "KOKIRI_FOREST", "events": { - "Showed Mido Sword & Shield": "open_forest == 'open' or (is_child and Kokiri_Sword and Buy_Deku_Shield)" + "Showed Mido Sword & Shield": "open_forest == 'open' or (is_child and Kokiri_Sword and Deku_Shield)" }, "locations": { "KF Kokiri Sword Chest": "is_child", @@ -58,7 +59,7 @@ }, { "region_name": "KF Outside Deku Tree", - "hint": "Kokiri Forest", + "hint": "KOKIRI_FOREST", "locations": { "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", "Deku Baba Nuts": " @@ -75,7 +76,7 @@ }, { "region_name": "KF Links House", - "hint": "Kokiri Forest", + "hint": "KOKIRI_FOREST", "locations": { "KF Links House Cow": "is_adult and can_play(Eponas_Song) and 'Links Cow'" }, @@ -116,7 +117,7 @@ }, { "region_name": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "locations": { "LW Skull Kid": "is_child and can_play(Sarias_Song)", "LW Ocarina Memory Game": "is_child and Ocarina", @@ -137,14 +138,14 @@ }, { "region_name": "LW Beyond Mido", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "locations": { "LW Deku Scrub Near Deku Theater Right": "is_child and can_stun_deku", "LW Deku Scrub Near Deku Theater Left": "is_child and can_stun_deku", "LW GS Above Theater": "is_adult and at_night and (here(can_plant_bean) or can_use(Longshot) or (has_bombchus and Progressive_Hookshot) or can_hover)", "LW GS Bean Patch Near Theater": " can_plant_bugs and - (can_child_attack or (shuffle_scrubs == 'off' and Buy_Deku_Shield))" + (can_child_attack or (shuffle_scrubs == 'off' and Deku_Shield))" }, "exits": { "Lost Woods": "True", @@ -155,7 +156,7 @@ }, { "region_name": "SFM Entryway", - "hint": "Sacred Forest Meadow", + "hint": "SACRED_FOREST_MEADOW", "exits": { "LW Beyond Mido": "True", "Sacred Forest Meadow": " @@ -166,7 +167,7 @@ }, { "region_name": "Sacred Forest Meadow", - "hint": "Sacred Forest Meadow", + "hint": "SACRED_FOREST_MEADOW", "locations": { "Song from Saria": "is_child and Zeldas_Letter", "Sheik in Forest": "is_adult", @@ -184,7 +185,7 @@ }, { "region_name": "LW Bridge", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "locations": { "LW Gift from Saria": "True" }, @@ -195,7 +196,7 @@ }, { "region_name": "Hyrule Field", - "hint": "Hyrule Field", + "hint": "HYRULE_FIELD", "time_passes": true, "locations": { "HF Ocarina of Time Item": "is_child and has_all_stones", @@ -223,7 +224,7 @@ }, { "region_name": "Lake Hylia", - "hint": "Lake Hylia", + "hint": "LAKE_HYLIA", "time_passes": true, "events": { "Bonooru": "is_child and Ocarina" @@ -276,7 +277,7 @@ }, { "region_name": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "locations": { "GV Waterfall Freestanding PoH": "True", @@ -297,7 +298,7 @@ }, { "region_name": "GV Fortress Side", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "locations": { "GV Chest": "can_use(Megaton_Hammer)", @@ -311,23 +312,33 @@ }, { "region_name": "Gerudo Fortress", - "hint": "Gerudo's Fortress", + "hint": "GERUDO_FORTRESS", "events": { - "Carpenter Rescue": "can_finish_GerudoFortress", + "Hideout 1 Torch Jail Gerudo": "is_adult or (is_child and can_child_damage)", + "Hideout 2 Torches Jail Gerudo": "is_adult or (is_child and can_child_damage)", + "Hideout 3 Torches Jail Gerudo": "is_adult or (is_child and can_child_damage)", + "Hideout 4 Torches Jail Gerudo": "is_adult or (is_child and can_child_damage)", + "Hideout 1 Torch Jail Carpenter": " + 'Hideout 1 Torch Jail Gerudo' and + ((gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)) + or (gerudo_fortress == 'fast' and Small_Key_Thieves_Hideout))", + "Hideout 2 Torches Jail Carpenter": "'Hideout 2 Torches Jail Gerudo' and gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)", + "Hideout 3 Torches Jail Carpenter": "'Hideout 3 Torches Jail Gerudo' and gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)", + "Hideout 4 Torches Jail Carpenter": "'Hideout 4 Torches Jail Gerudo' and gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)", "GF Gate Open": "is_adult and Gerudo_Membership_Card" }, "locations": { - "GF Chest": "(is_child and can_mega) or + "GF Chest": "(is_child and can_mega) or (is_adult and can_use(Hover_Boots) or can_use(Scarecrow) or can_use(Longshot) or can_mega)", #// known softlock if child opens this chest, so only put it in logic for adult "GF HBA 1000 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and is_adult", "GF HBA 1500 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and is_adult", - "Hideout Jail Guard (1 Torch)": "is_adult or (is_child and can_child_damage)", - "Hideout Jail Guard (2 Torches)": "is_adult or (is_child and can_child_damage)", - "Hideout Jail Guard (3 Torches)": "is_adult or (is_child and can_child_damage)", - "Hideout Jail Guard (4 Torches)": "is_adult or (is_child and can_child_damage)", + "Hideout 1 Torch Jail Gerudo Key": "'Hideout 1 Torch Jail Gerudo'", + "Hideout 2 Torches Jail Gerudo Key": "'Hideout 2 Torches Jail Gerudo'", + "Hideout 3 Torches Jail Gerudo Key": "'Hideout 3 Torches Jail Gerudo'", + "Hideout 4 Torches Jail Gerudo Key": "'Hideout 4 Torches Jail Gerudo'", "Hideout Gerudo Membership Card": "can_finish_GerudoFortress", "GF GS Archery Range": "can_use(Hookshot) and at_night", "GF GS Top Floor": "at_night and is_adult" @@ -340,7 +351,7 @@ }, { "region_name": "Haunted Wasteland", - "hint": "Haunted Wasteland", + "hint": "HAUNTED_WASTELAND", "locations": { "Wasteland Chest": "has_fire_source", "Wasteland Bombchu Salesman": "Progressive_Wallet and can_jumpslash", @@ -353,7 +364,7 @@ }, { "region_name": "Desert Colossus", - "hint": "Desert Colossus", + "hint": "DESERT_COLOSSUS", "time_passes": true, "locations": { "Colossus Freestanding PoH": " @@ -381,7 +392,7 @@ }, { "region_name": "Market", - "hint": "the Market", + "hint": "MARKET", "locations": { "ToT Gossip Stone (Left)": "True", "ToT Gossip Stone (Left-Center)": "True", @@ -407,9 +418,11 @@ }, { "region_name": "Temple of Time", - "hint": "Temple of Time", + "hint": "TEMPLE_OF_TIME", "locations": { - "ToT Light Arrows Cutscene": "is_adult and can_trigger_lacs" + "ToT Light Arrows Cutscene": "is_adult and can_trigger_lacs", + "ToT Child Altar Hint": "is_child", + "ToT Adult Altar Hint": "is_adult" }, "exits": { "Market": "True", @@ -419,7 +432,7 @@ }, { "region_name": "Beyond Door of Time", - "hint": "Temple of Time", + "hint": "TEMPLE_OF_TIME", "locations": { "Master Sword Pedestal": "True", "Sheik at Temple": "Forest_Medallion and is_adult" @@ -430,7 +443,7 @@ }, { "region_name": "Hyrule Castle Grounds", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "time_passes": true, "locations": { "HC Malon Egg": "True", @@ -441,14 +454,14 @@ "exits": { "Market": "True", #// garden will logically need weird-egg as letter first can screw over the mask quest - "HC Garden": "Weird_Egg or skip_child_zelda or (not shuffle_weird_egg)", + "HC Garden": "Weird_Egg", "HC Great Fairy Fountain": "True", "HC Storms Grotto": "can_play(Song_of_Storms)" } }, { "region_name": "HC Garden", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "exits": { "HC Garden Locations": "True", "Hyrule Castle Grounds": "True" @@ -457,7 +470,7 @@ { # Directly reachable from Root in "Free Zelda" "region_name": "HC Garden Locations", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "locations": { "HC Zeldas Letter": "True", "Song from Impa": "True" @@ -471,7 +484,7 @@ }, { "region_name": "Ganons Castle Grounds", - "hint": "outside Ganon's Castle", + "hint": "OUTSIDE_GANONS_CASTLE", "locations": { "OGC GS": "True" }, @@ -580,7 +593,7 @@ }, { "region_name": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "locations": { "Kak Man on Roof": "True", "Kak Anju as Adult": "is_adult", @@ -589,7 +602,7 @@ is_adult and Forest_Medallion and Fire_Medallion and Water_Medallion", "Kak GS House Under Construction": "is_child and at_night", "Kak GS Skulltula House": "is_child and at_night", - "Kak GS Guards House": "is_child and at_night", + "Kak GS Near Gate Guard": "is_child and at_night", "Kak GS Tree": "is_child and at_night", "Kak GS Watchtower": "at_night and is_child and (Slingshot or has_bombchus or @@ -631,7 +644,12 @@ "Kak 20 Gold Skulltula Reward": "(Gold_Skulltula_Token, 20)", "Kak 30 Gold Skulltula Reward": "(Gold_Skulltula_Token, 30)", "Kak 40 Gold Skulltula Reward": "(Gold_Skulltula_Token, 40)", - "Kak 50 Gold Skulltula Reward": "(Gold_Skulltula_Token, 50)" + "Kak 50 Gold Skulltula Reward": "(Gold_Skulltula_Token, 50)", + "10 Skulltulas Reward Hint": "True", + "20 Skulltulas Reward Hint": "True", + "30 Skulltulas Reward Hint": "True", + "40 Skulltulas Reward Hint": "True", + "50 Skulltulas Reward Hint": "True" } }, { @@ -646,7 +664,7 @@ }, { "region_name": "Kak Windmill", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "events": { "Drain Well": "is_child and can_play(Song_of_Storms)" }, @@ -676,7 +694,7 @@ }, { "region_name": "Kak Potion Shop Front", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "locations": { "Kak Potion Shop Item 1": "True", "Kak Potion Shop Item 2": "True", @@ -696,7 +714,7 @@ }, { "region_name": "Graveyard", - "hint": "the Graveyard", + "hint": "GRAVEYARD", "locations": { "Graveyard Freestanding PoH": " (is_adult and here(can_plant_bean)) or @@ -739,19 +757,22 @@ }, { "region_name": "Graveyard Dampes Grave", - "hint": "the Graveyard", + "hint": "GRAVEYARD", "locations": { - "Graveyard Hookshot Chest": "True", + "Graveyard Dampe Race Hookshot Chest": "True", "Graveyard Dampe Race Freestanding PoH": "True", "Nut Pot": "True" } }, { - "region_name": "Graveyard Dampes House" + "region_name": "Graveyard Dampes House", + "locations": { + "Dampe Diary Hint": "is_adult" + } }, { "region_name": "Graveyard Warp Pad Region", - "hint": "the Graveyard", + "hint": "GRAVEYARD", "locations": { "Graveyard Gossip Stone": "True" }, @@ -762,7 +783,7 @@ }, { "region_name": "Death Mountain", - "hint": "Death Mountain Trail", + "hint": "DEATH_MOUNTAIN_TRAIL", "time_passes": true, "locations": { "DMT Chest": " @@ -789,7 +810,7 @@ }, { "region_name": "Death Mountain Summit", - "hint": "Death Mountain Trail", + "hint": "DEATH_MOUNTAIN_TRAIL", "time_passes": true, "locations": { "DMT Biggoron": " @@ -817,7 +838,7 @@ }, { "region_name": "Goron City", - "hint": "Goron City", + "hint": "GORON_CITY", "events": { "GC Woods Warp Open": " can_blast_or_smash or can_use(Dins_Fire) or can_use(Bow) or Progressive_Strength_Upgrade" @@ -881,7 +902,7 @@ { "region_name": "GC Darunias Chamber", - "hint": "Goron City", + "hint": "GORON_CITY", "events": { "GC Woods Warp Open": "is_child and Sticks" }, @@ -910,7 +931,7 @@ }, { "region_name": "DMC Upper", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC Wall Freestanding PoH": "True", "DMC GS Crate": " @@ -930,7 +951,7 @@ }, { "region_name": "DMC Lower", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "exits": { "GC Darunias Chamber": "True", "DMC Great Fairy Fountain": "can_use(Megaton_Hammer) or can_mega or is_child", @@ -942,7 +963,7 @@ }, { "region_name": "DMC Central", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC Volcano Freestanding PoH": " (is_adult and here(can_plant_bean)) or @@ -971,7 +992,7 @@ }, { "region_name": "ZR Front", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "time_passes": true, "locations": { "ZR GS Tree": "is_child and can_child_attack" @@ -983,7 +1004,7 @@ }, { "region_name": "Zora River", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "time_passes": true, "locations": { "ZR Magic Bean Salesman": "is_child", @@ -991,6 +1012,11 @@ is_child and can_play(Zeldas_Lullaby) and can_play(Sarias_Song) and can_play(Suns_Song) and can_play(Eponas_Song) and can_play(Song_of_Time) and can_play(Song_of_Storms)", + "ZR Frogs Zeldas Lullaby": "is_child and can_play(Zeldas_Lullaby)", + "ZR Frogs Eponas Song": "is_child and can_play(Eponas_Song)", + "ZR Frogs Sarias Song": "is_child and can_play(Sarias_Song)", + "ZR Frogs Suns Song": "is_child and can_play(Suns_Song)", + "ZR Frogs Song of Time": "is_child and can_play(Song_of_Time)", "ZR Frogs in the Rain": "is_child and can_play(Song_of_Storms)", "ZR Near Open Grotto Freestanding PoH": "True", "ZR Near Domain Freestanding PoH": "True", @@ -1011,7 +1037,7 @@ }, { "region_name": "Zoras Domain", - "hint": "Zora's Domain", + "hint": "ZORAS_DOMAIN", "locations": { "ZD Diving Minigame": "is_child", "ZD Chest": "can_use(Sticks)", @@ -1036,7 +1062,7 @@ }, { "region_name": "Zoras Fountain", - "hint": "Zora's Fountain", + "hint": "ZORAS_FOUNTAIN", "locations": { "ZF Iceberg Freestanding PoH": "is_adult", "ZF Bottom Freestanding PoH": "is_adult and Iron_Boots", @@ -1079,7 +1105,7 @@ }, { "region_name": "Lon Lon Ranch", - "hint": "Lon Lon Ranch", + "hint": "LON_LON_RANCH", "events": { "Epona": "(can_play(Eponas_Song) or can_hover) and is_adult", "Links Cow": "(can_play(Eponas_Song) or can_hover) and is_adult" diff --git a/worlds/oot/data/Glitched World/Shadow Temple.json b/worlds/oot/data/Glitched World/Shadow Temple.json index 2d9985f30932..e152ec280a18 100644 --- a/worlds/oot/data/Glitched World/Shadow Temple.json +++ b/worlds/oot/data/Glitched World/Shadow Temple.json @@ -16,7 +16,7 @@ "exits": { "Shadow Temple Entryway": "True", "Shadow Temple First Beamos": "can_use(Hover_Boots) or can_mega", - "Shadow Boss": "can_hover and has_explosives and can_use(Hover_Boots) and + "Shadow Temple Boss Door": "can_hover and has_explosives and can_use(Hover_Boots) and can_live_dmg(2.0)" } }, @@ -43,9 +43,9 @@ "Shadow Temple Falling Spikes Switch Chest": "is_adult or can_hover", "Shadow Temple Invisible Spikes Chest": "(Small_Key_Shadow_Temple, 5) and (can_jumpslash or can_use(Dins_Fire))", "Shadow Temple Freestanding Key": " - (Small_Key_Shadow_Temple, 5) and (can_use(Hookshot) or can_hover) + (Small_Key_Shadow_Temple, 5) and (can_use(Hookshot) or can_hover) and (Progressive_Strength_Upgrade or has_explosives)", - "Shadow Temple GS Like Like Room": "is_adult or can_use(Boomerang) or can_hover", + "Shadow Temple GS Invisible Blades Room": "is_adult or can_use(Boomerang) or can_hover", "Shadow Temple GS Falling Spikes Room": "can_use(Hookshot) or (is_adult and can_mega) or (is_child and can_hover)", "Shadow Temple GS Single Giant Pot": "(Small_Key_Shadow_Temple, 5) and (can_use(Hookshot) or can_hover)" }, @@ -91,14 +91,22 @@ "Shadow Temple GS Triple Giant Pot": "True" }, "exits": { - "Shadow Boss": "(has_bombchus or can_use(Distant_Scarecrow) or Bow or + "Shadow Temple Boss Door": "(has_bombchus or can_use(Distant_Scarecrow) or Bow or (can_mega and can_use(Hover_Boots)) or can_hover) and (Boss_Key_Shadow_Temple or (has_explosives and is_adult)) and (can_mega or can_use(Hover_Boots)) and (Small_Key_Shadow_Temple, 5)" } }, { - "region_name": "Shadow Boss", + "region_name": "Shadow Temple Boss Door", + "scene": "Shadow Temple", + "dungeon": "Shadow Temple", + "exits": { + "Bongo Bongo Boss Room": "True" + } + }, + { + "region_name": "Bongo Bongo Boss Room", "dungeon": "Shadow Temple", "locations": { "Shadow Temple Bongo Bongo Heart": "True", diff --git a/worlds/oot/data/Glitched World/Spirit Temple.json b/worlds/oot/data/Glitched World/Spirit Temple.json index 63a6fb9eed7b..e21cd8138b3a 100644 --- a/worlds/oot/data/Glitched World/Spirit Temple.json +++ b/worlds/oot/data/Glitched World/Spirit Temple.json @@ -18,6 +18,13 @@ (Sticks or has_explosives or ( (Nuts or can_use(Boomerang)) and (can_use(Kokiri_Sword) or Slingshot) ) ))", + "Deku Shield Pot": " + fix_broken_drops and + (is_adult or ( + (can_use(Boomerang) or Slingshot or has_bombchus or can_mega) and + (Sticks or has_explosives or + ( (Nuts or can_use(Boomerang)) and + (can_use(Kokiri_Sword) or Slingshot) ) )))", "Spirit Temple Child Early Torches Chest": "(is_adult and has_fire_source) or (has_fire_source_with_torch and (here(is_adult) or ( @@ -94,7 +101,7 @@ can_hover or can_use(Hookshot)) and has_explosives", "Child Spirit Temple Climb": "True", - "Spirit Temple Boss": "can_use(Hookshot) and can_live_dmg(0.5) and Mirror_Shield and has_explosives", + "Spirit Temple Boss Door": "can_use(Hookshot) and can_live_dmg(0.5) and Mirror_Shield and has_explosives", "Early Adult Spirit Temple": "can_jumpslash or can_hover or can_use(Hookshot)" } }, @@ -156,12 +163,20 @@ "Spirit Temple Topmost Chest": "can_use(Mirror_Shield)" }, "exits": { - "Spirit Temple Boss": "can_use(Mirror_Shield)", + "Spirit Temple Boss Door": "can_use(Mirror_Shield)", "Spirit Temple Central Chamber": "can_use(Mirror_Shield) or can_use(Hookshot)" } }, { - "region_name": "Spirit Temple Boss", + "region_name": "Spirit Temple Boss Door", + "scene": "Spirit Temple", + "dungeon": "Spirit Temple", + "exits": { + "Twinrova Boss Room": "True" + } + }, + { + "region_name": "Twinrova Boss Room", "dungeon": "Spirit Temple", "locations": { "Spirit Temple Twinrova Heart": "True", diff --git a/worlds/oot/data/Glitched World/Water Temple.json b/worlds/oot/data/Glitched World/Water Temple.json index c6b3c985402f..530c4b28eb0f 100644 --- a/worlds/oot/data/Glitched World/Water Temple.json +++ b/worlds/oot/data/Glitched World/Water Temple.json @@ -5,7 +5,7 @@ "locations": {}, "exits": { "High Alcove": "is_adult or can_hover", - "Boss Area": "can_use(Longshot) or can_hover or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))", + "Water Temple Boss Door": "can_use(Longshot) or can_hover or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))", "Dark Link Area": "(at('High Alcove', can_play(Zeldas_Lullaby)) or (can_use(Hover_Boots) and (can_mega or Megaton_Hammer))) and (Small_Key_Water_Temple, 4)", @@ -29,7 +29,7 @@ "Boss Key Area": "is_adult and (Small_Key_Water_Temple, 4) and (can_use(Longshot) or can_hover or Hover_Boots)", - "Boss Area": "can_play(Zeldas_Lullaby) and can_use(Longshot)", + "Water Temple Boss Door": "can_play(Zeldas_Lullaby) and can_use(Longshot)", "Water Temple Lobby": "can_play(Zeldas_Lullaby)" } @@ -161,7 +161,15 @@ } }, { - "region_name": "Boss Area", + "region_name": "Water Temple Boss Door", + "scene": "Water Temple", + "dungeon": "Water Temple", + "exits": { + "Morpha Boss Room": "True" + } + }, + { + "region_name": "Morpha Boss Room", "dungeon": "Water Temple", "events": { "Water Temple Clear": "can_jumpslash and (can_hover or Boss_Key_Water_Temple)" diff --git a/worlds/oot/data/Hints/balanced.json b/worlds/oot/data/Hints/balanced.json index f0e153ca0590..14c42d64a177 100644 --- a/worlds/oot/data/Hints/balanced.json +++ b/worlds/oot/data/Hints/balanced.json @@ -10,19 +10,24 @@ "dungeons_barren_limit": 1, "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 1}, - "woth": {"order": 3, "weight": 3.5, "fixed": 0, "copies": 1}, - "barren": {"order": 4, "weight": 2.0, "fixed": 0, "copies": 1}, - "entrance": {"order": 5, "weight": 3.0, "fixed": 0, "copies": 1}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1}, - "random": {"order": 7, "weight": 6.0, "fixed": 0, "copies": 1}, - "item": {"order": 8, "weight": 5.0, "fixed": 0, "copies": 1}, - "song": {"order": 9, "weight": 1.0, "fixed": 0, "copies": 1}, - "overworld": {"order": 10, "weight": 2.0, "fixed": 0, "copies": 1}, - "dungeon": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1}, - "junk": {"order": 12, "weight": 3.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1} + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 1}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 1}, + "woth": {"order": 4, "weight": 3.5, "fixed": 0, "copies": 1}, + "barren": {"order": 5, "weight": 2.0, "fixed": 0, "copies": 1}, + "entrance": {"order": 6, "weight": 3.0, "fixed": 0, "copies": 1}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1}, + "random": {"order": 8, "weight": 6.0, "fixed": 0, "copies": 1}, + "item": {"order": 9, "weight": 5.0, "fixed": 0, "copies": 1}, + "song": {"order": 10, "weight": 1.0, "fixed": 0, "copies": 1}, + "overworld": {"order": 11, "weight": 2.0, "fixed": 0, "copies": 1}, + "dungeon": {"order": 12, "weight": 1.5, "fixed": 0, "copies": 1}, + "junk": {"order": 13, "weight": 3.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.0, "fixed": 0, "copies": 1}, + "goal": {"order": 15, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 16, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.0, "fixed": 0, "copies": 0} } -} \ No newline at end of file +} diff --git a/worlds/oot/data/Hints/bingo.json b/worlds/oot/data/Hints/bingo.json index c1a9730d478f..92efc1a6058b 100644 --- a/worlds/oot/data/Hints/bingo.json +++ b/worlds/oot/data/Hints/bingo.json @@ -10,19 +10,24 @@ "dungeons_barren_limit": 1, "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 0}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 0}, - "barren": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 2}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1}, - "random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 2}, - "item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, - "song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, - "overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2}, - "dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2}, - "junk": {"order": 12, "weight": 1.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 2} + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0}, + "barren": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 0}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 2}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, + "item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 13, "weight": 1.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.0, "fixed": 0, "copies": 2}, + "goal": {"order": 15, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 16, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.0, "fixed": 0, "copies": 0} } } diff --git a/worlds/oot/data/Hints/chaos.json b/worlds/oot/data/Hints/chaos.json new file mode 100644 index 000000000000..13a5cec0f94c --- /dev/null +++ b/worlds/oot/data/Hints/chaos.json @@ -0,0 +1,33 @@ +{ + "name": "chaos", + "gui_name": "Chaos!!!", + "description": "A completely randomized hint distribution with single copies", + "add_locations": [], + "remove_locations": [], + "add_items": [], + "remove_items": [], + "dungeons_woth_limit": 40, + "dungeons_barren_limit": 40, + "named_items_required": false, + "vague_named_items": false, + "use_default_goals": true, + "distribution": { + "trial": {"order": 1, "weight": 1.0, "fixed": 0, "copies": 1}, + "always": {"order": 2, "weight": 1.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 3, "weight": 1.0, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 4, "weight": 1.0, "fixed": 0, "copies": 1}, + "woth": {"order": 5, "weight": 1.0, "fixed": 0, "copies": 1}, + "goal": {"order": 6, "weight": 1.0, "fixed": 0, "copies": 1}, + "barren": {"order": 7, "weight": 1.0, "fixed": 0, "copies": 1}, + "item": {"order": 8, "weight": 1.0, "fixed": 0, "copies": 1}, + "sometimes": {"order": 9, "weight": 1.0, "fixed": 0, "copies": 1}, + "dual": {"order": 10, "weight": 1.0, "fixed": 0, "copies": 1}, + "song": {"order": 11, "weight": 1.0, "fixed": 0, "copies": 1}, + "overworld": {"order": 12, "weight": 1.0, "fixed": 0, "copies": 1}, + "dungeon": {"order": 13, "weight": 1.0, "fixed": 0, "copies": 1}, + "entrance": {"order": 14, "weight": 1.0, "fixed": 0, "copies": 1}, + "random": {"order": 15, "weight": 1.0, "fixed": 0, "copies": 1}, + "junk": {"order": 16, "weight": 1.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 17, "weight": 1.0, "fixed": 0, "copies": 1} + } +} diff --git a/worlds/oot/data/Hints/coop2.json b/worlds/oot/data/Hints/coop2.json new file mode 100644 index 000000000000..19835883a978 --- /dev/null +++ b/worlds/oot/data/Hints/coop2.json @@ -0,0 +1,38 @@ +{ + "name": "coop2", + "gui_name": "Co-op", + "description": "Tournament hints used for Season 2 Co-op Tournament Races.", + "add_locations": [ + { "location": "Deku Theater Skull Mask", "types": ["always"] }, + { "location": "DMC Deku Scrub", "types": ["always"] } + ], + "remove_locations": [], + "add_items": [ + { "item": "Light Arrows", "types": ["named-item"] } + ], + "remove_items": [], + "dungeons_woth_limit": 2, + "dungeons_barren_limit": 1, + "named_items_required": true, + "vague_named_items": false, + "use_default_goals": true, + "distribution": { + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 3}, + "always": {"order": 3, "weight": 0.0, "fixed": 6, "copies": 3}, + "junk": {"order": 4, "weight": 0.0, "fixed": 1, "copies": 1}, + "barren": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 2}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 100, "copies": 3}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 9, "weight": 0.0, "fixed": 1, "copies": 3}, + "goal": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0} + } +} diff --git a/worlds/oot/data/Hints/ddr.json b/worlds/oot/data/Hints/ddr.json index c07113b68be3..03cdab42adab 100644 --- a/worlds/oot/data/Hints/ddr.json +++ b/worlds/oot/data/Hints/ddr.json @@ -1,51 +1,56 @@ { - "name": "ddr", - "gui_name": "DDR", - "description": "DDR weekly race hints. Duplicates of each hint, 2 WotH, 3 Barren, 3 Named-Item, remainder of hints are Sometimes. Prevents some items from being hinted in WotH or Sometimes.", - "add_locations": [ - { "location": "Deku Theater Skull Mask", "types": ["always"]} - ], - "remove_locations": [], - "add_items": [ - {"item":"Hover Boots", "types":["named-item"]}, - {"item":"Progressive Hookshot", "types":["named-item"]}, - {"item":"Dins Fire", "types":["named-item"]}, - {"item":"Bomb Bag", "types":["named-item"]}, - {"item":"Boomerang", "types":["named-item"]}, - {"item":"Bow", "types":["named-item"]}, - {"item":"Megaton Hammer", "types":["named-item"]}, - {"item":"Iron Boots", "types":["named-item"]}, - {"item":"Magic Meter", "types":["named-item"]}, - {"item":"Mirror Shield", "types":["named-item"]}, - {"item":"Fire Arrows", "types":["named-item"]}, - {"item":"Progressive Strength Upgrade", "types":["named-item"]} - ], - "remove_items": [ - { "item": "Zeldas Lullaby", "types": ["woth", "sometimes"] }, - { "item": "Rutos Letter", "types": ["woth", "sometimes"] }, - { "item": "Goron Tunic", "types": ["woth", "sometimes"] }, - { "item": "Zora Tunic", "types": ["woth", "sometimes"] }, - { "item": "Bow", "types": ["barren"]}, - { "item": "Bomb Bag", "types": ["barren"]}, - { "item": "Magic Meter", "types": ["barren"]} - ], - "dungeons_woth_limit": 1, - "dungeons_barren_limit": 1, - "named_items_required": false, - "vague_named_items": true, - "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 0.0, "fixed": 2, "copies": 2}, - "barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 2}, - "sometimes": {"order": 13,"weight": 0.0, "fixed": 99, "copies": 2}, - "random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 2}, - "item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, - "song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, - "overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2}, - "dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2}, - "junk": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 6, "weight": 0.0, "fixed": 3, "copies": 2} - } -} \ No newline at end of file + "name": "ddr", + "gui_name": "DDR", + "description": "DDR weekly race hints. Duplicates of each hint, 2 WotH, 3 Barren, 3 Named-Item, remainder of hints are Sometimes. Prevents some items from being hinted in WotH or Sometimes.", + "add_locations": [ + { "location": "Deku Theater Skull Mask", "types": ["always"] } + ], + "remove_locations": [], + "add_items": [ + { "item": "Hover Boots", "types": ["named-item"] }, + { "item": "Progressive Hookshot", "types": ["named-item"] }, + { "item": "Dins Fire", "types": ["named-item"] }, + { "item": "Bomb Bag", "types": ["named-item"] }, + { "item": "Boomerang", "types": ["named-item"] }, + { "item": "Bow", "types": ["named-item"] }, + { "item": "Megaton Hammer", "types": ["named-item"] }, + { "item": "Iron Boots", "types": ["named-item"] }, + { "item": "Magic Meter", "types": ["named-item"] }, + { "item": "Mirror Shield", "types": ["named-item"] }, + { "item": "Fire Arrows", "types": ["named-item"] }, + { "item": "Progressive Strength Upgrade", "types": ["named-item"] } + ], + "remove_items": [ + { "item": "Zeldas Lullaby", "types": ["woth", "sometimes"] }, + { "item": "Rutos Letter", "types": ["woth", "sometimes"] }, + { "item": "Goron Tunic", "types": ["woth", "sometimes"] }, + { "item": "Zora Tunic", "types": ["woth", "sometimes"] }, + { "item": "Bow", "types": ["barren"] }, + { "item": "Bomb Bag", "types": ["barren"] }, + { "item": "Magic Meter", "types": ["barren"] } + ], + "dungeons_woth_limit": 1, + "dungeons_barren_limit": 1, + "named_items_required": false, + "vague_named_items": true, + "use_default_goals": true, + "distribution": { + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 0.0, "fixed": 2, "copies": 2}, + "barren": {"order": 5, "weight": 0.0, "fixed": 3, "copies": 2}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 2}, + "sometimes": {"order": 14, "weight": 0.0, "fixed": 99, "copies": 2}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, + "item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 7, "weight": 0.0, "fixed": 3, "copies": 2}, + "goal": {"order": 15, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 16, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.0, "fixed": 0, "copies": 0} + } +} diff --git a/worlds/oot/data/Hints/league.json b/worlds/oot/data/Hints/league.json index 1119cea06368..1b7858d36e77 100644 --- a/worlds/oot/data/Hints/league.json +++ b/worlds/oot/data/Hints/league.json @@ -1,31 +1,58 @@ { "name": "league", - "gui_name": "League", - "description": "Hint Distro for the OoTR League", + "gui_name": "League S3", + "description": "Hint Distribution for the S3 of League. 5 Goal Hints, 3 Barren Hints, 5 Sometimes hints, 7 Always hints (including skull mask), Several hints removed from the Sometimes hint pool.", "add_locations": [ { "location": "Deku Theater Skull Mask", "types": ["always"] } ], - "remove_locations": [], + "remove_locations": [ + {"location": "Sheik in Crater", "types": ["sometimes"]}, + {"location": "Song from Royal Familys Tomb", "types": ["sometimes"]}, + {"location": "Sheik in Forest", "types": ["sometimes"]}, + {"location": "Sheik at Temple", "types": ["sometimes"]}, + {"location": "Sheik at Colossus", "types": ["sometimes"]}, + {"location": "LH Sun", "types": ["sometimes"]}, + {"location": "GF HBA 1500 Points", "types": ["sometimes"]}, + {"location": "GC Maze Left Chest", "types": ["sometimes"]}, + {"location": "GV Chest", "types": ["sometimes"]}, + {"location": "Graveyard Royal Familys Tomb Chest", "types": ["sometimes"]}, + {"location": "GC Pot Freestanding PoH", "types": ["sometimes"]}, + {"location": "LH Lab Dive", "types": ["sometimes"]}, + {"location": "Fire Temple Megaton Hammer Chest", "types": ["sometimes"]}, + {"location": "Water Temple Boss Key Chest", "types": ["sometimes"]}, + {"location": "Gerudo Training Ground Maze Path Final Chest", "types": ["sometimes"]}, + {"location": "Spirit Temple Silver Gauntlets Chest", "types": ["sometimes"]}, + {"location": "Spirit Temple Mirror Shield Chest", "types": ["sometimes"]}, + {"location": "Shadow Temple Freestanding Key", "types": ["sometimes"]}, + {"location": "Ice Cavern Iron Boots Chest", "types": ["sometimes"]}, + {"location": "Ganons Castle Shadow Trial Golden Gauntlets Chest", "types": ["sometimes"]} + ], "add_items": [], - "remove_items": [{"types": ["woth"], "item": "Zeldas Lullaby"}], + "remove_items": [ + { "item": "Zeldas Lullaby", "types": ["goal"] } + ], "dungeons_woth_limit": 2, "dungeons_barren_limit": 1, "named_items_required": true, + "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 0.0, "fixed": 5, "copies": 2}, - "barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 2}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 100, "copies": 2}, - "random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 2}, - "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2} - }, - "groups": [], - "disabled": [] + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "goal": {"order": 4, "weight": 0.0, "fixed": 5, "copies": 2}, + "barren": {"order": 5, "weight": 0.0, "fixed": 3, "copies": 2}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 4, "copies": 2}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 100, "copies": 2}, + "random": {"order": 8, "weight": 9.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dual_always": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0} + } } diff --git a/worlds/oot/data/Hints/mw2.json b/worlds/oot/data/Hints/mw2.json deleted file mode 100644 index f29f8ea7b664..000000000000 --- a/worlds/oot/data/Hints/mw2.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "name": "mw2", - "gui_name": "MW Season 2", - "description": "Hints used for the multi-world tournament season 2.", - "add_locations": [ - { - "location": "Song from Ocarina of Time", - "types": [ - "always" - ] - }, - { - "location": "Deku Theater Skull Mask", - "types": [ - "always" - ] - }, - { - "location": "DMC Deku Scrub", - "types": [ - "always" - ] - } - ], - "remove_locations": [ - { - "location": "Haunted Wasteland", - "types": [ - "barren" - ] - }, - { - "location": "Temple of Time", - "types": [ - "barren" - ] - }, - { - "location": "Hyrule Castle", - "types": [ - "barren" - ] - }, - { - "location": "outside Ganon's Castle", - "types": [ - "barren" - ] - } - ], - "add_items": [], - "remove_items": [ - { - "item": "Zeldas Lullaby", - "types": [ - "woth" - ] - } - ], - "dungeons_woth_limit": 3, - "dungeons_barren_limit": 1, - "named_items_required": true, - "distribution": { - "trial": { - "order": 1, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "always": { - "order": 2, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "woth": { - "order": 3, - "weight": 0.0, - "fixed": 7, - "copies": 2 - }, - "barren": { - "order": 4, - "weight": 0.0, - "fixed": 3, - "copies": 2 - }, - "entrance": { - "order": 5, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "sometimes": { - "order": 6, - "weight": 0.0, - "fixed": 100, - "copies": 2 - }, - "random": { - "order": 7, - "weight": 9.0, - "fixed": 0, - "copies": 2 - }, - "item": { - "order": 0, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "song": { - "order": 0, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "overworld": { - "order": 0, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "dungeon": { - "order": 0, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "junk": { - "order": 0, - "weight": 0.0, - "fixed": 0, - "copies": 2 - }, - "named-item": { - "order": 8, - "weight": 0.0, - "fixed": 0, - "copies": 2 - } - } -} diff --git a/worlds/oot/data/Hints/mw3.json b/worlds/oot/data/Hints/mw3.json new file mode 100644 index 000000000000..d4cd7e013e7a --- /dev/null +++ b/worlds/oot/data/Hints/mw3.json @@ -0,0 +1,62 @@ +{ + "name": "mw3", + "gui_name": "MW Season 3", + "description": "Hints used for the Multiworld Tournament Season 3.", + "add_locations": [ + {"location": "Sheik in Kakariko", "types": ["always"]}, + {"location": "Song from Ocarina of Time", "types": ["always"]}, + {"location": "Deku Theater Skull Mask", "types": ["always"]}, + {"location": "DMC Deku Scrub", "types": ["always"]}, + {"location": "Deku Tree GS Basement Back Room", "types": ["sometimes"]}, + {"location": "Water Temple GS River", "types": ["sometimes"]}, + {"location": "Spirit Temple GS Hall After Sun Block Room", "types": ["sometimes"]} + ], + "remove_locations": [ + {"location": "Sheik in Crater", "types": ["sometimes"]}, + {"location": "Song from Royal Familys Tomb", "types": ["sometimes"]}, + {"location": "Sheik in Forest", "types": ["sometimes"]}, + {"location": "Sheik at Temple", "types": ["sometimes"]}, + {"location": "Sheik at Colossus", "types": ["sometimes"]}, + {"location": "LH Sun", "types": ["sometimes"]}, + {"location": "GC Maze Left Chest", "types": ["sometimes"]}, + {"location": "GV Chest", "types": ["sometimes"]}, + {"location": "Graveyard Royal Familys Tomb Chest", "types": ["sometimes"]}, + {"location": "GC Pot Freestanding PoH", "types": ["sometimes"]}, + {"location": "LH Lab Dive", "types": ["sometimes"]}, + {"location": "Fire Temple Megaton Hammer Chest", "types": ["sometimes"]}, + {"location": "Fire Temple Scarecrow Chest", "types": ["sometimes"]}, + {"location": "Water Temple Boss Key Chest", "types": ["sometimes"]}, + {"location": "Water Temple GS Behind Gate", "types": ["sometimes"]}, + {"location": "Gerudo Training Ground Maze Path Final Chest", "types": ["sometimes"]}, + {"location": "Spirit Temple Silver Gauntlets Chest", "types": ["sometimes"]}, + {"location": "Spirit Temple Mirror Shield Chest", "types": ["sometimes"]}, + {"location": "Shadow Temple Freestanding Key", "types": ["sometimes"]}, + {"location": "Ganons Castle Shadow Trial Golden Gauntlets Chest", "types": ["sometimes"]} + ], + "add_items": [], + "remove_items": [ + {"item": "Zeldas Lullaby", "types": ["woth","goal"]} + ], + "dungeons_woth_limit": 40, + "dungeons_barren_limit": 40, + "named_items_required": true, + "vague_named_items": false, + "use_default_goals": true, + "upgrade_hints": "on", + "distribution": { + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "goal": {"order": 3, "weight": 0.0, "fixed": 7, "copies": 2}, + "sometimes": {"order": 4, "weight": 0.0, "fixed": 100, "copies": 2}, + "barren": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "random": {"order": 0, "weight": 9.0, "fixed": 0, "copies": 2}, + "woth": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2} + } + } \ No newline at end of file diff --git a/worlds/oot/data/Hints/scrubs.json b/worlds/oot/data/Hints/scrubs.json index 262ca0107a02..462b44dffdf0 100644 --- a/worlds/oot/data/Hints/scrubs.json +++ b/worlds/oot/data/Hints/scrubs.json @@ -1,32 +1,40 @@ { "name": "scrubs", "gui_name": "Scrubs", - "description": "Tournament hints used for Scrubs Races. Duplicates of each hint, Skull Mask is an always hint, 5 WotH, 3 Foolish, 8 sometimes. Can also be used to simulate S3 Tournament hints.", + "description": "Tournament hints used for Scrubs Races. Duplicates of each hint, Sheik at Temple is an always hint, 5 WotH, 5 Foolish, 6 sometimes.", "add_locations": [ + { "location": "Sheik at Temple", "types": ["always"] }, { "location": "Deku Theater Skull Mask", "types": ["always"] }, { "location": "Deku Theater Mask of Truth", "types": ["always"] } ], "remove_locations": [], "add_items": [], - "remove_items": [], + "remove_items": [ + { "item": "Zeldas Lullaby", "types": ["woth"] } + ], "dungeons_woth_limit": 2, - "dungeons_barren_limit": 1, + "dungeons_barren_limit": 2, "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 0.0, "fixed": 5, "copies": 2}, - "barren": {"order": 4, "weight": 0.0, "fixed": 3, "copies": 2}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 2}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 100, "copies": 2}, - "random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 2}, - "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, - "named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2} + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 0.0, "fixed": 5, "copies": 2}, + "barren": {"order": 5, "weight": 0.0, "fixed": 5, "copies": 2}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 3, "copies": 2}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 100, "copies": 2}, + "random": {"order": 8, "weight": 9.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2}, + "goal": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0} }, "groups": [], "disabled": [] diff --git a/worlds/oot/data/Hints/strong.json b/worlds/oot/data/Hints/strong.json index 5892736d03af..c93478adec52 100644 --- a/worlds/oot/data/Hints/strong.json +++ b/worlds/oot/data/Hints/strong.json @@ -10,19 +10,24 @@ "dungeons_barren_limit": 1, "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.00, "fixed": 0, "copies": 1}, - "always": {"order": 2, "weight": 0.00, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 3.00, "fixed": 0, "copies": 2}, - "barren": {"order": 4, "weight": 3.00, "fixed": 0, "copies": 1}, - "entrance": {"order": 5, "weight": 1.00, "fixed": 0, "copies": 1}, - "sometimes": {"order": 6, "weight": 0.00, "fixed": 0, "copies": 1}, - "random": {"order": 7, "weight": 2.00, "fixed": 0, "copies": 1}, - "item": {"order": 8, "weight": 1.00, "fixed": 0, "copies": 1}, - "song": {"order": 9, "weight": 0.33, "fixed": 0, "copies": 1}, - "overworld": {"order": 10, "weight": 0.66, "fixed": 0, "copies": 1}, - "dungeon": {"order": 11, "weight": 0.66, "fixed": 0, "copies": 1}, - "junk": {"order": 12, "weight": 0.00, "fixed": 0, "copies": 1}, - "named-item": {"order": 13, "weight": 0.00, "fixed": 0, "copies": 1} + "trial": {"order": 1, "weight": 0.00, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 2, "weight": 0.00, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.00, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 3.00, "fixed": 0, "copies": 2}, + "barren": {"order": 5, "weight": 3.00, "fixed": 0, "copies": 1}, + "entrance": {"order": 6, "weight": 1.00, "fixed": 0, "copies": 1}, + "sometimes": {"order": 7, "weight": 0.00, "fixed": 0, "copies": 1}, + "random": {"order": 8, "weight": 2.00, "fixed": 0, "copies": 1}, + "item": {"order": 9, "weight": 1.00, "fixed": 0, "copies": 1}, + "song": {"order": 10, "weight": 0.33, "fixed": 0, "copies": 1}, + "overworld": {"order": 11, "weight": 0.66, "fixed": 0, "copies": 1}, + "dungeon": {"order": 12, "weight": 0.66, "fixed": 0, "copies": 1}, + "junk": {"order": 13, "weight": 0.00, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.00, "fixed": 0, "copies": 1}, + "goal": {"order": 15, "weight": 0.00, "fixed": 0, "copies": 1}, + "dual_always": {"order": 16, "weight": 0.00, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.00, "fixed": 0, "copies": 0} } -} \ No newline at end of file +} diff --git a/worlds/oot/data/Hints/tournament.json b/worlds/oot/data/Hints/tournament.json index 0248897007f3..ea1d44a4ca09 100644 --- a/worlds/oot/data/Hints/tournament.json +++ b/worlds/oot/data/Hints/tournament.json @@ -1,32 +1,43 @@ { "name": "tournament", "gui_name": "Tournament", - "description": "Tournament hints used for OoTR Season 4. Gossip stones in grottos are disabled. 4 WotH, 2 Barren, remainder filled with Sometimes. Always, WotH, and Barren hints duplicated.", - "add_locations": [], - "remove_locations": [], + "description": "Hint Distribution for the S6 Tournament. 5 Goal hints, 7 Sometimes hints, 8 Always hints (including Skull Mask and Sheik in Kakariko).", + "add_locations": [ + { "location": "Deku Theater Skull Mask", "types": ["always"] }, + { "location": "Sheik in Kakariko", "types": ["always"] } + ], + "remove_locations": [ + { "location": "Ganons Castle Shadow Trial Golden Gauntlets Chest", "types": ["sometimes"] }, + { "location": "Sheik in Forest", "types": ["sometimes"] }, + { "location": "Sheik at Temple", "types": ["sometimes"] }, + { "location": "Sheik in Crater", "types": ["sometimes"] }, + { "location": "Sheik at Colossus", "types": ["sometimes"] }, + { "location": "Song from Royal Familys Tomb", "types": ["sometimes"] } + ], "add_items": [], - "remove_items": [{"types": ["woth"], "item": "Zeldas Lullaby"}], - "dungeons_woth_limit": 2, - "dungeons_barren_limit": 1, + "remove_items": [ + { "item": "Zeldas Lullaby", "types": ["goal"] } + ], "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 0.0, "fixed": 4, "copies": 2}, - "barren": {"order": 4, "weight": 0.0, "fixed": 2, "copies": 2}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 1}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 99, "copies": 1}, - "random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 1}, - "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, - "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, - "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, - "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, - "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 1} - }, - "groups": [], - "disabled": [ - "HC (Storms Grotto)", "HF (Cow Grotto)", "HF (Near Market Grotto)", "HF (Southeast Grotto)", "HF (Open Grotto)", "Kak (Open Grotto)", "ZR (Open Grotto)", "KF (Storms Grotto)", "LW (Near Shortcuts Grotto)", "DMT (Storms Grotto)", "DMC (Upper Grotto)" - ] + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "goal": {"order": 4, "weight": 0.0, "fixed": 5, "copies": 2}, + "barren": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0}, + "entrance": {"order": 5, "weight": 0.0, "fixed": 4, "copies": 2}, + "sometimes": {"order": 6, "weight": 0.0, "fixed": 100, "copies": 2}, + "random": {"order": 7, "weight": 9.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dual_always": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 0} + } } diff --git a/worlds/oot/data/Hints/useless.json b/worlds/oot/data/Hints/useless.json index f0da50ac74be..3163a24a46f0 100644 --- a/worlds/oot/data/Hints/useless.json +++ b/worlds/oot/data/Hints/useless.json @@ -10,19 +10,24 @@ "dungeons_barren_limit": 1, "named_items_required": false, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 0}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 0}, - "woth": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 0}, - "barren": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0}, - "entrance": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 0}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 0}, - "random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 0}, - "item": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 0}, - "song": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 0}, - "overworld": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 0}, - "dungeon": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 0}, - "junk": {"order": 12, "weight": 9.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 0} + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 0}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 0}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 0}, + "woth": {"order": 4, "weight": 0.0, "fixed": 0, "copies": 0}, + "barren": {"order": 5, "weight": 0.0, "fixed": 0, "copies": 0}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 0}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 0}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 0}, + "item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 0}, + "song": {"order": 10, "weight": 0.0, "fixed": 0, "copies": 0}, + "overworld": {"order": 11, "weight": 0.0, "fixed": 0, "copies": 0}, + "dungeon": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 0}, + "junk": {"order": 13, "weight": 9.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.0, "fixed": 0, "copies": 0}, + "goal": {"order": 15, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual_always": {"order": 16, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.0, "fixed": 0, "copies": 0} } -} \ No newline at end of file +} diff --git a/worlds/oot/data/Hints/very_strong.json b/worlds/oot/data/Hints/very_strong.json index 90402bf2bff3..5de02afe6457 100644 --- a/worlds/oot/data/Hints/very_strong.json +++ b/worlds/oot/data/Hints/very_strong.json @@ -10,19 +10,24 @@ "dungeons_barren_limit": 40, "named_items_required": true, "vague_named_items": false, + "use_default_goals": true, "distribution": { - "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, - "always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, - "woth": {"order": 3, "weight": 3.0, "fixed": 0, "copies": 2}, - "barren": {"order": 4, "weight": 3.0, "fixed": 0, "copies": 1}, - "entrance": {"order": 5, "weight": 2.0, "fixed": 0, "copies": 1}, - "sometimes": {"order": 6, "weight": 0.0, "fixed": 0, "copies": 1}, - "random": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1}, - "item": {"order": 8, "weight": 1.0, "fixed": 0, "copies": 1}, - "song": {"order": 9, "weight": 0.5, "fixed": 0, "copies": 1}, - "overworld": {"order": 10, "weight": 1.5, "fixed": 0, "copies": 1}, - "dungeon": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1}, - "junk": {"order": 12, "weight": 0.0, "fixed": 0, "copies": 1}, - "named-item": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1} + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 3.0, "fixed": 0, "copies": 2}, + "barren": {"order": 5, "weight": 3.0, "fixed": 0, "copies": 1}, + "entrance": {"order": 6, "weight": 2.0, "fixed": 0, "copies": 1}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 1}, + "item": {"order": 9, "weight": 1.0, "fixed": 0, "copies": 1}, + "song": {"order": 10, "weight": 0.5, "fixed": 0, "copies": 1}, + "overworld": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1}, + "dungeon": {"order": 12, "weight": 1.5, "fixed": 0, "copies": 1}, + "junk": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.0, "fixed": 0, "copies": 1}, + "goal": {"order": 15, "weight": 0.0, "fixed": 0, "copies": 1}, + "dual_always": {"order": 16, "weight": 0.0, "fixed": 0, "copies": 0}, + "dual": {"order": 17, "weight": 0.0, "fixed": 0, "copies": 0} } -} \ No newline at end of file +} diff --git a/worlds/oot/data/Hints/very_strong_magic.json b/worlds/oot/data/Hints/very_strong_magic.json new file mode 100644 index 000000000000..e7f5190a3c90 --- /dev/null +++ b/worlds/oot/data/Hints/very_strong_magic.json @@ -0,0 +1,47 @@ +{ + "name": "very_strong_magic", + "gui_name": "Very Strong with Magic", + "description": "Like the Very Strong hint distribution, but a fixed goal hint with two copies for a Magic Meter is added. All other goals are removed.", + "add_locations": [], + "remove_locations": [], + "add_items": [], + "remove_items": [], + "dungeons_woth_limit": 40, + "dungeons_barren_limit": 40, + "named_items_required": true, + "vague_named_items": false, + "use_default_goals": false, + "distribution": { + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 1}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 3.0, "fixed": 0, "copies": 2}, + "barren": {"order": 5, "weight": 3.0, "fixed": 0, "copies": 1}, + "entrance": {"order": 6, "weight": 2.0, "fixed": 0, "copies": 1}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 0, "copies": 1}, + "random": {"order": 8, "weight": 0.0, "fixed": 0, "copies": 1}, + "item": {"order": 9, "weight": 1.0, "fixed": 0, "copies": 1}, + "song": {"order": 10, "weight": 0.5, "fixed": 0, "copies": 1}, + "overworld": {"order": 11, "weight": 1.5, "fixed": 0, "copies": 1}, + "dungeon": {"order": 12, "weight": 1.5, "fixed": 0, "copies": 1}, + "junk": {"order": 13, "weight": 0.0, "fixed": 0, "copies": 1}, + "named-item": {"order": 14, "weight": 0.0, "fixed": 0, "copies": 1}, + "goal": {"order": 15, "weight": 0.0, "fixed": 1, "copies": 2} + }, + "custom_goals": [ + { + "category": "path_of_magic", + "priority": 90, + "minimum_goals": 1, + "lock_entrances" : [], + "goals": [ + { + "name": "Magic", + "hint_text": "Path of Magic", + "color": "Green", + "items": [{"name": "Magic Meter", "quantity": 2, "minimum": 1, "hintable": true}] + } + ] + } + ] +} diff --git a/worlds/oot/data/Hints/weekly.json b/worlds/oot/data/Hints/weekly.json new file mode 100644 index 000000000000..4ba568724988 --- /dev/null +++ b/worlds/oot/data/Hints/weekly.json @@ -0,0 +1,34 @@ +{ + "name": "weekly", + "gui_name": "Weekly", + "description": "Hint distribution used for weekly races. Duplicates of each hint, Skull Mask is an always hint, 5 WotH, 3 Foolish, 5 sometimes.", + "add_locations": [ + { "location": "Deku Theater Skull Mask", "types": ["always"] }, + { "location": "Deku Theater Mask of Truth", "types": ["always"] } + ], + "remove_locations": [], + "add_items": [], + "remove_items": [ + { "item": "Zeldas Lullaby", "types": ["woth"] } + ], + "dungeons_woth_limit": 2, + "dungeons_barren_limit": 1, + "named_items_required": true, + "vague_named_items": false, + "distribution": { + "trial": {"order": 1, "weight": 0.0, "fixed": 0, "copies": 2}, + "entrance_always": {"order": 2, "weight": 0.0, "fixed": 0, "copies": 2}, + "always": {"order": 3, "weight": 0.0, "fixed": 0, "copies": 2}, + "woth": {"order": 4, "weight": 0.0, "fixed": 5, "copies": 2}, + "barren": {"order": 5, "weight": 0.0, "fixed": 3, "copies": 2}, + "entrance": {"order": 6, "weight": 0.0, "fixed": 4, "copies": 2}, + "sometimes": {"order": 7, "weight": 0.0, "fixed": 100, "copies": 2}, + "random": {"order": 8, "weight": 9.0, "fixed": 0, "copies": 2}, + "item": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "song": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "overworld": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "dungeon": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "junk": {"order": 0, "weight": 0.0, "fixed": 0, "copies": 2}, + "named-item": {"order": 9, "weight": 0.0, "fixed": 0, "copies": 2} + } +} diff --git a/worlds/oot/data/KeyRing.zobj b/worlds/oot/data/KeyRing.zobj new file mode 100644 index 000000000000..cf306f524b62 Binary files /dev/null and b/worlds/oot/data/KeyRing.zobj differ diff --git a/worlds/oot/data/LogicHelpers.json b/worlds/oot/data/LogicHelpers.json index 099aa2ea638b..7f3641062a8f 100644 --- a/worlds/oot/data/LogicHelpers.json +++ b/worlds/oot/data/LogicHelpers.json @@ -20,12 +20,12 @@ # "Bow": "'Bow'", # "Slingshot": "'Slingshot'", "Bombs": "Bomb_Bag", - "Deku_Shield": "Buy_Deku_Shield", + "Deku_Shield": "Buy_Deku_Shield or Deku_Shield_Drop", "Hylian_Shield": "Buy_Hylian_Shield", "Nuts": "Buy_Deku_Nut_5 or Buy_Deku_Nut_10 or Deku_Nut_Drop", "Sticks": "Buy_Deku_Stick_1 or Deku_Stick_Drop", "Bugs": "'Bugs' or Buy_Bottle_Bug", - "Blue_Fire": "'Blue Fire' or Buy_Blue_Fire", + "Blue_Fire": "'Blue Fire' or Buy_Blue_Fire or (blue_fire_arrows and can_use(Ice_Arrows))", "Fish": "'Fish' or Buy_Fish", "Fairy": "'Fairy' or Buy_Fairys_Spirit", "Big_Poe": "'Big Poe'", @@ -49,7 +49,7 @@ "can_summon_gossip_fairy": "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time or Suns_Song)", "can_summon_gossip_fairy_without_suns": "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time)", "can_take_damage": "damage_multiplier != 'ohko' or Fairy or can_use(Nayrus_Love)", - "can_plant_bean": "is_child and (Magic_Bean or Magic_Bean_Pack)", + "can_plant_bean": "plant_beans or (is_child and _oot_has_beans)", "can_play(song)": "Ocarina and song", "can_open_bomb_grotto": "can_blast_or_smash and (Stone_of_Agony or logic_grottos_without_agony)", "can_open_storm_grotto": "can_play(Song_of_Storms) and (Stone_of_Agony or logic_grottos_without_agony)", @@ -61,7 +61,11 @@ or (for_age == adult and (Bow or Hookshot)) or (for_age == both and (Slingshot or Boomerang) and (Bow or Hookshot)) or (for_age == either and (Slingshot or Boomerang or Bow or Hookshot))", - + "can_bonk": "deadly_bonks != 'ohko' or Fairy or can_use(Nayrus_Love)", + "can_break_crate": "can_bonk or can_blast_or_smash", + "can_break_heated_crate": "deadly_bonks != 'ohko' or (Fairy and (can_use(Goron_Tunic) or damage_multiplier != 'ohko')) or can_use(Nayrus_Love) or can_blast_or_smash", + "can_break_lower_beehive": "can_use(Boomerang) or can_use(Hookshot) or Bombs or (logic_beehives_bombchus and has_bombchus)", + "can_break_upper_beehive": "can_use(Boomerang) or can_use(Hookshot) or (logic_beehives_bombchus and has_bombchus)", # can_use and helpers # The parser reduces this to smallest form based on item category. # Note that can_use(item) is False for any item not covered here. @@ -72,7 +76,7 @@ "_is_magic_item(item)": "item == Dins_Fire or item == Farores_Wind or item == Nayrus_Love or item == Lens_of_Truth", "_is_adult_item(item)": "item == Bow or item == Megaton_Hammer or item == Iron_Boots or item == Hover_Boots or item == Hookshot or item == Longshot or item == Silver_Gauntlets or item == Golden_Gauntlets or item == Goron_Tunic or item == Zora_Tunic or item == Scarecrow or item == Distant_Scarecrow or item == Mirror_Shield", "_is_child_item(item)": "item == Slingshot or item == Boomerang or item == Kokiri_Sword or item == Sticks or item == Deku_Shield", - "_is_magic_arrow(item)": "item == Fire_Arrows or item == Light_Arrows", + "_is_magic_arrow(item)": "item == Fire_Arrows or item == Light_Arrows or (blue_fire_arrows and item == Ice_Arrows)", # Biggoron's trade path # ER with certain settings disables timers and prevents items from reverting on save warp. @@ -83,9 +87,11 @@ "has_fire_source_with_torch": "has_fire_source or (is_child and Sticks)", # Gerudo Fortress - "can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched)) - or (gerudo_fortress == 'fast' and Small_Key_Thieves_Hideout and (is_adult or Kokiri_Sword or is_glitched)) - or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')", + "can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and + 'Hideout 1 Torch Jail Carpenter' and 'Hideout 2 Torches Jail Carpenter' + and 'Hideout 3 Torches Jail Carpenter' and 'Hideout 4 Torches Jail Carpenter') + or (gerudo_fortress == 'fast' and 'Hideout 1 Torch Jail Carpenter') + or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')", # Mirror shield does not count because it cannot reflect scrub attack. "has_shield": "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)", "can_shield": "(is_adult and (Hylian_Shield or Mirror_Shield)) or (is_child and Deku_Shield)", @@ -104,11 +110,33 @@ (bridge == 'stones' and _oot_has_stones(bridge_stones)) or (bridge == 'medallions' and _oot_has_medallions(bridge_medallions)) or (bridge == 'dungeons' and _oot_has_dungeon_rewards(bridge_rewards)) or - (bridge == 'tokens' and (Gold_Skulltula_Token, bridge_tokens)))", + (bridge == 'tokens' and (Gold_Skulltula_Token, bridge_tokens)) or + (bridge == 'hearts' and _oot_has_hearts(bridge_hearts)))", "can_trigger_lacs": "( (lacs_condition == 'vanilla' and Shadow_Medallion and Spirit_Medallion) or (lacs_condition == 'stones' and _oot_has_stones(lacs_stones)) or (lacs_condition == 'medallions' and _oot_has_medallions(lacs_medallions)) or (lacs_condition == 'dungeons' and _oot_has_dungeon_rewards(lacs_rewards)) or - (lacs_condition == 'tokens' and (Gold_Skulltula_Token, lacs_tokens)))" + (lacs_condition == 'tokens' and (Gold_Skulltula_Token, lacs_tokens)) or + (lacs_condition == 'hearts' and _oot_has_hearts(lacs_hearts)))", + "can_receive_ganon_bosskey": "( + (shuffle_ganon_bosskey == 'stones' and _oot_has_stones(ganon_bosskey_stones)) or + (shuffle_ganon_bosskey == 'medallions' and _oot_has_medallions(ganon_bosskey_medallions)) or + (shuffle_ganon_bosskey == 'dungeons' and _oot_has_dungeon_rewards(ganon_bosskey_rewards)) or + (shuffle_ganon_bosskey == 'tokens' and (Gold_Skulltula_Token, ganon_bosskey_tokens)) or + (shuffle_ganon_bosskey == 'hearts' and _oot_has_hearts(ganon_bosskey_hearts))) or + (shuffle_ganon_bosskey == 'triforce' and (Triforce_Piece, triforce_goal_per_world)) or + (shuffle_ganon_bosskey != 'stones' and shuffle_ganon_bosskey != 'medallions' and + shuffle_ganon_bosskey != 'dungeons' and shuffle_ganon_bosskey != 'tokens' and + shuffle_ganon_bosskey != 'hearts' and shuffle_ganon_bosskey != 'triforce')", + + # Dungeon Shortcuts + "deku_tree_shortcuts": "'Deku Tree' in dungeon_shortcuts", + "dodongos_cavern_shortcuts": "'Dodongos Cavern' in dungeon_shortcuts", + "jabu_shortcuts": "'Jabu Jabus Belly' in dungeon_shortcuts", + "forest_temple_shortcuts": "'Forest Temple' in dungeon_shortcuts", + "fire_temple_shortcuts": "'Fire Temple' in dungeon_shortcuts", + "shadow_temple_shortcuts": "'Shadow Temple' in dungeon_shortcuts", + "spirit_temple_shortcuts": "'Spirit Temple' in dungeon_shortcuts", + "king_dodongo_shortcuts": "region_has_shortcuts('King Dodongo Boss Room')" } diff --git a/worlds/oot/data/Models/Adult/Constants/postconstants.zobj b/worlds/oot/data/Models/Adult/Constants/postconstants.zobj new file mode 100644 index 000000000000..385f07e849c6 Binary files /dev/null and b/worlds/oot/data/Models/Adult/Constants/postconstants.zobj differ diff --git a/worlds/oot/data/Models/Adult/Constants/preconstants.zobj b/worlds/oot/data/Models/Adult/Constants/preconstants.zobj new file mode 100644 index 000000000000..3f5e5d251f78 Binary files /dev/null and b/worlds/oot/data/Models/Adult/Constants/preconstants.zobj differ diff --git a/worlds/oot/data/Models/Child/Constants/postconstants.zobj b/worlds/oot/data/Models/Child/Constants/postconstants.zobj new file mode 100644 index 000000000000..51f1e563d4b8 Binary files /dev/null and b/worlds/oot/data/Models/Child/Constants/postconstants.zobj differ diff --git a/worlds/oot/data/Models/Child/Constants/preconstants.zobj b/worlds/oot/data/Models/Child/Constants/preconstants.zobj new file mode 100644 index 000000000000..7e6d6c05800b Binary files /dev/null and b/worlds/oot/data/Models/Child/Constants/preconstants.zobj differ diff --git a/worlds/oot/data/Triforce.zobj b/worlds/oot/data/Triforce.zobj new file mode 100644 index 000000000000..1438eb6403b1 Binary files /dev/null and b/worlds/oot/data/Triforce.zobj differ diff --git a/worlds/oot/data/World/Bosses.json b/worlds/oot/data/World/Bosses.json new file mode 100644 index 000000000000..0a81b3ec3b9b --- /dev/null +++ b/worlds/oot/data/World/Bosses.json @@ -0,0 +1,250 @@ +[ + # Boss and boss door logic. + # This is separated from individual dungeons because region names must match between normal/MQ + # And there are no differences in boss rooms between normal/MQ as they are separate areas. + # + # Key requirements (i.e. the only requirements for actually opening the boss door) + # belong on the door->boss connection. Any other requirements for reaching the boss door + # belong in the respective dungeon's logic json + { + "region_name": "Deku Tree Boss Door", + "scene": "Deku Tree", + "dungeon": "Deku Tree", + "exits": { + "Queen Gohma Boss Room": "True" + } + }, + { + "region_name": "Queen Gohma Boss Room", + "scene": "Deku Tree Boss", + "is_boss_room": "True", + "events": { + "Deku Tree Clear": "(Nuts or can_use(Slingshot)) and can_jumpslash" + }, + "locations": { + "Deku Tree Queen Gohma Heart": "'Deku Tree Clear'", + "Queen Gohma": "'Deku Tree Clear'" + }, + "exits": { + "Deku Tree Boss Door": "True" + } + }, + + { + "region_name": "Dodongos Cavern Boss Door", + "scene": "Dodongos Cavern", + "dungeon": "Dodongos Cavern", + "exits": { + "King Dodongo Boss Room": "True" + } + }, + { + "region_name": "King Dodongo Boss Room", + "scene": "Dodongos Cavern Boss", + "is_boss_room": "True", + "locations": { + "Dodongos Cavern Boss Room Chest": "True", + "Dodongos Cavern King Dodongo Heart": " + ((can_use(Megaton_Hammer) and logic_dc_hammer_floor) or + has_explosives or king_dodongo_shortcuts) and + (((Bombs or Progressive_Strength_Upgrade) and can_jumpslash) or deadly_bonks == 'ohko')", + "King Dodongo": " + ((can_use(Megaton_Hammer) and logic_dc_hammer_floor) or + has_explosives or king_dodongo_shortcuts) and + (((Bombs or Progressive_Strength_Upgrade) and can_jumpslash) or deadly_bonks == 'ohko')", + "Fairy Pot": "has_bottle" + }, + "exits": { + "Dodongos Cavern Boss Door": "True" + } + }, + + { + "region_name": "Jabu Jabus Belly Boss Door", + "scene": "Jabu Jabus Belly", + "dungeon": "Jabu Jabus Belly", + "exits": { + "Barinade Boss Room": "True" + } + }, + { + "region_name": "Barinade Boss Room", + "scene": "Jabu Jabus Belly Boss", + "is_boss_room": "True", + "locations": { + "Jabu Jabus Belly Barinade Heart": "can_use(Boomerang) and (Sticks or Kokiri_Sword)", + "Barinade": "can_use(Boomerang) and (Sticks or Kokiri_Sword)", + "Jabu Jabus Belly Barinade Pot 1": "True", + "Jabu Jabus Belly Barinade Pot 2": "True", + "Jabu Jabus Belly Barinade Pot 3": "True", + "Jabu Jabus Belly Barinade Pot 4": "True", + "Jabu Jabus Belly Barinade Pot 5": "True", + "Jabu Jabus Belly Barinade Pot 6": "True" + }, + "exits": { + "Jabu Jabus Belly Boss Door": "False" + } + }, + + { + "region_name": "Forest Temple Boss Door", + "scene": "Forest Temple", + "dungeon": "Forest Temple", + "exits": { + "Phantom Ganon Boss Room": "Boss_Key_Forest_Temple" + } + }, + { + "region_name": "Phantom Ganon Boss Room", + "scene": "Forest Temple Boss", + "is_boss_room": "True", + "locations": { + "Forest Temple Phantom Ganon Heart": " + can_use(Hookshot) or can_use(Bow) or (can_use(Slingshot) and Kokiri_Sword)", + "Phantom Ganon": " + can_use(Hookshot) or can_use(Bow) or (can_use(Slingshot) and Kokiri_Sword)" + }, + "exits": { + "Forest Temple Boss Door": "False" + } + }, + + { + "region_name": "Fire Temple Boss Door", + "scene": "Fire Temple", + "dungeon": "Fire Temple", + "exits": { + "Volvagia Boss Room": "Boss_Key_Fire_Temple" + } + }, + { + "region_name": "Volvagia Boss Room", + "scene": "Fire Temple Boss", + "is_boss_room": "True", + "locations": { + "Fire Temple Volvagia Heart": "can_use(Goron_Tunic) and can_use(Megaton_Hammer)", + "Volvagia": "can_use(Goron_Tunic) and can_use(Megaton_Hammer)" + }, + "exits": { + "Fire Temple Boss Door": "False" + } + }, + { + "region_name": "Water Temple Boss Door", + "scene": "Water Temple", + "dungeon": "Water Temple", + "exits": { + "Morpha Boss Room": "Boss_Key_Water_Temple" + } + }, + { + "region_name": "Morpha Boss Room", + "scene": "Water Temple Boss", + "is_boss_room": "True", + "events": { + "Water Temple Clear": "can_use(Hookshot)" + }, + "locations": { + "Morpha": "can_use(Hookshot)", + "Water Temple Morpha Heart": "can_use(Hookshot)" + }, + "exits": { + "Water Temple Boss Door": "False" + } + }, + + { + "region_name": "Shadow Temple Boss Door", + "scene": "Shadow Temple", + "dungeon": "Shadow Temple", + "exits": { + "Bongo Bongo Boss Room": "Boss_Key_Shadow_Temple" + } + }, + { + "region_name": "Bongo Bongo Boss Room", + "scene": "Shadow Temple Boss", + "is_boss_room": "True", + "locations": { + "Shadow Temple Bongo Bongo Heart": " + (Kokiri_Sword or is_adult) and + (can_use(Hookshot) or can_use(Bow) or can_use(Slingshot) or logic_shadow_bongo) and + (can_use(Lens_of_Truth) or logic_lens_bongo)", + "Bongo Bongo": " + (Kokiri_Sword or is_adult) and + (can_use(Hookshot) or can_use(Bow) or can_use(Slingshot) or logic_shadow_bongo) and + (can_use(Lens_of_Truth) or logic_lens_bongo)" + }, + "exits": { + "Shadow Temple Boss Door": "False" + } + }, + + { + "region_name": "Spirit Temple Boss Door", + "scene": "Spirit Temple", + "dungeon": "Spirit Temple", + "exits": { + "Twinrova Boss Room": "Boss_Key_Spirit_Temple" + } + }, + { + "region_name": "Twinrova Boss Room", + "scene": "Spirit Temple Boss", + "is_boss_room": "True", + "locations": { + "Spirit Temple Twinrova Heart": "can_use(Mirror_Shield)", + "Twinrova": "can_use(Mirror_Shield)" + }, + "exits": { + "Spirit Temple Boss Door": "False" + } + }, + { + "region_name": "Ganons Castle Tower", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Tower Boss Key Chest": "is_adult or Kokiri_Sword" + }, + "exits": { + "Ganons Castle Tower Below Boss": " + (is_adult or Kokiri_Sword) and + (Boss_Key_Ganons_Castle or (shuffle_pots != 'off'))" + } + }, + { + "region_name": "Ganons Castle Tower Below Boss", + "dungeon": "Ganons Castle", + "hint": "INSIDE_GANONS_CASTLE", + "alt_hint": "GANONDORFS_CHAMBER", + "locations": { + "Ganons Tower Pot 1": "True", + "Ganons Tower Pot 2": "True", + "Ganons Tower Pot 3": "True", + "Ganons Tower Pot 4": "True", + "Ganons Tower Pot 5": "True", + "Ganons Tower Pot 6": "True", + "Ganons Tower Pot 7": "True", + "Ganons Tower Pot 8": "True", + "Ganons Tower Pot 9": "True", + "Ganons Tower Pot 10": "True", + "Ganons Tower Pot 11": "True", + "Ganons Tower Pot 12": "True", + "Ganons Tower Pot 13": "True", + "Ganons Tower Pot 14": "True" + }, + "exits": { + "Ganondorf Boss Room": "Boss_Key_Ganons_Castle" + } + }, + { + "region_name": "Ganondorf Boss Room", + "dungeon": "Ganons Castle", + "hint": "INSIDE_GANONS_CASTLE", + "alt_hint": "GANONDORFS_CHAMBER", + "locations": { + "Ganondorf Hint": "True", + "Ganon": "can_use(Light_Arrows)" + } + } +] diff --git a/worlds/oot/data/World/Bottom of the Well MQ.json b/worlds/oot/data/World/Bottom of the Well MQ.json index e5644f625dda..3ce3cd584098 100644 --- a/worlds/oot/data/World/Bottom of the Well MQ.json +++ b/worlds/oot/data/World/Bottom of the Well MQ.json @@ -15,13 +15,21 @@ Kokiri_Sword or (Sticks and logic_child_deadhand)", "Bottom of the Well MQ Dead Hand Freestanding Key": " has_explosives or (logic_botw_mq_dead_hand_key and Boomerang)", + "Bottom of the Well MQ Bombable Recovery Heart 1": "has_explosives", + "Bottom of the Well MQ Bombable Recovery Heart 2": "has_explosives", + "Bottom of the Well MQ Basement Recovery Heart 1": "True", + "Bottom of the Well MQ Basement Recovery Heart 2": "True", + "Bottom of the Well MQ Basement Recovery Heart 3": "True", + "Bottom of the Well MQ Coffin Recovery Heart 1": " + (Small_Key_Bottom_of_the_Well, 2) and (Sticks or can_use(Dins_Fire))", + "Bottom of the Well MQ Coffin Recovery Heart 2": " + (Small_Key_Bottom_of_the_Well, 2) and (Sticks or can_use(Dins_Fire))", "Bottom of the Well MQ GS Basement": "can_child_attack", "Bottom of the Well MQ GS Coffin Room": " - can_child_attack and (Small_Key_Bottom_of_the_Well, 2)", + (Small_Key_Bottom_of_the_Well, 2) and can_child_attack", "Wall Fairy": "has_bottle and Slingshot" # The fairy pot is obsolete }, "exits": { - "Bottom of the Well": "True", "Bottom of the Well Middle": " can_play(Zeldas_Lullaby) or (logic_botw_mq_pits and has_explosives)" } @@ -31,14 +39,17 @@ "dungeon": "Bottom of the Well", "locations": { "Bottom of the Well MQ Map Chest": "True", - "Bottom of the Well MQ Lens of Truth Chest": " - has_explosives and (Small_Key_Bottom_of_the_Well, 2)", "Bottom of the Well MQ East Inner Room Freestanding Key": "True", + "Bottom of the Well MQ Lens of Truth Chest": " + (Small_Key_Bottom_of_the_Well, 2) and has_explosives", + "Bottom of the Well MQ Center Room Right Pot 1": "True", + "Bottom of the Well MQ Center Room Right Pot 2": "True", + "Bottom of the Well MQ Center Room Right Pot 3": "True", + "Bottom of the Well MQ East Inner Room Pot 1": "True", + "Bottom of the Well MQ East Inner Room Pot 2": "True", + "Bottom of the Well MQ East Inner Room Pot 3": "True", "Bottom of the Well MQ GS West Inner Room": " can_child_attack and (logic_botw_mq_pits or has_explosives)" - }, - "exits": { - "Bottom of the Well Perimeter": "True" } } ] diff --git a/worlds/oot/data/World/Bottom of the Well.json b/worlds/oot/data/World/Bottom of the Well.json index 47fd8962b32b..d46ee1427130 100644 --- a/worlds/oot/data/World/Bottom of the Well.json +++ b/worlds/oot/data/World/Bottom of the Well.json @@ -1,53 +1,91 @@ -[ +[ { "region_name": "Bottom of the Well", "dungeon": "Bottom of the Well", "exits": { "Kakariko Village": "True", - "Bottom of the Well Main Area" : "is_child and (can_child_attack or Nuts)" + "Bottom of the Well Main Area": "is_child and (can_child_attack or Nuts)" } }, { "region_name": "Bottom of the Well Main Area", "dungeon": "Bottom of the Well", "locations": { - "Bottom of the Well Front Left Fake Wall Chest": "logic_lens_botw or can_use(Lens_of_Truth)", "Bottom of the Well Front Center Bombable Chest": "has_explosives", - "Bottom of the Well Right Bottom Fake Wall Chest": "logic_lens_botw or can_use(Lens_of_Truth)", - "Bottom of the Well Compass Chest": "logic_lens_botw or can_use(Lens_of_Truth)", - "Bottom of the Well Center Skulltula Chest": "logic_lens_botw or can_use(Lens_of_Truth)", - "Bottom of the Well Back Left Bombable Chest": "has_explosives and (logic_lens_botw or can_use(Lens_of_Truth))", "Bottom of the Well Freestanding Key": "Sticks or can_use(Dins_Fire)", - "Bottom of the Well Lens of Truth Chest": " - can_play(Zeldas_Lullaby) and - (Kokiri_Sword or (Sticks and logic_child_deadhand))", - #Sword not strictly necessary but frankly being forced to do this with sticks isn't fair - "Bottom of the Well Invisible Chest": "can_play(Zeldas_Lullaby) and (logic_lens_botw or can_use(Lens_of_Truth))", - "Bottom of the Well Underwater Front Chest": "can_play(Zeldas_Lullaby)", "Bottom of the Well Underwater Left Chest": "can_play(Zeldas_Lullaby)", + "Bottom of the Well Underwater Front Chest": "can_play(Zeldas_Lullaby)", "Bottom of the Well Map Chest": " - has_explosives or - ((((Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))) or - can_use(Dins_Fire) or (logic_botw_basement and Sticks)) and - Progressive_Strength_Upgrade)", - "Bottom of the Well Fire Keese Chest": " - (Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))", #These pits are really unfair. - "Bottom of the Well Like Like Chest": " - (Small_Key_Bottom_of_the_Well, 3) and (logic_lens_botw or can_use(Lens_of_Truth))", - "Bottom of the Well GS West Inner Room": " - Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and - (Small_Key_Bottom_of_the_Well, 3)", - "Bottom of the Well GS East Inner Room": " - Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and - (Small_Key_Bottom_of_the_Well, 3)", - "Bottom of the Well GS Like Like Cage": " - Boomerang and (logic_lens_botw or can_use(Lens_of_Truth)) and - (Small_Key_Bottom_of_the_Well, 3)", + has_explosives or + (Progressive_Strength_Upgrade and + (at('Bottom of the Well Behind Locked Doors', True) or + can_use(Dins_Fire) or (logic_botw_basement and Sticks)))", + "Bottom of the Well Invisible Chest": " + can_play(Zeldas_Lullaby) and (logic_lens_botw or can_use(Lens_of_Truth))", + # Sword not strictly necessary but being forced to do this with sticks isn't fair + "Bottom of the Well Lens of Truth Chest": " + can_play(Zeldas_Lullaby) and (Kokiri_Sword or (Sticks and logic_child_deadhand))", + "Bottom of the Well Coffin Recovery Heart 1": "Sticks or can_use(Dins_Fire)", + "Bottom of the Well Coffin Recovery Heart 2": "True", + "Bottom of the Well Near Entrance Pot 1": "True", + "Bottom of the Well Near Entrance Pot 2": "True", + "Bottom of the Well Underwater Pot": " + can_play(Zeldas_Lullaby) or can_use(Slingshot) or can_use(Boomerang) or has_bombchus", + "Bottom of the Well Basement Pot 1": "True", + "Bottom of the Well Basement Pot 2": "True", + "Bottom of the Well Basement Pot 3": "True", + "Bottom of the Well Basement Pot 4": "True", + "Bottom of the Well Basement Pot 5": "True", + "Bottom of the Well Basement Pot 6": "True", + "Bottom of the Well Basement Pot 7": "True", + "Bottom of the Well Basement Pot 8": "True", + "Bottom of the Well Basement Pot 9": "True", + "Bottom of the Well Basement Pot 10": "True", + "Bottom of the Well Basement Pot 11": "True", + "Bottom of the Well Basement Pot 12": "True", + "Bottom of the Well Left Side Pot 1": "True", + "Bottom of the Well Left Side Pot 2": "True", + "Bottom of the Well Left Side Pot 3": "True", "Stick Pot": "True", "Nut Pot": "True" }, "exits": { - "Bottom of the Well" : "True" + "Bottom of the Well Behind Fake Walls": "logic_lens_botw or can_use(Lens_of_Truth)" + } + }, + { + "region_name": "Bottom of the Well Behind Fake Walls", + "dungeon": "Bottom of the Well", + "locations": { + "Bottom of the Well Front Left Fake Wall Chest": "True", + "Bottom of the Well Right Bottom Fake Wall Chest": "True", + "Bottom of the Well Compass Chest": "True", + "Bottom of the Well Center Skulltula Chest": "True", + "Bottom of the Well Back Left Bombable Chest": "has_explosives", + "Bottom of the Well Center Room Pit Fall Blue Rupee 1": "True", + "Bottom of the Well Center Room Pit Fall Blue Rupee 2": "True", + "Bottom of the Well Center Room Pit Fall Blue Rupee 3": "True", + "Bottom of the Well Center Room Pit Fall Blue Rupee 4": "True", + "Bottom of the Well Center Room Pit Fall Blue Rupee 5": "True" + }, + "exits": { + "Bottom of the Well Behind Locked Doors": "(Small_Key_Bottom_of_the_Well, 3)" + } + }, + { + "region_name": "Bottom of the Well Behind Locked Doors", + "dungeon": "Bottom of the Well", + "locations": { + # Lens required because these pits are really unfair. + "Bottom of the Well Fire Keese Chest": "True", + "Bottom of the Well Like Like Chest": "True", + "Bottom of the Well West Inner Room Flying Pot 1": "True", + "Bottom of the Well West Inner Room Flying Pot 2": "True", + "Bottom of the Well West Inner Room Flying Pot 3": "True", + "Bottom of the Well Fire Keese Pot": "True", + "Bottom of the Well GS West Inner Room": "Boomerang", + "Bottom of the Well GS East Inner Room": "Boomerang", + "Bottom of the Well GS Like Like Cage": "Boomerang" } } ] diff --git a/worlds/oot/data/World/Deku Tree MQ.json b/worlds/oot/data/World/Deku Tree MQ.json index e5fc840ed53a..3f3436b5354d 100644 --- a/worlds/oot/data/World/Deku Tree MQ.json +++ b/worlds/oot/data/World/Deku Tree MQ.json @@ -7,20 +7,35 @@ "Deku Tree MQ Slingshot Chest": "is_adult or can_child_attack", "Deku Tree MQ Slingshot Room Back Chest": "has_fire_source_with_torch or can_use(Bow)", "Deku Tree MQ Basement Chest": "has_fire_source_with_torch or can_use(Bow)", - "Deku Tree MQ GS Lobby": "is_adult or can_child_attack", + "Deku Tree MQ Lower Lobby Recovery Heart": "True", + "Deku Tree MQ Slingshot Room Recovery Heart": "True", + "Deku Tree MQ Lobby Crate": "can_break_crate", + "Deku Tree MQ Slingshot Room Crate 1": "can_break_crate", + "Deku Tree MQ Slingshot Room Crate 2": "can_break_crate", + "Deku Tree MQ GS Lobby": " + is_adult or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire) or + ((Slingshot or Boomerang) and can_break_crate)", "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", "Deku Baba Nuts": " - is_adult or Slingshot or Sticks or + is_adult or Slingshot or Sticks or has_explosives or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { "KF Outside Deku Tree": "True", - "Deku Tree Compass Room": " - here(can_use(Slingshot) or can_use(Bow)) and - here(has_fire_source_with_torch or can_use(Bow))", + "Deku Tree Near Compass Room": "here(has_fire_source_with_torch or can_use(Bow))", "Deku Tree Basement Water Room Front": " here(can_use(Slingshot) or can_use(Bow)) and here(has_fire_source_with_torch)", - "Deku Tree Basement Ledge": "logic_deku_b1_skip or here(is_adult)" + "Deku Tree Basement Ledge": "deku_tree_shortcuts or here(is_adult) or logic_deku_b1_skip" + } + }, + { + "region_name": "Deku Tree Near Compass Room", + "dungeon": "Deku Tree", + "locations": { + "Deku Tree MQ Near Compass Room Recovery Heart": "True" + }, + "exits": { + "Deku Tree Compass Room": "here(can_use(Slingshot) or can_use(Bow))" } }, { @@ -28,14 +43,13 @@ "dungeon": "Deku Tree", "locations": { "Deku Tree MQ Compass Chest": "True", + "Deku Tree MQ Compass Room Recovery Heart": " + has_bombchus or (Bombs and (can_play(Song_of_Time) or is_adult)) or + (can_use(Megaton_Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs))", "Deku Tree MQ GS Compass Room": " (can_use(Hookshot) or can_use(Boomerang)) and - here(has_bombchus or - (Bombs and (can_play(Song_of_Time) or is_adult)) or + here(has_bombchus or (Bombs and (can_play(Song_of_Time) or is_adult)) or (can_use(Megaton_Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))" - }, - "exits": { - "Deku Tree Lobby": "True" } }, { @@ -47,8 +61,7 @@ "exits": { "Deku Tree Basement Water Room Back": " logic_deku_mq_log or (is_child and (Deku_Shield or Hylian_Shield)) or - can_use(Longshot) or (can_use(Hookshot) and can_use(Iron_Boots))", - "Deku Tree Lobby": "True" + can_use(Longshot) or (can_use(Hookshot) and can_use(Iron_Boots))" } }, { @@ -81,27 +94,28 @@ "Deku Tree Basement Water Room Back": " can_use(Kokiri_Sword) or can_use_projectile or (Nuts and can_use(Sticks))" } - }, + }, { "region_name": "Deku Tree Basement Ledge", "dungeon": "Deku Tree", "locations": { - "Deku Tree MQ Deku Scrub": "can_stun_deku", - "Deku Tree Queen Gohma Heart": " - here(has_fire_source_with_torch) and here(has_shield) and - (is_adult or Kokiri_Sword or Sticks)", - "Queen Gohma": " - here(has_fire_source_with_torch) and here(has_shield) and - (is_adult or Kokiri_Sword or Sticks)" + "Deku Tree MQ Deku Scrub": "can_stun_deku" }, - "events": { - "Deku Tree Clear": " - here(has_fire_source_with_torch) and here(has_shield) and - (is_adult or Kokiri_Sword or Sticks)" - }, - "exits" : { + "exits": { "Deku Tree Basement Back Room": "is_child", - "Deku Tree Lobby": "True" + "Deku Tree Before Boss": "deku_tree_shortcuts or here(has_fire_source_with_torch)" + } + }, + { + "region_name": "Deku Tree Before Boss", + "dungeon": "Deku Tree", + "locations": { + "Deku Tree MQ Basement Recovery Heart 1": "True", + "Deku Tree MQ Basement Recovery Heart 2": "True", + "Deku Tree MQ Basement Recovery Heart 3": "True" + }, + "exits": { + "Deku Tree Boss Door": "deku_tree_shortcuts or here(has_shield)" } } ] diff --git a/worlds/oot/data/World/Deku Tree.json b/worlds/oot/data/World/Deku Tree.json index 8f1c8f67d6d4..d7ffb045fba9 100644 --- a/worlds/oot/data/World/Deku Tree.json +++ b/worlds/oot/data/World/Deku Tree.json @@ -6,28 +6,18 @@ "Deku Tree Map Chest": "True", "Deku Tree Compass Chest": "True", "Deku Tree Compass Room Side Chest": "True", - "Deku Tree Basement Chest": "is_adult or can_child_attack or Nuts", + "Deku Tree Lower Lobby Recovery Heart": "True", + "Deku Tree Upper Lobby Recovery Heart": "is_adult or can_child_attack or Nuts", "Deku Tree GS Compass Room": "is_adult or can_child_attack", - "Deku Tree GS Basement Vines": " - can_use_projectile or can_use(Dins_Fire) or - (logic_deku_basement_gs and (is_adult or Sticks or Kokiri_Sword))", - "Deku Tree GS Basement Gate": "is_adult or can_child_attack", "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", "Deku Baba Nuts": " - is_adult or Slingshot or Sticks or + is_adult or Slingshot or Sticks or has_explosives or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { "KF Outside Deku Tree": "True", "Deku Tree Slingshot Room": "here(has_shield)", - "Deku Tree Basement Backroom": " - (here(has_fire_source_with_torch or can_use(Bow)) and - here(can_use(Slingshot) or can_use(Bow))) or - (is_child and (logic_deku_b1_skip or here(is_adult)))", - "Deku Tree Boss Room": " - here(has_fire_source_with_torch or - (logic_deku_b1_webs_with_bow and can_use(Bow))) and - (logic_deku_b1_skip or here(is_adult or can_use(Slingshot)))" + "Deku Tree Basement": "deku_tree_shortcuts or is_adult or can_child_attack or Nuts" } }, { @@ -36,13 +26,27 @@ "locations": { "Deku Tree Slingshot Chest": "True", "Deku Tree Slingshot Room Side Chest": "True" + } + }, + { + "region_name": "Deku Tree Basement", + "dungeon": "Deku Tree", + "locations": { + "Deku Tree Basement Chest": "True", + "Deku Tree GS Basement Gate": "is_adult or can_child_attack", + "Deku Tree GS Basement Vines": " + can_use_projectile or can_use(Dins_Fire) or + (logic_deku_basement_gs and (is_adult or Sticks or Kokiri_Sword))" }, "exits": { - "Deku Tree Lobby": "True" + "Deku Tree Basement Back Room": " + here(has_fire_source_with_torch or can_use(Bow)) and + here(can_use(Slingshot) or can_use(Bow))", + "Deku Tree Basement Ledge": "deku_tree_shortcuts or here(is_adult) or logic_deku_b1_skip" } }, { - "region_name": "Deku Tree Basement Backroom", + "region_name": "Deku Tree Basement Back Room", "dungeon": "Deku Tree", "locations": { "Deku Tree GS Basement Back Room": " @@ -51,24 +55,29 @@ (can_use(Boomerang) or can_use(Hookshot))" }, "exits": { - "Deku Tree Lobby": "True" + "Deku Tree Basement Ledge": "is_child" } }, { - "region_name": "Deku Tree Boss Room", + "region_name": "Deku Tree Basement Ledge", + "dungeon": "Deku Tree", + "exits": { + "Deku Tree Basement Back Room": "is_child", + "Deku Tree Before Boss": " + deku_tree_shortcuts or + here(has_fire_source_with_torch or (logic_deku_b1_webs_with_bow and can_use(Bow)))" + } + }, + { + "region_name": "Deku Tree Before Boss", "dungeon": "Deku Tree", - "events": { - "Deku Tree Clear": " - here(has_shield) and (is_adult or Kokiri_Sword or Sticks)" - }, "locations": { - "Deku Tree Queen Gohma Heart": " - here(has_shield) and (is_adult or Kokiri_Sword or Sticks)", - "Queen Gohma": " - here(has_shield) and (is_adult or Kokiri_Sword or Sticks)" + "Deku Tree Basement Recovery Heart 1": "True", + "Deku Tree Basement Recovery Heart 2": "True", + "Deku Tree Basement Recovery Heart 3": "True" }, "exits": { - "Deku Tree Lobby": "True" + "Deku Tree Boss Door": "deku_tree_shortcuts or here(has_shield)" } } ] diff --git a/worlds/oot/data/World/Dodongos Cavern MQ.json b/worlds/oot/data/World/Dodongos Cavern MQ.json index cd466cc677f9..35b9d66de104 100644 --- a/worlds/oot/data/World/Dodongos Cavern MQ.json +++ b/worlds/oot/data/World/Dodongos Cavern MQ.json @@ -5,86 +5,219 @@ "exits": { "Death Mountain": "True", "Dodongos Cavern Lobby": " - here(can_blast_or_smash or Progressive_Strength_Upgrade)" + here(can_blast_or_smash or Progressive_Strength_Upgrade) or + dodongos_cavern_shortcuts" } }, { "region_name": "Dodongos Cavern Lobby", "dungeon": "Dodongos Cavern", "locations": { - "Deku Baba Sticks": "is_adult or Kokiri_Sword or can_use(Boomerang)", - "Dodongos Cavern MQ Map Chest": "True", - "Dodongos Cavern MQ Compass Chest": "is_adult or can_child_attack or Nuts", - "Dodongos Cavern MQ Larvae Room Chest": "can_use(Sticks) or has_fire_source", - "Dodongos Cavern MQ Torch Puzzle Room Chest": " - can_blast_or_smash or can_use(Sticks) or can_use(Dins_Fire) or - (is_adult and (logic_dc_jump or Hover_Boots or Progressive_Hookshot))", - "Dodongos Cavern MQ GS Song of Time Block Room": " - can_play(Song_of_Time) and (can_child_attack or is_adult)", - "Dodongos Cavern MQ GS Larvae Room": "can_use(Sticks) or has_fire_source", - "Dodongos Cavern MQ GS Lizalfos Room": "can_blast_or_smash", + "Dodongos Cavern MQ Map Chest": "can_blast_or_smash or Progressive_Strength_Upgrade", "Dodongos Cavern MQ Deku Scrub Lobby Rear": "can_stun_deku", "Dodongos Cavern MQ Deku Scrub Lobby Front": "can_stun_deku", + "Dodongos Cavern Gossip Stone": "here(can_blast_or_smash or Progressive_Strength_Upgrade)", + "Gossip Stone Fairy": " + (can_blast_or_smash or Progressive_Strength_Upgrade) and + can_summon_gossip_fairy and has_bottle" + }, + "exits": { + "Dodongos Cavern Elevator": "here(can_blast_or_smash or Progressive_Strength_Upgrade)", + "Dodongos Cavern Lower Right Side": "here(can_blast_or_smash)", + "Dodongos Cavern Poes Room": "is_adult", + "Dodongos Cavern Mouth": "dodongos_cavern_shortcuts" + } + }, + { + "region_name": "Dodongos Cavern Elevator", + "dungeon": "Dodongos Cavern", + "locations": { + # Regardless of how you destroy the boulder on the elevator switch, + # you will always be able to access the upper staircase in some way. "Dodongos Cavern MQ Deku Scrub Staircase": "can_stun_deku", - "Dodongos Cavern Gossip Stone": "True", - "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle" + "Dodongos Cavern MQ Staircase Pot 1": "True", + "Dodongos Cavern MQ Staircase Pot 2": "True", + "Dodongos Cavern MQ Staircase Pot 3": "True", + "Dodongos Cavern MQ Staircase Pot 4": "True", + "Dodongos Cavern MQ Staircase Crate Bottom Left": "True", + "Dodongos Cavern MQ Staircase Crate Bottom Right": "True", + "Dodongos Cavern MQ Staircase Crate Mid Left": "can_break_crate", + "Dodongos Cavern MQ Staircase Crate Mid Right": "can_break_crate", + "Dodongos Cavern MQ Staircase Crate Top Left": "can_break_crate", + "Dodongos Cavern MQ Staircase Crate Top Right": "can_break_crate", + "Dodongos Cavern MQ GS Song of Time Block Room": " + can_play(Song_of_Time) and (can_child_attack or is_adult)", + "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang" }, "exits": { - "Dodongos Cavern Lower Right Side": " - here(can_blast_or_smash or - ((can_use(Sticks) or can_use(Dins_Fire)) and can_take_damage))", - "Dodongos Cavern Bomb Bag Area": " - is_adult or (here(is_adult) and has_explosives) or - (logic_dc_mq_child_bombs and (Kokiri_Sword or Sticks) and can_take_damage)", - "Dodongos Cavern Boss Area": " - has_explosives or - (logic_dc_mq_eyes and Progressive_Strength_Upgrade and - (is_adult or logic_dc_mq_child_back) and - (here(can_use(Sticks)) or can_use(Dins_Fire) or - (is_adult and (logic_dc_jump or Megaton_Hammer or Hover_Boots or Hookshot))))" + "Dodongos Cavern Torch Puzzle Lower": " + (deadly_bonks != 'ohko' or can_use(Nayrus_Love) or can_blast_or_smash) and + (is_adult or can_child_attack or Nuts)", + "Dodongos Cavern Torch Puzzle Upper": " + here(can_blast_or_smash or can_use(Dins_Fire)) or + at('Dodongos Cavern Torch Puzzle Upper', Progressive_Strength_Upgrade)", + "Dodongos Cavern Poes Room": " + logic_dc_mq_child_bombs and (Kokiri_Sword or Sticks) and can_take_damage", + "Dodongos Cavern Mouth": "has_explosives" + } + }, + { + "region_name": "Dodongos Cavern Torch Puzzle Lower", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern MQ Compass Chest": "True", + "Dodongos Cavern MQ Torch Puzzle Room Recovery Heart": "True", + "Dodongos Cavern MQ Torch Puzzle Room Pot Pillar": " + can_use(Boomerang) or at('Dodongos Cavern Torch Puzzle Upper', True)" + }, + "exits": { + "Dodongos Cavern Larvae Room": "has_fire_source_with_torch", + "Dodongos Cavern Before Upper Lizalfos": "has_fire_source_with_torch", + "Dodongos Cavern Torch Puzzle Upper": " + is_adult and (logic_dc_jump or Hover_Boots or Hookshot)" + } + }, + { + "region_name": "Dodongos Cavern Larvae Room", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern MQ Larvae Room Chest": "True", + "Dodongos Cavern MQ Larvae Room Crate 1": "can_break_crate", + "Dodongos Cavern MQ Larvae Room Crate 2": "can_break_crate", + "Dodongos Cavern MQ Larvae Room Crate 3": "can_break_crate", + "Dodongos Cavern MQ Larvae Room Crate 4": "can_break_crate", + "Dodongos Cavern MQ Larvae Room Crate 5": "can_break_crate", + "Dodongos Cavern MQ Larvae Room Crate 6": "can_break_crate", + "Dodongos Cavern MQ GS Larvae Room": "True" + } + }, + { + "region_name": "Dodongos Cavern Before Upper Lizalfos", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern MQ Before Upper Lizalfos Pot 1": "True", + "Dodongos Cavern MQ Before Upper Lizalfos Pot 2": "True" + }, + "exits": { + "Dodongos Cavern Torch Puzzle Upper": "can_use(Sticks)" + } + }, + { + "region_name": "Dodongos Cavern Torch Puzzle Upper", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern MQ Torch Puzzle Room Chest": "True", + "Dodongos Cavern MQ Upper Lizalfos Pot 1": "True", + "Dodongos Cavern MQ Upper Lizalfos Pot 2": "True", + "Dodongos Cavern MQ Upper Lizalfos Pot 3": "True", + "Dodongos Cavern MQ Upper Lizalfos Pot 4": "True", + "Dodongos Cavern MQ After Upper Lizalfos Pot 1": "True", + "Dodongos Cavern MQ After Upper Lizalfos Pot 2": "True", + "Dodongos Cavern MQ Torch Puzzle Room Pot Corner": "True", + "Dodongos Cavern MQ After Upper Lizalfos Crate 1": "True", + "Dodongos Cavern MQ After Upper Lizalfos Crate 2": "True", + "Dodongos Cavern MQ GS Lizalfos Room": "can_blast_or_smash" + }, + "exits": { + "Dodongos Cavern Torch Puzzle Lower": "True", + "Dodongos Cavern Before Upper Lizalfos": "is_adult or Slingshot or Bombs or Kokiri_Sword", + "Dodongos Cavern Lower Right Side": "Progressive_Strength_Upgrade and can_take_damage", + "Dodongos Cavern Lower Lizalfos": "has_explosives", + "Dodongos Cavern Mouth": " + Progressive_Strength_Upgrade and + here((logic_dc_mq_eyes_adult and is_adult) or (logic_dc_mq_eyes_child and is_child))" } }, { "region_name": "Dodongos Cavern Lower Right Side", "dungeon": "Dodongos Cavern", "locations": { - "Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos": "can_stun_deku" + "Dodongos Cavern MQ Deku Scrub Side Room Near Lower Lizalfos": " + (can_blast_or_smash or Progressive_Strength_Upgrade) and can_stun_deku", + "Dodongos Cavern MQ Right Side Pot 1": "True", + "Dodongos Cavern MQ Right Side Pot 2": "True", + "Dodongos Cavern MQ Right Side Pot 3": "True", + "Dodongos Cavern MQ Right Side Pot 4": "True" }, "exits": { - "Dodongos Cavern Bomb Bag Area": " + "Dodongos Cavern Poes Room": " (here(can_use(Bow)) or Progressive_Strength_Upgrade or - can_use(Dins_Fire) or has_explosives) and + can_use(Dins_Fire) or has_explosives) and can_use(Slingshot)" } }, { - "region_name": "Dodongos Cavern Bomb Bag Area", + "region_name": "Dodongos Cavern Lower Lizalfos", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern Lower Lizalfos Hidden Recovery Heart": "True" + }, + "exits": { + # Child can fall down from above to reach Poes room, but Adult must defeat the + # lower Lizalfos here first, since they don't spawn when jumping down from above. + "Dodongos Cavern Poes Room": "here(is_adult)" + } + }, + { + "region_name": "Dodongos Cavern Poes Room", "dungeon": "Dodongos Cavern", "locations": { "Dodongos Cavern MQ Bomb Bag Chest": "True", + "Dodongos Cavern MQ Poes Room Pot 1": "True", + "Dodongos Cavern MQ Poes Room Pot 2": "True", + "Dodongos Cavern MQ Poes Room Pot 3": "True", + "Dodongos Cavern MQ Poes Room Pot 4": "True", + "Dodongos Cavern MQ Poes Room Crate 1": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 2": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 3": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 4": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 5": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 6": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate 7": "can_break_crate or Progressive_Strength_Upgrade", + "Dodongos Cavern MQ Poes Room Crate Near Bomb Flower": " + can_break_crate or Progressive_Strength_Upgrade or can_use(Bow) or can_use(Dins_Fire)", "Dodongos Cavern MQ GS Scrub Room": " (here(can_use(Bow)) or Progressive_Strength_Upgrade or - can_use(Dins_Fire) or has_explosives) and + can_use(Dins_Fire) or has_explosives) and (can_use(Hookshot) or can_use(Boomerang))" }, "exits": { - "Dodongos Cavern Lower Right Side": "True" + "Dodongos Cavern Lower Right Side": "True", + "Dodongos Cavern Lower Lizalfos": "True" } }, { - "region_name": "Dodongos Cavern Boss Area", + "region_name": "Dodongos Cavern Mouth", "dungeon": "Dodongos Cavern", "locations": { "Dodongos Cavern MQ Under Grave Chest": "True", - "Dodongos Cavern Boss Room Chest": "True", - "Dodongos Cavern King Dodongo Heart": " - can_blast_or_smash and (Bombs or Progressive_Strength_Upgrade) and - (is_adult or Sticks or Kokiri_Sword)", - "King Dodongo": " - can_blast_or_smash and (Bombs or Progressive_Strength_Upgrade) and - (is_adult or Sticks or Kokiri_Sword)", - "Dodongos Cavern MQ GS Back Area": "True", + "Dodongos Cavern MQ Room Before Boss Pot 1": "True", + "Dodongos Cavern MQ Room Before Boss Pot 2": "True", + "Dodongos Cavern MQ Armos Army Room Pot 1": "True", + "Dodongos Cavern MQ Armos Army Room Pot 2": "True", + "Dodongos Cavern MQ Back Poe Room Pot 1": "True", + "Dodongos Cavern MQ Back Poe Room Pot 2": "True", + "Dodongos Cavern MQ GS Back Area": " + can_use(Boomerang) or + at('Dodongos Cavern Before Boss', is_adult or can_child_attack or + Progressive_Strength_Upgrade)" + }, + "exits": { + # The final line of this exit is for using an Armos to explode the bomb flowers. + "Dodongos Cavern Before Boss": " + is_adult or has_explosives or can_use(Dins_Fire) or dodongos_cavern_shortcuts or + Sticks or ((Nuts or Boomerang) and (Kokiri_Sword or Slingshot))" + } + }, + { + "region_name": "Dodongos Cavern Before Boss", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern MQ Armos Army Room Upper Pot": "True", "Fairy Pot": "has_bottle" + }, + "exits": { + "Dodongos Cavern Boss Door": "True" } } ] diff --git a/worlds/oot/data/World/Dodongos Cavern.json b/worlds/oot/data/World/Dodongos Cavern.json index e45bfe0efebb..9f9489e7a7f8 100644 --- a/worlds/oot/data/World/Dodongos Cavern.json +++ b/worlds/oot/data/World/Dodongos Cavern.json @@ -5,50 +5,82 @@ "exits": { "Death Mountain": "True", "Dodongos Cavern Lobby": " - here(can_blast_or_smash or Progressive_Strength_Upgrade)" + here(can_blast_or_smash or Progressive_Strength_Upgrade) or + dodongos_cavern_shortcuts" } }, { "region_name": "Dodongos Cavern Lobby", "dungeon": "Dodongos Cavern", "locations": { - "Dodongos Cavern Map Chest": "True", + "Dodongos Cavern Map Chest": "can_blast_or_smash or Progressive_Strength_Upgrade", + "Dodongos Cavern Deku Scrub Lobby": "can_stun_deku or Progressive_Strength_Upgrade", + "Dodongos Cavern Gossip Stone": "here(can_blast_or_smash or Progressive_Strength_Upgrade)", + "Gossip Stone Fairy": " + (can_blast_or_smash or Progressive_Strength_Upgrade) and + can_summon_gossip_fairy and has_bottle" + }, + "exits": { + "Dodongos Cavern Lower Right Side": "has_explosives or Progressive_Strength_Upgrade", + "Dodongos Cavern Torch Room": "is_adult", + "Dodongos Cavern Staircase Room": " + at('Dodongos Cavern Torch Room', is_adult or Sticks or can_use(Dins_Fire))", + "Dodongos Cavern Far Bridge": "at('Dodongos Cavern Far Bridge', True)", + "Dodongos Cavern Before Boss": "dodongos_cavern_shortcuts" + } + }, + { + "region_name": "Dodongos Cavern Lower Right Side", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern Lower Lizalfos Hidden Recovery Heart": "True", + "Dodongos Cavern Right Side Pot 1": "True", + "Dodongos Cavern Right Side Pot 2": "True", + "Dodongos Cavern Right Side Pot 3": "True", + "Dodongos Cavern Right Side Pot 4": "True", + "Dodongos Cavern Right Side Pot 5": "True", + "Dodongos Cavern Right Side Pot 6": "True", + "Dodongos Cavern Lower Lizalfos Pot 1": "True", + "Dodongos Cavern Lower Lizalfos Pot 2": "True", + "Dodongos Cavern Lower Lizalfos Pot 3": "True", + "Dodongos Cavern Lower Lizalfos Pot 4": "True", "Dodongos Cavern GS Side Room Near Lower Lizalfos": " - has_explosives or is_adult or Slingshot or - Boomerang or Sticks or Kokiri_Sword", + is_adult or has_explosives or Sticks or Slingshot or Boomerang or Kokiri_Sword", "Dodongos Cavern GS Scarecrow": " - can_use(Scarecrow) or can_use(Longshot) or - (logic_dc_scarecrow_gs and (is_adult or can_child_attack))", + can_use(Scarecrow) or can_use(Longshot) or + (logic_dc_scarecrow_gs and (is_adult or can_child_attack))" + }, + "exits": { + "Dodongos Cavern Torch Room": "Sticks or Slingshot or Bombs or Kokiri_Sword" + } + }, + { + "region_name": "Dodongos Cavern Torch Room", + "dungeon": "Dodongos Cavern", + "locations": { "Dodongos Cavern Deku Scrub Side Room Near Dodongos": " - is_adult or Slingshot or Sticks or - has_explosives or Kokiri_Sword", - "Dodongos Cavern Deku Scrub Lobby": "True", - "Dodongos Cavern Gossip Stone": "True", - "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle" + can_blast_or_smash or Progressive_Strength_Upgrade", + "Dodongos Cavern Torch Room Pot 1": "True", + "Dodongos Cavern Torch Room Pot 2": "True", + "Dodongos Cavern Torch Room Pot 3": "True", + "Dodongos Cavern Torch Room Pot 4": "True" }, "exits": { - "Dodongos Cavern Beginning": "True", - "Dodongos Cavern Staircase Room": " - here(is_adult or Sticks or - (can_use(Dins_Fire) and (Slingshot or has_explosives or Kokiri_Sword)))", - "Dodongos Cavern Far Bridge": "at('Dodongos Cavern Far Bridge', True)" + "Dodongos Cavern Lower Right Side": "True" } }, { "region_name": "Dodongos Cavern Staircase Room", "dungeon": "Dodongos Cavern", "locations": { - "Dodongos Cavern Compass Chest": "True", + "Dodongos Cavern Compass Chest": "can_blast_or_smash or Progressive_Strength_Upgrade", "Dodongos Cavern GS Vines Above Stairs": " - has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire) or - (logic_dc_staircase and can_use(Bow)) or - (logic_dc_vines_gs and can_use(Longshot))" + at('Dodongos Cavern Climb', True) or (logic_dc_vines_gs and can_use(Longshot))" }, "exits": { - "Dodongos Cavern Lobby": "True", "Dodongos Cavern Climb": " - has_explosives or Progressive_Strength_Upgrade or - can_use(Dins_Fire) or (logic_dc_staircase and can_use(Bow))" + has_explosives or Progressive_Strength_Upgrade or + can_use(Dins_Fire) or (logic_dc_staircase and can_use(Bow))" } }, { @@ -61,14 +93,46 @@ (logic_dc_scrub_room and is_adult and Progressive_Strength_Upgrade)", "Dodongos Cavern Deku Scrub Near Bomb Bag Left": " can_blast_or_smash or - (logic_dc_scrub_room and is_adult and Progressive_Strength_Upgrade)" + (logic_dc_scrub_room and is_adult and Progressive_Strength_Upgrade)", + "Dodongos Cavern Blade Room Behind Block Recovery Heart": "True", + "Dodongos Cavern Staircase Pot 1": "True", + "Dodongos Cavern Staircase Pot 2": "True", + "Dodongos Cavern Staircase Pot 3": "True", + "Dodongos Cavern Staircase Pot 4": "True", + "Dodongos Cavern Blade Room Pot 1": " + can_use(Boomerang) or at('Dodongos Cavern Far Bridge', True)", + "Dodongos Cavern Blade Room Pot 2": " + can_use(Boomerang) or at('Dodongos Cavern Far Bridge', True)" }, "exits": { - "Dodongos Cavern Lobby": "True", + "Dodongos Cavern Before Upper Lizalfos": " + here(can_blast_or_smash or Progressive_Strength_Upgrade)", "Dodongos Cavern Far Bridge": " - (is_child and (Slingshot or - (logic_dc_slingshot_skip and (Sticks or has_explosives or Kokiri_Sword)))) or - (is_adult and (Bow or Hover_Boots or can_use(Longshot) or logic_dc_jump))" + is_adult and (logic_dc_jump or Hover_Boots or Longshot)" + } + }, + { + "region_name": "Dodongos Cavern Before Upper Lizalfos", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern Single Eye Switch Room Pot 1": "True", + "Dodongos Cavern Single Eye Switch Room Pot 2": "True" + }, + "exits": { + "Dodongos Cavern Upper Lizalfos": " + (is_child and (Slingshot or logic_dc_slingshot_skip)) or can_use(Bow)" + } + }, + { + "region_name": "Dodongos Cavern Upper Lizalfos", + "dungeon": "Dodongos Cavern", + "locations": { + "Dodongos Cavern Lizalfos Upper Recovery Heart 1": "True", + "Dodongos Cavern Lizalfos Upper Recovery Heart 2": "True" + }, + "exits": { + "Dodongos Cavern Before Upper Lizalfos": "True", + "Dodongos Cavern Far Bridge": "is_adult or Sticks or Slingshot or Bombs or Kokiri_Sword" } }, { @@ -77,29 +141,27 @@ "locations": { "Dodongos Cavern Bomb Bag Chest": "True", "Dodongos Cavern End of Bridge Chest": "can_blast_or_smash", + "Dodongos Cavern Double Eye Switch Room Pot 1": "True", + "Dodongos Cavern Double Eye Switch Room Pot 2": "True", "Dodongos Cavern GS Alcove Above Stairs": "can_use(Hookshot) or can_use(Boomerang)" }, "exits": { - "Dodongos Cavern Boss Area": "has_explosives", - "Dodongos Cavern Lobby": "True" + "Dodongos Cavern Before Boss": "has_explosives", + "Dodongos Cavern Upper Lizalfos": "True" } }, { - "region_name": "Dodongos Cavern Boss Area", + "region_name": "Dodongos Cavern Before Boss", "dungeon": "Dodongos Cavern", "locations": { - "Dodongos Cavern Boss Room Chest": "True", - "Dodongos Cavern King Dodongo Heart": " - (Bombs or Progressive_Strength_Upgrade) and - (is_adult or Sticks or Kokiri_Sword)", - "King Dodongo": " - (Bombs or Progressive_Strength_Upgrade) and - (is_adult or Sticks or Kokiri_Sword)", - "Dodongos Cavern GS Back Room": "True", + "Dodongos Cavern Last Block Pot 1": "True", + "Dodongos Cavern Last Block Pot 2": "True", + "Dodongos Cavern Last Block Pot 3": "True", + "Dodongos Cavern GS Back Room": "can_blast_or_smash", "Fairy Pot": "has_bottle" }, "exits": { - "Dodongos Cavern Lobby": "True" + "Dodongos Cavern Boss Door": "True" } } ] diff --git a/worlds/oot/data/World/Fire Temple MQ.json b/worlds/oot/data/World/Fire Temple MQ.json index 5e1e177d5b76..23734530baac 100644 --- a/worlds/oot/data/World/Fire Temple MQ.json +++ b/worlds/oot/data/World/Fire Temple MQ.json @@ -5,110 +5,221 @@ "locations": { "Fire Temple MQ Map Room Side Chest": " is_adult or Kokiri_Sword or Sticks or Slingshot or Bombs or can_use(Dins_Fire)", - "Fire Temple MQ Near Boss Chest": " - (logic_fewer_tunic_requirements or can_use(Goron_Tunic)) and - (((can_use(Hover_Boots) or (logic_fire_mq_near_boss and can_use(Bow))) and has_fire_source) or - (can_use(Hookshot) and (can_use(Fire_Arrows) or - (can_use(Dins_Fire) and - ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or - can_use(Goron_Tunic) or can_use(Bow) or can_use(Longshot))))))" + "Fire Temple MQ First Room Pot 1": "True", + "Fire Temple MQ First Room Pot 2": "True" }, "exits": { "DMC Fire Temple Entrance": "True", - "Fire Boss Room": " - can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and - ((has_fire_source and (logic_fire_boss_door_jump or Hover_Boots)) or at('Fire Temple Upper', True))", - "Fire Lower Locked Door": "(Small_Key_Fire_Temple, 5) and (is_adult or Kokiri_Sword)", - "Fire Big Lava Room": " - (logic_fewer_tunic_requirements or can_use(Goron_Tunic)) and can_use(Megaton_Hammer)" + "Fire Temple Near Boss": " + is_adult and has_fire_source and + (logic_fewer_tunic_requirements or can_use(Goron_Tunic))", + "Fire Temple Lower Locked Door": " + (Small_Key_Fire_Temple, 5) and (is_adult or Kokiri_Sword)", + "Fire Temple Big Lava Room": " + is_adult and Megaton_Hammer and (logic_fewer_tunic_requirements or Goron_Tunic)" } }, { - "region_name": "Fire Lower Locked Door", + "region_name": "Fire Temple Near Boss", "dungeon": "Fire Temple", "locations": { - "Fire Temple MQ Megaton Hammer Chest": "is_adult and (has_explosives or Megaton_Hammer or Hookshot)", + "Fire Temple MQ Near Boss Chest": " + is_adult and + ((logic_fire_mq_near_boss and has_fire_source and Bow) or + ((Hover_Boots or Hookshot) and + ((can_use(Fire_Arrows) and can_break_heated_crate) or + (can_use(Dins_Fire) and + ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or + Goron_Tunic or Hover_Boots or Bow or Longshot)))))", + "Fire Temple MQ Near Boss Pot 1": "can_use(Hookshot) or can_use(Hover_Boots)", + "Fire Temple MQ Near Boss Pot 2": "can_use(Hookshot) or can_use(Hover_Boots)", + "Fire Temple MQ Near Boss Left Crate 1": "can_break_heated_crate", + "Fire Temple MQ Near Boss Left Crate 2": "can_break_heated_crate", + "Fire Temple MQ Near Boss Right Lower Crate 1": " + (can_use(Hookshot) or can_use(Hover_Boots)) and can_break_heated_crate", + "Fire Temple MQ Near Boss Right Lower Crate 2": " + (can_use(Hookshot) or can_use(Hover_Boots)) and can_break_heated_crate", + "Fire Temple MQ Near Boss Right Mid Crate": " + (can_use(Hookshot) or can_use(Hover_Boots)) and can_break_heated_crate", + "Fire Temple MQ Near Boss Right Upper Crate": " + (can_use(Hookshot) or can_use(Hover_Boots)) and can_break_heated_crate" + }, + "exits": { + "Fire Temple Boss Door": " + is_adult and (fire_temple_shortcuts or logic_fire_boss_door_jump or Hover_Boots)" + } + }, + { + "region_name": "Fire Temple Lower Locked Door", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Megaton Hammer Chest": " + is_adult and (has_explosives or Megaton_Hammer or Hookshot)", "Fire Temple MQ Map Chest": "can_use(Megaton_Hammer)", + "Fire Temple MQ Iron Knuckle Room Pot 1": "True", + "Fire Temple MQ Iron Knuckle Room Pot 2": "True", + "Fire Temple MQ Iron Knuckle Room Pot 3": "True", + "Fire Temple MQ Iron Knuckle Room Pot 4": "True", "Fairy Pot": "has_bottle" } }, { - "region_name": "Fire Big Lava Room", + "region_name": "Fire Temple Big Lava Room", "dungeon": "Fire Temple", "locations": { "Fire Temple MQ Boss Key Chest": " - has_fire_source and (Bow or logic_fire_mq_bk_chest) and can_use(Hookshot)", + has_fire_source and (Bow or logic_fire_mq_bk_chest) and Hookshot", "Fire Temple MQ Big Lava Room Blocked Door Chest": " - has_fire_source and has_explosives and - (can_use(Hookshot) or logic_fire_mq_blocked_chest)", + (Hookshot or logic_fire_mq_blocked_chest) and has_explosives and has_fire_source", + "Fire Temple MQ Big Lava Room Left Pot": "True", + "Fire Temple MQ Big Lava Room Right Pot": "Hookshot or logic_fire_mq_blocked_chest", + "Fire Temple MQ Big Lava Room Alcove Pot": "True", + "Fire Temple MQ Boss Key Chest Room Pot": " + has_fire_source and (Bow or logic_fire_mq_bk_chest) and Hookshot", "Fire Temple MQ GS Big Lava Room Open Door": "True", "Fairy Pot": " has_bottle and has_fire_source and (Bow or logic_fire_mq_bk_chest) and - (can_use(Hookshot) or logic_fire_song_of_time)" + (Hookshot or logic_fire_song_of_time)" }, "exits": { - "Fire Lower Maze": " - can_use(Goron_Tunic) and (Small_Key_Fire_Temple, 2) and - (has_fire_source or (logic_fire_mq_climb and Hover_Boots))" + "Fire Temple Elevator Room": "Goron_Tunic and (Small_Key_Fire_Temple, 2)" } }, { - "region_name": "Fire Lower Maze", + "region_name": "Fire Temple Elevator Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Elevator Room Recovery Heart 1": "True", + "Fire Temple MQ Elevator Room Recovery Heart 2": "True", + "Fire Temple MQ Elevator Room Recovery Heart 3": "True" + }, + "exits": { + "Fire Temple Lower Lizalfos Maze": "has_fire_source or (logic_fire_mq_climb and Hover_Boots)" + } + }, + { + "region_name": "Fire Temple Lower Lizalfos Maze", "dungeon": "Fire Temple", "locations": { "Fire Temple MQ Lizalfos Maze Lower Chest": "True", "Fire Temple MQ Lizalfos Maze Side Room Chest": " - has_explosives and (logic_fire_mq_maze_side_room or at('Fire Upper Maze', True))" + has_explosives and + (logic_fire_mq_maze_side_room or at('Fire Temple Upper Lizalfos Maze', True))", + "Fire Temple MQ Lower Lizalfos Maze Crate 1": "True", + "Fire Temple MQ Lower Lizalfos Maze Crate 2": "True", + "Fire Temple MQ Lower Lizalfos Maze Crate 3": "True" }, "exits": { - "Fire Upper Maze": " - ((has_explosives or logic_rusted_switches) and can_use(Hookshot)) or - (logic_fire_mq_maze_hovers and can_use(Hover_Boots)) or logic_fire_mq_maze_jump" + "Fire Temple Upper Lizalfos Maze": " + ((has_explosives or logic_rusted_switches) and Hookshot) or + (logic_fire_mq_maze_hovers and Hover_Boots) or logic_fire_mq_maze_jump" } }, { - "region_name": "Fire Upper Maze", + "region_name": "Fire Temple Upper Lizalfos Maze", "dungeon": "Fire Temple", "locations": { "Fire Temple MQ Lizalfos Maze Upper Chest": "True", - "Fire Temple MQ Compass Chest": "has_explosives", - "Fire Temple MQ GS Skull On Fire": " - (can_play(Song_of_Time) and can_use(Hookshot) and (has_explosives or logic_rusted_switches)) or - can_use(Longshot)", - "Wall Fairy": " - has_bottle and - ((can_play(Song_of_Time) and can_use(Hookshot) and (has_explosives or logic_rusted_switches)) or - can_use(Longshot))", - "Fairy Pot": "has_bottle and (Small_Key_Fire_Temple, 3)" + "Fire Temple MQ Upper Lizalfos Maze Crate 1": "True", + "Fire Temple MQ Upper Lizalfos Maze Crate 2": "True", + "Fire Temple MQ Upper Lizalfos Maze Crate 3": "True" }, "exits": { - "Fire Temple Upper": " - (Small_Key_Fire_Temple, 3) and - ((can_use(Bow) and can_use(Hookshot)) or can_use(Fire_Arrows))" + "Fire Temple Shortcut": "has_explosives", + "Fire Temple Block On Fire Room": " + (Longshot or (can_play(Song_of_Time) and Hookshot)) and + (has_explosives or logic_rusted_switches or (Longshot and logic_fire_scarecrow))", + "Fire Temple Shoot Torch On Wall Room": "(Small_Key_Fire_Temple, 3)" } }, { - "region_name": "Fire Temple Upper", + "region_name": "Fire Temple Shortcut", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Compass Chest": "True", + "Fire Temple MQ Shortcut Crate 1": "True", + "Fire Temple MQ Shortcut Crate 2": "True", + "Fire Temple MQ Shortcut Crate 3": "True", + "Fire Temple MQ Shortcut Crate 4": "True", + "Fire Temple MQ Shortcut Crate 5": "True", + "Fire Temple MQ Shortcut Crate 6": "True" + } + }, + { + "region_name": "Fire Temple Block On Fire Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ GS Skull On Fire": "True", + "Wall Fairy": "has_bottle" + }, + "exits": { + "Fire Temple Narrow Path Room": " + (damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or + Fairy or can_use(Nayrus_Love)" + } + }, + { + "region_name": "Fire Temple Narrow Path Room", "dungeon": "Fire Temple", "locations": { - "Fire Temple MQ Freestanding Key": "can_use(Hookshot) or logic_fire_mq_flame_maze", - "Fire Temple MQ Chest On Fire": " - (can_use(Hookshot) or logic_fire_mq_flame_maze) and (Small_Key_Fire_Temple, 4)", - "Fire Temple MQ GS Fire Wall Maze Side Room": " + "Fire Temple MQ Narrow Path Room Pot 1": "True", + "Fire Temple MQ Narrow Path Room Pot 2": "True", + "Fairy Pot": "has_bottle" + } + }, + { + "region_name": "Fire Temple Shoot Torch On Wall Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Shoot Torch On Wall Room Pot 1": "True", + "Fire Temple MQ Shoot Torch On Wall Room Pot 2": "True", + "Fire Temple MQ Shoot Torch On Wall Room Right Crate 1": "True", + "Fire Temple MQ Shoot Torch On Wall Room Right Crate 2": "True", + "Fire Temple MQ Shoot Torch On Wall Room Center Crate": "True", + "Fire Temple MQ Shoot Torch On Wall Room Left Crate 1": "True", + "Fire Temple MQ Shoot Torch On Wall Room Left Crate 2": "True" + }, + "exits": { + "Fire Temple Narrow Path Room": "True", + "Fire Temple Flame Maze": "(can_use(Bow) and can_use(Hookshot)) or can_use(Fire_Arrows)" + } + }, + { + "region_name": "Fire Temple Flame Maze", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Flame Maze Left Pot 1": "True", + "Fire Temple MQ GS Flame Maze Center": "has_explosives", + "Fire Temple MQ GS Above Flame Maze": " + (Hookshot and (Small_Key_Fire_Temple, 5)) or + (logic_fire_mq_above_maze_gs and Longshot)" + }, + "exits": { + "Fire Temple Near Boss": "True", + "Fire Temple Flame Maze Side Room": " can_play(Song_of_Time) or Hover_Boots or logic_fire_mq_flame_maze", - "Fire Temple MQ GS Fire Wall Maze Center": "has_explosives", - "Fire Temple MQ GS Above Fire Wall Maze": " - (can_use(Hookshot) and (Small_Key_Fire_Temple, 5)) or - (logic_fire_mq_above_maze_gs and can_use(Longshot))" + "Fire Temple Upper": "Hookshot or logic_fire_mq_flame_maze", + "Fire Temple Boss Door": "True" } }, { - "region_name": "Fire Boss Room", + "region_name": "Fire Temple Flame Maze Side Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple MQ Flame Maze Right Pot 1": "True", + "Fire Temple MQ Flame Maze Right Pot 2": "True", + "Fire Temple MQ GS Flame Maze Side Room": "True" + } + }, + { + "region_name": "Fire Temple Upper", "dungeon": "Fire Temple", "locations": { - "Fire Temple Volvagia Heart": "True", - "Volvagia": "True" + "Fire Temple MQ Freestanding Key": "True", + "Fire Temple MQ Chest On Fire": "(Small_Key_Fire_Temple, 4)", + "Fire Temple MQ Flame Maze Right Upper Pot 1": "True", + "Fire Temple MQ Flame Maze Right Upper Pot 2": "True" } } ] diff --git a/worlds/oot/data/World/Fire Temple.json b/worlds/oot/data/World/Fire Temple.json index dfc8f2d31225..5c8e9b9830f3 100644 --- a/worlds/oot/data/World/Fire Temple.json +++ b/worlds/oot/data/World/Fire Temple.json @@ -1,33 +1,39 @@ -[ +[ { "region_name": "Fire Temple Lower", "dungeon": "Fire Temple", "locations": { - "Fire Temple Near Boss Chest" : " + "Fire Temple Near Boss Chest": " logic_fewer_tunic_requirements or can_use(Goron_Tunic)", - "Fire Temple Flare Dancer Chest": " - ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)", - "Fire Temple Boss Key Chest": " - ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)", - "Fire Temple Volvagia Heart": " - can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and - (logic_fire_boss_door_jump or Hover_Boots or - at('Fire Temple Upper', can_play(Song_of_Time) or has_explosives))", - "Volvagia": " - can_use(Goron_Tunic) and can_use(Megaton_Hammer) and Boss_Key_Fire_Temple and - (logic_fire_boss_door_jump or Hover_Boots or - at('Fire Temple Upper', can_play(Song_of_Time) or has_explosives))", - "Fire Temple GS Boss Key Loop": " - ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)", + "Fire Temple Near Boss Pot 1": " + is_adult and (Hover_Boots or Hookshot) and + (logic_fewer_tunic_requirements or Goron_Tunic)", + "Fire Temple Near Boss Pot 2": " + is_adult and (Hover_Boots or Hookshot) and + (logic_fewer_tunic_requirements or Goron_Tunic)", "Fairy Pot": " - has_bottle and (can_use(Hover_Boots) or can_use(Hookshot)) and - (logic_fewer_tunic_requirements or can_use(Goron_Tunic))" + is_adult and has_bottle and (Hover_Boots or Hookshot) and + (logic_fewer_tunic_requirements or Goron_Tunic)" }, "exits": { "DMC Fire Temple Entrance": "True", - "Fire Temple Big Lava Room":" + "Fire Temple Big Lava Room": " (Small_Key_Fire_Temple, 2) and - (logic_fewer_tunic_requirements or can_use(Goron_Tunic))" + (logic_fewer_tunic_requirements or can_use(Goron_Tunic))", + "Fire Temple Lower Locked Door": " + ((Small_Key_Fire_Temple, 8) or not keysanity) and can_use(Megaton_Hammer)", + "Fire Temple Boss Door": " + is_adult and (logic_fewer_tunic_requirements or Goron_Tunic) and + (fire_temple_shortcuts or logic_fire_boss_door_jump or Hover_Boots)" + } + }, + { + "region_name": "Fire Temple Lower Locked Door", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Flare Dancer Chest": "True", + "Fire Temple Boss Key Chest": "True", + "Fire Temple GS Boss Key Loop": "True" } }, { @@ -36,45 +42,91 @@ "locations": { "Fire Temple Big Lava Room Lower Open Door Chest": "True", "Fire Temple Big Lava Room Blocked Door Chest": "is_adult and has_explosives", + "Fire Temple Big Lava Room Pot 1": "True", + "Fire Temple Big Lava Room Pot 2": "True", + "Fire Temple Big Lava Room Pot 3": "True", "Fire Temple GS Song of Time Room": " is_adult and (can_play(Song_of_Time) or logic_fire_song_of_time)" }, "exits": { - "Fire Temple Lower": "True", - "Fire Temple Middle": " - can_use(Goron_Tunic) and (Small_Key_Fire_Temple, 4) and - (Progressive_Strength_Upgrade or logic_fire_strength) and - (has_explosives or Bow or Progressive_Hookshot)" + "Fire Temple Elevator Room": " + is_adult and Goron_Tunic and (Small_Key_Fire_Temple, 3)" + } + }, + { + "region_name": "Fire Temple Elevator Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Elevator Room Recovery Heart 1": "True", + "Fire Temple Elevator Room Recovery Heart 2": "True", + "Fire Temple Elevator Room Recovery Heart 3": "True" + }, + "exits": { + "Fire Temple Boulder Maze Lower": " + (Small_Key_Fire_Temple, 4) and + (Progressive_Strength_Upgrade or logic_fire_strength) and + (has_explosives or Bow or Hookshot)" } }, { - "region_name": "Fire Temple Middle", + "region_name": "Fire Temple Boulder Maze Lower", "dungeon": "Fire Temple", "locations": { "Fire Temple Boulder Maze Lower Chest": "True", - "Fire Temple Boulder Maze Upper Chest": "(Small_Key_Fire_Temple, 6)", "Fire Temple Boulder Maze Side Room Chest": "True", - "Fire Temple Boulder Maze Shortcut Chest": " - (Small_Key_Fire_Temple, 6) and has_explosives", + "Fire Temple GS Boulder Maze": "has_explosives" + }, + "exits": { + "Fire Temple Narrow Path Room": "(Small_Key_Fire_Temple, 5)" + } + }, + { + "region_name": "Fire Temple Narrow Path Room", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Map Chest": "Bow or (Small_Key_Fire_Temple, 6)", + "Fire Temple Narrow Path Room Recovery Heart 1": "True", + "Fire Temple Narrow Path Room Recovery Heart 2": "True", + "Fire Temple Narrow Path Room Recovery Heart 3": "True" + }, + "exits": { + "Fire Temple Boulder Maze Upper": "(Small_Key_Fire_Temple, 6)" + } + }, + { + "region_name": "Fire Temple Boulder Maze Upper", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Boulder Maze Upper Chest": "True", + "Fire Temple Boulder Maze Shortcut Chest": "has_explosives", "Fire Temple Scarecrow Chest": " - (Small_Key_Fire_Temple, 6) and - (can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))", - "Fire Temple Map Chest": " - (Small_Key_Fire_Temple, 6) or ((Small_Key_Fire_Temple, 5) and can_use(Bow))", - "Fire Temple Compass Chest": "(Small_Key_Fire_Temple, 7)", - "Fire Temple GS Boulder Maze": "(Small_Key_Fire_Temple, 4) and has_explosives", + can_use(Scarecrow) or (logic_fire_scarecrow and Longshot)", + "Fire Temple Moving Fire Room Recovery Heart 1": "True", + "Fire Temple Moving Fire Room Recovery Heart 2": "True", + "Fire Temple Moving Fire Room Recovery Heart 3": "True", "Fire Temple GS Scarecrow Climb": " - (Small_Key_Fire_Temple, 6) and - (can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))", + can_use(Scarecrow) or (logic_fire_scarecrow and Longshot)", "Fire Temple GS Scarecrow Top": " - (Small_Key_Fire_Temple, 6) and - (can_use(Scarecrow) or (logic_fire_scarecrow and can_use(Longshot)))" + can_use(Scarecrow) or (logic_fire_scarecrow and Longshot)" + }, + "exits": { + "Fire Temple Flame Maze": "(Small_Key_Fire_Temple, 7)" + } + }, + { + "region_name": "Fire Temple Flame Maze", + "dungeon": "Fire Temple", + "locations": { + "Fire Temple Compass Chest": "True", + "Fire Temple Flame Maze Left Side Pot 1": "True", + "Fire Temple Flame Maze Left Side Pot 2": "True", + "Fire Temple Flame Maze Left Side Pot 3": "True", + "Fire Temple Flame Maze Left Side Pot 4": "True" }, "exits": { "Fire Temple Upper": " - (Small_Key_Fire_Temple, 8) or - ((Small_Key_Fire_Temple, 7) and - ((can_use(Hover_Boots) and can_use(Megaton_Hammer)) or logic_fire_flame_maze))" + (Small_Key_Fire_Temple, 8) or + (Hover_Boots and Megaton_Hammer) or logic_fire_flame_maze" } }, { @@ -82,10 +134,18 @@ "dungeon": "Fire Temple", "locations": { "Fire Temple Highest Goron Chest": " - can_use(Megaton_Hammer) and - (can_play(Song_of_Time) or (logic_rusted_switches and - (can_use(Hover_Boots) or has_explosives)))", - "Fire Temple Megaton Hammer Chest": "has_explosives" + Megaton_Hammer and + (can_play(Song_of_Time) or + (logic_rusted_switches and (Hover_Boots or has_explosives)))", + "Fire Temple Megaton Hammer Chest": "has_explosives", + "Fire Temple Flame Maze Right Side Pot 1": "True", + "Fire Temple Flame Maze Right Side Pot 2": "True", + "Fire Temple Flame Maze Right Side Pot 3": "True", + "Fire Temple Flame Maze Right Side Pot 4": "True" + }, + "exits": { + "Fire Temple Boss Door": " + Megaton_Hammer and (can_play(Song_of_Time) or has_explosives)" } } ] diff --git a/worlds/oot/data/World/Forest Temple MQ.json b/worlds/oot/data/World/Forest Temple MQ.json index 4050a6fb6fba..1da309b82383 100644 --- a/worlds/oot/data/World/Forest Temple MQ.json +++ b/worlds/oot/data/World/Forest Temple MQ.json @@ -22,44 +22,77 @@ (can_play(Song_of_Time) or is_child) and (is_adult or can_use(Dins_Fire) or can_use(Sticks) or can_use(Slingshot) or Kokiri_Sword)", - "Forest Temple MQ GS Block Push Room": "is_adult or Kokiri_Sword", + "Forest Temple MQ Center Room Right Pot 1": "True", + "Forest Temple MQ Center Room Right Pot 2": "True", + "Forest Temple MQ Center Room Right Pot 3": "True", + "Forest Temple MQ Center Room Left Pot 1": "True", + "Forest Temple MQ Center Room Left Pot 2": "True", + "Forest Temple MQ Center Room Left Pot 3": "True", + "Forest Temple MQ Wolfos Room Pot": "(can_play(Song_of_Time) or is_child)", "Fairy Pot": "has_bottle and (can_play(Song_of_Time) or is_child)" }, "exits": { "Forest Temple NW Outdoors": "can_use(Bow) or can_use(Slingshot)", "Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)", - # End of the road for child + "Forest Temple Before Block Puzzle": "here(is_adult or Kokiri_Sword)", + "Forest Temple Before Boss": " + (Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg) or forest_temple_shortcuts" + } + }, + { + "region_name": "Forest Temple Before Block Puzzle", + "dungeon": "Forest Temple", + "locations": { + "Forest Temple MQ GS Block Push Room": "True" + }, + "exits": { "Forest Temple After Block Puzzle": " is_adult and (Progressive_Strength_Upgrade or - (logic_forest_mq_block_puzzle and has_bombchus and can_use(Hookshot)))", - "Forest Temple Outdoor Ledge": " - (logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots))", - "Forest Temple Boss Region": " - Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg" + (logic_forest_mq_block_puzzle and has_bombchus and Hookshot))", + # Child cannot climb these large blocks + "Forest Temple Outside Upper Ledge": " + (at('Forest Temple Outside Upper Ledge', True) or + here((logic_forest_mq_hallway_switch_boomerang and can_use(Boomerang)) or + (logic_forest_mq_hallway_switch_jumpslash and + (can_use(Hover_Boots) or + (((logic_forest_mq_block_puzzle and has_bombchus) or + (Progressive_Strength_Upgrade and (is_adult or Slingshot))) and + (Progressive_Strength_Upgrade or can_use(Hookshot)) and + (is_adult or Sticks)))))) and + (can_use(Hover_Boots) or can_use(Hookshot) or + (Progressive_Strength_Upgrade and + logic_forest_outside_backdoor and can_jumpslash))" } }, { "region_name": "Forest Temple After Block Puzzle", "dungeon": "Forest Temple", - "locations": { - "Forest Temple MQ Boss Key Chest": "(Small_Key_Forest_Temple, 3)" - }, "exits": { - "Forest Temple Bow Region": "(Small_Key_Forest_Temple, 4)", - "Forest Temple Outdoor Ledge": " - (Small_Key_Forest_Temple, 3) or - (logic_forest_mq_hallway_switch_jumpslash and - (can_use(Hookshot) or logic_forest_outside_backdoor))", + "Forest Temple Straightened Hall": "(Small_Key_Forest_Temple, 3)", "Forest Temple NW Outdoors": "(Small_Key_Forest_Temple, 2)" # Only 2 keys because you must have had access to falling ceiling room to have wasted a key there - # and access to falling ceiling room means you must also have had to access to the lower area of this courtyard + # Access to falling ceiling room means you must also have had to access to the lower area of this courtyard } }, { - "region_name": "Forest Temple Outdoor Ledge", + "region_name": "Forest Temple Straightened Hall", "dungeon": "Forest Temple", "locations": { - "Forest Temple MQ Redead Chest": "True" + "Forest Temple MQ Boss Key Chest": "True" + }, + "exits": { + "Forest Temple Outside Upper Ledge": "True", + "Forest Temple Bow Region": "(Small_Key_Forest_Temple, 4)" + } + }, + { + "region_name": "Forest Temple Outside Upper Ledge", + "dungeon": "Forest Temple", + "locations": { + "Forest Temple MQ Redead Chest": "True", + "Forest Temple MQ Courtyard Recovery Heart 1": "True", + "Forest Temple MQ Courtyard Recovery Heart 2": "True", + "Forest Temple MQ Courtyard Recovery Heart 3": "True" }, "exits": { "Forest Temple NW Outdoors": "True" @@ -73,9 +106,9 @@ }, "exits": { "Forest Temple NE Outdoors": " - can_use(Iron_Boots) or can_use(Longshot) or + can_use(Iron_Boots) or can_use(Longshot) or (Progressive_Scale, 2) or (logic_forest_well_swim and can_use(Hookshot))", - "Forest Temple Outdoors Top Ledges": "can_use(Fire_Arrows)" + "Forest Temple Outdoors High Balconies": "can_use(Fire_Arrows)" } }, { @@ -83,6 +116,9 @@ "dungeon": "Forest Temple", "locations": { "Forest Temple MQ Well Chest": "can_use(Bow) or can_use(Slingshot)", + "Forest Temple MQ Well Recovery Heart 1": "can_use(Iron_Boots) or can_use(Bow) or can_use(Slingshot)", + "Forest Temple MQ Well Recovery Heart 2": "can_use(Iron_Boots) or can_use(Bow) or can_use(Slingshot)", + "Forest Temple MQ Well Recovery Heart 3": "can_use(Iron_Boots) or can_use(Bow) or can_use(Slingshot)", "Forest Temple MQ GS Raised Island Courtyard": " can_use(Hookshot) or can_use(Boomerang) or (can_use(Fire_Arrows) and @@ -91,19 +127,19 @@ (can_use(Iron_Boots) and can_use(Hookshot)) or can_use(Bow) or can_use(Slingshot)", "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", "Deku Baba Nuts": " - is_adult or Slingshot or Sticks or + is_adult or Slingshot or Sticks or has_explosives or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { - "Forest Temple Outdoors Top Ledges": " + "Forest Temple Outdoors High Balconies": " can_use(Hookshot) and - (can_use(Longshot) or can_use(Hover_Boots) or can_play(Song_of_Time) or + (can_use(Longshot) or can_use(Hover_Boots) or can_play(Song_of_Time) or logic_forest_vines)", "Forest Temple NE Outdoors Ledge": "can_use(Longshot)" } }, { - "region_name": "Forest Temple Outdoors Top Ledges", + "region_name": "Forest Temple Outdoors High Balconies", "dungeon": "Forest Temple", "locations": { "Forest Temple MQ Raised Island Courtyard Upper Chest": "True" @@ -133,7 +169,17 @@ "locations": { "Forest Temple MQ Bow Chest": "True", "Forest Temple MQ Map Chest": "can_use(Bow)", - "Forest Temple MQ Compass Chest": "can_use(Bow)" + "Forest Temple MQ Compass Chest": "can_use(Bow)", + "Forest Temple MQ Upper Stalfos Pot 1": "True", + "Forest Temple MQ Upper Stalfos Pot 2": "True", + "Forest Temple MQ Upper Stalfos Pot 3": "True", + "Forest Temple MQ Upper Stalfos Pot 4": "True", + "Forest Temple MQ Blue Poe Room Pot 1": "True", + "Forest Temple MQ Blue Poe Room Pot 2": "True", + "Forest Temple MQ Blue Poe Room Pot 3": "True", + "Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 1": "(Small_Key_Forest_Temple, 6)", + "Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 2": "(Small_Key_Forest_Temple, 6)", + "Forest Temple MQ Frozen Eye Switch Room Small Wooden Crate 3": "(Small_Key_Forest_Temple, 6)" }, "exits": { "Forest Temple Falling Room": " @@ -148,19 +194,26 @@ "Forest Temple Amy and Meg": "can_use(Bow) and (Small_Key_Forest_Temple, 6)" }, "locations": { - "Forest Temple MQ Falling Ceiling Room Chest": "True" + "Forest Temple MQ Falling Ceiling Room Chest": "True", + "Forest Temple MQ Green Poe Room Pot 1": "(Small_Key_Forest_Temple, 6)", + "Forest Temple MQ Green Poe Room Pot 2": "(Small_Key_Forest_Temple, 6)" }, "exits": { "Forest Temple NE Outdoors Ledge": "True" } }, { - "region_name": "Forest Temple Boss Region", + "region_name": "Forest Temple Before Boss", "dungeon": "Forest Temple", "locations": { "Forest Temple MQ Basement Chest": "True", - "Forest Temple Phantom Ganon Heart": "Boss_Key_Forest_Temple", - "Phantom Ganon": "Boss_Key_Forest_Temple" + "Forest Temple MQ Basement Pot 1": "True", + "Forest Temple MQ Basement Pot 2": "True", + "Forest Temple MQ Basement Pot 3": "True", + "Forest Temple MQ Basement Pot 4": "True" + }, + "exits": { + "Forest Temple Boss Door": "True" } } ] diff --git a/worlds/oot/data/World/Forest Temple.json b/worlds/oot/data/World/Forest Temple.json index 6381a3fc47c4..24a6bd9eb869 100644 --- a/worlds/oot/data/World/Forest Temple.json +++ b/worlds/oot/data/World/Forest Temple.json @@ -1,68 +1,59 @@ -[ +[ { "region_name": "Forest Temple Lobby", "dungeon": "Forest Temple", "locations": { "Forest Temple First Room Chest": "True", - "Forest Temple First Stalfos Chest": "is_adult or Kokiri_Sword", "Forest Temple GS First Room": " (is_adult and (Hookshot or Bow or Bombs)) or (is_child and (Boomerang or Slingshot)) or - has_bombchus or can_use(Dins_Fire) or (logic_forest_first_gs and (Bombs or - (can_jumpslash and can_take_damage)))", - "Forest Temple GS Lobby": "can_use(Hookshot) or can_use(Boomerang)", - "Fairy Pot": "has_bottle and (is_adult or can_child_attack or Nuts)" + has_bombchus or can_use(Dins_Fire) or (logic_forest_first_gs and (Bombs or can_jumpslash))" }, "exits": { "SFM Forest Temple Entrance Ledge": "True", - "Forest Temple NW Outdoors": "can_play(Song_of_Time) or is_child", - "Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)", - "Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)", - "Forest Temple Boss Region": "Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg" + "Forest Temple Central Area": "is_adult or can_child_attack or Nuts" } }, { - "region_name": "Forest Temple NW Outdoors", + "region_name": "Forest Temple Central Area", "dungeon": "Forest Temple", "locations": { - "Forest Temple GS Level Island Courtyard": " - can_use(Longshot) or - at('Forest Temple Outside Upper Ledge', can_use(Hookshot))", - "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", - "Deku Baba Nuts": " - is_adult or Slingshot or Sticks or - has_explosives or Kokiri_Sword or can_use(Dins_Fire)" + "Forest Temple First Stalfos Chest": "is_adult or Kokiri_Sword", + "Forest Temple Center Room Right Pot 1": "True", + "Forest Temple Center Room Right Pot 2": "True", + "Forest Temple Center Room Right Pot 3": "True", + "Forest Temple Center Room Left Pot 1": "True", + "Forest Temple Center Room Left Pot 2": "True", + "Forest Temple Center Room Left Pot 3": "True", + "Forest Temple Lower Stalfos Pot": "True", + "Forest Temple GS Lobby": "can_use(Hookshot) or can_use(Boomerang)", + "Fairy Pot": "has_bottle" }, "exits": { - "Forest Temple NE Outdoors": "(Progressive_Scale, 2)", - #Other methods of crossing through the well are not currently relevant. - "Forest Temple Outdoors High Balconies": " - here(is_adult or has_explosives or - ((Boomerang or Nuts or Deku_Shield) and - (Sticks or Kokiri_Sword or Slingshot)))" + "Forest Temple NW Outdoors": "can_play(Song_of_Time) or is_child", + "Forest Temple NE Outdoors": "can_use(Bow) or can_use(Slingshot)", + "Forest Temple Block Push Room": "(Small_Key_Forest_Temple, 1)", + "Forest Temple Before Boss": " + (Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg) or forest_temple_shortcuts" } }, { - "region_name": "Forest Temple NE Outdoors", + "region_name": "Forest Temple NW Outdoors", "dungeon": "Forest Temple", "locations": { - "Forest Temple Raised Island Courtyard Chest": " - can_use(Hookshot) or - at('Forest Temple Falling Room', True) or - (logic_forest_outdoors_ledge and can_use(Hover_Boots) and at('Forest Temple Outdoors High Balconies', True))", - "Forest Temple GS Raised Island Courtyard": " - can_use(Hookshot) or (logic_forest_outdoor_east_gs and can_use(Boomerang)) or - at('Forest Temple Falling Room', can_use(Bow) or can_use(Dins_Fire) or has_explosives)", + "Forest Temple GS Level Island Courtyard": " + can_use(Longshot) or + at('Forest Temple Outside Upper Ledge', can_use(Hookshot) or can_use(Boomerang))", "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", "Deku Baba Nuts": " - is_adult or Slingshot or Sticks or + is_adult or Slingshot or Sticks or has_explosives or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { + "Forest Temple NE Outdoors": "(Progressive_Scale, 2)", + # Other methods of crossing through the well are not currently relevant. "Forest Temple Outdoors High Balconies": " - can_use(Longshot) or (logic_forest_vines and can_use(Hookshot))", - #Longshot can grab some very high up vines to drain the well. - "Forest Temple NW Outdoors": "can_use(Iron_Boots) or (Progressive_Scale, 2)", - "Forest Temple Lobby": "True" + here(is_adult or has_explosives or + ((Boomerang or Nuts or Deku_Shield) and (Sticks or Kokiri_Sword or Slingshot)))" } }, { @@ -70,7 +61,9 @@ "dungeon": "Forest Temple", "locations": { "Forest Temple Well Chest": "True", - "Forest Temple Map Chest": "True" + "Forest Temple Map Chest": "True", + "Forest Temple Well Recovery Heart 1": "True", + "Forest Temple Well Recovery Heart 2": "True" }, "exits": { "Forest Temple NW Outdoors": "True", @@ -80,16 +73,26 @@ } }, { - "region_name": "Forest Temple Falling Room", + "region_name": "Forest Temple NE Outdoors", "dungeon": "Forest Temple", - "events": { - "Forest Temple Amy and Meg": "can_use(Bow)" - }, "locations": { - "Forest Temple Falling Ceiling Room Chest": "True" + "Forest Temple Raised Island Courtyard Chest": " + can_use(Hookshot) or at('Forest Temple Falling Room', True) or + (logic_forest_outdoors_ledge and can_use(Hover_Boots) and + at('Forest Temple Outdoors High Balconies', True))", + "Forest Temple GS Raised Island Courtyard": " + can_use(Hookshot) or (logic_forest_outdoor_east_gs and can_use(Boomerang)) or + at('Forest Temple Falling Room', can_use(Bow) or can_use(Dins_Fire) or has_explosives)", + "Deku Baba Sticks": "is_adult or Kokiri_Sword or Boomerang", + "Deku Baba Nuts": " + is_adult or Slingshot or Sticks or + has_explosives or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { - "Forest Temple NE Outdoors": "True" + "Forest Temple Outdoors High Balconies": " + can_use(Longshot) or (logic_forest_vines and can_use(Hookshot))", + # Longshot can grab some very high up vines to drain the well. + "Forest Temple NW Outdoors": "can_use(Iron_Boots) or (Progressive_Scale, 2)" } }, { @@ -100,13 +103,14 @@ Progressive_Strength_Upgrade and (can_use(Bow) or can_use(Slingshot))" }, "exits": { - #end of the road for child forest. No hovers and too short to climb push blocks "Forest Temple Outside Upper Ledge": " - can_use(Hover_Boots) or (logic_forest_outside_backdoor and is_adult and Progressive_Strength_Upgrade)", + can_use(Hover_Boots) or + (logic_forest_outside_backdoor and Progressive_Strength_Upgrade and can_jumpslash)", "Forest Temple Bow Region": " Progressive_Strength_Upgrade and (Small_Key_Forest_Temple, 3) and is_adult", "Forest Temple Straightened Hall": " Progressive_Strength_Upgrade and (Small_Key_Forest_Temple, 2) and can_use(Bow)" + # Child cannot climb these large blocks } }, { @@ -123,7 +127,9 @@ "region_name": "Forest Temple Outside Upper Ledge", "dungeon": "Forest Temple", "locations": { - "Forest Temple Floormaster Chest": "True" + "Forest Temple Floormaster Chest": "True", + "Forest Temple Courtyard Recovery Heart 1": "True", + "Forest Temple Courtyard Recovery Heart 2": "True" }, "exits": { "Forest Temple NW Outdoors": "True" @@ -138,21 +144,54 @@ "locations": { "Forest Temple Bow Chest": "True", "Forest Temple Red Poe Chest": "can_use(Bow)", - "Forest Temple Blue Poe Chest": "can_use(Bow)" + "Forest Temple Blue Poe Chest": "can_use(Bow)", + "Forest Temple Upper Stalfos Pot 1": "True", + "Forest Temple Upper Stalfos Pot 2": "True", + "Forest Temple Upper Stalfos Pot 3": "True", + "Forest Temple Upper Stalfos Pot 4": "True", + "Forest Temple Blue Poe Room Pot 1": "True", + "Forest Temple Blue Poe Room Pot 2": "True", + "Forest Temple Blue Poe Room Pot 3": "True" }, "exits": { - "Forest Temple Falling Room": " - (Small_Key_Forest_Temple, 5) and (Bow or can_use(Dins_Fire))" + "Forest Temple Frozen Eye Switch Room": "(Small_Key_Forest_Temple, 5)" + } + }, + { + "region_name": "Forest Temple Frozen Eye Switch Room", + "dungeon": "Forest Temple", + "locations": { + "Forest Temple Frozen Eye Switch Room Pot 1": "True", + "Forest Temple Frozen Eye Switch Room Pot 2": "True" + }, + "exits": { + "Forest Temple Falling Room": "Bow or can_use(Dins_Fire)" + } + }, + { + "region_name": "Forest Temple Falling Room", + "dungeon": "Forest Temple", + "events": { + "Forest Temple Amy and Meg": "can_use(Bow)" + }, + "locations": { + "Forest Temple Falling Ceiling Room Chest": "True", + "Forest Temple Green Poe Room Pot 1": "True", + "Forest Temple Green Poe Room Pot 2": "True" + }, + "exits": { + "Forest Temple NE Outdoors": "True" } }, { - "region_name": "Forest Temple Boss Region", + "region_name": "Forest Temple Before Boss", "dungeon": "Forest Temple", "locations": { "Forest Temple Basement Chest": "True", - "Forest Temple Phantom Ganon Heart": "Boss_Key_Forest_Temple", - "Phantom Ganon": "Boss_Key_Forest_Temple", "Forest Temple GS Basement": "can_use(Hookshot) or can_use(Boomerang)" + }, + "exits": { + "Forest Temple Boss Door": "True" } } ] diff --git a/worlds/oot/data/World/Ganons Castle MQ.json b/worlds/oot/data/World/Ganons Castle MQ.json index 72b8a9e83a19..895229524571 100644 --- a/worlds/oot/data/World/Ganons Castle MQ.json +++ b/worlds/oot/data/World/Ganons Castle MQ.json @@ -3,128 +3,199 @@ "region_name": "Ganons Castle Lobby", "dungeon": "Ganons Castle", "exits": { - "Castle Grounds": "True", - "Ganons Castle Forest Trial": "True", - "Ganons Castle Fire Trial": "True", + "Castle Grounds From Ganons Castle": "True", + "Ganons Castle Main": " + here(is_adult or + (Kokiri_Sword and (Sticks or has_explosives or Nuts or Boomerang)) or + (has_explosives and (Sticks or ((Nuts or Boomerang) and Slingshot))))" + } + }, + { + "region_name": "Ganons Castle Main", + "dungeon": "Ganons Castle", + "exits": { + "Ganons Castle Forest Trial": "here(is_adult or Kokiri_Sword)", "Ganons Castle Water Trial": "True", - "Ganons Castle Shadow Trial": "True", - "Ganons Castle Spirit Trial": "True", + "Ganons Castle Shadow Trial": "is_adult", + "Ganons Castle Fire Trial": " + is_adult and Goron_Tunic and Golden_Gauntlets and + (Longshot or Hover_Boots or (logic_fire_trial_mq and Hookshot))", "Ganons Castle Light Trial": "can_use(Golden_Gauntlets)", + "Ganons Castle Spirit Trial": "can_use(Megaton_Hammer) and (Bow or logic_rusted_switches)", + "Ganons Castle Deku Scrubs": "logic_lens_castle_mq or can_use(Lens_of_Truth)", "Ganons Castle Tower": " - (skipped_trials[Forest] or 'Forest Trial Clear') and - (skipped_trials[Fire] or 'Fire Trial Clear') and - (skipped_trials[Water] or 'Water Trial Clear') and - (skipped_trials[Shadow] or 'Shadow Trial Clear') and - (skipped_trials[Spirit] or 'Spirit Trial Clear') and - (skipped_trials[Light] or 'Light Trial Clear')", - "Ganons Castle Deku Scrubs": "logic_lens_castle_mq or can_use(Lens_of_Truth)" + (skipped_trials[Forest] or 'Forest Trial Clear') and + (skipped_trials[Fire] or 'Fire Trial Clear') and + (skipped_trials[Water] or 'Water Trial Clear') and + (skipped_trials[Shadow] or 'Shadow Trial Clear') and + (skipped_trials[Spirit] or 'Spirit Trial Clear') and + (skipped_trials[Light] or 'Light Trial Clear')" } }, { - "region_name": "Ganons Castle Deku Scrubs", + "region_name": "Ganons Castle Forest Trial", "dungeon": "Ganons Castle", "locations": { - "Ganons Castle MQ Deku Scrub Center-Left": "True", - "Ganons Castle MQ Deku Scrub Center": "True", - "Ganons Castle MQ Deku Scrub Center-Right": "True", - "Ganons Castle MQ Deku Scrub Left": "True", - "Ganons Castle MQ Deku Scrub Right": "True", - "Free Fairies": "has_bottle" + "Ganons Castle MQ Forest Trial Freestanding Key": "can_use(Hookshot) or can_use(Boomerang)", + "Ganons Castle MQ Forest Trial Eye Switch Chest": "can_use(Bow) or can_use(Slingshot)", + "Ganons Castle MQ Forest Trial Frozen Eye Switch Chest": "has_fire_source" + }, + "exits": { + "Ganons Castle Forest Trial Ending": "is_adult and can_play(Song_of_Time)" } }, { - "region_name": "Ganons Castle Forest Trial", + "region_name": "Ganons Castle Forest Trial Ending", "dungeon": "Ganons Castle", "events": { - "Forest Trial Clear": "can_use(Light_Arrows) and can_play(Song_of_Time)" + "Forest Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle MQ Forest Trial Eye Switch Chest": "Bow", - "Ganons Castle MQ Forest Trial Frozen Eye Switch Chest": "has_fire_source", - "Ganons Castle MQ Forest Trial Freestanding Key": "Progressive_Hookshot" + "Ganons Castle MQ Forest Trial Pot 1": "True", + "Ganons Castle MQ Forest Trial Pot 2": "True" } }, { - "region_name": "Ganons Castle Fire Trial", + "region_name": "Ganons Castle Water Trial", "dungeon": "Ganons Castle", - "events": { - "Fire Trial Clear": " - can_use(Goron_Tunic) and can_use(Golden_Gauntlets) and can_use(Light_Arrows) and - (can_use(Longshot) or Hover_Boots or (logic_fire_trial_mq and can_use(Hookshot)))" + "locations": { + "Ganons Castle MQ Water Trial Chest": "Blue_Fire", + "Ganons Castle MQ Water Trial Recovery Heart": "Blue_Fire", + "Blue Fire": "has_bottle" + }, + "exits": { + "Ganons Castle Water Trial Ending": "Blue_Fire and (Small_Key_Ganons_Castle, 3)" } }, { - "region_name": "Ganons Castle Water Trial", + "region_name": "Ganons Castle Water Trial Ending", "dungeon": "Ganons Castle", "events": { - "Water Trial Clear": " - Blue_Fire and can_use(Light_Arrows) and - (Small_Key_Ganons_Castle, 3)" + "Water Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle MQ Water Trial Chest": "Blue_Fire", - "Blue Fire": "has_bottle" + "Ganons Castle MQ Water Trial Pot 1": "True", + "Ganons Castle MQ Water Trial Pot 2": "True" } }, { "region_name": "Ganons Castle Shadow Trial", "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Shadow Trial Bomb Flower Chest": " + (Bow and (Hookshot or Hover_Boots)) or + (Hover_Boots and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and + (has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire)))" + }, + "exits": { + "Ganons Castle Shadow Trial Ending": " + (logic_lens_castle_mq or can_use(Lens_of_Truth)) and + (Hover_Boots or (Bow and Hookshot and (has_fire_source or logic_shadow_trial_mq)))" + } + }, + { + "region_name": "Ganons Castle Shadow Trial Ending", + "dungeon": "Ganons Castle", "events": { - "Shadow Trial Clear": " - can_use(Light_Arrows) and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and - (Hover_Boots or (Progressive_Hookshot and (has_fire_source or logic_shadow_trial_mq)))" + "Shadow Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle MQ Shadow Trial Bomb Flower Chest": " - (Bow and (Progressive_Hookshot or Hover_Boots)) or - (Hover_Boots and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and - (has_explosives or Progressive_Strength_Upgrade or can_use(Dins_Fire)))", - "Ganons Castle MQ Shadow Trial Eye Switch Chest": " - Bow and (logic_lens_castle_mq or can_use(Lens_of_Truth)) and - (Hover_Boots or (Progressive_Hookshot and (has_fire_source or logic_shadow_trial_mq)))" + "Ganons Castle MQ Shadow Trial Eye Switch Chest": "Bow", + "Ganons Castle MQ Shadow Trial Pot 1": "True", + "Ganons Castle MQ Shadow Trial Pot 2": "True" } }, { - "region_name": "Ganons Castle Spirit Trial", + "region_name": "Ganons Castle Fire Trial", "dungeon": "Ganons Castle", "events": { - "Spirit Trial Clear": " - can_use(Light_Arrows) and Megaton_Hammer and - has_bombchus and Fire_Arrows and Mirror_Shield" + "Fire Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle MQ Spirit Trial First Chest": "(Bow or logic_rusted_switches) and Megaton_Hammer", - "Ganons Castle MQ Spirit Trial Invisible Chest": " - (Bow or logic_rusted_switches) and Megaton_Hammer and - has_bombchus and (logic_lens_castle_mq or can_use(Lens_of_Truth))", - "Ganons Castle MQ Spirit Trial Sun Front Left Chest": " - Megaton_Hammer and has_bombchus and - can_use(Fire_Arrows) and Mirror_Shield", - "Ganons Castle MQ Spirit Trial Sun Back Left Chest": " - Megaton_Hammer and has_bombchus and - can_use(Fire_Arrows) and Mirror_Shield", - "Ganons Castle MQ Spirit Trial Golden Gauntlets Chest": " - Megaton_Hammer and has_bombchus and - can_use(Fire_Arrows) and Mirror_Shield", - "Ganons Castle MQ Spirit Trial Sun Back Right Chest": " - Megaton_Hammer and has_bombchus and - can_use(Fire_Arrows) and Mirror_Shield", - "Nut Pot": " - Megaton_Hammer and has_bombchus and - can_use(Fire_Arrows) and Mirror_Shield" + "Ganons Castle MQ Fire Trial Pot 1": "True", + "Ganons Castle MQ Fire Trial Pot 2": "True" } }, { "region_name": "Ganons Castle Light Trial", "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Light Trial Lullaby Chest": "can_play(Zeldas_Lullaby)" + }, + "exits": { + "Ganons Castle Light Trial Boulder Room": " + (Small_Key_Ganons_Castle, 2) and (Hookshot or logic_light_trial_mq)" + } + }, + { + "region_name": "Ganons Castle Light Trial Boulder Room", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Light Trial Recovery Heart 1": "True", + "Ganons Castle MQ Light Trial Recovery Heart 2": "True" + }, + "exits": { + "Ganons Castle Light Trial Ending": " + (Small_Key_Ganons_Castle, 3) and (logic_lens_castle_mq or can_use(Lens_of_Truth))" + } + }, + { + "region_name": "Ganons Castle Light Trial Ending", + "dungeon": "Ganons Castle", "events": { - "Light Trial Clear": " - can_use(Light_Arrows) and (Small_Key_Ganons_Castle, 3) and - (logic_lens_castle_mq or can_use(Lens_of_Truth)) and - (Progressive_Hookshot or logic_light_trial_mq)" + "Light Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle MQ Light Trial Lullaby Chest": "can_play(Zeldas_Lullaby)" + "Ganons Castle MQ Light Trial Pot 1": "True", + "Ganons Castle MQ Light Trial Pot 2": "True" + } + }, + { + "region_name": "Ganons Castle Spirit Trial", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Spirit Trial First Chest": "True" + }, + "exits": { + "Ganons Castle Spirit Trial Second Room": "has_bombchus" + } + }, + { + "region_name": "Ganons Castle Spirit Trial Second Room", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Spirit Trial Invisible Chest": "logic_lens_castle_mq or can_use(Lens_of_Truth)" + }, + "exits": { + "Ganons Castle Spirit Trial Ending": "can_use(Fire_Arrows) and Mirror_Shield" + } + }, + { + "region_name": "Ganons Castle Spirit Trial Ending", + "dungeon": "Ganons Castle", + "events": { + "Spirit Trial Clear": "can_use(Light_Arrows)" + }, + "locations": { + "Ganons Castle MQ Spirit Trial Sun Front Left Chest": "True", + "Ganons Castle MQ Spirit Trial Sun Back Left Chest": "True", + "Ganons Castle MQ Spirit Trial Golden Gauntlets Chest": "True", + "Ganons Castle MQ Spirit Trial Sun Back Right Chest": "True", + "Ganons Castle MQ Spirit Trial Pot 1": "True", + "Ganons Castle MQ Spirit Trial Pot 2": "True", + "Nut Pot": "True" + } + }, + { + "region_name": "Ganons Castle Deku Scrubs", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle MQ Deku Scrub Center-Left": "True", + "Ganons Castle MQ Deku Scrub Center": "True", + "Ganons Castle MQ Deku Scrub Center-Right": "True", + "Ganons Castle MQ Deku Scrub Left": "True", + "Ganons Castle MQ Deku Scrub Right": "True", + "Free Fairies": "has_bottle" } } ] diff --git a/worlds/oot/data/World/Ganons Castle.json b/worlds/oot/data/World/Ganons Castle.json index 0fd395158f3f..b4e229dd5044 100644 --- a/worlds/oot/data/World/Ganons Castle.json +++ b/worlds/oot/data/World/Ganons Castle.json @@ -3,111 +3,149 @@ "region_name": "Ganons Castle Lobby", "dungeon": "Ganons Castle", "exits": { - "Castle Grounds": "True", + "Castle Grounds From Ganons Castle": "True", "Ganons Castle Forest Trial": "True", - "Ganons Castle Fire Trial": "True", "Ganons Castle Water Trial": "True", "Ganons Castle Shadow Trial": "True", - "Ganons Castle Spirit Trial": "True", + "Ganons Castle Fire Trial": "True", "Ganons Castle Light Trial": "can_use(Golden_Gauntlets)", + "Ganons Castle Spirit Trial": "True", + "Ganons Castle Deku Scrubs": "logic_lens_castle or can_use(Lens_of_Truth)", "Ganons Castle Tower": " - (skipped_trials[Forest] or 'Forest Trial Clear') and - (skipped_trials[Fire] or 'Fire Trial Clear') and - (skipped_trials[Water] or 'Water Trial Clear') and - (skipped_trials[Shadow] or 'Shadow Trial Clear') and - (skipped_trials[Spirit] or 'Spirit Trial Clear') and - (skipped_trials[Light] or 'Light Trial Clear')", - "Ganons Castle Deku Scrubs": "logic_lens_castle or can_use(Lens_of_Truth)" + (skipped_trials[Forest] or 'Forest Trial Clear') and + (skipped_trials[Fire] or 'Fire Trial Clear') and + (skipped_trials[Water] or 'Water Trial Clear') and + (skipped_trials[Shadow] or 'Shadow Trial Clear') and + (skipped_trials[Spirit] or 'Spirit Trial Clear') and + (skipped_trials[Light] or 'Light Trial Clear')" } }, { - "region_name": "Ganons Castle Deku Scrubs", + "region_name": "Ganons Castle Forest Trial", "dungeon": "Ganons Castle", "locations": { - "Ganons Castle Deku Scrub Center-Left": "True", - "Ganons Castle Deku Scrub Center-Right": "True", - "Ganons Castle Deku Scrub Right": "True", - "Ganons Castle Deku Scrub Left": "True", - "Free Fairies": "has_bottle" + "Ganons Castle Forest Trial Chest": " + is_adult or Slingshot or Sticks or Kokiri_Sword or can_use(Dins_Fire)" + }, + "exits": { + "Ganons Castle Forest Trial Ending": " + can_use(Fire_Arrows) or (can_use(Dins_Fire) and (can_use(Bow) or can_use(Hookshot)))" } }, { - "region_name": "Ganons Castle Forest Trial", + "region_name": "Ganons Castle Forest Trial Ending", "dungeon": "Ganons Castle", "events": { - "Forest Trial Clear": "can_use(Light_Arrows) and (Fire_Arrows or Dins_Fire)" + "Forest Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle Forest Trial Chest": "True" + "Ganons Castle Forest Trial Pot 1": "True", + "Ganons Castle Forest Trial Pot 2": "True" } }, { - "region_name": "Ganons Castle Fire Trial", + "region_name": "Ganons Castle Water Trial", "dungeon": "Ganons Castle", - "events": { - "Fire Trial Clear": " - can_use(Goron_Tunic) and can_use(Golden_Gauntlets) and - can_use(Light_Arrows) and can_use(Longshot)" + "locations": { + "Ganons Castle Water Trial Left Chest": "True", + "Ganons Castle Water Trial Right Chest": "True", + "Blue Fire": " + has_bottle and (is_adult or Sticks or Kokiri_Sword or has_explosives)", + "Fairy Pot": " + Blue_Fire and (is_adult or has_explosives or can_use(Dins_Fire))" + }, + "exits": { + "Ganons Castle Water Trial Ending": "Blue_Fire and can_use(Megaton_Hammer)" } }, { - "region_name": "Ganons Castle Water Trial", + "region_name": "Ganons Castle Water Trial Ending", "dungeon": "Ganons Castle", "events": { - "Water Trial Clear": "Blue_Fire and Megaton_Hammer and can_use(Light_Arrows)" + "Water Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle Water Trial Left Chest": "True", - "Ganons Castle Water Trial Right Chest": "True", - "Fairy Pot": "Blue_Fire and has_bottle", - "Blue Fire": "has_bottle" + "Ganons Castle Water Trial Pot 1": "True", + "Ganons Castle Water Trial Pot 2": "True" } }, { "region_name": "Ganons Castle Shadow Trial", "dungeon": "Ganons Castle", - "events": { - "Shadow Trial Clear": " - can_use(Light_Arrows) and Megaton_Hammer and - ((Fire_Arrows and (logic_lens_castle or can_use(Lens_of_Truth))) or - (can_use(Longshot) and (Hover_Boots or (Dins_Fire and (logic_lens_castle or can_use(Lens_of_Truth))))))" - }, "locations": { "Ganons Castle Shadow Trial Front Chest": " - can_use(Fire_Arrows) or Progressive_Hookshot or - Hover_Boots or can_play(Song_of_Time)", - "Ganons Castle Shadow Trial Golden Gauntlets Chest": " - can_use(Fire_Arrows) or - (can_use(Longshot) and (Hover_Boots or can_use(Dins_Fire)))" + is_child or can_use(Fire_Arrows) or Hookshot or + Hover_Boots or can_play(Song_of_Time)" + }, + "exits": { + "Ganons Castle Shadow Trial First Gap": "can_use(Longshot) or can_use(Fire_Arrows)" } }, { - "region_name": "Ganons Castle Spirit Trial", + "region_name": "Ganons Castle Shadow Trial First Gap", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Shadow Trial Like Like Pot 1": "True", + "Ganons Castle Shadow Trial Like Like Pot 2": "True" + }, + "exits": { + "Ganons Castle Shadow Trial Second Gap": "Hover_Boots or has_fire_source" + } + }, + { + "region_name": "Ganons Castle Shadow Trial Second Gap", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Shadow Trial Golden Gauntlets Chest": "True", + "Ganons Castle Shadow Trial Recovery Heart 1": " + logic_lens_castle or can_use(Lens_of_Truth) or Hover_Boots", + "Ganons Castle Shadow Trial Recovery Heart 2": " + logic_lens_castle or can_use(Lens_of_Truth) or Hover_Boots", + "Ganons Castle Shadow Trial Recovery Heart 3": " + logic_lens_castle or can_use(Lens_of_Truth) or Hover_Boots" + }, + "exits": { + "Ganons Castle Shadow Trial Ending": " + Megaton_Hammer and + (logic_lens_castle or can_use(Lens_of_Truth) or (Longshot and Hover_Boots))" + } + }, + { + "region_name": "Ganons Castle Shadow Trial Ending", "dungeon": "Ganons Castle", "events": { - "Spirit Trial Clear": " - can_use(Light_Arrows) and Mirror_Shield and has_bombchus and - (logic_spirit_trial_hookshot or Progressive_Hookshot)" + "Shadow Trial Clear": "can_use(Light_Arrows)" }, "locations": { - "Ganons Castle Spirit Trial Crystal Switch Chest": " - (logic_spirit_trial_hookshot or Progressive_Hookshot)", - "Ganons Castle Spirit Trial Invisible Chest": " - (logic_spirit_trial_hookshot or Progressive_Hookshot) and - has_bombchus and (logic_lens_castle or can_use(Lens_of_Truth))", - "Nut Pot": " - (logic_spirit_trial_hookshot or Progressive_Hookshot) and - has_bombchus and Bow and Mirror_Shield" + "Ganons Castle Shadow Trial Pot 1": "True", + "Ganons Castle Shadow Trial Pot 2": "True" } }, { - "region_name": "Ganons Castle Light Trial", + "region_name": "Ganons Castle Fire Trial", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Fire Trial Recovery Heart": "True" + }, + "exits": { + "Ganons Castle Fire Trial Ending": " + is_adult and Goron_Tunic and Golden_Gauntlets and Longshot" + } + }, + { + "region_name": "Ganons Castle Fire Trial Ending", "dungeon": "Ganons Castle", "events": { - "Light Trial Clear": " - can_use(Light_Arrows) and Progressive_Hookshot and - (Small_Key_Ganons_Castle, 2) and (logic_lens_castle or can_use(Lens_of_Truth))" + "Fire Trial Clear": "can_use(Light_Arrows)" }, + "locations": { + "Ganons Castle Fire Trial Pot 1": "True", + "Ganons Castle Fire Trial Pot 2": "True" + } + }, + { + "region_name": "Ganons Castle Light Trial", + "dungeon": "Ganons Castle", "locations": { "Ganons Castle Light Trial First Left Chest": "True", "Ganons Castle Light Trial Second Left Chest": "True", @@ -115,9 +153,88 @@ "Ganons Castle Light Trial First Right Chest": "True", "Ganons Castle Light Trial Second Right Chest": "True", "Ganons Castle Light Trial Third Right Chest": "True", - "Ganons Castle Light Trial Invisible Enemies Chest": "logic_lens_castle or can_use(Lens_of_Truth)", + "Ganons Castle Light Trial Invisible Enemies Chest": " + logic_lens_castle or can_use(Lens_of_Truth)", "Ganons Castle Light Trial Lullaby Chest": " - can_play(Zeldas_Lullaby) and (Small_Key_Ganons_Castle, 1)" + (Small_Key_Ganons_Castle, 1) and can_play(Zeldas_Lullaby)" + }, + "exits": { + "Ganons Castle Light Trial Boulder Room": "(Small_Key_Ganons_Castle, 2)" + } + }, + { + "region_name": "Ganons Castle Light Trial Boulder Room", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Light Trial Boulder Pot": "True" + }, + "exits": { + "Ganons Castle Light Trial Ending": "Hookshot and (logic_lens_castle or can_use(Lens_of_Truth))" + } + }, + { + "region_name": "Ganons Castle Light Trial Ending", + "dungeon": "Ganons Castle", + "events": { + "Light Trial Clear": "can_use(Light_Arrows)" + }, + "locations": { + "Ganons Castle Light Trial Pot 1": "True", + "Ganons Castle Light Trial Pot 2": "True" + } + }, + { + "region_name": "Ganons Castle Spirit Trial", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Spirit Trial Recovery Heart": "True" + }, + "exits": { + "Ganons Castle Spirit Trial Second Room Front": " + can_use(Hookshot) or (logic_spirit_trial_hookshot and can_jumpslash)" + } + }, + { + "region_name": "Ganons Castle Spirit Trial Second Room Front", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Spirit Trial Crystal Switch Chest": "True" + }, + "exits": { + "Ganons Castle Spirit Trial Second Room Back": "has_bombchus" + } + }, + { + "region_name": "Ganons Castle Spirit Trial Second Room Back", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Spirit Trial Invisible Chest": "logic_lens_castle or can_use(Lens_of_Truth)" + }, + "exits": { + "Ganons Castle Spirit Trial Ending": "is_adult and Bow and Mirror_Shield" + } + }, + { + "region_name": "Ganons Castle Spirit Trial Ending", + "dungeon": "Ganons Castle", + "events": { + "Spirit Trial Clear": "can_use(Light_Arrows)" + }, + "locations": { + "Ganons Castle Spirit Trial Pot 1": "True", + "Ganons Castle Spirit Trial Pot 2": "True", + "Nut Pot": "True" + } + }, + { + "region_name": "Ganons Castle Deku Scrubs", + "dungeon": "Ganons Castle", + "locations": { + "Ganons Castle Deku Scrub Center-Left": "can_stun_deku", + "Ganons Castle Deku Scrub Center-Right": "can_stun_deku", + "Ganons Castle Deku Scrub Right": "can_stun_deku", + "Ganons Castle Deku Scrub Left": "can_stun_deku", + "Free Fairies": "has_bottle" } } ] diff --git a/worlds/oot/data/World/Gerudo Training Ground MQ.json b/worlds/oot/data/World/Gerudo Training Ground MQ.json index 98c68b8707eb..7961e539bab9 100644 --- a/worlds/oot/data/World/Gerudo Training Ground MQ.json +++ b/worlds/oot/data/World/Gerudo Training Ground MQ.json @@ -8,12 +8,17 @@ "Gerudo Training Ground MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)", "Gerudo Training Ground MQ Maze Path First Chest": "True", "Gerudo Training Ground MQ Maze Path Second Chest": "True", - "Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)" + "Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)", + "Gerudo Training Ground MQ Lobby Left Pot 1": "True", + "Gerudo Training Ground MQ Lobby Left Pot 2": "True", + "Gerudo Training Ground MQ Lobby Right Pot 1": "True", + "Gerudo Training Ground MQ Lobby Right Pot 2": "True", + "Gerudo Training Ground MQ Maze Crate": "(Small_Key_Gerudo_Training_Ground, 3) and can_break_crate" }, "exits": { "Gerudo Fortress": "True", - "Gerudo Training Ground Left Side": "here(has_fire_source)", - "Gerudo Training Ground Right Side": "here(can_use(Bow) or can_use(Slingshot))" + "Gerudo Training Ground Right Side": "here(can_use(Bow) or can_use(Slingshot))", + "Gerudo Training Ground Left Side": "here(has_fire_source)" } }, { @@ -21,12 +26,12 @@ "dungeon": "Gerudo Training Ground", "locations": { "Gerudo Training Ground MQ Dinolfos Chest": "is_adult", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room. + # In the Dinalfos room, shoot the Gerudo symbol above the door to the lava room. + "Wall Fairy": "has_bottle and can_use(Bow)" }, "exits": { - # Still requires has_fire_source in the room - "Gerudo Training Ground Underwater": " - (Bow or can_use(Longshot)) and can_use(Hover_Boots)" + # Fire source is checked in the water room itself. + "Gerudo Training Ground Underwater": "is_adult and (Bow or Longshot) and Hover_Boots" } }, { @@ -34,8 +39,8 @@ "dungeon": "Gerudo Training Ground", "locations": { "Gerudo Training Ground MQ Underwater Silver Rupee Chest": " - has_fire_source and can_use(Iron_Boots) and - (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage" + has_fire_source and Iron_Boots and + (logic_fewer_tunic_requirements or Zora_Tunic) and can_take_damage" } }, { @@ -62,20 +67,23 @@ "exits": { "Gerudo Training Ground Back Areas": " is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and - (can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" + (can_play(Song_of_Time) or (logic_gtg_fake_wall and Hover_Boots))" } }, { "region_name": "Gerudo Training Ground Back Areas", "dungeon": "Gerudo Training Ground", "locations": { + # The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash. + "Gerudo Training Ground MQ Ice Arrows Chest": " + (Small_Key_Gerudo_Training_Ground, 3) and Megaton_Hammer", "Gerudo Training Ground MQ Eye Statue Chest": "Bow", "Gerudo Training Ground MQ Second Iron Knuckle Chest": "True", - "Gerudo Training Ground MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives" + "Gerudo Training Ground MQ Flame Circle Chest": "Hookshot or Bow or has_explosives" }, "exits": { "Gerudo Training Ground Central Maze Right": "Megaton_Hammer", - "Gerudo Training Ground Right Side": "can_use(Longshot)" + "Gerudo Training Ground Right Side": "Longshot" } }, { @@ -83,16 +91,11 @@ "dungeon": "Gerudo Training Ground", "locations": { "Gerudo Training Ground MQ Maze Right Central Chest": "True", - "Gerudo Training Ground MQ Maze Right Side Chest": "True", - # The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash. - "Gerudo Training Ground MQ Ice Arrows Chest": " - (Small_Key_Gerudo_Training_Ground, 3)" + "Gerudo Training Ground MQ Maze Right Side Chest": "True" }, "exits": { - # guarantees fire with torch - "Gerudo Training Ground Underwater": " - can_use(Longshot) or (can_use(Hookshot) and Bow)", - "Gerudo Training Ground Right Side": "can_use(Hookshot)" + "Gerudo Training Ground Underwater": "Longshot or (Hookshot and Bow)", + "Gerudo Training Ground Right Side": "Hookshot" } } ] diff --git a/worlds/oot/data/World/Gerudo Training Ground.json b/worlds/oot/data/World/Gerudo Training Ground.json index dfaed49a8cd3..13a470f6cb11 100644 --- a/worlds/oot/data/World/Gerudo Training Ground.json +++ b/worlds/oot/data/World/Gerudo Training Ground.json @@ -7,30 +7,39 @@ "Gerudo Training Ground Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)", "Gerudo Training Ground Stalfos Chest": "is_adult or Kokiri_Sword", "Gerudo Training Ground Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room. + "Gerudo Training Ground Hidden Ceiling Chest": " + (Small_Key_Gerudo_Training_Ground, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))", + "Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4)", + "Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6)", + "Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7)", + "Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9)", + "Gerudo Training Ground Beamos Recovery Heart 1": "True", + "Gerudo Training Ground Beamos Recovery Heart 2": "True", + # In the Beamos room, shoot the Gerudo symbol above the door to the lava room. + "Wall Fairy": "has_bottle and can_use(Bow)" }, "exits": { "Gerudo Fortress": "True", - "Gerudo Training Ground Heavy Block Room": " - (is_adult or Kokiri_Sword) and - (can_use(Hookshot) or logic_gtg_without_hookshot)", "Gerudo Training Ground Lava Room": " here(has_explosives and (is_adult or Kokiri_Sword))", - "Gerudo Training Ground Central Maze": "True" + "Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9)", + "Gerudo Training Ground Heavy Block Room": " + (is_adult or Kokiri_Sword) and + (can_use(Hookshot) or logic_gtg_without_hookshot)" } }, { - "region_name": "Gerudo Training Ground Central Maze", + "region_name": "Gerudo Training Ground Lava Room", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Ground, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))", - "Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4)", - "Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6)", - "Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7)", - "Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9)" + "Gerudo Training Ground Underwater Silver Rupee Chest": " + is_adult and Hookshot and can_play(Song_of_Time) and + Iron_Boots and (logic_fewer_tunic_requirements or Zora_Tunic)" }, "exits": { - "Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9)" + "Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child", + "Gerudo Training Ground Hammer Room": " + is_adult and (Longshot or (Hookshot and Hover_Boots))" } }, { @@ -42,79 +51,63 @@ "Gerudo Training Ground Freestanding Key": "True" }, "exits": { - "Gerudo Training Ground Hammer Room": "can_use(Hookshot)", - "Gerudo Training Ground Lava Room": "True" + "Gerudo Training Ground Lava Room": "True", + "Gerudo Training Ground Hammer Room": "can_use(Hookshot)" } }, { - "region_name": "Gerudo Training Ground Lava Room", + "region_name": "Gerudo Training Ground Heavy Block Room", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Underwater Silver Rupee Chest": " - can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and - (logic_fewer_tunic_requirements or can_use(Zora_Tunic))" + "Gerudo Training Ground Before Heavy Block Chest": "True" }, "exits": { - "Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child", - "Gerudo Training Ground Hammer Room": " - can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))" + "Gerudo Training Ground Eye Statue Upper": " + is_adult and (logic_lens_gtg or can_use(Lens_of_Truth)) and + (Hookshot or (logic_gtg_fake_wall and Hover_Boots))" } }, { - "region_name": "Gerudo Training Ground Hammer Room", + "region_name": "Gerudo Training Ground Eye Statue Upper", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Hammer Room Clear Chest": "True", - "Gerudo Training Ground Hammer Room Switch Chest": "can_use(Megaton_Hammer)" + "Gerudo Training Ground Near Scarecrow Chest": "Bow" }, "exits": { - "Gerudo Training Ground Eye Statue Lower": "can_use(Megaton_Hammer) and Bow", - "Gerudo Training Ground Lava Room": "True" + "Gerudo Training Ground Like Like Room": "Silver_Gauntlets", + "Gerudo Training Ground Eye Statue Lower": "True" } }, { - "region_name": "Gerudo Training Ground Eye Statue Lower", + "region_name": "Gerudo Training Ground Like Like Room", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Eye Statue Chest": "can_use(Bow)" - }, - "exits": { - "Gerudo Training Ground Hammer Room": "True" + "Gerudo Training Ground Heavy Block First Chest": "True", + "Gerudo Training Ground Heavy Block Second Chest": "True", + "Gerudo Training Ground Heavy Block Third Chest": "True", + "Gerudo Training Ground Heavy Block Fourth Chest": "True" } }, { - "region_name": "Gerudo Training Ground Eye Statue Upper", + "region_name": "Gerudo Training Ground Eye Statue Lower", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Near Scarecrow Chest": "can_use(Bow)" + "Gerudo Training Ground Eye Statue Chest": "Bow" }, "exits": { - "Gerudo Training Ground Eye Statue Lower": "True" + "Gerudo Training Ground Hammer Room": "True" } }, { - "region_name": "Gerudo Training Ground Heavy Block Room", + "region_name": "Gerudo Training Ground Hammer Room", "dungeon": "Gerudo Training Ground", "locations": { - "Gerudo Training Ground Before Heavy Block Chest": "True" + "Gerudo Training Ground Hammer Room Clear Chest": "True", + "Gerudo Training Ground Hammer Room Switch Chest": "Megaton_Hammer" }, "exits": { - "Gerudo Training Ground Eye Statue Upper": " - (logic_lens_gtg or can_use(Lens_of_Truth)) and - (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))", - "Gerudo Training Ground Like Like Room": " - can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and - (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" - } - }, - { - "region_name": "Gerudo Training Ground Like Like Room", - "dungeon": "Gerudo Training Ground", - "locations": { - "Gerudo Training Ground Heavy Block First Chest": "True", - "Gerudo Training Ground Heavy Block Second Chest": "True", - "Gerudo Training Ground Heavy Block Third Chest": "True", - "Gerudo Training Ground Heavy Block Fourth Chest": "True" + "Gerudo Training Ground Lava Room": "True", + "Gerudo Training Ground Eye Statue Lower": "Megaton_Hammer and Bow" } } ] diff --git a/worlds/oot/data/World/Ice Cavern MQ.json b/worlds/oot/data/World/Ice Cavern MQ.json index e7d0f43c95a7..cbecbb1d1b35 100644 --- a/worlds/oot/data/World/Ice Cavern MQ.json +++ b/worlds/oot/data/World/Ice Cavern MQ.json @@ -3,6 +3,12 @@ "region_name": "Ice Cavern Beginning", "dungeon": "Ice Cavern", "locations": { + "Ice Cavern MQ First Hall Pot": "True", + "Ice Cavern MQ Tektite Room Pot 1": "True", + "Ice Cavern MQ Tektite Room Pot 2": "True", + # The crystal switch in the tektite room can be hit with the pot in the first hall. + "Ice Cavern MQ Center Room Pot 1": "True", + "Ice Cavern MQ Center Room Pot 2": "True", "Fairy Pot": "has_bottle" }, "exits": { @@ -24,25 +30,28 @@ "Blue Fire": "has_bottle" } }, + { + "region_name": "Ice Cavern Compass Room", + "dungeon": "Ice Cavern", + "locations": { + "Ice Cavern MQ Compass Chest": "True", + "Ice Cavern MQ Freestanding PoH": "has_explosives", + "Ice Cavern MQ Compass Room Pot 1": "True", + "Ice Cavern MQ Compass Room Pot 2": "True", + "Ice Cavern MQ GS Red Ice": "can_play(Song_of_Time) or logic_ice_mq_red_ice_gs" + } + }, { "region_name": "Ice Cavern Iron Boots Region", "dungeon": "Ice Cavern", "locations": { "Ice Cavern MQ Iron Boots Chest": "is_adult", "Sheik in Ice Cavern": "is_adult", + "Ice Cavern MQ Near End Pot": "is_adult", "Ice Cavern MQ GS Ice Block": "is_adult or can_child_attack", "Ice Cavern MQ GS Scarecrow": " can_use(Scarecrow) or (Hover_Boots and can_use(Longshot)) or (logic_ice_mq_scarecrow and is_adult)" } - }, - { - "region_name": "Ice Cavern Compass Room", - "dungeon": "Ice Cavern", - "locations": { - "Ice Cavern MQ Compass Chest": "True", - "Ice Cavern MQ Freestanding PoH": "has_explosives", - "Ice Cavern MQ GS Red Ice": "can_play(Song_of_Time) or logic_ice_mq_red_ice_gs" - } } ] diff --git a/worlds/oot/data/World/Ice Cavern.json b/worlds/oot/data/World/Ice Cavern.json index f61596dd1662..7a9e51e9cc8e 100644 --- a/worlds/oot/data/World/Ice Cavern.json +++ b/worlds/oot/data/World/Ice Cavern.json @@ -2,34 +2,63 @@ { "region_name": "Ice Cavern Beginning", "dungeon": "Ice Cavern", + "locations":{ + "Ice Cavern Frozen Blue Rupee": "Blue_Fire" + }, "exits": { "ZF Ice Ledge": "True", - #Frezzards are weird, they are immune to KS completely. Leave sticks out as 8/10 is a lot - "Ice Cavern": "here(is_adult or has_explosives or can_use(Dins_Fire))" + # Freezards are immune to Kokiri Sword. It would take a lot of sticks. + "Ice Cavern Spinning Blades": "here(is_adult or has_explosives or can_use(Dins_Fire))" } }, { - "region_name": "Ice Cavern", + "region_name": "Ice Cavern Spinning Blades", "dungeon": "Ice Cavern", "locations": { - "Ice Cavern Map Chest": "Blue_Fire and is_adult", - "Ice Cavern Compass Chest": "Blue_Fire", + "Ice Cavern Hall Pot 1": "True", + "Ice Cavern Hall Pot 2": "True", + "Ice Cavern Spinning Blade Pot 1": "True", + "Ice Cavern Spinning Blade Pot 2": "True", + "Ice Cavern Spinning Blade Pot 3": "True", + "Ice Cavern Spinning Blade Flying Pot": "True", + "Ice Cavern GS Spinning Scythe Room": "can_use(Hookshot) or can_use(Boomerang)" + }, + "exits": { + "Ice Cavern Map Room": "is_adult", + "Ice Cavern Behind Ice Walls": "here(Blue_Fire)" + } + }, + { + "region_name": "Ice Cavern Map Room", + "dungeon": "Ice Cavern", + "locations": { + "Ice Cavern Map Chest": "Blue_Fire", + "Ice Cavern Map Room Recovery Heart 1": "True", + "Ice Cavern Map Room Recovery Heart 2": "True", + "Ice Cavern Map Room Recovery Heart 3": "True", + "Ice Cavern Frozen Pot": "Blue_Fire", + "Blue Fire": "has_bottle" + } + }, + { + "region_name": "Ice Cavern Behind Ice Walls", + "dungeon": "Ice Cavern", + "locations": { + "Ice Cavern Compass Chest": "True", + "Ice Cavern Freestanding PoH": "True", "Ice Cavern Iron Boots Chest": " - Blue_Fire and - (is_adult or Slingshot or Sticks or - Kokiri_Sword or can_use(Dins_Fire))", + is_adult or Slingshot or Sticks or Kokiri_Sword or can_use(Dins_Fire)", "Sheik in Ice Cavern": " - Blue_Fire and - (is_adult or Slingshot or Sticks or - Kokiri_Sword or can_use(Dins_Fire))", - "Ice Cavern Freestanding PoH": "Blue_Fire", - "Ice Cavern GS Spinning Scythe Room": "can_use(Hookshot) or can_use(Boomerang)", - "Ice Cavern GS Heart Piece Room": " - Blue_Fire and (can_use(Hookshot) or can_use(Boomerang))", + is_adult or Slingshot or Sticks or Kokiri_Sword or can_use(Dins_Fire)", + "Ice Cavern Block Room Red Rupee 1": "can_play(Song_of_Time) or can_use(Boomerang)", + "Ice Cavern Block Room Red Rupee 2": "can_play(Song_of_Time) or can_use(Boomerang)", + "Ice Cavern Block Room Red Rupee 3": "can_play(Song_of_Time) or can_use(Boomerang)", + "Ice Cavern Near End Pot 1": "True", + "Ice Cavern Near End Pot 2": "True", + "Ice Cavern GS Heart Piece Room": "can_use(Hookshot) or can_use(Boomerang)", "Ice Cavern GS Push Block Room": " - Blue_Fire and (can_use(Hookshot) or can_use(Boomerang) or - (logic_ice_block_gs and can_use(Hover_Boots)))", - "Blue Fire": "is_adult and has_bottle" + can_use(Hookshot) or can_use(Boomerang) or + (logic_ice_block_gs and can_use(Hover_Boots))" } } ] diff --git a/worlds/oot/data/World/Jabu Jabus Belly MQ.json b/worlds/oot/data/World/Jabu Jabus Belly MQ.json index 1251dc212c6c..92ac5714f9a9 100644 --- a/worlds/oot/data/World/Jabu Jabus Belly MQ.json +++ b/worlds/oot/data/World/Jabu Jabus Belly MQ.json @@ -3,64 +3,114 @@ "region_name": "Jabu Jabus Belly Beginning", "dungeon": "Jabu Jabus Belly", "locations": { - "Nut Pot": "True", "Jabu Jabus Belly MQ Map Chest": "can_blast_or_smash", - "Jabu Jabus Belly MQ First Room Side Chest": "can_use(Slingshot)" + "Jabu Jabus Belly MQ First Room Side Chest": "can_use(Slingshot)", + "Jabu Jabus Belly MQ First Room Pot 1": "True", + "Jabu Jabus Belly MQ First Room Pot 2": "True", + "Nut Pot": "True" }, "exits": { "Zoras Fountain": "True", - "Jabu Jabus Belly Main": "here(is_child and can_use(Slingshot))" + "Jabu Jabus Belly Elevator Room": "here(can_use(Slingshot)) or jabu_shortcuts" } }, { - "region_name": "Jabu Jabus Belly Main", + "region_name": "Jabu Jabus Belly Elevator Room", "dungeon": "Jabu Jabus Belly", "locations": { "Jabu Jabus Belly MQ Second Room Lower Chest": "True", "Jabu Jabus Belly MQ Second Room Upper Chest": " - can_use(Hover_Boots) or can_use(Hookshot) or - at('Jabu Jabus Belly Boss Area', is_child)", - "Jabu Jabus Belly MQ Compass Chest": "True", - "Jabu Jabus Belly MQ Basement Near Vines Chest": "True", - "Jabu Jabus Belly MQ Basement Near Switches Chest": "True", + here(can_use(Slingshot)) and + (can_use(Hover_Boots) or can_use(Hookshot) or + 'Jabu Jabus Belly Floor Lowered' or jabu_shortcuts)", + "Jabu Jabus Belly MQ Compass Chest": " + (is_child or can_dive or Iron_Boots or logic_jabu_alcove_jump_dive) and + (can_use(Slingshot) or has_bombchus or can_use(Bow) or can_use(Hookshot) or + (logic_jabu_mq_rang_jump and can_use(Boomerang)))", + "Jabu Jabus Belly MQ Recovery Heart 1": "True", + "Jabu Jabus Belly MQ Recovery Heart 2": "True", + "Jabu Jabus Belly MQ Underwater Green Rupee 1": " + can_use(Boomerang) or (Progressive_Scale, 2) or can_use(Iron_Boots)", + "Jabu Jabus Belly MQ Underwater Green Rupee 2": " + can_use(Boomerang) or can_dive or can_use(Iron_Boots)", + "Jabu Jabus Belly MQ Underwater Green Rupee 3": "True", + "Jabu Jabus Belly MQ Elevator Room Pot 1": "True", + "Jabu Jabus Belly MQ Elevator Room Pot 2": "True" + }, + "exits": { + "Jabu Jabus Belly Main": " + here(is_child or can_dive or Iron_Boots or logic_jabu_alcove_jump_dive)", + "Jabu Jabus Belly Before Boss": " + jabu_shortcuts or 'Jabu Jabus Belly Floor Lowered' or + ('Jabu Jabus Belly Parasitic Tentacle Cleared' and + (can_use(Hover_Boots) or can_use(Hookshot)))" + } + }, + { + "region_name": "Jabu Jabus Belly Main", + "dungeon": "Jabu Jabus Belly", + "locations": { + "Jabu Jabus Belly MQ Basement Near Vines Chest": "can_use(Slingshot)", + "Jabu Jabus Belly MQ Basement Near Switches Chest": "can_use(Slingshot)", "Jabu Jabus Belly MQ Boomerang Room Small Chest": "True", - "Jabu Jabus Belly MQ Boomerang Chest": "True", + "Jabu Jabus Belly MQ Boomerang Chest": " + Kokiri_Sword or Slingshot or Bombs or Sticks or is_adult", + "Jabu Jabus Belly MQ Boomerang Room Pot 1": "True", + "Jabu Jabus Belly MQ Boomerang Room Pot 2": "True", "Jabu Jabus Belly MQ GS Boomerang Chest Room": " - can_play(Song_of_Time) or (logic_jabu_mq_sot_gs and can_use(Boomerang))" + (can_play(Song_of_Time) and (can_child_attack or is_adult)) or + (logic_jabu_mq_sot_gs and can_use(Boomerang))", + "Jabu Jabus Belly MQ GS Invisible Enemies Room": " + (at('Jabu Jabus Belly Depths', True) or jabu_shortcuts) and + ((can_use(Hookshot) and can_use(Hover_Boots)) or + (here((logic_lens_jabu_mq or can_use(Lens_of_Truth)) and + (can_use(Slingshot) or can_use(Bow) or can_use(Longshot) or + (can_use(Hookshot) and can_use(Iron_Boots) and logic_lens_jabu_mq))) and + (can_use(Boomerang) or (can_use(Hookshot) and can_use(Iron_Boots)))))" + # Lens of Truth cannot be used underwater. + # Adult's legs are too long to swim directly onto the Hookshot pillar. }, "exits": { - "Jabu Jabus Belly Beginning": "True", - "Jabu Jabus Belly Depths": "has_explosives and can_use(Boomerang)" + "Jabu Jabus Belly Depths": "has_explosives and can_use(Boomerang) and can_use(Slingshot)" } }, { "region_name": "Jabu Jabus Belly Depths", "dungeon": "Jabu Jabus Belly", + "events": { + "Jabu Jabus Belly Parasitic Tentacle Cleared": "True" + }, "locations": { "Jabu Jabus Belly MQ Falling Like Like Room Chest": "True", - "Jabu Jabus Belly MQ GS Tailpasaran Room": "Sticks or can_use(Dins_Fire)", - "Jabu Jabus Belly MQ GS Invisible Enemies Room": " - (logic_lens_jabu_mq or can_use(Lens_of_Truth)) or - at('Jabu Jabus Belly Main', can_use(Hover_Boots) and can_use(Hookshot))" + "Jabu Jabus Belly MQ Falling Like Like Room Pot 1": "True", + "Jabu Jabus Belly MQ Falling Like Like Room Pot 2": "True", + "Jabu Jabus Belly MQ GS Tailpasaran Room": "Sticks or can_use(Dins_Fire)" }, "exits": { - "Jabu Jabus Belly Main": "True", - "Jabu Jabus Belly Boss Area": "Sticks or (can_use(Dins_Fire) and Kokiri_Sword)" + "Jabu Jabus Belly Past Big Octo": "Sticks or (can_use(Dins_Fire) and Kokiri_Sword)" + } + }, + { + "region_name": "Jabu Jabus Belly Past Big Octo", + "dungeon": "Jabu Jabus Belly", + "events": { + "Jabu Jabus Belly Floor Lowered": "True" + }, + "locations": { + "Jabu Jabus Belly MQ Cow": "can_play(Eponas_Song)" } }, { - "region_name": "Jabu Jabus Belly Boss Area", + "region_name": "Jabu Jabus Belly Before Boss", "dungeon": "Jabu Jabus Belly", "locations": { - "Jabu Jabus Belly MQ Cow" : "can_play(Eponas_Song)", - "Jabu Jabus Belly MQ Near Boss Chest": "True", - "Jabu Jabus Belly Barinade Heart": "True", - "Barinade": "True", - "Jabu Jabus Belly MQ GS Near Boss": "True", + "Jabu Jabus Belly MQ Near Boss Chest": "can_use(Slingshot)", + "Jabu Jabus Belly MQ GS Near Boss": " + can_use(Boomerang) or (logic_jabu_near_boss_ranged and can_use(Hookshot))", "Fairy Pot": "has_bottle" }, "exits": { - "Jabu Jabus Belly Main": "True" + "Jabu Jabus Belly Boss Door": "here(can_use(Slingshot)) or jabu_shortcuts" } } ] diff --git a/worlds/oot/data/World/Jabu Jabus Belly.json b/worlds/oot/data/World/Jabu Jabus Belly.json index 8b90da34a969..50436f1340ef 100644 --- a/worlds/oot/data/World/Jabu Jabus Belly.json +++ b/worlds/oot/data/World/Jabu Jabus Belly.json @@ -12,17 +12,25 @@ "dungeon": "Jabu Jabus Belly", "locations": { "Jabu Jabus Belly Boomerang Chest": "True", + "Jabu Jabus Belly Deku Scrub": " + can_dive or is_child or logic_jabu_alcove_jump_dive or can_use(Iron_Boots)", + "Jabu Jabus Belly Small Wooden Crate": "True", + "Jabu Jabus Belly Basement 2 Octoroks Pot 1": "can_use(Boomerang) or can_use(Hover_Boots)", + "Jabu Jabus Belly Basement 2 Octoroks Pot 2": "can_use(Boomerang) or can_use(Hover_Boots)", + "Jabu Jabus Belly Basement 2 Octoroks Pot 3": "can_use(Boomerang) or can_use(Hover_Boots)", + "Jabu Jabus Belly Basement 2 Octoroks Pot 4": "can_use(Boomerang) or can_use(Hover_Boots)", + "Jabu Jabus Belly Basement Switch Room Pot 1": "True", + "Jabu Jabus Belly Basement Switch Room Pot 2": "True", "Jabu Jabus Belly GS Water Switch Room": "True", "Jabu Jabus Belly GS Lobby Basement Lower": "can_use(Boomerang) or can_use(Hookshot)", "Jabu Jabus Belly GS Lobby Basement Upper": "can_use(Boomerang) or can_use(Hookshot)", - "Jabu Jabus Belly Deku Scrub": " - can_dive or is_child or logic_jabu_scrub_jump_dive or can_use(Iron_Boots)", "Fairy Pot": "has_bottle" }, "exits": { - "Jabu Jabus Belly Beginning": "True", "Jabu Jabus Belly Depths": "can_use(Boomerang)", - "Jabu Jabus Belly Boss Area": "logic_jabu_boss_gs_adult and can_use(Hover_Boots)" + "Jabu Jabus Belly Before Boss": " + (logic_jabu_boss_hover and can_use(Hover_Boots)) + or jabu_shortcuts or 'Jabu Jabus Belly Floor Lowered'" } }, { @@ -33,21 +41,34 @@ "Jabu Jabus Belly Compass Chest": "True" }, "exits": { - "Jabu Jabus Belly Main": "True", - "Jabu Jabus Belly Boss Area": "Sticks or Kokiri_Sword" + "Jabu Jabus Belly Past Big Octo": "Sticks or Kokiri_Sword" } }, { - "region_name": "Jabu Jabus Belly Boss Area", + "region_name": "Jabu Jabus Belly Past Big Octo", "dungeon": "Jabu Jabus Belly", + "events": { + "Jabu Jabus Belly Floor Lowered": "True" + }, "locations": { - "Jabu Jabus Belly Barinade Heart": "can_use(Boomerang)", - "Barinade": "can_use(Boomerang)", - "Jabu Jabus Belly GS Near Boss": "True", + "Jabu Jabus Belly Above Big Octo Pot 1": "True", + "Jabu Jabus Belly Above Big Octo Pot 2": "True", "Nut Pot": "True" + } + }, + { + "region_name": "Jabu Jabus Belly Before Boss", + "dungeon": "Jabu Jabus Belly", + "locations": { + "Jabu Jabus Belly GS Near Boss": "True" }, "exits": { - "Jabu Jabus Belly Main": "True" + "Jabu Jabus Belly Boss Door": " + can_use(Boomerang) or + (logic_jabu_near_boss_ranged and + (can_use(Hookshot) or can_use(Bow) or can_use(Slingshot))) or + (logic_jabu_near_boss_explosives and + (has_bombchus or (Bombs and can_use(Hover_Boots))))" } } ] diff --git a/worlds/oot/data/World/Overworld.json b/worlds/oot/data/World/Overworld.json index fca10a7a8b95..de2b4a61dc6a 100644 --- a/worlds/oot/data/World/Overworld.json +++ b/worlds/oot/data/World/Overworld.json @@ -1,20 +1,21 @@ [ { "region_name": "Root", - "hint": "Link's Pocket", + "hint": "ROOT", "locations": { - "Links Pocket": "True" + "Links Pocket": "True", + "Gift from Sages": "can_receive_ganon_bosskey" }, "exits": { "Root Exits": "is_starting_age or Time_Travel", - "HC Garden Locations": "skip_child_zelda" + "HC Garden Locations": "shuffle_child_trade == 'skip_child_zelda'" } }, { "region_name": "Root Exits", "exits": { - "Child Spawn": "is_child and (starting_age == 'child' or Time_Travel)", - "Adult Spawn": "is_adult and (starting_age == 'adult' or Time_Travel)", + "Child Spawn": "is_child", + "Adult Spawn": "is_adult", "Prelude of Light Warp": "can_play(Prelude_of_Light) and can_leave_forest", "Minuet of Forest Warp": "can_play(Minuet_of_Forest)", "Bolero of Fire Warp": "can_play(Bolero_of_Fire) and can_leave_forest", @@ -73,25 +74,42 @@ }, { "region_name": "Kokiri Forest", - "font_color": "Green", "scene": "Kokiri Forest", - "hint": "Kokiri Forest", + "hint": "KOKIRI_FOREST", "events": { - "Showed Mido Sword & Shield": "is_child and Kokiri_Sword and Buy_Deku_Shield" + "Showed Mido Sword & Shield": "is_child and Kokiri_Sword and Deku_Shield" }, "locations": { "KF Kokiri Sword Chest": "is_child", + "KF Grass Near Ramp Green Rupee 1": "is_child", + "KF Grass Near Ramp Green Rupee 2": "is_child", + "KF Grass Near Midos Green Rupee 1": "is_child", + "KF Grass Near Midos Green Rupee 2": "is_child", + "KF Behind Midos Blue Rupee": "is_child", + "KF Top of Sarias Recovery Heart 1": "is_child", + "KF Top of Sarias Recovery Heart 2": "is_child", + "KF Top of Sarias Recovery Heart 3": "is_child", + "KF End of Bridge Blue Rupee": "is_child", + "KF Boulder Maze Blue Rupee 1": "is_child", + "KF Boulder Maze Blue Rupee 2": "is_child", + "KF Bean Platform Green Rupee 1": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Green Rupee 2": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Green Rupee 3": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Green Rupee 4": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Green Rupee 5": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Green Rupee 6": "is_adult and (here(can_plant_bean) or Hover_Boots)", + "KF Bean Platform Red Rupee": "is_adult and (here(can_plant_bean) or Hover_Boots)", "KF GS Know It All House": " is_child and can_child_attack and at_night and (had_night_start or can_leave_forest or can_play(Suns_Song))", "KF GS Bean Patch": " can_plant_bugs and can_child_attack", "KF GS House of Twins": " - is_adult and at_night and - (can_use(Hookshot) or (logic_adult_kokiri_gs and can_use(Hover_Boots)))", + is_adult and at_night and + (Hookshot or (logic_adult_kokiri_gs and Hover_Boots))", "KF Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle" + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle" }, "exits": { "KF Links House": "True", @@ -108,17 +126,16 @@ }, { "region_name": "KF Outside Deku Tree", - "font_color": "Green", "scene": "Kokiri Forest", - "hint": "Kokiri Forest", + "hint": "KOKIRI_FOREST", "events": { - "Showed Mido Sword & Shield": "is_child and Kokiri_Sword and Buy_Deku_Shield" + "Showed Mido Sword & Shield": "is_child and Kokiri_Sword and Deku_Shield" }, "locations": { - #The Babas despawn for Adult on forest temple completion. For vanilla forest temple - #placement this is not an issue as Adult can go back to forest for the Baba's there. - #Entrance rando cannot rely on this for the case forest completion was done on non - #repeatable access. + # The Babas despawn for Adult on forest temple completion. For vanilla forest temple + # placement this is not an issue as Adult can go back to forest for the Baba's there. + # Entrance rando cannot rely on this for the case forest completion was done on non + # repeatable access. "Deku Baba Sticks": "(is_adult and not entrance_shuffle) or can_use(Kokiri_Sword) or can_use(Boomerang)", "Deku Baba Nuts": "is_adult and not entrance_shuffle", "KF Deku Tree Gossip Stone (Left)": "True", @@ -133,10 +150,10 @@ }, { "region_name": "KF Links House", - "pretty_name": "your house", "scene": "KF Links House", "locations": { - "KF Links House Cow": "is_adult and can_play(Eponas_Song) and 'Links Cow'" + "KF Links House Cow": "is_adult and can_play(Eponas_Song) and 'Links Cow'", + "KF Links House Pot": "True" }, "exits": { "Kokiri Forest": "True" @@ -144,7 +161,6 @@ }, { "region_name": "KF Midos House", - "pretty_name": "Mido's House", "scene": "KF Midos House", "locations": { "KF Midos Top Left Chest": "True", @@ -158,33 +174,44 @@ }, { "region_name": "KF Sarias House", - "pretty_name": "Saria's House", "scene": "KF Sarias House", + "locations": { + "KF Sarias House Recovery Heart 1": "True", + "KF Sarias House Recovery Heart 2": "True", + "KF Sarias House Recovery Heart 3": "True", + "KF Sarias House Recovery Heart 4": "True" + }, "exits": { "Kokiri Forest": "True" } }, { "region_name": "KF House of Twins", - "pretty_name": "the House of Twins", "scene": "KF House of Twins", + "locations": { + "KF House of Twins Pot 1": "True", + "KF House of Twins Pot 2": "True" + }, "exits": { "Kokiri Forest": "True" } }, { "region_name": "KF Know It All House", - "pretty_name": "the Know-it-All House", "scene": "KF Know it All House", + "locations": { + "KF Know it All House Pot 1": "True", + "KF Know it All House Pot 2": "True" + }, "exits": { "Kokiri Forest": "True" } }, { "region_name": "KF Kokiri Shop", - "pretty_name": "the Kokiri Shop", "scene": "KF Kokiri Shop", "locations": { + "KF Shop Blue Rupee": "True", "KF Shop Item 1": "True", "KF Shop Item 2": "True", "KF Shop Item 3": "True", @@ -198,20 +225,10 @@ "Kokiri Forest": "True" } }, - { - "region_name": "LW Forest Exit", - "font_color": "Green", - "scene": "Lost Woods", - "hint": "the Lost Woods", - "exits": { - "Kokiri Forest": "True" - } - }, { "region_name": "Lost Woods", - "font_color": "Green", "scene": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "events": { "Odd Mushroom Access": "is_adult and ('Cojiro Access' or Cojiro)", "Poachers Saw Access": "is_adult and 'Odd Potion Access'" @@ -221,10 +238,17 @@ "LW Ocarina Memory Game": "is_child and Ocarina", "LW Target in Woods": "can_use(Slingshot)", "LW Deku Scrub Near Bridge": "is_child and can_stun_deku", + "LW Underwater Green Rupee 1": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 2": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 3": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 4": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 5": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 6": "is_child and (can_dive or Boomerang)", + "LW Underwater Green Rupee 7": "is_child and (can_dive or Boomerang)", "LW GS Bean Patch Near Bridge": "can_plant_bugs and can_child_attack", "LW Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle", + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle", "Bug Shrub": "is_child and can_cut_shrubs and has_bottle" }, "exits": { @@ -232,8 +256,8 @@ "GC Woods Warp": "True", "LW Bridge": " is_adult and - (can_use(Hover_Boots) or can_use(Longshot) or - here(can_plant_bean) or logic_lost_woods_bridge)", + (Hover_Boots or Longshot or here(can_plant_bean) or logic_lost_woods_bridge)", + "LW Underwater Entrance": "is_child and (can_dive or Boomerang)", "Zora River": "can_leave_forest and (can_dive or can_use(Iron_Boots))", "LW Beyond Mido": "is_child or logic_mido_backflip or can_play(Sarias_Song)", "LW Near Shortcuts Grotto": "here(can_blast_or_smash)" @@ -241,20 +265,20 @@ }, { "region_name": "LW Beyond Mido", - "font_color": "Green", "scene": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "locations": { "LW Deku Scrub Near Deku Theater Right": "is_child and can_stun_deku", "LW Deku Scrub Near Deku Theater Left": "is_child and can_stun_deku", + "LW Under Boulder Blue Rupee": "can_blast_or_smash", "LW GS Above Theater": " is_adult and at_night and (here(can_plant_bean) or - (logic_lost_woods_gs_bean and can_use(Hookshot) and - (can_use(Longshot) or can_use(Bow) or has_bombchus or can_use(Dins_Fire))))", + (logic_lost_woods_gs_bean and Hookshot and + (Longshot or Bow or has_bombchus or can_use(Dins_Fire))))", "LW GS Bean Patch Near Theater": " can_plant_bugs and - (can_child_attack or (shuffle_scrubs == 'off' and Buy_Deku_Shield))", + (can_child_attack or (shuffle_scrubs == 'off' and Deku_Shield))", "Butterfly Fairy": "can_use(Sticks) and has_bottle" }, "exits": { @@ -265,33 +289,50 @@ "LW Scrubs Grotto": "here(can_blast_or_smash)" } }, + { + "region_name": "LW Forest Exit", + "scene": "Lost Woods", + "hint": "LOST_WOODS", + "exits": { + "Kokiri Forest": "True" + } + }, + { + "region_name": "LW Underwater Entrance", + "scene": "Lost Woods", + "hint": "LOST_WOODS", + "locations": { + # This is the third rupee from the shortcut entrance and is automatically + # collected upon entering through the shortcut. Only really matters for overworld ER + "LW Underwater Shortcut Green Rupee": "is_child" + }, + "exits": { + "Lost Woods": "True" + } + }, { "region_name": "Lost Woods Mushroom Timeout", - "font_color": "Green", "scene": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "exits": { "Lost Woods": "True" } }, { "region_name": "SFM Entryway", - "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "the Sacred Forest Meadow", + "hint": "SACRED_FOREST_MEADOW", "exits": { "LW Beyond Mido": "True", "Sacred Forest Meadow": " - is_adult or Slingshot or Sticks or - Kokiri_Sword or can_use(Dins_Fire)", + is_adult or Slingshot or Sticks or Kokiri_Sword or can_use(Dins_Fire)", "SFM Wolfos Grotto": "can_open_bomb_grotto" } }, { "region_name": "Sacred Forest Meadow", - "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "the Sacred Forest Meadow", + "hint": "SACRED_FOREST_MEADOW", "locations": { "Song from Saria": "is_child and Zeldas_Letter", "Sheik in Forest": "is_adult", @@ -310,9 +351,8 @@ }, { "region_name": "SFM Forest Temple Entrance Ledge", - "font_color": "Green", "scene": "Sacred Forest Meadow", - "hint": "the Sacred Forest Meadow", + "hint": "SACRED_FOREST_MEADOW", "exits": { "Sacred Forest Meadow": "True", "Forest Temple Lobby": "True" @@ -320,9 +360,8 @@ }, { "region_name": "LW Bridge From Forest", - "font_color": "Green", "scene": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "locations": { "LW Gift from Saria": "True" }, @@ -332,9 +371,8 @@ }, { "region_name": "LW Bridge", - "font_color": "Green", "scene": "Lost Woods", - "hint": "the Lost Woods", + "hint": "LOST_WOODS", "exits": { "Kokiri Forest": "True", "Hyrule Field": "True", @@ -343,14 +381,13 @@ }, { "region_name": "Hyrule Field", - "font_color": "Light Blue", "scene": "Hyrule Field", - "hint": "Hyrule Field", + "hint": "HYRULE_FIELD", "time_passes": true, "locations": { "HF Ocarina of Time Item": "is_child and has_all_stones", "Song from Ocarina of Time": "is_child and has_all_stones", - "Big Poe Kill": "can_use(Bow) and can_ride_epona and has_bottle" + "Big Poe Kill": "can_ride_epona and Bow and has_bottle" }, "exits": { "LW Bridge": "True", @@ -363,8 +400,8 @@ "HF Southeast Grotto": "here(can_blast_or_smash)", "HF Open Grotto": "True", "HF Inside Fence Grotto": "can_open_bomb_grotto", - "HF Cow Grotto": "(can_use(Megaton_Hammer) or is_child) and can_open_bomb_grotto", - # There is a hammerable boulder as adult which is not there as child + # There is a hammerable boulder as adult which is not there as child + "HF Cow Grotto": "(is_child or Megaton_Hammer) and can_open_bomb_grotto", "HF Near Market Grotto": "here(can_blast_or_smash)", "HF Fairy Grotto": "here(can_blast_or_smash)", "HF Near Kak Grotto": "can_open_bomb_grotto", @@ -373,32 +410,32 @@ }, { "region_name": "Lake Hylia", - "font_color": "Blue", "scene": "Lake Hylia", - "hint": "Lake Hylia", + "hint": "LAKE_HYLIA", "time_passes": true, "events": { "Bonooru": "is_child and Ocarina" }, "locations": { "Pierre": "is_adult and Bonooru and not free_scarecrow", - "LH Underwater Item": "is_child and can_dive", - "LH Sun": " - is_adult and - (can_use(Distant_Scarecrow) or 'Water Temple Clear') and can_use(Bow)", + "LH Sun": "(can_use(Distant_Scarecrow) or 'Water Temple Clear') and can_use(Bow)", "LH Freestanding PoH": " is_adult and (can_use(Scarecrow) or here(can_plant_bean))", + "LH Underwater Item": "is_child and can_dive", + "LH Underwater Near Shore Green Rupee": "is_child", + "LH Underwater Green Rupee 1": "is_child and can_dive", + "LH Underwater Green Rupee 2": "is_child and can_dive", "LH GS Bean Patch": "can_plant_bugs and can_child_attack", "LH GS Lab Wall": " - is_child and (Boomerang or - (logic_lab_wall_gs and (Sticks or Kokiri_Sword))) and at_night", + is_child and at_night and + (Boomerang or (logic_lab_wall_gs and (Sticks or Kokiri_Sword)))", "LH GS Small Island": "is_child and can_child_attack and at_night", "LH GS Tree": "can_use(Longshot) and at_night", "LH Lab Gossip Stone": "True", "LH Gossip Stone (Southeast)": "True", "LH Gossip Stone (Southwest)": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle", + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", "Bug Shrub": "is_child and can_cut_shrubs and has_bottle" }, @@ -411,17 +448,15 @@ is_child or can_use(Scarecrow) or here(can_plant_bean) or 'Water Temple Clear'", "Water Temple Lobby": " - can_use(Hookshot) and - (can_use(Iron_Boots) or - ((can_use(Longshot) or logic_water_hookshot_entry) and (Progressive_Scale, 2)))", + is_adult and Hookshot and + (Iron_Boots or ((Longshot or logic_water_hookshot_entry) and (Progressive_Scale, 2)))", "LH Grotto": "True" } }, { "region_name": "LH Fishing Island", - "font_color": "Blue", "scene": "Lake Hylia", - "hint": "Lake Hylia", + "hint": "LAKE_HYLIA", "exits": { "Lake Hylia": "True", "LH Fishing Hole": "True" @@ -430,25 +465,29 @@ { "region_name": "LH Owl Flight", "scene": "Lake Hylia", - "hint": "Lake Hylia", + "hint": "LAKE_HYLIA", "exits": { "Hyrule Field": "True" } }, { "region_name": "LH Lab", - "pretty_name": "the Lakeside Laboratory", "scene": "LH Lab", "events": { "Eyedrops Access": " - is_adult and + is_adult and ('Eyeball Frog Access' or (Eyeball_Frog and disable_trade_revert))" }, "locations": { "LH Lab Dive": " (Progressive_Scale, 2) or - (logic_lab_diving and Iron_Boots and can_use(Hookshot))", - "LH GS Lab Crate": "Iron_Boots and can_use(Hookshot)" + (logic_lab_diving and is_adult and Iron_Boots and Hookshot)", + "LH Lab Dive Red Rupee 1": "(Progressive_Scale, 2) or can_use(Iron_Boots)", + "LH Lab Dive Red Rupee 2": "(Progressive_Scale, 2) or can_use(Iron_Boots)", + "LH Lab Dive Red Rupee 3": "(Progressive_Scale, 2) or can_use(Iron_Boots)", + "LH GS Lab Crate": " + Iron_Boots and can_use(Hookshot) and + (deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_interior_entrances == 'off'))" }, "exits": { "Lake Hylia": "True" @@ -456,7 +495,6 @@ }, { "region_name": "LH Fishing Hole", - "pretty_name": "the Fishing Pond", "scene": "LH Fishing Hole", "locations": { "LH Child Fishing": "is_child", @@ -468,9 +506,8 @@ }, { "region_name": "Gerudo Valley", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "locations": { "GV GS Small Bridge": "can_use(Boomerang) and at_night", @@ -479,26 +516,26 @@ "exits": { "Hyrule Field": "True", "GV Upper Stream": "True", - "GV Crate Ledge": "is_child or can_use(Longshot)", + "GV Crate Ledge": "is_child or Longshot", "GV Grotto Ledge": "True", "GV Fortress Side": " is_adult and - (can_ride_epona or can_use(Longshot) or gerudo_fortress == 'open' or 'Carpenter Rescue')" + (can_ride_epona or Longshot or gerudo_fortress == 'open' or can_finish_GerudoFortress)" } }, { "region_name": "GV Upper Stream", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "locations": { "GV Waterfall Freestanding PoH": "True", "GV GS Bean Patch": "can_plant_bugs and can_child_attack", "GV Cow": "is_child and can_play(Eponas_Song)", + "GV Crate Near Cow": "is_child and can_break_crate", "GV Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle" + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle" }, "exits": { "GV Lower Stream": "True" @@ -506,9 +543,8 @@ }, { "region_name": "GV Lower Stream", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "exits": { "Lake Hylia": "True" @@ -516,9 +552,8 @@ }, { "region_name": "GV Grotto Ledge", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "exits": { "GV Lower Stream": "True", @@ -528,12 +563,12 @@ }, { "region_name": "GV Crate Ledge", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "locations": { - "GV Crate Freestanding PoH": "True" + "GV Crate Freestanding PoH": "can_break_crate", + "GV Freestanding PoH Crate": "can_break_crate" }, "exits": { "GV Lower Stream": "True" @@ -541,9 +576,8 @@ }, { "region_name": "GV Fortress Side", - "font_color": "Yellow", "scene": "Gerudo Valley", - "hint": "Gerudo Valley", + "hint": "GERUDO_VALLEY", "time_passes": true, "events": { "Broken Sword Access": "is_adult and ('Poachers Saw Access' or Poachers_Saw)" @@ -557,17 +591,18 @@ "Gerudo Fortress": "True", "GV Upper Stream": "True", "GV Crate Ledge": " - logic_valley_crate_hovers and can_use(Hover_Boots) and can_take_damage", + logic_valley_crate_hovers and can_use(Hover_Boots) and + (damage_multiplier != 'ohko' or can_use(Nayrus_Love) or + (Fairy and (deadly_bonks != 'ohko' or can_blast_or_smash)))", "Gerudo Valley": " - is_child or can_ride_epona or can_use(Longshot) or - gerudo_fortress == 'open' or 'Carpenter Rescue'", + is_child or can_ride_epona or Longshot or + gerudo_fortress == 'open' or can_finish_GerudoFortress", "GV Carpenter Tent": "is_adult", # Invisible as child so not in logic "GV Storms Grotto": "is_adult and can_open_storm_grotto" # Not there as child } }, { "region_name": "GV Carpenter Tent", - "pretty_name": "the Carpenter's Tent", "scene": "GV Carpenter Tent", "exits": { "GV Fortress Side": "True" @@ -575,57 +610,321 @@ }, { "region_name": "Gerudo Fortress", - "font_color": "Yellow", "scene": "Gerudo Fortress", - "hint": "Gerudo's Fortress", + "hint": "GERUDO_FORTRESS", "events": { - "Carpenter Rescue": "can_finish_GerudoFortress", "GF Gate Open": "is_adult and Gerudo_Membership_Card" }, "locations": { - "GF Chest": " - can_use(Hover_Boots) or can_use(Scarecrow) or can_use(Longshot)", "GF HBA 1000 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and at_day", "GF HBA 1500 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and at_day", - "Hideout Jail Guard (1 Torch)": "is_adult or Kokiri_Sword", - "Hideout Jail Guard (2 Torches)": "is_adult or Kokiri_Sword", - "Hideout Jail Guard (3 Torches)": " - (is_adult or Kokiri_Sword) and - (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) - or can_use(Hover_Boots) or logic_gerudo_kitchen)", - "Hideout Jail Guard (4 Torches)": "is_adult or Kokiri_Sword", - "Hideout Gerudo Membership Card": "can_finish_GerudoFortress", "GF GS Archery Range": " - can_use(Hookshot) and Gerudo_Membership_Card and at_night", - "GF GS Top Floor": " - is_adult and at_night and - (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or - can_use(Hover_Boots) or logic_gerudo_kitchen)" + can_use(Hookshot) and Gerudo_Membership_Card and at_night" }, "exits": { "GV Fortress Side": "True", + "Hideout 1 Torch Jail": "True", + "Hideout 2 Torches Jail": "True", + "Hideout 4 Torches Jail": "True", + "Hideout Kitchen Hallway": "True", + "GF Entrances Behind Crates": "True", + "GF Roof Entrance Cluster": "can_use(Hover_Boots) or logic_gf_jump", + "GF Kitchen Roof Access": "Gerudo_Membership_Card and can_use(Longshot)", + "GF Hall to Balcony Entrance": "can_use(Longshot)", # via jail ceiling "GF Outside Gate": "'GF Gate Open'", - "Gerudo Training Ground Lobby": "Gerudo_Membership_Card and is_adult", + "Gerudo Training Ground Lobby": "Gerudo_Membership_Card and is_adult" + } + }, + { + "region_name": "GF Entrances Behind Crates", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "exits": { + "Gerudo Fortress": "True", + "Hideout 1 Torch Jail": "True", + "Hideout Kitchen Hallway": "True", + "GF Roof Entrance Cluster": "can_use(Longshot)", "GF Storms Grotto": "is_adult and can_open_storm_grotto" # Not there as child } }, + { + "region_name": "GF Roof Entrance Cluster", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "exits": { + "Hideout 4 Torches Jail": "True", + "Hideout 2 Torches Jail": "True", + "Hideout Kitchen Front": "True", + "GF Entrances Behind Crates": "True", + "GF Kitchen Roof Access": "logic_gf_jump and is_adult" + } + }, + { + "region_name": "GF Kitchen Roof Access", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "exits": { + "Hideout Kitchen Rear": "True", + "GF 3 Torches Jail Exterior": "True", + "GF Chest Roof": "is_adult and (Hover_Boots or can_use(Scarecrow) or Longshot)", + "GF Roof Gold Skulltula": "True" + } + }, + { + "region_name": "GF 3 Torches Jail Exterior", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "exits": { + "Hideout 3 Torches Jail": "True", + "GF Roof Entrance Cluster": "True", + "GF Roof Gold Skulltula": "can_use(Longshot)" + } + }, + { + "region_name": "GF Chest Roof", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "locations": { + "GF Chest": "True" + }, + "exits": { + "GF Kitchen Roof Access": "True", + "GF Hall to Balcony Entrance": "True" + } + }, + { + "region_name": "GF Roof Gold Skulltula", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "locations": { + "GF GS Top Floor": "is_adult and at_night" + } + }, + { + "region_name": "GF Hall to Balcony Entrance", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "exits": { + "Gerudo Fortress": "True", + "Hideout Hall to Balcony Lower": "True" + } + }, + { + "region_name": "GF Balcony", + "scene": "Gerudo Fortress", + "hint": "GERUDO_FORTRESS", + "locations": { + "GF Above Jail Crate": "is_adult and can_break_crate" + }, + "exits": { + "Hideout Hall to Balcony Upper": "True", + "Gerudo Fortress": "True", + "GF Chest Roof": "can_use(Longshot)", + "GF Hall to Balcony Entrance": " + damage_multiplier != 'ohko' or can_use(Nayrus_Love) or can_use(Hookshot)" + } + }, { "region_name": "GF Outside Gate", - "font_color": "Yellow", "scene": "Gerudo Fortress", - "hint": "Gerudo's Fortress", + "hint": "GERUDO_FORTRESS", "exits": { "Gerudo Fortress": "is_adult or (shuffle_overworld_entrances and 'GF Gate Open')", "Wasteland Near Fortress": "True" } }, + { + "region_name": "Hideout 1 Torch Jail", + "scene": "Hideout 1 Torch Jail", + "hint": "GERUDO_FORTRESS", + "events": { + "Hideout 1 Torch Jail Gerudo": "is_adult or Kokiri_Sword", + "Hideout 1 Torch Jail Carpenter": " + 'Hideout 1 Torch Jail Gerudo' and + ((gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)) or + (gerudo_fortress == 'fast' and Small_Key_Thieves_Hideout))" + }, + "locations": { + "Hideout 1 Torch Jail Gerudo Key": "'Hideout 1 Torch Jail Gerudo'", + "Hideout Gerudo Membership Card": "can_finish_GerudoFortress", + "Hideout 1 Torch Jail Pot 1": "True", + "Hideout 1 Torch Jail Pot 2": "True", + "Hideout 1 Torch Jail Pot 3": "True", + "Hideout 1 Torch Jail Crate": "can_break_crate" + }, + "exits": { + "Gerudo Fortress": "True", + "GF Entrances Behind Crates": "True" + } + }, + { + "region_name": "Hideout 2 Torches Jail", + "scene": "Hideout 2 Torches Jail", + "hint": "GERUDO_FORTRESS", + "events": { + "Hideout 2 Torches Jail Gerudo": "is_adult or Kokiri_Sword", + "Hideout 2 Torches Jail Carpenter": " + 'Hideout 2 Torches Jail Gerudo' and + gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)" + }, + "locations": { + "Hideout 2 Torches Jail Gerudo Key": "'Hideout 2 Torches Jail Gerudo'", + "Hideout 2 Torch Jail Pot 1": "True", + "Hideout 2 Torch Jail Pot 2": "True", + "Hideout 2 Torch Jail Pot 3": "True", + "Hideout 2 Torch Jail In Cell Pot 1": "True", + "Hideout 2 Torch Jail In Cell Pot 2": "True", + "Hideout 2 Torch Jail In Cell Pot 3": "True", + "Hideout 2 Torch Jail In Cell Pot 4": "True", + "Hideout 2 Torch Jail Crate 1": "can_break_crate", + "Hideout 2 Torch Jail Crate 2": "can_break_crate" + }, + "exits": { + "Gerudo Fortress": "True", + "GF Roof Entrance Cluster": "True" + } + }, + { + "region_name": "Hideout 3 Torches Jail", + "scene": "Hideout 3 Torches Jail", + "hint": "GERUDO_FORTRESS", + "events": { + "Hideout 3 Torches Jail Gerudo": "is_adult or Kokiri_Sword", + "Hideout 3 Torches Jail Carpenter": " + 'Hideout 3 Torches Jail Gerudo' and + gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)" + }, + "locations": { + "Hideout 3 Torches Jail Gerudo Key": "'Hideout 3 Torches Jail Gerudo'", + "Hideout 3 Torch Jail Crate": "can_break_crate" + }, + "exits": { + "GF 3 Torches Jail Exterior": "True" + } + }, + { + "region_name": "Hideout 4 Torches Jail", + "scene": "Hideout 4 Torches Jail", + "hint": "GERUDO_FORTRESS", + "events": { + "Hideout 4 Torches Jail Gerudo": "is_adult or Kokiri_Sword", + "Hideout 4 Torches Jail Carpenter": " + 'Hideout 4 Torches Jail Gerudo' and + gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4)" + }, + "locations": { + "Hideout 4 Torches Jail Gerudo Key": "'Hideout 4 Torches Jail Gerudo'", + "Hideout 4 Torch Jail Pot 1": "True", + "Hideout 4 Torch Jail Pot 2": "True" + }, + "exits": { + "Gerudo Fortress": "True", + "GF Roof Entrance Cluster": "True" + } + }, + { + "region_name": "Hideout Kitchen Hallway", + "scene": "Hideout Kitchen", + "hint": "GERUDO_FORTRESS", + "locations": { + "Hideout Near Kitchen Crate 1": " + (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen) and + can_break_crate", + "Hideout Near Kitchen Crate 2": "can_break_crate", + "Hideout Near Kitchen Crate 3": "can_break_crate", + "Hideout Near Kitchen Crate 4": "can_break_crate", + "Hideout Near Kitchen Crate 5": "can_break_crate" + }, + "exits": { + "GF Entrances Behind Crates": "True", + "Gerudo Fortress": "True", + "Hideout Kitchen Front": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen", + "Hideout Kitchen Rear": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen", + "Hideout Kitchen Pots": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen" + } + }, + { + "region_name": "Hideout Kitchen Front", + "scene": "Hideout Kitchen", + "hint": "GERUDO_FORTRESS", + "exits": { + "GF Roof Entrance Cluster": "True", + "Hideout Kitchen Rear": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or + can_use(Hover_Boots) or logic_gerudo_kitchen", + "Hideout Kitchen Hallway": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen", + "Hideout Kitchen Pots": "can_use(Boomerang)" + } + }, + { + "region_name": "Hideout Kitchen Rear", + "scene": "Hideout Kitchen", + "hint": "GERUDO_FORTRESS", + "exits": { + "GF Kitchen Roof Access": "True", + "Hideout Kitchen Front": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or + can_use(Hover_Boots) or logic_gerudo_kitchen", + "Hideout Kitchen Hallway": " + Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or logic_gerudo_kitchen", + "Hideout Kitchen Pots": "can_use(Boomerang)" + } + }, + { + "region_name": "Hideout Kitchen Pots", + "scene": "Hideout Kitchen", + "hint": "GERUDO_FORTRESS", + "locations": { + "Hideout Kitchen Pot 1": "True", + "Hideout Kitchen Pot 2": "True" + } + }, + { + "region_name": "Hideout Hall to Balcony Lower", + "scene": "Hideout Hall to Balcony", + "hint": "GERUDO_FORTRESS", + "exits": { + "GF Hall to Balcony Entrance": "True", + "Hideout Hall to Balcony Upper": "can_use(Hookshot)" + }, + "locations": { + "Hideout Break Room Pot 1": "Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot)", + "Hideout Break Room Pot 2": "Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot)", + "Hideout Break Room Hallway Crate 1": "can_break_crate", + "Hideout Break Room Hallway Crate 2": "can_break_crate", + # Child Link is too short to seen over the table as you go for these crates. + "Hideout Break Room Crate 1": " + can_break_crate and + (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or + can_use(Sticks) or can_use(Kokiri_Sword))", + "Hideout Break Room Crate 2": " + can_break_crate and + (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or + can_use(Sticks) or can_use(Kokiri_Sword))" + } + }, + { + "region_name": "Hideout Hall to Balcony Upper", + "scene": "Hideout Hall to Balcony", + "hint": "GERUDO_FORTRESS", + "exits": { + "Hideout Hall to Balcony Lower": "can_use(Hookshot)", + "GF Balcony": "True" + } + }, { "region_name": "Wasteland Near Fortress", - "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "the Haunted Wasteland", + "hint": "HAUNTED_WASTELAND", + "locations": { + "Wasteland Crate Before Quicksand": "can_break_crate" + }, "exits": { "GF Outside Gate": "True", "Haunted Wasteland": " @@ -634,39 +933,52 @@ }, { "region_name": "Haunted Wasteland", - "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "the Haunted Wasteland", + "hint": "HAUNTED_WASTELAND", "locations": { "Wasteland Chest": "has_fire_source", - "Wasteland Bombchu Salesman": " - Progressive_Wallet and - (is_adult or Sticks or Kokiri_Sword)", + "Wasteland Bombchu Salesman": "Progressive_Wallet and can_jumpslash", + "Wasteland Near GS Pot 1": "True", + "Wasteland Near GS Pot 2": "True", + "Wasteland Near GS Pot 3": "True", + "Wasteland Crate After Quicksand 1": "can_break_crate", + "Wasteland Crate After Quicksand 2": "can_break_crate", + "Wasteland Crate After Quicksand 3": "can_break_crate", "Wasteland GS": "can_use(Hookshot) or can_use(Boomerang)", "Fairy Pot": "has_bottle", "Nut Pot": "True" }, "exits": { - "Wasteland Near Colossus": "logic_lens_wasteland or can_use(Lens_of_Truth)", + "Wasteland Near Crate": "logic_lens_wasteland or can_use(Lens_of_Truth)", "Wasteland Near Fortress": " logic_wasteland_crossing or can_use(Hover_Boots) or can_use(Longshot)" } }, + { + "region_name": "Wasteland Near Crate", + "scene": "Haunted Wasteland", + "hint": "HAUNTED_WASTELAND", + "locations": { + "Wasteland Crate Near Colossus": "can_break_crate" + }, + "exits": { + "Haunted Wasteland": "True", + "Wasteland Near Colossus": "True" + } + }, { "region_name": "Wasteland Near Colossus", - "font_color": "Yellow", "scene": "Haunted Wasteland", - "hint": "the Haunted Wasteland", + "hint": "HAUNTED_WASTELAND", "exits": { "Desert Colossus": "True", - "Haunted Wasteland": "logic_reverse_wasteland" + "Wasteland Near Crate": "logic_reverse_wasteland" } }, { "region_name": "Desert Colossus", - "font_color": "Yellow", "scene": "Desert Colossus", - "hint": "the Desert Colossus", + "hint": "DESERT_COLOSSUS", "time_passes": true, "locations": { "Colossus Freestanding PoH": "is_adult and here(can_plant_bean)", @@ -674,8 +986,7 @@ "Colossus GS Tree": "can_use(Hookshot) and at_night", "Colossus GS Hill": " is_adult and at_night and - (here(can_plant_bean) or can_use(Longshot) or - (logic_colossus_gs and can_use(Hookshot)))", + (here(can_plant_bean) or Longshot or (logic_colossus_gs and Hookshot))", "Colossus Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Fairy Pond": "can_play(Song_of_Storms) and has_bottle", @@ -690,9 +1001,8 @@ }, { "region_name": "Desert Colossus From Spirit Lobby", - "font_color": "Yellow", "scene": "Desert Colossus", - "hint": "the Desert Colossus", + "hint": "DESERT_COLOSSUS", "locations": { "Sheik at Colossus": "True" }, @@ -702,7 +1012,6 @@ }, { "region_name": "Colossus Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "Colossus Great Fairy Fountain", "locations": { "Colossus Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -713,10 +1022,8 @@ }, { "region_name": "Market Entrance", - "pretty_name": "the Market Entrance", - "font_color": "Light Blue", "scene": "Market Entrance", - "hint": "the Market", + "hint": "MARKET", "exits": { "Hyrule Field": "is_adult or at_day", "Market": "True", @@ -725,9 +1032,14 @@ }, { "region_name": "Market", - "font_color": "Light Blue", "scene": "Market", - "hint": "the Market", + "hint": "MARKET", + "locations": { + "Market Night Red Rupee Crate": "is_child and at_night and (deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_overworld_entrances == 'off'))", + "Market Night Green Rupee Crate 1": "is_child and at_night and (deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_overworld_entrances == 'off'))", + "Market Night Green Rupee Crate 2": "is_child and at_night and (deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_overworld_entrances == 'off'))", + "Market Night Green Rupee Crate 3": "is_child and at_night (deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_overworld_entrances == 'off'))" + }, "exits": { "Market Entrance": "True", "ToT Entrance": "True", @@ -743,9 +1055,8 @@ }, { "region_name": "Market Back Alley", - "font_color": "Light Blue", "scene": "Market", - "hint": "the Market", + "hint": "MARKET", "exits": { "Market": "True", "Market Bombchu Shop": "at_night", @@ -755,16 +1066,16 @@ }, { "region_name": "ToT Entrance", - "pretty_name": "the Temple of Time Entrance", - "font_color": "Light Blue", "scene": "ToT Entrance", - "hint": "the Market", + "hint": "MARKET", "locations": { "ToT Gossip Stone (Left)": "True", "ToT Gossip Stone (Left-Center)": "True", "ToT Gossip Stone (Right)": "True", "ToT Gossip Stone (Right-Center)": "True", - "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle" + "Gossip Stone Fairy": " + (can_summon_gossip_fairy_without_suns or (is_adult and can_play(Suns_Song))) and + has_bottle" }, "exits": { "Market": "True", @@ -773,11 +1084,12 @@ }, { "region_name": "Temple of Time", - "font_color": "Light Blue", "scene": "Temple of Time", - "hint": "the Temple of Time", + "hint": "TEMPLE_OF_TIME", "locations": { - "ToT Light Arrows Cutscene": "is_adult and can_trigger_lacs" + "ToT Light Arrows Cutscene": "is_adult and can_trigger_lacs", + "ToT Child Altar Hint": "is_child", + "ToT Adult Altar Hint": "is_adult" }, "exits": { "ToT Entrance": "True", @@ -786,12 +1098,11 @@ }, { "region_name": "Beyond Door of Time", - "font_color": "Light Blue", "scene": "Temple of Time", - "hint": "the Temple of Time", + "hint": "TEMPLE_OF_TIME", "locations": { - "Master Sword Pedestal": "True", - "Sheik at Temple": "Forest_Medallion and is_adult" + "Sheik at Temple": "Forest_Medallion and is_adult", + "Master Sword Pedestal": "True" }, "exits": { "Temple of Time": "True" @@ -799,9 +1110,8 @@ }, { "region_name": "Castle Grounds", - "pretty_name": "the Castle Grounds", - "font_color": "Light Blue", "scene": "Castle Grounds", + "hint": "CASTLE_GROUNDS", "exits": { "Market": "is_child or at_dampe_time", "Hyrule Castle Grounds": "is_child", @@ -810,14 +1120,12 @@ }, { "region_name": "Hyrule Castle Grounds", - "pretty_name": "the Castle Grounds", - "font_color": "Light Blue", "scene": "Castle Grounds", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "time_passes": true, "locations": { "HC Malon Egg": "True", - "HC GS Tree": "can_child_attack", + "HC GS Tree": "can_child_attack and can_bonk", "HC Malon Gossip Stone": "True", "HC Rock Wall Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", @@ -826,17 +1134,15 @@ }, "exits": { "Castle Grounds": "True", - "HC Garden": "Weird_Egg or skip_child_zelda or (not shuffle_weird_egg)", + "HC Garden": "Weird_Egg", "HC Great Fairy Fountain": "has_explosives", "HC Storms Grotto": "can_open_storm_grotto" } }, { "region_name": "HC Garden", - "pretty_name": "the Castle Grounds", - "font_color": "Light Blue", "scene": "Castle Grounds", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "exits": { "HC Garden Locations": "True", "Hyrule Castle Grounds": "True" @@ -845,10 +1151,8 @@ { # Directly reachable from Root in "Free Zelda" "region_name": "HC Garden Locations", - "pretty_name": "the Castle Grounds", - "font_color": "Light Blue", "scene": "Castle Grounds", - "hint": "Hyrule Castle", + "hint": "HYRULE_CASTLE", "locations": { "HC Zeldas Letter": "True", "Song from Impa": "True" @@ -856,7 +1160,6 @@ }, { "region_name": "HC Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "HC Great Fairy Fountain", "locations": { "HC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -865,12 +1168,20 @@ "Castle Grounds": "True" } }, + { + "region_name": "Castle Grounds From Ganons Castle", + "scene": "Castle Grounds", + "hint": "OUTSIDE_GANONS_CASTLE", + "exits": { + # The rainbow bridge cutscene trigger doesn't extend to the castle entrance + "Ganons Castle Grounds": "is_adult and bridge == 'open'" + # No exit back into the castle because the entrance places Link in midair if the bridge isn't spawned + } + }, { "region_name": "Ganons Castle Grounds", - "pretty_name": "the Castle Grounds", - "font_color": "Light Blue", "scene": "Castle Grounds", - "hint": "outside Ganon's Castle", + "hint": "OUTSIDE_GANONS_CASTLE", "locations": { "OGC GS": "True" }, @@ -882,7 +1193,6 @@ }, { "region_name": "OGC Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "OGC Great Fairy Fountain", "locations": { "OGC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -893,16 +1203,66 @@ }, { "region_name": "Market Guard House", - "pretty_name": "the Gaurd House", "scene": "Market Guard House", "events": { "Sell Big Poe": "is_adult and Bottle_with_Big_Poe" }, "locations": { "Market 10 Big Poes": " - is_adult and - (Big_Poe or (Bottle_with_Big_Poe, big_poe_count))", - "Market GS Guard House": "is_child" + is_adult and (Big_Poe or (Bottle_with_Big_Poe, big_poe_count))", + "Market Guard House Child Crate": "is_child and can_break_crate", + "Market Guard House Child Pot 1": "is_child", + "Market Guard House Child Pot 2": "is_child", + "Market Guard House Child Pot 3": "is_child", + "Market Guard House Child Pot 4": "is_child", + "Market Guard House Child Pot 5": "is_child", + "Market Guard House Child Pot 6": "is_child", + "Market Guard House Child Pot 7": "is_child", + "Market Guard House Child Pot 8": "is_child", + "Market Guard House Child Pot 9": "is_child", + "Market Guard House Child Pot 10": "is_child", + "Market Guard House Child Pot 11": "is_child", + "Market Guard House Child Pot 12": "is_child", + "Market Guard House Child Pot 13": "is_child", + "Market Guard House Child Pot 14": "is_child", + "Market Guard House Child Pot 15": "is_child", + "Market Guard House Child Pot 16": "is_child", + "Market Guard House Child Pot 17": "is_child", + "Market Guard House Child Pot 18": "is_child", + "Market Guard House Child Pot 19": "is_child", + "Market Guard House Child Pot 20": "is_child", + "Market Guard House Child Pot 21": "is_child", + "Market Guard House Child Pot 22": "is_child", + "Market Guard House Child Pot 23": "is_child", + "Market Guard House Child Pot 24": "is_child", + "Market Guard House Child Pot 25": "is_child", + "Market Guard House Child Pot 26": "is_child", + "Market Guard House Child Pot 27": "is_child", + "Market Guard House Child Pot 28": "is_child", + "Market Guard House Child Pot 29": "is_child", + "Market Guard House Child Pot 30": "is_child", + "Market Guard House Child Pot 31": "is_child", + "Market Guard House Child Pot 32": "is_child", + "Market Guard House Child Pot 33": "is_child", + "Market Guard House Child Pot 34": "is_child", + "Market Guard House Child Pot 35": "is_child", + "Market Guard House Child Pot 36": "is_child", + "Market Guard House Child Pot 37": "is_child", + "Market Guard House Child Pot 38": "is_child", + "Market Guard House Child Pot 39": "is_child", + "Market Guard House Child Pot 40": "is_child", + "Market Guard House Child Pot 41": "is_child", + "Market Guard House Child Pot 42": "is_child", + "Market Guard House Child Pot 43": "is_child", + "Market Guard House Child Pot 44": "is_child", + "Market Guard House Adult Pot 1": "is_adult", + "Market Guard House Adult Pot 2": "is_adult", + "Market Guard House Adult Pot 3": "is_adult", + "Market Guard House Adult Pot 4": "is_adult", + "Market Guard House Adult Pot 5": "is_adult", + "Market Guard House Adult Pot 6": "is_adult", + "Market Guard House Adult Pot 7": "is_adult", + "Market GS Guard House": "is_child and can_break_crate" }, "exits": { "Market Entrance": "True" @@ -910,7 +1270,6 @@ }, { "region_name": "Market Bazaar", - "pretty_name": "a Bazaar", "scene": "Market Bazaar", "locations": { "Market Bazaar Item 1": "True", @@ -928,15 +1287,14 @@ }, { "region_name": "Market Mask Shop", - "pretty_name": "the Mask Shop", "scene": "Market Mask Shop", "events": { "Skull Mask": "Zeldas_Letter and (complete_mask_quest or at('Kakariko Village', is_child))", "Mask of Truth": "'Skull Mask' and (complete_mask_quest or (at('Lost Woods', is_child and can_play(Sarias_Song)) and - at('Graveyard', is_child and at_day) and - at('Hyrule Field', is_child and has_all_stones)))" + at('Graveyard', is_child and at_day) and + at('Hyrule Field', is_child and has_all_stones)))" }, "exits": { "Market": "True" @@ -944,7 +1302,6 @@ }, { "region_name": "Market Shooting Gallery", - "pretty_name": "a Shooting Gallery", "scene": "Market Shooting Gallery", "locations": { "Market Shooting Gallery Reward": "is_child" @@ -955,7 +1312,6 @@ }, { "region_name": "Market Bombchu Bowling", - "pretty_name": "the Bombchu Bowling Alley", "scene": "Market Bombchu Bowling", "locations": { "Market Bombchu Bowling First Prize": "found_bombchus", @@ -968,7 +1324,6 @@ }, { "region_name": "Market Potion Shop", - "pretty_name": "a Potion Shop", "scene": "Market Potion Shop", "locations": { "Market Potion Shop Item 1": "True", @@ -986,7 +1341,6 @@ }, { "region_name": "Market Treasure Chest Game", - "pretty_name": "the Treasure Chest Game", "scene": "Market Treasure Chest Game", "locations": { "Market Treasure Chest Game Reward": "can_use(Lens_of_Truth)" @@ -997,7 +1351,6 @@ }, { "region_name": "Market Bombchu Shop", - "pretty_name": "the Bombchu Shop", "scene": "Market Bombchu Shop", "locations": { "Market Bombchu Shop Item 1": "True", @@ -1015,10 +1368,10 @@ }, { "region_name": "Market Dog Lady House", - "pretty_name": "the Dog Lady House", "scene": "Market Dog Lady House", "locations": { - "Market Lost Dog": "is_child and at_night" + "Market Lost Dog": "is_child and at_night", + "Market Dog Lady House Crate": "(deadly_bonks != 'ohko' or Fairy or (can_use(Nayrus_Love) and shuffle_overworld_entrances == 'off'))" }, "exits": { "Market Back Alley": "True" @@ -1026,17 +1379,20 @@ }, { "region_name": "Market Man in Green House", - "pretty_name": "the Man in Green House", "scene": "Market Man in Green House", + "locations": { + "Market Man in Green House Pot 1": "True", + "Market Man in Green House Pot 2": "True", + "Market Man in Green House Pot 3": "True" + }, "exits": { "Market Back Alley": "True" } }, { "region_name": "Kakariko Village", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "events": { "Cojiro Access": "is_adult and 'Wake Up Adult Talon'", "Kakariko Village Gate Open": "is_child and (Zeldas_Letter or open_kakariko == 'open')" @@ -1045,15 +1401,24 @@ "Sheik in Kakariko": " is_adult and Forest_Medallion and Fire_Medallion and Water_Medallion", "Kak Anju as Adult": "is_adult and at_day", - "Kak Anju as Child": "is_child and at_day", + "Kak Anju as Child": "is_child and at_day and (can_break_crate or chicken_count < 7)", + "Kak Near Guards House Pot 1": "is_child", + "Kak Near Guards House Pot 2": "is_child", + "Kak Near Guards House Pot 3": "is_child", + "Kak Near Potion Shop Pot 1": "is_child", + "Kak Near Potion Shop Pot 2": "is_child", + "Kak Near Potion Shop Pot 3": "is_child", + "Kak Near Impas House Pot 1": "is_child", + "Kak Near Impas House Pot 2": "is_child", + "Kak Near Impas House Pot 3": "is_child", + "Kak Adult Arrows Crate": "is_adult and can_break_crate", "Kak GS House Under Construction": "is_child and at_night", "Kak GS Skulltula House": "is_child and at_night", - "Kak GS Guards House": "is_child and at_night", - "Kak GS Tree": "is_child and at_night", + "Kak GS Near Gate Guard": "is_child and at_night", + "Kak GS Tree": "is_child and at_night and can_bonk", "Kak GS Watchtower": " - is_child and (Slingshot or has_bombchus or - (logic_kakariko_tower_gs and (Sticks or Kokiri_Sword) and - can_take_damage)) and at_night", + is_child and at_night and + (Slingshot or has_bombchus or (logic_kakariko_tower_gs and (Sticks or Kokiri_Sword)))", "Bug Rock": "has_bottle" }, "exits": { @@ -1064,19 +1429,17 @@ "Kak Windmill": "True", "Kak Bazaar": "is_adult and at_day", "Kak Shooting Gallery": "is_adult and at_day", - "Bottom of the Well": " - 'Drain Well' and (is_child or shuffle_dungeon_entrances)", + "Bottom of the Well": "'Drain Well' and (is_child or shuffle_dungeon_entrances)", "Kak Potion Shop Front": "is_child or at_day", "Kak Redead Grotto": "can_open_bomb_grotto", - "Kak Impas Ledge": " - (is_child and at_day) or (is_adult and logic_visible_collisions)", + "Kak Impas Ledge": "(is_child and at_day) or (is_adult and logic_visible_collisions)", "Kak Impas Rooftop": " can_use(Hookshot) or (logic_kakariko_rooftop_gs and can_use(Hover_Boots))", "Kak Odd Medicine Rooftop": " - can_use(Hookshot) or - (logic_man_on_roof and - (is_adult or at_day or Slingshot or has_bombchus or - (logic_kakariko_tower_gs and (Sticks or Kokiri_Sword) and can_take_damage)))", + can_use(Hookshot) or + (logic_man_on_roof and + (is_adult or at_day or Slingshot or has_bombchus or + (logic_kakariko_tower_gs and (Sticks or Kokiri_Sword))))", "Kak Backyard": "is_adult or at_day", "Graveyard": "True", "Kak Behind Gate": "is_adult or 'Kakariko Village Gate Open'" @@ -1084,9 +1447,8 @@ }, { "region_name": "Kak Impas Ledge", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "exits": { "Kak Impas House Back": "True", "Kakariko Village": "True" @@ -1094,9 +1456,8 @@ }, { "region_name": "Kak Impas Rooftop", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "locations": { "Kak GS Above Impas House": "is_adult and at_night" }, @@ -1107,9 +1468,8 @@ }, { "region_name": "Kak Odd Medicine Rooftop", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "locations": { "Kak Man on Roof": "True" }, @@ -1120,9 +1480,13 @@ }, { "region_name": "Kak Backyard", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", + "locations": { + "Kak Near Odd Medicine Building Pot 1": "is_child", + "Kak Near Odd Medicine Building Pot 2": "is_child", + "Kak Adult Red Rupee Crate": "is_adult and can_break_crate" + }, "exits": { "Kakariko Village": "True", "Kak Open Grotto": "True", @@ -1132,7 +1496,6 @@ }, { "region_name": "Kak Carpenter Boss House", - "pretty_name": "the Carpenter's House", "scene": "Kak Carpenter Boss House", "events": { "Wake Up Adult Talon": "is_adult and (Pocket_Egg or Pocket_Cucco)" @@ -1143,14 +1506,18 @@ }, { "region_name": "Kak House of Skulltula", - "pretty_name": "the House of Skulltula", "scene": "Kak House of Skulltula", "locations": { "Kak 10 Gold Skulltula Reward": "(Gold_Skulltula_Token, 10)", "Kak 20 Gold Skulltula Reward": "(Gold_Skulltula_Token, 20)", "Kak 30 Gold Skulltula Reward": "(Gold_Skulltula_Token, 30)", "Kak 40 Gold Skulltula Reward": "(Gold_Skulltula_Token, 40)", - "Kak 50 Gold Skulltula Reward": "(Gold_Skulltula_Token, 50)" + "Kak 50 Gold Skulltula Reward": "(Gold_Skulltula_Token, 50)", + "10 Skulltulas Reward Hint": "True", + "20 Skulltulas Reward Hint": "True", + "30 Skulltulas Reward Hint": "True", + "40 Skulltulas Reward Hint": "True", + "50 Skulltulas Reward Hint": "True" }, "exits": { "Kakariko Village": "True" @@ -1158,7 +1525,6 @@ }, { "region_name": "Kak Impas House", - "pretty_name": "Impa's House", "scene": "Kak Impas House", "exits": { "Kakariko Village": "True", @@ -1167,7 +1533,6 @@ }, { "region_name": "Kak Impas House Back", - "pretty_name": "Impa's House", "scene": "Kak Impas House", "locations": { "Kak Impas House Freestanding PoH": "True" @@ -1179,7 +1544,6 @@ }, { "region_name": "Kak Impas House Near Cow", - "pretty_name": "Impa's House", "scene": "Kak Impas House", "locations": { "Kak Impas House Cow": "can_play(Eponas_Song)" @@ -1187,7 +1551,6 @@ }, { "region_name": "Kak Windmill", - "pretty_name": "the Windmill", "scene": "Windmill and Dampes Grave", "events": { "Drain Well": "is_child and can_play(Song_of_Storms)" @@ -1204,7 +1567,6 @@ }, { "region_name": "Kak Bazaar", - "pretty_name": "a Bazaar", "scene": "Kak Bazaar", "locations": { "Kak Bazaar Item 1": "True", @@ -1222,7 +1584,6 @@ }, { "region_name": "Kak Shooting Gallery", - "pretty_name": "a Shooting Gallery", "scene": "Kak Shooting Gallery", "locations": { "Kak Shooting Gallery Reward": "is_adult and Bow" @@ -1233,7 +1594,6 @@ }, { "region_name": "Kak Potion Shop Front", - "pretty_name": "a Potion Shop", "scene": "Kak Potion Shop", "locations": { "Kak Potion Shop Item 1": "is_adult", @@ -1252,7 +1612,6 @@ }, { "region_name": "Kak Potion Shop Back", - "pretty_name": "a Potion Shop", "scene": "Kak Potion Shop", "exits": { "Kak Backyard": "is_adult", @@ -1261,7 +1620,6 @@ }, { "region_name": "Kak Odd Medicine Building", - "pretty_name": "the Oddity Shop", "scene": "Kak Odd Medicine Building", "events": { "Odd Potion Access": " @@ -1274,18 +1632,17 @@ }, { "region_name": "Graveyard", - "font_color": "Pink", "scene": "Graveyard", - "hint": "the Graveyard", + "hint": "GRAVEYARD", "locations": { "Graveyard Freestanding PoH": " - (is_adult and (here(can_plant_bean) or can_use(Longshot))) or + (is_adult and can_break_crate and (here(can_plant_bean) or Longshot)) or (logic_graveyard_poh and can_use(Boomerang))", "Graveyard Dampe Gravedigging Tour": "is_child and at_dampe_time", "Graveyard GS Wall": "can_use(Boomerang) and at_night", "Graveyard GS Bean Patch": "can_plant_bugs and can_child_attack", "Butterfly Fairy": "can_use(Sticks) and at_day and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle", + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle", "Bug Rock": "has_bottle" }, "exits": { @@ -1299,7 +1656,6 @@ }, { "region_name": "Graveyard Shield Grave", - "pretty_name": "the Shield Grave", "scene": "Graveyard Shield Grave", "locations": { "Graveyard Shield Grave Chest": "True", @@ -1311,7 +1667,6 @@ }, { "region_name": "Graveyard Heart Piece Grave", - "pretty_name": "the Heart Piece Grave", "scene": "Graveyard Heart Piece Grave", "locations": { "Graveyard Heart Piece Grave Chest": "can_play(Suns_Song)" @@ -1322,14 +1677,11 @@ }, { "region_name": "Graveyard Royal Familys Tomb", - "pretty_name": "the Royal Family's Tomb", "scene": "Graveyard Royal Familys Tomb", "locations": { "Graveyard Royal Familys Tomb Chest": "has_fire_source", "Song from Royal Familys Tomb": " - is_adult or - (Slingshot or Boomerang or Sticks or - has_explosives or Kokiri_Sword)" + is_adult or Slingshot or Boomerang or Sticks or has_explosives or Kokiri_Sword" }, "exits": { "Graveyard": "True" @@ -1337,14 +1689,27 @@ }, { "region_name": "Graveyard Dampes Grave", - "pretty_name": "Damp\u00e9's Grave", "scene": "Windmill and Dampes Grave", "events": { "Dampes Windmill Access": "is_adult and can_play(Song_of_Time)" }, "locations": { - "Graveyard Hookshot Chest": "True", + "Graveyard Dampe Race Hookshot Chest": "True", "Graveyard Dampe Race Freestanding PoH": "is_adult or logic_child_dampe_race_poh", + "Graveyard Dampe Race Rupee 1": "True", + "Graveyard Dampe Race Rupee 2": "True", + "Graveyard Dampe Race Rupee 3": "True", + "Graveyard Dampe Race Rupee 4": "True", + "Graveyard Dampe Race Rupee 5": "True", + "Graveyard Dampe Race Rupee 6": "True", + "Graveyard Dampe Race Rupee 7": "True", + "Graveyard Dampe Race Rupee 8": "True", + "Graveyard Dampe Pot 1": "True", + "Graveyard Dampe Pot 2": "True", + "Graveyard Dampe Pot 3": "True", + "Graveyard Dampe Pot 4": "True", + "Graveyard Dampe Pot 5": "True", + "Graveyard Dampe Pot 6": "True", "Nut Pot": "True" }, "exits": { @@ -1354,17 +1719,18 @@ }, { "region_name": "Graveyard Dampes House", - "pretty_name": "Damp\u00e9's House", "scene": "Graveyard Dampes House", + "locations": { + "Dampe Diary Hint": "is_adult" + }, "exits": { "Graveyard": "True" } }, { "region_name": "Graveyard Warp Pad Region", - "font_color": "Pink", "scene": "Graveyard", - "hint": "the Graveyard", + "hint": "GRAVEYARD", "locations": { "Graveyard Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle" @@ -1372,15 +1738,13 @@ "exits": { "Graveyard": "True", "Shadow Temple Entryway": " - can_use(Dins_Fire) or - (logic_shadow_fire_arrow_entry and can_use(Fire_Arrows))" + can_use(Dins_Fire) or (logic_shadow_fire_arrow_entry and can_use(Fire_Arrows))" } }, { "region_name": "Kak Behind Gate", - "font_color": "Pink", "scene": "Kakariko Village", - "hint": "Kakariko Village", + "hint": "KAKARIKO_VILLAGE", "exits": { "Kakariko Village": " is_adult or logic_visible_collisions or 'Kakariko Village Gate Open' or open_kakariko == 'open'", @@ -1389,9 +1753,8 @@ }, { "region_name": "Death Mountain", - "font_color": "Red", "scene": "Death Mountain", - "hint": "Death Mountain Trail", + "hint": "DEATH_MOUNTAIN_TRAIL", "time_passes": true, "locations": { "DMT Chest": " @@ -1399,20 +1762,22 @@ (logic_dmt_bombable and is_child and Progressive_Strength_Upgrade)", "DMT Freestanding PoH": " can_take_damage or can_use(Hover_Boots) or - (is_adult and here(can_plant_bean and (has_explosives or Progressive_Strength_Upgrade)))", + (is_adult and here(can_plant_bean and (plant_beans or has_explosives or Progressive_Strength_Upgrade)))", + "DMT Rock Red Rupee": "is_child and here(can_blast_or_smash)", + "DMT Rock Blue Rupee": "is_child and has_explosives", "DMT GS Bean Patch": " can_plant_bugs and can_child_attack and - (has_explosives or Progressive_Strength_Upgrade or - (logic_dmt_soil_gs and can_use(Boomerang)))", + (has_explosives or Progressive_Strength_Upgrade or (logic_dmt_soil_gs and can_use(Boomerang)))", "DMT GS Near Kak": "can_blast_or_smash", "DMT GS Above Dodongos Cavern": " is_adult and at_night and - (can_use(Megaton_Hammer) or - (logic_trail_gs_lower_hookshot and can_use(Hookshot)) or - (logic_trail_gs_lower_hovers and can_use(Hover_Boots)) or - (logic_trail_gs_lower_bean and here(can_plant_bean and (has_explosives or Progressive_Strength_Upgrade))))", + (Megaton_Hammer or + (logic_trail_gs_lower_hookshot and Hookshot) or + (logic_trail_gs_lower_hovers and Hover_Boots) or + (logic_trail_gs_lower_bean and + here(can_plant_bean and (plant_beans or has_explosives or Progressive_Strength_Upgrade))))", "Bean Plant Fairy": " - can_plant_bean and can_play(Song_of_Storms) and has_bottle and + is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle and (has_explosives or Progressive_Strength_Upgrade)" }, "exits": { @@ -1420,8 +1785,8 @@ "Goron City": "True", "Death Mountain Summit": " here(can_blast_or_smash) or - (is_adult and here(can_plant_bean and Progressive_Strength_Upgrade)) or - (logic_dmt_climb_hovers and can_use(Hover_Boots))", + (is_adult and here(can_plant_bean and (plant_beans or Progressive_Strength_Upgrade))) or + (logic_dmt_climb_hovers and can_use(Hover_Boots))", "Dodongos Cavern Beginning": " has_explosives or Progressive_Strength_Upgrade or is_adult", "DMT Storms Grotto": "can_open_storm_grotto" @@ -1429,21 +1794,20 @@ }, { "region_name": "Death Mountain Summit", - "font_color": "Red", "scene": "Death Mountain", - "hint": "Death Mountain Trail", + "hint": "DEATH_MOUNTAIN_TRAIL", "time_passes": true, "events": { "Prescription Access": "is_adult and ('Broken Sword Access' or Broken_Sword)" }, "locations": { "DMT Biggoron": " - is_adult and - (Claim_Check or - (guarantee_trade_path and + is_adult and + (Claim_Check or + (guarantee_trade_path and ('Eyedrops Access' or (Eyedrops and disable_trade_revert))))", "DMT GS Falling Rocks Path": " - is_adult and (can_use(Megaton_Hammer) or logic_trail_gs_upper) and at_night", + is_adult and (Megaton_Hammer or logic_trail_gs_upper) and at_night", "DMT Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Bug Rock": "is_child and has_bottle" @@ -1459,22 +1823,22 @@ { "region_name": "DMT Owl Flight", "scene": "Death Mountain", + "hint": "DEATH_MOUNTAIN_TRAIL", "exits": { "Kak Impas Rooftop": "True" } }, { "region_name": "Goron City", - "font_color": "Red", "scene": "Goron City", - "hint": "Goron City", + "hint": "GORON_CITY", "events": { "Goron City Child Fire": "is_child and can_use(Dins_Fire)", "GC Woods Warp Open": " - can_blast_or_smash or can_use(Dins_Fire) or can_use(Bow) or + can_blast_or_smash or can_use(Dins_Fire) or can_use(Bow) or Progressive_Strength_Upgrade or 'Goron City Child Fire'", "Stop GC Rolling Goron as Adult": " - is_adult and + is_adult and (Progressive_Strength_Upgrade or has_explosives or Bow or (logic_link_goron_dins and can_use(Dins_Fire)))" }, @@ -1482,26 +1846,26 @@ "GC Maze Left Chest": " can_use(Megaton_Hammer) or can_use(Silver_Gauntlets) or (logic_goron_city_leftmost and has_explosives and can_use(Hover_Boots))", - "GC Maze Center Chest": " - can_blast_or_smash or can_use(Silver_Gauntlets)", - "GC Maze Right Chest": " - can_blast_or_smash or can_use(Silver_Gauntlets)", - "GC Pot Freestanding PoH": " - is_child and 'Goron City Child Fire' and - (Bombs or (Progressive_Strength_Upgrade and logic_goron_city_pot_with_strength) or (has_bombchus and logic_goron_city_pot))", + "GC Maze Center Chest": "can_blast_or_smash or can_use(Silver_Gauntlets)", + "GC Maze Right Chest": "can_blast_or_smash or can_use(Silver_Gauntlets)", "GC Rolling Goron as Child": " - is_child and + is_child and (has_explosives or (Progressive_Strength_Upgrade and logic_child_rolling_with_strength))", "GC Medigoron": " - is_adult and Progressive_Wallet and + is_adult and Progressive_Wallet and (can_blast_or_smash or Progressive_Strength_Upgrade)", "GC Rolling Goron as Adult": "'Stop GC Rolling Goron as Adult'", + "GC Lower Staircase Pot 1": "True", + "GC Lower Staircase Pot 2": "True", + "GC Upper Staircase Pot 1": "True", + "GC Upper Staircase Pot 2": "True", + "GC Upper Staircase Pot 3": "True", + "GC Medigoron Pot": "can_blast_or_smash or Progressive_Strength_Upgrade", + "GC Boulder Maze Crate": "(can_blast_or_smash or can_use(Silver_Gauntlets)) and can_break_crate", "GC GS Boulder Maze": "is_child and has_explosives", "GC GS Center Platform": "is_adult", - "GC Maze Gossip Stone": " - can_blast_or_smash or can_use(Silver_Gauntlets)", - "GC Medigoron Gossip Stone": " - can_blast_or_smash or Progressive_Strength_Upgrade", + "GC Maze Gossip Stone": "can_blast_or_smash or can_use(Silver_Gauntlets)", + "GC Medigoron Gossip Stone": "can_blast_or_smash or Progressive_Strength_Upgrade", "Gossip Stone Fairy": " can_summon_gossip_fairy_without_suns and has_bottle and (can_blast_or_smash or Progressive_Strength_Upgrade)", @@ -1512,27 +1876,30 @@ "Death Mountain": "True", "GC Woods Warp": "'GC Woods Warp Open'", "GC Shop": " - (is_adult and 'Stop GC Rolling Goron as Adult') or + (is_adult and 'Stop GC Rolling Goron as Adult') or (is_child and (has_explosives or Progressive_Strength_Upgrade or 'Goron City Child Fire'))", "GC Darunias Chamber": " (is_adult and 'Stop GC Rolling Goron as Adult') or (is_child and can_play(Zeldas_Lullaby))", "GC Grotto Platform": " - is_adult and - ((can_play(Song_of_Time) and - ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or - can_use(Goron_Tunic) or can_use(Longshot) or can_use(Nayrus_Love))) or - (can_use(Hookshot) and - ((damage_multiplier != 'ohko' and can_use(Goron_Tunic)) or + is_adult and + ((can_play(Song_of_Time) and + ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or + Goron_Tunic or Longshot or can_use(Nayrus_Love))) or + (Hookshot and + ((damage_multiplier != 'ohko' and Goron_Tunic) or can_use(Nayrus_Love) or - (damage_multiplier != 'ohko' and damage_multiplier != 'quadruple' and logic_goron_grotto))))" + (damage_multiplier != 'ohko' and damage_multiplier != 'quadruple' and logic_goron_grotto))))", + "GC Spinning Pot": " + is_child and 'Goron City Child Fire' and + (Bombs or (Progressive_Strength_Upgrade and logic_goron_city_pot_with_strength) or + (has_bombchus and logic_goron_city_pot))" } }, { "region_name": "GC Woods Warp", - "font_color": "Red", "scene": "Goron City", - "hint": "Goron City", + "hint": "GORON_CITY", "events": { "GC Woods Warp Open": "can_blast_or_smash or can_use(Dins_Fire)" }, @@ -1543,14 +1910,16 @@ }, { "region_name": "GC Darunias Chamber", - "font_color": "Red", "scene": "Goron City", - "hint": "Goron City", + "hint": "GORON_CITY", "events": { "Goron City Child Fire": "can_use(Sticks)" }, "locations": { - "GC Darunias Joy": "is_child and can_play(Sarias_Song)" + "GC Darunias Joy": "is_child and can_play(Sarias_Song)", + "GC Darunia Pot 1": "True", + "GC Darunia Pot 2": "True", + "GC Darunia Pot 3": "True" }, "exits": { "Goron City": "True", @@ -1559,20 +1928,32 @@ }, { "region_name": "GC Grotto Platform", - "font_color": "Red", "scene": "Goron City", - "hint": "Goron City", + "hint": "GORON_CITY", "exits": { "GC Grotto": "True", "Goron City": " - (damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or - can_use(Goron_Tunic) or can_use(Nayrus_Love) or - (can_play(Song_of_Time) and can_use(Longshot))" + (damage_multiplier != 'ohko' and (damage_multiplier != 'quadruple' or can_use(Goron_Tunic))) or + can_use(Nayrus_Love) or (can_play(Song_of_Time) and can_use(Longshot))" + } + }, + { + "region_name": "GC Spinning Pot", + "scene": "Goron City", + "locations": { + "GC Pot Freestanding PoH": "True", + "GC Spinning Pot Bomb Drop 1": "True", + "GC Spinning Pot Bomb Drop 2": "True", + "GC Spinning Pot Bomb Drop 3": "True", + "GC Spinning Pot Rupee Drop 1": "True", + "GC Spinning Pot Rupee Drop 2": "True", + "GC Spinning Pot Rupee Drop 3": "True", + "GC Spinning Pot PoH Drop Rupee 1": "True", + "GC Spinning Pot PoH Drop Rupee 2": "True" } }, { "region_name": "GC Shop", - "pretty_name": "the Goron Shop", "scene": "GC Shop", "locations": { "GC Shop Item 1": "True", @@ -1590,9 +1971,8 @@ }, { "region_name": "DMC Upper Nearby", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "exits": { "DMC Upper Local": "can_use(Goron_Tunic)", "Death Mountain Summit": "True", @@ -1601,12 +1981,11 @@ }, { "region_name": "DMC Upper Local", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC Wall Freestanding PoH": "True", - "DMC GS Crate": "is_child and can_child_attack", + "DMC GS Crate": "is_child and can_child_attack and can_break_heated_crate", "DMC Gossip Stone": "has_explosives", "Gossip Stone Fairy": " has_explosives and can_summon_gossip_fairy_without_suns and has_bottle" @@ -1614,32 +1993,55 @@ "exits": { "DMC Upper Nearby": "True", "DMC Ladder Area Nearby": "True", + "DMC Pierre Platform": " + (damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or + (Fairy and (can_use(Goron_Tunic) or damage_multiplier != 'ohko')) or can_use(Nayrus_Love)", "DMC Central Nearby": " - can_use(Goron_Tunic) and can_use(Longshot) and - ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or - (Fairy and not entrance_shuffle) or can_use(Nayrus_Love))" + can_use(Goron_Tunic) and can_use(Longshot) and + ((damage_multiplier != 'ohko' and damage_multiplier != 'quadruple') or can_use(Nayrus_Love))" } }, { - "region_name": "DMC Ladder Area Nearby", + "region_name": "DMC Pierre Platform", "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", + "locations": { + "DMC Adult Green Rupee 1": "is_adult", + "DMC Adult Green Rupee 2": "is_adult", + "DMC Adult Green Rupee 3": "is_adult", + "DMC Adult Green Rupee 4": "is_adult", + "DMC Adult Green Rupee 5": "is_adult", + "DMC Adult Green Rupee 6": "is_adult", + "DMC Adult Red Rupee": "is_adult" + } + }, + { + "region_name": "DMC Ladder Area Nearby", + "scene": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC Deku Scrub": "is_child and can_stun_deku" }, "exits": { "DMC Upper Nearby": "is_adult", "DMC Lower Nearby": " - can_use(Hover_Boots) or - (logic_crater_upper_to_lower and can_use(Megaton_Hammer))" + is_adult and + (Hover_Boots or at('DMC Lower Nearby', can_use(Megaton_Hammer)) or + ((logic_crater_boulder_jumpslash or logic_crater_boulder_skip) and Megaton_Hammer) or + (logic_crater_boulder_skip and Goron_Tunic))" } }, { "region_name": "DMC Lower Nearby", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", + "locations": { + "DMC Near GC Pot 1": "is_adult", + "DMC Near GC Pot 2": "is_adult", + "DMC Near GC Pot 3": "is_adult", + "DMC Near GC Pot 4": "is_adult" + }, "exits": { "DMC Lower Local": "can_use(Goron_Tunic)", "GC Darunias Chamber": "True", @@ -1649,28 +2051,28 @@ }, { "region_name": "DMC Lower Local", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "exits": { "DMC Lower Nearby": "True", "DMC Ladder Area Nearby": "True", - "DMC Central Nearby": "can_use(Hover_Boots) or can_use(Hookshot)", + "DMC Central Nearby": " + is_adult and + (Hover_Boots or Hookshot or + (logic_crater_bolero_jump and Goron_Tunic and can_shield))", "DMC Fire Temple Entrance": " - (can_use(Hover_Boots) or can_use(Hookshot)) and - (logic_fewer_tunic_requirements or can_use(Goron_Tunic))" + is_adult and (Hover_Boots or Hookshot) and + (logic_fewer_tunic_requirements or Goron_Tunic)" } }, { "region_name": "DMC Central Nearby", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC Volcano Freestanding PoH": " is_adult and - (here(can_plant_bean) or - (logic_crater_bean_poh_with_hovers and Hover_Boots))", + (here(can_plant_bean) or (logic_crater_bean_poh_with_hovers and Hover_Boots))", "Sheik in Crater": "is_adult" }, "exits": { @@ -1679,29 +2081,35 @@ }, { "region_name": "DMC Central Local", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "locations": { "DMC GS Bean Patch": "can_plant_bugs and can_child_attack", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle" + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle", + "DMC Child Red Rupee 1": "is_child", + "DMC Child Red Rupee 2": "is_child", + "DMC Child Blue Rupee 1": "is_child", + "DMC Child Blue Rupee 2": "is_child", + "DMC Child Blue Rupee 3": "is_child", + "DMC Child Blue Rupee 4": "is_child", + "DMC Child Blue Rupee 5": "is_child", + "DMC Child Blue Rupee 6": "is_child" }, "exits": { "DMC Central Nearby": "True", "DMC Lower Nearby": " - is_adult and - (can_use(Hover_Boots) or can_use(Hookshot) or here(can_plant_bean))", + is_adult and (Hover_Boots or Hookshot or here(can_plant_bean))", "DMC Upper Nearby": "is_adult and here(can_plant_bean)", "DMC Fire Temple Entrance": " (is_child and shuffle_dungeon_entrances) or - (is_adult and (logic_fewer_tunic_requirements or can_use(Goron_Tunic)))" + (is_adult and (logic_fewer_tunic_requirements or Goron_Tunic))", + "DMC Pierre Platform": "can_use(Distant_Scarecrow)" } }, { "region_name": "DMC Fire Temple Entrance", - "font_color": "Red", "scene": "Death Mountain Crater", - "hint": "Death Mountain Crater", + "hint": "DEATH_MOUNTAIN_CRATER", "exits": { "Fire Temple Lower": "True", "DMC Central Nearby": "can_use(Goron_Tunic)" @@ -1709,7 +2117,6 @@ }, { "region_name": "DMC Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "DMC Great Fairy Fountain", "locations": { "DMC Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1720,7 +2127,6 @@ }, { "region_name": "DMT Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "DMT Great Fairy Fountain", "locations": { "DMT Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1731,12 +2137,11 @@ }, { "region_name": "ZR Front", - "font_color": "Blue", "scene": "Zora River", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "time_passes": true, "locations": { - "ZR GS Tree": "is_child and can_child_attack" + "ZR GS Tree": "is_child and can_child_attack and can_bonk" }, "exits": { "Zora River": "is_adult or has_explosives", @@ -1745,38 +2150,44 @@ }, { "region_name": "Zora River", - "font_color": "Blue", "scene": "Zora River", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "time_passes": true, "locations": { "ZR Magic Bean Salesman": "is_child", "ZR Frogs Ocarina Game": " - is_child and can_play(Zeldas_Lullaby) and can_play(Sarias_Song) and - can_play(Suns_Song) and can_play(Eponas_Song) and - can_play(Song_of_Time) and can_play(Song_of_Storms)", + is_child and Ocarina and Zeldas_Lullaby and Eponas_Song and + Sarias_Song and Suns_Song and Song_of_Time and Song_of_Storms", + "ZR Frogs Zeldas Lullaby": "is_child and can_play(Zeldas_Lullaby)", + "ZR Frogs Eponas Song": "is_child and can_play(Eponas_Song)", + "ZR Frogs Sarias Song": "is_child and can_play(Sarias_Song)", + "ZR Frogs Suns Song": "is_child and can_play(Suns_Song)", + "ZR Frogs Song of Time": "is_child and can_play(Song_of_Time)", "ZR Frogs in the Rain": "is_child and can_play(Song_of_Storms)", "ZR Near Open Grotto Freestanding PoH": " - is_child or can_use(Hover_Boots) or (is_adult and logic_zora_river_lower)", - "ZR Near Domain Freestanding PoH": " - is_child or can_use(Hover_Boots) or (is_adult and logic_zora_river_upper)", + is_child or here(can_plant_bean) or Hover_Boots or logic_zora_river_lower", + "ZR Near Domain Freestanding PoH": "is_child or Hover_Boots or logic_zora_river_upper", + "ZR Waterfall Red Rupee 1": "is_adult and (Iron_Boots or logic_zora_river_rupees)", + "ZR Waterfall Red Rupee 2": "is_adult and (Iron_Boots or logic_zora_river_rupees)", + "ZR Waterfall Red Rupee 3": "is_adult and (Iron_Boots or logic_zora_river_rupees)", + "ZR Waterfall Red Rupee 4": "is_adult and (Iron_Boots or logic_zora_river_rupees)", "ZR GS Ladder": "is_child and at_night and can_child_attack", "ZR GS Near Raised Grottos": "can_use(Hookshot) and at_night", "ZR GS Above Bridge": "can_use(Hookshot) and at_night", "ZR Near Grottos Gossip Stone": "True", "ZR Near Domain Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", - "Bean Plant Fairy": "can_plant_bean and can_play(Song_of_Storms) and has_bottle", + "Bean Plant Fairy": "is_child and can_plant_bean and can_play(Song_of_Storms) and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", "Bug Shrub": " - (is_child or can_use(Hover_Boots) or (is_adult and logic_zora_river_lower)) and + (is_child or here(can_plant_bean) or Hover_Boots or logic_zora_river_lower) and can_cut_shrubs and has_bottle" }, "exits": { "ZR Front": "True", "ZR Open Grotto": "True", "ZR Fairy Grotto": "here(can_blast_or_smash)", - "Lost Woods": "can_dive or can_use(Iron_Boots)", + "LW Underwater Entrance": "can_dive or can_use(Iron_Boots)", "ZR Storms Grotto": "can_open_storm_grotto", "ZR Behind Waterfall": " can_play(Zeldas_Lullaby) or @@ -1786,9 +2197,8 @@ }, { "region_name": "ZR Behind Waterfall", - "font_color": "Blue", "scene": "Zora River", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "exits": { "Zora River": "True", "Zoras Domain": "True" @@ -1796,22 +2206,20 @@ }, { "region_name": "ZR Top of Waterfall", - "font_color": "Blue", "scene": "Zora River", - "hint": "Zora's River", + "hint": "ZORA_RIVER", "exits": { "Zora River": "True" } }, { "region_name": "Zoras Domain", - "font_color": "Blue", "scene": "Zoras Domain", - "hint": "Zora's Domain", + "hint": "ZORAS_DOMAIN", "events": { "King Zora Thawed": "is_adult and Blue_Fire", "Eyeball Frog Access": " - is_adult and 'King Zora Thawed' and + is_adult and 'King Zora Thawed' and (Eyedrops or Eyeball_Frog or Prescription or 'Prescription Access')" }, "locations": { @@ -1820,9 +2228,16 @@ "Deliver Rutos Letter": " is_child and Rutos_Letter and zora_fountain != 'open'", "ZD King Zora Thawed": "'King Zora Thawed'", + "ZD Pot 1": "True", + "ZD Pot 2": "True", + "ZD Pot 3": "True", + "ZD Pot 4": "True", + "ZD Pot 5": "True", + "ZD In Front of King Zora Beehive 1": "is_child and can_break_upper_beehive", + "ZD In Front of King Zora Beehive 2": "is_child and can_break_upper_beehive", "ZD GS Frozen Waterfall": " is_adult and at_night and - (Progressive_Hookshot or Bow or Magic_Meter or logic_domain_gs)", + (Hookshot or Bow or Magic_Meter or logic_domain_gs)", "ZD Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle", "Fish Group": "is_child and has_bottle", @@ -1834,47 +2249,45 @@ "Lake Hylia": "is_child and can_dive", "ZD Behind King Zora": " Deliver_Letter or zora_fountain == 'open' or - (zora_fountain == 'adult' and is_adult) or - (logic_king_zora_skip and is_adult)", + (is_adult and (zora_fountain == 'adult' or logic_king_zora_skip))", "ZD Shop": "is_child or Blue_Fire", "ZD Storms Grotto": "can_open_storm_grotto" } }, { "region_name": "ZD Behind King Zora", - "font_color": "Blue", "scene": "Zoras Domain", - "hint": "Zora's Domain", + "hint": "ZORAS_DOMAIN", + "locations": { + "ZD Behind King Zora Beehive": "is_child and can_break_upper_beehive" + }, "exits": { "Zoras Domain": " Deliver_Letter or zora_fountain == 'open' or - (zora_fountain == 'adult' and is_adult)", + (is_adult and zora_fountain == 'adult')", "Zoras Fountain": "True" } }, { "region_name": "ZD Eyeball Frog Timeout", - "font_color": "Blue", "scene": "Zoras Domain", - "hint": "Zora's Domain", + "hint": "ZORAS_DOMAIN", "exits": { "Zoras Domain": "True" } }, { "region_name": "Zoras Fountain", - "font_color": "Blue", "scene": "Zoras Fountain", - "hint": "Zora's Fountain", + "hint": "ZORAS_FOUNTAIN", "locations": { "ZF Iceberg Freestanding PoH": "is_adult", - "ZF Bottom Freestanding PoH": " - is_adult and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic))", - "ZF GS Tree": "is_child", + "ZF Near Jabu Pot 1": "is_child", + "ZF Near Jabu Pot 2": "is_child", + "ZF Near Jabu Pot 3": "is_child", + "ZF Near Jabu Pot 4": "is_child", + "ZF GS Tree": "is_child and can_bonk", "ZF GS Above the Log": "can_use(Boomerang) and at_night", - "ZF GS Hidden Cave": " - can_use(Silver_Gauntlets) and can_blast_or_smash and - can_use(Hookshot) and at_night", "ZF Fairy Gossip Stone": "True", "ZF Jabu Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy_without_suns and has_bottle", @@ -1884,14 +2297,52 @@ "ZD Behind King Zora": "True", "Jabu Jabus Belly Beginning": "is_child and Fish", "ZF Ice Ledge": "is_adult", - "ZF Great Fairy Fountain": "has_explosives" + "ZF Great Fairy Fountain": "has_explosives", + "ZF Underwater": "is_adult and Iron_Boots and (logic_fewer_tunic_requirements or Zora_Tunic)", + "ZF Hidden Cave": "can_use(Silver_Gauntlets) and can_blast_or_smash" + } + }, + { + "region_name": "ZF Underwater", + "scene": "Zoras Fountain", + "hint": "ZORAS_FOUNTAIN", + "locations": { + "ZF Bottom Freestanding PoH": "True", + "ZF Bottom Green Rupee 1": "True", + "ZF Bottom Green Rupee 2": "True", + "ZF Bottom Green Rupee 3": "True", + "ZF Bottom Green Rupee 4": "True", + "ZF Bottom Green Rupee 5": "True", + "ZF Bottom Green Rupee 6": "True", + "ZF Bottom Green Rupee 7": "True", + "ZF Bottom Green Rupee 8": "True", + "ZF Bottom Green Rupee 9": "True", + "ZF Bottom Green Rupee 10": "True", + "ZF Bottom Green Rupee 11": "True", + "ZF Bottom Green Rupee 12": "True", + "ZF Bottom Green Rupee 13": "True", + "ZF Bottom Green Rupee 14": "True", + "ZF Bottom Green Rupee 15": "True", + "ZF Bottom Green Rupee 16": "True", + "ZF Bottom Green Rupee 17": "True", + "ZF Bottom Green Rupee 18": "True" + } + }, + { + "region_name": "ZF Hidden Cave", + "scene": "Zoras Fountain", + "hint": "ZORAS_FOUNTAIN", + "locations": { + "ZF Hidden Cave Pot 1": "True", + "ZF Hidden Cave Pot 2": "True", + "ZF Hidden Cave Pot 3": "True", + "ZF GS Hidden Cave": "Hookshot and at_night" } }, { "region_name": "ZF Ice Ledge", - "font_color": "Blue", "scene": "Zoras Fountain", - "hint": "Zora's Fountain", + "hint": "ZORAS_FOUNTAIN", "exits": { "Zoras Fountain": "True", "Ice Cavern Beginning": "True" @@ -1899,7 +2350,6 @@ }, { "region_name": "ZD Shop", - "pretty_name": "the Zora Shop", "scene": "ZD Shop", "locations": { "ZD Shop Item 1": "True", @@ -1917,7 +2367,6 @@ }, { "region_name": "ZF Great Fairy Fountain", - "pretty_name": "a Great Fairy Fountain", "scene": "ZF Great Fairy Fountain", "locations": { "ZF Great Fairy Reward": "can_play(Zeldas_Lullaby)" @@ -1928,16 +2377,23 @@ }, { "region_name": "Lon Lon Ranch", - "font_color": "Light Blue", "scene": "Lon Lon Ranch", - "hint": "Lon Lon Ranch", + "hint": "LON_LON_RANCH", "events": { "Epona": "can_play(Eponas_Song) and is_adult and at_day", "Links Cow": "can_play(Eponas_Song) and is_adult and at_day" }, "locations": { "Song from Malon": "is_child and Zeldas_Letter and Ocarina and at_day", - "LLR GS Tree": "is_child", + "LLR Front Pot 1": "is_child", + "LLR Front Pot 2": "is_child", + "LLR Front Pot 3": "is_child", + "LLR Front Pot 4": "is_child", + "LLR Rain Shed Pot 1": "is_child", + "LLR Rain Shed Pot 2": "is_child", + "LLR Rain Shed Pot 3": "is_child", + "LLR Child Crate": "is_child and can_break_crate", + "LLR GS Tree": "is_child and can_bonk", "LLR GS Rain Shed": "is_child and at_night", "LLR GS House Window": "can_use(Boomerang) and at_night", "LLR GS Back Wall": "can_use(Boomerang) and at_night" @@ -1952,10 +2408,12 @@ }, { "region_name": "LLR Talons House", - "pretty_name": "Talon's House", "scene": "LLR Talons House", "locations": { - "LLR Talons Chickens": "is_child and at_day and Zeldas_Letter" + "LLR Talons Chickens": "is_child and at_day and Zeldas_Letter", + "LLR Talons House Pot 1": "True", + "LLR Talons House Pot 2": "True", + "LLR Talons House Pot 3": "True" }, "exits": { "Lon Lon Ranch": "True" @@ -1963,7 +2421,6 @@ }, { "region_name": "LLR Stables", - "pretty_name": "Lon Lon Stable", "scene": "LLR Stables", "locations": { "LLR Stables Left Cow": "can_play(Eponas_Song)", @@ -1975,7 +2432,6 @@ }, { "region_name": "LLR Tower", - "pretty_name": "Lon Lon Tower", "scene": "LLR Tower", "locations": { "LLR Freestanding PoH": "is_child", @@ -1986,30 +2442,18 @@ "Lon Lon Ranch": "True" } }, - { - "region_name": "Ganons Castle Tower", - "pretty_name": "Ganon's Castle", - "dungeon": "Ganons Castle", - "locations": { - "Ganons Tower Boss Key Chest": "True", - "Ganondorf Hint": "Boss_Key_Ganons_Castle", - "Ganon": "Boss_Key_Ganons_Castle and can_use(Light_Arrows)" - } - }, { "region_name": "GF Storms Grotto", - "pretty_name": "a Fairy Fountain", "scene": "GF Storms Grotto", "locations": { "Free Fairies": "has_bottle" }, "exits": { - "Gerudo Fortress": "True" + "GF Entrances Behind Crates": "True" } }, { "region_name": "ZD Storms Grotto", - "pretty_name": "a Fairy Fountain", "scene": "ZD Storms Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2020,10 +2464,11 @@ }, { "region_name": "KF Storms Grotto", - "pretty_name": "a Generic Grotto", "scene": "KF Storms Grotto", "locations": { "KF Storms Grotto Chest": "True", + "KF Storms Grotto Beehive 1": "can_break_lower_beehive", + "KF Storms Grotto Beehive 2": "can_break_lower_beehive", "KF Storms Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2036,10 +2481,11 @@ }, { "region_name": "LW Near Shortcuts Grotto", - "pretty_name": "a Generic Grotto", "scene": "LW Near Shortcuts Grotto", "locations": { "LW Near Shortcuts Grotto Chest": "True", + "LW Near Shortcuts Grotto Beehive 1": "can_break_lower_beehive", + "LW Near Shortcuts Grotto Beehive 2": "can_break_lower_beehive", "LW Near Shortcuts Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2052,7 +2498,6 @@ }, { "region_name": "Deku Theater", - "pretty_name": "the Deku Theater", "scene": "Deku Theater", "locations": { "Deku Theater Skull Mask": "is_child and 'Skull Mask'", @@ -2064,11 +2509,11 @@ }, { "region_name": "LW Scrubs Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "LW Scrubs Grotto", "locations": { "LW Deku Scrub Grotto Rear": "can_stun_deku", - "LW Deku Scrub Grotto Front": "can_stun_deku" + "LW Deku Scrub Grotto Front": "can_stun_deku", + "LW Scrubs Grotto Beehive": "can_break_upper_beehive" }, "exits": { "LW Beyond Mido": "True" @@ -2076,7 +2521,6 @@ }, { "region_name": "SFM Fairy Grotto", - "pretty_name": "a Fairy Fountain", "scene": "SFM Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2087,11 +2531,11 @@ }, { "region_name": "SFM Storms Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "SFM Storms Grotto", "locations": { "SFM Deku Scrub Grotto Rear": "can_stun_deku", - "SFM Deku Scrub Grotto Front": "can_stun_deku" + "SFM Deku Scrub Grotto Front": "can_stun_deku", + "SFM Storms Grotto Beehive": "can_break_upper_beehive" }, "exits": { "Sacred Forest Meadow": "True" @@ -2099,12 +2543,10 @@ }, { "region_name": "SFM Wolfos Grotto", - "pretty_name": "the Wolfos Grotto", "scene": "SFM Wolfos Grotto", "locations": { "SFM Wolfos Grotto Chest": " - is_adult or Slingshot or Sticks or - Kokiri_Sword or can_use(Dins_Fire)" + is_adult or Slingshot or Sticks or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { "SFM Entryway": "True" @@ -2112,12 +2554,12 @@ }, { "region_name": "LLR Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "LLR Grotto", "locations": { "LLR Deku Scrub Grotto Left": "can_stun_deku", "LLR Deku Scrub Grotto Right": "can_stun_deku", - "LLR Deku Scrub Grotto Center": "can_stun_deku" + "LLR Deku Scrub Grotto Center": "can_stun_deku", + "LLR Grotto Beehive": "can_break_upper_beehive" }, "exits": { "Lon Lon Ranch": "True" @@ -2125,10 +2567,11 @@ }, { "region_name": "HF Southeast Grotto", - "pretty_name": "a Generic Grotto", "scene": "HF Southeast Grotto", "locations": { "HF Southeast Grotto Chest": "True", + "HF Southeast Grotto Beehive 1": "can_break_lower_beehive", + "HF Southeast Grotto Beehive 2": "can_break_lower_beehive", "HF Southeast Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2141,10 +2584,11 @@ }, { "region_name": "HF Open Grotto", - "pretty_name": "a Generic Grotto", "scene": "HF Open Grotto", "locations": { "HF Open Grotto Chest": "True", + "HF Open Grotto Beehive 1": "can_break_lower_beehive", + "HF Open Grotto Beehive 2": "can_break_lower_beehive", "HF Open Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2157,10 +2601,10 @@ }, { "region_name": "HF Inside Fence Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "HF Inside Fence Grotto", "locations": { - "HF Deku Scrub Grotto": "can_stun_deku" + "HF Deku Scrub Grotto": "can_stun_deku", + "HF Inside Fence Grotto Beehive": "can_break_lower_beehive" }, "exits": { "Hyrule Field": "True" @@ -2168,12 +2612,12 @@ }, { "region_name": "HF Cow Grotto", - "pretty_name": "the Spider Cow Grotto", "scene": "HF Cow Grotto", "locations": { - "HF GS Cow Grotto": " - has_fire_source and (can_use(Hookshot) or can_use(Boomerang))", + "HF GS Cow Grotto": "has_fire_source and (can_use(Hookshot) or can_use(Boomerang))", "HF Cow Grotto Cow": "has_fire_source and can_play(Eponas_Song)", + "HF Cow Grotto Pot 1": "has_fire_source", + "HF Cow Grotto Pot 2": "has_fire_source", "HF Cow Grotto Gossip Stone": "has_fire_source", "Gossip Stone Fairy": "has_fire_source and can_summon_gossip_fairy and has_bottle", "Bug Shrub": "has_fire_source and can_cut_shrubs and has_bottle", @@ -2185,10 +2629,11 @@ }, { "region_name": "HF Near Market Grotto", - "pretty_name": "a Generic Grotto", "scene": "HF Near Market Grotto", "locations": { "HF Near Market Grotto Chest": "True", + "HF Near Market Grotto Beehive 1": "can_break_lower_beehive", + "HF Near Market Grotto Beehive 2": "can_break_lower_beehive", "HF Near Market Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2201,7 +2646,6 @@ }, { "region_name": "HF Fairy Grotto", - "pretty_name": "a Fairy Fountain", "scene": "HF Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2212,7 +2656,6 @@ }, { "region_name": "HF Near Kak Grotto", - "pretty_name": "a Skulltula Grotto", "scene": "HF Near Kak Grotto", "locations": { "HF GS Near Kak Grotto": "can_use(Boomerang) or can_use(Hookshot)" @@ -2223,11 +2666,9 @@ }, { "region_name": "HF Tektite Grotto", - "pretty_name": "the Tektite Grotto", "scene": "HF Tektite Grotto", "locations": { - "HF Tektite Grotto Freestanding PoH": " - (Progressive_Scale, 2) or can_use(Iron_Boots)" + "HF Tektite Grotto Freestanding PoH": "(Progressive_Scale, 2) or can_use(Iron_Boots)" }, "exits": { "Hyrule Field": "True" @@ -2235,12 +2676,15 @@ }, { "region_name": "HC Storms Grotto", - "pretty_name": "a Skulltula Grotto", "scene": "HC Storms Grotto", "locations": { "HC GS Storms Grotto": " (can_blast_or_smash or (is_child and logic_castle_storms_gs)) and (can_use(Boomerang) or can_use(Hookshot))", + "HC Storms Grotto Pot 1": "can_blast_or_smash", + "HC Storms Grotto Pot 2": "can_blast_or_smash", + "HC Storms Grotto Pot 3": "can_blast_or_smash", + "HC Storms Grotto Pot 4": "can_blast_or_smash", "HC Storms Grotto Gossip Stone": "can_blast_or_smash", "Gossip Stone Fairy": "can_blast_or_smash and can_summon_gossip_fairy and has_bottle", "Wandering Bugs": "can_blast_or_smash and has_bottle", @@ -2252,12 +2696,9 @@ }, { "region_name": "Kak Redead Grotto", - "pretty_name": "the ReDead Grotto", "scene": "Kak Redead Grotto", "locations": { - "Kak Redead Grotto Chest": " - is_adult or - (Sticks or Kokiri_Sword or can_use(Dins_Fire))" + "Kak Redead Grotto Chest": "is_adult or Sticks or Kokiri_Sword or can_use(Dins_Fire)" }, "exits": { "Kakariko Village": "True" @@ -2265,11 +2706,12 @@ }, { "region_name": "Kak Open Grotto", - "pretty_name": "a Generic Grotto", "scene": "Kak Open Grotto", "locations": { "Kak Open Grotto Chest": "True", "Kak Open Grotto Gossip Stone": "True", + "Kak Open Grotto Beehive 1": "can_break_lower_beehive", + "Kak Open Grotto Beehive 2": "can_break_lower_beehive", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", "Bug Shrub": "can_cut_shrubs and has_bottle", @@ -2281,10 +2723,21 @@ }, { "region_name": "DMT Cow Grotto", - "pretty_name": "the Cow Grotto", "scene": "DMT Cow Grotto", "locations": { - "DMT Cow Grotto Cow": "can_play(Eponas_Song)" + "DMT Cow Grotto Cow": "can_play(Eponas_Song)", + "DMT Cow Grotto Green Rupee 1": "True", + "DMT Cow Grotto Green Rupee 2": "True", + "DMT Cow Grotto Green Rupee 3": "True", + "DMT Cow Grotto Green Rupee 4": "True", + "DMT Cow Grotto Green Rupee 5": "True", + "DMT Cow Grotto Green Rupee 6": "True", + "DMT Cow Grotto Red Rupee": "True", + "DMT Cow Grotto Recovery Heart 1": "True", + "DMT Cow Grotto Recovery Heart 2": "True", + "DMT Cow Grotto Recovery Heart 3": "True", + "DMT Cow Grotto Recovery Heart 4": "True", + "DMT Cow Grotto Beehive": "can_break_lower_beehive" }, "exits": { "Death Mountain Summit": "True" @@ -2292,10 +2745,11 @@ }, { "region_name": "DMT Storms Grotto", - "pretty_name": "a Generic Grotto", "scene": "DMT Storms Grotto", "locations": { "DMT Storms Grotto Chest": "True", + "DMT Storms Grotto Beehive 1": "can_break_lower_beehive", + "DMT Storms Grotto Beehive 2": "can_break_lower_beehive", "DMT Storms Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2308,12 +2762,12 @@ }, { "region_name": "GC Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "GC Grotto", "locations": { "GC Deku Scrub Grotto Left": "can_stun_deku", "GC Deku Scrub Grotto Right": "can_stun_deku", - "GC Deku Scrub Grotto Center": "can_stun_deku" + "GC Deku Scrub Grotto Center": "can_stun_deku", + "GC Grotto Beehive": "can_break_upper_beehive" }, "exits": { "GC Grotto Platform": "True" @@ -2321,10 +2775,11 @@ }, { "region_name": "DMC Upper Grotto", - "pretty_name": "a Generic Grotto", "scene": "DMC Upper Grotto", "locations": { "DMC Upper Grotto Chest": "True", + "DMC Upper Grotto Beehive 1": "can_break_lower_beehive", + "DMC Upper Grotto Beehive 2": "can_break_lower_beehive", "DMC Upper Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2337,12 +2792,12 @@ }, { "region_name": "DMC Hammer Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "DMC Hammer Grotto", "locations": { "DMC Deku Scrub Grotto Left": "can_stun_deku", "DMC Deku Scrub Grotto Right": "can_stun_deku", - "DMC Deku Scrub Grotto Center": "can_stun_deku" + "DMC Deku Scrub Grotto Center": "can_stun_deku", + "DMC Hammer Grotto Beehive": "can_break_upper_beehive" }, "exits": { "DMC Lower Local": "True" @@ -2350,10 +2805,11 @@ }, { "region_name": "ZR Open Grotto", - "pretty_name": "a Generic Grotto", "scene": "ZR Open Grotto", "locations": { "ZR Open Grotto Chest": "True", + "ZR Open Grotto Beehive 1": "can_break_lower_beehive", + "ZR Open Grotto Beehive 2": "can_break_lower_beehive", "ZR Open Grotto Gossip Stone": "True", "Gossip Stone Fairy": "can_summon_gossip_fairy and has_bottle", "Butterfly Fairy": "can_use(Sticks) and has_bottle", @@ -2366,7 +2822,6 @@ }, { "region_name": "ZR Fairy Grotto", - "pretty_name": "a Fairy Fountain", "scene": "ZR Fairy Grotto", "locations": { "Free Fairies": "has_bottle" @@ -2377,11 +2832,11 @@ }, { "region_name": "ZR Storms Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "ZR Storms Grotto", "locations": { "ZR Deku Scrub Grotto Rear": "can_stun_deku", - "ZR Deku Scrub Grotto Front": "can_stun_deku" + "ZR Deku Scrub Grotto Front": "can_stun_deku", + "ZR Storms Grotto Beehive": "can_break_upper_beehive" }, "exits": { "Zora River": "True" @@ -2389,12 +2844,12 @@ }, { "region_name": "LH Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "LH Grotto", "locations": { "LH Deku Scrub Grotto Left": "can_stun_deku", "LH Deku Scrub Grotto Right": "can_stun_deku", - "LH Deku Scrub Grotto Center": "can_stun_deku" + "LH Deku Scrub Grotto Center": "can_stun_deku", + "LH Grotto Beehive": "can_break_upper_beehive" }, "exits": { "Lake Hylia": "True" @@ -2402,11 +2857,11 @@ }, { "region_name": "Colossus Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "Colossus Grotto", "locations": { "Colossus Deku Scrub Grotto Rear": "can_stun_deku", - "Colossus Deku Scrub Grotto Front": "can_stun_deku" + "Colossus Deku Scrub Grotto Front": "can_stun_deku", + "Colossus Grotto Beehive": "can_break_upper_beehive" }, "exits": { "Desert Colossus": "True" @@ -2414,19 +2869,28 @@ }, { "region_name": "GV Octorok Grotto", - "pretty_name": "the Octorok Grotto", "scene": "GV Octorok Grotto", + "locations": { + "GV Octorok Grotto Red Rupee": "True", + "GV Octorok Grotto Blue Rupee 1": "True", + "GV Octorok Grotto Blue Rupee 2": "True", + "GV Octorok Grotto Blue Rupee 3": "True", + "GV Octorok Grotto Green Rupee 1": "True", + "GV Octorok Grotto Green Rupee 2": "True", + "GV Octorok Grotto Green Rupee 3": "True", + "GV Octorok Grotto Green Rupee 4": "True" + }, "exits": { "GV Grotto Ledge": "True" } }, { "region_name": "GV Storms Grotto", - "pretty_name": "a Deku Scrub Grotto", "scene": "GV Storms Grotto", "locations": { "GV Deku Scrub Grotto Rear": "can_stun_deku", - "GV Deku Scrub Grotto Front": "can_stun_deku" + "GV Deku Scrub Grotto Front": "can_stun_deku", + "GV Storms Grotto Beehive": "can_break_upper_beehive" }, "exits": { "GV Fortress Side": "True" diff --git a/worlds/oot/data/World/Shadow Temple MQ.json b/worlds/oot/data/World/Shadow Temple MQ.json index 6a69c407fde6..52f7b9c7b876 100644 --- a/worlds/oot/data/World/Shadow Temple MQ.json +++ b/worlds/oot/data/World/Shadow Temple MQ.json @@ -12,11 +12,16 @@ { "region_name": "Shadow Temple Beginning", "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ Truth Spinner Small Wooden Crate 1": "True", + "Shadow Temple MQ Truth Spinner Small Wooden Crate 2": "True", + "Shadow Temple MQ Truth Spinner Small Wooden Crate 3": "True", + "Shadow Temple MQ Truth Spinner Small Wooden Crate 4": "True" + }, "exits": { - "Shadow Temple Entryway": "True", "Shadow Temple First Beamos": " - can_use(Fire_Arrows) or Hover_Boots or - (logic_shadow_mq_gap and can_use(Longshot))", + shadow_temple_shortcuts or can_use(Fire_Arrows) or Hover_Boots or + (logic_shadow_mq_gap and Longshot)", "Shadow Temple Dead Hand Area": "has_explosives and (Small_Key_Shadow_Temple, 6)" } }, @@ -25,7 +30,15 @@ "dungeon": "Shadow Temple", "locations": { "Shadow Temple MQ Compass Chest": "True", - "Shadow Temple MQ Hover Boots Chest": "can_play(Song_of_Time) and Bow" + "Shadow Temple MQ Hover Boots Chest": "can_play(Song_of_Time) and Bow", + "Shadow Temple MQ Whispering Walls Pot 1": "True", + "Shadow Temple MQ Whispering Walls Pot 2": "True", + "Shadow Temple MQ Compass Room Pot 1": "True", + "Shadow Temple MQ Compass Room Pot 2": "True", + "Shadow Temple MQ Whispering Walls Before Time Block Flying Pot 1": "True", + "Shadow Temple MQ Whispering Walls Before Time Block Flying Pot 2": "True", + "Shadow Temple MQ Whispering Walls After Time Block Flying Pot 1": "can_play(Song_of_Time)", + "Shadow Temple MQ Whispering Walls After Time Block Flying Pot 2": "can_play(Song_of_Time)" } }, { @@ -36,48 +49,91 @@ "Shadow Temple MQ Early Gibdos Chest": "True", "Shadow Temple MQ Near Ship Invisible Chest": "True" }, + # When shadow shortcuts are on, the central areas of the dungeon will require all 6 keys to + # access. However, the final locked door does not actually prevent you from reaching any area + # since all opening it does is complete the loop through the dungeon. We can take advantage of + # this to reduce the key requirement to 5 by confirming we have the items to reach the check + # regardless of which door is unlocked into any given room. An exception can be made for using + # the Longshot to get from the lower door of huge pit room up to the invisible blades room. + # Since Longshot is required to use the final key on the door to the BK chest room, you must + # either have Longshot or be unable to spend more than 5 keys. "exits": { - "Shadow Temple Upper Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 2)" + "Shadow Temple Upper Huge Pit": " + has_explosives and + (((Small_Key_Shadow_Temple, 2) and not shadow_temple_shortcuts) or + (Small_Key_Shadow_Temple, 5))", + "Shadow Temple Boat": "shadow_temple_shortcuts" } }, { "region_name": "Shadow Temple Upper Huge Pit", "dungeon": "Shadow Temple", + "exits": { + "Shadow Temple Invisible Blades": " + (not shadow_temple_shortcuts or (Small_Key_Shadow_Temple, 6) or + ((logic_lens_shadow_mq_platform or can_use(Lens_of_Truth)) and Hover_Boots)) and + (can_play(Song_of_Time) or + (logic_shadow_mq_invisible_blades and damage_multiplier != 'ohko'))", + "Shadow Temple Lower Huge Pit": "has_fire_source or logic_shadow_mq_huge_pit" + } + }, + { + "region_name": "Shadow Temple Invisible Blades", + "dungeon": "Shadow Temple", "locations": { "Shadow Temple MQ Invisible Blades Visible Chest": " - can_play(Song_of_Time) or - (logic_shadow_mq_invisible_blades and damage_multiplier != 'ohko')", + logic_lens_shadow_mq_invisible_blades or can_use(Lens_of_Truth) or can_use(Nayrus_Love)", "Shadow Temple MQ Invisible Blades Invisible Chest": " - can_play(Song_of_Time) or - (logic_shadow_mq_invisible_blades and damage_multiplier != 'ohko')" - }, - "exits": { - "Shadow Temple Lower Huge Pit": "has_fire_source or logic_shadow_mq_huge_pit" + logic_lens_shadow_mq_invisible_blades or can_use(Lens_of_Truth) or can_use(Nayrus_Love)", + "Shadow Temple MQ Invisible Blades Recovery Heart 1": "True", + "Shadow Temple MQ Invisible Blades Recovery Heart 2": "True" } }, { "region_name": "Shadow Temple Lower Huge Pit", "dungeon": "Shadow Temple", + "exits": { + "Shadow Temple Falling Spikes": " + not shadow_temple_shortcuts or (Small_Key_Shadow_Temple, 6) or + ((logic_lens_shadow_mq_platform or can_use(Lens_of_Truth)) and Hover_Boots and + (has_fire_source or logic_shadow_mq_huge_pit))", + "Shadow Temple Invisible Spikes": " + (logic_lens_shadow_mq_platform or can_use(Lens_of_Truth)) and + Hover_Boots and (Small_Key_Shadow_Temple, 3)", + "Shadow Temple Upper Huge Pit": "Longshot" + } + }, + { + "region_name": "Shadow Temple Falling Spikes", + "dungeon": "Shadow Temple", "locations": { - "Shadow Temple MQ Beamos Silver Rupees Chest": "can_use(Longshot)", + "Shadow Temple MQ Beamos Silver Rupees Chest": "Longshot", "Shadow Temple MQ Falling Spikes Lower Chest": "True", "Shadow Temple MQ Falling Spikes Upper Chest": " (logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade", "Shadow Temple MQ Falling Spikes Switch Chest": " (logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade", - "Shadow Temple MQ Invisible Spikes Chest": " - Hover_Boots and (Small_Key_Shadow_Temple, 3) and - (logic_lens_shadow_mq_back or can_use(Lens_of_Truth))", - "Shadow Temple MQ Stalfos Room Chest": " - Hover_Boots and (Small_Key_Shadow_Temple, 3) and Progressive_Hookshot and - (logic_lens_shadow_mq_back or can_use(Lens_of_Truth))", + "Shadow Temple MQ Falling Spikes Lower Pot 1": "True", + "Shadow Temple MQ Falling Spikes Lower Pot 2": "True", + "Shadow Temple MQ Falling Spikes Upper Pot 1": " + (logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade", + "Shadow Temple MQ Falling Spikes Upper Pot 2": " + (logic_shadow_umbrella and Hover_Boots) or Progressive_Strength_Upgrade", "Shadow Temple MQ GS Falling Spikes Room": " - (logic_shadow_umbrella_gs and Hover_Boots) or Progressive_Hookshot" + (logic_shadow_umbrella_gs and Hover_Boots) or Hookshot" + } + }, + { + "region_name": "Shadow Temple Invisible Spikes", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ Invisible Spikes Chest": "True", + "Shadow Temple MQ Stalfos Room Chest": "Hookshot" }, "exits": { - "Shadow Temple Wind Tunnel": " - Hover_Boots and (logic_lens_shadow_mq_back or can_use(Lens_of_Truth)) and - Progressive_Hookshot and (Small_Key_Shadow_Temple, 4)" + "Shadow Temple Wind Tunnel": "Hookshot and (Small_Key_Shadow_Temple, 4)", + "Shadow Temple Lower Huge Pit": " + (logic_lens_shadow_mq_platform or can_use(Lens_of_Truth)) and Hover_Boots" } }, { @@ -85,43 +141,113 @@ "dungeon": "Shadow Temple", "locations": { "Shadow Temple MQ Wind Hint Chest": "True", + "Shadow Temple MQ GS Wind Hint Room": "Hookshot" + }, + "exits": { + "Shadow Temple After Wind": "True", + "Shadow Temple Invisible Spikes": "Hookshot" + } + }, + { + "region_name": "Shadow Temple After Wind", + "dungeon": "Shadow Temple", + "locations": { "Shadow Temple MQ After Wind Enemy Chest": "True", - "Shadow Temple MQ After Wind Hidden Chest": "True", - "Shadow Temple MQ GS Wind Hint Room": "True", + "Shadow Temple MQ After Wind Hidden Chest": "has_explosives", + "Shadow Temple MQ After Wind Pot 1": "True", + "Shadow Temple MQ After Wind Pot 2": "True", + "Shadow Temple MQ After Wind Flying Pot 1": "True", + "Shadow Temple MQ After Wind Flying Pot 2": "True", "Shadow Temple MQ GS After Wind": "True", "Nut Pot": "True" }, "exits": { - "Shadow Temple Beyond Boat": " - can_play(Zeldas_Lullaby) and (Small_Key_Shadow_Temple, 5)" + "Shadow Temple Boat": "(Small_Key_Shadow_Temple, 5)", + "Shadow Temple Wind Tunnel": "Hover_Boots or logic_shadow_mq_windy_walkway" + } + }, + { + "region_name": "Shadow Temple Boat", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ Before Boat Recovery Heart 1": "can_use(Distant_Scarecrow)", + "Shadow Temple MQ Before Boat Recovery Heart 2": "can_use(Distant_Scarecrow)" + }, + "exits": { + "Shadow Temple After Wind": "(Small_Key_Shadow_Temple, 5)", + "Shadow Temple Beyond Boat": "can_play(Zeldas_Lullaby)" } }, { "region_name": "Shadow Temple Beyond Boat", "dungeon": "Shadow Temple", "locations": { - "Shadow Temple Bongo Bongo Heart": " - (Bow or (logic_shadow_statue and has_bombchus)) and Boss_Key_Shadow_Temple", - "Bongo Bongo": " - (Bow or (logic_shadow_statue and has_bombchus)) and Boss_Key_Shadow_Temple", - "Shadow Temple MQ GS After Ship": "True", - "Shadow Temple MQ GS Near Boss": "Bow or (logic_shadow_statue and has_bombchus)" + "Shadow Temple MQ After Boat Pot 1": "True", + "Shadow Temple MQ After Boat Pot 2": "True", + "Shadow Temple MQ GS After Ship": "Hookshot" + }, + "exits": { + "Shadow Temple Across Chasm": " + Bow or (logic_shadow_statue and has_bombchus) or shadow_temple_shortcuts" + } + }, + { + "region_name": "Shadow Temple Across Chasm", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ After Boat Lower Recovery Heart": "True", + "Shadow Temple MQ Near Boss Pot 1": "True", + "Shadow Temple MQ Near Boss Pot 2": "True" }, "exits": { - "Shadow Temple Invisible Maze": " - Bow and can_play(Song_of_Time) and can_use(Longshot)" + "Shadow Temple Invisible Maze": "Bow and can_play(Song_of_Time) and Longshot", + "Shadow Temple Before Boss": "Hover_Boots" } }, { "region_name": "Shadow Temple Invisible Maze", "dungeon": "Shadow Temple", "locations": { + "Shadow Temple MQ Bomb Flower Chest": " + logic_lens_shadow_mq_dead_hand or can_use(Lens_of_Truth)", + "Shadow Temple MQ Freestanding Key": "True", "Shadow Temple MQ Spike Walls Left Chest": " - can_use(Dins_Fire) and (Small_Key_Shadow_Temple, 6)", + (Small_Key_Shadow_Temple, 6) and can_use(Dins_Fire)", "Shadow Temple MQ Boss Key Chest": " - can_use(Dins_Fire) and (Small_Key_Shadow_Temple, 6)", - "Shadow Temple MQ Bomb Flower Chest": "True", - "Shadow Temple MQ Freestanding Key": "True" + (Small_Key_Shadow_Temple, 6) and can_use(Dins_Fire)", + "Shadow Temple MQ After Boat Upper Recovery Heart 1": "True", + "Shadow Temple MQ After Boat Upper Recovery Heart 2": "True", + "Shadow Temple MQ Bomb Flower Room Pot 1": "True", + "Shadow Temple MQ Bomb Flower Room Pot 2": "True", + "Shadow Temple MQ Spike Walls Pot": "(Small_Key_Shadow_Temple, 6)" + }, + "exits": { + "Shadow Temple 3 Spinning Pots Rupees": "Bombs or Progressive_Strength_Upgrade" + } + }, + { + "region_name": "Shadow Temple 3 Spinning Pots Rupees", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ 3 Spinning Pots Rupee 1": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 2": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 3": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 4": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 5": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 6": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 7": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 8": "True", + "Shadow Temple MQ 3 Spinning Pots Rupee 9": "True" + } + }, + { + "region_name": "Shadow Temple Before Boss", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple MQ GS Near Boss": "has_projectile(adult) or can_use(Dins_Fire)" + }, + "exits": { + "Shadow Temple Boss Door": "True" } } ] diff --git a/worlds/oot/data/World/Shadow Temple.json b/worlds/oot/data/World/Shadow Temple.json index 2c4c86350a93..fe665598651e 100644 --- a/worlds/oot/data/World/Shadow Temple.json +++ b/worlds/oot/data/World/Shadow Temple.json @@ -1,4 +1,4 @@ -[ +[ { "region_name": "Shadow Temple Entryway", "dungeon": "Shadow Temple", @@ -15,10 +15,18 @@ "locations": { "Shadow Temple Map Chest": "True", "Shadow Temple Hover Boots Chest": "True", + "Shadow Temple Whispering Walls Front Pot 1": "True", + "Shadow Temple Whispering Walls Front Pot 2": "True", + "Shadow Temple Whispering Walls Left Pot 1": "True", + "Shadow Temple Whispering Walls Left Pot 2": "True", + "Shadow Temple Whispering Walls Left Pot 3": "True", + "Shadow Temple Whispering Walls Flying Pot": "True", + "Shadow Temple Whispering Walls Near Dead Hand Pot": "True", + "Shadow Temple Map Chest Room Pot 1": "True", + "Shadow Temple Map Chest Room Pot 2": "True", "Nut Pot": "True" }, "exits": { - "Shadow Temple Entryway": "True", "Shadow Temple First Beamos": "Hover_Boots" } }, @@ -30,7 +38,17 @@ "Shadow Temple Early Silver Rupee Chest": "True" }, "exits": { - "Shadow Temple Huge Pit": "has_explosives and (Small_Key_Shadow_Temple, 1)" + # If the shortcut is open, reverse shadow becomes an option, so we need to check for 4 keys with Lens/trick + # or all 5 keys. If the moving platform lens trick is off, forward shadow is the only way to access + # the huge pit checks without Lens of Truth. Getting to the invisible blades room in reverse uses the falling + # elevator near the Beamos. + # Also, we only need to check shortcut keys here and at boat, since key requirements are always the same. + "Shadow Temple Huge Pit": " + has_explosives and + (((Small_Key_Shadow_Temple, 1) and not shadow_temple_shortcuts) or + (Small_Key_Shadow_Temple, 5) or + ((Small_Key_Shadow_Temple, 4) and (logic_lens_shadow_platform or can_use(Lens_of_Truth))))", + "Shadow Temple Boat": "shadow_temple_shortcuts" } }, { @@ -42,52 +60,144 @@ "Shadow Temple Falling Spikes Lower Chest": "True", "Shadow Temple Falling Spikes Upper Chest": "logic_shadow_umbrella or Progressive_Strength_Upgrade", "Shadow Temple Falling Spikes Switch Chest": "logic_shadow_umbrella or Progressive_Strength_Upgrade", - "Shadow Temple Invisible Spikes Chest": " - (Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth))", + "Shadow Temple Invisible Blades Recovery Heart 1": "can_play(Song_of_Time)", + "Shadow Temple Invisible Blades Recovery Heart 2": "can_play(Song_of_Time)", + "Shadow Temple Falling Spikes Lower Pot 1": "True", + "Shadow Temple Falling Spikes Lower Pot 2": "True", + "Shadow Temple Falling Spikes Upper Pot 1": "logic_shadow_umbrella or Progressive_Strength_Upgrade", + "Shadow Temple Falling Spikes Upper Pot 2": "logic_shadow_umbrella or Progressive_Strength_Upgrade", + "Shadow Temple GS Invisible Blades Room": "True", + "Shadow Temple GS Falling Spikes Room": "logic_shadow_umbrella_gs or Hookshot" + }, + "exits": { + "Shadow Temple Invisible Spikes": " + (Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_platform or can_use(Lens_of_Truth))" + } + }, + { + "region_name": "Shadow Temple Invisible Spikes", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple Invisible Spikes Chest": "True", "Shadow Temple Freestanding Key": " - (Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth)) - and Progressive_Hookshot and + Hookshot and (Bombs or Progressive_Strength_Upgrade or (logic_shadow_freestanding_key and has_bombchus))", - "Shadow Temple GS Like Like Room": "True", - "Shadow Temple GS Falling Spikes Room": "logic_shadow_umbrella_gs or Progressive_Hookshot", - "Shadow Temple GS Single Giant Pot": " - (Small_Key_Shadow_Temple, 2) and (logic_lens_shadow_back or can_use(Lens_of_Truth)) - and Progressive_Hookshot" + "Shadow Temple GS Single Giant Pot": "Hookshot" }, "exits": { - "Shadow Temple Wind Tunnel": " - (logic_lens_shadow_back or can_use(Lens_of_Truth)) and - Progressive_Hookshot and (Small_Key_Shadow_Temple, 3)" + "Shadow Temple Wind Tunnel": "Hookshot and (Small_Key_Shadow_Temple, 3)", + "Shadow Temple Huge Pit": "logic_lens_shadow_platform or can_use(Lens_of_Truth)" } }, { "region_name": "Shadow Temple Wind Tunnel", "dungeon": "Shadow Temple", "locations": { - "Shadow Temple Wind Hint Chest": "True", + "Shadow Temple Wind Hint Chest": "True" + }, + "exits": { + "Shadow Temple After Wind": "True", + # Reverse Shadow assumes 4 keys at both ends, so no need to check keys here + "Shadow Temple Invisible Spikes": "Hookshot" + } + }, + { + "region_name": "Shadow Temple After Wind", + "dungeon": "Shadow Temple", + "locations": { "Shadow Temple After Wind Enemy Chest": "True", - "Shadow Temple After Wind Hidden Chest": "True", - "Shadow Temple GS Near Ship": "can_use(Longshot) and (Small_Key_Shadow_Temple, 4)" + "Shadow Temple After Wind Hidden Chest": "has_explosives", + "Shadow Temple After Wind Pot 1": "True", + "Shadow Temple After Wind Pot 2": "True", + "Shadow Temple After Wind Flying Pot 1": "True", + "Shadow Temple After Wind Flying Pot 2": "True" }, "exits": { - "Shadow Temple Beyond Boat": "can_play(Zeldas_Lullaby) and (Small_Key_Shadow_Temple, 4)" + "Shadow Temple Boat": "(Small_Key_Shadow_Temple, 4)", + "Shadow Temple Wind Tunnel": "True" + } + }, + { + "region_name": "Shadow Temple Boat", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple Before Boat Recovery Heart 1": "can_use(Distant_Scarecrow)", + "Shadow Temple Before Boat Recovery Heart 2": "can_use(Distant_Scarecrow)", + "Shadow Temple GS Near Ship": "Longshot" + }, + "exits": { + "Shadow Temple After Wind": "(Small_Key_Shadow_Temple, 4)", + "Shadow Temple Beyond Boat": "can_play(Zeldas_Lullaby)" } }, { "region_name": "Shadow Temple Beyond Boat", "dungeon": "Shadow Temple", "locations": { + "Shadow Temple Invisible Floormaster Chest": "True", "Shadow Temple Spike Walls Left Chest": "can_use(Dins_Fire)", "Shadow Temple Boss Key Chest": "can_use(Dins_Fire)", - "Shadow Temple Invisible Floormaster Chest": "True", - "Shadow Temple Bongo Bongo Heart": " - (Small_Key_Shadow_Temple, 5) and Boss_Key_Shadow_Temple and - (Bow or can_use(Distant_Scarecrow) or (logic_shadow_statue and has_bombchus))", - "Bongo Bongo": " - (Small_Key_Shadow_Temple, 5) and Boss_Key_Shadow_Temple and - (Bow or can_use(Distant_Scarecrow) or (logic_shadow_statue and has_bombchus))", + "Shadow Temple After Boat Pot": "True", + "Shadow Temple Invisible Floormaster Pot 1": "True", + "Shadow Temple Invisible Floormaster Pot 2": "True", + "Shadow Temple Spike Walls Pot": "True", "Shadow Temple GS Triple Giant Pot": "True" + }, + "exits": { + "Shadow Temple 3 Spinning Pots Rupees": "Bombs or Progressive_Strength_Upgrade", + "Shadow Temple Beyond Boat Scarecrow": "can_use(Distant_Scarecrow)", + "Shadow Temple Before Boss": " + Bow or (logic_shadow_statue and has_bombchus) or shadow_temple_shortcuts" + } + }, + { + "region_name": "Shadow Temple 3 Spinning Pots Rupees", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple 3 Spinning Pots Rupee 1": "True", + "Shadow Temple 3 Spinning Pots Rupee 2": "True", + "Shadow Temple 3 Spinning Pots Rupee 3": "True", + "Shadow Temple 3 Spinning Pots Rupee 4": "True", + "Shadow Temple 3 Spinning Pots Rupee 5": "True", + "Shadow Temple 3 Spinning Pots Rupee 6": "True", + "Shadow Temple 3 Spinning Pots Rupee 7": "True", + "Shadow Temple 3 Spinning Pots Rupee 8": "True", + "Shadow Temple 3 Spinning Pots Rupee 9": "True" + } + }, + { + "region_name": "Shadow Temple Beyond Boat Scarecrow", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple After Boat Upper Recovery Heart 1": "True", + "Shadow Temple After Boat Upper Recovery Heart 2": "True" + }, + "exits": { + "Shadow Temple Beyond Boat SoT Block": "True" + } + }, + { + "region_name": "Shadow Temple Beyond Boat SoT Block", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple After Boat Lower Recovery Heart": "True" + }, + "exits": { + "Shadow Temple Beyond Boat Scarecrow": "can_use(Scarecrow)", + "Shadow Temple Before Boss": "True" + } + }, + { + "region_name": "Shadow Temple Before Boss", + "dungeon": "Shadow Temple", + "locations": { + "Shadow Temple Near Boss Pot 1": "True", + "Shadow Temple Near Boss Pot 2": "True" + }, + "exits": { + "Shadow Temple Beyond Boat SoT Block": "can_play(Song_of_Time)", + "Shadow Temple Boss Door": "(Small_Key_Shadow_Temple, 5)" } } ] diff --git a/worlds/oot/data/World/Spirit Temple MQ.json b/worlds/oot/data/World/Spirit Temple MQ.json index 2494d201c876..d6e1b37eb698 100644 --- a/worlds/oot/data/World/Spirit Temple MQ.json +++ b/worlds/oot/data/World/Spirit Temple MQ.json @@ -5,17 +5,21 @@ "locations": { "Spirit Temple MQ Entrance Front Left Chest": "True", "Spirit Temple MQ Entrance Back Left Chest": " - here(can_blast_or_smash) and - (can_use(Slingshot) or can_use(Bow))", + here(can_blast_or_smash) and (can_use(Slingshot) or can_use(Bow))", "Spirit Temple MQ Entrance Back Right Chest": " - has_bombchus or can_use(Bow) or can_use(Hookshot) or - can_use(Slingshot) or can_use(Boomerang)" + has_bombchus or can_use(Bow) or can_use(Hookshot) or + can_use(Slingshot) or can_use(Boomerang)", + "Spirit Temple MQ Lobby Pot 1": "True", + "Spirit Temple MQ Lobby Pot 2": "True", + "Spirit Temple MQ Lobby Pot 3": "True", + "Spirit Temple MQ Lobby Pot 4": "True" }, "exits": { "Desert Colossus From Spirit Lobby": "True", "Child Spirit Temple": "is_child", "Adult Spirit Temple": " - has_bombchus and can_use(Longshot) and can_use(Silver_Gauntlets)" + can_use(Longshot) and + ((can_use(Silver_Gauntlets) and has_bombchus) or spirit_temple_shortcuts)" } }, { @@ -24,18 +28,29 @@ "locations": { "Spirit Temple MQ Child Hammer Switch Chest": " at('Adult Spirit Temple', (Small_Key_Spirit_Temple, 7) and Megaton_Hammer)", - "Spirit Temple MQ Map Room Enemy Chest": " - (Sticks or Kokiri_Sword) and - has_bombchus and Slingshot and can_use(Dins_Fire)", "Spirit Temple MQ Map Chest": "Sticks or Kokiri_Sword or Bombs", + "Spirit Temple MQ Map Room Enemy Chest": " + (Sticks or Kokiri_Sword) and has_bombchus and Slingshot and can_use(Dins_Fire)", "Spirit Temple MQ Silver Block Hallway Chest": " - has_bombchus and (Small_Key_Spirit_Temple, 7) and Slingshot and + has_bombchus and (Small_Key_Spirit_Temple, 7) and Slingshot and (can_use(Dins_Fire) or at('Adult Spirit Temple', (can_use(Fire_Arrows) or (logic_spirit_mq_frozen_eye and can_use(Bow) and can_play(Song_of_Time)))))", + "Spirit Temple MQ Child Recovery Heart 1": "can_use(Slingshot) or can_use(Boomerang)", + "Spirit Temple MQ Child Recovery Heart 2": "can_use(Slingshot) or can_use(Boomerang)", + "Spirit Temple MQ Child Torch Slugs Room Pot": "True", + "Spirit Temple MQ Child 3 Gibdo Room Pot 1": " + (Sticks or Kokiri_Sword or (Bombs and can_use(Dins_Fire))) and has_bombchus and Slingshot", + "Spirit Temple MQ Child 3 Gibdo Room Pot 2": " + (Sticks or Kokiri_Sword or (Bombs and can_use(Dins_Fire))) and has_bombchus and Slingshot", + "Spirit Temple MQ Child Stalfos Fight Pot 1": " + (Sticks or Kokiri_Sword) and has_bombchus and Slingshot", + "Spirit Temple MQ Child Stalfos Fight Pot 2": " + (Sticks or Kokiri_Sword) and has_bombchus and Slingshot", + "Spirit Temple MQ Child Stalfos Fight Pot 3": " + (Sticks or Kokiri_Sword) and has_bombchus and Slingshot", "Fairy Pot": " - has_bottle and (Sticks or Kokiri_Sword) and - has_bombchus and Slingshot" + has_bottle and (Sticks or Kokiri_Sword) and has_bombchus and Slingshot" }, "exits": { "Spirit Temple Shared": "has_bombchus and (Small_Key_Spirit_Temple, 2)" @@ -45,39 +60,27 @@ "region_name": "Adult Spirit Temple", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple MQ Child Climb South Chest": "(Small_Key_Spirit_Temple, 7)", - "Spirit Temple MQ Statue Room Lullaby Chest": "can_play(Zeldas_Lullaby)", - "Spirit Temple MQ Statue Room Invisible Chest": " - logic_lens_spirit_mq or can_use(Lens_of_Truth)", - "Spirit Temple MQ Beamos Room Chest": "(Small_Key_Spirit_Temple, 5)", - "Spirit Temple MQ Chest Switch Chest": " - (Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time)", - "Spirit Temple MQ Boss Key Chest": " - (Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and Mirror_Shield", - "Spirit Temple MQ GS Nine Thrones Room West": "(Small_Key_Spirit_Temple, 7)", - "Spirit Temple MQ GS Nine Thrones Room North": "(Small_Key_Spirit_Temple, 7)" + "Spirit Temple MQ Child Climb South Chest": "(Small_Key_Spirit_Temple, 7) and has_explosives", + "Spirit Temple MQ Statue Room Lullaby Chest": "can_play(Zeldas_Lullaby) and can_break_crate", + "Spirit Temple MQ Statue Room Invisible Chest": "logic_lens_spirit_mq or can_use(Lens_of_Truth)" }, "exits": { - "Lower Adult Spirit Temple": " - Mirror_Shield and (can_use(Fire_Arrows) or - (logic_spirit_mq_lower_adult and can_use(Dins_Fire) and Bow))", "Spirit Temple Shared": "True", - "Spirit Temple Boss Area": " - (Small_Key_Spirit_Temple, 6) and can_play(Zeldas_Lullaby) and Megaton_Hammer", - "Mirror Shield Hand": " - (Small_Key_Spirit_Temple, 5) and can_play(Song_of_Time) and - (logic_lens_spirit_mq or can_use(Lens_of_Truth))" + "Lower Adult Spirit Temple": " + Mirror_Shield and + (can_use(Fire_Arrows) or (logic_spirit_mq_lower_adult and can_use(Dins_Fire)))", + "Spirit Temple Beamos Room": "(Small_Key_Spirit_Temple, 5)", + "Spirit Temple Boss Door": "spirit_temple_shortcuts" } }, { - #In this region, child reachability really means age-unknown, but with the caveat - #that child has as least entered the dungeon. is_adult means is_adult as usual. - #All child specific logic must be anded with 7 keys to convert child-as-unknown-age - #back to child. + # In this region, child reachability really means age-unknown, but with the caveat that child has + # as least entered the dungeon. is_adult means is_adult as usual. All child specific logic must be + # anded with 7 keys to convert child-as-unknown-age back to child. "region_name": "Spirit Temple Shared", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple MQ Child Climb North Chest": "(Small_Key_Spirit_Temple, 6)", + "Spirit Temple MQ Child Climb North Chest": "(Small_Key_Spirit_Temple, 6) and has_explosives", "Spirit Temple MQ Compass Chest": " (can_use(Slingshot) and (Small_Key_Spirit_Temple, 7)) or can_use(Bow) or @@ -85,21 +88,41 @@ "Spirit Temple MQ Sun Block Room Chest": " can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult", + "Spirit Temple Silver Gauntlets Chest": " + ((Small_Key_Spirit_Temple, 7) and + (can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult)) or + ((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and (has_explosives or Nuts) and + (logic_lens_spirit_mq or can_use(Lens_of_Truth)))", + "Spirit Temple MQ Child Climb Pot": "(Small_Key_Spirit_Temple, 6)", + "Spirit Temple MQ Central Chamber Floor Pot 1": "True", + "Spirit Temple MQ Central Chamber Floor Pot 2": "True", + "Spirit Temple MQ Central Chamber Floor Pot 3": "True", + "Spirit Temple MQ Central Chamber Top Left Pot (Left)": " + (is_adult and (Hover_Boots or logic_spirit_lobby_jump)) or + can_play(Song_of_Time)", + "Spirit Temple MQ Central Chamber Top Left Pot (Right)": " + (is_child and Boomerang and (Kokiri_Sword or Sticks) and (Small_Key_Spirit_Temple, 7)) or + (is_adult and (Hover_Boots or logic_spirit_lobby_jump)) or + can_play(Song_of_Time) or + (Boomerang and (Kokiri_Sword or Sticks) and (Hover_Boots or logic_spirit_lobby_jump))", + "Spirit Temple MQ Sun Block Room Pot 1": " + can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or + is_adult", + "Spirit Temple MQ Sun Block Room Pot 2": " + can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or + is_adult", + "Spirit Temple MQ Central Chamber Crate 1": "can_break_crate", + "Spirit Temple MQ Central Chamber Crate 2": "can_break_crate", "Spirit Temple MQ GS Sun Block Room": " (logic_spirit_mq_sun_block_gs and Boomerang and (can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot)) or is_adult" }, "exits": { - "Silver Gauntlets Hand": " - ((Small_Key_Spirit_Temple, 7) and - (can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult)) or - ((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and - (logic_lens_spirit_mq or can_use(Lens_of_Truth)))", "Desert Colossus": " ((Small_Key_Spirit_Temple, 7) and (can_play(Song_of_Time) or logic_spirit_mq_sun_block_sot or is_adult)) or - ((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and + ((Small_Key_Spirit_Temple, 4) and can_play(Song_of_Time) and (has_explosives or Nuts) and (logic_lens_spirit_mq or can_use(Lens_of_Truth)) and is_adult)" } }, @@ -109,39 +132,77 @@ "locations": { "Spirit Temple MQ Leever Room Chest": "True", "Spirit Temple MQ Symphony Room Chest": " - (Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and - Song_of_Time and Eponas_Song and Suns_Song and - Song_of_Storms and Zeldas_Lullaby", + (Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and + Song_of_Time and Eponas_Song and Suns_Song and Song_of_Storms and Zeldas_Lullaby", "Spirit Temple MQ Entrance Front Right Chest": "Megaton_Hammer", + "Spirit Temple MQ Below 4 Wallmasters Pot 1": "True", + "Spirit Temple MQ Below 4 Wallmasters Pot 2": "True", "Spirit Temple MQ GS Leever Room": "True", "Spirit Temple MQ GS Symphony Room": " - (Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and - Song_of_Time and Eponas_Song and Suns_Song and - Song_of_Storms and Zeldas_Lullaby" + (Small_Key_Spirit_Temple, 7) and Megaton_Hammer and Ocarina and + Song_of_Time and Eponas_Song and Suns_Song and Song_of_Storms and Zeldas_Lullaby" } }, { - "region_name": "Spirit Temple Boss Area", + "region_name": "Spirit Temple Beamos Room", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple MQ Mirror Puzzle Invisible Chest": " - logic_lens_spirit_mq or can_use(Lens_of_Truth)", - "Spirit Temple Twinrova Heart": "Mirror_Shield and Boss_Key_Spirit_Temple", - "Twinrova": "Mirror_Shield and Boss_Key_Spirit_Temple" + "Spirit Temple MQ Beamos Room Chest": "has_explosives" + }, + "exits": { + "Spirit Temple Beyond Beamos Room": "can_play(Song_of_Time) and (has_explosives or Nuts)", + "Spirit Temple Shifting Wall": "(Small_Key_Spirit_Temple, 6)" } }, { - "region_name": "Mirror Shield Hand", + "region_name": "Spirit Temple Beyond Beamos Room", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Mirror Shield Chest": "True" + "Spirit Temple MQ Chest Switch Chest": "True", + "Spirit Temple MQ Boss Key Chest": "Mirror_Shield", + "Spirit Temple Mirror Shield Chest": "logic_lens_spirit_mq or can_use(Lens_of_Truth)" } }, { - "region_name": "Silver Gauntlets Hand", + "region_name": "Spirit Temple Shifting Wall", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Silver Gauntlets Chest": "True" + "Spirit Temple MQ Shifting Wall Pot 1": "True", + "Spirit Temple MQ Shifting Wall Pot 2": "True", + "Spirit Temple MQ After Shifting Wall Room Pot 1": "True", + "Spirit Temple MQ After Shifting Wall Room Pot 2": "True", + "Spirit Temple MQ GS Nine Thrones Room West": "(Small_Key_Spirit_Temple, 7)", + "Spirit Temple MQ GS Nine Thrones Room North": "(Small_Key_Spirit_Temple, 7)" + }, + "exits": { + "Spirit Temple Big Mirror Room": "can_play(Zeldas_Lullaby)" + } + }, + { + "region_name": "Spirit Temple Big Mirror Room", + "dungeon": "Spirit Temple", + "locations": { + "Spirit Temple MQ Big Mirror Pot 1": "True", + "Spirit Temple MQ Big Mirror Pot 2": "True", + "Spirit Temple MQ Big Mirror Pot 3": "True", + "Spirit Temple MQ Big Mirror Pot 4": "True", + "Spirit Temple MQ Big Mirror Crate 1": "can_break_crate", + "Spirit Temple MQ Big Mirror Crate 2": "can_break_crate", + "Spirit Temple MQ Big Mirror Crate 3": "can_break_crate", + "Spirit Temple MQ Big Mirror Crate 4": "can_break_crate" + }, + "exits": { + "Spirit Temple Mirror Puzzle": "Megaton_Hammer" + } + }, + { + "region_name": "Spirit Temple Mirror Puzzle", + "dungeon": "Spirit Temple", + "locations": { + "Spirit Temple MQ Mirror Puzzle Invisible Chest": "logic_lens_spirit_mq or can_use(Lens_of_Truth)" + }, + "exits": { + "Spirit Temple Boss Door": "Mirror_Shield" } } ] diff --git a/worlds/oot/data/World/Spirit Temple.json b/worlds/oot/data/World/Spirit Temple.json index 4970885537a3..37bd2fabaec2 100644 --- a/worlds/oot/data/World/Spirit Temple.json +++ b/worlds/oot/data/World/Spirit Temple.json @@ -2,72 +2,103 @@ { "region_name": "Spirit Temple Lobby", "dungeon": "Spirit Temple", + "locations": { + "Spirit Temple Lobby Pot 1": "True", + "Spirit Temple Lobby Pot 2": "True", + "Spirit Temple Lobby Flying Pot 1": "True", + "Spirit Temple Lobby Flying Pot 2": "True" + }, "exits": { "Desert Colossus From Spirit Lobby": "True", - "Child Spirit Temple": "is_child", - "Early Adult Spirit Temple": "can_use(Silver_Gauntlets)" + "Child Spirit Temple": " + is_child and + (Sticks or has_explosives or + ((Nuts or Boomerang) and (Kokiri_Sword or Slingshot))) and + (Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu))", + "Child Spirit Before Locked Door": "is_child", + "Early Adult Spirit Temple": "can_use(Silver_Gauntlets)", + "Spirit Temple Central Chamber": "is_adult and spirit_temple_shortcuts" } }, { "region_name": "Child Spirit Temple", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Child Bridge Chest": " - (Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and - (Sticks or has_explosives or - ((Nuts or Boomerang) and - (Kokiri_Sword or Slingshot)))", - "Spirit Temple Child Early Torches Chest": " - (Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and - (Sticks or has_explosives or - ((Nuts or Boomerang) and (Kokiri_Sword or Slingshot))) and - (Sticks or can_use(Dins_Fire))", - "Spirit Temple GS Metal Fence": " - (Boomerang or Slingshot or (has_bombchus and logic_spirit_child_bombchu)) and - (Sticks or has_explosives or - ((Nuts or Boomerang) and (Kokiri_Sword or Slingshot)))" - }, - "exits": { - "Child Spirit Before Locked Door": "True" + "Spirit Temple Child Bridge Chest": "True", + "Spirit Temple Child Early Torches Chest": "Sticks or can_use(Dins_Fire)", + "Spirit Temple Child Bridge Flying Pot": "True", + "Spirit Temple Child Anubis Pot": "True", + "Spirit Temple GS Metal Fence": "True", + "Deku Shield Pot": "fix_broken_drops" } }, { "region_name": "Child Spirit Before Locked Door", "dungeon": "Spirit Temple", "locations": { + "Spirit Temple Before Child Climb Small Wooden Crate 1": "True", + "Spirit Temple Before Child Climb Small Wooden Crate 2": "True", "Nut Crate": "True" }, "exits": { "Child Spirit Temple Climb": "(Small_Key_Spirit_Temple, 1)" } }, + { + "region_name": "Early Adult Spirit Temple", + "dungeon": "Spirit Temple", + "locations": { + "Spirit Temple Compass Chest": "Hookshot and can_play(Zeldas_Lullaby)", + # The mid-air silver rupee can be collected with a jumpslash. + "Spirit Temple Early Adult Right Chest": " + Bow or Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch)", + "Spirit Temple GS Boulder Room": " + can_play(Song_of_Time) and + (Bow or Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch))" + }, + "exits": { + "Spirit Temple Central Chamber": "(Small_Key_Spirit_Temple, 1)", + "Adult Spirit Temple Climb": "(Small_Key_Spirit_Temple, 3)" + } + }, + # In the following two regions, child and adult reachability actually means age-unknown, but with + # the caveat that that age can potentially enter the area. Routes must be anded with 5 keys for + # child or 3 keys (or shortcuts on) for adult before they can use only items specific to that age. + # Age-unknown routes do not specify age and must include the necessary items for both ages, so + # that the checks can be collected regardless of which age actually has entered the area. + # Routes that use two keys are age-unknown, where the checks are expected to be collected as + # adult, but child might collect them instead if out-of-logic explosives have been found. Checking + # bombchus_in_logic on and entrance_shuffle off ensures that those explosives cannot be exhausted. + # Age-unknown logic is not deadend-proof in rare cases where some non-repeatable access is used + # to reach the temple (only possible with Entrance Randomizer). This trade-off is worth it to + # increase item placement variety, particularly when keys are shuffled within their own dungeons. { "region_name": "Child Spirit Temple Climb", "dungeon": "Spirit Temple", "locations": { "Spirit Temple Child Climb North Chest": " - has_projectile(both) or - (((Small_Key_Spirit_Temple, 3) or - ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - can_use(Silver_Gauntlets) and has_projectile(adult)) or - ((Small_Key_Spirit_Temple, 5) and is_child and - has_projectile(child))", + (is_child and has_projectile(child) and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and has_projectile(adult) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle))) or + has_projectile(both)", "Spirit Temple Child Climb East Chest": " - has_projectile(both) or - (((Small_Key_Spirit_Temple, 3) or - ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - can_use(Silver_Gauntlets) and has_projectile(adult)) or - ((Small_Key_Spirit_Temple, 5) and is_child and - has_projectile(child))", + (is_child and has_projectile(child) and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and has_projectile(adult) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle))) or + has_projectile(both)", + "Spirit Temple Child Climb Pot": "True", "Spirit Temple GS Sun on Floor Room": " - has_projectile(both) or can_use(Dins_Fire) or - (can_take_damage and (Sticks or Kokiri_Sword or has_projectile(child))) or - (is_child and - (Small_Key_Spirit_Temple, 5) and has_projectile(child)) or - (((Small_Key_Spirit_Temple, 3) or - ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - can_use(Silver_Gauntlets) and - (has_projectile(adult) or can_take_damage))" + (is_child and has_projectile(child) and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and (has_projectile(adult) or can_take_damage) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle))) or + has_projectile(both) or can_use(Dins_Fire) or + (can_take_damage and (Sticks or Kokiri_Sword or has_projectile(child)))" }, "exits": { "Spirit Temple Central Chamber": "has_explosives", @@ -75,118 +106,135 @@ } }, { - "region_name": "Early Adult Spirit Temple", + "region_name": "Spirit Temple Central Chamber", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Compass Chest": " - can_use(Hookshot) and can_play(Zeldas_Lullaby)", - "Spirit Temple Early Adult Right Chest": " - Bow or Progressive_Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch)", - #requires a very specific Bombchu use, Hover Boots can be skipped by jumping on top of the rolling rock. - "Spirit Temple First Mirror Left Chest": "(Small_Key_Spirit_Temple, 3)", - "Spirit Temple First Mirror Right Chest": "(Small_Key_Spirit_Temple, 3)", - "Spirit Temple GS Boulder Room": " - can_play(Song_of_Time) and - (Bow or Progressive_Hookshot or has_bombchus or (Bombs and logic_spirit_lower_adult_switch))" + "Spirit Temple Map Chest": " + (is_child and Sticks and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and (has_fire_source or (logic_spirit_map_chest and Bow)) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts)) or + ((can_use(Dins_Fire) or (((Magic_Meter and Fire_Arrows) or logic_spirit_map_chest) and Bow and Sticks)) and + (has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)))", + "Spirit Temple Sun Block Room Chest": " + (is_child and Sticks and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and (has_fire_source or (logic_spirit_sun_chest and Bow)) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts)) or + ((can_use(Dins_Fire) or (((Magic_Meter and Fire_Arrows) or logic_spirit_sun_chest) and Bow and Sticks)) and + (has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)))", + # With longshot and explosives, right hand is reachable as adult after opening either + # upper door. Because some of the keys cannot be spent without adult accessing the + # main body of the dungeon, this route is able to be age-unknown, where child can be + # expected to reach it as long as adult cannot enter. Because we cannot truly know + # whether adult can enter, child must still possess the items that adult would use. + "Spirit Temple Silver Gauntlets Chest": " + (Small_Key_Spirit_Temple, 5) or + (has_explosives and Longshot and (Small_Key_Spirit_Temple, 3))", + "Spirit Temple Central Chamber Flying Pot 1": " + (Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)", + "Spirit Temple Central Chamber Flying Pot 2": " + (Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)", + "Spirit Temple Hall After Sun Block Room Pot 1": " + (Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)", + "Spirit Temple Hall After Sun Block Room Pot 2": " + (Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts or + has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)", + "Spirit Temple GS Lobby": " + (is_child and logic_spirit_lobby_gs and Boomerang and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and (Hookshot or Hover_Boots or logic_spirit_lobby_jump) and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts)) or + (logic_spirit_lobby_gs and Boomerang and (Hookshot or Hover_Boots or logic_spirit_lobby_jump) and + (has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)))", + "Spirit Temple GS Hall After Sun Block Room": " + (is_child and Boomerang and + (Small_Key_Spirit_Temple, 5)) or + (is_adult and Hookshot and + ((Small_Key_Spirit_Temple, 3) or spirit_temple_shortcuts)) or + (Boomerang and Hookshot and + (has_explosives or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)))" }, "exits": { - "Spirit Temple Central Chamber": "(Small_Key_Spirit_Temple, 1)" + "Child Spirit Temple Climb": "True", + "Adult Spirit Temple Climb": "spirit_temple_shortcuts and can_use(Hookshot)", + "Spirit Temple Boss Door": " + is_adult and spirit_temple_shortcuts and + (Longshot or (logic_spirit_platform_hookshot and Hookshot))", + # Age-unknown logic is incompatible with the rest of the world. + # Because adult might unlock all doors, child must require all 5 keys to pass. + "Desert Colossus": " + (Small_Key_Spirit_Temple, 5) or + (is_adult and has_explosives and (Small_Key_Spirit_Temple, 3))" } }, { - "region_name": "Spirit Temple Central Chamber", + "region_name": "Adult Spirit Temple Climb", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Map Chest": " - ((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - (can_use(Dins_Fire) or - (((Magic_Meter and Fire_Arrows) or logic_spirit_map_chest) and Bow and Sticks))) or - ((Small_Key_Spirit_Temple, 5) and has_explosives and - can_use(Sticks)) or - ((Small_Key_Spirit_Temple, 3) and - (can_use(Fire_Arrows) or (logic_spirit_map_chest and Bow)) and - can_use(Silver_Gauntlets))", - "Spirit Temple Sun Block Room Chest": " - ((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - (can_use(Dins_Fire) or - (((Magic_Meter and Fire_Arrows) or logic_spirit_sun_chest) and Bow and Sticks))) or - ((Small_Key_Spirit_Temple, 5) and has_explosives and - can_use(Sticks)) or - ((Small_Key_Spirit_Temple, 3) and - (can_use(Fire_Arrows) or (logic_spirit_sun_chest and Bow)) and - can_use(Silver_Gauntlets))", - "Spirit Temple Statue Room Hand Chest": " - (Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and - can_play(Zeldas_Lullaby)", + "Spirit Temple First Mirror Left Chest": "True", + "Spirit Temple First Mirror Right Chest": "True", + "Spirit Temple Statue Room Hand Chest": "can_play(Zeldas_Lullaby)", "Spirit Temple Statue Room Northeast Chest": " - (Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and can_play(Zeldas_Lullaby) and - (Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump)", - "Spirit Temple GS Hall After Sun Block Room": " - (has_explosives and Boomerang and Progressive_Hookshot) or - (can_use(Boomerang) and (Small_Key_Spirit_Temple, 5) and has_explosives) or - (Progressive_Hookshot and can_use(Silver_Gauntlets) and - ((Small_Key_Spirit_Temple, 3) or - ((Small_Key_Spirit_Temple, 2) and Boomerang and bombchus_in_logic and not entrance_shuffle)))", - "Spirit Temple GS Lobby": " - ((has_explosives or (Small_Key_Spirit_Temple, 3) or ((Small_Key_Spirit_Temple, 2) and bombchus_in_logic and not entrance_shuffle)) and - logic_spirit_lobby_gs and Boomerang and (Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump)) or - (logic_spirit_lobby_gs and (Small_Key_Spirit_Temple, 5) and has_explosives and can_use(Boomerang)) or - ((Small_Key_Spirit_Temple, 3) and can_use(Silver_Gauntlets) and (Progressive_Hookshot or Hover_Boots or logic_spirit_lobby_jump))" + can_play(Zeldas_Lullaby) and + (Hookshot or Hover_Boots or logic_spirit_lobby_jump)", + "Spirit Temple Adult Climb Flying Pot 1": "True", + "Spirit Temple Adult Climb Flying Pot 2": "True" }, "exits": { - "Spirit Temple Outdoor Hands": "True", - "Spirit Temple Beyond Central Locked Door": " - (Small_Key_Spirit_Temple, 4) and can_use(Silver_Gauntlets)", - "Child Spirit Temple Climb": "True" + "Early Adult Spirit Temple": "(Small_Key_Spirit_Temple, 5)", + "Spirit Temple Anubis Room": "(Small_Key_Spirit_Temple, 4)" } }, { - "region_name": "Spirit Temple Outdoor Hands", + "region_name": "Spirit Temple Anubis Room", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Silver Gauntlets Chest": " - ((Small_Key_Spirit_Temple, 3) and (Progressive_Hookshot, 2) and has_explosives) or - (Small_Key_Spirit_Temple, 5)", - "Spirit Temple Mirror Shield Chest": " - (Small_Key_Spirit_Temple, 4) and can_use(Silver_Gauntlets) and has_explosives" + "Spirit Temple Beamos Hall Pot": "True" }, "exits": { - "Desert Colossus": " - (is_child and (Small_Key_Spirit_Temple, 5)) or - (can_use(Silver_Gauntlets) and - (((Small_Key_Spirit_Temple, 3) and has_explosives) or (Small_Key_Spirit_Temple, 5)))" + "Spirit Temple Beyond Anubis Room": "has_explosives", + "Spirit Temple Big Mirror Room": " + (Small_Key_Spirit_Temple, 5) and + (logic_spirit_wall or Longshot or has_bombchus or + ((Bombs or Nuts or can_use(Dins_Fire)) and + (Bow or Hookshot or Megaton_Hammer)))" } }, { - "region_name": "Spirit Temple Beyond Central Locked Door", + "region_name": "Spirit Temple Beyond Anubis Room", "dungeon": "Spirit Temple", "locations": { - "Spirit Temple Near Four Armos Chest": "Mirror_Shield and has_explosives", - "Spirit Temple Hallway Left Invisible Chest": "(logic_lens_spirit or can_use(Lens_of_Truth)) and has_explosives", - "Spirit Temple Hallway Right Invisible Chest": "(logic_lens_spirit or can_use(Lens_of_Truth)) and has_explosives" - }, - "exits": { - "Spirit Temple Beyond Final Locked Door": " - (Small_Key_Spirit_Temple, 5) and - (logic_spirit_wall or can_use(Longshot) or has_bombchus or - ((Bombs or Nuts or can_use(Dins_Fire)) and - (Bow or can_use(Hookshot) or Megaton_Hammer)))" + "Spirit Temple Near Four Armos Chest": "Mirror_Shield", + "Spirit Temple Hallway Left Invisible Chest": " + logic_lens_spirit or can_use(Lens_of_Truth)", + "Spirit Temple Hallway Right Invisible Chest": " + logic_lens_spirit or can_use(Lens_of_Truth)", + "Spirit Temple Mirror Shield Chest": "True" } }, { - "region_name": "Spirit Temple Beyond Final Locked Door", + "region_name": "Spirit Temple Big Mirror Room", "dungeon": "Spirit Temple", "locations": { "Spirit Temple Boss Key Chest": " - can_play(Zeldas_Lullaby) and Bow and - Progressive_Hookshot", + can_play(Zeldas_Lullaby) and Bow and Hookshot", "Spirit Temple Topmost Chest": "Mirror_Shield", - "Spirit Temple Twinrova Heart": " - Mirror_Shield and has_explosives and - Progressive_Hookshot and Boss_Key_Spirit_Temple", - "Twinrova": " - Mirror_Shield and has_explosives and - Progressive_Hookshot and Boss_Key_Spirit_Temple" + "Spirit Temple Shifting Wall Recovery Heart 1": "Hookshot", + "Spirit Temple Shifting Wall Recovery Heart 2": "Hookshot", + "Spirit Temple Big Mirror Flying Pot 1": "True", + "Spirit Temple Big Mirror Flying Pot 2": "True", + "Spirit Temple Big Mirror Flying Pot 3": "True", + "Spirit Temple Big Mirror Flying Pot 4": "True", + "Spirit Temple Big Mirror Flying Pot 5": "True", + "Spirit Temple Big Mirror Flying Pot 6": "True" + }, + "exits": { + "Spirit Temple Boss Door": " + (spirit_temple_shortcuts or (has_explosives and Mirror_Shield)) and Hookshot" } } -] +] \ No newline at end of file diff --git a/worlds/oot/data/World/Water Temple MQ.json b/worlds/oot/data/World/Water Temple MQ.json index 05d3a7829e6d..bcc56b4ac1d9 100644 --- a/worlds/oot/data/World/Water Temple MQ.json +++ b/worlds/oot/data/World/Water Temple MQ.json @@ -2,75 +2,253 @@ { "region_name": "Water Temple Lobby", "dungeon": "Water Temple", - "events": { - "Water Temple Clear": "Boss_Key_Water_Temple and can_use(Longshot)" - }, - "locations": { - "Water Temple Morpha Heart": "Boss_Key_Water_Temple and can_use(Longshot)", - "Morpha": "Boss_Key_Water_Temple and can_use(Longshot)" - }, "exits": { "Lake Hylia": "True", - "Water Temple Dive": " - (can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and can_use(Iron_Boots)", - "Water Temple Dark Link Region": " - Small_Key_Water_Temple and can_use(Longshot)" + "Water Temple Dive": "is_adult and (Zora_Tunic or logic_fewer_tunic_requirements) and Iron_Boots", + "Water Temple Dark Link Region": "Small_Key_Water_Temple and can_use(Longshot)", + "Water Temple Boss Door": "can_use(Longshot)" } }, { "region_name": "Water Temple Dive", "dungeon": "Water Temple", "locations": { - "Water Temple MQ Map Chest": "has_fire_source and can_use(Hookshot)", - "Water Temple MQ Central Pillar Chest": " - can_use(Zora_Tunic) and can_use(Hookshot) and - ((logic_water_mq_central_pillar and can_use(Fire_Arrows)) or - (can_use(Dins_Fire) and can_play(Song_of_Time)))" + "Water Temple MQ Map Chest": "has_fire_source and Hookshot", + "Water Temple MQ L1 Torch Pot 1": "Hookshot or can_play(Zeldas_Lullaby)", + "Water Temple MQ L1 Torch Pot 2": "Hookshot or can_play(Zeldas_Lullaby)", + "Water Temple MQ Lizalfos Hallway Pot 1": "Hookshot or can_play(Zeldas_Lullaby)", + "Water Temple MQ Lizalfos Hallway Pot 2": "Hookshot or can_play(Zeldas_Lullaby)", + "Water Temple MQ Lizalfos Hallway Pot 3": "Hookshot or can_play(Zeldas_Lullaby)", + "Water Temple MQ Central Pillar Upper Crate 1": "can_break_crate", + "Water Temple MQ Central Pillar Upper Crate 2": "can_break_crate", + "Water Temple MQ Lizalfos Hallway Hall Crate 1": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Hall Crate 2": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Hall Crate 3": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Room Crate 1": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Room Crate 2": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Room Crate 3": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Room Crate 4": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)", + "Water Temple MQ Lizalfos Hallway Room Crate 5": " + can_bonk or (can_play(Zeldas_Lullaby) and can_blast_or_smash)" }, "exits": { + "Water Temple Below Central Pillar": " + Zora_Tunic and ((logic_water_mq_central_pillar and can_use(Fire_Arrows)) or + (can_use(Dins_Fire) and can_play(Song_of_Time)))", + "Water Temple Storage Room": "Hookshot", "Water Temple Lowered Water Levels": "can_play(Zeldas_Lullaby)" } }, + { + "region_name": "Water Temple Below Central Pillar", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Central Pillar Chest": "Hookshot", + "Water Temple MQ Central Pillar Lower Crate 1": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 2": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 3": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 4": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 5": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 6": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 7": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 8": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 9": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 10": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 11": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 12": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 13": "can_bonk", + "Water Temple MQ Central Pillar Lower Crate 14": "can_bonk" + } + }, + { + "region_name": "Water Temple Storage Room", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Storage Room Pot 1": "True", + "Water Temple MQ Storage Room Pot 2": "True", + "Water Temple MQ Storage Room Pot 3": "True", + "Water Temple MQ Storage Room Crate 1": "can_break_crate", + "Water Temple MQ Storage Room Crate 2": "can_break_crate", + "Water Temple MQ Storage Room Crate 3": "can_break_crate", + "Water Temple MQ Storage Room Crate 4": "can_break_crate", + "Water Temple MQ Storage Room Crate 5": "can_break_crate", + "Water Temple MQ Storage Room Crate 6": "can_break_crate", + "Water Temple MQ Storage Room Crate 7": "can_break_crate" + } + }, { "region_name": "Water Temple Lowered Water Levels", "dungeon": "Water Temple", "locations": { "Water Temple MQ Compass Chest": " - can_use(Bow) or can_use(Dins_Fire) or - at('Water Temple Lobby', can_use(Sticks) and has_explosives)", - "Water Temple MQ Longshot Chest": "can_use(Hookshot)", - "Water Temple MQ GS Lizalfos Hallway": "can_use(Dins_Fire)", - "Water Temple MQ GS Before Upper Water Switch": "can_use(Longshot)" + Bow or can_use(Dins_Fire) or at('Water Temple Lobby', can_use(Sticks))", + "Water Temple MQ Longshot Chest": "Hookshot", + "Water Temple MQ Lizalfos Hallway Gate Pot 1": "can_use(Dins_Fire)", + "Water Temple MQ Lizalfos Hallway Gate Pot 2": "can_use(Dins_Fire)", + "Water Temple MQ Lizalfos Hallway Gate Crate 1": "can_use(Dins_Fire) and can_break_crate", + "Water Temple MQ Lizalfos Hallway Gate Crate 2": "can_use(Dins_Fire) and can_break_crate", + "Water Temple MQ GS Lizalfos Hallway": "can_use(Dins_Fire)" + }, + "exits": { + "Water Temple Before Upper Water Switch": "Hookshot" + } + }, + { + "region_name": "Water Temple Before Upper Water Switch", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Before Upper Water Switch Pot 1": "True", + "Water Temple MQ Before Upper Water Switch Pot 2": "True", + "Water Temple MQ Before Upper Water Switch Pot 3": "True", + "Water Temple MQ Before Upper Water Switch Lower Crate 1": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Lower Crate 2": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Lower Crate 3": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Lower Crate 4": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Lower Crate 5": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Lower Crate 6": "can_break_crate", + "Water Temple MQ Before Upper Water Switch Upper Crate 1": "Longshot and can_break_crate", + "Water Temple MQ Before Upper Water Switch Upper Crate 2": "Longshot and can_break_crate", + "Water Temple MQ GS Before Upper Water Switch": "Longshot" } }, { "region_name": "Water Temple Dark Link Region", "dungeon": "Water Temple", "locations": { - "Water Temple MQ Boss Key Chest": " - (can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and can_use(Dins_Fire) and - (logic_water_dragon_jump_dive or can_dive or can_use(Iron_Boots))", + "Water Temple MQ Before Dark Link Lower Pot": "True", + "Water Temple MQ Before Dark Link Top Pot 1": "True", + "Water Temple MQ Before Dark Link Top Pot 2": "True", + "Water Temple MQ Room After Dark Link Pot": "True", + "Water Temple MQ River Pot": "True", + "Water Temple MQ Dragon Statue Near Door Crate 1": "can_break_crate", + "Water Temple MQ Dragon Statue Near Door Crate 2": "can_break_crate", "Water Temple MQ GS River": "True", "Fairy Pot": "has_bottle", "Nut Pot": "True" }, "exits": { - "Water Temple Basement Gated Areas": " - (can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and - can_use(Dins_Fire) and can_use(Iron_Boots)" + "Water Temple Dragon Statue": " + (Zora_Tunic or logic_fewer_tunic_requirements) and + (logic_water_dragon_jump_dive or can_dive or Iron_Boots)" + } + }, + { + "region_name": "Water Temple Dragon Statue", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Dragon Statue By Torches Crate 1": "can_break_crate", + "Water Temple MQ Dragon Statue By Torches Crate 2": "can_break_crate", + "Water Temple MQ Dragon Statue Submerged Crate 1": " + (Iron_Boots and can_bonk) or (has_bombchus and (can_dive or Iron_Boots))", + "Water Temple MQ Dragon Statue Submerged Crate 2": " + (Iron_Boots and can_bonk) or (has_bombchus and (can_dive or Iron_Boots))", + "Water Temple MQ Dragon Statue Submerged Crate 3": " + (Iron_Boots and can_bonk) or (has_bombchus and (can_dive or Iron_Boots))", + "Water Temple MQ Dragon Statue Submerged Crate 4": " + (Iron_Boots and can_bonk) or (has_bombchus and (can_dive or Iron_Boots))" + }, + "exits": { + "Water Temple Boss Key Chest Room": "has_fire_source" + } + }, + { + "region_name": "Water Temple Boss Key Chest Room", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Boss Key Chest": "can_use(Dins_Fire)", + "Water Temple MQ Boss Key Chest Room Pot": "True", + "Water Temple MQ Boss Key Chest Room Upper Crate": "can_break_crate", + "Water Temple MQ Boss Key Chest Room Lower Crate 1": "can_break_crate", + "Water Temple MQ Boss Key Chest Room Lower Crate 2": "can_break_crate", + "Water Temple MQ Boss Key Chest Room Lower Crate 3": "can_break_crate", + "Water Temple MQ Boss Key Chest Room Lower Crate 4": "can_break_crate" + }, + "exits": { + "Water Temple Basement Gated Areas": "can_use(Dins_Fire) and Iron_Boots" } }, { "region_name": "Water Temple Basement Gated Areas", "dungeon": "Water Temple", "locations": { - "Water Temple MQ Freestanding Key": " + "Water Temple MQ Freestanding Key Area Front Crate 1": "can_break_crate", + "Water Temple MQ Freestanding Key Area Front Crate 2": "can_break_crate", + "Water Temple MQ Freestanding Key Area Submerged Crate 1": "can_bonk or has_bombchus", + "Water Temple MQ Freestanding Key Area Submerged Crate 2": "can_bonk or has_bombchus", + "Water Temple MQ Freestanding Key Area Submerged Crate 3": "can_bonk or has_bombchus", + "Water Temple MQ Freestanding Key Area Submerged Crate 4": "can_bonk or has_bombchus", + "Water Temple MQ Freestanding Key Area Submerged Crate 5": "can_bonk or has_bombchus", + "Water Temple MQ Freestanding Key Area Submerged Crate 6": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 1": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 2": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 3": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 4": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 5": "can_bonk or has_bombchus", + "Water Temple MQ Triple Wall Torch Submerged Crate 6": "can_bonk or has_bombchus" + }, + "exits": { + "Water Temple Freestanding Key Room": " Hover_Boots or can_use(Scarecrow) or logic_water_north_basement_ledge_jump", - "Water Temple MQ GS Triple Wall Torch": " - can_use(Fire_Arrows) and (Hover_Boots or can_use(Scarecrow))", - "Water Temple MQ GS Freestanding Key Area": " - logic_water_mq_locked_gs or ((Small_Key_Water_Temple, 2) and - (Hover_Boots or can_use(Scarecrow) or logic_water_north_basement_ledge_jump))" + "Water Temple Dodongo Room": "logic_water_mq_locked_gs", + "Water Temple Triple Wall Torch": "can_use(Fire_Arrows) and (Hover_Boots or can_use(Scarecrow))" + } + }, + { + "region_name": "Water Temple Freestanding Key Room", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Freestanding Key": "can_break_crate", + "Water Temple MQ Freestanding Key Room Pot": "True", + "Water Temple MQ Freestanding Key Room Crate 1": "can_break_crate", + "Water Temple MQ Freestanding Key Room Crate 2": "can_break_crate", + "Water Temple MQ Freestanding Key Room Crate 3": "can_break_crate", + "Water Temple MQ Freestanding Key Room Crate 4": "can_break_crate", + "Water Temple MQ Freestanding Key Room Crate 5": "can_break_crate" + }, + "exits": { + "Water Temple Dodongo Room": "(Small_Key_Water_Temple, 2)" + } + }, + { + "region_name": "Water Temple Dodongo Room", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Dodongo Room Pot 1": "True", + "Water Temple MQ Dodongo Room Pot 2": "True", + "Water Temple MQ Dodongo Room Lower Crate 1": "can_break_crate", + "Water Temple MQ Dodongo Room Lower Crate 2": "can_break_crate", + "Water Temple MQ Dodongo Room Lower Crate 3": "can_break_crate", + "Water Temple MQ Dodongo Room Upper Crate": "can_break_crate", + "Water Temple MQ Dodongo Room Hall Crate": "can_break_crate", + "Water Temple MQ Freestanding Key Area Behind Gate Crate 1": "can_break_crate", + "Water Temple MQ Freestanding Key Area Behind Gate Crate 2": "can_break_crate", + "Water Temple MQ Freestanding Key Area Behind Gate Crate 3": "can_break_crate", + "Water Temple MQ Freestanding Key Area Behind Gate Crate 4": "can_break_crate", + "Water Temple MQ GS Freestanding Key Area": "True" + }, + "exits": { + "Water Temple Freestanding Key Room": "(Small_Key_Water_Temple, 2)" + } + }, + { + "region_name": "Water Temple Triple Wall Torch", + "dungeon": "Water Temple", + "locations": { + "Water Temple MQ Triple Wall Torch Pot 1": "True", + "Water Temple MQ Triple Wall Torch Pot 2": "True", + "Water Temple MQ Triple Wall Torch Pot 3": "True", + "Water Temple MQ Triple Wall Torch Pot 4": "True", + "Water Temple MQ Triple Wall Torch Behind Gate Crate 1": "can_break_crate", + "Water Temple MQ Triple Wall Torch Behind Gate Crate 2": "can_break_crate", + "Water Temple MQ Triple Wall Torch Behind Gate Crate 3": "can_break_crate", + "Water Temple MQ GS Triple Wall Torch": "True" } } ] diff --git a/worlds/oot/data/World/Water Temple.json b/worlds/oot/data/World/Water Temple.json index ec1a1a861d1f..cce5ecb63f2a 100644 --- a/worlds/oot/data/World/Water Temple.json +++ b/worlds/oot/data/World/Water Temple.json @@ -1,103 +1,118 @@ -[ +[ { "region_name": "Water Temple Lobby", "dungeon": "Water Temple", "events": { + # Child can access only falling platform room and L2 pots as the sole entrant into the temple + # Use Child_Water_Temple for cases where child assists after the water is lowered "Child Water Temple": "is_child", - # Child can access only the falling platform room as the sole entrant into Water Temple. - # Use Child_Water_Temple for cases where child assists after the water is lowered. + # Use Raise_Water_Level to ensure the water level can be raised if it were to be lowered. "Raise Water Level": " (is_adult and (Hookshot or Hover_Boots or Bow)) or (has_fire_source_with_torch and can_use_projectile)" - # Ensure that the water level can be raised if it were to be lowered. + }, + "locations": { + "Water Temple Main Room L2 Pot 1": " + at('Water Temple Lowered Water Levels', True) or can_use(Boomerang) or + ((can_use(Iron_Boots) or (Progressive_Scale, 2)) and + (can_use(Bow) or can_use(Hookshot) or can_use(Slingshot)) and + (can_use(Zora_Tunic) or logic_fewer_tunic_requirements))", + "Water Temple Main Room L2 Pot 2": " + at('Water Temple Lowered Water Levels', True) or can_use(Boomerang) or + ((can_use(Iron_Boots) or (Progressive_Scale, 2)) and + (can_use(Bow) or can_use(Hookshot) or can_use(Slingshot)) and + (can_use(Zora_Tunic) or logic_fewer_tunic_requirements))", + "Fairy Pot": "has_bottle and can_use(Longshot)" }, "exits": { "Lake Hylia": "True", - "Water Temple Highest Water Level": "Raise_Water_Level", "Water Temple Dive": " - (can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and - ((logic_water_temple_torch_longshot and can_use(Longshot)) or can_use(Iron_Boots))" + is_adult and (Zora_Tunic or logic_fewer_tunic_requirements) and + ((logic_water_temple_torch_longshot and Longshot) or Iron_Boots)", + "Water Temple Falling Platform Room": "Raise_Water_Level and (Small_Key_Water_Temple, 4)", + "Water Temple Boss Door": "can_use(Longshot)" } }, { - "region_name": "Water Temple Highest Water Level", - "dungeon": "Water Temple", - "events": { - "Water Temple Clear": "Boss_Key_Water_Temple and can_use(Longshot)" - }, + "region_name": "Water Temple Dive", + "dungeon": "Water Temple", "locations": { - "Morpha": "Boss_Key_Water_Temple and can_use(Longshot)", - "Water Temple Morpha Heart": "Boss_Key_Water_Temple and can_use(Longshot)", - "Fairy Pot": "has_bottle and can_use(Longshot)" + "Water Temple Map Chest": "Raise_Water_Level", + "Water Temple Compass Chest": "(can_play(Zeldas_Lullaby) or Iron_Boots) and Hookshot", + "Water Temple L1 Torch Pot 1": "(Iron_Boots and Hookshot) or can_play(Zeldas_Lullaby)", + "Water Temple L1 Torch Pot 2": "(Iron_Boots and Hookshot) or can_play(Zeldas_Lullaby)", + "Water Temple Near Compass Pot 1": "(can_play(Zeldas_Lullaby) or Iron_Boots) and Hookshot", + "Water Temple Near Compass Pot 2": "(can_play(Zeldas_Lullaby) or Iron_Boots) and Hookshot", + "Water Temple Near Compass Pot 3": "(can_play(Zeldas_Lullaby) or Iron_Boots) and Hookshot" }, "exits": { - "Water Temple Falling Platform Room": "(Small_Key_Water_Temple, 4)" + "Water Temple Lowered Water Levels": "can_play(Zeldas_Lullaby)", + "Water Temple North Basement": " + (Iron_Boots or can_play(Zeldas_Lullaby)) and + (Longshot or (logic_water_boss_key_region and Hover_Boots)) and + (Small_Key_Water_Temple, 4)" } }, { - "region_name": "Water Temple Dive", + "region_name": "Water Temple Lowered Water Levels", "dungeon": "Water Temple", "locations": { - "Water Temple Map Chest": "Raise_Water_Level", - "Water Temple Compass Chest": " - (can_play(Zeldas_Lullaby) or Iron_Boots) and can_use(Hookshot)", "Water Temple Torches Chest": " - (Bow or can_use(Dins_Fire) or - (Child_Water_Temple and Sticks and Kokiri_Sword and Magic_Meter)) and - can_play(Zeldas_Lullaby)", - "Water Temple Central Bow Target Chest": " - Progressive_Strength_Upgrade and can_play(Zeldas_Lullaby) and - ((Bow and (logic_water_central_bow or Hover_Boots or can_use(Longshot))) or - (logic_water_central_bow and Child_Water_Temple and Slingshot and at('Water Temple Middle Water Level', True)))", - "Water Temple GS Behind Gate": " - (can_use(Hookshot) or can_use(Hover_Boots)) and - has_explosives and can_play(Zeldas_Lullaby) and - (can_use(Iron_Boots) or can_dive)", + Bow or can_use(Dins_Fire) or + (Child_Water_Temple and Sticks and Kokiri_Sword and Magic_Meter)", "Water Temple GS Central Pillar": " - can_play(Zeldas_Lullaby) and - (((can_use(Longshot) or (logic_water_central_gs_fw and can_use(Hookshot) and can_use(Farores_Wind))) and - ((Small_Key_Water_Temple, 5) or can_use(Bow) or can_use(Dins_Fire))) or - (logic_water_central_gs_irons and can_use(Hookshot) and can_use(Iron_Boots) and - (can_use(Bow) or can_use(Dins_Fire))) or - (logic_water_central_gs_fw and Child_Water_Temple and Boomerang and can_use(Farores_Wind) and - (Sticks or can_use(Dins_Fire) or - ((Small_Key_Water_Temple, 5) and (can_use(Hover_Boots) or can_use(Bow))))))" + ((Longshot or (logic_water_central_gs_fw and Hookshot and can_use(Farores_Wind))) and + ((Small_Key_Water_Temple, 5) or Bow or can_use(Dins_Fire))) or + (logic_water_central_gs_irons and Hookshot and Iron_Boots and + (Bow or can_use(Dins_Fire))) or + (logic_water_central_gs_fw and Child_Water_Temple and Boomerang and can_use(Farores_Wind) and + Raise_Water_Level and ((Small_Key_Water_Temple, 5) or Sticks or can_use(Dins_Fire)))" }, "exits": { - "Water Temple Cracked Wall": " - can_play(Zeldas_Lullaby) and (can_use(Hookshot) or can_use(Hover_Boots)) and - (logic_water_cracked_wall_nothing or (logic_water_cracked_wall_hovers and can_use(Hover_Boots)))", + "Water Temple South Basement": " + has_explosives and (Iron_Boots or can_dive) and (Hookshot or Hover_Boots)", "Water Temple Middle Water Level": " - (Bow or can_use(Dins_Fire) or - ((Small_Key_Water_Temple, 5) and can_use(Hookshot)) or - (Child_Water_Temple and Sticks)) and - can_play(Zeldas_Lullaby)", - "Water Temple North Basement": " - (Small_Key_Water_Temple, 4) and - (can_use(Longshot) or (logic_water_boss_key_region and can_use(Hover_Boots))) and - (can_use(Iron_Boots) or can_play(Zeldas_Lullaby))", + Bow or can_use(Dins_Fire) or (Child_Water_Temple and Sticks) or + ((Small_Key_Water_Temple, 5) and Hookshot)", + "Water Temple Cracked Wall": " + Raise_Water_Level and + (logic_water_cracked_wall_nothing or (logic_water_cracked_wall_hovers and Hover_Boots))", + "Water Temple Central Bow Target": " + Progressive_Strength_Upgrade and Bow and + (logic_water_central_bow or Hover_Boots or Longshot)", "Water Temple Dragon Statue": " - can_play(Zeldas_Lullaby) and Progressive_Strength_Upgrade and - ((Iron_Boots and can_use(Hookshot)) or - (logic_water_dragon_adult and (has_bombchus or can_use(Bow) or can_use(Hookshot)) and (can_dive or Iron_Boots)) or - (logic_water_dragon_child and Child_Water_Temple and (has_bombchus or Slingshot or Boomerang) and can_dive))" + Progressive_Strength_Upgrade and + ((Iron_Boots and Hookshot) or + (logic_water_dragon_adult and + (has_bombchus or Bow or Hookshot) and (can_dive or Iron_Boots)) or + (logic_water_dragon_child and Child_Water_Temple and + (has_bombchus or Slingshot or Boomerang) and can_dive))" } }, { - "region_name": "Water Temple North Basement", + "region_name": "Water Temple South Basement", "dungeon": "Water Temple", "locations": { - "Water Temple Boss Key Chest": " - (Small_Key_Water_Temple, 5) and - (logic_water_bk_jump_dive or can_use(Iron_Boots)) and - (logic_water_north_basement_ledge_jump or (has_explosives and Progressive_Strength_Upgrade) or Hover_Boots)", - "Water Temple GS Near Boss Key Chest": "True", - # Longshot just reaches without the need to actually go near, - # Otherwise you have hovers and just hover over and collect with a jump slash - "Fairy Pot": " - has_bottle and (Small_Key_Water_Temple, 5) and - (logic_water_bk_jump_dive or can_use(Iron_Boots)) and - (logic_water_north_basement_ledge_jump or (has_explosives and Progressive_Strength_Upgrade) or Hover_Boots)" + "Water Temple Behind Gate Pot 1": "True", + "Water Temple Behind Gate Pot 2": "True", + "Water Temple Behind Gate Pot 3": "True", + "Water Temple Behind Gate Pot 4": "True", + "Water Temple GS Behind Gate": "True" + } + }, + { + "region_name": "Water Temple Middle Water Level", + "dungeon": "Water Temple", + "locations": { + "Water Temple Central Pillar Chest": " + ((Small_Key_Water_Temple, 5) or Bow or can_use(Dins_Fire)) and + Iron_Boots and Zora_Tunic and Hookshot" + }, + "exits": { + "Water Temple Cracked Wall": "True", + "Water Temple Central Bow Target": " + Progressive_Strength_Upgrade and + logic_water_central_bow and Child_Water_Temple and Slingshot" } }, { @@ -108,22 +123,38 @@ } }, { - "region_name": "Water Temple Dragon Statue", + "region_name": "Water Temple Central Bow Target", "dungeon": "Water Temple", "locations": { - "Water Temple Dragon Chest": "True" + "Water Temple Central Bow Target Chest": "True", + "Water Temple Central Bow Target Pot 1": "True", + "Water Temple Central Bow Target Pot 2": "True" } }, { - "region_name": "Water Temple Middle Water Level", + "region_name": "Water Temple North Basement", "dungeon": "Water Temple", "locations": { - "Water Temple Central Pillar Chest": " - can_use(Iron_Boots) and can_use(Zora_Tunic) and can_use(Hookshot) and - ((Small_Key_Water_Temple, 5) or can_use(Bow) or can_use(Dins_Fire))" + "Water Temple North Basement Block Puzzle Pot 1": "True", + "Water Temple North Basement Block Puzzle Pot 2": "True", + # Longshot reaches without the need to actually go near + # Otherwise you have Hovers and can you hover over and collect with a jumpslash + "Water Temple GS Near Boss Key Chest": "True" }, "exits": { - "Water Temple Cracked Wall": "True" + "Water Temple Boss Key Chest Room": " + (Small_Key_Water_Temple, 5) and + (logic_water_bk_jump_dive or Iron_Boots) and + (logic_water_north_basement_ledge_jump or Hover_Boots or + (has_explosives and Progressive_Strength_Upgrade))" + } + }, + { + "region_name": "Water Temple Boss Key Chest Room", + "dungeon": "Water Temple", + "locations": { + "Water Temple Boss Key Chest": "True", + "Fairy Pot": "has_bottle" } }, { @@ -136,7 +167,7 @@ (logic_water_falling_platform_gs_boomerang and can_use(Boomerang))" }, "exits": { - "Water Temple Dark Link Region": "(Small_Key_Water_Temple, 5) and can_use(Hookshot)" + "Water Temple Dark Link Region": "can_use(Hookshot) and (Small_Key_Water_Temple, 5)" } }, { @@ -144,19 +175,39 @@ "dungeon": "Water Temple", "locations": { "Water Temple Longshot Chest": "True", - "Water Temple River Chest": "can_play(Song_of_Time) and Bow", + "Water Temple Like Like Pot 1": "True", + "Water Temple Like Like Pot 2": "True" + }, + "exits": { + "Water Temple River": "can_play(Song_of_Time)" + } + }, + { + "region_name": "Water Temple River", + "dungeon": "Water Temple", + "locations": { + "Water Temple River Chest": "Bow", + "Water Temple River Recovery Heart 1": "True", + "Water Temple River Recovery Heart 2": "True", + "Water Temple River Recovery Heart 3": "True", + "Water Temple River Recovery Heart 4": "True", + "Water Temple River Pot 1": "True", "Water Temple GS River": " - can_play(Song_of_Time) and - ((Iron_Boots and (can_use(Zora_Tunic) or logic_fewer_tunic_requirements)) or - (logic_water_river_gs and can_use(Longshot) and (Bow or has_bombchus)))", - "Fairy Pot": - "has_bottle and can_play(Song_of_Time)" + (Iron_Boots and (Zora_Tunic or logic_fewer_tunic_requirements)) or + (logic_water_river_gs and Longshot and (Bow or has_bombchus))", + "Fairy Pot": "has_bottle" }, "exits": { "Water Temple Dragon Statue": " - (can_use(Zora_Tunic) or logic_fewer_tunic_requirements) and - can_play(Song_of_Time) and Bow and + Bow and (Zora_Tunic or logic_fewer_tunic_requirements) and (Iron_Boots or logic_water_dragon_jump_dive or logic_water_dragon_adult)" } + }, + { + "region_name": "Water Temple Dragon Statue", + "dungeon": "Water Temple", + "locations": { + "Water Temple Dragon Chest": "True" + } } ] diff --git a/worlds/oot/data/blue_fire_arrow_item_name_eng.ia4 b/worlds/oot/data/blue_fire_arrow_item_name_eng.ia4 new file mode 100644 index 000000000000..36089c80477e Binary files /dev/null and b/worlds/oot/data/blue_fire_arrow_item_name_eng.ia4 differ diff --git a/worlds/oot/data/custom_music_exclusion.txt b/worlds/oot/data/custom_music_exclusion.txt new file mode 100644 index 000000000000..efb9985348a7 --- /dev/null +++ b/worlds/oot/data/custom_music_exclusion.txt @@ -0,0 +1,3 @@ +# To omit a track from shuffled music, list the filename of its +# .meta file below. One per line +# Lines that begin with # are comments and not parsed diff --git a/worlds/oot/data/generated/rom_patch.txt b/worlds/oot/data/generated/rom_patch.txt index 0d78b0bf0cc4..51224614f006 100644 --- a/worlds/oot/data/generated/rom_patch.txt +++ b/worlds/oot/data/generated/rom_patch.txt @@ -1,7 +1,7 @@ -10,107b6b7a -14,368db766 +10,10735d3a +14,c71e4f52 d1b0,3480000 -d1b4,348f330 +d1b4,34e1c40 d1b8,3480000 d1c0,0 d1c4,0 @@ -186,23 +186,94 @@ d288,0 89ebe8,0 89ebec,0 89ebf0,0 -a88f78,c1023ae -a89048,c1023c7 -a98c30,c1003cb -a9e838,8100781 -ac7ad4,c10034b +a87af8,c1026c5 +a87afc,2002025 +a87b00,14400180 +a87b04,8fbf001c +a87b08,10000005 +a87b0c,0 +a87b10,0 +a87b14,0 +a87b18,0 +a87dc8,c103ec5 +a87e24,c103ec5 +a87e80,c103ec5 +a880d4,c103ee3 +a88490,c100451 +a88494,0 +a88498,8602001c +a8849c,24010003 +a884a4,0 +a88c0c,810045d +a88c10,2003025 +a88c20,810045d +a88c24,2003025 +a88c34,810045d +a88c38,2003025 +a88c48,810045d +a88c4c,2003025 +a88c70,810045d +a88c74,2003025 +a88c7c,810045d +a88c80,2003025 +a88c88,810045d +a88c8c,2003025 +a88cb0,810045d +a88cb4,2003025 +a88cc4,810045d +a88cc8,2003025 +a88cd8,810045d +a88cdc,2003025 +a88cec,810045d +a88cf0,2003025 +a88d00,810045d +a88d04,2003025 +a88d14,810045d +a88d18,2003025 +a88d44,810045d +a88d48,2003025 +a88d50,810045d +a88d54,2003025 +a88f64,c10048e +a88f78,c103bf8 +a88f9c,c1004b5 +a88fa0,0 +a89048,c103c11 +a89490,81026fe +a89494,0 +a8972c,c1026ad +a897c0,c100448 +a897c4,0 +a897c8,0 +a897cc,0 +a897d0,0 +a897d4,0 +a897d8,0 +a897dc,0 +a897e0,0 +a897e4,0 +a89958,c1026ad +a96e5c,8101124 +a98c30,c10043b +a99d48,c10112b +a9aaf0,c100b04 +a9aaf4,0 +a9ab0c,c100ae6 +a9ab10,0 +a9e838,8100889 +ac7ad4,c1003bb ac8608,902025 ac860c,848e00a4 ac8610,34010043 ac8614,0 ac8618,0 ac91b4,0 -ac9abc,c10040c +ac9abc,c100513 ac9ac0,0 -accd34,c1004c6 +accd34,c1005cd accd38,8e190000 -accde0,c101bac -acce18,c1008db +accde0,c102859 +acce18,c1009e8 acce1c,8e0200a4 acce20,1060001e acce24,0 @@ -211,11 +282,17 @@ acce2c,0 acce34,0 acce38,0 acce3c,0 -acce88,c101a70 +acce88,c1024e7 acce8c,34040001 acce90,0 acce94,0 acce98,0 +acd024,afbf0014 +acd028,c1033ed +acd02c,0 +acd030,8fbf0014 +acd034,3e00008 +acd038,27bd0018 ad193c,10000012 ada8a8,0 ada8ac,0 @@ -229,46 +306,56 @@ adaa78,0 adaba8,0 adabcc,0 adabe4,0 -ae5764,81006a7 +ae5764,81007af ae5768,0 -ae59e0,81006c3 -ae5df8,c100404 +ae59e0,81007cb +ae5df8,c10050b ae5e04,0 ae74d8,340e0000 ae807c,6010007 ae8080,84b80030 -ae8084,c100b29 +ae8084,c100c89 ae8088,0 ae8090,0 ae8094,0 ae8098,0 -ae986c,8100b09 +ae986c,8100c69 ae9870,3c01800f ae9ed8,35ee0000 -aeb67c,c1009b8 +aeb67c,c100aca aeb680,0 aeb764,26380008 aeb768,ae9802b0 -aeb76c,c101de8 +aeb76c,c102a95 aeb778,400821 -af1814,c100e6a +af1398,92020852 +af13ac,92020852 +af1814,c10103e af1818,0 af74f8,afbf0044 -af74fc,c100a3a +af74fc,c100b9a af7500,0 af7504,8fbf0044 af7650,afbf0034 -af7654,c100a48 +af7654,c100ba8 af7658,0 af765c,8fbf0034 af76b8,afbf000c -af76bc,c100a2f +af76bc,c100b8f af76c4,8fbf000c +b06248,c1010ad +b0624c,0 b06400,820f0ede b0640c,31f80002 +b06534,81040ea +b06680,810414c +b06684,0 b06bb8,34190000 -b06c2c,c1007c2 +b06c2c,c1008ca b06c30,a2280020 +b06ce4,c10434b +b06f30,81042ba +b06f34,0 b10218,afa40020 b1021c,30a8fffe b10220,3401000e @@ -319,23 +406,23 @@ b10320,242983fc b10324,242a82c4 b10328,242b83e4 b1032c,242c83d8 -b10cc0,c1004ae +b10cc0,c1005b5 b10cc4,3c010001 -b12a34,c10065a +b12a34,c100762 b12a38,0 -b12a60,8101fca -b12e30,c101fdb -b12e44,8101fea +b12a60,81035eb +b12e30,c1035ff +b12e44,810360e b17bb4,afbf001c b17bb8,afa40140 b17bbc,3c048040 -b17bc0,3406f330 -b17bc4,c00037c -b17bc8,3c050348 -b17bcc,c10033e -b17bd0,0 +b17bc0,3c060006 +b17bc4,24c61c40 +b17bc8,c00037c +b17bcc,3c050348 +b17bd0,c1003ae b17bd4,0 -b2b488,c100bf4 +b2b488,c100dc8 b2b48c,0 b2b490,0 b2b494,0 @@ -344,7 +431,7 @@ b2b49c,0 b2b4f0,3c048013 b2b4f4,24848a50 b2b4f8,3c058040 -b2b4fc,24a52fb0 +b2b4fc,24a536fc b2b500,c015c0c b2b504,34060018 b2b508,3c048013 @@ -365,53 +452,57 @@ b2e830,8ca5b188 b2e854,3c058001 b2e858,8ca5b198 b3dd3c,3c018040 -b3dd40,8c242fc8 +b3dd40,8c243718 b3dd44,c02e195 -b3dd48,8c252fcc +b3dd48,8c25371c b3dd4c,8fbf0014 b3dd54,27bd0018 -b51694,c1007d5 -b516c4,c1007dc -b52784,c1007f6 +b51694,c1008dd +b516c4,c1008e4 +b52784,c1008fe b52788,0 b5278c,8fbf003c b5293c,10000018 -b54b38,c100770 -b54e5c,c10075d +b54b38,c100878 +b54e5c,c100865 b55428,a42063ed -b55a64,c1007a7 +b55a64,c1008af b575c8,acae0000 b58320,afbf0000 -b58324,c1009f4 +b58324,c100b54 b58328,0 b5832c,8fbf0000 b58330,0 +b5d6bc,1ac +b71e60,202018 +b71e64,4010 +b71e68,60080000 b7ec4c,8009a3ac -ba16ac,c100cde +ba16ac,c100eb2 ba16b0,a42fca2a -ba16e0,c100ce9 +ba16e0,c100ebd ba16e4,a439ca2a ba18c4,340c00c8 ba1980,340800c8 ba19dc,0 -ba1c68,c100cf4 +ba1c68,c100ec8 ba1c6c,a42dca2a ba1c70,850e4a38 -ba1cd0,c100cff +ba1cd0,c100ed3 ba1cd4,a439ca2a -ba1d04,c100d0a +ba1d04,c100ede ba1d08,0 ba1e20,340d00c8 -ba32cc,c100d15 +ba32cc,c100ee9 ba32d0,a439ca2a -ba3300,c100d20 +ba3300,c100ef4 ba3304,a42bca2a ba34dc,341800c8 ba3654,0 ba39d0,340d00c8 -baa168,c100cc8 +baa168,c100e9c baa16c,a42eca2a -baa198,c100cd3 +baa198,c100ea7 baa19c,a42dca2a baa3ac,a07025 bac064,7821 @@ -422,10 +513,10 @@ bae5a4,a46b4a6c bae5c8,0 bae864,0 baed6c,0 -baf4f4,c100d2b +baf4f4,c100eff baf4f8,2002025 baf738,102825 -baf73c,c101850 +baf73c,c102223 baf740,330400ff baf744,8fb00018 baf748,8fbf001c @@ -457,92 +548,114 @@ bb6134,0 bb6138,0 bb61e0,0 bb61e4,0 -bb6688,c100669 +bb6688,c100771 bb668c,0 -bb67c4,c100669 +bb66dc,a6c0025e +bb67c4,c100771 bb67c8,1826021 -bb6cf0,c100698 +bb6cf0,c1007a0 bb6cf4,0 bb77b4,0 bb7894,0 bb7ba0,0 bb7bfc,0 -bb7c88,c100663 +bb7c88,c10076b bb7c8c,1cf8821 -bb7d10,c100663 +bb7d10,c10076b bb7d14,0 -bc088c,c100676 +bc088c,c10077e bc0890,0 -bcdbd8,c100d3d -bcecbc,810037c +bc780c,9000009 +bcdbd8,c100f11 +bcecbc,81003ec bcecc0,0 bcecc4,0 bcecc8,0 bceccc,0 bcecd0,0 bcf73c,afbf0000 -bcf740,c100814 +bcf740,c10091c bcf744,0 bcf748,8fbf0000 -bcf914,c10080c +bcf8cc,c10109a +bcf914,c100914 bcf918,0 -bd4c58,c100b9d +bd200c,c100d07 +bd2010,0 +bd4c58,c100d70 bd4c5c,270821 -bd5c58,c1005c5 +bd5c58,c1006cd bd5c5c,301c825 -bd6958,c100a25 +bd6958,c100b85 bd695c,0 -bd9a04,c1009d5 +bd9a04,c100b35 bd9a08,0 -bda0a0,c10034f -bda0d8,c10036c +bda0a0,c1003bf +bda0d8,c1003dc bda0e4,0 -bda264,c10036f +bda264,c1003df bda270,0 -bda2e8,c10038a +bda2e8,c1003fa bda2ec,812a0002 bda2f0,5600018 bda2f4,0 -be1bc8,c1005d6 +be0228,3c188040 +be022c,27182d04 +be0230,c100ca6 +be0234,8fa50054 +be0238,10000096 +be023c,8fbf0024 +be0240,c6040828 +be0244,44813000 +be035c,c100cb4 +be0360,0 +be1bc8,c1006de be1bcc,afa50034 be1c98,3c014218 -be4a14,c100e18 -be4a40,c100e32 -be4a60,8100e4a +be3798,0 +be4a14,c100fec +be4a40,c101006 +be4a60,810101e be4a64,0 -be5d8c,c100e74 +be5328,c100cbf +be532c,0 +be55e4,0 +be5d8c,c101048 be5d90,0 -be9ac0,c1003a6 -be9ad8,c1003b1 +be6538,92190852 +be9ac0,c100416 +be9ad8,c100421 be9adc,8fa20024 be9ae4,8fa40028 be9bdc,24018383 -bea044,c10048a +bea044,c100591 bea048,0 -c004ec,81005ff +c004ec,8100707 c0067c,28610064 c0082c,340e0018 c00830,8c4f00a0 -c01078,c100849 +c01078,c100951 c0107c,0 c01080,0 c01084,0 c01088,0 c0108c,0 -c018a0,c100614 -c06198,c1009c2 +c018a0,c10071c +c06198,c100ad4 c064bc,920201ec c06e5c,920201ec c07230,920201ec c07494,920201ec -c075a8,931901ed -c07648,931901ed +c0754c,81012cb +c07550,0 c0796c,1f0 -c0e77c,c1007bc +c0e77c,c1008c4 c0e780,ac400428 -c5a9f0,c100cc3 -c6c7a8,c100624 -c6c920,c100624 +c3dc04,c100cfa +c3dc08,0 +c5a9f0,c100e97 +c6c7a8,c10072c +c6c920,c10072c c6cedc,340b0001 c6ed84,946f00a2 c6ed88,31f80018 @@ -552,7 +665,7 @@ c6ff38,4600848d c6ff3c,44069000 c6ff44,27bdffe8 c6ff48,afbf0004 -c6ff4c,c100a00 +c6ff4c,c100b60 c6ff50,0 c6ff54,8fbf0004 c6ff58,27bd0018 @@ -563,7 +676,7 @@ c6ff68,0 c6ff6c,0 c6ff70,0 c6ff74,0 -c72c64,c100bdb +c72c64,c100dae c72c68,2002021 c72c70,15e00006 c72c74,0 @@ -577,32 +690,32 @@ c7bd08,0 c82550,0 c892dc,340e0001 c8931c,340a0001 -c89744,c1003d8 +c89744,c1004df c89868,920e1d28 c898a4,92191d29 c898c8,920a1d2a -c8b24c,c100509 +c8b24c,c100610 c8b250,2002025 -ca6dc0,81023e9 +ca6dc0,8103c4e ca6dc4,0 -cb6874,c1006a1 -cc0038,c10046a +cb6874,c1007a9 +cc0038,c100571 cc003c,8fa40018 cc3fa8,a20101f8 cc4024,0 -cc4038,c1009a7 +cc4038,c100ab9 cc403c,240c0004 cc453c,806 -cc8594,c1005e9 +cc8594,c1006f1 cc8598,24180006 -cc85b8,c100dfd +cc85b8,c100fd1 cc85bc,afa50064 -cce9a4,c100ebc +cce9a4,c101090 cce9a8,8e04011c cdf3ec,0 cdf404,0 -cdf420,c1005b9 -cdf638,c1005cd +cdf420,c1006c1 +cdf638,c1006d5 cdf63c,e7a40034 cdf790,2405001e cf1ab8,0 @@ -611,44 +724,57 @@ cf1ac0,31280040 cf1ac4,35390040 cf1ac8,af19b4a8 cf1acc,34090006 -cf73c8,c100bb5 +cf73c8,c100d88 cf73cc,3c010001 -cf7ad4,c1005b3 +cf7ad4,c1006bb cf7ad8,afa50044 d12f78,340f0000 -d357d4,c100b17 +d30fdc,c1010dc +d30fe0,2c02025 +d357d4,c100c77 d35efc,0 d35f54,10000008 -d4bcb0,c100dd8 +d4bcb0,c100fac d4bcb4,8619001c -d4be6c,c10098b -d52698,c1004e5 +d4be6c,c100a9d +d52698,c1005ec d5269c,8e190024 -d5b264,c100aa5 -d5b660,8100aa8 +d55998,0 +d5599c,0 +d559a0,0 +d559a4,0 +d559a8,0 +d55a80,0 +d55a84,0 +d55a88,0 +d55a8c,0 +d55a90,0 +d55a94,0 +d5b264,c100c05 +d5b660,8100c08 d5b664,0 -d5ff94,c100eb2 +d5ff94,c101086 d5ff98,44d9f800 -d62100,c100c65 +d62100,c100e39 d62110,3c014248 d62128,0 d6215c,0 -d621cc,c100c73 +d621cc,c100e47 d621dc,3c014248 d6221c,0 -d68d68,c100c1d +d68d68,c100df1 d68d6c,afb20044 d68d70,3c098040 -d68d74,2529306c +d68d74,252937bc d68d78,81290000 d68d7c,11200186 d68d80,8fbf004c -d68d84,c100c31 +d68d84,c100e05 d68d88,f7b80030 -d69c80,c100c39 -d6cc18,c100cbb +d69c80,c100e0d +d6cc18,c100e8f d6cc1c,0 -d6cdd4,c100cbf +d6cdd4,c100e93 d6cdd8,0 d73118,0 d73128,0 @@ -715,34 +841,38 @@ d7e8d4,340e0001 d7e8d8,804f0ede d7e8e0,5700000f d7eb4c,0 -d7eb70,c100d5a +d7eb70,c100f2e d7eb74,acc80004 d7ebbc,0 -d7ebc8,c100d62 +d7ebc8,c100f36 d7ebf0,27bdffe8 d7ebf4,afbf0014 -d7ebf8,c100d6d +d7ebf8,c100f41 d7ebfc,8ca21c44 d7ec04,0 -d7ec10,c100d71 +d7ec10,c100f45 d7ec14,971804c6 d7ec2c,0 -d7ec34,c100d88 +d7ec34,c100f5c d7ec40,0 d7ec54,0 -d7ec60,8100d7a -d7ec70,8100da0 +d7ec60,8100f4e +d7ec70,8100f74 +db1338,24490065 db13d0,24090076 -db532c,c10043a -db53e8,810241b +db3244,8100b22 +db32c8,c1010a6 +db532c,c100541 +db53e8,8103c80 db53ec,0 +db9e14,c101154 dbec80,34020000 -dbf428,c1007fe +dbf428,c100906 dbf434,44989000 dbf438,e652019c dbf484,0 dbf4a8,0 -dc7090,c10081e +dc7090,c100926 dc7094,c60a0198 dc87a0,0 dc87bc,0 @@ -762,7 +892,7 @@ dd3754,3c064000 dd375c,3c074000 dd3760,0 dd3764,0 -de1018,c102434 +de1018,c103c99 de101c,0 de1020,0 de1024,0 @@ -772,20 +902,37 @@ de1030,0 de1034,0 de1038,0 de103c,0 -de1050,8102434 +de1050,8103c99 de1054,0 +de6f60,8103e25 +de6f64,0 +de7ac8,8103de7 +de7acc,0 +de7b0c,19c +de7c60,8103fca +de7c64,0 +de89fc,8103fb0 +de8a00,0 +de8a5c,1a0 df2644,76 +df3fc0,8103fb7 +df3fc4,0 df7a90,340e0018 df7a94,8c4f00a0 -df7cb0,c100644 +df7cb0,c10074c +dfa520,8103fe1 +dfa524,0 +dfafc4,8103fc3 +dfafc8,0 +dfb038,1ac dfec3c,3c188012 dfec40,8f18ae8c dfec48,33190010 dfec4c,0 e09f68,806f0ede e09f74,31f80004 -e09fb0,c100427 -e0ec50,c100c0b +e09fb0,c10052e +e0ec50,c100ddf e0ec54,2202825 e11e98,9442a674 e11e9c,304e0040 @@ -800,35 +947,35 @@ e11ebc,0 e11ec0,0 e11ec4,0 e11ec8,0 -e11f90,c1004f0 +e11f90,c1005f7 e11f94,0 -e12a04,c100e51 +e12a04,c101025 e12a20,ac8302a4 e1f72c,27bdffe8 e1f730,afbf0014 -e1f734,c100e96 +e1f734,c10106a e1f738,0 e1f73c,8fbf0014 e1f740,27bd0018 e1f744,28410005 e1f748,14200012 e1f74c,24010005 -e1feac,c100ea8 +e1feac,c10107c e1feb0,3c0743cf -e20410,c100b43 +e20410,c100d16 e20414,0 -e206dc,c100b51 +e206dc,c100d24 e206e0,0 -e2076c,c100b61 +e2076c,c100d34 e20770,afa40020 -e20798,c100b59 +e20798,c100d2c e2079c,0 -e24e7c,c1004bd +e24e7c,c1005c4 e24e80,0 -e29388,8100448 -e2a044,c100451 -e2b0b4,c100459 -e2b434,c10085c +e29388,810054f +e2a044,c100558 +e2b0b4,c100560 +e2b434,c100964 e2b438,0 e2b43c,0 e2b440,0 @@ -840,45 +987,75 @@ e2b454,0 e2b458,0 e2b45c,0 e2b460,0 -e2c03c,c10097e +e2c03c,c100a90 e2c040,2442a5d0 e2cc1c,3c058012 e2cc20,24a5a5d0 e2cc24,86080270 e2cc28,15000009 e2cc2c,90b9008a -e2d714,c10082b +e2d714,c100933 e2d71c,340900bf e2d720,0 -e2d890,c10083a +e2d890,c100942 e2d894,0 e2f090,34 -e429dc,c10055e +e429dc,c100665 e429e0,0 e429e4,10000053 e429e8,0 -e42b5c,c100544 +e42b5c,c10064b e42b64,1000000d e42b68,0 -e42c00,c10053c -e42c44,c1005a5 +e42c00,c100643 +e42c44,c1006ac e42c48,860e008a e42c4c,15400045 +e47c08,b825 +e47c0c,c1010e5 +e47c10,2802025 +e47c18,34060004 +e47c20,177040 +e47c34,26f70001 +e47c38,56f1fff4 +e47c5c,b825 +e47c60,c1010ee +e47c74,0 +e47c7c,17c840 +e47c90,26f70001 +e47c94,56f1fff2 +e47d6c,c1010fa +e47d70,0 +e47d74,0 +e47d78,0 +e47d7c,0 +e47d80,0 +e47d84,0 +e47d88,0 +e47d8c,0 +e47d90,0 +e47d94,0 +e47d98,0 +e47d9c,0 +e47da0,0 +e47da4,0 +e47da8,8fbf0034 +e47db0,0 e50888,340403e7 e55c4c,340c0000 e56290,0 e56294,340b401f e56298,0 -e565d0,c100bfc +e565d0,c100dd0 e565d4,0 e565d8,2002025 e571d0,3c038041 -e571d4,906db5c4 +e571d4,906d4958 e571d8,340c0001 e571dc,11ac0004 e571e0,0 e57208,3c038041 -e5720c,906db5c4 +e5720c,906d4958 e57210,340c0002 e57214,11ac000d e57218,0 @@ -893,13 +1070,13 @@ e57238,0 e5723c,0 e59cd4,0 e59cd8,0 -e59e68,810246d +e59e68,8103cd2 e59e6c,0 -e59ecc,8102496 +e59ecc,8103cfb e59ed0,0 -e5b2f4,c100e7f +e5b2f4,c101053 e5b2f8,afa5001c -e5b538,c100e8b +e5b538,c10105f e5b53c,3c07461c e62630,a48001f8 e62634,2463a5d0 @@ -955,7 +1132,7 @@ e6befc,0 e6bf4c,340d0000 e6bf50,0 e7cc90,240e000c -e7d19c,c100d31 +e7d19c,c100f05 e7d1a0,3c050600 e7d1a4,10a80003 e7d1a8,3025 @@ -975,19 +1152,20 @@ e9f5b0,3e00008 e9f5b4,0 e9f5b8,0 e9f5bc,0 -e9f678,c1004f0 +e9f678,c1005f7 e9f67c,0 -e9f7a8,c1004f0 +e9f7a8,c1005f7 e9f7ac,0 -ebb85c,c10062f +ea2664,25299003 +ebb85c,c100737 ebb864,14400012 ebb86c,10000014 -ec1120,c1004f0 +ec1120,c1005f7 ec1124,0 ec68bc,8fad002c ec68c0,340c000a ec68c4,a5ac0110 -ec68c8,c101b6a +ec68c8,c102820 ec68cc,2002021 ec68d0,0 ec68d4,0 @@ -997,24 +1175,44 @@ ec68e0,0 ec69ac,8fad002c ec69b0,340c000a ec69b4,a5ac0110 -ec69b8,c101b6a +ec69b8,c102820 ec69bc,2002021 ec69c0,0 ec69c4,0 ec69c8,0 ec69cc,0 ec69d0,0 -ec6b04,8102402 +ec6b04,8103c67 ec6b08,0 +ec746c,810111d +ec7470,0 +ec7474,0 +ec7478,0 +ec747c,0 +ec7484,0 +ec748c,0 +ec764c,8103d89 +ec7650,0 +ec783c,1b4 +ec8264,8103e3b +ec8268,0 +ec832c,1e0c025 +ec8528,8103e76 +ec852c,0 +ec856c,1b8 ec9ce4,2419007a +ed0aec,c1010c9 +ed0af0,0 +ed0b48,c1010d3 +ed0b4c,c648002c ed2858,20180008 ed2fac,806e0f18 ed2fec,340a0000 ed5a28,340e0018 ed5a2c,8ccf00a0 -ed645c,c100827 +ed645c,c10092f ed6460,0 -ee7b84,c100955 +ee7b84,c100a67 ee7b8c,0 ee7b90,0 ee7b94,0 @@ -1022,20 +1220,55 @@ ee7b98,0 ee7b9c,0 ee7ba0,0 ee7ba4,0 -ee7e4c,c100a8b -ef32b8,c100a80 +ee7e4c,c100beb +ef32b8,c100be0 ef32bc,0 ef32c0,8fbf003c -ef36e4,c100a56 +ef36e4,c100bb6 ef36e8,0 -ef373c,c100a68 -ef4f98,c10079a +ef373c,c100bc8 +ef4f98,c1008a2 ef4f9c,0 +f722a8,de000000 +f722ac,9000000 +f84888,de000000 +f8488c,9000000 +f849a8,de000000 +f849ac,9000000 +feb708,de000000 +feb70c,9000000 +feb788,de000000 +feb78c,9000010 +feb7e8,de000000 +feb7ec,9000000 +feb840,de000000 +feb844,9000010 +fec0d8,de000000 +fec0dc,9000000 +fec188,de000000 +fec18c,9000010 +fec1f8,de000000 +fec1fc,9000000 +17397d8,de000000 +17397dc,9000000 +18b6978,de000000 +18b697c,9000000 +18b6994,73ff200 +18b69a0,f5480800 +18b69b0,de000000 +18b69b4,9000010 +18b69d4,73ff000 +18b6a20,de000000 +18b6a24,9000020 +18b6a3c,73ff200 +18b6a48,f5480800 +18b6a4c,98250 26c10e0,38ff 3480000,80400020 -3480004,80400844 -3480008,8040a334 -3480020,3 +3480004,8040084c +3480008,80411e7c +348000c,80400d7c +3480020,4 3480034,dfdfdfdf 3480038,dfdfdfdf 348003c,dfdfdfdf @@ -1548,12299 +1781,25384 @@ ef4f9c,0 3480828,dfdfdfdf 348082c,dfdfdfdf 3480830,dfdfdfdf -3480844,1f073fd8 -3480848,ff -348084c,ff -3480850,460032 -3480854,5a005a -3480858,ff0000 -348085c,960000 -3480860,ff00a0 -3480868,5000c8 -348086c,50 -3480870,ff0050 -3480874,9600ff -3480878,ff00ff -348087c,32ffff -3480880,64ffff64 -3480884,fa0000fa -3480888,100 -3480cd0,640000 -3480cd4,100 -3480ce8,10000 -3480cf8,27bdffe8 -3480cfc,afbf0010 -3480d00,c101fac -3480d08,3c028012 -3480d0c,2442d2a0 -3480d10,240e0140 -3480d14,3c018010 -3480d18,ac2ee500 -3480d1c,240f00f0 -3480d20,8fbf0010 -3480d24,3e00008 -3480d28,27bd0018 -3480d2c,3c088040 -3480d30,ac4815d4 -3480d34,3e00008 -3480d38,340215c0 -3480d3c,308400ff -3480d40,3c088012 -3480d44,2508a5d0 -3480d48,3401008c -3480d4c,10810016 -3480d50,91020075 -3480d54,3401008d -3480d58,10810013 -3480d5c,91020075 -3480d60,10800011 -3480d64,91020074 -3480d68,3401008a -3480d6c,1081000e -3480d70,91020074 -3480d74,3401008b -3480d78,1081000b -3480d7c,91020074 -3480d80,34010058 -3480d84,10810008 -3480d88,34020000 -3480d8c,34010078 -3480d90,10810005 -3480d94,34020000 -3480d98,34010079 -3480d9c,10810002 -3480da0,34020000 -3480da4,340200ff -3480da8,3e00008 -3480db0,8fa60030 -3480db4,8100372 -3480db8,84c50004 -3480dbc,8fb9002c -3480dc0,8100372 -3480dc4,87250004 -3480dc8,3c0a8041 -3480dcc,254ab58c -3480dd0,8d4a0000 -3480dd4,11400004 -3480ddc,3c058041 -3480de0,24a5b580 -3480de4,8ca50000 -3480de8,3e00008 -3480df0,3c088041 -3480df4,2508b58c -3480df8,8d080000 -3480dfc,11000004 -3480e04,3c038041 -3480e08,2463b57c -3480e0c,8c630000 -3480e10,30fc3 -3480e14,614026 -3480e18,1014023 -3480e1c,a0880852 -3480e20,3e00008 -3480e28,3c088040 -3480e2c,25080cd6 -3480e30,91080000 -3480e34,1500000c -3480e38,240bffff -3480e3c,3c088041 -3480e40,2508b58c -3480e44,8d080000 -3480e48,11000007 -3480e4c,1405821 -3480e50,3c088041 -3480e54,2508b578 -3480e58,8d080000 -3480e5c,15000002 -3480e60,240bffff -3480e64,340b0001 -3480e68,5600009 -3480e70,27bdffe8 -3480e74,afab0010 -3480e78,afbf0014 -3480e7c,c01c508 -3480e84,8fab0010 -3480e88,8fbf0014 -3480e8c,27bd0018 -3480e90,3e00008 -3480e98,90450003 -3480e9c,3c088041 -3480ea0,2508b58c -3480ea4,8d080000 -3480ea8,11000004 -3480eb0,3c058041 -3480eb4,24a5b584 -3480eb8,8ca50000 -3480ebc,3e00008 -3480ec4,27bdffe8 -3480ec8,afb00010 -3480ecc,afbf0014 -3480ed0,3c088041 -3480ed4,2508b590 -3480ed8,8d080000 -3480edc,31080001 -3480ee0,1500000b -3480ee4,34100041 -3480ee8,3c048041 -3480eec,2484b58c -3480ef0,8c840000 -3480ef4,10800006 -3480ef8,90500000 -3480efc,3c088041 -3480f00,2508b588 -3480f04,8d100000 -3480f08,c101f03 -3480f10,c101abd -3480f18,2002821 -3480f1c,8fb00010 -3480f20,8fbf0014 -3480f24,3e00008 -3480f28,27bd0018 -3480f2c,27bdffe0 -3480f30,afa70010 -3480f34,afa20014 -3480f38,afa30018 -3480f3c,afbf001c -3480f40,c101b2e -3480f44,e02821 -3480f48,8fa70010 -3480f4c,8fa20014 -3480f50,8fa30018 -3480f54,8fbf001c -3480f58,3e00008 -3480f5c,27bd0020 -3480f60,27bdffe8 -3480f64,afbf0010 -3480f68,8c881d2c -3480f6c,34090001 -3480f70,94e00 -3480f74,1091024 -3480f78,10400021 -3480f80,94ca02dc -3480f84,3c0b8012 -3480f88,256ba5d0 -3480f8c,948c00a4 -3480f90,3401003d -3480f94,1181000a -3480f9c,8a6021 -3480fa0,918d1d28 -3480fa4,15a00014 -3480fac,340d0001 -3480fb0,a18d1d28 -3480fb4,254a0013 -3480fb8,1000000a -3480fc0,340c0001 -3480fc4,14c6004 -3480fc8,916d0ef2 -3480fcc,1ac7024 -3480fd0,15c00009 -3480fd8,1ac7025 -3480fdc,a16e0ef2 -3480fe0,254a0010 -3480fe4,1294827 -3480fe8,1094024 -3480fec,ac881d2c -3480ff0,c101a70 -3480ff4,1402021 -3480ff8,c10253a -3481000,8fbf0010 -3481004,34020000 -3481008,3e00008 -348100c,27bd0018 -3481010,27bdffe8 -3481014,afbf0010 -3481018,c101a70 -348101c,20e4ffc6 -3481020,340200ff -3481024,8fbf0010 -3481028,3e00008 -348102c,27bd0018 -3481030,27bdffe0 -3481034,afa10010 -3481038,afa30014 -348103c,afbf0018 -3481040,c101a70 -3481044,34040023 -3481048,8fa10010 -348104c,8fa30014 -3481050,8fbf0018 -3481054,3e00008 -3481058,27bd0020 -348105c,27bdffe0 -3481060,afa60010 -3481064,afa70014 -3481068,afbf0018 -348106c,3c018012 -3481070,2421a5d0 -3481074,80280ede -3481078,35080001 -348107c,a0280ede -3481080,c101a70 -3481084,34040027 -3481088,8fa60010 -348108c,8fa70014 -3481090,8fbf0018 -3481094,3e00008 -3481098,27bd0020 -348109c,27bdffe8 -34810a0,afa30010 -34810a4,afbf0014 -34810a8,3c018012 -34810ac,2421a5d0 -34810b0,80280ede -34810b4,35080004 -34810b8,a0280ede -34810bc,3c188040 -34810c0,83180cd8 -34810c4,13000003 -34810cc,c101a70 -34810d0,34040029 -34810d4,240f0001 -34810d8,8fa30010 -34810dc,8fbf0014 -34810e0,3e00008 -34810e4,27bd0018 -34810e8,27bdffd8 -34810ec,afa40010 -34810f0,afa20014 -34810f4,afaf0018 -34810f8,afbf0020 -34810fc,c101a70 -3481100,3404002a -3481104,34050003 -3481108,8fa40010 +348084c,1f073fd9 +3480850,c8 +3480854,ff +3480858,460032 +348085c,5a005a +3480860,ff0000 +3480864,960000 +3480868,ff00a0 +3480870,5000c8 +3480874,50 +3480878,ff0050 +348087c,9600ff +3480880,ff00ff +3480884,32ffff +3480888,64ffff64 +348088c,fa0000fa +3480890,100 +34808a0,10000 +3480d68,1 +3480d7c,4 +3480d98,1 +3480d9c,ffffffff +3480da0,ffffffff +3480da4,ffffffff +3480da8,ffff0000 +3480dc0,640000 +3480dc4,ffff +3480dd0,20202020 +3480dd4,20202020 +3480dd8,20202020 +3480ddc,20202020 +3480de0,20202020 +3480de4,20202020 +3480de8,20202020 +3480dec,20202020 +3480df0,20202020 +3480df4,20202020 +3480df8,20202020 +3480dfc,20202020 +3480e00,20202020 +3480e04,20202020 +3480e08,20202020 +3480e0c,20202020 +3480e10,20202020 +3480e14,20202020 +3480e18,20202020 +3480e1c,20202020 +3480e20,20202020 +3480e24,20202020 +3480e28,20202020 +3480e2c,20202020 +3480e30,20202020 +3480e34,20202020 +3480e38,20202020 +3480e3c,20202020 +3480e40,20202020 +3480e44,20202020 +3480e48,20202020 +3480e4c,20202020 +3480e50,20202020 +3480e54,20202020 +3480e58,20202020 +3480e5c,20202020 +3480e60,20202020 +3480e64,20202020 +3480e68,20202020 +3480e6c,20202020 +3480e70,20202020 +3480e74,20202020 +3480e78,20202020 +3480e7c,20202020 +3480e80,20202020 +3480e84,20202020 +3480e88,20202020 +3480e8c,20202020 +3480e90,20202020 +3480e94,20202020 +3480e98,20202020 +3480e9c,20202000 +3480ea8,1000000 +3480eb8,27bdffe8 +3480ebc,afbf0010 +3480ec0,c1035c9 +3480ec8,3c028012 +3480ecc,2442d2a0 +3480ed0,240e0140 +3480ed4,3c018010 +3480ed8,ac2ee500 +3480edc,240f00f0 +3480ee0,8fbf0010 +3480ee4,3e00008 +3480ee8,27bd0018 +3480eec,3c088040 +3480ef0,ac4815d4 +3480ef4,3e00008 +3480ef8,340215c0 +3480efc,308400ff +3480f00,3c088012 +3480f04,2508a5d0 +3480f08,3401008c +3480f0c,10810016 +3480f10,91020075 +3480f14,3401008d +3480f18,10810013 +3480f1c,91020075 +3480f20,10800011 +3480f24,91020074 +3480f28,3401008a +3480f2c,1081000e +3480f30,91020074 +3480f34,3401008b +3480f38,1081000b +3480f3c,91020074 +3480f40,34010058 +3480f44,10810008 +3480f48,34020000 +3480f4c,34010078 +3480f50,10810005 +3480f54,34020000 +3480f58,34010079 +3480f5c,10810002 +3480f60,34020000 +3480f64,340200ff +3480f68,3e00008 +3480f70,8fa60030 +3480f74,81003e2 +3480f78,84c50004 +3480f7c,8fb9002c +3480f80,81003e2 +3480f84,87250004 +3480f88,3c0a8041 +3480f8c,254a4910 +3480f90,8d4a0000 +3480f94,11400004 +3480f9c,3c058041 +3480fa0,24a54904 +3480fa4,8ca50000 +3480fa8,3e00008 +3480fb0,3c088041 +3480fb4,25084910 +3480fb8,8d080000 +3480fbc,11000004 +3480fc4,3c038041 +3480fc8,24634900 +3480fcc,8c630000 +3480fd0,30fc3 +3480fd4,614026 +3480fd8,1014023 +3480fdc,a0880852 +3480fe0,3e00008 +3480fe8,3c088040 +3480fec,25080d6b +3480ff0,91080000 +3480ff4,1500000c +3480ff8,240bffff +3480ffc,3c088041 +3481000,25084910 +3481004,8d080000 +3481008,11000007 +348100c,1405821 +3481010,3c088041 +3481014,250848fc +3481018,8d080000 +348101c,15000002 +3481020,240bffff +3481024,340b0001 +3481028,5600009 +3481030,27bdffe8 +3481034,afab0010 +3481038,afbf0014 +348103c,c01c508 +3481044,8fab0010 +3481048,8fbf0014 +348104c,27bd0018 +3481050,3e00008 +3481058,90450003 +348105c,3c088041 +3481060,25084910 +3481064,8d080000 +3481068,11000004 +3481070,3c058041 +3481074,24a54908 +3481078,8ca50000 +348107c,3e00008 +3481084,27bdffe8 +3481088,afb00010 +348108c,afbf0014 +3481090,3c088041 +3481094,25084914 +3481098,8d080000 +348109c,31080001 +34810a0,1500000b +34810a4,34100041 +34810a8,3c048041 +34810ac,24844910 +34810b0,8c840000 +34810b4,10800006 +34810b8,90500000 +34810bc,3c088041 +34810c0,2508490c +34810c4,8d100000 +34810c8,c103513 +34810d0,c102535 +34810d8,2002821 +34810dc,8fb00010 +34810e0,8fbf0014 +34810e4,3e00008 +34810e8,27bd0018 +34810ec,27bdffe0 +34810f0,afa70010 +34810f4,afa20014 +34810f8,afa30018 +34810fc,afbf001c +3481100,c1025b9 +3481104,e02821 +3481108,8fa70010 348110c,8fa20014 -3481110,8faf0018 -3481114,8fbf0020 +3481110,8fa30018 +3481114,8fbf001c 3481118,3e00008 -348111c,27bd0028 -3481120,607821 -3481124,81ec0edf -3481128,318e0080 -348112c,11c00003 -3481130,34030005 -3481134,3e00008 -3481138,34020002 +348111c,27bd0020 +3481120,27bdffe0 +3481124,afa40010 +3481128,afbf0014 +348112c,c102694 +3481130,122025 +3481134,8fa40010 +3481138,8fbf0014 348113c,3e00008 -3481140,601021 -3481144,85c200a4 -3481148,3c088012 -348114c,2508a5d0 -3481150,81090edf -3481154,35290080 -3481158,a1090edf -348115c,3e00008 -3481164,27bdfff0 -3481168,afbf0004 -348116c,c035886 -3481174,3c0c8012 -3481178,258ca5d0 -348117c,858d0f2e -3481180,8d980004 -3481184,13000002 -3481188,340e0001 -348118c,340e0002 -3481190,1ae6825 -3481194,a58d0f2e -3481198,8fbf0004 -348119c,27bd0010 -34811a0,3e00008 -34811a8,24090041 -34811ac,27bdffe0 -34811b0,afa80004 -34811b4,afa90008 -34811b8,afaa000c -34811bc,afac0010 -34811c0,3c0affff -34811c4,a5403 -34811c8,3c08801d -34811cc,850c894c -34811d0,118a0002 -34811d8,a500894c -34811dc,3c08801e -34811e0,810a887c -34811e4,11400009 -34811ec,3c090036 -34811f0,94c03 -34811f4,a109887c -34811f8,3c090002 -34811fc,94c03 -3481200,a109895f -3481204,3c08801f -3481208,a1008d38 -348120c,8fac0010 -3481210,8faa000c -3481214,8fa90008 -3481218,8fa80004 -348121c,3e00008 -3481220,27bd0020 -3481228,3c0a8010 -348122c,254ae49c -3481230,8d4a0000 -3481234,1140001e -348123c,3c08801d -3481240,250884a0 -3481244,3c0b0001 -3481248,356b04c4 -348124c,10b4020 -3481250,85090000 -3481254,3c0b0002 -3481258,356b26cc -348125c,14b5020 -3481260,94840 -3481264,12a5021 -3481268,85490000 -348126c,a5091956 -3481270,3c0c801e -3481274,258c84a0 -3481278,34090003 -348127c,a1891e5e -3481280,34090014 -3481284,a1091951 -3481288,34090001 -348128c,3c018040 -3481290,a0291224 -3481294,3c088012 -3481298,2508a5d0 -348129c,850913d2 -34812a0,11200003 -34812a8,34090001 -34812ac,a50913d4 -34812b0,3e00008 -34812b8,3421241c -34812bc,3c0d8040 -34812c0,25ad1224 -34812c4,81a90000 -34812c8,11200008 -34812cc,862a00a4 -34812d0,340b005e -34812d4,114b0005 -34812d8,3c0c801e -34812dc,258c84a0 -34812e0,34090003 -34812e4,a1891e5e -34812e8,a1a00000 -34812ec,3e00008 -34812f4,3c02801d -34812f8,244284a0 -34812fc,3c010001 -3481300,411020 -3481304,3401047e -3481308,a4411e1a -348130c,34010014 -3481310,3e00008 -3481314,a0411e15 -3481318,27bdffe8 -348131c,afbf0014 -3481320,afa40018 -3481324,8e190004 -3481328,17200015 -348132c,8e190000 -3481330,3c018010 -3481334,24219c90 -3481338,19c880 -348133c,3210820 -3481340,90210000 -3481344,34190052 -3481348,1721000d -348134c,8e190000 -3481350,960200a6 -3481354,304c0007 -3481358,398c0007 -348135c,15800008 -3481360,240400aa -3481364,c00a22d -348136c,14400004 -3481370,8e190000 -3481374,341900db -3481378,10000002 -348137c,ae190000 -3481380,340101e1 -3481384,8fbf0014 -3481388,8fa40018 -348138c,3e00008 -3481390,27bd0018 -3481394,3c088040 -3481398,81080cde -348139c,11000005 -34813a0,3c018012 -34813a4,2421a5d0 -34813a8,80280ed6 -34813ac,35080001 -34813b0,a0280ed6 -34813b4,34080000 -34813b8,3e00008 -34813bc,adf90000 -34813c0,3c0b801d -34813c4,256b84a0 -34813c8,856b00a4 -34813cc,340c005a -34813d0,156c0003 -34813d4,340b01a5 -34813d8,a42b1e1a -34813dc,1000000e -34813e0,3c0c8012 -34813e4,258ca5d0 -34813e8,8d8c0004 -34813ec,15800008 -34813f0,3c0b8040 -34813f4,816b0cde -34813f8,11600007 -34813fc,842b1e1a -3481400,340c01a5 -3481404,116c0002 -348140c,10000002 -3481410,340b0129 -3481414,a42b1e1a -3481418,3e00008 -3481424,2202825 -3481428,3c0a801e -348142c,254aaa30 -3481430,c544002c -3481434,3c0bc43c -3481438,256b8000 -348143c,448b3000 -3481440,4606203c -3481448,45000026 -3481450,c5440024 -3481454,3c0bc28a -3481458,448b3000 -348145c,4606203c -3481464,4501001f -348146c,3c0b41c8 -3481470,448b3000 -3481474,4606203c -348147c,45000019 -3481484,3c098040 -3481488,25291420 -348148c,814b0424 -3481490,1160000e -3481494,812e0000 -3481498,340c007e -348149c,116c000b -34814a4,15c00009 -34814a8,340c0001 -34814ac,a12c0000 -34814b0,3c0dc1a0 -34814b4,ad4d0024 -34814b8,3c0d4120 -34814bc,ad4d0028 -34814c0,3c0dc446 -34814c4,25ad8000 -34814c8,ad4d002c -34814cc,11c00005 -34814d4,15600003 -34814d8,340d8000 -34814dc,a54d00b6 -34814e0,a1200000 -34814e4,3e00008 -34814f0,3c0a801e -34814f4,254aaa30 -34814f8,8d4b066c -34814fc,3c0cd000 -3481500,258cffff -3481504,16c5824 -3481508,3e00008 -348150c,ad4b066c -3481510,27bdffe0 -3481514,afbf0014 -3481518,afa40018 -348151c,1c17825 -3481520,ac4f0680 -3481524,34040001 -3481528,c01b638 -3481530,3c088040 -3481534,81080cd8 -3481538,15000007 -3481540,3c04801d -3481544,248484a0 -3481548,3c058040 -348154c,80a50cd9 -3481550,c037500 -3481558,8fa40018 -348155c,8c880138 -3481560,8d090010 -3481564,252a03d4 -3481568,ac8a029c -348156c,8fbf0014 -3481570,3e00008 -3481574,27bd0020 -3481578,27bdffe0 -348157c,afbf0014 -3481580,afa40018 -3481584,3c088040 -3481588,81080cd8 -348158c,1500001a -3481594,3c09801e -3481598,2529887c -348159c,81280000 -34815a0,340b0036 -34815a4,150b001e -34815ac,3c088040 -34815b0,810814ec -34815b4,1500001a -34815bc,34080001 -34815c0,3c018040 -34815c4,a02814ec -34815c8,3c04801d -34815cc,248484a0 -34815d0,3c058040 -34815d4,90a50cda -34815d8,34060000 -34815dc,c037385 -34815e4,34044802 -34815e8,c0191bc -34815f0,10000025 -34815f8,3c04801d -34815fc,248484a0 -3481600,34050065 -3481604,c01bf73 -348160c,34040032 -3481610,c01b638 -3481618,1000000c -3481620,8fa40018 -3481624,3c05801d -3481628,24a584a0 -348162c,c008ab4 -3481634,10400014 -348163c,3c088040 -3481640,810814ec -3481644,11000010 -348164c,8fa40018 -3481650,8c880138 -3481654,8d090010 -3481658,252a035c -348165c,ac8a029c -3481660,3c028012 -3481664,2442a5d0 -3481668,94490ee0 -348166c,352a0020 -3481670,a44a0ee0 -3481674,8c880004 -3481678,3c09ffff -348167c,2529ffff -3481680,1094024 -3481684,ac880004 -3481688,8fbf0014 -348168c,3e00008 -3481690,27bd0020 -3481694,860f00b6 -3481698,9739b4ae -348169c,3c09801e -34816a0,2529aa30 -34816a4,812a0424 -34816a8,11400004 -34816b0,3409007e -34816b4,15490003 -34816bc,3e00008 -34816c0,340a0000 -34816c4,3e00008 -34816c8,340a0001 -34816cc,8c8e0134 -34816d0,15c00002 -34816d4,3c0e4480 -34816d8,ac8e0024 -34816dc,3e00008 -34816e0,8fae0044 -34816e4,260501a4 -34816e8,27bdffe0 -34816ec,afbf0014 -34816f0,afa50018 -34816f4,8625001c -34816f8,52a03 -34816fc,c008134 -3481700,30a5003f -3481704,8fa50018 -3481708,8fbf0014 -348170c,3e00008 -3481710,27bd0020 -3481714,ae19066c -3481718,8e0a0428 -348171c,3c09801e -3481720,2529aa30 -3481724,854b00b6 -3481728,216b8000 +3481140,27bd0020 +3481144,860e014a +3481148,5c00002 +348114c,25ce0001 +3481150,a60e014a +3481154,3e00008 +348115c,3c088041 +3481160,25084920 +3481164,85090000 +3481168,a5000000 +348116c,3e00008 +3481170,afa9001c +3481174,27bdff80 +3481178,afbf0010 +348117c,afa20014 +3481180,afa30018 +3481184,afa4001c +3481188,afa50020 +348118c,afa60024 +3481190,afa70028 +3481194,afb0002c +3481198,afb10030 +348119c,afa10034 +34811a0,602025 +34811a4,2402825 +34811a8,c1027a3 +34811b0,1c40000e +34811b8,8fbf0010 +34811bc,8fa20014 +34811c0,8fa30018 +34811c4,8fa4001c +34811c8,8fa50020 +34811cc,8fa60024 +34811d0,8fa70028 +34811d4,8fb0002c +34811d8,8fb10030 +34811dc,8fa10034 +34811e0,8fa8003c +34811e4,8004b8a +34811e8,27bd0080 +34811ec,24030003 +34811f0,8fbf0010 +34811f4,8fa4001c +34811f8,8fa50020 +34811fc,8fa60024 +3481200,8fa70028 +3481204,8fb0002c +3481208,8fb10030 +348120c,8fa10034 +3481210,10430005 +3481218,8fa20014 +348121c,8fa30018 +3481220,8004be9 +3481224,27bd0080 +3481228,8fa20014 +348122c,8fa30018 +3481230,8004bd6 +3481234,27bd0080 +3481238,27bdff80 +348123c,afbf0010 +3481240,afa20014 +3481244,afa30018 +3481248,afa4001c +348124c,afa50020 +3481250,afa60024 +3481254,afa70028 +3481258,afb0002c +348125c,afb10030 +3481260,afa10034 +3481264,c103bcb +348126c,1c40000d +3481274,8fbf0010 +3481278,8fa20014 +348127c,8fa30018 +3481280,8fa4001c +3481284,8fa50020 +3481288,8fa60024 +348128c,8fa70028 +3481290,8fb0002c +3481294,8fb10030 +3481298,8fa10034 +348129c,c004c54 +34812a4,8fbf0010 +34812a8,8fa20014 +34812ac,8fa30018 +34812b0,8fa4001c +34812b4,8fa50020 +34812b8,8fa60024 +34812bc,8fa70028 +34812c0,8fb0002c +34812c4,8fb10030 +34812c8,8fa10034 +34812cc,3e00008 +34812d0,27bd0080 +34812d4,27bdff80 +34812d8,afbf0010 +34812dc,afa20014 +34812e0,afa30018 +34812e4,afa4001c +34812e8,afa50020 +34812ec,afa60024 +34812f0,afa70028 +34812f4,afb0002c +34812f8,afb10030 +34812fc,afa10034 +3481300,c103bcb +3481308,1040000e +3481310,8fbf0010 +3481314,8fa20014 +3481318,8fa30018 +348131c,8fa4001c +3481320,8fa50020 +3481324,8fa60024 +3481328,8fa70028 +348132c,8fb0002c +3481330,8fb10030 +3481334,8fa10034 +3481338,27bd0080 +348133c,8004c2c +3481344,8fbf0010 +3481348,8fa20014 +348134c,8fa30018 +3481350,8fa4001c +3481354,8fa50020 +3481358,8fa60024 +348135c,8fa70028 +3481360,8fb0002c +3481364,8fb10030 +3481368,8fa10034 +348136c,27bd0080 +3481370,84c2014a +3481374,3e00008 +3481378,2401ffff +348137c,27bdffe8 +3481380,afbf0010 +3481384,8c881d2c +3481388,34090001 +348138c,94e00 +3481390,1091024 +3481394,10400021 +348139c,94ca02dc +34813a0,3c0b8012 +34813a4,256ba5d0 +34813a8,948c00a4 +34813ac,3401003d +34813b0,1181000a +34813b8,8a6021 +34813bc,918d1d28 +34813c0,15a00014 +34813c8,340d0001 +34813cc,a18d1d28 +34813d0,254a0013 +34813d4,1000000a +34813dc,340c0001 +34813e0,14c6004 +34813e4,916d0ef2 +34813e8,1ac7024 +34813ec,15c00009 +34813f4,1ac7025 +34813f8,a16e0ef2 +34813fc,254a0010 +3481400,1294827 +3481404,1094024 +3481408,ac881d2c +348140c,c1024e7 +3481410,1402021 +3481414,c104083 +348141c,8fbf0010 +3481420,34020000 +3481424,3e00008 +3481428,27bd0018 +348142c,27bdffe8 +3481430,afbf0010 +3481434,c1024e7 +3481438,20e4ffc6 +348143c,340200ff +3481440,8fbf0010 +3481444,3e00008 +3481448,27bd0018 +348144c,27bdffe0 +3481450,afa10010 +3481454,afa30014 +3481458,afbf0018 +348145c,c1024e7 +3481460,34040023 +3481464,8fa10010 +3481468,8fa30014 +348146c,8fbf0018 +3481470,3e00008 +3481474,27bd0020 +3481478,27bdffe0 +348147c,afa60010 +3481480,afa70014 +3481484,afbf0018 +3481488,3c018012 +348148c,2421a5d0 +3481490,80280ede +3481494,35080001 +3481498,a0280ede +348149c,c1024e7 +34814a0,34040027 +34814a4,8fa60010 +34814a8,8fa70014 +34814ac,8fbf0018 +34814b0,3e00008 +34814b4,27bd0020 +34814b8,27bdffe8 +34814bc,afa30010 +34814c0,afbf0014 +34814c4,3c018012 +34814c8,2421a5d0 +34814cc,80280ede +34814d0,35080004 +34814d4,a0280ede +34814d8,3c188040 +34814dc,83180d6d +34814e0,13000003 +34814e8,c1024e7 +34814ec,34040029 +34814f0,240f0001 +34814f4,8fa30010 +34814f8,8fbf0014 +34814fc,3e00008 +3481500,27bd0018 +3481504,27bdffd8 +3481508,afa40010 +348150c,afa20014 +3481510,afaf0018 +3481514,afbf0020 +3481518,c1024e7 +348151c,3404002a +3481520,34050003 +3481524,8fa40010 +3481528,8fa20014 +348152c,8faf0018 +3481530,8fbf0020 +3481534,3e00008 +3481538,27bd0028 +348153c,607821 +3481540,81ec0edf +3481544,318e0080 +3481548,11c00003 +348154c,34030005 +3481550,3e00008 +3481554,34020002 +3481558,3e00008 +348155c,601021 +3481560,85c200a4 +3481564,3c088012 +3481568,2508a5d0 +348156c,81090edf +3481570,35290080 +3481574,a1090edf +3481578,3e00008 +3481580,27bdfff0 +3481584,afbf0004 +3481588,c035886 +3481590,3c0c8012 +3481594,258ca5d0 +3481598,858d0f2e +348159c,8d980004 +34815a0,13000002 +34815a4,340e0001 +34815a8,340e0002 +34815ac,1ae6825 +34815b0,a58d0f2e +34815b4,8fbf0004 +34815b8,27bd0010 +34815bc,3e00008 +34815c4,24090041 +34815c8,27bdffe0 +34815cc,afa80004 +34815d0,afa90008 +34815d4,afaa000c +34815d8,afac0010 +34815dc,3c0affff +34815e0,a5403 +34815e4,3c08801d +34815e8,850c894c +34815ec,118a0002 +34815f4,a500894c +34815f8,3c08801e +34815fc,810a887c +3481600,11400009 +3481608,3c090036 +348160c,94c03 +3481610,a109887c +3481614,3c090002 +3481618,94c03 +348161c,a109895f +3481620,3c08801f +3481624,a1008d38 +3481628,8fac0010 +348162c,8faa000c +3481630,8fa90008 +3481634,8fa80004 +3481638,3e00008 +348163c,27bd0020 +3481644,3c0a8010 +3481648,254ae49c +348164c,8d4a0000 +3481650,1140001e +3481658,3c08801d +348165c,250884a0 +3481660,3c0b0001 +3481664,356b04c4 +3481668,10b4020 +348166c,85090000 +3481670,3c0b0002 +3481674,356b26cc +3481678,14b5020 +348167c,94840 +3481680,12a5021 +3481684,85490000 +3481688,a5091956 +348168c,3c0c801e +3481690,258c84a0 +3481694,34090003 +3481698,a1891e5e +348169c,34090014 +34816a0,a1091951 +34816a4,34090001 +34816a8,3c018040 +34816ac,a0291640 +34816b0,3c088012 +34816b4,2508a5d0 +34816b8,850913d2 +34816bc,11200003 +34816c4,34090001 +34816c8,a50913d4 +34816cc,3e00008 +34816d4,3421241c +34816d8,3c0d8040 +34816dc,25ad1640 +34816e0,81a90000 +34816e4,11200008 +34816e8,862a00a4 +34816ec,340b005e +34816f0,114b0005 +34816f4,3c0c801e +34816f8,258c84a0 +34816fc,34090003 +3481700,a1891e5e +3481704,a1a00000 +3481708,3e00008 +3481710,3c02801d +3481714,244284a0 +3481718,3c010001 +348171c,411020 +3481720,3401047e +3481724,a4411e1a +3481728,34010014 348172c,3e00008 -3481730,a52b00b6 -3481734,3c08801e -3481738,2508aa30 -348173c,810a0434 -3481740,340b0008 -3481744,154b0002 -3481748,34090007 -348174c,a1090434 -3481750,3e00008 -3481754,c606000c -3481758,3c08801e -348175c,2508aa30 -3481760,8d0901ac -3481764,3c0a0400 -3481768,254a2f98 -348176c,152a000b -3481770,8d0b01bc -3481774,3c0c42cf -3481778,156c0003 -348177c,3c0d4364 -3481780,10000006 -3481784,ad0d01bc -3481788,3c0c4379 -348178c,156c0003 -3481790,3c09803b -3481794,2529967c -3481798,ad090664 -348179c,3e00008 -34817a0,260501a4 -34817a4,a498017c -34817a8,3c08801d -34817ac,250884a0 -34817b0,850900a4 -34817b4,340a0002 -34817b8,152a000e -34817bc,8c890138 -34817c0,8d290010 -34817c4,252a3398 -34817c8,ac8a0184 -34817cc,340b0001 -34817d0,a48b017c -34817d4,27bdffe8 -34817d8,afbf0014 -34817dc,3c053dcd -34817e0,24a5cccd -34817e4,c0083e2 -34817ec,8fbf0014 -34817f0,27bd0018 -34817f4,3e00008 -34817fc,948e001c -3481800,21cdffce -3481804,5a00010 -3481808,34020000 -348180c,31a90007 -3481810,340a0001 -3481814,12a5004 -3481818,d48c2 -348181c,3c0c8012 -3481820,258ca5d0 -3481824,1896020 -3481828,918b05b4 -348182c,16a5824 -3481830,34020000 -3481834,11600004 -348183c,340d0026 -3481840,a48d001c -3481844,34020001 -3481848,3e00008 -3481850,94ae001c -3481854,21cdffce -3481858,5a0000b -348185c,34020000 -3481860,31a90007 -3481864,340a0001 -3481868,12a5004 -348186c,d48c2 -3481870,3c0c8012 -3481874,258ca5d0 -3481878,1896020 -348187c,918b05b4 -3481880,16a5825 -3481884,a18b05b4 -3481888,3e00008 -3481890,27bdfff0 -3481894,afbf0008 -3481898,28810032 -348189c,10200003 -34818a0,801021 -34818a4,320f809 -34818ac,8fbf0008 -34818b0,27bd0010 -34818b4,3e00008 -34818bc,3c08801d -34818c0,250884a0 -34818c4,3c098012 -34818c8,2529a5d0 -34818cc,950a00a4 -34818d0,3401003e -34818d4,15410002 -34818d8,912b1397 -34818dc,216aff2a -34818e0,960b001c -34818e4,216b0001 -34818e8,340c0001 -34818ec,16c6004 -34818f0,3401001c -34818f4,1410018 -34818f8,6812 -34818fc,12d7020 -3481900,8dcf00e4 -3481904,18f1024 -3481908,3e00008 -3481910,3c08801d -3481914,250884a0 -3481918,3c098012 -348191c,2529a5d0 -3481920,950a00a4 -3481924,3401003e -3481928,15410002 -348192c,912b1397 -3481930,216aff2a -3481934,848b001c -3481938,216b0001 -348193c,340c0001 -3481940,16c6004 -3481944,3401001c -3481948,1410018 -348194c,6812 -3481950,12d7020 -3481954,8dcf00e4 -3481958,18f7825 -348195c,adcf00e4 -3481960,3e00008 -3481968,27bdffe8 -348196c,afbf0010 -3481970,c101fbb -3481978,8fbf0010 -348197c,27bd0018 -3481980,8fae0018 -3481984,3e00008 -3481988,3c018010 -348198c,340100ff -3481990,15210002 -3481994,92220000 -3481998,340200ff -348199c,3e00008 -34819a0,34010009 -34819a4,27bdffe8 -34819a8,afa20010 -34819ac,afbf0014 -34819b0,c10068d -34819b8,14400002 -34819bc,91830000 -34819c0,340300ff -34819c4,8fa20010 -34819c8,8fbf0014 -34819cc,27bd0018 -34819d0,3e00008 -34819d4,34010009 -34819d8,27bdffe8 -34819dc,afa20010 -34819e0,afbf0014 -34819e4,960201e8 -34819e8,34010003 -34819ec,14410007 -34819f4,c10068d -34819fc,14400007 -3481a04,10000005 -3481a08,3403007a -3481a0c,3401017a -3481a10,14610002 -3481a18,3403007a -3481a1c,36280 -3481a20,18d2821 -3481a24,8fa20010 -3481a28,8fbf0014 -3481a2c,3e00008 -3481a30,27bd0018 -3481a34,27bdfff0 -3481a38,afbf0000 -3481a3c,afa30004 -3481a40,afa40008 -3481a44,c101ff7 -3481a4c,8fbf0000 -3481a50,8fa30004 -3481a54,8fa40008 -3481a58,3e00008 -3481a5c,27bd0010 -3481a60,6d7024 -3481a64,15c00002 -3481a68,91ec0000 -3481a6c,27ff003c -3481a70,3e00008 -3481a84,3c088012 -3481a88,2508a5d0 -3481a8c,8509009c -3481a90,352a0002 -3481a94,3e00008 -3481a98,a50a009c -3481a9c,3c058012 -3481aa0,24a5a5d0 -3481aa4,3c088040 -3481aa8,25081a78 -3481aac,8ca90068 -3481ab0,ad090000 -3481ab4,8ca9006c -3481ab8,ad090004 -3481abc,94a90070 -3481ac0,a5090008 -3481ac4,94a9009c -3481ac8,a509000a -3481acc,340807e4 -3481ad0,1054021 -3481ad4,34090e64 -3481ad8,1254821 -3481adc,340a0008 -3481ae0,8d0b0000 -3481ae4,8d2c0000 -3481ae8,ad2b0000 -3481aec,ad0c0000 -3481af0,2508001c -3481af4,25290004 -3481af8,254affff -3481afc,1d40fff8 -3481b04,801be03 -3481b0c,27bdffe0 -3481b10,afb00010 -3481b14,afb10014 -3481b18,afbf0018 -3481b1c,3c108012 -3481b20,2610a5d0 -3481b24,3c118040 -3481b28,26311a78 -3481b2c,8e080004 -3481b30,11000005 -3481b38,c1006ed -3481b40,10000003 -3481b48,c100700 -3481b50,c1006e0 -3481b54,34040000 -3481b58,c1006e0 -3481b5c,34040001 -3481b60,c1006e0 -3481b64,34040002 -3481b68,8fb00010 -3481b6c,8fb10014 -3481b70,8fbf0018 -3481b74,27bd0020 -3481b78,3e00008 -3481b80,2044021 -3481b84,9109006c -3481b88,340100ff -3481b8c,11210007 -3481b94,2094821 -3481b98,91290074 -3481b9c,3401002c -3481ba0,11210002 -3481ba8,a1090069 -3481bac,3e00008 -3481bb4,27bdffe8 -3481bb8,afbf0010 -3481bbc,8e280000 -3481bc0,ae080040 -3481bc4,8e280004 -3481bc8,ae080044 -3481bcc,96280008 -3481bd0,a6080048 -3481bd4,a2000f33 -3481bd8,9208004a -3481bdc,340100ff -3481be0,15010003 -3481be8,c100713 -3481bf0,8fbf0010 -3481bf4,27bd0018 -3481bf8,3e00008 -3481c00,8e080040 -3481c04,ae080068 -3481c08,8e080044 -3481c0c,ae08006c -3481c10,96080048 -3481c14,9209009d -3481c18,31290020 -3481c1c,15200002 -3481c24,3108ffdf -3481c28,a6080070 -3481c2c,92080068 -3481c30,340100ff -3481c34,15010003 -3481c3c,34080001 -3481c40,a2080f33 -3481c44,3e00008 -3481c4c,27bdffe8 -3481c50,afbf0010 -3481c54,9608009c -3481c58,31080040 -3481c5c,11000005 -3481c64,96080070 -3481c68,3108ff0f -3481c6c,35080030 -3481c70,a6080070 -3481c74,92280001 -3481c78,a2080069 -3481c7c,96280002 -3481c80,a608006a -3481c84,8e280004 -3481c88,ae08006c -3481c8c,c10072d -3481c90,34040000 -3481c94,c10072d -3481c98,34040001 -3481c9c,c10072d -3481ca0,34040002 -3481ca4,8fbf0010 -3481ca8,27bd0018 -3481cac,3e00008 -3481cb4,2044021 -3481cb8,3c098040 -3481cbc,25291d5c -3481cc0,910a006c -3481cc4,340100ff -3481cc8,11410005 -3481cd0,12a4821 -3481cd4,91290000 -3481cd8,1520001c -3481ce0,3c098040 -3481ce4,25291d53 -3481ce8,25290001 -3481cec,912a0000 -3481cf0,11400013 -3481cf8,20a5821 -3481cfc,916b0074 -3481d00,340100ff -3481d04,1161fff8 -3481d0c,920c006c -3481d10,118afff5 -3481d18,920c006d -3481d1c,118afff2 -3481d24,920c006e -3481d28,118affef -3481d30,a10b0069 -3481d34,a10a006c -3481d38,10000004 -3481d40,340900ff -3481d44,a1090069 -3481d48,a109006c -3481d4c,3e00008 -3481d54,90f0203 -3481d58,10d0b00 -3481d5c,10101 -3481d60,1010001 -3481d64,1010101 -3481d68,10001 -3481d6c,1010101 -3481d70,1010100 -3481d74,330821 -3481d78,200f0047 -3481d7c,15ea000e -3481d80,3c028012 -3481d84,8c42a5d4 -3481d88,8e6f00a4 -3481d8c,f7a03 -3481d90,14400005 -3481d94,34024830 -3481d98,15e20007 -3481da0,24190003 -3481da4,10000004 -3481da8,34026311 -3481dac,15e20002 -3481db4,24190003 -3481db8,3e00008 -3481dc0,330821 -3481dc4,3c028012 -3481dc8,8c42a5d4 -3481dcc,8e6f00a4 -3481dd0,f7a03 -3481dd4,14400005 -3481dd8,34024830 -3481ddc,15e20007 -3481de4,24190003 -3481de8,10000004 -3481dec,34026311 -3481df0,15e20002 -3481df8,24190003 -3481dfc,3e00008 -3481e04,34010018 -3481e08,14810015 -3481e10,14400013 -3481e18,3c0a8012 -3481e1c,254aa5d0 -3481e20,814800a6 -3481e24,31080020 -3481e28,1100000d -3481e2c,34020000 -3481e30,8148007b -3481e34,34090007 -3481e38,11090005 -3481e3c,34090008 -3481e40,11090003 -3481e48,8100798 -3481e4c,34020000 -3481e50,81480ed6 -3481e54,35080001 -3481e58,a1480ed6 -3481e5c,34020001 -3481e60,3e00008 -3481e68,3c018040 -3481e6c,8c210ccc -3481e70,10200006 -3481e78,94480670 -3481e7c,31010800 -3481e80,34080800 -3481e84,3e00008 -3481e8c,950804c6 -3481e90,3401000b -3481e94,3e00008 -3481e9c,27bdffe8 -3481ea0,afa50000 -3481ea4,afa60004 -3481ea8,afa70008 -3481eac,afbf0010 -3481eb0,80a80000 -3481eb4,25090001 -3481eb8,15200005 -3481ec0,52025 -3481ec4,24a50008 -3481ec8,c015c0c -3481ecc,24c6fff8 -3481ed0,c102544 -3481ed8,8fbf0010 -3481edc,8fa70008 -3481ee0,8fa60004 -3481ee4,8fa50000 -3481ee8,8015c0c -3481eec,27bd0018 -3481ef0,ac4d066c -3481ef4,a0400141 -3481ef8,a0400144 -3481efc,340e00fe -3481f00,3e00008 -3481f04,a04e0142 -3481f08,a2250021 -3481f0c,3c108040 -3481f10,26100898 -3481f14,26100004 -3481f18,8e0a0000 -3481f1c,1140000b -3481f24,a7c02 -3481f28,1f17820 -3481f2c,3158ff00 -3481f30,18c202 -3481f34,17000003 -3481f38,315900ff -3481f3c,81ea0000 -3481f40,32ac825 -3481f44,81007c5 -3481f48,a1f90000 -3481f4c,3e00008 -3481f54,27bdfff0 -3481f58,afbf0008 -3481f5c,c1007e3 -3481f60,2264ffff -3481f64,344a0000 -3481f68,8fbf0008 -3481f6c,27bd0010 -3481f70,27bdfff0 -3481f74,afbf0008 -3481f78,c1007e3 -3481f7c,36440000 -3481f80,34500000 -3481f84,8fbf0008 -3481f88,27bd0010 -3481f8c,3c088040 -3481f90,25080025 -3481f94,91080000 -3481f98,15000007 -3481fa0,3c088012 -3481fa4,2508a5d0 -3481fa8,1044020 -3481fac,91020024 -3481fb0,10000007 -3481fb8,840c0 -3481fbc,3c028040 -3481fc0,24420034 -3481fc4,1024020 -3481fc8,1044020 -3481fcc,91020000 -3481fd0,3e00008 -3481fd8,8fb60030 -3481fdc,8fb70034 -3481fe0,8fbe0038 -3481fe4,3c088040 -3481fe8,25080025 -3481fec,a1000000 -3481ff0,3e00008 -3481ff8,3c0a8012 -3481ffc,8d4aa5d4 -3482000,15400006 -3482004,31780001 -3482008,17000007 -348200c,3c184230 -3482010,3c184250 -3482014,3e00008 -348201c,17000002 -3482020,3c184210 -3482024,3c184238 -3482028,3e00008 -3482030,906e13e2 -3482034,90620068 -3482038,34010059 -348203c,10410002 -3482040,34010fff -3482044,340100ff -3482048,3e00008 -3482050,3c048012 -3482054,2484a5d0 -3482058,908e13e2 -348205c,90820068 -3482060,34010059 -3482064,10410002 -3482068,34010fff -348206c,340100ff -3482070,3e00008 -3482078,3c08801f -348207c,25085de0 -3482080,8d01009c -3482084,14200003 -3482088,46025102 -348208c,3c083f80 -3482090,44882000 -3482094,3e00008 -348209c,ac800118 -34820a0,27ff0030 -34820a4,3e00008 -34820a8,ac8e0180 -34820ac,3c018040 -34820b0,8c210cbc -34820b4,10200008 -34820bc,81efa64c -34820c0,34180009 -34820c4,11f80002 -34820c8,34180001 -34820cc,34180000 -34820d0,3e00008 -34820d8,8defa670 -34820dc,31f80018 -34820e0,3e00008 -34820e8,3c018040 -34820ec,8c210cbc -34820f0,10200008 -34820f8,816ba64c -34820fc,340c0009 -3482100,116c0002 -3482104,340c0001 -3482108,340c0000 -348210c,3e00008 -3482114,8d6ba670 -3482118,316c0018 -348211c,3e00008 -3482124,3c018040 -3482128,8c210cbc -348212c,10200008 -3482134,3c098012 -3482138,812aa64c -348213c,340b0009 -3482140,114b0009 -3482144,34020000 -3482148,3e00008 -348214c,34020002 -3482150,3c098012 -3482154,812aa673 -3482158,314a0038 -348215c,15400002 -3482160,34020000 -3482164,34020002 -3482168,3e00008 -3482170,3c0a8040 -3482174,8d4a0cc0 -3482178,1140000a -348217c,34010001 -3482180,1141000b -3482184,34010002 -3482188,11410026 -348218c,34010003 -3482190,11410051 -3482194,34010004 -3482198,11410069 -348219c,34010005 -34821a0,11410061 -34821a4,34010000 -34821a8,3e00008 -34821ac,340a0000 -34821b0,3401003f -34821b4,415024 -34821b8,340f0000 -34821bc,31580001 -34821c0,13000002 -34821c8,25ef0001 -34821cc,31580002 -34821d0,13000002 -34821d8,25ef0001 -34821dc,31580004 -34821e0,13000002 -34821e8,25ef0001 -34821ec,31580008 -34821f0,13000002 -34821f8,25ef0001 -34821fc,31580010 -3482200,13000002 -3482208,25ef0001 -348220c,31580020 -3482210,13000002 -3482218,25ef0001 -348221c,10000043 -3482224,3c01001c -3482228,2421003f -348222c,415024 -3482230,340f0000 -3482234,31580001 -3482238,13000002 -3482240,25ef0001 -3482244,31580002 -3482248,13000002 -3482250,25ef0001 -3482254,31580004 -3482258,13000002 -3482260,25ef0001 -3482264,31580008 -3482268,13000002 -3482270,25ef0001 -3482274,31580010 -3482278,13000002 -3482280,25ef0001 -3482284,31580020 -3482288,13000002 -3482290,25ef0001 -3482294,3c180004 -3482298,158c024 -348229c,13000002 -34822a4,25ef0001 -34822a8,3c180008 -34822ac,158c024 -34822b0,13000002 -34822b8,25ef0001 -34822bc,3c180010 -34822c0,158c024 -34822c4,13000002 -34822cc,25ef0001 -34822d0,10000016 -34822d8,3c01001c -34822dc,415024 -34822e0,340f0000 -34822e4,3c180004 -34822e8,158c024 -34822ec,13000002 -34822f4,25ef0001 -34822f8,3c180008 -34822fc,158c024 -3482300,13000002 -3482308,25ef0001 -348230c,3c180010 -3482310,158c024 -3482314,13000002 -348231c,25ef0001 -3482320,10000002 -3482328,84ef00d0 -348232c,34010000 -3482330,3c188040 -3482334,87180cd0 -3482338,3e00008 -348233c,1f8502a -3482340,34010018 -3482344,415024 -3482348,15410006 -3482350,90ef0084 -3482354,340a0012 -3482358,114f0002 -3482360,3401ffff -3482364,3e00008 -3482368,415024 -348236c,3c098040 -3482370,8d290cc4 -3482374,340a0001 -3482378,112a000e -348237c,340a0002 -3482380,112a0029 -3482384,340a0003 -3482388,112a0054 -348238c,340a0004 -3482390,112a0066 -3482398,340b0018 -348239c,4b5024 -34823a0,156a0002 -34823a4,34030000 -34823a8,34030001 -34823ac,3e00008 -34823b4,3401003f -34823b8,415024 -34823bc,340c0000 -34823c0,314b0001 -34823c4,11600002 -34823cc,258c0001 -34823d0,314b0002 -34823d4,11600002 -34823dc,258c0001 -34823e0,314b0004 -34823e4,11600002 -34823ec,258c0001 -34823f0,314b0008 -34823f4,11600002 -34823fc,258c0001 -3482400,314b0010 -3482404,11600002 -348240c,258c0001 -3482410,314b0020 -3482414,11600002 -348241c,258c0001 -3482420,10000043 -3482428,3c01001c -348242c,2421003f -3482430,415024 -3482434,340c0000 -3482438,314b0001 -348243c,11600002 -3482444,258c0001 -3482448,314b0002 -348244c,11600002 -3482454,258c0001 -3482458,314b0004 -348245c,11600002 -3482464,258c0001 -3482468,314b0008 -348246c,11600002 -3482474,258c0001 -3482478,314b0010 -348247c,11600002 -3482484,258c0001 -3482488,314b0020 -348248c,11600002 -3482494,258c0001 -3482498,3c0b0004 -348249c,14b5824 -34824a0,11600002 -34824a8,258c0001 -34824ac,3c0b0008 -34824b0,14b5824 -34824b4,11600002 -34824bc,258c0001 -34824c0,3c0b0010 -34824c4,14b5824 -34824c8,11600002 -34824d0,258c0001 -34824d4,10000016 -34824dc,3c01001c -34824e0,415024 -34824e4,340c0000 -34824e8,3c0b0004 -34824ec,14b5824 -34824f0,11600002 -34824f8,258c0001 -34824fc,3c0b0008 -3482500,14b5824 -3482504,11600002 -348250c,258c0001 -3482510,3c0b0010 -3482514,14b5824 -3482518,11600002 -3482520,258c0001 -3482524,10000002 -348252c,860c00d0 -3482530,34010000 -3482534,3c0b8040 -3482538,856b0cd2 -348253c,18b602a -3482540,15800002 -3482544,34030000 -3482548,34030001 -348254c,3e00008 -3482554,27bdffe4 -3482558,afb10014 -348255c,afbf0018 -3482560,3c038012 -3482564,2463a5d0 -3482568,860f001c -348256c,31f800ff -3482570,340100ff -3482574,17010004 -3482578,27110400 -348257c,90781397 -3482580,3318001f -3482584,27110430 -3482588,31e18000 -348258c,14200015 -3482594,3c088040 -3482598,8d080cc8 -348259c,1100000b -34825a0,34010001 -34825a4,11010003 -34825ac,1000000d -34825b4,806100a5 -34825b8,30210020 -34825bc,10200008 -34825c4,10000007 -34825cc,c01e6d1 -34825d4,34010008 -34825d8,10410002 -34825e0,34112053 -34825e4,a611010e -34825e8,8fbf0018 -34825ec,8fb10014 -34825f0,3e00008 -34825f4,27bd001c -34825f8,9059008a -34825fc,340900ff -3482600,11390007 -3482608,2b290031 -348260c,15200005 -3482610,34190000 -3482614,34190001 -3482618,10000002 -3482620,34190000 -3482624,3e00008 -348262c,27bdfff0 -3482630,afa80000 -3482634,e7a20004 -3482638,e7a40008 -348263c,3c088040 -3482640,25080cd4 -3482644,91080000 -3482648,1100000f -348264c,340d0200 -3482650,3c08801e -3482654,2508aa30 -3482658,c5020028 -348265c,3c08c496 -3482660,44882000 -3482668,4604103c -3482670,45010004 -3482678,340d0200 -348267c,10000002 -3482684,340d00c0 -3482688,c7a40008 -348268c,c7a20004 -3482690,8fa80000 -3482694,3e00008 -3482698,27bd0010 -348269c,8e2a1d44 -34826a0,314a0100 -34826a4,1540000a -34826ac,8e2a1d48 -34826b0,314a0100 -34826b4,15400007 -34826bc,8e211d48 -34826c0,342a0100 -34826c4,ae2a1d48 -34826c8,10000003 -34826cc,5024 -34826d0,240c0000 -34826d4,340a0001 -34826d8,3e00008 -34826e0,27bdfff0 -34826e4,afbf0000 -34826e8,c101047 -34826f0,8ece1c44 -34826f4,3c18db06 -34826f8,8fbf0000 -34826fc,3e00008 -3482700,27bd0010 -3482708,a21901e9 -348270c,27bdffe0 -3482710,afbf0004 -3482714,afa40008 -3482718,afa5000c -348271c,afa80010 -3482720,e7aa0014 -3482724,e7b00018 -3482728,c100f60 -348272c,2002021 -3482730,8fbf0004 -3482734,8fa40008 -3482738,8fa5000c -348273c,8fa80010 -3482740,c7aa0014 -3482744,c7b00018 -3482748,3e00008 -348274c,27bd0020 -3482750,3f800000 -3482754,34080004 -3482758,3c09801d -348275c,252984a0 -3482760,8d291c44 -3482764,11200016 -348276c,3c018040 -3482770,c4362750 -3482778,46166302 -348277c,9127014f -3482780,1507000f -3482784,448f2000 -3482788,3c07803a -348278c,24e78bc0 -3482790,8d280664 -3482794,1507000a -348279c,3c088040 -34827a0,25080cdf -34827a4,91080000 -34827a8,11000005 -34827b0,3c083fc0 -34827b4,4488b000 -34827bc,46166302 -34827c4,44056000 -34827c8,3e00008 -34827d0,3c188040 -34827d4,97180848 -34827d8,a5d80794 -34827dc,3c188040 -34827e0,9718084a -34827e4,a5d80796 -34827e8,3c188040 -34827ec,9718084c -34827f0,a5d80798 -34827f4,ec021 -34827f8,3e00008 -3482800,27bdffe8 -3482804,afbf0004 -3482808,afb00008 -348280c,808021 -3482810,3c048040 -3482814,9484086c -3482818,c100a1a -3482820,ae02022c -3482824,3c048040 -3482828,9484086e -348282c,c100a1a -3482834,ae020230 -3482838,3c048040 -348283c,94840870 -3482840,c100a1a -3482848,ae020234 -348284c,c100a1a -3482850,340400ff -3482854,ae020238 -3482858,8fbf0004 -348285c,8fb00008 -3482860,3e00008 -3482864,27bd0018 -3482868,28810020 -348286c,14200005 -3482870,288100e0 -3482874,10200003 -348287c,10000002 -3482880,861023 -3482884,851023 -3482888,3e00008 -348288c,304200ff -3482894,2b010192 -3482898,10200004 -34828a0,3c088010 -34828a4,3e00008 -34828a8,25088ff8 -34828ac,3c088040 -34828b0,25080c9c -34828b4,3e00008 -34828b8,2718fe6d -34828bc,8e1821 -34828c0,28c10192 -34828c4,10200004 -34828cc,3c198010 -34828d0,3e00008 -34828d4,27398ff8 -34828d8,3c198040 -34828dc,27390c9c -34828e0,3e00008 -34828e4,24c6fe6d -34828e8,86190000 -34828ec,8e050004 -34828f0,26040008 -34828f4,194023 -34828f8,29010192 -34828fc,10200004 -3482904,3c138010 -3482908,3e00008 -348290c,26738ff8 -3482910,3c138040 -3482914,26730c9c -3482918,3e00008 -348291c,2508fe6d -3482920,8e040010 -3482924,28610192 -3482928,10200004 -3482930,3c138010 -3482934,8100a52 -3482938,26738ff8 -348293c,3c138040 -3482940,26730c9c -3482944,2463fe6d -3482948,378c0 -348294c,26f1021 -3482950,3e00008 -3482954,8c450000 -3482958,8fa40020 -348295c,3c088040 -3482960,81080cd7 -3482964,24060050 -3482968,1100000b -3482970,84860014 -3482974,50c00008 -3482978,24060050 -348297c,80a81d44 -3482980,c85824 -3482984,55600004 -3482988,24060050 -348298c,1064025 -3482990,a0a81d44 -3482994,24c60014 -3482998,3e00008 -34829a0,27bdfff0 -34829a4,afbf0004 -34829a8,afa80008 -34829ac,afa9000c -34829b0,3c088040 -34829b4,81080cd7 -34829b8,11000009 -34829c0,86080014 -34829c4,11000006 -34829cc,82291d44 -34829d0,1094024 -34829d4,24020001 -34829d8,11000003 -34829e0,c01c6a5 -34829e8,8fbf0004 -34829ec,8fa80008 -34829f0,8fa9000c -34829f4,27bd0010 -34829f8,3e00008 -3482a00,8fb00034 -3482a04,848800b4 -3482a08,11000002 -3482a10,a48000b0 -3482a14,3e00008 -3482a1c,1b9fcd5 -3482a20,fb251ad2 -3482a24,f2dc -3482a28,8022 -3482a2c,23bdffec -3482a30,afbf0010 -3482a34,9608001c -3482a38,31088000 -3482a3c,1100000f -3482a44,3c038012 -3482a48,2463a5d0 -3482a4c,946d0edc -3482a50,31ad0400 -3482a54,11a0000b -3482a5c,8c6e0004 -3482a60,15c00008 -3482a68,948d1d2a -3482a6c,35ae0001 -3482a70,a48e1d2a -3482a74,10000003 -3482a7c,c037385 -3482a84,8fbf0010 -3482a88,23bd0014 -3482a8c,3e00008 -3482a94,8c6e0004 -3482a98,3e00008 -3482aa0,8488001c -3482aa4,34010002 -3482aa8,15010015 -3482ab0,3c028012 -3482ab4,2442a5d0 -3482ab8,8c4b0004 -3482abc,15600012 -3482ac4,3c098040 -3482ac8,25292b10 -3482acc,ac890154 -3482ad0,27bdffe0 -3482ad4,afbf0010 -3482ad8,afa50014 -3482adc,8fa60014 -3482ae0,3c058040 -3482ae4,24a52a1c -3482ae8,c009571 -3482aec,24c41c24 -3482af0,8fbf0010 -3482af4,27bd0020 -3482af8,10000003 -3482b00,afa40000 -3482b04,afa50004 -3482b08,3e00008 -3482b10,27bdffd8 -3482b14,afb00020 -3482b18,afbf0024 -3482b1c,afa5002c -3482b20,808025 -3482b24,c600015c -3482b28,3c01c4a4 -3482b2c,24212000 -3482b30,44811000 -3482b34,3c028012 -3482b38,2442a5d0 -3482b3c,944b0edc -3482b40,316c0400 -3482b44,944b0ee0 -3482b48,11800031 -3482b50,94ad1d2a -3482b54,31ae0001 -3482b58,11c00006 -3482b60,31adfffe -3482b64,a4ad1d2a -3482b68,34010200 -3482b6c,1615826 -3482b70,a44b0ee0 -3482b74,316c0200 -3482b78,1180000b -3482b80,34010000 -3482b84,44812000 -3482b88,3c064080 -3482b8c,44863000 -3482b94,46060200 -3482b98,4604403c -3482ba0,10000009 -3482ba8,3c01c42a -3482bac,44812000 -3482bb0,3c06c080 -3482bb4,44863000 -3482bbc,46060200 -3482bc0,4608203c -3482bc8,45000005 -3482bd0,46004106 -3482bd4,c008c42 -3482bd8,3405205e -3482bdc,2002025 -3482be0,e604015c -3482be4,46022100 -3482be8,e6040028 -3482bec,4600240d -3482bf0,44098000 -3482bf4,8fa2002c -3482bf8,8c5807c0 -3482bfc,8f190028 -3482c00,240ffb57 -3482c04,a72f0012 -3482c08,a7290022 -3482c0c,a7290032 -3482c10,8fbf0024 -3482c14,8fb00020 -3482c18,27bd0028 -3482c1c,3e00008 -3482c24,ac20753c -3482c28,3c018040 -3482c2c,90210cdc -3482c30,10200008 -3482c34,3c01801d -3482c38,242184a0 -3482c3c,94211d2c -3482c40,302100c0 -3482c44,14200003 -3482c4c,801ce4c -3482c54,801ce45 -3482c5c,3c088012 -3482c60,2508a5d0 -3482c64,8d0a0004 -3482c68,11400006 -3482c6c,8d090000 -3482c70,3401003b -3482c74,15210008 -3482c7c,3c0bc47a -3482c80,ac8b0028 -3482c84,3401016d -3482c88,15210003 -3482c90,3c0bc47a -3482c94,ac8b0028 -3482c98,3e00008 -3482c9c,340e0001 -3482ca4,3c0f8040 -3482ca8,25ef2ca0 -3482cac,81ef0000 -3482cb0,3c188040 -3482cb4,27182ca1 -3482cb8,83180000 -3482cbc,1f87820 -3482cc0,5e00007 -3482cc4,34010003 -3482cc8,1e1082a -3482ccc,14200002 -3482cd4,340f0008 -3482cd8,10000003 -3482cdc,1f08004 -3482ce0,f7822 -3482ce4,1f08007 -3482ce8,90af003d -3482cec,11e00004 -3482cf4,108043 -3482cf8,108400 -3482cfc,108403 -3482d00,3e00008 -3482d0c,4f1021 -3482d10,3c098040 -3482d14,81292d08 -3482d18,11200008 -3482d1c,8042a65c -3482d20,3c0a801d -3482d24,254a84a0 -3482d28,8d491d44 -3482d2c,31210002 -3482d30,14200002 -3482d34,3402000a -3482d38,34020000 -3482d3c,3e00008 -3482d44,594021 -3482d48,3c0a8040 -3482d4c,814a2d08 -3482d50,11400002 -3482d54,8109008c -3482d58,34090000 -3482d5c,3e00008 -3482d64,1ee7821 -3482d68,3c0a8040 -3482d6c,814a2d08 -3482d70,11400002 -3482d74,81efa65c -3482d78,340f0000 -3482d7c,3e00008 -3482d84,3c098040 -3482d88,81292d08 -3482d8c,11200005 -3482d90,3c0a801d -3482d94,254a84a0 -3482d98,8d491d44 -3482d9c,35290002 -3482da0,ad491d44 -3482da4,3e00008 -3482da8,afa50024 -3482e70,ff00 -3482e74,3c0a8040 -3482e78,254a2e72 -3482e7c,914b0000 -3482e80,340c00ff -3482e84,a14c0000 -3482e88,34087fff -3482e8c,15c80006 -3482e90,3c098040 -3482e94,25292e30 -3482e98,116c000c -3482e9c,b5840 -3482ea0,12b4821 -3482ea4,952e0000 -3482ea8,27bdfff0 -3482eac,afbf0004 -3482eb0,afa40008 -3482eb4,c100bc7 -3482eb8,1c02021 -3482ebc,407021 -3482ec0,8fbf0004 -3482ec4,8fa40008 -3482ec8,27bd0010 -3482ecc,3e00008 -3482ed0,a42e1e1a -3482ed4,9608001c -3482ed8,84303 -3482edc,3108000f -3482ee0,29090002 -3482ee4,1520000b -3482eec,960d0018 -3482ef0,27bdfff0 -3482ef4,afbf0004 -3482ef8,afa40008 -3482efc,c100bc7 -3482f00,1a02021 -3482f04,406821 -3482f08,8fbf0004 -3482f0c,8fa40008 -3482f10,27bd0010 -3482f14,3e00008 -3482f18,270821 -3482f1c,34087ff9 -3482f20,884022 -3482f24,501000f -3482f28,34081000 -3482f2c,884022 -3482f30,500000c -3482f34,3c098012 -3482f38,2529a5d0 -3482f3c,3c0a8040 -3482f40,254a2dac -3482f44,3c0b8040 -3482f48,256b2e72 -3482f4c,a1680000 -3482f50,84080 -3482f54,1485021 -3482f58,95440000 -3482f5c,91480002 -3482f60,a1281397 -3482f64,3e00008 -3482f68,801021 -3482f6c,8c6d0004 -3482f70,3c0e8040 -3482f74,81ce0cdd -3482f78,1ae7825 -3482f7c,11e0000a -3482f84,11c00006 -3482f8c,946e0ed4 -3482f90,31ce0010 -3482f94,1cd7025 -3482f98,11c00003 -3482fa0,3e00008 -3482fa4,340f0001 -3482fa8,3e00008 -3482fac,340f0000 -3482fb0,1000 -3482fb4,4800 -3482fbc,7000 -3482fc0,4800 -3482fc8,8040f330 -3482fcc,42890 -3482fd0,34191000 -3482fd4,340a4800 -3482fd8,340d0000 -3482fdc,340c7000 -3482fe0,340e4800 -3482fe4,3e00008 -3482fe8,34180000 -3482ff0,3c088012 -3482ff4,2508a5d0 -3482ff8,95090eda -3482ffc,31290008 -3483000,15200008 -3483004,8d090004 -3483008,15200004 -348300c,3c098040 -3483010,81292fec -3483014,15200003 -348301c,3e00008 -3483020,34090000 -3483024,3e00008 -3483028,34090001 -348302c,3c08801d -3483030,25082578 -3483034,3409006c -3483038,8d0a6300 -348303c,112a0009 -3483040,340a0001 -3483044,340b0036 -3483048,ad0a6300 -348304c,a10b6304 -3483050,240cffff -3483054,810e63e7 -3483058,15cc0002 -348305c,340d0002 -3483060,a10d63e7 -3483064,3e00008 -3483068,24060022 -3483074,afb0003c -3483078,27bdffe0 -348307c,afbf0014 -3483080,3c098040 -3483084,2529306c -3483088,812a0000 -348308c,1540000a -3483094,8e4b0028 -3483098,3c0c4370 -348309c,16c082a -34830a0,14200005 -34830a4,340d0001 -34830a8,a12d0000 -34830ac,3404001b -34830b0,c032a9c -34830b8,8fbf0014 -34830bc,3e00008 -34830c0,27bd0020 -34830c4,8e721c44 -34830c8,240e0003 -34830cc,a22e05b0 -34830d0,926f07af -34830d4,4406b000 -34830d8,4407a000 -34830dc,3e00008 -34830e4,90580000 -34830e8,27bdffd0 -34830ec,afbf0014 -34830f0,afa40018 -34830f4,afa5001c -34830f8,afa60020 -34830fc,afa70024 -3483100,3c048040 -3483104,8084306c -3483108,1080001b -3483110,3c048040 -3483114,8c843070 -3483118,2885001e -348311c,14a00016 -3483124,28850050 -3483128,10a0000c -3483130,3c043d4d -3483134,2484cccd -3483138,ae4404d0 -348313c,2402025 -3483140,248404c8 -3483144,3c05437f -3483148,3c063f80 -348314c,3c074120 -3483150,c0190a0 -3483158,10000007 -348315c,2402025 -3483160,248404c8 -3483164,34050000 -3483168,3c063f80 -348316c,3c074120 -3483170,c0190a0 -3483178,8fbf0014 -348317c,8fa40018 -3483180,8fa5001c -3483184,8fa60020 -3483188,8fa70024 -348318c,3e00008 -3483190,27bd0030 -3483194,860800b6 -3483198,25084000 -348319c,a60800b6 -34831a0,34080001 -34831a4,a20805e8 -34831a8,a2000554 -34831ac,8e090004 -34831b0,240afffe -34831b4,1495824 -34831b8,ae0b0004 -34831bc,3c088040 -34831c0,25083204 -34831c4,3e00008 -34831c8,ae08013c -34831cc,860800b6 -34831d0,2508c000 -34831d4,a60800b6 -34831d8,34080001 -34831dc,a20805e8 -34831e0,a2000554 -34831e4,8e090004 -34831e8,240afffe -34831ec,1495824 -34831f0,ae0b0004 -34831f4,3c088040 -34831f8,25083204 -34831fc,3e00008 -3483200,ae08013c -3483204,27bdffd0 -3483208,afbf0014 -348320c,afa40018 -3483210,afa5001c -3483214,34080001 -3483218,a0880554 -348321c,8488001c -3483220,11000006 -3483228,3c048040 -348322c,8c843070 -3483230,24850001 -3483234,3c018040 -3483238,ac253070 -348323c,3c048040 -3483240,8c843070 -3483244,34050003 -3483248,14850009 -3483250,8fa40018 -3483254,8488001c -3483258,34090001 -348325c,11090002 -3483260,240539b0 -3483264,240539b1 -3483268,c008bf4 -3483270,28850028 -3483274,14a0001a -348327c,8fa40018 -3483280,24840028 -3483284,3c0543c8 -3483288,3c063f80 -348328c,3c0740c0 -3483290,c0190a0 -3483298,8fa40018 -348329c,24840558 -34832a0,c023270 -34832a8,8fa40018 -34832ac,c008bf4 -34832b0,2405311f -34832b4,3c048040 -34832b8,8c843070 -34832bc,34080061 -34832c0,14880007 -34832c8,8fa40018 -34832cc,8fa5001c -34832d0,8c8b0138 -34832d4,8d6b0010 -34832d8,256913ec -34832dc,ac89013c -34832e0,8fbf0014 -34832e4,3e00008 -34832e8,27bd0030 -34832ec,3c01c416 -34832f0,44816000 +3481730,a0411e15 +3481734,27bdffe8 +3481738,afbf0014 +348173c,afa40018 +3481740,8e190004 +3481744,17200015 +3481748,8e190000 +348174c,3c018010 +3481750,24219c90 +3481754,19c880 +3481758,3210820 +348175c,90210000 +3481760,34190052 +3481764,1721000d +3481768,8e190000 +348176c,960200a6 +3481770,304c0007 +3481774,398c0007 +3481778,15800008 +348177c,240400aa +3481780,c00a22d +3481788,14400004 +348178c,8e190000 +3481790,341900db +3481794,10000002 +3481798,ae190000 +348179c,340101e1 +34817a0,8fbf0014 +34817a4,8fa40018 +34817a8,3e00008 +34817ac,27bd0018 +34817b0,3c088040 +34817b4,81080d73 +34817b8,11000005 +34817bc,3c018012 +34817c0,2421a5d0 +34817c4,80280ed6 +34817c8,35080001 +34817cc,a0280ed6 +34817d0,34080000 +34817d4,3e00008 +34817d8,adf90000 +34817dc,3c0b801d +34817e0,256b84a0 +34817e4,856b00a4 +34817e8,340c005a +34817ec,156c0003 +34817f0,340b01a5 +34817f4,a42b1e1a +34817f8,1000000e +34817fc,3c0c8012 +3481800,258ca5d0 +3481804,8d8c0004 +3481808,15800008 +348180c,3c0b8040 +3481810,816b0d73 +3481814,11600007 +3481818,842b1e1a +348181c,340c01a5 +3481820,116c0002 +3481828,10000002 +348182c,340b0129 +3481830,a42b1e1a +3481834,3e00008 +3481840,2202825 +3481844,3c0a801e +3481848,254aaa30 +348184c,c544002c +3481850,3c0bc43c +3481854,256b8000 +3481858,448b3000 +348185c,4606203c +3481864,45000026 +348186c,c5440024 +3481870,3c0bc28a +3481874,448b3000 +3481878,4606203c +3481880,4501001f +3481888,3c0b41c8 +348188c,448b3000 +3481890,4606203c +3481898,45000019 +34818a0,3c098040 +34818a4,2529183c +34818a8,814b0424 +34818ac,1160000e +34818b0,812e0000 +34818b4,340c007e +34818b8,116c000b +34818c0,15c00009 +34818c4,340c0001 +34818c8,a12c0000 +34818cc,3c0dc1a0 +34818d0,ad4d0024 +34818d4,3c0d4120 +34818d8,ad4d0028 +34818dc,3c0dc446 +34818e0,25ad8000 +34818e4,ad4d002c +34818e8,11c00005 +34818f0,15600003 +34818f4,340d8000 +34818f8,a54d00b6 +34818fc,a1200000 +3481900,3e00008 +348190c,3c0a801e +3481910,254aaa30 +3481914,8d4b066c +3481918,3c0cd000 +348191c,258cffff +3481920,16c5824 +3481924,3e00008 +3481928,ad4b066c +348192c,27bdffe0 +3481930,afbf0014 +3481934,afa40018 +3481938,1c17825 +348193c,ac4f0680 +3481940,34040001 +3481944,c01b638 +348194c,3c088040 +3481950,81080d6d +3481954,15000007 +348195c,3c04801d +3481960,248484a0 +3481964,3c058040 +3481968,80a50d6e +348196c,c037500 +3481974,8fa40018 +3481978,8c880138 +348197c,8d090010 +3481980,252a03d4 +3481984,ac8a029c +3481988,8fbf0014 +348198c,3e00008 +3481990,27bd0020 +3481994,27bdffe0 +3481998,afbf0014 +348199c,afa40018 +34819a0,3c088040 +34819a4,81080d6d +34819a8,1500001a +34819b0,3c09801e +34819b4,2529887c +34819b8,81280000 +34819bc,340b0036 +34819c0,150b001e +34819c8,3c088040 +34819cc,81081908 +34819d0,1500001a +34819d8,34080001 +34819dc,3c018040 +34819e0,a0281908 +34819e4,3c04801d +34819e8,248484a0 +34819ec,3c058040 +34819f0,90a50d6f +34819f4,34060000 +34819f8,c037385 +3481a00,34044802 +3481a04,c0191bc +3481a0c,10000025 +3481a14,3c04801d +3481a18,248484a0 +3481a1c,34050065 +3481a20,c01bf73 +3481a28,34040032 +3481a2c,c01b638 +3481a34,1000000c +3481a3c,8fa40018 +3481a40,3c05801d +3481a44,24a584a0 +3481a48,c008ab4 +3481a50,10400014 +3481a58,3c088040 +3481a5c,81081908 +3481a60,11000010 +3481a68,8fa40018 +3481a6c,8c880138 +3481a70,8d090010 +3481a74,252a035c +3481a78,ac8a029c +3481a7c,3c028012 +3481a80,2442a5d0 +3481a84,94490ee0 +3481a88,352a0020 +3481a8c,a44a0ee0 +3481a90,8c880004 +3481a94,3c09ffff +3481a98,2529ffff +3481a9c,1094024 +3481aa0,ac880004 +3481aa4,8fbf0014 +3481aa8,3e00008 +3481aac,27bd0020 +3481ab0,860f00b6 +3481ab4,9739b4ae +3481ab8,3c09801e +3481abc,2529aa30 +3481ac0,8d2a0428 +3481ac4,11400005 +3481acc,812a0424 +3481ad0,3409007e +3481ad4,15490003 +3481adc,3e00008 +3481ae0,340a0000 +3481ae4,3e00008 +3481ae8,340a0001 +3481aec,8c8e0134 +3481af0,15c00002 +3481af4,3c0e4480 +3481af8,ac8e0024 +3481afc,3e00008 +3481b00,8fae0044 +3481b04,260501a4 +3481b08,27bdffe0 +3481b0c,afbf0014 +3481b10,afa50018 +3481b14,8625001c +3481b18,52a03 +3481b1c,c008134 +3481b20,30a5003f +3481b24,8fa50018 +3481b28,8fbf0014 +3481b2c,3e00008 +3481b30,27bd0020 +3481b34,ae19066c +3481b38,8e0a0428 +3481b3c,3c09801e +3481b40,2529aa30 +3481b44,854b00b6 +3481b48,216b8000 +3481b4c,3e00008 +3481b50,a52b00b6 +3481b54,3c08801e +3481b58,2508aa30 +3481b5c,810a0434 +3481b60,340b0008 +3481b64,154b0002 +3481b68,34090007 +3481b6c,a1090434 +3481b70,3e00008 +3481b74,c606000c +3481b78,3c08801e +3481b7c,2508aa30 +3481b80,8d0901ac +3481b84,3c0a0400 +3481b88,254a2f98 +3481b8c,152a000b +3481b90,8d0b01bc +3481b94,3c0c42cf +3481b98,156c0003 +3481b9c,3c0d4364 +3481ba0,10000006 +3481ba4,ad0d01bc +3481ba8,3c0c4379 +3481bac,156c0003 +3481bb0,3c09803b +3481bb4,2529967c +3481bb8,ad090664 +3481bbc,3e00008 +3481bc0,260501a4 +3481bc4,a498017c +3481bc8,3c08801d +3481bcc,250884a0 +3481bd0,850900a4 +3481bd4,340a0002 +3481bd8,152a000e +3481bdc,8c890138 +3481be0,8d290010 +3481be4,252a3398 +3481be8,ac8a0184 +3481bec,340b0001 +3481bf0,a48b017c +3481bf4,27bdffe8 +3481bf8,afbf0014 +3481bfc,3c053dcd +3481c00,24a5cccd +3481c04,c0083e2 +3481c0c,8fbf0014 +3481c10,27bd0018 +3481c14,3e00008 +3481c1c,948e001c +3481c20,21cdffce +3481c24,5a00010 +3481c28,34020000 +3481c2c,31a90007 +3481c30,340a0001 +3481c34,12a5004 +3481c38,d48c2 +3481c3c,3c0c8012 +3481c40,258ca5d0 +3481c44,1896020 +3481c48,918b05b4 +3481c4c,16a5824 +3481c50,34020000 +3481c54,11600004 +3481c5c,340d0026 +3481c60,a48d001c +3481c64,34020001 +3481c68,3e00008 +3481c70,94ae001c +3481c74,21cdffce +3481c78,5a0000b +3481c7c,34020000 +3481c80,31a90007 +3481c84,340a0001 +3481c88,12a5004 +3481c8c,d48c2 +3481c90,3c0c8012 +3481c94,258ca5d0 +3481c98,1896020 +3481c9c,918b05b4 +3481ca0,16a5825 +3481ca4,a18b05b4 +3481ca8,3e00008 +3481cb0,27bdfff0 +3481cb4,afbf0008 +3481cb8,28810032 +3481cbc,10200003 +3481cc0,801021 +3481cc4,320f809 +3481ccc,8fbf0008 +3481cd0,27bd0010 +3481cd4,3e00008 +3481cdc,3c08801d +3481ce0,250884a0 +3481ce4,3c098012 +3481ce8,2529a5d0 +3481cec,950a00a4 +3481cf0,3401003e +3481cf4,15410002 +3481cf8,912b1397 +3481cfc,216aff2a +3481d00,960b001c +3481d04,216b0001 +3481d08,340c0001 +3481d0c,16c6004 +3481d10,3401001c +3481d14,1410018 +3481d18,6812 +3481d1c,12d7020 +3481d20,8dcf00e4 +3481d24,18f1024 +3481d28,3e00008 +3481d30,3c08801d +3481d34,250884a0 +3481d38,3c098012 +3481d3c,2529a5d0 +3481d40,950a00a4 +3481d44,3401003e +3481d48,15410002 +3481d4c,912b1397 +3481d50,216aff2a +3481d54,848b001c +3481d58,216b0001 +3481d5c,340c0001 +3481d60,16c6004 +3481d64,3401001c +3481d68,1410018 +3481d6c,6812 +3481d70,12d7020 +3481d74,8dcf00e4 +3481d78,18f7825 +3481d7c,adcf00e4 +3481d80,3e00008 +3481d88,27bdffe8 +3481d8c,afbf0010 +3481d90,c1035dc +3481d98,8fbf0010 +3481d9c,27bd0018 +3481da0,8fae0018 +3481da4,3e00008 +3481da8,3c018010 +3481dac,340100ff +3481db0,15210002 +3481db4,92220000 +3481db8,340200ff +3481dbc,3e00008 +3481dc0,34010009 +3481dc4,27bdffe8 +3481dc8,afa20010 +3481dcc,afbf0014 +3481dd0,c100795 +3481dd8,14400002 +3481ddc,91830000 +3481de0,340300ff +3481de4,8fa20010 +3481de8,8fbf0014 +3481dec,27bd0018 +3481df0,3e00008 +3481df4,34010009 +3481df8,27bdffe8 +3481dfc,afa20010 +3481e00,afbf0014 +3481e04,960201e8 +3481e08,34010003 +3481e0c,14410007 +3481e14,c100795 +3481e1c,14400007 +3481e24,10000005 +3481e28,3403007a +3481e2c,3401017a +3481e30,14610002 +3481e38,3403007a +3481e3c,36280 +3481e40,18d2821 +3481e44,8fa20010 +3481e48,8fbf0014 +3481e4c,3e00008 +3481e50,27bd0018 +3481e54,27bdfff0 +3481e58,afbf0000 +3481e5c,afa30004 +3481e60,afa40008 +3481e64,c103621 +3481e6c,8fbf0000 +3481e70,8fa30004 +3481e74,8fa40008 +3481e78,3e00008 +3481e7c,27bd0010 +3481e80,6d7024 +3481e84,15c00002 +3481e88,91ec0000 +3481e8c,27ff003c +3481e90,3e00008 +3481ea4,3c088012 +3481ea8,2508a5d0 +3481eac,8509009c +3481eb0,352a0002 +3481eb4,3e00008 +3481eb8,a50a009c +3481ebc,3c058012 +3481ec0,24a5a5d0 +3481ec4,3c088040 +3481ec8,25081e98 +3481ecc,8ca90068 +3481ed0,ad090000 +3481ed4,8ca9006c +3481ed8,ad090004 +3481edc,94a90070 +3481ee0,a5090008 +3481ee4,94a9009c +3481ee8,a509000a +3481eec,340807ac +3481ef0,1054021 +3481ef4,34090e64 +3481ef8,1254821 +3481efc,340a000a +3481f00,8d0b0000 +3481f04,8d2c0000 +3481f08,ad2b0000 +3481f0c,ad0c0000 +3481f10,2508001c +3481f14,25290004 +3481f18,254affff +3481f1c,1d40fff8 +3481f24,801be03 +3481f2c,27bdffe0 +3481f30,afb00010 +3481f34,afb10014 +3481f38,afbf0018 +3481f3c,3c108012 +3481f40,2610a5d0 +3481f44,3c118040 +3481f48,26311e98 +3481f4c,8e080004 +3481f50,11000005 +3481f58,c1007f5 +3481f60,10000009 +3481f68,c100808 +3481f70,c1007e8 +3481f74,34040000 +3481f78,c1007e8 +3481f7c,34040001 +3481f80,c1007e8 +3481f84,34040002 +3481f88,8fb00010 +3481f8c,8fb10014 +3481f90,8fbf0018 +3481f94,27bd0020 +3481f98,3e00008 +3481fa0,2044021 +3481fa4,9109006c +3481fa8,340100ff +3481fac,11210007 +3481fb4,2094821 +3481fb8,91290074 +3481fbc,3401002c +3481fc0,11210002 +3481fc8,a1090069 +3481fcc,3e00008 +3481fd4,27bdffe8 +3481fd8,afbf0010 +3481fdc,8e280000 +3481fe0,ae080040 +3481fe4,8e280004 +3481fe8,ae080044 +3481fec,96280008 +3481ff0,a6080048 +3481ff4,a2000f33 +3481ff8,9208004a +3481ffc,340100ff +3482000,15010003 +3482008,c10081b +3482010,8fbf0010 +3482014,27bd0018 +3482018,3e00008 +3482020,8e080040 +3482024,ae080068 +3482028,8e080044 +348202c,ae08006c +3482030,96080048 +3482034,9209009d +3482038,31290020 +348203c,15200002 +3482044,3108ffdf +3482048,a6080070 +348204c,92080068 +3482050,340100ff +3482054,15010003 +348205c,34080001 +3482060,a2080f33 +3482064,3e00008 +348206c,27bdffe8 +3482070,afbf0010 +3482074,9608009c +3482078,31080040 +348207c,11000005 +3482084,96080070 +3482088,3108ff0f +348208c,35080030 +3482090,a6080070 +3482094,92280001 +3482098,a2080069 +348209c,96280002 +34820a0,a608006a +34820a4,8e280004 +34820a8,ae08006c +34820ac,c100835 +34820b0,34040000 +34820b4,c100835 +34820b8,34040001 +34820bc,c100835 +34820c0,34040002 +34820c4,8fbf0010 +34820c8,27bd0018 +34820cc,3e00008 +34820d4,2044021 +34820d8,3c098040 +34820dc,2529217c +34820e0,910a006c +34820e4,340100ff +34820e8,11410005 +34820f0,12a4821 +34820f4,91290000 +34820f8,1520001c +3482100,3c098040 +3482104,25292173 +3482108,25290001 +348210c,912a0000 +3482110,11400013 +3482118,20a5821 +348211c,916b0074 +3482120,340100ff +3482124,1161fff8 +348212c,920c006c +3482130,118afff5 +3482138,920c006d +348213c,118afff2 +3482144,920c006e +3482148,118affef +3482150,a10b0069 +3482154,a10a006c +3482158,10000004 +3482160,340900ff +3482164,a1090069 +3482168,a109006c +348216c,3e00008 +3482174,90f0203 +3482178,10d0b00 +348217c,10101 +3482180,1010001 +3482184,1010101 +3482188,10001 +348218c,1010101 +3482190,1010100 +3482194,330821 +3482198,200f0047 +348219c,15ea000e +34821a0,3c028012 +34821a4,8c42a5d4 +34821a8,8e6f00a4 +34821ac,f7a03 +34821b0,14400005 +34821b4,34024830 +34821b8,15e20007 +34821c0,24190003 +34821c4,10000004 +34821c8,34026311 +34821cc,15e20002 +34821d4,24190003 +34821d8,3e00008 +34821e0,330821 +34821e4,3c028012 +34821e8,8c42a5d4 +34821ec,8e6f00a4 +34821f0,f7a03 +34821f4,14400005 +34821f8,34024830 +34821fc,15e20007 +3482204,24190003 +3482208,10000004 +348220c,34026311 +3482210,15e20002 +3482218,24190003 +348221c,3e00008 +3482224,34010018 +3482228,14810015 +3482230,14400013 +3482238,3c0a8012 +348223c,254aa5d0 +3482240,814800a6 +3482244,31080020 +3482248,1100000d +348224c,34020000 +3482250,8148007b +3482254,34090007 +3482258,11090005 +348225c,34090008 +3482260,11090003 +3482268,81008a0 +348226c,34020000 +3482270,81480ed6 +3482274,35080001 +3482278,a1480ed6 +348227c,34020001 +3482280,3e00008 +3482288,3c018040 +348228c,8c210d64 +3482290,10200006 +3482298,94480670 +348229c,31010800 +34822a0,34080800 +34822a4,3e00008 +34822ac,950804c6 +34822b0,3401000b +34822b4,3e00008 +34822bc,27bdffe8 +34822c0,afa50000 +34822c4,afa60004 +34822c8,afa70008 +34822cc,afbf0010 +34822d0,80a80000 +34822d4,25090001 +34822d8,15200005 +34822e0,52025 +34822e4,24a50008 +34822e8,c015c0c +34822ec,24c6fff8 +34822f0,c10436d +34822f8,8fbf0010 +34822fc,8fa70008 +3482300,8fa60004 +3482304,8fa50000 +3482308,8015c0c +348230c,27bd0018 +3482310,ac4d066c +3482314,a0400141 +3482318,a0400144 +348231c,340e00fe +3482320,3e00008 +3482324,a04e0142 +3482328,a2250021 +348232c,3c108040 +3482330,26100938 +3482334,26100004 +3482338,8e0a0000 +348233c,1140000b +3482344,a7c02 +3482348,1f17820 +348234c,3158ff00 +3482350,18c202 +3482354,17000003 +3482358,315900ff +348235c,81ea0000 +3482360,32ac825 +3482364,81008cd +3482368,a1f90000 +348236c,3e00008 +3482374,27bdfff0 +3482378,afbf0008 +348237c,c1008eb +3482380,2264ffff +3482384,344a0000 +3482388,8fbf0008 +348238c,27bd0010 +3482390,27bdfff0 +3482394,afbf0008 +3482398,c1008eb +348239c,36440000 +34823a0,34500000 +34823a4,8fbf0008 +34823a8,27bd0010 +34823ac,3c088040 +34823b0,25080025 +34823b4,91080000 +34823b8,15000007 +34823c0,3c088012 +34823c4,2508a5d0 +34823c8,1044020 +34823cc,91020024 +34823d0,10000007 +34823d8,840c0 +34823dc,3c028040 +34823e0,24420034 +34823e4,1024020 +34823e8,1044020 +34823ec,91020000 +34823f0,3e00008 +34823f8,8fb60030 +34823fc,8fb70034 +3482400,8fbe0038 +3482404,3c088040 +3482408,25080025 +348240c,a1000000 +3482410,3e00008 +3482418,3c0a8012 +348241c,8d4aa5d4 +3482420,15400006 +3482424,31780001 +3482428,17000007 +348242c,3c184230 +3482430,3c184250 +3482434,3e00008 +348243c,17000002 +3482440,3c184210 +3482444,3c184238 +3482448,3e00008 +3482450,906e13e2 +3482454,90620068 +3482458,34010059 +348245c,10410002 +3482460,34010fff +3482464,340100ff +3482468,3e00008 +3482470,3c048012 +3482474,2484a5d0 +3482478,908e13e2 +348247c,90820068 +3482480,34010059 +3482484,10410002 +3482488,34010fff +348248c,340100ff +3482490,3e00008 +3482498,3c08801f +348249c,25085de0 +34824a0,8d01009c +34824a4,14200003 +34824a8,46025102 +34824ac,3c083f80 +34824b0,44882000 +34824b4,3e00008 +34824bc,ac800118 +34824c0,27ff0030 +34824c4,3e00008 +34824c8,ac8e0180 +34824cc,3c018040 +34824d0,8c210d5c +34824d4,10200008 +34824dc,81efa64c +34824e0,34180009 +34824e4,11f80002 +34824e8,34180001 +34824ec,34180000 +34824f0,3e00008 +34824f8,8defa670 +34824fc,31f80018 +3482500,3e00008 +3482508,3c018040 +348250c,8c210d5c +3482510,10200008 +3482518,816ba64c +348251c,340c0009 +3482520,116c0002 +3482524,340c0001 +3482528,340c0000 +348252c,3e00008 +3482534,8d6ba670 +3482538,316c0018 +348253c,3e00008 +3482544,3c018040 +3482548,8c210d5c +348254c,10200008 +3482554,3c098012 +3482558,812aa64c +348255c,340b0009 +3482560,114b0009 +3482564,34020000 +3482568,3e00008 +348256c,34020002 +3482570,3c098012 +3482574,812aa673 +3482578,314a0038 +348257c,15400002 +3482580,34020000 +3482584,34020002 +3482588,3e00008 +3482590,3c0a8040 +3482594,8d4a0db8 +3482598,1140000c +348259c,34010001 +34825a0,1141000d +34825a4,34010002 +34825a8,11410028 +34825ac,34010003 +34825b0,11410053 +34825b4,34010004 +34825b8,1141006e +34825bc,34010005 +34825c0,11410063 +34825c4,34010006 +34825c8,11410064 +34825cc,34010000 +34825d0,3e00008 +34825d4,340a0000 +34825d8,3401003f +34825dc,415024 +34825e0,340f0000 +34825e4,31580001 +34825e8,13000002 +34825f0,25ef0001 +34825f4,31580002 +34825f8,13000002 +3482600,25ef0001 +3482604,31580004 +3482608,13000002 +3482610,25ef0001 +3482614,31580008 +3482618,13000002 +3482620,25ef0001 +3482624,31580010 +3482628,13000002 +3482630,25ef0001 +3482634,31580020 +3482638,13000002 +3482640,25ef0001 +3482644,10000046 +348264c,3c01001c +3482650,2421003f +3482654,415024 +3482658,340f0000 +348265c,31580001 +3482660,13000002 +3482668,25ef0001 +348266c,31580002 +3482670,13000002 +3482678,25ef0001 +348267c,31580004 +3482680,13000002 +3482688,25ef0001 +348268c,31580008 +3482690,13000002 +3482698,25ef0001 +348269c,31580010 +34826a0,13000002 +34826a8,25ef0001 +34826ac,31580020 +34826b0,13000002 +34826b8,25ef0001 +34826bc,3c180004 +34826c0,158c024 +34826c4,13000002 +34826cc,25ef0001 +34826d0,3c180008 +34826d4,158c024 +34826d8,13000002 +34826e0,25ef0001 +34826e4,3c180010 +34826e8,158c024 +34826ec,13000002 +34826f4,25ef0001 +34826f8,10000019 +3482700,3c01001c +3482704,415024 +3482708,340f0000 +348270c,3c180004 +3482710,158c024 +3482714,13000002 +348271c,25ef0001 +3482720,3c180008 +3482724,158c024 +3482728,13000002 +3482730,25ef0001 +3482734,3c180010 +3482738,158c024 +348273c,13000002 +3482744,25ef0001 +3482748,10000005 +3482750,84ef00d0 +3482754,10000002 +348275c,84ef002e +3482760,34010000 +3482764,3c188040 +3482768,87180dc0 +348276c,3e00008 +3482770,1f8502a +3482774,34010018 +3482778,415024 +348277c,15410006 +3482784,90ef0084 +3482788,340a0012 +348278c,114f0002 +3482794,2401ffff +3482798,3e00008 +348279c,415024 +34827a0,3c098040 +34827a4,8d290dbc +34827a8,340a0001 +34827ac,112a0010 +34827b0,340a0002 +34827b4,112a002b +34827b8,340a0003 +34827bc,112a0056 +34827c0,340a0004 +34827c4,112a0068 +34827c8,340a0005 +34827cc,112a0069 +34827d4,340b0018 +34827d8,4b5024 +34827dc,156a0002 +34827e0,34030000 +34827e4,34030001 +34827e8,3e00008 +34827f0,3401003f +34827f4,415024 +34827f8,340c0000 +34827fc,314b0001 +3482800,11600002 +3482808,258c0001 +348280c,314b0002 +3482810,11600002 +3482818,258c0001 +348281c,314b0004 +3482820,11600002 +3482828,258c0001 +348282c,314b0008 +3482830,11600002 +3482838,258c0001 +348283c,314b0010 +3482840,11600002 +3482848,258c0001 +348284c,314b0020 +3482850,11600002 +3482858,258c0001 +348285c,10000046 +3482864,3c01001c +3482868,2421003f +348286c,415024 +3482870,340c0000 +3482874,314b0001 +3482878,11600002 +3482880,258c0001 +3482884,314b0002 +3482888,11600002 +3482890,258c0001 +3482894,314b0004 +3482898,11600002 +34828a0,258c0001 +34828a4,314b0008 +34828a8,11600002 +34828b0,258c0001 +34828b4,314b0010 +34828b8,11600002 +34828c0,258c0001 +34828c4,314b0020 +34828c8,11600002 +34828d0,258c0001 +34828d4,3c0b0004 +34828d8,14b5824 +34828dc,11600002 +34828e4,258c0001 +34828e8,3c0b0008 +34828ec,14b5824 +34828f0,11600002 +34828f8,258c0001 +34828fc,3c0b0010 +3482900,14b5824 +3482904,11600002 +348290c,258c0001 +3482910,10000019 +3482918,3c01001c +348291c,415024 +3482920,340c0000 +3482924,3c0b0004 +3482928,14b5824 +348292c,11600002 +3482934,258c0001 +3482938,3c0b0008 +348293c,14b5824 +3482940,11600002 +3482948,258c0001 +348294c,3c0b0010 +3482950,14b5824 +3482954,11600002 +348295c,258c0001 +3482960,10000005 +3482968,860c00d0 +348296c,10000002 +3482974,860c002e +3482978,34010000 +348297c,3c0b8040 +3482980,856b0dc2 +3482984,18b602a +3482988,15800002 +348298c,34030000 +3482990,34030001 +3482994,3e00008 +348299c,27bdffe4 +34829a0,afb10014 +34829a4,afbf0018 +34829a8,3c038012 +34829ac,2463a5d0 +34829b0,860f001c +34829b4,31f800ff +34829b8,340100ff +34829bc,17010004 +34829c0,27110400 +34829c4,90781397 +34829c8,3318001f +34829cc,27110430 +34829d0,31e18000 +34829d4,14200015 +34829dc,3c088040 +34829e0,8d080d60 +34829e4,1100000b +34829e8,34010001 +34829ec,11010003 +34829f4,1000000d +34829fc,806100a5 +3482a00,30210020 +3482a04,10200008 +3482a0c,10000007 +3482a14,c01e6d1 +3482a1c,34010008 +3482a20,10410002 +3482a28,34112053 +3482a2c,a611010e +3482a30,8fbf0018 +3482a34,8fb10014 +3482a38,3e00008 +3482a3c,27bd001c +3482a40,9059008a +3482a44,340900ff +3482a48,11390007 +3482a50,2b290031 +3482a54,15200005 +3482a58,34190000 +3482a5c,34190001 +3482a60,10000002 +3482a68,34190000 +3482a6c,3e00008 +3482a74,27bdfff0 +3482a78,afa80000 +3482a7c,e7a20004 +3482a80,e7a40008 +3482a84,3c088040 +3482a88,25080d68 +3482a8c,91080000 +3482a90,1100000f +3482a94,340d0200 +3482a98,3c08801e +3482a9c,2508aa30 +3482aa0,c5020028 +3482aa4,3c08c496 +3482aa8,44882000 +3482ab0,4604103c +3482ab8,45010004 +3482ac0,340d0200 +3482ac4,10000002 +3482acc,340d00c0 +3482ad0,c7a40008 +3482ad4,c7a20004 +3482ad8,8fa80000 +3482adc,3e00008 +3482ae0,27bd0010 +3482ae4,8e2a1d44 +3482ae8,314a0100 +3482aec,1540000a +3482af4,8e2a1d48 +3482af8,314a0100 +3482afc,15400007 +3482b04,8e211d48 +3482b08,342a0100 +3482b0c,ae2a1d48 +3482b10,10000003 +3482b14,5024 +3482b18,240c0000 +3482b1c,340a0001 +3482b20,3e00008 +3482b28,27bdfff0 +3482b2c,afbf0000 +3482b30,c10149d +3482b38,8ece1c44 +3482b3c,3c18db06 +3482b40,8fbf0000 +3482b44,3e00008 +3482b48,27bd0010 +3482b50,a21901e9 +3482b54,27bdffe0 +3482b58,afbf0004 +3482b5c,afa40008 +3482b60,afa5000c +3482b64,afa80010 +3482b68,e7aa0014 +3482b6c,e7b00018 +3482b70,c101289 +3482b74,2002021 +3482b78,8fbf0004 +3482b7c,8fa40008 +3482b80,8fa5000c +3482b84,8fa80010 +3482b88,c7aa0014 +3482b8c,c7b00018 +3482b90,3e00008 +3482b94,27bd0020 +3482b98,12c880 +3482b9c,2f94021 +3482ba0,3c0a8040 +3482ba4,8d4a2b4c +3482ba8,11400017 +3482bb0,862a00a4 +3482bb4,34090010 +3482bb8,11490013 +3482bc0,860a0000 +3482bc4,3409000a +3482bc8,1549000f +3482bd0,8e0a0004 +3482bd4,31490080 +3482bd8,1120000b +3482be0,2344821 +3482be4,912a1cc1 +3482be8,11400007 +3482bf0,922a1c27 +3482bf4,15400004 +3482bfc,300d0000 +3482c00,3e00008 +3482c08,3e00008 +3482c10,8e020004 +3482c14,304b0060 +3482c18,3c0a8040 +3482c1c,8d4a2b4c +3482c20,11400017 +3482c28,860a0000 +3482c2c,3409000a +3482c30,15490013 +3482c38,8e0a0004 +3482c3c,31490080 +3482c40,1120000f +3482c48,2344821 +3482c4c,912a1cc1 +3482c50,1140000b +3482c58,922a1c27 +3482c5c,11400008 +3482c64,862a00a4 +3482c68,34090010 +3482c6c,11490004 +3482c74,30020000 +3482c78,3e00008 +3482c80,3e00008 +3482c88,3c088041 +3482c8c,8d0848dc +3482c90,3c098041 +3482c94,8d2948d8 +3482c98,1095825 +3482c9c,3c0a8041 +3482ca0,8d4a48d4 +3482ca4,16a5825 +3482ca8,11600007 +3482cac,340f00ff +3482cb0,9488001c +3482cb4,31080700 +3482cb8,34010300 +3482cbc,11010002 +3482cc4,340f007f +3482cc8,3e00008 +3482ccc,a48f01f0 +3482cd0,3f800000 +3482cd4,34080004 +3482cd8,3c09801d +3482cdc,252984a0 +3482ce0,8d291c44 +3482ce4,11200016 +3482cec,3c018040 +3482cf0,c4362cd0 +3482cf8,46166302 +3482cfc,9127014f +3482d00,1507000f +3482d04,448f2000 +3482d08,3c07803a +3482d0c,24e78bc0 +3482d10,8d280664 +3482d14,1507000a +3482d1c,3c088040 +3482d20,25080d74 +3482d24,91080000 +3482d28,11000005 +3482d30,3c083fc0 +3482d34,4488b000 +3482d3c,46166302 +3482d44,44056000 +3482d48,3e00008 +3482d50,3c188040 +3482d54,97180850 +3482d58,a5d80794 +3482d5c,3c188040 +3482d60,97180852 +3482d64,a5d80796 +3482d68,3c188040 +3482d6c,97180854 +3482d70,a5d80798 +3482d74,ec021 +3482d78,3e00008 +3482d80,27bdffe8 +3482d84,afbf0004 +3482d88,afb00008 +3482d8c,808021 +3482d90,3c048040 +3482d94,94840874 +3482d98,c100b7a +3482da0,ae02022c +3482da4,3c048040 +3482da8,94840876 +3482dac,c100b7a +3482db4,ae020230 +3482db8,3c048040 +3482dbc,94840878 +3482dc0,c100b7a +3482dc8,ae020234 +3482dcc,c100b7a +3482dd0,340400ff +3482dd4,ae020238 +3482dd8,8fbf0004 +3482ddc,8fb00008 +3482de0,3e00008 +3482de4,27bd0018 +3482de8,28810020 +3482dec,14200005 +3482df0,288100e0 +3482df4,10200003 +3482dfc,10000002 +3482e00,861023 +3482e04,851023 +3482e08,3e00008 +3482e0c,304200ff +3482e14,2b010192 +3482e18,10200004 +3482e20,3c088010 +3482e24,3e00008 +3482e28,25088ff8 +3482e2c,3c088040 +3482e30,25080d3c +3482e34,3e00008 +3482e38,2718fe6d +3482e3c,8e1821 +3482e40,28c10192 +3482e44,10200004 +3482e4c,3c198010 +3482e50,3e00008 +3482e54,27398ff8 +3482e58,3c198040 +3482e5c,27390d3c +3482e60,3e00008 +3482e64,24c6fe6d +3482e68,86190000 +3482e6c,8e050004 +3482e70,26040008 +3482e74,194023 +3482e78,29010192 +3482e7c,10200004 +3482e84,3c138010 +3482e88,3e00008 +3482e8c,26738ff8 +3482e90,3c138040 +3482e94,26730d3c +3482e98,3e00008 +3482e9c,2508fe6d +3482ea0,8e040010 +3482ea4,28610192 +3482ea8,10200004 +3482eb0,3c138010 +3482eb4,8100bb2 +3482eb8,26738ff8 +3482ebc,3c138040 +3482ec0,26730d3c +3482ec4,2463fe6d +3482ec8,378c0 +3482ecc,26f1021 +3482ed0,3e00008 +3482ed4,8c450000 +3482ed8,8fa40020 +3482edc,3c088040 +3482ee0,81080d6c +3482ee4,24060050 +3482ee8,1100000b +3482ef0,84860014 +3482ef4,50c00008 +3482ef8,24060050 +3482efc,80a81d44 +3482f00,c85824 +3482f04,55600004 +3482f08,24060050 +3482f0c,1064025 +3482f10,a0a81d44 +3482f14,24c60014 +3482f18,3e00008 +3482f20,27bdfff0 +3482f24,afbf0004 +3482f28,afa80008 +3482f2c,afa9000c +3482f30,3c088040 +3482f34,81080d6c +3482f38,11000009 +3482f40,86080014 +3482f44,11000006 +3482f4c,82291d44 +3482f50,1094024 +3482f54,24020001 +3482f58,11000003 +3482f60,c01c6a5 +3482f68,8fbf0004 +3482f6c,8fa80008 +3482f70,8fa9000c +3482f74,27bd0010 +3482f78,3e00008 +3482f80,8fb00034 +3482f84,848800b4 +3482f88,11000002 +3482f90,a48000b0 +3482f94,3e00008 +3482f9c,1b9fcd5 +3482fa0,fb251ad2 +3482fa4,f2dc +3482fa8,8022 +3482fac,23bdffec +3482fb0,afbf0010 +3482fb4,9608001c +3482fb8,31088000 +3482fbc,1100000f +3482fc4,3c038012 +3482fc8,2463a5d0 +3482fcc,946d0edc +3482fd0,31ad0400 +3482fd4,11a0000b +3482fdc,8c6e0004 +3482fe0,15c00008 +3482fe8,948d1d2a +3482fec,35ae0001 +3482ff0,a48e1d2a +3482ff4,10000003 +3482ffc,c037385 +3483004,8fbf0010 +3483008,23bd0014 +348300c,3e00008 +3483014,8c6e0004 +3483018,3e00008 +3483020,8488001c +3483024,34010002 +3483028,15010015 +3483030,3c028012 +3483034,2442a5d0 +3483038,8c4b0004 +348303c,15600012 +3483044,3c098040 +3483048,25293090 +348304c,ac890154 +3483050,27bdffe0 +3483054,afbf0010 +3483058,afa50014 +348305c,8fa60014 +3483060,3c058040 +3483064,24a52f9c +3483068,c009571 +348306c,24c41c24 +3483070,8fbf0010 +3483074,27bd0020 +3483078,10000003 +3483080,afa40000 +3483084,afa50004 +3483088,3e00008 +3483090,27bdffd8 +3483094,afb00020 +3483098,afbf0024 +348309c,afa5002c +34830a0,808025 +34830a4,c600015c +34830a8,3c01c4a4 +34830ac,24212000 +34830b0,44811000 +34830b4,3c028012 +34830b8,2442a5d0 +34830bc,944b0edc +34830c0,316c0400 +34830c4,944b0ee0 +34830c8,11800031 +34830d0,94ad1d2a +34830d4,31ae0001 +34830d8,11c00006 +34830e0,31adfffe +34830e4,a4ad1d2a +34830e8,34010200 +34830ec,1615826 +34830f0,a44b0ee0 +34830f4,316c0200 +34830f8,1180000b +3483100,34010000 +3483104,44812000 +3483108,3c064080 +348310c,44863000 +3483114,46060200 +3483118,4604403c +3483120,10000009 +3483128,3c01c42a +348312c,44812000 +3483130,3c06c080 +3483134,44863000 +348313c,46060200 +3483140,4608203c +3483148,45000005 +3483150,46004106 +3483154,c008c42 +3483158,3405205e +348315c,2002025 +3483160,e604015c +3483164,46022100 +3483168,e6040028 +348316c,4600240d +3483170,44098000 +3483174,8fa2002c +3483178,8c5807c0 +348317c,8f190028 +3483180,240ffb57 +3483184,a72f0012 +3483188,a7290022 +348318c,a7290032 +3483190,8fbf0024 +3483194,8fb00020 +3483198,27bd0028 +348319c,3e00008 +34831a4,ac20753c +34831a8,3c018040 +34831ac,90210d71 +34831b0,10200008 +34831b4,3c01801d +34831b8,242184a0 +34831bc,94211d2c +34831c0,302100c0 +34831c4,14200003 +34831cc,801ce4c +34831d4,801ce45 +34831dc,3c088012 +34831e0,2508a5d0 +34831e4,8d0a0004 +34831e8,11400006 +34831ec,8d090000 +34831f0,3401003b +34831f4,15210008 +34831fc,3c0bc47a +3483200,ac8b0028 +3483204,3401016d +3483208,15210003 +3483210,3c0bc47a +3483214,ac8b0028 +3483218,3e00008 +348321c,340e0001 +3483224,3c0f8040 +3483228,25ef3220 +348322c,81ef0000 +3483230,3c188040 +3483234,27183221 +3483238,83180000 +348323c,1f87820 +3483240,5e00008 +3483244,34010003 +3483248,1e1082a +348324c,10200003 +3483254,10000005 +3483258,1f08004 +348325c,10000009 +3483260,a4a00030 +3483264,f7822 +3483268,1f08007 +348326c,90af003d +3483270,11e00004 +3483278,108043 +348327c,108400 +3483280,108403 +3483284,3e00008 +3483298,27bdffe8 +348329c,afbf0010 +34832a0,2002025 +34832a4,c0e42c6 +34832ac,3c088040 +34832b0,8d08328c +34832b4,11000003 +34832bc,c100cd3 +34832c4,8fbf0010 +34832c8,3e00008 +34832cc,27bd0018 +34832d0,2002025 +34832d4,240500ff +34832d8,3c088040 +34832dc,8d08328c +34832e0,11000004 +34832e8,92080682 +34832ec,35090010 +34832f0,a2090682 34832f4,3e00008 -34832f8,3025 -34832fc,3c014416 -3483300,44816000 -3483304,3e00008 -3483308,3025 -348330c,afa40018 -3483310,3c08801e -3483314,2508aa30 -3483318,3e00008 -348331c,ad000678 -3483320,27bdffe8 -3483324,afaa0004 -3483328,846f4a2a -348332c,340a0002 -3483330,15ea0002 -3483334,340a0001 -3483338,a46a4a2a -348333c,846f4a2a -3483340,8faa0004 +34832fc,27bdffe8 +3483300,afbf0010 +3483304,24010002 +3483308,3c098012 +348330c,3c188040 +3483310,8f18328c +3483314,1300000a +348331c,92180682 +3483320,330b0010 +3483324,11600006 +348332c,860b0840 +3483330,15600003 +3483338,c100cd3 +3483340,8fbf0010 3483344,3e00008 3483348,27bd0018 -348334c,27bdffe8 -3483350,afaa0004 -3483354,846e4a2a -3483358,340a0002 -348335c,15ca0002 -3483360,340a0003 -3483364,a46a4a2a -3483368,846e4a2a -348336c,8faa0004 -3483370,3e00008 -3483374,27bd0018 -3483378,27bdffe8 -348337c,afaa0004 -3483380,85034a2a -3483384,340a0002 -3483388,146a0002 -348338c,340a0001 -3483390,a50a4a2a -3483394,85034a2a -3483398,8faa0004 -348339c,3e00008 -34833a0,27bd0018 -34833a4,27bdffe8 -34833a8,afaa0004 -34833ac,85034a2a -34833b0,340a0002 -34833b4,146a0002 -34833b8,340a0003 -34833bc,a50a4a2a -34833c0,85034a2a -34833c4,8faa0004 -34833c8,3e00008 -34833cc,27bd0018 -34833d0,27bdffe8 -34833d4,afaa0004 -34833d8,85034a2a -34833dc,340a0002 -34833e0,146a0002 -34833e4,340a0001 -34833e8,a50a4a2a -34833ec,85034a2a -34833f0,8faa0004 -34833f4,3e00008 -34833f8,27bd0018 -34833fc,27bdffe8 -3483400,afaa0004 -3483404,85034a2a -3483408,340a0002 -348340c,146a0002 -3483410,340a0003 -3483414,a50a4a2a -3483418,85034a2a -348341c,8faa0004 -3483420,3e00008 -3483424,27bd0018 -3483428,27bdffe8 -348342c,afaa0004 -3483430,a42bca2a -3483434,340a0002 -3483438,156a0002 -348343c,340a0003 -3483440,a50a4a2a -3483444,85034a2a -3483448,8faa0004 +348334c,92180682 +3483350,330bffef +3483354,a20b0682 +3483358,3c188012 +348335c,2718a5d0 +3483360,870b13c8 +3483364,1560001e +348336c,3c0b8040 +3483370,856b3290 +3483374,560000d +3483378,870c0030 +348337c,930f003d +3483380,11e00004 +3483388,b5843 +348338c,b5c00 +3483390,b5c03 +3483394,18b6022 +3483398,5800004 +34833a0,a70c0030 +34833a4,10000002 +34833ac,a7000030 +34833b0,870b0030 +34833b4,1560000a +34833bc,3c0f801d +34833c0,25ef84a0 +34833c4,85eb00a4 +34833c8,340c0010 +34833cc,156c0004 +34833d4,ade01d2c +34833d8,ade01d38 +34833dc,a30000cc +34833e0,3e00008 +34833e8,3c088040 +34833ec,85083290 +34833f0,240afffe +34833f4,150a0005 +34833fc,86090198 +3483400,11200002 +3483408,a6000184 +348340c,862a0032 +3483410,44808000 +3483414,3e00008 +348341c,23400 +3483420,63403 +3483424,3c010001 +3483428,34211cbc +348342c,817021 +3483430,8dcf0008 +3483434,91f80000 +3483438,340f0001 +348343c,15f80003 +3483444,80e3406 +3483448,8fbf0024 348344c,3e00008 -3483450,27bd0018 -3483454,27bdffe8 -3483458,afaa0004 -348345c,85034a2a -3483460,340a0002 -3483464,146a0002 -3483468,340a0001 -348346c,a50a4a2a -3483470,85034a2a -3483474,8faa0004 -3483478,3e00008 -348347c,27bd0018 -3483480,27bdffe8 -3483484,afaa0004 -3483488,85034a2a -348348c,340a0002 -3483490,146a0002 -3483494,340a0003 -3483498,a50a4a2a -348349c,85034a2a -34834a0,8faa0004 -34834a4,3e00008 -34834a8,27bd0018 -34834ac,3c08801e -34834b0,25084ee8 -34834b4,3409f000 -34834b8,a5090000 -34834bc,3e00008 -34834c0,84cb4a2e -34834c4,24a56f04 -34834c8,8c880144 -34834cc,11050007 -34834d0,3c09801e -34834d4,2529aa30 -34834d8,3c0a446a -34834dc,254ac000 -34834e0,3c0bc324 -34834e4,ad2a0024 -34834e8,ad2b002c -34834ec,3e00008 -34834f4,27bdffd8 -34834f8,afbf0024 -34834fc,afa40028 -3483500,afa5002c -3483504,afa60030 -3483508,c022865 -348350c,8fa40030 -3483510,44822000 -3483514,44800000 -3483518,240e0002 -348351c,468021a0 -3483520,afae0018 -3483524,8fa40028 -3483528,8fa5002c -348352c,8fa60030 -3483530,3c073f80 -3483534,3c080400 -3483538,250832b0 -348353c,14c80002 -3483544,3c074040 -3483548,e7a60014 -348354c,e7a00010 -3483550,c023000 -3483554,e7a0001c -3483558,8fbf0024 -348355c,8fbf0024 -3483560,3e00008 -3483564,27bd0028 -3483568,3c0a8040 -348356c,814a0cd8 -3483570,11400003 -3483574,8ccb0138 -3483578,8d6b0010 -348357c,25690adc -3483580,3e00008 -3483584,acc90180 -3483588,27bdffe8 -348358c,afbf0014 -3483590,3c0a8040 -3483594,814a0cd8 -3483598,15400003 -34835a0,c037500 -34835a8,8fbf0014 -34835ac,3e00008 -34835b0,27bd0018 -34835b4,3c010080 -34835b8,3c180001 -34835bc,3e00008 -34835c0,8c4e0670 -34835c4,3c0a8040 -34835c8,814a0cd8 -34835cc,11400002 -34835d4,34180003 -34835d8,3c078012 -34835dc,24e7a5d0 -34835e0,3e00008 -34835e4,24010003 -34835e8,3c0a8040 -34835ec,814a0cd8 -34835f0,11400008 -34835f8,c100417 -3483600,3c08801e -3483604,25088966 -3483608,34090004 -348360c,a5090000 -3483614,8fbf0014 +3483458,4f1021 +348345c,3c098040 +3483460,81293454 +3483464,11200008 +3483468,8042a65c +348346c,3c0a801d +3483470,254a84a0 +3483474,8d491d44 +3483478,31210002 +348347c,14200002 +3483480,3402000a +3483484,34020000 +3483488,3e00008 +3483490,594021 +3483494,3c0a8040 +3483498,814a3454 +348349c,11400002 +34834a0,8109008c +34834a4,34090000 +34834a8,3e00008 +34834b0,1ee7821 +34834b4,3c0a8040 +34834b8,814a3454 +34834bc,11400002 +34834c0,81efa65c +34834c4,340f0000 +34834c8,3e00008 +34834d0,3c098040 +34834d4,81293454 +34834d8,11200005 +34834dc,3c0a801d +34834e0,254a84a0 +34834e4,8d491d44 +34834e8,35290002 +34834ec,ad491d44 +34834f0,3e00008 +34834f4,afa50024 +34835bc,ff00 +34835c0,3c0a8040 +34835c4,254a35be +34835c8,914b0000 +34835cc,340c00ff +34835d0,a14c0000 +34835d4,34087fff +34835d8,15c80006 +34835dc,3c098040 +34835e0,2529357c +34835e4,116c000c +34835e8,b5840 +34835ec,12b4821 +34835f0,952e0000 +34835f4,27bdfff0 +34835f8,afbf0004 +34835fc,afa40008 +3483600,c100d9a +3483604,1c02021 +3483608,407021 +348360c,8fbf0004 +3483610,8fa40008 +3483614,27bd0010 3483618,3e00008 -348361c,27bd0018 -3483620,27bdffe0 -3483624,afbf0014 -3483628,afa10018 -348362c,afa4001c -3483630,3c0a8040 -3483634,814a0cd8 -3483638,1540000b -3483640,3c04801d -3483644,248484a0 -3483648,3c058040 -348364c,90a50cdb -3483650,34060000 -3483654,c037385 -348365c,34044802 -3483660,c0191bc -3483668,8fa4001c -348366c,8fa10018 -3483670,8fbf0014 -3483674,3e00008 -3483678,27bd0020 -3483680,27bdffe0 -3483684,afbf0014 -3483688,afa40018 -348368c,3c0d8040 -3483690,81ad367c -3483694,15a0000c -348369c,3c08801e -34836a0,2508aa30 -34836a4,8d090670 -34836a8,340a4000 -34836ac,12a5824 -34836b0,1160000d -34836b8,34080001 -34836bc,3c018040 -34836c0,a028367c -34836c4,10000023 -34836c8,3c08801e -34836cc,2508aa30 -34836d0,8d090670 -34836d4,340a4000 -34836d8,12a5824 -34836dc,1160000c -34836e4,1000001b -34836e8,24a420d8 -34836ec,c037519 -34836f4,24010002 -34836f8,14410016 -3483700,3c08801e -3483704,25088966 -3483708,34090004 -348370c,a5090000 -3483710,3c0b8012 -3483714,256ba5d0 -3483718,816c0ede -348371c,358c0001 -3483720,a16c0ede -3483724,3c09801e -3483728,2529a2ba -348372c,340802ae -3483730,a5280000 -3483734,3408002a -3483738,3c09801e -348373c,2529a2fe -3483740,a1280000 -3483744,34080014 -3483748,3c09801e -348374c,2529a2b5 -3483750,a1280000 -3483754,8fbf0014 -3483758,3e00008 -348375c,27bd0020 -3483760,27bdffd0 -3483764,afbf0014 -3483768,afa80018 -348376c,afa9001c -3483770,afaa0020 -3483774,afab0024 -3483778,afac0028 -348377c,afad002c -3483780,3c088012 -3483784,2508a5d0 -3483788,85090f20 -348378c,31290040 -3483790,1120000e -3483794,3c08801e -3483798,2508aa30 -348379c,8d09039c -34837a0,1120000a -34837a4,340a00a1 -34837a8,852b0000 -34837ac,154b0007 -34837b0,240cf7ff -34837b4,8d0d066c -34837b8,18d6824 -34837bc,ad0d066c -34837c0,ad00039c -34837c4,ad00011c -34837c8,ad200118 -34837cc,afad002c -34837d0,afac0028 -34837d4,afab0024 -34837d8,afaa0020 -34837dc,afa9001c -34837e0,afa80018 -34837e4,afbf0014 -34837e8,860e001c -34837ec,3e00008 -34837f0,27bd0030 -34837f4,27bdffd0 -34837f8,afbf0014 -34837fc,afa80018 -3483800,afa9001c -3483804,afaa0020 -3483808,84a800a4 -348380c,34090002 -3483810,1509000c -3483814,340a0006 -3483818,80880003 -348381c,150a0009 -3483824,3c088012 -3483828,2508a5d0 -348382c,85090f20 -3483830,31290040 -3483834,11200003 -348383c,c0083ad -3483844,8faa0020 -3483848,8fa9001c -348384c,8fa80018 -3483850,8fbf0014 -3483854,8602001c -3483858,3e00008 -348385c,27bd0030 -3483860,27bdffd0 -3483864,afbf001c -3483868,afa40020 -348386c,afa50024 -3483870,e7a00028 -3483874,4602003c -348387c,45010005 -3483884,c100ec8 -348388c,10000003 -3483894,c100eca -348389c,34060014 -34838a0,3407000a -34838a4,44801000 -34838a8,c7a00028 -34838ac,8fa50024 -34838b0,8fa40020 -34838b4,8fbf001c -34838b8,4602003c -34838bc,27bd0030 -34838c0,3e00008 -34838c8,27bdffd0 -34838cc,afbf001c -34838d0,afa40020 -34838d4,afa50024 -34838d8,e7a40028 -34838dc,e7a6002c -34838e0,4606203c -34838e8,45000003 -34838f0,c100ed5 -34838f8,34060014 -34838fc,3407000a -3483900,44801000 -3483904,c7a6002c -3483908,c7a40028 -348390c,8fa50024 -3483910,8fa40020 -3483914,8fbf001c -3483918,4606203c -348391c,27bd0030 -3483920,3e00008 -3483928,c100f38 -3483930,8fbf001c -3483934,27bd0020 -3483938,3e00008 -3483944,27bdffe8 -3483948,afbf0014 -348394c,c008ab4 -3483954,8fbf0014 -3483958,27bd0018 -348395c,8fa40018 -3483960,8c8a0138 -3483964,8d4a0010 -3483968,25431618 -348396c,3c088040 -3483970,81083940 -3483974,1100000a -3483978,3c098012 -348397c,2529a5d0 -3483980,95281406 -3483984,290105dc -3483988,14200005 -348398c,9488029c -3483990,31080002 -3483994,15000002 -348399c,254314d0 -34839a0,3e00008 -34839a8,3c188012 -34839ac,2718a5d0 -34839b0,8f180004 -34839b4,17000003 -34839bc,3c0a8041 -34839c0,254ab4d8 -34839c4,24780008 -34839c8,3e00008 -34839cc,adf802c0 -34839d0,3c0f8012 -34839d4,25efa5d0 -34839d8,8def0004 -34839dc,15e00003 -34839e4,3c0e8041 -34839e8,25ceb4d8 -34839ec,ac4e0004 -34839f0,3e00008 -34839f4,820f013f -34839fc,3c088040 -3483a00,810839f8 -3483a04,11000007 -3483a08,3c09801d -3483a0c,252984a0 -3483a10,8d281d44 -3483a14,31080002 -3483a18,11000002 -3483a20,34069100 -3483a24,3e00008 -3483a28,afa60020 -3483a2c,3c088040 -3483a30,810839f8 -3483a34,11000005 -3483a38,3c09801d -3483a3c,252984a0 -3483a40,8d281d44 -3483a44,35080002 -3483a48,ad281d44 -3483a4c,3e00008 -3483a50,34e74000 -3483a58,3c038012 -3483a5c,2463a5d0 -3483a60,8c6e0004 -3483a64,15c0000c -3483a68,24020005 -3483a6c,24020011 -3483a70,3c088040 -3483a74,81083a54 -3483a78,11000007 -3483a7c,3c09801d -3483a80,252984a0 -3483a84,8d281d44 -3483a88,31080002 -3483a8c,11000002 -3483a90,34020001 -3483a94,34020003 -3483a98,3e00008 -3483a9c,3c048010 -3483aa0,3c088040 -3483aa4,81083a54 -3483aa8,11000005 -3483aac,3c09801d -3483ab0,252984a0 -3483ab4,8d281d44 -3483ab8,35080002 -3483abc,ad281d44 +348361c,a42e1e1a +3483620,9608001c +3483624,84303 +3483628,3108000f +348362c,29090002 +3483630,1520000b +3483638,960d0018 +348363c,27bdfff0 +3483640,afbf0004 +3483644,afa40008 +3483648,c100d9a +348364c,1a02021 +3483650,406821 +3483654,8fbf0004 +3483658,8fa40008 +348365c,27bd0010 +3483660,3e00008 +3483664,270821 +3483668,34087ff9 +348366c,884022 +3483670,501000f +3483674,34081000 +3483678,884022 +348367c,500000c +3483680,3c098012 +3483684,2529a5d0 +3483688,3c0a8040 +348368c,254a34f8 +3483690,3c0b8040 +3483694,256b35be +3483698,a1680000 +348369c,84080 +34836a0,1485021 +34836a4,95440000 +34836a8,91480002 +34836ac,a1281397 +34836b0,3e00008 +34836b4,801021 +34836b8,8c6d0004 +34836bc,3c0e8040 +34836c0,81ce0d72 +34836c4,1ae7825 +34836c8,11e0000a +34836d0,11c00006 +34836d8,946e0ed4 +34836dc,31ce0010 +34836e0,1cd7025 +34836e4,11c00003 +34836ec,3e00008 +34836f0,340f0001 +34836f4,3e00008 +34836f8,340f0000 +34836fc,1000 +3483700,4800 +3483708,7000 +348370c,4800 +3483718,8041f3b0 +348371c,42890 +3483720,34191000 +3483724,340a4800 +3483728,340d0000 +348372c,340c7000 +3483730,340e4800 +3483734,3e00008 +3483738,34180000 +3483740,3c088012 +3483744,2508a5d0 +3483748,95090eda +348374c,31290008 +3483750,15200008 +3483754,8d090004 +3483758,15200004 +348375c,3c098040 +3483760,8129373c +3483764,15200003 +348376c,3e00008 +3483770,34090000 +3483774,3e00008 +3483778,34090001 +348377c,3c08801d +3483780,25082578 +3483784,3409006c +3483788,8d0a6300 +348378c,112a0009 +3483790,340a0001 +3483794,340b0036 +3483798,ad0a6300 +348379c,a10b6304 +34837a0,240cffff +34837a4,810e63e7 +34837a8,15cc0002 +34837ac,340d0002 +34837b0,a10d63e7 +34837b4,3e00008 +34837b8,24060022 +34837c4,afb0003c +34837c8,27bdffe0 +34837cc,afbf0014 +34837d0,3c098040 +34837d4,252937bc +34837d8,812a0000 +34837dc,1540000a +34837e4,8e4b0028 +34837e8,3c0c4370 +34837ec,16c082a +34837f0,14200005 +34837f4,340d0001 +34837f8,a12d0000 +34837fc,3404001b +3483800,c032a9c +3483808,8fbf0014 +348380c,3e00008 +3483810,27bd0020 +3483814,8e721c44 +3483818,240e0003 +348381c,a22e05b0 +3483820,926f07af +3483824,4406b000 +3483828,4407a000 +348382c,3e00008 +3483834,90580000 +3483838,27bdffd0 +348383c,afbf0014 +3483840,afa40018 +3483844,afa5001c +3483848,afa60020 +348384c,afa70024 +3483850,3c048040 +3483854,808437bc +3483858,1080001b +3483860,3c048040 +3483864,8c8437c0 +3483868,2885001e +348386c,14a00016 +3483874,28850050 +3483878,10a0000c +3483880,3c043d4d +3483884,2484cccd +3483888,ae4404d0 +348388c,2402025 +3483890,248404c8 +3483894,3c05437f +3483898,3c063f80 +348389c,3c074120 +34838a0,c0190a0 +34838a8,10000007 +34838ac,2402025 +34838b0,248404c8 +34838b4,34050000 +34838b8,3c063f80 +34838bc,3c074120 +34838c0,c0190a0 +34838c8,8fbf0014 +34838cc,8fa40018 +34838d0,8fa5001c +34838d4,8fa60020 +34838d8,8fa70024 +34838dc,3e00008 +34838e0,27bd0030 +34838e4,860800b6 +34838e8,25084000 +34838ec,a60800b6 +34838f0,34080001 +34838f4,a20805e8 +34838f8,a2000554 +34838fc,8e090004 +3483900,240afffe +3483904,1495824 +3483908,ae0b0004 +348390c,3c088040 +3483910,25083954 +3483914,3e00008 +3483918,ae08013c +348391c,860800b6 +3483920,2508c000 +3483924,a60800b6 +3483928,34080001 +348392c,a20805e8 +3483930,a2000554 +3483934,8e090004 +3483938,240afffe +348393c,1495824 +3483940,ae0b0004 +3483944,3c088040 +3483948,25083954 +348394c,3e00008 +3483950,ae08013c +3483954,27bdffd0 +3483958,afbf0014 +348395c,afa40018 +3483960,afa5001c +3483964,34080001 +3483968,a0880554 +348396c,8488001c +3483970,11000006 +3483978,3c048040 +348397c,8c8437c0 +3483980,24850001 +3483984,3c018040 +3483988,ac2537c0 +348398c,3c048040 +3483990,8c8437c0 +3483994,34050003 +3483998,14850009 +34839a0,8fa40018 +34839a4,8488001c +34839a8,34090001 +34839ac,11090002 +34839b0,240539b0 +34839b4,240539b1 +34839b8,c008bf4 +34839c0,28850028 +34839c4,14a0001a +34839cc,8fa40018 +34839d0,24840028 +34839d4,3c0543c8 +34839d8,3c063f80 +34839dc,3c0740c0 +34839e0,c0190a0 +34839e8,8fa40018 +34839ec,24840558 +34839f0,c023270 +34839f8,8fa40018 +34839fc,c008bf4 +3483a00,2405311f +3483a04,3c048040 +3483a08,8c8437c0 +3483a0c,34080061 +3483a10,14880007 +3483a18,8fa40018 +3483a1c,8fa5001c +3483a20,8c8b0138 +3483a24,8d6b0010 +3483a28,256913ec +3483a2c,ac89013c +3483a30,8fbf0014 +3483a34,3e00008 +3483a38,27bd0030 +3483a3c,3c01c416 +3483a40,44816000 +3483a44,3e00008 +3483a48,3025 +3483a4c,3c014416 +3483a50,44816000 +3483a54,3e00008 +3483a58,3025 +3483a5c,afa40018 +3483a60,3c08801e +3483a64,2508aa30 +3483a68,3e00008 +3483a6c,ad000678 +3483a70,27bdffe8 +3483a74,afaa0004 +3483a78,846f4a2a +3483a7c,340a0002 +3483a80,15ea0002 +3483a84,340a0001 +3483a88,a46a4a2a +3483a8c,846f4a2a +3483a90,8faa0004 +3483a94,3e00008 +3483a98,27bd0018 +3483a9c,27bdffe8 +3483aa0,afaa0004 +3483aa4,846e4a2a +3483aa8,340a0002 +3483aac,15ca0002 +3483ab0,340a0003 +3483ab4,a46a4a2a +3483ab8,846e4a2a +3483abc,8faa0004 3483ac0,3e00008 -3483ac4,34e78000 +3483ac4,27bd0018 3483ac8,27bdffe8 -3483acc,afa20010 -3483ad0,afbf0014 -3483ad4,c102166 -3483ad8,46000306 -3483adc,406821 -3483ae0,8fa20010 -3483ae4,8fbf0014 -3483ae8,3e00008 -3483aec,27bd0018 -3483af0,ac800130 -3483af4,ac800134 -3483af8,3c018012 -3483afc,2421a5d0 -3483b00,80280edc -3483b04,35080008 -3483b08,a0280edc -3483b0c,3c013f80 -3483b10,3e00008 -3483b14,44813000 -3483b20,3e00008 -3483b28,3c028041 -3483b2c,8c43a270 -3483b30,3c028041 -3483b34,24429fe2 -3483b38,14620004 -3483b3c,3c038041 -3483b40,3c028041 -3483b44,24429fe4 -3483b48,ac62a270 -3483b4c,3e00008 -3483b54,3c028041 -3483b58,8c43a270 -3483b5c,3c028041 -3483b60,24429fc8 -3483b64,10620003 -3483b68,3c028041 -3483b6c,10000003 -3483b70,24429fe8 -3483b74,3c028041 -3483b78,24429fca -3483b7c,3c038041 -3483b80,3e00008 -3483b84,ac62a270 -3483b88,27bdffc8 -3483b8c,afbf0034 -3483b90,afb40030 -3483b94,afb3002c -3483b98,afb20028 -3483b9c,afb10024 -3483ba0,afb00020 -3483ba4,809025 -3483ba8,3c02801c -3483bac,344284a0 -3483bb0,3c030001 -3483bb4,431021 -3483bb8,90420745 -3483bbc,240300aa -3483bc0,14430002 -3483bc4,a08825 -3483bc8,240200ff -3483bcc,3c03801c -3483bd0,346384a0 -3483bd4,8c700000 -3483bd8,8e0302b0 -3483bdc,24640008 -3483be0,ae0402b0 -3483be4,3c04de00 -3483be8,ac640000 -3483bec,3c048041 -3483bf0,2484a488 -3483bf4,ac640004 -3483bf8,8e0302b0 -3483bfc,24640008 -3483c00,ae0402b0 -3483c04,3c04e700 -3483c08,ac640000 -3483c0c,ac600004 -3483c10,8e0302b0 -3483c14,24640008 -3483c18,ae0402b0 -3483c1c,3c04fc11 -3483c20,34849623 -3483c24,ac640000 -3483c28,3c04ff2f -3483c2c,3484ffff -3483c30,ac640004 -3483c34,8e0402b0 -3483c38,24830008 -3483c3c,ae0302b0 -3483c40,3c03fa00 -3483c44,ac830000 -3483c48,401825 -3483c4c,c2102b -3483c50,10400002 -3483c54,261302a8 -3483c58,c01825 -3483c5c,2402ff00 -3483c60,621825 -3483c64,ac830004 -3483c68,24070001 -3483c6c,24060009 -3483c70,3c148041 -3483c74,2685a448 -3483c78,c101bdf -3483c7c,2602025 -3483c80,24020010 -3483c84,afa20018 -3483c88,afa20014 -3483c8c,263100bd -3483c90,afb10010 -3483c94,2647001b -3483c98,3025 -3483c9c,2685a448 -3483ca0,c101c47 -3483ca4,2602025 -3483ca8,8e0202b0 -3483cac,24430008 -3483cb0,ae0302b0 -3483cb4,3c03e700 -3483cb8,ac430000 -3483cbc,ac400004 -3483cc0,8fbf0034 -3483cc4,8fb40030 -3483cc8,8fb3002c -3483ccc,8fb20028 -3483cd0,8fb10024 -3483cd4,8fb00020 -3483cd8,3e00008 -3483cdc,27bd0038 -3483ce0,3c028041 -3483ce4,8c43a270 -3483ce8,3c028041 -3483cec,24429fc8 -3483cf0,10620021 -3483cf8,27bdffe8 -3483cfc,afbf0014 -3483d00,90660000 -3483d04,90620001 -3483d08,22600 -3483d0c,42603 -3483d10,42183 -3483d14,3042003f -3483d18,21040 -3483d1c,3c038041 -3483d20,24639fc8 -3483d24,621021 -3483d28,3c038041 -3483d2c,ac62a270 -3483d30,3c02801c -3483d34,344284a0 -3483d38,944300a4 -3483d3c,28620011 -3483d40,10400008 -3483d44,2825 -3483d48,3c028011 -3483d4c,3442a5d0 -3483d50,431021 -3483d54,804500bc -3483d58,52fc3 -3483d5c,30a50011 -3483d60,24a5ffef -3483d64,c100ee2 -3483d6c,8fbf0014 -3483d70,3e00008 -3483d74,27bd0018 -3483d78,3e00008 -3483d80,27bdffd8 -3483d84,afbf0024 -3483d88,afb20020 -3483d8c,afb1001c -3483d90,afb00018 -3483d94,808025 -3483d98,909101e9 -3483d9c,3c028040 -3483da0,8c432704 -3483da4,10600018 -3483da8,2201025 -3483dac,9487001c -3483db0,73943 -3483db4,30e7007f -3483db8,3c02801c -3483dbc,344284a0 -3483dc0,904600a5 -3483dc4,802825 -3483dc8,c1019e1 -3483dcc,27a40010 -3483dd0,97b20014 -3483dd4,1240000c -3483dd8,2201025 -3483ddc,c101edc -3483de0,93a40017 -3483de4,54400004 -3483de8,90420007 -3483dec,c101edc -3483df0,2402025 -3483df4,90420007 -3483df8,30510001 -3483dfc,56200001 -3483e00,24110005 -3483e04,30420002 -3483e08,a21101ec -3483e0c,a20201ed -3483e10,8fbf0024 -3483e14,8fb20020 -3483e18,8fb1001c -3483e1c,8fb00018 -3483e20,3e00008 -3483e24,27bd0028 -3483e28,27bdffd8 -3483e2c,afbf0024 -3483e30,afb10020 -3483e34,afb0001c -3483e38,3c02801c -3483e3c,344284a0 -3483e40,94500020 -3483e44,3c02801d -3483e48,3442aa30 -3483e4c,8c42066c -3483e50,3c033000 -3483e54,24630483 -3483e58,431024 -3483e5c,544000ab -3483e60,8fbf0024 -3483e64,3c02801c -3483e68,344284a0 -3483e6c,8c430008 -3483e70,3c02800f -3483e74,8c4213ec -3483e78,546200a4 -3483e7c,8fbf0024 -3483e80,3c028011 -3483e84,3442a5d0 -3483e88,8c42135c -3483e8c,5440009f -3483e90,8fbf0024 -3483e94,3c02800e -3483e98,3442f1b0 -3483e9c,8c420000 -3483ea0,30420020 -3483ea4,54400099 -3483ea8,8fbf0024 -3483eac,3c028011 -3483eb0,3442a5d0 -3483eb4,8c42009c -3483eb8,3c036000 -3483ebc,431024 -3483ec0,10400007 -3483ec4,3c028011 -3483ec8,3442a5d0 -3483ecc,8c420004 -3483ed0,50400010 -3483ed4,32020200 -3483ed8,10000085 -3483edc,3c028011 -3483ee0,3442a5d0 -3483ee4,8042007b -3483ee8,24030007 -3483eec,10430003 -3483ef0,24030008 -3483ef4,14430085 -3483ef8,8fbf0024 -3483efc,3c028011 -3483f00,3442a5d0 -3483f04,8c420004 -3483f08,54400053 -3483f0c,32100400 -3483f10,32020200 -3483f14,10400026 -3483f18,3211ffff -3483f1c,3c028011 -3483f20,3442a5d0 -3483f24,9442009c -3483f28,30422000 -3483f2c,50400021 -3483f30,32310100 -3483f34,3c028011 -3483f38,3442a5d0 -3483f3c,94420070 -3483f40,3042f000 -3483f44,38422000 -3483f48,2102b -3483f4c,24420001 -3483f50,3c048011 -3483f54,3484a5d0 -3483f58,21300 -3483f5c,94830070 -3483f60,30630fff -3483f64,621025 -3483f68,a4820070 -3483f6c,3c04801d -3483f70,3485aa30 -3483f74,3c028007 -3483f78,34429764 -3483f7c,40f809 -3483f80,248484a0 -3483f84,3c058010 -3483f88,24a243a8 -3483f8c,afa20014 -3483f90,24a743a0 -3483f94,afa70010 -3483f98,24060004 -3483f9c,24a54394 -3483fa0,3c02800c -3483fa4,3442806c -3483fa8,40f809 -3483fac,24040835 -3483fb0,32310100 -3483fb4,52200028 -3483fb8,32100400 -3483fbc,3c028011 -3483fc0,3442a5d0 -3483fc4,9442009c -3483fc8,30424000 -3483fcc,50400022 -3483fd0,32100400 -3483fd4,3c028011 -3483fd8,3442a5d0 -3483fdc,94420070 -3483fe0,3042f000 -3483fe4,24033000 -3483fe8,50430002 -3483fec,24040001 -3483ff0,24040003 -3483ff4,3c038011 -3483ff8,3463a5d0 -3483ffc,42300 -3484000,94620070 -3484004,30420fff -3484008,441025 -348400c,a4620070 -3484010,3c04801d -3484014,3485aa30 -3484018,3c028007 -348401c,34429764 -3484020,40f809 -3484024,248484a0 -3484028,3c058010 -348402c,24a243a8 -3484030,afa20014 -3484034,24a743a0 -3484038,afa70010 -348403c,24060004 -3484040,24a54394 -3484044,3c02800c -3484048,3442806c -348404c,40f809 -3484050,24040835 -3484054,32100400 -3484058,1200002c -348405c,8fbf0024 -3484060,3c02801c -3484064,344284a0 -3484068,3c030001 -348406c,431021 -3484070,94420934 -3484074,14400026 -3484078,8fb10020 -348407c,3c028011 -3484080,3442a5d0 -3484084,9046007b -3484088,24c2fff9 -348408c,304200ff -3484090,2c420002 -3484094,1040001f -3484098,8fb0001c -348409c,3c02801c -34840a0,344284a0 -34840a4,431021 -34840a8,90420758 -34840ac,14400019 -34840b0,3c02801d -34840b4,3442aa30 -34840b8,8c42066c -34840bc,3c0308a0 -34840c0,24630800 -34840c4,431024 -34840c8,14400012 -34840cc,24070002 -34840d0,3c04801d -34840d4,3485aa30 -34840d8,3c028038 -34840dc,3442c9a0 -34840e0,40f809 -34840e4,248484a0 -34840e8,10000008 -34840ec,8fbf0024 -34840f0,3442a5d0 -34840f4,8042007b -34840f8,24030007 -34840fc,1043ffd5 -3484100,24030008 -3484104,1043ffd3 -3484108,8fbf0024 -348410c,8fb10020 -3484110,8fb0001c -3484114,3e00008 -3484118,27bd0028 -348411c,3c028011 -3484120,3442a5d0 -3484124,8c42009c -3484128,3c036000 -348412c,431024 -3484130,10400006 -3484134,3c028011 -3484138,3442a5d0 -348413c,8c420004 -3484140,1040000a -3484144,3c028040 -3484148,3c028011 -348414c,3442a5d0 -3484150,9042007b -3484154,2442fff9 -3484158,304200ff -348415c,2c420002 -3484160,10400123 -3484168,3c028040 -348416c,9042088a -3484170,1040011f -3484178,27bdffc8 -348417c,afbf0034 -3484180,afb30030 -3484184,afb2002c -3484188,afb10028 -348418c,afb00024 -3484190,3c02801c -3484194,344284a0 -3484198,8c500000 -348419c,8e0302b0 -34841a0,24640008 -34841a4,ae0402b0 -34841a8,3c04de00 -34841ac,ac640000 -34841b0,3c048041 -34841b4,2484a488 -34841b8,ac640004 -34841bc,8e0302b0 -34841c0,24640008 -34841c4,ae0402b0 -34841c8,3c04e700 -34841cc,ac640000 -34841d0,ac600004 -34841d4,8e0302b0 -34841d8,24640008 -34841dc,ae0402b0 -34841e0,3c04fc11 -34841e4,34849623 -34841e8,ac640000 -34841ec,3c04ff2f -34841f0,3484ffff -34841f4,ac640004 -34841f8,3c030001 -34841fc,431021 -3484200,94520744 -3484204,240200aa -3484208,124200e0 -348420c,24070001 -3484210,261102a8 -3484214,8e0202b0 -3484218,24430008 -348421c,ae0302b0 -3484220,3c03fa00 -3484224,ac430000 -3484228,2403ff00 -348422c,2431825 -3484230,ac430004 -3484234,3025 -3484238,3c138041 -348423c,2665a428 -3484240,c101bdf -3484244,2202025 -3484248,24020010 -348424c,afa20018 -3484250,afa20014 -3484254,24020040 -3484258,afa20010 -348425c,2407010f -3484260,3025 -3484264,2665a428 -3484268,c101c47 -348426c,2202025 -3484270,240200ff -3484274,16420023 -3484278,3c028011 -348427c,3c02801d -3484280,3442aa30 -3484284,8c42066c -3484288,3c033000 -348428c,24630483 -3484290,431024 -3484294,10400009 -3484298,3c02801c -348429c,8e0202b0 -34842a0,24430008 -34842a4,ae0302b0 -34842a8,3c03fa00 -34842ac,ac430000 -34842b0,2403ff46 -34842b4,10000012 -34842b8,ac430004 -34842bc,344284a0 -34842c0,8c430008 -34842c4,3c02800f -34842c8,8c4213ec -34842cc,5462fff4 -34842d0,8e0202b0 -34842d4,3c028011 -34842d8,3442a5d0 -34842dc,8c42135c -34842e0,5440ffef -34842e4,8e0202b0 -34842e8,3c02800e -34842ec,3442f1b0 -34842f0,8c420000 -34842f4,30420020 -34842f8,5440ffe9 -34842fc,8e0202b0 -3484300,3c028011 -3484304,3442a5d0 -3484308,9442009c -348430c,30422000 -3484310,1040002a -3484314,3c028011 -3484318,3442a5d0 -348431c,8c420004 -3484320,14400054 -3484324,3c028011 -3484328,24070001 -348432c,24060045 -3484330,3c058041 -3484334,24a5a458 -3484338,c101bdf -348433c,2202025 -3484340,3c028011 -3484344,3442a5d0 -3484348,94420070 -348434c,3042f000 -3484350,24032000 -3484354,5443000e -3484358,2402000c -348435c,24020010 -3484360,afa20018 -3484364,afa20014 -3484368,24020040 -348436c,afa20010 -3484370,24070102 -3484374,3025 -3484378,3c058041 -348437c,24a5a458 -3484380,c101c47 -3484384,2202025 -3484388,1000000c -348438c,3c028011 -3484390,afa20018 -3484394,afa20014 -3484398,24020042 -348439c,afa20010 -34843a0,24070104 -34843a4,3025 -34843a8,3c058041 -34843ac,24a5a458 -34843b0,c101c47 -34843b4,2202025 -34843b8,3c028011 -34843bc,3442a5d0 -34843c0,9442009c -34843c4,30424000 -34843c8,1040002a -34843cc,3c028011 -34843d0,3442a5d0 -34843d4,8c420004 -34843d8,14400026 -34843dc,3c028011 -34843e0,24070001 -34843e4,24060046 -34843e8,3c058041 -34843ec,24a5a458 -34843f0,c101bdf -34843f4,2202025 -34843f8,3c028011 -34843fc,3442a5d0 -3484400,94420070 -3484404,3042f000 -3484408,24033000 -348440c,5443000e -3484410,2402000c -3484414,24020010 -3484418,afa20018 -348441c,afa20014 -3484420,24020040 -3484424,afa20010 -3484428,2407011b -348442c,3025 -3484430,3c058041 -3484434,24a5a458 -3484438,c101c47 -348443c,2202025 -3484440,1000000c -3484444,3c028011 -3484448,afa20018 -348444c,afa20014 -3484450,24020042 -3484454,afa20010 -3484458,2407011d -348445c,3025 -3484460,3c058041 -3484464,24a5a458 -3484468,c101c47 -348446c,2202025 -3484470,3c028011 -3484474,3442a5d0 -3484478,9042007b -348447c,2442fff9 -3484480,304200ff -3484484,2c420002 -3484488,50400034 -348448c,8e0202b0 -3484490,240200ff -3484494,1642001f -3484498,24070001 -348449c,3c02801c -34844a0,344284a0 -34844a4,3c030001 -34844a8,431021 -34844ac,94420934 -34844b0,10400009 -34844b4,3c02801c -34844b8,8e0202b0 -34844bc,24430008 -34844c0,ae0302b0 -34844c4,3c03fa00 -34844c8,ac430000 -34844cc,2403ff46 -34844d0,1000000f -34844d4,ac430004 -34844d8,344284a0 -34844dc,3c030001 -34844e0,431021 -34844e4,90420758 -34844e8,5440fff4 -34844ec,8e0202b0 -34844f0,3c02801d -34844f4,3442aa30 -34844f8,8c42066c -34844fc,3c0308a0 -3484500,24630800 -3484504,431024 -3484508,5440ffec -348450c,8e0202b0 -3484510,24070001 -3484514,3c028011 -3484518,3442a5d0 -348451c,8046007b -3484520,3c128041 -3484524,2645a458 -3484528,c101bdf -348452c,2202025 -3484530,2402000c -3484534,afa20018 -3484538,afa20014 -348453c,2402004d -3484540,afa20010 -3484544,24070111 -3484548,3025 -348454c,2645a458 -3484550,c101c47 -3484554,2202025 -3484558,8e0202b0 -348455c,24430008 -3484560,ae0302b0 -3484564,3c03e700 -3484568,ac430000 -348456c,ac400004 -3484570,8fbf0034 -3484574,8fb30030 -3484578,8fb2002c -348457c,8fb10028 -3484580,8fb00024 -3484584,3e00008 -3484588,27bd0038 -348458c,261102a8 -3484590,8e0202b0 -3484594,24430008 -3484598,ae0302b0 -348459c,3c03fa00 -34845a0,ac430000 -34845a4,2403ffff -34845a8,ac430004 -34845ac,3025 -34845b0,3c128041 -34845b4,2645a428 -34845b8,c101bdf -34845bc,2202025 -34845c0,24020010 -34845c4,afa20018 -34845c8,afa20014 -34845cc,24020040 -34845d0,afa20010 -34845d4,2407010f -34845d8,3025 -34845dc,2645a428 -34845e0,c101c47 -34845e4,2202025 -34845e8,1000ff24 -34845ec,241200ff -34845f0,3e00008 -34845f8,3c028041 -34845fc,8c42b4bc -3484600,10400274 -3484604,3c02801c -3484608,27bdff90 -348460c,afbf006c -3484610,afbe0068 -3484614,afb70064 -3484618,afb60060 -348461c,afb5005c -3484620,afb40058 -3484624,afb30054 -3484628,afb20050 -348462c,afb1004c -3484630,afb00048 -3484634,344284a0 -3484638,3c030001 -348463c,431021 -3484640,94430934 -3484644,24020006 -3484648,14620256 -348464c,808025 -3484650,3c02801c -3484654,344284a0 -3484658,3c030001 -348465c,431021 -3484660,94420948 -3484664,1440024f -3484668,3c02801c -348466c,344284a0 -3484670,431021 -3484674,94420944 -3484678,1440024a -348467c,3c02801c -3484680,344284a0 -3484684,84420014 -3484688,4430247 -348468c,8fbf006c -3484690,8c820004 -3484694,24430008 -3484698,ac830008 -348469c,3c03de00 -34846a0,ac430000 -34846a4,3c038041 -34846a8,2463a488 -34846ac,ac430004 -34846b0,3c028011 -34846b4,3442a5d0 -34846b8,94430f2e -34846bc,3c028041 -34846c0,8c42b4b8 -34846c4,10400012 -34846c8,3025 -34846cc,3c028041 -34846d0,8c42b554 -34846d4,10400010 -34846d8,24060001 -34846dc,30620001 -34846e0,54400006 -34846e4,30630002 -34846e8,3c028041 -34846ec,8c42b554 -34846f0,1040000c -34846f4,3025 -34846f8,30630002 -34846fc,24020001 -3484700,1460000a -3484704,afa2003c -3484708,10000008 -348470c,afa0003c -3484710,10000006 -3484714,afa0003c -3484718,24020001 -348471c,10000003 -3484720,afa2003c -3484724,24020001 -3484728,afa2003c -348472c,3c028041 -3484730,8c55b560 -3484734,12a00007 -3484738,2a01825 -348473c,3c028041 -3484740,9442a43c -3484744,21840 -3484748,621821 -348474c,31840 -3484750,24630001 -3484754,3c028041 -3484758,9442a43c -348475c,210c0 -3484760,24420057 -3484764,431021 -3484768,24030140 -348476c,621823 -3484770,38fc2 -3484774,2238821 -3484778,118843 -348477c,26230001 -3484780,afa30038 -3484784,8e030008 -3484788,24640008 -348478c,ae040008 -3484790,3c04fcff -3484794,3484ffff -3484798,ac640000 -348479c,3c04fffd -34847a0,3484f6fb -34847a4,ac640004 -34847a8,8e030008 -34847ac,24640008 -34847b0,ae040008 -34847b4,3c04fa00 -34847b8,ac640000 -34847bc,240400d0 -34847c0,ac640004 -34847c4,511021 -34847c8,21380 -34847cc,3c0300ff -34847d0,3463f000 -34847d4,431024 -34847d8,3c04e400 -34847dc,2484039c -34847e0,441025 -34847e4,afa20020 -34847e8,111380 -34847ec,431024 -34847f0,34420024 -34847f4,afa20024 -34847f8,3c02e100 -34847fc,afa20028 -3484800,afa0002c -3484804,3c02f100 -3484808,afa20030 -348480c,3c020400 -3484810,24420400 -3484814,afa20034 -3484818,27a20020 -348481c,27a70038 -3484820,8e030008 -3484824,24640008 -3484828,ae040008 -348482c,8c450004 -3484830,8c440000 -3484834,ac650004 -3484838,24420008 -348483c,14e2fff8 -3484840,ac640000 -3484844,8e020008 -3484848,24430008 -348484c,ae030008 -3484850,3c03e700 -3484854,ac430000 -3484858,ac400004 -348485c,8e020008 -3484860,24430008 -3484864,ae030008 -3484868,3c03fc11 -348486c,34639623 -3484870,ac430000 -3484874,3c03ff2f -3484878,3463ffff -348487c,10c0004c -3484880,ac430004 -3484884,3c058041 -3484888,24a5a468 -348488c,94a70008 -3484890,3025 -3484894,c101bdf -3484898,2002025 -348489c,3c028041 -34848a0,8c42b4c0 -34848a4,18400042 -34848a8,3c028041 -34848ac,3c128041 -34848b0,2652a298 -34848b4,2414000a -34848b8,9825 -34848bc,3c1e8041 -34848c0,3c168041 -34848c4,26d6a274 -34848c8,2442a284 -34848cc,afa20040 -34848d0,3c028041 -34848d4,2442a468 -34848d8,afa20044 -34848dc,3c178041 -34848e0,8fc2b558 -34848e4,5040000b -34848e8,92420000 -34848ec,92430000 -34848f0,3c028011 -34848f4,3442a5d0 -34848f8,431021 -34848fc,904200a8 -3484900,21042 -3484904,30420001 -3484908,50400024 -348490c,26730001 -3484910,92420000 -3484914,561021 -3484918,80460000 -348491c,28c20003 -3484920,5440001e -3484924,26730001 -3484928,24c6fffd -348492c,61840 -3484930,661821 -3484934,8fa20040 -3484938,621821 -348493c,90620000 -3484940,21600 -3484944,90640002 -3484948,42200 -348494c,441025 -3484950,90630001 -3484954,31c00 -3484958,431025 -348495c,344200ff -3484960,8e030008 -3484964,24640008 -3484968,ae040008 -348496c,3c04fa00 -3484970,ac640000 -3484974,ac620004 -3484978,24020010 -348497c,afa20018 -3484980,afa20014 -3484984,afb40010 -3484988,8fa70038 -348498c,8fa50044 -3484990,c101c47 -3484994,2002025 -3484998,26730001 -348499c,2652000c -34849a0,8ee2b4c0 -34849a4,262102a -34849a8,1440ffcd -34849ac,26940011 -34849b0,8e020008 -34849b4,24430008 -34849b8,ae030008 -34849bc,3c03fa00 -34849c0,ac430000 -34849c4,2403ffff -34849c8,ac430004 -34849cc,8fa2003c -34849d0,10400037 -34849d4,3c028041 -34849d8,3c058041 -34849dc,24a5a478 -34849e0,94a70008 -34849e4,3025 -34849e8,c101bdf -34849ec,2002025 -34849f0,3c028041 -34849f4,8c42b4c0 -34849f8,18400168 -34849fc,3c1e8041 -3484a00,3c128041 -3484a04,2652a298 -3484a08,2414000a -3484a0c,9825 -3484a10,3c168041 -3484a14,26d6a274 -3484a18,3c028041 -3484a1c,2442a478 -3484a20,afa20040 -3484a24,3c028011 -3484a28,3442a5d0 -3484a2c,afa2003c -3484a30,3c178041 -3484a34,8fc2b558 -3484a38,10400009 -3484a3c,92420000 -3484a40,8fa3003c -3484a44,621021 -3484a48,904200a8 -3484a4c,21042 -3484a50,30420001 -3484a54,50400010 -3484a58,26730001 -3484a5c,92420000 -3484a60,561021 -3484a64,80460000 -3484a68,2cc20003 -3484a6c,5040000a -3484a70,26730001 -3484a74,24020010 -3484a78,afa20018 -3484a7c,afa20014 -3484a80,afb40010 -3484a84,8fa70038 -3484a88,8fa50040 -3484a8c,c101c47 -3484a90,2002025 -3484a94,26730001 -3484a98,2652000c -3484a9c,8ee2b4c0 -3484aa0,262102a -3484aa4,1440ffe3 -3484aa8,26940011 -3484aac,3c028041 -3484ab0,8c42b4c0 -3484ab4,18400010 -3484ab8,26310012 -3484abc,3c128041 -3484ac0,2652a29a -3484ac4,2414000b -3484ac8,9825 -3484acc,3c168041 -3484ad0,2803025 -3484ad4,2202825 -3484ad8,c102561 -3484adc,2402025 -3484ae0,26730001 -3484ae4,2652000c -3484ae8,8ec2b4c0 -3484aec,262102a -3484af0,1440fff7 -3484af4,26940011 -3484af8,3c028041 -3484afc,9456a43c -3484b00,16b0c0 -3484b04,26d60001 -3484b08,2d1b021 -3484b0c,24070001 -3484b10,24060011 -3484b14,3c058041 -3484b18,24a5a448 -3484b1c,c101bdf -3484b20,2002025 -3484b24,3c028041 -3484b28,8c42b4c0 -3484b2c,18400024 -3484b30,241e3000 -3484b34,3c118041 -3484b38,2631a298 -3484b3c,2413000b -3484b40,9025 -3484b44,3c178011 -3484b48,36f7a5d0 -3484b4c,3c148041 -3484b50,82220001 -3484b54,4430015 -3484b58,26520001 -3484b5c,92220000 -3484b60,2e21021 -3484b64,904200bc -3484b68,21e00 -3484b6c,31e03 -3484b70,2863000a -3484b74,50600001 -3484b78,24020009 -3484b7c,21e00 -3484b80,31e03 -3484b84,4620001 -3484b88,1025 -3484b8c,a7be0020 -3484b90,24420030 -3484b94,a3a20020 -3484b98,2603025 -3484b9c,2c02825 -3484ba0,c102561 -3484ba4,27a40020 -3484ba8,26520001 -3484bac,2631000c -3484bb0,8e82b4c0 -3484bb4,242102a -3484bb8,1440ffe5 -3484bbc,26730011 -3484bc0,26de0011 -3484bc4,24070001 -3484bc8,2406000e -3484bcc,3c058041 -3484bd0,24a5a448 -3484bd4,c101bdf -3484bd8,2002025 -3484bdc,3c028041 -3484be0,8c42b4c0 -3484be4,18400027 -3484be8,3c028041 -3484bec,3c118041 -3484bf0,2631a298 -3484bf4,2413000a -3484bf8,9025 -3484bfc,3c178011 -3484c00,36f7a5d0 -3484c04,2442a448 -3484c08,afa20038 -3484c0c,3c148041 -3484c10,92230000 -3484c14,2404000d -3484c18,14640002 -3484c1c,2201025 -3484c20,2403000a -3484c24,90420001 -3484c28,30420040 -3484c2c,50400010 -3484c30,26520001 -3484c34,2e31821 -3484c38,906200a8 -3484c3c,30420001 -3484c40,5040000b -3484c44,26520001 -3484c48,24020010 -3484c4c,afa20018 -3484c50,afa20014 -3484c54,afb30010 -3484c58,3c03825 -3484c5c,3025 -3484c60,8fa50038 -3484c64,c101c47 -3484c68,2002025 -3484c6c,26520001 -3484c70,2631000c -3484c74,8e82b4c0 -3484c78,242102a -3484c7c,1440ffe4 -3484c80,26730011 -3484c84,24070001 -3484c88,2406000a -3484c8c,3c058041 -3484c90,24a5a448 -3484c94,c101bdf -3484c98,2002025 -3484c9c,3c028041 -3484ca0,8c42b4c0 -3484ca4,18400022 -3484ca8,3c028041 -3484cac,3c118041 -3484cb0,2631a299 -3484cb4,2413000a -3484cb8,9025 -3484cbc,3c178011 -3484cc0,36f7a5d0 -3484cc4,2442a448 -3484cc8,afa20038 -3484ccc,3c148041 -3484cd0,92220000 -3484cd4,30420020 -3484cd8,50400010 -3484cdc,26520001 -3484ce0,8ee200a4 -3484ce4,3c030040 -3484ce8,431024 -3484cec,5040000b -3484cf0,26520001 -3484cf4,24020010 -3484cf8,afa20018 -3484cfc,afa20014 -3484d00,afb30010 -3484d04,3c03825 -3484d08,3025 -3484d0c,8fa50038 -3484d10,c101c47 -3484d14,2002025 -3484d18,26520001 -3484d1c,2631000c -3484d20,8e82b4c0 -3484d24,242102a -3484d28,1440ffe9 -3484d2c,26730011 -3484d30,26de0022 -3484d34,24070001 -3484d38,24060010 -3484d3c,3c058041 -3484d40,24a5a448 -3484d44,c101bdf -3484d48,2002025 -3484d4c,3c028041 -3484d50,8c42b4c0 -3484d54,18400024 -3484d58,3c118041 -3484d5c,2631a298 -3484d60,2413000a -3484d64,9025 -3484d68,3c178011 -3484d6c,36f7a5d0 -3484d70,3c028041 -3484d74,2442a448 -3484d78,afa20038 -3484d7c,3c148041 -3484d80,92220001 -3484d84,30420010 -3484d88,50400012 -3484d8c,26520001 -3484d90,92220000 -3484d94,2e21021 -3484d98,904200a8 -3484d9c,21082 -3484da0,30420001 -3484da4,5040000b -3484da8,26520001 -3484dac,24020010 -3484db0,afa20018 -3484db4,afa20014 -3484db8,afb30010 -3484dbc,3c03825 -3484dc0,3025 -3484dc4,8fa50038 -3484dc8,c101c47 -3484dcc,2002025 -3484dd0,26520001 -3484dd4,2631000c -3484dd8,8e82b4c0 -3484ddc,242102a -3484de0,1440ffe7 -3484de4,26730011 -3484de8,26c20033 -3484dec,afa20038 -3484df0,24070001 -3484df4,2406000f -3484df8,3c058041 -3484dfc,24a5a448 -3484e00,c101bdf -3484e04,2002025 -3484e08,3c028041 -3484e0c,8c42b4c0 -3484e10,18400053 -3484e14,3c148041 -3484e18,2694a298 -3484e1c,2808825 -3484e20,2413000a -3484e24,9025 -3484e28,3c1e8011 -3484e2c,37dea5d0 -3484e30,3c028041 -3484e34,2442a448 -3484e38,afa2003c -3484e3c,3c178041 -3484e40,92220001 -3484e44,30420010 -3484e48,50400012 -3484e4c,26520001 -3484e50,92220000 -3484e54,3c21021 -3484e58,904200a8 -3484e5c,21042 -3484e60,30420001 -3484e64,5040000b -3484e68,26520001 -3484e6c,24020010 -3484e70,afa20018 -3484e74,afa20014 -3484e78,afb30010 -3484e7c,8fa70038 -3484e80,3025 -3484e84,8fa5003c -3484e88,c101c47 -3484e8c,2002025 -3484e90,26520001 -3484e94,8ee2b4c0 -3484e98,2631000c -3484e9c,242182a -3484ea0,1460ffe7 -3484ea4,26730011 -3484ea8,12a0002d -3484eb0,1840002b -3484eb4,26d60044 -3484eb8,2412000b -3484ebc,8825 -3484ec0,3c1e8041 -3484ec4,3c158041 -3484ec8,26b5b5c8 -3484ecc,3c138041 -3484ed0,2673a1f8 -3484ed4,3c028041 -3484ed8,2442a1fc -3484edc,afa20038 -3484ee0,3c178041 -3484ee4,8fc2b55c -3484ee8,5040000f -3484eec,92820000 -3484ef0,92820001 -3484ef4,30420010 -3484ef8,5040000b -3484efc,92820000 -3484f00,92830000 -3484f04,3c028011 -3484f08,3442a5d0 -3484f0c,431021 -3484f10,904200a8 -3484f14,21082 -3484f18,30420001 -3484f1c,5040000b -3484f20,26310001 -3484f24,92820000 -3484f28,551021 -3484f2c,90420000 -3484f30,14400002 -3484f34,2602025 -3484f38,8fa40038 -3484f3c,2403025 -3484f40,c102561 -3484f44,2c02825 -3484f48,26310001 -3484f4c,2694000c -3484f50,8ee2b4c0 -3484f54,222102a -3484f58,1440ffe2 -3484f5c,26520011 -3484f60,c10258b -3484f64,2002025 -3484f68,8e020008 -3484f6c,24430008 -3484f70,ae030008 -3484f74,3c03e900 -3484f78,ac430000 -3484f7c,ac400004 -3484f80,8e020008 -3484f84,24430008 -3484f88,ae030008 -3484f8c,3c03df00 -3484f90,ac430000 -3484f94,10000003 -3484f98,ac400004 -3484f9c,1000fed6 -3484fa0,26310012 -3484fa4,8fbf006c -3484fa8,8fbe0068 -3484fac,8fb70064 -3484fb0,8fb60060 -3484fb4,8fb5005c -3484fb8,8fb40058 -3484fbc,8fb30054 -3484fc0,8fb20050 -3484fc4,8fb1004c -3484fc8,8fb00048 -3484fcc,3e00008 -3484fd0,27bd0070 -3484fd4,3e00008 -3484fdc,44860000 -3484fe0,44801000 -3484fe8,46020032 -3484ff0,45030011 -3484ff4,46007006 -3484ff8,460e603c -3485000,45000007 -3485004,460c0000 -3485008,4600703c -3485010,45000009 -3485018,3e00008 -348501c,46007006 -3485020,460e003c -3485028,45000003 -3485030,3e00008 -3485034,46007006 -3485038,3e00008 -3485040,3c02801c -3485044,344284a0 -3485048,c44000d4 -348504c,3c028041 -3485050,3e00008 -3485054,e440b4c8 -3485058,27bdffe8 -348505c,afbf0014 -3485060,3c028041 -3485064,9042a340 -3485068,5040001b -348506c,3c028041 -3485070,3c038011 -3485074,3463a5d0 -3485078,8c630070 -348507c,31f02 -3485080,1062000d -3485084,21300 -3485088,3c048011 -348508c,3484a5d0 -3485090,94830070 -3485094,30630fff -3485098,621025 -348509c,a4820070 -34850a0,3c04801d -34850a4,3485aa30 -34850a8,3c028007 -34850ac,34429764 -34850b0,40f809 -34850b4,248484a0 -34850b8,3c028041 -34850bc,9043a340 -34850c0,24020001 -34850c4,14620004 -34850c8,3c028041 -34850cc,3c028041 -34850d0,a040a340 -34850d4,3c028041 -34850d8,c44ea338 -34850dc,44800000 -34850e4,46007032 -34850ec,45010010 -34850f0,3c02801c -34850f4,344284a0 -34850f8,c44000d4 -34850fc,46007032 -3485104,45010019 -3485108,3c02801c -348510c,3c028041 -3485110,8c46a204 -3485114,3c028041 -3485118,c1013f7 -348511c,c44cb4c4 -3485120,3c02801c -3485124,344284a0 -3485128,1000000f -348512c,e44000d4 -3485130,344284a0 -3485134,c44c00d4 -3485138,3c028041 -348513c,c44eb4c8 -3485140,460e6032 -3485148,45010008 -348514c,3c02801c -3485150,3c028041 -3485154,c1013f7 -3485158,8c46a208 -348515c,3c02801c -3485160,344284a0 -3485164,e44000d4 -3485168,3c02801c -348516c,344284a0 -3485170,c44000d4 -3485174,3c028041 -3485178,e440b4c4 -348517c,3c028041 -3485180,9042a341 -3485184,24030001 -3485188,1443000f -348518c,24030002 -3485190,3c02801c -3485194,344284a0 -3485198,94420322 -348519c,3c038041 -34851a0,24639ff0 -34851a4,431021 -34851a8,90420000 -34851ac,10400018 -34851b0,3c028041 -34851b4,3c02801c -34851b8,344284a0 -34851bc,24030035 -34851c0,10000012 -34851c4,a4430322 -34851c8,14430011 -34851cc,3c028041 -34851d0,3c02801c -34851d4,344284a0 -34851d8,94420322 -34851dc,3c038041 -34851e0,24639ff0 -34851e4,431021 -34851e8,90420000 -34851ec,10400006 -34851f0,3c028041 -34851f4,3c02801c -34851f8,344284a0 -34851fc,2403001f -3485200,a4430322 -3485204,3c028041 -3485208,a040a341 -348520c,3c028041 -3485210,2442a334 -3485214,c4400008 -3485218,3c038040 -348521c,e4602750 -3485220,9044000e -3485224,3c038040 -3485228,a0642ca1 -348522c,9042000f -3485230,50400006 -3485234,3c028041 -3485238,2442ffff -348523c,3c038041 -3485240,c101dff -3485244,a062a343 -3485248,3c028041 -348524c,9042a344 -3485250,1040000b -3485254,3c028041 +3483acc,afaa0004 +3483ad0,85034a2a +3483ad4,340a0002 +3483ad8,146a0002 +3483adc,340a0001 +3483ae0,a50a4a2a +3483ae4,85034a2a +3483ae8,8faa0004 +3483aec,3e00008 +3483af0,27bd0018 +3483af4,27bdffe8 +3483af8,afaa0004 +3483afc,85034a2a +3483b00,340a0002 +3483b04,146a0002 +3483b08,340a0003 +3483b0c,a50a4a2a +3483b10,85034a2a +3483b14,8faa0004 +3483b18,3e00008 +3483b1c,27bd0018 +3483b20,27bdffe8 +3483b24,afaa0004 +3483b28,85034a2a +3483b2c,340a0002 +3483b30,146a0002 +3483b34,340a0001 +3483b38,a50a4a2a +3483b3c,85034a2a +3483b40,8faa0004 +3483b44,3e00008 +3483b48,27bd0018 +3483b4c,27bdffe8 +3483b50,afaa0004 +3483b54,85034a2a +3483b58,340a0002 +3483b5c,146a0002 +3483b60,340a0003 +3483b64,a50a4a2a +3483b68,85034a2a +3483b6c,8faa0004 +3483b70,3e00008 +3483b74,27bd0018 +3483b78,27bdffe8 +3483b7c,afaa0004 +3483b80,a42bca2a +3483b84,340a0002 +3483b88,156a0002 +3483b8c,340a0003 +3483b90,a50a4a2a +3483b94,85034a2a +3483b98,8faa0004 +3483b9c,3e00008 +3483ba0,27bd0018 +3483ba4,27bdffe8 +3483ba8,afaa0004 +3483bac,85034a2a +3483bb0,340a0002 +3483bb4,146a0002 +3483bb8,340a0001 +3483bbc,a50a4a2a +3483bc0,85034a2a +3483bc4,8faa0004 +3483bc8,3e00008 +3483bcc,27bd0018 +3483bd0,27bdffe8 +3483bd4,afaa0004 +3483bd8,85034a2a +3483bdc,340a0002 +3483be0,146a0002 +3483be4,340a0003 +3483be8,a50a4a2a +3483bec,85034a2a +3483bf0,8faa0004 +3483bf4,3e00008 +3483bf8,27bd0018 +3483bfc,3c08801e +3483c00,25084ee8 +3483c04,3409f000 +3483c08,a5090000 +3483c0c,3e00008 +3483c10,84cb4a2e +3483c14,24a56f04 +3483c18,8c880144 +3483c1c,11050007 +3483c20,3c09801e +3483c24,2529aa30 +3483c28,3c0a446a +3483c2c,254ac000 +3483c30,3c0bc324 +3483c34,ad2a0024 +3483c38,ad2b002c +3483c3c,3e00008 +3483c44,27bdffd8 +3483c48,afbf0024 +3483c4c,afa40028 +3483c50,afa5002c +3483c54,afa60030 +3483c58,c022865 +3483c5c,8fa40030 +3483c60,44822000 +3483c64,44800000 +3483c68,240e0002 +3483c6c,468021a0 +3483c70,afae0018 +3483c74,8fa40028 +3483c78,8fa5002c +3483c7c,8fa60030 +3483c80,3c073f80 +3483c84,3c080400 +3483c88,250832b0 +3483c8c,14c80002 +3483c94,3c074040 +3483c98,e7a60014 +3483c9c,e7a00010 +3483ca0,c023000 +3483ca4,e7a0001c +3483ca8,8fbf0024 +3483cac,8fbf0024 +3483cb0,3e00008 +3483cb4,27bd0028 +3483cb8,3c0a8040 +3483cbc,814a0d6d +3483cc0,11400003 +3483cc4,8ccb0138 +3483cc8,8d6b0010 +3483ccc,25690adc +3483cd0,3e00008 +3483cd4,acc90180 +3483cd8,27bdffe8 +3483cdc,afbf0014 +3483ce0,3c0a8040 +3483ce4,814a0d6d +3483ce8,15400003 +3483cf0,c037500 +3483cf8,8fbf0014 +3483cfc,3e00008 +3483d00,27bd0018 +3483d04,3c010080 +3483d08,3c180001 +3483d0c,3e00008 +3483d10,8c4e0670 +3483d14,3c0a8040 +3483d18,814a0d6d +3483d1c,11400002 +3483d24,34180003 +3483d28,3c078012 +3483d2c,24e7a5d0 +3483d30,3e00008 +3483d34,24010003 +3483d38,3c0a8040 +3483d3c,814a0d6d +3483d40,11400008 +3483d48,c10051e +3483d50,3c08801e +3483d54,25088966 +3483d58,34090004 +3483d5c,a5090000 +3483d64,8fbf0014 +3483d68,3e00008 +3483d6c,27bd0018 +3483d70,27bdffe0 +3483d74,afbf0014 +3483d78,afa10018 +3483d7c,afa4001c +3483d80,3c0a8040 +3483d84,814a0d6d +3483d88,1540000b +3483d90,3c04801d +3483d94,248484a0 +3483d98,3c058040 +3483d9c,90a50d70 +3483da0,34060000 +3483da4,c037385 +3483dac,34044802 +3483db0,c0191bc +3483db8,8fa4001c +3483dbc,8fa10018 +3483dc0,8fbf0014 +3483dc4,3e00008 +3483dc8,27bd0020 +3483dd0,27bdffe0 +3483dd4,afbf0014 +3483dd8,afa40018 +3483ddc,3c0d8040 +3483de0,81ad3dcc +3483de4,15a0000c +3483dec,3c08801e +3483df0,2508aa30 +3483df4,8d090670 +3483df8,340a4000 +3483dfc,12a5824 +3483e00,1160000d +3483e08,34080001 +3483e0c,3c018040 +3483e10,a0283dcc +3483e14,10000023 +3483e18,3c08801e +3483e1c,2508aa30 +3483e20,8d090670 +3483e24,340a4000 +3483e28,12a5824 +3483e2c,1160000c +3483e34,1000001b +3483e38,24a420d8 +3483e3c,c037519 +3483e44,24010002 +3483e48,14410016 +3483e50,3c08801e +3483e54,25088966 +3483e58,34090004 +3483e5c,a5090000 +3483e60,3c0b8012 +3483e64,256ba5d0 +3483e68,816c0ede +3483e6c,358c0001 +3483e70,a16c0ede +3483e74,3c09801e +3483e78,2529a2ba +3483e7c,340802ae +3483e80,a5280000 +3483e84,3408002a +3483e88,3c09801e +3483e8c,2529a2fe +3483e90,a1280000 +3483e94,34080014 +3483e98,3c09801e +3483e9c,2529a2b5 +3483ea0,a1280000 +3483ea4,8fbf0014 +3483ea8,3e00008 +3483eac,27bd0020 +3483eb0,27bdffd0 +3483eb4,afbf0014 +3483eb8,afa80018 +3483ebc,afa9001c +3483ec0,afaa0020 +3483ec4,afab0024 +3483ec8,afac0028 +3483ecc,afad002c +3483ed0,3c088012 +3483ed4,2508a5d0 +3483ed8,85090f20 +3483edc,31290040 +3483ee0,1120000e +3483ee4,3c08801e +3483ee8,2508aa30 +3483eec,8d09039c +3483ef0,1120000a +3483ef4,340a00a1 +3483ef8,852b0000 +3483efc,154b0007 +3483f00,240cf7ff +3483f04,8d0d066c +3483f08,18d6824 +3483f0c,ad0d066c +3483f10,ad00039c +3483f14,ad00011c +3483f18,ad200118 +3483f1c,afad002c +3483f20,afac0028 +3483f24,afab0024 +3483f28,afaa0020 +3483f2c,afa9001c +3483f30,afa80018 +3483f34,afbf0014 +3483f38,860e001c +3483f3c,3e00008 +3483f40,27bd0030 +3483f44,27bdffd0 +3483f48,afbf0014 +3483f4c,afa80018 +3483f50,afa9001c +3483f54,afaa0020 +3483f58,84a800a4 +3483f5c,34090002 +3483f60,1509000c +3483f64,340a0006 +3483f68,80880003 +3483f6c,150a0009 +3483f74,3c088012 +3483f78,2508a5d0 +3483f7c,85090f20 +3483f80,31290040 +3483f84,11200003 +3483f8c,c0083ad +3483f94,8faa0020 +3483f98,8fa9001c +3483f9c,8fa80018 +3483fa0,8fbf0014 +3483fa4,8602001c +3483fa8,3e00008 +3483fac,27bd0030 +3483fb0,27bdffd0 +3483fb4,afbf001c +3483fb8,afa40020 +3483fbc,afa50024 +3483fc0,e7a00028 +3483fc4,4602003c +3483fcc,45010005 +3483fd4,c1011f1 +3483fdc,10000003 +3483fe4,c1011f3 +3483fec,34060014 +3483ff0,3407000a +3483ff4,44801000 +3483ff8,c7a00028 +3483ffc,8fa50024 +3484000,8fa40020 +3484004,8fbf001c +3484008,4602003c +348400c,27bd0030 +3484010,3e00008 +3484018,27bdffd0 +348401c,afbf001c +3484020,afa40020 +3484024,afa50024 +3484028,e7a40028 +348402c,e7a6002c +3484030,4606203c +3484038,45000003 +3484040,c1011fe +3484048,34060014 +348404c,3407000a +3484050,44801000 +3484054,c7a6002c +3484058,c7a40028 +348405c,8fa50024 +3484060,8fa40020 +3484064,8fbf001c +3484068,4606203c +348406c,27bd0030 +3484070,3e00008 +3484078,c101261 +3484080,8fbf001c +3484084,27bd0020 +3484088,3e00008 +3484094,27bdffe8 +3484098,afbf0014 +348409c,c008ab4 +34840a4,8fbf0014 +34840a8,27bd0018 +34840ac,8fa40018 +34840b0,8c8a0138 +34840b4,8d4a0010 +34840b8,25431618 +34840bc,3c088040 +34840c0,81084090 +34840c4,1100000a +34840c8,3c098012 +34840cc,2529a5d0 +34840d0,95281406 +34840d4,290105dc +34840d8,14200005 +34840dc,9488029c +34840e0,31080002 +34840e4,15000002 +34840ec,254314d0 +34840f0,3e00008 +34840f8,3c188012 +34840fc,2718a5d0 +3484100,8f180004 +3484104,17000003 +348410c,3c0a8041 +3484110,254a4848 +3484114,24780008 +3484118,3e00008 +348411c,adf802c0 +3484120,3c0f8012 +3484124,25efa5d0 +3484128,8def0004 +348412c,15e00003 +3484134,3c0e8041 +3484138,25ce4848 +348413c,ac4e0004 +3484140,3e00008 +3484144,820f013f +348414c,3c088040 +3484150,81084148 +3484154,11000007 +3484158,3c09801d +348415c,252984a0 +3484160,8d281d44 +3484164,31080002 +3484168,11000002 +3484170,34069100 +3484174,3e00008 +3484178,afa60020 +348417c,3c088040 +3484180,81084148 +3484184,11000005 +3484188,3c09801d +348418c,252984a0 +3484190,8d281d44 +3484194,35080002 +3484198,ad281d44 +348419c,3e00008 +34841a0,34e74000 +34841a8,3c038012 +34841ac,2463a5d0 +34841b0,8c6e0004 +34841b4,15c0000c +34841b8,24020005 +34841bc,24020011 +34841c0,3c088040 +34841c4,810841a4 +34841c8,11000007 +34841cc,3c09801d +34841d0,252984a0 +34841d4,8d281d44 +34841d8,31080002 +34841dc,11000002 +34841e0,34020001 +34841e4,34020003 +34841e8,3e00008 +34841ec,3c048010 +34841f0,3c088040 +34841f4,810841a4 +34841f8,11000005 +34841fc,3c09801d +3484200,252984a0 +3484204,8d281d44 +3484208,35080002 +348420c,ad281d44 +3484210,3e00008 +3484214,34e78000 +3484218,27bdffe8 +348421c,afa20010 +3484220,afbf0014 +3484224,c103790 +3484228,46000306 +348422c,406821 +3484230,8fa20010 +3484234,8fbf0014 +3484238,3e00008 +348423c,27bd0018 +3484240,ac800130 +3484244,ac800134 +3484248,3c018012 +348424c,2421a5d0 +3484250,80280edc +3484254,35080008 +3484258,a0280edc +348425c,3c013f80 +3484260,3e00008 +3484264,44813000 +3484268,3c038012 +348426c,910f014f +3484270,2463a5d0 +3484274,25ef0023 +3484278,9078008b +3484280,11f80003 +3484288,3e00008 +348428c,a100014f +3484290,3e00008 +3484298,24010016 +348429c,17210003 +34842a0,24010004 +34842a4,3e00008 +34842a8,8479001c +34842ac,3e00008 +34842b0,240100f0 +34842b4,27bdffc0 +34842b8,afbf0000 +34842bc,afa20004 +34842c0,afa30008 +34842c4,afa4000c +34842c8,afa50010 +34842cc,afa60014 +34842d0,afa70018 +34842d4,afb0001c +34842d8,afb10020 +34842dc,afa10024 +34842e0,8fa40060 +34842e4,c1040c4 +34842e8,8c840000 +34842ec,8fa20004 +34842f0,8fa30008 +34842f4,8fa4000c +34842f8,8fa50010 +34842fc,8fa60014 +3484300,8fa70018 +3484304,8fb0001c +3484308,8fb10020 +348430c,8fa10024 +3484310,c015c0c +3484314,3272821 +3484318,8fbf0000 +348431c,3e00008 +3484320,27bd0040 +3484324,86470018 +3484328,10e00005 +3484330,f03820 +3484334,3c068041 +3484338,24c64920 +348433c,a4c70000 +3484340,24064000 +3484344,3e00008 +3484348,2c02825 +348434c,86470018 +3484350,10e00005 +3484358,f03820 +348435c,3c068041 +3484360,24c64920 +3484364,a4c70000 +3484368,3e00008 +348436c,24064002 +3484370,86870018 +3484374,10e00005 +348437c,f03820 +3484380,3c058041 +3484384,24a54920 +3484388,a4a70000 +348438c,3e00008 +3484390,27a5005c +3484394,86070018 +3484398,10e00005 +34843a0,f73820 +34843a4,3c058041 +34843a8,24a54920 +34843ac,a4a70000 +34843b0,3e00008 +34843b4,2602825 +34843b8,86070018 +34843bc,34060000 +34843c0,10e00006 +34843c8,f73820 +34843cc,24e70003 +34843d0,3c058041 +34843d4,24a54920 +34843d8,a4a70000 +34843dc,27b30044 +34843e0,3e00008 +34843e4,24110003 +34843e8,27bdffe0 +34843ec,afbf0010 +34843f0,2802025 +34843f4,24060002 +34843f8,86070018 +34843fc,10e00005 +3484404,24e70006 +3484408,3c058041 +348440c,24a54920 +3484410,a4a70000 +3484414,c004d9e +3484418,2602825 +348441c,10400004 +3484420,2802025 +3484424,e4540060 +3484428,864e0000 +348442c,a44e0032 +3484430,24060001 +3484434,86070018 +3484438,10e00004 +348443c,24e70007 +3484440,3c058041 +3484444,24a54920 +3484448,a4a70000 +348444c,c004d9e +3484450,2602825 +3484454,10400004 +3484458,2802025 +348445c,e4540060 +3484460,864e0004 +3484464,a44e0032 +3484468,8fbf0010 +348446c,3e00008 +3484470,27bd0020 +3484474,c02825 +3484478,c103d45 +348447c,72025 +3484480,8fbf0014 +3484484,3e00008 +3484488,27bd0020 +3484490,27bdffe0 +3484494,afbf001c +3484498,c101160 +34844a0,8fbf001c +34844a4,3e00008 +34844a8,27bd0020 +34844ac,27bdffb0 +34844b0,afa80020 +34844b4,afa90024 +34844b8,afaa0028 +34844bc,afa4002c +34844c0,afa50030 +34844c4,afa60034 +34844c8,afb00038 +34844cc,afb1003c +34844d0,afbf0040 +34844d4,26100001 +34844d8,3c018040 +34844dc,a430448c +34844e0,c009571 +34844e8,8fa50030 +34844ec,10400005 +34844f4,22025 +34844f8,8fa50034 +34844fc,c1011dd +3484504,8fa80020 +3484508,8fa90024 +348450c,8faa0028 +3484510,8fa4002c +3484514,8fa50030 +3484518,8fa60034 +348451c,8fb00038 +3484520,8fb1003c +3484524,8fbf0040 +3484528,3e00008 +348452c,27bd0050 +3484530,84840018 +3484534,3c068041 +3484538,24c64920 +348453c,a4c40000 +3484540,8fa4001c +3484544,37243 +3484548,3e00008 +348454c,31cf003f +3484550,27bdffe0 +3484554,afa40018 +3484558,afbf001c +348455c,c1040a0 +3484564,8fa40018 +3484568,8fbf001c +348456c,3e00008 +3484570,27bd0020 +3484580,84820000 +3484584,240300bb +3484588,1043000e +348458c,284300bc +3484590,10600005 +3484594,24030015 +3484598,50430001 +348459c,a4800032 +34845a0,3e00008 +34845a8,2403019e +34845ac,10430005 +34845b0,240301ab +34845b4,10430003 +34845b8,2403015c +34845bc,14430003 +34845c4,3e00008 +34845c8,a4800034 +34845cc,3e00008 +34845d4,80820003 +34845d8,21200 +34845dc,c23025 +34845e0,84820000 +34845e4,240301a0 +34845e8,10430013 +34845ec,30c6ffff +34845f0,284301a1 +34845f4,1060000a +34845f8,2403011d +34845fc,1043000c +3484600,2843011e +3484604,50600008 +3484608,2403019e +348460c,2442fef0 +3484610,3042ffff +3484614,2c420002 +3484618,14400005 +3484620,3e00008 +3484628,14430004 +3484630,3e00008 +3484634,a4860018 +3484638,a4860016 +348463c,3e00008 +3484644,27bdffd8 +3484648,afbf0024 +348464c,afb10020 +3484650,afb0001c +3484654,808025 +3484658,84820000 +348465c,24030111 +3484660,14430007 +3484664,a03025 +3484668,802825 +348466c,c103f0e +3484670,27a40010 +3484674,8fa20010 +3484678,10000037 +348467c,2610018d +3484680,2403011d +3484684,14430007 +3484688,240301a0 +348468c,802825 +3484690,c103f31 +3484694,27a40010 +3484698,8fa20010 +348469c,1000002e +34846a0,2610019c +34846a4,14430007 +34846a8,24030110 +34846ac,802825 +34846b0,c103e53 +34846b4,27a40010 +34846b8,8fa20010 +34846bc,10000026 +34846c0,261001a6 +34846c4,14430007 +34846c8,2403019e +34846cc,802825 +34846d0,c103dc4 +34846d4,27a40010 +34846d8,8fa20010 +34846dc,1000001e +34846e0,2610018c +34846e4,1443001f +34846e8,8fbf0024 +34846ec,802825 +34846f0,c103d14 +34846f4,27a40010 +34846f8,8fa20010 +34846fc,10000016 +3484700,261001a4 +3484704,90420d78 +3484708,24030002 +348470c,14430004 +3484710,24030001 +3484714,2402000c +3484718,10000011 +348471c,a2020000 +3484720,5443000f +3484724,a2000000 +3484728,97b10014 +348472c,c1034fb +3484730,2202025 +3484734,c1034ec +3484738,93a40017 +348473c,54400004 +3484740,90420007 +3484744,c1034ec +3484748,2202025 +348474c,90420007 +3484750,10000003 +3484754,a2020000 +3484758,1440ffea +348475c,3c028040 +3484760,8fbf0024 +3484764,8fb10020 +3484768,8fb0001c +348476c,3e00008 +3484770,27bd0028 +3484774,27bdffe0 +3484778,afbf001c +348477c,afb20018 +3484780,afb10014 +3484784,afb00010 +3484788,808025 +348478c,a08825 +3484790,3c128040 +3484794,c101175 +3484798,9646448c +348479c,2202825 +34847a0,c101191 +34847a4,2002025 +34847a8,a640448c +34847ac,8fbf001c +34847b0,8fb20018 +34847b4,8fb10014 +34847b8,8fb00010 +34847bc,3e00008 +34847c0,27bd0020 +34847c4,3e00008 +34847cc,3c028041 +34847d0,8c431da8 +34847d4,3c028041 +34847d8,24421a32 +34847dc,14620004 +34847e0,3c038041 +34847e4,3c028041 +34847e8,24421a34 +34847ec,ac621da8 +34847f0,3e00008 +34847f8,3c028041 +34847fc,8c431da8 +3484800,3c028041 +3484804,24421a18 +3484808,10620003 +348480c,3c028041 +3484810,10000003 +3484814,24421a38 +3484818,3c028041 +348481c,24421a1a +3484820,3c038041 +3484824,3e00008 +3484828,ac621da8 +348482c,27bdffc8 +3484830,afbf0034 +3484834,afb40030 +3484838,afb3002c +348483c,afb20028 +3484840,afb10024 +3484844,afb00020 +3484848,809025 +348484c,3c02801c +3484850,344284a0 +3484854,3c030001 +3484858,431021 +348485c,90420745 +3484860,240300aa +3484864,14430002 +3484868,a08825 +348486c,240200ff +3484870,3c03801c +3484874,346384a0 +3484878,8c700000 +348487c,8e0302b0 +3484880,24640008 +3484884,ae0402b0 +3484888,3c04de00 +348488c,ac640000 +3484890,3c048041 +3484894,24841fe8 +3484898,ac640004 +348489c,8e0302b0 +34848a0,24640008 +34848a4,ae0402b0 +34848a8,3c04e700 +34848ac,ac640000 +34848b0,ac600004 +34848b4,8e0302b0 +34848b8,24640008 +34848bc,ae0402b0 +34848c0,3c04fc11 +34848c4,34849623 +34848c8,ac640000 +34848cc,3c04ff2f +34848d0,3484ffff +34848d4,ac640004 +34848d8,8e0402b0 +34848dc,24830008 +34848e0,ae0302b0 +34848e4,3c03fa00 +34848e8,ac830000 +34848ec,401825 +34848f0,c2102b +34848f4,10400002 +34848f8,261302a8 +34848fc,c01825 +3484900,2402ff00 +3484904,621825 +3484908,ac830004 +348490c,24070001 +3484910,24060009 +3484914,3c148041 +3484918,26851fa8 +348491c,c10288c +3484920,2602025 +3484924,24020010 +3484928,afa20018 +348492c,afa20014 +3484930,263100bd +3484934,afb10010 +3484938,2647001b +348493c,3025 +3484940,26851fa8 +3484944,c1028f4 +3484948,2602025 +348494c,8e0202b0 +3484950,24430008 +3484954,ae0302b0 +3484958,3c03e700 +348495c,ac430000 +3484960,ac400004 +3484964,8fbf0034 +3484968,8fb40030 +348496c,8fb3002c +3484970,8fb20028 +3484974,8fb10024 +3484978,8fb00020 +348497c,3e00008 +3484980,27bd0038 +3484984,3c028041 +3484988,8c431da8 +348498c,3c028041 +3484990,24421a18 +3484994,10620021 +348499c,27bdffe8 +34849a0,afbf0014 +34849a4,90660000 +34849a8,90620001 +34849ac,22600 +34849b0,42603 +34849b4,42183 +34849b8,3042003f +34849bc,21040 +34849c0,3c038041 +34849c4,24631a18 +34849c8,621021 +34849cc,3c038041 +34849d0,ac621da8 +34849d4,3c02801c +34849d8,344284a0 +34849dc,944300a4 +34849e0,28620011 +34849e4,10400008 +34849e8,2825 +34849ec,3c028011 +34849f0,3442a5d0 +34849f4,431021 +34849f8,804500bc +34849fc,52fc3 +3484a00,30a50011 +3484a04,24a5ffef +3484a08,c10120b +3484a10,8fbf0014 +3484a14,3e00008 +3484a18,27bd0018 +3484a1c,3e00008 +3484a24,27bdffd8 +3484a28,afbf0024 +3484a2c,afb20020 +3484a30,afb1001c +3484a34,afb00018 +3484a38,808025 +3484a3c,909101e9 +3484a40,3c028041 +3484a44,8c4248d8 +3484a48,3c038041 +3484a4c,8c6348d4 +3484a50,431025 +3484a54,3c038041 +3484a58,8c6348dc +3484a5c,431025 +3484a60,10400023 +3484a64,2201825 +3484a68,9487001c +3484a6c,73943 +3484a70,30e7007f +3484a74,3c02801c +3484a78,344284a0 +3484a7c,904600a5 +3484a80,802825 +3484a84,c102409 +3484a88,27a40010 +3484a8c,97b20014 +3484a90,12400017 +3484a94,2201825 +3484a98,c1034ec +3484a9c,93a40017 +3484aa0,14400004 +3484aa4,3c038041 +3484aa8,c1034ec +3484aac,2402025 +3484ab0,3c038041 +3484ab4,8c6348d8 +3484ab8,3c048041 +3484abc,8c8448d4 +3484ac0,641825 +3484ac4,1060000a +3484ac8,90430007 +3484acc,10600008 +3484ad0,24110005 +3484ad4,2463fff3 +3484ad8,306300ff +3484adc,2c630002 +3484ae0,10600002 +3484ae4,8825 +3484ae8,24110005 +3484aec,90430007 +3484af0,a21101ec +3484af4,a20301ed +3484af8,3c028040 +3484afc,8c422b4c +3484b00,10400005 +3484b04,8fbf0024 +3484b08,8e020004 +3484b0c,34420080 +3484b10,ae020004 +3484b14,8fbf0024 +3484b18,8fb20020 +3484b1c,8fb1001c +3484b20,8fb00018 +3484b24,3e00008 +3484b28,27bd0028 +3484b2c,27bdffd8 +3484b30,afbf0024 +3484b34,afb30020 +3484b38,afb2001c +3484b3c,afb10018 +3484b40,afb00014 +3484b44,2402fffd +3484b48,a21024 +3484b4c,24030001 +3484b50,14430076 +3484b54,8fb1003c +3484b58,a08025 +3484b5c,8fa20038 +3484b60,905301ed +3484b64,3c028041 +3484b68,8c4248d8 +3484b6c,10400004 +3484b70,8c920000 +3484b74,2402000d +3484b78,1262005e +3484b80,c02ae40 +3484b84,2402025 +3484b88,8e230000 +3484b8c,24640008 +3484b90,ae240000 +3484b94,3c04da38 +3484b98,24840003 +3484b9c,ac640000 +3484ba0,ac620004 +3484ba4,24020001 +3484ba8,16020005 +3484bac,24020002 +3484bb0,12620049 +3484bb4,3c030600 +3484bb8,1000003c +3484bbc,246306f0 +3484bc0,12620047 +3484bc4,3c030600 +3484bc8,10000038 +3484bcc,246310c0 +3484bd0,1262000c +3484bd4,3c058042 +3484bd8,2402000d +3484bdc,1262000d +3484be0,2673fff2 +3484be4,2e730002 +3484be8,5260000f +3484bec,3c020600 +3484bf0,3c058042 +3484bf4,24a5eba8 +3484bf8,3c028042 +3484bfc,1000000c +3484c00,2442dba8 +3484c04,24a5bba8 +3484c08,3c028042 +3484c0c,10000008 +3484c10,2442aba8 +3484c14,3c058042 +3484c18,24a5d3a8 +3484c1c,3c028042 +3484c20,10000003 +3484c24,2442c3a8 +3484c28,24452798 +3484c2c,24421798 +3484c30,8e4402c4 +3484c34,2486ffe0 +3484c38,ae4602c4 +3484c3c,3c06fd10 +3484c40,ac86ffe0 +3484c44,ac82ffe4 +3484c48,8e4202c4 +3484c4c,3c04df00 +3484c50,ac440008 +3484c54,ac40000c +3484c58,8e4202c4 +3484c5c,ac460010 +3484c60,ac450014 +3484c64,8e4202c4 +3484c68,ac440018 +3484c6c,ac40001c +3484c70,8e4502c4 +3484c74,8e220000 +3484c78,24440008 +3484c7c,ae240000 +3484c80,3c04db06 +3484c84,24840024 +3484c88,ac440000 +3484c8c,ac450004 +3484c90,8e220000 +3484c94,24440008 +3484c98,ae240000 +3484c9c,3c04de00 +3484ca0,ac440000 +3484ca4,10000021 +3484ca8,ac430004 +3484cac,3c028041 +3484cb0,8c4248d4 +3484cb4,3c048041 +3484cb8,8c8448dc +3484cbc,441025 +3484cc0,5440ffc3 +3484cc4,2402000c +3484cc8,3c020600 +3484ccc,24452798 +3484cd0,1000ffd7 +3484cd4,24421798 +3484cd8,1000ffed +3484cdc,24630ae8 +3484ce0,1000ffeb +3484ce4,24631678 +3484ce8,3c030600 +3484cec,1000ffe8 +3484cf0,24630ae8 +3484cf4,c02ae40 +3484cf8,2402025 +3484cfc,8e230000 +3484d00,24640008 +3484d04,ae240000 +3484d08,3c04da38 +3484d0c,24840003 +3484d10,ac640000 +3484d14,ac620004 +3484d18,24020001 +3484d1c,1202fff2 +3484d20,24130002 +3484d24,1000ffa6 +3484d28,24020002 +3484d2c,8fbf0024 +3484d30,8fb30020 +3484d34,8fb2001c +3484d38,8fb10018 +3484d3c,8fb00014 +3484d40,3e00008 +3484d44,27bd0028 +3484d48,27bdffd8 +3484d4c,afbf0024 +3484d50,afb10020 +3484d54,afb0001c +3484d58,3c02801c +3484d5c,344284a0 +3484d60,94500020 +3484d64,94440014 +3484d68,3c02801d +3484d6c,3442aa30 +3484d70,8c42066c +3484d74,3c033000 +3484d78,24630483 +3484d7c,431024 +3484d80,54400138 +3484d84,8fbf0024 +3484d88,3c02801c +3484d8c,344284a0 +3484d90,8c430008 +3484d94,3c02800f +3484d98,8c4213ec +3484d9c,54620131 +3484da0,8fbf0024 +3484da4,3c028011 +3484da8,3442a5d0 +3484dac,8c42135c +3484db0,5440012c +3484db4,8fbf0024 +3484db8,3c02800e +3484dbc,3442f1b0 +3484dc0,8c420000 +3484dc4,30420020 +3484dc8,54400126 +3484dcc,8fbf0024 +3484dd0,3c028040 +3484dd4,8c430d80 +3484dd8,1060001e +3484ddc,3c028011 +3484de0,3c02801c +3484de4,344284a0 +3484de8,3c050001 +3484dec,451021 +3484df0,94450934 +3484df4,24020006 +3484df8,14a20016 +3484dfc,3c028011 +3484e00,3c02801c +3484e04,344284a0 +3484e08,3c050001 +3484e0c,451021 +3484e10,94420948 +3484e14,1440000f +3484e18,3c028011 +3484e1c,3c02801c +3484e20,344284a0 +3484e24,451021 +3484e28,94420944 +3484e2c,50400005 +3484e30,3c028040 +3484e34,24050003 +3484e38,14450006 +3484e3c,3c028011 +3484e40,3c028040 +3484e44,904208a1 +3484e48,14400106 +3484e4c,8fbf0024 +3484e50,3c028011 +3484e54,3442a5d0 +3484e58,8c42009c +3484e5c,3c056000 +3484e60,451024 +3484e64,10400006 +3484e68,3c028011 +3484e6c,3442a5d0 +3484e70,8c420004 +3484e74,504000f0 +3484e78,42400 +3484e7c,3c028011 +3484e80,3442a5d0 +3484e84,9042008b +3484e88,2442ffdf +3484e8c,304200ff +3484e90,2c42000b +3484e94,10400006 +3484e98,3c028011 +3484e9c,3442a5d0 +3484ea0,8c450004 +3484ea4,24020001 +3484ea8,10a200dd +3484eac,3c028011 +3484eb0,3442a5d0 +3484eb4,9042007b +3484eb8,2442fff9 +3484ebc,304200ff +3484ec0,2c420002 +3484ec4,104000e7 +3484ec8,8fbf0024 +3484ecc,42400 +3484ed0,42403 +3484ed4,481001b +3484ed8,3c028011 +3484edc,1060001a +3484ee0,3442a5d0 +3484ee4,3c02801c +3484ee8,344284a0 +3484eec,3c030001 +3484ef0,431021 +3484ef4,94430934 +3484ef8,24020006 +3484efc,14620011 +3484f00,3c028011 +3484f04,3c02801c +3484f08,344284a0 +3484f0c,3c030001 +3484f10,431021 +3484f14,94420948 +3484f18,1440000a +3484f1c,3c028011 +3484f20,3c02801c +3484f24,344284a0 +3484f28,431021 +3484f2c,94420944 +3484f30,104000cc +3484f34,8fbf0024 +3484f38,24030003 +3484f3c,104300c9 +3484f40,3c028011 +3484f44,3442a5d0 +3484f48,8c420004 +3484f4c,14400053 +3484f50,3c028011 +3484f54,32020200 +3484f58,10400026 +3484f5c,3211ffff +3484f60,3c028011 +3484f64,3442a5d0 +3484f68,9442009c +3484f6c,30422000 +3484f70,50400021 +3484f74,32310100 +3484f78,3c028011 +3484f7c,3442a5d0 +3484f80,94420070 +3484f84,3042f000 +3484f88,38422000 +3484f8c,2102b +3484f90,24420001 +3484f94,3c048011 +3484f98,3484a5d0 +3484f9c,21300 +3484fa0,94830070 +3484fa4,30630fff +3484fa8,621025 +3484fac,a4820070 +3484fb0,3c04801d +3484fb4,3485aa30 +3484fb8,3c028007 +3484fbc,34429764 +3484fc0,40f809 +3484fc4,248484a0 +3484fc8,3c058010 +3484fcc,24a243a8 +3484fd0,afa20014 +3484fd4,24a743a0 +3484fd8,afa70010 +3484fdc,24060004 +3484fe0,24a54394 +3484fe4,3c02800c +3484fe8,3442806c +3484fec,40f809 +3484ff0,24040835 +3484ff4,32310100 +3484ff8,52200055 +3484ffc,32100400 +3485000,3c028011 +3485004,3442a5d0 +3485008,9442009c +348500c,30424000 +3485010,1040007c +3485014,3c028011 +3485018,3442a5d0 +348501c,94420070 +3485020,3042f000 +3485024,24033000 +3485028,50430002 +348502c,24040001 +3485030,24040003 +3485034,3c038011 +3485038,3463a5d0 +348503c,42300 +3485040,94620070 +3485044,30420fff +3485048,441025 +348504c,a4620070 +3485050,3c04801d +3485054,3485aa30 +3485058,3c028007 +348505c,34429764 +3485060,40f809 +3485064,248484a0 +3485068,3c058010 +348506c,24a243a8 +3485070,afa20014 +3485074,24a743a0 +3485078,afa70010 +348507c,24060004 +3485080,24a54394 +3485084,3c02800c +3485088,3442806c +348508c,40f809 +3485090,24040835 +3485094,1000005b +3485098,3c028011 +348509c,3442a5d0 +34850a0,8c430004 +34850a4,24020001 +34850a8,54620029 +34850ac,32100400 +34850b0,32020100 +34850b4,50400026 +34850b8,32100400 +34850bc,3c02801c +34850c0,344284a0 +34850c4,3c030001 +34850c8,431021 +34850cc,94420934 +34850d0,14400064 +34850d4,8fbf0024 +34850d8,3c028011 +34850dc,3442a5d0 +34850e0,9046008b +34850e4,24c2ffdf +34850e8,304200ff +34850ec,2c42000b +34850f0,50400040 +34850f4,32100400 +34850f8,3c02801c +34850fc,344284a0 +3485100,431021 +3485104,90420756 +3485108,5440003a +348510c,32100400 +3485110,3c02801d +3485114,3442aa30 +3485118,8c42066c +348511c,3c0308a0 +3485120,24630800 +3485124,431024 +3485128,54400032 +348512c,32100400 +3485130,24070002 +3485134,3c04801d +3485138,3485aa30 +348513c,3c028038 +3485140,3442c9a0 +3485144,40f809 +3485148,248484a0 +348514c,32100400 +3485150,12000044 +3485154,8fbf0024 +3485158,3c02801c +348515c,344284a0 +3485160,3c030001 +3485164,431021 +3485168,94420934 +348516c,1440003e +3485170,8fb10020 +3485174,3c028011 +3485178,3442a5d0 +348517c,9046007b +3485180,24c2fff9 +3485184,304200ff +3485188,2c420002 +348518c,10400035 +3485190,8fbf0024 +3485194,3c02801c +3485198,344284a0 +348519c,3c030001 +34851a0,431021 +34851a4,90420758 +34851a8,1440002f +34851ac,8fb10020 +34851b0,3c02801d +34851b4,3442aa30 +34851b8,8c42066c +34851bc,3c0308a0 +34851c0,24630800 +34851c4,431024 +34851c8,14400027 +34851d0,24070002 +34851d4,3c04801d +34851d8,3485aa30 +34851dc,3c028038 +34851e0,3442c9a0 +34851e4,40f809 +34851e8,248484a0 +34851ec,1000001d +34851f0,8fbf0024 +34851f4,1600ffe0 +34851f8,3c028011 +34851fc,10000019 +3485200,8fbf0024 +3485204,3442a5d0 +3485208,8c430004 +348520c,24020001 +3485210,5462ffcf +3485214,32100400 +3485218,1000ffa9 +348521c,3c02801c +3485220,42400 +3485224,42403 +3485228,481ffa2 +348522c,32020100 +3485230,10000008 +3485238,42403 +348523c,481ff46 +3485240,32020200 +3485244,1060ff44 +348524c,1000ff26 +3485250,3c02801c +3485254,5460ff24 3485258,3c02801c -348525c,344284a0 -3485260,94430014 -3485264,2404dfff -3485268,641824 -348526c,a4430014 -3485270,94430020 -3485274,641824 -3485278,a4430020 -348527c,3c028041 -3485280,9042a345 -3485284,10400016 -3485288,8fbf0014 -348528c,3c02801c -3485290,344284a0 -3485294,90430016 -3485298,31823 -348529c,a0430016 -34852a0,90430017 -34852a4,31823 -34852a8,a0430017 -34852ac,90430022 -34852b0,31823 -34852b4,a0430022 -34852b8,90430023 -34852bc,31823 -34852c0,a0430023 -34852c4,90430028 -34852c8,31823 -34852cc,a0430028 -34852d0,90430029 -34852d4,31823 -34852d8,a0430029 -34852dc,8fbf0014 -34852e0,3e00008 -34852e4,27bd0018 -34852e8,850018 -34852ec,1812 -34852f0,24620001 -34852f4,3042ffff -34852f8,31a02 -34852fc,431021 -3485300,21203 -3485304,3e00008 -3485308,304200ff -348530c,2402ffff -3485310,a0820002 -3485314,a0820001 -3485318,4a00031 -348531c,a0820000 -3485320,a01825 -3485324,28a503e8 -3485328,50a00001 -348532c,240303e7 -3485330,31c00 -3485334,31c03 -3485338,3c026666 -348533c,24426667 -3485340,620018 -3485344,1010 -3485348,21083 -348534c,32fc3 -3485350,451023 -3485354,22880 -3485358,a22821 -348535c,52840 -3485360,651823 -3485364,21400 -3485368,21403 -348536c,1040001c -3485370,a0830002 -3485374,3c036666 -3485378,24636667 -348537c,430018 -3485380,1810 -3485384,31883 -3485388,22fc3 -348538c,651823 -3485390,32880 -3485394,a32821 -3485398,52840 -348539c,451023 -34853a0,a0820001 -34853a4,31400 -34853a8,21403 -34853ac,1040000c -34853b0,3c036666 -34853b4,24636667 -34853b8,430018 -34853bc,1810 -34853c0,31883 -34853c4,22fc3 -34853c8,651823 -34853cc,32880 -34853d0,a31821 -34853d4,31840 -34853d8,431023 -34853dc,a0820000 -34853e0,3e00008 -34853e8,27bdffd0 -34853ec,afbf002c -34853f0,afb20028 -34853f4,afb10024 -34853f8,afb00020 -34853fc,808025 -3485400,a08825 -3485404,afa7003c -3485408,8fb20040 -348540c,c101bdf -3485410,24070001 -3485414,93a7003c -3485418,afb20018 -348541c,afb20014 -3485420,83a2003d -3485424,2442005c -3485428,afa20010 -348542c,24e70037 -3485430,3025 -3485434,2202825 -3485438,c101c47 -348543c,2002025 -3485440,8fbf002c -3485444,8fb20028 -3485448,8fb10024 -348544c,8fb00020 -3485450,3e00008 -3485454,27bd0030 -3485458,27bdffe0 -348545c,afbf001c -3485460,afb20018 -3485464,afb10014 -3485468,afb00010 -348546c,808025 -3485470,24850074 -3485474,24070001 -3485478,4825 -348547c,3c028041 -3485480,2442a0b4 -3485484,2408ffe0 -3485488,3c048041 -348548c,2484a0fc -3485490,90430000 -3485494,1031824 -3485498,14600005 -348549c,80a60000 -34854a0,90430001 -34854a4,30c600ff -34854a8,50660001 -34854ac,1274825 -34854b0,24420004 -34854b4,73840 -34854b8,1444fff5 -34854bc,24a50001 -34854c0,3c028041 -34854c4,ac49b5d8 -34854c8,8e1100a4 -34854cc,2442b5d8 -34854d0,3223003f -34854d4,a0430004 -34854d8,9602009c -34854dc,8203003e -34854e0,10600002 -34854e4,3042fffb -34854e8,34420004 -34854ec,3c038041 -34854f0,a462b5de -34854f4,112c02 -34854f8,30a5007c -34854fc,26030086 -3485500,2606008a -3485504,2407001b -3485508,90640000 -348550c,2482ffec -3485510,304200ff -3485514,2c42000d -3485518,50400004 -348551c,24630001 -3485520,54870001 -3485524,34a50001 -3485528,24630001 -348552c,5466fff7 -3485530,90640000 -3485534,3c028041 -3485538,a045b5dd -348553c,9203007b -3485540,2462fff9 -3485544,304200ff -3485548,2c420002 -348554c,14400003 -3485550,2025 -3485554,10000002 -3485558,24030007 -348555c,24040001 -3485560,3c028041 -3485564,2442b5d8 -3485568,a0440008 -348556c,a0430009 -3485570,9203007d -3485574,2462fff6 -3485578,304200ff -348557c,2c420002 -3485580,14400003 -3485584,2025 -3485588,10000002 -348558c,2403000a -3485590,24040001 -3485594,3c028041 -3485598,2442b5d8 -348559c,a044000a -34855a0,a043000b -34855a4,86020ef6 -34855a8,4400016 -34855ac,2403002b -34855b0,96020ef4 -34855b4,210c2 -34855b8,3042008f -34855bc,2c430010 -34855c0,10600012 -34855c4,2403002b -34855c8,50400007 -34855cc,9203008b -34855d0,3c038041 -34855d4,2463a034 -34855d8,431021 -34855dc,90430000 -34855e0,1000000d -34855e4,24040001 -34855e8,2462ffdf -34855ec,304200ff -34855f0,2c420003 -34855f4,14400008 -34855f8,24040001 -34855fc,10000005 -3485600,2403002b -3485604,10000004 -3485608,24040001 -348560c,10000002 -3485610,24040001 -3485614,2025 -3485618,3c028041 -348561c,2442b5d8 -3485620,a043000d -3485624,a044000c -3485628,9203008a -348562c,2462ffd3 -3485630,304200ff -3485634,2c42000b -3485638,14400003 -348563c,24040001 -3485640,24030037 -3485644,2025 -3485648,3c028041 -348564c,2442b5d8 -3485650,a043000f -3485654,a044000e -3485658,9202003c -348565c,10400005 -3485660,3c028041 -3485664,24030013 -3485668,a043b5e9 -348566c,10000004 -3485670,24030001 -3485674,24030012 -3485678,a043b5e9 -348567c,9203003a -3485680,3c028041 -3485684,a043b5e8 -3485688,8e0200a0 -348568c,21182 -3485690,30420007 -3485694,10400009 -3485698,2025 -348569c,401825 -34856a0,2c420004 -34856a4,50400001 -34856a8,24030003 -34856ac,2463004f -34856b0,306300ff -34856b4,10000002 -34856b8,24040001 -34856bc,24030050 -34856c0,3c028041 -34856c4,2442b5d8 -34856c8,a0440012 -34856cc,a0430013 -34856d0,8e0200a0 -34856d4,21242 -34856d8,30420007 -34856dc,50400009 -34856e0,2025 -34856e4,401825 -34856e8,2c420003 -34856ec,50400001 -34856f0,24030002 -34856f4,24630052 -34856f8,306300ff -34856fc,10000002 -3485700,24040001 -3485704,24030053 -3485708,3c028041 -348570c,2442b5d8 -3485710,a0440014 -3485714,a0430015 -3485718,8e0300a0 -348571c,31b02 -3485720,30630003 -3485724,a0430016 -3485728,86050034 -348572c,3c048041 -3485730,c1014c3 -3485734,2484b5f3 -3485738,3c020080 -348573c,2221024 -3485740,10400002 -3485744,2825 -3485748,860500d0 -348574c,3c048041 -3485750,c1014c3 -3485754,2484b5f6 -3485758,860508c6 -348575c,58a00001 -3485760,2405ffff -3485764,3c048041 -3485768,c1014c3 -348576c,2484b5f9 -3485770,3c128041 -3485774,2652b5d8 -3485778,9202003d -348577c,a2420017 -3485780,8602002e -3485784,22fc3 -3485788,30a5000f -348578c,a22821 -3485790,52903 -3485794,3c048041 -3485798,c1014c3 -348579c,2484b5f0 -34857a0,86050022 -34857a4,3c048041 -34857a8,c1014c3 -34857ac,2484b5fc -34857b0,118982 -34857b4,32310fff -34857b8,a6510028 -34857bc,8fbf001c -34857c0,8fb20018 -34857c4,8fb10014 -34857c8,8fb00010 -34857cc,3e00008 -34857d0,27bd0020 -34857d4,27bdff88 -34857d8,afbf0074 -34857dc,afbe0070 -34857e0,afb7006c -34857e4,afb60068 -34857e8,afb50064 -34857ec,afb40060 -34857f0,afb3005c -34857f4,afb20058 -34857f8,afb10054 -34857fc,afb00050 -3485800,3c020002 -3485804,a21021 -3485808,9443ca42 -348580c,24020008 -3485810,14620021 -3485814,808825 -3485818,3c020002 -348581c,a21021 -3485820,9442ca36 -3485824,14400006 -3485828,3c020002 -348582c,a21021 -3485830,9444ca2e -3485834,24020002 -3485838,10820009 -348583c,3c020002 -3485840,a21021 -3485844,9442ca30 -3485848,24040005 -348584c,50440005 -3485850,3c020002 -3485854,24040016 -3485858,14440010 -348585c,3c020002 -3485860,3c020002 -3485864,a21021 -3485868,9443ca38 -348586c,31080 -3485870,431021 -3485874,21980 -3485878,431021 -348587c,21100 -3485880,24420020 -3485884,8ca401d8 -3485888,c101516 -348588c,822021 -3485890,10000220 -3485894,8fbf0074 -3485898,3c020002 -348589c,a21021 -34858a0,9042ca37 -34858a4,1440001d -34858a8,2c44009a -34858ac,3c020002 -34858b0,a22821 -34858b4,90a2ca31 -34858b8,34420080 -34858bc,2c44009a -34858c0,10800214 -34858c4,8fbf0074 -34858c8,2c440086 -34858cc,14800211 -34858d0,2442007a -34858d4,24040001 -34858d8,441004 -34858dc,3c040008 -34858e0,24840014 -34858e4,442024 -34858e8,1480003b -34858ec,3c040002 -34858f0,24840081 -34858f4,442024 -34858f8,54800030 -34858fc,24020008 -3485900,3c030004 -3485904,24630002 -3485908,431024 -348590c,10400202 -3485910,8fbe0070 -3485914,10000039 -3485918,241600c8 -348591c,108001fd -3485920,8fbf0074 -3485924,2c440086 -3485928,5080000e -348592c,2442007a -3485930,24040004 -3485934,10440028 -3485938,2c440005 -348593c,5080001b -3485940,24030006 -3485944,24040002 -3485948,5044001c -348594c,24020008 -3485950,24030003 -3485954,1043002d -3485958,241600c8 -348595c,100001ee -3485960,8fbe0070 -3485964,24040001 -3485968,441004 -348596c,3c040008 -3485970,24840014 -3485974,442024 -3485978,14800017 -348597c,3c040002 -3485980,24840081 -3485984,442024 -3485988,5480000c -348598c,24020008 -3485990,3c030004 -3485994,24630002 -3485998,431024 -348599c,104001dd -34859a0,8fbf0074 -34859a4,10000017 -34859a8,241600c8 -34859ac,10430017 -34859b0,241600c8 -34859b4,100001d7 -34859b8,8fbf0074 -34859bc,431023 -34859c0,21840 -34859c4,431821 -34859c8,318c0 -34859cc,431021 -34859d0,10000006 -34859d4,305600ff -34859d8,31040 -34859dc,621021 -34859e0,210c0 -34859e4,621821 -34859e8,307600ff -34859ec,12c001c9 -34859f0,8fbf0074 -34859f4,10000006 -34859f8,8e220008 -34859fc,10000004 -3485a00,8e220008 -3485a04,10000002 -3485a08,8e220008 -3485a0c,8e220008 -3485a10,24430008 -3485a14,ae230008 -3485a18,3c03e700 -3485a1c,ac430000 -3485a20,ac400004 -3485a24,8e220008 -3485a28,24430008 -3485a2c,ae230008 -3485a30,3c03fc11 -3485a34,34639623 -3485a38,ac430000 -3485a3c,3c03ff2f -3485a40,3463ffff -3485a44,ac430004 -3485a48,2c02825 -3485a4c,c1014ba -3485a50,24040090 -3485a54,afa20048 -3485a58,afa20044 -3485a5c,a025 -3485a60,24030040 -3485a64,3c028041 -3485a68,afa20030 -3485a6c,3c028041 -3485a70,2442b5d8 -3485a74,afa2004c -3485a78,3c178041 -3485a7c,26f7a234 -3485a80,3c158041 -3485a84,26b5a1b4 -3485a88,8e240008 -3485a8c,24820008 -3485a90,ae220008 -3485a94,3c02fa00 -3485a98,ac820000 -3485a9c,31600 -3485aa0,32c00 -3485aa4,451025 -3485aa8,8fa50044 -3485aac,451025 -3485ab0,31a00 -3485ab4,431025 -3485ab8,ac820004 -3485abc,8fa20030 -3485ac0,2453a134 -3485ac4,8fbe004c -3485ac8,2670ff80 -3485acc,8fd20000 -3485ad0,92020000 -3485ad4,3042001f -3485ad8,50400012 -3485adc,26100004 -3485ae0,32420001 -3485ae4,5682000f -3485ae8,26100004 -3485aec,8e020000 -3485af0,21f42 -3485af4,31880 -3485af8,751821 -3485afc,21602 -3485b00,3042001f -3485b04,afa20010 -3485b08,96070002 -3485b0c,73c00 -3485b10,92060001 -3485b14,8c650000 -3485b18,c1014fa -3485b1c,2202025 -3485b20,26100004 -3485b24,1613ffea -3485b28,129042 -3485b2c,26730080 -3485b30,16f3ffe5 -3485b34,27de0004 -3485b38,2c02825 -3485b3c,c1014ba -3485b40,240400ff -3485b44,afa20044 -3485b48,26940001 -3485b4c,24020002 -3485b50,1682ffcd -3485b54,240300ff -3485b58,8fa50048 -3485b5c,9825 -3485b60,24030040 -3485b64,3c178041 -3485b68,3c1e8041 -3485b6c,3c158041 -3485b70,26b5a1b4 -3485b74,2416000c -3485b78,3c148041 -3485b7c,10000002 -3485b80,2694b5ee -3485b84,8fa50044 -3485b88,8e240008 -3485b8c,24820008 -3485b90,ae220008 -3485b94,3c02fa00 -3485b98,ac820000 -3485b9c,31600 -3485ba0,33400 -3485ba4,461025 -3485ba8,451025 -3485bac,31a00 -3485bb0,431025 -3485bb4,ac820004 -3485bb8,26f2a09c -3485bbc,27d0b5e0 -3485bc0,92020000 -3485bc4,5453000f -3485bc8,26100002 -3485bcc,92420000 -3485bd0,21080 -3485bd4,551021 -3485bd8,afb60010 -3485bdc,92430001 -3485be0,31a00 -3485be4,92470002 -3485be8,e33825 -3485bec,73c00 -3485bf0,92060001 -3485bf4,8c450000 -3485bf8,c1014fa -3485bfc,2202025 -3485c00,26100002 -3485c04,1614ffee -3485c08,26520003 -3485c0c,26730001 -3485c10,327300ff -3485c14,24020002 -3485c18,1662ffda -3485c1c,240300ff -3485c20,3c028041 -3485c24,9456b600 -3485c28,24070001 -3485c2c,3025 -3485c30,3c058041 -3485c34,24a5a408 -3485c38,c101bdf -3485c3c,2202025 -3485c40,afa00038 -3485c44,afa00034 -3485c48,afa00030 -3485c4c,b825 -3485c50,3c108041 -3485c54,2610a060 -3485c58,8fa20044 -3485c5c,afa2003c -3485c60,3c028041 -3485c64,2442a408 -3485c68,afa20040 -3485c6c,3c1e8041 -3485c70,10000005 -3485c74,27dea09c -3485c78,afb50038 -3485c7c,afb40034 -3485c80,afb30030 -3485c84,240b825 -3485c88,92120000 -3485c8c,92130001 -3485c90,92140002 -3485c94,32c20001 -3485c98,1440000e -3485c9c,8fb5003c -3485ca0,24050040 -3485ca4,c1014ba -3485ca8,2402025 -3485cac,409025 -3485cb0,24050040 -3485cb4,c1014ba -3485cb8,2602025 -3485cbc,409825 -3485cc0,24050040 -3485cc4,c1014ba -3485cc8,2802025 -3485ccc,40a025 -3485cd0,8fb50048 -3485cd4,16570007 -3485cd8,8fa20030 -3485cdc,14530005 -3485ce0,8fa20034 -3485ce4,16820003 -3485ce8,8fa20038 -3485cec,5055000e -3485cf0,92070003 -3485cf4,8e230008 -3485cf8,24620008 -3485cfc,ae220008 -3485d00,3c02fa00 -3485d04,ac620000 -3485d08,121600 -3485d0c,132400 -3485d10,441025 -3485d14,551025 -3485d18,142200 -3485d1c,441025 -3485d20,ac620004 -3485d24,92070003 -3485d28,2402000a -3485d2c,afa20018 -3485d30,24020006 -3485d34,afa20014 -3485d38,82020004 -3485d3c,2442005c -3485d40,afa20010 -3485d44,24e70037 -3485d48,3025 -3485d4c,8fa50040 -3485d50,c101c47 -3485d54,2202025 -3485d58,26100005 -3485d5c,161effc6 -3485d60,16b042 -3485d64,3c108041 -3485d68,2610b5d8 -3485d6c,92020016 -3485d70,8fb50044 -3485d74,2a09025 -3485d78,21840 -3485d7c,621821 -3485d80,3c028041 -3485d84,2442a1c0 -3485d88,621821 -3485d8c,90620000 -3485d90,21600 -3485d94,90640001 -3485d98,42400 -3485d9c,441025 -3485da0,90630002 -3485da4,31a00 -3485da8,431025 -3485dac,551025 -3485db0,8e230008 -3485db4,24640008 -3485db8,ae240008 -3485dbc,3c13fa00 -3485dc0,ac730000 -3485dc4,ac620004 -3485dc8,3c028041 -3485dcc,2442a044 -3485dd0,24030010 -3485dd4,afa30010 -3485dd8,90430005 -3485ddc,31a00 -3485de0,90470006 -3485de4,e33825 -3485de8,73c00 -3485dec,24060001 -3485df0,3c058041 -3485df4,24a5a3f8 -3485df8,c1014fa -3485dfc,2202025 -3485e00,2414ff00 -3485e04,2b4a025 -3485e08,8e220008 -3485e0c,24430008 -3485e10,ae230008 -3485e14,ac530000 -3485e18,ac540004 -3485e1c,24070001 -3485e20,2406000c -3485e24,3c058041 -3485e28,24a5a448 -3485e2c,c101bdf -3485e30,2202025 -3485e34,92020017 -3485e38,1440000e -3485e3c,24100010 -3485e40,24020010 -3485e44,afa20018 -3485e48,afa20014 -3485e4c,2402005c -3485e50,afa20010 -3485e54,2407003c -3485e58,3025 -3485e5c,3c058041 -3485e60,24a5a448 -3485e64,c101c47 -3485e68,2202025 -3485e6c,10000014 -3485e70,3c028041 -3485e74,afb00018 -3485e78,afb00014 -3485e7c,2415005c -3485e80,afb50010 -3485e84,2407003a -3485e88,3025 -3485e8c,3c138041 -3485e90,2665a448 -3485e94,c101c47 -3485e98,2202025 -3485e9c,afb00018 -3485ea0,afb00014 -3485ea4,afb50010 -3485ea8,2407003e -3485eac,3025 -3485eb0,2665a448 -3485eb4,c101c47 -3485eb8,2202025 -3485ebc,3c028041 -3485ec0,9042b5fe -3485ec4,2c42000a -3485ec8,1040000b -3485ecc,24070001 -3485ed0,2402000a -3485ed4,afa20010 -3485ed8,3c028041 -3485edc,8c47a058 -3485ee0,24060001 -3485ee4,3c058041 -3485ee8,24a5a3d8 -3485eec,c1014fa -3485ef0,2202025 -3485ef4,24070001 -3485ef8,2406000b -3485efc,3c108041 -3485f00,2605a448 -3485f04,c101bdf -3485f08,2202025 -3485f0c,24020010 -3485f10,afa20018 -3485f14,afa20014 -3485f18,24020086 -3485f1c,afa20010 -3485f20,2407003c -3485f24,3025 -3485f28,2605a448 -3485f2c,c101c47 -3485f30,2202025 -3485f34,3c028041 -3485f38,9042b5fb -3485f3c,2c42000a -3485f40,1040001d -3485f44,8e220008 -3485f48,24430008 -3485f4c,ae230008 -3485f50,3c03fa00 -3485f54,ac430000 -3485f58,3c03f4ec -3485f5c,24633000 -3485f60,2439025 -3485f64,ac520004 -3485f68,3c038041 -3485f6c,9062b564 -3485f70,24440001 -3485f74,a064b564 -3485f78,3c038041 -3485f7c,2463a044 -3485f80,21082 -3485f84,24040010 -3485f88,afa40010 -3485f8c,9064000f -3485f90,42200 -3485f94,90670010 -3485f98,e43825 -3485f9c,73c00 -3485fa0,3046000f -3485fa4,3c058041 -3485fa8,24a5a418 -3485fac,c1014fa -3485fb0,2202025 -3485fb4,8e220008 -3485fb8,24430008 -3485fbc,ae230008 -3485fc0,3c03fa00 -3485fc4,ac430000 -3485fc8,ac540004 -3485fcc,2407000a -3485fd0,3025 -3485fd4,3c058041 -3485fd8,24a5a3e8 -3485fdc,c101bdf -3485fe0,2202025 -3485fe4,8fa2004c -3485fe8,2453001b -3485fec,3c168041 -3485ff0,26d6b5f0 -3485ff4,3c148041 -3485ff8,2694a044 -3485ffc,26820019 -3486000,afa20034 -3486004,24170001 -3486008,241e0008 -348600c,3c028041 -3486010,2442a3e8 -3486014,afa20038 -3486018,afa00020 -348601c,afa00024 -3486020,afa00028 -3486024,afa0002c -3486028,27b20020 -348602c,2401825 -3486030,2c02025 -3486034,90820000 -3486038,54570006 -348603c,2c42000a -3486040,8c620000 -3486044,2442ffff -3486048,ac620000 -348604c,10000003 -3486050,24020005 -3486054,21023 -3486058,30420006 -348605c,8c650000 -3486060,a21021 -3486064,ac620004 -3486068,24840001 -348606c,1493fff1 -3486070,24630004 -3486074,92950000 -3486078,26b50037 -348607c,82820002 -3486080,2a2a821 -3486084,92820004 -3486088,10400006 -348608c,2801825 -3486090,8fa4002c -3486094,417c2 -3486098,441021 -348609c,21043 -34860a0,2a2a823 -34860a4,80620001 -34860a8,2442005c -34860ac,80630003 -34860b0,431021 -34860b4,afa20030 -34860b8,2c08025 -34860bc,92060000 -34860c0,2cc2000a -34860c4,5040000b -34860c8,26100001 -34860cc,8e470000 -34860d0,afbe0018 -34860d4,afbe0014 -34860d8,8fa20030 -34860dc,afa20010 -34860e0,2a73821 -34860e4,8fa50038 -34860e8,c101c47 -34860ec,2202025 -34860f0,26100001 -34860f4,1613fff1 -34860f8,26520004 -34860fc,26730003 -3486100,26940005 -3486104,8fa20034 -3486108,1454ffc3 -348610c,26d60003 -3486110,8fbf0074 -3486114,8fbe0070 -3486118,8fb7006c -348611c,8fb60068 -3486120,8fb50064 -3486124,8fb40060 -3486128,8fb3005c -348612c,8fb20058 -3486130,8fb10054 -3486134,8fb00050 -3486138,3e00008 -348613c,27bd0078 -3486140,27bdffa0 -3486144,afbf005c -3486148,afbe0058 -348614c,afb70054 -3486150,afb60050 -3486154,afb5004c -3486158,afb40048 -348615c,afb30044 -3486160,afb20040 -3486164,afb1003c -3486168,afb00038 -348616c,afa40060 -3486170,afa50064 -3486174,3c02801c -3486178,344284a0 -348617c,8c500000 -3486180,261402b8 -3486184,8e0202c0 -3486188,24430008 -348618c,ae0302c0 -3486190,3c03de00 -3486194,ac430000 -3486198,3c038041 -348619c,2463a488 -34861a0,ac430004 -34861a4,8e0202c0 -34861a8,24430008 -34861ac,ae0302c0 -34861b0,3c03e700 -34861b4,ac430000 -34861b8,ac400004 -34861bc,8e0202c0 -34861c0,24430008 -34861c4,ae0302c0 -34861c8,3c03fc11 -34861cc,34639623 -34861d0,ac430000 -34861d4,3c03ff2f -34861d8,3463ffff -34861dc,ac430004 -34861e0,8e0202c0 -34861e4,24430008 -34861e8,ae0302c0 -34861ec,3c03fa00 -34861f0,ac430000 -34861f4,2403ffff -34861f8,ac430004 -34861fc,3c028041 -3486200,8c52b568 -3486204,24110054 -3486208,3c178041 -348620c,26f7a348 -3486210,3c168041 -3486214,26d6b4cc -3486218,24150018 -348621c,241e000c -3486220,3242001f -3486224,21040 -3486228,129143 -348622c,571021 -3486230,90430000 -3486234,31880 -3486238,761821 -348623c,8c730000 -3486240,24070001 -3486244,90460001 -3486248,2602825 -348624c,c101bdf -3486250,2802025 -3486254,afb50018 -3486258,afb50014 -348625c,afbe0010 -3486260,2203825 -3486264,3025 -3486268,2602825 -348626c,c101c47 -3486270,2802025 -3486274,26310020 -3486278,240200f4 -348627c,1622ffe9 -3486280,3242001f -3486284,8fa50064 -3486288,c1015f5 -348628c,2802025 -3486290,8e0202c0 -3486294,24430008 -3486298,ae0302c0 -348629c,3c03e700 -34862a0,ac430000 -34862a4,ac400004 -34862a8,8e0202c0 -34862ac,24430008 -34862b0,ae0302c0 -34862b4,3c03fcff -34862b8,3463ffff -34862bc,ac430000 -34862c0,3c03fffd -34862c4,3463f6fb -34862c8,ac430004 -34862cc,8e0202c0 -34862d0,24430008 -34862d4,ae0302c0 -34862d8,3c03fa00 -34862dc,ac430000 -34862e0,93a30063 -34862e4,ac430004 -34862e8,3c02e450 -34862ec,244203c0 -34862f0,afa20020 -34862f4,afa00024 -34862f8,3c02e100 -34862fc,afa20028 -3486300,afa0002c -3486304,3c02f100 -3486308,afa20030 -348630c,3c020400 -3486310,24420400 -3486314,afa20034 -3486318,27a20020 -348631c,27a60038 -3486320,8e0302c0 -3486324,24640008 -3486328,ae0402c0 -348632c,8c450004 -3486330,8c440000 -3486334,ac650004 -3486338,24420008 -348633c,14c2fff8 -3486340,ac640000 -3486344,8fbf005c -3486348,8fbe0058 -348634c,8fb70054 -3486350,8fb60050 -3486354,8fb5004c -3486358,8fb40048 -348635c,8fb30044 -3486360,8fb20040 -3486364,8fb1003c -3486368,8fb00038 -348636c,3e00008 -3486370,27bd0060 -3486374,3c028041 -3486378,9042b56c -348637c,1040000d -3486380,3c028011 -3486384,3442a5d0 -3486388,8c430000 -348638c,24020517 -3486390,14620008 -3486398,27bdffe8 -348639c,afbf0014 -34863a0,c10253a -34863a8,8fbf0014 -34863ac,3e00008 -34863b0,27bd0018 -34863b4,3e00008 -34863bc,14800003 -34863c0,3c028041 -34863c4,3e00008 -34863c8,8c42a388 -34863cc,27bdffe8 -34863d0,afbf0014 -34863d4,afb00010 -34863d8,808025 -34863dc,c1018ef -34863e0,42102 -34863e4,3210000f -34863e8,108080 -34863ec,3c038041 -34863f0,2463a388 -34863f4,2038021 -34863f8,8e030000 -34863fc,431021 -3486400,8fbf0014 -3486404,8fb00010 -3486408,3e00008 -348640c,27bd0018 -3486410,3c028011 -3486414,3442a5d0 -3486418,8c42135c -348641c,1440004c -3486420,3c028041 -3486424,9042b570 -3486428,10400049 -348642c,3c038011 -3486430,3463a5d0 -3486434,906300b2 -3486438,30630001 -348643c,14600044 -3486440,24030003 -3486444,27bdffe8 -3486448,10430028 -348644c,afbf0014 -3486450,2c430004 -3486454,10600007 -3486458,24030001 -348645c,1043000a -3486460,24030002 -3486464,10430014 -3486468,3c028011 -348646c,10000036 -3486470,8fbf0014 -3486474,24030004 -3486478,10430029 -348647c,3c028011 -3486480,10000031 -3486484,8fbf0014 -3486488,3c028011 -348648c,3442a5d0 -3486490,8c4400a4 -3486494,c1018ef -3486498,3084003f -348649c,3c038041 -34864a0,9463b56e -34864a4,43102b -34864a8,10400024 -34864ac,8fbf0014 -34864b0,10000025 -34864b8,3442a5d0 -34864bc,8c4400a4 -34864c0,3c02001c -34864c4,2442003f -34864c8,c1018ef -34864cc,822024 -34864d0,3c038041 -34864d4,9463b56e -34864d8,43102b -34864dc,10400017 -34864e0,8fbf0014 -34864e4,10000018 -34864ec,3c028011 -34864f0,3442a5d0 -34864f4,8c4400a4 -34864f8,3c02001c -34864fc,c1018ef -3486500,822024 -3486504,3c038041 -3486508,9463b56e -348650c,43102b -3486510,1040000a -3486514,8fbf0014 -3486518,1000000b -3486520,3442a5d0 -3486524,844200d0 -3486528,3c038041 -348652c,9463b56e -3486530,43102a -3486534,14400004 -3486538,8fbf0014 -348653c,c101a70 -3486540,24040003 -3486544,8fbf0014 -3486548,3e00008 -348654c,27bd0018 -3486550,3e00008 -3486558,27bdffe8 -348655c,afbf0014 -3486560,3c028041 -3486564,8c42b5a0 -3486568,218c0 -348656c,3c048041 -3486570,2484b61c -3486574,641821 -3486578,8c630000 -348657c,1060000c -3486580,24420001 -3486584,220c0 -3486588,3c038041 -348658c,2463b61c -3486590,641821 -3486594,402825 -3486598,8c640000 -348659c,24420001 -34865a0,1480fffc -34865a4,24630008 -34865a8,3c028041 -34865ac,ac45b5a0 -34865b0,c102742 -34865b4,2404013c -34865b8,3c038041 -34865bc,ac62b59c -34865c0,24030001 -34865c4,ac430130 -34865c8,8fbf0014 -34865cc,3e00008 -34865d0,27bd0018 -34865d4,801025 -34865d8,84a30000 -34865dc,2404000a -34865e0,14640012 -34865e4,24040015 -34865e8,24030010 -34865ec,14c30008 -34865f0,94a3001c -34865f4,31942 -34865f8,3063007f -34865fc,24040075 -3486600,54640003 -3486604,94a3001c -3486608,3e00008 -348660c,ac400000 -3486610,3063001f -3486614,a0400000 -3486618,a0460001 -348661c,24040001 -3486620,a0440002 -3486624,3e00008 -3486628,a0430003 -348662c,14640010 -3486630,2404019c -3486634,90a3001d -3486638,24040006 -348663c,10640005 -3486640,24040011 -3486644,50640004 -3486648,90a30141 -348664c,3e00008 -3486650,ac400000 -3486654,90a30141 -3486658,a0400000 -348665c,a0460001 -3486660,24040002 -3486664,a0440002 -3486668,3e00008 -348666c,a0430003 -3486670,1464000a -3486674,2404003e -3486678,94a4001c -348667c,a0400000 -3486680,41a02 -3486684,3063001f -3486688,a0430001 -348668c,24030003 -3486690,a0430002 -3486694,3e00008 -3486698,a0440003 -348669c,54c4000d -34866a0,a4400000 -34866a4,2404011a -34866a8,5464000a -34866ac,a4400000 -34866b0,3c038011 -34866b4,3463a5d0 -34866b8,90631397 -34866bc,a0400000 -34866c0,a0430001 -34866c4,24030004 -34866c8,a0430002 -34866cc,3e00008 -34866d0,a0470003 -34866d4,a0400002 -34866d8,a0460001 -34866dc,3e00008 -34866e0,a0470003 -34866e4,3c038041 -34866e8,8c67b5a0 -34866ec,24e7ffff -34866f0,4e00021 -34866f4,801025 -34866f8,27bdfff8 -34866fc,4825 -3486700,3c0a8041 -3486704,254ab61c -3486708,1273021 -348670c,61fc2 -3486710,661821 -3486714,31843 -3486718,330c0 -348671c,ca3021 -3486720,8cc80000 -3486724,8cc60004 -3486728,afa60004 -348672c,a8302b -3486730,10c00003 -3486734,105302b -3486738,10000008 -348673c,2467ffff -3486740,50c00003 -3486744,ac480000 -3486748,10000004 -348674c,24690001 -3486750,8fa30004 -3486754,10000006 -3486758,ac430004 -348675c,e9182a -3486760,1060ffea -3486764,1273021 -3486768,ac400000 -348676c,ac400004 -3486770,3e00008 -3486774,27bd0008 -3486778,ac800000 -348677c,3e00008 -3486780,ac800004 -3486784,27bdffe0 -3486788,afbf001c -348678c,afb00018 -3486790,808025 -3486794,c101975 -3486798,27a40010 -348679c,8fa50010 -34867a0,14a00004 -34867a8,ae000000 -34867ac,10000003 -34867b0,ae000004 -34867b4,c1019b9 -34867b8,2002025 -34867bc,2001025 -34867c0,8fbf001c -34867c4,8fb00018 -34867c8,3e00008 -34867cc,27bd0020 -34867d0,27bdffe8 -34867d4,afbf0014 -34867d8,afb00010 -34867dc,afa40018 -34867e0,58202 -34867e4,afa5001c -34867e8,321000ff -34867ec,c101eeb -34867f0,52402 -34867f4,c101edc -34867f8,402025 -34867fc,3c038041 -3486800,8fa40018 -3486804,ac64b594 -3486808,2463b594 -348680c,8fa4001c -3486810,ac640004 -3486814,10202b -3486818,3c038041 -348681c,ac64b590 -3486820,3c038041 -3486824,ac62b58c -3486828,90440001 -348682c,3c038041 -3486830,ac64b588 -3486834,94440002 -3486838,3c038041 -348683c,ac64b584 -3486840,94440004 -3486844,3c038041 -3486848,ac64b580 -348684c,80440006 -3486850,3c038041 -3486854,ac64b57c -3486858,90420007 -348685c,30420001 -3486860,3c038041 -3486864,16000003 -3486868,ac62b578 -348686c,3c028040 -3486870,90500024 -3486874,3c028040 -3486878,a0500025 -348687c,8fbf0014 -3486880,8fb00010 -3486884,3e00008 -3486888,27bd0018 -348688c,3c028041 -3486890,ac40b594 -3486894,2442b594 -3486898,ac400004 -348689c,3c028041 -34868a0,ac40b590 -34868a4,3c028041 -34868a8,ac40b58c +348525c,1000ff8f +3485260,3c028011 +3485264,8fb10020 +3485268,8fb0001c +348526c,3e00008 +3485270,27bd0028 +3485274,3c028040 +3485278,8c420d80 +348527c,10400018 +3485280,3c028011 +3485284,3c02801c +3485288,344284a0 +348528c,3c030001 +3485290,431021 +3485294,94430934 +3485298,24020006 +348529c,14620010 +34852a0,3c028011 +34852a4,3c02801c +34852a8,344284a0 +34852ac,3c030001 +34852b0,431021 +34852b4,94420948 +34852b8,14400009 +34852bc,3c028011 +34852c0,3c02801c +34852c4,344284a0 +34852c8,431021 +34852cc,94420944 +34852d0,10400025 +34852d4,24030003 +34852d8,10430023 +34852dc,3c028011 +34852e0,3442a5d0 +34852e4,8c42009c +34852e8,3c036000 +34852ec,431024 +34852f0,10400006 +34852f4,3c028011 +34852f8,3442a5d0 +34852fc,8c420004 +3485300,10400016 +3485304,3c028040 +3485308,3c028011 +348530c,3442a5d0 +3485310,9042008b +3485314,2442ffdf +3485318,304200ff +348531c,2c42000b +3485320,10400006 +3485324,3c028011 +3485328,3442a5d0 +348532c,8c430004 +3485330,24020001 +3485334,10620008 +3485338,3c028011 +348533c,3442a5d0 +3485340,9042007b +3485344,2442fff9 +3485348,304200ff +348534c,2c420002 +3485350,1040021f +3485358,3c028040 +348535c,90420892 +3485360,1040021b +3485368,27bdffc8 +348536c,afbf0034 +3485370,afb40030 +3485374,afb3002c +3485378,afb20028 +348537c,afb10024 +3485380,afb00020 +3485384,3c02801c +3485388,344284a0 +348538c,8c500000 +3485390,261202a8 +3485394,8e0302b0 +3485398,24640008 +348539c,ae0402b0 +34853a0,3c04de00 +34853a4,ac640000 +34853a8,3c048041 +34853ac,24841fe8 +34853b0,ac640004 +34853b4,8e0302b0 +34853b8,24640008 +34853bc,ae0402b0 +34853c0,3c04e700 +34853c4,ac640000 +34853c8,ac600004 +34853cc,8e0302b0 +34853d0,24640008 +34853d4,ae0402b0 +34853d8,3c04fc11 +34853dc,34849623 +34853e0,ac640000 +34853e4,3c04ff2f +34853e8,3484ffff +34853ec,ac640004 +34853f0,3c030001 +34853f4,431021 +34853f8,94510742 +34853fc,2413ff00 +3485400,2339825 +3485404,8e0202b0 +3485408,24430008 +348540c,ae0302b0 +3485410,3c03fa00 +3485414,ac430000 +3485418,ac530004 +348541c,24070001 +3485420,3025 +3485424,3c148041 +3485428,26851f88 +348542c,c10288c +3485430,2402025 +3485434,24020010 +3485438,afa20018 +348543c,afa20014 +3485440,24020040 +3485444,afa20010 +3485448,2407010f +348544c,3025 +3485450,26851f88 +3485454,c1028f4 +3485458,2402025 +348545c,3c028040 +3485460,8c440d80 +3485464,1080004b +3485468,3c02801d +348546c,3c02801c +3485470,344284a0 +3485474,3c030001 +3485478,431021 +348547c,94430934 +3485480,24020006 +3485484,14620043 +3485488,3c02801d +348548c,3c02801c +3485490,344284a0 +3485494,3c030001 +3485498,431021 +348549c,94420948 +34854a0,1440003c +34854a4,3c02801d +34854a8,3c02801c +34854ac,344284a0 +34854b0,431021 +34854b4,94420944 +34854b8,50400005 +34854bc,3c028040 +34854c0,24030003 +34854c4,14430033 +34854c8,3c02801d +34854cc,3c028040 +34854d0,904208a1 +34854d4,5040002f +34854d8,3c02801d +34854dc,24070001 +34854e0,24060002 +34854e4,3c138041 +34854e8,26651fd8 +34854ec,c10288c +34854f0,2402025 +34854f4,2411000c +34854f8,afb10018 +34854fc,afb10014 +3485500,2402004d +3485504,afa20010 +3485508,24070111 +348550c,3025 +3485510,26651fd8 +3485514,c1028f4 +3485518,2402025 +348551c,24070001 +3485520,24060011 +3485524,3c138041 +3485528,26651fa8 +348552c,c10288c +3485530,2402025 +3485534,afb10018 +3485538,afb10014 +348553c,24140042 +3485540,afb40010 +3485544,2407011d +3485548,3025 +348554c,26651fa8 +3485550,c1028f4 +3485554,2402025 +3485558,24070001 +348555c,24060010 +3485560,26651fa8 +3485564,c10288c +3485568,2402025 +348556c,afb10018 +3485570,afb10014 +3485574,afb40010 +3485578,24070104 +348557c,3025 +3485580,26651fa8 +3485584,c1028f4 +3485588,2402025 +348558c,10000177 +3485590,8e0202b0 +3485594,3442aa30 +3485598,8c42066c +348559c,3c033000 +34855a0,24630483 +34855a4,431024 +34855a8,54400032 +34855ac,8e0402b0 +34855b0,3c02801c +34855b4,344284a0 +34855b8,8c430008 +34855bc,3c02800f +34855c0,8c4213ec +34855c4,5462002b +34855c8,8e0402b0 +34855cc,3c028011 +34855d0,3442a5d0 +34855d4,8c42135c +34855d8,54400026 +34855dc,8e0402b0 +34855e0,3c02800e +34855e4,3442f1b0 +34855e8,8c420000 +34855ec,30420020 +34855f0,54400020 +34855f4,8e0402b0 +34855f8,10800033 +34855fc,3c028011 +3485600,3c02801c +3485604,344284a0 +3485608,3c030001 +348560c,431021 +3485610,94430934 +3485614,24020006 +3485618,1462002b +348561c,3c028011 +3485620,3c02801c +3485624,344284a0 +3485628,3c030001 +348562c,431021 +3485630,94420948 +3485634,14400024 +3485638,3c028011 +348563c,3c02801c +3485640,344284a0 +3485644,431021 +3485648,94420944 +348564c,50400005 +3485650,3c028040 +3485654,24030003 +3485658,1443001b +348565c,3c028011 +3485660,3c028040 +3485664,904208a1 +3485668,10400017 +348566c,3c028011 +3485670,8e0402b0 +3485674,24820008 +3485678,ae0202b0 +348567c,3c02fa00 +3485680,ac820000 +3485684,1118c0 +3485688,711821 +348568c,31880 +3485690,711823 +3485694,31840 +3485698,3c028080 +348569c,34428081 +34856a0,620018 +34856a4,1010 +34856a8,431021 +34856ac,211c3 +34856b0,31fc3 +34856b4,431023 +34856b8,2403ff00 +34856bc,431025 +34856c0,ac820004 +34856c4,3c028011 +34856c8,3442a5d0 +34856cc,9442009c +34856d0,30422000 +34856d4,1040002a +34856d8,3c028011 +34856dc,3442a5d0 +34856e0,8c420004 +34856e4,14400054 +34856e8,3c028011 +34856ec,24070001 +34856f0,24060045 +34856f4,3c058041 +34856f8,24a51fb8 +34856fc,c10288c +3485700,2402025 +3485704,3c028011 +3485708,3442a5d0 +348570c,94420070 +3485710,3042f000 +3485714,24032000 +3485718,5443000e +348571c,2402000c +3485720,24020010 +3485724,afa20018 +3485728,afa20014 +348572c,24020040 +3485730,afa20010 +3485734,24070102 +3485738,3025 +348573c,3c058041 +3485740,24a51fb8 +3485744,c1028f4 +3485748,2402025 +348574c,1000000c +3485750,3c028011 +3485754,afa20018 +3485758,afa20014 +348575c,24020042 +3485760,afa20010 +3485764,24070104 +3485768,3025 +348576c,3c058041 +3485770,24a51fb8 +3485774,c1028f4 +3485778,2402025 +348577c,3c028011 +3485780,3442a5d0 +3485784,9442009c +3485788,30424000 +348578c,1040002a +3485790,3c028011 +3485794,3442a5d0 +3485798,8c420004 +348579c,14400026 +34857a0,3c028011 +34857a4,24070001 +34857a8,24060046 +34857ac,3c058041 +34857b0,24a51fb8 +34857b4,c10288c +34857b8,2402025 +34857bc,3c028011 +34857c0,3442a5d0 +34857c4,94420070 +34857c8,3042f000 +34857cc,24033000 +34857d0,5443000e +34857d4,2402000c +34857d8,24020010 +34857dc,afa20018 +34857e0,afa20014 +34857e4,24020040 +34857e8,afa20010 +34857ec,2407011b +34857f0,3025 +34857f4,3c058041 +34857f8,24a51fb8 +34857fc,c1028f4 +3485800,2402025 +3485804,1000000c +3485808,3c028011 +348580c,afa20018 +3485810,afa20014 +3485814,24020042 +3485818,afa20010 +348581c,2407011d +3485820,3025 +3485824,3c058041 +3485828,24a51fb8 +348582c,c1028f4 +3485830,2402025 +3485834,3c028011 +3485838,3442a5d0 +348583c,9042008b +3485840,2442ffdf +3485844,304200ff +3485848,2c42000b +348584c,10400063 +3485850,3c028011 +3485854,3442a5d0 +3485858,8c430004 +348585c,24020001 +3485860,1462005e +3485864,3c028011 +3485868,3c02801d +348586c,3442aa30 +3485870,8c43066c +3485874,3c023000 +3485878,24420483 +348587c,621024 +3485880,5440002f +3485884,8e0402b0 +3485888,3c02801c +348588c,344284a0 +3485890,8c440008 +3485894,3c02800f +3485898,8c4213ec +348589c,54820028 +34858a0,8e0402b0 +34858a4,3c028011 +34858a8,3442a5d0 +34858ac,8c42135c +34858b0,54400023 +34858b4,8e0402b0 +34858b8,3c02800e +34858bc,3442f1b0 +34858c0,8c420000 +34858c4,30420020 +34858c8,5440001d +34858cc,8e0402b0 +34858d0,3c028040 +34858d4,8c420d80 +34858d8,10400008 +34858dc,3c02801c +34858e0,344284a0 +34858e4,3c040001 +34858e8,441021 +34858ec,94440934 +34858f0,24020006 +34858f4,10820011 +34858f8,3c02801c +34858fc,344284a0 +3485900,3c040001 +3485904,441021 +3485908,94420934 +348590c,1440000b +3485910,3c02801c +3485914,344284a0 +3485918,441021 +348591c,90420756 +3485920,54400007 +3485924,8e0402b0 +3485928,3c0208a0 +348592c,24420800 +3485930,621824 +3485934,506000a0 +3485938,8e0202b0 +348593c,8e0402b0 +3485940,24820008 +3485944,ae0202b0 +3485948,3c02fa00 +348594c,ac820000 +3485950,1118c0 +3485954,711821 +3485958,31880 +348595c,711823 +3485960,31840 +3485964,3c028080 +3485968,34428081 +348596c,620018 +3485970,1010 +3485974,431021 +3485978,211c3 +348597c,31fc3 +3485980,431023 +3485984,2403ff00 +3485988,431025 +348598c,ac820004 +3485990,24070001 +3485994,3c028011 +3485998,3442a5d0 +348599c,8046008b +34859a0,3c148041 +34859a4,26851fb8 +34859a8,c10288c +34859ac,2402025 +34859b0,2402000c +34859b4,afa20018 +34859b8,afa20014 +34859bc,24020042 +34859c0,afa20010 +34859c4,2407011d +34859c8,3025 +34859cc,26851fb8 +34859d0,c1028f4 +34859d4,2402025 +34859d8,3c028011 +34859dc,3442a5d0 +34859e0,9042007b +34859e4,2442fff9 +34859e8,304200ff +34859ec,2c420002 +34859f0,5040005e +34859f4,8e0202b0 +34859f8,3c02801d +34859fc,3442aa30 +3485a00,8c43066c +3485a04,3c023000 +3485a08,24420483 +3485a0c,621024 +3485a10,5440002f +3485a14,8e0402b0 +3485a18,3c02801c +3485a1c,344284a0 +3485a20,8c440008 +3485a24,3c02800f +3485a28,8c4213ec +3485a2c,54820028 +3485a30,8e0402b0 +3485a34,3c028011 +3485a38,3442a5d0 +3485a3c,8c42135c +3485a40,54400023 +3485a44,8e0402b0 +3485a48,3c02800e +3485a4c,3442f1b0 +3485a50,8c420000 +3485a54,30420020 +3485a58,5440001d +3485a5c,8e0402b0 +3485a60,3c028040 +3485a64,8c420d80 +3485a68,10400008 +3485a6c,3c02801c +3485a70,344284a0 +3485a74,3c040001 +3485a78,441021 +3485a7c,94440934 +3485a80,24020006 +3485a84,10820011 +3485a88,3c02801c +3485a8c,344284a0 +3485a90,3c040001 +3485a94,441021 +3485a98,94420934 +3485a9c,1440000b +3485aa0,3c02801c +3485aa4,344284a0 +3485aa8,441021 +3485aac,90420758 +3485ab0,54400007 +3485ab4,8e0402b0 +3485ab8,3c0208a0 +3485abc,24420800 +3485ac0,621824 +3485ac4,50600036 +3485ac8,8e0202b0 +3485acc,8e0402b0 +3485ad0,24820008 +3485ad4,ae0202b0 +3485ad8,3c02fa00 +3485adc,ac820000 +3485ae0,1118c0 +3485ae4,711821 +3485ae8,31880 +3485aec,711823 +3485af0,31840 +3485af4,3c028080 +3485af8,34428081 +3485afc,620018 +3485b00,1010 +3485b04,431021 +3485b08,211c3 +3485b0c,31fc3 +3485b10,431023 +3485b14,2403ff00 +3485b18,431025 +3485b1c,ac820004 +3485b20,24070001 +3485b24,3c028011 +3485b28,3442a5d0 +3485b2c,8046007b +3485b30,3c118041 +3485b34,26251fb8 +3485b38,c10288c +3485b3c,2402025 +3485b40,2402000c +3485b44,afa20018 +3485b48,afa20014 +3485b4c,2402004d +3485b50,afa20010 +3485b54,24070111 +3485b58,3025 +3485b5c,26251fb8 +3485b60,c1028f4 +3485b64,2402025 +3485b68,8e0202b0 +3485b6c,24430008 +3485b70,ae0302b0 +3485b74,3c03e700 +3485b78,ac430000 +3485b7c,ac400004 +3485b80,8fbf0034 +3485b84,8fb40030 +3485b88,8fb3002c +3485b8c,8fb20028 +3485b90,8fb10024 +3485b94,8fb00020 +3485b98,3e00008 +3485b9c,27bd0038 +3485ba0,24430008 +3485ba4,ae0302b0 +3485ba8,3c03fa00 +3485bac,ac430000 +3485bb0,1000ffdb +3485bb4,ac530004 +3485bb8,24430008 +3485bbc,ae0302b0 +3485bc0,3c03fa00 +3485bc4,ac430000 +3485bc8,1000ff71 +3485bcc,ac530004 +3485bd0,3e00008 +3485bd8,27bdffe0 +3485bdc,8c820008 +3485be0,24430008 +3485be4,ac830008 +3485be8,3c03fcff +3485bec,3463ffff +3485bf0,ac430000 +3485bf4,3c03fffd +3485bf8,3463f6fb +3485bfc,ac430004 +3485c00,8c820008 +3485c04,24430008 +3485c08,ac830008 +3485c0c,3c03fa00 +3485c10,ac430000 +3485c14,240300d0 +3485c18,ac430004 +3485c1c,a71021 +3485c20,21380 +3485c24,3c0700ff +3485c28,34e7f000 +3485c2c,471024 +3485c30,8fa30030 +3485c34,c31821 +3485c38,31880 +3485c3c,30630fff +3485c40,431025 +3485c44,3c03e400 +3485c48,431025 +3485c4c,afa20000 +3485c50,52b80 +3485c54,a72824 +3485c58,63080 +3485c5c,30c60fff +3485c60,a62825 +3485c64,afa50004 +3485c68,3c02e100 +3485c6c,afa20008 +3485c70,afa0000c +3485c74,3c02f100 +3485c78,afa20010 +3485c7c,3c020400 +3485c80,24420400 +3485c84,afa20014 +3485c88,afbd0018 +3485c8c,27a50018 +3485c90,8c820008 +3485c94,24430008 +3485c98,ac830008 +3485c9c,8fa30018 +3485ca0,8c670004 +3485ca4,8c660000 +3485ca8,ac470004 +3485cac,ac460000 +3485cb0,24620008 +3485cb4,14a2fff6 +3485cb8,afa20018 +3485cbc,8c820008 +3485cc0,24430008 +3485cc4,ac830008 +3485cc8,3c03e700 +3485ccc,ac430000 +3485cd0,ac400004 +3485cd4,8c820008 +3485cd8,24430008 +3485cdc,ac830008 +3485ce0,3c03fc11 +3485ce4,34639623 +3485ce8,ac430000 +3485cec,3c03ff2f +3485cf0,3463ffff +3485cf4,ac430004 +3485cf8,3e00008 +3485cfc,27bd0020 +3485d00,3c02801c +3485d04,344284a0 +3485d08,94430014 +3485d0c,3c028040 +3485d10,8c420d80 +3485d14,104005c4 +3485d18,3c02801c +3485d1c,27bdff90 +3485d20,afbf006c +3485d24,afbe0068 +3485d28,afb70064 +3485d2c,afb60060 +3485d30,afb5005c +3485d34,afb40058 +3485d38,afb30054 +3485d3c,afb20050 +3485d40,afb1004c +3485d44,afb00048 +3485d48,808025 +3485d4c,344284a0 +3485d50,3c040001 +3485d54,441021 +3485d58,94440934 +3485d5c,24020006 +3485d60,548205a6 +3485d64,8fbf006c +3485d68,3c02801c +3485d6c,344284a0 +3485d70,3c040001 +3485d74,441021 +3485d78,94420948 +3485d7c,1440059e +3485d80,3c02801c +3485d84,344284a0 +3485d88,441021 +3485d8c,94420944 +3485d90,50400005 +3485d94,3062ffff +3485d98,24040003 +3485d9c,14440597 +3485da0,8fbf006c +3485da4,3062ffff +3485da8,30630700 +3485dac,5060000b +3485db0,21400 +3485db4,3c038040 +3485db8,906308a1 +3485dbc,54600581 +3485dc0,8e030004 +3485dc4,21c00 +3485dc8,31c03 +3485dcc,461058b +3485dd0,8fbf006c +3485dd4,1000056b +3485dd8,8e030004 +3485ddc,21403 +3485de0,4420570 +3485de4,8e020004 +3485de8,10000584 +3485dec,8fbf006c +3485df0,3c038040 +3485df4,906308a1 +3485df8,10600288 +3485dfc,30430400 +3485e00,3c028011 +3485e04,3442a5d0 +3485e08,3c038040 +3485e0c,8c630d8c +3485e10,10600018 +3485e14,94420f2e +3485e18,3c038040 +3485e1c,8c630d94 +3485e20,10600005 +3485e24,3c038040 +3485e28,30430001 +3485e2c,10600005 +3485e30,3c038040 +3485e34,3c038040 +3485e38,8c630d98 +3485e3c,14600548 +3485e40,3c038040 +3485e44,8c630d94 +3485e48,10600004 +3485e4c,3825 +3485e50,30420002 +3485e54,5040000d +3485e58,afa00038 +3485e5c,3c028040 +3485e60,8c420d98 +3485e64,50400009 +3485e68,afa00038 +3485e6c,10000004 +3485e70,24020001 +3485e74,3825 +3485e78,10000004 +3485e7c,afa00038 +3485e80,10000002 +3485e84,afa20038 +3485e88,afa20038 +3485e8c,3c028040 +3485e90,8c420d84 +3485e94,401825 +3485e98,afa2003c +3485e9c,14600002 +3485ea0,24020025 +3485ea4,601025 +3485ea8,24420092 +3485eac,24030140 +3485eb0,621823 +3485eb4,39fc2 +3485eb8,2639821 +3485ebc,139843 +3485ec0,26750001 +3485ec4,8e030008 +3485ec8,24640008 +3485ecc,ae040008 +3485ed0,3c04fcff +3485ed4,3484ffff +3485ed8,ac640000 +3485edc,3c04fffd +3485ee0,3484f6fb +3485ee4,ac640004 +3485ee8,8e030008 +3485eec,24640008 +3485ef0,ae040008 +3485ef4,3c04fa00 +3485ef8,ac640000 +3485efc,240400d0 +3485f00,ac640004 +3485f04,531021 +3485f08,21380 +3485f0c,3c03e400 +3485f10,24630334 +3485f14,431025 +3485f18,afa20020 +3485f1c,131380 +3485f20,3442008c +3485f24,afa20024 +3485f28,3c02e100 +3485f2c,afa20028 +3485f30,afa0002c +3485f34,3c02f100 +3485f38,afa20030 +3485f3c,3c020400 +3485f40,24420400 +3485f44,afa20034 +3485f48,27a20020 +3485f4c,27a60038 +3485f50,8e030008 +3485f54,24640008 +3485f58,ae040008 +3485f5c,8c450004 +3485f60,8c440000 +3485f64,ac650004 +3485f68,24420008 +3485f6c,1446fff8 +3485f70,ac640000 +3485f74,8e020008 +3485f78,24430008 +3485f7c,ae030008 +3485f80,3c03e700 +3485f84,ac430000 +3485f88,ac400004 +3485f8c,8e020008 +3485f90,24430008 +3485f94,ae030008 +3485f98,3c03fc11 +3485f9c,34639623 +3485fa0,ac430000 +3485fa4,3c03ff2f +3485fa8,3463ffff +3485fac,10e0005e +3485fb0,ac430004 +3485fb4,3c058041 +3485fb8,24a51fc8 +3485fbc,94a70008 +3485fc0,3025 +3485fc4,c10288c +3485fc8,2002025 +3485fcc,3c028041 +3485fd0,8c424830 +3485fd4,18400054 +3485fd8,3c028041 +3485fdc,3c128041 +3485fe0,26521dd0 +3485fe4,8825 +3485fe8,3c178040 +3485fec,3c148040 +3485ff0,26940d9c +3485ff4,24421db8 +3485ff8,afa20040 +3485ffc,3c028041 +3486000,24421fc8 +3486004,afa20044 +3486008,3c168041 +348600c,8ee20d90 +3486010,5040000b +3486014,92420000 +3486018,92430000 +348601c,3c028011 +3486020,3442a5d0 +3486024,431021 +3486028,904200a8 +348602c,21042 +3486030,30420001 +3486034,50400038 +3486038,26310001 +348603c,92420000 +3486040,541021 +3486044,80420000 +3486048,28430003 +348604c,54600032 +3486050,26310001 +3486054,2446fffd +3486058,28c30003 +348605c,50600003 +3486060,24020003 +3486064,1000000c +3486068,245efffe +348606c,10c20007 +3486070,24020004 +3486074,10c20007 +3486078,24020005 +348607c,50c20006 +3486080,f025 +3486084,10000005 +3486088,1e1880 +348608c,10000002 +3486090,241e0005 +3486094,c0f025 +3486098,1e1880 +348609c,8fa20040 +34860a0,431821 +34860a4,90620001 +34860a8,21600 +34860ac,90640003 +34860b0,42200 +34860b4,441025 +34860b8,90630002 +34860bc,31c00 +34860c0,431025 +34860c4,344200ff +34860c8,8e030008 +34860cc,24640008 +34860d0,ae040008 +34860d4,3c04fa00 +34860d8,ac640000 +34860dc,ac620004 +34860e0,2402000c +34860e4,afa20018 +34860e8,afa20014 +34860ec,111040 +34860f0,511021 +34860f4,21080 +34860f8,511021 +34860fc,24420024 +3486100,afa20010 +3486104,2a03825 +3486108,8fa50044 +348610c,c1028f4 +3486110,2002025 +3486114,26310001 +3486118,8ec24830 +348611c,222102a +3486120,1440ffba +3486124,2652000d +3486128,8e020008 +348612c,24430008 +3486130,ae030008 +3486134,3c03fa00 +3486138,ac430000 +348613c,2403ffff +3486140,ac430004 +3486144,8fa20038 +3486148,10400038 +348614c,3c028041 +3486150,3c058041 +3486154,24a51fd8 +3486158,94a70008 +348615c,3025 +3486160,c10288c +3486164,2002025 +3486168,3c028041 +348616c,8c424830 +3486170,18400040 +3486174,3c028041 +3486178,24421dd0 +348617c,408825 +3486180,9025 +3486184,3c178040 +3486188,3c148040 +348618c,26940d9c +3486190,24030024 +3486194,62f023 +3486198,3c028041 +348619c,24421fd8 +34861a0,afa20038 +34861a4,3c168041 +34861a8,8ee20d90 +34861ac,5040000b +34861b0,92220000 +34861b4,92230000 +34861b8,3c028011 +34861bc,3442a5d0 +34861c0,431021 +34861c4,904200a8 +34861c8,21042 +34861cc,30420001 +34861d0,50400011 +34861d4,26520001 +34861d8,92220000 +34861dc,541021 +34861e0,80460000 +34861e4,2cc20003 +34861e8,5040000b +34861ec,26520001 +34861f0,2402000c +34861f4,afa20018 +34861f8,afa20014 +34861fc,3d11021 +3486200,afa20010 +3486204,2a03825 +3486208,8fa50038 +348620c,c1028f4 +3486210,2002025 +3486214,26520001 +3486218,8ec24830 +348621c,242102a +3486220,1440ffe1 +3486224,2631000d +3486228,3c028041 +348622c,8c424830 +3486230,18400010 +3486234,2675000e +3486238,24110025 +348623c,9025 +3486240,3c148041 +3486244,26941dae +3486248,3c168041 +348624c,24070006 +3486250,2203025 +3486254,2a02825 +3486258,c1043bc +348625c,2912021 +3486260,26520001 +3486264,8ec24830 +3486268,242102a +348626c,1440fff7 +3486270,2631000d +3486274,afa00010 +3486278,3825 +348627c,2406000b +3486280,24050006 +3486284,c1043ee +3486288,2002025 +348628c,267e003f +3486290,24070001 +3486294,24060011 +3486298,3c058041 +348629c,24a51fa8 +34862a0,c10288c +34862a4,2002025 +34862a8,3c028041 +34862ac,8c424830 +34862b0,18400037 +34862b4,3c174f28 +34862b8,3c168041 +34862bc,26d61dd0 +34862c0,2c08825 +34862c4,9025 +34862c8,3c148011 +34862cc,3694a5d0 +34862d0,26f74f29 +34862d4,3c158041 +34862d8,82220001 +34862dc,4430028 +34862e0,26520001 +34862e4,92240000 +34862e8,2841021 +34862ec,804300bc +34862f0,410c0 +34862f4,441023 +34862f8,21080 +34862fc,2821021 +3486300,804200e5 +3486304,afb70020 +3486308,1860000b +348630c,a3a00024 +3486310,602025 +3486314,2863000a +3486318,50600001 +348631c,24040009 +3486320,41e00 +3486324,31e03 +3486328,4620001 +348632c,2025 +3486330,24840030 +3486334,a3a40020 +3486338,1840000a +348633c,401825 +3486340,2842000a +3486344,50400001 +3486348,24030009 +348634c,31600 +3486350,21603 +3486354,4420001 +3486358,1825 +348635c,24630030 +3486360,a3a30022 +3486364,2363023 +3486368,24070006 +348636c,24c60025 +3486370,3c02825 +3486374,c1043bc +3486378,27a40020 +348637c,26520001 +3486380,8ea24830 +3486384,242102a +3486388,1440ffd3 +348638c,2631000d +3486390,afa00010 +3486394,3825 +3486398,2406000b +348639c,24050006 +34863a0,c1043ee +34863a4,2002025 +34863a8,26770058 +34863ac,24070001 +34863b0,2406000e +34863b4,3c058041 +34863b8,24a51fa8 +34863bc,c10288c +34863c0,2002025 +34863c4,3c028041 +34863c8,8c424830 +34863cc,18400027 +34863d0,3c028041 +34863d4,3c168041 +34863d8,26d61dd0 +34863dc,2c08825 +34863e0,9025 +34863e4,3c158011 +34863e8,36b5a5d0 +34863ec,245e1fa8 +34863f0,3c148041 +34863f4,92230000 +34863f8,2404000d +34863fc,14640002 +3486400,2201025 +3486404,2403000a +3486408,90420001 +348640c,30420040 +3486410,50400012 +3486414,26520001 +3486418,2a31821 +348641c,906200a8 +3486420,30420001 +3486424,5040000d +3486428,26520001 +348642c,2402000c +3486430,afa20018 +3486434,afa20014 +3486438,2361023 +348643c,24420024 +3486440,afa20010 +3486444,2e03825 +3486448,3025 +348644c,3c02825 +3486450,c1028f4 +3486454,2002025 +3486458,26520001 +348645c,8e824830 +3486460,242102a +3486464,1440ffe3 +3486468,2631000d +348646c,24070001 +3486470,2406000a +3486474,3c058041 +3486478,24a51fa8 +348647c,c10288c +3486480,2002025 +3486484,3c028041 +3486488,8c424830 +348648c,18400023 +3486490,3c028041 +3486494,3c118041 +3486498,26311dd1 +348649c,9025 +34864a0,3c158011 +34864a4,36b5a5d0 +34864a8,24421dd0 +34864ac,24160023 +34864b0,2c2b023 +34864b4,3c1e8041 +34864b8,3c148041 +34864bc,92220000 +34864c0,30420020 +34864c4,50400011 +34864c8,26520001 +34864cc,8ea200a4 +34864d0,3c030040 +34864d4,431024 +34864d8,5040000c +34864dc,26520001 +34864e0,2402000c +34864e4,afa20018 +34864e8,afa20014 +34864ec,2d11021 +34864f0,afa20010 +34864f4,2e03825 +34864f8,3025 +34864fc,27c51fa8 +3486500,c1028f4 +3486504,2002025 +3486508,26520001 +348650c,8e824830 +3486510,242102a +3486514,1440ffe9 +3486518,2631000d +348651c,26770065 +3486520,24070001 +3486524,24060010 +3486528,3c058041 +348652c,24a51fa8 +3486530,c10288c +3486534,2002025 +3486538,3c028041 +348653c,8c424830 +3486540,18400024 +3486544,3c028041 +3486548,3c168041 +348654c,26d61dd0 +3486550,2c08825 +3486554,9025 +3486558,3c158011 +348655c,36b5a5d0 +3486560,245e1fa8 +3486564,3c148041 +3486568,92220001 +348656c,30420010 +3486570,50400014 +3486574,26520001 +3486578,92220000 +348657c,2a21021 +3486580,904200a8 +3486584,21082 +3486588,30420001 +348658c,5040000d +3486590,26520001 +3486594,2402000c +3486598,afa20018 +348659c,afa20014 +34865a0,2361023 +34865a4,24420024 +34865a8,afa20010 +34865ac,2e03825 +34865b0,3025 +34865b4,3c02825 +34865b8,c1028f4 +34865bc,2002025 +34865c0,26520001 +34865c4,8e824830 +34865c8,242102a +34865cc,1440ffe6 +34865d0,2631000d +34865d4,26770072 +34865d8,24070001 +34865dc,2406000f +34865e0,3c058041 +34865e4,24a51fa8 +34865e8,c10288c +34865ec,2002025 +34865f0,3c028041 +34865f4,8c424830 +34865f8,18400024 +34865fc,3c168041 +3486600,26d61dd0 +3486604,2c08825 +3486608,9025 +348660c,3c158011 +3486610,36b5a5d0 +3486614,3c028041 +3486618,245e1fa8 +348661c,3c148041 +3486620,92220001 +3486624,30420010 +3486628,50400014 +348662c,26520001 +3486630,92220000 +3486634,2a21021 +3486638,904200a8 +348663c,21042 +3486640,30420001 +3486644,5040000d +3486648,26520001 +348664c,2402000c +3486650,afa20018 +3486654,afa20014 +3486658,2361023 +348665c,24420024 +3486660,afa20010 +3486664,2e03825 +3486668,3025 +348666c,3c02825 +3486670,c1028f4 +3486674,2002025 +3486678,26520001 +348667c,8e824830 +3486680,242102a +3486684,1440ffe6 +3486688,2631000d +348668c,2677007f +3486690,24070001 +3486694,2406000b +3486698,3c058041 +348669c,24a51fa8 +34866a0,c10288c +34866a4,2002025 +34866a8,3c028041 +34866ac,8c424830 +34866b0,18400052 +34866b4,3c158041 +34866b8,26b51dd0 +34866bc,2a08825 +34866c0,9025 +34866c4,3c168011 +34866c8,36d6a5d0 +34866cc,3c028041 +34866d0,245e1fa8 +34866d4,3c148041 +34866d8,92230002 +34866dc,50600013 +34866e0,26520001 +34866e4,92220000 +34866e8,38420003 +34866ec,2c21021 +34866f0,90420e9c +34866f4,5443000d +34866f8,26520001 +34866fc,2402000c +3486700,afa20018 +3486704,afa20014 +3486708,2351023 +348670c,24420024 +3486710,afa20010 +3486714,2e03825 +3486718,3025 +348671c,3c02825 +3486720,c1028f4 +3486724,2002025 +3486728,26520001 +348672c,8e824830 +3486730,242182a +3486734,1460ffe8 +3486738,2631000d +348673c,8fa3003c +3486740,5060002f +3486744,afa00010 +3486748,1840002c +348674c,2673008c +3486750,2a08825 +3486754,9025 +3486758,3c1e8040 +348675c,3c168040 +3486760,26d60daa +3486764,3c148041 +3486768,26941cb8 +348676c,3c028041 +3486770,24421cbc +3486774,afa20038 +3486778,3c178041 +348677c,8fc20d88 +3486780,5040000f +3486784,92220000 +3486788,92220001 +348678c,30420010 +3486790,5040000b +3486794,92220000 +3486798,92230000 +348679c,3c028011 +34867a0,3442a5d0 +34867a4,431021 +34867a8,904200a8 +34867ac,21082 +34867b0,30420001 +34867b4,5040000d +34867b8,26520001 +34867bc,92220000 +34867c0,561021 +34867c4,90420000 +34867c8,14400002 +34867cc,2802025 +34867d0,8fa40038 +34867d4,2353023 +34867d8,24070006 +34867dc,24c60025 +34867e0,c1043bc +34867e4,2602825 +34867e8,26520001 +34867ec,8ee24830 +34867f0,242102a +34867f4,1440ffe1 +34867f8,2631000d +34867fc,afa00010 +3486800,3825 +3486804,2406000b +3486808,24050006 +348680c,c1043ee +3486810,2002025 +3486814,100002a6 +348681c,506000bc +3486820,30420100 +3486824,3c028011 +3486828,3442a5d0 +348682c,3c038040 +3486830,8c630d8c +3486834,10600015 +3486838,94420f2e +348683c,3c038040 +3486840,8c630d94 +3486844,50600014 +3486848,24020001 +348684c,30430001 +3486850,14600007 +3486854,24030001 +3486858,3c038040 +348685c,8c630d94 +3486860,10600010 +3486864,afa00040 +3486868,10000003 +348686c,30420002 +3486870,afa30040 +3486874,30420002 +3486878,24030001 +348687c,1440000b +3486880,afa3003c +3486884,10000009 +3486888,afa0003c +348688c,afa00040 +3486890,10000006 +3486894,afa0003c +3486898,afa20040 +348689c,10000003 +34868a0,afa2003c +34868a4,24020001 +34868a8,afa2003c 34868ac,3c028041 -34868b0,ac40b588 -34868b4,3c028041 -34868b8,ac40b584 -34868bc,3c028041 -34868c0,ac40b580 -34868c4,3c028041 -34868c8,ac40b57c -34868cc,3c028041 -34868d0,3e00008 -34868d4,ac40b578 -34868d8,8c830000 -34868dc,3c028040 -34868e0,ac43002c -34868e4,94830004 -34868e8,3c028040 -34868ec,a4430030 -34868f0,90830006 -34868f4,3c028040 -34868f8,3e00008 -34868fc,a4430032 -3486900,afa40000 -3486904,afa50004 -3486908,3c028041 -348690c,2442b604 -3486910,1825 -3486914,24060003 -3486918,8c450000 -348691c,14a0000a -3486924,318c0 -3486928,3c028041 -348692c,2442b604 -3486930,621821 -3486934,8fa20000 -3486938,ac620000 -348693c,8fa20004 -3486940,3e00008 -3486944,ac620004 -3486948,10a40003 -348694c,24630001 -3486950,1466fff1 -3486954,24420008 -3486958,3e00008 -3486960,3c028040 -3486964,94420028 -3486968,10400013 -348696c,2403ffff -3486970,27bdffe0 -3486974,afbf001c -3486978,afa00010 -348697c,afa00014 -3486980,a3a30011 -3486984,24040005 -3486988,a3a40012 -348698c,a3a30013 -3486990,3c038040 -3486994,94630026 -3486998,a3a30016 -348699c,a7a20014 -34869a0,8fa40010 -34869a4,c101a40 -34869a8,8fa50014 -34869ac,8fbf001c -34869b0,3e00008 -34869b4,27bd0020 -34869b8,3e00008 -34869c0,27bdffe0 -34869c4,afbf001c -34869c8,3c0200ff -34869cc,34420500 -34869d0,442825 -34869d4,c1019b9 -34869d8,27a40010 -34869dc,8fa20010 -34869e0,10400005 -34869e4,8fbf001c -34869e8,402025 -34869ec,c101a40 -34869f0,8fa50014 -34869f4,8fbf001c -34869f8,3e00008 -34869fc,27bd0020 -3486a00,3c038041 -3486a04,2462b604 -3486a08,8c450008 -3486a0c,8c44000c -3486a10,ac65b604 -3486a14,ac440004 -3486a18,8c440010 -3486a1c,8c430014 -3486a20,ac440008 -3486a24,ac43000c -3486a28,ac400010 -3486a2c,3e00008 -3486a30,ac400014 -3486a34,801825 -3486a38,3084ffff -3486a3c,240205ff -3486a40,1482000b -3486a44,27bdfff8 -3486a48,3c028011 -3486a4c,3442a660 -3486a50,94430000 -3486a54,24630001 -3486a58,a4430000 -3486a5c,3c028040 -3486a60,a4400028 -3486a64,3c028040 -3486a68,10000009 -3486a6c,a4400026 -3486a70,3c020057 -3486a74,24420058 -3486a78,14620005 -3486a7c,3c02801c -3486a80,344284a0 -3486a84,8c431d38 -3486a88,34630001 -3486a8c,ac431d38 -3486a90,3e00008 -3486a94,27bd0008 -3486a98,27bdffe0 -3486a9c,afbf001c -3486aa0,afb00018 -3486aa4,3c028041 -3486aa8,8c50b604 -3486aac,2442b604 -3486ab0,8c420004 -3486ab4,afa20010 -3486ab8,2403ff00 -3486abc,431024 -3486ac0,3c03007c -3486ac4,14430008 -3486ac8,8fbf001c -3486acc,c101dff -3486ad4,c101a80 -3486adc,c101a8d -3486ae0,2002025 -3486ae4,8fbf001c -3486ae8,8fb00018 -3486aec,3e00008 -3486af0,27bd0020 -3486af4,27bdffe8 -3486af8,afbf0014 -3486afc,afb00010 -3486b00,3c028041 -3486b04,8c50b594 -3486b08,1200000e -3486b0c,8fbf0014 -3486b10,c101a36 -3486b14,2444b594 +34868b0,94421f9c +34868b4,23840 +34868b8,e23821 +34868bc,73880 +34868c0,e23823 +34868c4,73840 +34868c8,24e70013 +34868cc,24020140 +34868d0,471023 +34868d4,2a7c2 +34868d8,282a021 +34868dc,14a043 +34868e0,26950001 +34868e4,2402009a +34868e8,afa20010 +34868ec,2406002b +34868f0,2802825 +34868f4,c1016f6 +34868f8,2002025 +34868fc,3c058041 +3486900,24a51fc8 +3486904,94a70008 +3486908,3025 +348690c,c10288c +3486910,2002025 +3486914,3c118041 +3486918,26311db8 +348691c,2412005f +3486920,3c1efa00 +3486924,24130010 +3486928,3c168041 +348692c,26d61fc8 +3486930,241700c5 +3486934,92220001 +3486938,21600 +348693c,92230003 +3486940,31a00 +3486944,431025 +3486948,92230002 +348694c,31c00 +3486950,431025 +3486954,344200ff +3486958,8e030008 +348695c,24640008 +3486960,ae040008 +3486964,ac7e0000 +3486968,ac620004 +348696c,afb30018 +3486970,afb30014 +3486974,afb20010 +3486978,2a03825 +348697c,92260000 +3486980,2c02825 +3486984,c1028f4 +3486988,2002025 +348698c,26520011 +3486990,1657ffe8 +3486994,26310004 +3486998,10000254 +348699c,8e020008 +34869a0,afb30018 +34869a4,afb30014 +34869a8,afb20010 +34869ac,2a03825 +34869b0,2203025 +34869b4,2c02825 +34869b8,c1028f4 +34869bc,2002025 +34869c0,26310001 +34869c4,1637fff6 +34869c8,26520011 +34869cc,26820012 +34869d0,afa20038 +34869d4,3c128040 +34869d8,26520dd0 +34869dc,2413002d +34869e0,8825 +34869e4,8fa20040 +34869e8,2a82b +34869ec,3c168041 +34869f0,26d61dac +34869f4,3c178040 +34869f8,3c1e8041 +34869fc,3c148040 +3486a00,26940d9c +3486a04,27c21dd0 +3486a08,afa20040 +3486a0c,2a230003 +3486a10,10600258 +3486a14,32a200ff +3486a18,10000256 +3486a1c,8fa2003c +3486a20,90450000 +3486a24,8ee20d90 +3486a28,24030001 +3486a2c,10430005 +3486a30,24030002 +3486a34,10430018 +3486a38,24020003 +3486a3c,1000002a +3486a40,2603025 +3486a44,27c21dd0 +3486a48,24460068 +3486a4c,90430000 +3486a50,742021 +3486a54,80840000 +3486a58,1485000b +3486a5c,2442000d +3486a60,3c028011 +3486a64,3442a5d0 +3486a68,431021 +3486a6c,904200a8 +3486a70,21042 +3486a74,30420001 +3486a78,5440001b +3486a7c,2603025 +3486a80,1000001d +3486a84,26310001 +3486a88,54c2fff1 +3486a8c,90430000 +3486a90,10000015 +3486a94,2603025 +3486a98,12220012 +3486a9c,2a230003 +3486aa0,38630001 +3486aa4,2231823 +3486aa8,31040 +3486aac,431021 +3486ab0,21080 +3486ab4,431021 +3486ab8,8fa30040 +3486abc,431021 +3486ac0,90430000 +3486ac4,3c028011 +3486ac8,3442a5d0 +3486acc,431021 +3486ad0,904200a8 +3486ad4,21042 +3486ad8,30420001 +3486adc,50400006 +3486ae0,26310001 +3486ae4,2603025 +3486ae8,8fa50038 +3486aec,c1043e6 +3486af0,2402025 +3486af4,26310001 +3486af8,26520017 +3486afc,24020009 +3486b00,1622ffc2 +3486b04,26730011 +3486b08,100001e9 +3486b10,104000dc +3486b14,3c028040 3486b18,3c028041 -3486b1c,8c42b604 -3486b20,14500003 -3486b28,c101a80 -3486b30,c101a8d -3486b34,2002025 -3486b38,c101a23 -3486b40,8fbf0014 -3486b44,8fb00010 -3486b48,3e00008 -3486b4c,27bd0018 -3486b50,27bdffe0 -3486b54,afbf001c -3486b58,3c028041 -3486b5c,8c43b604 -3486b60,2442b604 -3486b64,8c420004 -3486b68,afa30010 -3486b6c,1060000d -3486b70,afa20014 -3486b74,602025 -3486b78,c1019f4 -3486b7c,402825 -3486b80,3c02801d -3486b84,3442aa30 -3486b88,3c038041 -3486b8c,8c63b59c -3486b90,ac430428 -3486b94,3c038041 -3486b98,8c63b58c -3486b9c,80630000 -3486ba0,a0430424 -3486ba4,8fbf001c -3486ba8,3e00008 -3486bac,27bd0020 -3486bb0,27bdffe8 -3486bb4,afbf0014 -3486bb8,c101a58 -3486bc0,3c02801d -3486bc4,3442aa30 -3486bc8,8c42066c -3486bcc,3c03fcac -3486bd0,24632485 -3486bd4,431024 -3486bd8,14400033 -3486bdc,3c028041 -3486be0,3c02801d -3486be4,3442aa30 -3486be8,94420088 -3486bec,30420001 -3486bf0,1040002a -3486bf4,1025 -3486bf8,3c02801d -3486bfc,3442aa30 -3486c00,8c420670 -3486c04,3c03000c -3486c08,431024 -3486c0c,14400023 -3486c10,1025 -3486c14,3c02800e -3486c18,3442f1b0 -3486c1c,8c420000 -3486c20,30420020 -3486c24,1440001d -3486c28,1025 -3486c2c,3c02801c -3486c30,344284a0 -3486c34,8c420794 -3486c38,14400018 -3486c3c,1025 -3486c40,3c028041 -3486c44,9042b574 -3486c48,24420001 -3486c4c,304200ff -3486c50,2c430002 -3486c54,14600012 -3486c58,3c038041 -3486c5c,3c028041 -3486c60,c101aa6 -3486c64,a040b574 -3486c68,c101dfb -3486c70,10400005 -3486c78,c101e04 -3486c80,1000000b -3486c84,8fbf0014 -3486c88,c101ad4 -3486c90,10000007 -3486c94,8fbf0014 -3486c98,1025 -3486c9c,3c038041 -3486ca0,10000002 -3486ca4,a062b574 -3486ca8,a040b574 -3486cac,8fbf0014 -3486cb0,3e00008 -3486cb4,27bd0018 -3486cb8,27bdffd8 -3486cbc,afbf0024 -3486cc0,afb20020 -3486cc4,afb1001c -3486cc8,afb00018 -3486ccc,a09025 -3486cd0,10800012 -3486cd4,c08825 -3486cd8,10c00010 -3486cdc,808025 -3486ce0,4c10004 -3486ce4,c03825 -3486ce8,63823 -3486cec,73e00 -3486cf0,73e03 -3486cf4,30e700ff -3486cf8,3c02801c -3486cfc,344284a0 -3486d00,904600a5 -3486d04,2002825 -3486d08,c1019e1 -3486d0c,27a40010 -3486d10,8fa20010 -3486d14,14400005 -3486d18,8fa40010 -3486d1c,c101a23 -3486d24,10000019 -3486d28,2201025 -3486d2c,c1019f4 -3486d30,8fa50014 -3486d34,3c028041 -3486d38,8c42b58c -3486d3c,86040000 -3486d40,2403000a -3486d44,1483000c -3486d48,80420000 -3486d4c,8fa30014 -3486d50,2404ff00 -3486d54,641824 -3486d58,3c04007c -3486d5c,50640001 -3486d60,2402007c -3486d64,9603001c -3486d68,3063f01f -3486d6c,22140 -3486d70,641825 -3486d74,a603001c -3486d78,6230005 -3486d7c,a2420424 -3486d80,21023 -3486d84,21600 -3486d88,21603 -3486d8c,a2420424 -3486d90,8fbf0024 -3486d94,8fb20020 -3486d98,8fb1001c -3486d9c,8fb00018 -3486da0,3e00008 -3486da4,27bd0028 -3486da8,27bdffd8 -3486dac,afbf0024 -3486db0,afb20020 -3486db4,afb1001c -3486db8,afb00018 -3486dbc,808825 -3486dc0,3825 -3486dc4,3025 -3486dc8,802825 -3486dcc,c1019e1 -3486dd0,27a40010 -3486dd4,8fa20010 -3486dd8,10400029 -3486ddc,93b20016 -3486de0,c101eeb -3486de4,97a40014 -3486de8,c101edc -3486dec,402025 -3486df0,408025 -3486df4,ae200134 -3486df8,3c028040 -3486dfc,16400015 -3486e00,a0520025 -3486e04,3c028040 -3486e08,90430024 -3486e0c,3c028040 -3486e10,a0430025 -3486e14,3025 -3486e18,96050002 -3486e1c,3c11801c -3486e20,3c02800d -3486e24,3442ce14 -3486e28,40f809 -3486e2c,362484a0 -3486e30,92050001 -3486e34,3c028006 -3486e38,3442fdcc -3486e3c,40f809 -3486e40,362484a0 -3486e44,c101f03 -3486e48,2002025 -3486e4c,10000013 -3486e50,8fbf0024 -3486e54,3025 -3486e58,96050002 -3486e5c,3c04801c -3486e60,3c02800d -3486e64,3442ce14 -3486e68,40f809 -3486e6c,348484a0 -3486e70,c101a36 -3486e74,27a40010 -3486e78,10000008 -3486e7c,8fbf0024 -3486e80,c101eeb -3486e84,2404005b -3486e88,c101edc -3486e8c,402025 -3486e90,408025 -3486e94,1000ffdb -3486e98,ae200134 -3486e9c,8fb20020 -3486ea0,8fb1001c -3486ea4,8fb00018 -3486ea8,3e00008 -3486eac,27bd0028 -3486eb0,27bdffe8 -3486eb4,afbf0014 -3486eb8,afb00010 -3486ebc,3c028011 -3486ec0,3442a5d0 -3486ec4,94500eec -3486ec8,32100002 -3486ecc,1600000c -3486ed0,3c028040 -3486ed4,90420cd5 -3486ed8,50400004 -3486edc,3c028011 -3486ee0,c101a70 -3486ee4,24040002 -3486ee8,3c028011 -3486eec,3442a5d0 -3486ef0,94430eec -3486ef4,34630002 -3486ef8,a4430eec -3486efc,3c028040 -3486f00,90430cd5 -3486f04,14600002 -3486f08,24020001 -3486f0c,10102b -3486f10,8fbf0014 -3486f14,8fb00010 -3486f18,3e00008 -3486f1c,27bd0018 -3486f20,94830004 -3486f24,94820006 -3486f28,620018 -3486f2c,9082000c -3486f30,1812 -3486f3c,620018 -3486f40,1012 -3486f44,3e00008 -3486f4c,27bdffe8 -3486f50,afbf0014 -3486f54,afb00010 -3486f58,c101bc8 -3486f5c,808025 -3486f60,96030008 -3486f64,620018 -3486f68,1012 -3486f6c,8fbf0014 -3486f70,8fb00010 -3486f74,3e00008 -3486f78,27bd0018 -3486f7c,27bdff98 -3486f80,afbf0064 -3486f84,afb60060 -3486f88,afb5005c -3486f8c,afb40058 -3486f90,afb30054 -3486f94,afb20050 -3486f98,afb1004c -3486f9c,afb00048 -3486fa0,808025 -3486fa4,a0a025 -3486fa8,c0a825 -3486fac,94b10004 -3486fb0,94a20006 -3486fb4,470018 -3486fb8,9012 -3486fbc,90b6000b -3486fc0,90b3000a -3486fc4,139d40 -3486fc8,3c0200e0 -3486fcc,2629824 -3486fd0,1614c0 -3486fd4,3c030018 -3486fd8,431024 -3486fdc,2629825 -3486fe0,2622ffff -3486fe4,30420fff -3486fe8,531025 -3486fec,3c03fd00 -3486ff0,431025 -3486ff4,afa20010 -3486ff8,c101bc8 -3486ffc,a02025 -3487000,550018 -3487004,8e820000 -3487008,1812 -348700c,431021 -3487010,afa20014 -3487014,2ec30002 -3487018,10600003 -348701c,24020010 -3487020,24020004 -3487024,2c21004 -3487028,510018 -348702c,1812 -3487030,2463003f -3487034,317c3 -3487038,3042003f -348703c,431021 -3487040,210c0 -3487044,3c030003 -3487048,3463fe00 -348704c,431024 -3487050,531025 -3487054,3c03f500 -3487058,431025 -348705c,afa20018 -3487060,3c040700 -3487064,afa4001c -3487068,3c03e600 -348706c,afa30020 -3487070,afa00024 -3487074,3c03f400 -3487078,afa30028 -348707c,2623ffff -3487080,31b80 -3487084,3c0500ff -3487088,34a5f000 -348708c,651824 -3487090,2652ffff -3487094,129080 -3487098,32520ffc -348709c,721825 -34870a0,642025 -34870a4,afa4002c -34870a8,3c04e700 -34870ac,afa40030 -34870b0,afa00034 -34870b4,afa20038 -34870b8,afa0003c -34870bc,3c02f200 -34870c0,afa20040 -34870c4,afa30044 -34870c8,27a20010 -34870cc,27a60048 -34870d0,8e030008 -34870d4,24640008 -34870d8,ae040008 -34870dc,8c450004 -34870e0,8c440000 -34870e4,ac650004 -34870e8,24420008 -34870ec,1446fff8 -34870f0,ac640000 -34870f4,8fbf0064 -34870f8,8fb60060 -34870fc,8fb5005c -3487100,8fb40058 -3487104,8fb30054 -3487108,8fb20050 -348710c,8fb1004c -3487110,8fb00048 -3487114,3e00008 -3487118,27bd0068 -348711c,27bdffe0 -3487120,8fa80030 -3487124,8fa20034 -3487128,8faa0038 -348712c,94a30004 -3487130,31a80 -3487134,14400002 -3487138,62001a -348713c,7000d -3487140,4812 -3487144,94a30006 -3487148,471021 -348714c,21380 -3487150,3c0b00ff -3487154,356bf000 -3487158,4b1024 -348715c,1482821 -3487160,52880 -3487164,30a50fff -3487168,451025 -348716c,3c05e400 -3487170,451025 -3487174,afa20000 -3487178,73b80 -348717c,eb3824 -3487180,84080 -3487184,31080fff -3487188,e83825 -348718c,afa70004 -3487190,3c02e100 -3487194,afa20008 -3487198,660018 -348719c,1012 -34871a0,21140 -34871a4,3042ffff -34871a8,afa2000c -34871ac,3c02f100 -34871b0,afa20010 -34871b4,31a80 -34871b8,15400002 -34871bc,6a001a -34871c0,7000d -34871c4,1012 -34871c8,3042ffff -34871cc,94c00 -34871d0,491025 -34871d4,afa20014 -34871d8,afbd0018 -34871dc,27a50018 -34871e0,8c820008 -34871e4,24430008 -34871e8,ac830008 -34871ec,8fa30018 -34871f0,8c670004 -34871f4,8c660000 -34871f8,ac470004 -34871fc,ac460000 -3487200,24620008 -3487204,1445fff6 -3487208,afa20018 -348720c,3e00008 -3487210,27bd0020 -3487214,27bdffa0 -3487218,afbf005c -348721c,afb10058 -3487220,afb00054 -3487224,afa00010 -3487228,3c0201a0 -348722c,24422000 -3487230,afa20014 -3487234,3c110003 -3487238,362295c0 -348723c,afa20018 -3487240,c102751 -3487244,27a40010 -3487248,afa0001c -348724c,3c020084 -3487250,24426000 -3487254,afa20020 -3487258,3402b400 -348725c,afa20024 -3487260,c102751 -3487264,27a4001c -3487268,afa00028 -348726c,3c02007b -3487270,3442d000 -3487274,afa2002c -3487278,3c100008 -348727c,361088a0 -3487280,afb00030 -3487284,c102751 -3487288,27a40028 -348728c,afa00034 -3487290,3c0201a3 -3487294,3442c000 -3487298,afa20038 -348729c,24023b00 -34872a0,afa2003c -34872a4,c102751 -34872a8,27a40034 -34872ac,afa00040 -34872b0,3c020085 -34872b4,3442e000 -34872b8,afa20044 -34872bc,24021d80 -34872c0,afa20048 -34872c4,c102751 -34872c8,27a40040 -34872cc,8fa20010 -34872d0,2631a300 -34872d4,518821 -34872d8,3c038041 -34872dc,ac71a478 -34872e0,24422980 -34872e4,3c038041 -34872e8,ac62a468 -34872ec,8fa20028 -34872f0,3c038041 -34872f4,ac62a458 -34872f8,3c038041 -34872fc,8fa4001c -3487300,ac64a448 -3487304,3c048041 -3487308,3c038041 -348730c,2463db28 -3487310,ac83a428 -3487314,3c048041 -3487318,3c038041 -348731c,2463e328 -3487320,ac83a418 -3487324,2610f7a0 -3487328,501021 -348732c,3c038041 -3487330,ac62a408 -3487334,8fa20034 -3487338,24441e00 -348733c,3c038041 -3487340,ac64a3f8 -3487344,244435c0 -3487348,3c038041 -348734c,ac64a3e8 -3487350,8fa30040 -3487354,24631980 -3487358,3c048041 -348735c,ac83a3d8 -3487360,3c038041 -3487364,ac62a3c8 -3487368,3c118041 -348736c,c101bd3 -3487370,2624a438 -3487374,408025 -3487378,c102742 -348737c,402025 -3487380,104fc2 -3487384,1304821 -3487388,2a100002 -348738c,16000018 -3487390,ae22a438 -3487394,94843 -3487398,3c038041 -348739c,2463c660 -34873a0,2025 -34873a4,3025 -34873a8,2204025 -34873ac,2407fff0 -34873b0,8d05a438 -34873b4,a42821 -34873b8,90620000 -34873bc,21102 -34873c0,471025 -34873c4,a0a20000 -34873c8,8d02a438 -34873cc,441021 -34873d0,90650000 -34873d4,a72825 -34873d8,a0450001 -34873dc,24c60001 -34873e0,24630001 -34873e4,c9102a -34873e8,1440fff1 -34873ec,24840002 -34873f0,8fbf005c -34873f4,8fb10058 -34873f8,8fb00054 -34873fc,3e00008 -3487400,27bd0060 -3487404,3c038040 -3487408,9462084e -348740c,2463084e -3487410,94640002 -3487414,94630004 -3487418,3c058041 -348741c,8ca5b540 -3487420,a4a20000 -3487424,a4a40002 -3487428,a4a30004 -348742c,3c058041 -3487430,8ca6b53c -3487434,a4c20000 -3487438,8ca5b53c -348743c,a4a40004 -3487440,a4a30008 -3487444,240500ff -3487448,1445000a -348744c,3c058041 -3487450,24050046 -3487454,14850007 -3487458,3c058041 -348745c,24050032 -3487460,14650004 -3487464,3c058041 -3487468,1825 -348746c,2025 -3487470,240200c8 -3487474,8ca5b538 -3487478,a4a20000 -348747c,a4a40002 -3487480,a4a30004 -3487484,3c058041 -3487488,8ca5b534 -348748c,a4a20000 -3487490,a4a40002 -3487494,a4a30004 -3487498,3c028041 -348749c,8c43b530 -34874a0,3c028040 -34874a4,94450854 -34874a8,24420854 -34874ac,94440002 -34874b0,94420004 -34874b4,a4650000 -34874b8,a4640002 -34874bc,a4620004 +3486b1c,94421f9c +3486b20,23840 +3486b24,e23821 +3486b28,73880 +3486b2c,24e70014 +3486b30,24050140 +3486b34,a72823 +3486b38,52843 +3486b3c,24b40001 +3486b40,2402009a +3486b44,afa20010 +3486b48,2406002b +3486b4c,c1016f6 +3486b50,2002025 +3486b54,8e020008 +3486b58,24430008 +3486b5c,ae030008 +3486b60,3c03fa00 +3486b64,ac430000 +3486b68,2403ffff +3486b6c,ac430004 +3486b70,3c128041 +3486b74,26521e07 +3486b78,2413002d +3486b7c,24110001 +3486b80,2622ffff +3486b84,28420006 +3486b88,144001f0 +3486b8c,2603025 +3486b90,2802825 +3486b94,c1043e6 +3486b98,2402025 +3486b9c,2a220009 +3486ba0,10400005 +3486ba4,3c028041 +3486ba8,26310001 +3486bac,2652000d +3486bb0,1000fff3 +3486bb4,26730011 +3486bb8,94551f9c +3486bbc,15a8c0 +3486bc0,26b50001 +3486bc4,2b4a821 +3486bc8,24070001 +3486bcc,24060011 +3486bd0,3c058041 +3486bd4,24a51fa8 +3486bd8,c10288c +3486bdc,2002025 +3486be0,8825 +3486be4,2412002d +3486be8,24020003 +3486bec,3c138041 +3486bf0,26731dd0 +3486bf4,3c148011 +3486bf8,3694a5d0 +3486bfc,3c164f28 +3486c00,10000004 +3486c04,26d64f29 +3486c08,2a220006 +3486c0c,2c420001 +3486c10,24420003 +3486c14,2221021 +3486c18,21840 +3486c1c,621821 +3486c20,31880 +3486c24,621821 +3486c28,2631821 +3486c2c,80630001 +3486c30,4610029 +3486c34,21840 +3486c38,621821 +3486c3c,31880 +3486c40,621021 +3486c44,531021 +3486c48,90440000 +3486c4c,2841021 +3486c50,804300bc +3486c54,410c0 +3486c58,441023 +3486c5c,21080 +3486c60,2821021 +3486c64,804200e5 +3486c68,afb60020 +3486c6c,1860000b +3486c70,a3a00024 +3486c74,602025 +3486c78,2863000a +3486c7c,50600001 +3486c80,24040009 +3486c84,41e00 +3486c88,31e03 +3486c8c,4620001 +3486c90,2025 +3486c94,24840030 +3486c98,a3a40020 +3486c9c,1840000a +3486ca0,401825 +3486ca4,2842000a +3486ca8,50400001 +3486cac,24030009 +3486cb0,31600 +3486cb4,21603 +3486cb8,4420001 +3486cbc,1825 +3486cc0,24630030 +3486cc4,a3a30022 +3486cc8,2403025 +3486ccc,2a02825 +3486cd0,c1043e6 +3486cd4,27a40020 +3486cd8,26310001 +3486cdc,24020009 +3486ce0,1622ffc9 +3486ce4,26520011 +3486ce8,3c028041 +3486cec,94541f9c +3486cf0,14a080 +3486cf4,26940001 +3486cf8,295a021 +3486cfc,24070001 +3486d00,2406000e +3486d04,3c058041 +3486d08,24a51fa8 +3486d0c,c10288c +3486d10,2002025 +3486d14,8825 +3486d18,2413002c +3486d1c,24020003 +3486d20,3c128041 +3486d24,26521dd0 +3486d28,3c158011 +3486d2c,36b5a5d0 +3486d30,3c168041 +3486d34,10000004 +3486d38,26d61fa8 +3486d3c,2a220006 +3486d40,2c420001 +3486d44,24420003 +3486d48,2221021 +3486d4c,21840 +3486d50,621821 +3486d54,31880 +3486d58,621821 +3486d5c,721821 +3486d60,90640000 +3486d64,2403000d +3486d68,50830001 +3486d6c,2404000a +3486d70,21840 +3486d74,621821 +3486d78,31880 +3486d7c,621021 +3486d80,2421021 +3486d84,90420001 +3486d88,30420040 +3486d8c,50400010 +3486d90,26310001 +3486d94,2a42021 +3486d98,908200a8 +3486d9c,30420001 +3486da0,5040000b +3486da4,26310001 +3486da8,24020010 +3486dac,afa20018 +3486db0,afa20014 +3486db4,afb30010 +3486db8,2803825 +3486dbc,3025 +3486dc0,2c02825 +3486dc4,c1028f4 +3486dc8,2002025 +3486dcc,26310001 +3486dd0,24020009 +3486dd4,1622ffd9 +3486dd8,26730011 +3486ddc,24070001 +3486de0,2406000a +3486de4,3c058041 +3486de8,24a51fa8 +3486dec,c10288c +3486df0,2002025 +3486df4,3c128041 +3486df8,26521dd0 +3486dfc,2413002c +3486e00,24110001 +3486e04,3c158011 +3486e08,36b5a5d0 +3486e0c,3c160040 +3486e10,3c178041 +3486e14,26f71fa8 +3486e18,2622ffff +3486e1c,28420006 +3486e20,54400145 +3486e24,92420028 +3486e28,92420035 +3486e2c,30420020 +3486e30,1040000f +3486e34,2a220009 +3486e38,8ea200a4 +3486e3c,561024 +3486e40,1040000b +3486e44,2a220009 +3486e48,24020010 +3486e4c,afa20018 +3486e50,afa20014 +3486e54,afb30010 +3486e58,2803825 +3486e5c,3025 +3486e60,2e02825 +3486e64,c1028f4 +3486e68,2002025 +3486e6c,2a220009 +3486e70,1040010f +3486e74,26310001 +3486e78,2652000d +3486e7c,1000ffe6 +3486e80,26730011 +3486e84,8c570d84 +3486e88,12e00007 +3486e8c,2e01025 +3486e90,3c028041 +3486e94,94431f9c +3486e98,31040 +3486e9c,431021 +3486ea0,21040 +3486ea4,24420001 +3486ea8,3c038041 +3486eac,94671f9c +3486eb0,738c0 +3486eb4,24e70038 +3486eb8,e23821 +3486ebc,24020140 +3486ec0,471023 +3486ec4,22fc2 +3486ec8,a22821 +3486ecc,52843 +3486ed0,24b50001 +3486ed4,240200cd +3486ed8,afa20010 +3486edc,24060011 +3486ee0,c1016f6 +3486ee4,2002025 +3486ee8,8e020008 +3486eec,24430008 +3486ef0,ae030008 +3486ef4,3c03fa00 +3486ef8,ac430000 +3486efc,2403ffff +3486f00,ac430004 +3486f04,24120013 +3486f08,8825 +3486f0c,3c138041 +3486f10,26731dd0 +3486f14,2414000c +3486f18,2a22000a +3486f1c,38420001 +3486f20,511021 +3486f24,22040 +3486f28,822021 +3486f2c,42080 +3486f30,822021 +3486f34,24840003 +3486f38,2403025 +3486f3c,2a02825 +3486f40,c1043e6 +3486f44,2642021 +3486f48,26310001 +3486f4c,1634fff2 +3486f50,26520011 +3486f54,3c028041 +3486f58,94541f9c +3486f5c,14a0c0 +3486f60,26940001 +3486f64,295a021 +3486f68,24070001 +3486f6c,24060010 +3486f70,3c058041 +3486f74,24a51fa8 +3486f78,c10288c +3486f7c,2002025 +3486f80,24120012 +3486f84,8825 +3486f88,3c138041 +3486f8c,26731dd0 +3486f90,3c158011 +3486f94,36b5a5d0 +3486f98,3c168041 +3486f9c,26d61fa8 +3486fa0,2a23000a +3486fa4,38630001 +3486fa8,711821 +3486fac,31040 +3486fb0,431021 +3486fb4,21080 +3486fb8,431021 +3486fbc,2621021 +3486fc0,90420001 +3486fc4,30420010 +3486fc8,50400017 +3486fcc,26310001 +3486fd0,31040 +3486fd4,431021 +3486fd8,21080 +3486fdc,431021 +3486fe0,531021 +3486fe4,90420000 +3486fe8,2a21021 +3486fec,904200a8 +3486ff0,21082 +3486ff4,30420001 +3486ff8,5040000b +3486ffc,26310001 +3487000,24020010 +3487004,afa20018 +3487008,afa20014 +348700c,afb20010 +3487010,2803825 +3487014,3025 +3487018,2c02825 +348701c,c1028f4 +3487020,2002025 +3487024,26310001 +3487028,2402000c +348702c,1622ffdc +3487030,26520011 +3487034,269e0011 +3487038,24070001 +348703c,2406000f +3487040,3c058041 +3487044,24a51fa8 +3487048,c10288c +348704c,2002025 +3487050,24120012 +3487054,8825 +3487058,3c138041 +348705c,26731dd0 +3487060,3c158011 +3487064,36b5a5d0 +3487068,3c168041 +348706c,26d61fa8 +3487070,2a23000a +3487074,38630001 +3487078,711821 +348707c,31040 +3487080,431021 +3487084,21080 +3487088,431021 +348708c,2621021 +3487090,90420001 +3487094,30420010 +3487098,50400017 +348709c,26310001 +34870a0,31040 +34870a4,431021 +34870a8,21080 +34870ac,431021 +34870b0,531021 +34870b4,90420000 +34870b8,2a21021 +34870bc,904200a8 +34870c0,21042 +34870c4,30420001 +34870c8,5040000b +34870cc,26310001 +34870d0,24020010 +34870d4,afa20018 +34870d8,afa20014 +34870dc,afb20010 +34870e0,3c03825 +34870e4,3025 +34870e8,2c02825 +34870ec,c1028f4 +34870f0,2002025 +34870f4,26310001 +34870f8,2402000c +34870fc,1622ffdc +3487100,26520011 +3487104,269e0022 +3487108,24070001 +348710c,2406000b +3487110,3c058041 +3487114,24a51fa8 +3487118,c10288c +348711c,2002025 +3487120,24120012 +3487124,8825 +3487128,3c138041 +348712c,26731dd0 +3487130,3c158011 +3487134,36b5a5d0 +3487138,3c168041 +348713c,26d61fa8 +3487140,2a23000a +3487144,38630001 +3487148,711821 +348714c,31040 +3487150,431021 +3487154,21080 +3487158,431021 +348715c,2621021 +3487160,90440002 +3487164,50800016 +3487168,26310001 +348716c,31040 +3487170,431021 +3487174,21080 +3487178,431021 +348717c,531021 +3487180,90420000 +3487184,38420003 +3487188,2a21021 +348718c,90420e9c +3487190,5444000b +3487194,26310001 +3487198,24020010 +348719c,afa20018 +34871a0,afa20014 +34871a4,afb20010 +34871a8,3c03825 +34871ac,3025 +34871b0,2c02825 +34871b4,c1028f4 +34871b8,2002025 +34871bc,26310001 +34871c0,2402000c +34871c4,1622ffde +34871c8,26520011 +34871cc,12e00038 +34871d0,26940033 +34871d4,24120013 +34871d8,8825 +34871dc,3c178040 +34871e0,3c138041 +34871e4,26731dd0 +34871e8,3c168040 +34871ec,26d60daa +34871f0,3c158041 +34871f4,26b51cb8 +34871f8,3c1e8041 +34871fc,2a22000a +3487200,38420001 +3487204,8ee30d88 +3487208,10600017 +348720c,511021 +3487210,21840 +3487214,621821 +3487218,31880 +348721c,621821 +3487220,2631821 +3487224,90630001 +3487228,30630010 +348722c,1060000f +3487230,21840 +3487234,621821 +3487238,31880 +348723c,621821 +3487240,731821 +3487244,90640000 +3487248,3c038011 +348724c,3463a5d0 +3487250,641821 +3487254,906300a8 +3487258,31882 +348725c,30630001 +3487260,50600010 +3487264,26310001 +3487268,21840 +348726c,621821 +3487270,31880 +3487274,621021 +3487278,531021 +348727c,90420000 +3487280,561021 +3487284,90420000 +3487288,14400002 +348728c,2a02025 +3487290,27c41cbc +3487294,2403025 +3487298,c1043e6 +348729c,2802825 +34872a0,26310001 +34872a4,2402000c +34872a8,1622ffd4 +34872ac,26520011 +34872b0,c10444a +34872b4,2002025 +34872b8,8e020008 +34872bc,24430008 +34872c0,ae030008 +34872c4,3c03e900 +34872c8,ac430000 +34872cc,ac400004 +34872d0,8e020008 +34872d4,24430008 +34872d8,ae030008 +34872dc,3c03df00 +34872e0,ac430000 +34872e4,10000044 +34872e8,ac400004 +34872ec,24430008 +34872f0,ae030008 +34872f4,3c03fa00 +34872f8,ac430000 +34872fc,2403ffff +3487300,ac430004 +3487304,3c058041 +3487308,24a51fd8 +348730c,94a70008 +3487310,3025 +3487314,c10288c +3487318,2002025 +348731c,2412002c +3487320,8825 +3487324,24130010 +3487328,3c168041 +348732c,26d61fd8 +3487330,1000fd9b +3487334,24170003 +3487338,30420020 +348733c,5440febf +3487340,8ea200a4 +3487344,1000fecc +3487348,26310001 +348734c,2802825 +3487350,c1043e6 +3487354,2644fff3 +3487358,1000fe14 +348735c,26310001 +3487360,8c630d94 +3487364,1460faba +3487368,24070001 +348736c,1000fac6 +3487370,24020001 +3487374,1440fdaa +3487378,2d11021 +348737c,1000fdde +3487380,26310001 +3487384,24640008 +3487388,ae040008 +348738c,3c04de00 +3487390,ac640000 +3487394,3c048041 +3487398,24841fe8 +348739c,1000fa94 +34873a0,ac640004 +34873a4,24430008 +34873a8,ae030008 +34873ac,3c03de00 +34873b0,ac430000 +34873b4,3c038041 +34873b8,24631fe8 +34873bc,1000fa90 +34873c0,ac430004 +34873c4,24640008 +34873c8,ae040008 +34873cc,3c04de00 +34873d0,ac640000 +34873d4,3c048041 +34873d8,24841fe8 +34873dc,ac640004 +34873e0,21c00 +34873e4,31c03 +34873e8,463fd0c +34873ec,30430400 +34873f0,1000fa80 +34873f4,3c038040 +34873f8,8fbf006c +34873fc,8fbe0068 +3487400,8fb70064 +3487404,8fb60060 +3487408,8fb5005c +348740c,8fb40058 +3487410,8fb30054 +3487414,8fb20050 +3487418,8fb1004c +348741c,8fb00048 +3487420,3e00008 +3487424,27bd0070 +3487428,3e00008 +3487430,44860000 +3487434,44801000 +348743c,46020032 +3487444,45030011 +3487448,46007006 +348744c,460e603c +3487454,45000007 +3487458,460c0000 +348745c,4600703c +3487464,45000009 +348746c,3e00008 +3487470,46007006 +3487474,460e003c +348747c,45000003 +3487484,3e00008 +3487488,46007006 +348748c,3e00008 +3487494,3c02801c +3487498,344284a0 +348749c,c44000d4 +34874a0,3c028041 +34874a4,3e00008 +34874a8,e4404838 +34874ac,27bdffe8 +34874b0,afbf0014 +34874b4,3c028041 +34874b8,90421e88 +34874bc,5040001b 34874c0,3c028041 -34874c4,8c43b52c -34874c8,3c028040 -34874cc,9445085a -34874d0,2442085a -34874d4,94440002 -34874d8,94420004 -34874dc,a4650000 -34874e0,a4640002 -34874e4,a4620004 -34874e8,3c028041 -34874ec,8c43b528 -34874f0,3c028040 -34874f4,94450860 -34874f8,24420860 -34874fc,94440002 -3487500,94420004 -3487504,a4650000 -3487508,a4640002 -348750c,a4620004 -3487510,3c028041 -3487514,8c42b524 -3487518,3c068040 -348751c,94c30872 -3487520,a4430000 -3487524,3c028041 -3487528,8c43b520 -348752c,24c20872 -3487530,94440002 -3487534,a4640000 -3487538,3c038041 -348753c,8c63b51c -3487540,94440004 -3487544,a4640000 -3487548,3c038041 -348754c,8c63b518 -3487550,3c058040 -3487554,94a40878 -3487558,a4640000 -348755c,3c038041 -3487560,8c64b514 -3487564,24a30878 -3487568,94670002 -348756c,a4870000 -3487570,3c048041 -3487574,8c84b510 -3487578,94670004 -348757c,a4870000 -3487580,3c048041 -3487584,8c84b50c -3487588,94c80872 -348758c,94470002 -3487590,94460004 -3487594,a4880000 -3487598,a4870002 -348759c,a4860004 -34875a0,3c048041 -34875a4,8c84b4fc -34875a8,94a60878 -34875ac,94650002 -34875b0,94630004 -34875b4,a4860000 -34875b8,a4850002 -34875bc,a4830004 -34875c0,94420002 -34875c4,3043ffff -34875c8,2c6300ce -34875cc,50600001 -34875d0,240200cd -34875d4,24420032 -34875d8,3047ffff -34875dc,3c028040 -34875e0,94420876 -34875e4,3043ffff -34875e8,2c6300ce -34875ec,50600001 -34875f0,240200cd -34875f4,24420032 -34875f8,3046ffff -34875fc,3c028040 -3487600,94420878 -3487604,3043ffff -3487608,2c6300ce -348760c,50600001 -3487610,240200cd -3487614,24420032 -3487618,3044ffff -348761c,3c028040 -3487620,9442087a -3487624,3043ffff -3487628,2c6300ce -348762c,50600001 -3487630,240200cd -3487634,24420032 -3487638,3043ffff -348763c,3c028040 -3487640,9442087c -3487644,3045ffff -3487648,2ca500ce -348764c,50a00001 -3487650,240200cd -3487654,24420032 -3487658,3c058041 -348765c,8ca8b508 -3487660,3c058040 -3487664,94a50872 -3487668,30a9ffff -348766c,2d2900ce -3487670,15200002 -3487674,3042ffff -3487678,240500cd -348767c,24a50032 -3487680,a5050000 -3487684,a5070002 -3487688,a5060004 -348768c,3c058041 -3487690,8ca5b4f8 -3487694,a4a40000 -3487698,a4a30002 -348769c,a4a20004 -34876a0,3c028041 -34876a4,8c43b500 -34876a8,3c028040 -34876ac,94450872 -34876b0,24420872 -34876b4,94440002 -34876b8,94420004 -34876bc,a4650000 -34876c0,a4640002 -34876c4,a4620004 -34876c8,3c028041 -34876cc,8c43b4f0 -34876d0,3c028040 -34876d4,94450878 -34876d8,24420878 -34876dc,94440002 -34876e0,94420004 -34876e4,a4650000 -34876e8,a4640002 -34876ec,a4620004 -34876f0,3c028041 -34876f4,8c43b4ec -34876f8,3c028040 -34876fc,94460866 -3487700,24440866 -3487704,94850002 -3487708,94840004 -348770c,a4660000 -3487710,a4650002 -3487714,a4640004 -3487718,94420866 -348771c,3043ffff -3487720,2c6300ce -3487724,50600001 -3487728,240200cd -348772c,24420032 -3487730,3044ffff -3487734,3c028040 -3487738,94420868 -348773c,3043ffff -3487740,2c6300ce -3487744,50600001 -3487748,240200cd -348774c,24420032 -3487750,3043ffff -3487754,3c028040 -3487758,9442086a -348775c,3045ffff -3487760,2ca500ce -3487764,50a00001 -3487768,240200cd -348776c,24420032 -3487770,3042ffff -3487774,3c058041 -3487778,8ca5b4e8 -348777c,a4a40000 -3487780,a4a30002 -3487784,a4a20004 -3487788,3c058041 -348778c,8ca5b4e0 -3487790,a4a40000 -3487794,a4a30002 -3487798,3e00008 -348779c,a4a20004 -34877a0,3c028011 -34877a4,3442a5d0 -34877a8,8c4200a0 -34877ac,21302 -34877b0,30420003 -34877b4,21840 -34877b8,621821 -34877bc,3c028041 -34877c0,2442a1c0 -34877c4,621821 -34877c8,90640000 -34877cc,42600 -34877d0,90620001 -34877d4,21400 -34877d8,822021 -34877dc,90620002 -34877e0,21200 -34877e4,3e00008 -34877e8,821021 -34877ec,3c028041 -34877f0,9042b5a4 -34877f4,3e00008 -34877f8,2102b -34877fc,3c038041 -3487800,9062b5a4 -3487804,24420001 -3487808,3e00008 -348780c,a062b5a4 -3487810,3c028041 -3487814,9042b5a4 -3487818,1040001b -348781c,2442ffff -3487820,27bdffd8 -3487824,afbf0024 -3487828,afb10020 -348782c,afb0001c -3487830,3c038041 -3487834,a062b5a4 -3487838,3c108038 -348783c,3610e578 -3487840,24050014 -3487844,3c11801d -3487848,200f809 -348784c,3624aa30 -3487850,24020014 -3487854,afa20014 -3487858,afa00010 -348785c,26100130 -3487860,3825 -3487864,24060003 -3487868,3625aa30 -348786c,200f809 -3487870,262484a0 -3487874,8fbf0024 -3487878,8fb10020 -348787c,8fb0001c -3487880,3e00008 -3487884,27bd0028 -3487888,3e00008 -3487890,3e00008 -3487898,24020140 -348789c,3e00008 -34878a0,a4821424 -34878a4,27bdffe0 -34878a8,afbf001c -34878ac,afb10018 -34878b0,afb00014 -34878b4,808025 -34878b8,8c8208c4 -34878bc,24420001 -34878c0,c1025e0 -34878c4,ac8208c4 -34878c8,3c028041 -34878cc,9442b552 -34878d0,8e0308c4 -34878d4,1462001e -34878d8,8fbf001c -34878dc,920200b2 -34878e0,34420001 -34878e4,a20200b2 -34878e8,3c04801c -34878ec,348484a0 -34878f0,3c110001 -34878f4,918821 -34878f8,86221e1a -34878fc,ae020000 -3487900,948200a4 -3487904,a6020066 -3487908,3c108009 -348790c,3602d894 -3487910,40f809 -3487914,261005d4 -3487918,3c04a34b -348791c,200f809 -3487920,3484e820 -3487924,3c028011 -3487928,3442a5d0 -348792c,2403fff8 -3487930,a4431412 -3487934,240200a0 -3487938,a6221e1a -348793c,24020014 -3487940,a2221e15 -3487944,24020001 -3487948,a2221e5e -348794c,8fbf001c -3487950,8fb10018 -3487954,8fb00014 -3487958,3e00008 -348795c,27bd0020 -3487960,8c8200a0 -3487964,34423000 -3487968,ac8200a0 -348796c,3c028041 -3487970,9042b5a7 -3487974,304200ff -3487978,10400005 -348797c,52840 -3487980,3c028010 -3487984,451021 -3487988,94428cec -348798c,a4820034 -3487990,3e00008 -3487998,24020001 -348799c,3e00008 -34879a0,a082003e -34879a4,24020012 -34879a8,2406ffff -34879ac,24070016 -34879b0,821821 -34879b4,80630074 -34879b8,54660004 -34879bc,24420001 -34879c0,822021 -34879c4,3e00008 -34879c8,a0850074 -34879cc,1447fff9 -34879d0,821821 -34879d4,3e00008 -34879dc,862021 -34879e0,908200a8 -34879e4,a22825 -34879e8,3e00008 -34879ec,a08500a8 -34879f0,852021 -34879f4,908200bc -34879f8,21e00 -34879fc,31e03 -3487a00,4620001 -3487a04,1025 -3487a08,24420001 -3487a0c,3e00008 -3487a10,a08200bc -3487a14,24020001 -3487a18,a082003d -3487a1c,24020014 -3487a20,a08200cf -3487a24,24020140 -3487a28,3e00008 -3487a2c,a4821424 -3487a30,24020001 -3487a34,a0820032 -3487a38,a082003a -3487a3c,24020030 -3487a40,a48213f4 -3487a44,3e00008 -3487a48,a0820033 -3487a4c,24020002 -3487a50,a0820032 -3487a54,24020001 -3487a58,a082003a -3487a5c,a082003c -3487a60,24020060 -3487a64,a48213f4 -3487a68,3e00008 -3487a6c,a0820033 -3487a70,24020007 -3487a74,3e00008 -3487a78,a082007b -3487a7c,24020001 -3487a80,a21004 -3487a84,8c8500a4 -3487a88,a22825 -3487a8c,3e00008 -3487a90,ac8500a4 -3487a94,27bdffe8 -3487a98,afbf0014 -3487a9c,c101dff -3487aa4,8fbf0014 -3487aa8,3e00008 -3487aac,27bd0018 -3487ab0,24020010 -3487ab4,a0820082 -3487ab8,9082009a -3487abc,2442000a -3487ac0,3e00008 -3487ac4,a082009a -3487ac8,3c028041 -3487acc,9042b5a7 -3487ad0,304200ff -3487ad4,10400005 -3487ad8,52840 -3487adc,3c028010 -3487ae0,451021 -3487ae4,94428cec -3487ae8,a4820034 -3487aec,3e00008 -3487af4,3c028041 -3487af8,9042b5a6 -3487afc,1040000c +34874c4,3c038011 +34874c8,3463a5d0 +34874cc,8c630070 +34874d0,31f02 +34874d4,1062000d +34874d8,21300 +34874dc,3c048011 +34874e0,3484a5d0 +34874e4,94830070 +34874e8,30630fff +34874ec,621025 +34874f0,a4820070 +34874f4,3c04801d +34874f8,3485aa30 +34874fc,3c028007 +3487500,34429764 +3487504,40f809 +3487508,248484a0 +348750c,3c028041 +3487510,90431e88 +3487514,24020001 +3487518,14620004 +348751c,3c028041 +3487520,3c028041 +3487524,a0401e88 +3487528,3c028041 +348752c,c44e1e80 +3487530,44800000 +3487538,46007032 +3487540,45010010 +3487544,3c02801c +3487548,344284a0 +348754c,c44000d4 +3487550,46007032 +3487558,45010019 +348755c,3c02801c +3487560,3c028041 +3487564,8c461d18 +3487568,3c028041 +348756c,c101d0c +3487570,c44c4834 +3487574,3c02801c +3487578,344284a0 +348757c,1000000f +3487580,e44000d4 +3487584,344284a0 +3487588,c44c00d4 +348758c,3c028041 +3487590,c44e4838 +3487594,460e6032 +348759c,45010008 +34875a0,3c02801c +34875a4,3c028041 +34875a8,c101d0c +34875ac,8c461d1c +34875b0,3c02801c +34875b4,344284a0 +34875b8,e44000d4 +34875bc,3c02801c +34875c0,344284a0 +34875c4,c44000d4 +34875c8,3c028041 +34875cc,e4404834 +34875d0,3c028041 +34875d4,90421e89 +34875d8,24030001 +34875dc,1443000f +34875e0,24030002 +34875e4,3c02801c +34875e8,344284a0 +34875ec,94420322 +34875f0,3c038041 +34875f4,24631a40 +34875f8,431021 +34875fc,90420000 +3487600,10400018 +3487604,3c028041 +3487608,3c02801c +348760c,344284a0 +3487610,24030035 +3487614,10000012 +3487618,a4430322 +348761c,14430011 +3487620,3c028041 +3487624,3c02801c +3487628,344284a0 +348762c,94420322 +3487630,3c038041 +3487634,24631a40 +3487638,431021 +348763c,90420000 +3487640,10400006 +3487644,3c028041 +3487648,3c02801c +348764c,344284a0 +3487650,2403001f +3487654,a4430322 +3487658,3c028041 +348765c,a0401e89 +3487660,3c028041 +3487664,24421e7c +3487668,c4400008 +348766c,3c038040 +3487670,e4602cd0 +3487674,9044000e +3487678,3c038040 +348767c,a0643221 +3487680,9042000f +3487684,50400006 +3487688,3c028041 +348768c,2442ffff +3487690,3c038041 +3487694,c102aad +3487698,a0621e8b +348769c,3c028041 +34876a0,90421e8c +34876a4,1040000b +34876a8,3c028041 +34876ac,3c02801c +34876b0,344284a0 +34876b4,94430014 +34876b8,2404dfff +34876bc,641824 +34876c0,a4430014 +34876c4,94430020 +34876c8,641824 +34876cc,a4430020 +34876d0,3c028041 +34876d4,90421e8d +34876d8,10400016 +34876dc,8fbf0014 +34876e0,3c02801c +34876e4,344284a0 +34876e8,90430016 +34876ec,31823 +34876f0,a0430016 +34876f4,90430017 +34876f8,31823 +34876fc,a0430017 +3487700,90430022 +3487704,31823 +3487708,a0430022 +348770c,90430023 +3487710,31823 +3487714,a0430023 +3487718,90430028 +348771c,31823 +3487720,a0430028 +3487724,90430029 +3487728,31823 +348772c,a0430029 +3487730,8fbf0014 +3487734,3e00008 +3487738,27bd0018 +348773c,850018 +3487740,1812 +3487744,24620001 +3487748,3042ffff +348774c,31a02 +3487750,431021 +3487754,21203 +3487758,3e00008 +348775c,304200ff +3487760,2402ffff +3487764,a0820002 +3487768,a0820001 +348776c,4a00031 +3487770,a0820000 +3487774,a01825 +3487778,28a503e8 +348777c,50a00001 +3487780,240303e7 +3487784,31c00 +3487788,31c03 +348778c,3c026666 +3487790,24426667 +3487794,620018 +3487798,1010 +348779c,21083 +34877a0,32fc3 +34877a4,451023 +34877a8,22880 +34877ac,a22821 +34877b0,52840 +34877b4,651823 +34877b8,21400 +34877bc,21403 +34877c0,1040001c +34877c4,a0830002 +34877c8,3c036666 +34877cc,24636667 +34877d0,430018 +34877d4,1810 +34877d8,31883 +34877dc,22fc3 +34877e0,651823 +34877e4,32880 +34877e8,a32821 +34877ec,52840 +34877f0,451023 +34877f4,a0820001 +34877f8,31400 +34877fc,21403 +3487800,1040000c +3487804,3c036666 +3487808,24636667 +348780c,430018 +3487810,1810 +3487814,31883 +3487818,22fc3 +348781c,651823 +3487820,32880 +3487824,a31821 +3487828,31840 +348782c,431023 +3487830,a0820000 +3487834,3e00008 +348783c,27bdffd0 +3487840,afbf002c +3487844,afb20028 +3487848,afb10024 +348784c,afb00020 +3487850,808025 +3487854,a08825 +3487858,afa7003c +348785c,8fb20040 +3487860,c10288c +3487864,24070001 +3487868,93a7003c +348786c,afb20018 +3487870,afb20014 +3487874,83a2003d +3487878,2442005c +348787c,afa20010 +3487880,24e70037 +3487884,3025 +3487888,2202825 +348788c,c1028f4 +3487890,2002025 +3487894,8fbf002c +3487898,8fb20028 +348789c,8fb10024 +34878a0,8fb00020 +34878a4,3e00008 +34878a8,27bd0030 +34878ac,27bdffe0 +34878b0,afbf001c +34878b4,afb20018 +34878b8,afb10014 +34878bc,afb00010 +34878c0,808025 +34878c4,24850074 +34878c8,24070001 +34878cc,4825 +34878d0,3c028041 +34878d4,24421b04 +34878d8,2408ffe0 +34878dc,3c048041 +34878e0,24841b4c +34878e4,90430000 +34878e8,1031824 +34878ec,14600005 +34878f0,80a60000 +34878f4,90430001 +34878f8,30c600ff +34878fc,50660001 +3487900,1274825 +3487904,24420004 +3487908,73840 +348790c,1444fff5 +3487910,24a50001 +3487914,3c028041 +3487918,ac49495c +348791c,8e1100a4 +3487920,2442495c +3487924,3223003f +3487928,a0430004 +348792c,9602009c +3487930,8203003e +3487934,10600002 +3487938,3042fffb +348793c,34420004 +3487940,3c038041 +3487944,a4624962 +3487948,112c02 +348794c,30a5007c +3487950,26030086 +3487954,2606008a +3487958,2407001b +348795c,90640000 +3487960,2482ffec +3487964,304200ff +3487968,2c42000d +348796c,50400004 +3487970,24630001 +3487974,54870001 +3487978,34a50001 +348797c,24630001 +3487980,5466fff7 +3487984,90640000 +3487988,3c028041 +348798c,a0454961 +3487990,9203007b +3487994,2462fff9 +3487998,304200ff +348799c,2c420002 +34879a0,14400003 +34879a4,2025 +34879a8,10000002 +34879ac,24030007 +34879b0,24040001 +34879b4,3c028041 +34879b8,2442495c +34879bc,a0440008 +34879c0,a0430009 +34879c4,9203007d +34879c8,2462fff6 +34879cc,304200ff +34879d0,2c420002 +34879d4,14400003 +34879d8,2025 +34879dc,10000002 +34879e0,2403000a +34879e4,24040001 +34879e8,3c028041 +34879ec,2442495c +34879f0,a044000a +34879f4,a043000b +34879f8,86020ef6 +34879fc,440001d +3487a00,2403002b +3487a04,96020ef4 +3487a08,210c2 +3487a0c,3042008f +3487a10,2c430010 +3487a14,10600019 +3487a18,2403002b +3487a1c,50400007 +3487a20,9203008b +3487a24,3c038041 +3487a28,24631a84 +3487a2c,431021 +3487a30,90430000 +3487a34,10000014 +3487a38,24040001 +3487a3c,2462ffdf +3487a40,304200ff +3487a44,2c420003 +3487a48,5040000e +3487a4c,2403002b +3487a50,24020023 +3487a54,1462000c +3487a58,24040001 +3487a5c,96020ede +3487a60,30420200 +3487a64,50400001 +3487a68,24030022 +3487a6c,10000006 +3487a70,24040001 +3487a74,10000004 +3487a78,24040001 +3487a7c,10000002 +3487a80,24040001 +3487a84,2025 +3487a88,3c028041 +3487a8c,2442495c +3487a90,a043000d +3487a94,a044000c +3487a98,3c028040 +3487a9c,90420d71 +3487aa0,14400008 +3487aa4,8204008a +3487aa8,24020030 +3487aac,10820071 +3487ab0,2482ffcb +3487ab4,304200ff +3487ab8,2c420002 +3487abc,14400007 +3487ac0,24030034 +3487ac4,308300ff +3487ac8,2462ffd3 +3487acc,304200ff +3487ad0,2c42000b +3487ad4,50400003 +3487ad8,24030037 +3487adc,10000002 +3487ae0,24040001 +3487ae4,2025 +3487ae8,3c028041 +3487aec,2442495c +3487af0,a043000f +3487af4,a044000e +3487af8,9202003c +3487afc,10400005 3487b00,3c028041 -3487b04,94820f06 -3487b08,34420040 -3487b0c,a4820f06 -3487b10,3c028041 -3487b14,9042b5a5 -3487b18,54400009 -3487b1c,94820f06 -3487b20,94820ef4 -3487b24,3042fb87 -3487b28,3e00008 -3487b2c,a4820ef4 -3487b30,9042b5a5 -3487b34,1040000c -3487b3c,94820f06 -3487b40,34420080 -3487b44,a4820f06 -3487b48,94820ef6 -3487b4c,24038f00 -3487b50,431025 -3487b54,a4820ef6 -3487b58,94820ee4 -3487b5c,2403f000 -3487b60,431025 -3487b64,a4820ee4 -3487b68,3e00008 -3487b70,2c8200cd -3487b74,1040000b -3487b78,41880 -3487b7c,641021 -3487b80,21080 -3487b84,3c058041 -3487b88,24a5a4b0 -3487b8c,a21021 -3487b90,80430000 -3487b94,3182b -3487b98,31823 -3487b9c,3e00008 -3487ba0,431024 -3487ba4,3e00008 -3487ba8,1025 -3487bac,27bdffe0 -3487bb0,afbf001c -3487bb4,afb20018 -3487bb8,afb10014 -3487bbc,afb00010 -3487bc0,808025 -3487bc4,3c128011 -3487bc8,3652a5d0 -3487bcc,c101edc -3487bd0,2002025 -3487bd4,2008825 -3487bd8,8c420008 -3487bdc,2002825 -3487be0,40f809 -3487be4,2402025 -3487be8,1622fff8 -3487bec,408025 -3487bf0,2201025 -3487bf4,8fbf001c -3487bf8,8fb20018 -3487bfc,8fb10014 -3487c00,8fb00010 -3487c04,3e00008 -3487c08,27bd0020 -3487c0c,27bdffe8 -3487c10,afbf0014 -3487c14,8c82000c -3487c18,84860012 -3487c1c,84850010 -3487c20,3c048011 -3487c24,40f809 -3487c28,3484a5d0 -3487c2c,8fbf0014 -3487c30,3e00008 -3487c34,27bd0018 -3487c38,3e00008 -3487c3c,a01025 -3487c40,8082007d -3487c44,21027 -3487c48,2102b -3487c4c,3e00008 -3487c50,24420008 -3487c54,8c8200a0 -3487c58,21182 -3487c5c,30420007 -3487c60,10400005 -3487c68,38420001 -3487c6c,2102b -3487c70,3e00008 -3487c74,24420035 -3487c78,3e00008 -3487c7c,24020054 -3487c80,8c8200a0 -3487c84,210c2 -3487c88,30420007 -3487c8c,10400005 -3487c94,38420001 -3487c98,2102b -3487c9c,3e00008 -3487ca0,24420033 -3487ca4,3e00008 -3487ca8,24020032 -3487cac,8c8200a0 -3487cb0,30420007 -3487cb4,10400005 -3487cbc,38420001 -3487cc0,2102b -3487cc4,3e00008 -3487cc8,24420030 -3487ccc,3e00008 -3487cd0,24020004 -3487cd4,8c8300a0 -3487cd8,31b82 -3487cdc,30630007 -3487ce0,10600005 -3487ce4,24040001 -3487ce8,14640004 -3487cec,2402007b -3487cf0,3e00008 -3487cf4,24020060 -3487cf8,24020005 -3487cfc,3e00008 -3487d04,8c8300a0 -3487d08,31b02 -3487d0c,30630003 -3487d10,10600005 -3487d14,24040001 -3487d18,14640004 -3487d1c,240200c7 -3487d20,3e00008 -3487d24,24020046 -3487d28,24020045 -3487d2c,3e00008 -3487d34,8c8200a0 -3487d38,21242 -3487d3c,30420007 -3487d40,2102b -3487d44,3e00008 -3487d48,24420037 -3487d4c,8c8200a0 -3487d50,21502 -3487d54,30420007 -3487d58,2c420002 -3487d5c,2c420001 -3487d60,3e00008 -3487d64,24420079 -3487d68,8c8200a0 -3487d6c,21442 -3487d70,30420007 -3487d74,2c420002 -3487d78,2c420001 -3487d7c,3e00008 -3487d80,24420077 -3487d84,9082003a -3487d88,2102b -3487d8c,3e00008 -3487d90,244200b9 -3487d94,8083007c -3487d98,2402ffff -3487d9c,50620007 -3487da0,2402006b -3487da4,80830094 -3487da8,28630006 -3487dac,10600003 -3487db0,2402006a -3487db4,3e00008 -3487db8,24020003 -3487dbc,3e00008 -3487dc4,8083007b -3487dc8,2402ffff -3487dcc,10620003 -3487dd4,3e00008 -3487dd8,2402000c -3487ddc,3e00008 -3487de0,2402003b -3487de4,8c8300a0 -3487de8,30630007 -3487dec,14600002 -3487df0,a01025 -3487df4,2402004d -3487df8,3e00008 -3487e00,8c8300a0 -3487e04,30630038 -3487e08,14600002 -3487e0c,a01025 -3487e10,2402004d -3487e14,3e00008 -3487e1c,8c8300a0 -3487e20,3c040001 -3487e24,3484c000 -3487e28,641824 -3487e2c,14600002 -3487e30,a01025 -3487e34,2402004d -3487e38,3e00008 -3487e40,94820eda -3487e44,30420008 -3487e48,14400010 -3487e50,80830086 -3487e54,2402001b -3487e58,1062000e -3487e60,80830087 -3487e64,1062000d -3487e6c,80830088 -3487e70,1062000c -3487e74,2403001b -3487e78,80840089 -3487e7c,1483000a -3487e80,a01025 -3487e84,3e00008 -3487e88,240200c8 -3487e8c,3e00008 -3487e90,240200c8 -3487e94,3e00008 -3487e98,240200c8 -3487e9c,3e00008 -3487ea0,240200c8 -3487ea4,240200c8 -3487ea8,3e00008 -3487eb0,27bdffe8 -3487eb4,afbf0014 -3487eb8,c10273d -3487ec0,c101c85 -3487ec8,c102556 -3487ed0,c101956 -3487ed8,c102369 -3487ee0,8fbf0014 -3487ee4,3e00008 -3487ee8,27bd0018 -3487eec,27bdffe8 -3487ef0,afbf0014 -3487ef4,c101aec -3487efc,c100f8a -3487f04,c10228c -3487f0c,c101d01 -3487f14,c101416 -3487f1c,8fbf0014 -3487f20,3e00008 -3487f24,27bd0018 -3487f28,27bdffe8 -3487f2c,afbf0014 -3487f30,afb00010 -3487f34,3c10801c -3487f38,361084a0 -3487f3c,8e040000 -3487f40,c10117e -3487f44,248402a8 -3487f48,8e040000 -3487f4c,c1025ea -3487f50,248402a8 -3487f54,c101904 -3487f5c,8fbf0014 -3487f60,8fb00010 -3487f64,3e00008 -3487f68,27bd0018 -3487f6c,27bdffe0 -3487f70,afbf001c -3487f74,afb10018 -3487f78,afb00014 -3487f7c,808025 -3487f80,c102762 -3487f84,a08825 -3487f88,2202825 -3487f8c,c027368 -3487f90,2002025 -3487f94,8fbf001c -3487f98,8fb10018 -3487f9c,8fb00014 -3487fa0,3e00008 -3487fa4,27bd0020 -3487fa8,27bdffe8 -3487fac,afbf0014 -3487fb0,c1018dd -3487fb8,c102738 -3487fc0,c10237c -3487fc8,c101410 -3487fd0,8fbf0014 -3487fd4,3e00008 -3487fd8,27bd0018 -3487fdc,3c02801c -3487fe0,344284a0 -3487fe4,3c030001 -3487fe8,431021 -3487fec,84430988 -3487ff0,14600022 -3487ff4,3c02801c -3487ff8,344284a0 -3487ffc,3c030001 -3488000,431021 -3488004,84420992 -3488008,14400014 -348800c,21840 -3488010,3c028011 -3488014,3442a5d0 -3488018,8c420004 -348801c,14400009 -3488020,3c028011 -3488024,3442a5d0 -3488028,8c4300a0 -348802c,3c020001 -3488030,3442c007 -3488034,621824 -3488038,14600026 -348803c,24020001 -3488040,3c028011 -3488044,3442a5d0 -3488048,8c4200a0 -348804c,21382 -3488050,30420007 -3488054,3e00008 -3488058,2102b -348805c,621821 -3488060,3c028011 -3488064,3442a5d0 -3488068,8c4200a0 -348806c,621006 -3488070,30420007 -3488074,3e00008 -3488078,2102b -348807c,344284a0 -3488080,3c040001 -3488084,441021 -3488088,84440992 -348808c,1480000a -3488090,3c028011 -3488094,24020003 -3488098,14620007 -348809c,3c028011 -34880a0,3442a5d0 -34880a4,8c42009c -34880a8,3c03000c -34880ac,431024 -34880b0,3e00008 -34880b4,2102b -34880b8,3442a5d0 -34880bc,9442009c -34880c0,42080 -34880c4,2463ffff -34880c8,832021 -34880cc,821007 -34880d0,30420001 -34880d4,3e00008 -34880dc,27bdffe0 -34880e0,afbf001c -34880e4,3c028040 -34880e8,9042088b -34880ec,10400010 -34880f0,3c028040 -34880f4,2406000c -34880f8,3c028041 -34880fc,8c45b5a8 -3488100,c1024af -3488104,27a40010 -3488108,3c028011 -348810c,97a30010 -3488110,a4435dd2 -3488114,93a30012 -3488118,a0435dd4 -348811c,97a30010 -3488120,a4435dda -3488124,93a30012 -3488128,a0435ddc -348812c,3c028040 -3488130,9042088c -3488134,10400010 -3488138,8fbf001c -348813c,2406000a -3488140,3c028041 -3488144,8c45b5a8 -3488148,c1024af -348814c,27a40010 -3488150,3c028011 -3488154,97a30010 -3488158,a4435dce -348815c,93a30012 -3488160,a0435dd0 -3488164,97a30010 -3488168,a4435dd6 -348816c,93a30012 -3488170,a0435dd8 -3488174,8fbf001c -3488178,3e00008 -348817c,27bd0020 -3488180,3c02801d -3488184,3442aa30 -3488188,8c420678 -348818c,10400063 -3488194,8c430130 -3488198,10600060 -34881a0,8c4201c8 -34881a4,2c43001f -34881a8,1060005c -34881b0,27bdffd8 -34881b4,afbf0024 -34881b8,afb10020 -34881bc,afb0001c -34881c0,280c0 -34881c4,2028023 -34881c8,108080 -34881cc,2028023 -34881d0,108100 -34881d4,3c028011 -34881d8,2028021 -34881dc,3c028040 -34881e0,9042088d -34881e4,10400018 -34881e8,2610572c -34881ec,3c118041 -34881f0,24060006 -34881f4,8e25b5a8 -34881f8,c1024af -34881fc,27a40010 -3488200,93a20010 -3488204,a2020192 -3488208,93a20011 -348820c,a2020193 -3488210,93a20012 -3488214,a2020194 -3488218,8e25b5a8 -348821c,24060006 -3488220,24a5000c -3488224,c1024af -3488228,27a40010 -348822c,93a20010 -3488230,a202019a -3488234,93a20011 -3488238,a202019b -348823c,93a20012 -3488240,1000000c -3488244,a202019c -3488248,3c028040 -348824c,9044087e -3488250,a2040192 -3488254,2442087e -3488258,90430001 -348825c,a2030193 -3488260,90420002 -3488264,a2020194 -3488268,a204019a -348826c,a203019b -3488270,a202019c -3488274,3c028040 -3488278,9042088e -348827c,10400018 -3488280,3c028040 -3488284,3c118041 -3488288,24060005 -348828c,8e25b5a8 -3488290,c1024af -3488294,27a40010 -3488298,93a20010 -348829c,a2020196 -34882a0,93a20011 -34882a4,a2020197 -34882a8,93a20012 -34882ac,a2020198 -34882b0,8e25b5a8 -34882b4,24060005 -34882b8,24a5000a -34882bc,c1024af -34882c0,27a40010 -34882c4,93a20010 -34882c8,a202019e -34882cc,93a20011 -34882d0,a202019f -34882d4,93a20012 -34882d8,1000000b -34882dc,a20201a0 -34882e0,90440881 -34882e4,a2040196 -34882e8,24420881 -34882ec,90430001 -34882f0,a2030197 -34882f4,90420002 -34882f8,a2020198 -34882fc,a204019e -3488300,a203019f -3488304,a20201a0 -3488308,8fbf0024 -348830c,8fb10020 -3488310,8fb0001c -3488314,3e00008 -3488318,27bd0028 -348831c,3e00008 -3488324,27bdffd0 -3488328,afbf002c -348832c,afb20028 -3488330,afb10024 -3488334,afb00020 -3488338,3c028040 -348833c,90430884 -3488340,240200fa -3488344,14620008 -3488348,24100001 -348834c,3c028040 -3488350,24420884 -3488354,90500001 -3488358,90420002 -348835c,2028025 -3488360,321000ff -3488364,10802b -3488368,3c028040 -348836c,90430887 -3488370,240200fa -3488374,14620008 -3488378,24110001 -348837c,3c028040 -3488380,24420887 -3488384,90510001 -3488388,90420002 -348838c,2228825 -3488390,323100ff -3488394,11882b -3488398,3c128041 -348839c,24060009 -34883a0,8e45b5a8 -34883a4,c1024af -34883a8,27a40010 -34883ac,8e45b5a8 -34883b0,24060009 -34883b4,24a50012 -34883b8,c1024af -34883bc,27a40014 -34883c0,24060007 -34883c4,8e45b5a8 -34883c8,c1024af -34883cc,27a40018 -34883d0,8e45b5a8 -34883d4,24060007 -34883d8,24a5000e -34883dc,c1024af -34883e0,27a4001c -34883e4,3c02801c -34883e8,344284a0 -34883ec,8c421c4c -34883f0,10400064 -34883f4,8fbf002c -34883f8,240500da -34883fc,3c068011 -3488400,24c65c3c -3488404,3c088040 -3488408,3c078040 -348840c,3c0a8040 -3488410,254c0887 -3488414,3c098040 -3488418,252b0884 -348841c,8c430130 -3488420,50600055 -3488424,8c420124 -3488428,84430000 -348842c,54650052 -3488430,8c420124 -3488434,8c43016c -3488438,320c0 -348843c,832023 -3488440,42080 -3488444,832023 -3488448,42100 -348844c,2484faf0 -3488450,862021 -3488454,8c4d0170 -3488458,d18c0 -348845c,6d1823 -3488460,31880 -3488464,6d1823 -3488468,31900 -348846c,2463faf0 -3488470,910d088f -3488474,11a0000e -3488478,661821 -348847c,97ae0010 -3488480,a48e0192 -3488484,93ad0012 -3488488,a08d0194 -348848c,a46e0192 -3488490,a06d0194 -3488494,97ae0014 -3488498,a48e019a -348849c,93ad0016 -34884a0,a08d019c -34884a4,a46e019a -34884a8,10000012 -34884ac,a06d019c -34884b0,12000011 -34884b4,90ed0890 -34884b8,912f0884 -34884bc,a08f0192 -34884c0,916e0001 -34884c4,a08e0193 -34884c8,916d0002 -34884cc,a08d0194 -34884d0,a06f0192 -34884d4,a06e0193 -34884d8,a06d0194 -34884dc,a08f019a -34884e0,a08e019b -34884e4,a08d019c -34884e8,a06f019a -34884ec,a06e019b -34884f0,a06d019c -34884f4,90ed0890 -34884f8,11a0000d -34884fc,97ae0018 -3488500,a48e0196 -3488504,93ad001a -3488508,a08d0198 -348850c,a46e0196 -3488510,a06d0198 -3488514,97ae001c -3488518,a48e019e -348851c,93ad001e -3488520,a08d01a0 -3488524,a46e019e -3488528,10000012 -348852c,a06d01a0 -3488530,52200011 -3488534,8c420124 -3488538,914f0887 -348853c,a08f0196 -3488540,918e0001 -3488544,a08e0197 -3488548,918d0002 -348854c,a08d0198 -3488550,a06f0196 -3488554,a06e0197 -3488558,a06d0198 -348855c,a08f019e -3488560,a08e019f -3488564,a08d01a0 -3488568,a06f019e -348856c,a06e019f -3488570,a06d01a0 -3488574,8c420124 -3488578,5440ffa9 -348857c,8c430130 -3488580,8fbf002c -3488584,8fb20028 -3488588,8fb10024 -348858c,8fb00020 -3488590,3e00008 -3488594,27bd0030 -3488598,27bdffd8 -348859c,afbf001c -34885a0,f7b40020 -34885a4,3c028040 -34885a8,9042088f -34885ac,1040000a -34885b0,46006506 -34885b4,24060009 -34885b8,3c028041 -34885bc,8c45b5a8 -34885c0,c1024af -34885c4,27a40010 -34885c8,93a20010 -34885cc,93a30011 -34885d0,10000006 -34885d4,93a40012 -34885d8,3c048040 -34885dc,90820884 -34885e0,24840884 -34885e4,90830001 -34885e8,90840002 -34885ec,240500fa -34885f0,14450043 -34885f4,642825 -34885f8,14a00041 -3488600,3c028041 -3488604,c440a20c -3488608,4600a002 -348860c,3c028041 -3488610,c442a210 -3488614,46020000 -3488618,3c028041 -348861c,c442a214 -3488620,4600103e -3488628,45030005 -348862c,46020001 -3488630,4600000d -3488634,44020000 -3488638,10000006 -348863c,304200ff -3488640,4600000d -3488644,44020000 -3488648,3c038000 -348864c,431025 -3488650,304200ff -3488654,3c038041 -3488658,c460a218 -348865c,4600a002 -3488660,3c038041 -3488664,c462a210 -3488668,46020000 -348866c,3c038041 -3488670,c462a214 -3488674,4600103e -348867c,45030005 -3488680,46020001 -3488684,4600000d -3488688,44030000 -348868c,10000006 -3488690,306300ff -3488694,4600000d -3488698,44030000 -348869c,3c048000 -34886a0,641825 -34886a4,306300ff -34886a8,3c048041 -34886ac,c480a21c -34886b0,4600a002 -34886b4,3c048041 -34886b8,c482a220 -34886bc,46020000 -34886c0,3c048041 -34886c4,c482a214 -34886c8,4600103e -34886d0,45030005 -34886d4,46020001 -34886d8,4600000d -34886dc,44040000 -34886e0,10000040 -34886e4,308400ff -34886e8,4600000d -34886ec,44040000 -34886f0,3c058000 -34886f4,852025 -34886f8,1000003a -34886fc,308400ff -3488700,44820000 -3488708,46800020 -348870c,46140002 -3488710,3c028041 -3488714,c442a214 -3488718,4600103e -3488720,45030005 -3488724,46020001 -3488728,4600000d -348872c,44020000 -3488730,10000006 -3488734,304200ff -3488738,4600000d -348873c,44020000 -3488740,3c058000 -3488744,451025 -3488748,304200ff -348874c,44830000 -3488754,46800020 -3488758,46140002 -348875c,3c038041 -3488760,c462a214 -3488764,4600103e -348876c,45030005 -3488770,46020001 -3488774,4600000d -3488778,44030000 -348877c,10000006 -3488780,306300ff -3488784,4600000d -3488788,44030000 -348878c,3c058000 -3488790,651825 -3488794,306300ff -3488798,44840000 -34887a0,46800020 -34887a4,46140002 -34887a8,3c048041 -34887ac,c482a214 -34887b0,4600103e -34887b8,45030005 -34887bc,46020001 -34887c0,4600000d -34887c4,44040000 -34887c8,10000006 -34887cc,308400ff -34887d0,4600000d -34887d4,44040000 -34887d8,3c058000 -34887dc,852025 -34887e0,308400ff -34887e4,21600 -34887e8,42200 -34887ec,441025 -34887f0,31c00 -34887f4,431025 -34887f8,344200ff -34887fc,8fbf001c -3488800,d7b40020 -3488804,3e00008 -3488808,27bd0028 -348880c,27bdffd8 -3488810,afbf0024 -3488814,afb20020 -3488818,afb1001c -348881c,afb00018 -3488820,3c02801c -3488824,344284a0 -3488828,90421cda -348882c,24030004 -3488830,10430015 -3488834,2c430005 -3488838,50600006 -348883c,2442fffb -3488840,24030002 -3488844,50430008 -3488848,3c028040 -348884c,10000013 -3488850,3c028040 -3488854,304200fb -3488858,54400010 -348885c,3c028040 -3488860,10000005 -3488864,3c028040 -3488868,90500891 -348886c,3c028040 -3488870,1000000d -3488874,90510892 -3488878,90500893 -348887c,3c028040 -3488880,10000009 -3488884,90510894 -3488888,3c028040 -348888c,90500895 -3488890,3c028040 -3488894,10000004 -3488898,90510896 -348889c,90500897 -34888a0,3c028040 -34888a4,90510898 -34888a8,2111025 -34888ac,1040005b -34888b0,8fbf0024 -34888b4,3c128041 -34888b8,2406000e -34888bc,8e45b5a8 -34888c0,c1024af -34888c4,27a40010 -34888c8,2406000c -34888cc,8e45b5a8 -34888d0,c1024af -34888d4,27a40014 -34888d8,1200000a -34888dc,3c02801c -34888e0,344284a0 -34888e4,90431cda -34888e8,318c0 -34888ec,3c02800f -34888f0,431021 -34888f4,97a30010 -34888f8,a4438214 -34888fc,93a30012 -3488900,a0438216 -3488904,1220000a -3488908,3c02801c -348890c,344284a0 -3488910,90431cda -3488914,318c0 -3488918,3c02800f -348891c,431021 -3488920,97a30014 -3488924,a4438218 -3488928,93a30016 -348892c,a043821a -3488930,12000010 -3488934,3c02801d -3488938,3c02801c -348893c,344284a0 -3488940,97a30010 -3488944,a4431cf0 -3488948,93a30012 -348894c,a0431cf2 -3488950,97a30010 -3488954,a4431d04 -3488958,93a30012 -348895c,a0431d06 -3488960,97a30010 -3488964,a4431d18 -3488968,93a30012 -348896c,a0431d1a -3488970,3c02801d -3488974,3442aa30 -3488978,8c42067c -348897c,10400027 -3488980,8fbf0024 -3488984,8c430130 -3488988,10600025 -348898c,8fb20020 -3488990,12000010 -3488994,24430234 -3488998,93a40010 -348899c,44840000 -34889a4,46800020 -34889a8,e4400234 -34889ac,93a20011 -34889b0,44820000 -34889b8,46800020 -34889bc,e4600004 -34889c0,93a20012 -34889c4,44820000 -34889cc,46800020 -34889d0,e4600008 -34889d4,12200011 -34889d8,8fbf0024 -34889dc,93a20014 -34889e0,44820000 -34889e8,46800020 -34889ec,e4600010 -34889f0,93a20015 -34889f4,44820000 -34889fc,46800020 -3488a00,e4600014 -3488a04,93a20016 -3488a08,44820000 -3488a10,46800020 -3488a14,e4600018 -3488a18,8fbf0024 -3488a1c,8fb20020 -3488a20,8fb1001c -3488a24,8fb00018 -3488a28,3e00008 -3488a2c,27bd0028 -3488a30,27bdffe8 -3488a34,afbf0014 -3488a38,3c038041 -3488a3c,8c62b5a8 -3488a40,24420001 -3488a44,c102037 -3488a48,ac62b5a8 -3488a4c,c102060 -3488a54,c1020c9 -3488a5c,c102203 -3488a64,8fbf0014 -3488a68,3e00008 -3488a6c,27bd0018 -3488a70,27bdffe8 -3488a74,afbf0014 -3488a78,801025 -3488a7c,2c430193 -3488a80,10600006 -3488a84,a02025 -3488a88,210c0 -3488a8c,3c03800f -3488a90,34638ff8 -3488a94,10000008 -3488a98,431021 -3488a9c,2442fe6e -3488aa0,21080 -3488aa4,2403fff8 -3488aa8,431024 -3488aac,3c038040 -3488ab0,24630c9c -3488ab4,621021 -3488ab8,8c450000 -3488abc,8c460004 -3488ac0,3c028000 -3488ac4,24420df0 -3488ac8,40f809 -3488acc,c53023 -3488ad0,8fbf0014 -3488ad4,3e00008 -3488ad8,27bd0018 -3488adc,27bdffe8 -3488ae0,afbf0014 -3488ae4,801025 -3488ae8,a02025 -3488aec,a4450000 -3488af0,c10229c -3488af4,8c450004 -3488af8,8fbf0014 -3488afc,3e00008 -3488b00,27bd0018 -3488b04,27bdffe8 -3488b08,afbf0014 -3488b0c,afb00010 -3488b10,3c028041 -3488b14,2442c61c -3488b18,24450040 -3488b1c,94430000 -3488b20,1064000b -3488b24,408025 -3488b28,54600006 -3488b2c,24420008 -3488b30,802825 -3488b34,c1022b7 -3488b38,402025 -3488b3c,10000005 -3488b40,2001025 -3488b44,5445fff6 -3488b48,94430000 -3488b4c,8025 -3488b50,2001025 +3487b04,24030013 +3487b08,a043496d +3487b0c,10000004 +3487b10,24030001 +3487b14,24030012 +3487b18,a043496d +3487b1c,9203003a +3487b20,3c028041 +3487b24,a043496c +3487b28,8e0200a0 +3487b2c,21182 +3487b30,30420007 +3487b34,10400009 +3487b38,2025 +3487b3c,401825 +3487b40,2c420004 +3487b44,50400001 +3487b48,24030003 +3487b4c,2463004f +3487b50,306300ff +3487b54,10000002 +3487b58,24040001 +3487b5c,24030050 +3487b60,3c028041 +3487b64,2442495c +3487b68,a0440012 +3487b6c,a0430013 +3487b70,8e0200a0 +3487b74,21242 +3487b78,30420007 +3487b7c,50400009 +3487b80,2025 +3487b84,401825 +3487b88,2c420003 +3487b8c,50400001 +3487b90,24030002 +3487b94,24630052 +3487b98,306300ff +3487b9c,10000002 +3487ba0,24040001 +3487ba4,24030053 +3487ba8,3c028041 +3487bac,2442495c +3487bb0,a0440014 +3487bb4,a0430015 +3487bb8,8e0300a0 +3487bbc,31b02 +3487bc0,30630003 +3487bc4,a0430016 +3487bc8,86050034 +3487bcc,3c048041 +3487bd0,c101dd8 +3487bd4,24844977 +3487bd8,3c020080 +3487bdc,2221024 +3487be0,10400002 +3487be4,2825 +3487be8,860500d0 +3487bec,3c048041 +3487bf0,c101dd8 +3487bf4,2484497a +3487bf8,860508c6 +3487bfc,58a00001 +3487c00,2405ffff +3487c04,3c048041 +3487c08,c101dd8 +3487c0c,2484497d +3487c10,3c128041 +3487c14,2652495c +3487c18,9202003d +3487c1c,a2420017 +3487c20,8602002e +3487c24,22fc3 +3487c28,30a5000f +3487c2c,a22821 +3487c30,52903 +3487c34,3c048041 +3487c38,c101dd8 +3487c3c,24844974 +3487c40,86050022 +3487c44,3c048041 +3487c48,c101dd8 +3487c4c,24844980 +3487c50,118982 +3487c54,32310fff +3487c58,a6510028 +3487c5c,8fbf001c +3487c60,8fb20018 +3487c64,8fb10014 +3487c68,8fb00010 +3487c6c,3e00008 +3487c70,27bd0020 +3487c74,1000ff99 +3487c78,2403002f +3487c7c,27bdff88 +3487c80,afbf0074 +3487c84,afbe0070 +3487c88,afb7006c +3487c8c,afb60068 +3487c90,afb50064 +3487c94,afb40060 +3487c98,afb3005c +3487c9c,afb20058 +3487ca0,afb10054 +3487ca4,afb00050 +3487ca8,3c020002 +3487cac,a21021 +3487cb0,9443ca42 +3487cb4,24020008 +3487cb8,1462001f +3487cbc,808825 +3487cc0,3c020002 +3487cc4,a21021 +3487cc8,9442ca36 +3487ccc,14400006 +3487cd0,3c020002 +3487cd4,a21021 +3487cd8,9444ca2e +3487cdc,24020002 +3487ce0,10820009 +3487ce4,3c020002 +3487ce8,a21021 +3487cec,9442ca30 +3487cf0,24040005 +3487cf4,50440005 +3487cf8,3c020002 +3487cfc,24040016 +3487d00,1444000e +3487d04,3c020002 +3487d08,3c020002 +3487d0c,a21021 +3487d10,9443ca38 +3487d14,31280 +3487d18,431023 +3487d1c,210c0 +3487d20,24420020 +3487d24,8ca401d8 +3487d28,c101e2b +3487d2c,822021 +3487d30,10000220 +3487d34,8fbf0074 +3487d38,3c020002 +3487d3c,a21021 +3487d40,9042ca37 +3487d44,1440001d +3487d48,2c44009a +3487d4c,3c020002 +3487d50,a22821 +3487d54,90a2ca31 +3487d58,34420080 +3487d5c,2c44009a +3487d60,10800214 +3487d64,8fbf0074 +3487d68,2c440086 +3487d6c,14800211 +3487d70,2442007a +3487d74,24040001 +3487d78,441004 +3487d7c,3c040008 +3487d80,24840014 +3487d84,442024 +3487d88,1480003b +3487d8c,3c040002 +3487d90,24840081 +3487d94,442024 +3487d98,54800030 +3487d9c,24020008 +3487da0,3c030004 +3487da4,24630002 +3487da8,431024 +3487dac,10400202 +3487db0,8fbe0070 +3487db4,10000039 +3487db8,241600c8 +3487dbc,108001fd +3487dc0,8fbf0074 +3487dc4,2c440086 +3487dc8,5080000e +3487dcc,2442007a +3487dd0,24040004 +3487dd4,10440028 +3487dd8,2c440005 +3487ddc,5080001b +3487de0,24030006 +3487de4,24040002 +3487de8,5044001c +3487dec,24020008 +3487df0,24030003 +3487df4,1043002d +3487df8,241600c8 +3487dfc,100001ee +3487e00,8fbe0070 +3487e04,24040001 +3487e08,441004 +3487e0c,3c040008 +3487e10,24840014 +3487e14,442024 +3487e18,14800017 +3487e1c,3c040002 +3487e20,24840081 +3487e24,442024 +3487e28,5480000c +3487e2c,24020008 +3487e30,3c030004 +3487e34,24630002 +3487e38,431024 +3487e3c,104001dd +3487e40,8fbf0074 +3487e44,10000017 +3487e48,241600c8 +3487e4c,10430017 +3487e50,241600c8 +3487e54,100001d7 +3487e58,8fbf0074 +3487e5c,431023 +3487e60,21840 +3487e64,431821 +3487e68,318c0 +3487e6c,431021 +3487e70,10000006 +3487e74,305600ff +3487e78,31040 +3487e7c,621021 +3487e80,210c0 +3487e84,621821 +3487e88,307600ff +3487e8c,12c001c9 +3487e90,8fbf0074 +3487e94,10000006 +3487e98,8e220008 +3487e9c,10000004 +3487ea0,8e220008 +3487ea4,10000002 +3487ea8,8e220008 +3487eac,8e220008 +3487eb0,24430008 +3487eb4,ae230008 +3487eb8,3c03e700 +3487ebc,ac430000 +3487ec0,ac400004 +3487ec4,8e220008 +3487ec8,24430008 +3487ecc,ae230008 +3487ed0,3c03fc11 +3487ed4,34639623 +3487ed8,ac430000 +3487edc,3c03ff2f +3487ee0,3463ffff +3487ee4,ac430004 +3487ee8,2c02825 +3487eec,c101dcf +3487ef0,24040090 +3487ef4,afa20048 +3487ef8,afa20044 +3487efc,a025 +3487f00,24030040 +3487f04,3c028041 +3487f08,afa20030 +3487f0c,3c028041 +3487f10,2442495c +3487f14,afa2004c +3487f18,3c178041 +3487f1c,26f71c84 +3487f20,3c158041 +3487f24,26b51c04 +3487f28,8e240008 +3487f2c,24820008 +3487f30,ae220008 +3487f34,3c02fa00 +3487f38,ac820000 +3487f3c,31600 +3487f40,32c00 +3487f44,451025 +3487f48,8fa50044 +3487f4c,451025 +3487f50,31a00 +3487f54,431025 +3487f58,ac820004 +3487f5c,8fa20030 +3487f60,24531b84 +3487f64,8fbe004c +3487f68,2670ff80 +3487f6c,8fd20000 +3487f70,92020000 +3487f74,3042001f +3487f78,50400012 +3487f7c,26100004 +3487f80,32420001 +3487f84,5682000f +3487f88,26100004 +3487f8c,8e020000 +3487f90,21f42 +3487f94,31880 +3487f98,751821 +3487f9c,21602 +3487fa0,3042001f +3487fa4,afa20010 +3487fa8,96070002 +3487fac,73c00 +3487fb0,92060001 +3487fb4,8c650000 +3487fb8,c101e0f +3487fbc,2202025 +3487fc0,26100004 +3487fc4,1613ffea +3487fc8,129042 +3487fcc,26730080 +3487fd0,16f3ffe5 +3487fd4,27de0004 +3487fd8,2c02825 +3487fdc,c101dcf +3487fe0,240400ff +3487fe4,afa20044 +3487fe8,26940001 +3487fec,24020002 +3487ff0,1682ffcd +3487ff4,240300ff +3487ff8,8fa50048 +3487ffc,9825 +3488000,24030040 +3488004,3c178041 +3488008,3c1e8041 +348800c,3c158041 +3488010,26b51c04 +3488014,2416000c +3488018,3c148041 +348801c,10000002 +3488020,26944972 +3488024,8fa50044 +3488028,8e240008 +348802c,24820008 +3488030,ae220008 +3488034,3c02fa00 +3488038,ac820000 +348803c,31600 +3488040,33400 +3488044,461025 +3488048,451025 +348804c,31a00 +3488050,431025 +3488054,ac820004 +3488058,26f21aec +348805c,27d04964 +3488060,92020000 +3488064,5453000f +3488068,26100002 +348806c,92420000 +3488070,21080 +3488074,551021 +3488078,afb60010 +348807c,92430001 +3488080,31a00 +3488084,92470002 +3488088,e33825 +348808c,73c00 +3488090,92060001 +3488094,8c450000 +3488098,c101e0f +348809c,2202025 +34880a0,26100002 +34880a4,1614ffee +34880a8,26520003 +34880ac,26730001 +34880b0,327300ff +34880b4,24020002 +34880b8,1662ffda +34880bc,240300ff +34880c0,3c028041 +34880c4,94564984 +34880c8,24070001 +34880cc,3025 +34880d0,3c058041 +34880d4,24a51f68 +34880d8,c10288c +34880dc,2202025 +34880e0,afa00038 +34880e4,afa00034 +34880e8,afa00030 +34880ec,b825 +34880f0,3c108041 +34880f4,26101ab0 +34880f8,8fa20044 +34880fc,afa2003c +3488100,3c028041 +3488104,24421f68 +3488108,afa20040 +348810c,3c1e8041 +3488110,10000005 +3488114,27de1aec +3488118,afb50038 +348811c,afb40034 +3488120,afb30030 +3488124,240b825 +3488128,92120000 +348812c,92130001 +3488130,92140002 +3488134,32c20001 +3488138,1440000e +348813c,8fb5003c +3488140,24050040 +3488144,c101dcf +3488148,2402025 +348814c,409025 +3488150,24050040 +3488154,c101dcf +3488158,2602025 +348815c,409825 +3488160,24050040 +3488164,c101dcf +3488168,2802025 +348816c,40a025 +3488170,8fb50048 +3488174,16570007 +3488178,8fa20030 +348817c,14530005 +3488180,8fa20034 +3488184,16820003 +3488188,8fa20038 +348818c,5055000e +3488190,92070003 +3488194,8e230008 +3488198,24620008 +348819c,ae220008 +34881a0,3c02fa00 +34881a4,ac620000 +34881a8,121600 +34881ac,132400 +34881b0,441025 +34881b4,551025 +34881b8,142200 +34881bc,441025 +34881c0,ac620004 +34881c4,92070003 +34881c8,2402000a +34881cc,afa20018 +34881d0,24020006 +34881d4,afa20014 +34881d8,82020004 +34881dc,2442005c +34881e0,afa20010 +34881e4,24e70037 +34881e8,3025 +34881ec,8fa50040 +34881f0,c1028f4 +34881f4,2202025 +34881f8,26100005 +34881fc,161effc6 +3488200,16b042 +3488204,3c108041 +3488208,2610495c +348820c,92020016 +3488210,8fb50044 +3488214,2a09025 +3488218,21840 +348821c,621821 +3488220,3c028041 +3488224,24421c28 +3488228,621821 +348822c,90620000 +3488230,21600 +3488234,90640001 +3488238,42400 +348823c,441025 +3488240,90630002 +3488244,31a00 +3488248,431025 +348824c,551025 +3488250,8e230008 +3488254,24640008 +3488258,ae240008 +348825c,3c13fa00 +3488260,ac730000 +3488264,ac620004 +3488268,3c028041 +348826c,24421a94 +3488270,24030010 +3488274,afa30010 +3488278,90430005 +348827c,31a00 +3488280,90470006 +3488284,e33825 +3488288,73c00 +348828c,24060001 +3488290,3c058041 +3488294,24a51f58 +3488298,c101e0f +348829c,2202025 +34882a0,2414ff00 +34882a4,2b4a025 +34882a8,8e220008 +34882ac,24430008 +34882b0,ae230008 +34882b4,ac530000 +34882b8,ac540004 +34882bc,24070001 +34882c0,2406000c +34882c4,3c058041 +34882c8,24a51fa8 +34882cc,c10288c +34882d0,2202025 +34882d4,92020017 +34882d8,1440000e +34882dc,24100010 +34882e0,24020010 +34882e4,afa20018 +34882e8,afa20014 +34882ec,2402005c +34882f0,afa20010 +34882f4,2407003c +34882f8,3025 +34882fc,3c058041 +3488300,24a51fa8 +3488304,c1028f4 +3488308,2202025 +348830c,10000014 +3488310,3c028041 +3488314,afb00018 +3488318,afb00014 +348831c,2415005c +3488320,afb50010 +3488324,2407003a +3488328,3025 +348832c,3c138041 +3488330,26651fa8 +3488334,c1028f4 +3488338,2202025 +348833c,afb00018 +3488340,afb00014 +3488344,afb50010 +3488348,2407003e +348834c,3025 +3488350,26651fa8 +3488354,c1028f4 +3488358,2202025 +348835c,3c028041 +3488360,90424982 +3488364,2c42000a +3488368,1040000b +348836c,24070001 +3488370,2402000a +3488374,afa20010 +3488378,3c028041 +348837c,8c471aa8 +3488380,24060001 +3488384,3c058041 +3488388,24a51f38 +348838c,c101e0f +3488390,2202025 +3488394,24070001 +3488398,2406000b +348839c,3c108041 +34883a0,26051fa8 +34883a4,c10288c +34883a8,2202025 +34883ac,24020010 +34883b0,afa20018 +34883b4,afa20014 +34883b8,24020086 +34883bc,afa20010 +34883c0,2407003c +34883c4,3025 +34883c8,26051fa8 +34883cc,c1028f4 +34883d0,2202025 +34883d4,3c028041 +34883d8,9042497f +34883dc,2c42000a +34883e0,1040001d +34883e4,8e220008 +34883e8,24430008 +34883ec,ae230008 +34883f0,3c03fa00 +34883f4,ac430000 +34883f8,3c03f4ec +34883fc,24633000 +3488400,2439025 +3488404,ac520004 +3488408,3c038041 +348840c,906248e0 +3488410,24440001 +3488414,a06448e0 +3488418,3c038041 +348841c,24631a94 +3488420,21082 +3488424,24040010 +3488428,afa40010 +348842c,9064000f +3488430,42200 +3488434,90670010 +3488438,e43825 +348843c,73c00 +3488440,3046000f +3488444,3c058041 +3488448,24a51f78 +348844c,c101e0f +3488450,2202025 +3488454,8e220008 +3488458,24430008 +348845c,ae230008 +3488460,3c03fa00 +3488464,ac430000 +3488468,ac540004 +348846c,2407000a +3488470,3025 +3488474,3c058041 +3488478,24a51f48 +348847c,c10288c +3488480,2202025 +3488484,8fa2004c +3488488,2453001b +348848c,3c168041 +3488490,26d64974 +3488494,3c148041 +3488498,26941a94 +348849c,26820019 +34884a0,afa20034 +34884a4,24170001 +34884a8,241e0008 +34884ac,3c028041 +34884b0,24421f48 +34884b4,afa20038 +34884b8,afa00020 +34884bc,afa00024 +34884c0,afa00028 +34884c4,afa0002c +34884c8,27b20020 +34884cc,2401825 +34884d0,2c02025 +34884d4,90820000 +34884d8,54570006 +34884dc,2c42000a +34884e0,8c620000 +34884e4,2442ffff +34884e8,ac620000 +34884ec,10000003 +34884f0,24020005 +34884f4,21023 +34884f8,30420006 +34884fc,8c650000 +3488500,a21021 +3488504,ac620004 +3488508,24840001 +348850c,1493fff1 +3488510,24630004 +3488514,92950000 +3488518,26b50037 +348851c,82820002 +3488520,2a2a821 +3488524,92820004 +3488528,10400006 +348852c,2801825 +3488530,8fa4002c +3488534,417c2 +3488538,441021 +348853c,21043 +3488540,2a2a823 +3488544,80620001 +3488548,2442005c +348854c,80630003 +3488550,431021 +3488554,afa20030 +3488558,2c08025 +348855c,92060000 +3488560,2cc2000a +3488564,5040000b +3488568,26100001 +348856c,8e470000 +3488570,afbe0018 +3488574,afbe0014 +3488578,8fa20030 +348857c,afa20010 +3488580,2a73821 +3488584,8fa50038 +3488588,c1028f4 +348858c,2202025 +3488590,26100001 +3488594,1613fff1 +3488598,26520004 +348859c,26730003 +34885a0,26940005 +34885a4,8fa20034 +34885a8,1454ffc3 +34885ac,26d60003 +34885b0,8fbf0074 +34885b4,8fbe0070 +34885b8,8fb7006c +34885bc,8fb60068 +34885c0,8fb50064 +34885c4,8fb40060 +34885c8,8fb3005c +34885cc,8fb20058 +34885d0,8fb10054 +34885d4,8fb00050 +34885d8,3e00008 +34885dc,27bd0078 +34885e0,27bdffe8 +34885e4,afbf0014 +34885e8,afb00010 +34885ec,80820000 +34885f0,10400008 +34885f4,a08025 +34885f8,24070008 +34885fc,8ca60000 +3488600,c1043bc +3488604,24050080 +3488608,8e020000 +348860c,10000003 +3488610,2442000a +3488614,8ca20000 +3488618,24420005 +348861c,ae020000 +3488620,8fbf0014 +3488624,8fb00010 +3488628,3e00008 +348862c,27bd0018 +3488630,27bdffd0 +3488634,afbf002c +3488638,afb10028 +348863c,afb00024 +3488640,808025 +3488644,3c028040 +3488648,80420908 +348864c,14400070 +3488650,a08825 +3488654,3c028040 +3488658,904208a2 +348865c,10400087 +3488660,8fbf002c +3488664,3c020002 +3488668,2221021 +348866c,9442ca30 +3488670,2442ffe0 +3488674,304200ff +3488678,2c420008 +348867c,1440007f +3488680,3c020002 +3488684,2221021 +3488688,8443ca52 +348868c,2402ffff +3488690,5462007b +3488694,8fb10028 +3488698,3c020002 +348869c,2221021 +34886a0,9442ca84 +34886a4,21a00 +34886a8,621823 +34886ac,3c0251eb +34886b0,3442851f +34886b4,620018 +34886b8,1010 +34886bc,21183 +34886c0,31fc3 +34886c4,431023 +34886c8,2c430100 +34886cc,10600005 +34886d0,304200ff +34886d4,54400005 +34886d8,8e030008 +34886dc,10000068 +34886e0,8fb10028 +34886e4,240200ff +34886e8,8e030008 +34886ec,24640008 +34886f0,ae040008 +34886f4,3c04fa00 +34886f8,ac640000 +34886fc,2404ff00 +3488700,441025 +3488704,ac620004 +3488708,24020071 +348870c,afa20018 +3488710,3c028040 +3488714,804208a3 +3488718,10400038 +348871c,3c028040 +3488720,27a50018 +3488724,3c048040 +3488728,c102178 +348872c,248408a3 +3488730,3c028040 +3488734,804208c3 +3488738,10400005 +348873c,27a50018 +3488740,3c048040 +3488744,c102178 +3488748,248408c3 +348874c,27a50018 +3488750,3c048041 +3488754,c102178 +3488758,24841cc4 +348875c,27a50018 +3488760,3c048041 +3488764,c102178 +3488768,24841cc8 +348876c,27a50018 +3488770,3c048040 +3488774,c102178 +3488778,248408e4 +348877c,27a50018 +3488780,3c048040 +3488784,c102178 +3488788,24840918 +348878c,27a50018 +3488790,3c048041 +3488794,c102178 +3488798,24841cc4 +348879c,3c028040 +34887a0,90420d76 +34887a4,10400006 +34887a8,3c028040 +34887ac,27a50018 +34887b0,3c048041 +34887b4,c102178 +34887b8,24841cdc +34887bc,3c028040 +34887c0,90420d77 +34887c4,50400006 +34887c8,afa00010 +34887cc,27a50018 +34887d0,3c048041 +34887d4,c102178 +34887d8,24841cf0 +34887dc,afa00010 +34887e0,3825 +34887e4,24060009 +34887e8,24050008 +34887ec,c1043ee +34887f0,2002025 +34887f4,10000021 +34887f8,8fbf002c +34887fc,804208c3 +3488800,1440ffcf +3488804,27a50018 +3488808,1000ffd6 +348880c,3c048041 +3488810,8c820008 +3488814,24430008 +3488818,ac830008 +348881c,3c03fa00 +3488820,ac430000 +3488824,2403ffff +3488828,ac430004 +348882c,24070008 +3488830,2406000f +3488834,240500f4 +3488838,3c048041 +348883c,c1043bc +3488840,24841cfc +3488844,24070008 +3488848,24060018 +348884c,240500f4 +3488850,3c048040 +3488854,c1043bc +3488858,24840908 +348885c,afa00010 +3488860,3825 +3488864,24060009 +3488868,24050008 +348886c,c1043ee +3488870,2002025 +3488874,1000ff78 +3488878,3c028040 +348887c,8fb10028 +3488880,8fb00024 +3488884,3e00008 +3488888,27bd0030 +348888c,27bdffa0 +3488890,afbf005c +3488894,afbe0058 +3488898,afb70054 +348889c,afb60050 +34888a0,afb5004c +34888a4,afb40048 +34888a8,afb30044 +34888ac,afb20040 +34888b0,afb1003c +34888b4,afb00038 +34888b8,afa40060 +34888bc,afa50064 +34888c0,3c02801c +34888c4,344284a0 +34888c8,8c500000 +34888cc,261402b8 +34888d0,8e0202c0 +34888d4,24430008 +34888d8,ae0302c0 +34888dc,3c03de00 +34888e0,ac430000 +34888e4,3c038041 +34888e8,24631fe8 +34888ec,ac430004 +34888f0,8e0202c0 +34888f4,24430008 +34888f8,ae0302c0 +34888fc,3c03e700 +3488900,ac430000 +3488904,ac400004 +3488908,8e0202c0 +348890c,24430008 +3488910,ae0302c0 +3488914,3c03fc11 +3488918,34639623 +348891c,ac430000 +3488920,3c03ff2f +3488924,3463ffff +3488928,ac430004 +348892c,8e0202c0 +3488930,24430008 +3488934,ae0302c0 +3488938,3c03fa00 +348893c,ac430000 +3488940,2403ffff +3488944,ac430004 +3488948,3c128040 +348894c,26520834 +3488950,24110054 +3488954,3c178041 +3488958,26f71e90 +348895c,3c168041 +3488960,26d6483c +3488964,24150018 +3488968,241e000c +348896c,92420000 +3488970,21040 +3488974,571021 +3488978,90430000 +348897c,31880 +3488980,761821 +3488984,8c730000 +3488988,24070001 +348898c,90460001 +3488990,2602825 +3488994,c10288c +3488998,2802025 +348899c,afb50018 +34889a0,afb50014 +34889a4,afbe0010 +34889a8,2203825 +34889ac,3025 +34889b0,2602825 +34889b4,c1028f4 +34889b8,2802025 +34889bc,26310020 +34889c0,240200f4 +34889c4,1622ffe9 +34889c8,26520001 +34889cc,8fa50064 +34889d0,c10218c +34889d4,2802025 +34889d8,8fa50064 +34889dc,c101f1f +34889e0,2802025 +34889e4,8e0202c0 +34889e8,24430008 +34889ec,ae0302c0 +34889f0,3c03e700 +34889f4,ac430000 +34889f8,ac400004 +34889fc,8e0202c0 +3488a00,24430008 +3488a04,ae0302c0 +3488a08,3c03fcff +3488a0c,3463ffff +3488a10,ac430000 +3488a14,3c03fffd +3488a18,3463f6fb +3488a1c,ac430004 +3488a20,8e0202c0 +3488a24,24430008 +3488a28,ae0302c0 +3488a2c,3c03fa00 +3488a30,ac430000 +3488a34,93a30063 +3488a38,ac430004 +3488a3c,3c02e450 +3488a40,244203c0 +3488a44,afa20020 +3488a48,afa00024 +3488a4c,3c02e100 +3488a50,afa20028 +3488a54,afa0002c +3488a58,3c02f100 +3488a5c,afa20030 +3488a60,3c020400 +3488a64,24420400 +3488a68,afa20034 +3488a6c,27a20020 +3488a70,27a60038 +3488a74,8e0302c0 +3488a78,24640008 +3488a7c,ae0402c0 +3488a80,8c450004 +3488a84,8c440000 +3488a88,ac650004 +3488a8c,24420008 +3488a90,14c2fff8 +3488a94,ac640000 +3488a98,8fbf005c +3488a9c,8fbe0058 +3488aa0,8fb70054 +3488aa4,8fb60050 +3488aa8,8fb5004c +3488aac,8fb40048 +3488ab0,8fb30044 +3488ab4,8fb20040 +3488ab8,8fb1003c +3488abc,8fb00038 +3488ac0,3e00008 +3488ac4,27bd0060 +3488ac8,3c028041 +3488acc,904248e1 +3488ad0,1040000d +3488ad4,3c028011 +3488ad8,3442a5d0 +3488adc,8c430000 +3488ae0,24020517 +3488ae4,14620008 +3488aec,27bdffe8 +3488af0,afbf0014 +3488af4,c104083 +3488afc,8fbf0014 +3488b00,3e00008 +3488b04,27bd0018 +3488b08,3e00008 +3488b10,14800003 +3488b14,3c028041 +3488b18,3e00008 +3488b1c,8c421ed0 +3488b20,27bdffe8 +3488b24,afbf0014 +3488b28,afb00010 +3488b2c,808025 +3488b30,c1022c4 +3488b34,42102 +3488b38,3210000f +3488b3c,108080 +3488b40,3c038041 +3488b44,24631ed0 +3488b48,2038021 +3488b4c,8e030000 +3488b50,431021 3488b54,8fbf0014 3488b58,8fb00010 3488b5c,3e00008 3488b60,27bd0018 -3488b64,3c03801c -3488b68,346384a0 -3488b6c,8c620000 -3488b70,8c860004 -3488b74,8c4502d0 -3488b78,24a70008 -3488b7c,ac4702d0 -3488b80,3c02db06 -3488b84,24420018 -3488b88,aca20000 -3488b8c,aca60004 -3488b90,8c650000 -3488b94,8c840004 -3488b98,8ca302c0 -3488b9c,24660008 -3488ba0,aca602c0 -3488ba4,ac620000 -3488ba8,3e00008 -3488bac,ac640004 -3488bb0,27bdffe0 -3488bb4,afbf0014 -3488bb8,f7b40018 -3488bbc,3c02800a -3488bc0,3442a78c -3488bc4,40f809 -3488bc8,46006506 -3488bcc,2442000c -3488bd0,2025 -3488bd4,1000000a -3488bd8,2405000c -3488bdc,c4600000 -3488be0,46140002 -3488be4,e4600000 -3488be8,24630004 -3488bec,5462fffc -3488bf0,c4600000 -3488bf4,24840004 -3488bf8,10850003 -3488bfc,24420010 -3488c00,1000fff6 -3488c04,2443fff4 -3488c08,8fbf0014 -3488c0c,d7b40018 -3488c10,3e00008 -3488c14,27bd0020 -3488c18,27bdffd8 -3488c1c,afbf0024 -3488c20,afb30020 -3488c24,afb2001c -3488c28,afb10018 -3488c2c,afb00014 -3488c30,809825 -3488c34,a09025 -3488c38,c08025 -3488c3c,3c118002 -3488c40,26222438 -3488c44,3025 -3488c48,2002825 -3488c4c,40f809 -3488c50,2402025 -3488c54,26312554 -3488c58,3025 -3488c5c,2002825 -3488c60,220f809 -3488c64,2402025 -3488c68,2602825 -3488c6c,3c028005 -3488c70,244270c0 -3488c74,40f809 -3488c78,2002025 -3488c7c,8fbf0024 -3488c80,8fb30020 -3488c84,8fb2001c -3488c88,8fb10018 -3488c8c,8fb00014 -3488c90,3e00008 -3488c94,27bd0028 -3488c98,44860000 -3488c9c,24020063 -3488ca0,54820005 -3488ca4,84a20000 -3488ca8,3c028041 -3488cac,c442a228 -3488cb0,3e00008 -3488cb4,46020002 -3488cb8,240300f1 -3488cbc,54430008 -3488cc0,24030015 -3488cc4,24020046 -3488cc8,1082000d -3488ccc,2402002f -3488cd0,1482000e -3488cd4,3c028041 -3488cd8,3e00008 -3488cdc,c440a224 -3488ce0,1443000a -3488ce4,24020011 -3488ce8,90a3001d -3488cec,14620007 -3488cf0,3c028041 -3488cf4,c442a228 -3488cf8,3e00008 -3488cfc,46020002 -3488d00,3c028041 -3488d04,3e00008 -3488d08,c440a224 -3488d0c,3e00008 -3488d14,27bdffd8 -3488d18,afbf001c -3488d1c,afb20018 -3488d20,afb10014 -3488d24,afb00010 -3488d28,f7b40020 -3488d2c,48202 -3488d30,afa40028 -3488d34,a08825 -3488d38,c09025 -3488d3c,4487a000 -3488d40,108600 -3488d44,108603 -3488d48,c1022c1 -3488d4c,42402 -3488d50,c1022d9 -3488d54,402025 -3488d58,4406a000 -3488d5c,2202825 -3488d60,c102326 -3488d64,2002025 -3488d68,c1022ec -3488d6c,46000306 -3488d70,2604ffff -3488d74,2403025 -3488d78,2202825 -3488d7c,42600 -3488d80,c102306 -3488d84,42603 -3488d88,8fbf001c -3488d8c,8fb20018 -3488d90,8fb10014 -3488d94,8fb00010 -3488d98,d7b40020 -3488d9c,3e00008 -3488da0,27bd0028 -3488da4,27bdffe0 -3488da8,afbf001c -3488dac,afb10018 -3488db0,afb00014 -3488db4,3c108041 -3488db8,2610c61c -3488dbc,26110040 -3488dc0,a6000000 -3488dc4,c102742 -3488dc8,24041e70 -3488dcc,ae020004 -3488dd0,26100008 -3488dd4,5611fffb -3488dd8,a6000000 -3488ddc,8fbf001c -3488de0,8fb10018 -3488de4,8fb00014 -3488de8,3e00008 -3488dec,27bd0020 -3488df0,3c028041 -3488df4,a440c61c -3488df8,2442c61c -3488dfc,a4400008 -3488e00,a4400010 -3488e04,a4400018 -3488e08,a4400020 -3488e0c,a4400028 -3488e10,a4400030 -3488e14,3e00008 -3488e18,a4400038 -3488e1c,27bdffe8 -3488e20,afbf0014 -3488e24,afb00010 -3488e28,afa5001c -3488e2c,10a0000e -3488e30,afa60020 -3488e34,808025 -3488e38,93a40023 -3488e3c,50800002 -3488e40,97a40020 -3488e44,3084ffff -3488e48,c101eeb -3488e50,c101edc -3488e54,402025 -3488e58,94430004 -3488e5c,a6030000 -3488e60,80420006 -3488e64,a2020002 -3488e68,8fbf0014 -3488e6c,8fb00010 +3488b64,3c028011 +3488b68,3442a5d0 +3488b6c,8c42135c +3488b70,14400050 +3488b74,3c028041 +3488b78,904248e4 +3488b7c,1040004d +3488b80,3c038011 +3488b84,3463a5d0 +3488b88,906300b2 +3488b8c,30630001 +3488b90,14600048 +3488b94,2c430006 +3488b98,10600046 +3488b9c,21080 +3488ba0,27bdffe8 +3488ba4,3c038041 +3488ba8,24631c10 +3488bac,621021 +3488bb0,8c420000 +3488bb4,400008 +3488bb8,afbf0014 +3488bbc,3c028011 +3488bc0,3442a5d0 +3488bc4,8c4400a4 +3488bc8,c1022c4 +3488bcc,3084003f +3488bd0,3c038041 +3488bd4,946348e2 +3488bd8,43102b +3488bdc,10400030 +3488be0,8fbf0014 +3488be4,10000031 +3488bec,3c028011 +3488bf0,3442a5d0 +3488bf4,8c4400a4 +3488bf8,3c02001c +3488bfc,2442003f +3488c00,c1022c4 +3488c04,822024 +3488c08,3c038041 +3488c0c,946348e2 +3488c10,43102b +3488c14,10400022 +3488c18,8fbf0014 +3488c1c,10000023 +3488c24,3c028011 +3488c28,3442a5d0 +3488c2c,8c4400a4 +3488c30,3c02001c +3488c34,c1022c4 +3488c38,822024 +3488c3c,3c038041 +3488c40,946348e2 +3488c44,43102b +3488c48,10400015 +3488c4c,8fbf0014 +3488c50,10000016 +3488c58,3c028011 +3488c5c,3442a5d0 +3488c60,844200d0 +3488c64,3c038041 +3488c68,946348e2 +3488c6c,43102a +3488c70,1040000b +3488c74,8fbf0014 +3488c78,1000000c +3488c80,3c028011 +3488c84,3442a5d0 +3488c88,8442002e +3488c8c,3c038041 +3488c90,946348e2 +3488c94,43102a +3488c98,14400004 +3488c9c,8fbf0014 +3488ca0,c1024e7 +3488ca4,24040003 +3488ca8,8fbf0014 +3488cac,3e00008 +3488cb0,27bd0018 +3488cb4,3e00008 +3488cbc,27bdffe8 +3488cc0,afbf0014 +3488cc4,afb00010 +3488cc8,808025 +3488ccc,3c04801c +3488cd0,3c02800d +3488cd4,3442d464 +3488cd8,40f809 +3488cdc,3484a578 +3488ce0,1440000c +3488ce4,3c02801d +3488ce8,8602014a +3488cec,5440000d +3488cf0,8fbf0014 +3488cf4,3c028041 +3488cf8,ac4048f0 +3488cfc,3c028002 +3488d00,24420eb4 +3488d04,40f809 +3488d08,2002025 +3488d0c,10000005 +3488d10,8fbf0014 +3488d14,3442aa30 +3488d18,2403000a +3488d1c,a4430110 +3488d20,8fbf0014 +3488d24,8fb00010 +3488d28,3e00008 +3488d2c,27bd0018 +3488d30,27bdffe8 +3488d34,afbf0014 +3488d38,3c028041 +3488d3c,944448f8 +3488d40,c1045d6 +3488d44,24840064 +3488d48,3c038041 +3488d4c,ac6248f4 +3488d50,8fbf0014 +3488d54,3e00008 +3488d58,27bd0018 +3488d5c,27bdffe8 +3488d60,afbf0014 +3488d64,3c028041 +3488d68,8c424928 +3488d6c,218c0 +3488d70,3c048041 +3488d74,24844e20 +3488d78,641821 +3488d7c,8c630000 +3488d80,1060000c +3488d84,24420001 +3488d88,220c0 +3488d8c,3c038041 +3488d90,24634e20 +3488d94,641821 +3488d98,402825 +3488d9c,8c640000 +3488da0,24420001 +3488da4,1480fffc +3488da8,24630008 +3488dac,3c028041 +3488db0,ac454928 +3488db4,c1045d6 +3488db8,2404013c +3488dbc,3c038041 +3488dc0,ac624924 +3488dc4,24030001 +3488dc8,ac430130 +3488dcc,8fbf0014 +3488dd0,3e00008 +3488dd4,27bd0018 +3488dd8,3c038041 +3488ddc,8c674928 +3488de0,24e7ffff +3488de4,4e00021 +3488de8,801025 +3488dec,27bdfff8 +3488df0,4825 +3488df4,3c0a8041 +3488df8,254a4e20 +3488dfc,1273021 +3488e00,61fc2 +3488e04,661821 +3488e08,31843 +3488e0c,330c0 +3488e10,ca3021 +3488e14,8cc80000 +3488e18,8cc60004 +3488e1c,afa60004 +3488e20,a8302b +3488e24,10c00003 +3488e28,105302b +3488e2c,10000008 +3488e30,2467ffff +3488e34,50c00003 +3488e38,ac480000 +3488e3c,10000004 +3488e40,24690001 +3488e44,8fa30004 +3488e48,10000006 +3488e4c,ac430004 +3488e50,e9182a +3488e54,1060ffea +3488e58,1273021 +3488e5c,ac400000 +3488e60,ac400004 +3488e64,3e00008 +3488e68,27bd0008 +3488e6c,ac800000 3488e70,3e00008 -3488e74,27bd0018 -3488e78,27bdffe0 -3488e7c,afbf001c -3488e80,afb00018 -3488e84,808025 -3488e88,30e700ff -3488e8c,90c600a5 -3488e90,c1019e1 -3488e94,27a40010 -3488e98,8fa50010 -3488e9c,8fa60014 -3488ea0,c102387 -3488ea4,2002025 -3488ea8,8fbf001c -3488eac,8fb00018 +3488e74,ac800004 +3488e78,3c038041 +3488e7c,8c6649c8 +3488e80,10c0000b +3488e84,801025 +3488e88,a03825 +3488e8c,246349c8 +3488e90,54e60004 +3488e94,24630008 +3488e98,8c630004 +3488e9c,3e00008 +3488ea0,ac430000 +3488ea4,8c660000 +3488ea8,14c0fff9 3488eb0,3e00008 -3488eb4,27bd0020 -3488eb8,27bdffd8 -3488ebc,afbf0024 -3488ec0,afb10020 -3488ec4,afb0001c -3488ec8,808025 -3488ecc,a08825 -3488ed0,3c028041 -3488ed4,8c42a1cc -3488ed8,afa20010 -3488edc,3825 -3488ee0,a03025 -3488ee4,802825 -3488ee8,c10239e -3488eec,27a40010 -3488ef0,3c028041 -3488ef4,8c47a22c -3488ef8,2203025 -3488efc,2002825 -3488f00,c102345 -3488f04,8fa40010 -3488f08,8fbf0024 -3488f0c,8fb10020 -3488f10,8fb0001c -3488f14,3e00008 -3488f18,27bd0028 -3488f1c,27bdffd8 -3488f20,afbf0024 -3488f24,afb10020 -3488f28,afb0001c -3488f2c,808025 -3488f30,9083001d -3488f34,24020011 -3488f38,10620007 -3488f3c,a08825 -3488f40,3c028001 -3488f44,24423268 -3488f48,40f809 -3488f50,10000010 -3488f54,8fbf0024 -3488f58,3c028041 -3488f5c,8c42a1d0 -3488f60,afa20010 -3488f64,3825 -3488f68,a03025 -3488f6c,802825 -3488f70,c10239e -3488f74,27a40010 -3488f78,3c028041 -3488f7c,8c47a22c -3488f80,2203025 -3488f84,2002825 -3488f88,c102345 -3488f8c,8fa40010 -3488f90,8fbf0024 -3488f94,8fb10020 -3488f98,8fb0001c -3488f9c,3e00008 -3488fa0,27bd0028 -3488fa4,27bdffd8 -3488fa8,afbf0024 -3488fac,afb10020 -3488fb0,afb0001c -3488fb4,808025 -3488fb8,a08825 -3488fbc,3c028041 -3488fc0,8c42a1d4 -3488fc4,afa20010 -3488fc8,2407004f -3488fcc,a03025 -3488fd0,802825 -3488fd4,c10239e -3488fd8,27a40010 -3488fdc,3c028041 -3488fe0,8c47a230 -3488fe4,2203025 -3488fe8,2002825 -3488fec,c102345 -3488ff0,8fa40010 -3488ff4,8fbf0024 -3488ff8,8fb10020 -3488ffc,8fb0001c -3489000,3e00008 -3489004,27bd0028 -3489008,27bdffd8 -348900c,afbf0024 -3489010,afb10020 -3489014,afb0001c -3489018,808025 -348901c,a08825 -3489020,3c028041 -3489024,8c42a1d8 -3489028,afa20010 -348902c,3825 -3489030,a03025 -3489034,802825 -3489038,c10239e -348903c,27a40010 -3489040,3c028041 -3489044,8c47a234 -3489048,2203025 -348904c,2002825 -3489050,c102345 -3489054,8fa40010 -3489058,8fbf0024 -348905c,8fb10020 -3489060,8fb0001c -3489064,3e00008 -3489068,27bd0028 -348906c,27bdffd8 -3489070,afbf0024 -3489074,afb10020 -3489078,afb0001c -348907c,808025 -3489080,a08825 -3489084,3c028041 -3489088,8c42a1dc -348908c,afa20010 -3489090,2407000c -3489094,a03025 -3489098,802825 -348909c,c10239e -34890a0,27a40010 -34890a4,3c028041 -34890a8,8c47a238 -34890ac,2203025 -34890b0,2002825 -34890b4,c102345 -34890b8,8fa40010 -34890bc,8fbf0024 -34890c0,8fb10020 -34890c4,8fb0001c -34890c8,3e00008 -34890cc,27bd0028 -34890d0,27bdffd0 -34890d4,afbf002c -34890d8,afb10028 -34890dc,afb00024 -34890e0,808025 -34890e4,afa00010 -34890e8,afa00014 -34890ec,9482001c -34890f0,24030001 -34890f4,14430008 -34890f8,a08825 -34890fc,24070015 -3489100,90a600a5 -3489104,802825 -3489108,c1019e1 -348910c,27a40010 -3489110,10000012 -3489114,afa00018 -3489118,24030007 -348911c,14430008 -3489120,24030a0c -3489124,24070058 -3489128,90a600a5 -348912c,802825 -3489130,c1019e1 -3489134,27a40010 -3489138,10000008 -348913c,afa00018 -3489140,54430006 -3489144,afa00018 -3489148,3c050010 -348914c,34a5010a -3489150,c1019b9 -3489154,27a40010 -3489158,afa00018 -348915c,8fa50010 -3489160,8fa60014 -3489164,c102387 -3489168,27a40018 -348916c,97a20018 -3489170,10400008 -3489174,2203025 -3489178,3c028041 -348917c,8c47a224 -3489180,2002825 -3489184,c102345 -3489188,8fa40018 -348918c,10000005 -3489190,8fbf002c -3489194,2002825 -3489198,c102306 -348919c,82040141 -34891a0,8fbf002c -34891a4,8fb10028 -34891a8,8fb00024 -34891ac,3e00008 -34891b0,27bd0030 -34891b4,27bdffd0 -34891b8,afbf002c -34891bc,afb10028 -34891c0,afb00024 -34891c4,808025 -34891c8,afa00010 -34891cc,afa00014 -34891d0,9482001c -34891d4,10400004 -34891d8,a08825 -34891dc,24030005 -34891e0,54430007 -34891e4,afa00018 -34891e8,24070034 -34891ec,922600a5 -34891f0,2002825 -34891f4,c1019e1 -34891f8,27a40010 -34891fc,afa00018 -3489200,8fa50010 -3489204,8fa60014 -3489208,c102387 -348920c,27a40018 -3489210,97a20018 -3489214,10400008 -3489218,2203025 -348921c,3c028041 -3489220,8c47a224 -3489224,2002825 -3489228,c102345 -348922c,8fa40018 -3489230,10000005 -3489234,8fbf002c -3489238,2002825 -348923c,c102306 -3489240,82040147 -3489244,8fbf002c -3489248,8fb10028 -348924c,8fb00024 -3489250,3e00008 -3489254,27bd0030 -3489258,27bdffd8 -348925c,afbf0024 -3489260,afb10020 -3489264,afb0001c -3489268,808025 -348926c,a08825 -3489270,3c028041 -3489274,8c42a1cc -3489278,afa20010 -348927c,2407003e -3489280,a03025 -3489284,802825 -3489288,c10239e -348928c,27a40010 -3489290,3c028041 -3489294,8c47a224 -3489298,2203025 -348929c,2002825 -34892a0,c102345 -34892a4,8fa40010 -34892a8,8fbf0024 -34892ac,8fb10020 -34892b0,8fb0001c -34892b4,3e00008 -34892b8,27bd0028 -34892bc,801025 -34892c0,14c00002 -34892c4,a6001b -34892c8,7000d -34892cc,2810 -34892d0,3812 -34892d4,3c03aaaa -34892d8,3463aaab -34892dc,e30019 -34892e0,1810 -34892e4,31882 -34892e8,32040 -34892ec,831821 -34892f0,31840 -34892f4,e31823 -34892f8,44850000 -34892fc,4a10004 -3489300,468000a1 -3489304,3c048041 -3489308,d480a248 -348930c,46201080 -3489310,462010a0 -3489314,44860000 -3489318,4c10004 -348931c,46800021 -3489320,3c048041 -3489324,d484a248 -3489328,46240000 -348932c,46200020 -3489330,46001083 -3489334,3c048041 -3489338,c484a23c -348933c,46022101 -3489340,24640001 -3489344,3c068041 -3489348,24c6a1e0 -348934c,32840 -3489350,a32821 -3489354,c52821 -3489358,90a50001 -348935c,44850000 -3489364,46800020 -3489368,46040002 -348936c,42840 -3489370,a42821 -3489374,c53021 -3489378,90c50001 -348937c,44853000 -3489384,468031a0 -3489388,46023182 -348938c,46060000 -3489390,3c058041 -3489394,c4a6a240 -3489398,4600303e -34893a0,45030005 -34893a4,46060001 -34893a8,4600000d -34893ac,44050000 -34893b0,10000006 -34893b4,30a700ff -34893b8,4600000d -34893bc,44050000 -34893c0,3c068000 -34893c4,a62825 -34893c8,30a700ff -34893cc,3c068041 -34893d0,24c6a1e0 -34893d4,32840 -34893d8,a32821 -34893dc,c52821 -34893e0,90a50002 -34893e4,44850000 -34893ec,46800020 -34893f0,46040002 -34893f4,42840 -34893f8,a42821 -34893fc,c53021 -3489400,90c50002 -3489404,44853000 -348940c,468031a0 -3489410,46023182 -3489414,46060000 -3489418,3c058041 -348941c,c4a6a240 -3489420,4600303e -3489428,45030005 -348942c,46060001 -3489430,4600000d -3489434,44050000 -3489438,10000006 -348943c,30a600ff -3489440,4600000d -3489444,44050000 -3489448,3c068000 -348944c,a62825 -3489450,30a600ff -3489454,32840 -3489458,a31821 -348945c,3c088041 -3489460,2508a1e0 -3489464,681821 -3489468,90650000 -348946c,44850000 -3489474,46800020 -3489478,46040002 -348947c,41840 -3489480,641821 -3489484,681821 -3489488,90630000 -348948c,44832000 -3489494,46802120 -3489498,46022082 -348949c,46020000 -34894a0,3c038041 -34894a4,c462a240 -34894a8,4600103e -34894b0,45030005 -34894b4,46020001 -34894b8,4600000d -34894bc,44030000 -34894c0,10000006 -34894c4,a0430000 -34894c8,4600000d -34894cc,44030000 -34894d0,3c048000 -34894d4,641825 -34894d8,a0430000 -34894dc,a0470001 -34894e0,3e00008 -34894e4,a0460002 -34894e8,3c028011 -34894ec,3442a5d0 -34894f0,24030140 -34894f4,a4431424 -34894f8,90440032 -34894fc,41840 -3489500,641821 -3489504,31900 -3489508,3e00008 -348950c,a0430033 -3489510,24a20002 -3489514,24a50082 -3489518,24065700 -348951c,24070004 -3489520,9443fffe -3489524,50660008 -3489528,24420004 -348952c,50600006 -3489530,24420004 -3489534,94430000 -3489538,2c630004 -348953c,54600001 -3489540,a4470000 -3489544,24420004 -3489548,5445fff6 -348954c,9443fffe -3489550,3e00008 -3489558,27bdffe8 -348955c,afbf0014 -3489560,c102742 -3489564,24040400 -3489568,3c038041 -348956c,ac62b5ac -3489570,3c038041 -3489574,ac62b5b0 -3489578,8fbf0014 -348957c,3e00008 -3489580,27bd0018 -3489584,80820000 -3489588,10400026 -348958c,24870001 +3488eb4,ac450000 +3488eb8,27bdffe8 +3488ebc,afbf0014 +3488ec0,afb00010 +3488ec4,84a20000 +3488ec8,2403000a +3488ecc,14430011 +3488ed0,808025 +3488ed4,24020010 +3488ed8,14c20008 +3488edc,94a2001c +3488ee0,21142 +3488ee4,3042007f +3488ee8,24030075 +3488eec,54430003 +3488ef0,94a2001c +3488ef4,10000046 +3488ef8,ac800000 +3488efc,3042001f +3488f00,a2060000 +3488f04,24030001 +3488f08,a2030001 +3488f0c,10000040 +3488f10,a6020002 +3488f14,24030015 +3488f18,14430023 +3488f1c,2403019c +3488f20,90a2001d +3488f24,24030012 +3488f28,14430003 +3488f2c,24030006 +3488f30,10000037 +3488f34,ac800000 +3488f38,10430003 +3488f3c,24030011 +3488f40,54430007 +3488f44,94a20016 +3488f48,94a20140 +3488f4c,a2060000 +3488f50,24030002 +3488f54,a2030001 +3488f58,1000002d +3488f5c,a6020002 +3488f60,5040002c +3488f64,2001025 +3488f68,3c038041 +3488f6c,80634940 +3488f70,31b80 +3488f74,431025 +3488f78,24030019 +3488f7c,14c30002 +3488f80,3042ffff +3488f84,2406000a +3488f88,62e00 +3488f8c,3c030006 +3488f90,a32825 +3488f94,a22825 +3488f98,c10239e +3488f9c,2002025 +3488fa0,1000001c +3488fa4,2001025 +3488fa8,1443000a +3488fac,2403003e +3488fb0,94a2001c +3488fb4,21a02 +3488fb8,3063001f +3488fbc,a0830000 +3488fc0,24030003 +3488fc4,a0830001 +3488fc8,304200ff +3488fcc,10000010 +3488fd0,a4820002 +3488fd4,54c3000c +3488fd8,a2060000 +3488fdc,2403011a +3488fe0,54430009 +3488fe4,a2060000 +3488fe8,3c028011 +3488fec,3442a5d0 +3488ff0,90421397 +3488ff4,a0820000 +3488ff8,24020004 +3488ffc,a0820001 +3489000,10000003 +3489004,a4870002 +3489008,a2000001 +348900c,a6070002 +3489010,2001025 +3489014,8fbf0014 +3489018,8fb00010 +348901c,3e00008 +3489020,27bd0018 +3489024,27bdffe0 +3489028,afbf001c +348902c,afb00018 +3489030,808025 +3489034,c1023ae +3489038,27a40010 +348903c,8fa50010 +3489040,14a00004 +3489048,ae000000 +348904c,10000003 +3489050,ae000004 +3489054,c102376 +3489058,2002025 +348905c,2001025 +3489060,8fbf001c +3489064,8fb00018 +3489068,3e00008 +348906c,27bd0020 +3489070,27bdffe0 +3489074,afbf001c +3489078,afb10018 +348907c,afb00014 +3489080,afa40020 +3489084,58202 +3489088,afa50024 +348908c,321000ff +3489090,30b100ff +3489094,c1034fb +3489098,52402 +348909c,c1034ec +34890a0,402025 +34890a4,3c038041 +34890a8,8fa40020 +34890ac,ac644918 +34890b0,24634918 +34890b4,8fa40024 +34890b8,ac640004 +34890bc,10202b +34890c0,3c038041 +34890c4,ac644914 +34890c8,3c038041 +34890cc,ac624910 +34890d0,90440001 +34890d4,3c038041 +34890d8,ac64490c +34890dc,94440002 +34890e0,3c038041 +34890e4,ac644908 +34890e8,94440004 +34890ec,3c038041 +34890f0,ac644904 +34890f4,90440006 +34890f8,3c038041 +34890fc,12200003 +3489100,ac644900 +3489104,c1034ec +3489108,2202025 +348910c,90420007 +3489110,10400004 +3489114,24030001 +3489118,2442fff3 +348911c,304200ff +3489120,2c430002 +3489124,3c028041 +3489128,16000003 +348912c,ac4348fc +3489130,3c028040 +3489134,90500024 +3489138,3c028040 +348913c,a0500025 +3489140,8fbf001c +3489144,8fb10018 +3489148,8fb00014 +348914c,3e00008 +3489150,27bd0020 +3489154,3c028041 +3489158,ac404918 +348915c,24424918 +3489160,ac400004 +3489164,3c028041 +3489168,ac404914 +348916c,3c028041 +3489170,ac404910 +3489174,3c028041 +3489178,ac40490c +348917c,3c028041 +3489180,ac404908 +3489184,3c028041 +3489188,ac404904 +348918c,3c028041 +3489190,ac404900 +3489194,3c028041 +3489198,3e00008 +348919c,ac4048fc +34891a0,8c830000 +34891a4,3c0200ff +34891a8,3442ffff +34891ac,621824 +34891b0,3c020005 +34891b4,244200ff +34891b8,1062001f +34891bc,3c028040 +34891c0,8c42002c +34891c4,1440000b +34891c8,3c028041 +34891cc,94830004 +34891d0,3c028040 +34891d4,a4430030 +34891d8,90830006 +34891dc,3c028040 +34891e0,a4430032 +34891e4,8c830000 +34891e8,3c028040 +34891ec,3e00008 +34891f0,ac43002c +34891f4,24424988 +34891f8,1825 +34891fc,24060008 +3489200,8c450000 +3489204,54a0000a +3489208,24630001 +348920c,318c0 +3489210,3c028041 +3489214,24424988 +3489218,621821 +348921c,8c850000 +3489220,8c820004 +3489224,ac650000 +3489228,3e00008 +348922c,ac620004 +3489230,1466fff3 +3489234,24420008 +3489238,3e00008 +3489240,3c028040 +3489244,8c42002c +3489248,14400018 +348924c,3c028041 +3489250,24454988 +3489254,94a40004 +3489258,3c038040 +348925c,a4640030 +3489260,90a40006 +3489264,3c038040 +3489268,a4640032 +348926c,8c434988 +3489270,3c028040 +3489274,ac43002c +3489278,a01025 +348927c,24a50038 +3489280,8c440008 +3489284,8c43000c +3489288,ac440000 +348928c,ac430004 +3489290,24420008 +3489294,5445fffb +3489298,8c440008 +348929c,3c028041 +34892a0,24424988 +34892a4,ac400038 +34892a8,ac40003c +34892ac,3e00008 +34892b4,afa40000 +34892b8,afa50004 +34892bc,24030030 +34892c0,3c058011 +34892c4,34a5a5d0 +34892c8,24060036 +34892cc,310c0 +34892d0,431023 +34892d4,21080 +34892d8,a21021 +34892dc,8c4200e4 +34892e0,14400010 +34892e8,3c058011 +34892ec,34a5a5d0 +34892f0,310c0 +34892f4,431023 +34892f8,21080 +34892fc,a21021 +3489300,ac4400e4 +3489304,24630001 +3489308,310c0 +348930c,431023 +3489310,21080 +3489314,a22821 +3489318,8fa20004 +348931c,3e00008 +3489320,aca200e4 +3489324,10440003 +3489328,24630002 +348932c,1466ffe8 +3489330,310c0 +3489334,3e00008 +348933c,3c028040 +3489340,94420028 +3489344,10400013 +3489348,2403ffff +348934c,27bdffe0 +3489350,afbf001c +3489354,a3a00017 +3489358,a3a30010 +348935c,24030005 +3489360,a3a30011 +3489364,240300ff +3489368,a7a30012 +348936c,3c038040 +3489370,94630026 +3489374,a3a30016 +3489378,a7a20014 +348937c,8fa40010 +3489380,c1024ad +3489384,8fa50014 +3489388,8fbf001c +348938c,3e00008 +3489390,27bd0020 +3489394,3e00008 +348939c,27bdffe0 +34893a0,afbf001c +34893a4,3c05ff05 +34893a8,a42825 +34893ac,c102376 +34893b0,27a40010 +34893b4,8fa20010 +34893b8,10400005 +34893bc,8fbf001c +34893c0,402025 +34893c4,c1024ad +34893c8,8fa50014 +34893cc,8fbf001c +34893d0,3e00008 +34893d4,27bd0020 +34893d8,3c028011 +34893dc,3442a5d0 +34893e0,8c43065c +34893e4,ac430624 +34893e8,8c430678 +34893ec,ac430640 +34893f0,8c430694 +34893f4,ac43065c +34893f8,8c4306b0 +34893fc,ac430678 +3489400,ac400694 +3489404,3e00008 +3489408,ac4006b0 +348940c,801825 +3489410,3c0200ff +3489414,3442ffff +3489418,822024 +348941c,3c020005 +3489420,244200ff +3489424,1482000b +3489428,27bdfff8 +348942c,3c028011 +3489430,3442a660 +3489434,94430000 +3489438,24630001 +348943c,a4430000 +3489440,3c028040 +3489444,a4400028 +3489448,3c028040 +348944c,10000009 +3489450,a4400026 +3489454,3c025700 +3489458,24420058 +348945c,14620005 +3489460,3c02801c +3489464,344284a0 +3489468,8c431d38 +348946c,34630001 +3489470,ac431d38 +3489474,3e00008 +3489478,27bd0008 +348947c,27bdffe8 +3489480,afbf0014 +3489484,afb00010 +3489488,3c028011 +348948c,3442a5d0 +3489490,8c500624 +3489494,8c420640 +3489498,2403ff00 +348949c,431024 +34894a0,3c03007c +34894a4,14430008 +34894a8,8fbf0014 +34894ac,c102aad +34894b4,c1024f6 +34894bc,c102503 +34894c0,2002025 +34894c4,8fbf0014 +34894c8,8fb00010 +34894cc,3e00008 +34894d0,27bd0018 +34894d4,27bdffe8 +34894d8,afbf0014 +34894dc,afb00010 +34894e0,3c028041 +34894e4,8c504918 +34894e8,12000015 +34894ec,3c028040 +34894f0,9042002a +34894f4,14400004 +34894f8,3c028041 +34894fc,8c424914 +3489500,10400005 +3489504,3c028011 +3489508,3c048041 +348950c,c102468 +3489510,24844918 +3489514,3c028011 +3489518,3442a5d0 +348951c,8c420624 +3489520,16020003 +3489528,c1024f6 +3489530,c102503 +3489534,2002025 +3489538,c102455 +3489540,8fbf0014 +3489544,8fb00010 +3489548,3e00008 +348954c,27bd0018 +3489550,27bdffe0 +3489554,afbf001c +3489558,3c028011 +348955c,3442a5d0 +3489560,8c440624 +3489564,8c420640 +3489568,1080000d +348956c,afa20014 +3489570,afa40010 +3489574,c10241c +3489578,402825 +348957c,3c02801d +3489580,3442aa30 +3489584,3c038041 +3489588,8c634924 +348958c,ac430428 3489590,3c038041 -3489594,8c68b5ac -3489598,25080400 -348959c,3c038041 -34895a0,8c63b5b0 -34895a4,5825 -34895a8,3c0aff00 -34895ac,254a0fff -34895b0,30c60fff -34895b4,240df000 -34895b8,3c098041 -34895bc,2529a438 -34895c0,240c0001 -34895c4,68202b -34895c8,54800005 -34895cc,a0620000 -34895d0,11600014 -34895d4,3c028041 -34895d8,3e00008 -34895dc,ac43b5b0 -34895e0,30a40fff -34895e4,42300 -34895e8,8c620000 -34895ec,4a1024 -34895f0,441025 -34895f4,4d1024 -34895f8,461025 -34895fc,ac620000 -3489600,24630004 -3489604,95220004 -3489608,a22821 -348960c,24e70001 -3489610,80e2ffff -3489614,1440ffeb -3489618,1805825 -348961c,3c028041 -3489620,ac43b5b0 -3489624,3e00008 -348962c,27bdffb8 -3489630,afbf0044 -3489634,afbe0040 -3489638,afb7003c -348963c,afb60038 -3489640,afb50034 -3489644,afb40030 -3489648,afb3002c -348964c,afb20028 -3489650,afb10024 -3489654,afb00020 -3489658,80a825 -348965c,b025 -3489660,9025 -3489664,3c138041 -3489668,2673a438 -348966c,3c178041 -3489670,3c148041 -3489674,3c1e38e3 -3489678,24070012 -348967c,2c03025 -3489680,2602825 -3489684,c101bdf -3489688,2a02025 -348968c,8ef0b5ac -3489690,8e82b5b0 -3489694,202102b -3489698,50400026 -348969c,26520001 -34896a0,37d18e39 -34896a4,82020000 -34896a8,2002825 -34896ac,2442ffe0 -34896b0,510018 -34896b4,1810 -34896b8,31883 -34896bc,227c3 -34896c0,641823 -34896c4,14720016 -34896c8,26100004 -34896cc,8ca70000 -34896d0,73b02 -34896d4,510018 -34896d8,1810 -34896dc,31883 -34896e0,641823 -34896e4,330c0 -34896e8,c33021 -34896ec,63040 -34896f0,96630006 -34896f4,afa30018 -34896f8,96630004 -34896fc,afa30014 -3489700,8ca30000 -3489704,30630fff -3489708,afa30010 -348970c,30e70fff -3489710,463023 -3489714,2602825 -3489718,c101c47 -348971c,2a02025 -3489720,8e82b5b0 -3489724,202102b -3489728,5440ffdf -348972c,82020000 -3489730,26520001 -3489734,24020006 -3489738,1642ffcf -348973c,26d60012 -3489740,3c028041 -3489744,8c43b5ac -3489748,3c028041 -348974c,ac43b5b0 -3489750,8fbf0044 -3489754,8fbe0040 -3489758,8fb7003c -348975c,8fb60038 -3489760,8fb50034 -3489764,8fb40030 -3489768,8fb3002c -348976c,8fb20028 -3489770,8fb10024 -3489774,8fb00020 -3489778,3e00008 -348977c,27bd0048 -3489780,3c028041 -3489784,24030001 -3489788,ac43b5b8 -348978c,3c038041 -3489790,8c62b5bc -3489794,2c440006 -3489798,50800001 -348979c,24020005 -34897a0,3e00008 -34897a4,ac62b5bc -34897a8,27bdffb8 -34897ac,afbf0044 -34897b0,afbe0040 -34897b4,afb6003c -34897b8,afb50038 -34897bc,afb40034 -34897c0,afb30030 -34897c4,afb2002c -34897c8,afb10028 -34897cc,afb00024 -34897d0,3a0f025 -34897d4,3c028041 -34897d8,9442b5b4 -34897dc,10400133 -34897e0,3a0a825 -34897e4,3c02801d -34897e8,3442aa30 -34897ec,8c42066c -34897f0,3c033000 -34897f4,24630483 -34897f8,431024 -34897fc,1440012b -3489800,808025 -3489804,3c02801c -3489808,344284a0 -348980c,8c430008 -3489810,3c02800f -3489814,8c4213ec -3489818,54620125 -348981c,2a0e825 -3489820,3c028011 -3489824,3442a5d0 -3489828,8c47135c -348982c,14e0011f -3489830,3c02800e -3489834,3442f1b0 -3489838,8c420000 -348983c,30420020 -3489840,1440011a -3489844,3c028041 -3489848,8c43b5b8 -348984c,24020001 -3489850,1062000a -3489854,3c02801c -3489858,344284a0 -348985c,3c030001 -3489860,431021 -3489864,94430934 -3489868,24020006 -348986c,54620110 -3489870,2a0e825 -3489874,10000009 -3489878,3c038041 -348987c,344284a0 -3489880,3c030001 -3489884,431021 -3489888,94430934 -348988c,24020006 -3489890,14620007 -3489894,3c028041 -3489898,3c038041 -348989c,8c62b5bc -34898a0,3042001f -34898a4,ac62b5bc -34898a8,10000022 -34898ac,241300ff -34898b0,8c42b5bc -34898b4,2c430006 -34898b8,1060000a -34898bc,2c43006a -34898c0,29a00 -34898c4,2629823 -34898c8,3c02cccc -34898cc,3442cccd -34898d0,2620019 -34898d4,9810 -34898d8,139882 -34898dc,10000015 -34898e0,327300ff -34898e4,14600013 -34898e8,241300ff -34898ec,2c4300ba -34898f0,1060000b -34898f4,21a00 -34898f8,621023 -34898fc,24429769 -3489900,3c03cccc -3489904,3463cccd -3489908,430019 -348990c,1010 -3489910,29982 -3489914,139827 -3489918,10000006 -348991c,327300ff -3489920,3c028041 -3489924,ac40b5b8 -3489928,3c028041 -348992c,100000df -3489930,ac40b5bc -3489934,3c038041 -3489938,8c62b5bc -348993c,24420001 -3489940,ac62b5bc -3489944,3c028011 -3489948,3442a5d0 -348994c,8c4808c4 -3489950,19000011 -3489954,1001025 -3489958,e05025 -348995c,3c056666 -3489960,24a56667 -3489964,254a0001 -3489968,401825 -348996c,450018 -3489970,2010 -3489974,42083 -3489978,217c3 -348997c,2863000a -3489980,1060fff8 -3489984,821023 -3489988,15400005 -348998c,3c028041 -3489990,10000002 -3489994,240a0001 -3489998,240a0001 -348999c,3c028041 -34899a0,9445b552 -34899a4,18a00010 -34899a8,a01025 -34899ac,3c066666 -34899b0,24c66667 -34899b4,24e70001 -34899b8,401825 -34899bc,460018 -34899c0,2010 -34899c4,42083 -34899c8,217c3 -34899cc,2863000a -34899d0,1060fff8 -34899d4,821023 -34899d8,54e00005 -34899dc,1473821 -34899e0,10000002 -34899e4,24070001 -34899e8,24070001 -34899ec,1473821 -34899f0,24f40001 -34899f4,3c028041 -34899f8,2442a438 -34899fc,94430004 -3489a00,740018 -3489a04,2012 -3489a08,3c038041 -3489a0c,2463a418 -3489a10,94660004 -3489a14,862021 -3489a18,497c2 -3489a1c,2449021 -3489a20,129043 -3489a24,129023 -3489a28,265200a0 -3489a2c,94420006 -3489a30,44820000 -3489a38,46800021 -3489a3c,3c028041 -3489a40,d446a250 -3489a44,46260002 -3489a48,3c028041 -3489a4c,d442a258 -3489a50,46201001 -3489a54,3c028041 -3489a58,d444a260 -3489a5c,46240000 -3489a60,4620000d -3489a64,44060000 -3489a68,94620006 -3489a6c,44820000 -3489a74,46800021 -3489a78,46260002 -3489a7c,46201081 -3489a80,3c028041 -3489a84,d440a268 -3489a88,46201080 -3489a8c,46241080 -3489a90,4620100d -3489a94,44110000 -3489a98,24e20009 -3489a9c,210c2 -3489aa0,210c0 -3489aa4,3a2e823 -3489aa8,27a40020 -3489aac,941021 -3489ab0,19400015 -3489ab4,a0400000 -3489ab8,2549ffff -3489abc,894821 -3489ac0,806025 -3489ac4,3c0b6666 -3489ac8,256b6667 -3489acc,10b0018 -3489ad0,1810 -3489ad4,31883 -3489ad8,817c3 -3489adc,621823 -3489ae0,31080 -3489ae4,431021 -3489ae8,21040 -3489aec,1021023 -3489af0,24420030 -3489af4,a1220000 -3489af8,604025 -3489afc,1201025 -3489b00,144cfff2 -3489b04,2529ffff -3489b08,8a1021 -3489b0c,2403002f -3489b10,a0430000 -3489b14,147102a -3489b18,10400012 -3489b1c,873821 -3489b20,8a5021 -3489b24,3c086666 -3489b28,25086667 -3489b2c,a80018 -3489b30,1810 -3489b34,31883 -3489b38,517c3 -3489b3c,621823 -3489b40,31080 -3489b44,431021 -3489b48,21040 -3489b4c,a21023 -3489b50,24420030 -3489b54,a0e20000 -3489b58,24e7ffff -3489b5c,14eafff3 -3489b60,602825 -3489b64,8e020008 -3489b68,24430008 -3489b6c,ae030008 -3489b70,3c03de00 -3489b74,ac430000 -3489b78,3c038041 -3489b7c,2463a488 -3489b80,ac430004 -3489b84,8e020008 -3489b88,24430008 -3489b8c,ae030008 -3489b90,3c03e700 -3489b94,ac430000 -3489b98,ac400004 -3489b9c,8e020008 -3489ba0,24430008 -3489ba4,ae030008 -3489ba8,3c03fc11 -3489bac,34639623 -3489bb0,ac430000 -3489bb4,3c03ff2f -3489bb8,3463ffff -3489bbc,ac430004 -3489bc0,8e030008 -3489bc4,24620008 -3489bc8,ae020008 -3489bcc,3c16fa00 -3489bd0,ac760000 -3489bd4,3c02dad3 -3489bd8,24420b00 -3489bdc,2621025 -3489be0,ac620004 -3489be4,c102561 -3489be8,2402825 -3489bec,3c028041 -3489bf0,9442a43c -3489bf4,540018 -3489bf8,a012 -3489bfc,292a021 -3489c00,8e020008 -3489c04,24430008 -3489c08,ae030008 -3489c0c,ac560000 -3489c10,3c03f4ec -3489c14,24633000 -3489c18,2639825 -3489c1c,ac530004 -3489c20,3c028041 -3489c24,8c46b5bc -3489c28,63042 -3489c2c,24070001 -3489c30,30c6000f -3489c34,3c128041 -3489c38,2645a418 -3489c3c,c101bdf -3489c40,2002025 -3489c44,2645a418 -3489c48,94a20006 -3489c4c,afa20018 -3489c50,94a20004 -3489c54,afa20014 -3489c58,afb10010 -3489c5c,2803825 -3489c60,3025 -3489c64,c101c47 -3489c68,2002025 -3489c6c,c10258b -3489c70,2002025 -3489c74,8e020008 -3489c78,24430008 -3489c7c,ae030008 -3489c80,3c03e900 -3489c84,ac430000 -3489c88,ac400004 -3489c8c,8e020008 -3489c90,24430008 -3489c94,ae030008 -3489c98,3c03df00 -3489c9c,ac430000 -3489ca0,ac400004 -3489ca4,10000002 -3489ca8,2a0e825 -3489cac,2a0e825 -3489cb0,3c0e825 -3489cb4,8fbf0044 -3489cb8,8fbe0040 -3489cbc,8fb6003c -3489cc0,8fb50038 -3489cc4,8fb40034 -3489cc8,8fb30030 -3489ccc,8fb2002c -3489cd0,8fb10028 -3489cd4,8fb00024 -3489cd8,3e00008 -3489cdc,27bd0048 -3489ce0,3c028040 -3489ce4,a040306c -3489ce8,3c028040 -3489cec,3e00008 -3489cf0,ac403070 -3489cf4,3c038041 -3489cf8,3c028050 -3489cfc,24420000 -3489d00,3e00008 -3489d04,ac62b5c0 -3489d08,3082000f -3489d0c,10400009 -3489d10,3c038041 -3489d14,417c3 -3489d18,21702 -3489d1c,821821 -3489d20,3063000f -3489d24,431023 -3489d28,24420010 -3489d2c,822021 -3489d30,3c038041 -3489d34,8c62b5c0 -3489d38,442021 -3489d3c,3e00008 -3489d40,ac64b5c0 -3489d44,27bdffe8 -3489d48,afbf0014 -3489d4c,afb00010 -3489d50,808025 -3489d54,c102742 -3489d58,8c840008 -3489d5c,402025 -3489d60,ae020000 -3489d64,8e060008 -3489d68,3c028000 -3489d6c,24420df0 -3489d70,40f809 -3489d74,8e050004 -3489d78,8fbf0014 -3489d7c,8fb00010 -3489d80,3e00008 -3489d84,27bd0018 -3489d88,3c02800f -3489d8c,a0401640 -3489d90,3c028041 -3489d94,a040b5c4 -3489d98,3c028011 -3489d9c,3442a5d0 -3489da0,8c420004 -3489da4,14400086 -3489da8,3c028011 -3489dac,3442a5d0 -3489db0,8c421360 -3489db4,2c420004 -3489db8,10400081 -3489dbc,3c028011 -3489dc0,3442a5d0 -3489dc4,8c420000 -3489dc8,240301fd -3489dcc,14430005 -3489dd0,3c038011 -3489dd4,3c02800f -3489dd8,24030001 -3489ddc,3e00008 -3489de0,a0431640 -3489de4,3463a5d0 -3489de8,94630ed6 -3489dec,30630100 -3489df0,1460000a -3489df4,3c038011 -3489df8,24030157 -3489dfc,10430003 -3489e00,240301f9 -3489e04,14430005 -3489e08,3c038011 -3489e0c,3c02800f -3489e10,24030002 -3489e14,3e00008 -3489e18,a0431640 -3489e1c,3463a5d0 -3489e20,94630edc -3489e24,30640400 -3489e28,54800016 -3489e2c,3c028011 -3489e30,240404da -3489e34,10440005 -3489e38,2404ffbf -3489e3c,441024 -3489e40,2404019d -3489e44,14440005 -3489e48,3c02801c -3489e4c,3c02800f -3489e50,24030003 -3489e54,3e00008 -3489e58,a0431640 -3489e5c,344284a0 -3489e60,944200a4 -3489e64,2442ffa8 -3489e68,2c420002 -3489e6c,10400005 -3489e70,3c028011 -3489e74,3c02800f -3489e78,24030003 -3489e7c,3e00008 -3489e80,a0431640 -3489e84,3442a5d0 -3489e88,8c4200a4 -3489e8c,30420007 -3489e90,24040007 -3489e94,5444001f -3489e98,30630200 -3489e9c,3c028011 -3489ea0,3442a5d0 -3489ea4,8c42037c -3489ea8,30420002 -3489eac,54400019 -3489eb0,30630200 -3489eb4,3c02801c -3489eb8,344284a0 -3489ebc,944200a4 -3489ec0,2442ffae -3489ec4,2c420002 -3489ec8,50400012 -3489ecc,30630200 +3489594,8c634910 +3489598,80630000 +348959c,a0430424 +34895a0,8fbf001c +34895a4,3e00008 +34895a8,27bd0020 +34895ac,27bdffe8 +34895b0,afbf0014 +34895b4,c102490 +34895bc,c1024cf +34895c4,3c02801d +34895c8,3442aa30 +34895cc,8c42066c +34895d0,3c03fcac +34895d4,24632485 +34895d8,431024 +34895dc,1440003d +34895e0,3c028041 +34895e4,3c02801d +34895e8,3442aa30 +34895ec,94420088 +34895f0,30420001 +34895f4,10400034 +34895f8,1025 +34895fc,3c02801d +3489600,3442aa30 +3489604,8c420670 +3489608,3c03000c +348960c,431024 +3489610,1440002d +3489614,1025 +3489618,3c02800e +348961c,3442f1b0 +3489620,8c420000 +3489624,30420020 +3489628,14400027 +348962c,1025 +3489630,3c02801c +3489634,344284a0 +3489638,8c420794 +348963c,14400022 +3489640,1025 +3489644,3c028041 +3489648,904248fa +348964c,24420001 +3489650,304200ff +3489654,2c430002 +3489658,1460001c +348965c,3c038041 +3489660,3c028041 +3489664,c10251f +3489668,a04048fa +348966c,c102aa8 +3489674,1040000f +3489678,3c02801c +348967c,344284a0 +3489680,944300a4 +3489684,24020010 +3489688,14620006 +348968c,3c02801c +3489690,344284a0 +3489694,8c421d38 +3489698,30420400 +348969c,10400005 +34896a4,c102ab3 +34896ac,1000000b +34896b0,8fbf0014 +34896b4,c102554 +34896bc,10000007 +34896c0,8fbf0014 +34896c4,1025 +34896c8,3c038041 +34896cc,10000002 +34896d0,a06248fa +34896d4,a04048fa +34896d8,8fbf0014 +34896dc,3e00008 +34896e0,27bd0018 +34896e4,27bdffd8 +34896e8,afbf0024 +34896ec,afb20020 +34896f0,afb1001c +34896f4,afb00018 +34896f8,a09025 +34896fc,10800012 +3489700,c08825 +3489704,10c00010 +3489708,808025 +348970c,4c10004 +3489710,c03825 +3489714,63823 +3489718,73e00 +348971c,73e03 +3489720,30e700ff +3489724,3c02801c +3489728,344284a0 +348972c,904600a5 +3489730,2002825 +3489734,c102409 +3489738,27a40010 +348973c,8fa20010 +3489740,14400005 +3489744,8fa40010 +3489748,c102455 +3489750,10000023 +3489754,2201025 +3489758,c10241c +348975c,8fa50014 +3489760,3c028041 +3489764,8c424910 +3489768,86040000 +348976c,2403000a +3489770,14830016 +3489774,80420000 +3489778,8fa30014 +348977c,2404ff00 +3489780,641824 +3489784,3c04007c +3489788,5464000c +348978c,9603001c +3489790,3c038040 +3489794,90630d6b +3489798,54600007 +348979c,2402007c +34897a0,3c038041 +34897a4,8c6348fc +34897a8,54600003 +34897ac,2402007c +34897b0,10000002 +34897b4,9603001c +34897b8,9603001c +34897bc,3063f01f +34897c0,22140 +34897c4,641825 +34897c8,a603001c +34897cc,6230005 +34897d0,a2420424 +34897d4,21023 +34897d8,21600 +34897dc,21603 +34897e0,a2420424 +34897e4,8fbf0024 +34897e8,8fb20020 +34897ec,8fb1001c +34897f0,8fb00018 +34897f4,3e00008 +34897f8,27bd0028 +34897fc,3c028041 +3489800,3e00008 +3489804,ac4048f0 +3489808,3c028041 +348980c,904a4bc8 +3489810,11400037 +3489814,24070001 +3489818,244b4bc8 +348981c,24e20002 +3489820,3042ffff +3489824,24e30001 +3489828,3063ffff +348982c,6b1821 +3489830,eb4021 +3489834,91080000 +3489838,15040021 +348983c,90630000 +3489840,10600024 +3489844,2463ffff +3489848,306300ff +348984c,34040 +3489850,1031821 +3489854,24e70005 +3489858,671821 +348985c,3067ffff +3489860,4b1821 +3489864,90630000 +3489868,404825 +348986c,24420003 +3489870,3068003f +3489874,1505000e +3489878,3042ffff +348987c,31982 +3489880,1466000b +3489884,3c038041 +3489888,25220001 +348988c,3042ffff +3489890,24634bc8 +3489894,431021 +3489898,90430000 +348989c,31a00 +34898a0,90420001 +34898a4,621021 +34898a8,3e00008 +34898ac,3042ffff +34898b0,1447ffec +34898b4,4b1821 +34898b8,10000008 +34898bc,254affff +34898c0,33840 +34898c4,671821 +34898c8,431821 +34898cc,10000002 +34898d0,3067ffff +34898d4,403825 +34898d8,254affff +34898dc,314a00ff +34898e0,5540ffcf +34898e4,24e20002 +34898e8,3e00008 +34898ec,3402ffff +34898f0,3e00008 +34898f4,3402ffff +34898f8,27bdffe0 +34898fc,afbf001c +3489900,afb10018 +3489904,afb00014 +3489908,9483001c +348990c,2462fffa +3489910,3042ffff +3489914,2c420002 +3489918,54400005 +348991c,94850140 +3489920,24020011 +3489924,54620009 +3489928,8c84019c +348992c,94850140 +3489930,3c04801c +3489934,3c028002 +3489938,244206e8 +348993c,40f809 +3489940,348484a0 +3489944,1000001a +3489948,2102a +348994c,10800018 +3489950,24020001 +3489954,309100ff +3489958,12200015 +348995c,3090ffff +3489960,102a03 +3489964,103382 +3489968,30a5003f +348996c,c102602 +3489970,42602 +3489974,401825 +3489978,3404ffff +348997c,1064000c +3489980,24020001 +3489984,1188c2 +3489988,3c028041 +348998c,8c4248f4 +3489990,431021 +3489994,511021 +3489998,90420000 +348999c,32100007 +34899a0,24030001 +34899a4,2031804 +34899a8,431024 +34899ac,2102b +34899b0,8fbf001c +34899b4,8fb10018 +34899b8,8fb00014 +34899bc,3e00008 +34899c0,27bd0020 +34899c4,8c84019c +34899c8,1080001f +34899d0,27bdffe0 +34899d4,afbf001c +34899d8,afb10018 +34899dc,afb00014 +34899e0,309000ff +34899e4,12000013 +34899e8,3091ffff +34899ec,112a03 +34899f0,113382 +34899f4,30a5003f +34899f8,c102602 +34899fc,42602 +3489a00,3403ffff +3489a04,1043000b +3489a08,1080c2 +3489a0c,2028021 +3489a10,3c028041 +3489a14,8c4348f4 +3489a18,701821 +3489a1c,32310007 +3489a20,24020001 +3489a24,2221004 +3489a28,90640000 +3489a2c,441025 +3489a30,a0620000 +3489a34,8fbf001c +3489a38,8fb10018 +3489a3c,8fb00014 +3489a40,3e00008 +3489a44,27bd0020 +3489a48,3e00008 +3489a50,27bdffe8 +3489a54,afbf0014 +3489a58,afb00010 +3489a5c,8c82019c +3489a60,10400005 +3489a64,808025 +3489a68,c10263e +3489a70,1040000d +3489a74,8fbf0014 +3489a78,240200dc +3489a7c,a602014a +3489a80,9602001c +3489a84,24030011 +3489a88,10430006 +3489a8c,2442fffa +3489a90,3042ffff +3489a94,2c420002 +3489a98,14400002 +3489a9c,2402ffff +3489aa0,a2020003 +3489aa4,8fbf0014 +3489aa8,8fb00010 +3489aac,3e00008 +3489ab0,27bd0018 +3489ab4,27bdffd0 +3489ab8,afbf002c +3489abc,afb00028 +3489ac0,97a20056 +3489ac4,afa20024 +3489ac8,97a20052 +3489acc,afa20020 +3489ad0,3c108041 +3489ad4,96024920 +3489ad8,afa2001c +3489adc,97a2004a +3489ae0,afa20018 +3489ae4,c7a00044 +3489ae8,e7a00014 +3489aec,c7a00040 +3489af0,3c028002 +3489af4,24425110 +3489af8,40f809 +3489afc,e7a00010 +3489b00,a6004920 +3489b04,8fbf002c +3489b08,8fb00028 +3489b0c,3e00008 +3489b10,27bd0030 +3489b14,27bdfe38 +3489b18,afbf01c4 +3489b1c,afb001c0 +3489b20,3c028041 +3489b24,94424920 +3489b28,14400009 +3489b2c,808025 +3489b30,3c028040 +3489b34,9442448c +3489b38,10400006 +3489b3c,24030015 +3489b40,80830003 +3489b44,31a00 +3489b48,431025 +3489b4c,3042ffff +3489b50,24030015 +3489b54,a7a30010 +3489b58,a7a20026 +3489b5c,a7a0002c +3489b60,3825 +3489b64,3c02801c +3489b68,344284a0 +3489b6c,904600a5 +3489b70,27a50010 +3489b74,c102409 +3489b78,27a401b8 +3489b7c,8fa201b8 +3489b80,ae02019c +3489b84,8fa201bc +3489b88,ae0201a0 +3489b8c,c10263e +3489b90,2002025 +3489b94,50400004 +3489b98,8e02019c +3489b9c,ae00019c +3489ba0,ae0001a0 +3489ba4,8e02019c +3489ba8,1440000e +3489bac,3c04801c +3489bb0,96050140 +3489bb4,3c028002 +3489bb8,244206e8 +3489bbc,40f809 +3489bc0,348484a0 +3489bc4,10400009 +3489bc8,8fbf01c4 +3489bcc,3c028002 +3489bd0,24420eb4 +3489bd4,40f809 +3489bd8,2002025 +3489bdc,10000002 +3489be0,24020001 +3489be4,1025 +3489be8,8fbf01c4 +3489bec,8fb001c0 +3489bf0,3e00008 +3489bf4,27bd01c8 +3489bf8,27bdfe30 +3489bfc,afbf01cc +3489c00,afb101c8 +3489c04,afb001c4 +3489c08,808025 +3489c0c,24020015 +3489c10,a7a20010 +3489c14,3c028041 +3489c18,94424920 +3489c1c,a7a20026 +3489c20,3091ffff +3489c24,a7b1002c +3489c28,3825 +3489c2c,3c02801c +3489c30,344284a0 +3489c34,904600a5 +3489c38,27a50010 +3489c3c,c102409 +3489c40,27a401b8 +3489c44,8fa201b8 +3489c48,afa201ac +3489c4c,8fa301bc +3489c50,1040000d +3489c54,afa301b0 +3489c58,c10263e +3489c5c,27a40010 +3489c60,1440000a +3489c64,3c028011 +3489c68,2e220019 +3489c6c,10400051 +3489c70,3c0301e2 +3489c74,246300c0 +3489c78,2231806 +3489c7c,30630001 +3489c80,10600062 +3489c84,1025 +3489c88,3c028011 +3489c8c,3442a5d0 +3489c90,8c420004 +3489c94,54400008 +3489c98,2631fff8 +3489c9c,24020010 +3489ca0,12020019 +3489ca4,2402000d +3489ca8,56020008 +3489cac,24020004 +3489cb0,10000052 +3489cb4,1025 +3489cb8,3231ffff +3489cbc,2e310003 +3489cc0,16200050 +3489cc4,24020010 +3489cc8,24020004 +3489ccc,12020043 +3489cd0,24020019 +3489cd4,12020042 +3489cd8,3c028011 +3489cdc,2402000b +3489ce0,1202003f +3489ce4,3c028011 +3489ce8,3203ffff +3489cec,2462fff8 +3489cf0,3042ffff +3489cf4,2c420003 +3489cf8,54400005 +3489cfc,3c028011 +3489d00,1000000a +3489d04,2001025 +3489d08,24100008 +3489d0c,3c028011 +3489d10,3442a5d0 +3489d14,80430077 +3489d18,2402ffff +3489d1c,1062003c +3489d20,8fbf01cc +3489d24,10000039 +3489d28,2001025 +3489d2c,2463fff2 +3489d30,3063ffff +3489d34,2c630002 +3489d38,10600008 +3489d3c,24030010 +3489d40,3c038011 +3489d44,3463a5d0 +3489d48,90630032 +3489d4c,54600030 +3489d50,8fbf01cc +3489d54,10000019 +3489d58,2402ffff +3489d5c,14430008 +3489d60,3c038011 +3489d64,3463a5d0 +3489d68,8064007a +3489d6c,2403ffff +3489d70,54830027 +3489d74,8fbf01cc +3489d78,10000012 +3489d7c,2402ffff +3489d80,24030003 +3489d84,14430021 +3489d88,3c038011 +3489d8c,3463a5d0 +3489d90,8464002e +3489d94,84630030 +3489d98,1083000c +3489d9c,3c038040 +3489da0,90630d6a +3489da4,2c630001 +3489da8,31823 +3489dac,10000017 +3489db0,431024 +3489db4,10000015 +3489db8,1025 +3489dbc,10000014 +3489dc0,8fbf01cc +3489dc4,10000012 +3489dc8,8fbf01cc +3489dcc,1000000f +3489dd0,1025 +3489dd4,1000ffd5 +3489dd8,2001025 +3489ddc,3c028011 +3489de0,3442a5d0 +3489de4,80430076 +3489de8,2402ffff +3489dec,1462fff9 +3489df0,3203ffff +3489df4,10000006 +3489df8,8fbf01cc +3489dfc,1000ffcb +3489e00,3043ffff +3489e04,1000ffc9 +3489e08,3043ffff +3489e0c,8fbf01cc +3489e10,8fb101c8 +3489e14,8fb001c4 +3489e18,3e00008 +3489e1c,27bd01d0 +3489e20,27bdffe8 +3489e24,afbf0014 +3489e28,afb00010 +3489e2c,14a00011 +3489e30,c02025 +3489e34,3c028040 +3489e38,9042002a +3489e3c,10400003 +3489e40,e08025 +3489e44,c102468 +3489e4c,92050001 +3489e50,3c04801c +3489e54,3c028006 +3489e58,3442fdcc +3489e5c,40f809 +3489e60,348484a0 +3489e64,c103513 +3489e68,2002025 +3489e6c,10000004 +3489e70,8fbf0014 +3489e74,c102468 +3489e7c,8fbf0014 +3489e80,8fb00010 +3489e84,3e00008 +3489e88,27bd0018 +3489e8c,27bdffc8 +3489e90,afbf0034 +3489e94,afb30030 +3489e98,afb2002c +3489e9c,afb10028 +3489ea0,afb00024 +3489ea4,808825 +3489ea8,8cc2019c +3489eac,8cc301a0 +3489eb0,afa20018 +3489eb4,10400006 +3489eb8,afa3001c +3489ebc,c08025 +3489ec0,c10263e +3489ec4,c02025 +3489ec8,5040000c +3489ecc,3c028041 3489ed0,3c028041 -3489ed4,24040002 -3489ed8,a044b5c4 -3489edc,3c028011 -3489ee0,3442a5d0 -3489ee4,8c420000 -3489ee8,24040191 -3489eec,10440008 -3489ef0,24040205 -3489ef4,10440006 -3489ef8,240400db -3489efc,10440004 -3489f00,3c02800f -3489f04,24030005 -3489f08,3e00008 -3489f0c,a0431640 -3489f10,30630200 -3489f14,1460002a -3489f18,3c02801c -3489f1c,344284a0 -3489f20,3c030001 -3489f24,431021 -3489f28,84431e1a -3489f2c,240204d6 -3489f30,14620005 -3489f34,3c02801c -3489f38,3c02800f -3489f3c,24030002 -3489f40,3e00008 -3489f44,a0431640 -3489f48,344284a0 -3489f4c,944200a4 -3489f50,2c430054 -3489f54,50600006 -3489f58,2442ffa0 -3489f5c,2c420052 -3489f60,14400017 -3489f64,3c028041 -3489f68,10000006 -3489f6c,9042b5c4 -3489f70,3042ffff -3489f74,2c420002 -3489f78,10400011 -3489f7c,3c028041 -3489f80,9042b5c4 -3489f84,14400005 -3489f88,3c028011 -3489f8c,3c028041 -3489f90,24030001 -3489f94,a043b5c4 -3489f98,3c028011 -3489f9c,3442a5d0 -3489fa0,8c420000 -3489fa4,240300db -3489fa8,10430005 -3489fac,24030195 -3489fb0,10430003 -3489fb4,3c02800f -3489fb8,24030002 -3489fbc,a0431640 -3489fc0,3e00008 -3489fc8,33c2 -3489fcc,664399c4 -3489fd0,cc45ffc6 -3489fd4,ff47ffc8 -3489fd8,ff49e0ca -3489fdc,c24ba3cc -3489fe0,854d660d -3489fe4,440f2200 -3489fe8,85d1a352 -3489fec,c2d3e045 -3489ff0,1010101 -3489ff4,1010101 -3489ff8,1010101 -3489ffc,1010101 -348a000,1010101 -348a01c,1010000 -348a024,1010101 -348a028,1000101 -348a02c,10101 -348a030,10000 -348a034,2b242525 -348a038,26262626 -348a03c,27272727 -348a040,27272727 -348a044,500080d -348a048,1051508 -348a04c,d01052a -348a050,80d0127 -348a054,f080b01 -348a058,4d510b02 -348a060,97ff6350 -348a064,45ff5028 -348a068,57456397 -348a06c,ff5e45ff -348a070,9f006545 -348a074,ff63ff6c -348a078,45fff063 -348a07c,7345ffff -348a080,ff503aff -348a084,ffff573a -348a088,ffffff5e -348a08c,3affffff -348a090,653affff -348a094,ff6c3aff -348a098,ffff733a -348a09c,5a0c00 -348a0a0,720c0096 -348a0a4,c009618 -348a0a8,1652a00 -348a0ac,4e2a005a -348a0b0,2a000000 -348a0b4,c004e00 -348a0b8,c015a00 -348a0bc,c026600 -348a0c0,c037200 -348a0c4,c047e00 -348a0c8,c058a00 -348a0cc,c064e0c -348a0d0,75a0c -348a0d4,c09660c -348a0d8,a720c -348a0dc,c0c7e0c -348a0e0,c0d8a0c -348a0e4,c0e4e18 -348a0e8,c0f5a18 -348a0ec,c106618 -348a0f0,c117218 -348a0f4,c127e18 -348a0f8,c138a18 -348a0fc,ffff -348a100,ffff -348a104,ffff -348a108,ffff -348a10c,ffff -348a110,ffff -348a114,ffff -348a118,ffff -348a11c,ffff -348a120,ffff -348a124,ffff -348a128,ffff -348a12c,ffff -348a130,ffff -348a134,c3b7e2a -348a138,c3c8a2a -348a13c,c3d962a -348a140,ffff -348a144,c3e7e36 -348a148,b3f8b37 -348a14c,b409737 -348a150,ffff -348a154,c417e42 -348a158,c428a42 -348a15c,c439642 -348a160,ffff -348a164,c447e4f -348a168,c458a4f -348a16c,c46964f -348a170,ffff -348a174,c149600 -348a178,ffff -348a17c,2c061b31 -348a180,2c072931 -348a184,2c083731 -348a188,2a096f51 -348a18c,2c0a722a -348a190,ffff -348a194,2c00370a -348a198,2c01371a -348a19c,2c022922 -348a1a0,2c031b1a -348a1a4,2c041b0a -348a1a8,2c052902 -348a1ac,ffff -348a1b0,ffff -348a1b4,8040a458 -348a1b8,8040a448 -348a1bc,8040a3d8 -348a1c0,c8ff6482 -348a1c4,82ffff64 -348a1c8,64ff5aff -348a1cc,bd1400 -348a1d0,aa0200 -348a1d4,bd1300 -348a1d8,15c6300 -348a1dc,de2f00 -348a1e0,e01010e0 -348a1e4,e01010e0 -348a1e8,1010e0e0 -348a1ec,1010e0e0 -348a1f0,10e0e010 -348a1f4,10000000 -348a1f8,4d510000 -348a1fc,4e6f726d -348a200,616c0000 -348a204,bdcccccd -348a208,3dcccccd -348a20c,43510000 -348a210,41100000 -348a214,4f000000 -348a218,42080000 -348a21c,c20c0000 -348a220,420c0000 -348a224,3f800000 -348a228,3f000000 -348a22c,41c80000 -348a230,3fa00000 -348a234,40000000 -348a238,40200000 -348a23c,3f800000 -348a240,4f000000 -348a248,41f00000 -348a250,3ff80000 -348a258,406e0000 -348a260,3ff00000 -348a268,40080000 -348a270,80409fc8 -348a274,10203 -348a278,4050607 -348a27c,ffffffff -348a280,ffff0000 -348a284,ff00ff -348a288,3c000064 -348a28c,ffff8200 -348a290,c832ffc8 -348a294,c8000000 -348a298,104465 -348a29c,6b750000 -348a2a4,110446f -348a2a8,646f6e67 -348a2ac,6f000000 -348a2b0,2104a61 -348a2b4,62750000 -348a2bc,3d0466f -348a2c0,72657374 -348a2c8,4d04669 -348a2cc,72650000 -348a2d4,5d05761 -348a2d8,74657200 -348a2e0,7d05368 -348a2e4,61646f77 -348a2ec,6d05370 -348a2f0,69726974 -348a2f8,890426f -348a2fc,74570000 -348a304,9104963 -348a308,65000000 -348a310,ca04869 -348a314,64656f75 -348a318,74000000 -348a31c,b804754 -348a320,47000000 -348a328,dc04761 -348a32c,6e6f6e00 -348a334,2 -348a33c,3f800000 -348a348,1 -348a34c,30006 -348a350,70009 -348a354,b000e -348a358,f0010 -348a35c,110019 -348a360,1a002b -348a364,2c002e -348a368,300032 -348a36c,35003c -348a370,400041 -348a374,460051 -348a378,540109 -348a37c,10b010c -348a380,10e010f -348a384,1100113 -348a38c,1 -348a390,1 -348a394,2 -348a398,1 -348a39c,2 -348a3a0,2 -348a3a4,3 -348a3a8,1 -348a3ac,2 -348a3b0,2 -348a3b4,3 -348a3b8,2 -348a3bc,3 -348a3c0,3 -348a3c4,4 -348a3cc,100010 -348a3d0,a0301 -348a3d4,1000000 -348a3dc,100010 -348a3e0,20002 -348a3e4,2000000 -348a3ec,80008 -348a3f0,a0301 -348a3f4,1000000 -348a3fc,100010 -348a400,30301 -348a404,1000000 -348a40c,100018 -348a410,10301 -348a414,1000000 -348a41c,100010 -348a420,100301 -348a424,1000000 -348a42c,200020 -348a430,10302 -348a434,2000000 -348a43c,8000e -348a440,5f0301 -348a444,1000000 -348a44c,180018 -348a450,140003 -348a454,4000000 -348a45c,200020 -348a460,5a0003 -348a464,4000000 -348a46c,100010 -348a470,60301 -348a474,1000000 -348a47c,100010 -348a480,30003 -348a484,4000000 -348a488,e7000000 -348a490,d9000000 -348a498,ed000000 -348a49c,5003c0 -348a4a0,ef002cf0 -348a4a4,504244 -348a4a8,df000000 -348a4c4,4d8e0032 -348a4c8,ce2001 -348a4cc,80407e00 -348a4d0,80407890 -348a4d4,ffffffff -348a4d8,4d8c0034 -348a4dc,bb1201 -348a4e0,80407c38 -348a4e4,80407890 -348a4e8,ffffffff -348a4ec,4d090033 -348a4f0,d92801 -348a4f4,80407c38 -348a4f8,80407890 -348a4fc,ffffffff -348a500,53030031 -348a504,e93500 -348a508,80407c38 -348a50c,80407890 -348a510,ffffffff -348a514,53060030 -348a518,e73300 -348a51c,80407c38 -348a520,80407890 -348a524,ffffffff -348a528,530e0035 -348a52c,e83400 -348a530,80407c38 -348a534,80407890 -348a538,ffffffff -348a53c,4d000037 -348a540,c71b01 -348a544,80407c38 -348a548,80407890 -348a54c,ffffffff -348a550,530a0036 -348a554,dd2d00 -348a558,80407c38 -348a55c,80407890 -348a560,ffffffff -348a564,530b004f -348a568,dd2e00 -348a56c,80407c38 -348a570,80407890 -348a574,ffffffff -348a578,530f0039 -348a57c,ea3600 -348a580,80407c38 -348a584,80407890 -348a588,ffffffff -348a58c,53230069 -348a590,ef3b00 -348a594,80407c38 -348a598,80407af4 -348a59c,ffffffff -348a5a0,5308003a -348a5a4,de2f00 -348a5a8,80407c38 -348a5ac,80407890 -348a5b0,ffffffff -348a5b4,53110038 -348a5b8,f64100 -348a5bc,80407c38 -348a5c0,80407890 -348a5c4,ffffffff -348a5c8,532f0002 -348a5cc,1095e00 -348a5d0,80407c38 -348a5d4,80407890 -348a5d8,ffffffff -348a5dc,53140042 -348a5e0,c60100 -348a5e4,80407c38 -348a5e8,80407890 -348a5ec,ffffffff -348a5f0,53150043 -348a5f4,eb3800 -348a5f8,80407c38 -348a5fc,80407890 -348a600,ffffffff -348a604,53160044 -348a608,eb3700 -348a60c,80407c38 -348a610,80407890 -348a614,ffffffff -348a618,53170045 -348a61c,eb3900 -348a620,80407c38 -348a624,80407890 -348a628,ffffffff -348a62c,53180046 -348a630,c60100 -348a634,80407c38 -348a638,80407890 -348a63c,ffffffff -348a640,531a0098 -348a644,df3000 -348a648,80407c38 -348a64c,80407890 -348a650,ffffffff -348a654,531b0099 -348a658,10b4500 -348a65c,80407e40 -348a660,80407890 -348a664,ffffffff -348a668,53100048 -348a66c,f33e01 -348a670,80407c38 -348a674,80407890 -348a678,ffffffff -348a67c,53250010 -348a680,1364f00 -348a684,80407c38 -348a688,80407890 -348a68c,ffffffff -348a690,53260011 -348a694,1353200 -348a698,80407c38 -348a69c,80407890 -348a6a0,ffffffff -348a6a4,5322000b -348a6a8,1094400 -348a6ac,80407c38 -348a6b0,80407890 -348a6b4,ffffffff -348a6b8,53240012 -348a6bc,1343100 -348a6c0,80407c38 -348a6c4,80407890 -348a6c8,ffffffff -348a6cc,53270013 -348a6d0,1375000 -348a6d4,80407c38 -348a6d8,80407890 -348a6dc,ffffffff -348a6e0,532b0017 -348a6e4,1385100 -348a6e8,80407c38 -348a6ec,80407890 -348a6f0,ffffffff -348a6f4,532d9001 -348a6f8,da2900 -348a6fc,80407c38 -348a700,80407890 -348a704,ffffffff -348a708,532e000b -348a70c,1094400 -348a710,80407c38 -348a714,80407890 -348a718,ffffffff -348a71c,53300003 -348a720,1415400 -348a724,80407c38 -348a728,80407890 -348a72c,ffffffff -348a730,53310004 -348a734,1405300 -348a738,80407c38 -348a73c,80407890 -348a740,ffffffff -348a744,53320005 -348a748,f54000 -348a74c,80407c38 -348a750,80407890 -348a754,ffffffff -348a758,53330008 -348a75c,1435600 -348a760,80407c38 -348a764,80407890 -348a768,ffffffff -348a76c,53340009 -348a770,1465700 -348a774,80407c38 -348a778,80407890 -348a77c,ffffffff -348a780,5335000d -348a784,1495a00 -348a788,80407c38 -348a78c,80407890 -348a790,ffffffff -348a794,5336000e -348a798,13f5200 -348a79c,80407c38 -348a7a0,80407890 -348a7a4,ffffffff -348a7a8,5337000a -348a7ac,1425500 -348a7b0,80407c38 -348a7b4,80407890 -348a7b8,ffffffff -348a7bc,533b00a4 -348a7c0,18d7400 -348a7c4,80407c38 -348a7c8,80407890 -348a7cc,ffffffff -348a7d0,533d004b -348a7d4,f84300 -348a7d8,80407c38 -348a7dc,80407890 -348a7e0,ffffffff -348a7e4,533e004c -348a7e8,cb1d01 -348a7ec,80407c38 -348a7f0,80407890 -348a7f4,ffffffff -348a7f8,533f004d -348a7fc,dc2c01 -348a800,80407c38 -348a804,80407890 -348a808,ffffffff -348a80c,5340004e -348a810,ee3a00 -348a814,80407c38 -348a818,80407890 -348a81c,ffffffff -348a820,53420050 -348a824,f23c00 -348a828,80407c38 -348a82c,80407890 -348a830,ffffffff -348a834,53430051 -348a838,f23d00 -348a83c,80407c38 -348a840,80407890 -348a844,ffffffff -348a848,53450053 -348a84c,1184700 -348a850,80407c38 -348a854,80407890 -348a858,ffffffff -348a85c,53460054 -348a860,1575f00 -348a864,80407c38 -348a868,80407890 -348a86c,ffffffff -348a870,534b0056 -348a874,be1600 -348a878,80407c38 -348a87c,80407890 -348a880,ffffffff -348a884,534c0057 -348a888,be1700 -348a88c,80407c38 -348a890,80407890 -348a894,ffffffff -348a898,534d0058 -348a89c,bf1800 -348a8a0,80407c38 -348a8a4,80407890 -348a8a8,ffffffff -348a8ac,534e0059 -348a8b0,bf1900 -348a8b4,80407c38 -348a8b8,80407890 -348a8bc,ffffffff -348a8c0,534f005a -348a8c4,bf1a00 -348a8c8,80407c38 -348a8cc,80407890 -348a8d0,ffffffff -348a8d4,5351005b -348a8d8,12d4900 -348a8dc,80407c38 -348a8e0,80407890 -348a8e4,ffffffff -348a8e8,5352005c -348a8ec,12d4a00 -348a8f0,80407c38 -348a8f4,80407890 -348a8f8,ffffffff -348a8fc,535300cd -348a900,db2a00 -348a904,80407c38 -348a908,80407890 -348a90c,ffffffff -348a910,535400ce -348a914,db2b00 -348a918,80407c38 -348a91c,80407890 -348a920,ffffffff -348a924,536f0068 -348a928,c82100 -348a92c,80407c38 -348a930,80407890 -348a934,ffffffff -348a938,5370007b -348a93c,d72400 -348a940,80407c38 -348a944,80407890 -348a948,ffffffff -348a94c,5341004a -348a950,10e4600 -348a954,80407c38 -348a958,80407a70 -348a95c,ffffffff -348a960,4d5800dc -348a964,1194801 -348a968,80407e1c -348a96c,80407890 -348a970,ffffffff -348a974,3d7200c6 -348a978,bd1301 -348a97c,80407c38 -348a980,80407898 -348a984,ffffffff -348a988,3e7a00c2 -348a98c,bd1401 -348a990,80407c38 -348a994,80407898 -348a998,ffffffff -348a99c,537400c7 -348a9a0,b90a02 -348a9a4,80407c38 -348a9a8,80407890 -348a9ac,ffffffff -348a9b0,53750067 -348a9b4,b80b01 -348a9b8,80407c38 -348a9bc,80407890 -348a9c0,ffffffff -348a9c4,53760066 -348a9c8,c81c01 -348a9cc,80407c38 -348a9d0,80407890 -348a9d4,ffffffff -348a9d8,53770060 -348a9dc,aa0203 -348a9e0,80407c38 -348a9e4,80407890 -348a9e8,ffffffff -348a9ec,53780052 -348a9f0,cd1e01 -348a9f4,80407c38 -348a9f8,80407890 -348a9fc,ffffffff -348aa00,53790052 -348aa04,cd1f01 -348aa08,80407c38 -348aa0c,80407890 -348aa10,ffffffff -348aa14,5356005e -348aa18,d12200 -348aa1c,80407c38 -348aa20,80407ac8 -348aa24,1ffff -348aa28,5357005f -348aa2c,d12300 -348aa30,80407c38 -348aa34,80407ac8 -348aa38,2ffff -348aa3c,5321009a -348aa40,da2900 -348aa44,80407c38 -348aa48,80407890 -348aa4c,ffffffff -348aa50,4d830055 -348aa54,b70901 -348aa58,80407c38 -348aa5c,80407890 -348aa60,ffffffff -348aa64,4d9200e6 -348aa68,d82501 -348aa6c,80407de4 -348aa70,80407890 -348aa74,ffffffff -348aa78,4d9300e6 -348aa7c,d82601 -348aa80,80407de4 -348aa84,80407890 -348aa88,ffffffff -348aa8c,4d9400e6 -348aa90,d82701 -348aa94,80407de4 -348aa98,80407890 -348aa9c,ffffffff -348aaa0,4d84006f -348aaa4,17f6d01 -348aaa8,80407c38 -348aaac,80407890 -348aab0,ffffffff -348aab4,4d8500cc -348aab8,17f6e01 -348aabc,80407c38 -348aac0,80407890 -348aac4,ffffffff -348aac8,4d8600f0 -348aacc,17f6f01 -348aad0,80407c38 -348aad4,80407890 -348aad8,ffffffff -348aadc,3d7200c6 -348aae0,bd1301 -348aae4,80407c38 -348aae8,80407898 -348aaec,ffffffff -348aaf0,53820098 -348aaf4,df3000 -348aaf8,80407c38 -348aafc,80407890 -348ab00,ffffffff -348ab04,53280014 -348ab08,1505b00 -348ab0c,80407c38 -348ab10,80407890 -348ab14,ffffffff -348ab18,53290015 -348ab1c,1515c00 -348ab20,80407c38 -348ab24,80407890 -348ab28,ffffffff -348ab2c,532a0016 -348ab30,1525d00 -348ab34,80407c38 -348ab38,80407890 -348ab3c,ffffffff -348ab40,53500079 -348ab44,1475800 -348ab48,80407c38 -348ab4c,80407890 -348ab50,ffffffff -348ab54,4d8700f1 -348ab58,17f7101 -348ab5c,80407c38 -348ab60,80407890 -348ab64,ffffffff -348ab68,4d8800f2 -348ab6c,17f7201 -348ab70,80407c38 -348ab74,80407890 -348ab78,ffffffff -348ab7c,533d000c -348ab80,f84300 -348ab84,80407c38 -348ab88,80407998 -348ab8c,ffffffff -348ab90,53040070 -348ab94,1586000 -348ab98,80407c38 -348ab9c,80407890 -348aba0,ffffffff -348aba4,530c0071 -348aba8,1586100 -348abac,80407c38 -348abb0,80407890 -348abb4,ffffffff -348abb8,53120072 -348abbc,1586200 -348abc0,80407c38 -348abc4,80407890 -348abc8,ffffffff -348abcc,5b7100b4 -348abd0,15c6301 -348abd4,80407c38 -348abd8,80407890 -348abdc,ffffffff -348abe0,530500ad -348abe4,15d6400 -348abe8,80407c38 -348abec,80407890 -348abf0,ffffffff -348abf4,530d00ae -348abf8,15d6500 -348abfc,80407c38 -348ac00,80407890 -348ac04,ffffffff -348ac08,531300af -348ac0c,15d6600 -348ac10,80407c38 -348ac14,80407890 -348ac18,ffffffff -348ac1c,53470007 -348ac20,17b6c00 -348ac24,80407c38 -348ac28,80407890 -348ac2c,ffffffff -348ac30,53480007 -348ac34,17b6c00 -348ac38,80407c38 -348ac3c,80407890 -348ac40,ffffffff -348ac44,4d8a0037 -348ac48,c71b01 -348ac4c,80407c38 -348ac50,80407890 -348ac54,ffffffff -348ac58,4d8b0037 -348ac5c,c71b01 -348ac60,80407c38 -348ac64,80407890 -348ac68,ffffffff -348ac6c,4d8c0034 -348ac70,bb1201 -348ac74,80407c38 -348ac78,80407890 -348ac7c,ffffffff -348ac80,4d8d0034 -348ac84,bb1201 -348ac88,80407c38 -348ac8c,80407890 -348ac90,ffffffff -348ac94,4d020032 -348ac98,ce2001 -348ac9c,80407e00 -348aca0,80407890 -348aca4,ffffffff -348aca8,4d8f0032 -348acac,ce2001 -348acb0,80407e00 -348acb4,80407890 -348acb8,ffffffff -348acbc,4d900032 -348acc0,ce2001 -348acc4,80407e00 -348acc8,80407890 -348accc,ffffffff -348acd0,4d910032 -348acd4,ce2001 -348acd8,80407e00 -348acdc,80407890 -348ace0,ffffffff -348ace4,4d9500dc -348ace8,1194801 -348acec,80407e1c -348acf0,80407890 -348acf4,ffffffff -348acf8,4d960033 -348acfc,d92801 -348ad00,80407c38 -348ad04,80407890 -348ad08,ffffffff -348ad0c,4d970033 -348ad10,d92801 -348ad14,80407c38 -348ad18,80407890 -348ad1c,ffffffff -348ad20,53190047 -348ad24,f43f00 -348ad28,80407c38 -348ad2c,80407890 -348ad30,ffffffff -348ad34,531d007a -348ad38,1746800 -348ad3c,80407c38 -348ad40,80407890 -348ad44,ffffffff -348ad48,531c005d -348ad4c,1736700 -348ad50,80407c38 -348ad54,80407890 -348ad58,ffffffff -348ad5c,53200097 -348ad60,1766a00 -348ad64,80407c38 -348ad68,80407890 -348ad6c,ffffffff -348ad70,531e00f9 -348ad74,1767000 -348ad78,80407c38 -348ad7c,80407890 -348ad80,ffffffff -348ad84,537700f3 -348ad88,aa0201 -348ad8c,80407c38 -348ad90,80407890 -348ad94,ffffffff -348ad98,4d8400f4 -348ad9c,17f6d01 -348ada0,80407c38 -348ada4,80407890 -348ada8,ffffffff -348adac,4d8500f5 -348adb0,17f6e01 -348adb4,80407c38 -348adb8,80407890 -348adbc,ffffffff -348adc0,4d8600f6 -348adc4,17f6f01 -348adc8,80407c38 -348adcc,80407890 -348add0,ffffffff -348add4,4d8700f7 -348add8,17f7101 -348addc,80407c38 -348ade0,80407890 -348ade4,ffffffff -348ade8,537a00fa -348adec,bd1401 -348adf0,80407c38 -348adf4,80407898 -348adf8,ffffffff -348adfc,53980090 -348ae00,c71b01 -348ae04,80407c38 -348ae08,80407890 -348ae0c,ffffffff -348ae10,53990091 -348ae14,c71b01 -348ae18,80407c38 -348ae1c,80407890 -348ae20,ffffffff -348ae24,539a00a7 -348ae28,bb1201 -348ae2c,80407c38 -348ae30,80407890 -348ae34,ffffffff -348ae38,539b00a8 -348ae3c,bb1201 -348ae40,80407c38 -348ae44,80407890 -348ae48,ffffffff -348ae4c,5349006c -348ae50,17b7300 -348ae54,80407c38 -348ae58,80407890 -348ae5c,ffffffff -348ae60,53419002 -348ae68,80407c38 -348ae6c,80407a94 -348ae70,ffffffff -348aeb0,ffffffff -348aeb4,dd2d00 -348aeb8,80407c40 -348aebc,80407890 -348aec0,ffffffff -348aec4,ffffffff -348aec8,1475800 -348aecc,80407c54 -348aed0,80407890 -348aed4,ffffffff -348aed8,ffffffff -348aedc,bf1800 -348aee0,80407c80 -348aee4,80407890 -348aee8,ffffffff -348aeec,ffffffff -348aef0,e93500 -348aef4,80407cac -348aef8,80407890 -348aefc,ffffffff -348af00,ffffffff -348af04,e73300 -348af08,80407cd4 -348af0c,80407890 -348af10,ffffffff -348af14,ffffffff -348af18,d12200 -348af1c,80407d04 -348af20,80407890 -348af24,ffffffff -348af28,ffffffff -348af2c,db2a00 -348af30,80407d34 -348af34,80407890 -348af38,ffffffff -348af3c,ffffffff -348af40,bb1201 -348af44,80407d4c -348af48,80407890 -348af4c,ffffffff -348af50,ffffffff -348af54,c71b01 -348af58,80407d68 -348af5c,80407890 -348af60,ffffffff -348af64,ffffffff -348af68,d92800 -348af6c,80407d94 -348af70,80407890 -348af74,ffffffff -348af78,ffffffff -348af7c,cd1e00 -348af80,80407d84 -348af84,80407890 -348af88,ffffffff -348af8c,ffffffff -348af90,10e4600 -348af94,80407dc4 -348af98,80407890 -348af9c,ffffffff -348afa0,53410043 -348afa4,c60100 -348afa8,80407c38 -348afac,804079a4 -348afb0,15ffff -348afb4,53410044 -348afb8,c60100 -348afbc,80407c38 -348afc0,804079a4 -348afc4,16ffff -348afc8,53410045 -348afcc,c60100 -348afd0,80407c38 -348afd4,804079a4 -348afd8,17ffff -348afdc,53410046 -348afe0,1776b00 -348afe4,80407c38 -348afe8,804079a4 -348afec,18ffff -348aff0,53410047 -348aff4,f43f00 -348aff8,80407c38 -348affc,804079a4 -348b000,19ffff -348b004,5341005d -348b008,1736700 -348b00c,80407c38 -348b010,804079a4 -348b014,1cffff -348b018,5341007a -348b01c,1746800 -348b020,80407c38 -348b024,804079a4 -348b028,1dffff -348b02c,534100f9 -348b030,1767000 -348b034,80407c38 -348b038,804079a4 -348b03c,1effff -348b040,53410097 -348b044,1766a00 -348b048,80407c38 -348b04c,804079a4 -348b050,20ffff -348b054,53410006 -348b058,b90a02 -348b05c,80407c38 -348b060,804079dc -348b064,10003 -348b068,5341001c -348b06c,b90a02 -348b070,80407c38 -348b074,804079dc -348b078,10004 -348b07c,5341001d -348b080,b90a02 -348b084,80407c38 -348b088,804079dc -348b08c,10005 -348b090,5341001e -348b094,b90a02 -348b098,80407c38 -348b09c,804079dc -348b0a0,10006 -348b0a4,5341002a -348b0a8,b90a02 -348b0ac,80407c38 -348b0b0,804079dc -348b0b4,10007 -348b0b8,53410061 -348b0bc,b90a02 -348b0c0,80407c38 -348b0c4,804079dc -348b0c8,1000a -348b0cc,53410062 -348b0d0,b80b01 -348b0d4,80407c38 -348b0d8,804079dc -348b0dc,20000 -348b0e0,53410063 -348b0e4,b80b01 -348b0e8,80407c38 -348b0ec,804079dc -348b0f0,20001 -348b0f4,53410064 -348b0f8,b80b01 -348b0fc,80407c38 -348b100,804079dc -348b104,20002 -348b108,53410065 -348b10c,b80b01 -348b110,80407c38 -348b114,804079dc -348b118,20003 -348b11c,5341007c -348b120,b80b01 -348b124,80407c38 -348b128,804079dc -348b12c,20004 -348b130,5341007d -348b134,b80b01 -348b138,80407c38 -348b13c,804079dc -348b140,20005 -348b144,5341007e -348b148,b80b01 -348b14c,80407c38 -348b150,804079dc -348b154,20006 -348b158,5341007f -348b15c,b80b01 -348b160,80407c38 -348b164,804079dc -348b168,20007 -348b16c,534100a2 -348b170,b80b01 -348b174,80407c38 -348b178,804079dc -348b17c,20008 -348b180,53410087 -348b184,b80b01 -348b188,80407c38 -348b18c,804079dc -348b190,20009 -348b194,53410088 -348b198,c81c01 -348b19c,80407c38 -348b1a0,804079dc -348b1a4,40000 -348b1a8,53410089 -348b1ac,c81c01 -348b1b0,80407c38 -348b1b4,804079dc -348b1b8,40001 -348b1bc,5341008a -348b1c0,c81c01 -348b1c4,80407c38 -348b1c8,804079dc -348b1cc,40002 -348b1d0,5341008b -348b1d4,c81c01 -348b1d8,80407c38 -348b1dc,804079dc -348b1e0,40003 -348b1e4,5341008c -348b1e8,c81c01 -348b1ec,80407c38 -348b1f0,804079dc -348b1f4,40004 -348b1f8,5341008e -348b1fc,c81c01 -348b200,80407c38 -348b204,804079dc -348b208,40005 -348b20c,5341008f -348b210,c81c01 -348b214,80407c38 -348b218,804079dc -348b21c,40006 -348b220,534100a3 -348b224,c81c01 -348b228,80407c38 -348b22c,804079dc -348b230,40007 -348b234,534100a5 -348b238,c81c01 -348b23c,80407c38 -348b240,804079dc -348b244,40008 -348b248,53410092 -348b24c,c81c01 -348b250,80407c38 -348b254,804079dc -348b258,40009 -348b25c,53410093 -348b260,aa0203 -348b264,80407c38 -348b268,804079f0 -348b26c,3ffff -348b270,53410094 -348b274,aa0203 -348b278,80407c38 -348b27c,804079f0 -348b280,4ffff -348b284,53410095 -348b288,aa0203 -348b28c,80407c38 -348b290,804079f0 -348b294,5ffff -348b298,534100a6 -348b29c,aa0203 -348b2a0,80407c38 -348b2a4,804079f0 -348b2a8,6ffff -348b2ac,534100a9 -348b2b0,aa0203 -348b2b4,80407c38 -348b2b8,804079f0 -348b2bc,7ffff -348b2c0,5341009b -348b2c4,aa0203 -348b2c8,80407c38 -348b2cc,804079f0 -348b2d0,8ffff -348b2d4,5341009f -348b2d8,aa0203 -348b2dc,80407c38 -348b2e0,804079f0 -348b2e4,bffff -348b2e8,534100a0 -348b2ec,aa0203 -348b2f0,80407c38 -348b2f4,804079f0 -348b2f8,cffff -348b2fc,534100a1 -348b300,aa0203 -348b304,80407c38 -348b308,804079f0 -348b30c,dffff -348b310,534100e9 -348b314,1941300 -348b318,80407c38 -348b31c,80407a14 -348b320,ffffffff -348b324,534100e4 -348b328,cd1e00 -348b32c,80407c38 -348b330,80407a30 -348b334,ffffffff -348b338,534100e8 -348b33c,cd1f00 -348b340,80407c38 -348b344,80407a4c -348b348,ffffffff -348b34c,53410073 -348b350,b60300 -348b354,80407c38 -348b358,80407a7c -348b35c,6ffff -348b360,53410074 -348b364,b60400 -348b368,80407c38 -348b36c,80407a7c -348b370,7ffff -348b374,53410075 -348b378,b60500 -348b37c,80407c38 -348b380,80407a7c -348b384,8ffff -348b388,53410076 -348b38c,b60600 -348b390,80407c38 -348b394,80407a7c -348b398,9ffff -348b39c,53410077 -348b3a0,b60700 -348b3a4,80407c38 -348b3a8,80407a7c -348b3ac,affff -348b3b0,53410078 -348b3b4,b60800 -348b3b8,80407c38 -348b3bc,80407a7c -348b3c0,bffff -348b3c4,534100d4 -348b3c8,b60400 -348b3cc,80407c38 -348b3d0,80407a7c -348b3d4,cffff -348b3d8,534100d2 -348b3dc,b60600 -348b3e0,80407c38 -348b3e4,80407a7c -348b3e8,dffff -348b3ec,534100d1 -348b3f0,b60300 -348b3f4,80407c38 -348b3f8,80407a7c -348b3fc,effff -348b400,534100d3 -348b404,b60800 -348b408,80407c38 -348b40c,80407a7c -348b410,fffff -348b414,534100d5 -348b418,b60500 -348b41c,80407c38 -348b420,80407a7c -348b424,10ffff -348b428,534100d6 -348b42c,b60700 -348b430,80407c38 -348b434,80407a7c -348b438,11ffff -348b43c,534100f8 -348b440,d12300 -348b444,80407c38 -348b448,80407960 -348b44c,3ffff -348b450,53149099 -348b454,10b4500 -348b458,80407c38 -348b45c,80407890 -348b460,ffffffff -348b464,53419048 -348b468,f33e00 -348b46c,80407c38 -348b470,80407ab0 -348b474,ffffffff -348b478,53419003 -348b47c,1933500 -348b480,80407c38 -348b484,804078a4 -348b488,ffffffff -348b48c,53419097 -348b490,ef3b00 -348b494,80407c38 -348b498,80407890 -348b49c,ffffffff -348b4a0,4d419098 -348b4a4,ef3b01 -348b4a8,80407c38 -348b4ac,80407890 -348b4b0,ffffffff -348b4b8,1 -348b4bc,1 -348b4c0,d -348b4c4,41200000 -348b4c8,41200000 -348b4cc,8040a458 -348b4d0,8040a448 -348b4d8,df000000 -348b4e0,80112f1a -348b4e4,80112f14 -348b4e8,80112f0e -348b4ec,80112f08 -348b4f0,8011320a -348b4f4,80113204 -348b4f8,801131fe -348b4fc,801131f8 -348b500,801131f2 -348b504,801131ec -348b508,801131e6 -348b50c,801131e0 -348b510,8012be1e -348b514,8012be20 -348b518,8012be1c -348b51c,8012be12 -348b520,8012be14 -348b524,8012be10 -348b528,801c7672 -348b52c,801c767a -348b530,801c7950 -348b534,8011bd50 -348b538,8011bd38 -348b53c,801d8b9e -348b540,801d8b92 -348b544,c80000 -348b54c,ff0046 -348b550,32ffff -348c6a0,db000 -348c6a4,db000 -348c6a8,db000 -348c6ac,cb000 -348c6b0,cb000 -348c6b4,ca000 -348c6bc,db000 -348c6c0,db000 -348c6d8,e8ac00 -348c6dc,e8ac00 -348c6e0,e8ac00 -348c6e4,e8ac00 -348c70c,d77d0 -348c710,2e3ab0 -348c714,7d0c90 -348c718,8ffffffd -348c71c,c96e00 -348c720,2e4ac00 -348c724,effffff4 -348c728,ab0e500 -348c72c,c95e000 -348c730,e59c000 -348c748,79000 -348c74c,5ceeb40 -348c750,cc8a990 -348c754,da79000 -348c758,8ecb400 -348c75c,4adda0 -348c760,797e2 -348c764,c88aae0 -348c768,6ceed70 -348c76c,79000 -348c770,79000 -348c780,6dea0000 -348c784,c94d6000 -348c788,c94d6033 -348c78c,6deb6bc6 -348c790,8cb600 -348c794,7ca4cec4 -348c798,3109c3bb -348c79c,9c3bb -348c7a0,2ced4 -348c7b8,4cefb00 -348c7bc,ad50000 -348c7c0,8e30000 -348c7c4,9ec0000 -348c7c8,7e4db0ab -348c7cc,bb05e8aa -348c7d0,bc008ed6 -348c7d4,7e936ed0 -348c7d8,8ded9ea -348c7f0,ca000 -348c7f4,ca000 -348c7f8,ca000 -348c7fc,ca000 -348c820,c900 -348c824,7e200 -348c828,cb000 -348c82c,e8000 -348c830,6f3000 -348c834,8e0000 -348c838,8e0000 -348c83c,6f4000 -348c840,e8000 -348c844,cb000 -348c848,7e200 -348c84c,c900 -348c858,bb0000 -348c85c,5e4000 -348c860,ca000 -348c864,ad000 -348c868,7e100 -348c86c,6f400 -348c870,6f400 -348c874,7e100 -348c878,ad000 -348c87c,ca000 -348c880,5e4000 -348c884,bb0000 -348c898,a8000 -348c89c,c8a8ab0 -348c8a0,3beda10 -348c8a4,3beda10 -348c8a8,c8a8ab0 -348c8ac,a8000 -348c8d4,ca000 -348c8d8,ca000 -348c8dc,ca000 -348c8e0,affffff8 -348c8e4,ca000 -348c8e8,ca000 -348c8ec,ca000 -348c924,dd000 -348c928,ec000 -348c92c,4f8000 -348c930,9d0000 -348c954,dffb00 -348c994,ec000 -348c998,ec000 -348c9b0,bc0 -348c9b4,4e60 -348c9b8,bc00 -348c9bc,3e800 -348c9c0,ad000 -348c9c4,1e9000 -348c9c8,9e2000 -348c9cc,da0000 -348c9d0,7e30000 -348c9d4,cb00000 -348c9d8,6e500000 -348c9e8,3ceeb00 -348c9ec,bd57e90 -348c9f0,e900bd0 -348c9f4,5f7009e0 -348c9f8,6f6cb9e0 -348c9fc,5f7009e0 -348ca00,e900bd0 -348ca04,bd57e90 -348ca08,3ceeb00 -348ca20,affe000 -348ca24,8e000 -348ca28,8e000 -348ca2c,8e000 -348ca30,8e000 -348ca34,8e000 -348ca38,8e000 -348ca3c,8e000 -348ca40,8ffffe0 -348ca58,8deea00 -348ca5c,c837e90 -348ca60,cc0 -348ca64,2ea0 -348ca68,bd20 -348ca6c,bd400 -348ca70,bd4000 -348ca74,bd40000 -348ca78,2fffffd0 -348ca90,7ceea00 -348ca94,c837e90 -348ca98,cb0 -348ca9c,27e90 -348caa0,bffb00 -348caa4,27da0 -348caa8,ad0 -348caac,5c627db0 -348cab0,9deeb30 -348cac8,2de00 -348cacc,bde00 -348cad0,7d9e00 -348cad4,2d79e00 -348cad8,bb09e00 -348cadc,6e409e00 -348cae0,9ffffff7 -348cae4,9e00 -348cae8,9e00 -348cb00,cffff50 -348cb04,ca00000 -348cb08,ca00000 -348cb0c,ceeea00 -348cb10,38e90 -348cb14,bc0 -348cb18,bc0 -348cb1c,5c638e90 -348cb20,9deda00 -348cb38,aeec30 -348cb3c,ae83980 -348cb40,e900000 -348cb44,4faeec40 -348cb48,6fd55dc0 -348cb4c,5f9009e0 -348cb50,e9009e0 -348cb54,cd55dc0 -348cb58,3ceec40 -348cb70,5fffffd0 -348cb74,da0 -348cb78,7e40 -348cb7c,cc00 -348cb80,4e800 -348cb84,ad000 -348cb88,da000 -348cb8c,8e4000 -348cb90,cc0000 -348cba8,5ceec30 -348cbac,dc45db0 -348cbb0,e900bd0 -348cbb4,bc45d90 -348cbb8,4dffc20 -348cbbc,1db45cc0 -348cbc0,5f6009e0 -348cbc4,2eb35cd0 -348cbc8,7deec50 -348cbe0,6deeb00 -348cbe4,db37e90 -348cbe8,5f500bd0 -348cbec,5f500be0 -348cbf0,db37ee0 -348cbf4,6dedbe0 -348cbf8,bc0 -348cbfc,9749e70 -348cc00,5ded800 -348cc20,ec000 -348cc24,ec000 -348cc34,ec000 -348cc38,ec000 -348cc58,ec000 -348cc5c,ec000 -348cc6c,dd000 -348cc70,ec000 -348cc74,4f8000 -348cc78,9d0000 -348cc90,29c8 -348cc94,7bed93 -348cc98,8dda4000 -348cc9c,8dda4000 -348cca0,7bec93 -348cca4,29c8 -348cccc,affffff8 -348ccd8,affffff8 -348cd00,ac810000 -348cd04,4adeb600 -348cd08,6add6 -348cd0c,6add6 -348cd10,4adeb600 -348cd14,ac810000 -348cd30,4beec30 -348cd34,9a46ea0 -348cd38,1da0 -348cd3c,2cd30 -348cd40,cc100 -348cd44,e9000 -348cd4c,e9000 -348cd50,e9000 -348cd68,1aeed70 -348cd6c,cd739e4 -348cd70,7e2000c9 -348cd74,ba0aeeca -348cd78,d76e64da -348cd7c,d69c00aa -348cd80,d76e64da -348cd84,ba0aeeca -348cd88,6e400000 -348cd8c,ad83000 -348cd90,8dee90 -348cda0,3ed000 -348cda4,9de600 -348cda8,cbcb00 -348cdac,3e8ad00 -348cdb0,8e26f60 -348cdb4,cc00ea0 -348cdb8,2effffd0 -348cdbc,8e5008f5 -348cdc0,cd0001ea -348cdd8,effec40 -348cddc,e905dc0 -348cde0,e900ae0 -348cde4,e905dc0 -348cde8,efffd50 -348cdec,e904bd2 -348cdf0,e9005f6 -348cdf4,e904be3 -348cdf8,effed80 -348ce10,9ded80 -348ce14,8e936b0 -348ce18,db00000 -348ce1c,3f900000 -348ce20,5f700000 -348ce24,1e900000 -348ce28,db00000 -348ce2c,8e947b0 -348ce30,9ded80 -348ce48,5ffed800 -348ce4c,5f65ae80 -348ce50,5f600cd0 -348ce54,5f6009e0 -348ce58,5f6009f0 -348ce5c,5f6009e0 -348ce60,5f600cd0 -348ce64,5f65ae80 -348ce68,5ffed800 -348ce80,dffffe0 -348ce84,db00000 -348ce88,db00000 -348ce8c,db00000 -348ce90,dffffc0 -348ce94,db00000 -348ce98,db00000 -348ce9c,db00000 -348cea0,dfffff0 -348ceb8,bfffff4 -348cebc,bd00000 -348cec0,bd00000 -348cec4,bd00000 -348cec8,bffffc0 -348cecc,bd00000 -348ced0,bd00000 -348ced4,bd00000 -348ced8,bd00000 -348cef0,1aeed60 -348cef4,be738a0 -348cef8,4e900000 -348cefc,8f400000 -348cf00,9f10bff2 -348cf04,7f4007f2 -348cf08,4e9007f2 -348cf0c,be739f2 -348cf10,1beed90 -348cf28,5f6009e0 -348cf2c,5f6009e0 -348cf30,5f6009e0 -348cf34,5f6009e0 -348cf38,5fffffe0 -348cf3c,5f6009e0 -348cf40,5f6009e0 -348cf44,5f6009e0 -348cf48,5f6009e0 -348cf60,dffffb0 -348cf64,db000 -348cf68,db000 -348cf6c,db000 -348cf70,db000 -348cf74,db000 -348cf78,db000 -348cf7c,db000 -348cf80,dffffb0 -348cf98,cfff40 -348cf9c,7f40 -348cfa0,7f40 -348cfa4,7f40 -348cfa8,7f40 -348cfac,7f30 -348cfb0,75009e00 -348cfb4,8d64dc00 -348cfb8,2beec500 -348cfd0,5f6009e7 -348cfd4,5f609e70 -348cfd8,5f69e700 -348cfdc,5fbe8000 -348cfe0,5fedb000 -348cfe4,5f87e800 -348cfe8,5f60ae40 -348cfec,5f601dc0 -348cff0,5f6006ea -348d008,cc00000 -348d00c,cc00000 -348d010,cc00000 -348d014,cc00000 -348d018,cc00000 -348d01c,cc00000 -348d020,cc00000 -348d024,cc00000 -348d028,cfffff7 -348d040,afa00cf8 -348d044,aed02ee8 -348d048,add59be8 -348d04c,adaac8e8 -348d050,ad5de1e8 -348d054,ad0db0e8 -348d058,ad0000e8 -348d05c,ad0000e8 -348d060,ad0000e8 -348d078,5fc008e0 -348d07c,5fe608e0 -348d080,5fcb08e0 -348d084,5f7e48e0 -348d088,5f5ca8e0 -348d08c,5f57e8e0 -348d090,5f50dce0 -348d094,5f509ee0 -348d098,5f502ee0 -348d0b0,4ceeb20 -348d0b4,cd56ea0 -348d0b8,3e800ae0 -348d0bc,7f5008f2 -348d0c0,7f4008f4 -348d0c4,7f5008f2 -348d0c8,3e800ae0 -348d0cc,cd56eb0 -348d0d0,4ceeb20 -348d0e8,dffed60 -348d0ec,db05ce2 -348d0f0,db006f6 -348d0f4,db006f6 -348d0f8,db05ce2 -348d0fc,dffed60 -348d100,db00000 -348d104,db00000 -348d108,db00000 -348d120,4ceeb20 -348d124,cd56ea0 -348d128,3e800ae0 -348d12c,7f5008f2 -348d130,7f4008f4 -348d134,7f5008f1 -348d138,3e800ad0 -348d13c,cd56ea0 -348d140,4cefc20 -348d144,ae50 -348d148,c80 -348d158,5ffeeb20 -348d15c,5f717eb0 -348d160,5f700cd0 -348d164,5f716ea0 -348d168,5fffea00 -348d16c,5f72ae40 -348d170,5f700db0 -348d174,5f7008e5 -348d178,5f7000db -348d190,6ceeb30 -348d194,dc45a90 -348d198,4f600000 -348d19c,ec60000 -348d1a0,5ceeb40 -348d1a4,6cc0 -348d1a8,8e0 -348d1ac,c735cd0 -348d1b0,8deec50 -348d1c8,cffffffb -348d1cc,db000 -348d1d0,db000 -348d1d4,db000 -348d1d8,db000 -348d1dc,db000 -348d1e0,db000 -348d1e4,db000 -348d1e8,db000 -348d200,4f7009e0 -348d204,4f7009e0 -348d208,4f7009e0 -348d20c,4f7009e0 -348d210,4f7009e0 -348d214,3f7009e0 -348d218,2e700ad0 -348d21c,dc45dc0 -348d220,5ceec40 -348d238,ad0003e8 -348d23c,6f5008e3 -348d240,e900bc0 -348d244,bc00d90 -348d248,8e15e40 -348d24c,2e7ad00 -348d250,cbca00 -348d254,9de600 -348d258,3ed000 -348d270,e80000ad -348d274,da0000cb -348d278,cb0000da -348d27c,ac0ec0e8 -348d280,8d6de1e5 -348d284,6e9bd8e0 -348d288,1ec8acd0 -348d28c,de37ec0 -348d290,cd00ea0 -348d2a8,6e7007e7 -348d2ac,ad21db0 -348d2b0,2daad20 -348d2b4,7ee700 -348d2b8,3ee200 -348d2bc,bdda00 -348d2c0,7e67e60 -348d2c4,3ea00bd0 -348d2c8,bd2004e9 -348d2e0,ae2005e8 -348d2e4,2da00cc0 -348d2e8,7e57e50 -348d2ec,ccda00 -348d2f0,4ed200 -348d2f4,db000 -348d2f8,db000 -348d2fc,db000 -348d300,db000 -348d318,efffff8 -348d31c,bd3 -348d320,7e70 -348d324,3ea00 -348d328,bd100 -348d32c,8e5000 -348d330,4e90000 -348d334,cc00000 -348d338,1ffffffa -348d348,4ffc00 -348d34c,4f5000 -348d350,4f5000 -348d354,4f5000 -348d358,4f5000 -348d35c,4f5000 -348d360,4f5000 -348d364,4f5000 -348d368,4f5000 -348d36c,4f5000 -348d370,4f5000 -348d374,4ffc00 -348d388,6e500000 -348d38c,cb00000 -348d390,7e30000 -348d394,da0000 -348d398,9e2000 -348d39c,1e9000 -348d3a0,ad000 -348d3a4,3e800 -348d3a8,bc00 -348d3ac,4e60 -348d3b0,bc0 -348d3b8,dfe000 -348d3bc,8e000 -348d3c0,8e000 -348d3c4,8e000 -348d3c8,8e000 -348d3cc,8e000 -348d3d0,8e000 -348d3d4,8e000 -348d3d8,8e000 -348d3dc,8e000 -348d3e0,8e000 -348d3e4,dfe000 -348d3f8,5ed200 -348d3fc,dcdb00 -348d400,ad25e80 -348d404,7e5007e5 -348d45c,fffffffd -348d464,2ca0000 -348d468,2c9000 -348d4a8,5ceeb10 -348d4ac,b936da0 -348d4b0,bc0 -348d4b4,8deffc0 -348d4b8,3e930bd0 -348d4bc,4f827ed0 -348d4c0,aeedbd0 -348d4d0,d900000 -348d4d4,d900000 -348d4d8,d900000 -348d4dc,d900000 -348d4e0,dbdec40 -348d4e4,de65dc0 -348d4e8,db008e0 -348d4ec,da007f2 -348d4f0,db008e0 -348d4f4,de64db0 -348d4f8,dbdec40 -348d518,8ded70 -348d51c,7e936a0 -348d520,cc00000 -348d524,db00000 -348d528,cc00000 -348d52c,7e936a0 -348d530,8ded70 -348d540,bc0 -348d544,bc0 -348d548,bc0 -348d54c,bc0 -348d550,5dedcc0 -348d554,dc48ec0 -348d558,5f600cc0 -348d55c,7f300bc0 -348d560,5f600cc0 -348d564,dc48ec0 -348d568,5dedcc0 -348d588,3beec30 -348d58c,cd54cc0 -348d590,4f6007e0 -348d594,6ffffff3 -348d598,4f500000 -348d59c,cc538c0 -348d5a0,3beec60 -348d5b0,5ded0 -348d5b4,cb200 -348d5b8,d9000 -348d5bc,e8000 -348d5c0,dffffd0 -348d5c4,e8000 -348d5c8,e8000 -348d5cc,e8000 -348d5d0,e8000 -348d5d4,e8000 -348d5d8,e8000 -348d5f8,5dedcc0 -348d5fc,dc48ec0 -348d600,5f600cc0 -348d604,7f300bc0 -348d608,5f600cc0 -348d60c,dc48ec0 -348d610,5dedcb0 -348d614,ca0 -348d618,9947e60 -348d61c,4cee900 -348d620,da00000 -348d624,da00000 -348d628,da00000 -348d62c,da00000 -348d630,dbded40 -348d634,de65da0 -348d638,db00bc0 -348d63c,da00bc0 -348d640,da00bc0 -348d644,da00bc0 -348d648,da00bc0 -348d658,bc000 -348d668,9ffc000 -348d66c,bc000 -348d670,bc000 -348d674,bc000 -348d678,bc000 -348d67c,bc000 -348d680,effffe0 -348d690,7e000 -348d6a0,7ffe000 -348d6a4,7e000 -348d6a8,7e000 -348d6ac,7e000 -348d6b0,7e000 -348d6b4,7e000 -348d6b8,7e000 -348d6bc,7e000 -348d6c0,1bd000 -348d6c4,dfe7000 -348d6c8,bc00000 -348d6cc,bc00000 -348d6d0,bc00000 -348d6d4,bc00000 -348d6d8,bc03dc2 -348d6dc,bc3db00 -348d6e0,bddc000 -348d6e4,bfce500 -348d6e8,bd0cd10 -348d6ec,bc03db0 -348d6f0,bc007e8 -348d700,eff4000 -348d704,5f4000 -348d708,5f4000 -348d70c,5f4000 -348d710,5f4000 -348d714,5f4000 -348d718,5f4000 -348d71c,5f4000 -348d720,4f5000 -348d724,ea000 -348d728,8efb0 -348d748,8dddaec0 -348d74c,8e4dc5e4 -348d750,8d0cb0e6 -348d754,8d0ba0e7 -348d758,8d0ba0e7 -348d75c,8d0ba0e7 -348d760,8d0ba0e7 -348d780,dbded40 -348d784,de65da0 -348d788,db00bc0 -348d78c,da00bc0 -348d790,da00bc0 -348d794,da00bc0 -348d798,da00bc0 -348d7b8,4ceeb20 -348d7bc,cd56da0 -348d7c0,1e700ad0 -348d7c4,5f6008e0 -348d7c8,1e700ad0 -348d7cc,cd46db0 -348d7d0,4ceeb20 -348d7f0,dbdec30 -348d7f4,de65db0 -348d7f8,db009e0 -348d7fc,da007e0 -348d800,db008e0 -348d804,de65db0 -348d808,dbeec40 -348d80c,d900000 -348d810,d900000 -348d814,d900000 -348d828,4cedcc0 -348d82c,cc47ec0 -348d830,1e700cc0 -348d834,5f600bc0 -348d838,2e700cc0 -348d83c,cc47ec0 -348d840,5cedbc0 -348d844,ac0 -348d848,ac0 -348d84c,ac0 -348d860,ccdef9 -348d864,ce8300 -348d868,cb0000 -348d86c,ca0000 -348d870,ca0000 -348d874,ca0000 -348d878,ca0000 -348d898,4ceea10 -348d89c,bd45b60 -348d8a0,bd40000 -348d8a4,3bddb20 -348d8a8,4da0 -348d8ac,b945ea0 -348d8b0,5ceeb20 -348d8c8,8e0000 -348d8cc,8e0000 -348d8d0,6fffffb0 -348d8d4,8e0000 -348d8d8,8e0000 -348d8dc,8e0000 -348d8e0,8e0000 -348d8e4,6e7000 -348d8e8,befb0 -348d908,da00bc0 -348d90c,da00bc0 -348d910,da00bc0 -348d914,da00bc0 -348d918,da00bc0 -348d91c,bd47ec0 -348d920,5dedbc0 -348d940,6e3007e3 -348d944,d900bc0 -348d948,ad01e80 -348d94c,5e48e20 -348d950,dacb00 -348d954,9de700 -348d958,3ee000 -348d978,e80000ac -348d97c,ca0000ca -348d980,ac0db0e7 -348d984,6e3dd5e2 -348d988,eabcad0 -348d98c,ce79eb0 -348d990,ae15f80 -348d9b0,3da00bc0 -348d9b4,6e69e40 -348d9b8,9ee700 -348d9bc,2ed000 -348d9c0,ccda00 -348d9c4,9e46e70 -348d9c8,6e7009e4 -348d9e8,6e5005e5 -348d9ec,da00bd0 -348d9f0,9e00e90 -348d9f4,3e78e30 -348d9f8,cccc00 -348d9fc,7ee700 -348da00,de000 -348da04,da000 -348da08,8e5000 -348da0c,dea0000 -348da20,bffffc0 -348da24,5e70 -348da28,3d900 -348da2c,cb000 -348da30,bd2000 -348da34,9e40000 -348da38,dffffc0 -348da48,6dea0 -348da4c,bd300 -348da50,cb000 -348da54,cb000 -348da58,5ea000 -348da5c,bfd2000 -348da60,7e9000 -348da64,db000 -348da68,cb000 -348da6c,cb000 -348da70,bd400 -348da74,5dea0 -348da80,ca000 -348da84,ca000 -348da88,ca000 -348da8c,ca000 -348da90,ca000 -348da94,ca000 -348da98,ca000 -348da9c,ca000 -348daa0,ca000 -348daa4,ca000 -348daa8,ca000 -348daac,ca000 -348dab0,ca000 -348dab8,bed3000 -348dabc,4e9000 -348dac0,da000 -348dac4,ca000 -348dac8,bc400 -348dacc,5efa0 -348dad0,bd500 -348dad4,cb000 -348dad8,da000 -348dadc,da000 -348dae0,5e8000 -348dae4,bec2000 -348db08,5ded83a7 -348db0c,9838dec3 -348db80,7f024429 -348db84,3c334133 -348db88,41334633 -348db8c,44297f02 -348dbbc,5409 -348dbc0,4dc548ff -348dbc4,41ff43ff -348dbc8,47ff49ff -348dbcc,43ff20c5 -348dbd0,c0000 -348dbfc,3f75 -348dc00,49ff33ff -348dc04,28ff2dff -348dc08,33ff39ff -348dc0c,3cff00ff -348dc10,770000 -348dc3c,329d -348dc40,37ff1bff -348dc44,21ff28ff -348dc48,2fff35ff -348dc4c,3cff00ff -348dc50,9d0000 -348dc7c,329e -348dc80,35ff21ff -348dc84,28ff06ff -348dc88,9ff3cff -348dc8c,42ff00ff -348dc90,9e0000 -348dcbc,359e -348dcc0,39ff27ff -348dcc4,2eff00ff -348dcc8,2ff42ff -348dccc,48ff00ff -348dcd0,9e0000 -348dcfc,3a9e -348dd00,3eff2eff -348dd04,35ff00ff -348dd08,dff48ff -348dd0c,4dff00ff -348dd10,9e0000 -348dd3c,3e9e -348dd40,42ff35ff -348dd44,3bff1bff -348dd48,27ff4dff -348dd4c,53ff00ff -348dd50,9e0000 -348dd7c,439e -348dd80,47ff3bff -348dd84,41ff47ff -348dd88,4dff52ff -348dd8c,58ff00ff -348dd90,9e0000 -348ddbc,4d9e -348ddc0,4dff41ff -348ddc4,47ff4dff -348ddc8,52ff57ff -348ddcc,5cff00ff -348ddd0,9e0000 -348ddec,3f04474f -348ddf0,3e663e66 -348ddf4,43664666 -348ddf8,48664d66 -348ddfc,57665bc5 -348de00,53ff47ff -348de04,4dff52ff -348de08,57ff5cff -348de0c,60ff0eff -348de10,19c56666 -348de14,66666466 -348de18,61665f66 -348de1c,5c665a66 -348de20,504f3f04 -348de28,6605 -348de2c,4ec34bff -348de30,41ff41ff -348de34,45ff48ff -348de38,4cff4fff -348de3c,55ff59ff -348de40,4fff4dff -348de44,52ff57ff -348de48,5cff60ff -348de4c,64ff61ff -348de50,67ff66ff -348de54,64ff62ff -348de58,60ff5dff -348de5c,5bff57ff -348de60,49ff0ec3 -348de64,50000 -348de68,3958 -348de6c,44ff31ff -348de70,20ff25ff -348de74,2bff31ff -348de78,38ff3eff -348de7c,44ff49ff -348de80,4dff52ff -348de84,57ff5cff -348de88,60ff64ff -348de8c,68ff67ff -348de90,64ff60ff -348de94,5cff58ff -348de98,53ff4eff -348de9c,48ff43ff -348dea0,32ff00ff -348dea4,580000 -348dea8,2f71 -348deac,36ff1dff -348deb0,1fff26ff -348deb4,2dff34ff -348deb8,3aff41ff -348debc,47ff4cff -348dec0,52ff57ff -348dec4,5cff60ff -348dec8,64ff68ff -348decc,67ff64ff -348ded0,60ff5bff -348ded4,57ff51ff -348ded8,4cff46ff -348dedc,40ff3aff -348dee0,27ff00ff -348dee4,710000 -348dee8,2f71 -348deec,36ff21ff -348def0,16ff00ff -348def4,ff00ff -348def8,2cff47ff -348defc,4cff52ff -348df00,57ff5cff -348df04,60ff64ff -348df08,67ff67ff -348df0c,64ff60ff -348df10,5bff57ff -348df14,52ff0dff -348df18,ff00ff -348df1c,aff33ff -348df20,21ff00ff -348df24,710000 -348df28,3371 -348df2c,3aff28ff -348df30,22ff0fff -348df34,13ff19ff -348df38,39ff4cff -348df3c,52ff57ff -348df40,5bff60ff -348df44,64ff67ff -348df48,67ff64ff -348df4c,60ff5cff -348df50,57ff52ff -348df54,4cff1dff -348df58,12ff14ff -348df5c,19ff2dff -348df60,1bff00ff -348df64,710000 -348df68,3871 -348df6c,3dff2fff -348df70,33ff3aff -348df74,40ff46ff -348df78,4cff51ff -348df7c,57ff5bff -348df80,60ff64ff -348df84,67ff68ff -348df88,64ff60ff -348df8c,5cff57ff -348df90,52ff4cff -348df94,47ff41ff -348df98,3aff34ff -348df9c,2dff26ff -348dfa0,12ff00ff -348dfa4,710000 -348dfa8,3569 -348dfac,37ff33ff -348dfb0,3aff40ff -348dfb4,46ff4cff -348dfb8,51ff57ff -348dfbc,5bff60ff -348dfc0,64ff67ff -348dfc4,68ff64ff -348dfc8,60ff5cff -348dfcc,57ff52ff -348dfd0,4dff47ff -348dfd4,41ff3aff -348dfd8,34ff2dff -348dfdc,26ff1fff -348dfe0,6ff00ff -348dfe4,690000 -348dfe8,1e21 -348dfec,2f600ff -348dff0,ff00ff -348dff4,ff00ff -348dff8,ff00ff -348dffc,2ff1eff -348e000,60ff68ff -348e004,64ff60ff -348e008,5cff57ff -348e00c,52ff2cff -348e010,6ff00ff -348e014,ff00ff -348e018,ff00ff -348e01c,ff00ff -348e020,ff00f6 -348e024,210000 -348e02c,3b00ae -348e030,cc00cc -348e034,cc00cc -348e038,cc00cc -348e03c,cc03ec -348e040,62ff64ff -348e044,60ff5cff -348e048,57ff52ff -348e04c,4dff00ff -348e050,ec00cc -348e054,cc00cc -348e058,cc00cc -348e05c,cc00cc -348e060,ae003b -348e07c,5f9e -348e080,65ff60ff -348e084,5cff57ff -348e088,52ff4dff -348e08c,47ff00ff -348e090,9e0000 -348e0bc,659e -348e0c0,63ff5cff -348e0c4,57ff52ff -348e0c8,4dff47ff -348e0cc,41ff00ff -348e0d0,9e0000 -348e0fc,649e -348e100,61ff58ff -348e104,53ff35ff -348e108,31ff41ff -348e10c,3bff00ff -348e110,9e0000 -348e13c,609e -348e140,5eff53ff -348e144,4dff00ff -348e148,ff3bff -348e14c,35ff00ff -348e150,9e0000 -348e17c,5d9e -348e180,5bff4dff -348e184,48ff00ff -348e188,6ff35ff -348e18c,2eff00ff -348e190,9e0000 -348e1bc,5a9e -348e1c0,57ff48ff -348e1c4,42ff03ff -348e1c8,cff2eff -348e1cc,28ff00ff -348e1d0,9e0000 -348e1fc,559e -348e200,53ff42ff -348e204,3cff2dff -348e208,28ff28ff -348e20c,1fff00ff -348e210,9e0000 -348e23c,4b91 -348e240,44ff33ff -348e244,35ff2fff -348e248,28ff1fff -348e24c,7ff00ff -348e250,900000 -348e27c,1229 -348e280,f700ff -348e284,ff00ff -348e288,ff00ff -348e28c,ff00f8 -348e290,2e0000 -348e2c0,30008c -348e2c4,990099 -348e2c8,990099 -348e2cc,8c0030 -348e328,f0f0f0f0 -348e32c,f0f0f0f0 -348e330,f0f0f0f0 -348e334,f0f0f0f0 -348e338,f0f0f0f0 -348e33c,f0f0f0f0 -348e340,dff0f0f0 -348e344,f0f0f0f0 -348e348,f0f0f0f0 -348e34c,f0f0f0df -348e350,dff0f0f0 -348e354,f0f0f0f0 -348e358,f0f0f0f0 -348e35c,f0f0f0df -348e360,dfcff0f0 -348e364,f0f0f0f0 -348e368,f0f0f0f0 -348e36c,f0f0cfcf -348e370,cfcff0f0 -348e374,f0f0f0f0 -348e378,f0f0f0f0 -348e37c,f0f0cfcf -348e380,cfcfcff0 -348e384,f0f0f0f0 -348e388,f0f0f0f0 -348e38c,f0cfcfcf -348e390,cfcfcff0 -348e394,f0f0f0f0 -348e398,f0f0f0f0 -348e39c,f0cfcfcf -348e3a0,cfcfcfcf -348e3a4,f0f0f0f0 -348e3a8,f0f0f0f0 -348e3ac,cfcfcfcf -348e3b0,cfbfbfbf -348e3b4,f0f0f0f0 -348e3b8,f0f0f0f0 -348e3bc,bfbfbfbf -348e3c0,bfbfbfbf -348e3c4,f0f0f0f0 -348e3c8,f0f0f0bf -348e3cc,bfbfbfbf -348e3d0,bfbfbfbf -348e3d4,bff0f0f0 -348e3d8,f0f0f0bf -348e3dc,bfbff0f0 -348e3e0,f0f0f0f0 -348e3e4,f0f0f0f0 -348e3e8,f0f0f0f0 -348e3ec,f0f0f0f0 -348e3f0,f0f0f0f0 -348e3f4,f0f0f0f0 -348e3f8,f0f0f0f0 -348e3fc,f0f0f0f0 -348e400,f0f0f0f0 -348e404,f0f0f0f0 -348e408,f0f0f0f0 -348e40c,f0f0f0f0 -348e410,f0f0f0f0 -348e414,f0f0f0f0 -348e418,f0f0f0f0 -348e41c,f0f0f0f0 -348e420,f0f0f0f0 -348e424,f0f0f0f0 -348e428,f0f0f0f0 -348e42c,f0f0f0f0 -348e430,f0f0f0f0 -348e434,f0f0f0f0 -348e438,f0f0f0f0 -348e43c,f0f0f0cf -348e440,cff0f0f0 -348e444,f0f0f0f0 -348e448,f0f0f0f0 -348e44c,f0f0f0cf -348e450,cfcff0f0 -348e454,f0f0f0f0 -348e458,f0f0f0f0 -348e45c,f0f0bfcf -348e460,cfcff0f0 -348e464,f0f0f0f0 -348e468,f0f0f0f0 -348e46c,f0f0bfcf -348e470,cfcff0f0 -348e474,f0f0f0f0 -348e478,f0f0f0f0 -348e47c,f0bfcfbf -348e480,bfbfbff0 -348e484,f0f0f0f0 -348e488,f0f0f0f0 -348e48c,f0bfbfbf -348e490,bfbfbff0 -348e494,f0f0f0f0 -348e498,f0f0f0f0 -348e49c,bfbfbfbf -348e4a0,bfbfbfbf -348e4a4,f0f0f0f0 -348e4a8,f0f0f0f0 -348e4ac,bfbfbfbf -348e4b0,bfbfbfbf -348e4b4,f0f0f0f0 -348e4b8,f0f0f0f0 -348e4bc,bfbfbfbf -348e4c0,bfbfbfaf -348e4c4,f0f0f0f0 -348e4c8,f0f0f0af -348e4cc,bfbfbfbf -348e4d0,afafaff0 -348e4d4,f0f0f0f0 -348e4d8,f0f0f0bf -348e4dc,bfbfaff0 -348e4e0,f0f0f0f0 -348e4e4,f0f0f0f0 -348e4e8,f0f0f0f0 -348e4ec,f0f0f0f0 -348e4f0,f0f0f0f0 -348e4f4,f0f0f0f0 -348e4f8,f0f0f0f0 -348e4fc,f0f0f0f0 -348e500,f0f0f0f0 -348e504,f0f0f0f0 -348e508,f0f0f0f0 -348e50c,f0f0f0f0 -348e510,f0f0f0f0 -348e514,f0f0f0f0 -348e518,f0f0f0f0 -348e51c,f0f0f0f0 -348e520,f0f0f0f0 -348e524,f0f0f0f0 -348e528,f0f0f0f0 -348e52c,f0f0f0f0 -348e530,f0f0f0f0 -348e534,f0f0f0f0 -348e538,f0f0f0f0 -348e53c,f0f0f0ef -348e540,eff0f0f0 -348e544,f0f0f0f0 -348e548,f0f0f0f0 -348e54c,f0f0f0ef -348e550,bfbff0f0 -348e554,f0f0f0f0 -348e558,f0f0f0f0 -348e55c,f0f0dfdf -348e560,bfbff0f0 -348e564,f0f0f0f0 -348e568,f0f0f0f0 -348e56c,f0f0dfbf -348e570,afaff0f0 -348e574,f0f0f0f0 -348e578,f0f0f0f0 -348e57c,f0dfdfaf -348e580,afafaff0 -348e584,f0f0f0f0 -348e588,f0f0f0f0 -348e58c,f0dfafaf -348e590,afafaff0 -348e594,f0f0f0f0 -348e598,f0f0f0f0 -348e59c,dfdfafaf -348e5a0,afafaff0 -348e5a4,f0f0f0f0 -348e5a8,f0f0f0f0 -348e5ac,dfdfafaf -348e5b0,afafaf9f -348e5b4,f0f0f0f0 -348e5b8,f0f0f0f0 -348e5bc,cfafafaf -348e5c0,afaf9f9f -348e5c4,f0f0f0f0 -348e5c8,f0f0f0cf -348e5cc,cfafafaf -348e5d0,9f9ff0f0 -348e5d4,f0f0f0f0 -348e5d8,f0f0f0cf -348e5dc,afafaf9f -348e5e0,f0f0f0f0 -348e5e4,f0f0f0f0 -348e5e8,f0f0f0cf -348e5ec,aff0f0f0 -348e5f0,f0f0f0f0 -348e5f4,f0f0f0f0 -348e5f8,f0f0f0f0 -348e5fc,f0f0f0f0 -348e600,f0f0f0f0 -348e604,f0f0f0f0 -348e608,f0f0f0f0 -348e60c,f0f0f0f0 -348e610,f0f0f0f0 -348e614,f0f0f0f0 -348e618,f0f0f0f0 -348e61c,f0f0f0f0 -348e620,f0f0f0f0 -348e624,f0f0f0f0 -348e628,f0f0f0f0 -348e62c,f0f0f0f0 -348e630,f0f0f0f0 -348e634,f0f0f0f0 -348e638,f0f0f0f0 -348e63c,f0f0f0ff -348e640,ff9ff0f0 -348e644,f0f0f0f0 -348e648,f0f0f0f0 -348e64c,f0f0ffff -348e650,ff9ff0f0 -348e654,f0f0f0f0 -348e658,f0f0f0f0 -348e65c,f0f0ffff -348e660,9f9ff0f0 -348e664,f0f0f0f0 -348e668,f0f0f0f0 -348e66c,f0f0ffff -348e670,9f9ff0f0 -348e674,f0f0f0f0 -348e678,f0f0f0f0 -348e67c,f0efef9f -348e680,9f9f9ff0 -348e684,f0f0f0f0 -348e688,f0f0f0f0 -348e68c,f0efef9f -348e690,9f9f8ff0 -348e694,f0f0f0f0 -348e698,f0f0f0f0 -348e69c,f0efef9f -348e6a0,9f8f8ff0 -348e6a4,f0f0f0f0 -348e6a8,f0f0f0f0 -348e6ac,efef9f9f -348e6b0,8f8f8ff0 -348e6b4,f0f0f0f0 -348e6b8,f0f0f0f0 -348e6bc,efef9f8f -348e6c0,8f8f8ff0 -348e6c4,f0f0f0f0 -348e6c8,f0f0f0ef -348e6cc,efef8f8f -348e6d0,8f8ff0f0 -348e6d4,f0f0f0f0 -348e6d8,f0f0f0ef -348e6dc,ef8f8f8f -348e6e0,f0f0f0f0 -348e6e4,f0f0f0f0 -348e6e8,f0f0f0ef -348e6ec,ef8f8ff0 -348e6f0,f0f0f0f0 -348e6f4,f0f0f0f0 -348e6f8,f0f0f0f0 -348e6fc,8ff0f0f0 -348e700,f0f0f0f0 -348e704,f0f0f0f0 -348e708,f0f0f0f0 -348e70c,f0f0f0f0 -348e710,f0f0f0f0 -348e714,f0f0f0f0 -348e718,f0f0f0f0 -348e71c,f0f0f0f0 -348e720,f0f0f0f0 -348e724,f0f0f0f0 -348e728,f0f0f0f0 -348e72c,f0f0f0f0 -348e730,f0f0f0f0 -348e734,f0f0f0f0 -348e738,f0f0f0f0 -348e73c,f0f0f0ff -348e740,ff7ff0f0 -348e744,f0f0f0f0 -348e748,f0f0f0f0 -348e74c,f0f0ffff -348e750,ff7ff0f0 -348e754,f0f0f0f0 -348e758,f0f0f0f0 -348e75c,f0f0ffff -348e760,ff7ff0f0 -348e764,f0f0f0f0 -348e768,f0f0f0f0 -348e76c,f0f0ffff -348e770,7f7ff0f0 -348e774,f0f0f0f0 -348e778,f0f0f0f0 -348e77c,f0ffffff -348e780,7f7ff0f0 -348e784,f0f0f0f0 -348e788,f0f0f0f0 -348e78c,f0ffffff -348e790,7f7ff0f0 -348e794,f0f0f0f0 -348e798,f0f0f0f0 -348e79c,f0ffff7f -348e7a0,7f7f7ff0 -348e7a4,f0f0f0f0 -348e7a8,f0f0f0f0 -348e7ac,ffffff7f -348e7b0,7f7f6ff0 -348e7b4,f0f0f0f0 -348e7b8,f0f0f0f0 -348e7bc,ffffff7f -348e7c0,7f6f6ff0 -348e7c4,f0f0f0f0 -348e7c8,f0f0f0f0 -348e7cc,ffffff7f -348e7d0,7f6ff0f0 -348e7d4,f0f0f0f0 -348e7d8,f0f0f0f0 -348e7dc,ffff7f7f -348e7e0,f0f0f0f0 -348e7e4,f0f0f0f0 -348e7e8,f0f0f0ff -348e7ec,ffff7ff0 -348e7f0,f0f0f0f0 -348e7f4,f0f0f0f0 -348e7f8,f0f0f0f0 -348e7fc,fffff0f0 -348e800,f0f0f0f0 -348e804,f0f0f0f0 -348e808,f0f0f0f0 -348e80c,f0f0f0f0 -348e810,f0f0f0f0 -348e814,f0f0f0f0 -348e818,f0f0f0f0 -348e81c,f0f0f0f0 -348e820,f0f0f0f0 -348e824,f0f0f0f0 -348e828,f0f0f0f0 -348e82c,f0f0f0f0 -348e830,f0f0f0f0 -348e834,f0f0f0f0 -348e838,f0f0f0f0 -348e83c,f0f0ffff -348e840,ff5ff0f0 -348e844,f0f0f0f0 -348e848,f0f0f0f0 -348e84c,f0f0ffff -348e850,ff5ff0f0 -348e854,f0f0f0f0 -348e858,f0f0f0f0 -348e85c,f0f0ffff -348e860,ff5ff0f0 -348e864,f0f0f0f0 -348e868,f0f0f0f0 -348e86c,f0f0ffff -348e870,ff5ff0f0 -348e874,f0f0f0f0 -348e878,f0f0f0f0 -348e87c,f0f0ffff -348e880,ff5ff0f0 -348e884,f0f0f0f0 -348e888,f0f0f0f0 -348e88c,f0ffffff -348e890,5f5ff0f0 -348e894,f0f0f0f0 -348e898,f0f0f0f0 -348e89c,f0ffffff -348e8a0,5f5ff0f0 -348e8a4,f0f0f0f0 -348e8a8,f0f0f0f0 -348e8ac,f0ffffff -348e8b0,5f5ff0f0 -348e8b4,f0f0f0f0 -348e8b8,f0f0f0f0 -348e8bc,f0ffffff -348e8c0,5f5ff0f0 -348e8c4,f0f0f0f0 -348e8c8,f0f0f0f0 -348e8cc,ffffffff -348e8d0,5ff0f0f0 -348e8d4,f0f0f0f0 -348e8d8,f0f0f0f0 -348e8dc,ffffff5f -348e8e0,5ff0f0f0 -348e8e4,f0f0f0f0 -348e8e8,f0f0f0f0 -348e8ec,ffffff5f -348e8f0,f0f0f0f0 -348e8f4,f0f0f0f0 -348e8f8,f0f0f0f0 -348e8fc,ffffff5f -348e900,f0f0f0f0 -348e904,f0f0f0f0 -348e908,f0f0f0f0 -348e90c,f0f0fff0 -348e910,f0f0f0f0 -348e914,f0f0f0f0 -348e918,f0f0f0f0 -348e91c,f0f0f0f0 -348e920,f0f0f0f0 -348e924,f0f0f0f0 -348e928,f0f0f0f0 -348e92c,f0f0f0f0 -348e930,f0f0f0f0 -348e934,f0f0f0f0 -348e938,f0f0f0f0 -348e93c,f0f0ffff -348e940,fffff0f0 -348e944,f0f0f0f0 -348e948,f0f0f0f0 -348e94c,f0f0ffff -348e950,fffff0f0 -348e954,f0f0f0f0 -348e958,f0f0f0f0 -348e95c,f0f0ffff -348e960,ff3ff0f0 -348e964,f0f0f0f0 -348e968,f0f0f0f0 -348e96c,f0f0ffff -348e970,ff3ff0f0 -348e974,f0f0f0f0 -348e978,f0f0f0f0 -348e97c,f0f0ffff -348e980,ff3ff0f0 -348e984,f0f0f0f0 -348e988,f0f0f0f0 -348e98c,f0f0ffff -348e990,ff3ff0f0 -348e994,f0f0f0f0 -348e998,f0f0f0f0 -348e99c,f0f0ffff -348e9a0,ff3ff0f0 -348e9a4,f0f0f0f0 -348e9a8,f0f0f0f0 -348e9ac,f0ffffff -348e9b0,ff3ff0f0 -348e9b4,f0f0f0f0 -348e9b8,f0f0f0f0 -348e9bc,f0ffffff -348e9c0,fff0f0f0 -348e9c4,f0f0f0f0 -348e9c8,f0f0f0f0 -348e9cc,f0ffffff -348e9d0,fff0f0f0 -348e9d4,f0f0f0f0 -348e9d8,f0f0f0f0 -348e9dc,f0ffffff -348e9e0,fff0f0f0 -348e9e4,f0f0f0f0 -348e9e8,f0f0f0f0 -348e9ec,f0ffffff -348e9f0,fff0f0f0 -348e9f4,f0f0f0f0 -348e9f8,f0f0f0f0 -348e9fc,f0ffffff -348ea00,fff0f0f0 -348ea04,f0f0f0f0 -348ea08,f0f0f0f0 -348ea0c,f0f0f0ff -348ea10,f0f0f0f0 -348ea14,f0f0f0f0 -348ea18,f0f0f0f0 -348ea1c,f0f0f0f0 -348ea20,f0f0f0f0 -348ea24,f0f0f0f0 -348ea28,f0f0f0f0 -348ea2c,f0f0f0f0 -348ea30,f0f0f0f0 -348ea34,f0f0f0f0 -348ea38,f0f0f0f0 -348ea3c,f0f0ffff -348ea40,fffff0f0 -348ea44,f0f0f0f0 -348ea48,f0f0f0f0 -348ea4c,f0f0ffff -348ea50,fffff0f0 -348ea54,f0f0f0f0 -348ea58,f0f0f0f0 -348ea5c,f0f0ffff -348ea60,fffff0f0 -348ea64,f0f0f0f0 -348ea68,f0f0f0f0 -348ea6c,f0f0ffff -348ea70,fffff0f0 -348ea74,f0f0f0f0 -348ea78,f0f0f0f0 -348ea7c,f0f0ffff -348ea80,fffff0f0 -348ea84,f0f0f0f0 -348ea88,f0f0f0f0 -348ea8c,f0f0ffff -348ea90,fffff0f0 -348ea94,f0f0f0f0 -348ea98,f0f0f0f0 -348ea9c,f0f0ffff -348eaa0,fffff0f0 -348eaa4,f0f0f0f0 -348eaa8,f0f0f0f0 -348eaac,f0f0ffff -348eab0,fffff0f0 -348eab4,f0f0f0f0 -348eab8,f0f0f0f0 -348eabc,f0f0ffff -348eac0,fffff0f0 -348eac4,f0f0f0f0 -348eac8,f0f0f0f0 -348eacc,f0f0ffff -348ead0,fffff0f0 -348ead4,f0f0f0f0 -348ead8,f0f0f0f0 -348eadc,f0f0ffff -348eae0,fffff0f0 -348eae4,f0f0f0f0 -348eae8,f0f0f0f0 -348eaec,f0f0ffff -348eaf0,fffff0f0 -348eaf4,f0f0f0f0 -348eaf8,f0f0f0f0 -348eafc,f0f0ffff -348eb00,fffff0f0 -348eb04,f0f0f0f0 -348eb08,f0f0f0f0 -348eb0c,f0f0ffff -348eb10,fffff0f0 -348eb14,f0f0f0f0 -348eb18,f0f0f0f0 -348eb1c,f0f0f0f0 -348eb20,f0f0f0f0 -348eb24,f0f0f0f0 -348eb28,f0f0f0f0 -348eb2c,f0f0f0f0 -348eb30,f0f0f0f0 -348eb34,f0f0f0f0 -348eb38,f0f0f0f0 -348eb3c,f0f0ffff -348eb40,fffff0f0 -348eb44,f0f0f0f0 -348eb48,f0f0f0f0 -348eb4c,f0f0ffff -348eb50,fffff0f0 -348eb54,f0f0f0f0 -348eb58,f0f0f0f0 -348eb5c,f0f03fff -348eb60,fffff0f0 -348eb64,f0f0f0f0 -348eb68,f0f0f0f0 -348eb6c,f0f03fff -348eb70,fffff0f0 -348eb74,f0f0f0f0 -348eb78,f0f0f0f0 -348eb7c,f0f03fff -348eb80,fffff0f0 -348eb84,f0f0f0f0 -348eb88,f0f0f0f0 -348eb8c,f0f03fff -348eb90,fffff0f0 -348eb94,f0f0f0f0 -348eb98,f0f0f0f0 -348eb9c,f0f03fff -348eba0,fffff0f0 -348eba4,f0f0f0f0 -348eba8,f0f0f0f0 -348ebac,f0f03fff -348ebb0,fffffff0 -348ebb4,f0f0f0f0 -348ebb8,f0f0f0f0 -348ebbc,f0f0f0ff -348ebc0,fffffff0 -348ebc4,f0f0f0f0 -348ebc8,f0f0f0f0 -348ebcc,f0f0f0ff -348ebd0,fffffff0 -348ebd4,f0f0f0f0 -348ebd8,f0f0f0f0 -348ebdc,f0f0f0ff -348ebe0,fffffff0 -348ebe4,f0f0f0f0 -348ebe8,f0f0f0f0 -348ebec,f0f0f0ff -348ebf0,fffffff0 -348ebf4,f0f0f0f0 -348ebf8,f0f0f0f0 -348ebfc,f0f0f0ff -348ec00,fffffff0 -348ec04,f0f0f0f0 -348ec08,f0f0f0f0 -348ec0c,f0f0f0f0 -348ec10,fff0f0f0 -348ec14,f0f0f0f0 -348ec18,f0f0f0f0 -348ec1c,f0f0f0f0 -348ec20,f0f0f0f0 -348ec24,f0f0f0f0 -348ec28,f0f0f0f0 -348ec2c,f0f0f0f0 -348ec30,f0f0f0f0 -348ec34,f0f0f0f0 -348ec38,f0f0f0f0 -348ec3c,f0f05fff -348ec40,fffff0f0 -348ec44,f0f0f0f0 -348ec48,f0f0f0f0 -348ec4c,f0f05fff -348ec50,fffff0f0 -348ec54,f0f0f0f0 -348ec58,f0f0f0f0 -348ec5c,f0f05fff -348ec60,fffff0f0 -348ec64,f0f0f0f0 -348ec68,f0f0f0f0 -348ec6c,f0f05fff -348ec70,fffff0f0 -348ec74,f0f0f0f0 -348ec78,f0f0f0f0 -348ec7c,f0f05fff -348ec80,fffff0f0 -348ec84,f0f0f0f0 -348ec88,f0f0f0f0 -348ec8c,f0f05f5f -348ec90,fffffff0 -348ec94,f0f0f0f0 -348ec98,f0f0f0f0 -348ec9c,f0f05f5f -348eca0,fffffff0 -348eca4,f0f0f0f0 -348eca8,f0f0f0f0 -348ecac,f0f05f5f -348ecb0,fffffff0 -348ecb4,f0f0f0f0 -348ecb8,f0f0f0f0 -348ecbc,f0f05f5f -348ecc0,fffffff0 -348ecc4,f0f0f0f0 -348ecc8,f0f0f0f0 -348eccc,f0f0f05f -348ecd0,ffffffff -348ecd4,f0f0f0f0 -348ecd8,f0f0f0f0 -348ecdc,f0f0f05f -348ece0,5fffffff -348ece4,f0f0f0f0 -348ece8,f0f0f0f0 -348ecec,f0f0f0f0 -348ecf0,5fffffff -348ecf4,f0f0f0f0 -348ecf8,f0f0f0f0 -348ecfc,f0f0f0f0 -348ed00,5fffffff -348ed04,f0f0f0f0 -348ed08,f0f0f0f0 -348ed0c,f0f0f0f0 -348ed10,f0fff0f0 -348ed14,f0f0f0f0 -348ed18,f0f0f0f0 -348ed1c,f0f0f0f0 -348ed20,f0f0f0f0 -348ed24,f0f0f0f0 -348ed28,f0f0f0f0 -348ed2c,f0f0f0f0 -348ed30,f0f0f0f0 -348ed34,f0f0f0f0 -348ed38,f0f0f0f0 -348ed3c,f0f07fff -348ed40,fff0f0f0 -348ed44,f0f0f0f0 -348ed48,f0f0f0f0 -348ed4c,f0f07fff -348ed50,fffff0f0 -348ed54,f0f0f0f0 -348ed58,f0f0f0f0 -348ed5c,f0f07fff -348ed60,fffff0f0 -348ed64,f0f0f0f0 -348ed68,f0f0f0f0 -348ed6c,f0f07f7f -348ed70,fffff0f0 -348ed74,f0f0f0f0 -348ed78,f0f0f0f0 -348ed7c,f0f07f7f -348ed80,fffffff0 -348ed84,f0f0f0f0 -348ed88,f0f0f0f0 -348ed8c,f0f07f7f -348ed90,fffffff0 -348ed94,f0f0f0f0 -348ed98,f0f0f0f0 -348ed9c,f07f7f7f -348eda0,7ffffff0 -348eda4,f0f0f0f0 -348eda8,f0f0f0f0 -348edac,f06f7f7f -348edb0,7fffffff -348edb4,f0f0f0f0 -348edb8,f0f0f0f0 -348edbc,f06f6f7f -348edc0,7fffffff -348edc4,f0f0f0f0 -348edc8,f0f0f0f0 -348edcc,f0f06f7f -348edd0,7fffffff -348edd4,f0f0f0f0 -348edd8,f0f0f0f0 -348eddc,f0f0f0f0 -348ede0,7f7fffff -348ede4,f0f0f0f0 -348ede8,f0f0f0f0 -348edec,f0f0f0f0 -348edf0,f07fffff -348edf4,fff0f0f0 -348edf8,f0f0f0f0 -348edfc,f0f0f0f0 -348ee00,f0f0ffff -348ee04,f0f0f0f0 -348ee08,f0f0f0f0 -348ee0c,f0f0f0f0 -348ee10,f0f0f0f0 -348ee14,f0f0f0f0 -348ee18,f0f0f0f0 -348ee1c,f0f0f0f0 -348ee20,f0f0f0f0 -348ee24,f0f0f0f0 -348ee28,f0f0f0f0 -348ee2c,f0f0f0f0 -348ee30,f0f0f0f0 -348ee34,f0f0f0f0 -348ee38,f0f0f0f0 -348ee3c,f0f09fff -348ee40,fff0f0f0 -348ee44,f0f0f0f0 -348ee48,f0f0f0f0 -348ee4c,f0f09fff -348ee50,fffff0f0 -348ee54,f0f0f0f0 -348ee58,f0f0f0f0 -348ee5c,f0f09f9f -348ee60,fffff0f0 -348ee64,f0f0f0f0 -348ee68,f0f0f0f0 -348ee6c,f0f09f9f -348ee70,fffff0f0 -348ee74,f0f0f0f0 -348ee78,f0f0f0f0 -348ee7c,f09f9f9f -348ee80,9fffeff0 -348ee84,f0f0f0f0 -348ee88,f0f0f0f0 -348ee8c,f08f9f9f -348ee90,9fefeff0 -348ee94,f0f0f0f0 -348ee98,f0f0f0f0 -348ee9c,f08f8f9f -348eea0,9fefeff0 -348eea4,f0f0f0f0 -348eea8,f0f0f0f0 -348eeac,f08f8f8f -348eeb0,9f9fefef -348eeb4,f0f0f0f0 -348eeb8,f0f0f0f0 -348eebc,f08f8f8f -348eec0,8f9fefef -348eec4,f0f0f0f0 -348eec8,f0f0f0f0 -348eecc,f0f08f8f -348eed0,8f8fefef -348eed4,eff0f0f0 -348eed8,f0f0f0f0 -348eedc,f0f0f0f0 -348eee0,8f8f8fef -348eee4,eff0f0f0 -348eee8,f0f0f0f0 -348eeec,f0f0f0f0 -348eef0,f08f8fef -348eef4,eff0f0f0 -348eef8,f0f0f0f0 -348eefc,f0f0f0f0 -348ef00,f0f0f08f -348ef04,f0f0f0f0 -348ef08,f0f0f0f0 -348ef0c,f0f0f0f0 -348ef10,f0f0f0f0 -348ef14,f0f0f0f0 -348ef18,f0f0f0f0 -348ef1c,f0f0f0f0 -348ef20,f0f0f0f0 -348ef24,f0f0f0f0 -348ef28,f0f0f0f0 -348ef2c,f0f0f0f0 -348ef30,f0f0f0f0 -348ef34,f0f0f0f0 -348ef38,f0f0f0f0 -348ef3c,f0f0f0ef -348ef40,eff0f0f0 -348ef44,f0f0f0f0 -348ef48,f0f0f0f0 -348ef4c,f0f0bfbf -348ef50,eff0f0f0 -348ef54,f0f0f0f0 -348ef58,f0f0f0f0 -348ef5c,f0f0bfbf -348ef60,dfdff0f0 -348ef64,f0f0f0f0 -348ef68,f0f0f0f0 -348ef6c,f0f0afbf -348ef70,bfdff0f0 -348ef74,f0f0f0f0 -348ef78,f0f0f0f0 -348ef7c,f0afafaf -348ef80,afdfdff0 -348ef84,f0f0f0f0 -348ef88,f0f0f0f0 -348ef8c,f0afafaf -348ef90,afafdff0 -348ef94,f0f0f0f0 -348ef98,f0f0f0f0 -348ef9c,f0afafaf -348efa0,afafdfdf -348efa4,f0f0f0f0 -348efa8,f0f0f0f0 -348efac,9fafafaf -348efb0,afafdfdf -348efb4,f0f0f0f0 -348efb8,f0f0f0f0 -348efbc,9f9fafaf -348efc0,afafafcf -348efc4,f0f0f0f0 -348efc8,f0f0f0f0 -348efcc,f0f09f9f -348efd0,afafafcf -348efd4,cff0f0f0 -348efd8,f0f0f0f0 -348efdc,f0f0f0f0 -348efe0,9fafafaf -348efe4,cff0f0f0 -348efe8,f0f0f0f0 -348efec,f0f0f0f0 -348eff0,f0f0f0af -348eff4,cff0f0f0 -348eff8,f0f0f0f0 -348effc,f0f0f0f0 -348f000,f0f0f0f0 -348f004,f0f0f0f0 -348f008,f0f0f0f0 -348f00c,f0f0f0f0 -348f010,f0f0f0f0 -348f014,f0f0f0f0 -348f018,f0f0f0f0 -348f01c,f0f0f0f0 -348f020,f0f0f0f0 -348f024,f0f0f0f0 -348f028,f0f0f0f0 -348f02c,f0f0f0f0 -348f030,f0f0f0f0 -348f034,f0f0f0f0 -348f038,f0f0f0f0 -348f03c,f0f0f0cf -348f040,cff0f0f0 -348f044,f0f0f0f0 -348f048,f0f0f0f0 -348f04c,f0f0cfcf -348f050,cff0f0f0 -348f054,f0f0f0f0 -348f058,f0f0f0f0 -348f05c,f0f0cfcf -348f060,cfbff0f0 -348f064,f0f0f0f0 -348f068,f0f0f0f0 -348f06c,f0f0cfcf -348f070,cfbff0f0 -348f074,f0f0f0f0 -348f078,f0f0f0f0 -348f07c,f0bfbfbf -348f080,cfcfbff0 -348f084,f0f0f0f0 -348f088,f0f0f0f0 -348f08c,f0bfbfbf -348f090,bfbfbff0 -348f094,f0f0f0f0 -348f098,f0f0f0f0 -348f09c,bfbfbfbf -348f0a0,bfbfbfbf -348f0a4,f0f0f0f0 -348f0a8,f0f0f0f0 -348f0ac,bfbfbfbf -348f0b0,bfbfbfbf -348f0b4,f0f0f0f0 -348f0b8,f0f0f0f0 -348f0bc,afafbfbf -348f0c0,bfbfbfbf -348f0c4,f0f0f0f0 -348f0c8,f0f0f0f0 -348f0cc,f0afafaf -348f0d0,bfbfbfbf -348f0d4,aff0f0f0 -348f0d8,f0f0f0f0 -348f0dc,f0f0f0f0 -348f0e0,f0afbfbf -348f0e4,bff0f0f0 -348f0e8,f0f0f0f0 -348f0ec,f0f0f0f0 -348f0f0,f0f0f0f0 -348f0f4,f0f0f0f0 -348f0f8,f0f0f0f0 -348f0fc,f0f0f0f0 -348f100,f0f0f0f0 -348f104,f0f0f0f0 -348f108,f0f0f0f0 -348f10c,f0f0f0f0 -348f110,f0f0f0f0 -348f114,f0f0f0f0 -348f118,f0f0f0f0 -348f11c,f0f0f0f0 -348f120,f0f0f0f0 -348f124,f0f0f0f0 -348f128,f0f0f0f0 -348f12c,f0f0f0f0 -348f130,f0f0f0f0 -348f134,f0f0f0f0 -348f138,f0f0f0f0 -348f13c,f0f0f0df -348f140,f0f0f0f0 -348f144,f0f0f0f0 -348f148,f0f0f0f0 -348f14c,f0f0f0df -348f150,dff0f0f0 -348f154,f0f0f0f0 -348f158,f0f0f0f0 -348f15c,f0f0cfdf -348f160,dff0f0f0 -348f164,f0f0f0f0 -348f168,f0f0f0f0 -348f16c,f0f0cfcf -348f170,cfcff0f0 -348f174,f0f0f0f0 -348f178,f0f0f0f0 -348f17c,f0cfcfcf -348f180,cfcff0f0 -348f184,f0f0f0f0 -348f188,f0f0f0f0 -348f18c,f0cfcfcf -348f190,cfcfcff0 -348f194,f0f0f0f0 -348f198,f0f0f0f0 -348f19c,cfcfcfcf -348f1a0,cfcfcff0 -348f1a4,f0f0f0f0 -348f1a8,f0f0f0f0 -348f1ac,bfbfcfcf -348f1b0,cfcfcfcf -348f1b4,f0f0f0f0 -348f1b8,f0f0f0f0 -348f1bc,bfbfbfbf -348f1c0,bfbfbfbf -348f1c4,f0f0f0f0 -348f1c8,f0f0f0bf -348f1cc,bfbfbfbf -348f1d0,bfbfbfbf -348f1d4,bff0f0f0 -348f1d8,f0f0f0f0 -348f1dc,f0f0f0f0 -348f1e0,f0f0bfbf -348f1e4,bff0f0f0 -348f1e8,f0f0f0f0 -348f1ec,f0f0f0f0 -348f1f0,f0f0f0f0 -348f1f4,f0f0f0f0 -348f1f8,f0f0f0f0 -348f1fc,f0f0f0f0 -348f200,f0f0f0f0 -348f204,f0f0f0f0 -348f208,f0f0f0f0 -348f20c,f0f0f0f0 -348f210,f0f0f0f0 -348f214,f0f0f0f0 -348f218,f0f0f0f0 -348f21c,f0f0f0f0 -348f220,f0f0f0f0 -348f224,f0f0f0f0 -348f228,f0f0f0f0 -348f22c,f0f0f0f0 -348f230,f0f0f0f0 -348f234,f0f0f0f0 -348f238,f0f0f0f0 -348f23c,f0f0f0df -348f240,dff0f0f0 -348f244,f0f0f0f0 -348f248,f0f0f0f0 -348f24c,f0f0f0df -348f250,dff0f0f0 -348f254,f0f0f0f0 -348f258,f0f0f0f0 -348f25c,f0f0dfdf -348f260,dfdff0f0 -348f264,f0f0f0f0 -348f268,f0f0f0f0 -348f26c,f0f0dfdf -348f270,dfdff0f0 -348f274,f0f0f0f0 -348f278,f0f0f0f0 -348f27c,f0f0cfcf -348f280,cfcff0f0 -348f284,f0f0f0f0 -348f288,f0f0f0f0 -348f28c,f0cfcfcf -348f290,cfcfcff0 -348f294,f0f0f0f0 -348f298,f0f0f0f0 -348f29c,f0cfcfcf -348f2a0,cfcfcff0 -348f2a4,f0f0f0f0 -348f2a8,f0f0f0f0 -348f2ac,cfcfcfcf -348f2b0,cfcfcfcf -348f2b4,f0f0f0f0 -348f2b8,f0f0f0f0 -348f2bc,cfcfcfcf -348f2c0,cfcfcfcf -348f2c4,f0f0f0f0 -348f2c8,f0f0f0bf -348f2cc,bfbfbfbf -348f2d0,bfbfbfbf -348f2d4,bff0f0f0 -348f2d8,f0f0f0f0 -348f2dc,f0f0f0f0 -348f2e0,f0f0f0f0 -348f2e4,f0f0f0f0 -348f2e8,f0f0f0f0 -348f2ec,f0f0f0f0 -348f2f0,f0f0f0f0 -348f2f4,f0f0f0f0 -348f2f8,f0f0f0f0 -348f2fc,f0f0f0f0 -348f300,f0f0f0f0 -348f304,f0f0f0f0 -348f308,f0f0f0f0 -348f30c,f0f0f0f0 -348f310,f0f0f0f0 -348f314,f0f0f0f0 -348f318,f0f0f0f0 -348f31c,f0f0f0f0 -348f320,f0f0f0f0 -348f324,f0f0f0f0 +3489ed4,24421f10 +3489ed8,2222021 +3489edc,90850000 +3489ee0,3c04801c +3489ee4,3c028006 +3489ee8,3442fdcc +3489eec,40f809 +3489ef0,348484a0 +3489ef4,1000005b +3489ef8,1025 +3489efc,8c4348f0 +3489f00,14600058 +3489f04,24020002 +3489f08,8e020130 +3489f0c,10400054 +3489f10,3c028041 +3489f14,ac5048f0 +3489f18,3c118041 +3489f1c,8fa4001c +3489f20,8fa20018 +3489f24,ae2248e8 +3489f28,263148e8 +3489f2c,ae240004 +3489f30,c1034fb +3489f34,42402 +3489f38,409825 +3489f3c,c1034ec +3489f40,402025 +3489f44,409025 +3489f48,c102671 +3489f4c,2002025 +3489f50,92310006 +3489f54,3c028040 +3489f58,a0510025 +3489f5c,82420014 +3489f60,4400021 +3489f64,3c02800c +3489f68,3c028041 +3489f6c,ac4048f0 +3489f70,24020001 +3489f74,a2020116 +3489f78,2403825 +3489f7c,3c068041 +3489f80,24c648e8 +3489f84,2202825 +3489f88,c102788 +3489f8c,2602025 +3489f90,82420014 +3489f94,28430003 +3489f98,14600007 +3489f9c,24044803 +3489fa0,2442ffed +3489fa4,304200ff +3489fa8,2c420002 +3489fac,10400002 +3489fb0,24044824 +3489fb4,24044803 +3489fb8,3c058010 +3489fbc,24a243a8 +3489fc0,afa20014 +3489fc4,24a743a0 +3489fc8,afa70010 +3489fcc,24060004 +3489fd0,3c02800c +3489fd4,3442806c +3489fd8,40f809 +3489fdc,24a54394 +3489fe0,10000020 +3489fe4,24020003 +3489fe8,244269a0 +3489fec,40f809 +3489ff0,24040039 +3489ff4,3025 +3489ff8,96450002 +3489ffc,3c04801c +348a000,3c02800d +348a004,3442ce14 +348a008,40f809 +348a00c,348484a0 +348a010,2402000f +348a014,a602014a +348a018,24020023 +348a01c,a6020144 +348a020,a6000142 +348a024,3c02801d +348a028,3442aa30 +348a02c,2403000a +348a030,a4430110 +348a034,3c028041 +348a038,24428cbc +348a03c,ae02013c +348a040,2403825 +348a044,3c068041 +348a048,24c648e8 +348a04c,2202825 +348a050,c102788 +348a054,2602025 +348a058,10000002 +348a05c,24020001 +348a060,24020002 +348a064,8fbf0034 +348a068,8fb30030 +348a06c,8fb2002c +348a070,8fb10028 +348a074,8fb00024 +348a078,3e00008 +348a07c,27bd0038 +348a080,27bdffd0 +348a084,afbf002c +348a088,afb30028 +348a08c,afb20024 +348a090,afb10020 +348a094,afb0001c +348a098,808025 +348a09c,3825 +348a0a0,3025 +348a0a4,802825 +348a0a8,c102409 +348a0ac,27a40010 +348a0b0,8fa20010 +348a0b4,10400023 +348a0b8,93b20016 +348a0bc,c1034fb +348a0c0,97a40014 +348a0c4,409825 +348a0c8,c1034ec +348a0cc,402025 +348a0d0,408825 +348a0d4,ae000134 +348a0d8,3c028040 +348a0dc,16400006 +348a0e0,a0520025 +348a0e4,3c028040 +348a0e8,90430024 +348a0ec,3c028040 +348a0f0,a0430025 +348a0f4,9025 +348a0f8,3025 +348a0fc,96250002 +348a100,3c04801c +348a104,3c03800d +348a108,3463ce14 +348a10c,60f809 +348a110,348484a0 +348a114,2203825 +348a118,27a60010 +348a11c,2402825 +348a120,c102788 +348a124,2602025 +348a128,8fbf002c +348a12c,8fb30028 +348a130,8fb20024 +348a134,8fb10020 +348a138,8fb0001c +348a13c,3e00008 +348a140,27bd0030 +348a144,c1034fb +348a148,2404005b +348a14c,409825 +348a150,c1034ec +348a154,402025 +348a158,408825 +348a15c,1000ffe1 +348a160,ae000134 +348a164,27bdffe8 +348a168,afbf0014 +348a16c,afb00010 +348a170,3c028011 +348a174,3442a5d0 +348a178,94500eec +348a17c,32100002 +348a180,1600000c +348a184,3c028040 +348a188,90420d69 +348a18c,50400004 +348a190,3c028011 +348a194,c1024e7 +348a198,24040002 +348a19c,3c028011 +348a1a0,3442a5d0 +348a1a4,94430eec +348a1a8,34630002 +348a1ac,a4430eec +348a1b0,3c028040 +348a1b4,90430d69 +348a1b8,14600002 +348a1bc,24020001 +348a1c0,10102b +348a1c4,8fbf0014 +348a1c8,8fb00010 +348a1cc,3e00008 +348a1d0,27bd0018 +348a1d4,94830004 +348a1d8,94820006 +348a1dc,620018 +348a1e0,9082000c +348a1e4,1812 +348a1f0,620018 +348a1f4,1012 +348a1f8,3e00008 +348a200,27bdffe8 +348a204,afbf0014 +348a208,afb00010 +348a20c,c102875 +348a210,808025 +348a214,96030008 +348a218,620018 +348a21c,1012 +348a220,8fbf0014 +348a224,8fb00010 +348a228,3e00008 +348a22c,27bd0018 +348a230,27bdff98 +348a234,afbf0064 +348a238,afb60060 +348a23c,afb5005c +348a240,afb40058 +348a244,afb30054 +348a248,afb20050 +348a24c,afb1004c +348a250,afb00048 +348a254,808025 +348a258,a0a025 +348a25c,c0a825 +348a260,94b10004 +348a264,94a20006 +348a268,470018 +348a26c,9012 +348a270,90b6000b +348a274,90b3000a +348a278,139d40 +348a27c,3c0200e0 +348a280,2629824 +348a284,1614c0 +348a288,3c030018 +348a28c,431024 +348a290,2629825 +348a294,2622ffff +348a298,30420fff +348a29c,531025 +348a2a0,3c03fd00 +348a2a4,431025 +348a2a8,afa20010 +348a2ac,c102875 +348a2b0,a02025 +348a2b4,550018 +348a2b8,8e820000 +348a2bc,1812 +348a2c0,431021 +348a2c4,afa20014 +348a2c8,2ec30002 +348a2cc,10600003 +348a2d0,24020010 +348a2d4,24020004 +348a2d8,2c21004 +348a2dc,510018 +348a2e0,1812 +348a2e4,2463003f +348a2e8,317c3 +348a2ec,3042003f +348a2f0,431021 +348a2f4,210c0 +348a2f8,3c030003 +348a2fc,3463fe00 +348a300,431024 +348a304,531025 +348a308,3c03f500 +348a30c,431025 +348a310,afa20018 +348a314,3c040700 +348a318,afa4001c +348a31c,3c03e600 +348a320,afa30020 +348a324,afa00024 +348a328,3c03f400 +348a32c,afa30028 +348a330,2623ffff +348a334,31b80 +348a338,3c0500ff +348a33c,34a5f000 +348a340,651824 +348a344,2652ffff +348a348,129080 +348a34c,32520ffc +348a350,721825 +348a354,642025 +348a358,afa4002c +348a35c,3c04e700 +348a360,afa40030 +348a364,afa00034 +348a368,afa20038 +348a36c,afa0003c +348a370,3c02f200 +348a374,afa20040 +348a378,afa30044 +348a37c,27a20010 +348a380,27a60048 +348a384,8e030008 +348a388,24640008 +348a38c,ae040008 +348a390,8c450004 +348a394,8c440000 +348a398,ac650004 +348a39c,24420008 +348a3a0,1446fff8 +348a3a4,ac640000 +348a3a8,8fbf0064 +348a3ac,8fb60060 +348a3b0,8fb5005c +348a3b4,8fb40058 +348a3b8,8fb30054 +348a3bc,8fb20050 +348a3c0,8fb1004c +348a3c4,8fb00048 +348a3c8,3e00008 +348a3cc,27bd0068 +348a3d0,27bdffe0 +348a3d4,8fa80030 +348a3d8,8fa20034 +348a3dc,8faa0038 +348a3e0,94a30004 +348a3e4,31a80 +348a3e8,14400002 +348a3ec,62001a +348a3f0,7000d +348a3f4,4812 +348a3f8,94a30006 +348a3fc,471021 +348a400,21380 +348a404,3c0b00ff +348a408,356bf000 +348a40c,4b1024 +348a410,1482821 +348a414,52880 +348a418,30a50fff +348a41c,451025 +348a420,3c05e400 +348a424,451025 +348a428,afa20000 +348a42c,73b80 +348a430,eb3824 +348a434,84080 +348a438,31080fff +348a43c,e83825 +348a440,afa70004 +348a444,3c02e100 +348a448,afa20008 +348a44c,660018 +348a450,1012 +348a454,21140 +348a458,3042ffff +348a45c,afa2000c +348a460,3c02f100 +348a464,afa20010 +348a468,31a80 +348a46c,15400002 +348a470,6a001a +348a474,7000d +348a478,1012 +348a47c,3042ffff +348a480,94c00 +348a484,491025 +348a488,afa20014 +348a48c,afbd0018 +348a490,27a50018 +348a494,8c820008 +348a498,24430008 +348a49c,ac830008 +348a4a0,8fa30018 +348a4a4,8c670004 +348a4a8,8c660000 +348a4ac,ac470004 +348a4b0,ac460000 +348a4b4,24620008 +348a4b8,1445fff6 +348a4bc,afa20018 +348a4c0,3e00008 +348a4c4,27bd0020 +348a4c8,27bdffa0 +348a4cc,afbf005c +348a4d0,afb10058 +348a4d4,afb00054 +348a4d8,afa00010 +348a4dc,3c0201a0 +348a4e0,24422000 +348a4e4,afa20014 +348a4e8,3c110003 +348a4ec,362295c0 +348a4f0,afa20018 +348a4f4,c1045e5 +348a4f8,27a40010 +348a4fc,afa0001c +348a500,3c020084 +348a504,24426000 +348a508,afa20020 +348a50c,3402b400 +348a510,afa20024 +348a514,c1045e5 +348a518,27a4001c +348a51c,afa00028 +348a520,3c02007b +348a524,3442d000 +348a528,afa2002c +348a52c,3c100008 +348a530,361088a0 +348a534,afb00030 +348a538,c1045e5 +348a53c,27a40028 +348a540,afa00034 +348a544,3c0201a3 +348a548,3442c000 +348a54c,afa20038 +348a550,24023b00 +348a554,afa2003c +348a558,c1045e5 +348a55c,27a40034 +348a560,afa00040 +348a564,3c020085 +348a568,3442e000 +348a56c,afa20044 +348a570,24021d80 +348a574,afa20048 +348a578,c1045e5 +348a57c,27a40040 +348a580,8fa20010 +348a584,2631a300 +348a588,518821 +348a58c,3c038041 +348a590,ac711fd8 +348a594,24422980 +348a598,3c038041 +348a59c,ac621fc8 +348a5a0,8fa20028 +348a5a4,3c038041 +348a5a8,ac621fb8 +348a5ac,3c038041 +348a5b0,8fa4001c +348a5b4,ac641fa8 +348a5b8,3c048041 +348a5bc,3c038042 +348a5c0,246393a8 +348a5c4,ac831f88 +348a5c8,3c048041 +348a5cc,3c038042 +348a5d0,24639ba8 +348a5d4,ac831f78 +348a5d8,2610f7a0 +348a5dc,501021 +348a5e0,3c038041 +348a5e4,ac621f68 +348a5e8,8fa20034 +348a5ec,24441e00 +348a5f0,3c038041 +348a5f4,ac641f58 +348a5f8,244435c0 +348a5fc,3c038041 +348a600,ac641f48 +348a604,8fa30040 +348a608,24631980 +348a60c,3c048041 +348a610,ac831f38 +348a614,3c038041 +348a618,ac621f28 +348a61c,3c118041 +348a620,c102880 +348a624,26241f98 +348a628,408025 +348a62c,c1045d6 +348a630,402025 +348a634,104fc2 +348a638,1304821 +348a63c,2a100002 +348a640,16000018 +348a644,ae221f98 +348a648,94843 +348a64c,3c038041 +348a650,24637ee0 +348a654,2025 +348a658,3025 +348a65c,2204025 +348a660,2407fff0 +348a664,8d051f98 +348a668,a42821 +348a66c,90620000 +348a670,21102 +348a674,471025 +348a678,a0a20000 +348a67c,8d021f98 +348a680,441021 +348a684,90650000 +348a688,a72825 +348a68c,a0450001 +348a690,24c60001 +348a694,24630001 +348a698,c9102a +348a69c,1440fff1 +348a6a0,24840002 +348a6a4,8fbf005c +348a6a8,8fb10058 +348a6ac,8fb00054 +348a6b0,3e00008 +348a6b4,27bd0060 +348a6b8,3c038040 +348a6bc,94620856 +348a6c0,24630856 +348a6c4,94640002 +348a6c8,94630004 +348a6cc,3c058041 +348a6d0,8ca548b0 +348a6d4,a4a20000 +348a6d8,a4a40002 +348a6dc,a4a30004 +348a6e0,3c058041 +348a6e4,8ca648ac +348a6e8,a4c20000 +348a6ec,8ca548ac +348a6f0,a4a40004 +348a6f4,a4a30008 +348a6f8,240500ff +348a6fc,1445000a +348a700,3c058041 +348a704,24050046 +348a708,14850007 +348a70c,3c058041 +348a710,24050032 +348a714,14650004 +348a718,3c058041 +348a71c,1825 +348a720,2025 +348a724,240200c8 +348a728,8ca548a8 +348a72c,a4a20000 +348a730,a4a40002 +348a734,a4a30004 +348a738,3c058041 +348a73c,8ca548a4 +348a740,a4a20000 +348a744,a4a40002 +348a748,a4a30004 +348a74c,3c028041 +348a750,8c4348a0 +348a754,3c028040 +348a758,9445085c +348a75c,2442085c +348a760,94440002 +348a764,94420004 +348a768,a4650000 +348a76c,a4640002 +348a770,a4620004 +348a774,3c028041 +348a778,8c43489c +348a77c,3c028040 +348a780,94450862 +348a784,24420862 +348a788,94440002 +348a78c,94420004 +348a790,a4650000 +348a794,a4640002 +348a798,a4620004 +348a79c,3c028041 +348a7a0,8c434898 +348a7a4,3c028040 +348a7a8,94450868 +348a7ac,24420868 +348a7b0,94440002 +348a7b4,94420004 +348a7b8,a4650000 +348a7bc,a4640002 +348a7c0,a4620004 +348a7c4,3c028041 +348a7c8,8c424894 +348a7cc,3c068040 +348a7d0,94c3087a +348a7d4,a4430000 +348a7d8,3c028041 +348a7dc,8c434890 +348a7e0,24c2087a +348a7e4,94440002 +348a7e8,a4640000 +348a7ec,3c038041 +348a7f0,8c63488c +348a7f4,94440004 +348a7f8,a4640000 +348a7fc,3c038041 +348a800,8c634888 +348a804,3c058040 +348a808,94a40880 +348a80c,a4640000 +348a810,3c038041 +348a814,8c644884 +348a818,24a30880 +348a81c,94670002 +348a820,a4870000 +348a824,3c048041 +348a828,8c844880 +348a82c,94670004 +348a830,a4870000 +348a834,3c048041 +348a838,8c84487c +348a83c,94c8087a +348a840,94470002 +348a844,94460004 +348a848,a4880000 +348a84c,a4870002 +348a850,a4860004 +348a854,3c048041 +348a858,8c84486c +348a85c,94a60880 +348a860,94650002 +348a864,94630004 +348a868,a4860000 +348a86c,a4850002 +348a870,a4830004 +348a874,94420002 +348a878,3043ffff +348a87c,2c6300ce +348a880,50600001 +348a884,240200cd +348a888,24420032 +348a88c,3047ffff +348a890,3c028040 +348a894,9442087e +348a898,3043ffff +348a89c,2c6300ce +348a8a0,50600001 +348a8a4,240200cd +348a8a8,24420032 +348a8ac,3046ffff +348a8b0,3c028040 +348a8b4,94420880 +348a8b8,3043ffff +348a8bc,2c6300ce +348a8c0,50600001 +348a8c4,240200cd +348a8c8,24420032 +348a8cc,3044ffff +348a8d0,3c028040 +348a8d4,94420882 +348a8d8,3043ffff +348a8dc,2c6300ce +348a8e0,50600001 +348a8e4,240200cd +348a8e8,24420032 +348a8ec,3043ffff +348a8f0,3c028040 +348a8f4,94420884 +348a8f8,3045ffff +348a8fc,2ca500ce +348a900,50a00001 +348a904,240200cd +348a908,24420032 +348a90c,3c058041 +348a910,8ca84878 +348a914,3c058040 +348a918,94a5087a +348a91c,30a9ffff +348a920,2d2900ce +348a924,15200002 +348a928,3042ffff +348a92c,240500cd +348a930,24a50032 +348a934,a5050000 +348a938,a5070002 +348a93c,a5060004 +348a940,3c058041 +348a944,8ca54868 +348a948,a4a40000 +348a94c,a4a30002 +348a950,a4a20004 +348a954,3c028041 +348a958,8c434870 +348a95c,3c028040 +348a960,9445087a +348a964,2442087a +348a968,94440002 +348a96c,94420004 +348a970,a4650000 +348a974,a4640002 +348a978,a4620004 +348a97c,3c028041 +348a980,8c434860 +348a984,3c028040 +348a988,94450880 +348a98c,24420880 +348a990,94440002 +348a994,94420004 +348a998,a4650000 +348a99c,a4640002 +348a9a0,a4620004 +348a9a4,3c028041 +348a9a8,8c43485c +348a9ac,3c028040 +348a9b0,9446086e +348a9b4,2444086e +348a9b8,94850002 +348a9bc,94840004 +348a9c0,a4660000 +348a9c4,a4650002 +348a9c8,a4640004 +348a9cc,9442086e +348a9d0,3043ffff +348a9d4,2c6300ce +348a9d8,50600001 +348a9dc,240200cd +348a9e0,24420032 +348a9e4,3044ffff +348a9e8,3c028040 +348a9ec,94420870 +348a9f0,3043ffff +348a9f4,2c6300ce +348a9f8,50600001 +348a9fc,240200cd +348aa00,24420032 +348aa04,3043ffff +348aa08,3c028040 +348aa0c,94420872 +348aa10,3045ffff +348aa14,2ca500ce +348aa18,50a00001 +348aa1c,240200cd +348aa20,24420032 +348aa24,3042ffff +348aa28,3c058041 +348aa2c,8ca54858 +348aa30,a4a40000 +348aa34,a4a30002 +348aa38,a4a20004 +348aa3c,3c058041 +348aa40,8ca54850 +348aa44,a4a40000 +348aa48,a4a30002 +348aa4c,3e00008 +348aa50,a4a20004 +348aa54,3c028011 +348aa58,3442a5d0 +348aa5c,8c4200a0 +348aa60,21302 +348aa64,30420003 +348aa68,21840 +348aa6c,621821 +348aa70,3c028041 +348aa74,24421c28 +348aa78,621821 +348aa7c,90640000 +348aa80,42600 +348aa84,90620001 +348aa88,21400 +348aa8c,822021 +348aa90,90620002 +348aa94,21200 +348aa98,3e00008 +348aa9c,821021 +348aaa0,3c028011 +348aaa4,3442a5d0 +348aaa8,8c4208e0 +348aaac,3e00008 +348aab0,2102b +348aab4,3c028011 +348aab8,3442a5d0 +348aabc,8c4308e0 +348aac0,24630001 +348aac4,3e00008 +348aac8,ac4308e0 +348aacc,3c028011 +348aad0,3442a5d0 +348aad4,8c4208e0 +348aad8,1040001c +348aadc,2442ffff +348aae0,27bdffd8 +348aae4,afbf0024 +348aae8,afb10020 +348aaec,afb0001c +348aaf0,3c038011 +348aaf4,3463a5d0 +348aaf8,ac6208e0 +348aafc,3c108038 +348ab00,3610e578 +348ab04,24050014 +348ab08,3c11801d +348ab0c,200f809 +348ab10,3624aa30 +348ab14,24020014 +348ab18,afa20014 +348ab1c,afa00010 +348ab20,26100130 +348ab24,3825 +348ab28,24060003 +348ab2c,3625aa30 +348ab30,200f809 +348ab34,262484a0 +348ab38,8fbf0024 +348ab3c,8fb10020 +348ab40,8fb0001c +348ab44,3e00008 +348ab48,27bd0028 +348ab4c,3e00008 +348ab54,27bdffe0 +348ab58,afbf001c +348ab5c,afb10018 +348ab60,afb00014 +348ab64,a08825 +348ab68,8c900000 +348ab6c,3c028007 +348ab70,3442e1dc +348ab74,40f809 +348ab78,2002025 +348ab7c,3c02800a +348ab80,3442b900 +348ab84,40f809 +348ab88,2002025 +348ab8c,8e0302c0 +348ab90,24640008 +348ab94,ae0402c0 +348ab98,3c04da38 +348ab9c,24840003 +348aba0,ac640000 +348aba4,ac620004 +348aba8,3c058041 +348abac,1110c0 +348abb0,511021 +348abb4,21080 +348abb8,24a52010 +348abbc,a22821 +348abc0,8ca30004 +348abc4,8e0202c0 +348abc8,24440008 +348abcc,ae0402c0 +348abd0,3c04de00 +348abd4,ac440000 +348abd8,ac430004 +348abdc,8fbf001c +348abe0,8fb10018 +348abe4,8fb00014 +348abe8,3e00008 +348abec,27bd0020 +348abf0,27bdffe0 +348abf4,afbf001c +348abf8,afb10018 +348abfc,afb00014 +348ac00,a08825 +348ac04,8c900000 +348ac08,3c028007 +348ac0c,3442e1dc +348ac10,40f809 +348ac14,2002025 +348ac18,3c02800a +348ac1c,3442b900 +348ac20,40f809 +348ac24,2002025 +348ac28,8e0302c0 +348ac2c,24640008 +348ac30,ae0402c0 +348ac34,3c04da38 +348ac38,24840003 +348ac3c,ac640000 +348ac40,ac620004 +348ac44,3c028041 +348ac48,24422010 +348ac4c,1118c0 +348ac50,712021 +348ac54,42080 +348ac58,442021 +348ac5c,8c860004 +348ac60,8e0402c0 +348ac64,24850008 +348ac68,ae0502c0 +348ac6c,3c05de00 +348ac70,ac850000 +348ac74,ac860004 +348ac78,711821 +348ac7c,31880 +348ac80,431021 +348ac84,8c430008 +348ac88,8e0202c0 +348ac8c,24440008 +348ac90,ae0402c0 +348ac94,ac450000 +348ac98,ac430004 +348ac9c,8fbf001c +348aca0,8fb10018 +348aca4,8fb00014 +348aca8,3e00008 +348acac,27bd0020 +348acb0,27bdffe0 +348acb4,afbf001c +348acb8,afb10018 +348acbc,afb00014 +348acc0,a08825 +348acc4,8c900000 +348acc8,24050005 +348accc,3c028007 +348acd0,3442dfbc +348acd4,40f809 +348acd8,8e0402d0 +348acdc,ae0202d0 +348ace0,3c02800a +348ace4,3442b900 +348ace8,40f809 +348acec,2002025 +348acf0,8e0302d0 +348acf4,24640008 +348acf8,ae0402d0 +348acfc,3c04da38 +348ad00,24840003 +348ad04,ac640000 +348ad08,ac620004 +348ad0c,3c058041 +348ad10,1110c0 +348ad14,511021 +348ad18,21080 +348ad1c,24a52010 +348ad20,a22821 +348ad24,8ca30004 +348ad28,8e0202d0 +348ad2c,24440008 +348ad30,ae0402d0 +348ad34,3c04de00 +348ad38,ac440000 +348ad3c,ac430004 +348ad40,8fbf001c +348ad44,8fb10018 +348ad48,8fb00014 +348ad4c,3e00008 +348ad50,27bd0020 +348ad54,27bdffc8 +348ad58,afbf0034 +348ad5c,afb70030 +348ad60,afb6002c +348ad64,afb50028 +348ad68,afb40024 +348ad6c,afb30020 +348ad70,afb2001c +348ad74,afb10018 +348ad78,afb00014 +348ad7c,a0a025 +348ad80,8c900000 +348ad84,3c138007 +348ad88,3673e298 +348ad8c,260f809 +348ad90,2002025 +348ad94,3c17800a +348ad98,36f7b900 +348ad9c,2e0f809 +348ada0,2002025 +348ada4,8e0302c0 +348ada8,24640008 +348adac,ae0402c0 +348adb0,3c15da38 +348adb4,26b50003 +348adb8,ac750000 +348adbc,ac620004 +348adc0,3c118041 +348adc4,26312010 +348adc8,1490c0 +348adcc,2541021 +348add0,21080 +348add4,2221021 +348add8,8c430004 +348addc,8e0202c0 +348ade0,24440008 +348ade4,ae0402c0 +348ade8,3c16de00 +348adec,ac560000 +348adf0,ac430004 +348adf4,2673fd24 +348adf8,24050005 +348adfc,260f809 +348ae00,8e0402d0 +348ae04,ae0202d0 +348ae08,2e0f809 +348ae0c,2002025 +348ae10,8e0302d0 +348ae14,24640008 +348ae18,ae0402d0 +348ae1c,ac750000 +348ae20,ac620004 +348ae24,2549021 +348ae28,129080 +348ae2c,2328821 +348ae30,8e230008 +348ae34,8e0202d0 +348ae38,24440008 +348ae3c,ae0402d0 +348ae40,ac560000 +348ae44,ac430004 +348ae48,8fbf0034 +348ae4c,8fb70030 +348ae50,8fb6002c +348ae54,8fb50028 +348ae58,8fb40024 +348ae5c,8fb30020 +348ae60,8fb2001c +348ae64,8fb10018 +348ae68,8fb00014 +348ae6c,3e00008 +348ae70,27bd0038 +348ae74,27bdffe0 +348ae78,afbf001c +348ae7c,afb10018 +348ae80,afb00014 +348ae84,a08825 +348ae88,8c900000 +348ae8c,3c028007 +348ae90,3442e298 +348ae94,40f809 +348ae98,2002025 +348ae9c,3c02800a +348aea0,3442b900 +348aea4,40f809 +348aea8,2002025 +348aeac,8e0302c0 +348aeb0,24640008 +348aeb4,ae0402c0 +348aeb8,3c04da38 +348aebc,24840003 +348aec0,ac640000 +348aec4,ac620004 +348aec8,3c058041 +348aecc,1110c0 +348aed0,511021 +348aed4,21080 +348aed8,24a52010 +348aedc,a22821 +348aee0,8ca30004 +348aee4,8e0202c0 +348aee8,24440008 +348aeec,ae0402c0 +348aef0,3c04de00 +348aef4,ac440000 +348aef8,ac430004 +348aefc,8fbf001c +348af00,8fb10018 +348af04,8fb00014 +348af08,3e00008 +348af0c,27bd0020 +348af10,27bdffe0 +348af14,afbf001c +348af18,afb10018 +348af1c,afb00014 +348af20,a08825 +348af24,8c900000 +348af28,3c028007 +348af2c,3442e298 +348af30,40f809 +348af34,2002025 +348af38,3c02800a +348af3c,3442b900 +348af40,40f809 +348af44,2002025 +348af48,8e0302c0 +348af4c,24640008 +348af50,ae0402c0 +348af54,3c04da38 +348af58,24840003 +348af5c,ac640000 +348af60,ac620004 +348af64,3c038041 +348af68,24632010 +348af6c,1120c0 +348af70,911021 +348af74,21080 +348af78,621021 +348af7c,8c470008 +348af80,8e0602c0 +348af84,24c50008 +348af88,ae0502c0 +348af8c,3c05de00 +348af90,acc50000 +348af94,acc70004 +348af98,8c470004 +348af9c,8e0602c0 +348afa0,24c80008 +348afa4,ae0802c0 +348afa8,acc50000 +348afac,acc70004 +348afb0,8c46000c +348afb4,8e0202c0 +348afb8,24470008 +348afbc,ae0702c0 +348afc0,ac450000 +348afc4,ac460004 +348afc8,912021 +348afcc,42080 +348afd0,641821 +348afd4,8c630010 +348afd8,8e0202c0 +348afdc,24440008 +348afe0,ae0402c0 +348afe4,ac450000 +348afe8,ac430004 +348afec,8fbf001c +348aff0,8fb10018 +348aff4,8fb00014 +348aff8,3e00008 +348affc,27bd0020 +348b000,27bdffe0 +348b004,afbf001c +348b008,afb10018 +348b00c,afb00014 +348b010,a08825 +348b014,8c900000 +348b018,3c028007 +348b01c,3442e298 +348b020,40f809 +348b024,2002025 +348b028,3c02800a +348b02c,3442b900 +348b030,40f809 +348b034,2002025 +348b038,8e0302c0 +348b03c,24640008 +348b040,ae0402c0 +348b044,3c04da38 +348b048,24840003 +348b04c,ac640000 +348b050,ac620004 +348b054,3c048041 +348b058,24842010 +348b05c,1130c0 +348b060,d11021 +348b064,21080 +348b068,821021 +348b06c,8c470008 +348b070,8e0502c0 +348b074,24a30008 +348b078,ae0302c0 +348b07c,3c03de00 +348b080,aca30000 +348b084,aca70004 +348b088,8c470004 +348b08c,8e0502c0 +348b090,24a80008 +348b094,ae0802c0 +348b098,aca30000 +348b09c,aca70004 +348b0a0,8c47000c +348b0a4,8e0502c0 +348b0a8,24a80008 +348b0ac,ae0802c0 +348b0b0,aca30000 +348b0b4,aca70004 +348b0b8,8c470010 +348b0bc,8e0502c0 +348b0c0,24a80008 +348b0c4,ae0802c0 +348b0c8,aca30000 +348b0cc,aca70004 +348b0d0,8c470014 +348b0d4,8e0502c0 +348b0d8,24a80008 +348b0dc,ae0802c0 +348b0e0,aca30000 +348b0e4,aca70004 +348b0e8,8c470018 +348b0ec,8e0502c0 +348b0f0,24a80008 +348b0f4,ae0802c0 +348b0f8,aca30000 +348b0fc,aca70004 +348b100,8c45001c +348b104,8e0202c0 +348b108,24470008 +348b10c,ae0702c0 +348b110,ac430000 +348b114,ac450004 +348b118,d13021 +348b11c,63080 +348b120,862021 +348b124,8c840020 +348b128,8e0202c0 +348b12c,24450008 +348b130,ae0502c0 +348b134,ac430000 +348b138,ac440004 +348b13c,8fbf001c +348b140,8fb10018 +348b144,8fb00014 +348b148,3e00008 +348b14c,27bd0020 +348b150,27bdffe0 +348b154,afbf001c +348b158,afb10018 +348b15c,afb00014 +348b160,a08825 +348b164,8c900000 +348b168,3c028007 +348b16c,3442e2c0 +348b170,40f809 +348b174,2002025 +348b178,3c02800a +348b17c,3442b900 +348b180,40f809 +348b184,2002025 +348b188,8e0302d0 +348b18c,24640008 +348b190,ae0402d0 +348b194,3c04da38 +348b198,24840003 +348b19c,ac640000 +348b1a0,ac620004 +348b1a4,3c028041 +348b1a8,24422010 +348b1ac,1118c0 +348b1b0,712021 +348b1b4,42080 +348b1b8,442021 +348b1bc,8c860004 +348b1c0,8e0402d0 +348b1c4,24850008 +348b1c8,ae0502d0 +348b1cc,3c05de00 +348b1d0,ac850000 +348b1d4,ac860004 +348b1d8,711821 +348b1dc,31880 +348b1e0,431021 +348b1e4,8c430008 +348b1e8,8e0202d0 +348b1ec,24440008 +348b1f0,ae0402d0 +348b1f4,ac450000 +348b1f8,ac430004 +348b1fc,8fbf001c +348b200,8fb10018 +348b204,8fb00014 +348b208,3e00008 +348b20c,27bd0020 +348b210,27bdffc8 +348b214,afbf0034 +348b218,afb70030 +348b21c,afb6002c +348b220,afb50028 +348b224,afb40024 +348b228,afb30020 +348b22c,afb2001c +348b230,afb10018 +348b234,afb00014 +348b238,a0a025 +348b23c,8c900000 +348b240,3c138007 +348b244,3673e298 +348b248,260f809 +348b24c,2002025 +348b250,3c17800a +348b254,36f7b900 +348b258,2e0f809 +348b25c,2002025 +348b260,8e0302c0 +348b264,24640008 +348b268,ae0402c0 +348b26c,3c15da38 +348b270,26b50003 +348b274,ac750000 +348b278,ac620004 +348b27c,3c118041 +348b280,26312010 +348b284,1490c0 +348b288,2541021 +348b28c,21080 +348b290,2221021 +348b294,8c430004 +348b298,8e0202c0 +348b29c,24440008 +348b2a0,ae0402c0 +348b2a4,3c16de00 +348b2a8,ac560000 +348b2ac,ac430004 +348b2b0,26730028 +348b2b4,260f809 +348b2b8,2002025 +348b2bc,2e0f809 +348b2c0,2002025 +348b2c4,8e0302d0 +348b2c8,24640008 +348b2cc,ae0402d0 +348b2d0,ac750000 +348b2d4,ac620004 +348b2d8,2549021 +348b2dc,129080 +348b2e0,2328821 +348b2e4,8e230008 +348b2e8,8e0202d0 +348b2ec,24440008 +348b2f0,ae0402d0 +348b2f4,ac560000 +348b2f8,ac430004 +348b2fc,8fbf0034 +348b300,8fb70030 +348b304,8fb6002c +348b308,8fb50028 +348b30c,8fb40024 +348b310,8fb30020 +348b314,8fb2001c +348b318,8fb10018 +348b31c,8fb00014 +348b320,3e00008 +348b324,27bd0038 +348b328,27bdffc8 +348b32c,afbf0034 +348b330,afb70030 +348b334,afb6002c +348b338,afb50028 +348b33c,afb40024 +348b340,afb30020 +348b344,afb2001c +348b348,afb10018 +348b34c,afb00014 +348b350,a0a025 +348b354,8c900000 +348b358,3c138007 +348b35c,3673e298 +348b360,260f809 +348b364,2002025 +348b368,3c17800a +348b36c,36f7b900 +348b370,2e0f809 +348b374,2002025 +348b378,8e0302c0 +348b37c,24640008 +348b380,ae0402c0 +348b384,3c16da38 +348b388,26d60003 +348b38c,ac760000 +348b390,ac620004 +348b394,3c118041 +348b398,26312010 +348b39c,1490c0 +348b3a0,2541021 +348b3a4,21080 +348b3a8,2221021 +348b3ac,8c440008 +348b3b0,8e0302c0 +348b3b4,24650008 +348b3b8,ae0502c0 +348b3bc,3c15de00 +348b3c0,ac750000 +348b3c4,ac640004 +348b3c8,8c430004 +348b3cc,8e0202c0 +348b3d0,24440008 +348b3d4,ae0402c0 +348b3d8,ac550000 +348b3dc,ac430004 +348b3e0,26730028 +348b3e4,260f809 +348b3e8,2002025 +348b3ec,2e0f809 +348b3f0,2002025 +348b3f4,8e0302d0 +348b3f8,24640008 +348b3fc,ae0402d0 +348b400,ac760000 +348b404,ac620004 +348b408,2549021 +348b40c,129080 +348b410,2328821 +348b414,8e23000c +348b418,8e0202d0 +348b41c,24440008 +348b420,ae0402d0 +348b424,ac550000 +348b428,ac430004 +348b42c,8fbf0034 +348b430,8fb70030 +348b434,8fb6002c +348b438,8fb50028 +348b43c,8fb40024 +348b440,8fb30020 +348b444,8fb2001c +348b448,8fb10018 +348b44c,8fb00014 +348b450,3e00008 +348b454,27bd0038 +348b458,27bdffc8 +348b45c,afbf0034 +348b460,afbe0030 +348b464,afb7002c +348b468,afb60028 +348b46c,afb50024 +348b470,afb40020 +348b474,afb3001c +348b478,afb20018 +348b47c,afb10014 +348b480,afb00010 +348b484,a0a825 +348b488,8c900000 +348b48c,3c148007 +348b490,3694e298 +348b494,280f809 +348b498,2002025 +348b49c,3c1e800a +348b4a0,37deb900 +348b4a4,3c0f809 +348b4a8,2002025 +348b4ac,8e0302c0 +348b4b0,24640008 +348b4b4,ae0402c0 +348b4b8,3c17da38 +348b4bc,26f70003 +348b4c0,ac770000 +348b4c4,ac620004 +348b4c8,3c118041 +348b4cc,26312010 +348b4d0,1590c0 +348b4d4,2559821 +348b4d8,139880 +348b4dc,2339821 +348b4e0,8e630004 +348b4e4,8e0202c0 +348b4e8,24440008 +348b4ec,ae0402c0 +348b4f0,3c16de00 +348b4f4,ac560000 +348b4f8,ac430004 +348b4fc,26940028 +348b500,280f809 +348b504,2002025 +348b508,3c0f809 +348b50c,2002025 +348b510,8e0302d0 +348b514,24640008 +348b518,ae0402d0 +348b51c,ac770000 +348b520,ac620004 +348b524,8e630008 +348b528,8e0202d0 +348b52c,24440008 +348b530,ae0402d0 +348b534,ac560000 +348b538,ac430004 +348b53c,8e63000c +348b540,8e0202d0 +348b544,24440008 +348b548,ae0402d0 +348b54c,ac560000 +348b550,ac430004 +348b554,8fbf0034 +348b558,8fbe0030 +348b55c,8fb7002c +348b560,8fb60028 +348b564,8fb50024 +348b568,8fb40020 +348b56c,8fb3001c +348b570,8fb20018 +348b574,8fb10014 +348b578,8fb00010 +348b57c,3e00008 +348b580,27bd0038 +348b584,27bdffc8 +348b588,afbf0034 +348b58c,afbe0030 +348b590,afb7002c +348b594,afb60028 +348b598,afb50024 +348b59c,afb40020 +348b5a0,afb3001c +348b5a4,afb20018 +348b5a8,afb10014 +348b5ac,afb00010 +348b5b0,a0a825 +348b5b4,8c900000 +348b5b8,3c148007 +348b5bc,3694e298 +348b5c0,280f809 +348b5c4,2002025 +348b5c8,3c1e800a +348b5cc,37deb900 +348b5d0,3c0f809 +348b5d4,2002025 +348b5d8,8e0302c0 +348b5dc,24640008 +348b5e0,ae0402c0 +348b5e4,3c17da38 +348b5e8,26f70003 +348b5ec,ac770000 +348b5f0,ac620004 +348b5f4,3c128041 +348b5f8,26522010 +348b5fc,1598c0 +348b600,2758821 +348b604,118880 +348b608,2518821 +348b60c,8e230008 +348b610,8e0202c0 +348b614,24440008 +348b618,ae0402c0 +348b61c,3c16de00 +348b620,ac560000 +348b624,ac430004 +348b628,8e230004 +348b62c,8e0202c0 +348b630,24440008 +348b634,ae0402c0 +348b638,ac560000 +348b63c,ac430004 +348b640,26940028 +348b644,280f809 +348b648,2002025 +348b64c,3c0f809 +348b650,2002025 +348b654,8e0302d0 +348b658,24640008 +348b65c,ae0402d0 +348b660,ac770000 +348b664,ac620004 +348b668,8e230010 +348b66c,8e0202d0 +348b670,24440008 +348b674,ae0402d0 +348b678,ac560000 +348b67c,ac430004 +348b680,8e23000c +348b684,8e0202d0 +348b688,24440008 +348b68c,ae0402d0 +348b690,ac560000 +348b694,ac430004 +348b698,8fbf0034 +348b69c,8fbe0030 +348b6a0,8fb7002c +348b6a4,8fb60028 +348b6a8,8fb50024 +348b6ac,8fb40020 +348b6b0,8fb3001c +348b6b4,8fb20018 +348b6b8,8fb10014 +348b6bc,8fb00010 +348b6c0,3e00008 +348b6c4,27bd0038 +348b6c8,27bdffc8 +348b6cc,afbf0034 +348b6d0,afbe0030 +348b6d4,afb7002c +348b6d8,afb60028 +348b6dc,afb50024 +348b6e0,afb40020 +348b6e4,afb3001c +348b6e8,afb20018 +348b6ec,afb10014 +348b6f0,afb00010 +348b6f4,a0b025 +348b6f8,8c900000 +348b6fc,3c148007 +348b700,3694e298 +348b704,280f809 +348b708,2002025 +348b70c,3c1e800a +348b710,37deb900 +348b714,3c0f809 +348b718,2002025 +348b71c,8e0302c0 +348b720,24640008 +348b724,ae0402c0 +348b728,3c17da38 +348b72c,26f70003 +348b730,ac770000 +348b734,ac620004 +348b738,3c128041 +348b73c,26522010 +348b740,1698c0 +348b744,2768821 +348b748,118880 +348b74c,2518821 +348b750,8e230008 +348b754,8e0202c0 +348b758,24440008 +348b75c,ae0402c0 +348b760,3c15de00 +348b764,ac550000 +348b768,ac430004 +348b76c,8e230004 +348b770,8e0202c0 +348b774,24440008 +348b778,ae0402c0 +348b77c,ac550000 +348b780,ac430004 +348b784,26940028 +348b788,280f809 +348b78c,2002025 +348b790,3c0f809 +348b794,2002025 +348b798,8e0302d0 +348b79c,24640008 +348b7a0,ae0402d0 +348b7a4,ac770000 +348b7a8,ac620004 +348b7ac,8e23000c +348b7b0,8e0202d0 +348b7b4,24440008 +348b7b8,ae0402d0 +348b7bc,ac550000 +348b7c0,ac430004 +348b7c4,8e230010 +348b7c8,8e0202d0 +348b7cc,24440008 +348b7d0,ae0402d0 +348b7d4,ac550000 +348b7d8,ac430004 +348b7dc,8e230014 +348b7e0,8e0202d0 +348b7e4,24440008 +348b7e8,ae0402d0 +348b7ec,ac550000 +348b7f0,ac430004 +348b7f4,8fbf0034 +348b7f8,8fbe0030 +348b7fc,8fb7002c +348b800,8fb60028 +348b804,8fb50024 +348b808,8fb40020 +348b80c,8fb3001c +348b810,8fb20018 +348b814,8fb10014 +348b818,8fb00010 +348b81c,3e00008 +348b820,27bd0038 +348b824,27bdffc8 +348b828,afbf0034 +348b82c,afbe0030 +348b830,afb7002c +348b834,afb60028 +348b838,afb50024 +348b83c,afb40020 +348b840,afb3001c +348b844,afb20018 +348b848,afb10014 +348b84c,afb00010 +348b850,a0b825 +348b854,8c900000 +348b858,3c028041 +348b85c,c44c1d20 +348b860,3c12800a +348b864,3652a8fc +348b868,24070001 +348b86c,44066000 +348b870,240f809 +348b874,46006386 +348b878,3c158007 +348b87c,36b5e298 +348b880,2a0f809 +348b884,2002025 +348b888,26521004 +348b88c,240f809 +348b890,2002025 +348b894,8e0302c0 +348b898,24640008 +348b89c,ae0402c0 +348b8a0,3c1eda38 +348b8a4,27de0003 +348b8a8,ac7e0000 +348b8ac,ac620004 +348b8b0,3c138041 +348b8b4,26732010 +348b8b8,17a0c0 +348b8bc,2978821 +348b8c0,118880 +348b8c4,2718821 +348b8c8,8e230008 +348b8cc,8e0202c0 +348b8d0,24440008 +348b8d4,ae0402c0 +348b8d8,3c16de00 +348b8dc,ac560000 +348b8e0,ac430004 +348b8e4,8e230004 +348b8e8,8e0202c0 +348b8ec,24440008 +348b8f0,ae0402c0 +348b8f4,ac560000 +348b8f8,ac430004 +348b8fc,26b50028 +348b900,2a0f809 +348b904,2002025 +348b908,240f809 +348b90c,2002025 +348b910,8e0302d0 +348b914,24640008 +348b918,ae0402d0 +348b91c,ac7e0000 +348b920,ac620004 +348b924,8e230010 +348b928,8e0202d0 +348b92c,24440008 +348b930,ae0402d0 +348b934,ac560000 +348b938,ac430004 +348b93c,8e23000c +348b940,8e0202d0 +348b944,24440008 +348b948,ae0402d0 +348b94c,ac560000 +348b950,ac430004 +348b954,8fbf0034 +348b958,8fbe0030 +348b95c,8fb7002c +348b960,8fb60028 +348b964,8fb50024 +348b968,8fb40020 +348b96c,8fb3001c +348b970,8fb20018 +348b974,8fb10014 +348b978,8fb00010 +348b97c,3e00008 +348b980,27bd0038 +348b984,27bdffb8 +348b988,afbf0044 +348b98c,afb30040 +348b990,afb2003c +348b994,afb10038 +348b998,afb00034 +348b99c,809825 +348b9a0,a09025 +348b9a4,8c900000 +348b9a8,3c118007 +348b9ac,3631e298 +348b9b0,220f809 +348b9b4,2002025 +348b9b8,24020020 +348b9bc,afa20028 +348b9c0,afa20024 +348b9c4,afa00020 +348b9c8,afa0001c +348b9cc,24030001 +348b9d0,afa30018 +348b9d4,afa20014 +348b9d8,afa20010 +348b9dc,263108ec +348b9e0,3825 +348b9e4,8e66009c +348b9e8,2825 +348b9ec,220f809 +348b9f0,2002025 +348b9f4,8e0302c0 +348b9f8,24640008 +348b9fc,ae0402c0 +348ba00,3c04db06 +348ba04,24840020 +348ba08,ac640000 +348ba0c,ac620004 +348ba10,3c02800a +348ba14,3442b900 +348ba18,40f809 +348ba1c,2002025 +348ba20,8e0302c0 +348ba24,24640008 +348ba28,ae0402c0 +348ba2c,3c04da38 +348ba30,24840003 +348ba34,ac640000 +348ba38,ac620004 +348ba3c,3c058041 +348ba40,1210c0 +348ba44,521021 +348ba48,21080 +348ba4c,24a52010 +348ba50,a22821 +348ba54,8ca30004 +348ba58,8e0202c0 +348ba5c,24440008 +348ba60,ae0402c0 +348ba64,3c04de00 +348ba68,ac440000 +348ba6c,ac430004 +348ba70,8fbf0044 +348ba74,8fb30040 +348ba78,8fb2003c +348ba7c,8fb10038 +348ba80,8fb00034 +348ba84,3e00008 +348ba88,27bd0048 +348ba8c,27bdffb8 +348ba90,afbf0044 +348ba94,afb30040 +348ba98,afb2003c +348ba9c,afb10038 +348baa0,afb00034 +348baa4,809825 +348baa8,a09025 +348baac,8c900000 +348bab0,3c118007 +348bab4,3631e298 +348bab8,220f809 +348babc,2002025 +348bac0,8e62009c +348bac4,23040 +348bac8,c23021 +348bacc,63040 +348bad0,24020020 +348bad4,afa20028 +348bad8,afa20024 +348badc,afa60020 +348bae0,afa6001c +348bae4,24030001 +348bae8,afa30018 +348baec,afa20014 +348baf0,afa20010 +348baf4,263108ec +348baf8,c03825 +348bafc,2825 +348bb00,220f809 +348bb04,2002025 +348bb08,8e0302c0 +348bb0c,24640008 +348bb10,ae0402c0 +348bb14,3c04db06 +348bb18,24840020 +348bb1c,ac640000 +348bb20,ac620004 +348bb24,3c02800a +348bb28,3442b900 +348bb2c,40f809 +348bb30,2002025 +348bb34,8e0302c0 +348bb38,24640008 +348bb3c,ae0402c0 +348bb40,3c04da38 +348bb44,24840003 +348bb48,ac640000 +348bb4c,ac620004 +348bb50,3c058041 +348bb54,1210c0 +348bb58,521021 +348bb5c,21080 +348bb60,24a52010 +348bb64,a22821 +348bb68,8ca30004 +348bb6c,8e0202c0 +348bb70,24440008 +348bb74,ae0402c0 +348bb78,3c04de00 +348bb7c,ac440000 +348bb80,ac430004 +348bb84,8fbf0044 +348bb88,8fb30040 +348bb8c,8fb2003c +348bb90,8fb10038 +348bb94,8fb00034 +348bb98,3e00008 +348bb9c,27bd0048 +348bba0,27bdffb8 +348bba4,afbf0044 +348bba8,afb30040 +348bbac,afb2003c +348bbb0,afb10038 +348bbb4,afb00034 +348bbb8,809825 +348bbbc,a09025 +348bbc0,8c900000 +348bbc4,3c118007 +348bbc8,3631e2c0 +348bbcc,220f809 +348bbd0,2002025 +348bbd4,8e63009c +348bbd8,33880 +348bbdc,24020020 +348bbe0,afa20028 +348bbe4,afa20024 +348bbe8,32023 +348bbec,42040 +348bbf0,afa40020 +348bbf4,afa0001c +348bbf8,24040001 +348bbfc,afa40018 +348bc00,afa20014 +348bc04,afa20010 +348bc08,263108c4 +348bc0c,673823 +348bc10,3025 +348bc14,2825 +348bc18,220f809 +348bc1c,2002025 +348bc20,8e0302d0 +348bc24,24640008 +348bc28,ae0402d0 +348bc2c,3c04db06 +348bc30,24840020 +348bc34,ac640000 +348bc38,ac620004 +348bc3c,3c02800a +348bc40,3442b900 +348bc44,40f809 +348bc48,2002025 +348bc4c,8e0302d0 +348bc50,24640008 +348bc54,ae0402d0 +348bc58,3c04da38 +348bc5c,24840003 +348bc60,ac640000 +348bc64,ac620004 +348bc68,3c058041 +348bc6c,1210c0 +348bc70,521021 +348bc74,21080 +348bc78,24a52010 +348bc7c,a22821 +348bc80,8ca30004 +348bc84,8e0202d0 +348bc88,24440008 +348bc8c,ae0402d0 +348bc90,3c04de00 +348bc94,ac440000 +348bc98,ac430004 +348bc9c,8fbf0044 +348bca0,8fb30040 +348bca4,8fb2003c +348bca8,8fb10038 +348bcac,8fb00034 +348bcb0,3e00008 +348bcb4,27bd0048 +348bcb8,27bdffb8 +348bcbc,afbf0044 +348bcc0,afb30040 +348bcc4,afb2003c +348bcc8,afb10038 +348bccc,afb00034 +348bcd0,809825 +348bcd4,a09025 +348bcd8,8c900000 +348bcdc,3c118007 +348bce0,3631e2c0 +348bce4,220f809 +348bce8,2002025 +348bcec,8e67009c +348bcf0,24020020 +348bcf4,afa20028 +348bcf8,afa20024 +348bcfc,afa70020 +348bd00,afa0001c +348bd04,24030001 +348bd08,afa30018 +348bd0c,afa20014 +348bd10,afa20010 +348bd14,263108c4 +348bd18,3025 +348bd1c,2825 +348bd20,220f809 +348bd24,2002025 +348bd28,8e0302d0 +348bd2c,24640008 +348bd30,ae0402d0 +348bd34,3c04db06 +348bd38,24840020 +348bd3c,ac640000 +348bd40,ac620004 +348bd44,3c02800a +348bd48,3442b900 +348bd4c,40f809 +348bd50,2002025 +348bd54,8e0302d0 +348bd58,24640008 +348bd5c,ae0402d0 +348bd60,3c04da38 +348bd64,24840003 +348bd68,ac640000 +348bd6c,ac620004 +348bd70,3c058041 +348bd74,1210c0 +348bd78,521021 +348bd7c,21080 +348bd80,24a52010 +348bd84,a22821 +348bd88,8ca30004 +348bd8c,8e0202d0 +348bd90,24440008 +348bd94,ae0402d0 +348bd98,3c04de00 +348bd9c,ac440000 +348bda0,ac430004 +348bda4,8fbf0044 +348bda8,8fb30040 +348bdac,8fb2003c +348bdb0,8fb10038 +348bdb4,8fb00034 +348bdb8,3e00008 +348bdbc,27bd0048 +348bdc0,27bdffb8 +348bdc4,afbf0044 +348bdc8,afb30040 +348bdcc,afb2003c +348bdd0,afb10038 +348bdd4,afb00034 +348bdd8,809825 +348bddc,a09025 +348bde0,8c900000 +348bde4,3c118007 +348bde8,3631e2c0 +348bdec,220f809 +348bdf0,2002025 +348bdf4,8e63009c +348bdf8,33040 +348bdfc,33880 +348be00,673823 +348be04,24020020 +348be08,afa20028 +348be0c,afa20024 +348be10,62023 +348be14,afa40020 +348be18,afa3001c +348be1c,24030001 +348be20,afa30018 +348be24,afa20014 +348be28,afa20010 +348be2c,263108c4 +348be30,73840 +348be34,2825 +348be38,220f809 +348be3c,2002025 +348be40,8e0302d0 +348be44,24640008 +348be48,ae0402d0 +348be4c,3c04db06 +348be50,24840020 +348be54,ac640000 +348be58,ac620004 +348be5c,3c02800a +348be60,3442b900 +348be64,40f809 +348be68,2002025 +348be6c,8e0302d0 +348be70,24640008 +348be74,ae0402d0 +348be78,3c04da38 +348be7c,24840003 +348be80,ac640000 +348be84,ac620004 +348be88,3c028041 +348be8c,24422010 +348be90,1218c0 +348be94,722021 +348be98,42080 +348be9c,442021 +348bea0,8c870004 +348bea4,8e0602d0 +348bea8,24c50008 +348beac,ae0502d0 +348beb0,3c05de00 +348beb4,acc50000 +348beb8,acc70004 +348bebc,8c860008 +348bec0,8e0402d0 +348bec4,24870008 +348bec8,ae0702d0 +348becc,ac850000 +348bed0,ac860004 +348bed4,721821 +348bed8,31880 +348bedc,431021 +348bee0,8c43000c +348bee4,8e0202d0 +348bee8,24440008 +348beec,ae0402d0 +348bef0,ac450000 +348bef4,ac430004 +348bef8,8fbf0044 +348befc,8fb30040 +348bf00,8fb2003c +348bf04,8fb10038 +348bf08,8fb00034 +348bf0c,3e00008 +348bf10,27bd0048 +348bf14,27bdffb8 +348bf18,afbf0044 +348bf1c,afb30040 +348bf20,afb2003c +348bf24,afb10038 +348bf28,afb00034 +348bf2c,809825 +348bf30,a09025 +348bf34,8c900000 +348bf38,3c118007 +348bf3c,3631e2c0 +348bf40,220f809 +348bf44,2002025 +348bf48,8e62009c +348bf4c,23040 +348bf50,21080 +348bf54,24030020 +348bf58,afa30028 +348bf5c,afa30024 +348bf60,21823 +348bf64,afa30020 +348bf68,afa2001c +348bf6c,24020001 +348bf70,afa20018 +348bf74,24020040 +348bf78,afa20014 +348bf7c,afa20010 +348bf80,263108c4 +348bf84,63823 +348bf88,2825 +348bf8c,220f809 +348bf90,2002025 +348bf94,8e0302d0 +348bf98,24640008 +348bf9c,ae0402d0 +348bfa0,3c04db06 +348bfa4,24840020 +348bfa8,ac640000 +348bfac,ac620004 +348bfb0,3c02800a +348bfb4,3442b900 +348bfb8,40f809 +348bfbc,2002025 +348bfc0,8e0302d0 +348bfc4,24640008 +348bfc8,ae0402d0 +348bfcc,3c04da38 +348bfd0,24840003 +348bfd4,ac640000 +348bfd8,ac620004 +348bfdc,3c038041 +348bfe0,24632010 +348bfe4,1220c0 +348bfe8,921021 +348bfec,21080 +348bff0,621021 +348bff4,8c47000c +348bff8,8e0602d0 +348bffc,24c50008 +348c000,ae0502d0 +348c004,3c05de00 +348c008,acc50000 +348c00c,acc70004 +348c010,8c470010 +348c014,8e0602d0 +348c018,24c80008 +348c01c,ae0802d0 +348c020,acc50000 +348c024,acc70004 +348c028,8c460008 +348c02c,8e0202d0 +348c030,24470008 +348c034,ae0702d0 +348c038,ac450000 +348c03c,ac460004 +348c040,922021 +348c044,42080 +348c048,641821 +348c04c,8c630004 +348c050,8e0202d0 +348c054,24440008 +348c058,ae0402d0 +348c05c,ac450000 +348c060,ac430004 +348c064,8fbf0044 +348c068,8fb30040 +348c06c,8fb2003c +348c070,8fb10038 +348c074,8fb00034 +348c078,3e00008 +348c07c,27bd0048 +348c080,27bdffa8 +348c084,afbf0054 +348c088,afbe0050 +348c08c,afb7004c +348c090,afb60048 +348c094,afb50044 +348c098,afb40040 +348c09c,afb3003c +348c0a0,afb20038 +348c0a4,afb10034 +348c0a8,afb00030 +348c0ac,808825 +348c0b0,a0b025 +348c0b4,8c900000 +348c0b8,3c128007 +348c0bc,3652e298 +348c0c0,240f809 +348c0c4,2002025 +348c0c8,8e27009c +348c0cc,73023 +348c0d0,24020020 +348c0d4,afa20028 +348c0d8,afa20024 +348c0dc,afa70020 +348c0e0,afa6001c +348c0e4,24030001 +348c0e8,afa30018 +348c0ec,afa20014 +348c0f0,afa20010 +348c0f4,264208ec +348c0f8,2825 +348c0fc,40f809 +348c100,2002025 +348c104,8e0302c0 +348c108,24640008 +348c10c,ae0402c0 +348c110,3c04db06 +348c114,24840020 +348c118,ac640000 +348c11c,ac620004 +348c120,3c1e800a +348c124,37deb900 +348c128,3c0f809 +348c12c,2002025 +348c130,8e0302c0 +348c134,24640008 +348c138,ae0402c0 +348c13c,3c17da38 +348c140,26f70003 +348c144,ac770000 +348c148,ac620004 +348c14c,3c148041 +348c150,26942010 +348c154,16a8c0 +348c158,2b68821 +348c15c,118880 +348c160,2918821 +348c164,8e230008 +348c168,8e0202c0 +348c16c,24440008 +348c170,ae0402c0 +348c174,3c13de00 +348c178,ac530000 +348c17c,ac430004 +348c180,8e230004 +348c184,8e0202c0 +348c188,24440008 +348c18c,ae0402c0 +348c190,ac530000 +348c194,ac430004 +348c198,8e23000c +348c19c,8e0202c0 +348c1a0,24440008 +348c1a4,ae0402c0 +348c1a8,ac530000 +348c1ac,ac430004 +348c1b0,8e230010 +348c1b4,8e0202c0 +348c1b8,24440008 +348c1bc,ae0402c0 +348c1c0,ac530000 +348c1c4,ac430004 +348c1c8,26520028 +348c1cc,240f809 +348c1d0,2002025 +348c1d4,3c0f809 +348c1d8,2002025 +348c1dc,8e0302d0 +348c1e0,24640008 +348c1e4,ae0402d0 +348c1e8,ac770000 +348c1ec,ac620004 +348c1f0,8e230014 +348c1f4,8e0202d0 +348c1f8,24440008 +348c1fc,ae0402d0 +348c200,ac530000 +348c204,ac430004 +348c208,8e230018 +348c20c,8e0202d0 +348c210,24440008 +348c214,ae0402d0 +348c218,ac530000 +348c21c,ac430004 +348c220,8fbf0054 +348c224,8fbe0050 +348c228,8fb7004c +348c22c,8fb60048 +348c230,8fb50044 +348c234,8fb40040 +348c238,8fb3003c +348c23c,8fb20038 +348c240,8fb10034 +348c244,8fb00030 +348c248,3e00008 +348c24c,27bd0058 +348c250,27bdffa8 +348c254,afbf0054 +348c258,afb70050 +348c25c,afb6004c +348c260,afb50048 +348c264,afb40044 +348c268,afb30040 +348c26c,afb2003c +348c270,afb10038 +348c274,afb00034 +348c278,809025 +348c27c,a0a025 +348c280,8c900000 +348c284,3c118007 +348c288,3631e298 +348c28c,220f809 +348c290,2002025 +348c294,8e42009c +348c298,21840 +348c29c,33fc3 +348c2a0,73e02 +348c2a4,671821 +348c2a8,306300ff +348c2ac,24040020 +348c2b0,afa40028 +348c2b4,afa40024 +348c2b8,227c3 +348c2bc,42642 +348c2c0,441021 +348c2c4,3042007f +348c2c8,441023 +348c2cc,afa20020 +348c2d0,afa0001c +348c2d4,24020001 +348c2d8,afa20018 +348c2dc,24020040 +348c2e0,afa20014 +348c2e4,afa20010 +348c2e8,262208ec +348c2ec,673823 +348c2f0,3025 +348c2f4,2825 +348c2f8,40f809 +348c2fc,2002025 +348c300,8e0302c0 +348c304,24640008 +348c308,ae0402c0 +348c30c,3c04db06 +348c310,24840020 +348c314,ac640000 +348c318,ac620004 +348c31c,3c17800a +348c320,36f7b900 +348c324,2e0f809 +348c328,2002025 +348c32c,8e0302c0 +348c330,24640008 +348c334,ae0402c0 +348c338,3c16da38 +348c33c,26d60003 +348c340,ac760000 +348c344,ac620004 +348c348,3c128041 +348c34c,26522010 +348c350,1498c0 +348c354,2741021 +348c358,21080 +348c35c,2421021 +348c360,8c430004 +348c364,8e0202c0 +348c368,24440008 +348c36c,ae0402c0 +348c370,3c15de00 +348c374,ac550000 +348c378,ac430004 +348c37c,26310028 +348c380,220f809 +348c384,2002025 +348c388,2e0f809 +348c38c,2002025 +348c390,8e0302d0 +348c394,24640008 +348c398,ae0402d0 +348c39c,ac760000 +348c3a0,ac620004 +348c3a4,2749821 +348c3a8,139880 +348c3ac,2539021 +348c3b0,8e430008 +348c3b4,8e0202d0 +348c3b8,24440008 +348c3bc,ae0402d0 +348c3c0,ac550000 +348c3c4,ac430004 +348c3c8,8fbf0054 +348c3cc,8fb70050 +348c3d0,8fb6004c +348c3d4,8fb50048 +348c3d8,8fb40044 +348c3dc,8fb30040 +348c3e0,8fb2003c +348c3e4,8fb10038 +348c3e8,8fb00034 +348c3ec,3e00008 +348c3f0,27bd0058 +348c3f4,27bdffa8 +348c3f8,afbf0054 +348c3fc,afbe0050 +348c400,afb7004c +348c404,afb60048 +348c408,afb50044 +348c40c,afb40040 +348c410,afb3003c +348c414,afb20038 +348c418,afb10034 +348c41c,afb00030 +348c420,80f025 +348c424,a0a025 +348c428,8c900000 +348c42c,3c118007 +348c430,3631e298 +348c434,220f809 +348c438,2002025 +348c43c,3c17800a +348c440,36f7b900 +348c444,2e0f809 +348c448,2002025 +348c44c,8e0302c0 +348c450,24640008 +348c454,ae0402c0 +348c458,3c16da38 +348c45c,26d60003 +348c460,ac760000 +348c464,ac620004 +348c468,3c128041 +348c46c,26522010 +348c470,1498c0 +348c474,2741021 +348c478,21080 +348c47c,2421021 +348c480,8c430004 +348c484,8e0202c0 +348c488,24440008 +348c48c,ae0402c0 +348c490,3c15de00 +348c494,ac550000 +348c498,ac430004 +348c49c,26220028 +348c4a0,40f809 +348c4a4,2002025 +348c4a8,8fc2009c +348c4ac,23880 +348c4b0,e23821 +348c4b4,24020040 +348c4b8,afa20028 +348c4bc,24020020 +348c4c0,afa20024 +348c4c4,afa00020 +348c4c8,afa0001c +348c4cc,24030001 +348c4d0,afa30018 +348c4d4,afa20014 +348c4d8,afa20010 +348c4dc,263108ec +348c4e0,73823 +348c4e4,3025 +348c4e8,2825 +348c4ec,220f809 +348c4f0,2002025 +348c4f4,8e0302d0 +348c4f8,24640008 +348c4fc,ae0402d0 +348c500,3c04db06 +348c504,24840020 +348c508,ac640000 +348c50c,ac620004 +348c510,2e0f809 +348c514,2002025 +348c518,8e0302d0 +348c51c,24640008 +348c520,ae0402d0 +348c524,ac760000 +348c528,ac620004 +348c52c,2742821 +348c530,52880 +348c534,2459021 +348c538,8e430008 +348c53c,8e0202d0 +348c540,24440008 +348c544,ae0402d0 +348c548,ac550000 +348c54c,ac430004 +348c550,8fbf0054 +348c554,8fbe0050 +348c558,8fb7004c +348c55c,8fb60048 +348c560,8fb50044 +348c564,8fb40040 +348c568,8fb3003c +348c56c,8fb20038 +348c570,8fb10034 +348c574,8fb00030 +348c578,3e00008 +348c57c,27bd0058 +348c580,27bdffa8 +348c584,afbf0054 +348c588,afbe0050 +348c58c,afb7004c +348c590,afb60048 +348c594,afb50044 +348c598,afb40040 +348c59c,afb3003c +348c5a0,afb20038 +348c5a4,afb10034 +348c5a8,afb00030 +348c5ac,80b825 +348c5b0,a0a825 +348c5b4,8c900000 +348c5b8,3c128007 +348c5bc,3652e298 +348c5c0,240f809 +348c5c4,2002025 +348c5c8,3c11800a +348c5cc,3631b900 +348c5d0,220f809 +348c5d4,2002025 +348c5d8,8e0302c0 +348c5dc,24640008 +348c5e0,ae0402c0 +348c5e4,3c1eda38 +348c5e8,27de0003 +348c5ec,ac7e0000 +348c5f0,ac620004 +348c5f4,3c138041 +348c5f8,26732010 +348c5fc,15a0c0 +348c600,2951021 +348c604,21080 +348c608,2621021 +348c60c,8c430004 +348c610,8e0202c0 +348c614,24440008 +348c618,ae0402c0 +348c61c,3c16de00 +348c620,ac560000 +348c624,ac430004 +348c628,26420028 +348c62c,40f809 +348c630,2002025 +348c634,8ee5009c +348c638,24040020 +348c63c,afa40028 +348c640,24030010 +348c644,afa30024 +348c648,51023 +348c64c,210c0 +348c650,afa20020 +348c654,afa5001c +348c658,24020001 +348c65c,afa20018 +348c660,afa40014 +348c664,afa30010 +348c668,265208ec +348c66c,3825 +348c670,3025 +348c674,2825 +348c678,240f809 +348c67c,2002025 +348c680,8e0302d0 +348c684,24640008 +348c688,ae0402d0 +348c68c,3c04db06 +348c690,24840020 +348c694,ac640000 +348c698,ac620004 +348c69c,2622edec +348c6a0,40f809 +348c6a4,295a021 +348c6a8,2622eef4 +348c6ac,24070001 +348c6b0,3025 +348c6b4,3c038041 +348c6b8,c46e1d24 +348c6bc,3c038041 +348c6c0,40f809 +348c6c4,c46c1d28 +348c6c8,26220554 +348c6cc,3c040001 +348c6d0,24841da0 +348c6d4,40f809 +348c6d8,2e42021 +348c6dc,220f809 +348c6e0,2002025 +348c6e4,8e0302d0 +348c6e8,24640008 +348c6ec,ae0402d0 +348c6f0,ac7e0000 +348c6f4,ac620004 +348c6f8,14a080 +348c6fc,2749821 +348c700,8e630008 +348c704,8e0202d0 +348c708,24440008 +348c70c,ae0402d0 +348c710,ac560000 +348c714,2631ee24 +348c718,220f809 +348c71c,ac430004 +348c720,8fbf0054 +348c724,8fbe0050 +348c728,8fb7004c +348c72c,8fb60048 +348c730,8fb50044 +348c734,8fb40040 +348c738,8fb3003c +348c73c,8fb20038 +348c740,8fb10034 +348c744,8fb00030 +348c748,3e00008 +348c74c,27bd0058 +348c750,27bdffa0 +348c754,afbf005c +348c758,afbe0058 +348c75c,afb70054 +348c760,afb60050 +348c764,afb5004c +348c768,afb40048 +348c76c,afb30044 +348c770,afb20040 +348c774,afb1003c +348c778,afb00038 +348c77c,80b825 +348c780,a0a825 +348c784,8c900000 +348c788,3c128007 +348c78c,3652e298 +348c790,240f809 +348c794,2002025 +348c798,3c11800a +348c79c,3631b900 +348c7a0,220f809 +348c7a4,2002025 +348c7a8,8e0302c0 +348c7ac,24640008 +348c7b0,ae0402c0 +348c7b4,3c16da38 +348c7b8,26d60003 +348c7bc,ac760000 +348c7c0,ac620004 +348c7c4,3c028041 +348c7c8,24422010 +348c7cc,1598c0 +348c7d0,275a021 +348c7d4,14a080 +348c7d8,afa20030 +348c7dc,54a021 +348c7e0,8e830004 +348c7e4,8e0202c0 +348c7e8,24440008 +348c7ec,ae0402c0 +348c7f0,3c1ede00 +348c7f4,ac5e0000 +348c7f8,ac430004 +348c7fc,26420028 +348c800,40f809 +348c804,2002025 +348c808,220f809 +348c80c,2002025 +348c810,8e0302d0 +348c814,24640008 +348c818,ae0402d0 +348c81c,ac760000 +348c820,ac620004 +348c824,8e830008 +348c828,8e0202d0 +348c82c,24440008 +348c830,ae0402d0 +348c834,ac5e0000 +348c838,ac430004 +348c83c,8ee4009c +348c840,24030020 +348c844,afa30028 +348c848,afa30024 +348c84c,41080 +348c850,821023 +348c854,21040 +348c858,afa20020 +348c85c,afa4001c +348c860,24020001 +348c864,afa20018 +348c868,afa30014 +348c86c,afa30010 +348c870,265208ec +348c874,3825 +348c878,3025 +348c87c,2825 +348c880,240f809 +348c884,2002025 +348c888,8e0302d0 +348c88c,24640008 +348c890,ae0402d0 +348c894,3c04db06 +348c898,24840020 +348c89c,ac640000 +348c8a0,ac620004 +348c8a4,2622edec +348c8a8,40f809 +348c8ac,2759821 +348c8b0,26220554 +348c8b4,3c040001 +348c8b8,24841da0 +348c8bc,40f809 +348c8c0,2e42021 +348c8c4,220f809 +348c8c8,2002025 +348c8cc,8e0302d0 +348c8d0,24640008 +348c8d4,ae0402d0 +348c8d8,ac760000 +348c8dc,ac620004 +348c8e0,139880 +348c8e4,8fa20030 +348c8e8,531021 +348c8ec,8c43000c +348c8f0,8e0202d0 +348c8f4,24440008 +348c8f8,ae0402d0 +348c8fc,ac5e0000 +348c900,2631ee24 +348c904,220f809 +348c908,ac430004 +348c90c,8fbf005c +348c910,8fbe0058 +348c914,8fb70054 +348c918,8fb60050 +348c91c,8fb5004c +348c920,8fb40048 +348c924,8fb30044 +348c928,8fb20040 +348c92c,8fb1003c +348c930,8fb00038 +348c934,3e00008 +348c938,27bd0060 +348c93c,27bdffa0 +348c940,afbf005c +348c944,afbe0058 +348c948,afb70054 +348c94c,afb60050 +348c950,afb5004c +348c954,afb40048 +348c958,afb30044 +348c95c,afb20040 +348c960,afb1003c +348c964,afb00038 +348c968,80b825 +348c96c,a0a825 +348c970,8c900000 +348c974,3c138007 +348c978,3673e298 +348c97c,260f809 +348c980,2002025 +348c984,3c11800a +348c988,3631b900 +348c98c,220f809 +348c990,2002025 +348c994,8e0302c0 +348c998,24640008 +348c99c,ae0402c0 +348c9a0,3c16da38 +348c9a4,26d60003 +348c9a8,ac760000 +348c9ac,ac620004 +348c9b0,3c028041 +348c9b4,24422010 +348c9b8,15a0c0 +348c9bc,2959021 +348c9c0,129080 +348c9c4,afa20030 +348c9c8,529021 +348c9cc,8e430004 +348c9d0,8e0202c0 +348c9d4,24440008 +348c9d8,ae0402c0 +348c9dc,3c1ede00 +348c9e0,ac5e0000 +348c9e4,ac430004 +348c9e8,26620028 +348c9ec,40f809 +348c9f0,2002025 +348c9f4,220f809 +348c9f8,2002025 +348c9fc,8e0302d0 +348ca00,24640008 +348ca04,ae0402d0 +348ca08,ac760000 +348ca0c,ac620004 +348ca10,8e430008 +348ca14,8e0202d0 +348ca18,24440008 +348ca1c,ae0402d0 +348ca20,ac5e0000 +348ca24,ac430004 +348ca28,8ee3009c +348ca2c,24050020 +348ca30,afa50028 +348ca34,24040010 +348ca38,afa40024 +348ca3c,31080 +348ca40,621023 +348ca44,21040 +348ca48,afa20020 +348ca4c,afa3001c +348ca50,24020001 +348ca54,afa20018 +348ca58,afa50014 +348ca5c,afa40010 +348ca60,267308ec +348ca64,3825 +348ca68,3025 +348ca6c,2825 +348ca70,260f809 +348ca74,2002025 +348ca78,8e0302d0 +348ca7c,24640008 +348ca80,ae0402d0 +348ca84,3c04db06 +348ca88,24840020 +348ca8c,ac640000 +348ca90,ac620004 +348ca94,2622edec +348ca98,40f809 +348ca9c,295a021 +348caa0,26220554 +348caa4,3c040001 +348caa8,24841da0 +348caac,40f809 +348cab0,2e42021 +348cab4,220f809 +348cab8,2002025 +348cabc,8e0302d0 +348cac0,24640008 +348cac4,ae0402d0 +348cac8,ac760000 +348cacc,ac620004 +348cad0,8e430010 +348cad4,8e0202d0 +348cad8,24440008 +348cadc,ae0402d0 +348cae0,ac5e0000 +348cae4,ac430004 +348cae8,14a080 +348caec,8fa20030 +348caf0,541021 +348caf4,8c43000c +348caf8,8e0202d0 +348cafc,24440008 +348cb00,ae0402d0 +348cb04,ac5e0000 +348cb08,2631ee24 +348cb0c,220f809 +348cb10,ac430004 +348cb14,8fbf005c +348cb18,8fbe0058 +348cb1c,8fb70054 +348cb20,8fb60050 +348cb24,8fb5004c +348cb28,8fb40048 +348cb2c,8fb30044 +348cb30,8fb20040 +348cb34,8fb1003c +348cb38,8fb00038 +348cb3c,3e00008 +348cb40,27bd0060 +348cb44,27bdffc8 +348cb48,afbf0034 +348cb4c,afb70030 +348cb50,afb6002c +348cb54,afb50028 +348cb58,afb40024 +348cb5c,afb30020 +348cb60,afb2001c +348cb64,afb10018 +348cb68,afb00014 +348cb6c,a0a025 +348cb70,8c910000 +348cb74,3c128041 +348cb78,26522010 +348cb7c,598c0 +348cb80,2651021 +348cb84,21080 +348cb88,2421021 +348cb8c,90500008 +348cb90,90570009 +348cb94,9055000a +348cb98,9056000b +348cb9c,3c028007 +348cba0,3442e2c0 +348cba4,40f809 +348cba8,2202025 +348cbac,3c02800a +348cbb0,3442b900 +348cbb4,40f809 +348cbb8,2202025 +348cbbc,8e2302d0 +348cbc0,24640008 +348cbc4,ae2402d0 +348cbc8,3c04da38 +348cbcc,24840003 +348cbd0,ac640000 +348cbd4,ac620004 +348cbd8,8e2202d0 +348cbdc,24430008 +348cbe0,ae2302d0 +348cbe4,3c03fb00 +348cbe8,ac430000 +348cbec,108600 +348cbf0,17bc00 +348cbf4,2178025 +348cbf8,2168025 +348cbfc,15aa00 +348cc00,2158025 +348cc04,ac500004 +348cc08,2749821 +348cc0c,139880 +348cc10,2539021 +348cc14,8e430004 +348cc18,8e2202d0 +348cc1c,24440008 +348cc20,ae2402d0 +348cc24,3c04de00 +348cc28,ac440000 +348cc2c,ac430004 +348cc30,8fbf0034 +348cc34,8fb70030 +348cc38,8fb6002c +348cc3c,8fb50028 +348cc40,8fb40024 +348cc44,8fb30020 +348cc48,8fb2001c +348cc4c,8fb10018 +348cc50,8fb00014 +348cc54,3e00008 +348cc58,27bd0038 +348cc5c,27bdffb8 +348cc60,afbf0044 +348cc64,afbe0040 +348cc68,afb7003c +348cc6c,afb60038 +348cc70,afb50034 +348cc74,afb40030 +348cc78,afb3002c +348cc7c,afb20028 +348cc80,afb10024 +348cc84,afb00020 +348cc88,a0a825 +348cc8c,8c900000 +348cc90,3c138041 +348cc94,26732010 +348cc98,5a0c0 +348cc9c,2851021 +348cca0,21080 +348cca4,2621021 +348cca8,90520008 +348ccac,90570009 +348ccb0,9056000a +348ccb4,905e000b +348ccb8,9051000c +348ccbc,9043000d +348ccc0,afa30018 +348ccc4,9044000e +348ccc8,afa40014 +348cccc,9042000f +348ccd0,afa20010 +348ccd4,3c028007 +348ccd8,3442e298 +348ccdc,40f809 +348cce0,2002025 +348cce4,3c02800a +348cce8,3442b900 +348ccec,40f809 +348ccf0,2002025 +348ccf4,8e0302c0 +348ccf8,24640008 +348ccfc,ae0402c0 +348cd00,3c04da38 +348cd04,24840003 +348cd08,ac640000 +348cd0c,ac620004 +348cd10,8e0202c0 +348cd14,24430008 +348cd18,ae0302c0 +348cd1c,3c03fa00 +348cd20,24630080 +348cd24,ac430000 +348cd28,129600 +348cd2c,17bc00 +348cd30,2579025 +348cd34,25e9025 +348cd38,16b200 +348cd3c,2569025 +348cd40,ac520004 +348cd44,8e0202c0 +348cd48,24430008 +348cd4c,ae0302c0 +348cd50,3c03fb00 +348cd54,ac430000 +348cd58,118e00 +348cd5c,8fa30018 +348cd60,31c00 +348cd64,2238825 +348cd68,8fa30010 +348cd6c,2238825 +348cd70,8fa40014 +348cd74,41a00 +348cd78,2238825 +348cd7c,ac510004 +348cd80,295a021 +348cd84,14a080 +348cd88,2749821 +348cd8c,8e630004 +348cd90,8e0202c0 +348cd94,24440008 +348cd98,ae0402c0 +348cd9c,3c04de00 +348cda0,ac440000 +348cda4,ac430004 +348cda8,8fbf0044 +348cdac,8fbe0040 +348cdb0,8fb7003c +348cdb4,8fb60038 +348cdb8,8fb50034 +348cdbc,8fb40030 +348cdc0,8fb3002c +348cdc4,8fb20028 +348cdc8,8fb10024 +348cdcc,8fb00020 +348cdd0,3e00008 +348cdd4,27bd0048 +348cdd8,27bdffa8 +348cddc,afbf0054 +348cde0,afbe0050 +348cde4,afb7004c +348cde8,afb60048 +348cdec,afb50044 +348cdf0,afb40040 +348cdf4,afb3003c +348cdf8,afb20038 +348cdfc,afb10034 +348ce00,afb00030 +348ce04,a0b025 +348ce08,8c900000 +348ce0c,3c138041 +348ce10,26732010 +348ce14,5a0c0 +348ce18,2858821 +348ce1c,118880 +348ce20,2718821 +348ce24,9232000c +348ce28,9222000d +348ce2c,afa20018 +348ce30,9224000e +348ce34,afa4001c +348ce38,9225000f +348ce3c,afa50020 +348ce40,92260010 +348ce44,afa60024 +348ce48,92270011 +348ce4c,afa70028 +348ce50,92280012 +348ce54,afa80014 +348ce58,92290013 +348ce5c,afa90010 +348ce60,3c158007 +348ce64,36b5e298 +348ce68,2a0f809 +348ce6c,2002025 +348ce70,3c1e800a +348ce74,37deb900 +348ce78,3c0f809 +348ce7c,2002025 +348ce80,8e0302c0 +348ce84,24640008 +348ce88,ae0402c0 +348ce8c,3c17da38 +348ce90,26f70003 +348ce94,ac770000 +348ce98,ac620004 +348ce9c,8e230004 +348cea0,8e0202c0 +348cea4,24440008 +348cea8,ae0402c0 +348ceac,3c11de00 +348ceb0,ac510000 +348ceb4,ac430004 +348ceb8,26b50028 +348cebc,2a0f809 +348cec0,2002025 +348cec4,3c0f809 +348cec8,2002025 +348cecc,8e0302d0 +348ced0,24640008 +348ced4,ae0402d0 +348ced8,ac770000 +348cedc,ac620004 +348cee0,8e0202d0 +348cee4,24430008 +348cee8,ae0302d0 +348ceec,3c03fa00 +348cef0,24630080 +348cef4,ac430000 +348cef8,129600 +348cefc,8fa30018 +348cf00,31c00 +348cf04,2439025 +348cf08,8fa50020 +348cf0c,2459025 +348cf10,8fa4001c +348cf14,41a00 +348cf18,2439025 +348cf1c,ac520004 +348cf20,8e0302d0 +348cf24,24620008 +348cf28,ae0202d0 +348cf2c,3c02fb00 +348cf30,ac620000 +348cf34,8fa60024 +348cf38,61600 +348cf3c,8fa70028 +348cf40,72400 +348cf44,441025 +348cf48,8fa90010 +348cf4c,491025 +348cf50,8fa80014 +348cf54,82200 +348cf58,441025 +348cf5c,ac620004 +348cf60,296a021 +348cf64,14a080 +348cf68,2749821 +348cf6c,8e630008 +348cf70,8e0202d0 +348cf74,24440008 +348cf78,ae0402d0 +348cf7c,ac510000 +348cf80,ac430004 +348cf84,8fbf0054 +348cf88,8fbe0050 +348cf8c,8fb7004c +348cf90,8fb60048 +348cf94,8fb50044 +348cf98,8fb40040 +348cf9c,8fb3003c +348cfa0,8fb20038 +348cfa4,8fb10034 +348cfa8,8fb00030 +348cfac,3e00008 +348cfb0,27bd0058 +348cfb4,27bdffe8 +348cfb8,afbf0014 +348cfbc,510c0 +348cfc0,451021 +348cfc4,21080 +348cfc8,3c038041 +348cfcc,24632010 +348cfd0,431021 +348cfd4,8c420000 +348cfd8,40f809 +348cfe0,8fbf0014 +348cfe4,3e00008 +348cfe8,27bd0018 +348cfec,3e00008 +348cff4,24020140 +348cff8,3e00008 +348cffc,a4821424 +348d000,27bdffe0 +348d004,afbf001c +348d008,afb10018 +348d00c,afb00014 +348d010,808025 +348d014,8c8208c4 +348d018,24420001 +348d01c,c104471 +348d020,ac8208c4 +348d024,3c028040 +348d028,94420dc6 +348d02c,8e0308c4 +348d030,1462001e +348d034,8fbf001c +348d038,920200b2 +348d03c,34420001 +348d040,a20200b2 +348d044,3c04801c +348d048,348484a0 +348d04c,3c110001 +348d050,918821 +348d054,86221e1a +348d058,ae020000 +348d05c,948200a4 +348d060,a6020066 +348d064,3c108009 +348d068,3602d894 +348d06c,40f809 +348d070,261005d4 +348d074,3c04a34b +348d078,200f809 +348d07c,3484e820 +348d080,3c028011 +348d084,3442a5d0 +348d088,2403fff8 +348d08c,a4431412 +348d090,240200a0 +348d094,a6221e1a +348d098,24020014 +348d09c,a2221e15 +348d0a0,24020001 +348d0a4,a2221e5e +348d0a8,8fbf001c +348d0ac,8fb10018 +348d0b0,8fb00014 +348d0b4,3e00008 +348d0b8,27bd0020 +348d0bc,8c8200a0 +348d0c0,34423000 +348d0c4,ac8200a0 +348d0c8,3c028041 +348d0cc,9042492e +348d0d0,304200ff +348d0d4,10400005 +348d0d8,52840 +348d0dc,3c028010 +348d0e0,451021 +348d0e4,94428cec +348d0e8,a4820034 +348d0ec,3e00008 +348d0f4,24020001 +348d0f8,3e00008 +348d0fc,a082003e +348d100,24020012 +348d104,2406ffff +348d108,24070016 +348d10c,821821 +348d110,80630074 +348d114,54660004 +348d118,24420001 +348d11c,822021 +348d120,3e00008 +348d124,a0850074 +348d128,1447fff9 +348d12c,821821 +348d130,3e00008 +348d138,862021 +348d13c,908200a8 +348d140,a22825 +348d144,3e00008 +348d148,a08500a8 +348d14c,851821 +348d150,906200bc +348d154,23600 +348d158,63603 +348d15c,4c20001 +348d160,1025 +348d164,24420001 +348d168,a06200bc +348d16c,510c0 +348d170,451823 +348d174,31880 +348d178,831821 +348d17c,602025 +348d180,806200e5 +348d184,24420001 +348d188,21400 +348d18c,946300e6 +348d190,431025 +348d194,3e00008 +348d198,ac8200e4 +348d19c,853021 +348d1a0,3c028040 +348d1a4,24420daa +348d1a8,451021 +348d1ac,90470000 +348d1b0,51040 +348d1b4,3c038041 +348d1b8,246330cc +348d1bc,431021 +348d1c0,471021 +348d1c4,90c300bc +348d1c8,33e00 +348d1cc,73e03 +348d1d0,4e20001 +348d1d4,1825 +348d1d8,90420000 +348d1dc,431021 +348d1e0,a0c200bc +348d1e4,510c0 +348d1e8,451023 +348d1ec,21080 +348d1f0,822021 +348d1f4,3c028040 +348d1f8,24420daa +348d1fc,451021 +348d200,90430000 +348d204,52840 +348d208,3c028041 +348d20c,244230cc +348d210,a22821 +348d214,a32821 +348d218,80a20000 +348d21c,808300e5 +348d220,431021 +348d224,21400 +348d228,948300e6 +348d22c,431025 +348d230,3e00008 +348d234,ac8200e4 +348d238,24020001 +348d23c,a082003d +348d240,24020014 +348d244,a08200cf +348d248,24020140 +348d24c,3e00008 +348d250,a4821424 +348d254,24020001 +348d258,a0820032 +348d25c,a082003a +348d260,24020030 +348d264,a48213f4 +348d268,3e00008 +348d26c,a0820033 +348d270,24020002 +348d274,a0820032 +348d278,24020001 +348d27c,a082003a +348d280,a082003c +348d284,24020060 +348d288,a48213f4 +348d28c,3e00008 +348d290,a0820033 +348d294,24020007 +348d298,3e00008 +348d29c,a082007b +348d2a0,24020001 +348d2a4,a21004 +348d2a8,8c8500a4 +348d2ac,a22825 +348d2b0,3e00008 +348d2b4,ac8500a4 +348d2b8,27bdffe8 +348d2bc,afbf0014 +348d2c0,c102aad +348d2c8,8fbf0014 +348d2cc,3e00008 +348d2d0,27bd0018 +348d2d4,24020010 +348d2d8,a0820082 +348d2dc,9082009a +348d2e0,2442000a +348d2e4,3e00008 +348d2e8,a082009a +348d2ec,3c028041 +348d2f0,9042492e +348d2f4,304200ff +348d2f8,10400005 +348d2fc,52840 +348d300,3c028010 +348d304,451021 +348d308,94428cec +348d30c,a4820034 +348d310,3e00008 +348d318,8482002e +348d31c,28420130 +348d320,50400001 +348d324,a08000a4 +348d328,24020140 +348d32c,3e00008 +348d330,a4821424 +348d334,3c028041 +348d338,9042492d +348d33c,1040000c +348d340,3c028041 +348d344,94820f06 +348d348,34420040 +348d34c,a4820f06 +348d350,3c028041 +348d354,9042492c +348d358,54400009 +348d35c,94820f06 +348d360,94820ef4 +348d364,3042fb87 +348d368,3e00008 +348d36c,a4820ef4 +348d370,9042492c +348d374,1040000c +348d37c,94820f06 +348d380,34420080 +348d384,a4820f06 +348d388,94820ef6 +348d38c,24038f00 +348d390,431025 +348d394,a4820ef6 +348d398,94820ee4 +348d39c,2403f000 +348d3a0,431025 +348d3a4,a4820ee4 +348d3a8,3e00008 +348d3b0,2c8200d6 +348d3b4,1040000b +348d3b8,41840 +348d3bc,641021 +348d3c0,210c0 +348d3c4,3c058041 +348d3c8,24a530e8 +348d3cc,a21021 +348d3d0,80430000 +348d3d4,3182b +348d3d8,31823 +348d3dc,3e00008 +348d3e0,431024 +348d3e4,3e00008 +348d3e8,1025 +348d3ec,27bdffe0 +348d3f0,afbf001c +348d3f4,afb20018 +348d3f8,afb10014 +348d3fc,afb00010 +348d400,808025 +348d404,3c128011 +348d408,3652a5d0 +348d40c,c1034ec +348d410,2002025 +348d414,2008825 +348d418,8c420008 +348d41c,2002825 +348d420,40f809 +348d424,2402025 +348d428,1622fff8 +348d42c,408025 +348d430,2201025 +348d434,8fbf001c +348d438,8fb20018 +348d43c,8fb10014 +348d440,8fb00010 +348d444,3e00008 +348d448,27bd0020 +348d44c,27bdffe8 +348d450,afbf0014 +348d454,8c82000c +348d458,84860012 +348d45c,84850010 +348d460,3c048011 +348d464,40f809 +348d468,3484a5d0 +348d46c,8fbf0014 +348d470,3e00008 +348d474,27bd0018 +348d478,3e00008 +348d47c,a01025 +348d480,8082007d +348d484,21027 +348d488,2102b +348d48c,3e00008 +348d490,24420008 +348d494,8c8200a0 +348d498,21182 +348d49c,30420007 +348d4a0,10400005 +348d4a8,38420001 +348d4ac,2102b +348d4b0,3e00008 +348d4b4,24420035 +348d4b8,3e00008 +348d4bc,24020054 +348d4c0,8c8200a0 +348d4c4,210c2 +348d4c8,30420007 +348d4cc,10400005 +348d4d4,38420001 +348d4d8,2102b +348d4dc,3e00008 +348d4e0,24420033 +348d4e4,3e00008 +348d4e8,24020032 +348d4ec,8c8200a0 +348d4f0,30420007 +348d4f4,10400005 +348d4fc,38420001 +348d500,2102b +348d504,3e00008 +348d508,24420030 +348d50c,3e00008 +348d510,24020004 +348d514,8c8300a0 +348d518,31b82 +348d51c,30630007 +348d520,10600005 +348d524,24040001 +348d528,14640004 +348d52c,2402007b +348d530,3e00008 +348d534,24020060 +348d538,24020005 +348d53c,3e00008 +348d544,8c8300a0 +348d548,31b02 +348d54c,30630003 +348d550,10600005 +348d554,24040001 +348d558,14640004 +348d55c,240200c7 +348d560,3e00008 +348d564,24020046 +348d568,24020045 +348d56c,3e00008 +348d574,8c8200a0 +348d578,21242 +348d57c,30420007 +348d580,2102b +348d584,3e00008 +348d588,24420037 +348d58c,8c8200a0 +348d590,21502 +348d594,30420007 +348d598,2c420002 +348d59c,2c420001 +348d5a0,3e00008 +348d5a4,24420079 +348d5a8,8c8200a0 +348d5ac,21442 +348d5b0,30420007 +348d5b4,2c420002 +348d5b8,2c420001 +348d5bc,3e00008 +348d5c0,24420077 +348d5c4,9082003a +348d5c8,2102b +348d5cc,3e00008 +348d5d0,244200b9 +348d5d4,8083007c +348d5d8,2402ffff +348d5dc,50620007 +348d5e0,2402006b +348d5e4,80830094 +348d5e8,28630006 +348d5ec,10600003 +348d5f0,2402006a +348d5f4,3e00008 +348d5f8,24020003 +348d5fc,3e00008 +348d604,8083007b +348d608,2402ffff +348d60c,10620003 +348d614,3e00008 +348d618,2402000c +348d61c,3e00008 +348d620,2402003b +348d624,8c8300a0 +348d628,30630007 +348d62c,14600002 +348d630,a01025 +348d634,2402004d +348d638,3e00008 +348d640,8c8300a0 +348d644,30630038 +348d648,14600002 +348d64c,a01025 +348d650,2402004d +348d654,3e00008 +348d65c,8c8300a0 +348d660,3c040001 +348d664,3484c000 +348d668,641824 +348d66c,14600002 +348d670,a01025 +348d674,2402004d +348d678,3e00008 +348d680,94820eda +348d684,30420008 +348d688,14400010 +348d690,80830086 +348d694,2402001b +348d698,1062000e +348d6a0,80830087 +348d6a4,1062000d +348d6ac,80830088 +348d6b0,1062000c +348d6b4,2403001b +348d6b8,80840089 +348d6bc,1483000a +348d6c0,a01025 +348d6c4,3e00008 +348d6c8,240200c8 +348d6cc,3e00008 +348d6d0,240200c8 +348d6d4,3e00008 +348d6d8,240200c8 +348d6dc,3e00008 +348d6e0,240200c8 +348d6e4,240200c8 +348d6e8,3e00008 +348d6f0,8483002e +348d6f4,28630140 +348d6f8,14600008 +348d6fc,a01025 +348d700,24030076 +348d704,50a30005 +348d708,2402007f +348d70c,38a2003d +348d710,2c420001 +348d714,3e00008 +348d718,2442007d +348d71c,3e00008 +348d724,27bdffe8 +348d728,afbf0014 +348d72c,c1045d1 +348d734,c102932 +348d73c,c1043b1 +348d744,c102357 +348d74c,c10234c +348d754,c103b88 +348d75c,c10445c +348d764,8fbf0014 +348d768,3e00008 +348d76c,27bd0018 +348d770,27bdffe8 +348d774,afbf0014 +348d778,c10256b +348d780,c101352 +348d788,c1038b6 +348d790,c1029ae +348d798,c101d2b +348d7a0,8fbf0014 +348d7a4,3e00008 +348d7a8,27bd0018 +348d7ac,27bdffe8 +348d7b0,afbf0014 +348d7b4,afb00010 +348d7b8,3c10801c +348d7bc,361084a0 +348d7c0,8e040000 +348d7c4,c101740 +348d7c8,248402a8 +348d7cc,8e040000 +348d7d0,c10447b +348d7d4,248402a8 +348d7d8,8e040000 +348d7dc,c1038c6 +348d7e0,248402a8 +348d7e4,c1022d9 +348d7ec,8fbf0014 +348d7f0,8fb00010 +348d7f4,3e00008 +348d7f8,27bd0018 +348d7fc,27bdffe0 +348d800,afbf001c +348d804,afb10018 +348d808,afb00014 +348d80c,808025 +348d810,c1045f6 +348d814,a08825 +348d818,2202825 +348d81c,c027368 +348d820,2002025 +348d824,8fbf001c +348d828,8fb10018 +348d82c,8fb00014 +348d830,3e00008 +348d834,27bd0020 +348d838,27bdffe8 +348d83c,afbf0014 +348d840,c1022b2 +348d848,c1045cc +348d850,c103b9b +348d858,c101d25 +348d860,c103a3a +348d868,c1025ff +348d870,c10437f +348d878,8fbf0014 +348d87c,3e00008 +348d880,27bd0018 +348d884,3c02801c +348d888,344284a0 +348d88c,3c030001 +348d890,431021 +348d894,84430988 +348d898,14600022 +348d89c,3c02801c +348d8a0,344284a0 +348d8a4,3c030001 +348d8a8,431021 +348d8ac,84420992 +348d8b0,14400014 +348d8b4,21840 +348d8b8,3c028011 +348d8bc,3442a5d0 +348d8c0,8c420004 +348d8c4,14400009 +348d8c8,3c028011 +348d8cc,3442a5d0 +348d8d0,8c4300a0 +348d8d4,3c020001 +348d8d8,3442c007 +348d8dc,621824 +348d8e0,14600026 +348d8e4,24020001 +348d8e8,3c028011 +348d8ec,3442a5d0 +348d8f0,8c4200a0 +348d8f4,21382 +348d8f8,30420007 +348d8fc,3e00008 +348d900,2102b +348d904,621821 +348d908,3c028011 +348d90c,3442a5d0 +348d910,8c4200a0 +348d914,621006 +348d918,30420007 +348d91c,3e00008 +348d920,2102b +348d924,344284a0 +348d928,3c040001 +348d92c,441021 +348d930,84440992 +348d934,1480000a +348d938,3c028011 +348d93c,24020003 +348d940,14620007 +348d944,3c028011 +348d948,3442a5d0 +348d94c,8c42009c +348d950,3c03000c +348d954,431024 +348d958,3e00008 +348d95c,2102b +348d960,3442a5d0 +348d964,9442009c +348d968,42080 +348d96c,2463ffff +348d970,832021 +348d974,821007 +348d978,30420001 +348d97c,3e00008 +348d984,27bdffe0 +348d988,afbf001c +348d98c,3c028040 +348d990,90420893 +348d994,10400010 +348d998,3c028040 +348d99c,2406000c +348d9a0,3c028041 +348d9a4,8c454930 +348d9a8,c103ff8 +348d9ac,27a40010 +348d9b0,3c028011 +348d9b4,97a30010 +348d9b8,a4435dd2 +348d9bc,93a30012 +348d9c0,a0435dd4 +348d9c4,97a30010 +348d9c8,a4435dda +348d9cc,93a30012 +348d9d0,a0435ddc +348d9d4,3c028040 +348d9d8,90420894 +348d9dc,10400010 +348d9e0,8fbf001c +348d9e4,2406000a +348d9e8,3c028041 +348d9ec,8c454930 +348d9f0,c103ff8 +348d9f4,27a40010 +348d9f8,3c028011 +348d9fc,97a30010 +348da00,a4435dce +348da04,93a30012 +348da08,a0435dd0 +348da0c,97a30010 +348da10,a4435dd6 +348da14,93a30012 +348da18,a0435dd8 +348da1c,8fbf001c +348da20,3e00008 +348da24,27bd0020 +348da28,3c02801d +348da2c,3442aa30 +348da30,8c420678 +348da34,10400063 +348da3c,8c430130 +348da40,10600060 +348da48,8c4201c8 +348da4c,2c43001f +348da50,1060005c +348da58,27bdffd8 +348da5c,afbf0024 +348da60,afb10020 +348da64,afb0001c +348da68,280c0 +348da6c,2028023 +348da70,108080 +348da74,2028023 +348da78,108100 +348da7c,3c028011 +348da80,2028021 +348da84,3c028040 +348da88,90420895 +348da8c,10400018 +348da90,2610572c +348da94,3c118041 +348da98,24060006 +348da9c,8e254930 +348daa0,c103ff8 +348daa4,27a40010 +348daa8,93a20010 +348daac,a2020192 +348dab0,93a20011 +348dab4,a2020193 +348dab8,93a20012 +348dabc,a2020194 +348dac0,8e254930 +348dac4,24060006 +348dac8,24a5000c +348dacc,c103ff8 +348dad0,27a40010 +348dad4,93a20010 +348dad8,a202019a +348dadc,93a20011 +348dae0,a202019b +348dae4,93a20012 +348dae8,1000000c +348daec,a202019c +348daf0,3c028040 +348daf4,90440886 +348daf8,a2040192 +348dafc,24420886 +348db00,90430001 +348db04,a2030193 +348db08,90420002 +348db0c,a2020194 +348db10,a204019a +348db14,a203019b +348db18,a202019c +348db1c,3c028040 +348db20,90420896 +348db24,10400018 +348db28,3c028040 +348db2c,3c118041 +348db30,24060005 +348db34,8e254930 +348db38,c103ff8 +348db3c,27a40010 +348db40,93a20010 +348db44,a2020196 +348db48,93a20011 +348db4c,a2020197 +348db50,93a20012 +348db54,a2020198 +348db58,8e254930 +348db5c,24060005 +348db60,24a5000a +348db64,c103ff8 +348db68,27a40010 +348db6c,93a20010 +348db70,a202019e +348db74,93a20011 +348db78,a202019f +348db7c,93a20012 +348db80,1000000b +348db84,a20201a0 +348db88,90440889 +348db8c,a2040196 +348db90,24420889 +348db94,90430001 +348db98,a2030197 +348db9c,90420002 +348dba0,a2020198 +348dba4,a204019e +348dba8,a203019f +348dbac,a20201a0 +348dbb0,8fbf0024 +348dbb4,8fb10020 +348dbb8,8fb0001c +348dbbc,3e00008 +348dbc0,27bd0028 +348dbc4,3e00008 +348dbcc,27bdffd0 +348dbd0,afbf002c +348dbd4,afb20028 +348dbd8,afb10024 +348dbdc,afb00020 +348dbe0,3c028040 +348dbe4,9043088c +348dbe8,240200fa +348dbec,14620008 +348dbf0,24100001 +348dbf4,3c028040 +348dbf8,2442088c +348dbfc,90500001 +348dc00,90420002 +348dc04,2028025 +348dc08,321000ff +348dc0c,10802b +348dc10,3c028040 +348dc14,9043088f +348dc18,240200fa +348dc1c,14620008 +348dc20,24110001 +348dc24,3c028040 +348dc28,2442088f +348dc2c,90510001 +348dc30,90420002 +348dc34,2228825 +348dc38,323100ff +348dc3c,11882b +348dc40,3c128041 +348dc44,24060009 +348dc48,8e454930 +348dc4c,c103ff8 +348dc50,27a40010 +348dc54,8e454930 +348dc58,24060009 +348dc5c,24a50012 +348dc60,c103ff8 +348dc64,27a40014 +348dc68,24060007 +348dc6c,8e454930 +348dc70,c103ff8 +348dc74,27a40018 +348dc78,8e454930 +348dc7c,24060007 +348dc80,24a5000e +348dc84,c103ff8 +348dc88,27a4001c +348dc8c,3c02801c +348dc90,344284a0 +348dc94,8c421c4c +348dc98,10400064 +348dc9c,8fbf002c +348dca0,240500da +348dca4,3c068011 +348dca8,24c65c3c +348dcac,3c088040 +348dcb0,3c078040 +348dcb4,3c0a8040 +348dcb8,254c088f +348dcbc,3c098040 +348dcc0,252b088c +348dcc4,8c430130 +348dcc8,50600055 +348dccc,8c420124 +348dcd0,84430000 +348dcd4,54650052 +348dcd8,8c420124 +348dcdc,8c43016c +348dce0,320c0 +348dce4,832023 +348dce8,42080 +348dcec,832023 +348dcf0,42100 +348dcf4,2484faf0 +348dcf8,862021 +348dcfc,8c4d0170 +348dd00,d18c0 +348dd04,6d1823 +348dd08,31880 +348dd0c,6d1823 +348dd10,31900 +348dd14,2463faf0 +348dd18,910d0897 +348dd1c,11a0000e +348dd20,661821 +348dd24,97ae0010 +348dd28,a48e0192 +348dd2c,93ad0012 +348dd30,a08d0194 +348dd34,a46e0192 +348dd38,a06d0194 +348dd3c,97ae0014 +348dd40,a48e019a +348dd44,93ad0016 +348dd48,a08d019c +348dd4c,a46e019a +348dd50,10000012 +348dd54,a06d019c +348dd58,12000011 +348dd5c,90ed0898 +348dd60,912f088c +348dd64,a08f0192 +348dd68,916e0001 +348dd6c,a08e0193 +348dd70,916d0002 +348dd74,a08d0194 +348dd78,a06f0192 +348dd7c,a06e0193 +348dd80,a06d0194 +348dd84,a08f019a +348dd88,a08e019b +348dd8c,a08d019c +348dd90,a06f019a +348dd94,a06e019b +348dd98,a06d019c +348dd9c,90ed0898 +348dda0,11a0000d +348dda4,97ae0018 +348dda8,a48e0196 +348ddac,93ad001a +348ddb0,a08d0198 +348ddb4,a46e0196 +348ddb8,a06d0198 +348ddbc,97ae001c +348ddc0,a48e019e +348ddc4,93ad001e +348ddc8,a08d01a0 +348ddcc,a46e019e +348ddd0,10000012 +348ddd4,a06d01a0 +348ddd8,52200011 +348dddc,8c420124 +348dde0,914f088f +348dde4,a08f0196 +348dde8,918e0001 +348ddec,a08e0197 +348ddf0,918d0002 +348ddf4,a08d0198 +348ddf8,a06f0196 +348ddfc,a06e0197 +348de00,a06d0198 +348de04,a08f019e +348de08,a08e019f +348de0c,a08d01a0 +348de10,a06f019e +348de14,a06e019f +348de18,a06d01a0 +348de1c,8c420124 +348de20,5440ffa9 +348de24,8c430130 +348de28,8fbf002c +348de2c,8fb20028 +348de30,8fb10024 +348de34,8fb00020 +348de38,3e00008 +348de3c,27bd0030 +348de40,27bdffd8 +348de44,afbf001c +348de48,f7b40020 +348de4c,3c028040 +348de50,90420897 +348de54,1040000a +348de58,46006506 +348de5c,24060009 +348de60,3c028041 +348de64,8c454930 +348de68,c103ff8 +348de6c,27a40010 +348de70,93a20010 +348de74,93a30011 +348de78,10000006 +348de7c,93a40012 +348de80,3c048040 +348de84,9082088c +348de88,2484088c +348de8c,90830001 +348de90,90840002 +348de94,240500fa +348de98,14450043 +348de9c,642825 +348dea0,14a00041 +348dea8,3c028041 +348deac,c4401d2c +348deb0,4600a002 +348deb4,3c028041 +348deb8,c4421d30 +348debc,46020000 +348dec0,3c028041 +348dec4,c4421d34 +348dec8,4600103e +348ded0,45030005 +348ded4,46020001 +348ded8,4600000d +348dedc,44020000 +348dee0,10000006 +348dee4,304200ff +348dee8,4600000d +348deec,44020000 +348def0,3c038000 +348def4,431025 +348def8,304200ff +348defc,3c038041 +348df00,c4601d38 +348df04,4600a002 +348df08,3c038041 +348df0c,c4621d30 +348df10,46020000 +348df14,3c038041 +348df18,c4621d34 +348df1c,4600103e +348df24,45030005 +348df28,46020001 +348df2c,4600000d +348df30,44030000 +348df34,10000006 +348df38,306300ff +348df3c,4600000d +348df40,44030000 +348df44,3c048000 +348df48,641825 +348df4c,306300ff +348df50,3c048041 +348df54,c4801d3c +348df58,4600a002 +348df5c,3c048041 +348df60,c4821d40 +348df64,46020000 +348df68,3c048041 +348df6c,c4821d34 +348df70,4600103e +348df78,45030005 +348df7c,46020001 +348df80,4600000d +348df84,44040000 +348df88,10000040 +348df8c,308400ff +348df90,4600000d +348df94,44040000 +348df98,3c058000 +348df9c,852025 +348dfa0,1000003a +348dfa4,308400ff +348dfa8,44820000 +348dfb0,46800020 +348dfb4,46140002 +348dfb8,3c028041 +348dfbc,c4421d34 +348dfc0,4600103e +348dfc8,45030005 +348dfcc,46020001 +348dfd0,4600000d +348dfd4,44020000 +348dfd8,10000006 +348dfdc,304200ff +348dfe0,4600000d +348dfe4,44020000 +348dfe8,3c058000 +348dfec,451025 +348dff0,304200ff +348dff4,44830000 +348dffc,46800020 +348e000,46140002 +348e004,3c038041 +348e008,c4621d34 +348e00c,4600103e +348e014,45030005 +348e018,46020001 +348e01c,4600000d +348e020,44030000 +348e024,10000006 +348e028,306300ff +348e02c,4600000d +348e030,44030000 +348e034,3c058000 +348e038,651825 +348e03c,306300ff +348e040,44840000 +348e048,46800020 +348e04c,46140002 +348e050,3c048041 +348e054,c4821d34 +348e058,4600103e +348e060,45030005 +348e064,46020001 +348e068,4600000d +348e06c,44040000 +348e070,10000006 +348e074,308400ff +348e078,4600000d +348e07c,44040000 +348e080,3c058000 +348e084,852025 +348e088,308400ff +348e08c,21600 +348e090,42200 +348e094,441025 +348e098,31c00 +348e09c,431025 +348e0a0,344200ff +348e0a4,8fbf001c +348e0a8,d7b40020 +348e0ac,3e00008 +348e0b0,27bd0028 +348e0b4,27bdffd8 +348e0b8,afbf0024 +348e0bc,afb20020 +348e0c0,afb1001c +348e0c4,afb00018 +348e0c8,3c02801c +348e0cc,344284a0 +348e0d0,90421cda +348e0d4,24030004 +348e0d8,10430015 +348e0dc,2c430005 +348e0e0,50600006 +348e0e4,2442fffb +348e0e8,24030002 +348e0ec,50430008 +348e0f0,3c028040 +348e0f4,10000013 +348e0f8,3c028040 +348e0fc,304200fb +348e100,54400010 +348e104,3c028040 +348e108,10000005 +348e10c,3c028040 +348e110,90500899 +348e114,3c028040 +348e118,1000000d +348e11c,9051089a +348e120,9050089b +348e124,3c028040 +348e128,10000009 +348e12c,9051089c +348e130,3c028040 +348e134,9050089d +348e138,3c028040 +348e13c,10000004 +348e140,9051089e +348e144,9050089f +348e148,3c028040 +348e14c,905108a0 +348e150,2111025 +348e154,1040005b +348e158,8fbf0024 +348e15c,3c128041 +348e160,2406000e +348e164,8e454930 +348e168,c103ff8 +348e16c,27a40010 +348e170,2406000c +348e174,8e454930 +348e178,c103ff8 +348e17c,27a40014 +348e180,1200000a +348e184,3c02801c +348e188,344284a0 +348e18c,90431cda +348e190,318c0 +348e194,3c02800f +348e198,431021 +348e19c,97a30010 +348e1a0,a4438214 +348e1a4,93a30012 +348e1a8,a0438216 +348e1ac,1220000a +348e1b0,3c02801c +348e1b4,344284a0 +348e1b8,90431cda +348e1bc,318c0 +348e1c0,3c02800f +348e1c4,431021 +348e1c8,97a30014 +348e1cc,a4438218 +348e1d0,93a30016 +348e1d4,a043821a +348e1d8,12000010 +348e1dc,3c02801d +348e1e0,3c02801c +348e1e4,344284a0 +348e1e8,97a30010 +348e1ec,a4431cf0 +348e1f0,93a30012 +348e1f4,a0431cf2 +348e1f8,97a30010 +348e1fc,a4431d04 +348e200,93a30012 +348e204,a0431d06 +348e208,97a30010 +348e20c,a4431d18 +348e210,93a30012 +348e214,a0431d1a +348e218,3c02801d +348e21c,3442aa30 +348e220,8c42067c +348e224,10400027 +348e228,8fbf0024 +348e22c,8c430130 +348e230,10600025 +348e234,8fb20020 +348e238,12000010 +348e23c,24430234 +348e240,93a40010 +348e244,44840000 +348e24c,46800020 +348e250,e4400234 +348e254,93a20011 +348e258,44820000 +348e260,46800020 +348e264,e4600004 +348e268,93a20012 +348e26c,44820000 +348e274,46800020 +348e278,e4600008 +348e27c,12200011 +348e280,8fbf0024 +348e284,93a20014 +348e288,44820000 +348e290,46800020 +348e294,e4600010 +348e298,93a20015 +348e29c,44820000 +348e2a4,46800020 +348e2a8,e4600014 +348e2ac,93a20016 +348e2b0,44820000 +348e2b8,46800020 +348e2bc,e4600018 +348e2c0,8fbf0024 +348e2c4,8fb20020 +348e2c8,8fb1001c +348e2cc,8fb00018 +348e2d0,3e00008 +348e2d4,27bd0028 +348e2d8,27bdffe8 +348e2dc,afbf0014 +348e2e0,3c038041 +348e2e4,8c624930 +348e2e8,24420001 +348e2ec,c103661 +348e2f0,ac624930 +348e2f4,c10368a +348e2fc,c1036f3 +348e304,c10382d +348e30c,8fbf0014 +348e310,3e00008 +348e314,27bd0018 +348e318,27bdff78 +348e31c,afbf0084 +348e320,afbe0080 +348e324,afb1007c +348e328,afb00078 +348e32c,3a0f025 +348e330,3c028041 +348e334,94424938 +348e338,10400009 +348e33c,3a03025 +348e340,3c02801c +348e344,344284a0 +348e348,3c030001 +348e34c,431021 +348e350,94430934 +348e354,24020006 +348e358,10620003 +348e35c,808025 +348e360,1000006e +348e364,c0e825 +348e368,3c028041 +348e36c,90424934 +348e370,5440003a +348e374,3c028041 +348e378,10000051 +348e37c,3c028041 +348e380,c08825 +348e384,8e020008 +348e388,24430008 +348e38c,ae030008 +348e390,3c03de00 +348e394,ac430000 +348e398,3c038041 +348e39c,24631fe8 +348e3a0,ac430004 +348e3a4,8e020008 +348e3a8,24430008 +348e3ac,ae030008 +348e3b0,3c03e700 +348e3b4,ac430000 +348e3b8,ac400004 +348e3bc,8e020008 +348e3c0,24430008 +348e3c4,ae030008 +348e3c8,3c03fc11 +348e3cc,34639623 +348e3d0,ac430000 +348e3d4,3c03ff2f +348e3d8,3463ffff +348e3dc,ac430004 +348e3e0,8e020008 +348e3e4,24430008 +348e3e8,ae030008 +348e3ec,3c03fa00 +348e3f0,ac430000 +348e3f4,3c03d716 +348e3f8,24630dff +348e3fc,ac430004 +348e400,24070005 +348e404,c1043bc +348e408,24060009 +348e40c,afa00010 +348e410,3825 +348e414,2406000a +348e418,24050005 +348e41c,c1043ee +348e420,2002025 +348e424,8e020008 +348e428,24430008 +348e42c,ae030008 +348e430,3c03e900 +348e434,ac430000 +348e438,ac400004 +348e43c,8e020008 +348e440,24430008 +348e444,ae030008 +348e448,3c03df00 +348e44c,ac430000 +348e450,ac400004 +348e454,10000031 +348e458,220e825 +348e45c,24421c34 +348e460,27c30018 +348e464,24490020 +348e468,8c480000 +348e46c,8c470004 +348e470,8c450008 +348e474,8c44000c +348e478,ac680000 +348e47c,ac670004 +348e480,ac650008 +348e484,ac64000c +348e488,24420010 +348e48c,1449fff6 +348e490,24630010 +348e494,8c470000 +348e498,8c450004 +348e49c,8c440008 +348e4a0,ac670000 +348e4a4,ac650004 +348e4a8,ac640008 +348e4ac,9442000c +348e4b0,a462000c +348e4b4,27c40018 +348e4b8,1000ffb1 +348e4bc,24050030 +348e4c0,24421c64 +348e4c4,27c30048 +348e4c8,24490020 +348e4cc,8c480000 +348e4d0,8c470004 +348e4d4,8c450008 +348e4d8,8c44000c +348e4dc,ac680000 +348e4e0,ac670004 +348e4e4,ac650008 +348e4e8,ac64000c +348e4ec,24420010 +348e4f0,1449fff6 +348e4f4,24630010 +348e4f8,8c450000 +348e4fc,8c440004 +348e500,ac650000 +348e504,ac640004 +348e508,94420008 +348e50c,a4620008 +348e510,27c40048 +348e514,1000ff9a +348e518,2405003a +348e51c,3c0e825 +348e520,8fbf0084 +348e524,8fbe0080 +348e528,8fb1007c +348e52c,8fb00078 +348e530,3e00008 +348e534,27bd0088 +348e538,27bdffb0 +348e53c,801025 +348e540,3025 +348e544,3c07801c +348e548,34e784a0 +348e54c,3c080001 +348e550,24040014 +348e554,240d0015 +348e558,240e0013 +348e55c,61900 +348e560,661821 +348e564,31880 +348e568,e31821 +348e56c,1031821 +348e570,246517b0 +348e574,afbd0048 +348e578,246317f0 +348e57c,8cac0000 +348e580,8cab0004 +348e584,8caa0008 +348e588,8ca9000c +348e58c,8faf0048 +348e590,adec0000 +348e594,8fac0048 +348e598,ad8b0004 +348e59c,8fab0048 +348e5a0,ad6a0008 +348e5a4,8faa0048 +348e5a8,ad49000c +348e5ac,24a50010 +348e5b0,8fa90048 +348e5b4,25290010 +348e5b8,14a3fff0 +348e5bc,afa90048 +348e5c0,8ca30000 +348e5c4,ad230000 +348e5c8,61900 +348e5cc,661821 +348e5d0,31880 +348e5d4,e31821 +348e5d8,1031821 +348e5dc,846317b0 +348e5e0,50640008 +348e5e4,a7a30000 +348e5e8,106d0005 +348e5ec,24c60001 +348e5f0,14ceffdb +348e5f4,61900 +348e5f8,10000016 +348e5fc,3c05801c +348e600,a7a30000 +348e604,afbd0048 +348e608,401825 +348e60c,27a80040 +348e610,8fa40048 +348e614,8c870000 +348e618,8c860004 +348e61c,8c850008 +348e620,8c84000c +348e624,ac670000 +348e628,ac660004 +348e62c,ac650008 +348e630,ac64000c +348e634,8fa40048 +348e638,24840010 +348e63c,afa40048 +348e640,1488fff3 +348e644,24630010 +348e648,8c840000 +348e64c,10000014 +348e650,ac640000 +348e654,34a584a0 +348e658,3c030001 +348e65c,a32821 +348e660,24a317b0 +348e664,402025 +348e668,24a517f0 +348e66c,8c690000 +348e670,8c680004 +348e674,8c670008 +348e678,8c66000c +348e67c,ac890000 +348e680,ac880004 +348e684,ac870008 +348e688,ac86000c +348e68c,24630010 +348e690,1465fff6 +348e694,24840010 +348e698,8c630000 +348e69c,ac830000 +348e6a0,3e00008 +348e6a4,27bd0050 +348e6a8,afa40000 +348e6ac,afa50004 +348e6b0,afa60008 +348e6b4,afa7000c +348e6b8,8fa20044 +348e6bc,18400013 +348e6c0,1825 +348e6c4,3825 +348e6c8,3c088041 +348e6cc,25081d04 +348e6d0,24090010 +348e6d4,a33021 +348e6d8,1072021 +348e6dc,80c60000 +348e6e0,80840000 +348e6e4,54c40006 +348e6e8,3825 +348e6ec,24e70001 +348e6f0,54e90004 +348e6f4,24630001 +348e6f8,3e00008 +348e6fc,601025 +348e700,24630001 +348e704,1443fff4 +348e708,a33021 +348e70c,3e00008 +348e714,3e00008 +348e71c,afa40000 +348e720,afa50004 +348e724,afa60008 +348e728,afa7000c +348e72c,8faa0044 +348e730,19400030 +348e734,2546ffff +348e738,2402fffc +348e73c,c23024 +348e740,24a20004 +348e744,c23021 +348e748,a01825 +348e74c,24040006 +348e750,3c0900ff +348e754,3529ffff +348e758,240cfffb +348e75c,24020004 +348e760,455823 +348e764,80620000 +348e768,5444001e +348e76c,24630004 +348e770,8c620000 +348e774,491024 +348e778,4a402a +348e77c,51000019 +348e780,24630004 +348e784,8c68fffc +348e788,1094024 +348e78c,481023 +348e790,2442fff4 +348e794,4c1024 +348e798,54400012 +348e79c,24630004 +348e7a0,80670004 +348e7a4,14e40009 +348e7a8,1631021 +348e7ac,24080001 +348e7b0,24420004 +348e7b4,a23821 +348e7b8,80e70000 +348e7bc,10e4fffc +348e7c0,25080001 +348e7c4,10000003 +348e7c8,30e700ff +348e7cc,24080001 +348e7d0,30e700ff +348e7d4,14e80003 +348e7d8,24630004 +348e7dc,3e00008 +348e7e0,2442fffc +348e7e4,5466ffe0 +348e7e8,80620000 +348e7ec,3e00008 +348e7f0,2402ffff +348e7f4,3e00008 +348e7f8,2402ffff +348e7fc,afa40000 +348e800,afa50004 +348e804,afa60008 +348e808,afa7000c +348e80c,8fa20044 +348e810,a21021 +348e814,8c420000 +348e818,3c0300ff +348e81c,3463ffff +348e820,431024 +348e824,a21021 +348e828,8c420000 +348e82c,431024 +348e830,24420010 +348e834,a22821 +348e838,8fa20048 +348e83c,2442000c +348e840,24030001 +348e844,24040002 +348e848,240d0002 +348e84c,240e0009 +348e850,240f0006 +348e854,94a90002 +348e858,94ab0004 +348e85c,8c480004 +348e860,94a70000 +348e864,8c460000 +348e868,14e60017 +348e86c,8c4a0008 +348e870,15280017 +348e878,156a0017 +348e880,506d000d +348e884,24a50010 +348e888,506e000b +348e88c,24a50010 +348e890,90a60008 +348e894,50cf0006 +348e898,28860015 +348e89c,3c028041 +348e8a0,24030001 +348e8a4,a0434934 +348e8a8,3e00008 +348e8ac,1025 +348e8b0,10c0000b +348e8b4,24a50010 +348e8b8,2442000c +348e8bc,24840001 +348e8c0,1000ffe4 +348e8c4,24630001 +348e8c8,3e00008 +348e8cc,1025 +348e8d0,3e00008 +348e8d4,1025 +348e8d8,3e00008 +348e8dc,1025 +348e8e0,3e00008 +348e8e4,24020001 +348e8e8,3c028041 +348e8ec,94424938 +348e8f0,14400089 +348e8f4,3c028041 +348e8f8,27bdff58 +348e8fc,afbf00a4 +348e900,afb100a0 +348e904,afb0009c +348e908,90424936 +348e90c,1040006d +348e910,3c028041 +348e914,90424935 +348e918,10400072 +348e91c,8fbf00a4 +348e920,1000007a +348e924,8fb100a0 +348e928,16020077 +348e92c,8fbf00a4 +348e930,3c028041 +348e934,90424935 +348e938,54400074 +348e93c,8fb100a0 +348e940,3c118041 +348e944,10000004 +348e948,263144f8 +348e94c,10000002 +348e950,263145f4 +348e954,263144f8 +348e958,1010c0 +348e95c,3c03800f +348e960,34638ff8 +348e964,431021 +348e968,8c430004 +348e96c,8c420000 +348e970,621023 +348e974,afa20044 +348e978,27a20060 +348e97c,27a30010 +348e980,27a80090 +348e984,8c470000 +348e988,8c460004 +348e98c,8c450008 +348e990,8c44000c +348e994,ac670000 +348e998,ac660004 +348e99c,ac650008 +348e9a0,ac64000c +348e9a4,24420010 +348e9a8,1448fff6 +348e9ac,24630010 +348e9b0,8c420000 +348e9b4,ac620000 +348e9b8,8fa40050 +348e9bc,8fa50054 +348e9c0,8fa60058 +348e9c4,c1039aa +348e9c8,8fa7005c +348e9cc,afa20044 +348e9d0,27a20060 +348e9d4,27a30010 +348e9d8,27a80090 +348e9dc,8c470000 +348e9e0,8c460004 +348e9e4,8c450008 +348e9e8,8c44000c +348e9ec,ac670000 +348e9f0,ac660004 +348e9f4,ac650008 +348e9f8,ac64000c +348e9fc,24420010 +348ea00,1448fff6 +348ea04,24630010 +348ea08,8c420000 +348ea0c,ac620000 +348ea10,8fa40050 +348ea14,8fa50054 +348ea18,8fa60058 +348ea1c,c1039c7 +348ea20,8fa7005c +348ea24,2403ffff +348ea28,10430036 +348ea2c,27a30010 +348ea30,afb10048 +348ea34,afa20044 +348ea38,27a20060 +348ea3c,27a80090 +348ea40,8c470000 +348ea44,8c460004 +348ea48,8c450008 +348ea4c,8c44000c +348ea50,ac670000 +348ea54,ac660004 +348ea58,ac650008 +348ea5c,ac64000c +348ea60,24420010 +348ea64,1448fff6 +348ea68,24630010 +348ea6c,8c420000 +348ea70,ac620000 +348ea74,8fa40050 +348ea78,8fa50054 +348ea7c,8fa60058 +348ea80,c1039ff +348ea84,8fa7005c +348ea88,14400005 +348ea8c,24020014 +348ea90,3c028041 +348ea94,24030001 +348ea98,1000001a +348ea9c,a4434938 +348eaa0,16020005 +348eaa4,3c028041 +348eaa8,3c028041 +348eaac,24030001 +348eab0,10000014 +348eab4,a0434936 +348eab8,24030001 +348eabc,10000011 +348eac0,a0434935 +348eac4,c10394e +348eac8,27a40050 +348eacc,87b00050 +348ead0,24020014 +348ead4,1602ff94 +348ead8,24020015 +348eadc,1000ff9b +348eae0,3c118041 +348eae4,c10394e +348eae8,27a40050 +348eaec,87b00050 +348eaf0,24020014 +348eaf4,12020003 +348eaf8,24020015 +348eafc,1202ff95 +348eb00,3c118041 +348eb04,8fbf00a4 +348eb08,8fb100a0 +348eb0c,8fb0009c +348eb10,3e00008 +348eb14,27bd00a8 +348eb18,3e00008 +348eb20,27bdffe8 +348eb24,afbf0014 +348eb28,801025 +348eb2c,2c430193 +348eb30,10600006 +348eb34,a02025 +348eb38,210c0 +348eb3c,3c03800f +348eb40,34638ff8 +348eb44,10000008 +348eb48,431021 +348eb4c,3c031fff +348eb50,3463fe6d +348eb54,431021 +348eb58,210c0 +348eb5c,3c038040 +348eb60,24630d3c +348eb64,621021 +348eb68,8c450000 +348eb6c,8c460004 +348eb70,3c028000 +348eb74,24420df0 +348eb78,40f809 +348eb7c,c53023 +348eb80,8fbf0014 +348eb84,3e00008 +348eb88,27bd0018 +348eb8c,27bdffe8 +348eb90,afbf0014 +348eb94,801025 +348eb98,a02025 +348eb9c,a4450000 +348eba0,c103ac8 +348eba4,8c450004 +348eba8,8fbf0014 +348ebac,3e00008 +348ebb0,27bd0018 +348ebb4,27bdffe8 +348ebb8,afbf0014 +348ebbc,afb00010 +348ebc0,802825 +348ebc4,3c028041 +348ebc8,24427e20 +348ebcc,244400c0 +348ebd0,94430000 +348ebd4,1065000a +348ebd8,408025 +348ebdc,54600005 +348ebe0,24420008 +348ebe4,c103ae3 +348ebe8,402025 +348ebec,10000005 +348ebf0,2001025 +348ebf4,5444fff7 +348ebf8,94430000 +348ebfc,8025 +348ec00,2001025 +348ec04,8fbf0014 +348ec08,8fb00010 +348ec0c,3e00008 +348ec10,27bd0018 +348ec14,3c03801c +348ec18,346384a0 +348ec1c,8c620000 +348ec20,8c860004 +348ec24,8c4502d0 +348ec28,24a70008 +348ec2c,ac4702d0 +348ec30,3c02db06 +348ec34,24420018 +348ec38,aca20000 +348ec3c,aca60004 +348ec40,8c650000 +348ec44,8c840004 +348ec48,8ca302c0 +348ec4c,24660008 +348ec50,aca602c0 +348ec54,ac620000 +348ec58,3e00008 +348ec5c,ac640004 +348ec60,27bdffe0 +348ec64,afbf0014 +348ec68,f7b40018 +348ec6c,3c02800a +348ec70,3442a78c +348ec74,40f809 +348ec78,46006506 +348ec7c,2442000c +348ec80,2025 +348ec84,1000000a +348ec88,2405000c +348ec8c,c4600000 +348ec90,46140002 +348ec94,e4600000 +348ec98,24630004 +348ec9c,5462fffc +348eca0,c4600000 +348eca4,24840004 +348eca8,10850003 +348ecac,24420010 +348ecb0,1000fff6 +348ecb4,2443fff4 +348ecb8,8fbf0014 +348ecbc,d7b40018 +348ecc0,3e00008 +348ecc4,27bd0020 +348ecc8,27bdffd8 +348eccc,afbf0024 +348ecd0,afb30020 +348ecd4,afb2001c +348ecd8,afb10018 +348ecdc,afb00014 +348ece0,809825 +348ece4,a09025 +348ece8,c08025 +348ecec,3c118002 +348ecf0,26222438 +348ecf4,3025 +348ecf8,2002825 +348ecfc,40f809 +348ed00,2402025 +348ed04,26312554 +348ed08,3025 +348ed0c,2002825 +348ed10,220f809 +348ed14,2402025 +348ed18,2602825 +348ed1c,c1033ed +348ed20,2002025 +348ed24,8fbf0024 +348ed28,8fb30020 +348ed2c,8fb2001c +348ed30,8fb10018 +348ed34,8fb00014 +348ed38,3e00008 +348ed3c,27bd0028 +348ed40,44860000 +348ed44,24020063 +348ed48,54820005 +348ed4c,84a30000 +348ed50,3c028041 +348ed54,c4421d48 +348ed58,3e00008 +348ed5c,46020002 +348ed60,240200f1 +348ed64,14620009 +348ed68,24020046 +348ed6c,10820005 +348ed70,2402002f +348ed74,14820005 +348ed78,3c028041 +348ed7c,3e00008 +348ed80,c4401d44 +348ed84,3c028041 +348ed88,c4401d44 +348ed8c,3e00008 +348ed94,27bdffd8 +348ed98,afbf001c +348ed9c,afb20018 +348eda0,afb10014 +348eda4,afb00010 +348eda8,f7b40020 +348edac,48202 +348edb0,afa40028 +348edb4,a08825 +348edb8,c09025 +348edbc,4487a000 +348edc0,c103aed +348edc4,42402 +348edc8,1040000e +348edcc,321000ff +348edd0,c103b05 +348edd4,402025 +348edd8,4406a000 +348eddc,2202825 +348ede0,c103b50 +348ede4,2002025 +348ede8,c103b18 +348edec,46000306 +348edf0,2604ffff +348edf4,2403025 +348edf8,2202825 +348edfc,c103b32 +348ee00,308400ff +348ee04,8fbf001c +348ee08,8fb20018 +348ee0c,8fb10014 +348ee10,8fb00010 +348ee14,d7b40020 +348ee18,3e00008 +348ee1c,27bd0028 +348ee20,27bdffe0 +348ee24,afbf001c +348ee28,afb10018 +348ee2c,afb00014 +348ee30,3c108041 +348ee34,26107e20 +348ee38,261100c0 +348ee3c,a6000000 +348ee40,c1045d6 +348ee44,24041e70 +348ee48,ae020004 +348ee4c,26100008 +348ee50,5611fffb +348ee54,a6000000 +348ee58,8fbf001c +348ee5c,8fb10018 +348ee60,8fb00014 +348ee64,3e00008 +348ee68,27bd0020 +348ee6c,3c028041 +348ee70,24427e20 +348ee74,244300c0 +348ee78,a4400000 +348ee7c,24420008 +348ee80,5443fffe +348ee84,a4400000 +348ee88,3e00008 +348ee90,27bdffe8 +348ee94,afbf0014 +348ee98,afb00010 +348ee9c,afa5001c +348eea0,10a0000e +348eea4,afa60020 +348eea8,808025 +348eeac,93a40023 +348eeb0,50800002 +348eeb4,97a40020 +348eeb8,3084ffff +348eebc,c1034fb +348eec4,c1034ec +348eec8,402025 +348eecc,94430004 +348eed0,a6030000 +348eed4,90420006 +348eed8,a2020002 +348eedc,8fbf0014 +348eee0,8fb00010 +348eee4,3e00008 +348eee8,27bd0018 +348eeec,27bdffe0 +348eef0,afbf001c +348eef4,afb00018 +348eef8,808025 +348eefc,30e700ff +348ef00,90c600a5 +348ef04,c102409 +348ef08,27a40010 +348ef0c,8fa50010 +348ef10,8fa60014 +348ef14,c103ba4 +348ef18,2002025 +348ef1c,8fbf001c +348ef20,8fb00018 +348ef24,3e00008 +348ef28,27bd0020 +348ef2c,27bdffd8 +348ef30,afbf0024 +348ef34,afb10020 +348ef38,afb0001c +348ef3c,a7a00010 +348ef40,a3a00012 +348ef44,8c83019c +348ef48,10600020 +348ef4c,1025 +348ef50,808025 +348ef54,a08825 +348ef58,602825 +348ef5c,8c8601a0 +348ef60,c103ba4 +348ef64,27a40010 +348ef68,97a30010 +348ef6c,10600017 +348ef70,1025 +348ef74,82030116 +348ef78,24020001 +348ef7c,10620009 +348ef80,3c028041 +348ef84,c10263e +348ef88,2002025 +348ef8c,10400005 +348ef90,3c028041 +348ef94,8c4248f0 +348ef98,2021026 +348ef9c,1000000b +348efa0,2c420001 +348efa4,8c4348f0 +348efa8,10700008 +348efac,24020001 +348efb0,3c028041 +348efb4,8c471d4c +348efb8,2203025 +348efbc,2002825 +348efc0,c103b65 +348efc4,8fa40010 +348efc8,24020001 +348efcc,8fbf0024 +348efd0,8fb10020 +348efd4,8fb0001c +348efd8,3e00008 +348efdc,27bd0028 +348efe0,27bdffd8 +348efe4,afbf0024 +348efe8,afb10020 +348efec,afb0001c +348eff0,808025 +348eff4,a08825 +348eff8,3c028041 +348effc,8c421c90 +348f000,afa20010 +348f004,3825 +348f008,a03025 +348f00c,802825 +348f010,c103bbb +348f014,27a40010 +348f018,3c028041 +348f01c,8c471d4c +348f020,2203025 +348f024,2002825 +348f028,c103b65 +348f02c,8fa40010 +348f030,8fbf0024 +348f034,8fb10020 +348f038,8fb0001c +348f03c,3e00008 +348f040,27bd0028 +348f044,27bdffd8 +348f048,afbf0024 +348f04c,afb10020 +348f050,afb0001c +348f054,808025 +348f058,a7a00010 +348f05c,a3a00012 +348f060,9083001d +348f064,24020011 +348f068,1462000e +348f06c,a08825 +348f070,3825 +348f074,a03025 +348f078,802825 +348f07c,c103bbb +348f080,27a40010 +348f084,3c028041 +348f088,8c471d50 +348f08c,2203025 +348f090,2002825 +348f094,c103b65 +348f098,8fa40010 +348f09c,10000022 +348f0a0,8fbf0024 +348f0a4,8c82019c +348f0a8,5040001b +348f0ac,3c028001 +348f0b0,402825 +348f0b4,8c8601a0 +348f0b8,c103ba4 +348f0bc,27a40010 +348f0c0,97a20010 +348f0c4,10400018 +348f0c8,8fbf0024 +348f0cc,82030116 +348f0d0,24020001 +348f0d4,10620006 +348f0d8,3c028041 +348f0dc,c10263e +348f0e0,2002025 +348f0e4,14400010 +348f0e8,8fbf0024 +348f0ec,3c028041 +348f0f0,8c4248f0 +348f0f4,1050000b +348f0f8,3c028041 +348f0fc,8c471d4c +348f100,2203025 +348f104,2002825 +348f108,c103b65 +348f10c,8fa40010 +348f110,10000005 +348f114,8fbf0024 +348f118,24423268 +348f11c,40f809 +348f124,8fbf0024 +348f128,8fb10020 +348f12c,8fb0001c +348f130,3e00008 +348f134,27bd0028 +348f138,27bdffd8 +348f13c,afbf0024 +348f140,afb10020 +348f144,afb0001c +348f148,808025 +348f14c,a08825 +348f150,3c028041 +348f154,8c421c94 +348f158,afa20010 +348f15c,2407004f +348f160,a03025 +348f164,802825 +348f168,c103bbb +348f16c,27a40010 +348f170,3c028041 +348f174,8c471d54 +348f178,2203025 +348f17c,2002825 +348f180,c103b65 +348f184,8fa40010 +348f188,8fbf0024 +348f18c,8fb10020 +348f190,8fb0001c +348f194,3e00008 +348f198,27bd0028 +348f19c,27bdffd8 +348f1a0,afbf0024 +348f1a4,afb10020 +348f1a8,afb0001c +348f1ac,808025 +348f1b0,a08825 +348f1b4,3c028041 +348f1b8,8c421c98 +348f1bc,afa20010 +348f1c0,3825 +348f1c4,a03025 +348f1c8,802825 +348f1cc,c103bbb +348f1d0,27a40010 +348f1d4,3c028041 +348f1d8,8c471d58 +348f1dc,2203025 +348f1e0,2002825 +348f1e4,c103b65 +348f1e8,8fa40010 +348f1ec,8fbf0024 +348f1f0,8fb10020 +348f1f4,8fb0001c +348f1f8,3e00008 +348f1fc,27bd0028 +348f200,27bdffd8 +348f204,afbf0024 +348f208,afb10020 +348f20c,afb0001c +348f210,808025 +348f214,a08825 +348f218,3c028041 +348f21c,8c421c9c +348f220,afa20010 +348f224,2407000c +348f228,a03025 +348f22c,802825 +348f230,c103bbb +348f234,27a40010 +348f238,3c028041 +348f23c,8c471d5c +348f240,2203025 +348f244,2002825 +348f248,c103b65 +348f24c,8fa40010 +348f250,8fbf0024 +348f254,8fb10020 +348f258,8fb0001c +348f25c,3e00008 +348f260,27bd0028 +348f264,27bdffd0 +348f268,afbf002c +348f26c,afb10028 +348f270,afb00024 +348f274,808025 +348f278,afa00010 +348f27c,afa00014 +348f280,9482001c +348f284,24030001 +348f288,14430008 +348f28c,a08825 +348f290,24070015 +348f294,90a600a5 +348f298,802825 +348f29c,c102409 +348f2a0,27a40010 +348f2a4,10000012 +348f2a8,afa00018 +348f2ac,24030007 +348f2b0,14430008 +348f2b4,24030a0c +348f2b8,24070058 +348f2bc,90a600a5 +348f2c0,802825 +348f2c4,c102409 +348f2c8,27a40010 +348f2cc,10000008 +348f2d0,afa00018 +348f2d4,54430006 +348f2d8,afa00018 +348f2dc,3c051001 +348f2e0,34a5000a +348f2e4,c102376 +348f2e8,27a40010 +348f2ec,afa00018 +348f2f0,8fa50010 +348f2f4,8fa60014 +348f2f8,c103ba4 +348f2fc,27a40018 +348f300,97a20018 +348f304,10400008 +348f308,2203025 +348f30c,3c028041 +348f310,8c471d44 +348f314,2002825 +348f318,c103b65 +348f31c,8fa40018 +348f320,10000005 +348f324,8fbf002c +348f328,2002825 +348f32c,c103b32 +348f330,92040141 +348f334,8fbf002c +348f338,8fb10028 +348f33c,8fb00024 +348f340,3e00008 +348f344,27bd0030 +348f348,27bdffd0 +348f34c,afbf002c +348f350,afb10028 +348f354,afb00024 +348f358,808025 +348f35c,afa00010 +348f360,afa00014 +348f364,9482001c +348f368,10400004 +348f36c,a08825 +348f370,24030005 +348f374,54430007 +348f378,afa00018 +348f37c,24070034 +348f380,922600a5 +348f384,2002825 +348f388,c102409 +348f38c,27a40010 +348f390,afa00018 +348f394,8fa50010 +348f398,8fa60014 +348f39c,c103ba4 +348f3a0,27a40018 +348f3a4,97a20018 +348f3a8,10400008 +348f3ac,2203025 +348f3b0,3c028041 +348f3b4,8c471d44 +348f3b8,2002825 +348f3bc,c103b65 +348f3c0,8fa40018 +348f3c4,10000005 +348f3c8,8fbf002c +348f3cc,2002825 +348f3d0,c103b32 +348f3d4,92040147 +348f3d8,8fbf002c +348f3dc,8fb10028 +348f3e0,8fb00024 +348f3e4,3e00008 +348f3e8,27bd0030 +348f3ec,27bdffd8 +348f3f0,afbf0024 +348f3f4,afb10020 +348f3f8,afb0001c +348f3fc,808025 +348f400,a08825 +348f404,3c028041 +348f408,8c421c90 +348f40c,afa20010 +348f410,2407003e +348f414,a03025 +348f418,802825 +348f41c,c103bbb +348f420,27a40010 +348f424,3c028041 +348f428,8c471d44 +348f42c,2203025 +348f430,2002825 +348f434,c103b65 +348f438,8fa40010 +348f43c,8fbf0024 +348f440,8fb10020 +348f444,8fb0001c +348f448,3e00008 +348f44c,27bd0028 +348f450,27bdfe38 +348f454,afbf01c4 +348f458,afb001c0 +348f45c,808025 +348f460,3c02801c +348f464,344284a0 +348f468,944400a4 +348f46c,2402003e +348f470,1482000a +348f474,94a30018 +348f478,3c028011 +348f47c,3442a5d0 +348f480,90421397 +348f484,3042001f +348f488,304200ff +348f48c,21040 +348f490,24420040 +348f494,621821 +348f498,3063ffff +348f49c,24020015 +348f4a0,a7a20010 +348f4a4,a7a30026 +348f4a8,a7a0002c +348f4ac,3825 +348f4b0,90c600a5 +348f4b4,27a50010 +348f4b8,c102409 +348f4bc,27a401b4 +348f4c0,8fa201b4 +348f4c4,5040000d +348f4c8,ae000000 +348f4cc,afa201ac +348f4d0,8fa201b8 +348f4d4,afa201b0 +348f4d8,c10263e +348f4dc,27a40010 +348f4e0,54400006 +348f4e4,ae000000 +348f4e8,8fa201b4 +348f4ec,ae020000 +348f4f0,8fa201b8 +348f4f4,10000002 +348f4f8,ae020004 +348f4fc,ae000004 +348f500,2001025 +348f504,8fbf01c4 +348f508,8fb001c0 +348f50c,3e00008 +348f510,27bd01c8 +348f514,27bdffd8 +348f518,afbf0024 +348f51c,afb20020 +348f520,afb1001c +348f524,afb00018 +348f528,808025 +348f52c,a08825 +348f530,3c02801c +348f534,344284a0 +348f538,944300a4 +348f53c,2402003e +348f540,1462000a +348f544,94920018 +348f548,3c028011 +348f54c,3442a5d0 +348f550,90421397 +348f554,3042001f +348f558,304200ff +348f55c,21040 +348f560,24420040 +348f564,2421021 +348f568,3052ffff +348f56c,6200028 +348f570,8fbf0024 +348f574,3c06801c +348f578,34c684a0 +348f57c,2002825 +348f580,c103d14 +348f584,27a40010 +348f588,8fa20010 +348f58c,1040000f +348f590,3c02800c +348f594,3c028041 +348f598,a4524920 +348f59c,2203025 +348f5a0,26050024 +348f5a4,3c04801c +348f5a8,3c028001 +348f5ac,244238b0 +348f5b0,40f809 +348f5b4,348484a0 +348f5b8,8fa30010 +348f5bc,ac43019c +348f5c0,8fa30014 +348f5c4,10000011 +348f5c8,ac4301a0 +348f5cc,3442dccc +348f5d0,40f809 +348f5d8,3c028041 +348f5dc,c4421d60 +348f5e0,4600103c +348f5e8,45000009 +348f5ec,8fbf0024 +348f5f0,2203025 +348f5f4,26050024 +348f5f8,3c04801c +348f5fc,3c028001 +348f600,24423678 +348f604,40f809 +348f608,348484a0 +348f60c,8fbf0024 +348f610,8fb20020 +348f614,8fb1001c +348f618,8fb00018 +348f61c,3e00008 +348f620,27bd0028 +348f624,27bdffe8 +348f628,afbf0014 +348f62c,afb00010 +348f630,80820116 +348f634,18400003 +348f638,808025 +348f63c,2442ffff +348f640,a0820116 +348f644,960201a2 +348f648,24422ee0 +348f64c,a60201a2 +348f650,8e02013c +348f654,40f809 +348f658,2002025 +348f65c,3c028006 +348f660,244236c4 +348f664,40f809 +348f668,860401a2 +348f66c,960301a0 +348f670,44831000 +348f678,468010a0 +348f67c,46001002 +348f680,96020014 +348f684,44821000 +348f68c,468010a0 +348f690,46020000 +348f694,3c028041 +348f698,c4421d64 +348f69c,4600103e +348f6a4,45030005 +348f6a8,46020001 +348f6ac,4600000d +348f6b0,44020000 +348f6b4,10000006 +348f6b8,a60200b4 +348f6bc,4600000d +348f6c0,44020000 +348f6c4,3c048000 +348f6c8,441025 +348f6cc,a60200b4 +348f6d0,920201a4 +348f6d4,1040000b +348f6d8,8fbf0014 +348f6dc,5460000a +348f6e0,8fb00010 +348f6e4,82020116 +348f6e8,54400007 +348f6ec,8fb00010 +348f6f0,24020800 +348f6f4,a60201a0 +348f6f8,24020040 +348f6fc,a2020116 +348f700,8fbf0014 +348f704,8fb00010 +348f708,3e00008 +348f70c,27bd0018 +348f710,27bdfe38 +348f714,afbf01c4 +348f718,afb001c0 +348f71c,808025 +348f720,24020015 +348f724,a7a20010 +348f728,94a20018 +348f72c,a7a20026 +348f730,a7a0002c +348f734,3825 +348f738,90c600a5 +348f73c,27a50010 +348f740,c102409 +348f744,27a401b4 +348f748,8fa201b4 +348f74c,5040000d +348f750,ae000000 +348f754,afa201ac +348f758,8fa201b8 +348f75c,afa201b0 +348f760,c10263e +348f764,27a40010 +348f768,54400006 +348f76c,ae000000 +348f770,8fa201b4 +348f774,ae020000 +348f778,8fa201b8 +348f77c,10000002 +348f780,ae020004 +348f784,ae000004 +348f788,2001025 +348f78c,8fbf01c4 +348f790,8fb001c0 +348f794,3e00008 +348f798,27bd01c8 +348f79c,27bdffe8 +348f7a0,afbf0014 +348f7a4,afb00010 +348f7a8,9082018c +348f7ac,2403000c +348f7b0,14430005 +348f7b4,a08025 +348f7b8,c104456 +348f7bc,2404000a +348f7c0,10000018 +348f7c4,8e030000 +348f7c8,2403000d +348f7cc,54430005 +348f7d0,24030002 +348f7d4,c104456 +348f7d8,2404000b +348f7dc,10000011 +348f7e0,8e030000 +348f7e4,54430005 +348f7e8,2442fff2 +348f7ec,c104456 +348f7f0,2404000d +348f7f4,1000000b +348f7f8,8e030000 +348f7fc,304200ff +348f800,2c420002 +348f804,50400005 +348f808,3c020501 +348f80c,c104456 +348f810,2404000c +348f814,10000003 +348f818,8e030000 +348f81c,24421ca0 +348f820,8e030000 +348f824,8c6402c4 +348f828,2485fff0 +348f82c,ac6502c4 +348f830,3c05fd10 +348f834,ac85fff0 +348f838,ac82fff4 +348f83c,8c6202c4 +348f840,3c04df00 +348f844,ac440008 +348f848,ac40000c +348f84c,8c6402c4 +348f850,8c6202c0 +348f854,24450008 +348f858,ac6502c0 +348f85c,3c03db06 +348f860,24630024 +348f864,ac430000 +348f868,ac440004 +348f86c,3c050500 +348f870,24a55290 +348f874,3c028002 +348f878,34428048 +348f87c,40f809 +348f880,2002025 +348f884,8fbf0014 +348f888,8fb00010 +348f88c,3e00008 +348f890,27bd0018 +348f894,9483001c +348f898,3066001f +348f89c,2cc7001a +348f8a0,10e00010 +348f8a4,801025 +348f8a8,27bdffe8 +348f8ac,afbf0014 +348f8b0,a02025 +348f8b4,94470018 +348f8b8,3c058041 +348f8bc,a4a74920 +348f8c0,30633f00 +348f8c4,24450024 +348f8c8,3c028001 +348f8cc,24423678 +348f8d0,40f809 +348f8d4,c33025 +348f8d8,8fbf0014 +348f8dc,3e00008 +348f8e0,27bd0018 +348f8e4,3e00008 +348f8ec,94820014 +348f8f0,3046001f +348f8f4,2cc2001a +348f8f8,10400012 +348f8fc,801825 +348f900,27bdffe8 +348f904,afbf0014 +348f908,a02025 +348f90c,846201a4 +348f910,94670016 +348f914,3c058041 +348f918,a4a74920 +348f91c,3042003f +348f920,21200 +348f924,c23025 +348f928,3c028001 +348f92c,24423678 +348f930,40f809 +348f934,24650024 +348f938,8fbf0014 +348f93c,3e00008 +348f940,27bd0018 +348f944,3e00008 +348f94c,27bdfe38 +348f950,afbf01c4 +348f954,afb001c0 +348f958,808025 +348f95c,24020015 +348f960,a7a20010 +348f964,94a20016 +348f968,a7a20026 +348f96c,a7a0002c +348f970,3825 +348f974,90c600a5 +348f978,27a50010 +348f97c,c102409 +348f980,27a401b4 +348f984,8fa201b4 +348f988,5040000d +348f98c,ae000000 +348f990,afa201ac +348f994,8fa201b8 +348f998,afa201b0 +348f99c,c10263e +348f9a0,27a40010 +348f9a4,54400006 +348f9a8,ae000000 +348f9ac,8fa201b4 +348f9b0,ae020000 +348f9b4,8fa201b8 +348f9b8,10000002 +348f9bc,ae020004 +348f9c0,ae000004 +348f9c4,2001025 +348f9c8,8fbf01c4 +348f9cc,8fb001c0 +348f9d0,3e00008 +348f9d4,27bd01c8 +348f9d8,27bdffe0 +348f9dc,afbf001c +348f9e0,afb10018 +348f9e4,afb00014 +348f9e8,808825 +348f9ec,a08025 +348f9f0,c104456 +348f9f4,24040005 +348f9f8,922301a6 +348f9fc,2404000c +348fa00,54640005 +348fa04,2404000d +348fa08,c104456 +348fa0c,24040006 +348fa10,10000014 +348fa14,8e030000 +348fa18,54640005 +348fa1c,24040002 +348fa20,c104456 +348fa24,24040007 +348fa28,1000000e +348fa2c,8e030000 +348fa30,54640005 +348fa34,2463fff2 +348fa38,c104456 +348fa3c,24040009 +348fa40,10000008 +348fa44,8e030000 +348fa48,306300ff +348fa4c,2c630002 +348fa50,50600004 +348fa54,8e030000 +348fa58,c104456 +348fa5c,24040008 +348fa60,8e030000 +348fa64,8c6402c4 +348fa68,2485ffd0 +348fa6c,ac6502c4 +348fa70,3c06fd50 +348fa74,ac86ffd0 +348fa78,24450200 +348fa7c,ac85ffd4 +348fa80,8c6502c4 +348fa84,3c04df00 +348fa88,aca40008 +348fa8c,aca0000c +348fa90,8c6502c4 +348fa94,3c07fd10 +348fa98,aca70010 +348fa9c,aca20014 +348faa0,8c6502c4 +348faa4,aca40018 +348faa8,aca0001c +348faac,8c6502c4 +348fab0,aca60020 +348fab4,24420a00 +348fab8,aca20024 +348fabc,8c6202c4 +348fac0,ac440028 +348fac4,ac40002c +348fac8,8c6402c4 +348facc,8c6202c0 +348fad0,24450008 +348fad4,ac6502c0 +348fad8,3c03db06 +348fadc,24630024 +348fae0,ac430000 +348fae4,ac440004 +348fae8,3c050600 +348faec,24a50960 +348faf0,3c028002 +348faf4,34428048 +348faf8,40f809 +348fafc,2002025 +348fb00,8fbf001c +348fb04,8fb10018 +348fb08,8fb00014 +348fb0c,3e00008 +348fb10,27bd0020 +348fb14,27bdffe0 +348fb18,afbf001c +348fb1c,afb20018 +348fb20,afb10014 +348fb24,afb00010 +348fb28,808825 +348fb2c,3c028008 +348fb30,24421628 +348fb34,40f809 +348fb38,a08025 +348fb3c,2403ffff +348fb40,1443000d +348fb44,8fbf001c +348fb48,92230008 +348fb4c,2c630013 +348fb50,1060000a +348fb54,8fb20018 +348fb58,92320009 +348fb5c,2002825 +348fb60,3c028008 +348fb64,244212f0 +348fb68,40f809 +348fb6c,2202025 +348fb70,a2320009 +348fb74,8fbf001c +348fb78,8fb20018 +348fb7c,8fb10014 +348fb80,8fb00010 +348fb84,3e00008 +348fb88,27bd0020 +348fb8c,27bdffd8 +348fb90,afbf0024 +348fb94,afb10020 +348fb98,afb0001c +348fb9c,a08825 +348fba0,c08025 +348fba4,3c028041 +348fba8,c4401d6c +348fbac,3c028041 +348fbb0,8c471d68 +348fbb4,3c028002 +348fbb8,24422cf4 +348fbbc,40f809 +348fbc0,e7a00010 +348fbc4,14400018 +348fbc8,8fbf0024 +348fbcc,3c028040 +348fbd0,90420d75 +348fbd4,50400015 +348fbd8,8fb10020 +348fbdc,24020043 +348fbe0,12020005 +348fbe4,24020044 +348fbe8,1202000a +348fbec,24050079 +348fbf0,1000000e +348fbf4,8fb10020 +348fbf8,24050078 +348fbfc,3c028006 +348fc00,3442fdcc +348fc04,40f809 +348fc08,2202025 +348fc0c,10000006 +348fc10,8fbf0024 +348fc14,3c028006 +348fc18,3442fdcc +348fc1c,40f809 +348fc20,2202025 +348fc24,8fbf0024 +348fc28,8fb10020 +348fc2c,8fb0001c +348fc30,3e00008 +348fc34,27bd0028 +348fc38,27bdfe38 +348fc3c,afbf01c4 +348fc40,afb001c0 +348fc44,808025 +348fc48,24020015 +348fc4c,a7a20010 +348fc50,94a20018 +348fc54,a7a20026 +348fc58,a7a0002c +348fc5c,3825 +348fc60,90c600a5 +348fc64,27a50010 +348fc68,c102409 +348fc6c,27a401b4 +348fc70,8fa201b4 +348fc74,5040000d +348fc78,ae000000 +348fc7c,afa201ac +348fc80,8fa201b8 +348fc84,afa201b0 +348fc88,c10263e +348fc8c,27a40010 +348fc90,54400006 +348fc94,ae000000 +348fc98,8fa201b4 +348fc9c,ae020000 +348fca0,8fa201b8 +348fca4,10000002 +348fca8,ae020004 +348fcac,ae000004 +348fcb0,2001025 +348fcb4,8fbf01c4 +348fcb8,8fb001c0 +348fcbc,3e00008 +348fcc0,27bd01c8 +348fcc4,27bdfe38 +348fcc8,afbf01c4 +348fccc,afb001c0 +348fcd0,808025 +348fcd4,24020015 +348fcd8,a7a20010 +348fcdc,94a20018 +348fce0,a7a20026 +348fce4,a7a0002c +348fce8,3825 +348fcec,90c600a5 +348fcf0,27a50010 +348fcf4,c102409 +348fcf8,27a401b4 +348fcfc,8fa201b4 +348fd00,5040000d +348fd04,ae000000 +348fd08,afa201ac +348fd0c,8fa201b8 +348fd10,afa201b0 +348fd14,c10263e +348fd18,27a40010 +348fd1c,54400006 +348fd20,ae000000 +348fd24,8fa201b4 +348fd28,ae020000 +348fd2c,8fa201b8 +348fd30,10000002 +348fd34,ae020004 +348fd38,ae000004 +348fd3c,2001025 +348fd40,8fbf01c4 +348fd44,8fb001c0 +348fd48,3e00008 +348fd4c,27bd01c8 +348fd50,27bdffe0 +348fd54,afbf001c +348fd58,afb10018 +348fd5c,afb00014 +348fd60,a08025 +348fd64,84820000 +348fd68,24050111 +348fd6c,54450050 +348fd70,24050117 +348fd74,9482001c +348fd78,21202 +348fd7c,30420001 +348fd80,50400004 +348fd84,3c110501 +348fd88,3c020600 +348fd8c,10000003 +348fd90,245117c0 +348fd94,262208a0 +348fd98,26317870 +348fd9c,1000000a +348fda0,9083018d +348fda4,2405011d +348fda8,14450005 +348fdac,3c110501 +348fdb0,9083019c +348fdb4,262208a0 +348fdb8,10000003 +348fdbc,26317870 +348fdc0,262208a0 +348fdc4,26317870 +348fdc8,2404000c +348fdcc,54640005 +348fdd0,2404000d +348fdd4,c104456 +348fdd8,24040001 +348fddc,10000018 +348fde0,8e030000 +348fde4,54640005 +348fde8,24040002 +348fdec,c104456 +348fdf0,24040002 +348fdf4,10000012 +348fdf8,8e030000 +348fdfc,54640005 +348fe00,2463fff2 +348fe04,c104456 +348fe08,24040003 +348fe0c,1000000c +348fe10,8e030000 +348fe14,306300ff +348fe18,2c630002 +348fe1c,50600008 +348fe20,8e030000 +348fe24,c104456 +348fe28,24040004 +348fe2c,10000004 +348fe30,8e030000 +348fe34,263117c0 +348fe38,3c020600 +348fe3c,8e030000 +348fe40,8c6402c4 +348fe44,2485fff0 +348fe48,ac6502c4 +348fe4c,3c05fd10 +348fe50,ac85fff0 +348fe54,ac82fff4 +348fe58,8c6202c4 +348fe5c,3c04df00 +348fe60,ac440008 +348fe64,ac40000c +348fe68,8c6402c4 +348fe6c,8c6202c0 +348fe70,24450008 +348fe74,ac6502c0 +348fe78,3c03db06 +348fe7c,24630024 +348fe80,ac430000 +348fe84,ac440004 +348fe88,2202825 +348fe8c,3c028002 +348fe90,34428048 +348fe94,40f809 +348fe98,2002025 +348fe9c,8fbf001c +348fea0,8fb10018 +348fea4,8fb00014 +348fea8,3e00008 +348feac,27bd0020 +348feb0,1445ffbc +348feb4,1825 +348feb8,1000ffde +348febc,3c110600 +348fec0,27bdffe8 +348fec4,afbf0014 +348fec8,c103f54 +348fed0,8fbf0014 +348fed4,3e00008 +348fed8,27bd0018 +348fedc,8482014a +348fee0,14400008 +348fee8,27bdffe8 +348feec,afbf0014 +348fef0,c103f54 +348fef8,8fbf0014 +348fefc,3e00008 +348ff00,27bd0018 +348ff04,3e00008 +348ff0c,27bdffe8 +348ff10,afbf0014 +348ff14,c103f54 +348ff1c,8fbf0014 +348ff20,3e00008 +348ff24,27bd0018 +348ff28,9482001c +348ff2c,3046001f +348ff30,2cc7001a +348ff34,10e00011 +348ff38,801825 +348ff3c,27bdffe8 +348ff40,afbf0014 +348ff44,a02025 +348ff48,94670018 +348ff4c,3c058041 +348ff50,a4a74920 +348ff54,21042 +348ff58,30423f00 +348ff5c,c23025 +348ff60,3c028001 +348ff64,24423678 +348ff68,40f809 +348ff6c,24650024 +348ff70,8fbf0014 +348ff74,3e00008 +348ff78,27bd0018 +348ff7c,3e00008 +348ff84,801825 +348ff88,a02025 +348ff8c,9462001c +348ff90,2c450680 +348ff94,10a00010 +348ff98,23182 +348ff9c,27bdffe8 +348ffa0,afbf0014 +348ffa4,94670018 +348ffa8,3c058041 +348ffac,a4a74920 +348ffb0,21200 +348ffb4,30423f00 +348ffb8,463025 +348ffbc,3c028001 +348ffc0,24423678 +348ffc4,40f809 +348ffc8,24650024 +348ffcc,8fbf0014 +348ffd0,3e00008 +348ffd4,27bd0018 +348ffd8,3e00008 +348ffe0,801025 +348ffe4,14c00002 +348ffe8,a6001b +348ffec,7000d +348fff0,2810 +348fff4,3812 +348fff8,3c03aaaa +348fffc,3463aaab +3490000,e30019 +3490004,1810 +3490008,31882 +349000c,32040 +3490010,831821 +3490014,31840 +3490018,e31823 +349001c,44850000 +3490020,4a10004 +3490024,468000a1 +3490028,3c048041 +349002c,d4801d80 +3490030,46201080 +3490034,462010a0 +3490038,44860000 +349003c,4c10004 +3490040,46800021 +3490044,3c048041 +3490048,d4841d80 +349004c,46240000 +3490050,46200020 +3490054,46001083 +3490058,3c048041 +349005c,c4841d70 +3490060,46022101 +3490064,24640001 +3490068,3c068041 +349006c,24c61ca0 +3490070,32840 +3490074,a32821 +3490078,c52821 +349007c,90a50001 +3490080,44850000 +3490088,46800020 +349008c,46040002 +3490090,42840 +3490094,a42821 +3490098,c53021 +349009c,90c50001 +34900a0,44853000 +34900a8,468031a0 +34900ac,46023182 +34900b0,46060000 +34900b4,3c058041 +34900b8,c4a61d74 +34900bc,4600303e +34900c4,45030005 +34900c8,46060001 +34900cc,4600000d +34900d0,44050000 +34900d4,10000006 +34900d8,30a700ff +34900dc,4600000d +34900e0,44050000 +34900e4,3c068000 +34900e8,a62825 +34900ec,30a700ff +34900f0,3c068041 +34900f4,24c61ca0 +34900f8,32840 +34900fc,a32821 +3490100,c52821 +3490104,90a50002 +3490108,44850000 +3490110,46800020 +3490114,46040002 +3490118,42840 +349011c,a42821 +3490120,c53021 +3490124,90c50002 +3490128,44853000 +3490130,468031a0 +3490134,46023182 +3490138,46060000 +349013c,3c058041 +3490140,c4a61d74 +3490144,4600303e +349014c,45030005 +3490150,46060001 +3490154,4600000d +3490158,44050000 +349015c,10000006 +3490160,30a600ff +3490164,4600000d +3490168,44050000 +349016c,3c068000 +3490170,a62825 +3490174,30a600ff +3490178,32840 +349017c,a31821 +3490180,3c088041 +3490184,25081ca0 +3490188,681821 +349018c,90650000 +3490190,44850000 +3490198,46800020 +349019c,46040002 +34901a0,41840 +34901a4,641821 +34901a8,681821 +34901ac,90630000 +34901b0,44832000 +34901b8,46802120 +34901bc,46022082 +34901c0,46020000 +34901c4,3c038041 +34901c8,c4621d74 +34901cc,4600103e +34901d4,45030005 +34901d8,46020001 +34901dc,4600000d +34901e0,44030000 +34901e4,10000006 +34901e8,a0430000 +34901ec,4600000d +34901f0,44030000 +34901f4,3c048000 +34901f8,641825 +34901fc,a0430000 +3490200,a0470001 +3490204,3e00008 +3490208,a0460002 +349020c,3c028011 +3490210,3442a5d0 +3490214,24030140 +3490218,a4431424 +349021c,90440032 +3490220,41840 +3490224,641821 +3490228,31900 +349022c,3e00008 +3490230,a0430033 +3490234,3c048041 +3490238,8c8348cc +349023c,3c020019 +3490240,2442660d +3490244,620018 +3490248,1012 +349024c,3c033c6e +3490250,3463f35f +3490254,431021 +3490258,3e00008 +349025c,ac8248cc +3490260,3c028041 +3490264,3e00008 +3490268,ac4448cc +349026c,3c028041 +3490270,8c43493c +3490274,3c028041 +3490278,3e00008 +349027c,ac4348cc +3490280,3c048041 +3490284,8c8348cc +3490288,3c020019 +349028c,2442660d +3490290,620018 +3490294,1012 +3490298,3c033c6e +349029c,3463f35f +34902a0,431021 +34902a4,ac8248cc +34902a8,21242 +34902ac,3c033f80 +34902b0,431025 +34902b4,3c038041 +34902b8,c4601d78 +34902bc,44821000 +34902c0,3e00008 +34902c4,46001001 +34902c8,3c048041 +34902cc,8c8348cc +34902d0,3c020019 +34902d4,2442660d +34902d8,620018 +34902dc,1012 +34902e0,3c033c6e +34902e4,3463f35f +34902e8,431021 +34902ec,ac8248cc +34902f0,21242 +34902f4,3c033f80 +34902f8,431025 +34902fc,3c038041 +3490300,c4601d7c +3490304,44821000 +3490308,3e00008 +349030c,46001001 +3490310,27bdffe8 +3490314,afbf0014 +3490318,3c028041 +349031c,944648f8 +3490320,3c028011 +3490324,3442a5d0 +3490328,80431357 +349032c,31840 +3490330,3c028010 +3490334,2442bf00 +3490338,621821 +349033c,24021fe0 +3490340,461023 +3490344,94630000 +3490348,431021 +349034c,3042ffff +3490350,822821 +3490354,3c028041 +3490358,8c4448f4 +349035c,3c028005 +3490360,24427030 +3490364,40f809 +349036c,8fbf0014 +3490370,3e00008 +3490374,27bd0018 +3490378,10c00009 +349037c,3c028009 +3490380,27bdffe8 +3490384,afbf0014 +3490388,24421474 +349038c,40f809 +3490394,8fbf0014 +3490398,3e00008 +349039c,27bd0018 +34903a0,3e00008 +34903a8,27bdffd0 +34903ac,afbf002c +34903b0,afb50028 +34903b4,afb40024 +34903b8,afb30020 +34903bc,afb2001c +34903c0,afb10018 +34903c4,afb00014 +34903c8,3c038011 +34903cc,3463a5d0 +34903d0,a4601352 +34903d4,1025 +34903d8,3c058011 +34903dc,34a5b924 +34903e0,602025 +34903e4,24630002 +34903e8,94840000 +34903ec,441021 +34903f0,1465fffb +34903f4,3042ffff +34903f8,3c038041 +34903fc,8c6448f4 +3490400,3c038041 +3490404,946348f8 +3490408,33042 +349040c,2c630002 +3490410,1460000a +3490414,3c108011 +3490418,24840002 +349041c,9485fffe +3490420,451021 +3490424,24630001 +3490428,3063ffff +349042c,66282b +3490430,14a0fff9 +3490434,3042ffff +3490438,3c108011 +349043c,3610a5d0 +3490440,a6021352 +3490444,82021357 +3490448,21040 +349044c,3c148010 +3490450,2694bf00 +3490454,541021 +3490458,94440000 +349045c,3c120800 +3490460,24070001 +3490464,24061450 +3490468,2002825 +349046c,c1040de +3490470,922021 +3490474,82021357 +3490478,24420003 +349047c,21040 +3490480,541021 +3490484,94440000 +3490488,24070001 +349048c,24061450 +3490490,2002825 +3490494,c1040de +3490498,922021 +349049c,3c158041 +34904a0,96a648f8 +34904a4,3c138041 +34904a8,82021357 +34904ac,21040 +34904b0,541021 +34904b4,24111fe0 +34904b8,2262023 +34904bc,94420000 +34904c0,822021 +34904c4,3084ffff +34904c8,24070001 +34904cc,8e6548f4 +34904d0,c1040de +34904d4,922021 +34904d8,96a648f8 +34904dc,82021357 +34904e0,24420003 +34904e4,21040 +34904e8,541021 +34904ec,2262023 +34904f0,94420000 +34904f4,822021 +34904f8,3084ffff +34904fc,24070001 +3490500,8e6548f4 +3490504,c1040de +3490508,922021 +349050c,8fbf002c +3490510,8fb50028 +3490514,8fb40024 +3490518,8fb30020 +349051c,8fb2001c +3490520,8fb10018 +3490524,8fb00014 +3490528,3e00008 +349052c,27bd0030 +3490530,27bdffb8 +3490534,afbf0044 +3490538,afbe0040 +349053c,afb7003c +3490540,afb60038 +3490544,afb50034 +3490548,afb40030 +349054c,afb3002c +3490550,afb20028 +3490554,afb10024 +3490558,afb00020 +349055c,808825 +3490560,a08025 +3490564,34058000 +3490568,3c028000 +349056c,24422e80 +3490570,40f809 +3490574,8e040000 +3490578,3825 +349057c,34068000 +3490580,8e050000 +3490584,c1040de +3490588,3c040800 +349058c,3c028011 +3490590,3442a5d0 +3490594,9442000c +3490598,afa20018 +349059c,3c128010 +34905a0,2652bf00 +34905a4,26420004 +34905a8,afa20014 +34905ac,3c1e8011 +34905b0,37d4a5d0 +34905b4,3c178041 +34905b8,3c168041 +34905bc,3c028041 +34905c0,afa2001c +34905c4,afb20010 +34905c8,96530000 +34905cc,8e050000 +34905d0,3c158005 +34905d4,26b57030 +34905d8,24061354 +34905dc,b32821 +34905e0,2a0f809 +34905e4,2802025 +34905e8,96e648f8 +34905ec,2661023 +34905f0,24421fe0 +34905f4,8e050000 +34905f8,a22821 +34905fc,2a0f809 +3490600,8ec448f4 +3490604,96871352 +3490608,a6801352 +349060c,2801825 +3490610,1025 +3490614,37c5b924 +3490618,602025 +349061c,24630002 +3490620,94840000 +3490624,441021 +3490628,1465fffb +349062c,3042ffff +3490630,96e348f8 +3490634,33042 +3490638,2c630002 +349063c,14600009 +3490640,8ec448f4 +3490644,24840002 +3490648,9485fffe +349064c,451021 +3490650,24630001 +3490654,3063ffff +3490658,66282b +349065c,14a0fff9 +3490660,3042ffff +3490664,50e2006e +3490668,26520002 +349066c,8fa20010 +3490670,94530006 +3490674,8e050000 +3490678,3c028005 +349067c,24557030 +3490680,24061354 +3490684,b32821 +3490688,2a0f809 +349068c,2802025 +3490690,96e648f8 +3490694,2661023 +3490698,24421fe0 +349069c,8e050000 +34906a0,a22821 +34906a4,2a0f809 +34906a8,8ec448f4 +34906ac,96871352 +34906b0,a6801352 +34906b4,2801825 +34906b8,1025 +34906bc,37c5b924 +34906c0,602025 +34906c4,24630002 +34906c8,94840000 +34906cc,441021 +34906d0,1465fffb +34906d4,3042ffff +34906d8,96e348f8 +34906dc,33042 +34906e0,2c630002 +34906e4,14600009 +34906e8,8ec448f4 +34906ec,24840002 +34906f0,9485fffe +34906f4,451021 +34906f8,24630001 +34906fc,3063ffff +3490700,66282b +3490704,14a0fff9 +3490708,3042ffff +349070c,50e20034 +3490710,8fa20010 +3490714,3c138000 +3490718,26732e80 +349071c,24050004 +3490720,260f809 +3490724,2802025 +3490728,24050004 +349072c,260f809 +3490730,37c4a5d4 +3490734,24050004 +3490738,260f809 +349073c,37c4a5da +3490740,24050004 +3490744,260f809 +3490748,37c4a5dc +349074c,24050004 +3490750,260f809 +3490754,37c4a5e0 +3490758,24050004 +349075c,260f809 +3490760,37c4a5e4 +3490764,24050004 +3490768,260f809 +349076c,37c4a5e8 +3490770,8fa2001c +3490774,8c4248d0 +3490778,40f809 +3490780,37c3a5d0 +3490784,1025 +3490788,37c5b924 +349078c,602025 +3490790,24630002 +3490794,94840000 +3490798,441021 +349079c,1465fffb +34907a0,3042ffff +34907a4,a6821352 +34907a8,8fa20010 +34907ac,94440006 +34907b0,24070001 +34907b4,24061450 +34907b8,2802825 +34907bc,3c020800 +34907c0,c1040de +34907c4,822021 +34907c8,96e548f8 +34907cc,3c028000 +34907d0,24422e80 +34907d4,40f809 +34907d8,8ec448f4 +34907dc,8fa20010 +34907e0,94530000 +34907e4,3c150800 +34907e8,24070001 +34907ec,24061450 +34907f0,2802825 +34907f4,c1040de +34907f8,2752021 +34907fc,96e648f8 +3490800,2662023 +3490804,24841fe0 +3490808,3084ffff +349080c,24070001 +3490810,8ec548f4 +3490814,c1040de +3490818,952021 +349081c,26520002 +3490820,8fa20014 +3490824,5452ff68 +3490828,afb20010 +349082c,34058000 +3490830,3c028000 +3490834,24422e80 +3490838,40f809 +349083c,8e040000 +3490840,3825 +3490844,34068000 +3490848,8e050000 +349084c,c1040de +3490850,3c040800 +3490854,3c028011 +3490858,3442a5d0 +349085c,8fa30018 +3490860,a443000c +3490864,3c148010 +3490868,9682bf00 +349086c,24420022 +3490870,8e050000 +3490874,3c120001 +3490878,3652c9ee +349087c,3c138005 +3490880,26737030 +3490884,24060002 +3490888,a22821 +349088c,260f809 +3490890,2322021 +3490894,2695bf00 +3490898,96a20002 +349089c,24420022 +34908a0,8e050000 +34908a4,26440002 +34908a8,24060002 +34908ac,a22821 +34908b0,260f809 +34908b4,2242021 +34908b8,9682bf00 +34908bc,24420022 +34908c0,8e050000 +34908c4,26440004 +34908c8,24060002 +34908cc,a22821 +34908d0,260f809 +34908d4,2242021 +34908d8,9682bf00 +34908dc,24420024 +34908e0,8e050000 +34908e4,26440006 +34908e8,24060008 +34908ec,a22821 +34908f0,260f809 +34908f4,2242021 +34908f8,96a20002 +34908fc,24420024 +3490900,8e050000 +3490904,2644000e +3490908,24060008 +349090c,a22821 +3490910,260f809 +3490914,2242021 +3490918,9682bf00 +349091c,24420024 +3490920,8e050000 +3490924,26440016 +3490928,24060008 +349092c,a22821 +3490930,260f809 +3490934,2242021 +3490938,9682bf00 +349093c,2442002e +3490940,8e050000 +3490944,2644001e +3490948,24060002 +349094c,a22821 +3490950,260f809 +3490954,2242021 +3490958,96a20002 +349095c,2442002e +3490960,8e050000 +3490964,26440020 +3490968,24060002 +349096c,a22821 +3490970,260f809 +3490974,2242021 +3490978,9682bf00 +349097c,2442002e +3490980,8e050000 +3490984,26440022 +3490988,24060002 +349098c,a22821 +3490990,260f809 +3490994,2242021 +3490998,9682bf00 +349099c,244200a4 +34909a0,8e050000 +34909a4,26440026 +34909a8,24060004 +34909ac,a22821 +34909b0,260f809 +34909b4,2242021 +34909b8,96a20002 +34909bc,244200a4 +34909c0,8e050000 +34909c4,2644002a +34909c8,24060004 +34909cc,a22821 +34909d0,260f809 +34909d4,2242021 +34909d8,9682bf00 +34909dc,244200a4 +34909e0,8e050000 +34909e4,2644002e +34909e8,24060004 +34909ec,a22821 +34909f0,260f809 +34909f4,2242021 +34909f8,9682bf00 +34909fc,2442002c +3490a00,8e050000 +3490a04,26440032 +3490a08,24060002 +3490a0c,a22821 +3490a10,260f809 +3490a14,2242021 +3490a18,96a20002 +3490a1c,2442002c +3490a20,8e050000 +3490a24,26440034 +3490a28,24060002 +3490a2c,a22821 +3490a30,260f809 +3490a34,2242021 +3490a38,9682bf00 +3490a3c,2442002c +3490a40,8e050000 +3490a44,26440036 +3490a48,24060002 +3490a4c,a22821 +3490a50,260f809 +3490a54,2242021 +3490a58,9682bf00 +3490a5c,244200cf +3490a60,8e050000 +3490a64,26440038 +3490a68,24060001 +3490a6c,a22821 +3490a70,260f809 +3490a74,2242021 +3490a78,96a20002 +3490a7c,244200cf +3490a80,8e050000 +3490a84,26440039 +3490a88,24060001 +3490a8c,a22821 +3490a90,260f809 +3490a94,2242021 +3490a98,9682bf00 +3490a9c,244200cf +3490aa0,8e050000 +3490aa4,2644003a +3490aa8,24060001 +3490aac,a22821 +3490ab0,260f809 +3490ab4,2242021 +3490ab8,8fbf0044 +3490abc,8fbe0040 +3490ac0,8fb7003c +3490ac4,8fb60038 +3490ac8,8fb50034 +3490acc,8fb40030 +3490ad0,8fb3002c +3490ad4,8fb20028 +3490ad8,8fb10024 +3490adc,8fb00020 +3490ae0,3e00008 +3490ae4,27bd0048 +3490ae8,27bdffd0 +3490aec,afbf002c +3490af0,afb60028 +3490af4,afb50024 +3490af8,afb40020 +3490afc,afb3001c +3490b00,afb20018 +3490b04,afb10014 +3490b08,afb00010 +3490b0c,809025 +3490b10,a08025 +3490b14,8ca30000 +3490b18,3c150002 +3490b1c,959821 +3490b20,8662ca38 +3490b24,21040 +3490b28,3c148010 +3490b2c,2694bf00 +3490b30,541021 +3490b34,94560000 +3490b38,8662ca50 +3490b3c,21040 +3490b40,541021 +3490b44,94440000 +3490b48,3c118005 +3490b4c,26317030 +3490b50,24061fe0 +3490b54,762821 +3490b58,220f809 +3490b5c,642021 +3490b60,8e030000 +3490b64,8662ca50 +3490b68,24420003 +3490b6c,21040 +3490b70,541021 +3490b74,94440000 +3490b78,24061fe0 +3490b7c,762821 +3490b80,220f809 +3490b84,642021 +3490b88,24070001 +3490b8c,34068000 +3490b90,8e050000 +3490b94,c1040de +3490b98,3c040800 +3490b9c,8664ca50 +3490ba0,41040 +3490ba4,541021 +3490ba8,94540000 +3490bac,26820022 +3490bb0,8e050000 +3490bb4,3403e4f7 +3490bb8,832021 +3490bbc,42040 +3490bc0,24060002 +3490bc4,a22821 +3490bc8,220f809 +3490bcc,2442021 +3490bd0,26820024 +3490bd4,8e050000 +3490bd8,8664ca50 +3490bdc,2484393e +3490be0,420c0 +3490be4,24840004 +3490be8,24060008 +3490bec,a22821 +3490bf0,220f809 +3490bf4,2442021 +3490bf8,2682002e +3490bfc,8e050000 +3490c00,8664ca50 +3490c04,3403e506 +3490c08,832021 +3490c0c,42040 +3490c10,24060002 +3490c14,a22821 +3490c18,220f809 +3490c1c,2442021 +3490c20,268200a4 +3490c24,8e050000 +3490c28,8664ca50 +3490c2c,24847285 +3490c30,42080 +3490c34,24060004 +3490c38,a22821 +3490c3c,220f809 +3490c40,2442021 +3490c44,2682002c +3490c48,8e050000 +3490c4c,8664ca50 +3490c50,3403e510 +3490c54,832021 +3490c58,42040 +3490c5c,24060002 +3490c60,a22821 +3490c64,220f809 +3490c68,2442021 +3490c6c,269400cf +3490c70,8e050000 +3490c74,8664ca50 +3490c78,26b5ca26 +3490c7c,952021 +3490c80,24060001 +3490c84,b42821 +3490c88,220f809 +3490c8c,2442021 +3490c90,8fbf002c +3490c94,8fb60028 +3490c98,8fb50024 +3490c9c,8fb40020 +3490ca0,8fb3001c +3490ca4,8fb20018 +3490ca8,8fb10014 +3490cac,8fb00010 +3490cb0,3e00008 +3490cb4,27bd0030 +3490cb8,27bdffe8 +3490cbc,afbf0014 +3490cc0,afb00010 +3490cc4,c1040de +3490cc8,e08025 +3490ccc,3c028041 +3490cd0,944648f8 +3490cd4,3c028011 +3490cd8,3442a5d0 +3490cdc,80431357 +3490ce0,31840 +3490ce4,3c028010 +3490ce8,2442bf00 +3490cec,621821 +3490cf0,24021fe0 +3490cf4,461023 +3490cf8,94630000 +3490cfc,431021 +3490d00,3042ffff +3490d04,2003825 +3490d08,3c038041 +3490d0c,8c6548f4 +3490d10,3c040800 +3490d14,c1040de +3490d18,442021 +3490d1c,8fbf0014 +3490d20,8fb00010 +3490d24,3e00008 +3490d28,27bd0018 +3490d2c,27bdffe0 +3490d30,afbf001c +3490d34,afb10018 +3490d38,afb00014 +3490d3c,a08025 +3490d40,e08825 +3490d44,3c028041 +3490d48,944548f8 +3490d4c,3c028011 +3490d50,3442a5d0 +3490d54,80421357 +3490d58,21040 +3490d5c,3c038010 +3490d60,2463bf00 +3490d64,431021 +3490d68,24041fe0 +3490d6c,852023 +3490d70,94420000 +3490d74,822021 +3490d78,3084ffff +3490d7c,3c028000 +3490d80,24422e80 +3490d84,40f809 +3490d88,2042021 +3490d8c,2203825 +3490d90,34068000 +3490d94,2002825 +3490d98,c1040de +3490d9c,3c040800 +3490da0,8fbf001c +3490da4,8fb10018 +3490da8,8fb00014 +3490dac,3e00008 +3490db0,27bd0020 +3490db4,24a20002 +3490db8,24a50082 +3490dbc,24065700 +3490dc0,24070004 +3490dc4,9443fffe +3490dc8,50660008 +3490dcc,24420004 +3490dd0,50600006 +3490dd4,24420004 +3490dd8,94430000 +3490ddc,2c630004 +3490de0,54600001 +3490de4,a4470000 +3490de8,24420004 +3490dec,5445fff6 +3490df0,9443fffe +3490df4,3e00008 +3490dfc,3c028011 +3490e00,3442a5d0 +3490e04,8c431360 +3490e08,1060002b +3490e0c,1025 +3490e10,2c620004 +3490e14,10400028 +3490e18,2402ffff +3490e1c,3c02801c +3490e20,344284a0 +3490e24,8c4900b0 +3490e28,91220000 +3490e2c,24040014 +3490e30,10440020 +3490e34,306b00ff +3490e38,306300ff +3490e3c,33080 +3490e40,1202025 +3490e44,24070018 +3490e48,3c0a00ff +3490e4c,354affff +3490e50,24080014 +3490e54,54470010 +3490e58,24840008 +3490e5c,8c830004 +3490e60,6a1824 +3490e64,661821 +3490e68,1231821 +3490e6c,1601025 +3490e70,8c65fffc +3490e74,50a00004 +3490e78,2442ffff +3490e7c,21600 +3490e80,1000000d +3490e84,21603 +3490e88,304200ff +3490e8c,1440fff8 +3490e90,2463fffc +3490e94,24840008 +3490e98,90820000 +3490e9c,1448ffed +3490ea4,10000004 +3490ea8,1025 +3490eac,10000002 +3490eb0,2402ffff +3490eb4,1025 +3490eb8,3c038041 +3490ebc,3e00008 +3490ec0,a0624940 +3490ec4,27bdffe8 +3490ec8,afbf0014 +3490ecc,c1045d6 +3490ed0,24040400 +3490ed4,3c038041 +3490ed8,ac624944 +3490edc,3c038041 +3490ee0,ac624948 +3490ee4,8fbf0014 +3490ee8,3e00008 +3490eec,27bd0018 +3490ef0,80830000 +3490ef4,10600025 +3490ef8,6025 +3490efc,3c028041 +3490f00,8c4a4944 +3490f04,254a0400 +3490f08,3c028041 +3490f0c,8c484948 +3490f10,1025 +3490f14,3c0bff00 +3490f18,256b0fff +3490f1c,30c60fff +3490f20,240ef000 +3490f24,240d0001 +3490f28,10a482b +3490f2c,55200005 +3490f30,a1030000 +3490f34,11800016 +3490f38,3c038041 +3490f3c,3e00008 +3490f40,ac684948 +3490f44,30a90fff +3490f48,94b00 +3490f4c,8d030000 +3490f50,6b1824 +3490f54,691825 +3490f58,6e1824 +3490f5c,661825 +3490f60,ad030000 +3490f64,25080004 +3490f68,a72821 +3490f6c,24420001 +3490f70,821821 +3490f74,80630000 +3490f78,1460ffeb +3490f7c,1a06025 +3490f80,3c038041 +3490f84,3e00008 +3490f88,ac684948 +3490f8c,1025 +3490f90,3e00008 +3490f98,27bdffe8 +3490f9c,afbf0014 +3490fa0,3c028041 +3490fa4,c1043bc +3490fa8,94471f9c +3490fac,8fbf0014 +3490fb0,3e00008 +3490fb4,27bd0018 +3490fb8,27bdffb0 +3490fbc,afbf004c +3490fc0,afbe0048 +3490fc4,afb70044 +3490fc8,afb60040 +3490fcc,afb5003c +3490fd0,afb40038 +3490fd4,afb30034 +3490fd8,afb20030 +3490fdc,afb1002c +3490fe0,afb00028 +3490fe4,afa40050 +3490fe8,a0b825 +3490fec,c0b025 +3490ff0,e0a825 +3490ff4,8fbe0060 +3490ff8,8825 +3490ffc,3c148041 +3491000,26941f98 +3491004,3c028041 +3491008,afa20020 +349100c,3c138041 +3491010,3c1238e3 +3491014,36528e39 +3491018,1130c0 +349101c,d13021 +3491020,24070012 +3491024,63040 +3491028,2802825 +349102c,c10288c +3491030,8fa40050 +3491034,8fa20020 +3491038,8c504944 +349103c,8e624948 +3491040,202102b +3491044,50400025 +3491048,26310001 +349104c,82020000 +3491050,2002825 +3491054,2442ffe0 +3491058,520018 +349105c,1810 +3491060,31883 +3491064,227c3 +3491068,641823 +349106c,14710016 +3491070,26100004 +3491074,8ca70000 +3491078,73b02 +349107c,30e70fff +3491080,520018 +3491084,1810 +3491088,31883 +349108c,641823 +3491090,330c0 +3491094,c33021 +3491098,63040 +349109c,afb60018 +34910a0,afb70014 +34910a4,8ca30000 +34910a8,30630fff +34910ac,7e1821 +34910b0,afa30010 +34910b4,f53821 +34910b8,463023 +34910bc,2802825 +34910c0,c1028f4 +34910c4,8fa40050 +34910c8,8e624948 +34910cc,202102b +34910d0,5440ffdf +34910d4,82020000 +34910d8,26310001 +34910dc,24020006 +34910e0,1622ffce +34910e4,1130c0 +34910e8,3c028041 +34910ec,8c434944 +34910f0,3c028041 +34910f4,ac434948 +34910f8,8fbf004c +34910fc,8fbe0048 +3491100,8fb70044 +3491104,8fb60040 +3491108,8fb5003c +349110c,8fb40038 +3491110,8fb30034 +3491114,8fb20030 +3491118,8fb1002c +349111c,8fb00028 +3491120,3e00008 +3491124,27bd0050 +3491128,27bdffe0 +349112c,afbf001c +3491130,3c028041 +3491134,24421f98 +3491138,afa00010 +349113c,3825 +3491140,94460006 +3491144,c1043ee +3491148,94450004 +349114c,8fbf001c +3491150,3e00008 +3491154,27bd0020 +3491158,3c028041 +349115c,42100 +3491160,244246f0 +3491164,441021 +3491168,3e00008 +349116c,8c420004 +3491170,27bdffe0 +3491174,afbf001c +3491178,afb10018 +349117c,afb00014 +3491180,3c108041 +3491184,261046f4 +3491188,3c118041 +349118c,26314834 +3491190,8e020004 +3491194,50400004 +3491198,26100010 +349119c,c1045e5 +34911a0,2002025 +34911a4,26100010 +34911a8,5611fffa +34911ac,8e020004 +34911b0,8fbf001c +34911b4,8fb10018 +34911b8,8fb00014 +34911bc,3e00008 +34911c0,27bd0020 +34911c4,3c028041 +34911c8,24030001 +34911cc,ac43494c +34911d0,3c038041 +34911d4,8c624950 +34911d8,2c440006 +34911dc,50800001 +34911e0,24020005 +34911e4,3e00008 +34911e8,ac624950 +34911ec,27bdffb8 +34911f0,afbf0044 +34911f4,afbe0040 +34911f8,afb6003c +34911fc,afb50038 +3491200,afb40034 +3491204,afb30030 +3491208,afb2002c +349120c,afb10028 +3491210,afb00024 +3491214,3a0f025 +3491218,3c028040 +349121c,94420dc4 +3491220,10400136 +3491224,3a0a825 +3491228,3c02801d +349122c,3442aa30 +3491230,8c42066c +3491234,3c033000 +3491238,24630483 +349123c,431024 +3491240,1440012e +3491244,808025 +3491248,3c02801c +349124c,344284a0 +3491250,8c430008 +3491254,3c02800f +3491258,8c4213ec +349125c,54620128 +3491260,2a0e825 +3491264,3c028011 +3491268,3442a5d0 +349126c,8c47135c +3491270,14e00122 +3491274,3c02800e +3491278,3442f1b0 +349127c,8c420000 +3491280,30420020 +3491284,1440011d +3491288,3c028041 +349128c,8c43494c +3491290,24020001 +3491294,1062000a +3491298,3c02801c +349129c,344284a0 +34912a0,3c030001 +34912a4,431021 +34912a8,94430934 +34912ac,24020006 +34912b0,54620113 +34912b4,2a0e825 +34912b8,10000009 +34912bc,3c038041 +34912c0,344284a0 +34912c4,3c030001 +34912c8,431021 +34912cc,94430934 +34912d0,24020006 +34912d4,14620007 +34912d8,3c028041 +34912dc,3c038041 +34912e0,8c624950 +34912e4,3042001f +34912e8,ac624950 +34912ec,10000022 +34912f0,241300ff +34912f4,8c424950 +34912f8,2c430006 +34912fc,1060000a +3491300,2c43006a +3491304,29a00 +3491308,2629823 +349130c,3c02cccc +3491310,3442cccd +3491314,2620019 +3491318,9810 +349131c,139882 +3491320,10000015 +3491324,327300ff +3491328,14600013 +349132c,241300ff +3491330,2c4300ba +3491334,1060000b +3491338,21a00 +349133c,621023 +3491340,24429769 +3491344,3c03cccc +3491348,3463cccd +349134c,430019 +3491350,1010 +3491354,29982 +3491358,139827 +349135c,10000006 +3491360,327300ff +3491364,3c028041 +3491368,ac40494c +349136c,3c028041 +3491370,100000e2 +3491374,ac404950 +3491378,3c038041 +349137c,8c624950 +3491380,24420001 +3491384,ac624950 +3491388,3c028011 +349138c,3442a5d0 +3491390,8c4808c4 +3491394,19000011 +3491398,1001025 +349139c,e05025 +34913a0,3c056666 +34913a4,24a56667 +34913a8,254a0001 +34913ac,401825 +34913b0,450018 +34913b4,2010 +34913b8,42083 +34913bc,217c3 +34913c0,2863000a +34913c4,1060fff8 +34913c8,821023 +34913cc,15400005 +34913d0,3c028040 +34913d4,10000002 +34913d8,240a0001 +34913dc,240a0001 +34913e0,3c028040 +34913e4,94450dc6 +34913e8,18a00010 +34913ec,a01025 +34913f0,3c066666 +34913f4,24c66667 +34913f8,24e70001 +34913fc,401825 +3491400,460018 +3491404,2010 +3491408,42083 +349140c,217c3 +3491410,2863000a +3491414,1060fff8 +3491418,821023 +349141c,54e00005 +3491420,1473821 +3491424,10000002 +3491428,24070001 +349142c,24070001 +3491430,1473821 +3491434,24f40001 +3491438,3c028041 +349143c,24421f98 +3491440,94430004 +3491444,740018 +3491448,2012 +349144c,3c038041 +3491450,24631f78 +3491454,94660004 +3491458,862021 +349145c,497c2 +3491460,2449021 +3491464,129043 +3491468,129023 +349146c,265200a0 +3491470,94420006 +3491474,44820000 +349147c,46800021 +3491480,3c028041 +3491484,d4461d88 +3491488,46260002 +349148c,3c028041 +3491490,d4421d90 +3491494,46201001 +3491498,3c028041 +349149c,d4441d98 +34914a0,46240000 +34914a4,4620000d +34914a8,44060000 +34914ac,94620006 +34914b0,44820000 +34914b8,46800021 +34914bc,46260002 +34914c0,46201081 +34914c4,3c028041 +34914c8,d4401da0 +34914cc,46201080 +34914d0,46241080 +34914d4,4620100d +34914d8,44110000 +34914dc,24e20009 +34914e0,210c2 +34914e4,210c0 +34914e8,3a2e823 +34914ec,27a40020 +34914f0,941021 +34914f4,19400015 +34914f8,a0400000 +34914fc,2549ffff +3491500,894821 +3491504,806025 +3491508,3c0b6666 +349150c,256b6667 +3491510,10b0018 +3491514,1810 +3491518,31883 +349151c,817c3 +3491520,621823 +3491524,31080 +3491528,431021 +349152c,21040 +3491530,1021023 +3491534,24420030 +3491538,a1220000 +349153c,604025 +3491540,1201025 +3491544,144cfff2 +3491548,2529ffff +349154c,8a1021 +3491550,2403002f +3491554,a0430000 +3491558,147102a +349155c,10400012 +3491560,873821 +3491564,8a5021 +3491568,3c086666 +349156c,25086667 +3491570,a80018 +3491574,1810 +3491578,31883 +349157c,517c3 +3491580,621823 +3491584,31080 +3491588,431021 +349158c,21040 +3491590,a21023 +3491594,24420030 +3491598,a0e20000 +349159c,24e7ffff +34915a0,1547fff3 +34915a4,602825 +34915a8,8e020008 +34915ac,24430008 +34915b0,ae030008 +34915b4,3c03de00 +34915b8,ac430000 +34915bc,3c038041 +34915c0,24631fe8 +34915c4,ac430004 +34915c8,8e020008 +34915cc,24430008 +34915d0,ae030008 +34915d4,3c03e700 +34915d8,ac430000 +34915dc,ac400004 +34915e0,8e020008 +34915e4,24430008 +34915e8,ae030008 +34915ec,3c03fc11 +34915f0,34639623 +34915f4,ac430000 +34915f8,3c03ff2f +34915fc,3463ffff +3491600,ac430004 +3491604,8e030008 +3491608,24620008 +349160c,ae020008 +3491610,3c16fa00 +3491614,ac760000 +3491618,3c02dad3 +349161c,24420b00 +3491620,2621025 +3491624,ac620004 +3491628,c1043e6 +349162c,2402825 +3491630,3c028041 +3491634,94421f9c +3491638,540018 +349163c,a012 +3491640,292a021 +3491644,8e020008 +3491648,24430008 +349164c,ae030008 +3491650,ac560000 +3491654,3c03f4ec +3491658,24633000 +349165c,2639825 +3491660,ac530004 +3491664,3c028041 +3491668,8c464950 +349166c,63042 +3491670,24070001 +3491674,30c6000f +3491678,3c128041 +349167c,26451f78 +3491680,c10288c +3491684,2002025 +3491688,26451f78 +349168c,94a20006 +3491690,afa20018 +3491694,94a20004 +3491698,afa20014 +349169c,afb10010 +34916a0,2803825 +34916a4,3025 +34916a8,c1028f4 +34916ac,2002025 +34916b0,c10444a +34916b4,2002025 +34916b8,3c028041 +34916bc,94424938 +34916c0,1440000f +34916c4,2a0e825 +34916c8,8e020008 +34916cc,24430008 +34916d0,ae030008 +34916d4,3c03e900 +34916d8,ac430000 +34916dc,ac400004 +34916e0,8e020008 +34916e4,24430008 +34916e8,ae030008 +34916ec,3c03df00 +34916f0,ac430000 +34916f4,10000002 +34916f8,ac400004 +34916fc,2a0e825 +3491700,3c0e825 +3491704,8fbf0044 +3491708,8fbe0040 +349170c,8fb6003c +3491710,8fb50038 +3491714,8fb40034 +3491718,8fb30030 +349171c,8fb2002c +3491720,8fb10028 +3491724,8fb00024 +3491728,3e00008 +349172c,27bd0048 +3491730,3c028040 +3491734,a04037bc +3491738,3c028040 +349173c,3e00008 +3491740,ac4037c0 +3491744,3c038041 +3491748,3c028060 +349174c,24421000 +3491750,3e00008 +3491754,ac624954 +3491758,3082000f +349175c,10400009 +3491760,3c038041 +3491764,417c3 +3491768,21702 +349176c,821821 +3491770,3063000f +3491774,431023 +3491778,24420010 +349177c,822021 +3491780,3c038041 +3491784,8c624954 +3491788,442021 +349178c,3e00008 +3491790,ac644954 +3491794,27bdffe8 +3491798,afbf0014 +349179c,afb00010 +34917a0,808025 +34917a4,c1045d6 +34917a8,8c840008 +34917ac,402025 +34917b0,ae020000 +34917b4,8e060008 +34917b8,3c028000 +34917bc,24420df0 +34917c0,40f809 +34917c4,8e050004 +34917c8,8fbf0014 +34917cc,8fb00010 +34917d0,3e00008 +34917d4,27bd0018 +34917d8,3c02800f +34917dc,a0401640 +34917e0,3c028041 +34917e4,a0404958 +34917e8,3c028011 +34917ec,3442a5d0 +34917f0,8c420004 +34917f4,14400086 +34917f8,3c028011 +34917fc,3442a5d0 +3491800,8c421360 +3491804,2c420004 +3491808,10400081 +349180c,3c028011 +3491810,3442a5d0 +3491814,8c420000 +3491818,240301fd +349181c,14430005 +3491820,3c038011 +3491824,3c02800f +3491828,24030001 +349182c,3e00008 +3491830,a0431640 +3491834,3463a5d0 +3491838,94630ed6 +349183c,30630100 +3491840,1460000a +3491844,3c038011 +3491848,24030157 +349184c,10430003 +3491850,240301f9 +3491854,14430005 +3491858,3c038011 +349185c,3c02800f +3491860,24030002 +3491864,3e00008 +3491868,a0431640 +349186c,3463a5d0 +3491870,94630edc +3491874,30640400 +3491878,54800016 +349187c,3c028011 +3491880,240404da +3491884,10440005 +3491888,2404ffbf +349188c,441024 +3491890,2404019d +3491894,14440005 +3491898,3c02801c +349189c,3c02800f +34918a0,24030003 +34918a4,3e00008 +34918a8,a0431640 +34918ac,344284a0 +34918b0,944200a4 +34918b4,2442ffa8 +34918b8,2c420002 +34918bc,10400005 +34918c0,3c028011 +34918c4,3c02800f +34918c8,24030003 +34918cc,3e00008 +34918d0,a0431640 +34918d4,3442a5d0 +34918d8,8c4200a4 +34918dc,30420007 +34918e0,24040007 +34918e4,5444001f +34918e8,30630200 +34918ec,3c028011 +34918f0,3442a5d0 +34918f4,8c42037c +34918f8,30420002 +34918fc,54400019 +3491900,30630200 +3491904,3c02801c +3491908,344284a0 +349190c,944200a4 +3491910,2442ffae +3491914,2c420002 +3491918,50400012 +349191c,30630200 +3491920,3c028041 +3491924,24040002 +3491928,a0444958 +349192c,3c028011 +3491930,3442a5d0 +3491934,8c420000 +3491938,24040191 +349193c,10440008 +3491940,24040205 +3491944,10440006 +3491948,240400db +349194c,10440004 +3491950,3c02800f +3491954,24030005 +3491958,3e00008 +349195c,a0431640 +3491960,30630200 +3491964,1460002a +3491968,3c02801c +349196c,344284a0 +3491970,3c030001 +3491974,431021 +3491978,84431e1a +349197c,240204d6 +3491980,14620005 +3491984,3c02801c +3491988,3c02800f +349198c,24030002 +3491990,3e00008 +3491994,a0431640 +3491998,344284a0 +349199c,944200a4 +34919a0,2c430054 +34919a4,50600006 +34919a8,2442ffa0 +34919ac,2c420052 +34919b0,14400017 +34919b4,3c028041 +34919b8,10000006 +34919bc,90424958 +34919c0,3042ffff +34919c4,2c420002 +34919c8,10400011 +34919cc,3c028041 +34919d0,90424958 +34919d4,14400005 +34919d8,3c028011 +34919dc,3c028041 +34919e0,24030001 +34919e4,a0434958 +34919e8,3c028011 +34919ec,3442a5d0 +34919f0,8c420000 +34919f4,240300db +34919f8,10430005 +34919fc,24030195 +3491a00,10430003 +3491a04,3c02800f +3491a08,24030002 +3491a0c,a0431640 +3491a10,3e00008 +3491a18,33c2 +3491a1c,664399c4 +3491a20,cc45ffc6 +3491a24,ff47ffc8 +3491a28,ff49e0ca +3491a2c,c24ba3cc +3491a30,854d660d +3491a34,440f2200 +3491a38,85d1a352 +3491a3c,c2d3e045 +3491a40,1010101 +3491a44,1010101 +3491a48,1010101 +3491a4c,1010101 +3491a50,1010101 +3491a6c,1010000 +3491a74,1010101 +3491a78,1000101 +3491a7c,10101 +3491a80,10000 +3491a84,2b242525 +3491a88,26262626 +3491a8c,27272727 +3491a90,27272727 +3491a94,500080d +3491a98,1051508 +3491a9c,d01052a +3491aa0,80d0127 +3491aa4,f080b01 +3491aa8,4d510b02 +3491ab0,97ff6350 +3491ab4,45ff5028 +3491ab8,57456397 +3491abc,ff5e45ff +3491ac0,9f006545 +3491ac4,ff63ff6c +3491ac8,45fff063 +3491acc,7345ffff +3491ad0,ff503aff +3491ad4,ffff573a +3491ad8,ffffff5e +3491adc,3affffff +3491ae0,653affff +3491ae4,ff6c3aff +3491ae8,ffff733a +3491aec,5a0c00 +3491af0,720c0096 +3491af4,c009618 +3491af8,1652a00 +3491afc,4e2a005a +3491b00,2a000000 +3491b04,c004e00 +3491b08,c015a00 +3491b0c,c026600 +3491b10,c037200 +3491b14,c047e00 +3491b18,c058a00 +3491b1c,c064e0c +3491b20,75a0c +3491b24,c09660c +3491b28,a720c +3491b2c,c0c7e0c +3491b30,c0d8a0c +3491b34,c0e4e18 +3491b38,c0f5a18 +3491b3c,c106618 +3491b40,c117218 +3491b44,c127e18 +3491b48,c138a18 +3491b4c,ffff +3491b50,ffff +3491b54,ffff +3491b58,ffff +3491b5c,ffff +3491b60,ffff +3491b64,ffff +3491b68,ffff +3491b6c,ffff +3491b70,ffff +3491b74,ffff +3491b78,ffff +3491b7c,ffff +3491b80,ffff +3491b84,c3b7e2a +3491b88,c3c8a2a +3491b8c,c3d962a +3491b90,ffff +3491b94,c3e7e36 +3491b98,b3f8b37 +3491b9c,b409737 +3491ba0,ffff +3491ba4,c417e42 +3491ba8,c428a42 +3491bac,c439642 +3491bb0,ffff +3491bb4,c447e4f +3491bb8,c458a4f +3491bbc,c46964f +3491bc0,ffff +3491bc4,c149600 +3491bc8,ffff +3491bcc,2c061b31 +3491bd0,2c072931 +3491bd4,2c083731 +3491bd8,2a096f51 +3491bdc,2c0a722a +3491be0,ffff +3491be4,2c00370a +3491be8,2c01371a +3491bec,2c022922 +3491bf0,2c031b1a +3491bf4,2c041b0a +3491bf8,2c052902 +3491bfc,ffff +3491c00,ffff +3491c04,80411fb8 +3491c08,80411fa8 +3491c0c,80411f38 +3491c10,80408ca8 +3491c14,80408bbc +3491c18,80408bec +3491c1c,80408c24 +3491c20,80408c58 +3491c24,80408c80 +3491c28,c8ff6482 +3491c2c,82ffff64 +3491c30,64ff5aff +3491c34,52616369 +3491c38,6e672061 +3491c3c,64766973 +3491c40,6f72793a +3491c44,206d6f64 +3491c48,656c2073 +3491c4c,6b656c65 +3491c50,746f6e20 +3491c54,6d697373 +3491c58,696e6720 +3491c5c,646c6973 +3491c60,74000000 +3491c64,52616369 +3491c68,6e672061 +3491c6c,64766973 +3491c70,6f72793a +3491c74,20697272 +3491c78,6567756c +3491c7c,6172206d +3491c80,6f64656c +3491c84,20736b65 +3491c88,6c65746f +3491c8c,6e000000 +3491c90,bd1400 +3491c94,bd1300 +3491c98,15c6300 +3491c9c,de2f00 +3491ca0,e01010e0 +3491ca4,e01010e0 +3491ca8,1010e0e0 +3491cac,1010e0e0 +3491cb0,10e0e010 +3491cb4,10000000 +3491cb8,4d510000 +3491cbc,4e6f726d +3491cc0,616c0000 +3491cc8,47656e65 +3491ccc,72617465 +3491cd0,64207769 +3491cd4,7468204f +3491cd8,6f545200 +3491cdc,53706f69 +3491ce0,6c657220 +3491ce4,61766169 +3491ce8,6c61626c +3491cec,65000000 +3491cf0,506c616e +3491cf4,646f6d69 +3491cf8,7a657200 +3491cfc,576f726c +3491d00,64000000 +3491d04,21506c61 +3491d08,7941734d +3491d0c,616e6966 +3491d10,65737430 +3491d18,bdcccccd +3491d1c,3dcccccd +3491d20,3f333333 +3491d24,c0000000 +3491d28,c1000000 +3491d2c,43510000 +3491d30,41100000 +3491d34,4f000000 +3491d38,42080000 +3491d3c,c20c0000 +3491d40,420c0000 +3491d44,3f800000 +3491d48,3f000000 +3491d4c,41c80000 +3491d50,41200000 +3491d54,3fa00000 +3491d58,40000000 +3491d5c,40200000 +3491d60,3f000000 +3491d64,4f000000 +3491d68,42480000 +3491d6c,41200000 +3491d70,3f800000 +3491d74,4f000000 +3491d78,3f800000 +3491d7c,3fc00000 +3491d80,41f00000 +3491d88,3ff80000 +3491d90,406e0000 +3491d98,3ff00000 +3491da0,40080000 +3491da8,80411a18 +3491dac,10208 +3491db0,3040507 +3491db4,6000000 +3491db8,5c8c800 +3491dbc,ff00 +3491dc0,1ff3c00 +3491dc4,20064ff +3491dc8,4c832ff +3491dcc,3ff8200 +3491dd0,100f44 +3491dd4,656b7500 +3491ddc,1101f +3491de0,446f646f +3491de4,6e676f00 +3491de8,210 +3491dec,f4a6162 +3491df0,75000000 +3491df4,3 +3491df8,d01f466f +3491dfc,72657374 +3491e04,4d01f46 +3491e08,69726500 +3491e10,5d01f +3491e14,57617465 +3491e18,72000000 +3491e1c,7d0 +3491e20,1f536861 +3491e24,646f7700 +3491e28,6 +3491e2c,d01f5370 +3491e30,69726974 +3491e38,8900742 +3491e3c,6f745700 +3491e44,91007 +3491e48,49636500 +3491e50,ca0 +3491e54,486964 +3491e58,656f7574 +3491e5c,b +3491e60,80004754 +3491e64,47000000 +3491e6c,dc00047 +3491e70,616e6f6e +3491e7c,2 +3491e84,3f800000 +3491e90,1 +3491e94,30006 +3491e98,70009 +3491e9c,b000e +3491ea0,f0010 +3491ea4,110019 +3491ea8,1a002b +3491eac,2c002e +3491eb0,300032 +3491eb4,35003c +3491eb8,400041 +3491ebc,460051 +3491ec0,540109 +3491ec4,10b010c +3491ec8,10e010f +3491ecc,1100113 +3491ed4,1 +3491ed8,1 +3491edc,2 +3491ee0,1 +3491ee4,2 +3491ee8,2 +3491eec,3 +3491ef0,1 +3491ef4,2 +3491ef8,2 +3491efc,3 +3491f00,2 +3491f04,3 +3491f08,3 +3491f0c,4 +3491f10,84858683 +3491f14,8e030000 +3491f18,9293948e +3491f1c,8c007978 +3491f20,58000000 +3491f24,87000000 +3491f2c,100010 +3491f30,a0301 +3491f34,1000000 +3491f3c,100010 +3491f40,20002 +3491f44,2000000 +3491f4c,80008 +3491f50,a0301 +3491f54,1000000 +3491f5c,100010 +3491f60,30301 +3491f64,1000000 +3491f6c,100018 +3491f70,10301 +3491f74,1000000 +3491f7c,100010 +3491f80,100301 +3491f84,1000000 +3491f8c,200020 +3491f90,10302 +3491f94,2000000 +3491f9c,8000e +3491fa0,5f0301 +3491fa4,1000000 +3491fac,180018 +3491fb0,140003 +3491fb4,4000000 +3491fbc,200020 +3491fc0,5a0003 +3491fc4,4000000 +3491fcc,100010 +3491fd0,60301 +3491fd4,1000000 +3491fdc,100010 +3491fe0,30003 +3491fe4,4000000 +3491fe8,e7000000 +3491ff0,d9000000 +3491ff8,ed000000 +3491ffc,5003c0 +3492000,ef002cf0 +3492004,504244 +3492008,df000000 +3492010,8040b210 +3492014,6000670 +3492018,6000750 +3492034,8040cc5c +3492038,6000800 +349203c,ffffffff +3492040,3c505aff +3492058,8040cb44 +349205c,6000ae0 +3492060,c800ff +349207c,8040cb44 +3492080,6000ae0 +3492084,ff3200ff +34920a0,8040cb44 +34920a4,6000ae0 +34920a8,96ffff +34920c4,8040cb44 +34920c8,6000ae0 +34920cc,ff9600ff +34920e8,8040cb44 +34920ec,6000ae0 +34920f0,c832ffff +349210c,8040cb44 +3492110,6000ae0 +3492114,c8ff00ff +3492130,8040bba0 +3492134,60000e0 +3492154,8040cdd8 +3492158,6000ca0 +349215c,6000f08 +3492160,ffaaffff +3492164,ff0064ff +3492178,8040ad54 +349217c,6000960 +3492180,6000c50 +349219c,8040abf0 +34921a0,6000cb0 +34921a4,6000e18 +34921c0,8040abf0 +34921c4,6001af0 +34921c8,6000e18 +34921e4,8040abf0 +34921e8,6002830 +34921ec,6000e18 +3492208,8040abf0 +349220c,6003610 +3492210,6000e18 +349222c,8040abf0 +3492230,6004330 +3492234,6000e18 +3492250,8040abf0 +3492254,6005220 +3492258,6000e18 +3492274,8040ba8c +3492278,6000e90 +3492298,8040b150 +349229c,6001290 +34922a0,6001470 +34922bc,8040b150 +34922c0,6001290 +34922c4,6001590 +34922e0,8040af10 +34922e4,6000990 +34922e8,60008d0 +34922ec,6000930 +34922f0,6000a80 +3492304,8040af10 +3492308,6000990 +349230c,60008f0 +3492310,6000950 +3492314,6000a80 +3492328,8040af10 +349232c,6000990 +3492330,6000910 +3492334,6000970 +3492338,6000a80 +349234c,8040af10 +3492350,6000b90 +3492354,6000ad0 +3492358,6000b30 +349235c,6000d98 +3492370,8040af10 +3492374,6000b90 +3492378,6000af0 +349237c,6000b50 +3492380,6000d98 +3492394,8040af10 +3492398,6000b90 +349239c,6000b10 +34923a0,6000b70 +34923a4,6000d98 +34923b8,8040ae74 +34923bc,60004d0 +34923dc,8040ae74 +34923e0,60003c0 +3492400,8040ae74 +3492404,6000a50 +3492424,8040ae74 +3492428,6000580 +3492448,8040ae74 +349244c,6000ee0 +349246c,8040ae74 +3492470,60009a0 +3492490,8040ae74 +3492494,6000b70 +34924b4,8040b000 +34924b8,6001850 +34924bc,6001750 +34924c0,6001790 +34924c4,60019a0 +34924c8,60017b0 +34924cc,6001a28 +34924d0,60017d0 +34924d4,6001ad8 +34924d8,8040b000 +34924dc,6001850 +34924e0,6001770 +34924e4,60017f0 +34924e8,60019a0 +34924ec,6001810 +34924f0,6001a28 +34924f4,6001830 +34924f8,6001ad8 +34924fc,8040ae74 +3492500,6000f60 +3492520,8040ae74 +3492524,6000340 +3492544,8040ae74 +3492548,6000b90 +3492568,8040ae74 +349256c,6001830 +349258c,8040ab54 +3492590,60004b0 +34925b0,8040abf0 +34925b4,6000fd0 +34925b8,6001008 +34925d4,8040bf14 +34925d8,6000aa0 +34925dc,6000a20 +34925e0,6000a60 +34925e4,6000cc8 +34925f8,8040bf14 +34925fc,6000aa0 +3492600,6000a40 +3492604,6000a80 +3492608,6000cc8 +349261c,8040ae74 +3492620,6000c70 +3492640,8040ae74 +3492644,6000750 +3492664,8040ae74 +3492668,6001240 +3492688,8040b210 +349268c,60008c0 +3492690,6000af8 +34926ac,8040b210 +34926b0,6001060 +34926b4,6001288 +34926d0,8040b210 +34926d4,6000ac0 +34926d8,6000d50 +34926f4,8040ae74 +34926f8,60007e0 +3492718,8040ae74 +349271c,6000940 +349273c,8040ae74 +3492740,6000a30 +3492760,8040ae74 +3492764,6000990 +3492784,8040b210 +3492788,6000d80 +349278c,6001010 +34927a8,8040c080 +34927ac,6001438 +34927b0,6001270 +34927b4,60012d0 +34927b8,6001790 +34927bc,6001330 +34927c0,6001848 +34927cc,8040c080 +34927d0,6001438 +34927d4,6001290 +34927d8,60012f0 +34927dc,6001790 +34927e0,6001388 +34927e4,6001848 +34927f0,8040c080 +34927f4,6001438 +34927f8,60012b0 +34927fc,6001310 +3492800,6001790 +3492804,60013e0 +3492808,6001848 +3492814,8040c250 +3492818,6000fb0 +349281c,60011c8 +3492838,8040b210 +349283c,6000cc0 +3492840,6000d60 +349285c,8040af10 +3492860,6001560 +3492864,60014e0 +3492868,6001520 +349286c,6001608 +3492880,8040af10 +3492884,6001560 +3492888,6001500 +349288c,6001540 +3492890,6001608 +34928a4,8040ae74 +34928a8,6000580 +34928c8,8040bcb8 +34928cc,6000600 +34928ec,8040ae74 +34928f0,60007e0 +3492910,8040ae74 +3492914,60009d0 +3492934,8040ae74 +3492938,60008e0 +3492958,8040b984 +349295c,6000600 +349297c,8040b328 +3492980,6001630 +3492984,60015f0 +3492988,6001948 +34929a0,8040b210 +34929a4,60008e0 +34929a8,6000ae0 +34929c4,8040b210 +34929c8,60008e0 +34929cc,6000b58 +34929e8,8040b210 +34929ec,6001630 +34929f0,6001a98 +3492a0c,8040ae74 +3492a10,6000810 +3492a30,8040b584 +3492a34,6001540 +3492a38,60014c0 +3492a3c,6001860 +3492a40,6001500 +3492a54,8040b584 +3492a58,6001540 +3492a5c,60014e0 +3492a60,6001860 +3492a64,6001520 +3492a78,8040b328 +3492a7c,60005e0 +3492a80,6000560 +3492a84,6000768 +3492a9c,8040b328 +3492aa0,60005e0 +3492aa4,6000580 +3492aa8,6000768 +3492ac0,8040b328 +3492ac4,60005e0 +3492ac8,60005a0 +3492acc,6000768 +3492ae4,8040b328 +3492ae8,60005e0 +3492aec,60005c0 +3492af0,6000768 +3492b08,8040ae74 +3492b0c,60009d0 +3492b2c,8040b210 +3492b30,6000bc0 +3492b34,6000e58 +3492b50,8040b210 +3492b54,60013d0 +3492b58,60016b0 +3492b74,8040b210 +3492b78,6000680 +3492b7c,6000768 +3492b98,8040ae74 +3492b9c,60008b0 +3492bbc,8040ae74 +3492bc0,60009d0 +3492be0,8040b210 +3492be4,6000f00 +3492be8,6001188 +3492c04,8040b984 +3492c08,60006e0 +3492c28,8040b210 +3492c2c,60009c0 +3492c30,6000af0 +3492c4c,8040ae74 +3492c50,6000960 +3492c70,8040acb0 +3492c74,6000440 +3492c94,8040b210 +3492c98,6000d60 +3492c9c,6001060 +3492cb8,8040ab54 +3492cbc,60014f8 +3492cdc,8040ab54 +3492ce0,6001398 +3492d00,8040ab54 +3492d04,60010e8 +3492d24,8040b328 +3492d28,6001630 +3492d2c,6001610 +3492d30,6001948 +3492d48,8040ae74 +3492d4c,6001850 +3492d6c,8040b458 +3492d70,6000ae0 +3492d74,6000ca0 +3492d78,6000d00 +3492d90,8040b458 +3492d94,6000ae0 +3492d98,6000cc0 +3492d9c,6000d00 +3492db4,8040b458 +3492db8,6000ae0 +3492dbc,6000ce0 +3492dc0,6000d00 +3492dd8,8040c3f4 +3492ddc,6000330 +3492de0,6000438 +3492dfc,8040bdc0 +3492e00,6000920 +3492e04,60009e0 +3492e08,6000a40 +3492e20,8040bdc0 +3492e24,6000920 +3492e28,6000a00 +3492e2c,6000a40 +3492e44,8040bdc0 +3492e48,6000920 +3492e4c,6000a20 +3492e50,6000a40 +3492e68,8040c580 +3492e6c,6000c60 +3492e70,6000f08 +3492e8c,8040b210 +3492e90,6000830 +3492e94,6000b20 +3492eb0,8040b210 +3492eb4,6000830 +3492eb8,6000a70 +3492ed4,8040c93c +3492ed8,6000990 +3492edc,6000be0 +3492ee0,6000cf0 +3492ee4,6000950 +3492ef8,8040c750 +3492efc,6000bd0 +3492f00,6000db8 +3492f04,6000ef0 +3492f1c,8040b6c8 +3492f20,6000b70 +3492f24,6000af0 +3492f28,6000f48 +3492f2c,6000b30 +3492f30,6000ff0 +3492f40,8040b824 +3492f44,60005e0 +3492f48,60004a0 +3492f4c,60006f0 +3492f50,6000540 +3492f64,8040b824 +3492f68,60005e0 +3492f6c,60004c0 +3492f70,60006f0 +3492f74,6000560 +3492f88,8040b824 +3492f8c,60005e0 +3492f90,60004e0 +3492f94,60006f0 +3492f98,6000580 +3492fac,8040c93c +3492fb0,6000990 +3492fb4,6000be0 +3492fb8,6000cf0 +3492fbc,6000970 +3492fd0,8040b584 +3492fd4,60005e0 +3492fd8,6000500 +3492fdc,60006f0 +3492fe0,60005a0 +3492ff4,8040b584 +3492ff8,60005e0 +3492ffc,6000520 +3493000,60006f0 +3493004,60005c0 +3493018,8040b6c8 +349301c,6000b70 +3493020,6000b10 +3493024,6000f48 +3493028,6000b50 +349302c,6000ff0 +349303c,8040ae74 +3493040,6000960 +3493060,8040c3f4 +3493064,6004db0 +3493068,6004eb8 +3493084,8040ae74 +3493088,6000a30 +34930a8,8040ae74 +34930ac,60015e8 +34930d0,506 +34930d4,8050602 +34930d8,5070506 +34930dc,3020000 +34930e0,903 +34930e4,4040203 +3493100,4d8e0032 +3493104,ce2000 +3493108,8040d640 +349310c,8040cfec +3493110,ffffffff +3493114,b000000 +3493118,4d8c0034 +349311c,bb1200 +3493120,8040d478 +3493124,8040cfec +3493128,ffffffff +349312c,c000000 +3493130,4d090033 +3493134,d92800 +3493138,8040d478 +349313c,8040cfec +3493140,ffffffff +3493144,ff000000 +3493148,53030031 +349314c,e9350c +3493150,8040d478 +3493154,8040cfec +3493158,ffffffff +349315c,ff000000 +3493160,53060030 +3493164,e7330c +3493168,8040d478 +349316c,8040cfec +3493170,ffffffff +3493174,ff000000 +3493178,530e0035 +349317c,e8340c +3493180,8040d478 +3493184,8040cfec +3493188,ffffffff +349318c,ff000000 +3493190,4d000037 +3493194,c71b00 +3493198,8040d478 +349319c,8040cfec +34931a0,ffffffff +34931a4,d000000 +34931a8,530a0036 +34931ac,dd2d0c +34931b0,8040d478 +34931b4,8040cfec +34931b8,ffffffff +34931bc,ff000000 +34931c0,530b004f +34931c4,dd2e0c +34931c8,8040d478 +34931cc,8040cfec +34931d0,ffffffff +34931d4,ff000000 +34931d8,530f0039 +34931dc,ea360c +34931e0,8040d478 +34931e4,8040cfec +34931e8,ffffffff +34931ec,ff000000 +34931f0,53230069 +34931f4,ef3b0c +34931f8,8040d478 +34931fc,8040d334 +3493200,ffffffff +3493204,ff000000 +3493208,5308003a +349320c,de2f0c +3493210,8040d478 +3493214,8040cfec +3493218,ffffffff +349321c,ff000000 +3493220,53110038 +3493224,f6410c +3493228,8040d478 +349322c,8040cfec +3493230,ffffffff +3493234,ff000000 +3493238,532f0002 +349323c,1095e0c +3493240,8040d478 +3493244,8040cfec +3493248,ffffffff +349324c,ff000000 +3493250,53140042 +3493254,c6010c +3493258,8040d478 +349325c,8040cfec +3493260,ffffffff +3493264,ff000000 +3493268,53150043 +349326c,eb380c +3493270,8040d478 +3493274,8040cfec +3493278,ffffffff +349327c,ff000000 +3493280,53160044 +3493284,eb370c +3493288,8040d478 +349328c,8040cfec +3493290,ffffffff +3493294,ff000000 +3493298,53170045 +349329c,eb390c +34932a0,8040d478 +34932a4,8040cfec +34932a8,ffffffff +34932ac,ff000000 +34932b0,53180046 +34932b4,c6010c +34932b8,8040d478 +34932bc,8040cfec +34932c0,ffffffff +34932c4,ff000000 +34932c8,531a0098 +34932cc,df300c +34932d0,8040d478 +34932d4,8040cfec +34932d8,ffffffff +34932dc,ff000000 +34932e0,531b0099 +34932e4,10b450c +34932e8,8040d680 +34932ec,8040cfec +34932f0,ffffffff +34932f4,ff000000 +34932f8,53100048 +34932fc,f33e00 +3493300,8040d478 +3493304,8040cfec +3493308,ffffffff +349330c,ff000000 +3493310,53250010 +3493314,1364f0c +3493318,8040d478 +349331c,8040cfec +3493320,ffffffff +3493324,ff000000 +3493328,53260011 +349332c,135320c +3493330,8040d478 +3493334,8040cfec +3493338,ffffffff +349333c,ff000000 +3493340,5322000b +3493344,109440c +3493348,8040d478 +349334c,8040cfec +3493350,ffffffff +3493354,ff000000 +3493358,53240012 +349335c,134310c +3493360,8040d478 +3493364,8040cfec +3493368,ffffffff +349336c,ff000000 +3493370,53270013 +3493374,137500c +3493378,8040d478 +349337c,8040cfec +3493380,ffffffff +3493384,ff000000 +3493388,532b0017 +349338c,138510c +3493390,8040d478 +3493394,8040cfec +3493398,ffffffff +349339c,ff000000 +34933a0,532d9001 +34933a4,da290c +34933a8,8040d478 +34933ac,8040cfec +34933b0,ffffffff +34933b4,ff000000 +34933b8,532e000b +34933bc,109440c +34933c0,8040d478 +34933c4,8040cfec +34933c8,ffffffff +34933cc,ff000000 +34933d0,53300003 +34933d4,141540c +34933d8,8040d478 +34933dc,8040cfec +34933e0,ffffffff +34933e4,ff000000 +34933e8,53310004 +34933ec,140530c +34933f0,8040d478 +34933f4,8040cfec +34933f8,ffffffff +34933fc,ff000000 +3493400,53320005 +3493404,f5400c +3493408,8040d478 +349340c,8040cfec +3493410,ffffffff +3493414,ff000000 +3493418,53330008 +349341c,143560c +3493420,8040d478 +3493424,8040cfec +3493428,ffffffff +349342c,ff000000 +3493430,53340009 +3493434,146570c +3493438,8040d478 +349343c,8040cfec +3493440,ffffffff +3493444,ff000000 +3493448,5335000d +349344c,1495a0c +3493450,8040d478 +3493454,8040cfec +3493458,ffffffff +349345c,ff000000 +3493460,5336000e +3493464,13f520c +3493468,8040d478 +349346c,8040cfec +3493470,ffffffff +3493474,ff000000 +3493478,5337000a +349347c,142550c +3493480,8040d478 +3493484,8040cfec +3493488,ffffffff +349348c,ff000000 +3493490,533b00a4 +3493494,18d740c +3493498,8040d478 +349349c,8040cfec +34934a0,ffffffff +34934a4,ff000000 +34934a8,533d004b +34934ac,f8430c +34934b0,8040d478 +34934b4,8040cfec +34934b8,ffffffff +34934bc,ff000000 +34934c0,533e004c +34934c4,cb1d00 +34934c8,8040d478 +34934cc,8040cfec +34934d0,ffffffff +34934d4,ff000000 +34934d8,533f004d +34934dc,dc2c00 +34934e0,8040d478 +34934e4,8040cfec +34934e8,ffffffff +34934ec,ff000000 +34934f0,5340004e +34934f4,ee3a0c +34934f8,8040d478 +34934fc,8040cfec +3493500,ffffffff +3493504,ff000000 +3493508,53420050 +349350c,f23c0c +3493510,8040d478 +3493514,8040cfec +3493518,ffffffff +349351c,ff000000 +3493520,53430051 +3493524,f23d0c +3493528,8040d478 +349352c,8040cfec +3493530,ffffffff +3493534,ff000000 +3493538,53450053 +349353c,118470c +3493540,8040d478 +3493544,8040cfec +3493548,ffffffff +349354c,ff000000 +3493550,53460054 +3493554,1575f0c +3493558,8040d478 +349355c,8040cfec +3493560,ffffffff +3493564,ff000000 +3493568,534b0056 +349356c,be160c +3493570,8040d478 +3493574,8040cfec +3493578,ffffffff +349357c,ff000000 +3493580,534c0057 +3493584,be170c +3493588,8040d478 +349358c,8040cfec +3493590,ffffffff +3493594,ff000000 +3493598,534d0058 +349359c,bf180c +34935a0,8040d478 +34935a4,8040cfec +34935a8,ffffffff +34935ac,ff000000 +34935b0,534e0059 +34935b4,bf190c +34935b8,8040d478 +34935bc,8040cfec +34935c0,ffffffff +34935c4,ff000000 +34935c8,534f005a +34935cc,bf1a0c +34935d0,8040d478 +34935d4,8040cfec +34935d8,ffffffff +34935dc,ff000000 +34935e0,5351005b +34935e4,12d490c +34935e8,8040d478 +34935ec,8040cfec +34935f0,ffffffff +34935f4,ff000000 +34935f8,5352005c +34935fc,12d4a0c +3493600,8040d478 +3493604,8040cfec +3493608,ffffffff +349360c,ff000000 +3493610,535300cd +3493614,db2a0c +3493618,8040d478 +349361c,8040cfec +3493620,ffffffff +3493624,ff000000 +3493628,535400ce +349362c,db2b0c +3493630,8040d478 +3493634,8040cfec +3493638,ffffffff +349363c,ff000000 +3493640,536f0068 +3493644,c8210c +3493648,8040d478 +349364c,8040cfec +3493650,ffffffff +3493654,ff000000 +3493658,5370007b +349365c,d7240c +3493660,8040d478 +3493664,8040cfec +3493668,ffffffff +349366c,ff000000 +3493670,5341004a +3493674,10e460c +3493678,8040d478 +349367c,8040d294 +3493680,ffffffff +3493684,ff000000 +3493688,4d5800dc +349368c,1194800 +3493690,8040d65c +3493694,8040cfec +3493698,ffffffff +349369c,10000000 +34936a0,3d7200c6 +34936a4,bd1300 +34936a8,8040d6f0 +34936ac,8040d318 +34936b0,ffffffff +34936b4,ff000000 +34936b8,3e7a00c2 +34936bc,bd1400 +34936c0,8040d6f0 +34936c4,8040cff4 +34936c8,ffffffff +34936cc,ff000000 +34936d0,537400c7 +34936d4,b90a02 +34936d8,8040d478 +34936dc,8040cfec +34936e0,ffffffff +34936e4,ff000000 +34936e8,53750067 +34936ec,b80b00 +34936f0,8040d478 +34936f4,8040cfec +34936f8,ffffffff +34936fc,ff000000 +3493700,53760066 +3493704,c81c00 +3493708,8040d478 +349370c,8040cfec +3493710,ffffffff +3493714,ff000000 +3493718,53770060 +349371c,aa020d +3493720,8040d478 +3493724,8040cfec +3493728,ffffffff +349372c,ff000000 +3493730,53780052 +3493734,cd1e00 +3493738,8040d478 +349373c,8040cfec +3493740,ffffffff +3493744,ff000000 +3493748,53790052 +349374c,cd1f00 +3493750,8040d478 +3493754,8040cfec +3493758,ffffffff +349375c,ff000000 +3493760,5356005e +3493764,d1220c +3493768,8040d478 +349376c,8040d2ec +3493770,1ffff +3493774,ff000000 +3493778,5357005f +349377c,d1230c +3493780,8040d478 +3493784,8040d2ec +3493788,2ffff +349378c,ff000000 +3493790,5321009a +3493794,da290c +3493798,8040d478 +349379c,8040cfec +34937a0,ffffffff +34937a4,ff000000 +34937a8,4d830055 +34937ac,b70900 +34937b0,8040d478 +34937b4,8040cfec +34937b8,ffffffff +34937bc,3000000 +34937c0,4d9200e6 +34937c4,d82500 +34937c8,8040d624 +34937cc,8040cfec +34937d0,ffffffff +34937d4,8000000 +34937d8,4d9300e6 +34937dc,d82600 +34937e0,8040d624 +34937e4,8040cfec +34937e8,ffffffff +34937ec,9000000 +34937f0,4d9400e6 +34937f4,d82700 +34937f8,8040d624 +34937fc,8040cfec +3493800,ffffffff +3493804,a000000 +3493808,4d84006f +349380c,17f6d00 +3493810,8040d478 +3493814,8040cfec +3493818,ffffffff +3493820,4d8500cc +3493824,17f6e00 +3493828,8040d478 +349382c,8040cfec +3493830,ffffffff +3493834,1000000 +3493838,4d8600f0 +349383c,17f6f00 +3493840,8040d478 +3493844,8040cfec +3493848,ffffffff +349384c,2000000 +3493850,3d7200c6 +3493854,bd1300 +3493858,8040d478 +349385c,8040cff4 +3493860,ffffffff +3493864,ff000000 +3493868,53820098 +349386c,df300c +3493870,8040d478 +3493874,8040cfec +3493878,ffffffff +349387c,ff000000 +3493880,53280014 +3493884,1505b0c +3493888,8040d478 +349388c,8040cfec +3493890,ffffffff +3493894,ff000000 +3493898,53290015 +349389c,1515c0c +34938a0,8040d478 +34938a4,8040cfec +34938a8,ffffffff +34938ac,ff000000 +34938b0,532a0016 +34938b4,1525d0c +34938b8,8040d478 +34938bc,8040cfec +34938c0,ffffffff +34938c4,ff000000 +34938c8,53500079 +34938cc,147580c +34938d0,8040d478 +34938d4,8040cfec +34938d8,ffffffff +34938dc,ff000000 +34938e0,4d8700f1 +34938e4,17f7100 +34938e8,8040d478 +34938ec,8040cfec +34938f0,ffffffff +34938f4,13000000 +34938f8,4d8800f2 +34938fc,17f7200 +3493900,8040d478 +3493904,8040cfec +3493908,ffffffff +349390c,14000000 +3493910,533d000c +3493914,f8430c +3493918,8040d478 +349391c,8040d0f4 +3493920,ffffffff +3493924,ff000000 +3493928,53040070 +349392c,158600c +3493930,8040d478 +3493934,8040cfec +3493938,ffffffff +349393c,ff000000 +3493940,530c0071 +3493944,158610c +3493948,8040d478 +349394c,8040cfec +3493950,ffffffff +3493954,ff000000 +3493958,53120072 +349395c,158620c +3493960,8040d478 +3493964,8040cfec +3493968,ffffffff +349396c,ff000000 +3493970,5b7100b4 +3493974,15c630e +3493978,8040d478 +349397c,8040cfec +3493980,ffffffff +3493984,ff000000 +3493988,530500ad +349398c,15d640c +3493990,8040d478 +3493994,8040cfec +3493998,ffffffff +349399c,ff000000 +34939a0,530d00ae +34939a4,15d650c +34939a8,8040d478 +34939ac,8040cfec +34939b0,ffffffff +34939b4,ff000000 +34939b8,531300af +34939bc,15d660c +34939c0,8040d478 +34939c4,8040cfec +34939c8,ffffffff +34939cc,ff000000 +34939d0,53470007 +34939d4,17b6c0c +34939d8,8040d478 +34939dc,8040cfec +34939e0,ffffffff +34939e4,ff000000 +34939e8,53480007 +34939ec,17b6c0c +34939f0,8040d478 +34939f4,8040cfec +34939f8,ffffffff +34939fc,ff000000 +3493a00,4d8a0037 +3493a04,c71b00 +3493a08,8040d478 +3493a0c,8040cfec +3493a10,ffffffff +3493a14,d000000 +3493a18,4d8b0037 +3493a1c,c71b00 +3493a20,8040d478 +3493a24,8040cfec +3493a28,ffffffff +3493a2c,d000000 +3493a30,4d8c0034 +3493a34,bb1200 +3493a38,8040d478 +3493a3c,8040cfec +3493a40,ffffffff +3493a44,c000000 +3493a48,4d8d0034 +3493a4c,bb1200 +3493a50,8040d478 +3493a54,8040cfec +3493a58,ffffffff +3493a5c,c000000 +3493a60,4d020032 +3493a64,ce2000 +3493a68,8040d640 +3493a6c,8040cfec +3493a70,ffffffff +3493a74,b000000 +3493a78,4d8f0032 +3493a7c,ce2000 +3493a80,8040d640 +3493a84,8040cfec +3493a88,ffffffff +3493a8c,b000000 +3493a90,4d900032 +3493a94,ce2000 +3493a98,8040d640 +3493a9c,8040cfec +3493aa0,ffffffff +3493aa4,b000000 +3493aa8,4d910032 +3493aac,ce2000 +3493ab0,8040d640 +3493ab4,8040cfec +3493ab8,ffffffff +3493abc,b000000 +3493ac0,4d9500dc +3493ac4,1194800 +3493ac8,8040d65c +3493acc,8040cfec +3493ad0,ffffffff +3493ad4,10000000 +3493ad8,4d960033 +3493adc,d92800 +3493ae0,8040d478 +3493ae4,8040cfec +3493ae8,ffffffff +3493aec,ff000000 +3493af0,4d970033 +3493af4,d92800 +3493af8,8040d478 +3493afc,8040cfec +3493b00,ffffffff +3493b04,ff000000 +3493b08,53190047 +3493b0c,f43f0c +3493b10,8040d478 +3493b14,8040cfec +3493b18,ffffffff +3493b1c,ff000000 +3493b20,531d007a +3493b24,174680c +3493b28,8040d478 +3493b2c,8040cfec +3493b30,ffffffff +3493b34,ff000000 +3493b38,531c005d +3493b3c,173670c +3493b40,8040d478 +3493b44,8040cfec +3493b48,ffffffff +3493b4c,ff000000 +3493b50,53200097 +3493b54,1766a0c +3493b58,8040d478 +3493b5c,8040cfec +3493b60,ffffffff +3493b64,ff000000 +3493b68,531e00f9 +3493b6c,176700c +3493b70,8040d478 +3493b74,8040cfec +3493b78,ffffffff +3493b7c,ff000000 +3493b80,537700f3 +3493b84,aa0200 +3493b88,8040d478 +3493b8c,8040cfec +3493b90,ffffffff +3493b94,ff000000 +3493b98,4d8400f4 +3493b9c,17f6d00 +3493ba0,8040d478 +3493ba4,8040cfec +3493ba8,ffffffff +3493bac,ff000000 +3493bb0,4d8500f5 +3493bb4,17f6e00 +3493bb8,8040d478 +3493bbc,8040cfec +3493bc0,ffffffff +3493bc4,ff000000 +3493bc8,4d8600f6 +3493bcc,17f6f00 +3493bd0,8040d478 +3493bd4,8040cfec +3493bd8,ffffffff +3493bdc,ff000000 +3493be0,4d8700f7 +3493be4,17f7100 +3493be8,8040d478 +3493bec,8040cfec +3493bf0,ffffffff +3493bf4,ff000000 +3493bf8,537a00fa +3493bfc,bd1400 +3493c00,8040d6f0 +3493c04,8040cff4 +3493c08,ffffffff +3493c0c,ff000000 +3493c10,53980090 +3493c14,c71b00 +3493c18,8040d478 +3493c1c,8040cfec +3493c20,ffffffff +3493c24,ff000000 +3493c28,53990091 +3493c2c,c71b00 +3493c30,8040d478 +3493c34,8040cfec +3493c38,ffffffff +3493c3c,ff000000 +3493c40,539a00a7 +3493c44,bb1200 +3493c48,8040d478 +3493c4c,8040cfec +3493c50,ffffffff +3493c54,ff000000 +3493c58,539b00a8 +3493c5c,bb1200 +3493c60,8040d478 +3493c64,8040cfec +3493c68,ffffffff +3493c6c,ff000000 +3493c70,5349006c +3493c74,17b730c +3493c78,8040d478 +3493c7c,8040cfec +3493c80,ffffffff +3493c84,ff000000 +3493c88,53419002 +3493c8c,c +3493c90,8040d478 +3493c94,8040d2b8 +3493c98,ffffffff +3493c9c,ff000000 +3493ca0,3e4190c2 +3493ca4,bd1400 +3493ca8,8040d478 +3493cac,8040cff4 +3493cb0,ffffffff +3493cb4,ff000000 +3493cb8,3e4190c6 +3493cbc,bd1300 +3493cc0,8040d478 +3493cc4,8040cff4 +3493cc8,ffffffff +3493ccc,ff000000 +3493cd0,534190fa +3493cd4,bd1400 +3493cd8,8040d478 +3493cdc,8040cff4 +3493ce0,ffffffff +3493ce4,ff000000 +3493ce8,ffffffff +3493cec,dd2d0c +3493cf0,8040d480 +3493cf4,8040cfec +3493cf8,ffffffff +3493cfc,ff000000 +3493d00,ffffffff +3493d04,147580c +3493d08,8040d494 +3493d0c,8040cfec +3493d10,ffffffff +3493d14,ff000000 +3493d18,ffffffff +3493d1c,bf180c +3493d20,8040d4c0 +3493d24,8040cfec +3493d28,ffffffff +3493d2c,ff000000 +3493d30,ffffffff +3493d34,e9350c +3493d38,8040d4ec +3493d3c,8040cfec +3493d40,ffffffff +3493d44,ff000000 +3493d48,ffffffff +3493d4c,e7330c +3493d50,8040d514 +3493d54,8040cfec +3493d58,ffffffff +3493d5c,ff000000 +3493d60,ffffffff +3493d64,d1220c +3493d68,8040d544 +3493d6c,8040cfec +3493d70,ffffffff +3493d74,ff000000 +3493d78,ffffffff +3493d7c,db2a0c +3493d80,8040d574 +3493d84,8040cfec +3493d88,ffffffff +3493d8c,ff000000 +3493d90,ffffffff +3493d94,bb1200 +3493d98,8040d58c +3493d9c,8040cfec +3493da0,ffffffff +3493da4,ff000000 +3493da8,ffffffff +3493dac,c71b00 +3493db0,8040d5a8 +3493db4,8040cfec +3493db8,ffffffff +3493dbc,ff000000 +3493dc0,ffffffff +3493dc4,d9280c +3493dc8,8040d5d4 +3493dcc,8040cfec +3493dd0,ffffffff +3493dd4,ff000000 +3493dd8,ffffffff +3493ddc,cd1e0c +3493de0,8040d5c4 +3493de4,8040cfec +3493de8,ffffffff +3493dec,ff000000 +3493df0,ffffffff +3493df4,10e460c +3493df8,8040d604 +3493dfc,8040cfec +3493e00,ffffffff +3493e04,ff000000 +3493e08,53410043 +3493e0c,c6010c +3493e10,8040d478 +3493e14,8040d100 +3493e18,15ffff +3493e1c,ff000000 +3493e20,53410044 +3493e24,c6010c +3493e28,8040d478 +3493e2c,8040d100 +3493e30,16ffff +3493e34,ff000000 +3493e38,53410045 +3493e3c,c6010c +3493e40,8040d478 +3493e44,8040d100 +3493e48,17ffff +3493e4c,ff000000 +3493e50,53410046 +3493e54,1776b0c +3493e58,8040d478 +3493e5c,8040d100 +3493e60,18ffff +3493e64,ff000000 +3493e68,53410047 +3493e6c,f43f0c +3493e70,8040d478 +3493e74,8040d100 +3493e78,19ffff +3493e7c,ff000000 +3493e80,5341005d +3493e84,173670c +3493e88,8040d478 +3493e8c,8040d100 +3493e90,1cffff +3493e94,ff000000 +3493e98,5341007a +3493e9c,174680c +3493ea0,8040d478 +3493ea4,8040d100 +3493ea8,1dffff +3493eac,ff000000 +3493eb0,534100f9 +3493eb4,176700c +3493eb8,8040d478 +3493ebc,8040d100 +3493ec0,1effff +3493ec4,ff000000 +3493ec8,53410097 +3493ecc,1766a0c +3493ed0,8040d478 +3493ed4,8040d100 +3493ed8,20ffff +3493edc,ff000000 +3493ee0,53410006 +3493ee4,b90a02 +3493ee8,8040d478 +3493eec,8040d138 +3493ef0,10003 +3493ef4,ff000000 +3493ef8,5341001c +3493efc,b90a02 +3493f00,8040d478 +3493f04,8040d138 +3493f08,10004 +3493f0c,ff000000 +3493f10,5341001d +3493f14,b90a02 +3493f18,8040d478 +3493f1c,8040d138 +3493f20,10005 +3493f24,ff000000 +3493f28,5341001e +3493f2c,b90a02 +3493f30,8040d478 +3493f34,8040d138 +3493f38,10006 +3493f3c,ff000000 +3493f40,5341002a +3493f44,b90a02 +3493f48,8040d478 +3493f4c,8040d138 +3493f50,10007 +3493f54,ff000000 +3493f58,53410061 +3493f5c,b90a02 +3493f60,8040d478 +3493f64,8040d138 +3493f68,1000a +3493f6c,ff000000 +3493f70,53410062 +3493f74,b80b00 +3493f78,8040d478 +3493f7c,8040d138 +3493f80,20000 +3493f84,ff000000 +3493f88,53410063 +3493f8c,b80b00 +3493f90,8040d478 +3493f94,8040d138 +3493f98,20001 +3493f9c,ff000000 +3493fa0,53410064 +3493fa4,b80b00 +3493fa8,8040d478 +3493fac,8040d138 +3493fb0,20002 +3493fb4,ff000000 +3493fb8,53410065 +3493fbc,b80b00 +3493fc0,8040d478 +3493fc4,8040d138 +3493fc8,20003 +3493fcc,ff000000 +3493fd0,5341007c +3493fd4,b80b00 +3493fd8,8040d478 +3493fdc,8040d138 +3493fe0,20004 +3493fe4,ff000000 +3493fe8,5341007d +3493fec,b80b00 +3493ff0,8040d478 +3493ff4,8040d138 +3493ff8,20005 +3493ffc,ff000000 +3494000,5341007e +3494004,b80b00 +3494008,8040d478 +349400c,8040d138 +3494010,20006 +3494014,ff000000 +3494018,5341007f +349401c,b80b00 +3494020,8040d478 +3494024,8040d138 +3494028,20007 +349402c,ff000000 +3494030,534100a2 +3494034,b80b00 +3494038,8040d478 +349403c,8040d138 +3494040,20008 +3494044,ff000000 +3494048,53410087 +349404c,b80b00 +3494050,8040d478 +3494054,8040d138 +3494058,20009 +349405c,ff000000 +3494060,53410088 +3494064,c81c00 +3494068,8040d478 +349406c,8040d138 +3494070,40000 +3494074,ff000000 +3494078,53410089 +349407c,c81c00 +3494080,8040d478 +3494084,8040d138 +3494088,40001 +349408c,ff000000 +3494090,5341008a +3494094,c81c00 +3494098,8040d478 +349409c,8040d138 +34940a0,40002 +34940a4,ff000000 +34940a8,5341008b +34940ac,c81c00 +34940b0,8040d478 +34940b4,8040d138 +34940b8,40003 +34940bc,ff000000 +34940c0,5341008c +34940c4,c81c00 +34940c8,8040d478 +34940cc,8040d138 +34940d0,40004 +34940d4,ff000000 +34940d8,5341008e +34940dc,c81c00 +34940e0,8040d478 +34940e4,8040d138 +34940e8,40005 +34940ec,ff000000 +34940f0,5341008f +34940f4,c81c00 +34940f8,8040d478 +34940fc,8040d138 +3494100,40006 +3494104,ff000000 +3494108,534100a3 +349410c,c81c00 +3494110,8040d478 +3494114,8040d138 +3494118,40007 +349411c,ff000000 +3494120,534100a5 +3494124,c81c00 +3494128,8040d478 +349412c,8040d138 +3494130,40008 +3494134,ff000000 +3494138,53410092 +349413c,c81c00 +3494140,8040d478 +3494144,8040d138 +3494148,40009 +349414c,ff000000 +3494150,53410093 +3494154,aa020d +3494158,8040d478 +349415c,8040d14c +3494160,3ffff +3494164,ff000000 +3494168,53410094 +349416c,aa020d +3494170,8040d478 +3494174,8040d14c +3494178,4ffff +349417c,ff000000 +3494180,53410095 +3494184,aa020d +3494188,8040d478 +349418c,8040d14c +3494190,5ffff +3494194,ff000000 +3494198,534100a6 +349419c,aa020d +34941a0,8040d478 +34941a4,8040d14c +34941a8,6ffff +34941ac,ff000000 +34941b0,534100a9 +34941b4,aa020d +34941b8,8040d478 +34941bc,8040d14c +34941c0,7ffff +34941c4,ff000000 +34941c8,5341009b +34941cc,aa020d +34941d0,8040d478 +34941d4,8040d14c +34941d8,8ffff +34941dc,ff000000 +34941e0,5341009f +34941e4,aa020d +34941e8,8040d478 +34941ec,8040d14c +34941f0,bffff +34941f4,ff000000 +34941f8,534100a0 +34941fc,aa020d +3494200,8040d478 +3494204,8040d14c +3494208,cffff +349420c,ff000000 +3494210,534100a1 +3494214,aa020d +3494218,8040d478 +349421c,8040d14c +3494220,dffff +3494224,ff000000 +3494228,534100e9 +349422c,194130c +3494230,8040d478 +3494234,8040d238 +3494238,ffffffff +349423c,ff000000 +3494240,534100e4 +3494244,cd1e0c +3494248,8040d478 +349424c,8040d254 +3494250,ffffffff +3494254,ff000000 +3494258,534100e8 +349425c,cd1f0c +3494260,8040d478 +3494264,8040d270 +3494268,ffffffff +349426c,ff000000 +3494270,53410073 +3494274,b6030c +3494278,8040d478 +349427c,8040d2a0 +3494280,6ffff +3494284,ff000000 +3494288,53410074 +349428c,b6040c +3494290,8040d478 +3494294,8040d2a0 +3494298,7ffff +349429c,ff000000 +34942a0,53410075 +34942a4,b6050c +34942a8,8040d478 +34942ac,8040d2a0 +34942b0,8ffff +34942b4,ff000000 +34942b8,53410076 +34942bc,b6060c +34942c0,8040d478 +34942c4,8040d2a0 +34942c8,9ffff +34942cc,ff000000 +34942d0,53410077 +34942d4,b6070c +34942d8,8040d478 +34942dc,8040d2a0 +34942e0,affff +34942e4,ff000000 +34942e8,53410078 +34942ec,b6080c +34942f0,8040d478 +34942f4,8040d2a0 +34942f8,bffff +34942fc,ff000000 +3494300,534100d4 +3494304,b6040c +3494308,8040d478 +349430c,8040d2a0 +3494310,cffff +3494314,ff000000 +3494318,534100d2 +349431c,b6060c +3494320,8040d478 +3494324,8040d2a0 +3494328,dffff +349432c,ff000000 +3494330,534100d1 +3494334,b6030c +3494338,8040d478 +349433c,8040d2a0 +3494340,effff +3494344,ff000000 +3494348,534100d3 +349434c,b6080c +3494350,8040d478 +3494354,8040d2a0 +3494358,fffff +349435c,ff000000 +3494360,534100d5 +3494364,b6050c +3494368,8040d478 +349436c,8040d2a0 +3494370,10ffff +3494374,ff000000 +3494378,534100d6 +349437c,b6070c +3494380,8040d478 +3494384,8040d2a0 +3494388,11ffff +349438c,ff000000 +3494390,534100f8 +3494394,d1230c +3494398,8040d478 +349439c,8040d0bc +34943a0,3ffff +34943a4,ff000000 +34943a8,53149099 +34943ac,10b450c +34943b0,8040d478 +34943b4,8040cfec +34943b8,ffffffff +34943bc,ff000000 +34943c0,53419048 +34943c4,f33e0c +34943c8,8040d478 +34943cc,8040d2d4 +34943d0,ffffffff +34943d4,ff000000 +34943d8,53419003 +34943dc,193760c +34943e0,8040d478 +34943e4,8040d000 +34943e8,ffffffff +34943ec,ff000000 +34943f0,53419010 +34943f4,195770d +34943f8,8040d478 +34943fc,8040d19c +3494400,3ffff +3494404,ff000000 +3494408,53419011 +349440c,195770d +3494410,8040d478 +3494414,8040d19c +3494418,4ffff +349441c,ff000000 +3494420,53419012 +3494424,195770d +3494428,8040d478 +349442c,8040d19c +3494430,5ffff +3494434,ff000000 +3494438,53419013 +349443c,195770d +3494440,8040d478 +3494444,8040d19c +3494448,6ffff +349444c,ff000000 +3494450,53419014 +3494454,195770d +3494458,8040d478 +349445c,8040d19c +3494460,7ffff +3494464,ff000000 +3494468,53419015 +349446c,195770d +3494470,8040d478 +3494474,8040d19c +3494478,8ffff +349447c,ff000000 +3494480,53419016 +3494484,195770d +3494488,8040d478 +349448c,8040d19c +3494490,bffff +3494494,ff000000 +3494498,53419017 +349449c,195770d +34944a0,8040d478 +34944a4,8040d19c +34944a8,cffff +34944ac,ff000000 +34944b0,53419018 +34944b4,195770d +34944b8,8040d478 +34944bc,8040d19c +34944c0,dffff +34944c4,ff000000 +34944c8,53419097 +34944cc,ef3b0c +34944d0,8040d478 +34944d4,8040cfec +34944d8,ffffffff +34944dc,ff000000 +34944e0,4d419098 +34944e4,ef3b00 +34944e8,8040d478 +34944ec,8040cfec +34944f0,ffffffff +34944f4,4000000 +34944fc,948 +3494504,fffc +3494508,ff98 +3494510,25f +349451c,ff54 +3494520,32 +3494524,ff42 +3494528,2b9 +3494534,339 +3494538,5 +349453c,b +3494540,ff56 +3494544,39 +3494548,c0 +349454c,2b7 +3494558,331 +349455c,8 +3494560,4 +3494568,ff99 +349456c,fff9 +3494570,3e4 +3494574,ff37 +3494578,ffff +349457c,fe93 +3494580,fd62 +3494594,2b8 +3494598,ff51 +349459c,1d2 +34945a0,245 +34945ac,202 +34945b8,2b8 +34945bc,ff51 +34945c0,fe2e +34945c4,241 +34945d0,20d +34945dc,291 +34945e0,fdf5 +34945e4,16f +34945f4,ffc7 +34945f8,d31 +349460c,3b1 +3494618,fe71 +349461c,45 +3494620,ff07 +3494624,51a +3494630,4e8 +3494634,5 +3494638,b +349463c,fe74 +3494640,4c +3494644,108 +3494648,518 +3494654,4e9 +3494658,6 +349465c,3 +3494664,15 +3494668,fff9 +349466c,570 +3494670,fefd +3494678,fed6 +349467c,fd44 +3494690,40f +3494694,ff54 +3494698,2a8 +349469c,397 +34946a8,2f2 +34946b4,40f +34946b8,ff53 +34946bc,fd58 +34946c0,397 +34946cc,2f2 +34946d8,3d2 +34946dc,fd4c +34946e0,156 +3494700,10000 +3494710,20000 +3494720,30000 +3494730,40000 +3494740,50000 +3494750,60000 +3494760,70000 +3494770,80000 +3494780,90000 +3494790,a0000 +34947a0,b0000 +34947b0,c0000 +34947c0,d0000 +3494830,d +3494834,41200000 +3494838,41200000 +349483c,80411fb8 +3494840,80411fa8 +3494848,df000000 +3494850,80112f1a +3494854,80112f14 +3494858,80112f0e +349485c,80112f08 +3494860,8011320a +3494864,80113204 +3494868,801131fe +349486c,801131f8 +3494870,801131f2 +3494874,801131ec +3494878,801131e6 +349487c,801131e0 +3494880,8012be1e +3494884,8012be20 +3494888,8012be1c +349488c,8012be12 +3494890,8012be14 +3494894,8012be10 +3494898,801c7672 +349489c,801c767a +34948a0,801c7950 +34948a4,8011bd50 +34948a8,8011bd38 +34948ac,801d8b9e +34948b0,801d8b92 +34948b4,c80000 +34948bc,ff0046 +34948c0,320000 +34948c4,a +34948c8,5 +34948cc,1 +34948d0,8008ffc0 +3497f20,db000 +3497f24,db000 +3497f28,db000 +3497f2c,cb000 +3497f30,cb000 +3497f34,ca000 +3497f3c,db000 +3497f40,db000 +3497f58,e8ac00 +3497f5c,e8ac00 +3497f60,e8ac00 +3497f64,e8ac00 +3497f8c,d77d0 +3497f90,2e3ab0 +3497f94,7d0c90 +3497f98,8ffffffd +3497f9c,c96e00 +3497fa0,2e4ac00 +3497fa4,effffff4 +3497fa8,ab0e500 +3497fac,c95e000 +3497fb0,e59c000 +3497fc8,79000 +3497fcc,5ceeb40 +3497fd0,cc8a990 +3497fd4,da79000 +3497fd8,8ecb400 +3497fdc,4adda0 +3497fe0,797e2 +3497fe4,c88aae0 +3497fe8,6ceed70 +3497fec,79000 +3497ff0,79000 +3498000,6dea0000 +3498004,c94d6000 +3498008,c94d6033 +349800c,6deb6bc6 +3498010,8cb600 +3498014,7ca4cec4 +3498018,3109c3bb +349801c,9c3bb +3498020,2ced4 +3498038,4cefb00 +349803c,ad50000 +3498040,8e30000 +3498044,9ec0000 +3498048,7e4db0ab +349804c,bb05e8aa +3498050,bc008ed6 +3498054,7e936ed0 +3498058,8ded9ea +3498070,ca000 +3498074,ca000 +3498078,ca000 +349807c,ca000 +34980a0,c900 +34980a4,7e200 +34980a8,cb000 +34980ac,e8000 +34980b0,6f3000 +34980b4,8e0000 +34980b8,8e0000 +34980bc,6f4000 +34980c0,e8000 +34980c4,cb000 +34980c8,7e200 +34980cc,c900 +34980d8,bb0000 +34980dc,5e4000 +34980e0,ca000 +34980e4,ad000 +34980e8,7e100 +34980ec,6f400 +34980f0,6f400 +34980f4,7e100 +34980f8,ad000 +34980fc,ca000 +3498100,5e4000 +3498104,bb0000 +3498118,a8000 +349811c,c8a8ab0 +3498120,3beda10 +3498124,3beda10 +3498128,c8a8ab0 +349812c,a8000 +3498154,ca000 +3498158,ca000 +349815c,ca000 +3498160,affffff8 +3498164,ca000 +3498168,ca000 +349816c,ca000 +34981a4,dd000 +34981a8,ec000 +34981ac,4f8000 +34981b0,9d0000 +34981d4,dffb00 +3498214,ec000 +3498218,ec000 +3498230,bc0 +3498234,4e60 +3498238,bc00 +349823c,3e800 +3498240,ad000 +3498244,1e9000 +3498248,9e2000 +349824c,da0000 +3498250,7e30000 +3498254,cb00000 +3498258,6e500000 +3498268,3ceeb00 +349826c,bd57e90 +3498270,e900bd0 +3498274,5f7009e0 +3498278,6f6cb9e0 +349827c,5f7009e0 +3498280,e900bd0 +3498284,bd57e90 +3498288,3ceeb00 +34982a0,affe000 +34982a4,8e000 +34982a8,8e000 +34982ac,8e000 +34982b0,8e000 +34982b4,8e000 +34982b8,8e000 +34982bc,8e000 +34982c0,8ffffe0 +34982d8,8deea00 +34982dc,c837e90 +34982e0,cc0 +34982e4,2ea0 +34982e8,bd20 +34982ec,bd400 +34982f0,bd4000 +34982f4,bd40000 +34982f8,2fffffd0 +3498310,7ceea00 +3498314,c837e90 +3498318,cb0 +349831c,27e90 +3498320,bffb00 +3498324,27da0 +3498328,ad0 +349832c,5c627db0 +3498330,9deeb30 +3498348,2de00 +349834c,bde00 +3498350,7d9e00 +3498354,2d79e00 +3498358,bb09e00 +349835c,6e409e00 +3498360,9ffffff7 +3498364,9e00 +3498368,9e00 +3498380,cffff50 +3498384,ca00000 +3498388,ca00000 +349838c,ceeea00 +3498390,38e90 +3498394,bc0 +3498398,bc0 +349839c,5c638e90 +34983a0,9deda00 +34983b8,aeec30 +34983bc,ae83980 +34983c0,e900000 +34983c4,4faeec40 +34983c8,6fd55dc0 +34983cc,5f9009e0 +34983d0,e9009e0 +34983d4,cd55dc0 +34983d8,3ceec40 +34983f0,5fffffd0 +34983f4,da0 +34983f8,7e40 +34983fc,cc00 +3498400,4e800 +3498404,ad000 +3498408,da000 +349840c,8e4000 +3498410,cc0000 +3498428,5ceec30 +349842c,dc45db0 +3498430,e900bd0 +3498434,bc45d90 +3498438,4dffc20 +349843c,1db45cc0 +3498440,5f6009e0 +3498444,2eb35cd0 +3498448,7deec50 +3498460,6deeb00 +3498464,db37e90 +3498468,5f500bd0 +349846c,5f500be0 +3498470,db37ee0 +3498474,6dedbe0 +3498478,bc0 +349847c,9749e70 +3498480,5ded800 +34984a0,ec000 +34984a4,ec000 +34984b4,ec000 +34984b8,ec000 +34984d8,ec000 +34984dc,ec000 +34984ec,dd000 +34984f0,ec000 +34984f4,4f8000 +34984f8,9d0000 +3498510,29c8 +3498514,7bed93 +3498518,8dda4000 +349851c,8dda4000 +3498520,7bec93 +3498524,29c8 +349854c,affffff8 +3498558,affffff8 +3498580,ac810000 +3498584,4adeb600 +3498588,6add6 +349858c,6add6 +3498590,4adeb600 +3498594,ac810000 +34985b0,4beec30 +34985b4,9a46ea0 +34985b8,1da0 +34985bc,2cd30 +34985c0,cc100 +34985c4,e9000 +34985cc,e9000 +34985d0,e9000 +34985e8,1aeed70 +34985ec,cd739e4 +34985f0,7e2000c9 +34985f4,ba0aeeca +34985f8,d76e64da +34985fc,d69c00aa +3498600,d76e64da +3498604,ba0aeeca +3498608,6e400000 +349860c,ad83000 +3498610,8dee90 +3498620,3ed000 +3498624,9de600 +3498628,cbcb00 +349862c,3e8ad00 +3498630,8e26f60 +3498634,cc00ea0 +3498638,2effffd0 +349863c,8e5008f5 +3498640,cd0001ea +3498658,effec40 +349865c,e905dc0 +3498660,e900ae0 +3498664,e905dc0 +3498668,efffd50 +349866c,e904bd2 +3498670,e9005f6 +3498674,e904be3 +3498678,effed80 +3498690,9ded80 +3498694,8e936b0 +3498698,db00000 +349869c,3f900000 +34986a0,5f700000 +34986a4,1e900000 +34986a8,db00000 +34986ac,8e947b0 +34986b0,9ded80 +34986c8,5ffed800 +34986cc,5f65ae80 +34986d0,5f600cd0 +34986d4,5f6009e0 +34986d8,5f6009f0 +34986dc,5f6009e0 +34986e0,5f600cd0 +34986e4,5f65ae80 +34986e8,5ffed800 +3498700,dffffe0 +3498704,db00000 +3498708,db00000 +349870c,db00000 +3498710,dffffc0 +3498714,db00000 +3498718,db00000 +349871c,db00000 +3498720,dfffff0 +3498738,bfffff4 +349873c,bd00000 +3498740,bd00000 +3498744,bd00000 +3498748,bffffc0 +349874c,bd00000 +3498750,bd00000 +3498754,bd00000 +3498758,bd00000 +3498770,1aeed60 +3498774,be738a0 +3498778,4e900000 +349877c,8f400000 +3498780,9f10bff2 +3498784,7f4007f2 +3498788,4e9007f2 +349878c,be739f2 +3498790,1beed90 +34987a8,5f6009e0 +34987ac,5f6009e0 +34987b0,5f6009e0 +34987b4,5f6009e0 +34987b8,5fffffe0 +34987bc,5f6009e0 +34987c0,5f6009e0 +34987c4,5f6009e0 +34987c8,5f6009e0 +34987e0,dffffb0 +34987e4,db000 +34987e8,db000 +34987ec,db000 +34987f0,db000 +34987f4,db000 +34987f8,db000 +34987fc,db000 +3498800,dffffb0 +3498818,cfff40 +349881c,7f40 +3498820,7f40 +3498824,7f40 +3498828,7f40 +349882c,7f30 +3498830,75009e00 +3498834,8d64dc00 +3498838,2beec500 +3498850,5f6009e7 +3498854,5f609e70 +3498858,5f69e700 +349885c,5fbe8000 +3498860,5fedb000 +3498864,5f87e800 +3498868,5f60ae40 +349886c,5f601dc0 +3498870,5f6006ea +3498888,cc00000 +349888c,cc00000 +3498890,cc00000 +3498894,cc00000 +3498898,cc00000 +349889c,cc00000 +34988a0,cc00000 +34988a4,cc00000 +34988a8,cfffff7 +34988c0,afa00cf8 +34988c4,aed02ee8 +34988c8,add59be8 +34988cc,adaac8e8 +34988d0,ad5de1e8 +34988d4,ad0db0e8 +34988d8,ad0000e8 +34988dc,ad0000e8 +34988e0,ad0000e8 +34988f8,5fc008e0 +34988fc,5fe608e0 +3498900,5fcb08e0 +3498904,5f7e48e0 +3498908,5f5ca8e0 +349890c,5f57e8e0 +3498910,5f50dce0 +3498914,5f509ee0 +3498918,5f502ee0 +3498930,4ceeb20 +3498934,cd56ea0 +3498938,3e800ae0 +349893c,7f5008f2 +3498940,7f4008f4 +3498944,7f5008f2 +3498948,3e800ae0 +349894c,cd56eb0 +3498950,4ceeb20 +3498968,dffed60 +349896c,db05ce2 +3498970,db006f6 +3498974,db006f6 +3498978,db05ce2 +349897c,dffed60 +3498980,db00000 +3498984,db00000 +3498988,db00000 +34989a0,4ceeb20 +34989a4,cd56ea0 +34989a8,3e800ae0 +34989ac,7f5008f2 +34989b0,7f4008f4 +34989b4,7f5008f1 +34989b8,3e800ad0 +34989bc,cd56ea0 +34989c0,4cefc20 +34989c4,ae50 +34989c8,c80 +34989d8,5ffeeb20 +34989dc,5f717eb0 +34989e0,5f700cd0 +34989e4,5f716ea0 +34989e8,5fffea00 +34989ec,5f72ae40 +34989f0,5f700db0 +34989f4,5f7008e5 +34989f8,5f7000db +3498a10,6ceeb30 +3498a14,dc45a90 +3498a18,4f600000 +3498a1c,ec60000 +3498a20,5ceeb40 +3498a24,6cc0 +3498a28,8e0 +3498a2c,c735cd0 +3498a30,8deec50 +3498a48,cffffffb +3498a4c,db000 +3498a50,db000 +3498a54,db000 +3498a58,db000 +3498a5c,db000 +3498a60,db000 +3498a64,db000 +3498a68,db000 +3498a80,4f7009e0 +3498a84,4f7009e0 +3498a88,4f7009e0 +3498a8c,4f7009e0 +3498a90,4f7009e0 +3498a94,3f7009e0 +3498a98,2e700ad0 +3498a9c,dc45dc0 +3498aa0,5ceec40 +3498ab8,ad0003e8 +3498abc,6f5008e3 +3498ac0,e900bc0 +3498ac4,bc00d90 +3498ac8,8e15e40 +3498acc,2e7ad00 +3498ad0,cbca00 +3498ad4,9de600 +3498ad8,3ed000 +3498af0,e80000ad +3498af4,da0000cb +3498af8,cb0000da +3498afc,ac0ec0e8 +3498b00,8d6de1e5 +3498b04,6e9bd8e0 +3498b08,1ec8acd0 +3498b0c,de37ec0 +3498b10,cd00ea0 +3498b28,6e7007e7 +3498b2c,ad21db0 +3498b30,2daad20 +3498b34,7ee700 +3498b38,3ee200 +3498b3c,bdda00 +3498b40,7e67e60 +3498b44,3ea00bd0 +3498b48,bd2004e9 +3498b60,ae2005e8 +3498b64,2da00cc0 +3498b68,7e57e50 +3498b6c,ccda00 +3498b70,4ed200 +3498b74,db000 +3498b78,db000 +3498b7c,db000 +3498b80,db000 +3498b98,efffff8 +3498b9c,bd3 +3498ba0,7e70 +3498ba4,3ea00 +3498ba8,bd100 +3498bac,8e5000 +3498bb0,4e90000 +3498bb4,cc00000 +3498bb8,1ffffffa +3498bc8,4ffc00 +3498bcc,4f5000 +3498bd0,4f5000 +3498bd4,4f5000 +3498bd8,4f5000 +3498bdc,4f5000 +3498be0,4f5000 +3498be4,4f5000 +3498be8,4f5000 +3498bec,4f5000 +3498bf0,4f5000 +3498bf4,4ffc00 +3498c08,6e500000 +3498c0c,cb00000 +3498c10,7e30000 +3498c14,da0000 +3498c18,9e2000 +3498c1c,1e9000 +3498c20,ad000 +3498c24,3e800 +3498c28,bc00 +3498c2c,4e60 +3498c30,bc0 +3498c38,dfe000 +3498c3c,8e000 +3498c40,8e000 +3498c44,8e000 +3498c48,8e000 +3498c4c,8e000 +3498c50,8e000 +3498c54,8e000 +3498c58,8e000 +3498c5c,8e000 +3498c60,8e000 +3498c64,dfe000 +3498c78,5ed200 +3498c7c,dcdb00 +3498c80,ad25e80 +3498c84,7e5007e5 +3498cdc,fffffffd +3498ce4,2ca0000 +3498ce8,2c9000 +3498d28,5ceeb10 +3498d2c,b936da0 +3498d30,bc0 +3498d34,8deffc0 +3498d38,3e930bd0 +3498d3c,4f827ed0 +3498d40,aeedbd0 +3498d50,d900000 +3498d54,d900000 +3498d58,d900000 +3498d5c,d900000 +3498d60,dbdec40 +3498d64,de65dc0 +3498d68,db008e0 +3498d6c,da007f2 +3498d70,db008e0 +3498d74,de64db0 +3498d78,dbdec40 +3498d98,8ded70 +3498d9c,7e936a0 +3498da0,cc00000 +3498da4,db00000 +3498da8,cc00000 +3498dac,7e936a0 +3498db0,8ded70 +3498dc0,bc0 +3498dc4,bc0 +3498dc8,bc0 +3498dcc,bc0 +3498dd0,5dedcc0 +3498dd4,dc48ec0 +3498dd8,5f600cc0 +3498ddc,7f300bc0 +3498de0,5f600cc0 +3498de4,dc48ec0 +3498de8,5dedcc0 +3498e08,3beec30 +3498e0c,cd54cc0 +3498e10,4f6007e0 +3498e14,6ffffff3 +3498e18,4f500000 +3498e1c,cc538c0 +3498e20,3beec60 +3498e30,5ded0 +3498e34,cb200 +3498e38,d9000 +3498e3c,e8000 +3498e40,dffffd0 +3498e44,e8000 +3498e48,e8000 +3498e4c,e8000 +3498e50,e8000 +3498e54,e8000 +3498e58,e8000 +3498e78,5dedcc0 +3498e7c,dc48ec0 +3498e80,5f600cc0 +3498e84,7f300bc0 +3498e88,5f600cc0 +3498e8c,dc48ec0 +3498e90,5dedcb0 +3498e94,ca0 +3498e98,9947e60 +3498e9c,4cee900 +3498ea0,da00000 +3498ea4,da00000 +3498ea8,da00000 +3498eac,da00000 +3498eb0,dbded40 +3498eb4,de65da0 +3498eb8,db00bc0 +3498ebc,da00bc0 +3498ec0,da00bc0 +3498ec4,da00bc0 +3498ec8,da00bc0 +3498ed8,bc000 +3498ee8,9ffc000 +3498eec,bc000 +3498ef0,bc000 +3498ef4,bc000 +3498ef8,bc000 +3498efc,bc000 +3498f00,effffe0 +3498f10,7e000 +3498f20,7ffe000 +3498f24,7e000 +3498f28,7e000 +3498f2c,7e000 +3498f30,7e000 +3498f34,7e000 +3498f38,7e000 +3498f3c,7e000 +3498f40,1bd000 +3498f44,dfe7000 +3498f48,bc00000 +3498f4c,bc00000 +3498f50,bc00000 +3498f54,bc00000 +3498f58,bc03dc2 +3498f5c,bc3db00 +3498f60,bddc000 +3498f64,bfce500 +3498f68,bd0cd10 +3498f6c,bc03db0 +3498f70,bc007e8 +3498f80,eff4000 +3498f84,5f4000 +3498f88,5f4000 +3498f8c,5f4000 +3498f90,5f4000 +3498f94,5f4000 +3498f98,5f4000 +3498f9c,5f4000 +3498fa0,4f5000 +3498fa4,ea000 +3498fa8,8efb0 +3498fc8,8dddaec0 +3498fcc,8e4dc5e4 +3498fd0,8d0cb0e6 +3498fd4,8d0ba0e7 +3498fd8,8d0ba0e7 +3498fdc,8d0ba0e7 +3498fe0,8d0ba0e7 +3499000,dbded40 +3499004,de65da0 +3499008,db00bc0 +349900c,da00bc0 +3499010,da00bc0 +3499014,da00bc0 +3499018,da00bc0 +3499038,4ceeb20 +349903c,cd56da0 +3499040,1e700ad0 +3499044,5f6008e0 +3499048,1e700ad0 +349904c,cd46db0 +3499050,4ceeb20 +3499070,dbdec30 +3499074,de65db0 +3499078,db009e0 +349907c,da007e0 +3499080,db008e0 +3499084,de65db0 +3499088,dbeec40 +349908c,d900000 +3499090,d900000 +3499094,d900000 +34990a8,4cedcc0 +34990ac,cc47ec0 +34990b0,1e700cc0 +34990b4,5f600bc0 +34990b8,2e700cc0 +34990bc,cc47ec0 +34990c0,5cedbc0 +34990c4,ac0 +34990c8,ac0 +34990cc,ac0 +34990e0,ccdef9 +34990e4,ce8300 +34990e8,cb0000 +34990ec,ca0000 +34990f0,ca0000 +34990f4,ca0000 +34990f8,ca0000 +3499118,4ceea10 +349911c,bd45b60 +3499120,bd40000 +3499124,3bddb20 +3499128,4da0 +349912c,b945ea0 +3499130,5ceeb20 +3499148,8e0000 +349914c,8e0000 +3499150,6fffffb0 +3499154,8e0000 +3499158,8e0000 +349915c,8e0000 +3499160,8e0000 +3499164,6e7000 +3499168,befb0 +3499188,da00bc0 +349918c,da00bc0 +3499190,da00bc0 +3499194,da00bc0 +3499198,da00bc0 +349919c,bd47ec0 +34991a0,5dedbc0 +34991c0,6e3007e3 +34991c4,d900bc0 +34991c8,ad01e80 +34991cc,5e48e20 +34991d0,dacb00 +34991d4,9de700 +34991d8,3ee000 +34991f8,e80000ac +34991fc,ca0000ca +3499200,ac0db0e7 +3499204,6e3dd5e2 +3499208,eabcad0 +349920c,ce79eb0 +3499210,ae15f80 +3499230,3da00bc0 +3499234,6e69e40 +3499238,9ee700 +349923c,2ed000 +3499240,ccda00 +3499244,9e46e70 +3499248,6e7009e4 +3499268,6e5005e5 +349926c,da00bd0 +3499270,9e00e90 +3499274,3e78e30 +3499278,cccc00 +349927c,7ee700 +3499280,de000 +3499284,da000 +3499288,8e5000 +349928c,dea0000 +34992a0,bffffc0 +34992a4,5e70 +34992a8,3d900 +34992ac,cb000 +34992b0,bd2000 +34992b4,9e40000 +34992b8,dffffc0 +34992c8,6dea0 +34992cc,bd300 +34992d0,cb000 +34992d4,cb000 +34992d8,5ea000 +34992dc,bfd2000 +34992e0,7e9000 +34992e4,db000 +34992e8,cb000 +34992ec,cb000 +34992f0,bd400 +34992f4,5dea0 +3499300,ca000 +3499304,ca000 +3499308,ca000 +349930c,ca000 +3499310,ca000 +3499314,ca000 +3499318,ca000 +349931c,ca000 +3499320,ca000 +3499324,ca000 +3499328,ca000 +349932c,ca000 +3499330,ca000 +3499338,bed3000 +349933c,4e9000 +3499340,da000 +3499344,ca000 +3499348,bc400 +349934c,5efa0 +3499350,bd500 +3499354,cb000 +3499358,da000 +349935c,da000 +3499360,5e8000 +3499364,bec2000 +3499388,5ded83a7 +349938c,9838dec3 +3499400,7f024429 +3499404,3c334133 +3499408,41334633 +349940c,44297f02 +349943c,5409 +3499440,4dc548ff +3499444,41ff43ff +3499448,47ff49ff +349944c,43ff20c5 +3499450,c0000 +349947c,3f75 +3499480,49ff33ff +3499484,28ff2dff +3499488,33ff39ff +349948c,3cff00ff +3499490,770000 +34994bc,329d +34994c0,37ff1bff +34994c4,21ff28ff +34994c8,2fff35ff +34994cc,3cff00ff +34994d0,9d0000 +34994fc,329e +3499500,35ff21ff +3499504,28ff06ff +3499508,9ff3cff +349950c,42ff00ff +3499510,9e0000 +349953c,359e +3499540,39ff27ff +3499544,2eff00ff +3499548,2ff42ff +349954c,48ff00ff +3499550,9e0000 +349957c,3a9e +3499580,3eff2eff +3499584,35ff00ff +3499588,dff48ff +349958c,4dff00ff +3499590,9e0000 +34995bc,3e9e +34995c0,42ff35ff +34995c4,3bff1bff +34995c8,27ff4dff +34995cc,53ff00ff +34995d0,9e0000 +34995fc,439e +3499600,47ff3bff +3499604,41ff47ff +3499608,4dff52ff +349960c,58ff00ff +3499610,9e0000 +349963c,4d9e +3499640,4dff41ff +3499644,47ff4dff +3499648,52ff57ff +349964c,5cff00ff +3499650,9e0000 +349966c,3f04474f +3499670,3e663e66 +3499674,43664666 +3499678,48664d66 +349967c,57665bc5 +3499680,53ff47ff +3499684,4dff52ff +3499688,57ff5cff +349968c,60ff0eff +3499690,19c56666 +3499694,66666466 +3499698,61665f66 +349969c,5c665a66 +34996a0,504f3f04 +34996a8,6605 +34996ac,4ec34bff +34996b0,41ff41ff +34996b4,45ff48ff +34996b8,4cff4fff +34996bc,55ff59ff +34996c0,4fff4dff +34996c4,52ff57ff +34996c8,5cff60ff +34996cc,64ff61ff +34996d0,67ff66ff +34996d4,64ff62ff +34996d8,60ff5dff +34996dc,5bff57ff +34996e0,49ff0ec3 +34996e4,50000 +34996e8,3958 +34996ec,44ff31ff +34996f0,20ff25ff +34996f4,2bff31ff +34996f8,38ff3eff +34996fc,44ff49ff +3499700,4dff52ff +3499704,57ff5cff +3499708,60ff64ff +349970c,68ff67ff +3499710,64ff60ff +3499714,5cff58ff +3499718,53ff4eff +349971c,48ff43ff +3499720,32ff00ff +3499724,580000 +3499728,2f71 +349972c,36ff1dff +3499730,1fff26ff +3499734,2dff34ff +3499738,3aff41ff +349973c,47ff4cff +3499740,52ff57ff +3499744,5cff60ff +3499748,64ff68ff +349974c,67ff64ff +3499750,60ff5bff +3499754,57ff51ff +3499758,4cff46ff +349975c,40ff3aff +3499760,27ff00ff +3499764,710000 +3499768,2f71 +349976c,36ff21ff +3499770,16ff00ff +3499774,ff00ff +3499778,2cff47ff +349977c,4cff52ff +3499780,57ff5cff +3499784,60ff64ff +3499788,67ff67ff +349978c,64ff60ff +3499790,5bff57ff +3499794,52ff0dff +3499798,ff00ff +349979c,aff33ff +34997a0,21ff00ff +34997a4,710000 +34997a8,3371 +34997ac,3aff28ff +34997b0,22ff0fff +34997b4,13ff19ff +34997b8,39ff4cff +34997bc,52ff57ff +34997c0,5bff60ff +34997c4,64ff67ff +34997c8,67ff64ff +34997cc,60ff5cff +34997d0,57ff52ff +34997d4,4cff1dff +34997d8,12ff14ff +34997dc,19ff2dff +34997e0,1bff00ff +34997e4,710000 +34997e8,3871 +34997ec,3dff2fff +34997f0,33ff3aff +34997f4,40ff46ff +34997f8,4cff51ff +34997fc,57ff5bff +3499800,60ff64ff +3499804,67ff68ff +3499808,64ff60ff +349980c,5cff57ff +3499810,52ff4cff +3499814,47ff41ff +3499818,3aff34ff +349981c,2dff26ff +3499820,12ff00ff +3499824,710000 +3499828,3569 +349982c,37ff33ff +3499830,3aff40ff +3499834,46ff4cff +3499838,51ff57ff +349983c,5bff60ff +3499840,64ff67ff +3499844,68ff64ff +3499848,60ff5cff +349984c,57ff52ff +3499850,4dff47ff +3499854,41ff3aff +3499858,34ff2dff +349985c,26ff1fff +3499860,6ff00ff +3499864,690000 +3499868,1e21 +349986c,2f600ff +3499870,ff00ff +3499874,ff00ff +3499878,ff00ff +349987c,2ff1eff +3499880,60ff68ff +3499884,64ff60ff +3499888,5cff57ff +349988c,52ff2cff +3499890,6ff00ff +3499894,ff00ff +3499898,ff00ff +349989c,ff00ff +34998a0,ff00f6 +34998a4,210000 +34998ac,3b00ae +34998b0,cc00cc +34998b4,cc00cc +34998b8,cc00cc +34998bc,cc03ec +34998c0,62ff64ff +34998c4,60ff5cff +34998c8,57ff52ff +34998cc,4dff00ff +34998d0,ec00cc +34998d4,cc00cc +34998d8,cc00cc +34998dc,cc00cc +34998e0,ae003b +34998fc,5f9e +3499900,65ff60ff +3499904,5cff57ff +3499908,52ff4dff +349990c,47ff00ff +3499910,9e0000 +349993c,659e +3499940,63ff5cff +3499944,57ff52ff +3499948,4dff47ff +349994c,41ff00ff +3499950,9e0000 +349997c,649e +3499980,61ff58ff +3499984,53ff35ff +3499988,31ff41ff +349998c,3bff00ff +3499990,9e0000 +34999bc,609e +34999c0,5eff53ff +34999c4,4dff00ff +34999c8,ff3bff +34999cc,35ff00ff +34999d0,9e0000 +34999fc,5d9e +3499a00,5bff4dff +3499a04,48ff00ff +3499a08,6ff35ff +3499a0c,2eff00ff +3499a10,9e0000 +3499a3c,5a9e +3499a40,57ff48ff +3499a44,42ff03ff +3499a48,cff2eff +3499a4c,28ff00ff +3499a50,9e0000 +3499a7c,559e +3499a80,53ff42ff +3499a84,3cff2dff +3499a88,28ff28ff +3499a8c,1fff00ff +3499a90,9e0000 +3499abc,4b91 +3499ac0,44ff33ff +3499ac4,35ff2fff +3499ac8,28ff1fff +3499acc,7ff00ff +3499ad0,900000 +3499afc,1229 +3499b00,f700ff +3499b04,ff00ff +3499b08,ff00ff +3499b0c,ff00f8 +3499b10,2e0000 +3499b40,30008c +3499b44,990099 +3499b48,990099 +3499b4c,8c0030 +3499ba8,f0f0f0f0 +3499bac,f0f0f0f0 +3499bb0,f0f0f0f0 +3499bb4,f0f0f0f0 +3499bb8,f0f0f0f0 +3499bbc,f0f0f0f0 +3499bc0,dff0f0f0 +3499bc4,f0f0f0f0 +3499bc8,f0f0f0f0 +3499bcc,f0f0f0df +3499bd0,dff0f0f0 +3499bd4,f0f0f0f0 +3499bd8,f0f0f0f0 +3499bdc,f0f0f0df +3499be0,dfcff0f0 +3499be4,f0f0f0f0 +3499be8,f0f0f0f0 +3499bec,f0f0cfcf +3499bf0,cfcff0f0 +3499bf4,f0f0f0f0 +3499bf8,f0f0f0f0 +3499bfc,f0f0cfcf +3499c00,cfcfcff0 +3499c04,f0f0f0f0 +3499c08,f0f0f0f0 +3499c0c,f0cfcfcf +3499c10,cfcfcff0 +3499c14,f0f0f0f0 +3499c18,f0f0f0f0 +3499c1c,f0cfcfcf +3499c20,cfcfcfcf +3499c24,f0f0f0f0 +3499c28,f0f0f0f0 +3499c2c,cfcfcfcf +3499c30,cfbfbfbf +3499c34,f0f0f0f0 +3499c38,f0f0f0f0 +3499c3c,bfbfbfbf +3499c40,bfbfbfbf +3499c44,f0f0f0f0 +3499c48,f0f0f0bf +3499c4c,bfbfbfbf +3499c50,bfbfbfbf +3499c54,bff0f0f0 +3499c58,f0f0f0bf +3499c5c,bfbff0f0 +3499c60,f0f0f0f0 +3499c64,f0f0f0f0 +3499c68,f0f0f0f0 +3499c6c,f0f0f0f0 +3499c70,f0f0f0f0 +3499c74,f0f0f0f0 +3499c78,f0f0f0f0 +3499c7c,f0f0f0f0 +3499c80,f0f0f0f0 +3499c84,f0f0f0f0 +3499c88,f0f0f0f0 +3499c8c,f0f0f0f0 +3499c90,f0f0f0f0 +3499c94,f0f0f0f0 +3499c98,f0f0f0f0 +3499c9c,f0f0f0f0 +3499ca0,f0f0f0f0 +3499ca4,f0f0f0f0 +3499ca8,f0f0f0f0 +3499cac,f0f0f0f0 +3499cb0,f0f0f0f0 +3499cb4,f0f0f0f0 +3499cb8,f0f0f0f0 +3499cbc,f0f0f0cf +3499cc0,cff0f0f0 +3499cc4,f0f0f0f0 +3499cc8,f0f0f0f0 +3499ccc,f0f0f0cf +3499cd0,cfcff0f0 +3499cd4,f0f0f0f0 +3499cd8,f0f0f0f0 +3499cdc,f0f0bfcf +3499ce0,cfcff0f0 +3499ce4,f0f0f0f0 +3499ce8,f0f0f0f0 +3499cec,f0f0bfcf +3499cf0,cfcff0f0 +3499cf4,f0f0f0f0 +3499cf8,f0f0f0f0 +3499cfc,f0bfcfbf +3499d00,bfbfbff0 +3499d04,f0f0f0f0 +3499d08,f0f0f0f0 +3499d0c,f0bfbfbf +3499d10,bfbfbff0 +3499d14,f0f0f0f0 +3499d18,f0f0f0f0 +3499d1c,bfbfbfbf +3499d20,bfbfbfbf +3499d24,f0f0f0f0 +3499d28,f0f0f0f0 +3499d2c,bfbfbfbf +3499d30,bfbfbfbf +3499d34,f0f0f0f0 +3499d38,f0f0f0f0 +3499d3c,bfbfbfbf +3499d40,bfbfbfaf +3499d44,f0f0f0f0 +3499d48,f0f0f0af +3499d4c,bfbfbfbf +3499d50,afafaff0 +3499d54,f0f0f0f0 +3499d58,f0f0f0bf +3499d5c,bfbfaff0 +3499d60,f0f0f0f0 +3499d64,f0f0f0f0 +3499d68,f0f0f0f0 +3499d6c,f0f0f0f0 +3499d70,f0f0f0f0 +3499d74,f0f0f0f0 +3499d78,f0f0f0f0 +3499d7c,f0f0f0f0 +3499d80,f0f0f0f0 +3499d84,f0f0f0f0 +3499d88,f0f0f0f0 +3499d8c,f0f0f0f0 +3499d90,f0f0f0f0 +3499d94,f0f0f0f0 +3499d98,f0f0f0f0 +3499d9c,f0f0f0f0 +3499da0,f0f0f0f0 +3499da4,f0f0f0f0 +3499da8,f0f0f0f0 +3499dac,f0f0f0f0 +3499db0,f0f0f0f0 +3499db4,f0f0f0f0 +3499db8,f0f0f0f0 +3499dbc,f0f0f0ef +3499dc0,eff0f0f0 +3499dc4,f0f0f0f0 +3499dc8,f0f0f0f0 +3499dcc,f0f0f0ef +3499dd0,bfbff0f0 +3499dd4,f0f0f0f0 +3499dd8,f0f0f0f0 +3499ddc,f0f0dfdf +3499de0,bfbff0f0 +3499de4,f0f0f0f0 +3499de8,f0f0f0f0 +3499dec,f0f0dfbf +3499df0,afaff0f0 +3499df4,f0f0f0f0 +3499df8,f0f0f0f0 +3499dfc,f0dfdfaf +3499e00,afafaff0 +3499e04,f0f0f0f0 +3499e08,f0f0f0f0 +3499e0c,f0dfafaf +3499e10,afafaff0 +3499e14,f0f0f0f0 +3499e18,f0f0f0f0 +3499e1c,dfdfafaf +3499e20,afafaff0 +3499e24,f0f0f0f0 +3499e28,f0f0f0f0 +3499e2c,dfdfafaf +3499e30,afafaf9f +3499e34,f0f0f0f0 +3499e38,f0f0f0f0 +3499e3c,cfafafaf +3499e40,afaf9f9f +3499e44,f0f0f0f0 +3499e48,f0f0f0cf +3499e4c,cfafafaf +3499e50,9f9ff0f0 +3499e54,f0f0f0f0 +3499e58,f0f0f0cf +3499e5c,afafaf9f +3499e60,f0f0f0f0 +3499e64,f0f0f0f0 +3499e68,f0f0f0cf +3499e6c,aff0f0f0 +3499e70,f0f0f0f0 +3499e74,f0f0f0f0 +3499e78,f0f0f0f0 +3499e7c,f0f0f0f0 +3499e80,f0f0f0f0 +3499e84,f0f0f0f0 +3499e88,f0f0f0f0 +3499e8c,f0f0f0f0 +3499e90,f0f0f0f0 +3499e94,f0f0f0f0 +3499e98,f0f0f0f0 +3499e9c,f0f0f0f0 +3499ea0,f0f0f0f0 +3499ea4,f0f0f0f0 +3499ea8,f0f0f0f0 +3499eac,f0f0f0f0 +3499eb0,f0f0f0f0 +3499eb4,f0f0f0f0 +3499eb8,f0f0f0f0 +3499ebc,f0f0f0ff +3499ec0,ff9ff0f0 +3499ec4,f0f0f0f0 +3499ec8,f0f0f0f0 +3499ecc,f0f0ffff +3499ed0,ff9ff0f0 +3499ed4,f0f0f0f0 +3499ed8,f0f0f0f0 +3499edc,f0f0ffff +3499ee0,9f9ff0f0 +3499ee4,f0f0f0f0 +3499ee8,f0f0f0f0 +3499eec,f0f0ffff +3499ef0,9f9ff0f0 +3499ef4,f0f0f0f0 +3499ef8,f0f0f0f0 +3499efc,f0efef9f +3499f00,9f9f9ff0 +3499f04,f0f0f0f0 +3499f08,f0f0f0f0 +3499f0c,f0efef9f +3499f10,9f9f8ff0 +3499f14,f0f0f0f0 +3499f18,f0f0f0f0 +3499f1c,f0efef9f +3499f20,9f8f8ff0 +3499f24,f0f0f0f0 +3499f28,f0f0f0f0 +3499f2c,efef9f9f +3499f30,8f8f8ff0 +3499f34,f0f0f0f0 +3499f38,f0f0f0f0 +3499f3c,efef9f8f +3499f40,8f8f8ff0 +3499f44,f0f0f0f0 +3499f48,f0f0f0ef +3499f4c,efef8f8f +3499f50,8f8ff0f0 +3499f54,f0f0f0f0 +3499f58,f0f0f0ef +3499f5c,ef8f8f8f +3499f60,f0f0f0f0 +3499f64,f0f0f0f0 +3499f68,f0f0f0ef +3499f6c,ef8f8ff0 +3499f70,f0f0f0f0 +3499f74,f0f0f0f0 +3499f78,f0f0f0f0 +3499f7c,8ff0f0f0 +3499f80,f0f0f0f0 +3499f84,f0f0f0f0 +3499f88,f0f0f0f0 +3499f8c,f0f0f0f0 +3499f90,f0f0f0f0 +3499f94,f0f0f0f0 +3499f98,f0f0f0f0 +3499f9c,f0f0f0f0 +3499fa0,f0f0f0f0 +3499fa4,f0f0f0f0 +3499fa8,f0f0f0f0 +3499fac,f0f0f0f0 +3499fb0,f0f0f0f0 +3499fb4,f0f0f0f0 +3499fb8,f0f0f0f0 +3499fbc,f0f0f0ff +3499fc0,ff7ff0f0 +3499fc4,f0f0f0f0 +3499fc8,f0f0f0f0 +3499fcc,f0f0ffff +3499fd0,ff7ff0f0 +3499fd4,f0f0f0f0 +3499fd8,f0f0f0f0 +3499fdc,f0f0ffff +3499fe0,ff7ff0f0 +3499fe4,f0f0f0f0 +3499fe8,f0f0f0f0 +3499fec,f0f0ffff +3499ff0,7f7ff0f0 +3499ff4,f0f0f0f0 +3499ff8,f0f0f0f0 +3499ffc,f0ffffff +349a000,7f7ff0f0 +349a004,f0f0f0f0 +349a008,f0f0f0f0 +349a00c,f0ffffff +349a010,7f7ff0f0 +349a014,f0f0f0f0 +349a018,f0f0f0f0 +349a01c,f0ffff7f +349a020,7f7f7ff0 +349a024,f0f0f0f0 +349a028,f0f0f0f0 +349a02c,ffffff7f +349a030,7f7f6ff0 +349a034,f0f0f0f0 +349a038,f0f0f0f0 +349a03c,ffffff7f +349a040,7f6f6ff0 +349a044,f0f0f0f0 +349a048,f0f0f0f0 +349a04c,ffffff7f +349a050,7f6ff0f0 +349a054,f0f0f0f0 +349a058,f0f0f0f0 +349a05c,ffff7f7f +349a060,f0f0f0f0 +349a064,f0f0f0f0 +349a068,f0f0f0ff +349a06c,ffff7ff0 +349a070,f0f0f0f0 +349a074,f0f0f0f0 +349a078,f0f0f0f0 +349a07c,fffff0f0 +349a080,f0f0f0f0 +349a084,f0f0f0f0 +349a088,f0f0f0f0 +349a08c,f0f0f0f0 +349a090,f0f0f0f0 +349a094,f0f0f0f0 +349a098,f0f0f0f0 +349a09c,f0f0f0f0 +349a0a0,f0f0f0f0 +349a0a4,f0f0f0f0 +349a0a8,f0f0f0f0 +349a0ac,f0f0f0f0 +349a0b0,f0f0f0f0 +349a0b4,f0f0f0f0 +349a0b8,f0f0f0f0 +349a0bc,f0f0ffff +349a0c0,ff5ff0f0 +349a0c4,f0f0f0f0 +349a0c8,f0f0f0f0 +349a0cc,f0f0ffff +349a0d0,ff5ff0f0 +349a0d4,f0f0f0f0 +349a0d8,f0f0f0f0 +349a0dc,f0f0ffff +349a0e0,ff5ff0f0 +349a0e4,f0f0f0f0 +349a0e8,f0f0f0f0 +349a0ec,f0f0ffff +349a0f0,ff5ff0f0 +349a0f4,f0f0f0f0 +349a0f8,f0f0f0f0 +349a0fc,f0f0ffff +349a100,ff5ff0f0 +349a104,f0f0f0f0 +349a108,f0f0f0f0 +349a10c,f0ffffff +349a110,5f5ff0f0 +349a114,f0f0f0f0 +349a118,f0f0f0f0 +349a11c,f0ffffff +349a120,5f5ff0f0 +349a124,f0f0f0f0 +349a128,f0f0f0f0 +349a12c,f0ffffff +349a130,5f5ff0f0 +349a134,f0f0f0f0 +349a138,f0f0f0f0 +349a13c,f0ffffff +349a140,5f5ff0f0 +349a144,f0f0f0f0 +349a148,f0f0f0f0 +349a14c,ffffffff +349a150,5ff0f0f0 +349a154,f0f0f0f0 +349a158,f0f0f0f0 +349a15c,ffffff5f +349a160,5ff0f0f0 +349a164,f0f0f0f0 +349a168,f0f0f0f0 +349a16c,ffffff5f +349a170,f0f0f0f0 +349a174,f0f0f0f0 +349a178,f0f0f0f0 +349a17c,ffffff5f +349a180,f0f0f0f0 +349a184,f0f0f0f0 +349a188,f0f0f0f0 +349a18c,f0f0fff0 +349a190,f0f0f0f0 +349a194,f0f0f0f0 +349a198,f0f0f0f0 +349a19c,f0f0f0f0 +349a1a0,f0f0f0f0 +349a1a4,f0f0f0f0 +349a1a8,f0f0f0f0 +349a1ac,f0f0f0f0 +349a1b0,f0f0f0f0 +349a1b4,f0f0f0f0 +349a1b8,f0f0f0f0 +349a1bc,f0f0ffff +349a1c0,fffff0f0 +349a1c4,f0f0f0f0 +349a1c8,f0f0f0f0 +349a1cc,f0f0ffff +349a1d0,fffff0f0 +349a1d4,f0f0f0f0 +349a1d8,f0f0f0f0 +349a1dc,f0f0ffff +349a1e0,ff3ff0f0 +349a1e4,f0f0f0f0 +349a1e8,f0f0f0f0 +349a1ec,f0f0ffff +349a1f0,ff3ff0f0 +349a1f4,f0f0f0f0 +349a1f8,f0f0f0f0 +349a1fc,f0f0ffff +349a200,ff3ff0f0 +349a204,f0f0f0f0 +349a208,f0f0f0f0 +349a20c,f0f0ffff +349a210,ff3ff0f0 +349a214,f0f0f0f0 +349a218,f0f0f0f0 +349a21c,f0f0ffff +349a220,ff3ff0f0 +349a224,f0f0f0f0 +349a228,f0f0f0f0 +349a22c,f0ffffff +349a230,ff3ff0f0 +349a234,f0f0f0f0 +349a238,f0f0f0f0 +349a23c,f0ffffff +349a240,fff0f0f0 +349a244,f0f0f0f0 +349a248,f0f0f0f0 +349a24c,f0ffffff +349a250,fff0f0f0 +349a254,f0f0f0f0 +349a258,f0f0f0f0 +349a25c,f0ffffff +349a260,fff0f0f0 +349a264,f0f0f0f0 +349a268,f0f0f0f0 +349a26c,f0ffffff +349a270,fff0f0f0 +349a274,f0f0f0f0 +349a278,f0f0f0f0 +349a27c,f0ffffff +349a280,fff0f0f0 +349a284,f0f0f0f0 +349a288,f0f0f0f0 +349a28c,f0f0f0ff +349a290,f0f0f0f0 +349a294,f0f0f0f0 +349a298,f0f0f0f0 +349a29c,f0f0f0f0 +349a2a0,f0f0f0f0 +349a2a4,f0f0f0f0 +349a2a8,f0f0f0f0 +349a2ac,f0f0f0f0 +349a2b0,f0f0f0f0 +349a2b4,f0f0f0f0 +349a2b8,f0f0f0f0 +349a2bc,f0f0ffff +349a2c0,fffff0f0 +349a2c4,f0f0f0f0 +349a2c8,f0f0f0f0 +349a2cc,f0f0ffff +349a2d0,fffff0f0 +349a2d4,f0f0f0f0 +349a2d8,f0f0f0f0 +349a2dc,f0f0ffff +349a2e0,fffff0f0 +349a2e4,f0f0f0f0 +349a2e8,f0f0f0f0 +349a2ec,f0f0ffff +349a2f0,fffff0f0 +349a2f4,f0f0f0f0 +349a2f8,f0f0f0f0 +349a2fc,f0f0ffff +349a300,fffff0f0 +349a304,f0f0f0f0 +349a308,f0f0f0f0 +349a30c,f0f0ffff +349a310,fffff0f0 +349a314,f0f0f0f0 +349a318,f0f0f0f0 +349a31c,f0f0ffff +349a320,fffff0f0 +349a324,f0f0f0f0 +349a328,f0f0f0f0 +349a32c,f0f0ffff +349a330,fffff0f0 +349a334,f0f0f0f0 +349a338,f0f0f0f0 +349a33c,f0f0ffff +349a340,fffff0f0 +349a344,f0f0f0f0 +349a348,f0f0f0f0 +349a34c,f0f0ffff +349a350,fffff0f0 +349a354,f0f0f0f0 +349a358,f0f0f0f0 +349a35c,f0f0ffff +349a360,fffff0f0 +349a364,f0f0f0f0 +349a368,f0f0f0f0 +349a36c,f0f0ffff +349a370,fffff0f0 +349a374,f0f0f0f0 +349a378,f0f0f0f0 +349a37c,f0f0ffff +349a380,fffff0f0 +349a384,f0f0f0f0 +349a388,f0f0f0f0 +349a38c,f0f0ffff +349a390,fffff0f0 +349a394,f0f0f0f0 +349a398,f0f0f0f0 +349a39c,f0f0f0f0 +349a3a0,f0f0f0f0 +349a3a4,f0f0f0f0 +349a3a8,f0f0f0f0 +349a3ac,f0f0f0f0 +349a3b0,f0f0f0f0 +349a3b4,f0f0f0f0 +349a3b8,f0f0f0f0 +349a3bc,f0f0ffff +349a3c0,fffff0f0 +349a3c4,f0f0f0f0 +349a3c8,f0f0f0f0 +349a3cc,f0f0ffff +349a3d0,fffff0f0 +349a3d4,f0f0f0f0 +349a3d8,f0f0f0f0 +349a3dc,f0f03fff +349a3e0,fffff0f0 +349a3e4,f0f0f0f0 +349a3e8,f0f0f0f0 +349a3ec,f0f03fff +349a3f0,fffff0f0 +349a3f4,f0f0f0f0 +349a3f8,f0f0f0f0 +349a3fc,f0f03fff +349a400,fffff0f0 +349a404,f0f0f0f0 +349a408,f0f0f0f0 +349a40c,f0f03fff +349a410,fffff0f0 +349a414,f0f0f0f0 +349a418,f0f0f0f0 +349a41c,f0f03fff +349a420,fffff0f0 +349a424,f0f0f0f0 +349a428,f0f0f0f0 +349a42c,f0f03fff +349a430,fffffff0 +349a434,f0f0f0f0 +349a438,f0f0f0f0 +349a43c,f0f0f0ff +349a440,fffffff0 +349a444,f0f0f0f0 +349a448,f0f0f0f0 +349a44c,f0f0f0ff +349a450,fffffff0 +349a454,f0f0f0f0 +349a458,f0f0f0f0 +349a45c,f0f0f0ff +349a460,fffffff0 +349a464,f0f0f0f0 +349a468,f0f0f0f0 +349a46c,f0f0f0ff +349a470,fffffff0 +349a474,f0f0f0f0 +349a478,f0f0f0f0 +349a47c,f0f0f0ff +349a480,fffffff0 +349a484,f0f0f0f0 +349a488,f0f0f0f0 +349a48c,f0f0f0f0 +349a490,fff0f0f0 +349a494,f0f0f0f0 +349a498,f0f0f0f0 +349a49c,f0f0f0f0 +349a4a0,f0f0f0f0 +349a4a4,f0f0f0f0 +349a4a8,f0f0f0f0 +349a4ac,f0f0f0f0 +349a4b0,f0f0f0f0 +349a4b4,f0f0f0f0 +349a4b8,f0f0f0f0 +349a4bc,f0f05fff +349a4c0,fffff0f0 +349a4c4,f0f0f0f0 +349a4c8,f0f0f0f0 +349a4cc,f0f05fff +349a4d0,fffff0f0 +349a4d4,f0f0f0f0 +349a4d8,f0f0f0f0 +349a4dc,f0f05fff +349a4e0,fffff0f0 +349a4e4,f0f0f0f0 +349a4e8,f0f0f0f0 +349a4ec,f0f05fff +349a4f0,fffff0f0 +349a4f4,f0f0f0f0 +349a4f8,f0f0f0f0 +349a4fc,f0f05fff +349a500,fffff0f0 +349a504,f0f0f0f0 +349a508,f0f0f0f0 +349a50c,f0f05f5f +349a510,fffffff0 +349a514,f0f0f0f0 +349a518,f0f0f0f0 +349a51c,f0f05f5f +349a520,fffffff0 +349a524,f0f0f0f0 +349a528,f0f0f0f0 +349a52c,f0f05f5f +349a530,fffffff0 +349a534,f0f0f0f0 +349a538,f0f0f0f0 +349a53c,f0f05f5f +349a540,fffffff0 +349a544,f0f0f0f0 +349a548,f0f0f0f0 +349a54c,f0f0f05f +349a550,ffffffff +349a554,f0f0f0f0 +349a558,f0f0f0f0 +349a55c,f0f0f05f +349a560,5fffffff +349a564,f0f0f0f0 +349a568,f0f0f0f0 +349a56c,f0f0f0f0 +349a570,5fffffff +349a574,f0f0f0f0 +349a578,f0f0f0f0 +349a57c,f0f0f0f0 +349a580,5fffffff +349a584,f0f0f0f0 +349a588,f0f0f0f0 +349a58c,f0f0f0f0 +349a590,f0fff0f0 +349a594,f0f0f0f0 +349a598,f0f0f0f0 +349a59c,f0f0f0f0 +349a5a0,f0f0f0f0 +349a5a4,f0f0f0f0 +349a5a8,f0f0f0f0 +349a5ac,f0f0f0f0 +349a5b0,f0f0f0f0 +349a5b4,f0f0f0f0 +349a5b8,f0f0f0f0 +349a5bc,f0f07fff +349a5c0,fff0f0f0 +349a5c4,f0f0f0f0 +349a5c8,f0f0f0f0 +349a5cc,f0f07fff +349a5d0,fffff0f0 +349a5d4,f0f0f0f0 +349a5d8,f0f0f0f0 +349a5dc,f0f07fff +349a5e0,fffff0f0 +349a5e4,f0f0f0f0 +349a5e8,f0f0f0f0 +349a5ec,f0f07f7f +349a5f0,fffff0f0 +349a5f4,f0f0f0f0 +349a5f8,f0f0f0f0 +349a5fc,f0f07f7f +349a600,fffffff0 +349a604,f0f0f0f0 +349a608,f0f0f0f0 +349a60c,f0f07f7f +349a610,fffffff0 +349a614,f0f0f0f0 +349a618,f0f0f0f0 +349a61c,f07f7f7f +349a620,7ffffff0 +349a624,f0f0f0f0 +349a628,f0f0f0f0 +349a62c,f06f7f7f +349a630,7fffffff +349a634,f0f0f0f0 +349a638,f0f0f0f0 +349a63c,f06f6f7f +349a640,7fffffff +349a644,f0f0f0f0 +349a648,f0f0f0f0 +349a64c,f0f06f7f +349a650,7fffffff +349a654,f0f0f0f0 +349a658,f0f0f0f0 +349a65c,f0f0f0f0 +349a660,7f7fffff +349a664,f0f0f0f0 +349a668,f0f0f0f0 +349a66c,f0f0f0f0 +349a670,f07fffff +349a674,fff0f0f0 +349a678,f0f0f0f0 +349a67c,f0f0f0f0 +349a680,f0f0ffff +349a684,f0f0f0f0 +349a688,f0f0f0f0 +349a68c,f0f0f0f0 +349a690,f0f0f0f0 +349a694,f0f0f0f0 +349a698,f0f0f0f0 +349a69c,f0f0f0f0 +349a6a0,f0f0f0f0 +349a6a4,f0f0f0f0 +349a6a8,f0f0f0f0 +349a6ac,f0f0f0f0 +349a6b0,f0f0f0f0 +349a6b4,f0f0f0f0 +349a6b8,f0f0f0f0 +349a6bc,f0f09fff +349a6c0,fff0f0f0 +349a6c4,f0f0f0f0 +349a6c8,f0f0f0f0 +349a6cc,f0f09fff +349a6d0,fffff0f0 +349a6d4,f0f0f0f0 +349a6d8,f0f0f0f0 +349a6dc,f0f09f9f +349a6e0,fffff0f0 +349a6e4,f0f0f0f0 +349a6e8,f0f0f0f0 +349a6ec,f0f09f9f +349a6f0,fffff0f0 +349a6f4,f0f0f0f0 +349a6f8,f0f0f0f0 +349a6fc,f09f9f9f +349a700,9fffeff0 +349a704,f0f0f0f0 +349a708,f0f0f0f0 +349a70c,f08f9f9f +349a710,9fefeff0 +349a714,f0f0f0f0 +349a718,f0f0f0f0 +349a71c,f08f8f9f +349a720,9fefeff0 +349a724,f0f0f0f0 +349a728,f0f0f0f0 +349a72c,f08f8f8f +349a730,9f9fefef +349a734,f0f0f0f0 +349a738,f0f0f0f0 +349a73c,f08f8f8f +349a740,8f9fefef +349a744,f0f0f0f0 +349a748,f0f0f0f0 +349a74c,f0f08f8f +349a750,8f8fefef +349a754,eff0f0f0 +349a758,f0f0f0f0 +349a75c,f0f0f0f0 +349a760,8f8f8fef +349a764,eff0f0f0 +349a768,f0f0f0f0 +349a76c,f0f0f0f0 +349a770,f08f8fef +349a774,eff0f0f0 +349a778,f0f0f0f0 +349a77c,f0f0f0f0 +349a780,f0f0f08f +349a784,f0f0f0f0 +349a788,f0f0f0f0 +349a78c,f0f0f0f0 +349a790,f0f0f0f0 +349a794,f0f0f0f0 +349a798,f0f0f0f0 +349a79c,f0f0f0f0 +349a7a0,f0f0f0f0 +349a7a4,f0f0f0f0 +349a7a8,f0f0f0f0 +349a7ac,f0f0f0f0 +349a7b0,f0f0f0f0 +349a7b4,f0f0f0f0 +349a7b8,f0f0f0f0 +349a7bc,f0f0f0ef +349a7c0,eff0f0f0 +349a7c4,f0f0f0f0 +349a7c8,f0f0f0f0 +349a7cc,f0f0bfbf +349a7d0,eff0f0f0 +349a7d4,f0f0f0f0 +349a7d8,f0f0f0f0 +349a7dc,f0f0bfbf +349a7e0,dfdff0f0 +349a7e4,f0f0f0f0 +349a7e8,f0f0f0f0 +349a7ec,f0f0afbf +349a7f0,bfdff0f0 +349a7f4,f0f0f0f0 +349a7f8,f0f0f0f0 +349a7fc,f0afafaf +349a800,afdfdff0 +349a804,f0f0f0f0 +349a808,f0f0f0f0 +349a80c,f0afafaf +349a810,afafdff0 +349a814,f0f0f0f0 +349a818,f0f0f0f0 +349a81c,f0afafaf +349a820,afafdfdf +349a824,f0f0f0f0 +349a828,f0f0f0f0 +349a82c,9fafafaf +349a830,afafdfdf +349a834,f0f0f0f0 +349a838,f0f0f0f0 +349a83c,9f9fafaf +349a840,afafafcf +349a844,f0f0f0f0 +349a848,f0f0f0f0 +349a84c,f0f09f9f +349a850,afafafcf +349a854,cff0f0f0 +349a858,f0f0f0f0 +349a85c,f0f0f0f0 +349a860,9fafafaf +349a864,cff0f0f0 +349a868,f0f0f0f0 +349a86c,f0f0f0f0 +349a870,f0f0f0af +349a874,cff0f0f0 +349a878,f0f0f0f0 +349a87c,f0f0f0f0 +349a880,f0f0f0f0 +349a884,f0f0f0f0 +349a888,f0f0f0f0 +349a88c,f0f0f0f0 +349a890,f0f0f0f0 +349a894,f0f0f0f0 +349a898,f0f0f0f0 +349a89c,f0f0f0f0 +349a8a0,f0f0f0f0 +349a8a4,f0f0f0f0 +349a8a8,f0f0f0f0 +349a8ac,f0f0f0f0 +349a8b0,f0f0f0f0 +349a8b4,f0f0f0f0 +349a8b8,f0f0f0f0 +349a8bc,f0f0f0cf +349a8c0,cff0f0f0 +349a8c4,f0f0f0f0 +349a8c8,f0f0f0f0 +349a8cc,f0f0cfcf +349a8d0,cff0f0f0 +349a8d4,f0f0f0f0 +349a8d8,f0f0f0f0 +349a8dc,f0f0cfcf +349a8e0,cfbff0f0 +349a8e4,f0f0f0f0 +349a8e8,f0f0f0f0 +349a8ec,f0f0cfcf +349a8f0,cfbff0f0 +349a8f4,f0f0f0f0 +349a8f8,f0f0f0f0 +349a8fc,f0bfbfbf +349a900,cfcfbff0 +349a904,f0f0f0f0 +349a908,f0f0f0f0 +349a90c,f0bfbfbf +349a910,bfbfbff0 +349a914,f0f0f0f0 +349a918,f0f0f0f0 +349a91c,bfbfbfbf +349a920,bfbfbfbf +349a924,f0f0f0f0 +349a928,f0f0f0f0 +349a92c,bfbfbfbf +349a930,bfbfbfbf +349a934,f0f0f0f0 +349a938,f0f0f0f0 +349a93c,afafbfbf +349a940,bfbfbfbf +349a944,f0f0f0f0 +349a948,f0f0f0f0 +349a94c,f0afafaf +349a950,bfbfbfbf +349a954,aff0f0f0 +349a958,f0f0f0f0 +349a95c,f0f0f0f0 +349a960,f0afbfbf +349a964,bff0f0f0 +349a968,f0f0f0f0 +349a96c,f0f0f0f0 +349a970,f0f0f0f0 +349a974,f0f0f0f0 +349a978,f0f0f0f0 +349a97c,f0f0f0f0 +349a980,f0f0f0f0 +349a984,f0f0f0f0 +349a988,f0f0f0f0 +349a98c,f0f0f0f0 +349a990,f0f0f0f0 +349a994,f0f0f0f0 +349a998,f0f0f0f0 +349a99c,f0f0f0f0 +349a9a0,f0f0f0f0 +349a9a4,f0f0f0f0 +349a9a8,f0f0f0f0 +349a9ac,f0f0f0f0 +349a9b0,f0f0f0f0 +349a9b4,f0f0f0f0 +349a9b8,f0f0f0f0 +349a9bc,f0f0f0df +349a9c0,f0f0f0f0 +349a9c4,f0f0f0f0 +349a9c8,f0f0f0f0 +349a9cc,f0f0f0df +349a9d0,dff0f0f0 +349a9d4,f0f0f0f0 +349a9d8,f0f0f0f0 +349a9dc,f0f0cfdf +349a9e0,dff0f0f0 +349a9e4,f0f0f0f0 +349a9e8,f0f0f0f0 +349a9ec,f0f0cfcf +349a9f0,cfcff0f0 +349a9f4,f0f0f0f0 +349a9f8,f0f0f0f0 +349a9fc,f0cfcfcf +349aa00,cfcff0f0 +349aa04,f0f0f0f0 +349aa08,f0f0f0f0 +349aa0c,f0cfcfcf +349aa10,cfcfcff0 +349aa14,f0f0f0f0 +349aa18,f0f0f0f0 +349aa1c,cfcfcfcf +349aa20,cfcfcff0 +349aa24,f0f0f0f0 +349aa28,f0f0f0f0 +349aa2c,bfbfcfcf +349aa30,cfcfcfcf +349aa34,f0f0f0f0 +349aa38,f0f0f0f0 +349aa3c,bfbfbfbf +349aa40,bfbfbfbf +349aa44,f0f0f0f0 +349aa48,f0f0f0bf +349aa4c,bfbfbfbf +349aa50,bfbfbfbf +349aa54,bff0f0f0 +349aa58,f0f0f0f0 +349aa5c,f0f0f0f0 +349aa60,f0f0bfbf +349aa64,bff0f0f0 +349aa68,f0f0f0f0 +349aa6c,f0f0f0f0 +349aa70,f0f0f0f0 +349aa74,f0f0f0f0 +349aa78,f0f0f0f0 +349aa7c,f0f0f0f0 +349aa80,f0f0f0f0 +349aa84,f0f0f0f0 +349aa88,f0f0f0f0 +349aa8c,f0f0f0f0 +349aa90,f0f0f0f0 +349aa94,f0f0f0f0 +349aa98,f0f0f0f0 +349aa9c,f0f0f0f0 +349aaa0,f0f0f0f0 +349aaa4,f0f0f0f0 +349aaa8,f0f0f0f0 +349aaac,f0f0f0f0 +349aab0,f0f0f0f0 +349aab4,f0f0f0f0 +349aab8,f0f0f0f0 +349aabc,f0f0f0df +349aac0,dff0f0f0 +349aac4,f0f0f0f0 +349aac8,f0f0f0f0 +349aacc,f0f0f0df +349aad0,dff0f0f0 +349aad4,f0f0f0f0 +349aad8,f0f0f0f0 +349aadc,f0f0dfdf +349aae0,dfdff0f0 +349aae4,f0f0f0f0 +349aae8,f0f0f0f0 +349aaec,f0f0dfdf +349aaf0,dfdff0f0 +349aaf4,f0f0f0f0 +349aaf8,f0f0f0f0 +349aafc,f0f0cfcf +349ab00,cfcff0f0 +349ab04,f0f0f0f0 +349ab08,f0f0f0f0 +349ab0c,f0cfcfcf +349ab10,cfcfcff0 +349ab14,f0f0f0f0 +349ab18,f0f0f0f0 +349ab1c,f0cfcfcf +349ab20,cfcfcff0 +349ab24,f0f0f0f0 +349ab28,f0f0f0f0 +349ab2c,cfcfcfcf +349ab30,cfcfcfcf +349ab34,f0f0f0f0 +349ab38,f0f0f0f0 +349ab3c,cfcfcfcf +349ab40,cfcfcfcf +349ab44,f0f0f0f0 +349ab48,f0f0f0bf +349ab4c,bfbfbfbf +349ab50,bfbfbfbf +349ab54,bff0f0f0 +349ab58,f0f0f0f0 +349ab5c,f0f0f0f0 +349ab60,f0f0f0f0 +349ab64,f0f0f0f0 +349ab68,f0f0f0f0 +349ab6c,f0f0f0f0 +349ab70,f0f0f0f0 +349ab74,f0f0f0f0 +349ab78,f0f0f0f0 +349ab7c,f0f0f0f0 +349ab80,f0f0f0f0 +349ab84,f0f0f0f0 +349ab88,f0f0f0f0 +349ab8c,f0f0f0f0 +349ab90,f0f0f0f0 +349ab94,f0f0f0f0 +349ab98,f0f0f0f0 +349ab9c,f0f0f0f0 +349aba0,f0f0f0f0 +349aba4,f0f0f0f0 +349aba8,94468b04 +349abac,83c283c0 +349abb0,8b048b04 +349abb4,8b0483c2 +349abb8,83c283c0 +349abbc,83c0bdd2 +349abc0,20aa9c86 +349abc4,7b7e7b7e +349abc8,7b7e7b7e +349abcc,7b7e7b7e +349abd0,7b7e837e +349abd4,ad4effa2 +349abd8,9c8683c0 +349abdc,8bc28bc2 +349abe0,83c083c2 +349abe4,83c283c0 +349abe8,94468b04 +349abec,83c27a7e +349abf0,82c282c0 +349abf4,7a807a7e +349abf8,7a7e7a3e +349abfc,7a3eb44e +349ac00,b44c9b86 +349ac04,723c6afa +349ac08,723c6afa +349ac0c,6afa6afa +349ac10,7a3c7a3c +349ac14,8b449b88 +349ac18,7bc27a7e +349ac1c,82c07a80 +349ac20,82c07a3e +349ac24,82807a7e +349ac28,94468b04 +349ac2c,94868b46 +349ac30,8b04723c +349ac34,72fc6afa +349ac38,6afc6afc +349ac3c,6afc62ba +349ac40,41f24934 +349ac44,6afa62b8 +349ac48,62b862b8 +349ac4c,6aba72ba +349ac50,6ab86aba +349ac54,6afc72fc +349ac58,7a808380 +349ac5c,7a808380 +349ac60,7a80723e +349ac64,7a3e7b80 +349ac68,83c282c0 +349ac6c,9bc851f2 +349ac70,8b466afa +349ac74,62ba62ba +349ac78,5a785a78 +349ac7c,62ba62b8 +349ac80,5a785a76 +349ac84,5a765a76 +349ac88,5a765a76 +349ac8c,5a786278 +349ac90,6ab86aba +349ac94,6afc72fc +349ac98,723e7b7e +349ac9c,723e7b7e +349aca0,6afe723e +349aca4,6afa733e +349aca8,9c868b02 +349acac,ac4e07e4 +349acb0,7b8062b8 +349acb4,62b862b8 +349acb8,5a7a62ba +349acbc,62ba62b8 +349acc0,5a785a76 +349acc4,5a765a76 +349acc8,5a765a78 +349accc,62b86ab8 +349acd0,6ab86aba +349acd4,6afc72fc +349acd8,723e7b7e +349acdc,723e7b7e +349ace0,6afc723e +349ace4,6afa7b80 +349ace8,94468ac2 +349acec,ac0ca44c +349acf0,83c262b8 +349acf4,62fe18fa +349acf8,18f828f8 +349acfc,18f818b8 +349ad00,10f80076 +349ad04,ff3608b6 +349ad08,28b818b6 +349ad0c,8b60734 +349ad10,10b820f8 +349ad14,313a41be +349ad18,20fc00b8 +349ad1c,7610fa +349ad20,18ba183a +349ad24,18b8293a +349ad28,94448bc4 +349ad2c,723c6afa +349ad30,6afa5afe +349ad34,19c419c4 +349ad38,19042104 +349ad3c,31042104 +349ad40,11c411c4 +349ad44,84411c4 +349ad48,29c43104 +349ad4c,21c419c4 +349ad50,39463946 +349ad54,39863146 +349ad58,31c40984 +349ad5c,14211c4 +349ad60,11c411c4 +349ad64,2900393a +349ad68,94868b44 +349ad6c,7a406afa +349ad70,52beb676 +349ad74,c7fab634 +349ad78,be76bff8 +349ad7c,b636b634 +349ad80,b634be36 +349ad84,ae36a6f4 +349ad88,b638c7b8 +349ad8c,bfb8bffa +349ad90,d83ac7fa +349ad94,cf78cfb8 +349ad98,c7bccfbc +349ad9c,c7b8d03c +349ada0,d03cc7b6 +349ada4,18fa18ba +349ada8,94468302 +349adac,7a805a00 +349adb0,19febff8 +349adb4,dffacff8 +349adb8,c7fac7fa +349adbc,c7f8b634 +349adc0,be78c7ba +349adc4,c7b6ae36 +349adc8,ae34c7ba +349adcc,cffad03c +349add0,d83ccfb8 +349add4,c7b8c7b8 +349add8,cfbcc776 +349addc,bf34cfb8 +349ade0,d03abe78 +349ade4,193a0876 +349ade8,944682c2 +349adec,7a805246 +349adf0,2a80c7ba +349adf4,cfb8c778 +349adf8,c778b738 +349adfc,c776aef6 +349ae00,b636cfb8 +349ae04,d7b8c7b8 +349ae08,b6f6b776 +349ae0c,c776bf78 +349ae10,bfb8cfb8 +349ae14,d7b8d7b8 +349ae18,cffcd03a +349ae1c,d03ad83c +349ae20,c7bacfb6 +349ae24,103c0834 +349ae28,944682c0 +349ae2c,7a805b86 +349ae30,3ac2d7fa +349ae34,cfbcbe76 +349ae38,be36b776 +349ae3c,cf76cfbc +349ae40,c77ad7fc +349ae44,e77e1002 +349ae48,d7f8cfbc +349ae4c,c7b6c7ba +349ae50,dffce87e +349ae54,e8bedffc +349ae58,e07ce03c +349ae5c,e03cd83c +349ae60,d83af8be +349ae64,290018ba +349ae68,8b048b04 +349ae6c,83824a46 +349ae70,3ac2e07c +349ae74,e83ac7f8 +349ae78,c7f8f03c +349ae7c,bcf87c +349ae80,f83c00be +349ae84,11403904 +349ae88,f8fef03c +349ae8c,e03cf03c +349ae90,f07cf07c +349ae94,f87cf87c +349ae98,f07ce83a +349ae9c,f83cef3c +349aea0,f87c0800 +349aea4,4100393a +349aea8,8b047a80 +349aeac,7b7e4b84 +349aeb0,32c2ce7a +349aeb4,d83ac7bc +349aeb8,d87cf07c +349aebc,f03ad83a +349aec0,bee87c +349aec4,f0be0000 +349aec8,d7fccfba +349aecc,cfbcc7ba +349aed0,e07cdffe +349aed4,e8bef8fe +349aed8,f800e07c +349aedc,d83ae83a +349aee0,d83ad83a +349aee4,290018ba +349aee8,94447a3e +349aeec,723e5246 +349aef0,3280d03a +349aef4,c7b6b734 +349aef8,cf78cff8 +349aefc,be76be34 +349af00,fed83a +349af04,cffcd7f8 +349af08,c778b776 +349af0c,bf38b776 +349af10,cffad7fa +349af14,f07c08fe +349af18,bed7b8 +349af1c,ae34cfbc +349af20,c7babe76 +349af24,203c0876 +349af28,83c0723e +349af2c,72405a46 +349af30,2940af34 +349af34,b6f49ef0 +349af38,9ef2a6b2 +349af3c,9d729d72 +349af40,c776c776 +349af44,bf38b736 +349af48,a6f4a6f4 +349af4c,a732af34 +349af50,aeb4af74 +349af54,cff8e87c +349af58,d7faa6b2 +349af5c,9d70a734 +349af60,b736b736 +349af64,10fa0034 +349af68,6ab8ac0c +349af6c,72fc5246 +349af70,2140a6b2 +349af74,a6f29ef0 +349af78,9d709d70 +349af7c,8d709d70 +349af80,9d70a6b4 +349af84,a5749d72 +349af88,9d709d70 +349af8c,8d309672 +349af90,a6b2aeb4 +349af94,a6b2aeb6 +349af98,aeb49d72 +349af9c,9672a6b2 +349afa0,af36af34 +349afa4,faf7b4 +349afa8,5a34ac0c +349afac,723e4a04 +349afb0,2140c7ba +349afb4,be78be74 +349afb8,c678cff8 +349afbc,be74c678 +349afc0,c7f8cff8 +349afc4,cff8cff8 +349afc8,cff8c7f8 +349afcc,c7facff8 +349afd0,e83ad83a +349afd4,cffac7fa +349afd8,d83ad83a +349afdc,cfbacfbc +349afe0,cfbac678 +349afe4,2040213a +349afe8,bd908b04 +349afec,723e5246 +349aff0,2140e73a +349aff4,df38dff8 +349aff8,cff8e738 +349affc,e73ae73a +349b000,f8bef87c +349b004,ef7a00fc +349b008,200fe +349b00c,180113e +349b010,113ef0fc +349b014,ef7ef0bc +349b018,e77cef7c +349b01c,f87cf83a +349b020,f03cf03c +349b024,51c28382 +349b028,83c27a3e +349b02c,7a7e4a04 +349b030,2a80e7fa +349b034,e83ad7fa +349b038,d03ad83a +349b03c,e07ce03c +349b040,bee7fa +349b044,bf78d83a +349b048,be0802 +349b04c,10422982 +349b050,2182f800 +349b054,be1000 +349b058,be1000 +349b05c,29c01940 +349b060,1182 +349b064,5a468b04 +349b068,83c28280 +349b06c,7a3e6bc8 +349b070,5b861000 +349b074,21821040 +349b078,18000982 +349b07c,21c21182 +349b080,8fedf3e +349b084,cfb8e8be +349b088,18002182 +349b08c,31c431c2 +349b090,21c231c4 +349b094,39043144 +349b098,31043904 +349b09c,39443944 +349b0a0,314449c6 +349b0a4,73089446 +349b0a8,83c08280 +349b0ac,72bc7308 +349b0b0,5b861842 +349b0b4,18441040 +349b0b8,10fe0000 +349b0bc,218229c2 +349b0c0,2180f0be +349b0c4,d7f8e87c +349b0c8,10401000 +349b0cc,21800942 +349b0d0,1401940 +349b0d4,21822182 +349b0d8,19421140 +349b0dc,21821984 +349b0e0,29044a06 +349b0e4,8b8a9306 +349b0e8,83c07a3e +349b0ec,723c5b88 +349b0f0,4a041000 +349b0f4,f0bcdffc +349b0f8,f87cf87c +349b0fc,8be0800 +349b100,19820982 +349b104,c83ce07c +349b108,80000fe +349b10c,fe00be +349b110,f0bef0be +349b114,f8bef0be +349b118,f0be08be +349b11c,10fe00fe +349b120,10803ac6 +349b124,93ca8b04 +349b128,83c07a7e +349b12c,723c5246 +349b130,52461842 +349b134,10001140 +349b138,8fe0800 +349b13c,8be08be +349b140,39044a44 +349b144,198008fe +349b148,18401042 +349b14c,10001040 +349b150,18821040 +349b154,8421000 +349b158,100010fe +349b15c,11801080 +349b160,21024206 +349b164,93ca8b04 +349b168,83807a3e +349b16c,72bc6388 +349b170,52461842 +349b174,31c44144 +349b178,29042084 +349b17c,188000be +349b180,21c23986 +349b184,29042182 +349b188,29c429c4 +349b18c,188221c4 +349b190,310629c2 +349b194,19821940 +349b198,e664de62 +349b19c,c59eff64 +349b1a0,206a30ec +349b1a4,30ec8b04 +349b1a8,83c072fa +349b1ac,72fc63c8 +349b1b0,4a4411c2 +349b1b4,29084248 +349b1b8,29021984 +349b1bc,29c21980 +349b1c0,1801040 +349b1c4,10841040 +349b1c8,18822182 +349b1cc,8401882 +349b1d0,18821842 +349b1d4,f8001142 +349b1d8,59421874 +349b1dc,f326aba +349b1e0,7a3e7a3e +349b1e4,7a3e7a3e +349b1e8,83806ab8 +349b1ec,72fc6bc8 +349b1f0,52460840 +349b1f4,8001000 +349b1f8,800f8be +349b1fc,fe0800 +349b200,f8bef87c +349b204,100000be +349b208,1000183e +349b20c,10421882 +349b210,20842184 +349b214,94029c4 +349b218,61844038 +349b21c,62be9302 +349b220,7a3e7a3e +349b224,7a7e7a7e +349b228,83c072ba +349b22c,6afc63c8 +349b230,4a04dffa +349b234,bf76a736 +349b238,bf76b776 +349b23c,b736bf76 +349b240,bf36dfba +349b244,e7faf8fe +349b248,184000be +349b24c,20002 +349b250,98219c4 +349b254,11c40842 +349b258,41003038 +349b25c,c65ab4d0 +349b260,7a7e723c +349b264,7a3e7a7e +349b268,7b3c72fc +349b26c,62784a06 +349b270,32c2bf38 +349b274,aef49ef2 +349b278,aef2a734 +349b27c,a6f4af36 +349b280,af34cffc +349b284,d7b80940 +349b288,1980f800 +349b28c,be0002 +349b290,20842 +349b294,802e83c +349b298,390041f8 +349b29c,7a3c7a3e +349b2a0,6afa49f4 +349b2a4,a40ca450 +349b2a8,8b027a7e +349b2ac,723e5246 +349b2b0,3ac2d87c +349b2b4,d83cbffa +349b2b8,d03ac7fa +349b2bc,d83af07c +349b2c0,f0be007e +349b2c4,be1182 +349b2c8,32861182 +349b2cc,f0be103e +349b2d0,18420800 +349b2d4,e8bedf7c +349b2d8,72446afc +349b2dc,6afc617a +349b2e0,593a8b4a +349b2e4,8b8c8b8c +349b2e8,8b027a3e +349b2ec,7a3e5b86 +349b2f0,4a0400be +349b2f4,f8bef07e +349b2f8,d83acff8 +349b2fc,dffad83c +349b300,f87e08be +349b304,114010fe +349b308,29822182 +349b30c,f8fe0000 +349b310,1000e73e +349b314,be78083e +349b318,9b487a3e +349b31c,61ba40b8 +349b320,38b86288 +349b324,6aca72ca +349b328,6ab8ac0c +349b32c,72fc6bc8 +349b330,5a46f800 +349b334,d87cd03a +349b338,b776cf78 +349b33c,cfbcd03a +349b340,d7fcd87c +349b344,e8fedf3e +349b348,e0bef800 +349b34c,f8bc0002 +349b350,beef7e +349b354,e77e41c6 +349b358,a3ca8280 +349b35c,61be2838 +349b360,17b44142 +349b364,41844a08 +349b368,5a34ac0c +349b36c,7a406bc8 +349b370,53860982 +349b374,e77ce07a +349b378,f73cf87c +349b37c,f87ef8bc +349b380,f8bcf940 +349b384,f9820142 +349b388,f8c0f000 +349b38c,ef7c1040 +349b390,11c221c2 +349b394,4a06730c +349b398,a3cc82c0 +349b39c,724041ba +349b3a0,20f81874 +349b3a4,62c65208 +349b3a8,bd909b88 +349b3ac,7a407308 +349b3b0,63c819c4 +349b3b4,8fe00fe +349b3b8,fe08fe +349b3bc,10fe1040 +349b3c0,104018c2 +349b3c4,19062a46 +349b3c8,31042104 +349b3cc,8401882 +349b3d0,290442c8 +349b3d4,7c4e9410 +349b3d8,a3ca82c2 +349b3dc,83c26afe +349b3e0,39ba317c +349b3e4,4a405208 +349b3e8,8b027a80 +349b3ec,72fc7308 +349b3f0,6b0819c4 +349b3f4,11c211c2 +349b3f8,f8be00be +349b3fc,8401082 +349b400,104220c4 +349b404,2a4621c6 +349b408,29062a46 +349b40c,18802082 +349b410,32445b8a +349b414,84909410 +349b418,a3ca8b02 +349b41c,8bc483c4 +349b420,513e31ba +349b424,418449c6 +349b428,8b027a3e +349b42c,7a3e5b86 +349b430,42040000 +349b434,8000800 +349b438,f0bef0be +349b43c,f8bef0be +349b440,f8be08fe +349b444,19422182 +349b448,29c22182 +349b44c,118221c4 +349b450,3a865388 +349b454,734c7b4c +349b458,a3ca8b02 +349b45c,8b449346 +349b460,7b825980 +349b464,5a485a08 +349b468,8b027a7e +349b46c,723e4204 +349b470,19fec6b6 +349b474,cffabffa +349b478,c7fac7fa +349b47c,c7f8cfb8 +349b480,c7b8d7fa +349b484,e03ae03a +349b488,e07ce07c +349b48c,e87e1080 +349b490,31444246 +349b494,42084a46 +349b498,a3ca8b02 +349b49c,40b09b04 +349b4a0,8b04838c +349b4a4,628a4a08 +349b4a8,8b02723e +349b4ac,723c5348 +349b4b0,32c2c778 +349b4b4,af36a734 +349b4b8,b736b776 +349b4bc,9ef4a6f6 +349b4c0,aef4c7ba +349b4c4,cf78bf36 +349b4c8,bf34c7b8 +349b4cc,d7fc10c0 +349b4d0,4a087b8c +349b4d4,5a8a4a48 +349b4d8,a3ca8b02 +349b4dc,382ebd12 +349b4e0,934693ce +349b4e4,6a883944 +349b4e8,8380827e +349b4ec,6afc63c8 +349b4f0,4a44dffa +349b4f4,b776af34 +349b4f8,b776bfb8 +349b4fc,b736af36 +349b500,bf38cfba +349b504,d7b8cffa +349b508,df3aef3c +349b50c,f8be3986 +349b510,730a9c50 +349b514,838c6aca +349b518,a3ca82c2 +349b51c,8b028b04 +349b520,93448b04 +349b524,6a40287c +349b528,83c06ab8 +349b52c,72fc4a46 +349b530,3ac2103e +349b534,be00be +349b538,f8be0800 +349b53c,21c20840 +349b540,c008fe +349b544,be +349b548,8fe083e +349b54c,11822a84 +349b550,52868cce +349b554,6b0a5a86 +349b558,9b887a7e +349b55c,7a8083c2 +349b560,83c28302 +349b564,7a42493e +349b568,7b3c723c +349b56c,72fc4204 +349b570,2a80f8fe +349b574,1401142 +349b578,93e21c4 +349b57c,62083a44 +349b580,11c21882 +349b584,21c41040 +349b588,fef8be +349b58c,19fc2a80 +349b590,32805b86 +349b594,4a043282 +349b598,9c0c9c0c +349b59c,9c0c9c0c +349b5a0,9c0c9c0c +349b5a4,93ca6afc +349b5a8,83807a3e +349b5ac,72bc4a44 +349b5b0,2a82e73c +349b5b4,f8bc1040 +349b5b8,fe0000 +349b5bc,18820800 +349b5c0,8401080 +349b5c4,314429c4 +349b5c8,fef8be +349b5cc,108021c2 +349b5d0,18821840 +349b5d4,80000be +349b5d8,8001000 +349b5dc,e83af77e +349b5e0,cffcd73c +349b5e4,19be397c +349b5e8,83c07a7e +349b5ec,723c5b86 +349b5f0,3ac20800 +349b5f4,be08fe +349b5f8,bef8be +349b5fc,7c10be +349b600,be08be +349b604,218008fe +349b608,e87af87e +349b60c,1080 +349b610,10800840 +349b614,8420800 +349b618,84008be +349b61c,f0bee8be +349b620,f0bee07e +349b624,2900397c +349b628,83c07a3e +349b62c,723c5248 +349b630,42040800 +349b634,f0bedffe +349b638,f07cf07c +349b63c,e83af87c +349b640,e07ce07c +349b644,d87ee87c +349b648,bef8fe +349b64c,f8fef87c +349b650,e87ce07c +349b654,e87ce87e +349b658,e87cf07c +349b65c,f07ce0be +349b660,d7fed7fc +349b664,30c0397c +349b668,83c08280 +349b66c,72fc4204 +349b670,32c2f07c +349b674,f8c0f87e +349b678,e83acffa +349b67c,d7f8df3a +349b680,f07ad83a +349b684,c7b6e07c +349b688,fef87c +349b68c,f07cd83a +349b690,d83ce03a +349b694,e87ef03c +349b698,f03ce07c +349b69c,e87cf0be +349b6a0,e07cd83c +349b6a4,3100397c +349b6a8,83c282c2 +349b6ac,7a804a04 +349b6b0,193ed7f8 +349b6b4,f07ce73c +349b6b8,dff8bff8 +349b6bc,c7f8c7f8 +349b6c0,d7f8be7a +349b6c4,a6f2c7f8 +349b6c8,e83af07c +349b6cc,e73ae738 +349b6d0,e87adf3c +349b6d4,e73ce87a +349b6d8,e83af03c +349b6dc,f07ce87a +349b6e0,e03ce07c +349b6e4,2900397c +349b6e8,83c27afe +349b6ec,7a8063c8 +349b6f0,4202f87c +349b6f4,f87ce07c +349b6f8,e07cf8be +349b6fc,f0bee03a +349b700,d7f8be36 +349b704,aef6d7fc +349b708,f0be00be +349b70c,f8bef07c +349b710,bef07e +349b714,f03ae83a +349b718,e83af87c +349b71c,f8bcf87c +349b720,f0bee8be +349b724,2900417c +349b728,6ab8ac0c +349b72c,723e7b4a +349b730,848a5288 +349b734,39443104 +349b738,32485a48 +349b73c,6a4a4946 +349b740,800 +349b744,21c23104 +349b748,4a884246 +349b74c,3ac63a86 +349b750,52c83a86 +349b754,390629c4 +349b758,29c429c2 +349b75c,21822982 +349b760,21421000 +349b764,410049be +349b768,5a34ac0c +349b76c,723e7b4a +349b770,848c2906 +349b774,290821c2 +349b778,310649c8 +349b77c,418421c2 +349b780,84221c2 +349b784,290421c2 +349b788,19c219c2 +349b78c,21043246 +349b790,3a463104 +349b794,32462a44 +349b798,324421c2 +349b79c,10021042 +349b7a0,10421002 +349b7a4,204020fa +349b7a8,bd909b88 +349b7ac,723c63c8 +349b7b0,6b0aef3c +349b7b4,ffbef0bc +349b7b8,e73c00be +349b7bc,f0bee73c +349b7c0,ce78d7ba +349b7c4,dffce7fc +349b7c8,e7fadffa +349b7cc,c778d7ba +349b7d0,d7fadfb8 +349b7d4,dffad7ba +349b7d8,dfface78 +349b7dc,be38cfba +349b7e0,df3ce03a +349b7e4,faf7b4 +349b7e8,9c86723e +349b7ec,72405b88 +349b7f0,5b86e03a +349b7f4,f07ce87a +349b7f8,e87cef3c +349b7fc,ef3cd7ba +349b800,bf76d7fa +349b804,dffce83c +349b808,e03acffa +349b80c,bfb6cff6 +349b810,c636c676 +349b814,c7b8bf78 +349b818,c7b8b6f4 +349b81c,be36be78 +349b820,cff8cfb8 +349b824,10fa0034 +349b828,9446723e +349b82c,723e6388 +349b830,5b86f800 +349b834,ef7ce7fa +349b838,f07c00bc +349b83c,f8bce7fa +349b840,e87ae8be +349b844,d7fcd7f8 +349b848,e7facffa +349b84c,c778c7b8 +349b850,cffae73c +349b854,dffae7fa +349b858,dffae7fa +349b85c,cffadf3c +349b860,df3edf3a +349b864,203c0876 +349b868,94868b04 +349b86c,7b7e63c8 +349b870,5246f77e +349b874,ffbee73e +349b878,f7c00800 +349b87c,8bef0be +349b880,bef0be +349b884,d83ce87c +349b888,e73eef3e +349b88c,ef80e73e +349b890,8020842 +349b894,20940 +349b898,1400000 +349b89c,1401140 +349b8a0,1400000 +349b8a4,290018ba +349b8a8,8b048b04 +349b8ac,838263c8 +349b8b0,63c80840 +349b8b4,1140f800 +349b8b8,9401982 +349b8bc,21421940 +349b8c0,29802180 +349b8c4,11401980 +349b8c8,94008fe +349b8cc,9401982 +349b8d0,29c42182 +349b8d4,21822182 +349b8d8,29c21000 +349b8dc,19402182 +349b8e0,20421842 +349b8e4,4100393a +349b8e8,944682c0 +349b8ec,7a806bc8 +349b8f0,730a08fe +349b8f4,f8beef7c +349b8f8,8bef8fe +349b8fc,f87c0000 +349b900,8020802 +349b904,200c0 +349b908,ef7cef7c +349b90c,ef7c0800 +349b910,10440000 +349b914,14000c0 +349b918,9400000 +349b91c,fef800 +349b920,f800f8be +349b924,290018ba +349b928,944682c0 +349b92c,7a806b08 +349b930,730a0000 +349b934,f8bcef3a +349b938,f87ce83c +349b93c,e73cf07e +349b940,f8bef8be +349b944,bef07c +349b948,f03cf0bc +349b94c,f07cf8be +349b950,f0bef8be +349b954,7c00bc +349b958,fe0800 +349b95c,140f940 +349b960,f8c0ef7c +349b964,103c0834 +349b968,94468302 +349b96c,7a806b08 +349b970,6bc80982 +349b974,114000fe +349b978,f800 +349b97c,140f87c +349b980,2 +349b984,fef8be +349b988,f8fe0840 +349b98c,10420182 +349b990,98200fe +349b994,f8be00fe +349b998,104008fe +349b99c,fe00fe +349b9a0,10800802 +349b9a4,10fa0876 +349b9a8,948682c2 +349b9ac,7a406afa +349b9b0,63c8f8bc +349b9b4,ef7ce77a +349b9b8,ef7cefbe +349b9bc,f8c0e77c +349b9c0,f8bcf87c +349b9c4,d73ce07c +349b9c8,f0c00802 +349b9cc,1420942 +349b9d0,940f800 +349b9d4,f87cf8bc +349b9d8,f8bef8c2 +349b9dc,83e0040 +349b9e0,98200bc +349b9e4,203c18b8 +349b9e8,944483c2 +349b9ec,723c6afa +349b9f0,6afa5246 +349b9f4,f0bef0fe +349b9f8,e8bef800 +349b9fc,800f8be +349ba00,f800f800 +349ba04,df7ef0be +349ba08,1040 +349ba10,8400800 +349ba14,10400840 +349ba18,10fef800 +349ba1c,f800f800 +349ba20,f800f0fe +349ba24,2900313a +349ba28,94468b44 +349ba2c,93868b46 +349ba30,7b8062b8 +349ba34,5b861182 +349ba38,11821982 +349ba3c,198219c2 +349ba40,9820982 +349ba44,8421882 +349ba48,29c421c4 +349ba4c,11c408fe +349ba50,8401982 +349ba54,21c221c4 +349ba58,802e07c +349ba5c,f87cf8fe +349ba60,8fe103e +349ba64,203c293a +349ba68,9c868b04 +349ba6c,ac4e07e2 +349ba70,7b8062b8 +349ba74,62b862b8 +349ba78,5a7a62ba +349ba7c,62ba62b8 +349ba80,5a785a76 +349ba84,5a765a76 +349ba88,5a765a78 +349ba8c,62b86ab8 +349ba90,6ab86aba +349ba94,6afc72fc +349ba98,723e7b7e +349ba9c,723e7b7e +349baa0,6afc723e +349baa4,6afa7b7e +349baa8,94448ac2 +349baac,b49059f4 +349bab0,7b806afa +349bab4,62ba62ba +349bab8,5a785a78 +349babc,62ba62b8 +349bac0,5a785a76 +349bac4,5a765a76 +349bac8,5a765a76 +349bacc,5a786278 +349bad0,6ab86aba +349bad4,6afc72fc +349bad8,723e7b7e +349badc,723e7b7e +349bae0,6afe723e +349bae4,6afa733c +349bae8,9c449444 +349baec,ac0c9386 +349baf0,9388723c +349baf4,72fc6afa +349baf8,6afc6afc +349bafc,6afc6afa +349bb00,6afa62b8 +349bb04,6afa62b8 +349bb08,62b862b8 +349bb0c,6aba72ba +349bb10,6ab86aba +349bb14,6afc72fc +349bb18,7a808380 +349bb1c,7a808380 +349bb20,7a80723e +349bb24,7a3e7b7e +349bb28,8b049446 +349bb2c,944682c2 +349bb30,82c282c0 +349bb34,7a807a7e +349bb38,7a7e7a3e +349bb3c,7a3e723e +349bb40,b4d2a3ca +349bb44,723c6afa +349bb48,723c6afa +349bb4c,6afa6afa +349bb50,7a3c7a3c +349bb54,72fca4c8 +349bb58,9b887a7e +349bb5c,82c07a80 +349bb60,82c07a3e +349bb64,82807a7e +349bb68,8b048b04 +349bb6c,94449304 +349bb70,8b048b04 +349bb74,8b0483c2 +349bb78,83c283c0 +349bb7c,83c083c0 +349bb80,bd1418a8 +349bb84,7b7e7b7e +349bb88,7b7e7b7e +349bb8c,7b7e7b7e +349bb90,7b7e837e +349bb94,837ebdd0 +349bb98,28ea83c0 +349bb9c,8bc28bc2 +349bba0,83c083c2 +349bba4,83c283c0 +349bba8,94869446 +349bbac,bd90b54c +349bbb0,ac0aa4ca +349bbb4,9cc8a40a +349bbb8,9cca9cca +349bbbc,9c889488 +349bbc0,bd145a76 +349bbc4,94868c46 +349bbc8,8b048b04 +349bbcc,8b048b04 +349bbd0,8b0283c2 +349bbd4,83c283c0 +349bbd8,bd145a76 +349bbdc,a40a9446 +349bbe0,94469446 +349bbe4,94469c88 +349bbe8,94469446 +349bbec,b54cac0c +349bbf0,8b049bc8 +349bbf4,93468b46 +349bbf8,8b048282 +349bbfc,8b049386 +349bc00,a40cb4d2 +349bc04,b49083c2 +349bc08,8b0483c2 +349bc0c,7a807a80 +349bc10,82c27a80 +349bc14,723e723e +349bc18,a4caac90 +349bc1c,b49082c2 +349bc20,8b028280 +349bc24,8b048304 +349bc28,9c888b04 +349bc2c,a4cab4d2 +349bc30,8b4483c2 +349bc34,83827b80 +349bc38,83c28280 +349bc3c,8b048b46 +349bc40,8b447bc0 +349bc44,83c27b7e +349bc48,7b807b80 +349bc4c,83827a40 +349bc50,723e723e +349bc54,723e723e +349bc58,723e7afe +349bc5c,7a808382 +349bc60,8b047b7e +349bc64,824083c2 +349bc68,ac0c7ac0 +349bc6c,b44e7a3e +349bc70,a40c7b80 +349bc74,73407340 +349bc78,733e72fc +349bc7c,83c28304 +349bc80,7bc2737e +349bc84,733e733c +349bc88,733e733e +349bc8c,73406afe +349bc90,723e723e +349bc94,723e723e +349bc98,6afc72fc +349bc9c,723e7b80 +349bca0,7b827b7e +349bca4,72fc7b80 +349bca8,9c889346 +349bcac,ac9041b0 +349bcb0,9c0c6b3e +349bcb4,62ba7308 +349bcb8,73c87b08 +349bcbc,7b487b48 +349bcc0,73c873c6 +349bcc4,730673c6 +349bcc8,73067b0a +349bccc,7b48834a +349bcd0,834a7b4a +349bcd4,7b4a8c8a +349bcd8,8ccc940e +349bcdc,94ce94cc +349bce0,848a94cc +349bce4,844a848a +349bce8,94868304 +349bcec,9ccaa44e +349bcf0,9cca62ba +349bcf4,4202f8fe +349bcf8,f80000be +349bcfc,f8fef8be +349bd00,f800f800 +349bd04,f8c0f800 +349bd08,bef800 +349bd0c,f80000be +349bd10,f800f8c0 +349bd14,be00be +349bd18,f8c0f8fe +349bd1c,f8bef8be +349bd20,be00be +349bd24,bef8be +349bd28,94468282 +349bd2c,6a3e7380 +349bd30,6afc5246 +349bd34,f8bef800 +349bd38,f800f8be +349bd3c,fef8fe +349bd40,f800f800 +349bd44,f8c0f8be +349bd48,be00be +349bd4c,f8bef8be +349bd50,be00be +349bd54,f8bef8be +349bd58,bef800 +349bd5c,f800f800 +349bd60,f800f800 +349bd64,f80000be +349bd68,8b047ac2 +349bd6c,7a406afc +349bd70,63c8f8be +349bd74,f800f8be +349bd78,f8bef800 +349bd7c,f8c000be +349bd80,f8be00be +349bd84,f8bef8be +349bd88,c0f8fe +349bd8c,f800f8fe +349bd90,f8bef800 +349bd94,be00be +349bd98,f8c0f8c0 +349bd9c,bef800 +349bda0,f800f8be +349bda4,bef8c0 +349bda8,8b0482c2 +349bdac,8280730a +349bdb0,5246f800 +349bdb4,bef8fe +349bdb8,f800f800 +349bdbc,f80000be +349bdc0,f8c0f8c0 +349bdc4,f8bef8be +349bdc8,f8bef8c0 +349bdcc,f800f800 +349bdd0,f800f8be +349bdd4,f8bef8be +349bdd8,f8c000be +349bddc,f8be00be +349bde0,f800f8c0 +349bde4,f8bef8be +349bde8,830282c2 +349bdec,7a808ccc +349bdf0,6b0af8c0 +349bdf4,be00be +349bdf8,bef8be +349bdfc,bef8be +349be00,f8be00be +349be04,bef8be +349be08,f8bef8be +349be0c,bef8be +349be10,f8be00be +349be14,be00be +349be18,f8c0f800 +349be1c,f800f800 +349be20,f8c000be +349be24,f8bef8be +349be28,830282c2 +349be2c,7a80940e +349be30,8cccf8be +349be34,f8c000be +349be38,bef8be +349be3c,f8bef8c0 +349be40,f8c0f8c0 +349be44,f8c0f8c0 +349be48,f8bef8c0 +349be4c,f8bef8c0 +349be50,f8c0f800 +349be54,f800f8c0 +349be58,f8c0f800 +349be5c,f8bef8be +349be60,f8bef8fe +349be64,f800f8c0 +349be68,830282c2 +349be6c,7a408ccc +349be70,8cccf800 +349be74,bef800 +349be78,f80000be +349be7c,be00be +349be80,be00be +349be84,be00be +349be88,f8be00be +349be8c,f8fe00be +349be90,be00be +349be94,be00be +349be98,be00be +349be9c,be00be +349bea0,be00be +349bea4,be00be +349bea8,7b806afc +349beac,723e7308 +349beb0,5b86f8c0 +349beb4,f800f8c0 +349beb8,f80000be +349bebc,bef8be +349bec0,bef8fe +349bec4,f8fef800 +349bec8,f8c0f8c0 +349becc,c0f8c0 +349bed0,f800f8c0 +349bed4,f800f800 +349bed8,f800f800 +349bedc,f8fe00be +349bee0,f8bef8be +349bee4,f800f8c0 +349bee8,83026178 +349beec,6afc6b0a +349bef0,3ac4f800 +349bef4,f8bef8be +349bef8,be00be +349befc,be00be +349bf00,f8c0f800 +349bf04,f8c0f8be +349bf08,bef8be +349bf0c,f8bef8be +349bf10,f8be00be +349bf14,be00be +349bf18,be00be +349bf1c,f8bef8c0 +349bf20,f8c0f8be +349bf24,bef8be +349bf28,b54e723e +349bf2c,72408ccc +349bf30,730af8be +349bf34,f8bef8fe +349bf38,f8fe00be +349bf3c,be00be +349bf40,f8be00be +349bf44,f8bef8be +349bf48,f8bef8fe +349bf4c,f8fef8fe +349bf50,f8bef8fe +349bf54,f8fef8be +349bf58,f8fef8be +349bf5c,bef8fe +349bf60,f8bef8be +349bf64,f8bef8be +349bf68,62ba9cca +349bf6c,83c2940e +349bf70,848c00be +349bf74,f8fef8fe +349bf78,be00be +349bf7c,f8be00be +349bf80,be00be +349bf84,be00be +349bf88,be00be +349bf8c,f8bef8be +349bf90,be00be +349bf94,be00be +349bf98,be00be +349bf9c,f8be00be +349bfa0,f8fef8fe +349bfa4,f8fe00be +349bfa8,396eac0c +349bfac,6afc7c8a +349bfb0,5b88f8c0 +349bfb4,f8c0f8be +349bfb8,f8c0f8fe +349bfbc,f8bef8c0 +349bfc0,f800f800 +349bfc4,f8fef8be +349bfc8,f8fef800 +349bfcc,f800f8be +349bfd0,bef8be +349bfd4,f8fef8fe +349bfd8,f800f800 +349bfdc,f8c0f8c0 +349bfe0,f8c0f8c0 +349bfe4,f8c0f800 +349bfe8,bd90723e +349bfec,6afc6bc8 +349bff0,328200be +349bff4,be00be +349bff8,f8be00be +349bffc,bef8be +349c000,f8bef8be +349c004,f8be00fe +349c008,fe +349c00c,f8fe00fe +349c010,fef8fe +349c014,f8bef8be +349c018,f8bef8be +349c01c,f8be00be +349c020,be00be +349c024,bef8be +349c028,83807a40 +349c02c,723e6b08 +349c030,420400be +349c034,bef8be +349c038,f800f8be +349c03c,f8fef8be +349c040,be00be +349c044,f8bef8fe +349c048,bef8be +349c04c,f8bef8be +349c050,be00be +349c054,be00be +349c058,be00be +349c05c,be00be +349c060,f8bef800 +349c064,f800f8be +349c068,83c07a80 +349c06c,723e6b08 +349c070,4a4600be +349c074,f8bef8be +349c078,bef800 +349c07c,f800f8be +349c080,bef8c0 +349c084,f8bef800 +349c088,be00be +349c08c,be00be +349c090,be00be +349c094,f8be00be +349c098,be00be +349c09c,be00be +349c0a0,f8bef800 +349c0a4,f80000be +349c0a8,83807a80 +349c0ac,72fe6b08 +349c0b0,3ac2f8be +349c0b4,f8bef8be +349c0b8,bef8fe +349c0bc,be00be +349c0c0,bef800 +349c0c4,bef8be +349c0c8,f8be00be +349c0cc,bef8be +349c0d0,f8be00be +349c0d4,be00be +349c0d8,bef8be +349c0dc,be00be +349c0e0,f8fef800 +349c0e4,f8fe4a04 +349c0e8,83c07a80 +349c0ec,723e6b0a +349c0f0,328200be +349c0f4,f8fef8c0 +349c0f8,be00be +349c0fc,be00be +349c100,f8fef800 +349c104,f800f8be +349c108,f8be00be +349c10c,be00be +349c110,f8bef8be +349c114,bef8be +349c118,f8be00be +349c11c,bef8fe +349c120,f8c0f8c0 +349c124,5a865bca +349c128,83c282c0 +349c12c,82806bc8 +349c130,328200be +349c134,be00be +349c138,be00be +349c13c,be00be +349c140,be00be +349c144,be00be +349c148,be00be +349c14c,bef8be +349c150,f8bef8be +349c154,f8be00be +349c158,be00be +349c15c,f8bef800 +349c160,f8006286 +349c164,734e5388 +349c168,7b80723e +349c16c,82406bc8 +349c170,3ac200be +349c174,f8bef8be +349c178,f8bef8be +349c17c,f8bef8be +349c180,f8bef8be +349c184,f8bef8be +349c188,f8bef8be +349c18c,f8bef8be +349c190,f8bef8be +349c194,be00be +349c198,be00be +349c19c,f8bef8c0 +349c1a0,63c6734e +349c1a4,6b0c4a46 +349c1a8,94447a80 +349c1ac,830263c6 +349c1b0,3280f8fe +349c1b8,fe0000 +349c1bc,fe00fe +349c1c0,f8fef8be +349c1c4,f8bef8be +349c1c8,f8be00be +349c1cc,f8bef8be +349c1d0,f8bef8be +349c1d4,f800f8be +349c1d8,bef800 +349c1dc,be7308 +349c1e0,8490744e +349c1e4,744c4a46 +349c1e8,8b048bc2 +349c1ec,8b046bc8 +349c1f0,42c2f8be +349c1f4,be00be +349c1f8,be00be +349c1fc,f8bef8be +349c200,f8be00be +349c204,be00be +349c208,be00be +349c20c,f8bef8be +349c210,f8bef8be +349c214,f8be00be +349c218,f8bef8be +349c21c,5bc66b0c +349c220,53884a46 +349c224,4a465288 +349c228,94448bc2 +349c22c,7b827b4a +349c230,6b0800be +349c234,f8bef8fe +349c238,f8fef8fe +349c23c,f8bef8be +349c240,f8be00be +349c244,bef8be +349c248,be00be +349c24c,f8c0f8c0 +349c250,f800f800 +349c254,f800f8c0 +349c258,f80063c6 +349c25c,734c63ca +349c260,63ca5a88 +349c264,5288730a +349c268,8b047bc0 +349c26c,7b807c4c +349c270,6b0af8be +349c274,f8bef8fe +349c278,f8fef8fe +349c27c,f8fef8be +349c280,f8be00c0 +349c284,bef8be +349c288,f8bef8be +349c28c,be00c0 +349c290,f8c0f8c0 +349c294,f8c0f8be +349c298,7b0a9412 +349c29c,848e848e +349c2a0,734c734c +349c2a4,734c7b8e +349c2a8,8b046afa +349c2ac,62ba7b4a +349c2b0,63c8f800 +349c2b4,f800f800 +349c2b8,f800f800 +349c2bc,f80000be +349c2c0,f80000be +349c2c4,bef800 +349c2c8,f800f8be +349c2cc,f8be00be +349c2d0,f8be00be +349c2d4,f8006bc8 +349c2d8,7c8e6b0c +349c2dc,528a5a8a +349c2e0,5a8862ca +349c2e4,5a8862ca +349c2e8,8b0462b8 +349c2ec,6abc6b08 +349c2f0,4a4600be +349c2f4,be00be +349c2f8,f8bef8fe +349c2fc,bef8be +349c300,be00be +349c304,be00be +349c308,be00be +349c30c,f8bef8be +349c310,bef8c0 +349c314,848a8c10 +349c318,5bca5bca +349c31c,5a885288 +349c320,5a8862ca +349c324,5a885288 +349c328,bdd08302 +349c32c,7b80730a +349c330,5246f8fe +349c334,f800f800 +349c338,f8be00be +349c33c,f8c0f800 +349c340,f8c0f800 +349c344,f800f8c0 +349c348,f800f800 +349c34c,f8bef8c0 +349c350,be6bc8 +349c354,9c52744c +349c358,52885aca +349c35c,63ca62ca +349c360,730e6b0c +349c364,6b0c62ca +349c368,392eac4c +349c36c,8bc47b4a +349c370,5246f800 +349c374,f8bef8be +349c378,be00be +349c37c,be00be +349c380,f8bef800 +349c384,f800f800 +349c388,f800f800 +349c38c,bef8be +349c390,5a866b0c +349c394,5bca4246 +349c398,4a485a88 +349c39c,5bca6b0c +349c3a0,6b0e5aca +349c3a4,5a8a5a88 +349c3a8,73186ad6 +349c3ac,6bd67316 +349c3b0,6ad66ad6 +349c3b4,6ad66bd6 +349c3b8,6bd67316 +349c3bc,73168c1e +349c3c0,5a527b58 +349c3c4,6bd46bd4 +349c3c8,6bd46bd4 +349c3cc,6bd46bd4 +349c3d0,6bd473d4 +349c3d4,7c9c394a +349c3d8,7b587316 +349c3dc,73d673d6 +349c3e0,73166bd6 +349c3e4,6bd67316 +349c3e8,73186ad6 +349c3ec,6bd67316 +349c3f0,6ad67316 +349c3f4,6bd67316 +349c3f8,73167316 +349c3fc,73d68cde +349c400,8cdc7b58 +349c404,6bd46bd4 +349c408,6bd46bd4 +349c40c,6bd46bd4 +349c410,73d473d4 +349c414,7358839c +349c418,6b187316 +349c41c,73166bd6 +349c420,73166bd6 +349c424,73d67316 +349c428,73186ad6 +349c42c,7358735a +349c430,73187316 +349c434,73167316 +349c438,6bd66bd6 +349c43c,6bd66bd6 +349c440,6b166b16 +349c444,6bd46bd4 +349c448,6bd46bd4 +349c44c,6bd473d4 +349c450,73d473d6 +349c454,6bd673d6 +349c458,6ad67316 +349c45c,6ad67316 +349c460,6ad66ad6 +349c464,73167318 +349c468,6bd67316 +349c46c,7b9a73d4 +349c470,7b9c7316 +349c474,73167316 +349c478,6bd66bd6 +349c47c,6bd66bd4 +349c480,6bd46bd4 +349c484,6bd46bd4 +349c488,6bd46bd4 +349c48c,6bd473d4 +349c490,73d473d6 +349c494,6bd673d6 +349c498,6ad67316 +349c49c,6ad67316 +349c4a0,6ad66ad6 +349c4a4,73167318 +349c4a8,7b587316 +349c4ac,8c1e5a52 +349c4b0,73187316 +349c4b4,73167316 +349c4b8,6bd66bd6 +349c4bc,6bd66bd4 +349c4c0,6bd46bd4 +349c4c4,6bd46bd4 +349c4c8,6bd46bd4 +349c4cc,6bd473d4 +349c4d0,73d473d6 +349c4d4,6bd673d6 +349c4d8,6ad67316 +349c4dc,6ad67316 +349c4e0,6ad66ad6 +349c4e4,73167318 +349c4e8,731872d6 +349c4ec,8cde841e +349c4f0,7b5a7316 +349c4f4,6b1a6b1a +349c4f8,6b186b18 +349c4fc,6b186bd8 +349c500,6b186bd8 +349c504,6b186b18 +349c508,6bd86bd6 +349c50c,6b186bd8 +349c510,6bd86ad6 +349c514,6b18735a +349c518,735a735a +349c51c,6b5a735a +349c520,735c6b5a +349c524,735a7318 +349c528,73167318 +349c52c,73167316 +349c530,7316631a +349c534,63a26360 +349c538,42986be2 +349c53c,21902190 +349c540,19922192 +349c544,2ad42a16 +349c548,21922ad4 +349c54c,3a163216 +349c550,3a563a56 +349c554,3a563216 +349c558,32162ad6 +349c55c,2a963216 +349c560,32163216 +349c564,739c7318 +349c568,73587358 +349c56c,6ad67316 +349c570,3ad20154 +349c574,9540112 +349c578,9542a5a +349c57c,e8c4c67c +349c580,c67cc67c +349c584,c67cc67c +349c588,c67cc67c +349c58c,c67cc6bc +349c590,c77ac67c +349c594,cf7acf7a +349c598,c77ccf7a +349c59c,c77ccf7a +349c5a0,c77cc77a +349c5a4,6b5a7318 +349c5a8,73186b16 +349c5ac,6ad6631c +349c5b0,1120152 +349c5b4,95419d6 +349c5b8,221a2a5c +349c5bc,e782c6ba +349c5c0,c67ac77a +349c5c4,c77ac67c +349c5c8,c67ac77a +349c5cc,ce7acf7a +349c5d0,cf7acf7a +349c5d4,cf7acf7a +349c5d8,cf7ac77a +349c5dc,cf7acf7a +349c5e0,c77ac67a +349c5e4,7cdc7318 +349c5e8,73186ad6 +349c5ec,6ad61952 +349c5f0,12941294 +349c5f4,2a1a339e +349c5f8,339e339e +349c5fc,cfbcc67c +349c600,ce7ac77a +349c604,cf7acf7a +349c608,ce7ac77a +349c60c,c77acf7a +349c610,c77ac77a +349c614,cf7acf7a +349c618,c77ac77a +349c61c,c77acf7a +349c620,c77acf7a +349c624,739c7318 +349c628,73187316 +349c62c,6ad62ad4 +349c630,43de22d8 +349c634,335c221a +349c638,2a5cd7fe +349c63c,cf7acf7a +349c640,c77acf7a +349c644,c678cf7a +349c648,cf7acf7a +349c64c,c77ac77a +349c650,cf7acf7a +349c654,ce7acf7a +349c658,c77acf7a +349c65c,cf7ac77c +349c660,c77ace7a +349c664,739c7318 +349c668,6ad67318 +349c66c,73182a18 +349c670,43de3b9c +349c674,2b5a2218 +349c678,2a5a3b9e +349c67c,cfbac77a +349c680,cf7ace7a +349c684,c778cfbc +349c688,c678cf7a +349c68c,cf7acf7a +349c690,c77ac77a +349c694,cf7ac77a +349c698,c77cc77a +349c69c,cf7ace7a +349c6a0,cf7ace7a +349c6a4,739c7318 +349c6a8,6ad66ad6 +349c6ac,73163398 +349c6b0,3bde325c +349c6b4,335ac77c +349c6b8,9103bde +349c6bc,3b9ccfbc +349c6c0,ce7acf7a +349c6c4,ce7ace7a +349c6c8,cf7ac77a +349c6cc,cf7ac77a +349c6d0,cf7acf7a +349c6d4,ce7ac678 +349c6d8,ce7ac77a +349c6dc,c77ac77a +349c6e0,c77ac77a +349c6e4,739c7318 +349c6e8,731673d6 +349c6ec,6ad62194 +349c6f0,2a18d7fe +349c6f4,c77ac77a +349c6f8,cf7af848 +349c6fc,2a5c2a5a +349c700,d7facf7a +349c704,c77acf7a +349c708,c77cc77a +349c70c,cf7ac77a +349c710,ce7ace7a +349c714,c778cfba +349c718,cf7acf7a +349c71c,c67acf7a +349c720,c77ac67c +349c724,739c7318 +349c728,73166bd6 +349c72c,6ad62994 +349c730,ce7ac77a +349c734,ce7ac67a +349c738,c6bac77a +349c73c,df822218 +349c740,43dee882 +349c744,cf7ac77a +349c748,c67cce7a +349c74c,c77acf7a +349c750,cf7ac77a +349c754,c678cf7a +349c758,ce7ac77a +349c75c,c67ac77a +349c760,cf7ac77c +349c764,7bde7318 +349c768,73d48cde +349c76c,73d62194 +349c770,c67cc77a +349c774,c67ac67a +349c778,d7fec67a +349c77c,c67adf82 +349c780,2a5a339c +349c784,e784c67a +349c788,c67ac67a +349c78c,c67ac77a +349c790,c77acf7a +349c794,c77acf7a +349c798,cf7ac67c +349c79c,c77ac77a +349c7a0,cf7cd8c6 +349c7a4,8c62849c +349c7a8,73d48cde +349c7ac,6ad62194 +349c7b0,df84c77a +349c7b4,c67ac67a +349c7b8,c67ac67a +349c7bc,c67ac67a +349c7c0,d7fe2a5a +349c7c4,2218f04a +349c7c8,c67ac67a +349c7cc,c67cc67a +349c7d0,c77ac77a +349c7d4,c67cc67c +349c7d8,c77ac77a +349c7dc,c77ab73a +349c7e0,f9ce2a5a +349c7e4,84207c5a +349c7e8,8cde7318 +349c7ec,6ad62194 +349c7f0,cebec67a +349c7f4,c67ac67a +349c7f8,c67ac67a +349c7fc,c67ac67a +349c800,c7bacf7a +349c804,22182218 +349c808,912c67c +349c80c,c77acf7a +349c810,cf7ac67a +349c814,c67cc77a +349c818,c67cce7a +349c81c,b7381254 +349c820,335c3b9e +349c824,84207c5a +349c828,6bd67316 +349c82c,73162194 +349c830,c77ace7a +349c834,c77ace7a +349c838,c77ac77a +349c83c,cf7acf7a +349c840,cfbcce7a +349c844,cfba335a +349c848,3b9c22d6 +349c84c,ce7acf78 +349c850,cf78c67a +349c854,ce7ace7a +349c858,ce7ace7a +349c85c,110e5c60 +349c860,5b6264a2 +349c864,84207c5a +349c868,6bd673d6 +349c86c,73d632d4 +349c870,cf78ce7a +349c874,cf78c678 +349c878,ce78cf7a +349c87c,cfbacf7a +349c880,c678ce7a +349c884,ce7ace7a +349c888,53205c60 +349c88c,53dccf7a +349c890,cf7acf7a +349c894,cfbacffc +349c898,cffce782 +349c89c,42557c66 +349c8a0,84667c23 +349c8a4,84207c5a +349c8a8,731673d6 +349c8ac,73d63a14 +349c8b0,cf78ce7a +349c8b4,ce7ac678 +349c8b8,ce78ce7a +349c8bc,cf7acf7a +349c8c0,cf78ce7a +349c8c4,cf7acf7a +349c8c8,ce7a5b62 +349c8cc,64a24bde +349c8d0,c778cf78 +349c8d4,cf78cf7a +349c8d8,cf7ad700 +349c8dc,531d5c61 +349c8e0,64a264a1 +349c8e4,8c627c5a +349c8e8,731673d6 +349c8ec,73162ad4 +349c8f0,ce7ace7a +349c8f4,ce78cf7a +349c8f8,cf7acf7a +349c8fc,ce7ace7a +349c900,dffecf7a +349c904,c77cc77a +349c908,ce7ace7a +349c90c,4b2043de +349c910,4b20ce7a +349c914,c67ace7a +349c918,ce7abe7c +349c91c,531d531d +349c920,43de43de +349c924,84207c5a +349c928,73167316 +349c92c,73162194 +349c930,ce7ace7a +349c934,ce7ac778 +349c938,c678ce7a +349c93c,ce7ace7a +349c940,d7fce03c +349c944,c778c678 +349c948,ce7ace7a +349c94c,ce7a5320 +349c950,5b625320 +349c954,ce7ace7a +349c958,ce7abebb +349c95c,43994ade +349c960,3b9e3b9e +349c964,84207c5a +349c968,73d673d6 +349c96c,73d62a94 +349c970,ce7ace7a +349c974,cf7acfba +349c978,cf7ace7a +349c97c,ce78cf7a +349c980,cf78cffc +349c984,cf7acf78 +349c988,cf7acf7a +349c98c,ce7acf7a +349c990,64a25c60 +349c994,5460d7fa +349c998,9c9c8ce0 +349c99c,3c18ff +349c9a0,18002142 +349c9a4,21427c5a +349c9a8,731673d4 +349c9ac,73d62ad4 +349c9b0,c678ce7a +349c9b4,ce7acf78 +349c9b8,c678cf7a +349c9bc,ce7acf7a +349c9c0,c77ace7a +349c9c4,d6bcce7a +349c9c8,ef40f880 +349c9cc,dffcdebc +349c9d0,d6bc52de +349c9d4,53206462 +349c9d8,f7ade32 +349c9dc,414a6251 +349c9e0,62516b93 +349c9e4,6b946b94 +349c9e8,73d673d4 +349c9ec,73d632d4 +349c9f0,ce7ace7a +349c9f4,ce7ace7a +349c9f8,ce7acf7a +349c9fc,cf7acf7a +349ca00,cffecf7a +349ca04,d67cc638 +349ca08,e7fee7fc +349ca0c,dffedebc +349ca10,debcd7ba +349ca14,4bdc64a2 +349ca18,9420ee30 +349ca1c,31c473d4 +349ca20,6b946252 +349ca24,73166bd4 +349ca28,731673d6 +349ca2c,73162ad4 +349ca30,ce7ace7a +349ca34,cf7ac77c +349ca38,cf7acf7a +349ca3c,cf7ac77a +349ca40,c738cf7a +349ca44,d67cef7c +349ca48,e7fce7fc +349ca4c,ef3edfbc +349ca50,e7fce7fc +349ca54,dffe4bd8 +349ca58,8bde6b94 +349ca5c,4ace7bdc +349ca60,6bd46bd3 +349ca64,6bd46292 +349ca68,73d473d6 +349ca6c,73d62194 +349ca70,c77acf7a +349ca74,ce7ac67a +349ca78,ce7ac77a +349ca7c,ce7ac77a +349ca80,c77ac77a +349ca84,cf7c00be +349ca88,e87ed7bc +349ca8c,e7fcd7ba +349ca90,cf7aef3c +349ca94,e7bcd77a +349ca98,5a106bd4 +349ca9c,7b1610be +349caa0,520e4acd +349caa4,a5e69ce6 +349caa8,73167316 +349caac,6ad62194 +349cab0,cfbcc77a +349cab4,c77cc67c +349cab8,c77ac67c +349cabc,c77ac77a +349cac0,ce7acf7a +349cac4,ce7aef40 +349cac8,bee7fc +349cacc,c638ce38 +349cad0,aef8a6b6 +349cad4,be7aaef6 +349cad8,f7a31c4 +349cadc,6bd67b18 +349cae0,414aa5e6 +349cae4,a5289ce6 +349cae8,731673d6 +349caec,73163b58 +349caf0,11cccf7a +349caf4,c77ac77c +349caf8,c77ac67a +349cafc,c67cc77c +349cb00,cf7ace7a +349cb04,c778ceb8 +349cb08,dffcdffc +349cb0c,ce78ce7a +349cb10,bef8bef8 +349cb14,d7bcc678 +349cb18,f7ae630 +349cb1c,30c27b58 +349cb20,7b58a528 +349cb24,a5289ce6 +349cb28,73d48cde +349cb2c,73d632d4 +349cb30,ce78ce7a +349cb34,c77ac77a +349cb38,c77acf7a +349cb3c,cf7ac77a +349cb40,c77ac77a +349cb44,c67ace7a +349cb48,c67ace7a +349cb4c,e83ef07e +349cb50,effedebc +349cb54,d6bcd6ba +349cb58,738ee70 +349cb5c,e6307b5a +349cb60,7b5aa5e6 +349cb64,a5289ce6 +349cb68,73d48cde +349cb6c,6ad632d4 +349cb70,c778cf7a +349cb74,ce7ac778 +349cb78,ce78cf78 +349cb7c,cf7acf78 +349cb80,cf78c778 +349cb84,c77acf7a +349cb88,ce7ace7a +349cb8c,ce7acfbc +349cb90,dffae7fc +349cb94,df3cf880 +349cb98,738deee +349cb9c,cef0310a +349cba0,7c5a6b94 +349cba4,a5e69ce6 +349cba8,8cde839c +349cbac,6ad63a14 +349cbb0,cf7acfbc +349cbb4,cf7acfbc +349cbb8,cfbacfba +349cbbc,cfbacfbc +349cbc0,cfbccffc +349cbc4,d7fee03e +349cbc8,dffcd7fc +349cbcc,cfbcd7fe +349cbd0,ff7ee03e +349cbd4,e83ee03e +349cbd8,f7f8cef0 +349cbdc,f83c6392 +349cbe0,849a849c +349cbe4,95609ce6 +349cbe8,73166ad6 +349cbec,73d63a14 +349cbf0,cfbacfbc +349cbf4,cfbacfba +349cbf8,cf7acf7a +349cbfc,cfbacfba +349cc00,cfbad7fc +349cc04,e03ee03e +349cc08,e03ee03e +349cc0c,d7fcd7fc +349cc10,e03ee87e +349cc14,e03ee03e +349cc18,eff8d730 +349cc1c,21847318 +349cc20,849c84dc +349cc24,a5289ce6 +349cc28,731673d6 +349cc2c,73162ad4 +349cc30,d7fece7a +349cc34,ce7ace7a +349cc38,ce7ace7a +349cc3c,ce7ace7a +349cc40,ce7ac678 +349cc44,cf7acf7a +349cc48,cfbacf7a +349cc4c,cf7ad7ba +349cc50,dffcdf3c +349cc54,d7bae7fc +349cc58,7781000 +349cc5c,63d47b5a +349cc60,7b5a8cde +349cc64,9ce694a4 +349cc68,73167316 +349cc6c,6ad61994 +349cc70,d740c67a +349cc74,c67cc67c +349cc78,c67cc67c +349cc7c,c6bac67c +349cc80,c67cc67c +349cc84,c7bacf7a +349cc88,cf7ac77a +349cc8c,d7bcce7a +349cc90,be3ac77a +349cc94,cfbec638 +349cc98,ff7c6bd4 +349cc9c,28c47b15 +349cca0,7b59a528 +349cca4,9ce694a4 +349cca8,73166bd6 +349ccac,73162a96 +349ccb0,d740cf7a +349ccb4,c77cc77a +349ccb8,cf7acf7a +349ccbc,c67cc67c +349ccc0,ce7acf7a +349ccc4,cf7acf7a +349ccc8,cf7abe36 +349cccc,c77ac678 +349ccd0,ce7a0000 +349ccd4,cfbca6f8 +349ccd8,52107316 +349ccdc,2182a526 +349cce0,8cdea528 +349cce4,9ce694a4 +349cce8,73d67316 +349ccec,73162ad4 +349ccf0,df40ce7a +349ccf4,c77acf7a +349ccf8,c77ace7a +349ccfc,cf7ac77c +349cd00,cf7acf7a +349cd04,cf7acfba +349cd08,ceb8d67a +349cd0c,c638f782 +349cd10,10021984 +349cd14,df3ec67c +349cd18,7b5a7318 +349cd1c,7c587c5a +349cd20,7b587b5a +349cd24,7b9a7b9a +349cd28,731673d4 +349cd2c,73d61994 +349cd30,df40ce78 +349cd34,cf7acf7a +349cd38,c77acf7a +349cd3c,cf78ce7a +349cd40,cf7ac678 +349cd44,ce7abe38 +349cd48,c678d7fc +349cd4c,d7febf3a +349cd50,ceb81944 +349cd54,cffebe7a +349cd58,73186ad4 +349cd5c,62946394 +349cd60,849c84dc +349cd64,8cde8cde +349cd68,73d47316 +349cd6c,73d61994 +349cd70,e042c77a +349cd74,c77acf7a +349cd78,c77ace7a +349cd7c,dffccf78 +349cd80,ce7ace7a +349cd84,cf78ce7a +349cd88,b6f6aef6 +349cd8c,aef6bf78 +349cd90,be36ef3e +349cd94,be7ca6fa +349cd98,4a53739e +349cd9c,739c739c +349cda0,ad6aad6a +349cda4,ad6a849c +349cda8,73d673d6 +349cdac,73d61992 +349cdb0,e042c67c +349cdb4,c77ace7a +349cdb8,cf7ac77a +349cdbc,ce7ace7a +349cdc0,ce7ac678 +349cdc4,cfbacf7a +349cdc8,c638aef6 +349cdcc,ceb8d7ba +349cdd0,d7fcc638 +349cdd4,c67ac67a +349cdd8,ce78ce7a +349cddc,cf78ce78 +349cde0,c77ac77a +349cde4,635a7318 +349cde8,73167316 +349cdec,73162ad4 +349cdf0,df40ce7a +349cdf4,ce7ac678 +349cdf8,ce7acf7a +349cdfc,cf7ace7a +349ce00,ce7ace7a +349ce04,cf78c678 +349ce08,c77abf38 +349ce0c,b638dffc +349ce10,c678c67a +349ce14,c67ac67a +349ce18,c678c67a +349ce1c,c67ac67a +349ce20,ce78c77a +349ce24,739c7318 +349ce28,731673d6 +349ce2c,73162194 +349ce30,d7fece7a +349ce34,ce7acf7a +349ce38,cf7ac77a +349ce3c,c77acf7a +349ce40,c77acf7a +349ce44,cf7acf7a +349ce48,c77ac67a +349ce4c,c67ac77a +349ce50,c77ac77a +349ce54,c77ac77a +349ce58,c77ac77a +349ce5c,c77ac67a +349ce60,c77ac77a +349ce64,739c7318 +349ce68,731673d6 +349ce6c,73161994 +349ce70,d7fec77a +349ce74,c77acf7a +349ce78,c77ac67c +349ce7c,c67ac67c +349ce80,c77ac77a +349ce84,c77ac77a +349ce88,cf7acf7a +349ce8c,cf7ac77a +349ce90,c77cc77a +349ce94,c77ccf7a +349ce98,cf7ac77a +349ce9c,c77ac77a +349cea0,c77acf7a +349cea4,739c7318 +349cea8,6bd66ad6 +349ceac,6ad62194 +349ceb0,cffec67a +349ceb4,c77ac67c +349ceb8,c67ac6ba +349cebc,c6bac6ba +349cec0,c67ac67c +349cec4,c67ac77a +349cec8,c77ac77a +349cecc,c67ac67a +349ced0,c77ac67c +349ced4,c67cc77a +349ced8,c77acf7a +349cedc,cf7ac77a +349cee0,cf7acf7a +349cee4,739c7318 +349cee8,6bd673d6 +349ceec,6ad62ad4 +349cef0,d7fccf7a +349cef4,cf7ac77a +349cef8,cf7ace7a +349cefc,ce7acf7a +349cf00,c67ac67c +349cf04,ce7acf7a +349cf08,c77acf7a +349cf0c,c77ac77a +349cf10,cf7acf7a +349cf14,cf7ac77a +349cf18,c77acf7a +349cf1c,cf7acf7a +349cf20,ce7ace7a +349cf24,739c7318 +349cf28,73d48cde +349cf2c,6ad64256 +349cf30,e87ee83e +349cf34,d7fccffc +349cf38,e040f800 +349cf3c,dffc +349cf40,c77ace7a +349cf44,c778cf78 +349cf48,cf7acf7a +349cf4c,cfbacf7a +349cf50,cfbccf7a +349cf54,cf7acf7a +349cf58,cf7acf78 +349cf5c,cf78cf7a +349cf60,cf7ace7a +349cf64,739c7318 +349cf68,73d48cde +349cf6c,6ad64256 +349cf70,e880e880 +349cf74,e880e03e +349cf78,e880f800 +349cf7c,d83c +349cf80,cf7acfba +349cf84,d7fccfba +349cf88,cfbacfba +349cf8c,d7fce03e +349cf90,e03edffc +349cf94,e03ee03c +349cf98,e03ccfba +349cf9c,cf7acfba +349cfa0,cfbad7bc +349cfa4,739c7318 +349cfa8,8cde839c +349cfac,73162ad4 +349cfb0,cfbccfbc +349cfb4,d7fccfbc +349cfb8,cfbce03e +349cfbc,e03ecfbc +349cfc0,ce7acf78 +349cfc4,cf7acf7a +349cfc8,cf7acf7a +349cfcc,cf78cf7a +349cfd0,cf7acf78 +349cfd4,cf7acf78 +349cfd8,cf7ace7a +349cfdc,ce7acf7a +349cfe0,cf7ad7ba +349cfe4,739c7318 +349cfe8,7b586bd6 +349cfec,6ad62a96 +349cff0,d7bacf78 +349cff4,cf7acf7a +349cff8,cf7acfbc +349cffc,cfbacf78 +349d000,c77ace7a +349d004,ce7acf78 +349d008,cf78ce7a +349d00c,ce7ace78 +349d010,ce7ace7a +349d014,ce7acf7a +349d018,ce7acf7a +349d01c,ce7ace7a +349d020,c678ce7a +349d024,739c7318 +349d028,73186bd6 +349d02c,6ad62a94 +349d030,d7bace7a +349d034,ce7ace78 +349d038,cf78cf78 +349d03c,cf78ce7a +349d040,cf7ace7a +349d044,cf7acf7a +349d048,ce7ace7a +349d04c,cf7acf7a +349d050,ce7ace7a +349d054,ce7ace7a +349d058,ce7ace7a +349d05c,ce7ace7a +349d060,ce7ace7a +349d064,739c7318 +349d068,73587318 +349d06c,73162ad4 +349d070,cebace78 +349d074,ce78ce7a +349d078,ce7ace7a +349d07c,ce7ace7a +349d080,ce7ace7a +349d084,c77ccf7a +349d088,ce7ace7a +349d08c,ce7ace7a +349d090,cf7acfba +349d094,cf7acf78 +349d098,c778ce7a +349d09c,c778cf78 +349d0a0,c778ce7a +349d0a4,739c7318 +349d0a8,6ad67318 +349d0ac,73182ad4 +349d0b0,cf7acf7a +349d0b4,cf78ce7a +349d0b8,cf78cf7a +349d0bc,cf7acf78 +349d0c0,cf78cf78 +349d0c4,c778cf78 +349d0c8,cf78ce78 +349d0cc,cf78cf7a +349d0d0,cfbccf7a +349d0d4,cf7acf7a +349d0d8,cf7ace7a +349d0dc,cf78cf78 +349d0e0,ce78ce7a +349d0e4,739c7318 +349d0e8,73187316 +349d0ec,6ad632d4 +349d0f0,cfbccf7a +349d0f4,cf78ce7a +349d0f8,cf7acfba +349d0fc,cf78cf7a +349d100,cfbacf7a +349d104,cf7acf78 +349d108,ce7ace78 +349d10c,ce7acf7a +349d110,cfbccf78 +349d114,cf78cf78 +349d118,cf78ce7a +349d11c,ce78ce7a +349d120,ce7ace7a +349d124,739c7318 +349d128,73187316 +349d12c,6ad63214 +349d130,d7bccf7a +349d134,cf78ce78 +349d138,cf78cf78 +349d13c,ce7acf7a +349d140,cf7acf7a +349d144,cf7acf78 +349d148,cf78cf78 +349d14c,cf78cf7a +349d150,cf7acf7a +349d154,cf78cf78 +349d158,cf78cf78 +349d15c,cf78c778 +349d160,cf78ce7a +349d164,739c7318 +349d168,73186b16 +349d16c,6ad63214 +349d170,dffecf7a +349d174,cf78ce78 +349d178,ce78ce7a +349d17c,cf78cf78 +349d180,cf7acf7a +349d184,cf7acf7a +349d188,cfbacfba +349d18c,cf7acf7a +349d190,cf7acf7a +349d194,cf7acfba +349d198,cfbacfba +349d19c,cffccf7a +349d1a0,cfbacf7a +349d1a4,739c7318 +349d1a8,73586ad6 +349d1ac,6ad67316 +349d1b0,2ad4dffc +349d1b4,ce7ac678 +349d1b8,ce7ace7a +349d1bc,cf78ce7a +349d1c0,cf78cf78 +349d1c4,ce7ac778 +349d1c8,cf7acf7a +349d1cc,cf7acf7a +349d1d0,cf78ce7a +349d1d4,cf78cf78 +349d1d8,cf78cf7a +349d1dc,cfbacfba +349d1e0,cf7acf78 +349d1e4,739c7318 +349d1e8,73166b16 +349d1ec,73167316 +349d1f0,73162194 +349d1f4,df40c678 +349d1f8,ce7acebc +349d1fc,ce7ace7a +349d200,ce7ace7a +349d204,c6bace7a +349d208,ce7ace7a +349d20c,ce7ace7a +349d210,cebadf40 +349d214,4acfba +349d218,c678ce7a +349d21c,ce7ace7a +349d220,ce7ac678 +349d224,739c7318 +349d228,73187358 +349d22c,7b9a7b9c +349d230,73187316 +349d234,2ad42ad4 +349d238,2ad42ad4 +349d23c,32d43214 +349d240,2ad432d4 +349d244,32143a14 +349d248,3a163a16 +349d24c,321632d4 +349d250,2ad432d4 +349d254,32142ad4 +349d258,f846cf7a +349d25c,cf7acfba +349d260,cfbacfba +349d264,739c7318 +349d268,7b587318 +349d26c,8c1e5a50 +349d270,73187316 +349d274,73167316 +349d278,6bd66bd6 +349d27c,6bd66bd4 +349d280,6bd46bd4 +349d284,6bd46bd4 +349d288,6bd46bd4 +349d28c,6bd473d4 +349d290,73d473d6 +349d294,6bd673d6 +349d298,6ad67316 +349d29c,6ad67316 +349d2a0,6ad66ad6 +349d2a4,73167316 +349d2a8,731672d6 +349d2ac,8c1e7bd6 +349d2b0,73187316 +349d2b4,73167316 +349d2b8,6bd66bd6 +349d2bc,6bd66bd4 +349d2c0,6bd46bd4 +349d2c4,6bd46bd4 +349d2c8,6bd46bd4 +349d2cc,6bd473d4 +349d2d0,73d473d6 +349d2d4,6bd673d6 +349d2d8,6ad67316 +349d2dc,6ad67316 +349d2e0,6ad66ad6 +349d2e4,73167316 +349d2e8,7b167316 +349d2ec,839c7358 +349d2f0,7b9c7316 +349d2f4,73167316 +349d2f8,6bd66bd6 +349d2fc,6bd66bd4 +349d300,6bd46bd4 +349d304,6bd46bd4 +349d308,6bd46bd4 +349d30c,6bd473d4 +349d310,73d473d6 +349d314,6bd673d6 +349d318,6ad67316 +349d31c,6ad67316 +349d320,6ad66ad6 +349d324,73167316 +349d328,6ad67318 +349d32c,73186ad6 +349d330,6ad67316 +349d334,6bd67316 +349d338,73167316 +349d33c,73d66bd6 +349d340,8420839c +349d344,6bd46bd4 +349d348,6bd46bd4 +349d34c,6bd46bd4 +349d350,73d473d4 +349d354,73d6849a +349d358,839c7316 +349d35c,73166bd6 +349d360,73166bd6 +349d364,73d67316 +349d368,6ad66ad6 +349d36c,731672d6 +349d370,6ad66ad6 +349d374,6ad66bd6 +349d378,6bd67316 +349d37c,73167316 +349d380,84205250 +349d384,6bd46bd4 +349d388,6bd46bd4 +349d38c,6bd46bd4 +349d390,6bd473d4 +349d394,73d48c1e +349d398,62927316 +349d39c,73d673d6 +349d3a0,73166bd6 +349d3a4,6bd67316 +349d3a8,7c9c7c5c +349d3ac,a5a69d62 +349d3b0,94208ce0 +349d3b4,84de8c20 +349d3b8,84e084e0 +349d3bc,849e7c9c +349d3c0,b5ac428c +349d3c4,7c9c745c +349d3c8,731a731a +349d3cc,731a731a +349d3d0,73186bd8 +349d3d4,6bd87b58 +349d3d8,a52a428c +349d3dc,8c207c5c +349d3e0,7c5c7c5c +349d3e4,7c5c849e +349d3e8,7317731a +349d3ec,9d629d64 +349d3f0,731a83de +349d3f4,835c7c9e +349d3f8,7c5c731a +349d3fc,7c5c6bd4 +349d400,b66694a6 +349d404,ad2a849e +349d408,849e849e +349d40c,7b5c7b5c +349d410,7b5c731a +349d414,5a1094dc +349d418,94e0a52a +349d41c,a5e8731a +349d420,7c5a731a +349d424,7c5c7c9e +349d428,7b596ad8 +349d42c,839e9ce6 +349d430,7b5a7c5c +349d434,7c5c7c5c +349d438,849c835a +349d43c,8cde8ce0 +349d440,9ca28c1e +349d444,849e849c +349d448,849e849e +349d44c,849e7b5c +349d450,7b5c735a +349d454,72d86ad8 +349d458,62966a96 +349d45c,6ad8731a +349d460,7b5c7318 +349d464,72da7b5c +349d468,942262d8 +349d46c,94e09c20 +349d470,94607c5c +349d474,7c5c7c5c +349d478,849c835a +349d47c,8cde8c22 +349d480,8c2084de +349d484,849e849c +349d488,849e849e +349d48c,849e7b5c +349d490,7b5c735a +349d494,731a731a +349d498,62966a96 +349d49c,6ad8731a +349d4a0,7b5c7318 +349d4a4,72da7b5a +349d4a8,7b1a7b5c +349d4ac,8c2073d0 +349d4b0,94a6745c +349d4b4,6bd87c26 +349d4b8,84e484e4 +349d4bc,84248464 +349d4c0,84e48426 +349d4c4,84668426 +349d4c8,84648c68 +349d4cc,84668466 +349d4d0,84667c26 +349d4d4,7c248424 +349d4d8,84668c66 +349d4dc,8c688c24 +349d4e0,84648c64 +349d4e4,84267c22 +349d4e8,735a6b1a +349d4ec,84e09ca6 +349d4f0,9ca673d8 +349d4f4,29d61992 +349d4f8,19941152 +349d4fc,19922154 +349d500,299639d6 +349d504,3a1831d8 +349d508,199421d8 +349d50c,31d8421a +349d510,32182198 +349d514,19961152 +349d518,2a1652da +349d51c,4a9c4258 +349d520,3a583a18 +349d524,5b1e429c +349d528,73d76a96 +349d52c,62d8745c +349d530,7b183190 +349d534,c2ef40 +349d538,ef40dffe +349d53c,df80e780 +349d540,ef82f782 +349d544,f8c0ef40 +349d548,e740df40 +349d54c,ef80ef40 +349d550,d7fed7fe +349d554,cf7cc77c +349d558,d7feef40 +349d55c,ef40ef40 +349d560,ef40ef40 +349d564,4a5c3a9c +349d568,6a9662d8 +349d56c,6ad86a94 +349d570,294c1146 +349d574,ff8200c4 +349d578,c4ff80 +349d57c,c210c4 +349d580,8040804 +349d584,8c20802 +349d588,8c2ef80 +349d58c,f780ef7e +349d590,e7fcef3e +349d594,f880f840 +349d598,f07ef880 +349d59c,82f740 +349d5a0,ef4000c4 +349d5a4,53dc531e +349d5a8,6ad66ad8 +349d5ac,72d8421c +349d5b0,e782ef40 +349d5b4,dffee73e +349d5b8,f780f780 +349d5bc,f78000c2 +349d5c0,c0f880 +349d5c4,f040ef3e +349d5c8,f880f880 +349d5cc,ef40f740 +349d5d0,ef3ef040 +349d5d4,f880f880 +349d5d8,f03e00c2 +349d5dc,8040082 +349d5e0,ef40f07e +349d5e4,631e6360 +349d5e8,62d66ad8 +349d5ec,6ad663de +349d5f0,848f03e +349d5f4,f8800002 +349d5f8,8041042 +349d5fc,f8c000c0 +349d600,8c0f880 +349d604,e73ed7ba +349d608,dffcf87e +349d60c,c008c2 +349d610,8c0f880 +349d614,f880f880 +349d618,f87eef40 +349d61c,ef40ef80 +349d620,f8c0f040 +349d624,63dc63a2 +349d628,62d56ad8 +349d62c,6ad87322 +349d630,310af882 +349d634,f8c00082 +349d638,c208c0 +349d63c,f8c0f880 +349d640,f07ee83c +349d644,e83cd7fa +349d648,dffef07e +349d64c,f882f880 +349d650,e87edffc +349d654,dffcd7fa +349d658,c63ad6bc +349d65c,e7fee7fe +349d660,e7fee73e +349d664,4a5a531e +349d668,62d5731a +349d66c,6ad85bde +349d670,290aef40 +349d674,dffef780 +349d678,ef80dffe +349d67c,dffedf40 +349d680,d7fecfbc +349d684,dffecf7c +349d688,e7fedf3e +349d68c,e73edffe +349d690,d7bcd7bc +349d694,c67aa6f6 +349d698,a6b6c67a +349d69c,d73ed7fc +349d6a0,cf7abe38 +349d6a4,3a183a5c +349d6a8,73595210 +349d6ac,6ad84a1a +349d6b0,6f8c0 +349d6b4,ef8000c2 +349d6b8,ffc6e740 +349d6bc,e740f782 +349d6c0,e740e73e +349d6c4,e77ee780 +349d6c8,c2f8c2 +349d6cc,8c200c0 +349d6d0,ef40f880 +349d6d4,e7fed7fe +349d6d8,d7fce740 +349d6dc,ef7edffe +349d6e0,d67abef6 +349d6e4,53205c62 +349d6e8,949f494a +349d6ec,6296425e +349d6f0,cf782 +349d6f4,c21046 +349d6f8,84408c4 +349d6fc,8c40804 +349d700,ef42f782 +349d704,c200c4 +349d708,8041004 +349d70c,10441004 +349d710,100400c2 +349d714,8020804 +349d718,80200c2 +349d71c,8c2f880 +349d720,f880f882 +349d724,5b626ca4 +349d728,8c9b6294 +349d72c,6ad8631e +349d730,188a1846 +349d734,10462088 +349d738,208629c8 +349d73c,29c629c6 +349d740,104600c2 +349d744,8021044 +349d748,18462084 +349d74c,18441004 +349d750,9441846 +349d754,10441004 +349d758,10441986 +349d75c,21c61844 +349d760,18441046 +349d764,636474e6 +349d768,4acf9564 +349d76c,849e6360 +349d770,21ca1144 +349d774,20804 +349d778,19441142 +349d77c,10020002 +349d780,8020800 +349d784,11401142 +349d788,11420802 +349d78c,800f8be +349d790,f07ef87e +349d794,f880f07c +349d798,f87e0802 +349d79c,10421944 +349d7a0,18420802 +349d7a4,73a27c24 +349d7a8,2184a5a6 +349d7ac,6b18439a +349d7b0,e844cfba +349d7b4,d7bad7bc +349d7b8,cfbac678 +349d7bc,cf7abf38 +349d7c0,be38c67a +349d7c4,d7fad7bc +349d7c8,cffaceba +349d7cc,c678bef6 +349d7d0,b6f6bef6 +349d7d4,b636bef6 +349d7d8,b638b6f8 +349d7dc,bf38bf78 +349d7e0,bf38b738 +349d7e4,53604b20 +349d7e8,a5a66b18 +349d7ec,6bd842da +349d7f0,c77eb636 +349d7f4,c638c67a +349d7f8,d7bac77a +349d7fc,c638b636 +349d800,a6f69e74 +349d804,a6b6b6f8 +349d808,aef4a5b6 +349d80c,adb6a5b6 +349d810,a5b6adb6 +349d814,b6f6bef8 +349d818,aeb6a674 +349d81c,a6b4aef6 +349d820,b6f6b6f6 +349d824,3a9e2b5c +349d828,6bd66bd8 +349d82c,6bd83a5a +349d830,cffebe38 +349d834,be38be36 +349d838,c63ac638 +349d83c,d6b8ce7a +349d840,be38c77a +349d844,d7bac636 +349d848,b6f69eb2 +349d84c,aef6aef6 +349d850,b6f4bef6 +349d854,c678c678 +349d858,c678c67a +349d85c,be38c678 +349d860,d67adffc +349d864,4ae0339e +349d868,6bd6731a +349d86c,6b183a58 +349d870,d700be38 +349d874,ae36a6f4 +349d878,aef6ce7a +349d87c,cebcce7a +349d880,cfbadffc +349d884,ef3ed67a +349d888,b638b6f6 +349d88c,b6f6b6f8 +349d890,bef8b6f6 +349d894,aef6bef8 +349d898,be38be36 +349d89c,b6b6b6f8 +349d8a0,c638d6bc +349d8a4,4ae03b9e +349d8a8,6b957b5a +349d8ac,6b183a58 +349d8b0,c77caef6 +349d8b4,b636b638 +349d8b8,c678d7fa +349d8bc,d7bcc77c +349d8c0,d7bedffe +349d8c4,f03ece7a +349d8c8,b6f6be78 +349d8cc,be38ce78 +349d8d0,ce78be38 +349d8d4,b6f6be38 +349d8d8,be78c638 +349d8dc,be38be36 +349d8e0,c678ce7a +349d8e4,42de3b9c +349d8e8,6bd5731a +349d8ec,6bd83218 +349d8f0,bf3cbe38 +349d8f4,d7fae87e +349d8f8,dffed7fc +349d8fc,d7fcdffc +349d900,df3ce73e +349d904,e7fcc638 +349d908,a6b4bef8 +349d90c,bef8be78 +349d910,be36b6b6 +349d914,b6f6c638 +349d918,c638c678 +349d91c,be38c636 +349d920,cfbad7ba +349d924,42e0325c +349d928,6a966294 +349d92c,62542a94 +349d930,bf7acf7a +349d934,dffce73e +349d938,e740dffc +349d93c,df3ed7fe +349d940,dffccfbc +349d944,c77abe38 +349d948,9e769e74 +349d94c,aeb4aeb6 +349d950,aeb6aeb6 +349d954,a672a674 +349d958,aeb6b678 +349d95c,bef6c638 +349d960,c638c678 +349d964,429e325c +349d968,5a5252d2 +349d96c,62542a94 +349d970,bf7ac778 +349d974,bf3ac77a +349d978,cf7ccfba +349d97c,d7bed7fc +349d980,cf7abf38 +349d984,b6f6aef6 +349d988,9e749674 +349d98c,a674aef6 +349d990,aef6b6f8 +349d994,b6f6be36 +349d998,b6f6c638 +349d99c,e73ed7ba +349d9a0,c778b6f8 +349d9a4,3a5a325c +349d9a8,6bd45a54 +349d9ac,63d62292 +349d9b0,aef6a572 +349d9b4,a572b6f6 +349d9b8,be38b636 +349d9bc,b638b638 +349d9c0,bef8c73a +349d9c4,bef6aeb6 +349d9c8,b6f6be36 +349d9cc,b6f6b6f8 +349d9d0,bef8ae36 +349d9d4,ce7ace78 +349d9d8,b6f6c678 +349d9dc,f87ed7fa +349d9e0,dfbcd7bc +349d9e4,531e325a +349d9e8,6ad66b96 +349d9ec,6bd8425a +349d9f0,e084a676 +349d9f4,a6b4aeb4 +349d9f8,aeb4ae74 +349d9fc,9e749e74 +349da00,9eb4aef6 +349da04,a674a6b6 +349da08,aef6a6b6 +349da0c,9eb49e34 +349da10,9672a6b2 +349da14,b6f6aeb6 +349da18,9e729674 +349da1c,af38a6b6 +349da20,aeb6b638 +349da24,325a3a9c +349da28,73157318 +349da2c,63966ba2 +349da30,531e1912 +349da34,ef84dffc +349da38,d7fcdffc +349da3c,d7bcd7bc +349da40,cfbabf7a +349da44,bf7ac77a +349da48,bf7abf7a +349da4c,b738b738 +349da50,b6f8c67c +349da54,df44bf7a +349da58,aef8b738 +349da5c,c638b6f8 +349da60,be37be7c +349da64,3a5b5b1e +349da68,6ad65b94 +349da6c,5a126c9e +349da70,53de5b60 +349da74,3a1839d6 +349da78,32163a16 +349da7c,3a1632d4 +349da80,31962112 +349da84,21542194 +349da88,21942152 +349da8c,21521912 +349da90,19121112 +349da94,11122994 +349da98,19cc00c2 +349da9c,f880f8c1 +349daa0,e883e081 +349daa4,4bdb531e +349daa8,6a954ace +349daac,3948a52a +349dab0,531e429e +349dab4,3a9e4a9e +349dab8,4ade4ade +349dabc,42de3a9e +349dac0,42e03a9e +349dac4,3a9e42e0 +349dac8,4ae0429e +349dacc,429e3a5e +349dad0,2a5c2a1a +349dad4,3a9e5320 +349dad8,439c3a1c +349dadc,2a1a2ada +349dae0,32193a5b +349dae4,321a3a5c +349dae8,6ad54ace +349daec,414a5b5e +349daf0,32182a1a +349daf4,2a1a2a1a +349daf8,429c42dc +349dafc,3a9c429e +349db00,3a9e3a9e +349db04,3a9e3a9e +349db08,3a9e3a9e +349db0c,429e429e +349db10,3a9e431e +349db14,74e45b60 +349db18,2a1a2ada +349db1c,321a3a9c +349db20,3a5c3a5c +349db24,429c3a9c +349db28,9ca26b16 +349db2c,63965b20 +349db30,3a5c425a +349db34,429e429e +349db38,63205320 +349db3c,4b1e4ade +349db40,321431d6 +349db44,4a9e5320 +349db48,4ae04ae0 +349db4c,53225320 +349db50,5b225b62 +349db54,6ba23b58 +349db58,19942a18 +349db5c,321a429e +349db60,439e4be0 +349db64,4be03a5c +349db68,18009ca2 +349db6c,7b5a73e2 +349db70,4ade4ade +349db74,53206362 +349db78,5b605b60 +349db7c,5b605b20 +349db80,4bde5ada +349db84,529e4a9e +349db88,429e4a9e +349db8c,5be053e0 +349db90,4a9e4a9e +349db94,3a5c0952 +349db98,3a592ad6 +349db9c,325c53e0 +349dba0,53e0429e +349dba4,3a5c429c +349dba8,87c077c +349dbac,77c077c +349dbb0,77c077c +349dbb4,77c077c +349dbb8,77c077c +349dbbc,77c00be +349dbc0,ff3c107c +349dbc4,87a087a +349dbc8,87a087a +349dbcc,87a087a +349dbd0,87a107a +349dbd4,beff3c +349dbd8,107c077c +349dbdc,f3c0f3c +349dbe0,77c077c +349dbe4,77c077c +349dbe8,87c077c +349dbec,77c077c +349dbf0,77c0f7c +349dbf4,77c077c +349dbf8,77c077c +349dbfc,73c087e +349dc00,18fe0f7c +349dc04,87a087a +349dc08,87a087a +349dc0c,87a087a +349dc10,107a107a +349dc14,8bc394a +349dc18,10000f7c +349dc1c,f7c077c +349dc20,f7c077c +349dc24,f3c0f7c +349dc28,87c077c +349dc2c,8bc00be +349dc30,87c077c +349dc34,77c077c +349dc38,87c087c +349dc3c,87c087c +349dc40,1840418a +349dc44,10bc087a +349dc48,87a087a +349dc4c,87a107a +349dc50,107a073c +349dc54,77c3086 +349dc58,5a12107c +349dc5c,77c107c +349dc60,77c077c +349dc64,f7c087c +349dc68,77c0f7c +349dc6c,7bc0f3a +349dc70,ffbe077c +349dc74,77c077c +349dc78,87c087c +349dc7c,87c087a +349dc80,107c4a8a +349dc84,4a8a087a +349dc88,87a087a +349dc8c,87a107a +349dc90,107a073c +349dc94,77c0f3c +349dc98,51ce52ce +349dc9c,77c107c +349dca0,77c077c +349dca4,f7c087c +349dca8,107c107c +349dcac,beff3c +349dcb0,87c077c +349dcb4,77c077c +349dcb8,87c087c +349dcbc,87c087a +349dcc0,87a10bc +349dcc4,520e3906 +349dcc8,87a087a +349dccc,87a107a +349dcd0,107a073c +349dcd4,77c0f3c +349dcd8,fc06bd4 +349dcdc,30c8107c +349dce0,77c077c +349dce4,f7c087c +349dce8,87c0f3c +349dcec,87e00fe +349dcf0,414c077c +349dcf4,ffc0ffc0 +349dcf8,ffbeffbe +349dcfc,ffbe0780 +349dd00,ffbe0880 +349dd04,10024a10 +349dd08,2046077c +349dd0c,be0780 +349dd10,780077c +349dd14,be00be +349dd18,be21c6 +349dd1c,631800be +349dd20,c000c0 +349dd24,8be087c +349dd28,107c087c +349dd2c,f7c077c +349dd30,52cc4a56 +349dd34,9cee784 +349dd38,e7c4df82 +349dd3c,f808f808 +349dd40,d784f0c8 +349dd44,e7864b60 +349dd48,6c262ad6 +349dd4c,e742df42 +349dd50,e782e782 +349dd54,f848e8c6 +349dd58,f0c82296 +349dd5c,54625360 +349dd60,f008d742 +349dd64,1042087c +349dd68,8bc08bc +349dd6c,77c077c +349dd70,f082229e +349dd74,114ae80 +349dd78,9dbc9dba +349dd7c,9eba8d36 +349dd80,957a9dba +349dd84,a6fcae80 +349dd88,1560154 +349dd8c,bf0495bc +349dd90,9eb89dba +349dd94,a6baaf3e +349dd98,9ebaaefe +349dd9c,e98e1ada +349dda0,a56a73c +349dda4,800087c +349dda8,87c08bc +349ddac,77cc638 +349ddb0,85f4f0d0 +349ddb4,1198e88e +349ddb8,9efc9578 +349ddbc,a6fc8d76 +349ddc0,9db8a73c +349ddc4,a6faae40 +349ddc8,f8d012d6 +349ddcc,954aefc +349ddd0,b740af3e +349ddd4,bf80c7c2 +349ddd8,aefc9efa +349dddc,b77e1298 +349dde0,1296e00a +349dde4,1982087c +349dde8,87c077c +349ddec,77cc680 +349ddf0,96b80252 +349ddf4,1ada12da +349ddf8,d088a6fc +349ddfc,9eb89efc +349de00,aefcb780 +349de04,bf80f04c +349de08,914c842 +349de0c,12d8f990 +349de10,b780bfc2 +349de14,aefab63e +349de18,a6fab780 +349de1c,112f990 +349de20,e14a1a96 +349de24,1042087c +349de28,87c0f7c +349de2c,77ce044 +349de30,f98e221a +349de34,f9900996 +349de38,95696b8 +349de3c,a6fabf82 +349de40,9eb8ae3c +349de44,df8653de +349de48,1d0a6ba +349de4c,f9d012d8 +349de50,d744aefa +349de54,b63cbf80 +349de58,b780f990 +349de5c,1149efc +349de60,9eb8321a +349de64,1042087c +349de68,77c087c +349de6c,87cd786 +349de70,22d8221a +349de74,a73cb6c0 +349de78,99401d2 +349de7c,b63aaf7e +349de80,aefcb67e +349de84,1a945b20 +349de88,be7ca6ba +349de8c,aefc1ada +349de90,95496b8 +349de94,a6b8b77e +349de98,e94e0112 +349de9c,bf80a5ba +349dea0,b73ebe80 +349dea4,1042087c +349dea8,77c077c +349deac,107c12d4 +349deb0,1a1af090 +349deb4,9eb8a6fe +349deb8,f18e2a5c +349debc,335c2b9c +349dec0,43e02218 +349dec4,325cf84c +349dec8,b63eaf3e +349decc,aefce98c +349ded0,22d82a1a +349ded4,3a9e3a9c +349ded8,3a9ee84c +349dedc,9eb8a6fc +349dee0,af3e9eb8 +349dee4,1042087c +349dee8,107c0f3c +349deec,77c3a9c +349def0,1ad8af7e +349def4,a6faaf3e +349def8,1a9833de +349defc,2a5e225a +349df00,5360339e +349df04,2b9cbf80 +349df08,af40af3e +349df0c,b740f9d0 +349df10,3bde3b20 +349df14,54a26c24 +349df18,64e40110 +349df1c,9db8b740 +349df20,af3e9dba +349df24,1042087c +349df28,77c077c +349df2c,77c4a9e +349df30,d2a6fc +349df34,95789db8 +349df38,1a182b5c +349df3c,954d7c8 +349df40,e80a12d6 +349df44,339ee008 +349df48,a6fea6fc +349df4c,af3e1a98 +349df50,335e12d6 +349df54,d742e8c6 +349df58,4b22221a +349df5c,95b89eb8 +349df60,aefce94e +349df64,1042087c +349df68,f3a087e +349df6c,518c5322 +349df70,e84ef9d0 +349df74,112f8d0 +349df78,19d8e00a +349df7c,95769576 +349df80,9576b7c0 +349df84,2a1c19d8 +349df88,11961196 +349df8c,954f9d0 +349df90,e008a6ba +349df94,9eb89e78 +349df98,f14e221c +349df9c,d046e008 +349dfa0,f14e0112 +349dfa4,1042087c +349dfa8,103a394a +349dfac,6294429e +349dfb0,f0d212d6 +349dfb4,11d81196 +349dfb8,152cf46 +349dfbc,a6fc9576 +349dfc0,a6fc9578 +349dfc4,1520154 +349dfc8,11d619d8 +349dfcc,1198e84c +349dfd0,af3e9676 +349dfd4,95ba9578 +349dfd8,e94c221a +349dfdc,a54221c +349dfe0,1ad80954 +349dfe4,1042087c +349dfe8,87e1802 +349dfec,62943a9c +349dff0,8d78ae3e +349dff4,b6c09576 +349dff8,f8d0cf86 +349dffc,a6fcae3e +349e000,af3eb73c +349e004,152ae3e +349e008,a63ec706 +349e00c,cf461294 +349e010,12948d34 +349e014,8d369eb8 +349e018,e00c0954 +349e01c,c702e808 +349e020,e80c0914 +349e024,1042087c +349e028,77c077c +349e02c,498a5362 +349e030,a6faa5bc +349e034,a6fa9576 +349e038,2540a94 +349e03c,c7c2a6ba +349e040,b67e2a18 +349e044,1ad6a6b8 +349e048,aefab780 +349e04c,cf022a94 +349e050,3b9a1a18 +349e054,b67ed744 +349e058,221829d8 +349e05c,df40c7bc +349e060,d704018e +349e064,1042087c +349e068,77c0f3c +349e06c,f3c64a2 +349e070,3218c67e +349e074,cfbedf86 +349e078,429c4bde +349e07c,53dc3b9c +349e080,21d62218 +349e084,2ad8d704 +349e088,d704cf00 +349e08c,df002a94 +349e090,439c4bdc +349e094,531c535e +349e098,53605b1e +349e09c,10cce804 +349e0a0,ef820048 +349e0a4,1042087c +349e0a8,77c0f3c +349e0ac,73c2150 +349e0b0,43dcdf44 +349e0b4,cf020910 +349e0b8,3a9ae788 +349e0bc,4c004c +349e0c0,e886c7c2 +349e0c4,22d81ad6 +349e0c8,be3ccf02 +349e0cc,9ce43e0 +349e0d0,f98cd700 +349e0d4,e8c6e884 +349e0d8,e0462a94 +349e0dc,439ce044 +349e0e0,cfbe2a18 +349e0e4,1042087c +349e0e8,77c073c +349e0ec,77ccfbe +349e0f0,2a182196 +349e0f4,d744221a +349e0f8,1d0ae3c +349e0fc,cf04be7e +349e100,e742cf00 +349e104,c7041a1a +349e108,f88ef88e +349e10c,2a5a1996 +349e110,c7c2be80 +349e114,b680b63c +349e118,b67ebe7c +349e11c,21941992 +349e120,f04c2a5a +349e124,1042087c +349e128,77c077c +349e12c,77cc67e +349e130,8e3a9e +349e134,429e335a +349e138,c700c7c2 +349e13c,c7c2be80 +349e140,e7820006 +349e144,c7be1152 +349e148,3a5c329e +349e14c,325abe7e +349e150,c67ebe7e +349e154,be80be3c +349e158,be7ec6be +349e15c,cfbef890 +349e160,e00ee00e +349e164,f7be087c +349e168,73c073c +349e16c,73cd702 +349e170,d7023a5c +349e174,53e02150 +349e178,df44c680 +349e17c,be7caefc +349e180,cfbeefc6 +349e184,d700014c +349e188,4be05320 +349e18c,325acfc0 +349e190,e884cfbe +349e194,d842cf00 +349e198,83c083c +349e19c,83c083c +349e1a0,83c083c +349e1a4,83c087c +349e1a8,77c107a +349e1ac,73cdf42 +349e1b0,cf02221a +349e1b4,3a5e4b9c +349e1b8,c700aefa +349e1bc,c67eaefa +349e1c0,a6fabe7e +349e1c4,bec01154 +349e1c8,3a9e439c +349e1cc,2a5c1952 +349e1d0,d704cec2 +349e1d4,df46df02 +349e1d8,77e073c +349e1dc,73c073c +349e1e0,73c073c +349e1e4,73c073c +349e1e8,73c103a +349e1ec,73cf8c8 +349e1f0,8e2a5a +349e1f4,e0c82ad8 +349e1f8,22d8a6ba +349e1fc,aefab6fc +349e200,ae3eb63e +349e204,c7c02a1a +349e208,1954f84a +349e20c,21d83a9e +349e210,f80cd702 +349e214,d842f0c8 +349e218,77e073c +349e21c,107c107a +349e220,73c073c +349e224,77c077c +349e228,77c083c +349e22c,77ce8c6 +349e230,2ad80912 +349e234,aefab780 +349e238,22d80912 +349e23c,b740c7c2 +349e240,a6b8cfc2 +349e244,1112531e +349e248,ef82cf00 +349e24c,d7004b20 +349e250,3a5aef84 +349e254,f0c8df40 +349e258,77e073c +349e25c,f8be00fe +349e260,77c077c +349e264,77c077c +349e268,103a073c +349e26c,83c2196 +349e270,1ad8bf82 +349e274,9d788d34 +349e278,e80a12d8 +349e27c,11561ad8 +349e280,1296e84c +349e284,22d82ad2 +349e288,f0c2d742 +349e28c,e8862ad6 +349e290,4b205b60 +349e294,5b20439c +349e298,77e077c +349e29c,f7a0f3c +349e2a0,77c077c +349e2a4,be0000 +349e2a8,f7c0f7c +349e2ac,77c4b20 +349e2b0,1154bfc2 +349e2b4,af409578 +349e2b8,f18e19da +349e2bc,2b5c339e +349e2c0,43e043a0 +349e2c4,1ad8f0c8 +349e2c8,4d700 +349e2cc,bfc042dc +349e2d0,53624320 +349e2d4,3b203b20 +349e2d8,77e077c +349e2dc,77c0f3c +349e2e0,f3c00be +349e2e8,f7c0f3c +349e2ec,284264a4 +349e2f0,f00aaefa +349e2f4,b780af40 +349e2f8,a94225a +349e2fc,f8d2d088 +349e300,f9903a5c +349e304,4c60df44 +349e308,e884d742 +349e30c,19945362 +349e310,4ae01996 +349e314,1ce2a1a +349e318,77e077c +349e31c,f7c0f7c +349e320,f7c0000 +349e328,f3a087e +349e32c,518e5b60 +349e330,21541954 +349e334,1a1812d6 +349e338,1296e0ca +349e33c,aefc9eb8 +349e340,b7c09efa +349e344,3ade2a1a +349e348,225c429e +349e34c,43dc3a5a +349e350,d7c0cec2 +349e354,d704df46 +349e358,77e0f7c +349e35c,77c077c +349e360,77c00be +349e368,103a2984 +349e36c,51d05320 +349e370,22d63a5a +349e374,2a5a335a +349e378,3a5a018c +349e37c,c7bebf7a +349e380,cfbec7be +349e384,43de3b5c +349e388,3a5e3ade +349e38c,29d83a16 +349e390,df40df00 +349e394,f808df00 +349e398,77e0f7c +349e39c,77c087c +349e3a0,87c073c +349e3a4,be0000 +349e3a8,87e2044 +349e3ac,52105b1e +349e3b0,f0c8f8c8 +349e3b4,df42ef84 +349e3b8,429a1950 +349e3bc,df40d7be +349e3c0,df00efc6 +349e3c4,5b6011cc +349e3c8,f7c4ef84 +349e3cc,e8c65b60 +349e3d0,80148 +349e3d4,118c0006 +349e3d8,77e077c +349e3dc,87c107c +349e3e0,107c087c +349e3e4,8bc0000 +349e3e8,f7c077c +349e3ec,518c6ba2 +349e3f0,f808ef86 +349e3f4,df40df40 +349e3f8,439c4bdc +349e3fc,f006e782 +349e400,4a4218 +349e404,64a0e882 +349e408,f0c4e880 +349e40c,f7c45b5e +349e410,64a00846 +349e414,94a2110 +349e418,77e107c +349e41c,87c087c +349e420,87c08bc +349e428,f7c0f3c +349e42c,204264a4 +349e430,cf44cf04 +349e434,c7c2cf44 +349e438,2a5a2a1a +349e43c,19961996 +349e440,22182a58 +349e444,3b5cd742 +349e448,df40e886 +349e44c,df441950 +349e450,439c325a +349e454,3b9c4b9c +349e458,77e107c +349e45c,8bc087c +349e460,87c077e +349e468,f7c0f7c +349e46c,77c43de +349e470,f0909dba +349e474,9dbce04c +349e478,996ae3e +349e47c,a63cae40 +349e480,95789578 +349e484,a961254 +349e488,aefaa6fa +349e48c,e80c325a +349e490,e0c8b780 +349e494,cf06bfc0 +349e498,77e107c +349e49c,77a107a +349e4a0,87c0000 +349e4a8,f7c077c +349e4ac,f7c3b5c +349e4b0,1296c7c2 +349e4b4,b78212d8 +349e4b8,f14eaefa +349e4bc,9dbcae40 +349e4c0,9578a6ba +349e4c4,d0461ad6 +349e4c8,e80ae80a +349e4cc,221a21d6 +349e4d0,c67edf40 +349e4d4,be3caefc +349e4d8,77e107c +349e4dc,87a00fe +349e4e0,87c0000 +349e4e8,73c0f7c +349e4ec,77c439c +349e4f0,325ae8c8 +349e4f4,221a1254 +349e4f8,af7eb63c +349e4fc,af3eb782 +349e500,b740aefc +349e504,bf800110 +349e508,325a3a9e +349e50c,321abe3c +349e510,df02118a +349e514,e740e746 +349e518,77e077c +349e51c,107c087c +349e520,107c087c +349e524,8bc08bc +349e528,77c103a +349e52c,73cdfc8 +349e530,22182194 +349e534,2218c7c0 +349e538,a6fabe3e +349e53c,d702b63c +349e540,aefcbe7c +349e544,bfc0cf02 +349e548,325a3a9c +349e54c,d8c89eba +349e550,b67c0148 +349e554,e886c67c +349e558,77e0f7c +349e55c,77c087c +349e560,87c08bc +349e564,10be10be +349e568,103a077c +349e56c,73cbfc0 +349e570,d0461296 +349e574,d8c8aefa +349e578,af3ec7c0 +349e57c,806c7be +349e580,be7edf46 +349e584,cfbee80a +349e588,1ad61ad8 +349e58c,9eb8a63c +349e590,aefcd702 +349e594,d704b780 +349e5a4,d732 +349e5a8,73c073c +349e5ac,73cd744 +349e5b0,12981198 +349e5b4,1296e0c8 +349e5b8,aefab780 +349e5bc,cf02b63e +349e5c0,cf04c6c0 +349e5c4,df40df42 +349e5c8,1d01a1a +349e5cc,1152cfbe +349e5d0,be7cc680 +349e5d4,b67ec7c2 +349e5d8,c7c0cec0 +349e5dc,f0c8321a +349e5e0,12d6e0ca +349e5e4,87c +349e5e8,77c077c +349e5ec,77c2296 +349e5f0,221a0912 +349e5f4,1154325a +349e5f8,bfc0aefa +349e5fc,b63ec680 +349e600,b63ecfc2 +349e604,e88800ce +349e608,f9d0f14e +349e60c,2a5ccf42 +349e610,c6beb67e +349e614,c7c0c7c2 +349e618,bf00bfc0 +349e61c,11540912 +349e620,8e0954 +349e624,1042087c +349e628,77c073c +349e62c,77c429e +349e630,1154b67e +349e634,cf041a98 +349e638,1a96af7e +349e63c,9eb8ae3c +349e640,a6fac7c2 +349e644,cf061a96 +349e648,e8cac704 +349e64c,225a2218 +349e650,bf7ea6fa +349e654,a63cb640 +349e658,ae3c01d0 +349e65c,954bfc2 +349e660,ae3e01d0 +349e664,1042087c +349e668,77c0f3c +349e66c,2000325c +349e670,b7809eb8 +349e674,af7ebfc2 +349e678,1296f090 +349e67c,9db8a6fe +349e680,af3ca6fa +349e684,e80c0112 +349e688,c7c2b63e +349e68c,e0ca1ad8 +349e690,f190a6fa +349e694,af40b740 +349e698,f14e0954 +349e69c,c744a63c +349e6a0,ae3caf3e +349e6a4,1042087c +349e6a8,77c077c +349e6ac,62542154 +349e6b0,8d76a6fa +349e6b4,a6fca6fe +349e6b8,d7c80996 +349e6bc,19411d8 +349e6c0,1196e84e +349e6c4,112d046 +349e6c8,b780af3e +349e6cc,95760112 +349e6d0,12961198 +349e6d4,1a1c221a +349e6d8,1ad8e80c +349e6dc,aefeaf3e +349e6e0,a6bab63e +349e6e4,1042087c +349e6e8,77c2842 +349e6ec,7b1a3b9a +349e6f0,c700aefa +349e6f4,aefa9efa +349e6f8,1d0429e +349e6fc,4be0335c +349e700,225a221c +349e704,d2bf82 +349e708,a6fab73e +349e70c,ae3cf9d0 +349e710,339c339e +349e714,22d81a18 +349e718,2b5c0912 +349e71c,aefaa6fa +349e720,c7c0b67e +349e724,1042087c +349e728,f3a7318 +349e72c,52106ba2 +349e730,3ad200c4 +349e734,108c004a +349e738,6ce49528 +349e73c,84623192 +349e740,d8c82a5a +349e744,5462e044 +349e748,f0c6d7c0 +349e74c,f0c64bde +349e750,4bdc084a +349e754,e742d7c0 +349e758,3a185c60 +349e75c,e886e886 +349e760,e84608d0 +349e764,1042087c +349e768,103a2044 +349e76c,77e6360 +349e770,53dc6ce2 +349e774,74e45b1e +349e778,7c68635a +349e77c,290cf804 +349e780,df420048 +349e784,742453dc +349e788,5b605b60 +349e78c,531e53dc +349e790,8f782 +349e794,f8c40006 +349e798,11ca6ba2 +349e79c,f808194e +349e7a0,2ad2425a +349e7a4,1042087c +349e7a8,87e390a +349e7ac,39064b20 +349e7b0,3a5a4a9c +349e7b4,52dc429c +349e7b8,4b1e224e +349e7bc,f8c4e744 +349e7c0,d704f0c8 +349e7c4,4b1e3a18 +349e7c8,53de43de +349e7cc,2ad62a94 +349e7d0,e084df02 +349e7d4,e886d700 +349e7d8,18c429e +349e7dc,3a9c4b20 +349e7e0,5360439c +349e7e4,1042087c +349e7e8,107c1000 +349e7ec,5210439e +349e7f0,e884d842 +349e7f4,d700e744 +349e7f8,425a2152 +349e7fc,f0c4cfbe +349e800,a6fab67e +349e804,325af80a +349e808,d700c67e +349e80c,cf022194 +349e810,cfc2be3c +349e814,c7c2bf80 +349e818,22181ad6 +349e81c,cf44f00a +349e820,ce1996 +349e824,1042087c +349e828,87c077c +349e82c,498e5c62 +349e830,e044d704 +349e834,c6c0df04 +349e838,3358439a +349e83c,e042c680 +349e840,ae3c2218 +349e844,1ad6aefa +349e848,cf02bfc0 +349e84c,bf8001d0 +349e850,2218325a +349e854,b67ecfc0 +349e858,22182a18 +349e85c,b67ec7c2 +349e860,be80e80c +349e864,1042087c +349e868,8bc087c +349e86c,18fe64e4 +349e870,8d2c67c +349e874,cec0df46 +349e878,3a9c3a5c +349e87c,22d81996 +349e880,21962218 +349e884,a56b63c +349e888,be3cc7c0 +349e88c,c67ef84c +349e890,3a1a429a +349e894,321a3358 +349e898,339a321a +349e89c,f14ad700 +349e8a0,d842e7c8 +349e8a4,1042087c +349e8a8,77c087c +349e8ac,87c3a5a +349e8b0,43ded700 +349e8b4,d7001954 +349e8b8,4bdc004c +349e8bc,e886f008 +349e8c0,e8c4df40 +349e8c4,339a1a52 +349e8c8,e044df44 +349e8cc,11104bde +349e8d0,9cee886 +349e8d4,f84ae8c6 +349e8d8,f0c81954 +349e8dc,3b5ae8c6 +349e8e0,d6c02196 +349e8e4,1042087c +349e8e8,87c0f7c +349e8ec,77c0008 +349e8f0,5b60084c +349e8f4,e8863a9e +349e8f8,32d6df40 +349e8fc,e042d700 +349e900,e784e884 +349e904,98e43dc +349e908,d74408ce +349e90c,3a5c3a18 +349e910,f0c6d700 +349e914,d702d702 +349e918,d842d744 +349e91c,21941996 +349e920,d0325a +349e924,1042087c +349e928,87c0f7c +349e92c,77cf0c4 +349e930,3a183b9c +349e934,4bde3218 +349e938,d842cfbe +349e93c,cf02d700 +349e940,df00d742 +349e944,f0c832d8 +349e948,3a184b1e +349e94c,439ce884 +349e950,e886d700 +349e954,e844e882 +349e958,e884e042 +349e95c,c7be2a18 +349e960,439c321a +349e964,1042087c +349e968,87c08bc +349e96c,77ce804 +349e970,f8c85b62 +349e974,5c62df84 +349e978,d6c2d704 +349e97c,cfbed702 +349e980,d700d700 +349e984,d700f0c6 +349e988,4b1e5360 +349e98c,98cd700 +349e990,d700d742 +349e994,df42df40 +349e998,f8c6f0c6 +349e99c,e7c4e8c4 +349e9a0,53602152 +349e9a4,1042087c +349e9a8,8bc077c +349e9ac,77c077c +349e9b0,f9cc64e4 +349e9b4,429ec6be +349e9b8,d702d704 +349e9bc,d702be7e +349e9c0,cfbed702 +349e9c4,be7ef98c +349e9c8,439e09d0 +349e9cc,cfc0df04 +349e9d0,cfbed702 +349e9d4,d702d702 +349e9d8,e044cfc0 +349e9dc,484bde +349e9e0,3218e844 +349e9e4,20c6087c +349e9e8,107c08bc +349e9ec,f7c077c +349e9f0,390863a6 +349e9f4,d746c700 +349e9f8,be7ecf04 +349e9fc,c67ec7c0 +349ea00,cf02cec0 +349ea04,c7021196 +349ea08,42e0e788 +349ea0c,cec0c6c0 +349ea10,be7caefa +349ea14,be3cb63c +349ea18,cf02c67e +349ea1c,19545b64 +349ea20,8cecf02 +349ea24,20c6087c +349ea28,87c08bc +349ea2c,7bc0800 +349ea30,52104148 +349ea34,e884e886 +349ea38,e886d700 +349ea3c,f084df40 +349ea40,df44e884 +349ea44,11ce74e2 +349ea48,3a18ef86 +349ea4c,df42e884 +349ea50,e884df00 +349ea54,d7fed700 +349ea58,df42e884 +349ea5c,6ce47424 +349ea60,f806e740 +349ea64,20c6087c +349ea68,107c087c +349ea6c,be077a +349ea70,10c0077c +349ea74,77c077c +349ea78,87c087c +349ea7c,87c087a +349ea80,87a087a +349ea84,28426b92 +349ea88,18be087a +349ea8c,87a107a +349ea90,107a073c +349ea94,77c0f3c +349ea98,77c31c4 +349ea9c,72d62984 +349eaa0,77c077c +349eaa4,fbc087a +349eaa8,107c0f3c +349eaac,be0ffa +349eab0,87c077c +349eab4,77c077c +349eab8,87c087c +349eabc,87c087a +349eac0,87a087a +349eac4,6392414a +349eac8,87a087a +349eacc,87a107a +349ead0,107a073c +349ead4,77c0f3c +349ead8,18007c58 +349eadc,3108107c +349eae0,77c077c +349eae4,fbc087a +349eae8,107a107c +349eaec,77e08bc +349eaf0,ffbe077c +349eaf4,77c077c +349eaf8,87c087c +349eafc,87c087a +349eb00,87a2982 +349eb04,52cc087a +349eb08,87a087a +349eb0c,87a107a +349eb10,107a073c +349eb14,77c0f3c +349eb18,390a4248 +349eb1c,77c107c +349eb20,77c077c +349eb24,fbc087a +349eb28,77c087c +349eb2c,87c077c +349eb30,77c0f7c +349eb34,77c077c +349eb38,77c077c +349eb3c,73c087c +349eb40,77e +349eb44,87a087a +349eb48,87a087a +349eb4c,87a087a +349eb50,107a107a +349eb54,73c107c +349eb58,77e0f7c +349eb5c,f7c077c +349eb60,f7c077c +349eb64,73cff38 +349eb68,77c077c +349eb6c,107c0f3c +349eb70,77c077c +349eb74,77c077c +349eb78,77c077c +349eb7c,77c077c +349eb80,ff7c +349eb84,87a087a +349eb88,87a087a +349eb8c,87a087a +349eb90,87a107a +349eb94,107a08bc +349eb98,77a077c +349eb9c,f3c0f3c +349eba0,77c077c +349eba4,77c077c +349eba8,8bc087c +349ebac,87e107c +349ebb0,f7c077e +349ebb4,8bc07bc +349ebb8,be00be +349ebbc,87c00be +349ebc0,87a +349ebc4,8bc00be +349ebc8,77c077c +349ebcc,77c077c +349ebd0,f7c077c +349ebd4,77c077c +349ebd8,87a +349ebdc,7bc087c +349ebe0,87c087c +349ebe4,87c087c +349ebe8,87c087c +349ebec,107c087e +349ebf0,87c07bc +349ebf4,87c00be +349ebf8,87c077c +349ebfc,87c08bc +349ec00,be1084 +349ec04,394c087c +349ec08,87c087c +349ec0c,77c077c +349ec10,77c077c +349ec14,77c077c +349ec18,87e18c6 +349ec1c,be077c +349ec20,107c077c +349ec24,87c00be +349ec28,87c077c +349ec2c,77e0000 +349ec30,8bc087c +349ec34,87c087c +349ec38,87c0f3c +349ec3c,87c00be +349ec40,8bc1000 +349ec44,63542140 +349ec48,87c087c +349ec4c,87c077c +349ec50,77c077c +349ec54,77c077c +349ec58,77c6252 +349ec5c,51ce087c +349ec60,87c107c +349ec64,f3c087c +349ec68,77e07bc +349ec6c,87e0f3c +349ec70,be087c +349ec74,87c087c +349ec78,87c0f3c +349ec7c,87c00be +349ec80,8bc08bc +349ec84,31c85a0e +349ec88,87c087c +349ec8c,87c077c +349ec90,77c077c +349ec94,77c077c +349ec98,77c494a +349ec9c,7318087c +349eca0,87c107c +349eca4,f3c087c +349eca8,87c087c +349ecac,87a +349ecb0,be +349ecb4,77cf7c6 +349ecb8,f784ef40 +349ecbc,efc2e73e +349ecc0,c6ef40 +349ecc4,190c8466 +349ecc8,7c2439d4 +349eccc,3214210e +349ecd0,f7c40008 +349ecd4,ef820804 +349ecd8,411c8 +349ecdc,95a8f8c0 +349ece0,f002f8c0 +349ece4,f0c2f002 +349ece8,8bc00be +349ecec,be0000 +349ecf0,42ce5a52 +349ecf4,3a9cc6be +349ecf8,c6c2b63c +349ecfc,bebec67e +349ed00,cf0210d0 +349ed04,2ad63a9c +349ed08,4b221996 +349ed0c,be7edf04 +349ed10,c67ebe3e +349ed14,b67ebf80 +349ed18,d0424a9a +349ed1c,84ac2952 +349ed20,4a1910 +349ed24,9ced702 +349ed28,87c077c +349ed2c,ffbe00be +349ed30,77c63e6 +349ed34,5b623a5c +349ed38,df44be7e +349ed3c,c7021152 +349ed40,2a1a29d8 +349ed44,9ced744 +349ed48,22d8325c +349ed4c,c7bec680 +349ed50,aefac7c2 +349ed54,b740e088 +349ed58,e00a1954 +349ed5c,5b64429e +349ed60,3a5c429e +349ed64,3a5c22d8 +349ed68,77cffbe +349ed6c,77c077c +349ed70,d7422ad8 +349ed74,5ba45462 +349ed78,439eef88 +349ed7c,3b9a4b9e +349ed80,990d742 +349ed84,df00df00 +349ed88,19103ade +349ed8c,29d8c6be +349ed90,f84a321a +349ed94,53204b9e +349ed98,22922294 +349ed9c,532052e0 +349eda0,f80ce8c8 +349eda4,f0c8e886 +349eda8,77c077c +349edac,f3ce8c4 +349edb0,c67ed702 +349edb4,19963adc +349edb8,53225b64 +349edbc,1112e886 +349edc0,d842cfbe +349edc4,cfc0df00 +349edc8,e7423218 +349edcc,4ae02996 +349edd0,21d61a94 +349edd4,98cf0c6 +349edd8,e044098e +349eddc,53206464 +349ede0,d702e886 +349ede4,df42f086 +349ede8,7bc077c +349edec,77c0848 +349edf0,e8c6e044 +349edf4,f0883a5a +349edf8,4b1e6ce4 +349edfc,439adf40 +349ee00,df00d700 +349ee04,d700e742 +349ee08,19504b9c +349ee0c,53605b60 +349ee10,118ee886 +349ee14,d700cf00 +349ee18,cfbecec0 +349ee1c,2a185322 +349ee20,f0c8f0c8 +349ee24,98c088c +349ee28,7bc077c +349ee2c,77c0846 +349ee30,118ae046 +349ee34,f80a439c +349ee38,3a5a53de +349ee3c,5ce43a18 +349ee40,cffec77c +349ee44,cf001a92 +349ee48,321a018c +349ee4c,2a185320 +349ee50,1112d704 +349ee54,b63cbfbe +349ee58,cfc4cf04 +349ee5c,19544b20 +349ee60,21963a9c +349ee64,429e3b5a +349ee68,7bc077c +349ee6c,77c0004 +349ee70,46d702 +349ee74,11961954 +349ee78,d70401d0 +349ee7c,22183b20 +349ee80,1196b63c +349ee84,df861a98 +349ee88,8eaefa +349ee8c,e8082218 +349ee90,3a9ed746 +349ee94,b63cae3c +349ee98,bf80e80a +349ee9c,1196339c +349eea0,1154cf44 +349eea4,cf04cf04 +349eea8,87c087c +349eeac,77cef84 +349eeb0,cf000910 +349eeb4,2a1ae8c6 +349eeb8,c67ecf04 +349eebc,f88e321a +349eec0,4b6221d6 +349eec4,f88cd786 +349eec8,c7beb77c +349eecc,e8442294 +349eed0,42e03218 +349eed4,e78800d0 +349eed8,1154e80a +349eedc,ce325c +349eee0,321ad704 +349eee4,c67ecfbe +349eee8,7bc073c +349eeec,77cf0c6 +349eef0,bf8229d8 +349eef4,1112e786 +349eef8,e886f088 +349eefc,d7022ad6 +349ef00,325c5b64 +349ef04,2294cf02 +349ef08,df42df00 +349ef0c,f006e882 +349ef10,425a64a4 +349ef14,3218098e +349ef18,e084d700 +349ef1c,f8083b9a +349ef20,5320e888 +349ef24,d742f084 +349ef28,87e077c +349ef2c,77c118a +349ef30,19104a9c +349ef34,4cef84 +349ef38,84af8c4 +349ef3c,11ca5b1c +349ef40,429c4b1e +349ef44,7c6832d4 +349ef48,df40df3e +349ef4c,ef8431d4 +349ef50,64e273e6 +349ef54,5b60ef86 +349ef58,e784f806 +349ef5c,f80652dc +349ef60,7426f808 +349ef64,e784000a +349ef68,77c324a +349ef6c,2986214e +349ef70,4b9a4358 +349ef74,efc6f808 +349ef78,118c098a +349ef7c,74a24b9a +349ef80,f80632d2 +349ef84,6ce08de8 +349ef88,4356e840 +349ef8c,3a54649e +349ef90,329453dc +349ef94,7d663ad2 +349ef98,f082f806 +349ef9c,118a4b9a +349efa0,7c26429a +349efa4,31d632d4 +349efa8,87a31c8 +349efac,62946c22 +349efb0,439ef008 +349efb4,bf7ccfc2 +349efb8,e08629d8 +349efbc,439ee0c6 +349efc0,c67ebe7e +349efc4,f88c325a +349efc8,53a22a18 +349efcc,1112d704 +349efd0,aefad744 +349efd4,325a429c +349efd8,c6c2e80a +349efdc,12522b5a +349efe0,4b204b20 +349efe4,339a29d8 +349efe8,87e077c +349efec,18006ca4 +349eff0,335e2218 +349eff4,f84ebfbe +349eff8,df462a1c +349effc,cf44bfc2 +349f000,af3ea6fa +349f004,96bacf86 +349f008,11d832a0 +349f00c,e80c9578 +349f010,95789dba +349f014,e94c2b5c +349f018,22da0a56 +349f01c,f9100954 +349f020,2a1a3a9e +349f024,b63cb780 +349f028,73c077c +349f02c,77c2a14 +349f030,19963bde +349f034,43e0321a +349f038,1112f00a +349f03c,df44c680 +349f040,be80d742 +349f044,e7403258 +349f048,1101ad8 +349f04c,3b20e84a +349f050,aefcc7c0 +349f054,11542a5a +349f058,43e0c702 +349f05c,b77ebfc0 +349f060,22d85322 +349f064,e788ae3e +349f068,77c077c +349f06c,77c114e +349f070,b67ec7c2 +349f074,9542b9c +349f078,43203a9c +349f07c,90d704 +349f080,bfc0cfbe +349f084,425a29d6 +349f088,b680e8ca +349f08c,2a1a4b64 +349f090,9d20952 +349f094,f9d0f04c +349f098,329c22d8 +349f09c,b6fcaefc +349f0a0,11545322 +349f0a4,f84cc7c2 +349f0a8,73c077c +349f0ac,77cf0c4 +349f0b0,aefaaf7e +349f0b4,b77ed086 +349f0b8,2a1a431e +349f0bc,3bde1298 +349f0c0,e0cadfc8 +349f0c4,4b9ec7c0 +349f0c8,af3ecf04 +349f0cc,e0cc3a5c +349f0d0,5b622218 +349f0d4,aefcae3c +349f0d8,9544bde +349f0dc,f00ac780 +349f0e0,ce42e0 +349f0e4,1994bf80 +349f0e8,77c077c +349f0ec,77cdf40 +349f0f0,9eb8b63e +349f0f4,cf021252 +349f0f8,1154c702 +349f0fc,954329c +349f100,3a9c325c +349f104,1912c67e +349f108,ae3eb6fc +349f10c,b6fc1154 +349f110,429e5b62 +349f114,f88ebe3c +349f118,e8c8325c +349f11c,2a5acf00 +349f120,18c43de +349f124,2a5abf80 +349f128,77c0f7c +349f12c,f3cdf00 +349f130,a6babf80 +349f134,c7c22a18 +349f138,f88eb77e +349f13c,bfc0e0c8 +349f140,325c33de +349f144,2a1c0912 +349f148,d888a6fa +349f14c,e0861a98 +349f150,e80c22da +349f154,43def98e +349f158,aefaf910 +349f15c,43de1112 +349f160,f00a3a5c +349f164,4b20f98e +349f168,87c087c +349f16c,f3ce884 +349f170,b63ebf80 +349f174,a73e221c +349f178,aefeaf3e +349f17c,af3ee00a +349f180,1256d848 +349f184,12562a5c +349f188,1a98f18e +349f18c,914f9d2 +349f190,9eb8bfc2 +349f194,22184b22 +349f198,f18cc702 +349f19c,4b1e5c62 +349f1a0,3b5a325a +349f1a4,4b20b63e +349f1a8,107c077c +349f1ac,8bcdf42 +349f1b0,a6b89578 +349f1b4,c7041196 +349f1b8,a6fca6fc +349f1bc,9efcf8d2 +349f1c0,e00aa6ba +349f1c4,a6b8d8ca +349f1c8,1a982a5a +349f1cc,1ada0112 +349f1d0,cf06a6fa +349f1d4,df86325a +349f1d8,43e02196 +349f1dc,64a264e2 +349f1e0,53e02296 +349f1e4,5320d886 +349f1e8,77c103c +349f1ec,87cdf00 +349f1f0,aeb89e78 +349f1f4,1ce1a96 +349f1f8,ae3cb6fe +349f1fc,b73e1a98 +349f200,d888bfc0 +349f204,ae3cbfc0 +349f208,b67c1ad8 +349f20c,2b9c22da +349f210,254e008 +349f214,df46d886 +349f218,1296339e +349f21c,3b9c22d6 +349f220,3b9e01d0 +349f224,2a1a0912 +349f228,107c087c +349f22c,87cef82 +349f230,e782df42 +349f234,425a52da +349f238,f8080008 +349f23c,108e5b20 +349f240,f006d742 +349f244,df42e744 +349f248,df4243de +349f24c,2ad62294 +349f250,42de42de +349f254,2a1a1a52 +349f258,321a4bde +349f25c,429c1954 +349f260,3a9c3a5c +349f264,2a1a4b9a +349f268,77c08bc +349f26c,87c0006 +349f270,f0c8e8c4 +349f274,4a9c4a9a +349f278,f808f7c6 +349f27c,18cc5b1e +349f280,ef86e844 +349f284,d700e784 +349f288,11d053de +349f28c,18af086 +349f290,e0842ad6 +349f294,4b1e63a2 +349f298,5b623a5a +349f29c,3a5a53de +349f2a0,439c64a4 +349f2a4,4bde63a4 +349f2a8,77c087a +349f2ac,87cef82 +349f2b0,cf00cec2 +349f2b4,21d831d8 +349f2b8,cec2cf02 +349f2bc,f88e22d8 +349f2c0,be7eae3c +349f2c4,c7c0be7e +349f2c8,19942a18 +349f2cc,d704b6fc +349f2d0,a6fac7c2 +349f2d4,f88e5360 +349f2d8,5320429e +349f2dc,19961996 +349f2e0,321a429e +349f2e4,43de5322 +349f2e8,77c087a +349f2ec,87cd7fe +349f2f0,b67eae3c +349f2f4,1ad622d8 +349f2f8,c67ebe7c +349f2fc,912321a +349f300,c7c2c7c2 +349f304,c7c2b67e +349f308,1ad822d8 +349f30c,c680be3c +349f310,cf04d844 +349f314,53dc4bdc +349f318,e80a0952 +349f31c,2a1822d8 +349f320,2a183a5c +349f324,43de4b22 +349f328,8bc08bc +349f32c,10c0e806 +349f330,cec0cf00 +349f334,21961954 +349f338,f0c6f80a +349f33c,22d4321a +349f340,e8c6e7c8 +349f344,efc8f008 +349f348,3a5c321a +349f34c,18e098e +349f350,98e1110 +349f354,5b5e3b5a +349f358,1d01154 +349f35c,2196429e +349f360,53225462 +349f364,5c6463a6 +349f368,83c2082 +349f36c,849c294f +349f370,325c321a +349f374,3b5c4b9e +349f378,439c439c +349f37c,439c435c +349f380,3b5c321a +349f384,3a1a321a +349f388,2a1a321a +349f38c,435c3b5c +349f390,321a321a +349f394,22d81296 +349f398,1a982ad8 +349f39c,22d83b5c +349f3a0,3b5c2a1a +349f3a4,22d82ad8 diff --git a/worlds/oot/data/generated/symbols.json b/worlds/oot/data/generated/symbols.json index c5c0d5c0fb71..19027ba22809 100644 --- a/worlds/oot/data/generated/symbols.json +++ b/worlds/oot/data/generated/symbols.json @@ -1,196 +1,256 @@ { - "ADULT_INIT_ITEMS": "03481D54", - "ADULT_VALID_ITEMS": "03481D5C", - "AP_PLAYER_NAME": "03480834", - "AUDIO_THREAD_INFO": "03482FB0", - "AUDIO_THREAD_INFO_MEM_SIZE": "03482FCC", - "AUDIO_THREAD_INFO_MEM_START": "03482FC8", - "AUDIO_THREAD_MEM_START": "0348F330", - "BIG_POE_COUNT": "03480CEE", - "BOMBCHUS_IN_LOGIC": "03480CBC", - "CFG_A_BUTTON_COLOR": "03480854", - "CFG_A_NOTE_COLOR": "03480872", - "CFG_BOMBCHU_TRAIL_INNER_COLOR": "03480884", - "CFG_BOMBCHU_TRAIL_OUTER_COLOR": "03480887", - "CFG_BOOM_TRAIL_INNER_COLOR": "0348087E", - "CFG_BOOM_TRAIL_OUTER_COLOR": "03480881", - "CFG_B_BUTTON_COLOR": "0348085A", - "CFG_C_BUTTON_COLOR": "03480860", - "CFG_C_NOTE_COLOR": "03480878", - "CFG_DAMAGE_MULTIPLYER": "03482CA0", - "CFG_DISPLAY_DPAD": "0348088A", - "CFG_HEART_COLOR": "0348084E", - "CFG_MAGIC_COLOR": "03480848", - "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": "0348088F", - "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": "03480890", - "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": "0348088D", - "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": "0348088E", - "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": "03480893", - "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": "03480894", - "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": "03480891", - "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": "03480892", - "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": "03480895", - "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": "03480896", - "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": "03480897", - "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": "03480898", - "CFG_RAINBOW_SWORD_INNER_ENABLED": "0348088B", - "CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C", - "CFG_SHOP_CURSOR_COLOR": "0348086C", - "CFG_TEXT_CURSOR_COLOR": "03480866", - "CHAIN_HBA_REWARDS": "03483940", - "CHEST_SIZE_MATCH_CONTENTS": "03482704", - "COMPLETE_MASK_QUEST": "0348B5A5", + "ADULT_INIT_ITEMS": "03482174", + "ADULT_VALID_ITEMS": "0348217C", + "APPLY_BONK_DAMAGE": "0348334C", + "AP_PLAYER_NAME": "03480839", + "AUDIO_THREAD_INFO": "034836FC", + "AUDIO_THREAD_INFO_MEM_SIZE": "0348371C", + "AUDIO_THREAD_INFO_MEM_START": "03483718", + "AUDIO_THREAD_MEM_START": "0349F3B0", + "AUTO_TRACKER_CONTEXT": "03480D7C", + "AUTO_TRACKER_VERSION": "03480D7C", + "BIG_POE_COUNT": "03480EAD", + "BOMBCHUS_IN_LOGIC": "03480D5C", + "BONK_LAST_FRAME": "03483298", + "CFG_A_BUTTON_COLOR": "0348085C", + "CFG_A_NOTE_COLOR": "0348087A", + "CFG_BOMBCHU_TRAIL_INNER_COLOR": "0348088C", + "CFG_BOMBCHU_TRAIL_OUTER_COLOR": "0348088F", + "CFG_BONK_DAMAGE": "03483290", + "CFG_BOOM_TRAIL_INNER_COLOR": "03480886", + "CFG_BOOM_TRAIL_OUTER_COLOR": "03480889", + "CFG_B_BUTTON_COLOR": "03480862", + "CFG_CUSTOM_MESSAGE_1": "034808A3", + "CFG_CUSTOM_MESSAGE_2": "034808C3", + "CFG_C_BUTTON_COLOR": "03480868", + "CFG_C_NOTE_COLOR": "03480880", + "CFG_DAMAGE_MULTIPLYER": "03483220", + "CFG_DEADLY_BONKS": "0348328C", + "CFG_DISPLAY_DPAD": "03480892", + "CFG_DPAD_DUNGEON_INFO_ENABLE": "034808A1", + "CFG_DUNGEON_INFO_ENABLE": "03480D80", + "CFG_DUNGEON_INFO_MQ_ENABLE": "03480D84", + "CFG_DUNGEON_INFO_MQ_NEED_MAP": "03480D88", + "CFG_DUNGEON_INFO_REWARD_ENABLE": "03480D8C", + "CFG_DUNGEON_INFO_REWARD_NEED_ALTAR": "03480D94", + "CFG_DUNGEON_INFO_REWARD_NEED_COMPASS": "03480D90", + "CFG_DUNGEON_INFO_REWARD_SUMMARY_ENABLE": "03480D98", + "CFG_DUNGEON_IS_MQ": "03480DAA", + "CFG_DUNGEON_REWARDS": "03480D9C", + "CFG_DUNGEON_REWARD_AREAS": "03480DD0", + "CFG_FILE_SELECT_HASH": "03480834", + "CFG_HEART_COLOR": "03480856", + "CFG_MAGIC_COLOR": "03480850", + "CFG_RAINBOW_BOMBCHU_TRAIL_INNER_ENABLED": "03480897", + "CFG_RAINBOW_BOMBCHU_TRAIL_OUTER_ENABLED": "03480898", + "CFG_RAINBOW_BOOM_TRAIL_INNER_ENABLED": "03480895", + "CFG_RAINBOW_BOOM_TRAIL_OUTER_ENABLED": "03480896", + "CFG_RAINBOW_NAVI_ENEMY_INNER_ENABLED": "0348089B", + "CFG_RAINBOW_NAVI_ENEMY_OUTER_ENABLED": "0348089C", + "CFG_RAINBOW_NAVI_IDLE_INNER_ENABLED": "03480899", + "CFG_RAINBOW_NAVI_IDLE_OUTER_ENABLED": "0348089A", + "CFG_RAINBOW_NAVI_NPC_INNER_ENABLED": "0348089D", + "CFG_RAINBOW_NAVI_NPC_OUTER_ENABLED": "0348089E", + "CFG_RAINBOW_NAVI_PROP_INNER_ENABLED": "0348089F", + "CFG_RAINBOW_NAVI_PROP_OUTER_ENABLED": "034808A0", + "CFG_RAINBOW_SWORD_INNER_ENABLED": "03480893", + "CFG_RAINBOW_SWORD_OUTER_ENABLED": "03480894", + "CFG_SHOP_CURSOR_COLOR": "03480874", + "CFG_SHOW_SETTING_INFO": "034808A2", + "CFG_TEXT_CURSOR_COLOR": "0348086E", + "CHAIN_HBA_REWARDS": "03484090", + "CHECK_FOR_BONK_CANCEL": "034832FC", + "CHECK_ROOM_MESH_TYPE": "0348341C", + "CHEST_LENS_ONLY": "03482B4C", + "CHEST_SIZE_MATCH_CONTENTS": "034948D8", + "CHEST_SIZE_TEXTURE": "034948D4", + "CHEST_TEXTURE_MATCH_CONTENTS": "034948DC", + "COMPLETE_MASK_QUEST": "0349492C", "COOP_CONTEXT": "03480020", "COOP_VERSION": "03480020", - "COSMETIC_CONTEXT": "03480844", - "COSMETIC_FORMAT_VERSION": "03480844", - "CURRENT_GROTTO_ID": "03482E72", - "DEATH_LINK": "0348002A", - "DEBUG_OFFSET": "03482890", - "DISABLE_TIMERS": "03480CDC", - "DPAD_TEXTURE": "0348DB28", - "DUNGEONS_SHUFFLED": "03480CDD", - "DUNGEON_IS_MQ_ADDRESS": "03480CE0", - "DUNGEON_REWARDS_ADDRESS": "03480CE4", - "ENHANCE_MAP_COMPASS": "03480CE8", - "EXTENDED_OBJECT_TABLE": "03480C9C", - "EXTERN_DAMAGE_MULTIPLYER": "03482CA1", - "FAST_BUNNY_HOOD_ENABLED": "03480CDF", - "FAST_CHESTS": "03480CD6", - "FONT_TEXTURE": "0348C660", - "FREE_SCARECROW_ENABLED": "03480CCC", - "GANON_BOSS_KEY_CONDITION": "0348B570", - "GANON_BOSS_KEY_CONDITION_COUNT": "0348B56E", - "GET_CHEST_OVERRIDE_WRAPPER": "03482708", - "GET_ITEM_TRIGGERED": "03481420", - "GOSSIP_HINT_CONDITION": "03480CC8", - "GROTTO_EXIT_LIST": "03482E30", - "GROTTO_LOAD_TABLE": "03482DAC", + "COSMETIC_CONTEXT": "0348084C", + "COSMETIC_FORMAT_VERSION": "0348084C", + "CURRENT_GROTTO_ID": "034835BE", + "CURR_ACTOR_SPAWN_INDEX": "0348448C", + "DEATH_LINK": "0348002B", + "DEBUG_OFFSET": "03482E10", + "DISABLE_TIMERS": "03480D71", + "DPAD_TEXTURE": "034993A8", + "DUNGEONS_SHUFFLED": "03480D72", + "DUNGEON_IS_MQ_ADDRESS": "03480E9F", + "DUNGEON_REWARDS_ADDRESS": "03480EA3", + "ENHANCE_MAP_COMPASS": "03480EA7", + "EXTENDED_OBJECT_TABLE": "03480D3C", + "EXTERN_DAMAGE_MULTIPLYER": "03483221", + "FAST_BUNNY_HOOD_ENABLED": "03480D74", + "FAST_CHESTS": "03480D6B", + "FIX_BROKEN_DROPS": "03480D75", + "FONT_TEXTURE": "03497EE0", + "FREE_SCARECROW_ENABLED": "03480D64", + "GANON_BOSS_KEY_CONDITION": "034948E4", + "GANON_BOSS_KEY_CONDITION_COUNT": "034948E2", + "GET_CHEST_OVERRIDE_WRAPPER": "03482B50", + "GET_ITEM_TRIGGERED": "0348183C", + "GILDED_CHEST_BASE_TEXTURE": "0349BBA8", + "GILDED_CHEST_FRONT_TEXTURE": "0349ABA8", + "GOSSIP_HINT_CONDITION": "03480D60", + "GROTTO_EXIT_LIST": "0348357C", + "GROTTO_LOAD_TABLE": "034834F8", + "HIDE_CHEST_WITH_INVERTED_LENS": "03482B98", "INCOMING_ITEM": "03480028", "INCOMING_PLAYER": "03480026", - "INITIAL_SAVE_DATA": "0348089C", - "JABU_ELEVATOR_ENABLE": "03480CD4", - "KAKARIKO_WEATHER_FORECAST": "0348B5C4", - "LACS_CONDITION": "03480CC4", - "LACS_CONDITION_COUNT": "03480CD2", - "MALON_GAVE_ICETRAP": "0348367C", - "MALON_TEXT_ID": "03480CDB", - "MAX_RUPEES": "0348B5A7", - "MOVED_ADULT_KING_ZORA": "03482FEC", - "NO_ESCAPE_SEQUENCE": "0348B56C", - "OCARINAS_SHUFFLED": "03480CD5", - "OPEN_FOREST": "03480CEC", - "OPEN_FOUNTAIN": "03480CED", - "OPEN_KAKARIKO": "0348B5A6", + "INITIAL_SAVE_DATA": "0348093C", + "JABU_ELEVATOR_ENABLE": "03480D68", + "KAKARIKO_WEATHER_FORECAST": "03494958", + "KING_DODONGO_BONKS": "034833E8", + "LACS_CONDITION": "03480DBC", + "LACS_CONDITION_COUNT": "03480DC2", + "MALON_GAVE_ICETRAP": "03483DCC", + "MALON_TEXT_ID": "03480D70", + "MAX_RUPEES": "0349492E", + "MOVED_ADULT_KING_ZORA": "0348373C", + "MW_SEND_OWN_ITEMS": "0348002A", + "NO_COLLECTIBLE_HEARTS": "03480D6A", + "NO_ESCAPE_SEQUENCE": "034948E1", + "OCARINAS_SHUFFLED": "03480D69", + "OPEN_FOREST": "03480EAB", + "OPEN_FOUNTAIN": "03480EAC", + "OPEN_KAKARIKO": "0349492D", "OUTGOING_ITEM": "03480030", "OUTGOING_KEY": "0348002C", "OUTGOING_PLAYER": "03480032", - "OVERWORLD_SHUFFLED": "03480CDE", - "PAYLOAD_END": "0348F330", + "OVERWORLD_SHUFFLED": "03480D73", "PAYLOAD_START": "03480000", - "PLAYED_WARP_SONG": "03481224", + "PLANDOMIZER_USED": "03480D77", + "PLAYED_WARP_SONG": "03481640", "PLAYER_ID": "03480024", "PLAYER_NAMES": "03480034", "PLAYER_NAME_ID": "03480025", - "RAINBOW_BRIDGE_CONDITION": "03480CC0", - "RAINBOW_BRIDGE_COUNT": "03480CD0", + "POTCRATE_TEXTURES_MATCH_CONTENTS": "03480D78", + "RAINBOW_BRIDGE_CONDITION": "03480DB8", + "RAINBOW_BRIDGE_COUNT": "03480DC0", + "RANDOMIZER_RNG_SEED": "0349493C", "RANDO_CONTEXT": "03480000", - "SHOP_SLOTS": "03480CEF", - "SHOW_DUNGEON_REWARDS": "03480CE9", - "SHUFFLE_BEANS": "03482D08", - "SHUFFLE_CARPET_SALESMAN": "034839F8", - "SHUFFLE_COWS": "03480CD7", - "SHUFFLE_MEDIGORON": "03483A54", - "SHUFFLE_SCRUBS": "03480CEB", - "SMALL_KEY_SHUFFLE": "03480CEA", - "SONGS_AS_ITEMS": "03480CD8", - "SOS_ITEM_GIVEN": "034814EC", - "SPEED_MULTIPLIER": "03482750", - "START_TWINROVA_FIGHT": "0348306C", - "TIME_TRAVEL_SAVED_EQUIPS": "03481A78", - "TRIFORCE_ICON_TEXTURE": "0348E328", - "TWINROVA_ACTION_TIMER": "03483070", - "WINDMILL_SONG_ID": "03480CD9", - "WINDMILL_TEXT_ID": "03480CDA", - "a_button": "0348B530", - "a_note_b": "0348B51C", - "a_note_font_glow_base": "0348B504", - "a_note_font_glow_max": "0348B500", - "a_note_g": "0348B520", - "a_note_glow_base": "0348B50C", - "a_note_glow_max": "0348B508", - "a_note_r": "0348B524", - "active_item_action_id": "0348B588", - "active_item_fast_chest": "0348B578", - "active_item_graphic_id": "0348B57C", - "active_item_object_id": "0348B580", - "active_item_row": "0348B58C", - "active_item_text_id": "0348B584", - "active_override": "0348B594", - "active_override_is_outgoing": "0348B590", - "b_button": "0348B52C", - "beating_dd": "0348B538", - "beating_no_dd": "0348B540", - "c_button": "0348B528", - "c_note_b": "0348B510", - "c_note_font_glow_base": "0348B4F4", - "c_note_font_glow_max": "0348B4F0", - "c_note_g": "0348B514", - "c_note_glow_base": "0348B4FC", - "c_note_glow_max": "0348B4F8", - "c_note_r": "0348B518", - "cfg_dungeon_info_enable": "0348B4BC", - "cfg_dungeon_info_mq_enable": "0348B560", - "cfg_dungeon_info_mq_need_map": "0348B55C", - "cfg_dungeon_info_reward_enable": "0348B4B8", - "cfg_dungeon_info_reward_need_altar": "0348B554", - "cfg_dungeon_info_reward_need_compass": "0348B558", - "cfg_dungeon_is_mq": "0348B5C8", - "cfg_dungeon_rewards": "0348A274", - "cfg_file_select_hash": "0348B568", - "cfg_item_overrides": "0348B61C", - "defaultDDHeart": "0348B544", - "defaultHeart": "0348B54C", - "dpad_sprite": "0348A428", - "dummy_actor": "0348B59C", - "dungeon_count": "0348B4C0", - "dungeons": "0348A298", - "empty_dlist": "0348B4D8", - "extern_ctxt": "0348A334", - "font_sprite": "0348A438", - "freecam_modes": "03489FF0", - "hash_sprites": "0348B4CC", - "hash_symbols": "0348A348", - "heap_next": "0348B5C0", - "heart_sprite": "0348A3C8", - "icon_sprites": "0348A1B4", - "item_digit_sprite": "0348A3E8", - "item_overrides_count": "0348B5A0", - "item_table": "0348A4B0", - "items_sprite": "0348A458", - "key_rupee_clock_sprite": "0348A3F8", - "last_fog_distance": "0348B4C4", - "linkhead_skull_sprite": "0348A3D8", - "medal_colors": "0348A284", - "medals_sprite": "0348A468", - "normal_dd": "0348B534", - "normal_no_dd": "0348B53C", - "num_to_bits": "0348A388", - "object_slots": "0348C61C", - "pending_freezes": "0348B5A4", - "pending_item_queue": "0348B604", - "quest_items_sprite": "0348A448", - "rupee_colors": "0348A1C0", - "satisified_pending_frames": "0348B574", - "scene_fog_distance": "0348B4C8", - "setup_db": "0348A488", - "song_note_sprite": "0348A408", - "stones_sprite": "0348A478", - "text_cursor_border_base": "0348B4E4", - "text_cursor_border_max": "0348B4E0", - "text_cursor_inner_base": "0348B4EC", - "text_cursor_inner_max": "0348B4E8", - "triforce_hunt_enabled": "0348B5B4", - "triforce_pieces_requied": "0348B552", - "triforce_sprite": "0348A418" + "RNG_SEED_INT": "034948CC", + "SET_BONK_FLAG": "034832D0", + "SHOP_SLOTS": "03480EAE", + "SHOW_CHEST_WITH_INVERTED_LENS": "03482C10", + "SHOW_DUNGEON_REWARDS": "03480EA8", + "SHUFFLE_BEANS": "03483454", + "SHUFFLE_CARPET_SALESMAN": "03484148", + "SHUFFLE_COWS": "03480D6C", + "SHUFFLE_MEDIGORON": "034841A4", + "SHUFFLE_SCRUBS": "03480EAA", + "SILVER_CHEST_BASE_TEXTURE": "0349D3A8", + "SILVER_CHEST_FRONT_TEXTURE": "0349C3A8", + "SKULL_CHEST_BASE_TEXTURE": "0349EBA8", + "SKULL_CHEST_FRONT_TEXTURE": "0349DBA8", + "SMALL_KEY_SHUFFLE": "03480EA9", + "SONGS_AS_ITEMS": "03480D6D", + "SOS_ITEM_GIVEN": "03481908", + "SPECIAL_DEAL_COUNTS": "03480DC8", + "SPEED_MULTIPLIER": "03482CD0", + "SPOILER_AVAILABLE": "03480D76", + "START_TWINROVA_FIGHT": "034837BC", + "Sram_InitNewSave": "034948D0", + "TIME_STRING_TXT": "03480918", + "TIME_TRAVEL_SAVED_EQUIPS": "03481E98", + "TRIFORCE_HUNT_ENABLED": "03480DC4", + "TRIFORCE_ICON_TEXTURE": "03499BA8", + "TRIFORCE_PIECES_REQUIRED": "03480DC6", + "TWINROVA_ACTION_TIMER": "034837C0", + "VERSION_STRING_TXT": "034808E4", + "WINDMILL_SONG_ID": "03480D6E", + "WINDMILL_TEXT_ID": "03480D6F", + "WORLD_STRING_TXT": "03480908", + "a_button": "034948A0", + "a_note_b": "0349488C", + "a_note_font_glow_base": "03494874", + "a_note_font_glow_max": "03494870", + "a_note_g": "03494890", + "a_note_glow_base": "0349487C", + "a_note_glow_max": "03494878", + "a_note_r": "03494894", + "active_item_action_id": "0349490C", + "active_item_fast_chest": "034948FC", + "active_item_graphic_id": "03494900", + "active_item_object_id": "03494904", + "active_item_row": "03494910", + "active_item_text_id": "03494908", + "active_override": "03494918", + "active_override_is_outgoing": "03494914", + "adultSkeleton": "034945F4", + "adult_safe": "03494936", + "alt_overrides": "034949C8", + "b_button": "0349489C", + "beating_dd": "034948A8", + "beating_no_dd": "034948B0", + "c_button": "03494898", + "c_note_b": "03494880", + "c_note_font_glow_base": "03494864", + "c_note_font_glow_max": "03494860", + "c_note_g": "03494884", + "c_note_glow_base": "0349486C", + "c_note_glow_max": "03494868", + "c_note_r": "03494888", + "cfg_item_overrides": "03494E20", + "childSkeleton": "034944F8", + "child_safe": "03494935", + "collectible_mutex": "034948F0", + "collectible_override": "034948E8", + "collectible_override_flags": "034948F4", + "collectible_scene_flags_table": "03494BC8", + "curr_scene_setup": "03494940", + "defaultDDHeart": "034948B4", + "defaultHeart": "034948BC", + "dpad_sprite": "03491F88", + "drop_collectible_override_flag": "03494920", + "dummy_actor": "03494924", + "dungeon_count": "03494830", + "dungeons": "03491DD0", + "empty_dlist": "03494848", + "extern_ctxt": "03491E7C", + "font_sprite": "03491F98", + "freecam_modes": "03491A40", + "hash_sprites": "0349483C", + "hash_symbols": "03491E90", + "heap_next": "03494954", + "heart_sprite": "03491F28", + "icon_sprites": "03491C04", + "illegal_model": "03494938", + "item_digit_sprite": "03491F48", + "item_draw_table": "03492010", + "item_overrides_count": "03494928", + "item_table": "034930E8", + "items": "03491F10", + "items_sprite": "03491FB8", + "key_counts": "034930CC", + "key_rupee_clock_sprite": "03491F58", + "last_fog_distance": "03494834", + "linkhead_skull_sprite": "03491F38", + "medals": "03491DB8", + "medals_sprite": "03491FC8", + "missing_dlist": "03494934", + "normal_dd": "034948A4", + "normal_no_dd": "034948AC", + "num_override_flags": "034948F8", + "num_to_bits": "03491ED0", + "object_slots": "03497E20", + "outgoing_queue": "03494988", + "quest_items_sprite": "03491FA8", + "reward_rows": "03491DAC", + "rupee_colors": "03491C28", + "satisified_pending_frames": "034948FA", + "scene_fog_distance": "03494838", + "setup_db": "03491FE8", + "song_note_sprite": "03491F68", + "stones_sprite": "03491FD8", + "text_cursor_border_base": "03494854", + "text_cursor_border_max": "03494850", + "text_cursor_inner_base": "0349485C", + "text_cursor_inner_max": "03494858", + "text_height": "034948C4", + "text_width": "034948C8", + "texture_table": "034946F0", + "triforce_sprite": "03491F78" } \ No newline at end of file diff --git a/worlds/oot/data/mqu.json b/worlds/oot/data/mqu.json index cd336a12fcda..b44cbe5217b7 100644 --- a/worlds/oot/data/mqu.json +++ b/worlds/oot/data/mqu.json @@ -75,7 +75,7 @@ "005E FF67 0000 0002 0000 0000 0000 03E7", "005E 0190 0168 0079 0000 B555 0000 03E7", "005E FE16 0320 FFDC 0000 CAAB 0000 03E7", - "012A FEC9 0320 FEC9 0000 E000 0000 2700", + "012A FEC9 031F FEC9 0000 E000 0000 2700", "01A0 0117 0168 014D 0000 6000 0000 FFFF", "000A 014D 0168 00FD 0000 20B6 0000 0823", "000F 0000 0000 0000 0000 4000 0000 0FC5", @@ -2833,7 +2833,8 @@ "0163", "00A4", "0024", - "015C" + "015C", + "00B7" ], "Actors": [ "003B 0F0B 0028 FA0A 0000 0000 0000 0006", @@ -3087,7 +3088,8 @@ "0036", "001F", "000D", - "0170" + "0170", + "00B7" ], "Actors": [ "0125 06B1 019B FB22 0000 0000 0000 FF01", @@ -14895,7 +14897,7 @@ "0095 01C3 01ED 02A4 0000 C000 0000 0000", "0037 0069 03FD 01F8 0000 671C 0000 0000", "000A 018C 047F 0194 0000 4000 000D 8843", - "012A FF58 035C 0243 0000 505B 0000 0D00" + "012A FF58 035B 0243 0000 505B 0000 0D00" ] }, { @@ -16847,7 +16849,7 @@ "0111 F7C2 0AF0 FD7A 0000 0000 0000 4C04", "0111 F6F1 0AF0 0346 0000 0000 0000 4E12", "0111 F713 0AF0 0323 0000 0000 0000 500B", - "012A F74F 0AF0 FC3A 0000 2000 0000 3900" + "012A F74F 0AEF FC3A 0000 2000 0000 3900" ] }, { @@ -16930,7 +16932,7 @@ "0008 F77C 1293 01F4 0000 4000 0000 03F5", "0008 F7F4 1293 017C 0000 4000 0000 03F5", "012A F6AA 1130 FF00 0000 0000 0000 3C03", - "012A FA34 1130 012C 0000 2000 0000 3A00", + "012A FA34 112F 012C 0000 2000 0000 3A00", "000A F77C 1248 017C 0000 E000 0000 5845" ] }, @@ -16999,7 +17001,7 @@ "005E 04C4 0CDA FFCE E38E 4000 0000 105F", "0111 05D5 0AF0 0182 0000 0000 0000 5209", "0111 05A5 0AF0 01BD 0000 0000 0000 5409", - "012A 04AF 0AF0 FF64 0000 2000 0000 3C20", + "012A 04AF 0AEF FF64 0000 2000 0000 3C20", "01A0 04BA 0B7C 00A3 0000 E000 0000 FFFF", "01A0 03E7 0ADC FE6E 0000 4000 0000 FFFF", "01A0 0581 0AF0 FB68 0000 0000 0000 FFFF", @@ -20348,7 +20350,7 @@ "Icons": [ { "Icon": 0, - "Count": 5, + "Count": 6, "IconPoints": [ { "Flag": 1, @@ -20374,6 +20376,11 @@ "Flag": 12, "x": 47, "y": -26 + }, + { + "Flag": 0, + "x": 48, + "y": -17 } ] }, @@ -20469,12 +20476,18 @@ { "Icons": [ { - "Icon": -1, - "Count": 0, - "IconPoints": [] + "Icon": 0, + "Count": 1, + "IconPoints": [ + { + "Flag": 0, + "x": 71, + "y": 60 + } + ] }, { - "Icon": 0, + "Icon": -1, "Count": 0, "IconPoints": [] }, @@ -25694,7 +25707,7 @@ "00A5 F688 FFC1 FEED 0000 0000 0000 FFFF", "00A5 F6DB FFC1 FEB1 0000 0000 0000 FFFF", "00A5 F6E1 FFC1 FE1C 0000 0000 0000 FFFF", - "00A4 F688 FFC1 FE63 0000 0000 0000 FFFF", + "00A4 F67E FFC1 FE6B 0000 0000 0000 FFFF", "000A F562 FFC1 FE64 0000 C000 0001 15E7" ] }, @@ -25755,7 +25768,7 @@ "0117 0DE6 FDE1 FA2E 0000 0000 0000 1FC1", "0117 0D1F FE14 FC4D 0000 0000 0000 0141", "0173 0FE1 FE20 FB35 0000 FFA6 0000 2181", - "0187 0D1E FDE1 FE2E 0000 0000 0000 1FFF", + "0187 0D1E FDE1 FE2E 0000 0000 0000 FFFF", "00AE 0F8A FDE1 FB36 0000 0000 0000 0007", "00AF 0EB8 FDE1 FCEE 0000 4000 0000 0103", "00B1 0D1E FDE1 FC4E 0000 0000 0000 0000", @@ -25783,7 +25796,7 @@ "0090 0DAA FDE1 02D1 0000 8000 0000 7FFE", "005E 0CEE FDE1 033E 0000 8000 0000 2400", "005E 0D50 FDE1 033B 0000 8000 0000 2400", - "0187 0D1E FDE1 0260 0000 0000 0000 1FFF", + "0187 0D1E FDE1 0260 0000 0000 0000 FFFF", "000A 0D22 FDE1 0375 0000 0000 0000 7843" ] }, @@ -26140,7 +26153,7 @@ "012F" ], "Actors": [ - "00A4 EF30 FAAD FE36 0000 8000 0000 FFFF", + "00A4 EF2E FAAD FDE2 0000 8000 0000 FFFF", "0111 EE21 FAAD FCD5 0000 0000 0000 660B", "0111 F03C FAAD FCD5 0000 0000 0000 680A", "004C EE50 FAAD FE96 0000 216C 0000 FFFF", @@ -27437,7 +27450,8 @@ "0098", "0024", "00A4", - "0009" + "0009", + "00B7" ], "Actors": [ "0090 F927 0000 FD1E 0000 4000 0000 7FFE", @@ -27517,7 +27531,7 @@ "00A5 0464 FFEC 0173 0000 C000 0000 FFFF", "00A5 059D FFEC 0036 0000 C000 0000 FFFF", "00A5 059D FFEC 0170 0000 C000 0000 FFFF", - "00A4 04FC FFF0 00D1 0000 C000 0000 FFFF", + "00A4 0500 FFF0 00D2 0000 C000 0000 FFFF", "0015 0644 FFEC FFA8 0000 0000 0000 0211", "000A 0524 FFEC 0079 0000 C000 0000 1802", "00BE 062C 0000 FFA6 0000 C000 0000 2102" diff --git a/worlds/oot/data/textures/crate/crate_bosskey_rgba16_patch.bin b/worlds/oot/data/textures/crate/crate_bosskey_rgba16_patch.bin new file mode 100644 index 000000000000..fe14392b610c Binary files /dev/null and b/worlds/oot/data/textures/crate/crate_bosskey_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/crate_gold_rgba16_patch.bin b/worlds/oot/data/textures/crate/crate_gold_rgba16_patch.bin new file mode 100644 index 000000000000..c5a9a521b129 Binary files /dev/null and b/worlds/oot/data/textures/crate/crate_gold_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/crate_key_rgba16_patch.bin b/worlds/oot/data/textures/crate/crate_key_rgba16_patch.bin new file mode 100644 index 000000000000..602bdaac48f6 Binary files /dev/null and b/worlds/oot/data/textures/crate/crate_key_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/crate_skull_rgba16_patch.bin b/worlds/oot/data/textures/crate/crate_skull_rgba16_patch.bin new file mode 100644 index 000000000000..d021c2320997 Binary files /dev/null and b/worlds/oot/data/textures/crate/crate_skull_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/smallcrate_bosskey_rgba16_patch.bin b/worlds/oot/data/textures/crate/smallcrate_bosskey_rgba16_patch.bin new file mode 100644 index 000000000000..3117ee53426b Binary files /dev/null and b/worlds/oot/data/textures/crate/smallcrate_bosskey_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/smallcrate_gold_rgba16_patch.bin b/worlds/oot/data/textures/crate/smallcrate_gold_rgba16_patch.bin new file mode 100644 index 000000000000..161b3d4c926c Binary files /dev/null and b/worlds/oot/data/textures/crate/smallcrate_gold_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/smallcrate_key_rgba16_patch.bin b/worlds/oot/data/textures/crate/smallcrate_key_rgba16_patch.bin new file mode 100644 index 000000000000..3ee076664a44 Binary files /dev/null and b/worlds/oot/data/textures/crate/smallcrate_key_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/crate/smallcrate_skull_rgba16_patch.bin b/worlds/oot/data/textures/crate/smallcrate_skull_rgba16_patch.bin new file mode 100644 index 000000000000..a158d8f14985 Binary files /dev/null and b/worlds/oot/data/textures/crate/smallcrate_skull_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/pot/pot_bosskey_rgba16_patch.bin b/worlds/oot/data/textures/pot/pot_bosskey_rgba16_patch.bin new file mode 100644 index 000000000000..c41f5c652902 Binary files /dev/null and b/worlds/oot/data/textures/pot/pot_bosskey_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/pot/pot_gold_rgba16_patch.bin b/worlds/oot/data/textures/pot/pot_gold_rgba16_patch.bin new file mode 100644 index 000000000000..5d2fcc62defd Binary files /dev/null and b/worlds/oot/data/textures/pot/pot_gold_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/pot/pot_key_rgba16_patch.bin b/worlds/oot/data/textures/pot/pot_key_rgba16_patch.bin new file mode 100644 index 000000000000..8fc57b239825 Binary files /dev/null and b/worlds/oot/data/textures/pot/pot_key_rgba16_patch.bin differ diff --git a/worlds/oot/data/textures/pot/pot_skull_rgba16_patch.bin b/worlds/oot/data/textures/pot/pot_skull_rgba16_patch.bin new file mode 100644 index 000000000000..7df8c65b5c1e Binary files /dev/null and b/worlds/oot/data/textures/pot/pot_skull_rgba16_patch.bin differ diff --git a/worlds/oot/data/triforce.bin b/worlds/oot/data/triforce.bin deleted file mode 100644 index 24e8668f4ba1..000000000000 Binary files a/worlds/oot/data/triforce.bin and /dev/null differ diff --git a/worlds/oot/docs/setup_en.md b/worlds/oot/docs/setup_en.md index 9c1aca78b92f..2c652ff62fce 100644 --- a/worlds/oot/docs/setup_en.md +++ b/worlds/oot/docs/setup_en.md @@ -176,7 +176,7 @@ Ocarina of Time: overworld: 0 any_dungeon: 0 keysanity: 0 - shuffle_fortresskeys: # Control where to shuffle the Gerudo Fortress small keys. + shuffle_hideoutkeys: # Control where to shuffle the Gerudo Fortress small keys. vanilla: 50 overworld: 0 any_dungeon: 0 diff --git a/worlds/oot/docs/setup_es.md b/worlds/oot/docs/setup_es.md index 4e40d03daecf..d67d73205f38 100644 --- a/worlds/oot/docs/setup_es.md +++ b/worlds/oot/docs/setup_es.md @@ -152,7 +152,7 @@ Ocarina of Time: overworld: 0 any_dungeon: 0 keysanity: 0 - shuffle_fortresskeys: # Controla donde pueden aparecer las llaves de la fortaleza Gerudo. + shuffle_hideoutkeys: # Controla donde pueden aparecer las llaves de la fortaleza Gerudo. vanilla: 50 overworld: 0 any_dungeon: 0 diff --git a/worlds/oot/texture_util.py b/worlds/oot/texture_util.py new file mode 100644 index 000000000000..19a5ed68f468 --- /dev/null +++ b/worlds/oot/texture_util.py @@ -0,0 +1,281 @@ +from .Rom import Rom +from .Utils import * + +# Read a ci4 texture from rom and convert to rgba16 +# rom - Rom +# address - address of the ci4 texture in Rom +# length - size of the texture in PIXELS +# palette - 4-bit color palette to use (max of 16 colors) +def ci4_to_rgba16(rom: Rom, address, length, palette): + newPixels = [] + texture = rom.read_bytes(address, length // 2) + for byte in texture: + newPixels.append(palette[(byte & 0xF0) >> 4]) + newPixels.append(palette[byte & 0x0F]) + return newPixels + +# Convert an rgba16 texture to ci8 +# rgba16_texture - texture to convert +# returns - tuple (ci8_texture, palette) +def rgba16_to_ci8(rgba16_texture): + ci8_texture = [] + palette = get_colors_from_rgba16(rgba16_texture) # Get all of the colors in the texture + if len(palette) > 0x100: # Make sure there are <= 256 colors. Could probably do some fancy stuff to convert, but nah. + raise(Exception("RGB Texture exceeds maximum of 256 colors")) + if len(palette) < 0x100: #Pad the palette with 0x0001 #Pad the palette with 0001s to take up the full 256 colors + for i in range(0, 0x100 - len(palette)): + palette.append(0x0001) + + # Create the new ci8 texture (list of bytes) by locating the index of each color from the rgba16 texture in the color palette. + for pixel in rgba16_texture: + if pixel in palette: + ci8_texture.append(palette.index(pixel)) + return (ci8_texture, palette) + +# Load a palette (essentially just an rgba16 texture) from rom +def load_palette(rom: Rom, address, length): + palette = [] + for i in range(0, length): + palette.append(rom.read_int16(address + 2 * i)) + return palette + +# Get a list of unique colors (palette) from an rgba16 texture +def get_colors_from_rgba16(rgba16_texture): + colors = [] + for pixel in rgba16_texture: + if pixel not in colors: + colors.append(pixel) + return colors + +# Apply a patch to a rgba16 texture. The patch texture is exclusive or'd with the original to produce the result +# rgba16_texture - Original texture +# rgba16_patch - Patch texture. If this parameter is not supplied, this function will simply return the original texture. +# returns - new texture = texture xor patch +def apply_rgba16_patch(rgba16_texture, rgba16_patch): + if rgba16_patch is not None and (len(rgba16_texture) != len(rgba16_patch)): + raise(Exception("OG Texture and Patch not the same length!")) + + new_texture = [] + if not rgba16_patch: + for i in range(0, len(rgba16_texture)): + new_texture.append(rgba16_texture[i]) + return new_texture + for i in range(0, len(rgba16_texture)): + new_texture.append(rgba16_texture[i] ^ rgba16_patch[i]) + return new_texture + +# Save a rgba16 texture to a file +def save_rgba16_texture(rgba16_texture, fileStr): + file = open(fileStr, 'wb') + bytes = bytearray() + for pixel in rgba16_texture: + bytes.extend(pixel.to_bytes(2, 'big')) + file.write(bytes) + file.close() + +# Save a ci8 texture to a file +def save_ci8_texture(ci8_texture, fileStr): + file = open(fileStr, 'wb') + bytes = bytearray() + for pixel in ci8_texture: + bytes.extend(pixel.to_bytes(1, 'big')) + file.write(bytes) + file.close() + +# Read an rgba16 texture from ROM +# rom - Rom object to load the texture from +# base_texture_address - Address of the rbga16 texture in ROM +# size - Size of the texture in PIXELS +# returns - list of ints representing each 16-bit pixel +def load_rgba16_texture_from_rom(rom: Rom, base_texture_address, size): + texture = [] + for i in range(0, size): + texture.append(int.from_bytes(rom.read_bytes(base_texture_address + 2 * i, 2), 'big')) + return texture + +# Load an rgba16 texture from a binary file. +# fileStr - path to the file +# size - number of 16-bit pixels in the texture. +def load_rgba16_texture(fileStr, size): + texture = [] + file = open(fileStr, 'rb') + for i in range(0, size): + texture.append(int.from_bytes(file.read(2), 'big')) + + file.close() + return(texture) + +# Create an new rgba16 texture byte array from a rgba16 binary file. Use this if you want to create complete new textures using no copyrighted content (or for testing). +# rom - Unused set to None +# base_texture_address - Unusued set to None +# base_palette_address - Unusued set to None +# size - Size of the texture in PIXELS +# patchfile - File containing the texture to load +# returns - bytearray containing the new texture +def rgba16_from_file(rom: Rom, base_texture_address, base_palette_address, size, patchfile): + new_texture = load_rgba16_texture(patchfile, size) + bytes = bytearray() + for pixel in new_texture: + bytes.extend(int.to_bytes(pixel, 2, 'big')) + return bytes + +# Create a new rgba16 texture from a original rgba16 texture and a rgba16 patch file +# rom - Rom object to load the original texture from +# base_texture_address - Address of the original rbga16 texture in ROM +# base_palette_address - Unused. Set to None (this is only used for CI4 style textures) +# size - Size of the texture in PIXELS +# patchfile - file path of a rgba16 binary texture to patch +# returns - bytearray of the new texture +def rgba16_patch(rom: Rom, base_texture_address, base_palette_address, size, patchfile): + base_texture_rgba16 = load_rgba16_texture_from_rom(rom, base_texture_address, size) + patch_rgba16 = None + if patchfile: + patch_rgba16 = load_rgba16_texture(patchfile, size) + new_texture_rgba16 = apply_rgba16_patch(base_texture_rgba16, patch_rgba16) + bytes = bytearray() + for pixel in new_texture_rgba16: + bytes.extend(int.to_bytes(pixel, 2, 'big')) + return bytes + +# Create a new ci8 texture from a ci4 texture/palette and a rgba16 patch file +# rom - Rom object to load the original textures from +# base_texture_address - Address of the original ci4 texture in ROM +# base_palette_address - Address of the ci4 palette in ROM +# size - Size of the texture in PIXELS +# patchfile - file path of a rgba16 binary texture to patch +# returns - bytearray of the new texture +def ci4_rgba16patch_to_ci8(rom, base_texture_address, base_palette_address, size, patchfile): + palette = load_palette(rom, base_palette_address, 16) # load the original palette from rom + base_texture_rgba16 = ci4_to_rgba16(rom, base_texture_address, size, palette) # load the original texture from rom and convert to ci8 + patch_rgba16 = None + if patchfile: + patch_rgba16 = load_rgba16_texture(patchfile, size) + new_texture_rgba16 = apply_rgba16_patch(base_texture_rgba16, patch_rgba16) + ci8_texture, ci8_palette = rgba16_to_ci8(new_texture_rgba16) + # merge the palette and the texture + bytes = bytearray() + for pixel in ci8_palette: + bytes.extend(int.to_bytes(pixel, 2, 'big')) + for pixel in ci8_texture: + bytes.extend(int.to_bytes(pixel, 1, 'big')) + return bytes + +# Function to create rgba16 texture patches for crates +def build_crate_ci8_patches(): + # load crate textures from rom + object_kibako2_addr = 0x018B6000 + SIZE_CI4_32X128 = 4096 + rom = Rom("ZOOTDEC.z64") + crate_palette = load_palette(rom, object_kibako2_addr + 0x00, 16) + crate_texture_rgba16 = ci4_to_rgba16(rom, object_kibako2_addr + 0x20, SIZE_CI4_32X128, crate_palette) + + # load new textures + crate_texture_gold_rgba16 = load_rgba16_texture('crate_gold_rgba16.bin', 0x1000) + crate_texture_skull_rgba16 = load_rgba16_texture('crate_skull_rgba16.bin', 0x1000) + crate_texture_key_rgba16 = load_rgba16_texture('crate_key_rgba16.bin', 0x1000) + crate_texture_bosskey_rgba16 = load_rgba16_texture('crate_bosskey_rgba16.bin', 0x1000) + + # create patches + gold_patch = apply_rgba16_patch(crate_texture_rgba16, crate_texture_gold_rgba16) + key_patch = apply_rgba16_patch(crate_texture_rgba16, crate_texture_key_rgba16) + skull_patch = apply_rgba16_patch(crate_texture_rgba16, crate_texture_skull_rgba16) + bosskey_patch = apply_rgba16_patch(crate_texture_rgba16, crate_texture_bosskey_rgba16) + + # save patches + save_rgba16_texture(gold_patch, 'crate_gold_rgba16_patch.bin') + save_rgba16_texture(key_patch, 'crate_key_rgba16_patch.bin') + save_rgba16_texture(skull_patch, 'crate_skull_rgba16_patch.bin') + save_rgba16_texture(bosskey_patch, 'crate_bosskey_rgba16_patch.bin') + + # create ci8s + default_ci8, default_palette = rgba16_to_ci8(crate_texture_rgba16) + gold_ci8, gold_palette = rgba16_to_ci8(crate_texture_gold_rgba16) + key_ci8, key_palette = rgba16_to_ci8(crate_texture_key_rgba16) + skull_ci8, skull_palette = rgba16_to_ci8(crate_texture_skull_rgba16) + bosskey_ci8, bosskey_palette = rgba16_to_ci8(crate_texture_bosskey_rgba16) + + # save ci8 textures + save_ci8_texture(default_ci8, 'crate_default_ci8.bin') + save_ci8_texture(gold_ci8, 'crate_gold_ci8.bin') + save_ci8_texture(key_ci8, 'crate_key_ci8.bin') + save_ci8_texture(skull_ci8, 'crate_skull_ci8.bin') + save_ci8_texture(bosskey_ci8, 'crate_bosskey_ci8.bin') + + # save palettes + save_rgba16_texture(default_palette, 'crate_default_palette.bin') + save_rgba16_texture(gold_palette, 'crate_gold_palette.bin') + save_rgba16_texture(key_palette, 'crate_key_palette.bin') + save_rgba16_texture(skull_palette, 'crate_skull_palette.bin') + save_rgba16_texture(bosskey_palette, 'crate_bosskey_palette.bin') + + crate_textures = [ + (5, 'texture_crate_default', 0x18B6000 + 0x20, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, None), + (6, 'texture_crate_gold' , 0x18B6000 + 0x20, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'crate_gold_rgba16_patch.bin'), + (7, 'texture_crate_key', 0x18B6000 + 0x20, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'crate_key_rgba16_patch.bin'), + (8, 'texture_crate_skull', 0x18B6000 + 0x20, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'crate_skull_rgba16_patch.bin'), + (9, 'texture_crate_bosskey', 0x18B6000 + 0x20, 0x018B6000, 4096, ci4_rgba16patch_to_ci8, 'crate_bosskey_rgba16_patch.bin'), + ] + + for texture_id, texture_name, rom_address_base, rom_address_palette, size,func, patchfile in crate_textures: + texture = func(rom, rom_address_base, rom_address_palette, size, patchfile) + file = open(texture_name, 'wb') + file.write(texture) + file.close() + print(texture) + +# Function to create rgba16 texture patches for pots. +def build_pot_patches(): + # load pot textures from rom + object_tsubo_side_addr = 0x01738000 + SIZE_32X64 = 2048 + rom = Rom("ZOOTDEC.z64") + + pot_default_rgba16 = load_rgba16_texture_from_rom(rom, object_tsubo_side_addr, SIZE_32X64) + pot_gold_rgba16 = load_rgba16_texture('pot_gold_rgba16.bin', SIZE_32X64) + pot_key_rgba16 = load_rgba16_texture('pot_key_rgba16.bin', SIZE_32X64) + pot_skull_rgba16 = load_rgba16_texture('pot_skull_rgba16.bin', SIZE_32X64) + pot_bosskey_rgba16 = load_rgba16_texture('pot_bosskey_rgba16.bin', SIZE_32X64) + + # create patches + gold_patch = apply_rgba16_patch(pot_default_rgba16, pot_gold_rgba16) + key_patch = apply_rgba16_patch(pot_default_rgba16, pot_key_rgba16) + skull_patch = apply_rgba16_patch(pot_default_rgba16, pot_skull_rgba16) + bosskey_patch = apply_rgba16_patch(pot_default_rgba16, pot_bosskey_rgba16) + + # save patches + save_rgba16_texture(gold_patch, 'pot_gold_rgba16_patch.bin') + save_rgba16_texture(key_patch, 'pot_key_rgba16_patch.bin') + save_rgba16_texture(skull_patch, 'pot_skull_rgba16_patch.bin') + save_rgba16_texture(bosskey_patch, 'pot_bosskey_rgba16_patch.bin') + +def build_smallcrate_patches(): + # load small crate texture from rom + object_kibako_texture_addr = 0xF7ECA0 + + SIZE_32X64 = 2048 + rom = Rom("ZOOTDEC.z64") + + # Load textures + smallcrate_default_rgba16 = load_rgba16_texture_from_rom(rom, object_kibako_texture_addr, SIZE_32X64) + smallcrate_gold_rgba16 = load_rgba16_texture('smallcrate_gold_rgba16.bin', SIZE_32X64) + smallcrate_key_rgba16 = load_rgba16_texture('smallcrate_key_rgba16.bin', SIZE_32X64) + smallcrate_skull_rgba16 = load_rgba16_texture('smallcrate_skull_rgba16.bin', SIZE_32X64) + smallcrate_bosskey_rgba16 = load_rgba16_texture('smallcrate_bosskey_rgba16.bin', SIZE_32X64) + + save_rgba16_texture(smallcrate_default_rgba16, 'smallcrate_default_rgba16.bin') + # Create patches + gold_patch = apply_rgba16_patch(smallcrate_default_rgba16, smallcrate_gold_rgba16) + key_patch = apply_rgba16_patch(smallcrate_default_rgba16, smallcrate_key_rgba16) + skull_patch = apply_rgba16_patch(smallcrate_default_rgba16, smallcrate_skull_rgba16) + bosskey_patch = apply_rgba16_patch(smallcrate_default_rgba16, smallcrate_bosskey_rgba16) + + # save patches + save_rgba16_texture(gold_patch, 'smallcrate_gold_rgba16_patch.bin') + save_rgba16_texture(key_patch, 'smallcrate_key_rgba16_patch.bin') + save_rgba16_texture(skull_patch, 'smallcrate_skull_rgba16_patch.bin') + save_rgba16_texture(bosskey_patch, 'smallcrate_bosskey_rgba16_patch.bin') + + +#build_crate_ci8_patches() +#build_pot_patches() +#build_smallcrate_patches() diff --git a/test/overcooked2/TestOvercooked2.py b/worlds/overcooked2/test/TestOvercooked2.py similarity index 99% rename from test/overcooked2/TestOvercooked2.py rename to worlds/overcooked2/test/TestOvercooked2.py index ec9efd1f674d..8f5ea9d456f6 100644 --- a/test/overcooked2/TestOvercooked2.py +++ b/worlds/overcooked2/test/TestOvercooked2.py @@ -1,5 +1,4 @@ import unittest -import json from random import Random diff --git a/worlds/overcooked2/test/__init__.py b/worlds/overcooked2/test/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/worlds/pokemon_rb/__init__.py b/worlds/pokemon_rb/__init__.py index 8119f259813e..ca695d99ed77 100644 --- a/worlds/pokemon_rb/__init__.py +++ b/worlds/pokemon_rb/__init__.py @@ -1,6 +1,7 @@ from typing import TextIO import os import logging +from copy import deepcopy from BaseClasses import Item, MultiWorld, Tutorial, ItemClassification from Fill import fill_restrictive, FillError, sweep_from_pool @@ -62,6 +63,8 @@ def __init__(self, world: MultiWorld, player: int): self.learnsets = None self.trainer_name = None self.rival_name = None + self.type_chart = None + self.traps = None @classmethod def stage_assert_generate(cls, world): @@ -108,6 +111,69 @@ def encode_name(name, t): process_pokemon_data(self) + if self.multiworld.randomize_type_chart[self.player] == "vanilla": + chart = deepcopy(poke_data.type_chart) + elif self.multiworld.randomize_type_chart[self.player] == "randomize": + types = poke_data.type_names.values() + matchups = [] + for type1 in types: + for type2 in types: + matchups.append([type1, type2]) + self.multiworld.random.shuffle(matchups) + immunities = self.multiworld.immunity_matchups[self.player].value + super_effectives = self.multiworld.super_effective_matchups[self.player].value + not_very_effectives = self.multiworld.not_very_effective_matchups[self.player].value + normals = self.multiworld.normal_matchups[self.player].value + while super_effectives + not_very_effectives + normals < 225 - immunities: + super_effectives += self.multiworld.super_effective_matchups[self.player].value + not_very_effectives += self.multiworld.not_very_effective_matchups[self.player].value + normals += self.multiworld.normal_matchups[self.player].value + if super_effectives + not_very_effectives + normals > 225 - immunities: + total = super_effectives + not_very_effectives + normals + excess = total - (225 - immunities) + subtract_amounts = ( + int((excess / (super_effectives + not_very_effectives + normals)) * super_effectives), + int((excess / (super_effectives + not_very_effectives + normals)) * not_very_effectives), + int((excess / (super_effectives + not_very_effectives + normals)) * normals)) + super_effectives -= subtract_amounts[0] + not_very_effectives -= subtract_amounts[1] + normals -= subtract_amounts[2] + while super_effectives + not_very_effectives + normals > 225 - immunities: + r = self.multiworld.random.randint(0, 2) + if r == 0: + super_effectives -= 1 + elif r == 1: + not_very_effectives -= 1 + else: + normals -= 1 + chart = [] + for matchup_list, matchup_value in zip([immunities, normals, super_effectives, not_very_effectives], + [0, 10, 20, 5]): + for _ in range(matchup_list): + matchup = matchups.pop() + matchup.append(matchup_value) + chart.append(matchup) + elif self.multiworld.randomize_type_chart[self.player] == "chaos": + types = poke_data.type_names.values() + matchups = [] + for type1 in types: + for type2 in types: + matchups.append([type1, type2]) + chart = [] + values = list(range(21)) + self.multiworld.random.shuffle(matchups) + self.multiworld.random.shuffle(values) + for matchup in matchups: + value = values.pop(0) + values.append(value) + matchup.append(value) + chart.append(matchup) + # sort so that super-effective matchups occur first, to prevent dual "not very effective" / "super effective" + # matchups from leading to damage being ultimately divided by 2 and then multiplied by 2, which can lead to + # damage being reduced by 1 which leads to a "not very effective" message appearing due to my changes + # to the way effectiveness messages are generated. + self.type_chart = sorted(chart, key=lambda matchup: -matchup[2]) + def create_items(self) -> None: start_inventory = self.multiworld.start_inventory[self.player].value.copy() if self.multiworld.randomize_pokedex[self.player] == "start_with": @@ -128,8 +194,7 @@ def create_items(self) -> None: item = self.create_item(location.original_item) if (item.classification == ItemClassification.filler and self.multiworld.random.randint(1, 100) <= self.multiworld.trap_percentage[self.player].value): - item = self.create_item(self.multiworld.random.choice([item for item in item_table if - item_table[item].classification == ItemClassification.trap])) + item = self.create_item(self.select_trap()) if location.event: self.multiworld.get_location(location.name, self.player).place_locked_item(item) elif "Badge" not in item.name or self.multiworld.badgesanity[self.player].value: @@ -255,13 +320,21 @@ def write_spoiler(self, spoiler_handle): def get_filler_item_name(self) -> str: if self.multiworld.random.randint(1, 100) <= self.multiworld.trap_percentage[self.player].value: - return self.multiworld.random.choice([item for item in item_table if - item_table[item].classification == ItemClassification.trap]) + return self.select_trap() return self.multiworld.random.choice([item for item in item_table if item_table[ item].classification == ItemClassification.filler and item not in item_groups["Vending Machine Drinks"] + item_groups["Unique"]]) + def select_trap(self): + if self.traps is None: + self.traps = [] + self.traps += ["Poison Trap"] * self.multiworld.poison_trap_weight[self.player].value + self.traps += ["Fire Trap"] * self.multiworld.fire_trap_weight[self.player].value + self.traps += ["Paralyze Trap"] * self.multiworld.paralyze_trap_weight[self.player].value + self.traps += ["Ice Trap"] * self.multiworld.ice_trap_weight[self.player].value + return self.multiworld.random.choice(self.traps) + def fill_slot_data(self) -> dict: return { "second_fossil_check_condition": self.multiworld.second_fossil_check_condition[self.player].value, diff --git a/worlds/pokemon_rb/options.py b/worlds/pokemon_rb/options.py index 3b6739a99dde..e2de9bc3552b 100644 --- a/worlds/pokemon_rb/options.py +++ b/worlds/pokemon_rb/options.py @@ -487,6 +487,7 @@ class BetterShops(Choice): class MasterBallPrice(Range): """Price for Master Balls. Can only be bought if better_shops is set to add_master_ball, but this will affect the sell price regardless. Vanilla is 0""" + display_name = "Master Ball Price" range_end = 999999 default = 5000 @@ -506,14 +507,42 @@ class LoseMoneyOnBlackout(Toggle): class TrapPercentage(Range): - """Chance for each filler item to be replaced with trap items: Poison Trap, Paralyze Trap, Ice Trap, and - Fire Trap. These traps apply the status to your entire party! Keep in mind that trainersanity vastly increases the - number of filler items. Make sure to stock up on Ice Heals!""" + """Chance for each filler item to be replaced with trap items. Keep in mind that trainersanity vastly increases the + number of filler items. The trap weight options will determine which traps can be chosen from and at what likelihood.""" display_name = "Trap Percentage" range_end = 100 default = 0 +class TrapWeight(Choice): + option_low = 1 + option_medium = 3 + option_high = 5 + default = 3 + + +class PoisonTrapWeight(TrapWeight): + """Weights for Poison Traps. These apply the Poison status to all your party members.""" + display_name = "Poison Trap Weight" + + +class FireTrapWeight(TrapWeight): + """Weights for Fire Traps. These apply the Burn status to all your party members.""" + display_name = "Fire Trap Weight" + + +class ParalyzeTrapWeight(TrapWeight): + """Weights for Paralyze Traps. These apply the Paralyze status to all your party members.""" + display_name = "Paralyze Trap Weight" + + +class IceTrapWeight(TrapWeight): + """Weights for Ice Traps. These apply the Ice status to all your party members. Don't forget to buy Ice Heals!""" + display_name = "Ice Trap Weight" + option_disabled = 0 + default = 0 + + pokemon_rb_options = { "game_version": GameVersion, "trainer_name": TrainerName, @@ -571,5 +600,9 @@ class TrapPercentage(Range): "starting_money": StartingMoney, "lose_money_on_blackout": LoseMoneyOnBlackout, "trap_percentage": TrapPercentage, + "poison_trap_weight": PoisonTrapWeight, + "fire_trap_weight": FireTrapWeight, + "paralyze_trap_weight": ParalyzeTrapWeight, + "ice_trap_weight": IceTrapWeight, "death_link": DeathLink } \ No newline at end of file diff --git a/worlds/pokemon_rb/rom.py b/worlds/pokemon_rb/rom.py index a3e3510dff0e..b48bd3edd029 100644 --- a/worlds/pokemon_rb/rom.py +++ b/worlds/pokemon_rb/rom.py @@ -447,70 +447,8 @@ def generate_output(self, output_directory: str): if badge not in written_badges: write_bytes(data, encode_text("Nothing"), rom_addresses["Badge_Text_" + badge.replace(" ", "_")]) - if self.multiworld.randomize_type_chart[self.player] == "vanilla": - chart = deepcopy(poke_data.type_chart) - elif self.multiworld.randomize_type_chart[self.player] == "randomize": - types = poke_data.type_names.values() - matchups = [] - for type1 in types: - for type2 in types: - matchups.append([type1, type2]) - self.multiworld.random.shuffle(matchups) - immunities = self.multiworld.immunity_matchups[self.player].value - super_effectives = self.multiworld.super_effective_matchups[self.player].value - not_very_effectives = self.multiworld.not_very_effective_matchups[self.player].value - normals = self.multiworld.normal_matchups[self.player].value - while super_effectives + not_very_effectives + normals < 225 - immunities: - super_effectives += self.multiworld.super_effective_matchups[self.player].value - not_very_effectives += self.multiworld.not_very_effective_matchups[self.player].value - normals += self.multiworld.normal_matchups[self.player].value - if super_effectives + not_very_effectives + normals > 225 - immunities: - total = super_effectives + not_very_effectives + normals - excess = total - (225 - immunities) - subtract_amounts = (int((excess / (super_effectives + not_very_effectives + normals)) * super_effectives), - int((excess / (super_effectives + not_very_effectives + normals)) * not_very_effectives), - int((excess / (super_effectives + not_very_effectives + normals)) * normals)) - super_effectives -= subtract_amounts[0] - not_very_effectives -= subtract_amounts[1] - normals -= subtract_amounts[2] - while super_effectives + not_very_effectives + normals > 225 - immunities: - r = self.multiworld.random.randint(0, 2) - if r == 0: - super_effectives -= 1 - elif r == 1: - not_very_effectives -= 1 - else: - normals -= 1 - chart = [] - for matchup_list, matchup_value in zip([immunities, normals, super_effectives, not_very_effectives], - [0, 10, 20, 5]): - for _ in range(matchup_list): - matchup = matchups.pop() - matchup.append(matchup_value) - chart.append(matchup) - elif self.multiworld.randomize_type_chart[self.player] == "chaos": - types = poke_data.type_names.values() - matchups = [] - for type1 in types: - for type2 in types: - matchups.append([type1, type2]) - chart = [] - values = list(range(21)) - self.multiworld.random.shuffle(matchups) - self.multiworld.random.shuffle(values) - for matchup in matchups: - value = values.pop(0) - values.append(value) - matchup.append(value) - chart.append(matchup) - # sort so that super-effective matchups occur first, to prevent dual "not very effective" / "super effective" - # matchups from leading to damage being ultimately divided by 2 and then multiplied by 2, which can lead to - # damage being reduced by 1 which leads to a "not very effective" message appearing due to my changes - # to the way effectiveness messages are generated. - chart = sorted(chart, key=lambda matchup: -matchup[2]) - type_loc = rom_addresses["Type_Chart"] - for matchup in chart: + for matchup in self.type_chart: if matchup[2] != 10: # don't needlessly divide damage by 10 and multiply by 10 data[type_loc] = poke_data.type_ids[matchup[0]] data[type_loc + 1] = poke_data.type_ids[matchup[1]] @@ -520,8 +458,6 @@ def generate_output(self, output_directory: str): data[type_loc + 1] = 0xFF data[type_loc + 2] = 0xFF - self.type_chart = chart - if self.multiworld.normalize_encounter_chances[self.player].value: chances = [25, 51, 77, 103, 129, 155, 180, 205, 230, 255] for i, chance in enumerate(chances): @@ -652,8 +588,8 @@ def get_base_rom_bytes(game_version: str, hash: str="") -> bytes: basemd5 = hashlib.md5() basemd5.update(base_rom_bytes) if hash != basemd5.hexdigest(): - raise Exception('Supplied Base Rom does not match known MD5 for US(1.0) release. ' - 'Get the correct game and version, then dump it') + raise Exception(f"Supplied Base Rom does not match known MD5 for Pokémon {game_version.title()} UE " + "release. Get the correct game and version, then dump it") return base_rom_bytes diff --git a/test/worlds/rogue_legacy/TestUnique.py b/worlds/rogue_legacy/test/TestUnique.py similarity index 100% rename from test/worlds/rogue_legacy/TestUnique.py rename to worlds/rogue_legacy/test/TestUnique.py diff --git a/test/worlds/rogue_legacy/__init__.py b/worlds/rogue_legacy/test/__init__.py similarity index 55% rename from test/worlds/rogue_legacy/__init__.py rename to worlds/rogue_legacy/test/__init__.py index 41ddcde152a6..2639e618c678 100644 --- a/test/worlds/rogue_legacy/__init__.py +++ b/worlds/rogue_legacy/test/__init__.py @@ -1,4 +1,4 @@ -from test.worlds.test_base import WorldTestBase +from test.TestBase import WorldTestBase class RLTestBase(WorldTestBase): diff --git a/worlds/ror2/docs/setup_en.md b/worlds/ror2/docs/setup_en.md index ac80120b779a..4e59d2bf4157 100644 --- a/worlds/ror2/docs/setup_en.md +++ b/worlds/ror2/docs/setup_en.md @@ -4,24 +4,24 @@ ### Install r2modman -Head on over to the r2modman page on Thunderstore and follow the installation instructions. +Head on over to the `r2modman` page on Thunderstore and follow the installation instructions. [r2modman Page](https://thunderstore.io/package/ebkr/r2modman/) ### Install Archipelago Mod using r2modman -You can install the Archipelago mod using r2modman in one of two ways. +You can install the Archipelago mod using `r2modman` in one of two ways. [Archipelago Mod Download Page](https://thunderstore.io/package/Sneaki/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. The mod manager should automatically install +You can also search for the "Archipelago" mod in the `r2modman` interface. The mod manager should automatically install all necessary dependencies as well. -### Running the Modded Game +## Running the Modded Game -Click on the "Start modded" button in the top left in r2modman to start the game with the Archipelago mod installed. +Click on the `Start modded` button in the top left in `r2modman` to start the game with the Archipelago mod installed. ## Configuring your YAML File ### What is a YAML and why do I need one? @@ -34,21 +34,25 @@ website to generate a YAML using a graphical interface. ## Joining an Archipelago Session +### Connecting to server +Once in game, join whatever lobby you wish, and you should see the AP connection fields which consist of: + - Slot Name: your name in the multiworld. This is the name you entered in the YAML. + - Password: optional password, leave blank if no password was set. + - Server URL: (default: archipelago.gg). + - Server Port: (default: 38281). -There will be a menu button on the right side of the screen in the character select menu. Click it in order to bring up -the in lobby mod config. From here you can expand the Archipelago sections and fill in the relevant info. Keep password -blank if there is no password on the server. +Once everything is entered click the Connect to AP button to connect to the server, and you should be connected! -Simply check `Enable Archipelago?` and when you start the run it will automatically connect. +Start the game whenever you are ready. -## Gameplay +### Gameplay The Risk of Rain 2 players send checks by causing items to spawn in-game. That means opening chests or killing bosses, generally. An item check is only sent out after a certain number of items are picked up. This count is configurable in the player's YAML. -## Commands -While playing the multiworld you can type `say` then your message to type in the multiworld chat. All other multiworld +### Chat/Commands +You can talk to other in the multiworld chat using the RoR2 chat. All other multiworld remote commands list in the [commands guide](/tutorial/Archipelago/commands/en) work as well in the RoR2 chat. You can also optionally connect to the multiworld using the text client, which can be found in the [main Archipelago installation](https://github.com/ArchipelagoMW/Archipelago/releases). \ No newline at end of file diff --git a/worlds/sc2wol/Items.py b/worlds/sc2wol/Items.py index 6cb768de58a7..aae83f50317a 100644 --- a/worlds/sc2wol/Items.py +++ b/worlds/sc2wol/Items.py @@ -157,17 +157,17 @@ def get_full_item_list(): 'Vulture' } -advanced_basic_units = { +advanced_basic_units = basic_units.union({ 'Reaper', 'Goliath', 'Diamondback', 'Viking' -} +}) -def get_basic_units(world: MultiWorld, player: int) -> typing.Set[str]: - if get_option_value(world, player, 'required_tactics') > 0: - return basic_units.union(advanced_basic_units) +def get_basic_units(multiworld: MultiWorld, player: int) -> typing.Set[str]: + if get_option_value(multiworld, player, 'required_tactics') > 0: + return advanced_basic_units else: return basic_units @@ -193,7 +193,7 @@ def get_basic_units(world: MultiWorld, player: int) -> typing.Set[str]: } zerg_defense_ratings = { "Perdition Turret": 2, - # Bunker w/ Firebat + # Bunker w/ Firebat: 2 "Hive Mind Emulator": 3, "Psi Disruptor": 3 } diff --git a/worlds/sc2wol/Locations.py b/worlds/sc2wol/Locations.py index f778c91be8e2..b476fc5e2007 100644 --- a/worlds/sc2wol/Locations.py +++ b/worlds/sc2wol/Locations.py @@ -18,9 +18,9 @@ class LocationData(NamedTuple): rule: Callable = lambda state: True -def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: +def get_locations(multiworld: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: # Note: rules which are ended with or True are rules identified as needed later when restricted units is an option - logic_level = get_option_value(world, player, 'required_tactics') + logic_level = get_option_value(multiworld, player, 'required_tactics') location_table: List[LocationData] = [ LocationData("Liberation Day", "Liberation Day: Victory", SC2WOL_LOC_ID_OFFSET + 100), LocationData("Liberation Day", "Liberation Day: First Statue", SC2WOL_LOC_ID_OFFSET + 101), @@ -30,144 +30,144 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Liberation Day", "Liberation Day: Fifth Statue", SC2WOL_LOC_ID_OFFSET + 105), LocationData("Liberation Day", "Liberation Day: Sixth Statue", SC2WOL_LOC_ID_OFFSET + 106), LocationData("The Outlaws", "The Outlaws: Victory", SC2WOL_LOC_ID_OFFSET + 200, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("The Outlaws", "The Outlaws: Rebel Base", SC2WOL_LOC_ID_OFFSET + 201, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Zero Hour", "Zero Hour: Victory", SC2WOL_LOC_ID_OFFSET + 300, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 2 and - (logic_level > 0 or state._sc2wol_has_anti_air(world, player))), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 2 and + (logic_level > 0 or state._sc2wol_has_anti_air(multiworld, player))), LocationData("Zero Hour", "Zero Hour: First Group Rescued", SC2WOL_LOC_ID_OFFSET + 301), LocationData("Zero Hour", "Zero Hour: Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Zero Hour", "Zero Hour: Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 2), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 2), LocationData("Evacuation", "Evacuation: Victory", SC2WOL_LOC_ID_OFFSET + 400, - lambda state: state._sc2wol_has_common_unit(world, player) and - (logic_level > 0 and state._sc2wol_has_anti_air(world, player) - or state._sc2wol_has_competent_anti_air(world, player))), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + (logic_level > 0 and state._sc2wol_has_anti_air(multiworld, player) + or state._sc2wol_has_competent_anti_air(multiworld, player))), LocationData("Evacuation", "Evacuation: First Chysalis", SC2WOL_LOC_ID_OFFSET + 401), LocationData("Evacuation", "Evacuation: Second Chysalis", SC2WOL_LOC_ID_OFFSET + 402, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Evacuation", "Evacuation: Third Chysalis", SC2WOL_LOC_ID_OFFSET + 403, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Outbreak", "Outbreak: Victory", SC2WOL_LOC_ID_OFFSET + 500, - lambda state: state._sc2wol_defense_rating(world, player, True, False) >= 4 and - (state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player))), + lambda state: state._sc2wol_defense_rating(multiworld, player, True, False) >= 4 and + (state._sc2wol_has_common_unit(multiworld, player) or state.has("Reaper", player))), LocationData("Outbreak", "Outbreak: Left Infestor", SC2WOL_LOC_ID_OFFSET + 501, - lambda state: state._sc2wol_defense_rating(world, player, True, False) >= 2 and - (state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player))), + lambda state: state._sc2wol_defense_rating(multiworld, player, True, False) >= 2 and + (state._sc2wol_has_common_unit(multiworld, player) or state.has("Reaper", player))), LocationData("Outbreak", "Outbreak: Right Infestor", SC2WOL_LOC_ID_OFFSET + 502, - lambda state: state._sc2wol_defense_rating(world, player, True, False) >= 2 and - (state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player))), + lambda state: state._sc2wol_defense_rating(multiworld, player, True, False) >= 2 and + (state._sc2wol_has_common_unit(multiworld, player) or state.has("Reaper", player))), LocationData("Safe Haven", "Safe Haven: Victory", SC2WOL_LOC_ID_OFFSET + 600, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Safe Haven", "Safe Haven: North Nexus", SC2WOL_LOC_ID_OFFSET + 601, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Safe Haven", "Safe Haven: East Nexus", SC2WOL_LOC_ID_OFFSET + 602, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Safe Haven", "Safe Haven: South Nexus", SC2WOL_LOC_ID_OFFSET + 603, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Haven's Fall", "Haven's Fall: Victory", SC2WOL_LOC_ID_OFFSET + 700, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 3), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 3), LocationData("Haven's Fall", "Haven's Fall: North Hive", SC2WOL_LOC_ID_OFFSET + 701, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 3), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 3), LocationData("Haven's Fall", "Haven's Fall: East Hive", SC2WOL_LOC_ID_OFFSET + 702, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 3), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 3), LocationData("Haven's Fall", "Haven's Fall: South Hive", SC2WOL_LOC_ID_OFFSET + 703, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_defense_rating(world, player, True) >= 3), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) >= 3), LocationData("Smash and Grab", "Smash and Grab: Victory", SC2WOL_LOC_ID_OFFSET + 800, - lambda state: state._sc2wol_has_common_unit(world, player) and - (logic_level > 0 and state._sc2wol_has_anti_air(world, player) - or state._sc2wol_has_competent_anti_air(world, player))), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + (logic_level > 0 and state._sc2wol_has_anti_air(multiworld, player) + or state._sc2wol_has_competent_anti_air(multiworld, player))), LocationData("Smash and Grab", "Smash and Grab: First Relic", SC2WOL_LOC_ID_OFFSET + 801), LocationData("Smash and Grab", "Smash and Grab: Second Relic", SC2WOL_LOC_ID_OFFSET + 802), LocationData("Smash and Grab", "Smash and Grab: Third Relic", SC2WOL_LOC_ID_OFFSET + 803, - lambda state: state._sc2wol_has_common_unit(world, player) and - (logic_level > 0 and state._sc2wol_has_anti_air(world, player) - or state._sc2wol_has_competent_anti_air(world, player))), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + (logic_level > 0 and state._sc2wol_has_anti_air(multiworld, player) + or state._sc2wol_has_competent_anti_air(multiworld, player))), LocationData("Smash and Grab", "Smash and Grab: Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804, - lambda state: state._sc2wol_has_common_unit(world, player) and - (logic_level > 0 and state._sc2wol_has_anti_air(world, player) - or state._sc2wol_has_competent_anti_air(world, player))), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + (logic_level > 0 and state._sc2wol_has_anti_air(multiworld, player) + or state._sc2wol_has_competent_anti_air(multiworld, player))), LocationData("The Dig", "The Dig: Victory", SC2WOL_LOC_ID_OFFSET + 900, - lambda state: state._sc2wol_has_anti_air(world, player) and - state._sc2wol_defense_rating(world, player, False) >= 7), + lambda state: state._sc2wol_has_anti_air(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, False) >= 7), LocationData("The Dig", "The Dig: Left Relic", SC2WOL_LOC_ID_OFFSET + 901, - lambda state: state._sc2wol_defense_rating(world, player, False) >= 5), + lambda state: state._sc2wol_defense_rating(multiworld, player, False) >= 5), LocationData("The Dig", "The Dig: Right Ground Relic", SC2WOL_LOC_ID_OFFSET + 902, - lambda state: state._sc2wol_defense_rating(world, player, False) >= 5), + lambda state: state._sc2wol_defense_rating(multiworld, player, False) >= 5), LocationData("The Dig", "The Dig: Right Cliff Relic", SC2WOL_LOC_ID_OFFSET + 903, - lambda state: state._sc2wol_defense_rating(world, player, False) >= 5), + lambda state: state._sc2wol_defense_rating(multiworld, player, False) >= 5), LocationData("The Moebius Factor", "The Moebius Factor: Victory", SC2WOL_LOC_ID_OFFSET + 1000, - lambda state: state._sc2wol_has_anti_air(world, player) and - (state._sc2wol_has_air(world, player) + lambda state: state._sc2wol_has_anti_air(multiworld, player) and + (state._sc2wol_has_air(multiworld, player) or state.has_any({'Medivac', 'Hercules'}, player) - and state._sc2wol_has_common_unit(world, player))), + and state._sc2wol_has_common_unit(multiworld, player))), LocationData("The Moebius Factor", "The Moebius Factor: South Rescue", SC2WOL_LOC_ID_OFFSET + 1003, - lambda state: state._sc2wol_able_to_rescue(world, player)), + lambda state: state._sc2wol_able_to_rescue(multiworld, player)), LocationData("The Moebius Factor", "The Moebius Factor: Wall Rescue", SC2WOL_LOC_ID_OFFSET + 1004, - lambda state: state._sc2wol_able_to_rescue(world, player)), + lambda state: state._sc2wol_able_to_rescue(multiworld, player)), LocationData("The Moebius Factor", "The Moebius Factor: Mid Rescue", SC2WOL_LOC_ID_OFFSET + 1005, - lambda state: state._sc2wol_able_to_rescue(world, player)), + lambda state: state._sc2wol_able_to_rescue(multiworld, player)), LocationData("The Moebius Factor", "The Moebius Factor: Nydus Roof Rescue", SC2WOL_LOC_ID_OFFSET + 1006, - lambda state: state._sc2wol_able_to_rescue(world, player)), + lambda state: state._sc2wol_able_to_rescue(multiworld, player)), LocationData("The Moebius Factor", "The Moebius Factor: Alive Inside Rescue", SC2WOL_LOC_ID_OFFSET + 1007, - lambda state: state._sc2wol_able_to_rescue(world, player)), + lambda state: state._sc2wol_able_to_rescue(multiworld, player)), LocationData("The Moebius Factor", "The Moebius Factor: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1008, - lambda state: state._sc2wol_has_anti_air(world, player) and - (state._sc2wol_has_air(world, player) + lambda state: state._sc2wol_has_anti_air(multiworld, player) and + (state._sc2wol_has_air(multiworld, player) or state.has_any({'Medivac', 'Hercules'}, player) - and state._sc2wol_has_common_unit(world, player))), + and state._sc2wol_has_common_unit(multiworld, player))), LocationData("Supernova", "Supernova: Victory", SC2WOL_LOC_ID_OFFSET + 1100, - lambda state: state._sc2wol_beats_protoss_deathball(world, player)), + lambda state: state._sc2wol_beats_protoss_deathball(multiworld, player)), LocationData("Supernova", "Supernova: West Relic", SC2WOL_LOC_ID_OFFSET + 1101), LocationData("Supernova", "Supernova: North Relic", SC2WOL_LOC_ID_OFFSET + 1102), LocationData("Supernova", "Supernova: South Relic", SC2WOL_LOC_ID_OFFSET + 1103, - lambda state: state._sc2wol_beats_protoss_deathball(world, player)), + lambda state: state._sc2wol_beats_protoss_deathball(multiworld, player)), LocationData("Supernova", "Supernova: East Relic", SC2WOL_LOC_ID_OFFSET + 1104, - lambda state: state._sc2wol_beats_protoss_deathball(world, player)), + lambda state: state._sc2wol_beats_protoss_deathball(multiworld, player)), LocationData("Maw of the Void", "Maw of the Void: Victory", SC2WOL_LOC_ID_OFFSET + 1200, - lambda state: state._sc2wol_survives_rip_field(world, player)), + lambda state: state._sc2wol_survives_rip_field(multiworld, player)), LocationData("Maw of the Void", "Maw of the Void: Landing Zone Cleared", SC2WOL_LOC_ID_OFFSET + 1201), LocationData("Maw of the Void", "Maw of the Void: Expansion Prisoners", SC2WOL_LOC_ID_OFFSET + 1202, - lambda state: logic_level > 0 or state._sc2wol_survives_rip_field(world, player)), + lambda state: logic_level > 0 or state._sc2wol_survives_rip_field(multiworld, player)), LocationData("Maw of the Void", "Maw of the Void: South Close Prisoners", SC2WOL_LOC_ID_OFFSET + 1203, - lambda state: logic_level > 0 or state._sc2wol_survives_rip_field(world, player)), + lambda state: logic_level > 0 or state._sc2wol_survives_rip_field(multiworld, player)), LocationData("Maw of the Void", "Maw of the Void: South Far Prisoners", SC2WOL_LOC_ID_OFFSET + 1204, - lambda state: state._sc2wol_survives_rip_field(world, player)), + lambda state: state._sc2wol_survives_rip_field(multiworld, player)), LocationData("Maw of the Void", "Maw of the Void: North Prisoners", SC2WOL_LOC_ID_OFFSET + 1205, - lambda state: state._sc2wol_survives_rip_field(world, player)), + lambda state: state._sc2wol_survives_rip_field(multiworld, player)), LocationData("Devil's Playground", "Devil's Playground: Victory", SC2WOL_LOC_ID_OFFSET + 1300, lambda state: logic_level > 0 or - state._sc2wol_has_anti_air(world, player) and ( - state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player))), + state._sc2wol_has_anti_air(multiworld, player) and ( + state._sc2wol_has_common_unit(multiworld, player) or state.has("Reaper", player))), LocationData("Devil's Playground", "Devil's Playground: Tosh's Miners", SC2WOL_LOC_ID_OFFSET + 1301), LocationData("Devil's Playground", "Devil's Playground: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1302, - lambda state: logic_level > 0 or state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + lambda state: logic_level > 0 or state._sc2wol_has_common_unit(multiworld, player) or state.has("Reaper", player)), LocationData("Welcome to the Jungle", "Welcome to the Jungle: Victory", SC2WOL_LOC_ID_OFFSET + 1400, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Welcome to the Jungle", "Welcome to the Jungle: Close Relic", SC2WOL_LOC_ID_OFFSET + 1401), LocationData("Welcome to the Jungle", "Welcome to the Jungle: West Relic", SC2WOL_LOC_ID_OFFSET + 1402, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Welcome to the Jungle", "Welcome to the Jungle: North-East Relic", SC2WOL_LOC_ID_OFFSET + 1403, - lambda state: state._sc2wol_has_common_unit(world, player) and - state._sc2wol_has_competent_anti_air(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player) and + state._sc2wol_has_competent_anti_air(multiworld, player)), LocationData("Breakout", "Breakout: Victory", SC2WOL_LOC_ID_OFFSET + 1500), LocationData("Breakout", "Breakout: Diamondback Prison", SC2WOL_LOC_ID_OFFSET + 1501), LocationData("Breakout", "Breakout: Siegetank Prison", SC2WOL_LOC_ID_OFFSET + 1502), @@ -178,101 +178,101 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Ghost of a Chance", "Ghost of a Chance: Second Island Spectres", SC2WOL_LOC_ID_OFFSET + 1604), LocationData("Ghost of a Chance", "Ghost of a Chance: Third Island Spectres", SC2WOL_LOC_ID_OFFSET + 1605), LocationData("The Great Train Robbery", "The Great Train Robbery: Victory", SC2WOL_LOC_ID_OFFSET + 1700, - lambda state: state._sc2wol_has_train_killers(world, player) and - state._sc2wol_has_anti_air(world, player)), + lambda state: state._sc2wol_has_train_killers(multiworld, player) and + state._sc2wol_has_anti_air(multiworld, player)), LocationData("The Great Train Robbery", "The Great Train Robbery: North Defiler", SC2WOL_LOC_ID_OFFSET + 1701), LocationData("The Great Train Robbery", "The Great Train Robbery: Mid Defiler", SC2WOL_LOC_ID_OFFSET + 1702), LocationData("The Great Train Robbery", "The Great Train Robbery: South Defiler", SC2WOL_LOC_ID_OFFSET + 1703), LocationData("Cutthroat", "Cutthroat: Victory", SC2WOL_LOC_ID_OFFSET + 1800, - lambda state: state._sc2wol_has_common_unit(world, player) and + lambda state: state._sc2wol_has_common_unit(multiworld, player) and (logic_level > 0 or state._sc2wol_has_anti_air)), LocationData("Cutthroat", "Cutthroat: Mira Han", SC2WOL_LOC_ID_OFFSET + 1801, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Cutthroat", "Cutthroat: North Relic", SC2WOL_LOC_ID_OFFSET + 1802, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Cutthroat", "Cutthroat: Mid Relic", SC2WOL_LOC_ID_OFFSET + 1803), LocationData("Cutthroat", "Cutthroat: Southwest Relic", SC2WOL_LOC_ID_OFFSET + 1804, - lambda state: state._sc2wol_has_common_unit(world, player)), + lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Engine of Destruction", "Engine of Destruction: Victory", SC2WOL_LOC_ID_OFFSET + 1900, - lambda state: state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), + lambda state: state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_has_common_unit(multiworld, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Engine of Destruction: Odin", SC2WOL_LOC_ID_OFFSET + 1901), LocationData("Engine of Destruction", "Engine of Destruction: Loki", SC2WOL_LOC_ID_OFFSET + 1902, - lambda state: state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), + lambda state: state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_has_common_unit(multiworld, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Engine of Destruction: Lab Devourer", SC2WOL_LOC_ID_OFFSET + 1903), LocationData("Engine of Destruction", "Engine of Destruction: North Devourer", SC2WOL_LOC_ID_OFFSET + 1904, - lambda state: state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), + lambda state: state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_has_common_unit(multiworld, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Engine of Destruction: Southeast Devourer", SC2WOL_LOC_ID_OFFSET + 1905, - lambda state: state._sc2wol_has_competent_anti_air(world, player) and - state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), + lambda state: state._sc2wol_has_competent_anti_air(multiworld, player) and + state._sc2wol_has_common_unit(multiworld, player) or state.has('Wraith', player)), LocationData("Media Blitz", "Media Blitz: Victory", SC2WOL_LOC_ID_OFFSET + 2000, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Media Blitz", "Media Blitz: Tower 1", SC2WOL_LOC_ID_OFFSET + 2001, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Media Blitz", "Media Blitz: Tower 2", SC2WOL_LOC_ID_OFFSET + 2002, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Media Blitz", "Media Blitz: Tower 3", SC2WOL_LOC_ID_OFFSET + 2003, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Media Blitz", "Media Blitz: Science Facility", SC2WOL_LOC_ID_OFFSET + 2004), LocationData("Piercing the Shroud", "Piercing the Shroud: Victory", SC2WOL_LOC_ID_OFFSET + 2100, - lambda state: state._sc2wol_has_mm_upgrade(world, player)), + lambda state: state._sc2wol_has_mm_upgrade(multiworld, player)), LocationData("Piercing the Shroud", "Piercing the Shroud: Holding Cell Relic", SC2WOL_LOC_ID_OFFSET + 2101), LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk Relic", SC2WOL_LOC_ID_OFFSET + 2102, - lambda state: state._sc2wol_has_mm_upgrade(world, player)), + lambda state: state._sc2wol_has_mm_upgrade(multiworld, player)), LocationData("Piercing the Shroud", "Piercing the Shroud: First Escape Relic", SC2WOL_LOC_ID_OFFSET + 2103, - lambda state: state._sc2wol_has_mm_upgrade(world, player)), + lambda state: state._sc2wol_has_mm_upgrade(multiworld, player)), LocationData("Piercing the Shroud", "Piercing the Shroud: Second Escape Relic", SC2WOL_LOC_ID_OFFSET + 2104, - lambda state: state._sc2wol_has_mm_upgrade(world, player)), + lambda state: state._sc2wol_has_mm_upgrade(multiworld, player)), LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk ", SC2WOL_LOC_ID_OFFSET + 2105, - lambda state: state._sc2wol_has_mm_upgrade(world, player)), + lambda state: state._sc2wol_has_mm_upgrade(multiworld, player)), LocationData("Whispers of Doom", "Whispers of Doom: Victory", SC2WOL_LOC_ID_OFFSET + 2200), LocationData("Whispers of Doom", "Whispers of Doom: First Hatchery", SC2WOL_LOC_ID_OFFSET + 2201), LocationData("Whispers of Doom", "Whispers of Doom: Second Hatchery", SC2WOL_LOC_ID_OFFSET + 2202), LocationData("Whispers of Doom", "Whispers of Doom: Third Hatchery", SC2WOL_LOC_ID_OFFSET + 2203), LocationData("A Sinister Turn", "A Sinister Turn: Victory", SC2WOL_LOC_ID_OFFSET + 2300, - lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + lambda state: state._sc2wol_has_protoss_medium_units(multiworld, player)), LocationData("A Sinister Turn", "A Sinister Turn: Robotics Facility", SC2WOL_LOC_ID_OFFSET + 2301, - lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(world, player)), + lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(multiworld, player)), LocationData("A Sinister Turn", "A Sinister Turn: Dark Shrine", SC2WOL_LOC_ID_OFFSET + 2302, - lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(world, player)), + lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(multiworld, player)), LocationData("A Sinister Turn", "A Sinister Turn: Templar Archives", SC2WOL_LOC_ID_OFFSET + 2303, - lambda state: state._sc2wol_has_protoss_common_units(world, player)), + lambda state: state._sc2wol_has_protoss_common_units(multiworld, player)), LocationData("Echoes of the Future", "Echoes of the Future: Victory", SC2WOL_LOC_ID_OFFSET + 2400, - lambda state: logic_level > 0 or state._sc2wol_has_protoss_medium_units(world, player)), + lambda state: logic_level > 0 or state._sc2wol_has_protoss_medium_units(multiworld, player)), LocationData("Echoes of the Future", "Echoes of the Future: Close Obelisk", SC2WOL_LOC_ID_OFFSET + 2401), LocationData("Echoes of the Future", "Echoes of the Future: West Obelisk", SC2WOL_LOC_ID_OFFSET + 2402, - lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(world, player)), + lambda state: logic_level > 0 or state._sc2wol_has_protoss_common_units(multiworld, player)), LocationData("In Utter Darkness", "In Utter Darkness: Defeat", SC2WOL_LOC_ID_OFFSET + 2500), LocationData("In Utter Darkness", "In Utter Darkness: Protoss Archive", SC2WOL_LOC_ID_OFFSET + 2501, - lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + lambda state: state._sc2wol_has_protoss_medium_units(multiworld, player)), LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2502, - lambda state: state._sc2wol_has_protoss_common_units(world, player)), + lambda state: state._sc2wol_has_protoss_common_units(multiworld, player)), LocationData("Gates of Hell", "Gates of Hell: Victory", SC2WOL_LOC_ID_OFFSET + 2600, - lambda state: state._sc2wol_has_competent_comp(world, player) and - state._sc2wol_defense_rating(world, player, True) > 6), + lambda state: state._sc2wol_has_competent_comp(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) > 6), LocationData("Gates of Hell", "Gates of Hell: Large Army", SC2WOL_LOC_ID_OFFSET + 2601, - lambda state: state._sc2wol_has_competent_comp(world, player) and - state._sc2wol_defense_rating(world, player, True) > 6), + lambda state: state._sc2wol_has_competent_comp(multiworld, player) and + state._sc2wol_defense_rating(multiworld, player, True) > 6), LocationData("Belly of the Beast", "Belly of the Beast: Victory", SC2WOL_LOC_ID_OFFSET + 2700), LocationData("Belly of the Beast", "Belly of the Beast: First Charge", SC2WOL_LOC_ID_OFFSET + 2701), LocationData("Belly of the Beast", "Belly of the Beast: Second Charge", SC2WOL_LOC_ID_OFFSET + 2702), LocationData("Belly of the Beast", "Belly of the Beast: Third Charge", SC2WOL_LOC_ID_OFFSET + 2703), LocationData("Shatter the Sky", "Shatter the Sky: Victory", SC2WOL_LOC_ID_OFFSET + 2800, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Shatter the Sky", "Shatter the Sky: Close Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2801, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Shatter the Sky", "Shatter the Sky: Northwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2802, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Shatter the Sky", "Shatter the Sky: Southeast Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2803, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Shatter the Sky", "Shatter the Sky: Southwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2804, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("Shatter the Sky", "Shatter the Sky: Leviathan", SC2WOL_LOC_ID_OFFSET + 2805, - lambda state: state._sc2wol_has_competent_comp(world, player)), + lambda state: state._sc2wol_has_competent_comp(multiworld, player)), LocationData("All-In", "All-In: Victory", None, - lambda state: state._sc2wol_final_mission_requirements(world, player)) + lambda state: state._sc2wol_final_mission_requirements(multiworld, player)) ] beat_events = [] @@ -280,7 +280,8 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L for i, location_data in enumerate(location_table): # Removing all item-based logic on No Logic if logic_level == 2: - location_table[i] = location_data._replace(rule=Location.access_rule) + location_data = location_data._replace(rule=Location.access_rule) + location_table[i] = location_data # Generating Beat event locations if location_data.name.endswith((": Victory", ": Defeat")): beat_events.append( diff --git a/worlds/sc2wol/LogicMixin.py b/worlds/sc2wol/LogicMixin.py index 1de8295970de..dac9d856e739 100644 --- a/worlds/sc2wol/LogicMixin.py +++ b/worlds/sc2wol/LogicMixin.py @@ -5,26 +5,26 @@ class SC2WoLLogic(LogicMixin): - def _sc2wol_has_common_unit(self, world: MultiWorld, player: int) -> bool: - return self.has_any(get_basic_units(world, player), player) + def _sc2wol_has_common_unit(self, multiworld: MultiWorld, player: int) -> bool: + return self.has_any(get_basic_units(multiworld, player), player) - def _sc2wol_has_air(self, world: MultiWorld, player: int) -> bool: - return self.has_any({'Viking', 'Wraith', 'Banshee'}, player) or get_option_value(world, player, 'required_tactics') > 0 \ - and self.has_any({'Hercules', 'Medivac'}, player) and self._sc2wol_has_common_unit(world, player) + def _sc2wol_has_air(self, multiworld: MultiWorld, player: int) -> bool: + return self.has_any({'Viking', 'Wraith', 'Banshee'}, player) or get_option_value(multiworld, player, 'required_tactics') > 0 \ + and self.has_any({'Hercules', 'Medivac'}, player) and self._sc2wol_has_common_unit(multiworld, player) - def _sc2wol_has_air_anti_air(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_has_air_anti_air(self, multiworld: MultiWorld, player: int) -> bool: return self.has('Viking', player) \ - or get_option_value(world, player, 'required_tactics') > 0 and self.has('Wraith', player) + or get_option_value(multiworld, player, 'required_tactics') > 0 and self.has('Wraith', player) - def _sc2wol_has_competent_anti_air(self, world: MultiWorld, player: int) -> bool: - return self.has_any({'Marine', 'Goliath'}, player) or self._sc2wol_has_air_anti_air(world, player) + def _sc2wol_has_competent_anti_air(self, multiworld: MultiWorld, player: int) -> bool: + return self.has_any({'Marine', 'Goliath'}, player) or self._sc2wol_has_air_anti_air(multiworld, player) - def _sc2wol_has_anti_air(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_has_anti_air(self, multiworld: MultiWorld, player: int) -> bool: return self.has_any({'Missile Turret', 'Thor', 'War Pigs', 'Spartan Company', "Hel's Angel", 'Battlecruiser', 'Wraith'}, player) \ - or self._sc2wol_has_competent_anti_air(world, player) \ - or get_option_value(world, player, 'required_tactics') > 0 and self.has_any({'Ghost', 'Spectre'}, player) + or self._sc2wol_has_competent_anti_air(multiworld, player) \ + or get_option_value(multiworld, player, 'required_tactics') > 0 and self.has_any({'Ghost', 'Spectre'}, player) - def _sc2wol_defense_rating(self, world: MultiWorld, player: int, zerg_enemy: bool, air_enemy: bool = True) -> bool: + def _sc2wol_defense_rating(self, multiworld: MultiWorld, player: int, zerg_enemy: bool, air_enemy: bool = True) -> bool: defense_score = sum((defense_ratings[item] for item in defense_ratings if self.has(item, player))) if self.has_any({'Marine', 'Marauder'}, player) and self.has('Bunker', player): defense_score += 3 @@ -35,62 +35,63 @@ def _sc2wol_defense_rating(self, world: MultiWorld, player: int, zerg_enemy: boo if not air_enemy and self.has('Missile Turret', player): defense_score -= defense_ratings['Missile Turret'] # Advanced Tactics bumps defense rating requirements down by 2 - if get_option_value(world, player, 'required_tactics') > 0: + if get_option_value(multiworld, player, 'required_tactics') > 0: defense_score += 2 return defense_score - def _sc2wol_has_competent_comp(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_has_competent_comp(self, multiworld: MultiWorld, player: int) -> bool: return (self.has('Marine', player) or self.has('Marauder', player) and - self._sc2wol_has_competent_anti_air(world, player)) and self.has_any({'Medivac', 'Medic'}, player) or \ - self.has('Thor', player) or self.has("Banshee", player) and self._sc2wol_has_competent_anti_air(world, player) or \ - self.has('Battlecruiser', player) and self._sc2wol_has_common_unit(world, player) or \ - self.has('Siege Tank', player) and self._sc2wol_has_competent_anti_air(world, player) + self._sc2wol_has_competent_anti_air(multiworld, player)) and self.has_any({'Medivac', 'Medic'}, player) or \ + self.has('Thor', player) or self.has("Banshee", player) and self._sc2wol_has_competent_anti_air(multiworld, player) or \ + self.has('Battlecruiser', player) and self._sc2wol_has_common_unit(multiworld, player) or \ + self.has('Siege Tank', player) and self._sc2wol_has_competent_anti_air(multiworld, player) - def _sc2wol_has_train_killers(self, world: MultiWorld, player: int) -> bool: - return (self.has_any({'Siege Tank', 'Diamondback', 'Marauder'}, player) or get_option_value(world, player, 'required_tactics') > 0 + def _sc2wol_has_train_killers(self, multiworld: MultiWorld, player: int) -> bool: + return (self.has_any({'Siege Tank', 'Diamondback', 'Marauder'}, player) or get_option_value(multiworld, player, 'required_tactics') > 0 and self.has_all({'Reaper', "G-4 Clusterbomb"}, player) or self.has_all({'Spectre', 'Psionic Lash'}, player)) - def _sc2wol_able_to_rescue(self, world: MultiWorld, player: int) -> bool: - return self.has_any({'Medivac', 'Hercules', 'Raven', 'Viking'}, player) or get_option_value(world, player, 'required_tactics') > 0 + def _sc2wol_able_to_rescue(self, multiworld: MultiWorld, player: int) -> bool: + return self.has_any({'Medivac', 'Hercules', 'Raven', 'Viking'}, player) or get_option_value(multiworld, player, 'required_tactics') > 0 - def _sc2wol_has_protoss_common_units(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_has_protoss_common_units(self, multiworld: MultiWorld, player: int) -> bool: return self.has_any({'Zealot', 'Immortal', 'Stalker', 'Dark Templar'}, player) \ - or get_option_value(world, player, 'required_tactics') > 0 and self.has_any({'High Templar', 'Dark Templar'}, player) + or get_option_value(multiworld, player, 'required_tactics') > 0 and self.has_any({'High Templar', 'Dark Templar'}, player) - def _sc2wol_has_protoss_medium_units(self, world: MultiWorld, player: int) -> bool: - return self._sc2wol_has_protoss_common_units(world, player) and \ + def _sc2wol_has_protoss_medium_units(self, multiworld: MultiWorld, player: int) -> bool: + return self._sc2wol_has_protoss_common_units(multiworld, player) and \ self.has_any({'Stalker', 'Void Ray', 'Phoenix', 'Carrier'}, player) \ - or get_option_value(world, player, 'required_tactics') > 0 and self.has_any({'High Templar', 'Dark Templar'}, player) + or get_option_value(multiworld, player, 'required_tactics') > 0 and self.has_any({'High Templar', 'Dark Templar'}, player) - def _sc2wol_beats_protoss_deathball(self, world: MultiWorld, player: int) -> bool: - return self.has_any({'Banshee', 'Battlecruiser'}, player) and self._sc2wol_has_competent_anti_air or \ - self._sc2wol_has_competent_comp(world, player) and self._sc2wol_has_air_anti_air(world, player) + def _sc2wol_beats_protoss_deathball(self, multiworld: MultiWorld, player: int) -> bool: + return self.has_any({'Banshee', 'Battlecruiser'}, player) and self._sc2wol_has_competent_anti_air(multiworld, player) or \ + self._sc2wol_has_competent_comp(multiworld, player) and self._sc2wol_has_air_anti_air(multiworld, player) - def _sc2wol_has_mm_upgrade(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_has_mm_upgrade(self, multiworld: MultiWorld, player: int) -> bool: return self.has_any({"Combat Shield (Marine)", "Stabilizer Medpacks (Medic)"}, player) - def _sc2wol_survives_rip_field(self, world: MultiWorld, player: int) -> bool: + def _sc2wol_survives_rip_field(self, multiworld: MultiWorld, player: int) -> bool: return self.has("Battlecruiser", player) or \ - self._sc2wol_has_air(world, player) and \ - self._sc2wol_has_competent_anti_air(world, player) and \ + self._sc2wol_has_air(multiworld, player) and \ + self._sc2wol_has_competent_anti_air(multiworld, player) and \ self.has("Science Vessel", player) - def _sc2wol_has_nukes(self, world: MultiWorld, player: int) -> bool: - return get_option_value(world, player, 'required_tactics') > 0 and self.has_any({'Ghost', 'Spectre'}, player) + def _sc2wol_has_nukes(self, multiworld: MultiWorld, player: int) -> bool: + return get_option_value(multiworld, player, 'required_tactics') > 0 and self.has_any({'Ghost', 'Spectre'}, player) - def _sc2wol_final_mission_requirements(self, world: MultiWorld, player: int): - defense_rating = self._sc2wol_defense_rating(world, player, True) - beats_kerrigan = self.has_any({'Marine', 'Banshee', 'Ghost'}, player) or get_option_value(world, player, 'required_tactics') > 0 - if get_option_value(world, player, 'all_in_map') == 0: + def _sc2wol_final_mission_requirements(self, multiworld: MultiWorld, player: int): + beats_kerrigan = self.has_any({'Marine', 'Banshee', 'Ghost'}, player) or get_option_value(multiworld, player, 'required_tactics') > 0 + if get_option_value(multiworld, player, 'all_in_map') == 0: # Ground + defense_rating = self._sc2wol_defense_rating(multiworld, player, True, False) if self.has_any({'Battlecruiser', 'Banshee'}, player): defense_rating += 3 return defense_rating >= 12 and beats_kerrigan else: # Air + defense_rating = self._sc2wol_defense_rating(multiworld, player, True, True) return defense_rating >= 8 and beats_kerrigan \ and self.has_any({'Viking', 'Battlecruiser'}, player) \ and self.has_any({'Hive Mind Emulator', 'Psi Disruptor', 'Missile Turret'}, player) - def _sc2wol_cleared_missions(self, world: MultiWorld, player: int, mission_count: int) -> bool: + def _sc2wol_cleared_missions(self, multiworld: MultiWorld, player: int, mission_count: int) -> bool: return self.has_group("Missions", player, mission_count) diff --git a/worlds/sc2wol/MissionTables.py b/worlds/sc2wol/MissionTables.py index 8d06944662d3..d926ea625117 100644 --- a/worlds/sc2wol/MissionTables.py +++ b/worlds/sc2wol/MissionTables.py @@ -197,12 +197,12 @@ class FillMission(NamedTuple): } -def get_starting_mission_locations(world: MultiWorld, player: int) -> Set[str]: - if get_option_value(world, player, 'shuffle_no_build') or get_option_value(world, player, 'mission_order') < 2: +def get_starting_mission_locations(multiworld: MultiWorld, player: int) -> Set[str]: + if get_option_value(multiworld, player, 'shuffle_no_build') or get_option_value(multiworld, player, 'mission_order') < 2: # Always start with a no-build mission unless explicitly relegating them # Vanilla and Vanilla Shuffled always start with a no-build even when relegated return no_build_starting_mission_locations - elif get_option_value(world, player, 'required_tactics') > 0: + elif get_option_value(multiworld, player, 'required_tactics') > 0: # Advanced Tactics/No Logic add more starting missions to the pool return {**build_starting_mission_locations, **advanced_starting_mission_locations} else: diff --git a/worlds/sc2wol/Options.py b/worlds/sc2wol/Options.py index 62780fa29f82..4526328f5322 100644 --- a/worlds/sc2wol/Options.py +++ b/worlds/sc2wol/Options.py @@ -130,8 +130,8 @@ class ExcludedMissions(OptionSet): } -def get_option_value(world: MultiWorld, player: int, name: str) -> int: - option = getattr(world, name, None) +def get_option_value(multiworld: MultiWorld, player: int, name: str) -> int: + option = getattr(multiworld, name, None) if option is None: return 0 @@ -139,8 +139,8 @@ def get_option_value(world: MultiWorld, player: int, name: str) -> int: return int(option[player].value) -def get_option_set_value(world: MultiWorld, player: int, name: str) -> set: - option = getattr(world, name, None) +def get_option_set_value(multiworld: MultiWorld, player: int, name: str) -> set: + option = getattr(multiworld, name, None) if option is None: return set() diff --git a/worlds/sc2wol/PoolFilter.py b/worlds/sc2wol/PoolFilter.py index 91fef13a8135..c4aa1098bbf6 100644 --- a/worlds/sc2wol/PoolFilter.py +++ b/worlds/sc2wol/PoolFilter.py @@ -21,14 +21,14 @@ PROTOSS_REGIONS = {"A Sinister Turn", "Echoes of the Future", "In Utter Darkness"} -def filter_missions(world: MultiWorld, player: int) -> Dict[str, List[str]]: +def filter_missions(multiworld: MultiWorld, player: int) -> Dict[str, List[str]]: """ Returns a semi-randomly pruned tuple of no-build, easy, medium, and hard mission sets """ - mission_order_type = get_option_value(world, player, "mission_order") - shuffle_protoss = get_option_value(world, player, "shuffle_protoss") - excluded_missions = set(get_option_set_value(world, player, "excluded_missions")) + mission_order_type = get_option_value(multiworld, player, "mission_order") + shuffle_protoss = get_option_value(multiworld, player, "shuffle_protoss") + excluded_missions = set(get_option_set_value(multiworld, player, "excluded_missions")) invalid_mission_names = excluded_missions.difference(vanilla_mission_req_table.keys()) if invalid_mission_names: raise Exception("Error in locked_missions - the following are not valid mission names: " + ", ".join(invalid_mission_names)) @@ -54,17 +54,17 @@ def filter_missions(world: MultiWorld, player: int) -> Dict[str, List[str]]: excluded_missions = excluded_missions.union(PROTOSS_REGIONS) # Replacing All-In on low mission counts if mission_count < 14: - final_mission = world.random.choice([mission for mission in alt_final_mission_locations.keys() if mission not in excluded_missions]) + final_mission = multiworld.random.choice([mission for mission in alt_final_mission_locations.keys() if mission not in excluded_missions]) excluded_missions.add(final_mission) else: final_mission = 'All-In' # Yaml settings determine which missions can be placed in the first slot - mission_pools[0] = [mission for mission in get_starting_mission_locations(world, player).keys() if mission not in excluded_missions] + mission_pools[0] = [mission for mission in get_starting_mission_locations(multiworld, player).keys() if mission not in excluded_missions] # Removing the new no-build missions from their original sets for i in range(1, len(mission_pools)): mission_pools[i] = [mission for mission in mission_pools[i] if mission not in excluded_missions.union(mission_pools[0])] # If the first mission is a build mission, there may not be enough locations to reach Outbreak as a second mission - if not get_option_value(world, player, 'shuffle_no_build'): + if not get_option_value(multiworld, player, 'shuffle_no_build'): # Swapping Outbreak and The Great Train Robbery if "Outbreak" in mission_pools[1]: mission_pools[1].remove("Outbreak") @@ -87,7 +87,7 @@ def filter_missions(world: MultiWorld, player: int) -> Dict[str, List[str]]: if all(len(mission_pool) <= 1 for mission_pool in mission_pools): raise Exception("Not enough missions available to fill the campaign on current settings. Please exclude fewer missions.") else: - mission_pool.remove(world.random.choice(mission_pool)) + mission_pool.remove(multiworld.random.choice(mission_pool)) current_count -= 1 set_cycle += 1 @@ -134,7 +134,7 @@ def generate_reduced_inventory(self, inventory_size: int, mission_requirements: } requirements = mission_requirements cascade_keys = self.cascade_removal_map.keys() - units_always_have_upgrades = get_option_value(self.world, self.player, "units_always_have_upgrades") + units_always_have_upgrades = get_option_value(self.multiworld, self.player, "units_always_have_upgrades") if self.min_units_per_structure > 0: requirements.append(lambda state: state.has_units_per_structure()) @@ -155,7 +155,7 @@ def attempt_removal(item: Item) -> bool: if len(inventory) == 0: raise Exception("Reduced item pool generation failed - not enough locations available to place items.") # Select random item from removable items - item = self.world.random.choice(inventory) + item = self.multiworld.random.choice(inventory) # Cascade removals to associated items if item in cascade_keys: items_to_remove = self.cascade_removal_map[item] @@ -206,10 +206,10 @@ def _read_logic(self): self._sc2wol_has_mm_upgrade = lambda world, player: SC2WoLLogic._sc2wol_has_mm_upgrade(self, world, player) self._sc2wol_final_mission_requirements = lambda world, player: SC2WoLLogic._sc2wol_final_mission_requirements(self, world, player) - def __init__(self, world: MultiWorld, player: int, + def __init__(self, multiworld: MultiWorld, player: int, item_pool: List[Item], existing_items: List[Item], locked_items: List[Item], has_protoss: bool): - self.world = world + self.multiworld = multiworld self.player = player self.logical_inventory = set() self.locked_items = locked_items[:] @@ -219,7 +219,7 @@ def __init__(self, world: MultiWorld, player: int, self.item_pool = [] item_quantities: dict[str, int] = dict() # Inventory restrictiveness based on number of missions with checks - mission_order_type = get_option_value(self.world, self.player, "mission_order") + mission_order_type = get_option_value(self.multiworld, self.player, "mission_order") mission_count = len(mission_orders[mission_order_type]) - 1 self.min_units_per_structure = int(mission_count / 7) min_upgrades = 1 if mission_count < 10 else 2 @@ -244,12 +244,12 @@ def __init__(self, world: MultiWorld, player: int, upgrades = get_item_upgrades(self.item_pool, item) associated_items = [*upgrades, item] self.cascade_removal_map[item] = associated_items - if get_option_value(world, player, "units_always_have_upgrades"): + if get_option_value(multiworld, player, "units_always_have_upgrades"): for upgrade in upgrades: self.cascade_removal_map[upgrade] = associated_items -def filter_items(world: MultiWorld, player: int, mission_req_table: Dict[str, MissionInfo], location_cache: List[Location], +def filter_items(multiworld: MultiWorld, player: int, mission_req_table: Dict[str, MissionInfo], location_cache: List[Location], item_pool: List[Item], existing_items: List[Item], locked_items: List[Item]) -> List[Item]: """ Returns a semi-randomly pruned set of items based on number of available locations. @@ -259,7 +259,7 @@ def filter_items(world: MultiWorld, player: int, mission_req_table: Dict[str, Mi inventory_size = len(open_locations) has_protoss = bool(PROTOSS_REGIONS.intersection(mission_req_table.keys())) mission_requirements = [location.access_rule for location in location_cache] - valid_inventory = ValidInventory(world, player, item_pool, existing_items, locked_items, has_protoss) + valid_inventory = ValidInventory(multiworld, player, item_pool, existing_items, locked_items, has_protoss) valid_items = valid_inventory.generate_reduced_inventory(inventory_size, mission_requirements) return valid_items diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py index d42a417b1a2b..a714b8fdac2a 100644 --- a/worlds/sc2wol/Regions.py +++ b/worlds/sc2wol/Regions.py @@ -4,23 +4,22 @@ from .Options import get_option_value from .MissionTables import MissionInfo, mission_orders, vanilla_mission_req_table, alt_final_mission_locations from .PoolFilter import filter_missions -import random -def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location])\ +def create_regions(multiworld: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location])\ -> Tuple[Dict[str, MissionInfo], int, str]: locations_per_region = get_locations_per_region(locations) - mission_order_type = get_option_value(world, player, "mission_order") + mission_order_type = get_option_value(multiworld, player, "mission_order") mission_order = mission_orders[mission_order_type] - mission_pools = filter_missions(world, player) + mission_pools = filter_missions(multiworld, player) final_mission = mission_pools['all_in'][0] used_regions = [mission for mission_pool in mission_pools.values() for mission in mission_pool] - regions = [create_region(world, player, locations_per_region, location_cache, "Menu")] + regions = [create_region(multiworld, player, locations_per_region, location_cache, "Menu")] for region_name in used_regions: - regions.append(create_region(world, player, locations_per_region, location_cache, region_name)) + regions.append(create_region(multiworld, player, locations_per_region, location_cache, region_name)) # Changing the completion condition for alternate final missions into an event if final_mission != 'All-In': final_location = alt_final_mission_locations[final_mission] @@ -38,76 +37,76 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData if mission_order_type in (0, 1): throwIfAnyLocationIsNotAssignedToARegion(regions, locations_per_region.keys()) - world.regions += regions + multiworld.regions += regions names: Dict[str, int] = {} if mission_order_type == 0: - connect(world, player, names, 'Menu', 'Liberation Day'), - connect(world, player, names, 'Liberation Day', 'The Outlaws', + connect(multiworld, player, names, 'Menu', 'Liberation Day'), + connect(multiworld, player, names, 'Liberation Day', 'The Outlaws', lambda state: state.has("Beat Liberation Day", player)), - connect(world, player, names, 'The Outlaws', 'Zero Hour', + connect(multiworld, player, names, 'The Outlaws', 'Zero Hour', lambda state: state.has("Beat The Outlaws", player)), - connect(world, player, names, 'Zero Hour', 'Evacuation', + connect(multiworld, player, names, 'Zero Hour', 'Evacuation', lambda state: state.has("Beat Zero Hour", player)), - connect(world, player, names, 'Evacuation', 'Outbreak', + connect(multiworld, player, names, 'Evacuation', 'Outbreak', lambda state: state.has("Beat Evacuation", player)), - connect(world, player, names, "Outbreak", "Safe Haven", - lambda state: state._sc2wol_cleared_missions(world, player, 7) and + connect(multiworld, player, names, "Outbreak", "Safe Haven", + lambda state: state._sc2wol_cleared_missions(multiworld, player, 7) and state.has("Beat Outbreak", player)), - connect(world, player, names, "Outbreak", "Haven's Fall", - lambda state: state._sc2wol_cleared_missions(world, player, 7) and + connect(multiworld, player, names, "Outbreak", "Haven's Fall", + lambda state: state._sc2wol_cleared_missions(multiworld, player, 7) and state.has("Beat Outbreak", player)), - connect(world, player, names, 'Zero Hour', 'Smash and Grab', + connect(multiworld, player, names, 'Zero Hour', 'Smash and Grab', lambda state: state.has("Beat Zero Hour", player)), - connect(world, player, names, 'Smash and Grab', 'The Dig', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and + connect(multiworld, player, names, 'Smash and Grab', 'The Dig', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 8) and state.has("Beat Smash and Grab", player)), - connect(world, player, names, 'The Dig', 'The Moebius Factor', - lambda state: state._sc2wol_cleared_missions(world, player, 11) and + connect(multiworld, player, names, 'The Dig', 'The Moebius Factor', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 11) and state.has("Beat The Dig", player)), - connect(world, player, names, 'The Moebius Factor', 'Supernova', - lambda state: state._sc2wol_cleared_missions(world, player, 14) and + connect(multiworld, player, names, 'The Moebius Factor', 'Supernova', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 14) and state.has("Beat The Moebius Factor", player)), - connect(world, player, names, 'Supernova', 'Maw of the Void', + connect(multiworld, player, names, 'Supernova', 'Maw of the Void', lambda state: state.has("Beat Supernova", player)), - connect(world, player, names, 'Zero Hour', "Devil's Playground", - lambda state: state._sc2wol_cleared_missions(world, player, 4) and + connect(multiworld, player, names, 'Zero Hour', "Devil's Playground", + lambda state: state._sc2wol_cleared_missions(multiworld, player, 4) and state.has("Beat Zero Hour", player)), - connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle', + connect(multiworld, player, names, "Devil's Playground", 'Welcome to the Jungle', lambda state: state.has("Beat Devil's Playground", player)), - connect(world, player, names, "Welcome to the Jungle", 'Breakout', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and + connect(multiworld, player, names, "Welcome to the Jungle", 'Breakout', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 8) and state.has("Beat Welcome to the Jungle", player)), - connect(world, player, names, "Welcome to the Jungle", 'Ghost of a Chance', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and + connect(multiworld, player, names, "Welcome to the Jungle", 'Ghost of a Chance', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 8) and state.has("Beat Welcome to the Jungle", player)), - connect(world, player, names, "Zero Hour", 'The Great Train Robbery', - lambda state: state._sc2wol_cleared_missions(world, player, 6) and + connect(multiworld, player, names, "Zero Hour", 'The Great Train Robbery', + lambda state: state._sc2wol_cleared_missions(multiworld, player, 6) and state.has("Beat Zero Hour", player)), - connect(world, player, names, 'The Great Train Robbery', 'Cutthroat', + connect(multiworld, player, names, 'The Great Train Robbery', 'Cutthroat', lambda state: state.has("Beat The Great Train Robbery", player)), - connect(world, player, names, 'Cutthroat', 'Engine of Destruction', + connect(multiworld, player, names, 'Cutthroat', 'Engine of Destruction', lambda state: state.has("Beat Cutthroat", player)), - connect(world, player, names, 'Engine of Destruction', 'Media Blitz', + connect(multiworld, player, names, 'Engine of Destruction', 'Media Blitz', lambda state: state.has("Beat Engine of Destruction", player)), - connect(world, player, names, 'Media Blitz', 'Piercing the Shroud', + connect(multiworld, player, names, 'Media Blitz', 'Piercing the Shroud', lambda state: state.has("Beat Media Blitz", player)), - connect(world, player, names, 'The Dig', 'Whispers of Doom', + connect(multiworld, player, names, 'The Dig', 'Whispers of Doom', lambda state: state.has("Beat The Dig", player)), - connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn', + connect(multiworld, player, names, 'Whispers of Doom', 'A Sinister Turn', lambda state: state.has("Beat Whispers of Doom", player)), - connect(world, player, names, 'A Sinister Turn', 'Echoes of the Future', + connect(multiworld, player, names, 'A Sinister Turn', 'Echoes of the Future', lambda state: state.has("Beat A Sinister Turn", player)), - connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness', + connect(multiworld, player, names, 'Echoes of the Future', 'In Utter Darkness', lambda state: state.has("Beat Echoes of the Future", player)), - connect(world, player, names, 'Maw of the Void', 'Gates of Hell', + connect(multiworld, player, names, 'Maw of the Void', 'Gates of Hell', lambda state: state.has("Beat Maw of the Void", player)), - connect(world, player, names, 'Gates of Hell', 'Belly of the Beast', + connect(multiworld, player, names, 'Gates of Hell', 'Belly of the Beast', lambda state: state.has("Beat Gates of Hell", player)), - connect(world, player, names, 'Gates of Hell', 'Shatter the Sky', + connect(multiworld, player, names, 'Gates of Hell', 'Shatter the Sky', lambda state: state.has("Beat Gates of Hell", player)), - connect(world, player, names, 'Gates of Hell', 'All-In', + connect(multiworld, player, names, 'Gates of Hell', 'All-In', lambda state: state.has('Beat Gates of Hell', player) and ( state.has('Beat Shatter the Sky', player) or state.has('Beat Belly of the Beast', player))) @@ -122,13 +121,13 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData missions.append(None) elif mission.type == "all_in": missions.append(final_mission) - elif mission.relegate and not get_option_value(world, player, "shuffle_no_build"): + elif mission.relegate and not get_option_value(multiworld, player, "shuffle_no_build"): missions.append("no_build") else: missions.append(mission.type) # Place Protoss Missions if we are not using ShuffleProtoss and are in Vanilla Shuffled - if get_option_value(world, player, "shuffle_protoss") == 0 and mission_order_type == 1: + if get_option_value(multiworld, player, "shuffle_protoss") == 0 and mission_order_type == 1: missions[22] = "A Sinister Turn" mission_pools['medium'].remove("A Sinister Turn") missions[23] = "Echoes of the Future" @@ -157,28 +156,28 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData # Add no_build missions to the pool and fill in no_build slots missions_to_add = mission_pools['no_build'] for slot in no_build_slots: - filler = world.random.randint(0, len(missions_to_add)-1) + filler = multiworld.random.randint(0, len(missions_to_add) - 1) missions[slot] = missions_to_add.pop(filler) # Add easy missions into pool and fill in easy slots missions_to_add = missions_to_add + mission_pools['easy'] for slot in easy_slots: - filler = world.random.randint(0, len(missions_to_add) - 1) + filler = multiworld.random.randint(0, len(missions_to_add) - 1) missions[slot] = missions_to_add.pop(filler) # Add medium missions into pool and fill in medium slots missions_to_add = missions_to_add + mission_pools['medium'] for slot in medium_slots: - filler = world.random.randint(0, len(missions_to_add) - 1) + filler = multiworld.random.randint(0, len(missions_to_add) - 1) missions[slot] = missions_to_add.pop(filler) # Add hard missions into pool and fill in hard slots missions_to_add = missions_to_add + mission_pools['hard'] for slot in hard_slots: - filler = world.random.randint(0, len(missions_to_add) - 1) + filler = multiworld.random.randint(0, len(missions_to_add) - 1) missions[slot] = missions_to_add.pop(filler) @@ -189,11 +188,11 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connections = [] for connection in mission_order[i].connect_to: if connection == -1: - connect(world, player, names, "Menu", missions[i]) + connect(multiworld, player, names, "Menu", missions[i]) else: - connect(world, player, names, missions[connection], missions[i], + connect(multiworld, player, names, missions[connection], missions[i], (lambda name, missions_req: (lambda state: state.has(f"Beat {name}", player) and - state._sc2wol_cleared_missions(world, player, + state._sc2wol_cleared_missions(multiworld, player, missions_req))) (missions[connection], mission_order[i].number)) connections.append(connection + 1) @@ -233,10 +232,10 @@ def create_location(player: int, location_data: LocationData, region: Region, return location -def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], +def create_region(multiworld: 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.multiworld = world + region.multiworld = multiworld if name in locations_per_region: for location_data in locations_per_region[name]: diff --git a/worlds/sc2wol/__init__.py b/worlds/sc2wol/__init__.py index 2e13deb017fd..878f3882dcbe 100644 --- a/worlds/sc2wol/__init__.py +++ b/worlds/sc2wol/__init__.py @@ -48,8 +48,8 @@ class SC2WoLWorld(World): victory_item: str required_client_version = 0, 3, 6 - def __init__(self, world: MultiWorld, player: int): - super(SC2WoLWorld, self).__init__(world, player) + def __init__(self, multiworld: MultiWorld, player: int): + super(SC2WoLWorld, self).__init__(multiworld, player) self.location_cache = [] self.locked_locations = [] @@ -63,7 +63,7 @@ def create_regions(self): ) def generate_basic(self): - excluded_items = get_excluded_items(self, self.multiworld, self.player) + excluded_items = get_excluded_items(self.multiworld, self.player) starter_items = assign_starter_items(self.multiworld, self.player, excluded_items, self.locked_locations) @@ -74,7 +74,7 @@ def generate_basic(self): self.multiworld.itempool += pool def set_rules(self): - setup_events(self.multiworld, self.player, self.locked_locations, self.location_cache) + setup_events(self.player, self.locked_locations, self.location_cache) self.multiworld.completion_condition[self.player] = lambda state: state.has(self.victory_item, self.player) def get_filler_item_name(self) -> str: @@ -95,7 +95,7 @@ def fill_slot_data(self): return slot_data -def setup_events(world: MultiWorld, player: int, locked_locations: typing.List[str], location_cache: typing.List[Location]): +def setup_events(player: int, locked_locations: typing.List[str], location_cache: typing.List[Location]): for location in location_cache: if location.address is None: item = Item(location.name, ItemClassification.progression, None, player) @@ -105,39 +105,39 @@ def setup_events(world: MultiWorld, player: int, locked_locations: typing.List[s location.place_locked_item(item) -def get_excluded_items(self: SC2WoLWorld, world: MultiWorld, player: int) -> Set[str]: +def get_excluded_items(multiworld: MultiWorld, player: int) -> Set[str]: excluded_items: Set[str] = set() - if get_option_value(world, player, "upgrade_bonus") == 1: + if get_option_value(multiworld, player, "upgrade_bonus") == 1: excluded_items.add("Ultra-Capacitors") else: excluded_items.add("Vanadium Plating") - if get_option_value(world, player, "bunker_upgrade") == 1: + if get_option_value(multiworld, player, "bunker_upgrade") == 1: excluded_items.add("Shrike Turret") else: excluded_items.add("Fortified Bunker") - for item in world.precollected_items[player]: + for item in multiworld.precollected_items[player]: excluded_items.add(item.name) - excluded_items_option = getattr(world, 'excluded_items', []) + excluded_items_option = getattr(multiworld, 'excluded_items', []) excluded_items.update(excluded_items_option[player].value) return excluded_items -def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str]) -> List[Item]: - non_local_items = world.non_local_items[player].value - if get_option_value(world, player, "early_unit"): - local_basic_unit = tuple(item for item in get_basic_units(world, player) if item not in non_local_items and item not in excluded_items) +def assign_starter_items(multiworld: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str]) -> List[Item]: + non_local_items = multiworld.non_local_items[player].value + if get_option_value(multiworld, player, "early_unit"): + local_basic_unit = sorted(item for item in get_basic_units(multiworld, player) if item not in non_local_items and item not in excluded_items) if not local_basic_unit: raise Exception("At least one basic unit must be local") # The first world should also be the starting world - first_mission = list(world.worlds[player].mission_req_table)[0] - starting_mission_locations = get_starting_mission_locations(world, player) + first_mission = list(multiworld.worlds[player].mission_req_table)[0] + starting_mission_locations = get_starting_mission_locations(multiworld, player) if first_mission in starting_mission_locations: first_location = starting_mission_locations[first_mission] elif first_mission == "In Utter Darkness": @@ -145,28 +145,28 @@ def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str else: first_location = first_mission + ": Victory" - return [assign_starter_item(world, player, excluded_items, locked_locations, first_location, local_basic_unit)] + return [assign_starter_item(multiworld, player, excluded_items, locked_locations, first_location, local_basic_unit)] else: return [] -def assign_starter_item(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str], +def assign_starter_item(multiworld: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str], location: str, item_list: Tuple[str, ...]) -> Item: - item_name = world.random.choice(item_list) + item_name = multiworld.random.choice(item_list) excluded_items.add(item_name) - item = create_item_with_correct_settings(world, player, item_name) + item = create_item_with_correct_settings(player, item_name) - world.get_location(location, player).place_locked_item(item) + multiworld.get_location(location, player).place_locked_item(item) locked_locations.append(location) return item -def get_item_pool(world: MultiWorld, player: int, mission_req_table: Dict[str, MissionInfo], +def get_item_pool(multiworld: MultiWorld, player: int, mission_req_table: Dict[str, MissionInfo], starter_items: List[str], excluded_items: Set[str], location_cache: List[Location]) -> List[Item]: pool: List[Item] = [] @@ -174,18 +174,18 @@ def get_item_pool(world: MultiWorld, player: int, mission_req_table: Dict[str, M locked_items = [] # YAML items - yaml_locked_items = get_option_set_value(world, player, 'locked_items') + yaml_locked_items = get_option_set_value(multiworld, player, 'locked_items') for name, data in item_table.items(): if name not in excluded_items: for _ in range(data.quantity): - item = create_item_with_correct_settings(world, player, name) + item = create_item_with_correct_settings(player, name) if name in yaml_locked_items: locked_items.append(item) else: pool.append(item) - existing_items = starter_items + [item for item in world.precollected_items[player]] + existing_items = starter_items + [item for item in multiworld.precollected_items[player]] existing_names = [item.name for item in existing_items] # Removing upgrades for excluded items for item_name in excluded_items: @@ -195,18 +195,18 @@ def get_item_pool(world: MultiWorld, player: int, mission_req_table: Dict[str, M for invalid_upgrade in invalid_upgrades: pool.remove(invalid_upgrade) - filtered_pool = filter_items(world, player, mission_req_table, location_cache, pool, existing_items, locked_items) + filtered_pool = filter_items(multiworld, player, mission_req_table, location_cache, pool, existing_items, locked_items) return filtered_pool -def fill_item_pool_with_dummy_items(self: SC2WoLWorld, world: MultiWorld, player: int, locked_locations: List[str], +def fill_item_pool_with_dummy_items(self: SC2WoLWorld, multiworld: MultiWorld, player: int, locked_locations: List[str], location_cache: List[Location], pool: List[Item]): for _ in range(len(location_cache) - len(locked_locations) - len(pool)): - item = create_item_with_correct_settings(world, player, self.get_filler_item_name()) + item = create_item_with_correct_settings(player, self.get_filler_item_name()) pool.append(item) -def create_item_with_correct_settings(world: MultiWorld, player: int, name: str) -> Item: +def create_item_with_correct_settings(player: int, name: str) -> Item: data = item_table[name] item = Item(name, data.classification, data.code, player) diff --git a/worlds/smw/Rom.py b/worlds/smw/Rom.py index d827c1242739..4641141c3890 100644 --- a/worlds/smw/Rom.py +++ b/worlds/smw/Rom.py @@ -810,7 +810,9 @@ def patch_rom(world, rom, player, active_level_dict): # Repurpose Bonus Stars counter for Boss Token or Yoshi Eggs rom.write_bytes(0x3F1AA, bytearray([0x00] * 0x20)) - rom.write_bytes(0x20F9F, bytearray([0xEA] * 0x3B)) + + # Delete Routine that would copy Mario position data over repurposed Luigi save data + rom.write_bytes(0x20F9F, bytearray([0xEA] * 0x3D)) # Prevent Switch Palaces setting the Switch Palace flags rom.write_bytes(0x6EC9A, bytearray([0xEA, 0xEA])) diff --git a/test/worlds/soe/TestAccess.py b/worlds/soe/test/TestAccess.py similarity index 100% rename from test/worlds/soe/TestAccess.py rename to worlds/soe/test/TestAccess.py diff --git a/test/worlds/soe/TestGoal.py b/worlds/soe/test/TestGoal.py similarity index 100% rename from test/worlds/soe/TestGoal.py rename to worlds/soe/test/TestGoal.py diff --git a/test/worlds/soe/__init__.py b/worlds/soe/test/__init__.py similarity index 58% rename from test/worlds/soe/__init__.py rename to worlds/soe/test/__init__.py index c79544e0de6b..3c2a0dc1b625 100644 --- a/test/worlds/soe/__init__.py +++ b/worlds/soe/test/__init__.py @@ -1,4 +1,4 @@ -from test.worlds.test_base import WorldTestBase +from test.TestBase import WorldTestBase class SoETestBase(WorldTestBase): diff --git a/test/worlds/zillion/TestGoal.py b/worlds/zillion/test/TestGoal.py similarity index 100% rename from test/worlds/zillion/TestGoal.py rename to worlds/zillion/test/TestGoal.py diff --git a/test/worlds/zillion/TestOptions.py b/worlds/zillion/test/TestOptions.py similarity index 95% rename from test/worlds/zillion/TestOptions.py rename to worlds/zillion/test/TestOptions.py index b00c70f73059..1ec186dae50a 100644 --- a/test/worlds/zillion/TestOptions.py +++ b/worlds/zillion/test/TestOptions.py @@ -1,4 +1,4 @@ -from test.worlds.zillion import ZillionTestBase +from . import ZillionTestBase from worlds.zillion.options import ZillionJumpLevels, ZillionGunLevels, validate from zilliandomizer.options import VBLR_CHOICES diff --git a/test/worlds/zillion/TestReproducibleRandom.py b/worlds/zillion/test/TestReproducibleRandom.py similarity index 94% rename from test/worlds/zillion/TestReproducibleRandom.py rename to worlds/zillion/test/TestReproducibleRandom.py index 707f26356d15..392db657d90a 100644 --- a/test/worlds/zillion/TestReproducibleRandom.py +++ b/worlds/zillion/test/TestReproducibleRandom.py @@ -1,5 +1,5 @@ from typing import cast -from test.worlds.zillion import ZillionTestBase +from . import ZillionTestBase from worlds.zillion import ZillionWorld diff --git a/test/worlds/zillion/__init__.py b/worlds/zillion/test/__init__.py similarity index 93% rename from test/worlds/zillion/__init__.py rename to worlds/zillion/test/__init__.py index 1b3c2b42fde6..3b7edebef804 100644 --- a/test/worlds/zillion/__init__.py +++ b/worlds/zillion/test/__init__.py @@ -1,5 +1,5 @@ from typing import cast -from test.worlds.test_base import WorldTestBase +from test.TestBase import WorldTestBase from worlds.zillion import ZillionWorld