diff options
Diffstat (limited to 'apworld/client')
| -rw-r--r-- | apworld/client/manager.gd | 2 | ||||
| -rw-r--r-- | apworld/client/player.gd | 115 |
2 files changed, 116 insertions, 1 deletions
| diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 91797b2..41ab648 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
| @@ -64,6 +64,7 @@ var apworld_version = [0, 0, 0] | |||
| 64 | var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 | 64 | var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 |
| 65 | var daedalus_roof_access = false | 65 | var daedalus_roof_access = false |
| 66 | var enable_gift_maps = [] | 66 | var enable_gift_maps = [] |
| 67 | var enable_icarus = false | ||
| 67 | var keyholder_sanity = false | 68 | var keyholder_sanity = false |
| 68 | var port_pairings = {} | 69 | var port_pairings = {} |
| 69 | var shuffle_control_center_colors = false | 70 | var shuffle_control_center_colors = false |
| @@ -441,6 +442,7 @@ func _client_connected(slot_data): | |||
| 441 | cyan_door_behavior = int(slot_data.get("cyan_door_behavior", 0)) | 442 | cyan_door_behavior = int(slot_data.get("cyan_door_behavior", 0)) |
| 442 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) | 443 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) |
| 443 | enable_gift_maps = slot_data.get("enable_gift_maps", []) | 444 | enable_gift_maps = slot_data.get("enable_gift_maps", []) |
| 445 | enable_icarus = bool(slot_data.get("enable_icarus", false)) | ||
| 444 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) | 446 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) |
| 445 | shuffle_control_center_colors = bool(slot_data.get("shuffle_control_center_colors", false)) | 447 | shuffle_control_center_colors = bool(slot_data.get("shuffle_control_center_colors", false)) |
| 446 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) | 448 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) |
| diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 43bf758..8aee21a 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd | |||
| @@ -78,6 +78,7 @@ func _ready(): | |||
| 78 | # Add the gift map entry panel if needed. | 78 | # Add the gift map entry panel if needed. |
| 79 | if not ap.enable_gift_maps.is_empty(): | 79 | if not ap.enable_gift_maps.is_empty(): |
| 80 | var panel_prefab = preload("res://objects/nodes/panel.tscn") | 80 | var panel_prefab = preload("res://objects/nodes/panel.tscn") |
| 81 | var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") | ||
| 81 | var wpl_prefab = preload("res://objects/nodes/listeners/worldportListener.tscn") | 82 | var wpl_prefab = preload("res://objects/nodes/listeners/worldportListener.tscn") |
| 82 | 83 | ||
| 83 | var giftmap_parent = Node.new() | 84 | var giftmap_parent = Node.new() |
| @@ -93,7 +94,7 @@ func _ready(): | |||
| 93 | 94 | ||
| 94 | var giftmap_panel = panel_prefab.instantiate() | 95 | var giftmap_panel = panel_prefab.instantiate() |
| 95 | giftmap_panel.name = "Panel" | 96 | giftmap_panel.name = "Panel" |
| 96 | giftmap_panel.position = Vector3(33.5, 1, 5.5) | 97 | giftmap_panel.position = Vector3(33.5, -190, 5.5) |
| 97 | giftmap_panel.rotation_degrees = Vector3(-45, 0, 0) | 98 | giftmap_panel.rotation_degrees = Vector3(-45, 0, 0) |
| 98 | giftmap_panel.clue = "player" | 99 | giftmap_panel.clue = "player" |
| 99 | giftmap_panel.answer = symbolless_player | 100 | giftmap_panel.answer = symbolless_player |
| @@ -112,8 +113,46 @@ func _ready(): | |||
| 112 | icely_wpl.senders.append(NodePath("../IcelyPanel")) | 113 | icely_wpl.senders.append(NodePath("../IcelyPanel")) |
| 113 | giftmap_parent.add_child.call_deferred(icely_wpl) | 114 | giftmap_parent.add_child.call_deferred(icely_wpl) |
| 114 | 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 | |||
| 115 | giftmap_parent.add_child.call_deferred(giftmap_panel) | 144 | giftmap_parent.add_child.call_deferred(giftmap_panel) |
| 116 | 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 | |||
| 117 | # Add the strict purple ending validation. | 156 | # Add the strict purple ending validation. |
| 118 | if global.map == "the_sun_temple" and ap.strict_purple_ending: | 157 | if global.map == "the_sun_temple" and ap.strict_purple_ending: |
| 119 | var panel_prefab = preload("res://objects/nodes/panel.tscn") | 158 | var panel_prefab = preload("res://objects/nodes/panel.tscn") |
| @@ -222,6 +261,34 @@ func _ready(): | |||
| 222 | var rte_trigger = get_node("/root/scene/Components/Warps/triggerArea") | 261 | var rte_trigger = get_node("/root/scene/Components/Warps/triggerArea") |
| 223 | rte_trigger.position.z = 0 | 262 | rte_trigger.position.z = 0 |
| 224 | 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 | |||
| 225 | # Add the mastery to The Advanced. | 292 | # Add the mastery to The Advanced. |
| 226 | if global.map == "the_advanced": | 293 | if global.map == "the_advanced": |
| 227 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") | 294 | var collectable_prefab = preload("res://objects/nodes/collectable.tscn") |
| @@ -251,6 +318,52 @@ func _ready(): | |||
| 251 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) | 318 | saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) |
| 252 | get_node("/root/scene").add_child.call_deferred(saver) | 319 | get_node("/root/scene").add_child.call_deferred(saver) |
| 253 | 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 | |||
| 254 | ap.update_job_well_done_sign() | 367 | ap.update_job_well_done_sign() |
| 255 | 368 | ||
| 256 | # Set up door locations. | 369 | # Set up door locations. |
