From 6c1dc5f645ad215347eaecc2a5f5de0d2fd13365 Mon Sep 17 00:00:00 2001 From: Mysteryem Date: Wed, 25 Dec 2024 01:44:47 +0000 Subject: [PATCH] Landstalker: Fix paths Lantern logic affecting other Landstalker worlds (#4394) The data from `WORLD_PATHS_JSON` is supposed to be constant logic data shared by all Landstalker worlds, but `add_path_requirements()` was modifying this data such that after adding a `Lantern` requirement for a dark region, subsequent Landstalker worlds to have their logic set could also be affected by this `Lantern` requirement and previous Landstalker worlds without damage boosting logic could also be affected by this `Lantern` requirement because they could all be using the same list instances. This issue would only occur for paths that have `"requiredItems"` because all paths without required items would create a new empty list, avoiding the problem. The items in `data["itemsPlacedWhenCrossing"]` were also getting added once for each Landstalker player, but there are no paths that have both `"itemsPlacedWhenCrossing"` and `"requiredItems"`, so all such cases would start from a new empty list of required items and avoid modifying `WORLD_PATHS_JSON`. --- worlds/landstalker/Rules.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/worlds/landstalker/Rules.py b/worlds/landstalker/Rules.py index 94171944..60f4cdde 100644 --- a/worlds/landstalker/Rules.py +++ b/worlds/landstalker/Rules.py @@ -37,7 +37,8 @@ def add_path_requirements(world: "LandstalkerWorld"): name = data["fromId"] + " -> " + data["toId"] # Determine required items to reach this region - required_items = data["requiredItems"] if "requiredItems" in data else [] + # WORLD_PATHS_JSON is shared by all Landstalker worlds, so a copy is made to prevent modifying the original + required_items = data["requiredItems"].copy() if "requiredItems" in data else [] if "itemsPlacedWhenCrossing" in data: required_items += data["itemsPlacedWhenCrossing"]