diff options
Diffstat (limited to 'apworld/client/player.gd')
-rw-r--r-- | apworld/client/player.gd | 451 |
1 files changed, 316 insertions, 135 deletions
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 1330e24..8aee21a 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd | |||
@@ -19,141 +19,6 @@ func _ready(): | |||
19 | 19 | ||
20 | ap.start_batching_locations() | 20 | ap.start_batching_locations() |
21 | 21 | ||
22 | # Set up door locations. | ||
23 | var map_id = gamedata.map_id_by_name.get(global.map) | ||
24 | for door in gamedata.objects.get_doors(): | ||
25 | if door.get_map_id() != map_id: | ||
26 | continue | ||
27 | |||
28 | if not door.has_ap_id(): | ||
29 | continue | ||
30 | |||
31 | if ( | ||
32 | door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY | ||
33 | or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING | ||
34 | or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR | ||
35 | ): | ||
36 | continue | ||
37 | |||
38 | var locationListener = ap.SCRIPT_locationListener.new() | ||
39 | locationListener.location_id = door.get_ap_id() | ||
40 | locationListener.name = "locationListener_%d" % door.get_ap_id() | ||
41 | |||
42 | for panel_ref in door.get_panels(): | ||
43 | var panel_data = gamedata.objects.get_panels()[panel_ref.get_panel()] | ||
44 | var panel_path = panel_data.get_path() | ||
45 | |||
46 | if panel_ref.has_answer(): | ||
47 | for proxy in panel_data.get_proxies(): | ||
48 | if proxy.get_answer() == panel_ref.get_answer(): | ||
49 | panel_path = proxy.get_path() | ||
50 | break | ||
51 | |||
52 | locationListener.senders.append(NodePath("/root/scene/" + panel_path)) | ||
53 | |||
54 | for keyholder_ref in door.get_keyholders(): | ||
55 | var keyholder_data = gamedata.objects.get_keyholders()[keyholder_ref.get_keyholder()] | ||
56 | |||
57 | var khl = khl_script.new() | ||
58 | khl.name = ( | ||
59 | "location_%d_keyholder_%d" % [door.get_ap_id(), keyholder_ref.get_keyholder()] | ||
60 | ) | ||
61 | khl.answer = keyholder_ref.get_key() | ||
62 | khl.senders.append(NodePath("/root/scene/" + keyholder_data.get_path())) | ||
63 | get_parent().add_child.call_deferred(khl) | ||
64 | |||
65 | locationListener.senders.append(NodePath("../" + khl.name)) | ||
66 | |||
67 | for sender in door.get_senders(): | ||
68 | locationListener.senders.append(NodePath("/root/scene/" + sender)) | ||
69 | |||
70 | if door.has_complete_at(): | ||
71 | locationListener.complete_at = door.get_complete_at() | ||
72 | |||
73 | get_parent().add_child.call_deferred(locationListener) | ||
74 | |||
75 | # Set up letter locations. | ||
76 | for letter in gamedata.objects.get_letters(): | ||
77 | var room = gamedata.objects.get_rooms()[letter.get_room_id()] | ||
78 | if room.get_map_id() != map_id: | ||
79 | continue | ||
80 | |||
81 | var locationListener = ap.SCRIPT_locationListener.new() | ||
82 | locationListener.location_id = letter.get_ap_id() | ||
83 | locationListener.name = "locationListener_%d" % letter.get_ap_id() | ||
84 | locationListener.senders.append(NodePath("/root/scene/" + letter.get_path())) | ||
85 | |||
86 | get_parent().add_child.call_deferred(locationListener) | ||
87 | |||
88 | if ( | ||
89 | ap.get_letter_behavior(letter.get_key(), letter.has_level2() and letter.get_level2()) | ||
90 | != ap.kLETTER_BEHAVIOR_VANILLA | ||
91 | ): | ||
92 | var scout = ap.scout_location(letter.get_ap_id()) | ||
93 | if scout != null and not (scout["for_self"] and scout["flags"] & 4 != 0): | ||
94 | var collectable = get_tree().get_root().get_node("scene").get_node_or_null( | ||
95 | letter.get_path() | ||
96 | ) | ||
97 | if collectable != null: | ||
98 | collectable.setScoutedText.call_deferred(scout["item"]) | ||
99 | |||
100 | # Set up mastery locations. | ||
101 | for mastery in gamedata.objects.get_masteries(): | ||
102 | var room = gamedata.objects.get_rooms()[mastery.get_room_id()] | ||
103 | if room.get_map_id() != map_id: | ||
104 | continue | ||
105 | |||
106 | var locationListener = ap.SCRIPT_locationListener.new() | ||
107 | locationListener.location_id = mastery.get_ap_id() | ||
108 | locationListener.name = "locationListener_%d" % mastery.get_ap_id() | ||
109 | locationListener.senders.append(NodePath("/root/scene/" + mastery.get_path())) | ||
110 | |||
111 | get_parent().add_child.call_deferred(locationListener) | ||
112 | |||
113 | # Set up ending locations. | ||
114 | for ending in gamedata.objects.get_endings(): | ||
115 | var room = gamedata.objects.get_rooms()[ending.get_room_id()] | ||
116 | if room.get_map_id() != map_id: | ||
117 | continue | ||
118 | |||
119 | var locationListener = ap.SCRIPT_locationListener.new() | ||
120 | locationListener.location_id = ending.get_ap_id() | ||
121 | locationListener.name = "locationListener_%d" % ending.get_ap_id() | ||
122 | locationListener.senders.append(NodePath("/root/scene/" + ending.get_path())) | ||
123 | |||
124 | get_parent().add_child.call_deferred(locationListener) | ||
125 | |||
126 | if ap.kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name(): | ||
127 | var victoryListener = ap.SCRIPT_victoryListener.new() | ||
128 | victoryListener.name = "victoryListener" | ||
129 | victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path())) | ||
130 | |||
131 | get_parent().add_child.call_deferred(victoryListener) | ||
132 | |||
133 | # Set up keyholder locations, in keyholder sanity. | ||
134 | if ap.keyholder_sanity: | ||
135 | for keyholder in gamedata.objects.get_keyholders(): | ||
136 | if not keyholder.has_key(): | ||
137 | continue | ||
138 | |||
139 | var room = gamedata.objects.get_rooms()[keyholder.get_room_id()] | ||
140 | if room.get_map_id() != map_id: | ||
141 | continue | ||
142 | |||
143 | var locationListener = ap.SCRIPT_locationListener.new() | ||
144 | locationListener.location_id = keyholder.get_ap_id() | ||
145 | locationListener.name = "locationListener_%d" % keyholder.get_ap_id() | ||
146 | |||
147 | var khl = khl_script.new() | ||
148 | khl.name = "location_%d_keyholder" % keyholder.get_ap_id() | ||
149 | khl.answer = keyholder.get_key() | ||
150 | khl.senders.append(NodePath("/root/scene/" + keyholder.get_path())) | ||
151 | get_parent().add_child.call_deferred(khl) | ||
152 | |||
153 | locationListener.senders.append(NodePath("../" + khl.name)) | ||
154 | |||
155 | get_parent().add_child.call_deferred(locationListener) | ||
156 | |||
157 | # Block off roof access in Daedalus. | 22 | # Block off roof access in Daedalus. |
158 | if global.map == "daedalus" and not ap.daedalus_roof_access: | 23 | if global.map == "daedalus" and not ap.daedalus_roof_access: |
159 | _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) | 24 | _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) |
@@ -210,6 +75,84 @@ func _ready(): | |||
210 | sign2.material = load("res://assets/materials/%s.material" % sign2_color) | 75 | sign2.material = load("res://assets/materials/%s.material" % sign2_color) |
211 | get_parent().add_child.call_deferred(sign2) | 76 | get_parent().add_child.call_deferred(sign2) |
212 | 77 | ||
78 | # Add the gift map entry panel if needed. | ||
79 | if not ap.enable_gift_maps.is_empty(): | ||
80 | var panel_prefab = preload("res://objects/nodes/panel.tscn") | ||
81 | var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") | ||
82 | var wpl_prefab = preload("res://objects/nodes/listeners/worldportListener.tscn") | ||
83 | |||
84 | var giftmap_parent = Node.new() | ||
85 | giftmap_parent.name = "GiftMapEntrance" | ||
86 | get_node("/root/scene/Components").add_child.call_deferred(giftmap_parent) | ||
87 | |||
88 | var symbolless_player = "" | ||
89 | for i in range(ap.client.ap_user.length()): | ||
90 | if "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".contains( | ||
91 | ap.client.ap_user[i] | ||
92 | ): | ||
93 | symbolless_player = symbolless_player + ap.client.ap_user[i].to_lower() | ||
94 | |||
95 | var giftmap_panel = panel_prefab.instantiate() | ||
96 | giftmap_panel.name = "Panel" | ||
97 | giftmap_panel.position = Vector3(33.5, -190, 5.5) | ||
98 | giftmap_panel.rotation_degrees = Vector3(-45, 0, 0) | ||
99 | giftmap_panel.clue = "player" | ||
100 | giftmap_panel.answer = symbolless_player | ||
101 | |||
102 | if ap.enable_gift_maps.has("The Advanced"): | ||
103 | var icely_panel = panel_prefab.instantiate() | ||
104 | icely_panel.name = "IcelyPanel" | ||
105 | icely_panel.answer = "icely" | ||
106 | icely_panel.position = Vector3(33.5, -200, 5.5) | ||
107 | giftmap_panel.proxies.append(NodePath("../IcelyPanel")) | ||
108 | giftmap_parent.add_child.call_deferred(icely_panel) | ||
109 | |||
110 | var icely_wpl = wpl_prefab.instantiate() | ||
111 | icely_wpl.name = "IcelyWpl" | ||
112 | icely_wpl.exit = "the_advanced" | ||
113 | icely_wpl.senders.append(NodePath("../IcelyPanel")) | ||
114 | giftmap_parent.add_child.call_deferred(icely_wpl) | ||
115 | |||
116 | if ap.enable_gift_maps.has("The Charismatic"): | ||
117 | var souvey_panel = panel_prefab.instantiate() | ||
118 | souvey_panel.name = "SouveyPanel" | ||
119 | souvey_panel.answer = "souvey" | ||
120 | souvey_panel.position = Vector3(33.5, -210, 5.5) | ||
121 | giftmap_panel.proxies.append(NodePath("../SouveyPanel")) | ||
122 | giftmap_parent.add_child.call_deferred(souvey_panel) | ||
123 | |||
124 | var souvey_wpl = wpl_prefab.instantiate() | ||
125 | souvey_wpl.name = "SouveyWpl" | ||
126 | souvey_wpl.exit = "the_charismatic" | ||
127 | souvey_wpl.senders.append(NodePath("../SouveyPanel")) | ||
128 | giftmap_parent.add_child.call_deferred(souvey_wpl) | ||
129 | |||
130 | if ap.enable_gift_maps.has("The Crystalline"): | ||
131 | var q_panel = panel_prefab.instantiate() | ||
132 | q_panel.name = "QPanel" | ||
133 | q_panel.answer = "q" | ||
134 | q_panel.position = Vector3(33.5, -220, 5.5) | ||
135 | giftmap_panel.proxies.append(NodePath("../QPanel")) | ||
136 | giftmap_parent.add_child.call_deferred(q_panel) | ||
137 | |||
138 | var q_wpl = wpl_prefab.instantiate() | ||
139 | q_wpl.name = "QWpl" | ||
140 | q_wpl.exit = "the_crystalline" | ||
141 | q_wpl.senders.append(NodePath("../QPanel")) | ||
142 | giftmap_parent.add_child.call_deferred(q_wpl) | ||
143 | |||
144 | giftmap_parent.add_child.call_deferred(giftmap_panel) | ||
145 | |||
146 | var giftmap_tpl = tpl_prefab.instantiate() | ||
147 | giftmap_tpl.name = "PanelTeleporter" | ||
148 | giftmap_tpl.teleport_point = Vector3(33.5, 1, 5.5) | ||
149 | giftmap_tpl.teleport_rotate = Vector3(-45, 0, 0) | ||
150 | giftmap_tpl.target_path = giftmap_panel | ||
151 | giftmap_tpl.senders.append( | ||
152 | NodePath("/root/scene/Components/Listeners/unlockReaderListenerDoubles") | ||
153 | ) | ||
154 | giftmap_parent.add_child.call_deferred(giftmap_tpl) | ||
155 | |||
213 | # Add the strict purple ending validation. | 156 | # Add the strict purple ending validation. |
214 | if global.map == "the_sun_temple" and ap.strict_purple_ending: | 157 | if global.map == "the_sun_temple" and ap.strict_purple_ending: |
215 | var panel_prefab = preload("res://objects/nodes/panel.tscn") | 158 | var panel_prefab = preload("res://objects/nodes/panel.tscn") |
@@ -318,8 +261,246 @@ func _ready(): | |||
318 | var rte_trigger = get_node("/root/scene/Components/Warps/triggerArea") | 261 | var rte_trigger = get_node("/root/scene/Components/Warps/triggerArea") |
319 | rte_trigger.position.z = 0 | 262 | rte_trigger.position.z = 0 |
320 | 263 | ||
264 | # Add the mastery to Icarus. | ||
265 | if global.map == "icarus" and ap.enable_icarus: | ||
266 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | ||
267 | var saver_prefab = preload("res://objects/nodes/saver.tscn") | ||
268 | var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") | ||
269 | |||
270 | var mastery = collectable_prefab.instantiate() | ||
271 | mastery.name = "collectable" | ||
272 | mastery.position = Vector3(0, -2000, 0) | ||
273 | mastery.unlock_type = "smiley" | ||
274 | mastery.material_override = load("res://assets/materials/gold.material") | ||
275 | get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) | ||
276 | |||
277 | var tpl = tpl_prefab.instantiate() | ||
278 | tpl.teleport_point = Vector3(56.25, 0, -5.5) | ||
279 | tpl.teleport_rotate = Vector3(0, 0, 0) | ||
280 | tpl.target_path = mastery | ||
281 | tpl.name = "Teleport" | ||
282 | tpl.senderGroup.append(NodePath("/root/scene/Panels")) | ||
283 | tpl.nested = true | ||
284 | mastery.add_child.call_deferred(tpl) | ||
285 | |||
286 | var saver = saver_prefab.instantiate() | ||
287 | saver.name = "saver_collectables" | ||
288 | saver.type = "collectables" | ||
289 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | ||
290 | get_node("/root/scene").add_child.call_deferred(saver) | ||
291 | |||
292 | # Add the mastery to The Advanced. | ||
293 | if global.map == "the_advanced": | ||
294 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | ||
295 | var saver_prefab = preload("res://objects/nodes/saver.tscn") | ||
296 | var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") | ||
297 | |||
298 | var mastery = collectable_prefab.instantiate() | ||
299 | mastery.name = "collectable" | ||
300 | mastery.position = Vector3(0, -200, -5) | ||
301 | mastery.unlock_type = "smiley" | ||
302 | mastery.material_override = load("res://assets/materials/gold.material") | ||
303 | get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) | ||
304 | |||
305 | var tpl = tpl_prefab.instantiate() | ||
306 | tpl.teleport_point = Vector3(0, 2, -5) | ||
307 | tpl.teleport_rotate = Vector3(0, 0, 0) | ||
308 | tpl.target_path = mastery | ||
309 | tpl.name = "Teleport" | ||
310 | tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_29")) | ||
311 | tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_30")) | ||
312 | tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_31")) | ||
313 | mastery.add_child.call_deferred(tpl) | ||
314 | |||
315 | var saver = saver_prefab.instantiate() | ||
316 | saver.name = "saver_collectables" | ||
317 | saver.type = "collectables" | ||
318 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | ||
319 | get_node("/root/scene").add_child.call_deferred(saver) | ||
320 | |||
321 | # Add the mastery to The Charismatic. | ||
322 | if global.map == "the_charismatic": | ||
323 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | ||
324 | var saver_prefab = preload("res://objects/nodes/saver.tscn") | ||
325 | |||
326 | var mastery = collectable_prefab.instantiate() | ||
327 | mastery.name = "collectable" | ||
328 | mastery.position = Vector3(-17, 2, -29) | ||
329 | mastery.rotation_degrees = Vector3(0, 45, 0) | ||
330 | mastery.unlock_type = "smiley" | ||
331 | mastery.material_override = load("res://assets/materials/gold.material") | ||
332 | get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) | ||
333 | |||
334 | var saver = saver_prefab.instantiate() | ||
335 | saver.name = "saver_collectables" | ||
336 | saver.type = "collectables" | ||
337 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | ||
338 | get_node("/root/scene").add_child.call_deferred(saver) | ||
339 | |||
340 | # Add the mastery to The Crystalline. | ||
341 | if global.map == "the_crystalline": | ||
342 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | ||
343 | var saver_prefab = preload("res://objects/nodes/saver.tscn") | ||
344 | var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") | ||
345 | |||
346 | var mastery = collectable_prefab.instantiate() | ||
347 | mastery.name = "collectable" | ||
348 | mastery.position = Vector3(0, 13, 37) | ||
349 | mastery.unlock_type = "smiley" | ||
350 | mastery.material_override = load("res://assets/materials/gold.material") | ||
351 | get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) | ||
352 | |||
353 | var tpl = tpl_prefab.instantiate() | ||
354 | tpl.teleport_point = Vector3(0, 11.5, -20) | ||
355 | tpl.teleport_rotate = Vector3(0, 0, 180) | ||
356 | tpl.target_path = mastery | ||
357 | tpl.name = "Teleport" | ||
358 | tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_3")) | ||
359 | mastery.add_child.call_deferred(tpl) | ||
360 | |||
361 | var saver = saver_prefab.instantiate() | ||
362 | saver.name = "saver_collectables" | ||
363 | saver.type = "collectables" | ||
364 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | ||
365 | get_node("/root/scene").add_child.call_deferred(saver) | ||
366 | |||
321 | ap.update_job_well_done_sign() | 367 | ap.update_job_well_done_sign() |
322 | 368 | ||
369 | # Set up door locations. | ||
370 | var map_id = gamedata.map_id_by_name.get(global.map) | ||
371 | for door in gamedata.objects.get_doors(): | ||
372 | if door.get_map_id() != map_id: | ||
373 | continue | ||
374 | |||
375 | if not door.has_ap_id(): | ||
376 | continue | ||
377 | |||
378 | if ( | ||
379 | door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY | ||
380 | or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING | ||
381 | or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR | ||
382 | ): | ||
383 | continue | ||
384 | |||
385 | var locationListener = ap.SCRIPT_locationListener.new() | ||
386 | locationListener.location_id = door.get_ap_id() | ||
387 | locationListener.name = "locationListener_%d" % door.get_ap_id() | ||
388 | |||
389 | for panel_ref in door.get_panels(): | ||
390 | var panel_data = gamedata.objects.get_panels()[panel_ref.get_panel()] | ||
391 | var panel_path = panel_data.get_path() | ||
392 | |||
393 | if panel_ref.has_answer(): | ||
394 | for proxy in panel_data.get_proxies(): | ||
395 | if proxy.get_answer() == panel_ref.get_answer(): | ||
396 | panel_path = proxy.get_path() | ||
397 | break | ||
398 | |||
399 | locationListener.senders.append(NodePath("/root/scene/" + panel_path)) | ||
400 | |||
401 | for keyholder_ref in door.get_keyholders(): | ||
402 | var keyholder_data = gamedata.objects.get_keyholders()[keyholder_ref.get_keyholder()] | ||
403 | |||
404 | var khl = khl_script.new() | ||
405 | khl.name = ( | ||
406 | "location_%d_keyholder_%d" % [door.get_ap_id(), keyholder_ref.get_keyholder()] | ||
407 | ) | ||
408 | khl.answer = keyholder_ref.get_key() | ||
409 | khl.senders.append(NodePath("/root/scene/" + keyholder_data.get_path())) | ||
410 | get_parent().add_child.call_deferred(khl) | ||
411 | |||
412 | locationListener.senders.append(NodePath("../" + khl.name)) | ||
413 | |||
414 | for sender in door.get_senders(): | ||
415 | locationListener.senders.append(NodePath("/root/scene/" + sender)) | ||
416 | |||
417 | if door.has_complete_at(): | ||
418 | locationListener.complete_at = door.get_complete_at() | ||
419 | |||
420 | get_parent().add_child.call_deferred(locationListener) | ||
421 | |||
422 | # Set up letter locations. | ||
423 | for letter in gamedata.objects.get_letters(): | ||
424 | var room = gamedata.objects.get_rooms()[letter.get_room_id()] | ||
425 | if room.get_map_id() != map_id: | ||
426 | continue | ||
427 | |||
428 | var locationListener = ap.SCRIPT_locationListener.new() | ||
429 | locationListener.location_id = letter.get_ap_id() | ||
430 | locationListener.name = "locationListener_%d" % letter.get_ap_id() | ||
431 | locationListener.senders.append(NodePath("/root/scene/" + letter.get_path())) | ||
432 | |||
433 | get_parent().add_child.call_deferred(locationListener) | ||
434 | |||
435 | if ( | ||
436 | ap.get_letter_behavior(letter.get_key(), letter.has_level2() and letter.get_level2()) | ||
437 | != ap.kLETTER_BEHAVIOR_VANILLA | ||
438 | ): | ||
439 | var scout = ap.scout_location(letter.get_ap_id()) | ||
440 | if scout != null and not (scout["for_self"] and scout["flags"] & 4 != 0): | ||
441 | var collectable = get_tree().get_root().get_node("scene").get_node_or_null( | ||
442 | letter.get_path() | ||
443 | ) | ||
444 | if collectable != null: | ||
445 | collectable.setScoutedText.call_deferred(scout["item"]) | ||
446 | |||
447 | # Set up mastery locations. | ||
448 | for mastery in gamedata.objects.get_masteries(): | ||
449 | var room = gamedata.objects.get_rooms()[mastery.get_room_id()] | ||
450 | if room.get_map_id() != map_id: | ||
451 | continue | ||
452 | |||
453 | var locationListener = ap.SCRIPT_locationListener.new() | ||
454 | locationListener.location_id = mastery.get_ap_id() | ||
455 | locationListener.name = "locationListener_%d" % mastery.get_ap_id() | ||
456 | locationListener.senders.append(NodePath("/root/scene/" + mastery.get_path())) | ||
457 | |||
458 | get_parent().add_child.call_deferred(locationListener) | ||
459 | |||
460 | # Set up ending locations. | ||
461 | for ending in gamedata.objects.get_endings(): | ||
462 | var room = gamedata.objects.get_rooms()[ending.get_room_id()] | ||
463 | if room.get_map_id() != map_id: | ||
464 | continue | ||
465 | |||
466 | var locationListener = ap.SCRIPT_locationListener.new() | ||
467 | locationListener.location_id = ending.get_ap_id() | ||
468 | locationListener.name = "locationListener_%d" % ending.get_ap_id() | ||
469 | locationListener.senders.append(NodePath("/root/scene/" + ending.get_path())) | ||
470 | |||
471 | get_parent().add_child.call_deferred(locationListener) | ||
472 | |||
473 | if ap.kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name(): | ||
474 | var victoryListener = ap.SCRIPT_victoryListener.new() | ||
475 | victoryListener.name = "victoryListener" | ||
476 | victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path())) | ||
477 | |||
478 | get_parent().add_child.call_deferred(victoryListener) | ||
479 | |||
480 | # Set up keyholder locations, in keyholder sanity. | ||
481 | if ap.keyholder_sanity: | ||
482 | for keyholder in gamedata.objects.get_keyholders(): | ||
483 | if not keyholder.has_key(): | ||
484 | continue | ||
485 | |||
486 | var room = gamedata.objects.get_rooms()[keyholder.get_room_id()] | ||
487 | if room.get_map_id() != map_id: | ||
488 | continue | ||
489 | |||
490 | var locationListener = ap.SCRIPT_locationListener.new() | ||
491 | locationListener.location_id = keyholder.get_ap_id() | ||
492 | locationListener.name = "locationListener_%d" % keyholder.get_ap_id() | ||
493 | |||
494 | var khl = khl_script.new() | ||
495 | khl.name = "location_%d_keyholder" % keyholder.get_ap_id() | ||
496 | khl.answer = keyholder.get_key() | ||
497 | khl.senders.append(NodePath("/root/scene/" + keyholder.get_path())) | ||
498 | get_parent().add_child.call_deferred(khl) | ||
499 | |||
500 | locationListener.senders.append(NodePath("../" + khl.name)) | ||
501 | |||
502 | get_parent().add_child.call_deferred(locationListener) | ||
503 | |||
323 | var minimap = ap.SCRIPT_minimap.new() | 504 | var minimap = ap.SCRIPT_minimap.new() |
324 | minimap.name = "Minimap" | 505 | minimap.name = "Minimap" |
325 | minimap.visible = ap.show_minimap | 506 | minimap.visible = ap.show_minimap |