about summary refs log tree commit diff stats
path: root/data/maps/the_nuanced/rooms/Main Room.txtpb
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-29 23:33:32 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-29 23:33:32 -0400
commitfaca4a62d1e8d30d2d1a67590298acec7340e640 (patch)
tree1ef4e03033b71d39de74e6ff18bfa355d12e4c40 /data/maps/the_nuanced/rooms/Main Room.txtpb
parenta0eda1c44616652ab360676b500baeeadb204331 (diff)
downloadlingo2-archipelago-faca4a62d1e8d30d2d1a67590298acec7340e640.tar.gz
lingo2-archipelago-faca4a62d1e8d30d2d1a67590298acec7340e640.tar.bz2
lingo2-archipelago-faca4a62d1e8d30d2d1a67590298acec7340e640.zip
Removed free connection out of Digital Gallery Maze v7.0.0
Diffstat (limited to 'data/maps/the_nuanced/rooms/Main Room.txtpb')
0 files changed, 0 insertions, 0 deletions
>147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
syntax = "proto2";

import "data.proto";

package com.fourisland.lingo2_archipelago;

message RoomIdentifier {
  optional string map = 1;
  optional string name = 2;
}

message DoorIdentifier {
  optional string map = 1;
  optional string name = 2;
}

message PortIdentifier {
  optional string map = 1;
  optional string room = 2;
  optional string name = 3;
}

message PaintingIdentifier {
  optional string map = 1;
  optional string room = 2;
  optional string name = 3;
}

message PanelIdentifier {
  optional string map = 1;
  optional string room = 2;
  optional string name = 3;
  optional string answer = 4;
}

message KeyholderIdentifier {
  optional string map = 1;
  optional string room = 2;
  optional string name = 3;
  optional 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;
  }

  optional bool oneway = 3;
  optional DoorIdentifier door = 4;

  // If true, this connection will only be logically allowed if the Daedalus
  // Roof Access option is enabled.
  optional bool roof_access = 7;

  // This means that the connection intentionally skips the target object's
  // required door.
  optional bool bypass_target_door = 8;

  // This means that the connection should additionally require all purple
  // letters when the Strict Purple Ending option is on.
  optional bool purple_ending = 9;

  // This means that the connection should additionally require all cyan letters
  // when the Strict Cyan Ending option is on.
  optional bool cyan_ending = 10;

  // This means that the connection should additionally require being able to
  // type a specific text string when Custom Mint Ending is on.
  optional bool mint_ending = 12;

  // This means that the connection only exists when doors are not shuffled.
  optional bool vanilla_only = 11;
}

message HumanConnections {
  repeated HumanConnection connections = 1;
}

message HumanDoor {
  optional 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.
  optional uint64 complete_at = 9;

  optional string control_center_color = 6;
  repeated KeyholderIdentifier keyholders = 10;
  repeated RoomIdentifier rooms = 11;
  repeated DoorIdentifier doors = 12;
  optional bool white_ending = 13;
  optional bool double_letters = 15;

  // Sender nodes to be added to the list of requirements for triggering the
  // location. Only for senders that have no logic requirements.
  repeated string senders = 16;

  optional DoorType type = 4;
  optional string location_room = 5;
  optional string location_name = 14;

  // Non-item doors that are latched will stay open once opened, even if the
  // opening trigger is deactivated. This applies to EVENT/LOCATION_ONLY doors,
  // as well as item-locked doors when not shuffling doors.
  optional bool latch = 17;

  // If true, the client will treat this door like a location, even though no
  // location is created for it in the generator. This helps provide backwards
  // compatability with older worlds.
  optional bool legacy_location = 18;

  optional bool daedalus_only_allow = 19;
  optional bool daedalus_only_always_item = 20;
}

message HumanDoors {
  repeated HumanDoor doors = 1;
}

message HumanPanel {
  optional string name = 1;
  optional string path = 5;
  
  optional string clue = 2;
  optional string answer = 3;
  repeated PuzzleSymbol symbols = 4;

  repeated Proxy proxies = 6;

  optional DoorIdentifier required_door = 7;
  optional RoomIdentifier required_room = 8;

  optional bool exclude_from_panelsanity = 10;

  optional string display_name = 9;
}

