about summary refs log tree commit diff stats
path: root/client/Archipelago/player.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/player.gd')
-rw-r--r--client/Archipelago/player.gd82
1 files changed, 80 insertions, 2 deletions
diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 7a1f5db..f0b214f 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd
@@ -16,6 +16,8 @@ const kEndingNameByVictoryValue = {
16 12: "WHITE", 16 12: "WHITE",
17} 17}
18 18
19signal evaluate_solvability
20
19 21
20func _ready(): 22func _ready():
21 var khl_script = load("res://scripts/nodes/keyHolderListener.gd") 23 var khl_script = load("res://scripts/nodes/keyHolderListener.gd")
@@ -34,7 +36,10 @@ func _ready():
34 if not door.has_ap_id(): 36 if not door.has_ap_id():
35 continue 37 continue
36 38
37 if door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY: 39 if (
40 door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY
41 or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING
42 ):
38 continue 43 continue
39 44
40 var locationListener = ap.SCRIPT_locationListener.new() 45 var locationListener = ap.SCRIPT_locationListener.new()
@@ -66,6 +71,12 @@ func _ready():
66 71
67 locationListener.senders.append(NodePath("../" + khl.name)) 72 locationListener.senders.append(NodePath("../" + khl.name))
68 73
74 for sender in door.get_senders():
75 locationListener.senders.append(NodePath("/root/scene/" + sender))
76
77 if door.has_complete_at():
78 locationListener.complete_at = door.get_complete_at()
79
69 get_parent().add_child.call_deferred(locationListener) 80 get_parent().add_child.call_deferred(locationListener)
70 81
71 # Set up letter locations. 82 # Set up letter locations.
@@ -81,6 +92,26 @@ func _ready():
81 92
82 get_parent().add_child.call_deferred(locationListener) 93 get_parent().add_child.call_deferred(locationListener)
83 94
95 if (
96 ap.get_letter_behavior(letter.get_key(), letter.has_level2() and letter.get_level2())
97 != ap.kLETTER_BEHAVIOR_VANILLA
98 ):
99 var scout = ap.scout_location(letter.get_ap_id())
100 if (
101 scout != null
102 and not (scout["player"] == ap.client._slot and scout["flags"] & 4 != 0)
103 ):
104 var item_name = "Unknown"
105 var item_player_game = ap.client._game_by_player[float(scout["player"])]
106 if ap.client._item_id_to_name[item_player_game].has(scout["item"]):
107 item_name = ap.client._item_id_to_name[item_player_game][scout["item"]]
108
109 var collectable = get_tree().get_root().get_node("scene").get_node_or_null(
110 letter.get_path()
111 )
112 if collectable != null:
113 collectable.setScoutedText.call_deferred(item_name)
114
84 # Set up mastery locations. 115 # Set up mastery locations.
85 for mastery in gamedata.objects.get_masteries(): 116 for mastery in gamedata.objects.get_masteries():
86 var room = gamedata.objects.get_rooms()[mastery.get_room_id()] 117 var room = gamedata.objects.get_rooms()[mastery.get_room_id()]
@@ -114,8 +145,32 @@ func _ready():
114 145
115 get_parent().add_child.call_deferred(victoryListener) 146 get_parent().add_child.call_deferred(victoryListener)
116 147
148 # Set up keyholder locations, in keyholder sanity.
149 if ap.keyholder_sanity:
150 for keyholder in gamedata.objects.get_keyholders():
151 if not keyholder.has_key():
152 continue
153
154 var room = gamedata.objects.get_rooms()[keyholder.get_room_id()]
155 if room.get_map_id() != map_id:
156 continue
157
158 var locationListener = ap.SCRIPT_locationListener.new()
159 locationListener.location_id = keyholder.get_ap_id()
160 locationListener.name = "locationListener_%d" % keyholder.get_ap_id()
161
162 var khl = khl_script.new()
163 khl.name = "location_%d_keyholder" % keyholder.get_ap_id()
164 khl.answer = keyholder.get_key()
165 khl.senders.append(NodePath("/root/scene/" + keyholder.get_path()))
166 get_parent().add_child.call_deferred(khl)
167
168 locationListener.senders.append(NodePath("../" + khl.name))
169
170 get_parent().add_child.call_deferred(locationListener)
171
117 # Block off roof access in Daedalus. 172 # Block off roof access in Daedalus.
118 if global.map == "daedalus": 173 if global.map == "daedalus" and not ap.daedalus_roof_access:
119 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) 174 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49)
120 _set_up_invis_wall(51.5, 11, -17, 16, 10, 1) 175 _set_up_invis_wall(51.5, 11, -17, 16, 10, 1)
121 _set_up_invis_wall(46, 10, -9.5, 1, 10, 10) 176 _set_up_invis_wall(46, 10, -9.5, 1, 10, 10)
@@ -147,6 +202,29 @@ func _ready():
147 warp_enter.rotation_degrees.y = 90 202 warp_enter.rotation_degrees.y = 90
148 get_parent().add_child.call_deferred(warp_enter) 203 get_parent().add_child.call_deferred(warp_enter)
149 204
205 if global.map == "the_entry":
206 # Remove door behind X1.
207 var door_node = get_tree().get_root().get_node("/root/scene/Components/Doors/exit_1")
208 door_node.handleTriggered()
209
210 # Display win condition.
211 var sign_prefab = preload("res://objects/nodes/sign.tscn")
212 var sign1 = sign_prefab.instantiate()
213 sign1.position = Vector3(-7, 5, -15.01)
214 sign1.text = "victory"
215 get_parent().add_child.call_deferred(sign1)
216
217 var sign2 = sign_prefab.instantiate()
218 sign2.position = Vector3(-7, 4, -15.01)
219 sign2.text = "%s ending" % kEndingNameByVictoryValue.get(ap.victory_condition, "?")
220
221 var sign2_color = kEndingNameByVictoryValue.get(ap.victory_condition, "coral").to_lower()
222 if sign2_color == "white":
223 sign2_color = "silver"
224
225 sign2.material = load("res://assets/materials/%s.material" % sign2_color)
226 get_parent().add_child.call_deferred(sign2)
227
150 super._ready() 228 super._ready()
151 229
152 await get_tree().process_frame 230 await get_tree().process_frame