Berserker's Multiworld
======================

A Multiworld implementation for the Legend of Zelda: A Link to the Past Randomizer.  
For setup and instructions there's a [Wiki](https://github.com/Berserker66/MultiWorld-Utilities/wiki).  
Downloads can be found at [Releases](https://github.com/Berserker66/MultiWorld-Utilities/releases), including compiled windows binaries.  

Additions/Changes compared to Bonta's V31
-----------------

Project
 * Available in precompiled form and guided setup for Windows 64Bit on the [Releases](https://github.com/Berserker66/MultiWorld-Utilities/releases) page
 * Compatible with Python 3.7 and 3.8. Forward Checks for Python 4.0 are done
 * Update modules if they are too old to prevent crashes and other possible issues.
 * Autoinstall missing modules
 * Allow newer versions of modules than specified, as they will *usually* not break compatibility
 * Uses "V32" MSU
 * Has support for binary patching to allow legal distribution of multiworld rom files
 * Various performance improvements (over 100% faster in most cases)
 * Various fixes
 * Overworld Glitches Logic
 * Newer Entrance Randomizer Logic, allowing more potential item and boss locations
 * New Goal: local triforce hunt - Keeps triforce pieces local to your world
 
MultiMystery.py
 * Allows you to generate a Multiworld with individual player mystery weights. Since weights can also be set to 100%, this also allows for individual settings for each player in a regular multiworld.
Basis is a .yaml file that sets these weights. You can find an [playerSettings.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/playerSettings.yaml) in this project folder to get started
 * Additional instructions are at the start of the file. Open with a text editor
 * Configuration options can be found in the [host.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/host.yaml) file
 * Allows a new Mode called "Meta-Mystery", allowing certain mystery settings to apply to all players
   * For example, everyone gets the same but random goal
 
 MultiServer.py
  * Supports automatic port-forwarding, can be enabled in [host.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/host.yaml)
  * Added commands `/hint` and `!hint`. See [host.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/host.yaml) for more information
  * Updates have been made to the following commands:
    * `!players` now displays the number of connected players, expected total player count, and which players are missing
    * `forfeit` now works when a player is no longer connected
    * `/send`, `/hint`, and various other commands now use "fuzzy text matching". It is no longer required to enter a location, player name or item name perfectly
  * Some item groups also exist, so `/hint Bottles` lists all bottle varieties

Mystery.py
 * Defaults to generating a non-race ROM (Bonta's only makes race ROMs at this time).
If a race ROM is desired, pass --create-race as argument to it
 * When an error is generated due to a broken .yaml file, it now mentions in the error trace which file, line, and character is the culprit
 * Option for progressive items, allowing you to turn them off (see [playerSettings.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/playerSettings.yaml) for more information)
 * Option for "timer", allows you to configure a timer to display in game and/or options for timed one hit knock out
 * Option for "dungeon_counters", allowing you to configure the dungeon item counter
 * Option for "glitch_boots", allowing to run glitched modes without automatic boots
 * Supports new Meta-Mystery mode. Read [meta.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/meta.yaml) for details.
 * Added `dungeonssimple` and `dungeonsfull` entrance randomizer modes
 * Option for local items, allowing certain items to appear in your world only and not in other players' worlds
 * Option for linked options
 * Added 'l' to dungeon_items to have a local-world keysanity
 
MultiClient.py
 * Has a Webbrowser based UI now
 * Awaits a QUsb2Snes connection when started, latching on when available
 * Completely redesigned command interface, with `!help` and `/help`
 * Running it with a patch file will patch out the multiworld rom and then automatically connect to the host that created the multiworld
 * Cheating is now controlled by the server and can be disabled in [host.yaml](https://github.com/Berserker66/MultiWorld-Utilities/blob/master/host.yaml)
 * Automatically starts QUsb2Snes, if it isn't running
 * Better reconnect to both snes and server