message HumanPainting {
  optional string name = 1;
  optional string path = 2;

  optional string display_name = 4;

  optional string orientation = 3;
  optional bool move = 6;
  optional bool enter_only = 7;
  optional AxisDirection gravity = 8 [default = Y_MINUS];
  optional bool exit_only = 9;
  
  optional DoorIdentifier required_door = 5;
}

message HumanPort {
  optional string name = 1;
  optional string display_name = 8;
  optional string path = 2;

  optional bool no_shuffle = 7;

  // These specify how the player should be placed when a randomized entrance
  // sends them to this port. "rotation" is in degrees and is counter-clockwise 
  // from the positive X axis.
  optional Vec3d destination = 3;
  optional double rotation = 6;
  optional AxisDirection gravity = 5 [default = Y_MINUS];

  optional DoorIdentifier required_door = 4;
}

message HumanKeyholder {
  optional string name = 1;
  optional string path = 2;

  // If this is set, the keyholder will become a location when keyholder shuffle
  // is enabled. This value specifies the key that is required to clear the
  // location. It should be the same as the key needed for Green Ending. The
  // only cases when this shouldn't be set is the two disappearing keyholders in
  // The Congruent.
  optional string key = 3;
}

message HumanLetter {
  optional string key = 1;
  optional bool level2 = 2;

  optional string path = 3;
}

message HumanMastery {
  optional string name = 1;
  optional string path = 2;
}

message HumanEnding {
  optional string name = 1;
  optional string path = 2;
}

message HumanRoom {
  optional string name = 1;
  optional string display_name = 2;

  // This is used in panelsanity location names and location names for STANDARD
  // doors generated from panels in the same area.
  optional string panel_display_name = 10;

  optional bool daedalus_only_allow = 11;

  repeated HumanPanel panels = 3;
  repeated HumanPainting paintings = 4;
  repeated HumanLetter letters = 5;
  repeated HumanPort ports = 6;
  repeated HumanKeyholder keyholders = 7;
  repeated HumanMastery masteries = 8;
  repeated HumanEnding endings = 9;
}

message HumanMap {
  optional string display_name = 1;
  optional MapType type = 4;

  optional DaedalusOnlyMode daedalus_only_mode = 6;

  optional PortIdentifier worldport_entrance = 3;
  optional string rte_room = 7;
  optional Vec3d rte_trigger_pos = 8;
  optional Vec3d rte_trigger_scale = 9;

  // These two fields are used by the validator and nothing else. excluded_nodes
  // are objects in the tscn that are intentionally not mentioned in the txtpb.
  // custom_nodes are the reverse of that; objects that are mentioned in the
  // txtpb but not present in the tscn. These are generally created dynamically
  // by the game mod, but may also be used for places where the validator is
  // just wrong about the contents of the map file.
  repeated string excluded_nodes = 2;
  repeated string custom_nodes = 5;
}

message HumanProgressive {
  optional string name = 1;
  repeated DoorIdentifier doors = 2;
}

message HumanProgressives {
  repeated HumanProgressive progressives = 1;
}

message HumanDoorGroup {
  optional string name = 1;
  optional DoorGroupType type = 2;
  repeated DoorIdentifier doors = 3;

  optional bool daedalus_only_always_item = 4;
}

message HumanDoorGroups {
  repeated HumanDoorGroup door_groups = 1;
}

message HumanGlobalMetadata {
  repeated string special_names = 1;
  optional VersionNumber version = 2;
}

message IdMappings {
  message RoomIds {
    map<string, uint64> panels = 1;
    map<string, uint64> masteries = 2;
    map<string, uint64> keyholders = 3;
    map<string, uint64> ports = 4;
  }

  message MapIds {
    map<string, uint64> doors = 1;
    map<string, RoomIds> rooms = 2;
    optional uint64 rte = 3;
  }

  map<string, MapIds> maps = 1;
  map<string, uint64> special = 2;
  map<string, uint64> letters = 3;
  map<string, uint64> endings = 4;
  map<string, uint64> progressives = 5;
  map<string, uint64> door_groups = 6;
}