diff options
Diffstat (limited to 'client/Archipelago/player.gd')
| -rw-r--r-- | client/Archipelago/player.gd | 82 |
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 | ||
| 19 | signal evaluate_solvability | ||
| 20 | |||
| 19 | 21 | ||
| 20 | func _ready(): | 22 | func _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 |
