about summary refs log tree commit diff stats
path: root/apworld/client
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/client')
-rw-r--r--apworld/client/gamedata.gd4
-rw-r--r--apworld/client/manager.gd4
-rw-r--r--apworld/client/player.gd113
3 files changed, 85 insertions, 36 deletions
diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 3a35125..d7e3136 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd
@@ -15,6 +15,7 @@ var symbol_item_ids = []
15var anti_trap_ids = {} 15var anti_trap_ids = {}
16var location_name_by_id = {} 16var location_name_by_id = {}
17var ending_display_name_by_name = {} 17var ending_display_name_by_name = {}
18var port_id_by_ap_id = {}
18 19
19var kSYMBOL_ITEMS 20var kSYMBOL_ITEMS
20 21
@@ -99,6 +100,9 @@ func load(data_bytes):
99 var map_data = port_id_by_map_node_path[map.get_name()] 100 var map_data = port_id_by_map_node_path[map.get_name()]
100 map_data[port.get_path()] = port.get_id() 101 map_data[port.get_path()] = port.get_id()
101 102
103 if port.has_ap_id():
104 port_id_by_ap_id[port.get_ap_id()] = port.get_id()
105
102 for progressive in objects.get_progressives(): 106 for progressive in objects.get_progressives():
103 progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id() 107 progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id()
104 108
diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index aa07559..727d17a 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd
@@ -472,7 +472,9 @@ func _client_connected(slot_data):
472 var raw_pp = slot_data.get("port_pairings") 472 var raw_pp = slot_data.get("port_pairings")
473 473
474 for p1 in raw_pp.keys(): 474 for p1 in raw_pp.keys():
475 port_pairings[int(p1)] = int(raw_pp[p1]) 475 port_pairings[gamedata.port_id_by_ap_id[int(p1)]] = gamedata.port_id_by_ap_id[int(
476 raw_pp[p1]
477 )]
476 478
477 # Set up item locks. 479 # Set up item locks.
478 _item_locks = {} 480 _item_locks = {}
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 712a59b..65bf54e 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd
@@ -98,38 +98,72 @@ func _ready():
98 old_door.queue_free() 98 old_door.queue_free()
99 get_node("/root/scene/Components/Doors").add_child.call_deferred(new_door) 99 get_node("/root/scene/Components/Doors").add_child.call_deferred(new_door)
100 100
101 # Block off roof access in Daedalus. 101 if global.map == "daedalus":
102 if global.map == "daedalus" and not ap.daedalus_roof_access: 102 # Teleport the direction panels when the stairs are there.
103 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) 103 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
104 _set_up_invis_wall(51.5, 11, -17, 16, 10, 1) 104
105 _set_up_invis_wall(46, 10, -9.5, 1, 10, 10) 105 var dir1 = get_node("/root/scene/Panels/Castle Entrance/castle_direction_1")
106 _set_up_invis_wall(67.5, 11, 17, 16, 10, 1) 106 var dir1_tpl = tpl_prefab.instantiate()
107 _set_up_invis_wall(50.5, 11, 14, 10, 10, 1) 107 dir1_tpl.target_path = dir1
108 _set_up_invis_wall(39, 10, 18.5, 1, 10, 22) 108 dir1_tpl.teleport_point = Vector3(59.5, 8, -6.5)
109 _set_up_invis_wall(20, 15, 18.5, 1, 10, 16) 109 dir1_tpl.teleport_rotate = Vector3(-45, 0, 0)
110 _set_up_invis_wall(11.5, 15, 3, 32, 10, 1) 110 dir1_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_south"))
111 _set_up_invis_wall(11.5, 16, -20, 14, 20, 1) 111 dir1_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_north"))
112 _set_up_invis_wall(14, 16, -26.5, 1, 20, 4) 112 dir1_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_west"))
113 _set_up_invis_wall(28.5, 20.5, -26.5, 1, 15, 25) 113 dir1.add_child.call_deferred(dir1_tpl)
114 _set_up_invis_wall(40.5, 20.5, -11, 30, 15, 1) 114
115 _set_up_invis_wall(50.5, 15, 5.5, 7, 10, 1) 115 var dir2 = get_node("/root/scene/Panels/Castle Entrance/castle_direction_2")
116 _set_up_invis_wall(83.5, 33.5, 5.5, 1, 7, 11) 116 var dir2_tpl = tpl_prefab.instantiate()
117 _set_up_invis_wall(83.5, 33.5, -5.5, 1, 7, 11) 117 dir2_tpl.target_path = dir2
118 118 dir2_tpl.teleport_point = Vector3(59.5, 8, 6.5)
119 var warp_exit_prefab = preload("res://objects/nodes/exit.tscn") 119 dir2_tpl.teleport_rotate = Vector3(-45, -180, 0)
120 var warp_exit = warp_exit_prefab.instantiate() 120 dir2_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_south"))
121 warp_exit.name = "roof_access_blocker_warp_exit" 121 dir2_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_north"))
122 warp_exit.position = Vector3(58, 10, 0) 122 dir2_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_west"))
123 warp_exit.rotation_degrees.y = 90 123 dir2.add_child.call_deferred(dir2_tpl)
124 get_parent().add_child.call_deferred(warp_exit) 124
125 125 var dir3 = get_node("/root/scene/Panels/Castle Entrance/castle_direction_3")
126 var warp_enter_prefab = preload("res://objects/nodes/teleportAuto.tscn") 126 var dir3_tpl = tpl_prefab.instantiate()
127 var warp_enter = warp_enter_prefab.instantiate() 127 dir3_tpl.target_path = dir3
128 warp_enter.target = warp_exit 128 dir3_tpl.teleport_point = Vector3(54, 8, 0)
129 warp_enter.position = Vector3(76.5, 30, 1) 129 dir3_tpl.teleport_rotate = Vector3(-45, 90, 0)
130 warp_enter.scale = Vector3(4, 1.5, 1) 130 dir3_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_south"))
131 warp_enter.rotation_degrees.y = 90 131 dir3_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_north"))
132 get_parent().add_child.call_deferred(warp_enter) 132 dir3_tpl.senders.append(NodePath("/root/scene/Panels/Castle Entrance/castle_west"))
133 dir3.add_child.call_deferred(dir3_tpl)
134
135 # Block off roof access in Daedalus.
136 if not ap.daedalus_roof_access:
137 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49)
138 _set_up_invis_wall(51.5, 11, -17, 16, 10, 1)
139 _set_up_invis_wall(46, 10, -9.5, 1, 10, 10)
140 _set_up_invis_wall(67.5, 11, 17, 16, 10, 1)
141 _set_up_invis_wall(50.5, 11, 14, 10, 10, 1)
142 _set_up_invis_wall(39, 10, 18.5, 1, 10, 22)
143 _set_up_invis_wall(20, 15, 18.5, 1, 10, 16)
144 _set_up_invis_wall(11.5, 15, 3, 32, 10, 1)
145 _set_up_invis_wall(11.5, 16, -20, 14, 20, 1)
146 _set_up_invis_wall(14, 16, -26.5, 1, 20, 4)
147 _set_up_invis_wall(28.5, 20.5, -26.5, 1, 15, 25)
148 _set_up_invis_wall(40.5, 20.5, -11, 30, 15, 1)
149 _set_up_invis_wall(50.5, 15, 5.5, 7, 10, 1)
150 _set_up_invis_wall(83.5, 33.5, 5.5, 1, 7, 11)
151 _set_up_invis_wall(83.5, 33.5, -5.5, 1, 7, 11)
152
153 var warp_exit_prefab = preload("res://objects/nodes/exit.tscn")
154 var warp_exit = warp_exit_prefab.instantiate()
155 warp_exit.name = "roof_access_blocker_warp_exit"
156 warp_exit.position = Vector3(58, 10, 0)
157 warp_exit.rotation_degrees.y = 90
158 get_parent().add_child.call_deferred(warp_exit)
159
160 var warp_enter_prefab = preload("res://objects/nodes/teleportAuto.tscn")
161 var warp_enter = warp_enter_prefab.instantiate()
162 warp_enter.target = warp_exit
163 warp_enter.position = Vector3(76.5, 30, 1)
164 warp_enter.scale = Vector3(4, 1.5, 1)
165 warp_enter.rotation_degrees.y = 90
166 get_parent().add_child.call_deferred(warp_enter)
133 167
134 if global.map == "the_entry": 168 if global.map == "the_entry":
135 # Remove door behind X1. 169 # Remove door behind X1.
@@ -586,6 +620,12 @@ func _ready():
586 saver.senderGroup.append(NodePath("/root/scene/Components/Collectables")) 620 saver.senderGroup.append(NodePath("/root/scene/Components/Collectables"))
587 get_node("/root/scene").add_child.call_deferred(saver) 621 get_node("/root/scene").add_child.call_deferred(saver)
588 622
623 # Shrink the painting trigger in The Unyielding.
624 if global.map == "the_unyielding":
625 var trigger_area = get_node("/root/scene/Components/PaintingUnlocker/triggerArea")
626 trigger_area.position = Vector3(0, 0, -6)
627 trigger_area.scale = Vector3(6, 1, 6)
628
589 ap.update_job_well_done_sign() 629 ap.update_job_well_done_sign()
590 630
591 # Set up door locations. 631 # Set up door locations.
@@ -598,9 +638,12 @@ func _ready():
598 continue 638 continue
599 639
600 if ( 640 if (
601 door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY 641 not (door.has_legacy_location() and door.get_legacy_location())
602 or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING 642 and (
603 or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR 643 door.get_type() == gamedata.SCRIPT_proto.DoorType.ITEM_ONLY
644 or door.get_type() == gamedata.SCRIPT_proto.DoorType.GALLERY_PAINTING
645 or door.get_type() == gamedata.SCRIPT_proto.DoorType.CONTROL_CENTER_COLOR
646 )
604 ): 647 ):
605 continue 648 continue
606 649