about summary refs log tree commit diff stats
path: root/client/Archipelago
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago')
-rw-r--r--client/Archipelago/manager.gd13
-rw-r--r--client/Archipelago/settings_screen.gd37
-rw-r--r--client/Archipelago/teleport.gd38
3 files changed, 87 insertions, 1 deletions
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 25f68c1..8a15728 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd
@@ -1,6 +1,6 @@
1extends Node 1extends Node
2 2
3const MOD_VERSION = 1 3const MOD_VERSION = 2
4 4
5var SCRIPT_client 5var SCRIPT_client
6var SCRIPT_keyboard 6var SCRIPT_keyboard
@@ -41,11 +41,13 @@ const kCYAN_DOOR_BEHAVIOR_H2 = 0
41const kCYAN_DOOR_BEHAVIOR_DOUBLE_LETTER = 1 41const kCYAN_DOOR_BEHAVIOR_DOUBLE_LETTER = 1
42const kCYAN_DOOR_BEHAVIOR_ITEM = 2 42const kCYAN_DOOR_BEHAVIOR_ITEM = 2
43 43
44var apworld_version = [0, 0]
44var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 45var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2
45var daedalus_roof_access = false 46var daedalus_roof_access = false
46var keyholder_sanity = false 47var keyholder_sanity = false
47var shuffle_control_center_colors = false 48var shuffle_control_center_colors = false
48var shuffle_doors = false 49var shuffle_doors = false
50var shuffle_gallery_paintings = false
49var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 51var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
50var shuffle_symbols = false 52var shuffle_symbols = false
51var victory_condition = -1 53var victory_condition = -1
@@ -361,10 +363,14 @@ func _client_connected(slot_data):
361 keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) 363 keyholder_sanity = bool(slot_data.get("keyholder_sanity", false))
362 shuffle_control_center_colors = bool(slot_data.get("shuffle_control_center_colors", false)) 364 shuffle_control_center_colors = bool(slot_data.get("shuffle_control_center_colors", false))
363 shuffle_doors = bool(slot_data.get("shuffle_doors", false)) 365 shuffle_doors = bool(slot_data.get("shuffle_doors", false))
366 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false))
364 shuffle_letters = int(slot_data.get("shuffle_letters", 0)) 367 shuffle_letters = int(slot_data.get("shuffle_letters", 0))
365 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) 368 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false))
366 victory_condition = int(slot_data.get("victory_condition", 0)) 369 victory_condition = int(slot_data.get("victory_condition", 0))
367 370
371 if slot_data.has("version"):
372 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])]
373
368 # Set up item locks. 374 # Set up item locks.
369 _item_locks = {} 375 _item_locks = {}
370 376
@@ -399,6 +405,11 @@ func _client_connected(slot_data):
399 for door in door_group.get_doors(): 405 for door in door_group.get_doors():
400 _item_locks[door] = [door_group.get_ap_id(), 1] 406 _item_locks[door] = [door_group.get_ap_id(), 1]
401 407
408 if shuffle_gallery_paintings:
409 for door in gamedata.objects.get_doors():
410 if door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING:
411 _item_locks[door.get_id()] = [door.get_ap_id(), 1]
412
402 if cyan_door_behavior == kCYAN_DOOR_BEHAVIOR_ITEM: 413 if cyan_door_behavior == kCYAN_DOOR_BEHAVIOR_ITEM:
403 for door_group in gamedata.objects.get_door_groups(): 414 for door_group in gamedata.objects.get_door_groups():
404 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CYAN_DOORS: 415 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CYAN_DOORS:
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index ff6f9df..14975e5 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd
@@ -44,6 +44,7 @@ func _ready():
44 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd")) 44 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd"))
45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) 45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd")) 46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd")) 48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd")) 49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd")) 50 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd"))
@@ -99,6 +100,10 @@ func _ready():
99 $Panel/player_box.add_theme_font_size_override("font_size", 36) 100 $Panel/player_box.add_theme_font_size_override("font_size", 36)
100 $Panel/password_box.add_theme_font_size_override("font_size", 36) 101 $Panel/password_box.add_theme_font_size_override("font_size", 36)
101 102
103 # Set up version mismatch dialog.
104 $Panel/VersionMismatch.connect("confirmed", startGame)
105 $Panel/VersionMismatch.get_cancel_button().pressed.connect(versionMismatchDeclined)
106
102 107
103# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd 108# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd
104func installScriptExtension(childScript: Resource): 109func installScriptExtension(childScript: Resource):
@@ -128,6 +133,33 @@ func connectionStatus(message):
128 133
129func connectionSuccessful(): 134func connectionSuccessful():
130 var ap = global.get_node("Archipelago") 135 var ap = global.get_node("Archipelago")
136 var gamedata = global.get_node("Gamedata")
137
138 # Check for major version mismatch.
139 if ap.apworld_version[0] != gamedata.objects.get_version():
140 $Panel/AcceptDialog.exclusive = false
141
142 var popup = self.get_node("Panel/VersionMismatch")
143 popup.title = "Version Mismatch!"
144 popup.dialog_text = (
145 "This slot was generated using v%d.%d of the Lingo 2 apworld,\nwhich has a different major version than this client (v%d.%d).\nIt is highly recommended to play using the correct version of the client.\nYou may experience bugs or logic issues if you continue."
146 % [
147 ap.apworld_version[0],
148 ap.apworld_version[1],
149 gamedata.objects.get_version(),
150 ap.MOD_VERSION
151 ]
152 )
153 popup.exclusive = true
154 popup.popup_centered()
155
156 return
157
158 startGame()
159
160
161func startGame():
162 var ap = global.get_node("Archipelago")
131 163
132 # Save connection details 164 # Save connection details
133 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass] 165 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass]
@@ -166,6 +198,7 @@ func connectionSuccessful():
166 clearResourceCache("res://objects/nodes/panel.tscn") 198 clearResourceCache("res://objects/nodes/panel.tscn")
167 clearResourceCache("res://objects/nodes/player.tscn") 199 clearResourceCache("res://objects/nodes/player.tscn")
168 clearResourceCache("res://objects/nodes/saver.tscn") 200 clearResourceCache("res://objects/nodes/saver.tscn")
201 clearResourceCache("res://objects/nodes/teleport.tscn")
169 clearResourceCache("res://objects/scenes/menus/pause_menu.tscn") 202 clearResourceCache("res://objects/scenes/menus/pause_menu.tscn")
170 203
171 var paintings_dir = DirAccess.open("res://objects/meshes/paintings") 204 var paintings_dir = DirAccess.open("res://objects/meshes/paintings")
@@ -191,6 +224,10 @@ func connectionUnsuccessful(error_message):
191 popup.popup_centered() 224 popup.popup_centered()
192 225
193 226
227func versionMismatchDeclined():
228 $Panel/AcceptDialog.hide()
229
230
194func historySelected(index): 231func historySelected(index):
195 var ap = global.get_node("Archipelago") 232 var ap = global.get_node("Archipelago")
196 var details = ap.connection_history[index] 233 var details = ap.connection_history[index]
diff --git a/client/Archipelago/teleport.gd b/client/Archipelago/teleport.gd new file mode 100644 index 0000000..428d50b --- /dev/null +++ b/client/Archipelago/teleport.gd
@@ -0,0 +1,38 @@
1extends "res://scripts/nodes/teleport.gd"
2
3var item_id
4var item_amount
5
6
7func _ready():
8 var node_path = String(
9 get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names()
10 )
11
12 var gamedata = global.get_node("Gamedata")
13 var door_id = gamedata.get_door_for_map_node_path(global.map, node_path)
14 if door_id != null:
15 var ap = global.get_node("Archipelago")
16 var item_lock = ap.get_item_id_for_door(door_id)
17
18 if item_lock != null:
19 item_id = item_lock[0]
20 item_amount = item_lock[1]
21
22 self.senders = []
23 self.senderGroup = []
24 self.nested = false
25 self.complete_at = 0
26 self.max_length = 0
27 self.excludeSenders = []
28
29 call_deferred("_readier")
30
31 super._ready()
32
33
34func _readier():
35 var ap = global.get_node("Archipelago")
36
37 if ap.client.getItemAmount(item_id) >= item_amount:
38 handleTriggered()