Fork of Archipelago Multi-Game Randomizer and Server that runs on https://ap.hollymcfarland.com
Go to file
Fabian Dill 96d544ac84 Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists
In some cases multi-thousand element lists were created in-memory with near identical contents, per player, then discarded and reassembled.
Was testing against a case with 3 GB of additional memory use (50 players) which appeared to get stuck, but really was just very slow. This example case is fixed with these changes.
Additionally, progression balancing is now run after ShopSlotFill, so it is now "aware" of the changed progression shops can produce.
As well, special handling for keys was removed, as not all games will have the notion of keys.
2021-02-05 08:07:12 +01:00
.github run unittests on all branches 2020-12-20 04:17:42 +01:00
WebHostLib Remove outdated warning about QUsb2Snes version 2021-02-03 23:15:09 -05:00
data Merge branch 'inverted_flut' into main 2021-02-03 06:43:41 -08:00
test new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
.gitignore Add /output and /Output Logs to .gitignore 2020-12-06 11:28:20 -05:00
Adjuster.py add never adjust answer to client 2020-11-11 13:15:35 +01:00
AdjusterMain.py comment out remaining link palette shuffle references 2020-11-06 08:31:10 +01:00
BaseClasses.py Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists 2021-02-05 08:07:12 +01:00
Bosses.py revert boss placement logging to debug 2020-12-31 13:25:14 +01:00
Dungeons.py Remove all uses of "item.priority" as the remaining fill algorithms don't need it anymore. 2021-01-30 09:57:25 +01:00
ER_hint_reference.txt Replace keysanity with map/compass/key/bk shuffle 2019-12-13 22:37:52 +01:00
EntranceRandomizer.py Implement open_pyramid yaml settings 2021-01-29 13:27:42 -08:00
EntranceShuffle.py Document Connection Plando 2021-01-17 18:28:10 +01:00
Fill.py Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists 2021-02-05 08:07:12 +01:00
Gui.py Implement open_pyramid yaml settings 2021-01-29 13:27:42 -08:00
GuiUtils.py Allow just updating sprites and remove old alternate sprite folder 2020-11-11 13:45:21 +01:00
InvertedRegions.py new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
ItemPool.py new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
Items.py new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
LICENSE Update timestamp of own rights 2021-02-02 19:07:02 -08:00
Main.py Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists 2021-02-05 08:07:12 +01:00
ModuleUpdate.py integrate maseya-z3pr palette shuffle 2020-08-23 12:06:00 +02:00
MultiClient.py Update WebUI to show unique items as a different color, and with a drop-shadow 2021-02-02 22:58:22 -05:00
MultiMystery.py Item Plando Support 2021-01-02 12:49:43 +01:00
MultiServer.py update item table offsets 2021-01-30 23:40:01 +01:00
Mystery.py Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists 2021-02-05 08:07:12 +01:00
NetUtils.py Convert WebUI to logging.Handler subclass 2021-01-19 06:37:35 +01:00
Options.py Skeleton of new Options module 2020-03-18 16:15:32 +01:00
OverworldGlitchRules.py Fix bunny glitch rules for Tower of Hera (requires a sword to hit the switch) and Mini Moldorm Cave (pits prevent clearing in superbunny state) 2020-07-12 20:05:18 +10:00
Patch.py WebHost: Add youtube livestreaming and autogenerated multistream link 2020-07-25 22:40:24 +02:00
README.md rename easy.yaml -> playerSettings.yaml in README.md 2020-08-23 11:38:13 +02:00
Regions.py new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
Rom.py put that sign back where i found it 2021-02-02 21:48:08 -06:00
Rules.py new inverted logic, accounting for dark world flute activation 2021-02-02 11:24:17 +01:00
Shops.py Some Shop fixes: 2021-02-03 14:24:29 +01:00
Text.py Fix one text target misspelling. 2021-01-26 01:36:24 +01:00
Utils.py Mark Advancement items in the client 2021-02-03 03:19:25 +01:00
WebHost.py WebHost: Move module into WebHostLib to prevent shadowing WebHost.py 2020-07-11 16:59:37 +02:00
WebUI.py Update WebUI to show unique items as a different color, and with a drop-shadow 2021-02-02 22:58:22 -05:00
_config.yml Set theme jekyll-theme-slate 2020-06-19 03:22:27 +02:00
dumpSprites.py re-export spriteData 2020-12-06 17:12:41 +01:00
host.yaml Added hash/inverted sign message 2021-01-31 20:57:18 -06:00
icon.ico update icon 2020-12-06 14:36:14 +01:00
inno_setup_38.iss add python 3.8 setup 2020-12-09 20:27:59 +01:00
inno_setup_39.iss add python 3.8 setup 2020-12-09 20:27:59 +01:00
meta.yaml update meta.yaml 2020-11-14 19:56:40 +01:00
playerSettings.yaml Updated weighted settings to reflect new beemizer documentation and include pyramid_open options 2021-01-30 19:03:54 -05:00
pytest.ini use pytest for github unittests 2020-04-29 18:44:03 +02:00
requirements.txt fix PyYAML version name to not trigger module updater 2021-01-20 03:18:46 +01:00
setup.py update icon 2020-12-06 14:36:14 +01:00

README.md

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.
Downloads can be found at 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 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 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 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
  • Added commands /hint and !hint. See 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 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 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
  • Automatically starts QUsb2Snes, if it isn't running
  • Better reconnect to both snes and server