extends "res://scripts/nodes/player.gd" signal evaluate_solvability var compass func _ready(): var khl_script = load("res://scripts/nodes/keyHolderListener.gd") var pause_menu = get_node("pause_menu") pause_menu.layer = 3 var ap = global.get_node("Archipelago") var gamedata = global.get_node("Gamedata") compass = global.get_node("Compass") compass.visible = ap.show_compass ap.start_batching_locations() # Run map-specific initialization. var map_script = ap.get_map_script(global.map) if map_script != null: map_script.on_map_load(get_tree().get_root()) ap.update_job_well_done_sign() # Set up door locations. var map_id = gamedata.map_id_by_name.get(global.map) for door in gamedata.objects.get_doors(): if door.get_map_id() != map_id: continue if not door.has_ap_id(): continue if ( not (door.has_legacy_location() and door.get_legacy_location()) and ( door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR ) ): continue var locationListener = ap.SCRIPT_locationListener.new() locationListener.location_id = door.get_ap_id() locationListener.name = "locationListener_%d" % door.get_ap_id() for panel_ref in door.get_panels(): var panel_data = gamedata.objects.get_panels()[panel_ref.get_panel()] var panel_path = panel_data.get_path() if panel_ref.has_answer(): for proxy in panel_data.get_proxies(): if proxy.get_answer() == panel_ref.get_answer(): panel_path = proxy.get_path() break locationListener.senders.append(NodePath("/root/scene/" + panel_path)) for keyholder_ref in door.get_keyholders(): var keyholder_data = gamedata.objects.get_keyholders()[keyholder_ref.get_keyholder()] var khl = khl_script.new() khl.name = ( "location_%d_keyholder_%d" % [door.get_ap_id(), keyholder_ref.get_keyholder()] ) khl.answer = keyholder_ref.get_key() khl.senders.append(NodePath("/root/scene/" + keyholder_data.get_path())) get_parent().add_child.call_deferred(khl) locationListener.senders.append(NodePath("../" + khl.name)) for sender in door.get_senders(): locationListener.senders.append(NodePath("/root/scene/" + sender)) if door.has_complete_at(): locationListener.complete_at = door.get_complete_at() get_parent().add_child.call_deferred(locationListener) # Set up letter locations. for letter in gamedata.objects.get_letters(): var room = gamedata.objects.get_rooms()[letter.get_room_id()] if room.get_map_id() != map_id: continue var locationListener = ap.SCRIPT_locationListener.new() locationListener.location_id = letter.get_ap_id() locationListener.name = "locationListener_%d" % letter.get_ap_id() locationListener.senders.append(NodePath("/root/scene/" + letter.get_path())) get_parent().add_child.call_deferred(locationListener) if ( ap.get_letter_behavior(letter.get_key(), letter.has_level2() and letter.get_level2()) != ap.kLETTER_BEHAVIOR_VANILLA ): var scout = ap.scout_location(letter.get_ap_id()) if scout != null and not (scout["for_self"] and scout["flags"] & 4 != 0): var collectable = get_tree().get_root().get_node("scene").get_node_or_null( letter.get_path() ) if collectable != null: collectable.setScoutedText.call_deferred(scout["item"]) # Set up mastery locations. for mastery in gamedata.objects.get_masteries(): var room = gamedata.objects.get_rooms()[mastery.get_room_id()] if room.get_map_id() != map_id: continue var locationListener = ap.SCRIPT_locationListener.new() locationListener.location_id = mastery.get_ap_id() locationListener.name = "locationListener_%d" % mastery.get_ap_id() locationListener.senders.append(NodePath("/root/scene/" + mastery.get_path())) get_parent().add_child.call_deferred(locationListener) # Set up ending locations. for ending in gamedata.objects.get_endings(): var room = gamedata.objects.get_rooms()[ending.get_room_id()] if room.get_map_id() != map_id: continue var locationListener = ap.SCRIPT_locationListener.new() locationListener.location_id = ending.get_ap_id() locationListener.name = "locationListener_%d" % ending.get_ap_id() locationListener.senders.append(NodePath("/root/scene/" + ending.get_path())) get_parent().add_child.call_deferred(locationListener) if ap.kEndingNameByVictoryValue.get(ap.victory_condition, null) == ending.get_name(): var victoryListener = ap.SCRIPT_victoryListener.new() victoryListener.name = "victoryListener" victoryListener.senders.append(NodePath("/root/scene/" + ending.get_path())) get_parent().add_child.call_deferred(victoryListener) # Set up keyholder locations, in keyholder sanity. if ap.keyholder_sanity: for keyholder in gamedata.objects.get_keyholders(): if not keyholder.has_key(): continue var room = gamedata.objects.get_rooms()[keyholder.get_room_id()] if room.get_map_id() != map_id: continue var locationListener = ap.SCRIPT_locationListener.new() locationListener.location_id = keyholder.get_ap_id() locationListener.name = "locationListener_%d" % keyholder.get_ap_id() var khl = khl_script.new() khl.name = "location_%d_keyholder" % keyholder.get_ap_id() khl.answer = keyholder.get_key() khl.senders.append(NodePath("/root/scene/" + keyholder.get_path())) get_parent().add_child.call_deferred(khl) locationListener.senders.append(NodePath("../" + khl.name)) get_parent().add_child.call_deferred(locationListener) var minimap = ap.SCRIPT_minimap.new() minimap.name = "Minimap" minimap.visible = ap.show_minimap get_parent().add_child.call_deferred(minimap) super._ready() await get_tree().process_frame await get_tree().process_frame ap.stop_batching_locations() func _process(_dt): compass.update_rotation(global_rotation.y) f='#n71'>71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178