diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2024-12-08 16:14:53 -0500 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2024-12-08 16:14:53 -0500 |
| commit | 84f4fc2db8b7ada36faa5341cb7bee17750f1a07 (patch) | |
| tree | e2f05a7dd4e7fe5aa54ea304f8b8de9f5664ba3c | |
| parent | 4b53c8858448e4fc835c907813632f6eeddd543d (diff) | |
| download | lingo-archipelago-84f4fc2db8b7ada36faa5341cb7bee17750f1a07.tar.gz lingo-archipelago-84f4fc2db8b7ada36faa5341cb7bee17750f1a07.tar.bz2 lingo-archipelago-84f4fc2db8b7ada36faa5341cb7bee17750f1a07.zip | |
Add workaround for 0.5.1 number hunt logic bug
| -rw-r--r-- | Archipelago/client.gd | 16 | ||||
| -rw-r--r-- | Archipelago/extradata.gd | 84 | ||||
| -rw-r--r-- | Archipelago/load.gd | 14 |
3 files changed, 113 insertions, 1 deletions
| diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 8f9d3e0..99be37a 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd | |||
| @@ -779,8 +779,14 @@ func processItem(item, index, from, flags): | |||
| 779 | doorsNode.get_node(door_id).openDoor() | 779 | doorsNode.get_node(door_id).openDoor() |
| 780 | 780 | ||
| 781 | if gamedata.panel_ids_by_item_id.has(int(item)): | 781 | if gamedata.panel_ids_by_item_id.has(int(item)): |
| 782 | var panel_ids = gamedata.panel_ids_by_item_id[int(item)] | ||
| 783 | if wasGeneratedOnVersion(0, 5, 1): | ||
| 784 | var extradata = get_node("Extradata") | ||
| 785 | if extradata.panels_mode_051_panel_fixes.has(int(item)): | ||
| 786 | panel_ids = extradata.panels_mode_051_panel_fixes[int(item)] | ||
| 787 | |||
| 782 | var panelsNode = get_tree().get_root().get_node("Spatial/Panels") | 788 | var panelsNode = get_tree().get_root().get_node("Spatial/Panels") |
| 783 | for panel_id in gamedata.panel_ids_by_item_id[int(item)]: | 789 | for panel_id in panel_ids: |
| 784 | panelsNode.get_node(panel_id).get_node("AP_Panel").locked = false | 790 | panelsNode.get_node(panel_id).get_node("AP_Panel").locked = false |
| 785 | emit_signal("evaluate_solvability") | 791 | emit_signal("evaluate_solvability") |
| 786 | 792 | ||
| @@ -990,3 +996,11 @@ func compareVersion(lhs, rhs): | |||
| 990 | 996 | ||
| 991 | func wasGeneratedBeforeVersion(major, minor, build): | 997 | func wasGeneratedBeforeVersion(major, minor, build): |
| 992 | return compareVersion(_gen_version, {"major": major, "minor": minor, "build": build}) | 998 | return compareVersion(_gen_version, {"major": major, "minor": minor, "build": build}) |
| 999 | |||
| 1000 | |||
| 1001 | func wasGeneratedOnVersion(major, minor, build): | ||
| 1002 | return ( | ||
| 1003 | _gen_version["major"] == major | ||
| 1004 | and _gen_version["minor"] == minor | ||
| 1005 | and _gen_version["build"] == build | ||
| 1006 | ) | ||
| diff --git a/Archipelago/extradata.gd b/Archipelago/extradata.gd index 89c41d2..2e26eb2 100644 --- a/Archipelago/extradata.gd +++ b/Archipelago/extradata.gd | |||
| @@ -93,3 +93,87 @@ var proxies = { | |||
| 93 | "Open Areas/Panel_rise_horizon": ["Open Areas/Panel_son_horizon"], | 93 | "Open Areas/Panel_rise_horizon": ["Open Areas/Panel_son_horizon"], |
| 94 | "Open Areas/Panel_son_sunrise": ["Open Areas/Panel_rise_sunrise"] | 94 | "Open Areas/Panel_son_sunrise": ["Open Areas/Panel_rise_sunrise"] |
| 95 | } | 95 | } |
| 96 | |||
| 97 | var panels_mode_051_panel_fixes = { | ||
| 98 | 444647: | ||
| 99 | [ | ||
| 100 | "Backside Room/Panel_three_three", | ||
| 101 | "Backside Room/Panel_three_three_2", | ||
| 102 | "Backside Room/Panel_three_three_3", | ||
| 103 | "Backside Room/Panel_four_four_3", | ||
| 104 | "Backside Room/Panel_four_four_2", | ||
| 105 | "Backside Room/Panel_four_four_4" | ||
| 106 | ], | ||
| 107 | 444648: | ||
| 108 | [ | ||
| 109 | "Backside Room/Panel_four_four", | ||
| 110 | "Backside Room/Panel_five_five_5", | ||
| 111 | "Backside Room/Panel_five_five_4" | ||
| 112 | ], | ||
| 113 | 444649: | ||
| 114 | [ | ||
| 115 | "Backside Room/Panel_five_five", | ||
| 116 | "Backside Room/Panel_five_five_3", | ||
| 117 | "Backside Room/Panel_five_five_2", | ||
| 118 | "Backside Room/Panel_six_six_4" | ||
| 119 | ], | ||
| 120 | 444650: | ||
| 121 | [ | ||
| 122 | "Backside Room/Panel_six_six", | ||
| 123 | "Backside Room/Panel_six_six_3", | ||
| 124 | "Backside Room/Panel_six_six_2", | ||
| 125 | "Backside Room/Panel_six_six_5", | ||
| 126 | "Backside Room/Panel_six_six_6", | ||
| 127 | "Backside Room/Panel_seven_seven_5", | ||
| 128 | "Backside Room/Panel_seven_seven_6" | ||
| 129 | ], | ||
| 130 | 444651: | ||
| 131 | [ | ||
| 132 | "Backside Room/Panel_seven_seven", | ||
| 133 | "Backside Room/Panel_seven_seven_2", | ||
| 134 | "Backside Room/Panel_seven_seven_7", | ||
| 135 | "Backside Room/Panel_seven_seven_3", | ||
| 136 | "Backside Room/Panel_seven_seven_4", | ||
| 137 | "Backside Room/Panel_eight_eight_8", | ||
| 138 | "Backside Room/Panel_eight_eight_5", | ||
| 139 | "Backside Room/Panel_eight_eight_3", | ||
| 140 | "Backside Room/Panel_eight_eight_7" | ||
| 141 | ], | ||
| 142 | 444652: | ||
| 143 | [ | ||
| 144 | "Backside Room/Panel_eight_eight", | ||
| 145 | "Backside Room/Panel_eight_eight_2", | ||
| 146 | "Backside Room/Panel_eight_eight_4", | ||
| 147 | "Backside Room/Panel_eight_eight_6", | ||
| 148 | "Backside Room/Panel_nine_nine_3", | ||
| 149 | "Backside Room/Panel_nine_nine_8", | ||
| 150 | "Backside Room/Panel_nine_nine_4", | ||
| 151 | "Backside Room/Panel_nine_nine_5", | ||
| 152 | "Backside Room/Panel_nine_nine_2" | ||
| 153 | ], | ||
| 154 | 444653: | ||
| 155 | [ | ||
| 156 | "Backside Room/Panel_nine_nine", | ||
| 157 | "Backside Room/Panel_nine_nine_6", | ||
| 158 | "Backside Room/Panel_nine_nine_8", | ||
| 159 | "Backside Room/Panel_nine_nine_9", | ||
| 160 | "Backside Room/Panel_nine_nine_7" | ||
| 161 | ] | ||
| 162 | } | ||
| 163 | |||
| 164 | var panels_mode_051_door_fixes = { | ||
| 165 | "Door_four_hider": ["Door_four_hider_3", "Door_four_hider_4", "Door_four_hider_2"], | ||
| 166 | "Door_five_hider": ["Door_five_hider_4", "Door_five_hider_5"], | ||
| 167 | "Door_six_hider": ["Door_six_hider_4"], | ||
| 168 | "Door_seven_hider": ["Door_seven_hider_6", "Door_seven_hider_5"], | ||
| 169 | "Door_eight_hider": | ||
| 170 | ["Door_eight_hider_7", "Door_eight_hider_8", "Door_eight_hider_3", "Door_eight_hider_5"], | ||
| 171 | "Door_nine_hider": | ||
| 172 | [ | ||
| 173 | "Door_nine_hider_3", | ||
| 174 | "Door_nine_hider_8", | ||
| 175 | "Door_nine_hider_4", | ||
| 176 | "Door_nine_hider_5", | ||
| 177 | "Door_nine_hider_2" | ||
| 178 | ] | ||
| 179 | } | ||
| diff --git a/Archipelago/load.gd b/Archipelago/load.gd index 4811b47..e593548 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd | |||
| @@ -551,6 +551,20 @@ func _load(): | |||
| 551 | proxynode.exact_proxy = true | 551 | proxynode.exact_proxy = true |
| 552 | proxynode.request_ready() | 552 | proxynode.request_ready() |
| 553 | oldparent.add_child(proxynode) | 553 | oldparent.add_child(proxynode) |
| 554 | |||
| 555 | # If the world was generated on 0.5.1, apply the hotfix for the number hunt doors. | ||
| 556 | if apclient.wasGeneratedOnVersion(0, 5, 1): | ||
| 557 | var number_hunt_parent = get_node("Doors/Count Up Room Area Doors") | ||
| 558 | var extradata_051_fix = apclient.get_node("Extradata").panels_mode_051_door_fixes | ||
| 559 | for template_door_path in extradata_051_fix: | ||
| 560 | var template_door = number_hunt_parent.get_node(template_door_path) | ||
| 561 | var impacted_doors = extradata_051_fix[template_door_path] | ||
| 562 | for impacted_door_path in impacted_doors: | ||
| 563 | var impacted_door = number_hunt_parent.get_node(impacted_door_path) | ||
| 564 | var copied_door = impacted_door.duplicate() | ||
| 565 | copied_door.panels = template_door.panels | ||
| 566 | number_hunt_parent.add_child(copied_door) | ||
| 567 | impacted_door.queue_free() | ||
| 554 | 568 | ||
| 555 | # Attach a script to every panel so that we can do things like conditionally | 569 | # Attach a script to every panel so that we can do things like conditionally |
| 556 | # disable them. | 570 | # disable them. |
