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. |