about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Archipelago/client.gd26
-rw-r--r--Archipelago/settings_screen.gd1
-rw-r--r--Archipelago/teleport.gd24
-rw-r--r--util/generate_gamedata.rb24
4 files changed, 75 insertions, 0 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 3541016..db79e15 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -62,6 +62,15 @@ const progressive_items = {
62 {"item": "The Colorful - Green Door", "display": "Green"}, 62 {"item": "The Colorful - Green Door", "display": "Green"},
63 {"item": "The Colorful - Brown Door", "display": "Brown"}, 63 {"item": "The Colorful - Brown Door", "display": "Brown"},
64 {"item": "The Colorful - Gray Door", "display": "Gray"}, 64 {"item": "The Colorful - Gray Door", "display": "Gray"},
65 ],
66 "Progressive Pilgrimage":
67 [
68 {"item": "Hub Room - 1 Sunwarp", "display": "1 Sunwarp"},
69 {"item": "Orange Tower Fourth Floor - 2 Sunwarp", "display": "2 Sunwarp"},
70 {"item": "Orange Tower Third Floor - 3 Sunwarp", "display": "3 Sunwarp"},
71 {"item": "Orange Tower First Floor - 4 Sunwarp", "display": "4 Sunwarp"},
72 {"item": "Orange Tower Fourth Floor - 5 Sunwarp", "display": "5 Sunwarp"},
73 {"item": "Outside The Agreeable - 6 Sunwarp", "display": "6 Sunwarp"},
65 ] 74 ]
66} 75}
67 76
@@ -80,6 +89,11 @@ const kCLASSIFICATION_REMOTE_NORMAL = 0
80const kCLASSIFICATION_REMOTE_REDUCED = 1 89const kCLASSIFICATION_REMOTE_REDUCED = 1
81const kCLASSIFICATION_REMOTE_INSANITY = 2 90const kCLASSIFICATION_REMOTE_INSANITY = 2
82 91
92const kSUNWARP_ACCESS_NORMAL = 0
93const kSUNWARP_ACCESS_DISABLED = 1
94const kSUNWARP_ACCESS_UNLOCK = 2
95const kSUNWARP_ACCESS_PROGRESSIVE = 3
96
83var _client = WebSocketClient.new() 97var _client = WebSocketClient.new()
84var _should_process = false 98var _should_process = false
85var _initiated_disconnect = false 99var _initiated_disconnect = false
@@ -111,6 +125,7 @@ var _door_shuffle = false
111var _color_shuffle = false 125var _color_shuffle = false
112var _panel_shuffle = 0 # none, rearrange 126var _panel_shuffle = 0 # none, rearrange
113var _painting_shuffle = false 127var _painting_shuffle = false
128var _sunwarp_access = 0 # normal, disabled, unlock, progressive
114var _mastery_achievements = 21 129var _mastery_achievements = 21
115var _level_2_requirement = 223 130var _level_2_requirement = 223
116var _location_classification_bit = 0 131var _location_classification_bit = 0
@@ -276,6 +291,8 @@ func _on_data():
276 _painting_shuffle = _slot_data["shuffle_paintings"] 291 _painting_shuffle = _slot_data["shuffle_paintings"]
277 if _slot_data.has("shuffle_panels"): 292 if _slot_data.has("shuffle_panels"):
278 _panel_shuffle = _slot_data["shuffle_panels"] 293 _panel_shuffle = _slot_data["shuffle_panels"]
294 if _slot_data.has("sunwarp_access"):
295 _sunwarp_access = _slot_data["sunwarp_access"]
279 if _slot_data.has("seed"): 296 if _slot_data.has("seed"):
280 _slot_seed = _slot_data["seed"] 297 _slot_seed = _slot_data["seed"]
281 if _slot_data.has("painting_entrance_to_exit"): 298 if _slot_data.has("painting_entrance_to_exit"):
@@ -632,6 +649,11 @@ func processItem(item, index, from, flags):
632 painting_node = fake_parent_node.get_node_or_null(painting_id) 649 painting_node = fake_parent_node.get_node_or_null(painting_id)
633 if painting_node != null: 650 if painting_node != null:
634 painting_node.get_node("Script").movePainting() 651 painting_node.get_node("Script").movePainting()
652
653 if gamedata.warp_ids_by_item_id.has(int(item)):
654 var warpsNode = get_tree().get_root().get_node("Spatial/Warps")
655 for warp_id in gamedata.warp_ids_by_item_id[int(item)]:
656 warpsNode.get_node(warp_id).unlock_warp()
635 657
636 # Handle progressive items. 658 # Handle progressive items.
637 if item_name in progressive_items.keys(): 659 if item_name in progressive_items.keys():
@@ -693,6 +715,10 @@ func paintingIsVanilla(painting):
693 return !$Gamedata.mentioned_paintings.has(painting) 715 return !$Gamedata.mentioned_paintings.has(painting)
694 716
695 717
718func warpIsVanilla(warp):
719 return !$Gamedata.mentioned_warps.has(warp)
720
721
696func evaluateSolvability(): 722func evaluateSolvability():
697 emit_signal("evaluate_solvability") 723 emit_signal("evaluate_solvability")
698 724
diff --git a/Archipelago/settings_screen.gd b/Archipelago/settings_screen.gd index 2cabe09..0ae218e 100644 --- a/Archipelago/settings_screen.gd +++ b/Archipelago/settings_screen.gd
@@ -46,6 +46,7 @@ func _ready():
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panelInput.gd")) 46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panelInput.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pause_menu.gd")) 47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pause_menu.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) 48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldTransporter.gd")) 50 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldTransporter.gd"))
50 51
51 var apclient = global.get_node("Archipelago") 52 var apclient = global.get_node("Archipelago")
diff --git a/Archipelago/teleport.gd b/Archipelago/teleport.gd new file mode 100644 index 0000000..d322722 --- /dev/null +++ b/Archipelago/teleport.gd
@@ -0,0 +1,24 @@
1extends "res://scripts/teleport.gd"
2
3var _unlocked = true
4
5
6func _ready():
7 var apclient = global.get_node("Archipelago")
8 if apclient._door_shuffle and !apclient.warpIsVanilla(self.get_parent().name + "/" + self.name):
9 if self.get_parent().name == "Teleporter Warps":
10 if apclient._sunwarp_access != apclient.kSUNWARP_ACCESS_NORMAL:
11 _unlocked = false
12 else:
13 _unlocked = false
14
15 ._ready()
16
17
18func _body_entered(var body):
19 if _unlocked:
20 ._body_entered(body)
21
22
23func unlock_warp():
24 _unlocked = true
diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb index 5e03655..1cce003 100644 --- a/util/generate_gamedata.rb +++ b/util/generate_gamedata.rb
@@ -15,10 +15,12 @@ door_groups = {}
15panel_output = [] 15panel_output = []
16door_ids_by_item_id = {} 16door_ids_by_item_id = {}
17painting_ids_by_item_id = {} 17painting_ids_by_item_id = {}
18warp_ids_by_item_id = {}
18panel_ids_by_location_id = {} 19panel_ids_by_location_id = {}
19classification_by_location_id = {} 20classification_by_location_id = {}
20mentioned_doors = Set[] 21mentioned_doors = Set[]
21mentioned_paintings = Set[] 22mentioned_paintings = Set[]
23mentioned_warps = Set[]
22painting_output = {} 24painting_output = {}
23 25
24ids_config = YAML.load_file(idspath) 26ids_config = YAML.load_file(idspath)
@@ -152,6 +154,18 @@ config.each do |room_name, room_data|
152 painting_ids_by_item_id[item_id] = internal_painting_ids 154 painting_ids_by_item_id[item_id] = internal_painting_ids
153 mentioned_paintings.merge(internal_painting_ids) 155 mentioned_paintings.merge(internal_painting_ids)
154 end 156 end
157
158 if door.include? "warp_id"
159 internal_warp_ids = []
160 if door["warp_id"].kind_of? String
161 internal_warp_ids = [door["warp_id"]]
162 else
163 internal_warp_ids = door["warp_id"]
164 end
165
166 warp_ids_by_item_id[item_id] = internal_warp_ids
167 mentioned_warps.merge(internal_warp_ids)
168 end
155 end 169 end
156 end 170 end
157 end 171 end
@@ -181,6 +195,12 @@ File.open(outputpath, "w") do |f|
181 "\"#{painting_id}\"" 195 "\"#{painting_id}\""
182 end.join(",") + "]" 196 end.join(",") + "]"
183 end.join(",")) 197 end.join(","))
198 f.write "}\nvar warp_ids_by_item_id = {"
199 f.write(warp_ids_by_item_id.map do |item_id, warp_ids|
200 "#{item_id}:[" + warp_ids.map do |warp_id|
201 "\"#{warp_id}\""
202 end.join(",") + "]"
203 end.join(","))
184 f.write "}\nvar panel_ids_by_location_id = {" 204 f.write "}\nvar panel_ids_by_location_id = {"
185 f.write(panel_ids_by_location_id.map do |location_id, panel_ids| 205 f.write(panel_ids_by_location_id.map do |location_id, panel_ids|
186 "#{location_id}:[" + panel_ids.map do |panel_id| 206 "#{location_id}:[" + panel_ids.map do |panel_id|
@@ -195,6 +215,10 @@ File.open(outputpath, "w") do |f|
195 f.write(mentioned_paintings.map do |painting_id| 215 f.write(mentioned_paintings.map do |painting_id|
196 "\"#{painting_id}\"" 216 "\"#{painting_id}\""
197 end.join(",")) 217 end.join(","))
218 f.write "]\nvar mentioned_warps = ["
219 f.write(mentioned_warps.map do |warp_id|
220 "\"#{warp_id}\""
221 end.join(","))
198 f.write "]\nvar paintings = {" 222 f.write "]\nvar paintings = {"
199 f.write(painting_output.map do |painting_id, painting| 223 f.write(painting_output.map do |painting_id, painting|
200 "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}" 224 "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}"