From 26314f7c13a581e5ba9c80eb879e0eaada4243e1 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 17 Jan 2021 18:28:10 +0100 Subject: [PATCH] Document Connection Plando and show where Connection Plando Errors come from --- EntranceShuffle.py | 5 +- .../assets/tutorial/zelda3/plando_en.md | 95 ++++++++++++------- 2 files changed, 66 insertions(+), 34 deletions(-) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 96dfb583..f4c68d1c 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -2251,7 +2251,10 @@ def plando_connect(world, player: int): if world.plando_connections[player]: for connection in world.plando_connections[player]: func = lookup[connection.direction] - func(world, connection.entrance, connection.exit, player) + try: + func(world, connection.entrance, connection.exit, player) + except Exception as e: + raise Exception(f"Could not connect using {connection}") from e LW_Dungeon_Entrances = ['Desert Palace Entrance (South)', diff --git a/WebHostLib/static/assets/tutorial/zelda3/plando_en.md b/WebHostLib/static/assets/tutorial/zelda3/plando_en.md index 46713c0e..626485a9 100644 --- a/WebHostLib/static/assets/tutorial/zelda3/plando_en.md +++ b/WebHostLib/static/assets/tutorial/zelda3/plando_en.md @@ -18,17 +18,17 @@ it defaults to vanilla - Instructions are separated by a semicolon - Available Instructions: - - Direct Placement: - - Example: "Eastern Palace-Trinexx" - - Takes a particular Arena and particular boss, then places that boss into that arena - - Ganons Tower has 3 placements, "Ganons Tower Top", "Ganons Tower Middle" and "Ganons Tower Bottom" - - Boss Placement: - - Example: "Trinexx" - - Takes a particular boss and places that boss in any remaining slots in which this boss can function. - - In this example, it would fill Desert Palace, but not Tower of Hera. - - Boss Shuffle: - - Example: "simple" - - Runs a particular boss shuffle mode to finish construction instead of vanilla placement, typically used as a last instruction. + - Direct Placement: + - Example: "Eastern Palace-Trinexx" + - Takes a particular Arena and particular boss, then places that boss into that arena + - Ganons Tower has 3 placements, "Ganons Tower Top", "Ganons Tower Middle" and "Ganons Tower Bottom" + - Boss Placement: + - Example: "Trinexx" + - Takes a particular boss and places that boss in any remaining slots in which this boss can function. + - In this example, it would fill Desert Palace, but not Tower of Hera. + - Boss Shuffle: + - Example: "simple" + - Runs a particular boss shuffle mode to finish construction instead of vanilla placement, typically used as a last instruction. - [Available Bosses](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Bosses.py#L135) - [Available Arenas](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Bosses.py#L186) @@ -52,25 +52,25 @@ boss_shuffle: - Has the options from_pool, world, percentage and either item and location or items and locations - All of these options support subweights - percentage is the percentage chance for this block to trigger - - is a number in the range [0, 100], can be omitted entirely for 100% + - is a number in the range [0, 100], can be omitted entirely for 100% - from_pool denotes if the item should be taken from the item pool, or be an additional item entirely. - - can be true or false, defaults to true when omitted + - can be true or false, defaults to true when omitted - world is the target world to place the item - - ignored if only one world is generated - - can be a number, to target that slot in the multiworld - - can be a name, to target that player's world - - can be true, to target any other player's world - - can be false, to target own world - - can be null, to target a random world + - ignored if only one world is generated + - can be a number, to target that slot in the multiworld + - can be a name, to target that player's world + - can be true, to target any other player's world + - can be false, to target own world + - can be null, to target a random world - Single Placement - - place a single item at a single location - - item denotes the Item to place - - location denotes the Location to place it into + - place a single item at a single location + - item denotes the Item to place + - location denotes the Location to place it into - Multi Placement - - place multiple items into multiple locations, until either list is exhausted. - - items denotes the items to use, can be given a number to have multiple of that item - - locations lists the possible locations those items can be placed in - - placements are picked randomly, not sorted in any way + - place multiple items into multiple locations, until either list is exhausted. + - items denotes the items to use, can be given a number to have multiple of that item + - locations lists the possible locations those items can be placed in + - placements are picked randomly, not sorted in any way - [Available Items](https://github.com/Berserker66/MultiWorld-Utilities/blob/3b5ba161dea223b96e9b1fc890e03469d9c6eb59/Items.py#L26) - [Available Locations](https://github.com/Berserker66/MultiWorld-Utilities/blob/3b5ba161dea223b96e9b1fc890e03469d9c6eb59/Regions.py#L418) @@ -112,14 +112,14 @@ The second example always triggers and places the Swords and Bows into one's own - Has the options "text", "at" and "percentage" - percentage is the percentage chance for this text to be placed, can be omitted entirely for 100% - text is the text to be placed. - - can be weighted. - - \n is a newline. - - @ is the entered player's name. - - Warning: Text Mapper does not support full unicode. - - [Alphabet](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Text.py#L756) + - can be weighted. + - \n is a newline. + - @ is the entered player's name. + - Warning: Text Mapper does not support full unicode. + - [Alphabet](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Text.py#L756) - at is the location within the game to attach the text to. - - can be weighted. - - [List of targets](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Text.py#L1498) + - can be weighted. + - [List of targets](https://github.com/Berserker66/MultiWorld-Utilities/blob/65fa39df95c90c9b66141aee8b16b7e560d00819/Text.py#L1498) #### Example ```yaml @@ -134,3 +134,32 @@ plando_texts: This has a 50% chance to trigger at all, if it does, it throws a coin between "uncle_leaving_text" and "uncle_dying_sewer", then places the text "This is a plando.\nYou've been warned." at that location. + +### Connections +- This module is disabled by default. +- Has the options "percentage", "entrance", "exit" and "direction". +- All options support subweights +- percentage is the percentage chance for this to be connected, can be omitted entirely for 100% +- Any Door has 4 total directions, as a door can be unlinked like in insanity ER +- entrance is the overworld door +- exit is the underworld exit +- direction can be "both", "entrance" or "exit" +- doors can be found in [this file](https://github.com/Berserker66/MultiWorld-Utilities/blob/main/EntranceShuffle.py) + + +#### Example +```yaml +plando_connections: + - entrance: Links House + exit: Hyrule Castle Exit (West) + direction: both + - entrance: Hyrule Castle Entrance (West) + exit: Links House Exit + direction: both +``` + +The first block connects the overworld entrance that normally leads to Link's House +to put you into the HC West Wing instead, exiting from within there will put you at the Overworld exiting Link's House. + +Without the second block, you'd still exit from within Link's House to outside Link's House and the left side +Balcony Entrance would still lead into HC West Wing \ No newline at end of file