diff --git a/.gitignore b/.gitignore
index ecd316cb..1b54572f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,5 @@ weights/
_persistent_storage.yaml
mystery_result_*.yaml
/db.db3
+*-errors.txt
+success.txt
diff --git a/Adjuster.py b/Adjuster.py
index 49b4259d..661381a9 100755
--- a/Adjuster.py
+++ b/Adjuster.py
@@ -6,7 +6,7 @@ import textwrap
import sys
from AdjusterMain import adjust
-from Rom import get_sprite_from_name
+from Rom import Sprite
class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter):
@@ -55,7 +55,7 @@ def main():
input(
'Could not find valid rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom)
sys.exit(1)
- if args.sprite is not None and not os.path.isfile(args.sprite) and not get_sprite_from_name(args.sprite):
+ if args.sprite is not None and not os.path.isfile(args.sprite) and not Sprite.get_sprite_from_name(args.sprite):
input('Could not find link sprite sheet at given location. \nPress Enter to exit.')
sys.exit(1)
@@ -65,7 +65,10 @@ def main():
logging.basicConfig(format='%(message)s', level=loglevel)
args, path = adjust(args=args)
from Utils import persistent_store
- persistent_store("adjuster", "last_settings", args)
+ from Rom import Sprite
+ if isinstance(args.sprite, Sprite):
+ args.sprite = args.sprite.name
+ persistent_store("adjuster", "last_settings_3", args)
if __name__ == '__main__':
main()
diff --git a/AdjusterMain.py b/AdjusterMain.py
index 28a72d9c..f26c669b 100644
--- a/AdjusterMain.py
+++ b/AdjusterMain.py
@@ -27,7 +27,7 @@ def adjust(args):
palettes_options['hud']=args.hud_palettes
palettes_options['sword']=args.sword_palettes
palettes_options['shield']=args.shield_palettes
- palettes_options['link']=args.link_palettes
+ # palettes_options['link']=args.link_palettesvera
apply_rom_settings(rom, args.heartbeep, args.heartcolor, args.quickswap, args.fastmenu, args.disablemusic,
args.sprite, palettes_options)
diff --git a/BaseClasses.py b/BaseClasses.py
index 49563d4c..eb5a4741 100644
--- a/BaseClasses.py
+++ b/BaseClasses.py
@@ -119,13 +119,19 @@ class World(object):
set_player_attr('treasure_hunt_icon', 'Triforce Piece')
set_player_attr('treasure_hunt_count', 0)
set_player_attr('clock_mode', False)
+ set_player_attr('countdown_start_time', 10)
+ set_player_attr('red_clock_time', -2)
+ set_player_attr('blue_clock_time', 2)
+ set_player_attr('green_clock_time', 4)
set_player_attr('can_take_damage', True)
set_player_attr('glitch_boots', True)
set_player_attr('progression_balancing', True)
set_player_attr('local_items', set())
+ set_player_attr('non_local_items', set())
set_player_attr('triforce_pieces_available', 30)
set_player_attr('triforce_pieces_required', 20)
set_player_attr('shop_shuffle', 'off')
+ set_player_attr('shop_shuffle_slots', 0)
set_player_attr('shuffle_prizes', "g")
set_player_attr('sprite_pool', [])
set_player_attr('dark_room_logic', "lamp")
@@ -335,6 +341,27 @@ class World(object):
if collect:
self.state.collect(item, location.event, location)
+ # TODO: Prevents fast_filling certain items. Move this to a proper filter.
+ if location.parent_region.shop is not None and location.name != 'Potion Shop': # includes potion shop slots but not potion shop powder
+ slot_num = int(location.name[-1]) - 1
+ my_item = location.parent_region.shop.inventory[slot_num]
+ if (my_item is not None and my_item['item'] == item.name) or 'Rupee' in item.name or ('Bee' in item.name and 'Trap' not in item.name):
+ # this will filter items that match the item in the shop or Rupees, or single bees
+ # really not a way for the player to know a renewable item from a player pool item
+ # bombs can be sitting on top of arrows or a potion refill, but dunno if that's a big deal
+ logging.debug('skipping item shop {}'.format(item.name))
+ else:
+ if my_item is None:
+ location.parent_region.shop.add_inventory(slot_num, 'None', 0)
+ my_item = location.parent_region.shop.inventory[slot_num]
+ else:
+ my_item['replacement'] = my_item['item']
+ my_item['replacement_price'] = my_item['price']
+ my_item['item'] = item.name
+ my_item['price'] = self.random.randrange(1, 61) * 5 # can probably replace this with a price chart
+ my_item['max'] = 1
+ my_item['player'] = item.player if item.player != location.player else 0
+
logging.debug('Placed %s at %s', item, location)
else:
raise RuntimeError('Cannot assign item %s to location %s.' % (item, location))
@@ -1135,7 +1162,8 @@ class Shop():
'max': max,
'replacement': replacement,
'replacement_price': replacement_price,
- 'create_location': create_location
+ 'create_location': create_location,
+ 'player': 0
}
def push_inventory(self, slot: int, item: str, price: int, max: int = 1):
@@ -1148,7 +1176,8 @@ class Shop():
'max': max,
'replacement': self.inventory[slot]["item"],
'replacement_price': self.inventory[slot]["price"],
- 'create_location': self.inventory[slot]["create_location"]
+ 'create_location': self.inventory[slot]["create_location"],
+ 'player': self.inventory[slot]["player"]
}
@@ -1234,6 +1263,10 @@ class Spoiler(object):
if item is None:
continue
shopdata['item_{}'.format(index)] = "{} — {}".format(item['item'], item['price']) if item['price'] else item['item']
+
+ if item['player'] > 0:
+ shopdata['item_{}'.format(index)] = shopdata['item_{}'.format(index)].replace('—', '(Player {}) — '.format(item['player']))
+
if item['max'] == 0:
continue
shopdata['item_{}'.format(index)] += " x {}".format(item['max'])
@@ -1307,6 +1340,7 @@ class Spoiler(object):
'triforce_pieces_available': self.world.triforce_pieces_available,
'triforce_pieces_required': self.world.triforce_pieces_required,
'shop_shuffle': self.world.shop_shuffle,
+ 'shop_shuffle_slots': self.world.shop_shuffle_slots,
'shuffle_prizes': self.world.shuffle_prizes,
'sprite_pool': self.world.sprite_pool,
'restrict_dungeon_item_on_boss': self.world.restrict_dungeon_item_on_boss
diff --git a/EntranceRandomizer.py b/EntranceRandomizer.py
index 042d54bc..b94ed0db 100755
--- a/EntranceRandomizer.py
+++ b/EntranceRandomizer.py
@@ -8,7 +8,7 @@ import shlex
import sys
from Main import main, get_seed
-from Rom import get_sprite_from_name
+from Rom import Sprite
from Utils import is_bundled, close_console
@@ -129,6 +129,14 @@ def parse_arguments(argv, no_defaults=False):
Timed mode. If time runs out, you lose (but can
still keep playing).
''')
+ parser.add_argument('--countdown_start_time', default=defval(10), type=int,
+ help='''Set amount of time, in minutes, to start with in Timed Countdown and Timed OHKO modes''')
+ parser.add_argument('--red_clock_time', default=defval(-2), type=int,
+ help='''Set amount of time, in minutes, to add from picking up red clocks; negative removes time instead''')
+ parser.add_argument('--blue_clock_time', default=defval(2), type=int,
+ help='''Set amount of time, in minutes, to add from picking up blue clocks; negative removes time instead''')
+ parser.add_argument('--green_clock_time', default=defval(4), type=int,
+ help='''Set amount of time, in minutes, to add from picking up green clocks; negative removes time instead''')
parser.add_argument('--dungeon_counters', default=defval('default'), const='default', nargs='?', choices=['default', 'on', 'pickup', 'off'],
help='''\
Select dungeon counter display settings. (default: %(default)s)
@@ -173,7 +181,7 @@ def parse_arguments(argv, no_defaults=False):
slightly biased to placing progression items with
less restrictions.
''')
- parser.add_argument('--shuffle', default=defval('full'), const='full', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full', 'crossed', 'insanity', 'restricted_legacy', 'full_legacy', 'madness_legacy', 'insanity_legacy', 'dungeonsfull', 'dungeonssimple'],
+ parser.add_argument('--shuffle', default=defval('vanilla'), const='vanilla', nargs='?', choices=['vanilla', 'simple', 'restricted', 'full', 'crossed', 'insanity', 'restricted_legacy', 'full_legacy', 'madness_legacy', 'insanity_legacy', 'dungeonsfull', 'dungeonssimple'],
help='''\
Select Entrance Shuffling Algorithm. (default: %(default)s)
Full: Mix cave and dungeon entrances freely while limiting
@@ -258,6 +266,8 @@ def parse_arguments(argv, no_defaults=False):
help='Specifies a list of items that will be in your starting inventory (separated by commas)')
parser.add_argument('--local_items', default=defval(''),
help='Specifies a list of items that will not spread across the multiworld (separated by commas)')
+ parser.add_argument('--non_local_items', default=defval(''),
+ help='Specifies a list of items that will spread across the multiworld (separated by commas)')
parser.add_argument('--custom', default=defval(False), help='Not supported.')
parser.add_argument('--customitemarray', default=defval(False), help='Not supported.')
parser.add_argument('--accessibility', default=defval('items'), const='items', nargs='?', choices=['items', 'locations', 'none'], help='''\
@@ -320,6 +330,11 @@ def parse_arguments(argv, no_defaults=False):
p: randomize the prices of the items in shop inventories
u: shuffle capacity upgrades into the item pool
''')
+ parser.add_argument('--shop_shuffle_slots', default=defval(0),
+ type=lambda value: min(max(int(value), 1), 96),
+ help='''
+ Maximum amount of shop slots able to be filled by items from the item pool.
+ ''')
parser.add_argument('--shuffle_prizes', default=defval('g'), choices=['', 'g', 'b', 'gb'])
parser.add_argument('--sprite_pool', help='''\
Specifies a colon separated list of sprites used for random/randomonevent. If not specified, the full sprite pool is used.''')
@@ -366,14 +381,16 @@ def parse_arguments(argv, no_defaults=False):
for name in ['logic', 'mode', 'swords', 'goal', 'difficulty', 'item_functionality',
'shuffle', 'crystals_ganon', 'crystals_gt', 'open_pyramid', 'timer',
+ 'countdown_start_time', 'red_clock_time', 'blue_clock_time', 'green_clock_time',
'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'startinventory',
- 'local_items', 'retro', 'accessibility', 'hints', 'beemizer',
+ 'local_items', 'non_local_items', 'retro', 'accessibility', 'hints', 'beemizer',
'shufflebosses', 'enemy_shuffle', 'enemy_health', 'enemy_damage', 'shufflepots',
'ow_palettes', 'uw_palettes', 'sprite', 'disablemusic', 'quickswap', 'fastmenu', 'heartcolor',
'heartbeep', "skip_progression_balancing", "triforce_pieces_available",
- "triforce_pieces_required", "shop_shuffle",
+ "triforce_pieces_required", "shop_shuffle", "shop_shuffle_slots",
'remote_items', 'progressive', 'dungeon_counters', 'glitch_boots', 'killable_thieves',
- 'tile_shuffle', 'bush_shuffle', 'shuffle_prizes', 'sprite_pool', 'dark_room_logic', 'restrict_dungeon_item_on_boss']:
+ 'tile_shuffle', 'bush_shuffle', 'shuffle_prizes', 'sprite_pool', 'dark_room_logic', 'restrict_dungeon_item_on_boss',
+ 'hud_palettes', 'sword_palettes', 'shield_palettes', 'link_palettes']:
value = getattr(defaults, name) if getattr(playerargs, name) is None else getattr(playerargs, name)
if player == 1:
setattr(ret, name, {1: value})
@@ -400,7 +417,7 @@ def start():
input(
'Could not find valid base rom for patching at expected path %s. Please run with -h to see help for further information. \nPress Enter to exit.' % args.rom)
sys.exit(1)
- if any([sprite is not None and not os.path.isfile(sprite) and not get_sprite_from_name(sprite) for sprite in
+ if any([sprite is not None and not os.path.isfile(sprite) and not Sprite.get_sprite_from_name(sprite) for sprite in
args.sprite.values()]):
input('Could not find link sprite sheet at given location. \nPress Enter to exit.')
sys.exit(1)
diff --git a/Fill.py b/Fill.py
index 9051f93a..1212f6e0 100644
--- a/Fill.py
+++ b/Fill.py
@@ -54,8 +54,9 @@ def fill_restrictive(world, base_state: CollectionState, locations, itempool, si
for location in region.locations:
if location.item and not location.event:
placements.append(location)
+
raise FillError(f'No more spots to place {item_to_place}, locations {locations} are invalid. '
- f'Already placed {len(placements)}: {", ".join(placements)}')
+ f'Already placed {len(placements)}: {", ".join(str(place) for place in placements)}')
world.push_item(spot_to_fill, item_to_place, False)
locations.remove(spot_to_fill)
diff --git a/GuiUtils.py b/GuiUtils.py
index 0bebfda6..c0542076 100644
--- a/GuiUtils.py
+++ b/GuiUtils.py
@@ -14,12 +14,12 @@ def set_icon(window):
# some which may be platform specific, or depend on if the TCL library was compiled without
# multithreading support. Therefore I will assume it is not thread safe to avoid any possible problems
class BackgroundTask(object):
- def __init__(self, window, code_to_run):
+ def __init__(self, window, code_to_run, *args):
self.window = window
self.queue = queue.Queue()
self.running = True
self.process_queue()
- self.task = threading.Thread(target=code_to_run, args=(self,))
+ self.task = threading.Thread(target=code_to_run, args=(self, *args))
self.task.start()
def stop(self):
@@ -45,7 +45,7 @@ class BackgroundTask(object):
self.window.after(100, self.process_queue)
class BackgroundTaskProgress(BackgroundTask):
- def __init__(self, parent, code_to_run, title):
+ def __init__(self, parent, code_to_run, title, *args):
self.parent = parent
self.window = tk.Toplevel(parent)
self.window['padx'] = 5
@@ -65,7 +65,7 @@ class BackgroundTaskProgress(BackgroundTask):
set_icon(self.window)
self.window.focus()
- super().__init__(self.window, code_to_run)
+ super().__init__(self.window, code_to_run, *args)
#safe to call from worker thread
def update_status(self, text):
diff --git a/Main.py b/Main.py
index e96b4bbc..e66e2181 100644
--- a/Main.py
+++ b/Main.py
@@ -10,7 +10,7 @@ import zlib
import concurrent.futures
from BaseClasses import World, CollectionState, Item, Region, Location, Shop
-from Items import ItemFactory
+from Items import ItemFactory, item_table
from Regions import create_regions, create_shops, mark_light_world_regions, lookup_vanilla_location_to_entrance
from InvertedRegions import create_inverted_regions, mark_dark_world_regions
from EntranceShuffle import link_entrances, link_inverted_entrances
@@ -72,6 +72,10 @@ def main(args, seed=None):
world.tile_shuffle = args.tile_shuffle.copy()
world.beemizer = args.beemizer.copy()
world.timer = args.timer.copy()
+ world.countdown_start_time = args.countdown_start_time.copy()
+ world.red_clock_time = args.red_clock_time.copy()
+ world.blue_clock_time = args.blue_clock_time.copy()
+ world.green_clock_time = args.green_clock_time.copy()
world.shufflepots = args.shufflepots.copy()
world.progressive = args.progressive.copy()
world.dungeon_counters = args.dungeon_counters.copy()
@@ -79,6 +83,7 @@ def main(args, seed=None):
world.triforce_pieces_available = args.triforce_pieces_available.copy()
world.triforce_pieces_required = args.triforce_pieces_required.copy()
world.shop_shuffle = args.shop_shuffle.copy()
+ world.shop_shuffle_slots = args.shop_shuffle_slots.copy()
world.progression_balancing = {player: not balance for player, balance in args.skip_progression_balancing.items()}
world.shuffle_prizes = args.shuffle_prizes.copy()
world.sprite_pool = args.sprite_pool.copy()
@@ -106,7 +111,13 @@ def main(args, seed=None):
item = ItemFactory(tok.strip(), player)
if item:
world.push_precollected(item)
- world.local_items[player] = {item.strip() for item in args.local_items[player].split(',')}
+ # item in item_table gets checked in mystery, but not CLI - so we double-check here
+ world.local_items[player] = {item.strip() for item in args.local_items[player].split(',') if
+ item.strip() in item_table}
+ world.non_local_items[player] = {item.strip() for item in args.non_local_items[player].split(',') if
+ item.strip() in item_table}
+ # items can't be both local and non-local, prefer local
+ world.non_local_items[player] -= world.local_items[player]
world.triforce_pieces_available[player] = max(world.triforce_pieces_available[player], world.triforce_pieces_required[player])
@@ -297,6 +308,30 @@ def main(args, seed=None):
if lookup_vanilla_location_to_entrance[location.address] != main_entrance.name:
er_hint_data[region.player][location.address] = main_entrance.name
+ ordered_areas = ('Light World', 'Dark World', 'Hyrule Castle', 'Agahnims Tower', 'Eastern Palace', 'Desert Palace',
+ 'Tower of Hera', 'Palace of Darkness', 'Swamp Palace', 'Skull Woods', 'Thieves Town', 'Ice Palace',
+ 'Misery Mire', 'Turtle Rock', 'Ganons Tower', "Total")
+
+ checks_in_area = {player: {area: list() for area in ordered_areas}
+ for player in range(1, world.players + 1)}
+
+ for player in range(1, world.players + 1):
+ checks_in_area[player]["Total"] = 0
+
+ for location in [loc for loc in world.get_filled_locations() if type(loc.address) is int]:
+ main_entrance = get_entrance_to_region(location.parent_region)
+ if location.parent_region.dungeon:
+ dungeonname = {'Inverted Agahnims Tower': 'Agahnims Tower',
+ 'Inverted Ganons Tower': 'Ganons Tower'}\
+ .get(location.parent_region.dungeon.name, location.parent_region.dungeon.name)
+ checks_in_area[location.player][dungeonname].append(location.address)
+ elif main_entrance.parent_region.type == RegionType.LightWorld:
+ checks_in_area[location.player]["Light World"].append(location.address)
+ elif main_entrance.parent_region.type == RegionType.DarkWorld:
+ checks_in_area[location.player]["Dark World"].append(location.address)
+ checks_in_area[location.player]["Total"] += 1
+
+
precollected_items = [[] for player in range(world.players)]
for item in world.precollected_items:
precollected_items[item.player - 1].append(item.code)
@@ -323,6 +358,7 @@ def main(args, seed=None):
(location.item.code, location.item.player))
for location in world.get_filled_locations() if
type(location.address) is int],
+ "checks_in_area": checks_in_area,
"server_options": get_options()["server_options"],
"er_hint_data": er_hint_data,
"precollected_items": precollected_items,
diff --git a/Mystery.py b/Mystery.py
index aebc38e7..c8261f03 100644
--- a/Mystery.py
+++ b/Mystery.py
@@ -11,7 +11,7 @@ import ModuleUpdate
ModuleUpdate.update()
from Utils import parse_yaml
-from Rom import get_sprite_from_name
+from Rom import Sprite
from EntranceRandomizer import parse_arguments
from Main import main as ERmain
from Main import get_seed, seeddigits
@@ -167,7 +167,7 @@ def main(args=None, callback=ERmain):
if path:
try:
settings = settings_cache[path] if settings_cache[path] else roll_settings(weights_cache[path])
- if settings.sprite and not os.path.isfile(settings.sprite) and not get_sprite_from_name(
+ if settings.sprite and not os.path.isfile(settings.sprite) and not Sprite.get_sprite_from_name(
settings.sprite):
logging.warning(
f"Warning: The chosen sprite, \"{settings.sprite}\", for yaml \"{path}\", does not exist.")
@@ -238,6 +238,8 @@ def convert_to_on_off(value):
def get_choice(option, root, value=None) -> typing.Any:
if option not in root:
return value
+ if type(root[option]) is list:
+ return interpret_on_off(random.choices(root[option])[0])
if type(root[option]) is not dict:
return interpret_on_off(root[option])
if not root[option]:
@@ -360,6 +362,8 @@ def roll_settings(weights):
# change minimum to required pieces to avoid problems
ret.triforce_pieces_available = min(max(ret.triforce_pieces_required, int(ret.triforce_pieces_available)), 90)
+ ret.shop_shuffle_slots = int(get_choice('shop_shuffle_slots', weights, '0'))
+
ret.shop_shuffle = get_choice('shop_shuffle', weights, '')
if not ret.shop_shuffle:
ret.shop_shuffle = ''
@@ -448,6 +452,11 @@ def roll_settings(weights):
'timed_countdown': 'timed-countdown',
'display': 'display'}[get_choice('timer', weights, False)]
+ ret.countdown_start_time = int(get_choice('countdown_start_time', weights, 10))
+ ret.red_clock_time = int(get_choice('red_clock_time', weights, -2))
+ ret.blue_clock_time = int(get_choice('blue_clock_time', weights, 2))
+ ret.green_clock_time = int(get_choice('green_clock_time', weights, 4))
+
ret.dungeon_counters = get_choice('dungeon_counters', weights, 'default')
ret.progressive = convert_to_on_off(get_choice('progressive', weights, 'on'))
@@ -487,6 +496,17 @@ def roll_settings(weights):
ret.local_items = ",".join(ret.local_items)
+ ret.non_local_items = set()
+ for item_name in weights.get('non_local_items', []):
+ items = item_name_groups.get(item_name, {item_name})
+ for item in items:
+ if item in item_table:
+ ret.non_local_items.add(item)
+ else:
+ raise Exception(f"Could not force item {item} to be world-non-local, as it was not recognized.")
+
+ ret.non_local_items = ",".join(ret.non_local_items)
+
if 'rom' in weights:
romweights = weights['rom']
diff --git a/Regions.py b/Regions.py
index 58049039..11968766 100644
--- a/Regions.py
+++ b/Regions.py
@@ -368,7 +368,17 @@ def create_shops(world, player: int):
cls_mapping = {ShopType.UpgradeShop: UpgradeShop,
ShopType.Shop: Shop,
ShopType.TakeAny: TakeAny}
- for region_name, (room_id, type, shopkeeper, custom, locked, inventory) in shop_table.items():
+ option = world.shop_shuffle[player]
+ my_shop_table = dict(shop_table)
+
+ num_slots = int(world.shop_shuffle_slots[player])
+
+ my_shop_slots = ([True] * num_slots + [False] * (len(shop_table) * 3))[:len(shop_table)*3 - 2]
+
+ world.random.shuffle(my_shop_slots)
+
+ from Items import ItemFactory
+ for region_name, (room_id, type, shopkeeper, custom, locked, inventory) in my_shop_table.items():
if world.mode[player] == 'inverted' and region_name == 'Dark Lake Hylia Shop':
locked = True
inventory = [('Blue Potion', 160), ('Blue Shield', 50), ('Bombs (10)', 50)]
@@ -378,6 +388,19 @@ def create_shops(world, player: int):
world.shops.append(shop)
for index, item in enumerate(inventory):
shop.add_inventory(index, *item)
+ if region_name == 'Potion Shop':
+ pass
+ elif region_name == 'Capacity Upgrade':
+ pass
+ else:
+ if my_shop_slots.pop():
+ additional_item = world.random.choice(['Rupees (20)', 'Rupees (50)', 'Rupees (100)'])
+ world.itempool.append(ItemFactory(additional_item, player))
+ loc = Location(player, "{} Slot Item {}".format(shop.region.name, index+1), parent=shop.region)
+ shop.region.locations.append(loc)
+ world.dynamic_locations.append(loc)
+
+ world.clear_location_cache()
# (type, room_id, shopkeeper, custom, locked, [items])
# item = (item, price, max=0, replacement=None, replacement_price=0)
@@ -393,10 +416,63 @@ shop_table = {
'Light World Death Mountain Shop': (0x00FF, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults),
'Kakariko Shop': (0x011F, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults),
'Cave Shop (Lake Hylia)': (0x0112, ShopType.Shop, 0xA0, True, False, _basic_shop_defaults),
- 'Potion Shop': (0x0109, ShopType.Shop, 0xFF, False, True, [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)]),
+ 'Potion Shop': (0x0109, ShopType.Shop, 0xA0, True, False, [('Red Potion', 120), ('Green Potion', 60), ('Blue Potion', 160)]),
'Capacity Upgrade': (0x0115, ShopType.UpgradeShop, 0x04, True, True, [('Bomb Upgrade (+5)', 100, 7), ('Arrow Upgrade (+5)', 100, 7)])
}
+old_location_address_to_new_location_address = {
+ 0x2eb18: 0x18001b, # Bottle Merchant
+ 0x33d68: 0x18001a, # Purple Chest
+ 0x2df45: 0x18001d, # Link's Uncle
+ 0x2f1fc: 0x180008, # Sahasrahla
+ 0x18002a: 0x18001c, # Black Smith
+ 0x339cf: 0x180009, # Sick Kid
+ 0x33e7d: 0x180019, # Hobo
+ 0x180160: 0x18000b, # Desert Palace - Desert Torch
+ 0x289b0: 0x180018, # Master Sword Pedestal
+ 0xf69fa: 0x180007, # Old Man
+ 0x180162: 0x18000d, # Tower of Hera - Basement Cage
+ 0x330c7: 0x18000a, # Stumpy
+ 0x180161: 0x18000c # Ganons Tower - Bob's Torch
+}
+
+
+key_drop_data = {
+ 'Hyrule Castle - Map Guard Key Drop': [0x140036, 0x140037],
+ 'Hyrule Castle - Boomerang Guard Key Drop': [0x140033, 0x140034],
+ 'Hyrule Castle - Key Rat Key Drop': [0x14000c, 0x14000d],
+ 'Hyrule Castle - Big Key Drop': [0x14003c, 0x14003d],
+ 'Eastern Palace - Dark Square Pot Key': [0x14005a, 0x14005b],
+ 'Eastern Palace - Dark Eyegore Key Drop': [0x140048, 0x140049],
+ 'Desert Palace - Desert Tiles 1 Pot Key': [0x140030, 0x140031],
+ 'Desert Palace - Beamos Hall Pot Key': [0x14002a, 0x14002b],
+ 'Desert Palace - Desert Tiles 2 Pot Key': [0x140027, 0x140028],
+ 'Castle Tower - Dark Archer Key Drop': [0x140060, 0x140061],
+ 'Castle Tower - Circle of Pots Key Drop': [0x140051, 0x140052],
+ 'Swamp Palace - Pot Row Pot Key': [0x140018, 0x140019],
+ 'Swamp Palace - Trench 1 Pot Key': [0x140015, 0x140016],
+ 'Swamp Palace - Hookshot Pot Key': [0x140012, 0x140013],
+ 'Swamp Palace - Trench 2 Pot Key': [0x14000f, 0x140010],
+ 'Swamp Palace - Waterway Pot Key': [0x140009, 0x14000a],
+ 'Skull Woods - West Lobby Pot Key': [0x14002d, 0x14002e],
+ 'Skull Woods - Spike Corner Key Drop': [0x14001b, 0x14001c],
+ 'Thieves\' Town - Hallway Pot Key': [0x14005d, 0x14005e],
+ 'Thieves\' Town - Spike Switch Pot Key': [0x14004e, 0x14004f],
+ 'Ice Palace - Jelly Key Drop': [0x140003, 0x140004],
+ 'Ice Palace - Conveyor Key Drop': [0x140021, 0x140022],
+ 'Ice Palace - Hammer Block Key Drop': [0x140024, 0x140025],
+ 'Ice Palace - Many Pots Pot Key': [0x140045, 0x140046],
+ 'Misery Mire - Spikes Pot Key': [0x140054, 0x140055],
+ 'Misery Mire - Fishbone Pot Key': [0x14004b, 0x14004c],
+ 'Misery Mire - Conveyor Crystal Key Drop': [0x140063, 0x140064],
+ 'Turtle Rock - Pokey 1 Key Drop': [0x140057, 0x140058],
+ 'Turtle Rock - Pokey 2 Key Drop': [0x140006, 0x140007],
+ 'Ganons Tower - Conveyor Cross Pot Key': [0x14003f, 0x140040],
+ 'Ganons Tower - Double Switch Pot Key': [0x140042, 0x140043],
+ 'Ganons Tower - Conveyor Star Pits Pot Key': [0x140039, 0x14003a],
+ 'Ganons Tower - Mini Helmasaur Key Drop': [0x14001e, 0x14001f]
+}
+
location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'),
'Bottle Merchant': (0x2eb18, 0x186339, False, 'with a merchant'),
'Flute Spot': (0x18014a, 0x18633d, False, 'underground'),
@@ -640,7 +716,9 @@ location_table = {'Mushroom': (0x180013, 0x186338, False, 'in the woods'),
[0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], None, True, 'Turtle Rock')}
lookup_id_to_name = {data[0]: name for name, data in location_table.items() if type(data[0]) == int}
-lookup_id_to_name[-1] = "cheat console"
+lookup_id_to_name = {**lookup_id_to_name, **{data[1]: name for name, data in key_drop_data.items()}, -1: "cheat console"}
+lookup_name_to_id = {name: data[0] for name, data in location_table.items() if type(data[0]) == int}
+lookup_name_to_id = {**lookup_name_to_id, **{name: data[1] for name, data in key_drop_data.items()}, "cheat console": -1}
lookup_vanilla_location_to_entrance = {1572883: 'Kings Grave Inner Rocks', 191256: 'Kings Grave Inner Rocks',
1573194: 'Kings Grave Inner Rocks', 1573189: 'Kings Grave Inner Rocks',
@@ -745,7 +823,28 @@ lookup_vanilla_location_to_entrance = {1572883: 'Kings Grave Inner Rocks', 19125
60103: 'Ganons Tower', 60106: 'Ganons Tower', 60109: 'Ganons Tower',
60127: 'Ganons Tower', 60118: 'Ganons Tower', 60148: 'Ganons Tower',
60151: 'Ganons Tower', 60145: 'Ganons Tower', 60157: 'Ganons Tower',
- 60160: 'Ganons Tower', 60163: 'Ganons Tower', 60166: 'Ganons Tower'}
+ 60160: 'Ganons Tower', 60163: 'Ganons Tower', 60166: 'Ganons Tower',
+ 0x140037: 'Hyrule Castle Entrance (South)',
+ 0x140034: 'Hyrule Castle Entrance (South)',
+ 0x14000d: 'Hyrule Castle Entrance (South)',
+ 0x14003d: 'Hyrule Castle Entrance (South)',
+ 0x14005b: 'Eastern Palace', 0x140049: 'Eastern Palace',
+ 0x140031: 'Desert Palace Entrance (North)',
+ 0x14002b: 'Desert Palace Entrance (North)',
+ 0x140028: 'Desert Palace Entrance (North)',
+ 0x140061: 'Agahnims Tower', 0x140052: 'Agahnims Tower',
+ 0x140019: 'Swamp Palace', 0x140016: 'Swamp Palace', 0x140013: 'Swamp Palace',
+ 0x140010: 'Swamp Palace', 0x14000a: 'Swamp Palace',
+ 0x14002e: 'Skull Woods Second Section Door (East)',
+ 0x14001c: 'Skull Woods Final Section',
+ 0x14005e: 'Thieves Town', 0x14004f: 'Thieves Town',
+ 0x140004: 'Ice Palace', 0x140022: 'Ice Palace',
+ 0x140025: 'Ice Palace', 0x140046: 'Ice Palace',
+ 0x140055: 'Misery Mire', 0x14004c: 'Misery Mire',
+ 0x140064: 'Misery Mire',
+ 0x140058: 'Turtle Rock', 0x140007: 'Dark Death Mountain Ledge (West)',
+ 0x140040: 'Ganons Tower', 0x140043: 'Ganons Tower',
+ 0x14003a: 'Ganons Tower', 0x14001f: 'Ganons Tower'}
lookup_prizes = {location for location in location_table if location.endswith(" - Prize")}
lookup_boss_drops = {location for location in location_table if location.endswith(" - Boss")}
\ No newline at end of file
diff --git a/Rules.py b/Rules.py
index 3fb96c9a..3c12d9b3 100644
--- a/Rules.py
+++ b/Rules.py
@@ -104,7 +104,7 @@ def mirrorless_path_to_castle_courtyard(world, player):
else:
queue.append((entrance.connected_region, new_path))
- raise Exception(f"Could not find mirrorless path to castle courtyard for Player {player}")
+ raise Exception(f"Could not find mirrorless path to castle courtyard for Player {player} ({world.get_player_names(player)})")
def set_rule(spot, rule):
spot.access_rule = rule
@@ -179,6 +179,10 @@ def locality_rules(world, player):
for location in world.get_locations():
if location.player != player:
forbid_items_for_player(location, world.local_items[player], player)
+ if world.non_local_items[player]:
+ for location in world.get_locations():
+ if location.player == player:
+ forbid_items_for_player(location, world.non_local_items[player], player)
non_crossover_items = (item_name_groups["Small Keys"] | item_name_groups["Big Keys"] | progression_items) - {
diff --git a/Text.py b/Text.py
index 83a7400b..4c723afb 100644
--- a/Text.py
+++ b/Text.py
@@ -266,7 +266,7 @@ junk_texts = [
"{C:GREEN}\n>Secret power\nis said to be\nin the arrow.",
"{C:GREEN}\nAim at the\neyes of Gohma.\n >",
"{C:GREEN}\nGrumble,\ngrumble…\n >",
- "{C:GREEN}\n10th enemy\nhas the bomb.\n >",
+ # "{C:GREEN}\n10th enemy\nhas the bomb.\n >", removed as people may assume it applies to this game
"{C:GREEN}\nGo to the\nnext room.\n >",
"{C:GREEN}\n>Thanks, @\nYou’re the\nhero of Hyrule",
"{C:GREEN}\nThere’s always\nmoney in the\nBanana Stand>",
@@ -1228,7 +1228,8 @@ class GoldCreditMapper(CharTextMapper):
class GreenCreditMapper(CharTextMapper):
char_map = {' ': 0x9F,
- '·': 0x52}
+ '·': 0x52,
+ '.': 0x52}
alpha_offset = -0x29
class RedCreditMapper(CharTextMapper):
diff --git a/WebHostLib/__init__.py b/WebHostLib/__init__.py
index 98d3aea4..c392990b 100644
--- a/WebHostLib/__init__.py
+++ b/WebHostLib/__init__.py
@@ -47,6 +47,8 @@ app.config["PONY"] = {
}
app.config["MAX_ROLL"] = 20
app.config["CACHE_TYPE"] = "simple"
+app.config["JSON_AS_ASCII"] = False
+
app.autoversion = True
av = Autoversion(app)
cache = Cache(app)
diff --git a/WebHostLib/downloads.py b/WebHostLib/downloads.py
index 5dc71788..e8c32b83 100644
--- a/WebHostLib/downloads.py
+++ b/WebHostLib/downloads.py
@@ -37,9 +37,10 @@ def download_raw_patch(seed_id, player_id):
return "Patch not found"
else:
import io
-
- pname = patch.seed.multidata["names"][0][patch.player - 1]
-
+ if patch.seed.multidata:
+ pname = patch.seed.multidata["names"][0][patch.player - 1]
+ else:
+ pname = "unknown"
patch_data = update_patch_data(patch.data, server="")
patch_data = io.BytesIO(patch_data)
diff --git a/WebHostLib/models.py b/WebHostLib/models.py
index d5e0f2b8..77bd6f2f 100644
--- a/WebHostLib/models.py
+++ b/WebHostLib/models.py
@@ -50,5 +50,5 @@ class Generation(db.Entity):
id = PrimaryKey(UUID, default=uuid4)
owner = Required(UUID)
options = Required(bytes, lazy=True) # these didn't work as JSON on mariaDB, so they're getting pickled now
- meta = Required(bytes, lazy=True)
+ meta = Required(bytes, lazy=True) # if state is -1 (error) this will contain an utf-8 encoded error message
state = Required(int, default=0, index=True)
diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt
index fc34a2dd..f7a97f65 100644
--- a/WebHostLib/requirements.txt
+++ b/WebHostLib/requirements.txt
@@ -3,5 +3,5 @@ pony>=0.7.14
waitress>=1.4.4
flask-caching>=1.9.0
Flask-Autoversion>=0.2.0
-Flask-Compress>=1.7.0
+Flask-Compress>=1.8.0
Flask-Limiter>=1.4
diff --git a/WebHostLib/static/static/weightedSettings.yaml b/WebHostLib/static/static/weightedSettings.yaml
index ddd21714..b6e7747f 100644
--- a/WebHostLib/static/static/weightedSettings.yaml
+++ b/WebHostLib/static/static/weightedSettings.yaml
@@ -165,7 +165,6 @@ item_pool:
normal: 50 # Item availability remains unchanged from vanilla game
hard: 0 # Reduced upgrade availability (max: 14 hearts, blue mail, tempered sword, fire shield, no silvers unless swordless)
expert: 0 # Minimum upgrade availability (max: 8 hearts, green mail, master sword, fighter shield, no silvers unless swordless)
- crowd_control: 0 # Sets up the item pool for the crowd control extension. Do not use it without crowd control
item_functionality:
easy: 0 # Allow Hammer to damage ganon, Allow Hammer tablet collection, Allow swordless medallion use everywhere.
normal: 50 # Vanilla item functionality
@@ -232,6 +231,22 @@ timer:
ohko: 0 # Timer always at zero. Permanent OHKO.
timed_countdown: 0 # Starts the clock with forty minutes. Same clocks as timed mode, but if the clock hits zero you lose. You can still keep playing, though.
display: 0 # Displays a timer, but otherwise does not affect gameplay or the item pool.
+countdown_start_time: # For timed_ohko and timed_countdown timer modes, the amount of time in minutes to start with
+ 0: 0 # For timed_ohko, starts in OHKO mode when starting the game
+ 10: 50
+ 20: 0
+ 30: 0
+ 60: 0
+red_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a red clock
+ -2: 50
+ 1: 0
+blue_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a blue clock
+ 1: 0
+ 2: 50
+green_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a green clock
+ 4: 50
+ 10: 0
+ 15: 0
# Can be uncommented to use it
# local_items: # Force certain items to appear in your world only, not across the multiworld. Recognizes some group names, like "Swords"
# - "Moon Pearl"
@@ -289,6 +304,9 @@ intensity: # Only available if the host uses the doors branch, it is ignored oth
2: 0 # And shuffles open edges and straight staircases
3: 0 # And shuffles dungeon lobbies
random: 0 # Picks one of those at random
+key_drop_shuffle: # Only available if the host uses the doors branch, it is ignored otherwise
+ on: 0 # Enables the small keys dropped by enemies or under pots, and the big key dropped by the Ball & Chain guard to be shuffled into the pool. This extends the number of checks to 249.
+ off: 50
experimental: # Only available if the host uses the doors branch, it is ignored otherwise
on: 0 # Enables experimental features. Currently, this is just the dungeon keys in chest counter.
off: 50
@@ -391,13 +409,3 @@ rom:
dizzy: 0
sick: 0
puke: 0
- uw_palettes: # Change the colors of shields
- default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
- grayscale: 0
- negative: 0
- classic: 0
- dizzy: 0
- sick: 0
- puke: 0
\ No newline at end of file
diff --git a/WebHostLib/templates/tracker.html b/WebHostLib/templates/tracker.html
index 27211ede..3a528c16 100644
--- a/WebHostLib/templates/tracker.html
+++ b/WebHostLib/templates/tracker.html
@@ -124,7 +124,7 @@
{{ player_names[(team, loop.index)]|e }} |
{%- for area in ordered_areas -%}
{%- set checks_done = checks[area] -%}
- {%- set checks_total = checks_in_area[area] -%}
+ {%- set checks_total = checks_in_area[player][area] -%}
{%- if checks_done == checks_total -%}
{{ checks_done }}/{{ checks_total }} |
diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py
index 14cb0657..e068cf15 100644
--- a/WebHostLib/tracker.py
+++ b/WebHostLib/tracker.py
@@ -180,6 +180,25 @@ default_locations = {
60121, 60124, 60127, 1573217, 60130, 60133, 60136, 60139, 60142, 60145, 60148, 60151, 60157},
'Total': set()}
+key_only_locations = {
+ 'Light World': set(),
+ 'Dark World': set(),
+ 'Desert Palace': {0x140031, 0x14002b, 0x140061, 0x140028},
+ 'Eastern Palace': {0x14005b, 0x140049},
+ 'Hyrule Castle': {0x140037, 0x140034, 0x14000d, 0x14003d},
+ 'Agahnims Tower': {0x140061, 0x140052},
+ 'Tower of Hera': set(),
+ 'Swamp Palace': {0x140019, 0x140016, 0x140013, 0x140010, 0x14000a},
+ 'Thieves Town': {0x14005e, 0x14004f},
+ 'Skull Woods': {0x14002e, 0x14001c},
+ 'Ice Palace': {0x140004, 0x140022, 0x140025, 0x140046},
+ 'Misery Mire': {0x140055, 0x14004c, 0x140064},
+ 'Turtle Rock': {0x140058, 0x140007},
+ 'Palace of Darkness': set(),
+ 'Ganons Tower': {0x140040, 0x140043, 0x14003a, 0x14001f},
+ 'Total': set()
+}
+
key_locations = {"Desert Palace", "Eastern Palace", "Hyrule Castle", "Agahnims Tower", "Tower of Hera", "Swamp Palace",
"Thieves Town", "Skull Woods", "Ice Palace", "Misery Mire", "Turtle Rock", "Palace of Darkness",
"Ganons Tower"}
@@ -191,6 +210,10 @@ for area, locations in default_locations.items():
for location in locations:
location_to_area[location] = area
+for area, locations in key_only_locations.items():
+ for location in locations:
+ location_to_area[location] = area
+
checks_in_area = {area: len(checks) for area, checks in default_locations.items()}
checks_in_area["Total"] = 216
@@ -235,6 +258,14 @@ def render_timedelta(delta: datetime.timedelta):
_multidata_cache = {}
+def get_location_table(checks_table: dict) -> dict:
+ loc_to_area = {}
+ for area, locations in checks_table.items():
+ if area == "Total":
+ continue
+ for location in locations:
+ loc_to_area[location] = area
+ return loc_to_area
def get_static_room_data(room: Room):
result = _multidata_cache.get(room.seed.id, None)
@@ -244,11 +275,30 @@ def get_static_room_data(room: Room):
# in > 100 players this can take a bit of time and is the main reason for the cache
locations = {tuple(k): tuple(v) for k, v in multidata['locations']}
names = multidata["names"]
+ seed_checks_in_area = checks_in_area.copy()
use_door_tracker = False
if "tags" in multidata:
use_door_tracker = "DR" in multidata["tags"]
- result = locations, names, use_door_tracker
+ if use_door_tracker:
+ for area, checks in key_only_locations.items():
+ seed_checks_in_area[area] += len(checks)
+ seed_checks_in_area["Total"] = 249
+ if "checks_in_area" not in multidata:
+ player_checks_in_area = {playernumber: (seed_checks_in_area if use_door_tracker and
+ (0x140031, playernumber) in locations else checks_in_area)
+ for playernumber in range(1, len(names[0]) + 1)}
+ player_location_to_area = {playernumber: location_to_area
+ for playernumber in range(1, len(names[0]) + 1)}
+
+ else:
+ player_checks_in_area = {playernumber: {areaname: len(multidata["checks_in_area"][f'{playernumber}'][areaname])
+ if areaname != "Total" else multidata["checks_in_area"][f'{playernumber}']["Total"]
+ for areaname in ordered_areas}
+ for playernumber in range(1, len(names[0]) + 1)}
+ player_location_to_area = {playernumber: get_location_table(multidata["checks_in_area"][f'{playernumber}'])
+ for playernumber in range(1, len(names[0]) + 1)}
+ result = locations, names, use_door_tracker, player_checks_in_area, player_location_to_area
_multidata_cache[room.seed.id] = result
return result
@@ -259,7 +309,7 @@ def getTracker(tracker: UUID):
room = Room.get(tracker=tracker)
if not room:
abort(404)
- locations, names, use_door_tracker = get_static_room_data(room)
+ locations, names, use_door_tracker, seed_checks_in_area, player_location_to_area = get_static_room_data(room)
inventory = {teamnumber: {playernumber: collections.Counter() for playernumber in range(1, len(team) + 1)}
for teamnumber, team in enumerate(names)}
@@ -280,9 +330,12 @@ def getTracker(tracker: UUID):
for item_id in precollected:
attribute_item(inventory, team, player, item_id)
for location in locations_checked:
+ if (location, player) not in locations or location not in player_location_to_area[player]:
+ continue
+
item, recipient = locations[location, player]
attribute_item(inventory, team, recipient, item)
- checks_done[team][player][location_to_area[location]] += 1
+ checks_done[team][player][player_location_to_area[player][location]] += 1
checks_done[team][player]["Total"] += 1
for (team, player), game_state in room.multisave.get("client_game_state", []):
@@ -311,7 +364,7 @@ def getTracker(tracker: UUID):
lookup_id_to_name=Items.lookup_id_to_name, player_names=player_names,
tracking_names=tracking_names, tracking_ids=tracking_ids, room=room, icons=icons,
multi_items=multi_items, checks_done=checks_done, ordered_areas=ordered_areas,
- checks_in_area=checks_in_area, activity_timers=activity_timers,
+ checks_in_area=seed_checks_in_area, activity_timers=activity_timers,
key_locations=key_locations, small_key_ids=small_key_ids, big_key_ids=big_key_ids,
video=video, big_key_locations=key_locations if use_door_tracker else big_key_locations,
hints=hints, long_player_names = long_player_names)
diff --git a/data/sprites/alttpr/.gitignore b/data/sprites/alttpr/.gitignore
new file mode 100644
index 00000000..d6b7ef32
--- /dev/null
+++ b/data/sprites/alttpr/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/data/sprites/alttpr/001.link.1.zspr b/data/sprites/alttpr/001.link.1.zspr
deleted file mode 100644
index 4537afa8..00000000
Binary files a/data/sprites/alttpr/001.link.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/4slink-armors.1.zspr b/data/sprites/alttpr/4slink-armors.1.zspr
deleted file mode 100644
index 7a944113..00000000
Binary files a/data/sprites/alttpr/4slink-armors.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/abigail.1.zspr b/data/sprites/alttpr/abigail.1.zspr
deleted file mode 100644
index 526990c5..00000000
Binary files a/data/sprites/alttpr/abigail.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/adol.1.zspr b/data/sprites/alttpr/adol.1.zspr
deleted file mode 100644
index da8210a9..00000000
Binary files a/data/sprites/alttpr/adol.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/aggretsuko.1.zspr b/data/sprites/alttpr/aggretsuko.1.zspr
deleted file mode 100644
index c23d9d83..00000000
Binary files a/data/sprites/alttpr/aggretsuko.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/alice.1.zspr b/data/sprites/alttpr/alice.1.zspr
deleted file mode 100644
index 4c673acd..00000000
Binary files a/data/sprites/alttpr/alice.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/angry-video-game-nerd.1.zspr b/data/sprites/alttpr/angry-video-game-nerd.1.zspr
deleted file mode 100644
index 79aee561..00000000
Binary files a/data/sprites/alttpr/angry-video-game-nerd.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/arcane.1.zspr b/data/sprites/alttpr/arcane.1.zspr
deleted file mode 100644
index b0fd4760..00000000
Binary files a/data/sprites/alttpr/arcane.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ark.2.zspr b/data/sprites/alttpr/ark.2.zspr
deleted file mode 100644
index 916b036a..00000000
Binary files a/data/sprites/alttpr/ark.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/arrghus.2.zspr b/data/sprites/alttpr/arrghus.2.zspr
deleted file mode 100644
index 2064009d..00000000
Binary files a/data/sprites/alttpr/arrghus.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/astronaut.1.zspr b/data/sprites/alttpr/astronaut.1.zspr
deleted file mode 100644
index a4db3020..00000000
Binary files a/data/sprites/alttpr/astronaut.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/badeline.1.zspr b/data/sprites/alttpr/badeline.1.zspr
deleted file mode 100644
index b9fb1346..00000000
Binary files a/data/sprites/alttpr/badeline.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bananas-in-pyjamas.1.zspr b/data/sprites/alttpr/bananas-in-pyjamas.1.zspr
deleted file mode 100644
index f75af2b2..00000000
Binary files a/data/sprites/alttpr/bananas-in-pyjamas.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bandit.1.zspr b/data/sprites/alttpr/bandit.1.zspr
deleted file mode 100644
index 5b3288f8..00000000
Binary files a/data/sprites/alttpr/bandit.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/batman.1.zspr b/data/sprites/alttpr/batman.1.zspr
deleted file mode 100644
index a4a1e9c0..00000000
Binary files a/data/sprites/alttpr/batman.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/beau.1.zspr b/data/sprites/alttpr/beau.1.zspr
deleted file mode 100644
index 8d8d2079..00000000
Binary files a/data/sprites/alttpr/beau.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bewp.1.zspr b/data/sprites/alttpr/bewp.1.zspr
deleted file mode 100644
index 265d2e1a..00000000
Binary files a/data/sprites/alttpr/bewp.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bigkey.1.zspr b/data/sprites/alttpr/bigkey.1.zspr
deleted file mode 100644
index eab4854e..00000000
Binary files a/data/sprites/alttpr/bigkey.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/birb.1.zspr b/data/sprites/alttpr/birb.1.zspr
deleted file mode 100644
index d6d86bb6..00000000
Binary files a/data/sprites/alttpr/birb.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/birdo.1.zspr b/data/sprites/alttpr/birdo.1.zspr
deleted file mode 100644
index 54c49747..00000000
Binary files a/data/sprites/alttpr/birdo.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/blackmage.1.zspr b/data/sprites/alttpr/blackmage.1.zspr
deleted file mode 100644
index d9b56288..00000000
Binary files a/data/sprites/alttpr/blackmage.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/blacksmithlink.1.zspr b/data/sprites/alttpr/blacksmithlink.1.zspr
deleted file mode 100644
index e9aeb31a..00000000
Binary files a/data/sprites/alttpr/blacksmithlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/blossom.1.zspr b/data/sprites/alttpr/blossom.1.zspr
deleted file mode 100644
index 57f4918c..00000000
Binary files a/data/sprites/alttpr/blossom.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bob.1.zspr b/data/sprites/alttpr/bob.1.zspr
deleted file mode 100644
index 25fc0410..00000000
Binary files a/data/sprites/alttpr/bob.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/boo-two.1.zspr b/data/sprites/alttpr/boo-two.1.zspr
deleted file mode 100644
index a5c5463c..00000000
Binary files a/data/sprites/alttpr/boo-two.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/boo.2.zspr b/data/sprites/alttpr/boo.2.zspr
deleted file mode 100644
index 24c74bde..00000000
Binary files a/data/sprites/alttpr/boo.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bottle_o_goo.1.zspr b/data/sprites/alttpr/bottle_o_goo.1.zspr
deleted file mode 100644
index 28ca1f9b..00000000
Binary files a/data/sprites/alttpr/bottle_o_goo.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/botw-zelda.1.zspr b/data/sprites/alttpr/botw-zelda.1.zspr
deleted file mode 100644
index 630adfa6..00000000
Binary files a/data/sprites/alttpr/botw-zelda.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bowser.1.zspr b/data/sprites/alttpr/bowser.1.zspr
deleted file mode 100644
index 1cc256d8..00000000
Binary files a/data/sprites/alttpr/bowser.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/branch.1.zspr b/data/sprites/alttpr/branch.1.zspr
deleted file mode 100644
index b7926418..00000000
Binary files a/data/sprites/alttpr/branch.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/brian.1.zspr b/data/sprites/alttpr/brian.1.zspr
deleted file mode 100644
index 013a2207..00000000
Binary files a/data/sprites/alttpr/brian.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/broccoli.1.zspr b/data/sprites/alttpr/broccoli.1.zspr
deleted file mode 100644
index e335df01..00000000
Binary files a/data/sprites/alttpr/broccoli.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bronzor.1.zspr b/data/sprites/alttpr/bronzor.1.zspr
deleted file mode 100644
index d1afd117..00000000
Binary files a/data/sprites/alttpr/bronzor.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bsboy.1.zspr b/data/sprites/alttpr/bsboy.1.zspr
deleted file mode 100644
index 7d00be74..00000000
Binary files a/data/sprites/alttpr/bsboy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bsgirl.1.zspr b/data/sprites/alttpr/bsgirl.1.zspr
deleted file mode 100644
index 82923751..00000000
Binary files a/data/sprites/alttpr/bsgirl.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bubbles.1.zspr b/data/sprites/alttpr/bubbles.1.zspr
deleted file mode 100644
index bbba3b75..00000000
Binary files a/data/sprites/alttpr/bubbles.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/bullet_bill.1.zspr b/data/sprites/alttpr/bullet_bill.1.zspr
deleted file mode 100644
index 5b561b9e..00000000
Binary files a/data/sprites/alttpr/bullet_bill.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/buttercup.1.zspr b/data/sprites/alttpr/buttercup.1.zspr
deleted file mode 100644
index bd066c27..00000000
Binary files a/data/sprites/alttpr/buttercup.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cactuar.1.zspr b/data/sprites/alttpr/cactuar.1.zspr
deleted file mode 100644
index 51c32893..00000000
Binary files a/data/sprites/alttpr/cactuar.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cadence.1.zspr b/data/sprites/alttpr/cadence.1.zspr
deleted file mode 100644
index 05f174f7..00000000
Binary files a/data/sprites/alttpr/cadence.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/carlsagan42.1.zspr b/data/sprites/alttpr/carlsagan42.1.zspr
deleted file mode 100644
index 2632cb6f..00000000
Binary files a/data/sprites/alttpr/carlsagan42.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/casual-zelda.1.zspr b/data/sprites/alttpr/casual-zelda.1.zspr
deleted file mode 100644
index 80257f11..00000000
Binary files a/data/sprites/alttpr/casual-zelda.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cat.3.zspr b/data/sprites/alttpr/cat.3.zspr
deleted file mode 100644
index 69946d73..00000000
Binary files a/data/sprites/alttpr/cat.3.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/catboo.1.zspr b/data/sprites/alttpr/catboo.1.zspr
deleted file mode 100644
index 45a4fa81..00000000
Binary files a/data/sprites/alttpr/catboo.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cdilink.1.zspr b/data/sprites/alttpr/cdilink.1.zspr
deleted file mode 100644
index 3236f799..00000000
Binary files a/data/sprites/alttpr/cdilink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/celes.1.zspr b/data/sprites/alttpr/celes.1.zspr
deleted file mode 100644
index ac0c1226..00000000
Binary files a/data/sprites/alttpr/celes.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/charizard.1.zspr b/data/sprites/alttpr/charizard.1.zspr
deleted file mode 100644
index babed511..00000000
Binary files a/data/sprites/alttpr/charizard.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cheepcheep.1.zspr b/data/sprites/alttpr/cheepcheep.1.zspr
deleted file mode 100644
index a49545f2..00000000
Binary files a/data/sprites/alttpr/cheepcheep.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/chibity.1.zspr b/data/sprites/alttpr/chibity.1.zspr
deleted file mode 100644
index 949dbe2e..00000000
Binary files a/data/sprites/alttpr/chibity.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cirno.1.zspr b/data/sprites/alttpr/cirno.1.zspr
deleted file mode 100644
index 75de8ab6..00000000
Binary files a/data/sprites/alttpr/cirno.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/clifford.1.zspr b/data/sprites/alttpr/clifford.1.zspr
deleted file mode 100644
index 73f848c1..00000000
Binary files a/data/sprites/alttpr/clifford.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/clyde.1.zspr b/data/sprites/alttpr/clyde.1.zspr
deleted file mode 100644
index b590a2ef..00000000
Binary files a/data/sprites/alttpr/clyde.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/conker.1.zspr b/data/sprites/alttpr/conker.1.zspr
deleted file mode 100644
index 121d5233..00000000
Binary files a/data/sprites/alttpr/conker.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cornelius.1.zspr b/data/sprites/alttpr/cornelius.1.zspr
deleted file mode 100644
index 4c58f356..00000000
Binary files a/data/sprites/alttpr/cornelius.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/corona.1.zspr b/data/sprites/alttpr/corona.1.zspr
deleted file mode 100644
index 2ed39a78..00000000
Binary files a/data/sprites/alttpr/corona.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cucco.1.zspr b/data/sprites/alttpr/cucco.1.zspr
deleted file mode 100644
index f237de4a..00000000
Binary files a/data/sprites/alttpr/cucco.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/cursor.1.zspr b/data/sprites/alttpr/cursor.1.zspr
deleted file mode 100644
index 45bc9739..00000000
Binary files a/data/sprites/alttpr/cursor.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/d_owls.1.zspr b/data/sprites/alttpr/d_owls.1.zspr
deleted file mode 100644
index 147283ea..00000000
Binary files a/data/sprites/alttpr/d_owls.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/dark-panda.1.zspr b/data/sprites/alttpr/dark-panda.1.zspr
deleted file mode 100644
index 1b39b747..00000000
Binary files a/data/sprites/alttpr/dark-panda.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darkboy.1.zspr b/data/sprites/alttpr/darkboy.1.zspr
deleted file mode 100644
index de55ebbe..00000000
Binary files a/data/sprites/alttpr/darkboy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darkgirl.1.zspr b/data/sprites/alttpr/darkgirl.1.zspr
deleted file mode 100644
index 8fd848fd..00000000
Binary files a/data/sprites/alttpr/darkgirl.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darklink-tunic.1.zspr b/data/sprites/alttpr/darklink-tunic.1.zspr
deleted file mode 100644
index fe417308..00000000
Binary files a/data/sprites/alttpr/darklink-tunic.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darklink.1.zspr b/data/sprites/alttpr/darklink.1.zspr
deleted file mode 100644
index b0d9a95f..00000000
Binary files a/data/sprites/alttpr/darklink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darkswatchy.1.zspr b/data/sprites/alttpr/darkswatchy.1.zspr
deleted file mode 100644
index 88677425..00000000
Binary files a/data/sprites/alttpr/darkswatchy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darkzelda.1.zspr b/data/sprites/alttpr/darkzelda.1.zspr
deleted file mode 100644
index 519c278a..00000000
Binary files a/data/sprites/alttpr/darkzelda.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/darkzora.2.zspr b/data/sprites/alttpr/darkzora.2.zspr
deleted file mode 100644
index fbb15c69..00000000
Binary files a/data/sprites/alttpr/darkzora.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/deadpool-mythic.1.zspr b/data/sprites/alttpr/deadpool-mythic.1.zspr
deleted file mode 100644
index abcda926..00000000
Binary files a/data/sprites/alttpr/deadpool-mythic.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/deadpool.1.zspr b/data/sprites/alttpr/deadpool.1.zspr
deleted file mode 100644
index 3d2e87f7..00000000
Binary files a/data/sprites/alttpr/deadpool.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/deadrock.1.zspr b/data/sprites/alttpr/deadrock.1.zspr
deleted file mode 100644
index cc28cd79..00000000
Binary files a/data/sprites/alttpr/deadrock.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/decidueye.1.zspr b/data/sprites/alttpr/decidueye.1.zspr
deleted file mode 100644
index 1c769e62..00000000
Binary files a/data/sprites/alttpr/decidueye.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/demonlink.1.zspr b/data/sprites/alttpr/demonlink.1.zspr
deleted file mode 100644
index 2daf7359..00000000
Binary files a/data/sprites/alttpr/demonlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/dragonite.2.zspr b/data/sprites/alttpr/dragonite.2.zspr
deleted file mode 100644
index 37d95ad0..00000000
Binary files a/data/sprites/alttpr/dragonite.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/drake.1.zspr b/data/sprites/alttpr/drake.1.zspr
deleted file mode 100644
index 1be94a75..00000000
Binary files a/data/sprites/alttpr/drake.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/eggplant.1.zspr b/data/sprites/alttpr/eggplant.1.zspr
deleted file mode 100644
index c33c2008..00000000
Binary files a/data/sprites/alttpr/eggplant.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/emosaru.1.zspr b/data/sprites/alttpr/emosaru.1.zspr
deleted file mode 100644
index a636dad9..00000000
Binary files a/data/sprites/alttpr/emosaru.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ezlo.1.zspr b/data/sprites/alttpr/ezlo.1.zspr
deleted file mode 100644
index 54596847..00000000
Binary files a/data/sprites/alttpr/ezlo.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/fierce-deity-link.1.zspr b/data/sprites/alttpr/fierce-deity-link.1.zspr
deleted file mode 100644
index 770b89de..00000000
Binary files a/data/sprites/alttpr/fierce-deity-link.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/finn.3.zspr b/data/sprites/alttpr/finn.3.zspr
deleted file mode 100644
index 265b197c..00000000
Binary files a/data/sprites/alttpr/finn.3.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/finny_bear.1.zspr b/data/sprites/alttpr/finny_bear.1.zspr
deleted file mode 100644
index 9c3a530b..00000000
Binary files a/data/sprites/alttpr/finny_bear.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/fish_floodgate.1.zspr b/data/sprites/alttpr/fish_floodgate.1.zspr
deleted file mode 100644
index 86684e7d..00000000
Binary files a/data/sprites/alttpr/fish_floodgate.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/flavor_guy.1.zspr b/data/sprites/alttpr/flavor_guy.1.zspr
deleted file mode 100644
index 5e1df365..00000000
Binary files a/data/sprites/alttpr/flavor_guy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/foxlink.1.zspr b/data/sprites/alttpr/foxlink.1.zspr
deleted file mode 100644
index d6eaf433..00000000
Binary files a/data/sprites/alttpr/foxlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/freya.1.zspr b/data/sprites/alttpr/freya.1.zspr
deleted file mode 100644
index b43338d5..00000000
Binary files a/data/sprites/alttpr/freya.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/frisk.1.zspr b/data/sprites/alttpr/frisk.1.zspr
deleted file mode 100644
index d521cae3..00000000
Binary files a/data/sprites/alttpr/frisk.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/froglink.3.zspr b/data/sprites/alttpr/froglink.3.zspr
deleted file mode 100644
index f5c46d82..00000000
Binary files a/data/sprites/alttpr/froglink.3.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/fujin.2.zspr b/data/sprites/alttpr/fujin.2.zspr
deleted file mode 100644
index 9254ff7b..00000000
Binary files a/data/sprites/alttpr/fujin.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/future_trunks.1.zspr b/data/sprites/alttpr/future_trunks.1.zspr
deleted file mode 100644
index 456e64c7..00000000
Binary files a/data/sprites/alttpr/future_trunks.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/gamer.1.zspr b/data/sprites/alttpr/gamer.1.zspr
deleted file mode 100644
index 9f78d894..00000000
Binary files a/data/sprites/alttpr/gamer.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ganon.1.zspr b/data/sprites/alttpr/ganon.1.zspr
deleted file mode 100644
index a6adda43..00000000
Binary files a/data/sprites/alttpr/ganon.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ganondorf.1.zspr b/data/sprites/alttpr/ganondorf.1.zspr
deleted file mode 100644
index 5bb6f548..00000000
Binary files a/data/sprites/alttpr/ganondorf.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/garfield.2.zspr b/data/sprites/alttpr/garfield.2.zspr
deleted file mode 100644
index 6ca890e8..00000000
Binary files a/data/sprites/alttpr/garfield.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/garnet.1.zspr b/data/sprites/alttpr/garnet.1.zspr
deleted file mode 100644
index 858497c7..00000000
Binary files a/data/sprites/alttpr/garnet.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/garomaster.1.zspr b/data/sprites/alttpr/garomaster.1.zspr
deleted file mode 100644
index 65b9959d..00000000
Binary files a/data/sprites/alttpr/garomaster.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/gbc-link.1.zspr b/data/sprites/alttpr/gbc-link.1.zspr
deleted file mode 100644
index e98a6d08..00000000
Binary files a/data/sprites/alttpr/gbc-link.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/geno.1.zspr b/data/sprites/alttpr/geno.1.zspr
deleted file mode 100644
index 3d747a2a..00000000
Binary files a/data/sprites/alttpr/geno.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/gobli.1.zspr b/data/sprites/alttpr/gobli.1.zspr
deleted file mode 100644
index 51dd1192..00000000
Binary files a/data/sprites/alttpr/gobli.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/goomba.1.zspr b/data/sprites/alttpr/goomba.1.zspr
deleted file mode 100644
index 0438682f..00000000
Binary files a/data/sprites/alttpr/goomba.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/goose.1.zspr b/data/sprites/alttpr/goose.1.zspr
deleted file mode 100644
index d2ffb5ba..00000000
Binary files a/data/sprites/alttpr/goose.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/grandpoobear.2.zspr b/data/sprites/alttpr/grandpoobear.2.zspr
deleted file mode 100644
index 72663680..00000000
Binary files a/data/sprites/alttpr/grandpoobear.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/grunclestan.1.zspr b/data/sprites/alttpr/grunclestan.1.zspr
deleted file mode 100644
index cf371839..00000000
Binary files a/data/sprites/alttpr/grunclestan.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/guiz.1.zspr b/data/sprites/alttpr/guiz.1.zspr
deleted file mode 100644
index 995c08ad..00000000
Binary files a/data/sprites/alttpr/guiz.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hardhat_beetle.1.zspr b/data/sprites/alttpr/hardhat_beetle.1.zspr
deleted file mode 100644
index 80b63af1..00000000
Binary files a/data/sprites/alttpr/hardhat_beetle.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hat-kid.1.zspr b/data/sprites/alttpr/hat-kid.1.zspr
deleted file mode 100644
index d0341060..00000000
Binary files a/data/sprites/alttpr/hat-kid.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/headlesslink.1.zspr b/data/sprites/alttpr/headlesslink.1.zspr
deleted file mode 100644
index 8a9b3ce4..00000000
Binary files a/data/sprites/alttpr/headlesslink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hello_kitty.1.zspr b/data/sprites/alttpr/hello_kitty.1.zspr
deleted file mode 100644
index a2f5df06..00000000
Binary files a/data/sprites/alttpr/hello_kitty.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hidari.1.zspr b/data/sprites/alttpr/hidari.1.zspr
deleted file mode 100644
index 54a4d0da..00000000
Binary files a/data/sprites/alttpr/hidari.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hint_tile.1.zspr b/data/sprites/alttpr/hint_tile.1.zspr
deleted file mode 100644
index 9cfd7e90..00000000
Binary files a/data/sprites/alttpr/hint_tile.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hitsuyan.1.zspr b/data/sprites/alttpr/hitsuyan.1.zspr
deleted file mode 100644
index 0661577b..00000000
Binary files a/data/sprites/alttpr/hitsuyan.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hoarder-bush.1.zspr b/data/sprites/alttpr/hoarder-bush.1.zspr
deleted file mode 100644
index d2adb227..00000000
Binary files a/data/sprites/alttpr/hoarder-bush.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hoarder-pot.1.zspr b/data/sprites/alttpr/hoarder-pot.1.zspr
deleted file mode 100644
index 717e4199..00000000
Binary files a/data/sprites/alttpr/hoarder-pot.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hoarder-rock.1.zspr b/data/sprites/alttpr/hoarder-rock.1.zspr
deleted file mode 100644
index a93fd1c4..00000000
Binary files a/data/sprites/alttpr/hoarder-rock.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/homer.1.zspr b/data/sprites/alttpr/homer.1.zspr
deleted file mode 100644
index ee8b5f5f..00000000
Binary files a/data/sprites/alttpr/homer.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/hyruleknight.1.zspr b/data/sprites/alttpr/hyruleknight.1.zspr
deleted file mode 100644
index a8815bc3..00000000
Binary files a/data/sprites/alttpr/hyruleknight.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ibazly.1.zspr b/data/sprites/alttpr/ibazly.1.zspr
deleted file mode 100644
index 01114c9e..00000000
Binary files a/data/sprites/alttpr/ibazly.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ignignokt.2.zspr b/data/sprites/alttpr/ignignokt.2.zspr
deleted file mode 100644
index f06d07cc..00000000
Binary files a/data/sprites/alttpr/ignignokt.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/informant_woman.1.zspr b/data/sprites/alttpr/informant_woman.1.zspr
deleted file mode 100644
index 6465a0e9..00000000
Binary files a/data/sprites/alttpr/informant_woman.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/inkling.1.zspr b/data/sprites/alttpr/inkling.1.zspr
deleted file mode 100644
index 6b39e4a7..00000000
Binary files a/data/sprites/alttpr/inkling.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/invisibleman.1.zspr b/data/sprites/alttpr/invisibleman.1.zspr
deleted file mode 100644
index 7993c500..00000000
Binary files a/data/sprites/alttpr/invisibleman.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/jack-frost.1.zspr b/data/sprites/alttpr/jack-frost.1.zspr
deleted file mode 100644
index 12dd417a..00000000
Binary files a/data/sprites/alttpr/jack-frost.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/jason_frudnick.1.zspr b/data/sprites/alttpr/jason_frudnick.1.zspr
deleted file mode 100644
index 2411759c..00000000
Binary files a/data/sprites/alttpr/jason_frudnick.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/jasp.1.zspr b/data/sprites/alttpr/jasp.1.zspr
deleted file mode 100644
index 6dc74496..00000000
Binary files a/data/sprites/alttpr/jasp.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/jogurt.1.zspr b/data/sprites/alttpr/jogurt.1.zspr
deleted file mode 100644
index b229060c..00000000
Binary files a/data/sprites/alttpr/jogurt.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/katsura.1.zspr b/data/sprites/alttpr/katsura.1.zspr
deleted file mode 100644
index 422a0faf..00000000
Binary files a/data/sprites/alttpr/katsura.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/kecleon.1.zspr b/data/sprites/alttpr/kecleon.1.zspr
deleted file mode 100644
index 5e1786ba..00000000
Binary files a/data/sprites/alttpr/kecleon.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/kenny_mccormick.1.zspr b/data/sprites/alttpr/kenny_mccormick.1.zspr
deleted file mode 100644
index c66a74a5..00000000
Binary files a/data/sprites/alttpr/kenny_mccormick.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ketchup.1.zspr b/data/sprites/alttpr/ketchup.1.zspr
deleted file mode 100644
index 9dbb326c..00000000
Binary files a/data/sprites/alttpr/ketchup.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/kholdstare.1.zspr b/data/sprites/alttpr/kholdstare.1.zspr
deleted file mode 100644
index 393a491d..00000000
Binary files a/data/sprites/alttpr/kholdstare.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/king_gothalion.1.zspr b/data/sprites/alttpr/king_gothalion.1.zspr
deleted file mode 100644
index 65c73f04..00000000
Binary files a/data/sprites/alttpr/king_gothalion.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/king_graham.1.zspr b/data/sprites/alttpr/king_graham.1.zspr
deleted file mode 100644
index 28b75cf1..00000000
Binary files a/data/sprites/alttpr/king_graham.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/kirby-meta.1.zspr b/data/sprites/alttpr/kirby-meta.1.zspr
deleted file mode 100644
index 9cb132b3..00000000
Binary files a/data/sprites/alttpr/kirby-meta.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/kore8.1.zspr b/data/sprites/alttpr/kore8.1.zspr
deleted file mode 100644
index a1db104a..00000000
Binary files a/data/sprites/alttpr/kore8.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/lakitu.1.zspr b/data/sprites/alttpr/lakitu.1.zspr
deleted file mode 100644
index 24d0f12e..00000000
Binary files a/data/sprites/alttpr/lakitu.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/lapras.1.zspr b/data/sprites/alttpr/lapras.1.zspr
deleted file mode 100644
index bcec01b2..00000000
Binary files a/data/sprites/alttpr/lapras.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/lest.1.zspr b/data/sprites/alttpr/lest.1.zspr
deleted file mode 100644
index 99764924..00000000
Binary files a/data/sprites/alttpr/lest.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/lily.1.zspr b/data/sprites/alttpr/lily.1.zspr
deleted file mode 100644
index 5cb5d2aa..00000000
Binary files a/data/sprites/alttpr/lily.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/linja.1.zspr b/data/sprites/alttpr/linja.1.zspr
deleted file mode 100644
index 414efaf7..00000000
Binary files a/data/sprites/alttpr/linja.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/linkhatcolor.1.zspr b/data/sprites/alttpr/linkhatcolor.1.zspr
deleted file mode 100644
index af53898d..00000000
Binary files a/data/sprites/alttpr/linkhatcolor.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/linktuniccolor.1.zspr b/data/sprites/alttpr/linktuniccolor.1.zspr
deleted file mode 100644
index 305a9f8f..00000000
Binary files a/data/sprites/alttpr/linktuniccolor.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/littlepony.1.zspr b/data/sprites/alttpr/littlepony.1.zspr
deleted file mode 100644
index 0ed4b1b1..00000000
Binary files a/data/sprites/alttpr/littlepony.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/locke_merchant.1.zspr b/data/sprites/alttpr/locke_merchant.1.zspr
deleted file mode 100644
index bfd87c7d..00000000
Binary files a/data/sprites/alttpr/locke_merchant.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/lucario.1.zspr b/data/sprites/alttpr/lucario.1.zspr
deleted file mode 100644
index 44ce395e..00000000
Binary files a/data/sprites/alttpr/lucario.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/luigi.1.zspr b/data/sprites/alttpr/luigi.1.zspr
deleted file mode 100644
index 1a1dc552..00000000
Binary files a/data/sprites/alttpr/luigi.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/madeline.1.zspr b/data/sprites/alttpr/madeline.1.zspr
deleted file mode 100644
index 8256e6a3..00000000
Binary files a/data/sprites/alttpr/madeline.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/magus.1.zspr b/data/sprites/alttpr/magus.1.zspr
deleted file mode 100644
index 171980ef..00000000
Binary files a/data/sprites/alttpr/magus.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/maiden.1.zspr b/data/sprites/alttpr/maiden.1.zspr
deleted file mode 100644
index e0297901..00000000
Binary files a/data/sprites/alttpr/maiden.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mallow-cat.1.zspr b/data/sprites/alttpr/mallow-cat.1.zspr
deleted file mode 100644
index 395684b2..00000000
Binary files a/data/sprites/alttpr/mallow-cat.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mangalink.1.zspr b/data/sprites/alttpr/mangalink.1.zspr
deleted file mode 100644
index adb57b99..00000000
Binary files a/data/sprites/alttpr/mangalink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/maplequeen.2.zspr b/data/sprites/alttpr/maplequeen.2.zspr
deleted file mode 100644
index 35b7deec..00000000
Binary files a/data/sprites/alttpr/maplequeen.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/marin.2.zspr b/data/sprites/alttpr/marin.2.zspr
deleted file mode 100644
index 72a06ecf..00000000
Binary files a/data/sprites/alttpr/marin.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mario-classic.2.zspr b/data/sprites/alttpr/mario-classic.2.zspr
deleted file mode 100644
index 6443e327..00000000
Binary files a/data/sprites/alttpr/mario-classic.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mario_tanooki.1.zspr b/data/sprites/alttpr/mario_tanooki.1.zspr
deleted file mode 100644
index 255350dd..00000000
Binary files a/data/sprites/alttpr/mario_tanooki.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mariocappy.1.zspr b/data/sprites/alttpr/mariocappy.1.zspr
deleted file mode 100644
index b888396d..00000000
Binary files a/data/sprites/alttpr/mariocappy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/marisa.1.zspr b/data/sprites/alttpr/marisa.1.zspr
deleted file mode 100644
index 16b2a803..00000000
Binary files a/data/sprites/alttpr/marisa.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/matthias.1.zspr b/data/sprites/alttpr/matthias.1.zspr
deleted file mode 100644
index 062dae6d..00000000
Binary files a/data/sprites/alttpr/matthias.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/meatwad.1.zspr b/data/sprites/alttpr/meatwad.1.zspr
deleted file mode 100644
index a09a4adf..00000000
Binary files a/data/sprites/alttpr/meatwad.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/medallions.1.zspr b/data/sprites/alttpr/medallions.1.zspr
deleted file mode 100644
index dc4b04d1..00000000
Binary files a/data/sprites/alttpr/medallions.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/medli.1.zspr b/data/sprites/alttpr/medli.1.zspr
deleted file mode 100644
index 59284a36..00000000
Binary files a/data/sprites/alttpr/medli.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/megaman-x.2.zspr b/data/sprites/alttpr/megaman-x.2.zspr
deleted file mode 100644
index ffe75595..00000000
Binary files a/data/sprites/alttpr/megaman-x.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/metroid.1.zspr b/data/sprites/alttpr/metroid.1.zspr
deleted file mode 100644
index d81187cb..00000000
Binary files a/data/sprites/alttpr/metroid.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mew.1.zspr b/data/sprites/alttpr/mew.1.zspr
deleted file mode 100644
index a06dc8d6..00000000
Binary files a/data/sprites/alttpr/mew.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mike-jones.2.zspr b/data/sprites/alttpr/mike-jones.2.zspr
deleted file mode 100644
index 550fb213..00000000
Binary files a/data/sprites/alttpr/mike-jones.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/minish_link.1.zspr b/data/sprites/alttpr/minish_link.1.zspr
deleted file mode 100644
index 4b342c1a..00000000
Binary files a/data/sprites/alttpr/minish_link.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/minishcaplink.2.zspr b/data/sprites/alttpr/minishcaplink.2.zspr
deleted file mode 100644
index aaca256b..00000000
Binary files a/data/sprites/alttpr/minishcaplink.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/missingno.1.zspr b/data/sprites/alttpr/missingno.1.zspr
deleted file mode 100644
index 68e61b9b..00000000
Binary files a/data/sprites/alttpr/missingno.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/modernlink.1.zspr b/data/sprites/alttpr/modernlink.1.zspr
deleted file mode 100644
index 6d5e68a4..00000000
Binary files a/data/sprites/alttpr/modernlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mog.2.zspr b/data/sprites/alttpr/mog.2.zspr
deleted file mode 100644
index a6ed2225..00000000
Binary files a/data/sprites/alttpr/mog.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/momiji.1.zspr b/data/sprites/alttpr/momiji.1.zspr
deleted file mode 100644
index 86a18586..00000000
Binary files a/data/sprites/alttpr/momiji.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/moosh.1.zspr b/data/sprites/alttpr/moosh.1.zspr
deleted file mode 100644
index 0a1e167a..00000000
Binary files a/data/sprites/alttpr/moosh.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mouse.1.zspr b/data/sprites/alttpr/mouse.1.zspr
deleted file mode 100644
index 16ba884d..00000000
Binary files a/data/sprites/alttpr/mouse.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ms-paintdog.1.zspr b/data/sprites/alttpr/ms-paintdog.1.zspr
deleted file mode 100644
index 75f5f541..00000000
Binary files a/data/sprites/alttpr/ms-paintdog.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/mushy.1.zspr b/data/sprites/alttpr/mushy.1.zspr
deleted file mode 100644
index a6c924a5..00000000
Binary files a/data/sprites/alttpr/mushy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/naturelink.1.zspr b/data/sprites/alttpr/naturelink.1.zspr
deleted file mode 100644
index bdfd0efb..00000000
Binary files a/data/sprites/alttpr/naturelink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/navi.1.zspr b/data/sprites/alttpr/navi.1.zspr
deleted file mode 100644
index 4621bf4a..00000000
Binary files a/data/sprites/alttpr/navi.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/navirou.1.zspr b/data/sprites/alttpr/navirou.1.zspr
deleted file mode 100644
index 9da7e76e..00000000
Binary files a/data/sprites/alttpr/navirou.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ned-flanders.1.zspr b/data/sprites/alttpr/ned-flanders.1.zspr
deleted file mode 100644
index 78ed5bc4..00000000
Binary files a/data/sprites/alttpr/ned-flanders.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/negativelink.1.zspr b/data/sprites/alttpr/negativelink.1.zspr
deleted file mode 100644
index a3dd1566..00000000
Binary files a/data/sprites/alttpr/negativelink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/neosad.1.zspr b/data/sprites/alttpr/neosad.1.zspr
deleted file mode 100644
index 7e95d7f7..00000000
Binary files a/data/sprites/alttpr/neosad.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/neslink.1.zspr b/data/sprites/alttpr/neslink.1.zspr
deleted file mode 100644
index 805b3162..00000000
Binary files a/data/sprites/alttpr/neslink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ness.1.zspr b/data/sprites/alttpr/ness.1.zspr
deleted file mode 100644
index b8b3de81..00000000
Binary files a/data/sprites/alttpr/ness.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/nia.1.zspr b/data/sprites/alttpr/nia.1.zspr
deleted file mode 100644
index 5d01ba4b..00000000
Binary files a/data/sprites/alttpr/nia.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/niko.1.zspr b/data/sprites/alttpr/niko.1.zspr
deleted file mode 100644
index 5d39e6bb..00000000
Binary files a/data/sprites/alttpr/niko.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/oldman.2.zspr b/data/sprites/alttpr/oldman.2.zspr
deleted file mode 100644
index 1d47cdac..00000000
Binary files a/data/sprites/alttpr/oldman.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ori.2.zspr b/data/sprites/alttpr/ori.2.zspr
deleted file mode 100644
index 10c1e462..00000000
Binary files a/data/sprites/alttpr/ori.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/outlinelink.1.zspr b/data/sprites/alttpr/outlinelink.1.zspr
deleted file mode 100644
index 50ae98bc..00000000
Binary files a/data/sprites/alttpr/outlinelink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/parallelworldslink.1.zspr b/data/sprites/alttpr/parallelworldslink.1.zspr
deleted file mode 100644
index 71a9bdc1..00000000
Binary files a/data/sprites/alttpr/parallelworldslink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/paula.1.zspr b/data/sprites/alttpr/paula.1.zspr
deleted file mode 100644
index 657752ea..00000000
Binary files a/data/sprites/alttpr/paula.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/peach.1.zspr b/data/sprites/alttpr/peach.1.zspr
deleted file mode 100644
index 7973f952..00000000
Binary files a/data/sprites/alttpr/peach.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/penguinlink.1.zspr b/data/sprites/alttpr/penguinlink.1.zspr
deleted file mode 100644
index 2fe01e49..00000000
Binary files a/data/sprites/alttpr/penguinlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pete.1.zspr b/data/sprites/alttpr/pete.1.zspr
deleted file mode 100644
index a3135615..00000000
Binary files a/data/sprites/alttpr/pete.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/phoenix-wright.1.zspr b/data/sprites/alttpr/phoenix-wright.1.zspr
deleted file mode 100644
index d7cb0be2..00000000
Binary files a/data/sprites/alttpr/phoenix-wright.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pikachu.1.zspr b/data/sprites/alttpr/pikachu.1.zspr
deleted file mode 100644
index 0b8a88c4..00000000
Binary files a/data/sprites/alttpr/pikachu.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pinkribbonlink.2.zspr b/data/sprites/alttpr/pinkribbonlink.2.zspr
deleted file mode 100644
index ba516f18..00000000
Binary files a/data/sprites/alttpr/pinkribbonlink.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/piranha_plant.1.zspr b/data/sprites/alttpr/piranha_plant.1.zspr
deleted file mode 100644
index 59bf4d0d..00000000
Binary files a/data/sprites/alttpr/piranha_plant.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/plagueknight.1.zspr b/data/sprites/alttpr/plagueknight.1.zspr
deleted file mode 100644
index 258bed7b..00000000
Binary files a/data/sprites/alttpr/plagueknight.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pokey.1.zspr b/data/sprites/alttpr/pokey.1.zspr
deleted file mode 100644
index 4de17faf..00000000
Binary files a/data/sprites/alttpr/pokey.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/popoi.1.zspr b/data/sprites/alttpr/popoi.1.zspr
deleted file mode 100644
index 663d4dc1..00000000
Binary files a/data/sprites/alttpr/popoi.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/poppy.1.zspr b/data/sprites/alttpr/poppy.1.zspr
deleted file mode 100644
index 80d4ca69..00000000
Binary files a/data/sprites/alttpr/poppy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/porg_knight.1.zspr b/data/sprites/alttpr/porg_knight.1.zspr
deleted file mode 100644
index 4d6f9635..00000000
Binary files a/data/sprites/alttpr/porg_knight.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/powerpuff_girl.1.zspr b/data/sprites/alttpr/powerpuff_girl.1.zspr
deleted file mode 100644
index fbf3c694..00000000
Binary files a/data/sprites/alttpr/powerpuff_girl.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pridelink.2.zspr b/data/sprites/alttpr/pridelink.2.zspr
deleted file mode 100644
index 66231013..00000000
Binary files a/data/sprites/alttpr/pridelink.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/primm.1.zspr b/data/sprites/alttpr/primm.1.zspr
deleted file mode 100644
index e9ff2d05..00000000
Binary files a/data/sprites/alttpr/primm.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/princess_bubblegum.1.zspr b/data/sprites/alttpr/princess_bubblegum.1.zspr
deleted file mode 100644
index c46dcc0f..00000000
Binary files a/data/sprites/alttpr/princess_bubblegum.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/psyduck.2.zspr b/data/sprites/alttpr/psyduck.2.zspr
deleted file mode 100644
index c9e17117..00000000
Binary files a/data/sprites/alttpr/psyduck.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pug.1.zspr b/data/sprites/alttpr/pug.1.zspr
deleted file mode 100644
index 60692711..00000000
Binary files a/data/sprites/alttpr/pug.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/purplechest-bottle.1.zspr b/data/sprites/alttpr/purplechest-bottle.1.zspr
deleted file mode 100644
index 8daed4d6..00000000
Binary files a/data/sprites/alttpr/purplechest-bottle.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/pyro.1.zspr b/data/sprites/alttpr/pyro.1.zspr
deleted file mode 100644
index 9037c8e4..00000000
Binary files a/data/sprites/alttpr/pyro.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rainbowlink.1.zspr b/data/sprites/alttpr/rainbowlink.1.zspr
deleted file mode 100644
index bc8443f9..00000000
Binary files a/data/sprites/alttpr/rainbowlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/remeer.1.zspr b/data/sprites/alttpr/remeer.1.zspr
deleted file mode 100644
index 8d7f245a..00000000
Binary files a/data/sprites/alttpr/remeer.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rick.1.zspr b/data/sprites/alttpr/rick.1.zspr
deleted file mode 100644
index 93a163f6..00000000
Binary files a/data/sprites/alttpr/rick.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/robotlink.1.zspr b/data/sprites/alttpr/robotlink.1.zspr
deleted file mode 100644
index 8a1eed43..00000000
Binary files a/data/sprites/alttpr/robotlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rocko.1.zspr b/data/sprites/alttpr/rocko.1.zspr
deleted file mode 100644
index ab34f635..00000000
Binary files a/data/sprites/alttpr/rocko.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rottytops.1.zspr b/data/sprites/alttpr/rottytops.1.zspr
deleted file mode 100644
index d4007ffb..00000000
Binary files a/data/sprites/alttpr/rottytops.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/roykoopa.1.zspr b/data/sprites/alttpr/roykoopa.1.zspr
deleted file mode 100644
index e1f9699f..00000000
Binary files a/data/sprites/alttpr/roykoopa.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rumia.1.zspr b/data/sprites/alttpr/rumia.1.zspr
deleted file mode 100644
index dc037ae2..00000000
Binary files a/data/sprites/alttpr/rumia.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/rydia.1.zspr b/data/sprites/alttpr/rydia.1.zspr
deleted file mode 100644
index ff98ab56..00000000
Binary files a/data/sprites/alttpr/rydia.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ryu.1.zspr b/data/sprites/alttpr/ryu.1.zspr
deleted file mode 100644
index 5c6d5411..00000000
Binary files a/data/sprites/alttpr/ryu.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sailormoon.1.zspr b/data/sprites/alttpr/sailormoon.1.zspr
deleted file mode 100644
index 1120d3f4..00000000
Binary files a/data/sprites/alttpr/sailormoon.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/saitama.1.zspr b/data/sprites/alttpr/saitama.1.zspr
deleted file mode 100644
index acd9170d..00000000
Binary files a/data/sprites/alttpr/saitama.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/samus-sm.1.zspr b/data/sprites/alttpr/samus-sm.1.zspr
deleted file mode 100644
index c8fde01b..00000000
Binary files a/data/sprites/alttpr/samus-sm.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/samus.2.zspr b/data/sprites/alttpr/samus.2.zspr
deleted file mode 100644
index 81b0912f..00000000
Binary files a/data/sprites/alttpr/samus.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/samus_classic.1.zspr b/data/sprites/alttpr/samus_classic.1.zspr
deleted file mode 100644
index 6559e25c..00000000
Binary files a/data/sprites/alttpr/samus_classic.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/santalink.2.zspr b/data/sprites/alttpr/santalink.2.zspr
deleted file mode 100644
index 0e78fedb..00000000
Binary files a/data/sprites/alttpr/santalink.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/scholar.1.zspr b/data/sprites/alttpr/scholar.1.zspr
deleted file mode 100644
index bf697f16..00000000
Binary files a/data/sprites/alttpr/scholar.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/selan.1.zspr b/data/sprites/alttpr/selan.1.zspr
deleted file mode 100644
index eb3b0318..00000000
Binary files a/data/sprites/alttpr/selan.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sevens1ns.1.zspr b/data/sprites/alttpr/sevens1ns.1.zspr
deleted file mode 100644
index d59a1b52..00000000
Binary files a/data/sprites/alttpr/sevens1ns.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shadow.1.zspr b/data/sprites/alttpr/shadow.1.zspr
deleted file mode 100644
index fcd0d49b..00000000
Binary files a/data/sprites/alttpr/shadow.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shadowsaku.2.zspr b/data/sprites/alttpr/shadowsaku.2.zspr
deleted file mode 100644
index 8972f9f2..00000000
Binary files a/data/sprites/alttpr/shadowsaku.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shantae.1.zspr b/data/sprites/alttpr/shantae.1.zspr
deleted file mode 100644
index 03a1c7b9..00000000
Binary files a/data/sprites/alttpr/shantae.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shuppet.1.zspr b/data/sprites/alttpr/shuppet.1.zspr
deleted file mode 100644
index 55a51ae9..00000000
Binary files a/data/sprites/alttpr/shuppet.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shy-gal.1.zspr b/data/sprites/alttpr/shy-gal.1.zspr
deleted file mode 100644
index b86b27bc..00000000
Binary files a/data/sprites/alttpr/shy-gal.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/shy-guy.1.zspr b/data/sprites/alttpr/shy-guy.1.zspr
deleted file mode 100644
index 43ee0fe4..00000000
Binary files a/data/sprites/alttpr/shy-guy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sighn_waive.1.zspr b/data/sprites/alttpr/sighn_waive.1.zspr
deleted file mode 100644
index d961dc4d..00000000
Binary files a/data/sprites/alttpr/sighn_waive.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/snes-controller.1.zspr b/data/sprites/alttpr/snes-controller.1.zspr
deleted file mode 100644
index 5dd70f39..00000000
Binary files a/data/sprites/alttpr/snes-controller.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sodacan.1.zspr b/data/sprites/alttpr/sodacan.1.zspr
deleted file mode 100644
index 93e6fb1e..00000000
Binary files a/data/sprites/alttpr/sodacan.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/solaire.1.zspr b/data/sprites/alttpr/solaire.1.zspr
deleted file mode 100644
index e216a7d9..00000000
Binary files a/data/sprites/alttpr/solaire.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/soldiersprite.1.zspr b/data/sprites/alttpr/soldiersprite.1.zspr
deleted file mode 100644
index d5e8ee35..00000000
Binary files a/data/sprites/alttpr/soldiersprite.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sonic.1.zspr b/data/sprites/alttpr/sonic.1.zspr
deleted file mode 100644
index 55724219..00000000
Binary files a/data/sprites/alttpr/sonic.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sora.1.zspr b/data/sprites/alttpr/sora.1.zspr
deleted file mode 100644
index c8d656fd..00000000
Binary files a/data/sprites/alttpr/sora.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/sora_kh1.1.zspr b/data/sprites/alttpr/sora_kh1.1.zspr
deleted file mode 100644
index e77c922d..00000000
Binary files a/data/sprites/alttpr/sora_kh1.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/squall.1.zspr b/data/sprites/alttpr/squall.1.zspr
deleted file mode 100644
index b9cd9556..00000000
Binary files a/data/sprites/alttpr/squall.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/squirrel.1.zspr b/data/sprites/alttpr/squirrel.1.zspr
deleted file mode 100644
index 64e399a1..00000000
Binary files a/data/sprites/alttpr/squirrel.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/squirtle.1.zspr b/data/sprites/alttpr/squirtle.1.zspr
deleted file mode 100644
index 274bf1c7..00000000
Binary files a/data/sprites/alttpr/squirtle.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/stalfos.1.zspr b/data/sprites/alttpr/stalfos.1.zspr
deleted file mode 100644
index d4787a3b..00000000
Binary files a/data/sprites/alttpr/stalfos.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/stan.1.zspr b/data/sprites/alttpr/stan.1.zspr
deleted file mode 100644
index 5fd3eb11..00000000
Binary files a/data/sprites/alttpr/stan.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/staticlink.1.zspr b/data/sprites/alttpr/staticlink.1.zspr
deleted file mode 100644
index d0f1bc06..00000000
Binary files a/data/sprites/alttpr/staticlink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/stick_man.1.zspr b/data/sprites/alttpr/stick_man.1.zspr
deleted file mode 100644
index b891586f..00000000
Binary files a/data/sprites/alttpr/stick_man.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/superbomb.1.zspr b/data/sprites/alttpr/superbomb.1.zspr
deleted file mode 100644
index 1ed38ae3..00000000
Binary files a/data/sprites/alttpr/superbomb.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/superbunny.2.zspr b/data/sprites/alttpr/superbunny.2.zspr
deleted file mode 100644
index b842d1c3..00000000
Binary files a/data/sprites/alttpr/superbunny.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/supermeatboy.1.zspr b/data/sprites/alttpr/supermeatboy.1.zspr
deleted file mode 100644
index ad4368bb..00000000
Binary files a/data/sprites/alttpr/supermeatboy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/swatchy.1.zspr b/data/sprites/alttpr/swatchy.1.zspr
deleted file mode 100644
index 46795e9b..00000000
Binary files a/data/sprites/alttpr/swatchy.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tasbot.1.zspr b/data/sprites/alttpr/tasbot.1.zspr
deleted file mode 100644
index b7278587..00000000
Binary files a/data/sprites/alttpr/tasbot.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/teatime.1.zspr b/data/sprites/alttpr/teatime.1.zspr
deleted file mode 100644
index 8953bc79..00000000
Binary files a/data/sprites/alttpr/teatime.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/terra.1.zspr b/data/sprites/alttpr/terra.1.zspr
deleted file mode 100644
index e24ca87a..00000000
Binary files a/data/sprites/alttpr/terra.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tetra.1.zspr b/data/sprites/alttpr/tetra.1.zspr
deleted file mode 100644
index 77525f08..00000000
Binary files a/data/sprites/alttpr/tetra.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tgh.1.zspr b/data/sprites/alttpr/tgh.1.zspr
deleted file mode 100644
index 929b8705..00000000
Binary files a/data/sprites/alttpr/tgh.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/thief.1.zspr b/data/sprites/alttpr/thief.1.zspr
deleted file mode 100644
index b6b0ffef..00000000
Binary files a/data/sprites/alttpr/thief.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/thomcrow.1.zspr b/data/sprites/alttpr/thomcrow.1.zspr
deleted file mode 100644
index 81bba95d..00000000
Binary files a/data/sprites/alttpr/thomcrow.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tile.2.zspr b/data/sprites/alttpr/tile.2.zspr
deleted file mode 100644
index 38332bb0..00000000
Binary files a/data/sprites/alttpr/tile.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tingle.1.zspr b/data/sprites/alttpr/tingle.1.zspr
deleted file mode 100644
index 9a53f8d2..00000000
Binary files a/data/sprites/alttpr/tingle.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/tmnt.1.zspr b/data/sprites/alttpr/tmnt.1.zspr
deleted file mode 100644
index 8f01c1db..00000000
Binary files a/data/sprites/alttpr/tmnt.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/toad.2.zspr b/data/sprites/alttpr/toad.2.zspr
deleted file mode 100644
index 6abca2d7..00000000
Binary files a/data/sprites/alttpr/toad.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/toadette.2.zspr b/data/sprites/alttpr/toadette.2.zspr
deleted file mode 100644
index 8c6498b2..00000000
Binary files a/data/sprites/alttpr/toadette.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/toadette_captain.1.zspr b/data/sprites/alttpr/toadette_captain.1.zspr
deleted file mode 100644
index e69f74a7..00000000
Binary files a/data/sprites/alttpr/toadette_captain.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/totem-links.1.zspr b/data/sprites/alttpr/totem-links.1.zspr
deleted file mode 100644
index e4ac6abc..00000000
Binary files a/data/sprites/alttpr/totem-links.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/trogdor.1.zspr b/data/sprites/alttpr/trogdor.1.zspr
deleted file mode 100644
index b37191ac..00000000
Binary files a/data/sprites/alttpr/trogdor.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/twilightprincesszelda.2.zspr b/data/sprites/alttpr/twilightprincesszelda.2.zspr
deleted file mode 100644
index 2487f44a..00000000
Binary files a/data/sprites/alttpr/twilightprincesszelda.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/two_faced.1.zspr b/data/sprites/alttpr/two_faced.1.zspr
deleted file mode 100644
index d504c321..00000000
Binary files a/data/sprites/alttpr/two_faced.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ty.1.zspr b/data/sprites/alttpr/ty.1.zspr
deleted file mode 100644
index 1091b298..00000000
Binary files a/data/sprites/alttpr/ty.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/ultros.1.zspr b/data/sprites/alttpr/ultros.1.zspr
deleted file mode 100644
index bd312843..00000000
Binary files a/data/sprites/alttpr/ultros.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/valeera.1.zspr b/data/sprites/alttpr/valeera.1.zspr
deleted file mode 100644
index 090a6631..00000000
Binary files a/data/sprites/alttpr/valeera.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vanillalink.1.zspr b/data/sprites/alttpr/vanillalink.1.zspr
deleted file mode 100644
index 409171fa..00000000
Binary files a/data/sprites/alttpr/vanillalink.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vaporeon.1.zspr b/data/sprites/alttpr/vaporeon.1.zspr
deleted file mode 100644
index 55372722..00000000
Binary files a/data/sprites/alttpr/vaporeon.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vegeta.1.zspr b/data/sprites/alttpr/vegeta.1.zspr
deleted file mode 100644
index b4f46019..00000000
Binary files a/data/sprites/alttpr/vegeta.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vera.1.zspr b/data/sprites/alttpr/vera.1.zspr
deleted file mode 100644
index b8914365..00000000
Binary files a/data/sprites/alttpr/vera.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vitreous.1.zspr b/data/sprites/alttpr/vitreous.1.zspr
deleted file mode 100644
index 947eff30..00000000
Binary files a/data/sprites/alttpr/vitreous.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vivi.1.zspr b/data/sprites/alttpr/vivi.1.zspr
deleted file mode 100644
index a7ad1a5f..00000000
Binary files a/data/sprites/alttpr/vivi.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/vivian.1.zspr b/data/sprites/alttpr/vivian.1.zspr
deleted file mode 100644
index 9de1061f..00000000
Binary files a/data/sprites/alttpr/vivian.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/wario.1.zspr b/data/sprites/alttpr/wario.1.zspr
deleted file mode 100644
index f1a5aab7..00000000
Binary files a/data/sprites/alttpr/wario.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/will.1.zspr b/data/sprites/alttpr/will.1.zspr
deleted file mode 100644
index d3794969..00000000
Binary files a/data/sprites/alttpr/will.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/wizzrobe.2.zspr b/data/sprites/alttpr/wizzrobe.2.zspr
deleted file mode 100644
index f79195d2..00000000
Binary files a/data/sprites/alttpr/wizzrobe.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/wolf_link.1.zspr b/data/sprites/alttpr/wolf_link.1.zspr
deleted file mode 100644
index 5ee07dcb..00000000
Binary files a/data/sprites/alttpr/wolf_link.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/wolf_link_tp.1.zspr b/data/sprites/alttpr/wolf_link_tp.1.zspr
deleted file mode 100644
index 9627cd73..00000000
Binary files a/data/sprites/alttpr/wolf_link_tp.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/yoshi.1.zspr b/data/sprites/alttpr/yoshi.1.zspr
deleted file mode 100644
index 189ea390..00000000
Binary files a/data/sprites/alttpr/yoshi.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/yunica.1.zspr b/data/sprites/alttpr/yunica.1.zspr
deleted file mode 100644
index 57f1f416..00000000
Binary files a/data/sprites/alttpr/yunica.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zandra.1.zspr b/data/sprites/alttpr/zandra.1.zspr
deleted file mode 100644
index d7e5012c..00000000
Binary files a/data/sprites/alttpr/zandra.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zebraunicorn.1.zspr b/data/sprites/alttpr/zebraunicorn.1.zspr
deleted file mode 100644
index c06130ff..00000000
Binary files a/data/sprites/alttpr/zebraunicorn.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zeck.1.zspr b/data/sprites/alttpr/zeck.1.zspr
deleted file mode 100644
index 630acd1a..00000000
Binary files a/data/sprites/alttpr/zeck.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zelda.1.zspr b/data/sprites/alttpr/zelda.1.zspr
deleted file mode 100644
index 26ba1a05..00000000
Binary files a/data/sprites/alttpr/zelda.1.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zerosuitsamus.2.zspr b/data/sprites/alttpr/zerosuitsamus.2.zspr
deleted file mode 100644
index 0e5a7d17..00000000
Binary files a/data/sprites/alttpr/zerosuitsamus.2.zspr and /dev/null differ
diff --git a/data/sprites/alttpr/zora.2.zspr b/data/sprites/alttpr/zora.2.zspr
deleted file mode 100644
index 1ca568e1..00000000
Binary files a/data/sprites/alttpr/zora.2.zspr and /dev/null differ
diff --git a/host.yaml b/host.yaml
index 265d31af..4968083c 100644
--- a/host.yaml
+++ b/host.yaml
@@ -55,10 +55,15 @@ multi_mystery_options:
# Teams
# Note that there is currently no way to supply names for teams 2+ through MultiMystery
teams: 1
- # Location of your Enemizer CLI, available here: https://github.com/Bonta0/Enemizer/releases
+ # Location of your Enemizer CLI, available here: https://github.com/Ijwu/Enemizer/releases
enemizer_path: "EnemizerCLI/EnemizerCLI.Core.exe"
# Folder from which the player yaml files are pulled from
player_files_path: "Players"
+ #amount of players, 0 to infer from player files
+ players: 0
+ # general weights file, within the stated player_files_path location
+ # gets used if players is higher than the amount of per-player files found to fill remaining slots
+ weights_file_path: "weights.yaml"
# Meta file name, within the stated player_files_path location
meta_file_path: "meta.yaml"
# Automatically launches {player_name}.yaml's ROM file using the OS's default program once generation completes. (likely your emulator)
@@ -92,5 +97,5 @@ multi_mystery_options:
# 2 -> 7z is recommended for roms. All of them get the job done.
# 3 -> bz2
zip_format: 1
- # Create roms flagged as race roms
+ # Create encrypted race roms
race: 0
diff --git a/inno_setup.iss b/inno_setup.iss
index fd837826..7f8d6b7d 100644
--- a/inno_setup.iss
+++ b/inno_setup.iss
@@ -11,6 +11,7 @@ AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={commonappdata}\{#MyAppName}
DisableProgramGroupPage=yes
+DefaultGroupName=Berserker's Multiworld
OutputDir=setups
OutputBaseFilename=Setup {#MyAppName}
Compression=lzma2
@@ -39,7 +40,7 @@ NAME: "{app}"; Flags: setntfscompression; Permissions: everyone-modify users-mod
[Files]
Source: "{code:GetROMPath}"; DestDir: "{app}"; DestName: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc"; Flags: external
-Source: "{#sourcepath}*"; Excludes: "*.key, *.log, *.hpkey"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "{#sourcepath}*"; Excludes: "*.sfc, *.log, data\sprites\alttpr"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "vc_redist.x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
@@ -51,6 +52,7 @@ Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks:
[Run]
Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/passive /norestart"; Check: IsVCRedist64BitNeeded; StatusMsg: "Installing VC++ redistributable..."
+Filename: "{app}\BerserkerMultiCreator"; Parameters: "update_sprites"; StatusMsg: "Updating Sprite Library..."
[UninstallDelete]
Type: dirifempty; Name: "{app}"
diff --git a/meta.yaml b/meta.yaml
index 3f1afb56..6642402b 100644
--- a/meta.yaml
+++ b/meta.yaml
@@ -21,9 +21,10 @@ goals:
dungeons: 50 # Defeat the boss of all dungeons, including Agahnim's tower and GT (Aga 2)
pedestal: 100 # Pull the Triforce from the Master Sword pedestal
triforce-hunt: 5 # Collect 20 of 30 Triforce pieces spread throughout the worlds, then turn them in to Murahadala in front of Hyrule Castle
- local_triforce_hunt: 10 # Collect 20 of 30 Triforce pieces spread throughout your world, then turn them in to Murahadala in front of Hyrule Castle
- ganon_triforce_hunt: 5 # Collect 20 of 30 Triforce pieces spread throughout the worlds, then kill Ganon
- local_ganon_triforce_hunt: 20 # Collect 20 of 30 Triforce pieces spread throughout your world, then kill Ganon
+ local_triforce_hunt: 5 # Collect 20 of 30 Triforce pieces spread throughout your world, then turn them in to Murahadala in front of Hyrule Castle
+ ganon_triforce_hunt: 10 # Collect 20 of 30 Triforce pieces spread throughout the worlds, then kill Ganon
+ local_ganon_triforce_hunt: 10 # Collect 20 of 30 Triforce pieces spread throughout your world, then kill Ganon
+ ganon_pedestal: 10 # Pull the Master Sword pedestal, then kill Ganon
null: 0 # Maintain individual goals
mode:
standard: 10
@@ -50,4 +51,14 @@ ganon_open:
'6': 9
'7': 10
random: 5 # This will mean differing completion times. But leaving it for that surprise effect
+triforce_pieces_mode: #Determine how to calculate the extra available triforce pieces.
+ extra: 0 # available = triforce_pieces_extra + triforce_pieces_required
+ percentage: 0 # available = (triforce_pieces_percentage /100) * triforce_pieces_required
+ available: 50 # available = triforce_pieces_available
+triforce_pieces_available: # Set to how many triforces pieces are available to collect in the world. Default is 30. Max is 90, Min is 1
+ # Format "pieces: chance"
+ 30: 50
+triforce_pieces_required: # Set to how many out of X triforce pieces you need to win the game in a triforce hunt. Default is 20. Max is 90, Min is 1
+ # Format "pieces: chance"
+ 25: 50
# Do not use meta rom options at this time
\ No newline at end of file
diff --git a/playerSettings.yaml b/playerSettings.yaml
index b6caabf9..13f7a472 100644
--- a/playerSettings.yaml
+++ b/playerSettings.yaml
@@ -107,7 +107,7 @@ triforce_pieces_extra: # Set to how many extra triforces pieces are available to
10: 50
15: 0
20: 0
-triforce_pieces_percentage: # Set to how many extra triforces pieces according to a percentage of the required ones, are available to collect in the world.
+triforce_pieces_percentage: # Set to how many triforce pieces according to a percentage of the required ones, are available to collect in the world.
# Format "pieces: chance"
100: 0 #No extra
150: 50 #Half the required will be added as extra
@@ -165,7 +165,6 @@ item_pool:
normal: 50 # Item availability remains unchanged from vanilla game
hard: 0 # Reduced upgrade availability (max: 14 hearts, blue mail, tempered sword, fire shield, no silvers unless swordless)
expert: 0 # Minimum upgrade availability (max: 8 hearts, green mail, master sword, fighter shield, no silvers unless swordless)
- crowd_control: 0 # Sets up the item pool for the crowd control extension. Do not use it without crowd control
item_functionality:
easy: 0 # Allow Hammer to damage ganon, Allow Hammer tablet collection, Allow swordless medallion use everywhere.
normal: 50 # Vanilla item functionality
@@ -212,9 +211,15 @@ beemizer: # Remove items from the global item pool and replace them with single
2: 0 # 60% of the non-essential item pool is replaced with bee traps, of which 20% could be single bees
3: 0 # 100% of the non-essential item pool is replaced with bee traps, of which 50% could be single bees
4: 0 # 100% of the non-essential item pool is replaced with bee traps
+### Item Shuffle (shop)
+shop_shuffle_slots: # Maximum amount of allowed shop slots to place item pool items
+ 0: 50
+ 5: 0
+ 15: 0
+ 999: 0
shop_shuffle:
none: 50
- i: 0 # Shuffle the inventories of the shops around
+ i: 0 # Shuffle default inventories of the shops around
p: 0 # Randomize the prices of the items in shop inventories
u: 0 # Shuffle capacity upgrades into the item pool (and allow them to traverse the multiworld)
ip: 0 # Shuffle inventories and randomize prices
@@ -232,6 +237,22 @@ timer:
ohko: 0 # Timer always at zero. Permanent OHKO.
timed_countdown: 0 # Starts the clock with forty minutes. Same clocks as timed mode, but if the clock hits zero you lose. You can still keep playing, though.
display: 0 # Displays a timer, but otherwise does not affect gameplay or the item pool.
+countdown_start_time: # For timed_ohko and timed_countdown timer modes, the amount of time in minutes to start with
+ 0: 0 # For timed_ohko, starts in OHKO mode when starting the game
+ 10: 50
+ 20: 0
+ 30: 0
+ 60: 0
+red_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a red clock
+ -2: 50
+ 1: 0
+blue_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a blue clock
+ 1: 0
+ 2: 50
+green_clock_time: # For all timer modes, the amount of time in minutes to gain or lose when picking up a green clock
+ 4: 50
+ 10: 0
+ 15: 0
# Can be uncommented to use it
# local_items: # Force certain items to appear in your world only, not across the multiworld. Recognizes some group names, like "Swords"
# - "Moon Pearl"
@@ -289,8 +310,11 @@ intensity: # Only available if the host uses the doors branch, it is ignored oth
2: 0 # And shuffles open edges and straight staircases
3: 0 # And shuffles dungeon lobbies
random: 0 # Picks one of those at random
+key_drop_shuffle: # Only available if the host uses the doors branch, it is ignored otherwise
+ on: 0 # Enables the small keys dropped by enemies or under pots, and the big key dropped by the Ball & Chain guard to be shuffled into the pool. This extends the number of checks to 249.
+ off: 50
experimental: # Only available if the host uses the doors branch, it is ignored otherwise
- on: 0 # Enables experimental features. Currently, this is just the dungeon keys in chest counter.
+ on: 0 # Enables experimental features.
off: 50
debug: # Only available if the host uses the doors branch, it is ignored otherwise
on: 0 # Enables debugging features. Currently, these are the Item collection counter. (overwrites total triforce pieces) and Castle Gate closed indicator.
@@ -367,8 +391,8 @@ rom:
off: 0
ow_palettes: # Change the colors of the overworld
default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
+ random: 0 # Shuffle the colors, with harmony in mind
+ blackout: 0 # everything black / blind mode
grayscale: 0
negative: 0
classic: 0
@@ -377,8 +401,8 @@ rom:
puke: 0
uw_palettes: # Change the colors of caves and dungeons
default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
+ random: 0 # Shuffle the colors, with harmony in mind
+ blackout: 0 # everything black / blind mode
grayscale: 0
negative: 0
classic: 0
@@ -387,8 +411,8 @@ rom:
puke: 0
hud_palettes: # Change the colors of the hud
default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
+ random: 0 # Shuffle the colors, with harmony in mind
+ blackout: 0 # everything black / blind mode
grayscale: 0
negative: 0
classic: 0
@@ -397,18 +421,18 @@ rom:
puke: 0
sword_palettes: # Change the colors of swords
default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
+ random: 0 # Shuffle the colors, with harmony in mind
+ blackout: 0 # everything black / blind mode
grayscale: 0
negative: 0
classic: 0
dizzy: 0
sick: 0
puke: 0
- uw_palettes: # Change the colors of shields
+ shield_palettes: # Change the colors of shields
default: 50 # No changes
- random: 0 # Shuffle the colors
- blackout: 0 # Never use this
+ random: 0 # Shuffle the colors, with harmony in mind
+ blackout: 0 # everything black / blind mode
grayscale: 0
negative: 0
classic: 0
diff --git a/setup.py b/setup.py
index f2cf42c5..80ad9064 100644
--- a/setup.py
+++ b/setup.py
@@ -128,6 +128,9 @@ else:
qusb2sneslog = buildfolder / "QUsb2Snes" / "log.txt"
if os.path.exists(qusb2sneslog):
os.remove(qusb2sneslog)
+qusb2snesconfig = buildfolder / "QUsb2Snes" / "config.ini"
+if os.path.exists(qusb2snesconfig):
+ os.remove(qusb2snesconfig)
if signtool:
for exe in exes: