about summary refs log tree commit diff stats
path: root/apworld/client
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/client')
-rw-r--r--apworld/client/assets/goal.pngbin0 -> 215 bytes
-rw-r--r--apworld/client/client.gd4
-rw-r--r--apworld/client/gamedata.gd5
-rw-r--r--apworld/client/main.gd13
-rw-r--r--apworld/client/manager.gd25
-rw-r--r--apworld/client/player.gd22
-rw-r--r--apworld/client/textclient.gd15
7 files changed, 55 insertions, 29 deletions
diff --git a/apworld/client/assets/goal.png b/apworld/client/assets/goal.png new file mode 100644 index 0000000..bd1650d --- /dev/null +++ b/apworld/client/assets/goal.png
Binary files differ
diff --git a/apworld/client/client.gd b/apworld/client/client.gd index a23e85a..62d7fd8 100644 --- a/apworld/client/client.gd +++ b/apworld/client/client.gd
@@ -24,6 +24,7 @@ var _received_items = {}
24var _slot_data = {} 24var _slot_data = {}
25var _accessible_locations = [] 25var _accessible_locations = []
26var _accessible_worldports = [] 26var _accessible_worldports = []
27var _goal_accessible = false
27 28
28signal could_not_connect 29signal could_not_connect
29signal connect_status 30signal connect_status
@@ -61,6 +62,7 @@ func _reset_state():
61 _checked_worldports = [] 62 _checked_worldports = []
62 _accessible_locations = [] 63 _accessible_locations = []
63 _accessible_worldports = [] 64 _accessible_worldports = []
65 _goal_accessible = false
64 66
65 67
66func disconnect_from_ap(): 68func disconnect_from_ap():
@@ -174,6 +176,8 @@ func _on_web_socket_server_message_received(_peer_id: int, packet: String) -> vo
174 for port_id in message["worldports"]: 176 for port_id in message["worldports"]:
175 _accessible_worldports.append(int(port_id)) 177 _accessible_worldports.append(int(port_id))
176 178
179 _goal_accessible = bool(message.get("goal", false))
180
177 accessible_locations_updated.emit() 181 accessible_locations_updated.emit()
178 182
179 elif cmd == "UpdateKeyboard": 183 elif cmd == "UpdateKeyboard":
diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 1424721..334d42a 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd
@@ -14,6 +14,7 @@ var letter_id_by_ap_id = {}
14var symbol_item_ids = [] 14var symbol_item_ids = []
15var anti_trap_ids = {} 15var anti_trap_ids = {}
16var location_name_by_id = {} 16var location_name_by_id = {}
17var ending_display_name_by_name = {}
17 18
18var kSYMBOL_ITEMS 19var kSYMBOL_ITEMS
19 20
@@ -103,7 +104,9 @@ func load(data_bytes):
103 location_name_by_id[mastery.get_ap_id()] = _get_mastery_location_name(mastery) 104 location_name_by_id[mastery.get_ap_id()] = _get_mastery_location_name(mastery)
104 105
105 for ending in objects.get_endings(): 106 for ending in objects.get_endings():
106 location_name_by_id[ending.get_ap_id()] = _get_ending_location_name(ending) 107 var location_name = _get_ending_location_name(ending)
108 location_name_by_id[ending.get_ap_id()] = location_name
109 ending_display_name_by_name[ending.get_name()] = location_name
107 110
108 for keyholder in objects.get_keyholders(): 111 for keyholder in objects.get_keyholders():
109 if keyholder.has_key(): 112 if keyholder.has_key():
diff --git a/apworld/client/main.gd b/apworld/client/main.gd index 8425d8c..2d2e606 100644 --- a/apworld/client/main.gd +++ b/apworld/client/main.gd
@@ -102,8 +102,9 @@ func _ready():
102 history_box.get_popup().id_pressed.connect(historySelected) 102 history_box.get_popup().id_pressed.connect(historySelected)
103 103
104 # Show client version. 104 # Show client version.
105 var version = gamedata.objects.get_version()
105 get_node("../Panel/title").text = ( 106 get_node("../Panel/title").text = (
106 "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION] 107 "ARCHIPELAGO (%d.%d.%d)" % [version.get_major(), version.get_minor(), version.get_patch()]
107 ) 108 )
108 109
109 # Increase font size in text boxes. 110 # Increase font size in text boxes.
@@ -173,18 +174,20 @@ func connectionSuccessful():
173 var gamedata = global.get_node("Gamedata") 174 var gamedata = global.get_node("Gamedata")
174 175
175 # Check for major version mismatch. 176 # Check for major version mismatch.
176 if ap.apworld_version[0] != gamedata.objects.get_version(): 177 if ap.apworld_version[0] != gamedata.objects.get_version().get_major():
177 get_node("../Panel/AcceptDialog").exclusive = false 178 get_node("../Panel/AcceptDialog").exclusive = false
178 179
179 var popup = get_node("../Panel/VersionMismatch") 180 var popup = get_node("../Panel/VersionMismatch")
180 popup.title = "Version Mismatch!" 181 popup.title = "Version Mismatch!"
181 popup.dialog_text = ( 182 popup.dialog_text = (
182 "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." 183 "This slot was generated using v%d.%d.%d of the Lingo 2 apworld,\nwhich has a different major version than this client (v%d.%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."
183 % [ 184 % [
184 ap.apworld_version[0], 185 ap.apworld_version[0],
185 ap.apworld_version[1], 186 ap.apworld_version[1],
186 gamedata.objects.get_version(), 187 ap.apworld_version[2],
187 ap.MOD_VERSION 188 gamedata.objects.get_version().get_major(),
189 gamedata.objects.get_version().get_minor(),
190 gamedata.objects.get_version().get_patch()
188 ] 191 ]
189 ) 192 )
190 popup.exclusive = true 193 popup.exclusive = true
diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 5b731d2..a5b9db0 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd
@@ -1,7 +1,5 @@
1extends Node 1extends Node
2 2
3const MOD_VERSION = 7
4
5var SCRIPT_client 3var SCRIPT_client
6var SCRIPT_keyboard 4var SCRIPT_keyboard
7var SCRIPT_locationListener 5var SCRIPT_locationListener
@@ -45,7 +43,23 @@ const kCYAN_DOOR_BEHAVIOR_H2 = 0
45const kCYAN_DOOR_BEHAVIOR_DOUBLE_LETTER = 1 43const kCYAN_DOOR_BEHAVIOR_DOUBLE_LETTER = 1
46const kCYAN_DOOR_BEHAVIOR_ITEM = 2 44const kCYAN_DOOR_BEHAVIOR_ITEM = 2
47 45
48var apworld_version = [0, 0] 46const kEndingNameByVictoryValue = {
47 0: "GRAY",
48 1: "PURPLE",
49 2: "MINT",
50 3: "BLACK",
51 4: "BLUE",
52 5: "CYAN",
53 6: "RED",
54 7: "PLUM",
55 8: "ORANGE",
56 9: "GOLD",
57 10: "YELLOW",
58 11: "GREEN",
59 12: "WHITE",
60}
61
62var apworld_version = [0, 0, 0]
49var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 63var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2
50var daedalus_roof_access = false 64var daedalus_roof_access = false
51var keyholder_sanity = false 65var keyholder_sanity = false
@@ -379,7 +393,10 @@ func _client_connected(slot_data):
379 victory_condition = int(slot_data.get("victory_condition", 0)) 393 victory_condition = int(slot_data.get("victory_condition", 0))
380 394
381 if slot_data.has("version"): 395 if slot_data.has("version"):
382 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])] 396 var version_msg = slot_data["version"]
397 apworld_version = [int(version_msg[0]), int(version_msg[1]), 0]
398 if version_msg.size() > 2:
399 apworld_version[2] = int(version_msg[2])
383 400
384 port_pairings.clear() 401 port_pairings.clear()
385 if slot_data.has("port_pairings"): 402 if slot_data.has("port_pairings"):
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 366c3b0..5417a48 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd
@@ -1,21 +1,5 @@
1extends "res://scripts/nodes/player.gd" 1extends "res://scripts/nodes/player.gd"
2 2
3const kEndingNameByVictoryValue = {
4 0: "GRAY",
5 1: "PURPLE",
6 2: "MINT",
7 3: "BLACK",
8 4: "BLUE",
9 5: "CYAN",
10 6: "RED",
11 7: "PLUM",
12 8: "ORANGE",
13 9: "GOLD",
14 10: "YELLOW",
15 11: "GREEN",
16 12: "WHITE",
17}
18
19signal evaluate_solvability 3signal evaluate_solvability
20 4
21var compass 5var compass
@@ -138,7 +122,7 @@ func _ready():
138 122
139 get_parent().add_child.call_deferred(locationListener) 123 get_parent().add_child.call_deferred(locationListener)
140 124
141 if kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name(): 125 if ap.kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name():
142 var victoryListener = ap.SCRIPT_victoryListener.new() 126 var victoryListener = ap.SCRIPT_victoryListener.new()
143 victoryListener.name = "victoryListener" 127 victoryListener.name = "victoryListener"
144 victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path())) 128 victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path()))
@@ -216,9 +200,9 @@ func _ready():
216 200
217 var sign2 = sign_prefab.instantiate() 201 var sign2 = sign_prefab.instantiate()
218 sign2.position = Vector3(-7, 4, -15.01) 202 sign2.position = Vector3(-7, 4, -15.01)
219 sign2.text = "%s ending" % kEndingNameByVictoryValue.get(ap.victory_condition, "?") 203 sign2.text = "%s ending" % ap.kEndingNameByVictoryValue.get(ap.victory_condition, "?")
220 204
221 var sign2_color = kEndingNameByVictoryValue.get(ap.victory_condition, "coral").to_lower() 205 var sign2_color = ap.kEndingNameByVictoryValue.get(ap.victory_condition, "coral").to_lower()
222 if sign2_color == "white": 206 if sign2_color == "white":
223 sign2_color = "silver" 207 sign2_color = "silver"
224 208
diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd index 0c4e675..530eddb 100644 --- a/apworld/client/textclient.gd +++ b/apworld/client/textclient.gd
@@ -10,6 +10,7 @@ var is_open = false
10var locations_overlay 10var locations_overlay
11var location_texture 11var location_texture
12var worldport_texture 12var worldport_texture
13var goal_texture
13 14
14var worldports_tab 15var worldports_tab
15var worldports_tree 16var worldports_tree
@@ -116,6 +117,10 @@ func _ready():
116 worldport_image.load_png_from_buffer(runtime.read_path("assets/worldport.png")) 117 worldport_image.load_png_from_buffer(runtime.read_path("assets/worldport.png"))
117 worldport_texture = ImageTexture.create_from_image(worldport_image) 118 worldport_texture = ImageTexture.create_from_image(worldport_image)
118 119
120 var goal_image = Image.new()
121 goal_image.load_png_from_buffer(runtime.read_path("assets/goal.png"))
122 goal_texture = ImageTexture.create_from_image(goal_image)
123
119 124
120func _input(event): 125func _input(event):
121 if global.loaded and event is InputEventKey and event.pressed: 126 if global.loaded and event is InputEventKey and event.pressed:
@@ -179,6 +184,7 @@ func update_locations():
179 184
180 const kLocation = 0 185 const kLocation = 0
181 const kWorldport = 1 186 const kWorldport = 1
187 const kGoal = 2
182 188
183 var location_names = [] 189 var location_names = []
184 var type_by_name = {} 190 var type_by_name = {}
@@ -196,6 +202,13 @@ func update_locations():
196 202
197 location_names.sort() 203 location_names.sort()
198 204
205 if ap.client._goal_accessible:
206 var location_name = gamedata.ending_display_name_by_name[ap.kEndingNameByVictoryValue[
207 ap.victory_condition
208 ]]
209 location_names.push_front(location_name)
210 type_by_name[location_name] = kGoal
211
199 var count = 0 212 var count = 0
200 for location_name in location_names: 213 for location_name in location_names:
201 tracker_label.append_text("[p]%s[/p]" % location_name) 214 tracker_label.append_text("[p]%s[/p]" % location_name)
@@ -207,6 +220,8 @@ func update_locations():
207 locations_overlay.add_image(location_texture) 220 locations_overlay.add_image(location_texture)
208 elif type_by_name[location_name] == kWorldport: 221 elif type_by_name[location_name] == kWorldport:
209 locations_overlay.add_image(worldport_texture) 222 locations_overlay.add_image(worldport_texture)
223 elif type_by_name[location_name] == kGoal:
224 locations_overlay.add_image(goal_texture)
210 locations_overlay.pop() 225 locations_overlay.pop()
211 count += 1 226 count += 1
212 227