about summary refs log tree commit diff stats
path: root/apworld/client/gamedata.gd
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/client/gamedata.gd')
-rw-r--r--apworld/client/gamedata.gd132
1 files changed, 128 insertions, 4 deletions
diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 9eeec3b..e44fa17 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd
@@ -13,6 +13,7 @@ var progressive_id_by_ap_id = {}
13var letter_id_by_ap_id = {} 13var letter_id_by_ap_id = {}
14var symbol_item_ids = [] 14var symbol_item_ids = []
15var anti_trap_ids = {} 15var anti_trap_ids = {}
16var location_name_by_id = {}
16 17
17var kSYMBOL_ITEMS 18var kSYMBOL_ITEMS
18 19
@@ -70,6 +71,7 @@ func load(data_bytes):
70 71
71 if door.has_ap_id(): 72 if door.has_ap_id():
72 door_id_by_ap_id[door.get_ap_id()] = door.get_id() 73 door_id_by_ap_id[door.get_ap_id()] = door.get_id()
74 location_name_by_id[door.get_ap_id()] = _get_door_location_name(door)
73 75
74 for painting in objects.get_paintings(): 76 for painting in objects.get_paintings():
75 var room = objects.get_rooms()[painting.get_room_id()] 77 var room = objects.get_rooms()[painting.get_room_id()]
@@ -95,6 +97,17 @@ func load(data_bytes):
95 97
96 for letter in objects.get_letters(): 98 for letter in objects.get_letters():
97 letter_id_by_ap_id[letter.get_ap_id()] = letter.get_id() 99 letter_id_by_ap_id[letter.get_ap_id()] = letter.get_id()
100 location_name_by_id[letter.get_ap_id()] = _get_letter_location_name(letter)
101
102 for mastery in objects.get_masteries():
103 location_name_by_id[mastery.get_ap_id()] = _get_mastery_location_name(mastery)
104
105 for ending in objects.get_endings():
106 location_name_by_id[ending.get_ap_id()] = _get_ending_location_name(ending)
107
108 for keyholder in objects.get_keyholders():
109 if keyholder.has_key():
110 location_name_by_id[keyholder.get_ap_id()] = _get_keyholder_location_name(keyholder)
98 111
99 for panel in objects.get_panels(): 112 for panel in objects.get_panels():
100 var room = objects.get_rooms()[panel.get_room_id()] 113 var room = objects.get_rooms()[panel.get_room_id()]
@@ -148,12 +161,123 @@ func get_door_ap_id(door_id):
148 return null 161 return null
149 162
150 163
164func get_door_map_name(door_id):
165 var door = objects.get_doors()[door_id]
166 var room = objects.get_rooms()[door.get_room_id()]
167 var map = objects.get_maps()[room.get_map_id()]
168 return map.get_name()
169
170
151func get_door_receivers(door_id): 171func get_door_receivers(door_id):
152 var door = objects.get_doors()[door_id] 172 var door = objects.get_doors()[door_id]
153 return door.get_receivers() 173 return door.get_receivers()
154 174
155 175
156func get_door_map_name(door_id): 176func get_worldport_display_name(port_id):
157 var door = objects.get_doors()[door_id] 177 var port = objects.get_ports()[port_id]
158 var map = objects.get_maps()[door.get_map_id()] 178 return "%s - %s (Worldport)" % [_get_room_object_map_name(port), port.get_name()]
159 return map.get_name() 179
180
181func _get_map_object_map_name(obj):
182 return objects.get_maps()[obj.get_map_id()].get_display_name()
183
184
185func _get_room_object_map_name(obj):
186 return _get_map_object_map_name(objects.get_rooms()[obj.get_room_id()])
187
188
189func _get_room_object_location_prefix(obj):
190 var room = objects.get_rooms()[obj.get_room_id()]
191 var game_map = objects.get_maps()[room.get_map_id()]
192
193 if room.has_panel_display_name():
194 return "%s (%s)" % [game_map.get_display_name(), room.get_panel_display_name()]
195 else:
196 return game_map.get_display_name()
197
198
199func _get_door_location_name(door):
200 var map_part = _get_room_object_location_prefix(door)
201
202 if door.has_location_name():
203 return "%s - %s" % [map_part, door.get_location_name()]
204
205 var generated_location_name = _get_generated_door_location_name(door)
206 if generated_location_name != null:
207 return generated_location_name
208
209 return "%s - %s" % [map_part, door.get_name()]
210
211
212func _get_generated_door_location_name(door):
213 if door.get_type() != SCRIPT_proto.DoorType.STANDARD:
214 return null
215
216 if door.get_keyholders().size() > 0 or door.get_endings().size() > 0 or door.has_complete_at():
217 return null
218
219 if door.get_panels().size() > 4:
220 return null
221
222 var map_areas = []
223 for panel_id in door.get_panels():
224 var panel = objects.get_panels()[panel_id.get_panel()]
225 var panel_room = objects.get_rooms()[panel.get_room_id()]
226 # It's okay if panel_display_name is not present because then it's coalesced with other unnamed areas.
227 if not map_areas.has(panel_room.get_panel_display_name()):
228 map_areas.append(panel_room.get_panel_display_name())
229
230 if map_areas.size() > 1:
231 return null
232
233 var game_map = objects.get_maps()[door.get_map_id()]
234 var map_area = map_areas[0]
235 var map_part
236 if map_area == "":
237 map_part = game_map.get_display_name()
238 else:
239 map_part = "%s (%s)" % [game_map.get_display_name(), map_area]
240
241 var panel_names = []
242 for panel_id in door.get_panels():
243 var panel_data = objects.get_panels()[panel_id.get_panel()]
244 var panel_name
245 if panel_data.has_display_name():
246 panel_name = panel_data.get_display_name()
247 else:
248 panel_name = panel_data.get_name()
249
250 var location_part
251 if panel_id.has_answer():
252 location_part = "%s/%s" % [panel_name, panel_id.get_answer().to_upper()]
253 else:
254 location_part = panel_name
255
256 panel_names.append(location_part)
257
258 panel_names.sort()
259
260 return map_part + " - " + ", ".join(panel_names)
261
262
263func _get_letter_location_name(letter):
264 var letter_level = 2 if letter.get_level2() else 1
265 var letter_name = "%s%d" % [letter.get_key().to_upper(), letter_level]
266 return "%s - %s" % [_get_room_object_map_name(letter), letter_name]
267
268
269func _get_mastery_location_name(mastery):
270 return "%s - Mastery" % _get_room_object_map_name(mastery)
271
272
273func _get_ending_location_name(ending):
274 return (
275 "%s - %s Ending" % [_get_room_object_map_name(ending), ending.get_name().to_pascal_case()]
276 )
277
278
279func _get_keyholder_location_name(keyholder):
280 return (
281 "%s - %s Keyholder"
282 % [_get_room_object_location_prefix(keyholder), keyholder.get_key().to_upper()]
283 )