diff options
Diffstat (limited to 'apworld/client/gamedata.gd')
| -rw-r--r-- | apworld/client/gamedata.gd | 120 |
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 = {} | |||
| 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()] |
| @@ -153,7 +166,106 @@ func get_door_receivers(door_id): | |||
| 153 | return door.get_receivers() | 166 | return door.get_receivers() |
| 154 | 167 | ||
| 155 | 168 | ||
| 156 | func get_door_map_name(door_id): | 169 | func _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 | |
| 173 | func _get_room_object_map_name(obj): | ||
| 174 | return _get_map_object_map_name(objects.get_rooms()[obj.get_room_id()]) | ||
| 175 | |||
| 176 | |||
| 177 | func _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 | |||
| 187 | func _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 | |||
| 200 | func _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 | |||
| 251 | func _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 | |||
| 257 | func _get_mastery_location_name(mastery): | ||
| 258 | return "%s - Mastery" % _get_room_object_map_name(mastery) | ||
| 259 | |||
| 260 | |||
| 261 | func _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 | |||
| 267 | func _get_keyholder_location_name(keyholder): | ||
| 268 | return ( | ||
| 269 | "%s - %s Keyholder" | ||
| 270 | % [_get_room_object_location_prefix(keyholder), keyholder.get_key().to_upper()] | ||
| 271 | ) | ||
