blob: 541
bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
from .generated import data_pb2 as data_pb2
import pkgutil
class Lingo2StaticLogic:
item_id_to_name: dict[int, str]
location_id_to_name: dict[int, str]
item_name_to_id: dict[str, int]
location_name_to_id: dict[str, int]
def __init__(self):
self.item_id_to_name = {}
self.location_id_to_name = {}
file = pkgutil.get_data(__name__, "generated/data.binpb")
self.objects = data_pb2.AllObjects()
self.objects.ParseFromString(bytearray(file))
for door in self.objects.doors:
if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]:
location_name = f"{self.objects.maps[door.map_id].name} - {door.name}"
self.location_id_to_name[door.ap_id] = location_name
if door.type not in [data_pb2.DoorType.EVENT, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]:
item_name = self.get_door_item_name(door.id)
self.item_id_to_name[door.ap_id] = item_name
for letter in self.objects.letters:
letter_name = f"{letter.key.upper()}{'2' if letter.level2 else '1'}"
location_name = f"{self.objects.maps[self.objects.rooms[letter.room_id].map_id].name} - {letter_name}"
self.location_id_to_name[letter.ap_id] = location_name
if not letter.level2:
self.item_id_to_name[letter.ap_id] = letter_name
for mastery in self.objects.masteries:
location_name = f"{self.objects.maps[self.objects.rooms[mastery.room_id].map_id].name} - Mastery"
self.location_id_to_name[mastery.ap_id] = location_name
self.item_name_to_id = {name: ap_id for ap_id, name in self.item_id_to_name.items()}
self.location_name_to_id = {name: ap_id for ap_id, name in self.location_id_to_name.items()}
def get_door_item_name(self, door_id: int) -> str:
door = self.objects.doors[door_id]
return f"{self.objects.maps[door.map_id].name} - {door.name}"
def get_room_region_name(self, room_id: int) -> str:
room = self.objects.rooms[room_id]
return f"{self.objects.maps[room.map_id].name} - {room.name}"