edition = "2023"; import "common.proto"; package com.fourisland.lingo2_archipelago; message RoomIdentifier { string map = 1; string name = 2; } message DoorIdentifier { string map = 1; string name = 2; } message PortIdentifier { string map = 1; string room = 2; string name = 3; } message PaintingIdentifier { string map = 1; string room = 2; string name = 3; } message PanelIdentifier { string map = 1; string room = 2; string name = 3; string answer = 4; } message KeyholderIdentifier { string map = 1; string room = 2; string name = 3; string key = 4; } message HumanConnection { message Endpoint { oneof endpoint { RoomIdentifier room = 1; PortIdentifier port = 2; PaintingIdentifier painting = 3; PanelIdentifier panel = 4; } } oneof From { Endpoint from = 1; string from_room = 5; } oneof To { Endpoint to = 2; string to_room = 6; } bool oneway = 3; DoorIdentifier door = 4; } message HumanConnections { repeated HumanConnection connections = 1; } message HumanDoor { string name = 1; repeated string receivers = 2; repeated PaintingIdentifier move_paintings = 8; // The set of panels that must be solved to open this door. repeated PanelIdentifier panels = 3; // If set, the number of panels from the above set that need to be solved. // Warning: this is a messy kind of OR logic! Consider if there's another way. uint64 complete_at = 9; string control_center_color = 6; repeated string switches = 7; repeated KeyholderIdentifier keyholders = 10; repeated RoomIdentifier rooms = 11; DoorType type = 4; string location_room = 5; } message HumanDoors { repeated HumanDoor doors = 1; } message HumanPanel { string name = 1; string path = 5; string clue = 2; string answer = 3; repeated string symbols = 4; repeated Proxy proxies = 6; DoorIdentifier required_door = 7; RoomIdentifier required_room = 8; } message HumanPainting { string name = 1; string path = 2; string display_name = 4; string orientation = 3; bool move = 6; bool enter_only = 7; bool flipped = 8; bool exit_only = 9; DoorIdentifier required_door = 5; } message HumanPort { string name = 1; string path = 2; string orientation = 3; DoorIdentifier required_door = 4; } message HumanKeyholder { string name = 1; string path = 2; } message HumanLetter { string key = 1; bool double = 2; string path = 3; } message HumanMastery { string name = 1; string path = 2; } message HumanRoom { string name = 1; string display_name = 2; repeated HumanPanel panels = 3; repeated HumanPainting paintings = 4; repeated HumanLetter letters = 5; repeated HumanPort ports = 6; repeated HumanKeyholder keyholders = 7; repeated HumanMastery masteries = 8; } message IdMappings { message RoomIds { map panels = 1; map masteries = 2; } message MapIds { map doors = 1; map rooms = 2; } map maps = 1; map special = 2; map letters = 3; }