diff options
Diffstat (limited to 'apworld/client/gamedata.gd')
-rw-r--r-- | apworld/client/gamedata.gd | 132 |
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 = {} | |||
13 | var letter_id_by_ap_id = {} | 13 | var letter_id_by_ap_id = {} |
14 | var symbol_item_ids = [] | 14 | var symbol_item_ids = [] |
15 | var anti_trap_ids = {} | 15 | var anti_trap_ids = {} |
16 | var location_name_by_id = {} | ||
16 | 17 | ||
17 | var kSYMBOL_ITEMS | 18 | var 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 | ||
164 | func 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 | |||
151 | func get_door_receivers(door_id): | 171 | func 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 | ||
156 | func get_door_map_name(door_id): | 176 | func 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 | |||
181 | func _get_map_object_map_name(obj): | ||
182 | return objects.get_maps()[obj.get_map_id()].get_display_name() | ||
183 | |||
184 | |||
185 | func _get_room_object_map_name(obj): | ||
186 | return _get_map_object_map_name(objects.get_rooms()[obj.get_room_id()]) | ||
187 | |||
188 | |||
189 | func _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 | |||
199 | func _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 | |||
212 | func _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 | |||
263 | func _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 | |||
269 | func _get_mastery_location_name(mastery): | ||
270 | return "%s - Mastery" % _get_room_object_map_name(mastery) | ||
271 | |||
272 | |||
273 | func _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 | |||
279 | func _get_keyholder_location_name(keyholder): | ||
280 | return ( | ||
281 | "%s - %s Keyholder" | ||
282 | % [_get_room_object_location_prefix(keyholder), keyholder.get_key().to_upper()] | ||
283 | ) | ||