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.gd120
1 files changed, 116 insertions, 4 deletions
diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 9eeec3b..39e0583 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()]
@@ -153,7 +166,106 @@ func get_door_receivers(door_id):
153 return door.get_receivers() 166 return door.get_receivers()
154 167
155 168
156func get_door_map_name(door_id): 169func _get_map_object_map_name(obj):
157 var door = objects.get_doors()[door_id] 170 return objects.get_maps()[obj.get_map_id()].get_display_name()
158 var map = objects.get_maps()[door.get_map_id()] 171
159 return map.get_name() 172
173func _get_room_object_map_name(obj):
174 return _get_map_object_map_name(objects.get_rooms()[obj.get_room_id()])
175
176
177func _get_room_object_location_prefix(obj):
178 var room = objects.get_rooms()[obj.get_room_id()]
179 var game_map = objects.get_maps()[room.get_map_id()]
180
181 if room.has_panel_display_name():
182 return "%s (%s)" % [game_map.get_display_name(), room.get_panel_display_name()]
183 else:
184 return game_map.get_display_name()
185
186
187func _get_door_location_name(door):
188 var map_part = _get_room_object_location_prefix(door)
189
190 if door.has_location_name():
191 return "%s - %s" % [map_part, door.get_location_name()]
192
193 var generated_location_name = _get_generated_door_location_name(door)
194 if generated_location_name != null:
195 return generated_location_name
196
197 return "%s - %s" % [map_part, door.get_name()]
198
199
200func _get_generated_door_location_name(door):
201 if door.get_type() != SCRIPT_proto.DoorType.STANDARD:
202 return null
203
204 if door.get_keyholders().size() > 0 or door.get_endings().size() > 0 or door.has_complete_at():
205 return null
206
207 if door.get_panels().size() > 4:
208 return null
209
210 var map_areas = []
211 for panel_id in door.get_panels():
212 var panel = objects.get_panels()[panel_id.get_panel()]
213 var panel_room = objects.get_rooms()[panel.get_room_id()]
214 # It's okay if panel_display_name is not present because then it's coalesced with other unnamed areas.
215 if not map_areas.has(panel_room.get_panel_display_name()):
216 map_areas.append(panel_room.get_panel_display_name())
217
218 if map_areas.size() > 1:
219 return null
220
221 var game_map = objects.get_maps()[door.get_map_id()]
222 var map_area = map_areas[0]
223 var map_part
224 if map_area == "":
225 map_part = game_map.get_display_name()
226 else:
227 map_part = "%s (%s)" % [game_map.get_display_name(), map_area]
228
229 var panel_names = []
230 for panel_id in door.get_panels():
231 var panel_data = objects.get_panels()[panel_id.get_panel()]
232 var panel_name
233 if panel_data.has_display_name():
234 panel_name = panel_data.get_display_name()
235 else:
236 panel_name = panel_data.get_name()
237
238 var location_part
239 if panel_id.has_answer():
240 location_part = "%s/%s" % [panel_name, panel_id.get_answer().to_upper()]
241 else:
242 location_part = panel_name
243
244 panel_names.append(location_part)
245
246 panel_names.sort()
247
248 return map_part + " - " + ", ".join(panel_names)
249
250
251func _get_letter_location_name(letter):
252 var letter_level = 2 if letter.get_level2() else 1
253 var letter_name = "%s%d" % [letter.get_key().to_upper(), letter_level]
254 return "%s - %s" % [_get_room_object_map_name(letter), letter_name]
255
256
257func _get_mastery_location_name(mastery):
258 return "%s - Mastery" % _get_room_object_map_name(mastery)
259
260
261func _get_ending_location_name(ending):
262 return (
263 "%s - %s Ending" % [_get_room_object_map_name(ending), ending.get_name().to_pascal_case()]
264 )
265
266
267func _get_keyholder_location_name(keyholder):
268 return (
269 "%s - %s Keyholder"
270 % [_get_room_object_location_prefix(keyholder), keyholder.get_key().to_upper()]
271 )