From 65618e0af252345035595b8f89811833f2f0fe56 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:26:17 +0000 Subject: [PATCH 01/17] Create key item options Options added for key item return path locations, range, whether or not enemies drop keys, and whether or not to maintain continuity (will be applied to the Seraph). --- TREnvironmentEditor/Helpers/EMTag.cs | 1 + .../Editors/RandomizerSettings.cs | 13 ++++++++++ .../Randomizers/Shared/EnvironmentPicker.cs | 4 ++++ TRRandomizerCore/TRRandomizerController.cs | 24 +++++++++++++++++++ TRRandomizerCore/TRRandomizerType.cs | 1 + TRRandomizerCore/TRVersionSupport.cs | 1 + 6 files changed, 44 insertions(+) diff --git a/TREnvironmentEditor/Helpers/EMTag.cs b/TREnvironmentEditor/Helpers/EMTag.cs index 9f15b7572..cece54cfa 100644 --- a/TREnvironmentEditor/Helpers/EMTag.cs +++ b/TREnvironmentEditor/Helpers/EMTag.cs @@ -14,4 +14,5 @@ public enum EMTag ReturnPath, GeneralBugFix, ShortcutFix, + KeyItemFix, } diff --git a/TRRandomizerCore/Editors/RandomizerSettings.cs b/TRRandomizerCore/Editors/RandomizerSettings.cs index ad10d4f13..03f3dfa60 100644 --- a/TRRandomizerCore/Editors/RandomizerSettings.cs +++ b/TRRandomizerCore/Editors/RandomizerSettings.cs @@ -38,6 +38,11 @@ public class RandomizerSettings public GlobeDisplayOption GlobeDisplay { get; set; } public bool HardSecrets { get; set; } public bool IncludeKeyItems { get; set; } + public bool AllowReturnPathLocations { get; set; } + public ItemRange KeyItemRange { get; set; } + public bool AllowEnemyKeyDrops { get; set; } + public bool MaintainKeyContinuity { get; set; } + public bool IncludeReturnPathLocations => AllowReturnPathLocations && AddReturnPaths; public bool IncludeExtraPickups { get; set; } public bool DevelopmentMode { get; set; } public ItemDifficulty RandoItemDifficulty { get; set; } @@ -199,6 +204,10 @@ public void ApplyConfig(Config config) RandomizeItems = config.GetBool(nameof(RandomizeItems)); ItemSeed = config.GetInt(nameof(ItemSeed), defaultSeed); IncludeKeyItems = config.GetBool(nameof(IncludeKeyItems), true); + KeyItemRange = (ItemRange)config.GetEnum(nameof(KeyItemRange), typeof(ItemRange), ItemRange.Medium); + AllowEnemyKeyDrops = config.GetBool(nameof(AllowEnemyKeyDrops), true); + MaintainKeyContinuity = config.GetBool(nameof(MaintainKeyContinuity), true); + AllowReturnPathLocations = config.GetBool(nameof(AllowReturnPathLocations), true); IncludeExtraPickups = config.GetBool(nameof(IncludeExtraPickups), true); RandoItemDifficulty = (ItemDifficulty)config.GetEnum(nameof(RandoItemDifficulty), typeof(ItemDifficulty), ItemDifficulty.Default); RandomizeItemTypes = config.GetBool(nameof(RandomizeItemTypes), true); @@ -359,6 +368,10 @@ public void StoreConfig(Config config) config[nameof(RandomizeItems)] = RandomizeItems; config[nameof(ItemSeed)] = ItemSeed; config[nameof(IncludeKeyItems)] = IncludeKeyItems; + config[nameof(KeyItemRange)] = KeyItemRange; + config[nameof(AllowEnemyKeyDrops)] = AllowEnemyKeyDrops; + config[nameof(MaintainKeyContinuity)] = MaintainKeyContinuity; + config[nameof(AllowReturnPathLocations)] = AllowReturnPathLocations; config[nameof(IncludeExtraPickups)] = IncludeExtraPickups; config[nameof(RandoItemDifficulty)] = RandoItemDifficulty; config[nameof(RandomizeItemTypes)] = RandomizeItemTypes; diff --git a/TRRandomizerCore/Randomizers/Shared/EnvironmentPicker.cs b/TRRandomizerCore/Randomizers/Shared/EnvironmentPicker.cs index 40235a222..ce6ee7ab0 100644 --- a/TRRandomizerCore/Randomizers/Shared/EnvironmentPicker.cs +++ b/TRRandomizerCore/Randomizers/Shared/EnvironmentPicker.cs @@ -55,6 +55,10 @@ public void LoadTags(RandomizerSettings settings, bool isCommunityPatch) { excludedTags.Add(EMTag.PuzzleRoom); } + if (!settings.RandomizeItems || !settings.IncludeKeyItems) + { + excludedTags.Add(EMTag.KeyItemFix); + } // If we're using a community patch, exclude mods that // only apply to non-community patch and vice-versa. diff --git a/TRRandomizerCore/TRRandomizerController.cs b/TRRandomizerCore/TRRandomizerController.cs index 93a235f2b..d45d8ccbf 100644 --- a/TRRandomizerCore/TRRandomizerController.cs +++ b/TRRandomizerCore/TRRandomizerController.cs @@ -1453,6 +1453,30 @@ public bool IncludeKeyItems set => LevelRandomizer.IncludeKeyItems = value; } + public bool AllowReturnPathLocations + { + get => LevelRandomizer.AllowReturnPathLocations; + set => LevelRandomizer.AllowReturnPathLocations = value; + } + + public ItemRange KeyItemRange + { + get => LevelRandomizer.KeyItemRange; + set => LevelRandomizer.KeyItemRange = value; + } + + public bool AllowEnemyKeyDrops + { + get => LevelRandomizer.AllowEnemyKeyDrops; + set => LevelRandomizer.AllowEnemyKeyDrops = value; + } + + public bool MaintainKeyContinuity + { + get => LevelRandomizer.MaintainKeyContinuity; + set => LevelRandomizer.MaintainKeyContinuity = value; + } + public bool IncludeExtraPickups { get => LevelRandomizer.IncludeExtraPickups; diff --git a/TRRandomizerCore/TRRandomizerType.cs b/TRRandomizerCore/TRRandomizerType.cs index f64e04d18..c65ae4fc9 100644 --- a/TRRandomizerCore/TRRandomizerType.cs +++ b/TRRandomizerCore/TRRandomizerType.cs @@ -61,4 +61,5 @@ public enum TRRandomizerType ReturnPaths, GeneralBugFixes, ShortcutFixes, + KeyContinuity, } diff --git a/TRRandomizerCore/TRVersionSupport.cs b/TRRandomizerCore/TRVersionSupport.cs index fadd641cf..171dc9881 100644 --- a/TRRandomizerCore/TRVersionSupport.cs +++ b/TRRandomizerCore/TRVersionSupport.cs @@ -74,6 +74,7 @@ internal class TRVersionSupport TRRandomizerType.GlitchedSecrets, TRRandomizerType.HardSecrets, TRRandomizerType.Item, + TRRandomizerType.KeyContinuity, TRRandomizerType.KeyItems, TRRandomizerType.KeyItemTextures, TRRandomizerType.Ladders, From 143b6f0f23c0f618db2cb9822babb352ae9456f9 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:31:04 +0000 Subject: [PATCH 02/17] Update location properties Key item, range and room type properties added. Tidied whitespace and unnecessary initialisers. Moved trview JSON file out of core project. --- .../trview}/randomizer.json | 34 +++++++++-- TRRandomizerCore/Helpers/ItemRange.cs | 8 +++ TRRandomizerCore/Helpers/Location.cs | 60 +++++++++---------- TRRandomizerCore/Helpers/RoomType.cs | 9 +++ TRRandomizerCore/TRRandomizerCore.csproj | 5 -- 5 files changed, 73 insertions(+), 43 deletions(-) rename {TRRandomizerCore/Resources/Shared => Resources/trview}/randomizer.json (68%) create mode 100644 TRRandomizerCore/Helpers/ItemRange.cs create mode 100644 TRRandomizerCore/Helpers/RoomType.cs diff --git a/TRRandomizerCore/Resources/Shared/randomizer.json b/Resources/trview/randomizer.json similarity index 68% rename from TRRandomizerCore/Resources/Shared/randomizer.json rename to Resources/trview/randomizer.json index 96ee4cdab..dcc2aaa15 100644 --- a/TRRandomizerCore/Resources/Shared/randomizer.json +++ b/Resources/trview/randomizer.json @@ -31,11 +31,6 @@ "display": "Requires Damage", "type": "boolean" }, - "KeyItemGroupID": { - "default": 0, - "display": "Key Item Group ID", - "type": "number" - }, "LevelState": { "default": "Any", "display": "Level State", @@ -69,6 +64,33 @@ "TowandAA" ], "type": "string" + }, + "RequiresReturnPath": { + "default": false, + "display": "Requires Return Path", + "type": "boolean" + }, + "Range": { + "default": "Small", + "display": "Range", + "options": [ "Small", "Medium", "Large" ], + "type": "string" + }, + "RoomType": { + "default": "Normal", + "display": "Room Type", + "options": [ "Normal", "ReturnPath", "Challenge", "Reward" ], + "type": "string" + }, + "KeyItemsLow": { + "default": "", + "display": "Key IDs (min room inc.)", + "type": "string" + }, + "KeyItemsHigh": { + "default": "", + "display": "Key IDs (max room exc.)", + "type": "string" } } -} \ No newline at end of file +} diff --git a/TRRandomizerCore/Helpers/ItemRange.cs b/TRRandomizerCore/Helpers/ItemRange.cs new file mode 100644 index 000000000..5f5f2a148 --- /dev/null +++ b/TRRandomizerCore/Helpers/ItemRange.cs @@ -0,0 +1,8 @@ +namespace TRRandomizerCore.Helpers; + +public enum ItemRange +{ + Small, + Medium, + Large, +} diff --git a/TRRandomizerCore/Helpers/Location.cs b/TRRandomizerCore/Helpers/Location.cs index 30d4edcc8..7e5a931a8 100644 --- a/TRRandomizerCore/Helpers/Location.cs +++ b/TRRandomizerCore/Helpers/Location.cs @@ -1,4 +1,5 @@ using System.ComponentModel; +using System.Numerics; namespace TRRandomizerCore.Helpers; @@ -7,36 +8,26 @@ public class Location public const string DefaultPackID = "TRRando"; public int X { get; set; } - public int Y { get; set; } - public int Z { get; set; } - public int Room { get; set; } - - [DefaultValue(16384)] - public short Angle { get; set; } - public bool RequiresGlitch { get; set; } - public Difficulty Difficulty { get; set; } - public bool IsInRoomSpace { get; set; } - - public bool IsItem { get; set; } - + public ItemRange Range { get; set; } + public RoomType RoomType { get; set; } public bool VehicleRequired { get; set; } - - [DefaultValue(true)] - public bool Validated { get; set; } - public bool RequiresDamage { get; set; } - + public bool InvalidatesRoom { get; set; } public int KeyItemGroupID { get; set; } + public bool RequiresReturnPath { get; set; } + public LevelState LevelState { get; set; } - public bool InvalidatesRoom { get; set; } + [DefaultValue(16384)] + public short Angle { get; set; } - public LevelState LevelState { get; set; } + [DefaultValue(true)] + public bool Validated { get; set; } [DefaultValue(-1)] public int EntityIndex { get; set; } @@ -47,26 +38,21 @@ public class Location [DefaultValue(DefaultPackID)] public string PackID { get; set; } + [DefaultValue("")] + public string KeyItemsLow { get; set; } + + [DefaultValue("")] + public string KeyItemsHigh { get; set; } + public Location() { - X = 0; - Y = 0; - Z = 0; - Room = 0; Angle = 16384; - RequiresGlitch = false; - Difficulty = Difficulty.Easy; - IsInRoomSpace = false; - IsItem = false; - VehicleRequired = false; Validated = true; - RequiresDamage = false; - KeyItemGroupID = 0; - InvalidatesRoom = false; - LevelState = LevelState.Any; EntityIndex = -1; TargetType = -1; PackID = DefaultPackID; + KeyItemsLow = string.Empty; + KeyItemsHigh = string.Empty; } public bool IsEquivalent(Location other) @@ -76,4 +62,14 @@ public bool IsEquivalent(Location other) && other.Z == Z && other.Room == Room; } + + public Vector3 ToVector() + { + return new(X, Y, Z); + } + + public override string ToString() + { + return $"{base.ToString()} X: {X} Y: {Y} Z: {Z} Room: {Room} Angle: {Angle}"; + } } diff --git a/TRRandomizerCore/Helpers/RoomType.cs b/TRRandomizerCore/Helpers/RoomType.cs new file mode 100644 index 000000000..cd2d14071 --- /dev/null +++ b/TRRandomizerCore/Helpers/RoomType.cs @@ -0,0 +1,9 @@ +namespace TRRandomizerCore.Helpers; + +public enum RoomType +{ + Normal, + ReturnPath, + Challenge, + Reward, +} diff --git a/TRRandomizerCore/TRRandomizerCore.csproj b/TRRandomizerCore/TRRandomizerCore.csproj index b7935f9fd..36cfc6363 100644 --- a/TRRandomizerCore/TRRandomizerCore.csproj +++ b/TRRandomizerCore/TRRandomizerCore.csproj @@ -33,9 +33,4 @@ PreserveNewest - - - Never - - From 60a0b4ba9d37de97074d50d4f195fd90d8d13834 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:43:11 +0000 Subject: [PATCH 03/17] Update location generation More robust height checks added for water scenarios - this prevents items being placed in wading locations for TR1. Items will not be placed on room portals or where mincarts stop. Fixed tiles with pickups triggers being excluded. Improved height difference tests between flipped rooms. This targets TR3 where a location has triangles, but the triangulation differs in the flipped state. Added a key item mode flag to allow individual tiles to be excluded in the JSON, but these remain valid for regular items e.g. Lost Valley room 1 tile [7,3]. --- LocationExport/Program.cs | 1 - TRFDControl/Utilities/FDUtilities.cs | 48 +++++++++++-- TRLevelControl/Helpers/TRConsts.cs | 2 + .../Locations/AbstractLocationGenerator.cs | 68 +++++++++++-------- .../Locations/TR1LocationGenerator.cs | 5 +- .../Locations/TR2LocationGenerator.cs | 5 +- .../Locations/TR3LocationGenerator.cs | 5 +- 7 files changed, 94 insertions(+), 40 deletions(-) diff --git a/LocationExport/Program.cs b/LocationExport/Program.cs index 8d4fac3b6..2cd36021f 100644 --- a/LocationExport/Program.cs +++ b/LocationExport/Program.cs @@ -5,7 +5,6 @@ using TRLevelControl.Helpers; using TRLevelControl.Model; using TRRandomizerCore.Helpers; -using TRRandomizerCore.Randomizers; using TRRandomizerCore.Utilities; namespace LocationExport; diff --git a/TRFDControl/Utilities/FDUtilities.cs b/TRFDControl/Utilities/FDUtilities.cs index 9c4476765..0f32e62e2 100644 --- a/TRFDControl/Utilities/FDUtilities.cs +++ b/TRFDControl/Utilities/FDUtilities.cs @@ -513,15 +513,23 @@ private static int CheckCeilingTriangle(FDControl floorData, TRRoomSector sector return 0; } - public static int GetHeight(int x, int z, short roomIndex, TR1Level level, FDControl floorData) + public static int GetHeight(int x, int z, short roomIndex, TR1Level level, FDControl floorData, bool waterOnly) { TRRoom room = level.Rooms[roomIndex]; - TRRoomSector baseSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); + if (waterOnly && !room.ContainsWater) + { + return TRConsts.NoHeight; + } + TRRoomSector baseSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); TRRoomSector floorSector = baseSector; while (floorSector.RoomBelow != TRConsts.NoRoom) { room = level.Rooms[floorSector.RoomBelow]; + if (waterOnly && !room.ContainsWater) + { + break; + } floorSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); } @@ -529,21 +537,33 @@ public static int GetHeight(int x, int z, short roomIndex, TR1Level level, FDCon while (ceilingSector.RoomAbove != TRConsts.NoRoom) { room = level.Rooms[ceilingSector.RoomAbove]; + if (waterOnly && !room.ContainsWater) + { + break; + } ceilingSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); } return GetHeight(x, z, floorSector, ceilingSector, floorData); } - public static int GetHeight(int x, int z, short roomIndex, TR2Level level, FDControl floorData) + public static int GetHeight(int x, int z, short roomIndex, TR2Level level, FDControl floorData, bool waterOnly) { TR2Room room = level.Rooms[roomIndex]; - TRRoomSector baseSector = GetRoomSector(x, z, room.SectorList, room.Info, room.NumZSectors); + if (waterOnly && !room.ContainsWater) + { + return TRConsts.NoHeight; + } + TRRoomSector baseSector = GetRoomSector(x, z, room.SectorList, room.Info, room.NumZSectors); TRRoomSector floorSector = baseSector; while (floorSector.RoomBelow != TRConsts.NoRoom) { room = level.Rooms[floorSector.RoomBelow]; + if (waterOnly && !room.ContainsWater) + { + break; + } floorSector = GetRoomSector(x, z, room.SectorList, room.Info, room.NumZSectors); } @@ -551,21 +571,33 @@ public static int GetHeight(int x, int z, short roomIndex, TR2Level level, FDCon while (ceilingSector.RoomAbove != TRConsts.NoRoom) { room = level.Rooms[ceilingSector.RoomAbove]; + if (waterOnly && !room.ContainsWater) + { + break; + } ceilingSector = GetRoomSector(x, z, room.SectorList, room.Info, room.NumZSectors); } return GetHeight(x, z, floorSector, ceilingSector, floorData); } - public static int GetHeight(int x, int z, short roomIndex, TR3Level level, FDControl floorData) + public static int GetHeight(int x, int z, short roomIndex, TR3Level level, FDControl floorData, bool waterOnly) { TR3Room room = level.Rooms[roomIndex]; - TRRoomSector baseSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); + if (waterOnly && !room.ContainsWater) + { + return TRConsts.NoHeight; + } + TRRoomSector baseSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); TRRoomSector floorSector = baseSector; while (floorSector.RoomBelow != TRConsts.NoRoom) { room = level.Rooms[floorSector.RoomBelow]; + if (waterOnly && !room.ContainsWater) + { + break; + } floorSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); } @@ -573,6 +605,10 @@ public static int GetHeight(int x, int z, short roomIndex, TR3Level level, FDCon while (ceilingSector.RoomAbove != TRConsts.NoRoom) { room = level.Rooms[ceilingSector.RoomAbove]; + if (waterOnly && !room.ContainsWater) + { + break; + } ceilingSector = GetRoomSector(x, z, room.Sectors, room.Info, room.NumZSectors); } diff --git a/TRLevelControl/Helpers/TRConsts.cs b/TRLevelControl/Helpers/TRConsts.cs index ceb7bd9d3..9351cc169 100644 --- a/TRLevelControl/Helpers/TRConsts.cs +++ b/TRLevelControl/Helpers/TRConsts.cs @@ -17,4 +17,6 @@ public static class TRConsts public const int NoRoom = 255; public const int WallShift = 10; + public const int NoHeight = -32512; + public const int WallClicks = -127; } diff --git a/TRRandomizerCore/Utilities/Locations/AbstractLocationGenerator.cs b/TRRandomizerCore/Utilities/Locations/AbstractLocationGenerator.cs index 5c53008fe..1abd0ba14 100644 --- a/TRRandomizerCore/Utilities/Locations/AbstractLocationGenerator.cs +++ b/TRRandomizerCore/Utilities/Locations/AbstractLocationGenerator.cs @@ -18,19 +18,19 @@ public abstract class AbstractLocationGenerator where L : class protected FDControl _floorData; protected ISet _excludedSectors, _antiExcludedSectors; // Anti-excluded => not necessarily included - public List Generate(L level, List exclusions) + public List Generate(L level, List exclusions, bool keyItemMode = false) { _floorData = new FDControl(); ReadFloorData(level); // Manual exclusions or known rooms such as swamps we wish to eliminate first - DetermineBaseExcludedSectors(level, exclusions); + DetermineBaseExcludedSectors(level, exclusions, keyItemMode); // Check all remaining sectors and build a list of valid locations return GetValidLocations(level); } - protected void DetermineBaseExcludedSectors(L level, List exclusions) + protected void DetermineBaseExcludedSectors(L level, List exclusions, bool keyItemMode) { _excludedSectors = new HashSet(); _antiExcludedSectors = new HashSet(); @@ -44,8 +44,10 @@ protected void DetermineBaseExcludedSectors(L level, List exclusions) _antiExcludedSectors.Add(GetSector(location, level)); } - // Check all other room or individual location exclusions - List mainExclusions = exclusions.FindAll(l => l.Validated); + // Check all other room or individual location exclusions. If TargetType is set, + // it applies only to key item mode. + List mainExclusions = exclusions.FindAll( + l => l.Validated && (l.TargetType == -1 || keyItemMode)); foreach (Location location in mainExclusions) { if (location.InvalidatesRoom) @@ -136,11 +138,6 @@ private bool RoomHasCollisionalPortal(L level, short room) { foreach (TRRoomSector sector in GetRoomSectors(level, room)) { - if (sector.IsImpenetrable) - { - continue; - } - // Vertical? if (sector.RoomAbove != TRConsts.NoRoom || sector.RoomBelow != TRConsts.NoRoom) { @@ -148,12 +145,10 @@ private bool RoomHasCollisionalPortal(L level, short room) } // Horizontal? - if (sector.FDIndex != 0) + if (sector.FDIndex != 0 + && _floorData.Entries[sector.FDIndex].Any(e => e is FDPortalEntry)) { - if (_floorData.Entries[sector.FDIndex].Any(e => e is FDPortalEntry)) - { - return true; - } + return true; } } @@ -197,7 +192,7 @@ protected void ExcludeFlipSectors(L level, short room, short flipRoom) int flipIndex = flipSectors.IndexOf(flipSector); Location flipLoc = CreateLocation(level, flipRoom, flipIndex, flipSector); - if (flipLoc == null || flipLoc.Y != roomLoc.Y || flipSector.IsImpenetrable) + if (flipLoc == null || roomLoc.ToVector() != flipLoc.ToVector() || flipSector.IsImpenetrable) { _excludedSectors.Add(roomSector); } @@ -245,8 +240,9 @@ private Location CreateLocation(L level, short roomIndex, int sectorIndex, TRRoo { List entries = _floorData.Entries[sector.FDIndex]; bool invalidFloorData = false; - foreach (FDEntry entry in entries) + for (int i = 0; i < entries.Count; i++) { + FDEntry entry = entries[i]; if (entry is FDTriggerEntry trigger) { // Basic trigger checks - e.g. end level, underwater current @@ -256,6 +252,11 @@ private Location CreateLocation(L level, short roomIndex, int sectorIndex, TRRoo break; } } + else if (entry is FDPortalEntry) + { + invalidFloorData = true; + break; + } else if (entry is FDKillLaraEntry) { // For obvious reasons @@ -300,6 +301,11 @@ private Location CreateLocation(L level, short roomIndex, int sectorIndex, TRRoo break; } } + else if (entry is TR3MinecartRotateLeftEntry && i < entries.Count - 1 && entries[i + 1] is TR3MinecartRotateRightEntry) + { + // Minecart stops here, so block this tile. + invalidFloorData = true; + } } // Bail out if we don't like the look of the FD here @@ -324,6 +330,15 @@ private Location CreateLocation(L level, short roomIndex, int sectorIndex, TRRoo location.Z += dz; location.Angle = angle; + if (!WadingAllowed) + { + int waterHeight = GetHeight(level, location, true); + if (waterHeight != TRConsts.NoHeight && waterHeight < _standardHeight) + { + return null; + } + } + // Check the absolute height from floor to ceiling to ensure Lara can be here. // Test around the mid-point for cases of steep ceiling slopes. Location testLocation = new() @@ -337,7 +352,7 @@ private Location CreateLocation(L level, short roomIndex, int sectorIndex, TRRoo { testLocation.X = location.X + x * TRConsts.Step1 / 2; testLocation.Z = location.Z + z * TRConsts.Step1 / 2; - int height = GetHeight(level, testLocation); + int height = GetHeight(level, testLocation, false); if (height < (CrawlspacesAllowed ? _crawlspaceHeight : _standardHeight)) { return null; @@ -352,20 +367,18 @@ private bool IsSectorInvalid(TRRoomSector sector) { // Inside a wall, on a "normal" slope, or too near the ceiling return _excludedSectors.Contains(sector) - || sector.IsImpenetrable + || sector.Floor == TRConsts.WallClicks + || sector.Ceiling == TRConsts.WallClicks || sector.IsSlipperySlope; } private static bool IsTriggerInvalid(FDTriggerEntry trigger) { // Any trigger types where we don't want items placed - return trigger.TrigType == FDTrigType.Pickup - || trigger.TrigActionList.Any - ( - a => - a.TrigAction == FDTrigAction.UnderwaterCurrent - || a.TrigAction == FDTrigAction.EndLevel - ); + return trigger.TrigActionList.Any(a => + a.TrigAction == FDTrigAction.UnderwaterCurrent + || a.TrigAction == FDTrigAction.EndLevel + ); } public Vector4? GetBestSlantMidpoint(FDSlantEntry slant) @@ -699,6 +712,7 @@ private static Location CreateLocation(short roomIndex, TRRoomSector sector, int protected abstract ushort GetRoomDepth(L level, short room); protected abstract int GetRoomYTop(L level, short room); protected abstract Vector2 GetRoomPosition(L level, short room); - protected abstract int GetHeight(L level, Location location); + protected abstract int GetHeight(L level, Location location, bool waterOnly); public abstract bool CrawlspacesAllowed { get; } + public abstract bool WadingAllowed { get; } } diff --git a/TRRandomizerCore/Utilities/Locations/TR1LocationGenerator.cs b/TRRandomizerCore/Utilities/Locations/TR1LocationGenerator.cs index bb8b8bd2e..0308390be 100644 --- a/TRRandomizerCore/Utilities/Locations/TR1LocationGenerator.cs +++ b/TRRandomizerCore/Utilities/Locations/TR1LocationGenerator.cs @@ -8,6 +8,7 @@ namespace TRRandomizerCore.Utilities; public class TR1LocationGenerator : AbstractLocationGenerator { public override bool CrawlspacesAllowed => false; + public override bool WadingAllowed => false; protected override void ReadFloorData(TR1Level level) { @@ -87,8 +88,8 @@ protected override Vector2 GetRoomPosition(TR1Level level, short room) return new Vector2(level.Rooms[room].Info.X, level.Rooms[room].Info.Z); } - protected override int GetHeight(TR1Level level, Location location) + protected override int GetHeight(TR1Level level, Location location, bool waterOnly) { - return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData); + return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData, waterOnly); } } diff --git a/TRRandomizerCore/Utilities/Locations/TR2LocationGenerator.cs b/TRRandomizerCore/Utilities/Locations/TR2LocationGenerator.cs index 574a1e0e5..261f160fd 100644 --- a/TRRandomizerCore/Utilities/Locations/TR2LocationGenerator.cs +++ b/TRRandomizerCore/Utilities/Locations/TR2LocationGenerator.cs @@ -8,6 +8,7 @@ namespace TRRandomizerCore.Utilities; public class TR2LocationGenerator : AbstractLocationGenerator { public override bool CrawlspacesAllowed => false; + public override bool WadingAllowed => true; protected override void ReadFloorData(TR2Level level) { @@ -87,8 +88,8 @@ protected override Vector2 GetRoomPosition(TR2Level level, short room) return new Vector2(level.Rooms[room].Info.X, level.Rooms[room].Info.Z); } - protected override int GetHeight(TR2Level level, Location location) + protected override int GetHeight(TR2Level level, Location location, bool waterOnly) { - return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData); + return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData, waterOnly); } } diff --git a/TRRandomizerCore/Utilities/Locations/TR3LocationGenerator.cs b/TRRandomizerCore/Utilities/Locations/TR3LocationGenerator.cs index 215e174a7..264406573 100644 --- a/TRRandomizerCore/Utilities/Locations/TR3LocationGenerator.cs +++ b/TRRandomizerCore/Utilities/Locations/TR3LocationGenerator.cs @@ -8,6 +8,7 @@ namespace TRRandomizerCore.Utilities; public class TR3LocationGenerator : AbstractLocationGenerator { public override bool CrawlspacesAllowed => true; + public override bool WadingAllowed => true; protected override void ReadFloorData(TR3Level level) { @@ -87,8 +88,8 @@ protected override Vector2 GetRoomPosition(TR3Level level, short room) return new Vector2(level.Rooms[room].Info.X, level.Rooms[room].Info.Z); } - protected override int GetHeight(TR3Level level, Location location) + protected override int GetHeight(TR3Level level, Location location, bool waterOnly) { - return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData); + return FDUtilities.GetHeight(location.X, location.Z, (short)location.Room, level, _floorData, waterOnly); } } From cbd9aab69d951760ece5668482f5c7bd79446418 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:47:09 +0000 Subject: [PATCH 04/17] Update TR1 environment changes Update to door mirroring to avoid treating doors that are in front of each other as side-by-side double doors. This only affected the ones at the end of Vilcabamba, which wasn't too big an issue before, but it would be possible with the coming key item changes for the gold idol to appear between the doors, so it would lead to a softlock. General environment updates: City of Khamoon - makes sure a door is open after leaving a challenge room, as key items may end up here. Obelisk - a mod may add a key to exit the level. We now leave this in a default spot rather than picking one from the mods, and key item rando will detect and move it. Mines - return paths added in the TNT area. And similar to Obelisk, we make an added key item static for key item rando to detect. --- .../Model/Types/Mirroring/EMMirrorFunction.cs | 20 +- .../Environment/LEVEL10A.PHD-Environment.json | 315 +++++++++--------- .../Environment/LEVEL8A.PHD-Environment.json | 19 ++ .../Environment/LEVEL8B.PHD-Environment.json | 70 +--- 4 files changed, 188 insertions(+), 236 deletions(-) diff --git a/TREnvironmentEditor/Model/Types/Mirroring/EMMirrorFunction.cs b/TREnvironmentEditor/Model/Types/Mirroring/EMMirrorFunction.cs index d26fe9bdb..95edbf867 100644 --- a/TREnvironmentEditor/Model/Types/Mirroring/EMMirrorFunction.cs +++ b/TREnvironmentEditor/Model/Types/Mirroring/EMMirrorFunction.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using TRFDControl; using TRFDControl.FDEntryTypes; +using TRLevelControl; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRModelTransporter.Model.Textures; @@ -944,12 +945,19 @@ private static bool AreDoubleDoors(TREntity door1, TREntity door2) where T : Enum { // If the difference between X or Z position is one sector size, they share the same Y val, - // and they are facing the same diretion, then they're double doors. - return !EqualityComparer.Default.Equals(door1.TypeID, door2.TypeID) - && door1.Room == door2.Room - && door1.Y == door2.Y - && door1.Angle == door2.Angle - && (Math.Abs(door1.X - door2.X) == SectorSize || Math.Abs(door1.Z - door2.Z) == SectorSize); + // and they are facing the same direction, then they're double doors. + if (EqualityComparer.Default.Equals(door1.TypeID, door2.TypeID) + || door1.Room != door2.Room + || door1.Y != door2.Y + || door1.Angle != door2.Angle) + { + return false; + } + + // Be careful not to shift doors that are in front of each other, like at the end of Vilcabamba. + return (door1.Angle == _north || door1.Angle == _south) + ? Math.Abs(door1.X - door2.X) == TRConsts.Step4 + : Math.Abs(door1.Z - door2.Z) == TRConsts.Step4; } private void MirrorNullMeshes(TR1Level level) diff --git a/TRRandomizerCore/Resources/TR1/Environment/LEVEL10A.PHD-Environment.json b/TRRandomizerCore/Resources/TR1/Environment/LEVEL10A.PHD-Environment.json index a1b891251..a3d380c63 100644 --- a/TRRandomizerCore/Resources/TR1/Environment/LEVEL10A.PHD-Environment.json +++ b/TRRandomizerCore/Resources/TR1/Environment/LEVEL10A.PHD-Environment.json @@ -53,6 +53,146 @@ } } ] + }, + { + "Comments": "Add some trapdoors as return paths near the TNT.", + "EMType": 51, + "Tags": [ + 9 + ], + "TypeID": 66, + "Flags": 15872, + "Location": { + "X": 92672, + "Y": 6144, + "Z": 62976, + "Room": 48, + "Angle": -16384 + } + }, + { + "EMType": 51, + "Tags": [ + 9 + ], + "TypeID": 66, + "Flags": 15872, + "Location": { + "X": 82432, + "Y": 3584, + "Z": 68096, + "Room": 50 + } + }, + { + "Comments": "Add dummy triggers.", + "EMType": 61, + "Tags": [ + 9 + ], + "EntityLocation": -2, + "Trigger": { + "TrigType": 8, + "Mask": 31, + "Actions": [ + { + "Parameter": -2 + } + ] + } + }, + { + "EMType": 61, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 82432, + "Y": 3584, + "Z": 68096, + "Room": 84 + } + ], + "EntityLocation": -1, + "Trigger": { + "TrigType": 8, + "Mask": 31, + "Actions": [ + { + "Parameter": -1 + } + ] + } + }, + { + "Comments": "And regular triggers.", + "EMType": 61, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 92672, + "Y": 5888, + "Z": 64000, + "Room": 48 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": -2 + } + ] + } + }, + { + "EMType": 61, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 83456, + "Y": 3584, + "Z": 67072, + "Room": 51 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": -1 + } + ] + } + }, + { + "Comments": "Reset the boulder trap too.", + "EMType": 61, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 82432, + "Y": 4224, + "Z": 58880, + "Room": 46 + } + ], + "Trigger": { + "TrigType": 6, + "Mask": 31, + "Actions": [ + { + "Parameter": 86 + } + ] + } } ], "Any": [ @@ -421,7 +561,7 @@ } }, { - "Comments": "Add a keyhole - the key itself will be added in ConditionalAllWithin.", + "Comments": "Add a keyhole.", "EMType": 51, "TypeID": 137, "Intensity": -1, @@ -466,6 +606,18 @@ } ] } + }, + { + "Comments": "Default key location - key item rando can move this.", + "EMType": 51, + "TypeID": 129, + "Intensity": 4096, + "Location": { + "X": 53760, + "Y": -7168, + "Z": 24064, + "Room": 3 + } } ], [ @@ -7452,166 +7604,7 @@ ] } ], - "ConditionalAllWithin": [ - { - "Condition": { - "Comments": "If the portal between rooms 21 and 17 has been reduced, a key is now needed to pass.", - "ConditionType": 23, - "Location": { - "X": 60928, - "Y": -3584, - "Z": 49664, - "Room": 21 - } - }, - "OnTrue": [ - [ - { - "Comments": "Potential key location.", - "EMType": 51, - "TypeID": 129, - "Intensity": 4096, - "Location": { - "X": 53760, - "Y": -7168, - "Z": 24064, - "Room": 3 - } - } - ], - [ - { - "Comments": "Put the key in the shack.", - "EMType": 51, - "TypeID": 129, - "Flags": 256, - "Intensity": 4096, - "Location": { - "X": 68096, - "Y": -7168, - "Z": 28160, - "Room": 94 - } - }, - { - "Comments": "Trigger the key once the fuses are used (same method as pistols).", - "EMType": 68, - "Locations": [ - { - "X": 66048, - "Y": -7296, - "Z": 32256, - "Room": 96 - }, - { - "X": 67072, - "Y": -7168, - "Z": 32256, - "Room": 96 - }, - { - "X": 68096, - "Y": -7296, - "Z": 32256, - "Room": 97 - }, - { - "X": 69120, - "Y": -7296, - "Z": 32256, - "Room": 97 - }, - { - "X": 70144, - "Y": -7680, - "Z": 32256, - "Room": 98 - }, - { - "X": 71168, - "Y": -7808, - "Z": 32256, - "Room": 98 - }, - { - "X": 72192, - "Y": -7424, - "Z": 32256, - "Room": 98 - }, - { - "X": 73216, - "Y": -7808, - "Z": 32256, - "Room": 98 - } - ], - "Actions": [ - { - "Parameter": -1 - } - ] - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 51, - "TypeID": 129, - "Intensity": 4096, - "Location": { - "X": 61952, - "Y": -10496, - "Z": 29184, - "Room": 32 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 51, - "TypeID": 129, - "Intensity": 4096, - "Location": { - "X": 77312, - "Y": -10240, - "Z": 24064, - "Room": 42 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 51, - "TypeID": 129, - "Intensity": 4096, - "Location": { - "X": 82432, - "Y": -10240, - "Z": 27136, - "Room": 35 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 51, - "TypeID": 129, - "Intensity": 4096, - "Location": { - "X": 99840, - "Y": -7808, - "Z": 31232, - "Room": 37 - } - } - ] - ] - } - ], + "ConditionalAllWithin": [], "ConditionalAll": [ { "Condition": { diff --git a/TRRandomizerCore/Resources/TR1/Environment/LEVEL8A.PHD-Environment.json b/TRRandomizerCore/Resources/TR1/Environment/LEVEL8A.PHD-Environment.json index 5fff75d06..7eadb32a7 100644 --- a/TRRandomizerCore/Resources/TR1/Environment/LEVEL8A.PHD-Environment.json +++ b/TRRandomizerCore/Resources/TR1/Environment/LEVEL8A.PHD-Environment.json @@ -4052,6 +4052,25 @@ ] } }, + { + "Comments": "Open the door from the other side, just in case.", + "EMType": 61, + "Locations": [ + { + "X": 28160, + "Y": -384, + "Z": 6656 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": -1 + } + ] + } + }, { "Comments": "Ensure the swinging blade model is available.", "EMType": 145, diff --git a/TRRandomizerCore/Resources/TR1/Environment/LEVEL8B.PHD-Environment.json b/TRRandomizerCore/Resources/TR1/Environment/LEVEL8B.PHD-Environment.json index a0a4c7dcc..c6fcd855c 100644 --- a/TRRandomizerCore/Resources/TR1/Environment/LEVEL8B.PHD-Environment.json +++ b/TRRandomizerCore/Resources/TR1/Environment/LEVEL8B.PHD-Environment.json @@ -270,7 +270,7 @@ "Intensity1": 4096 }, { - "Comments": "Move it somewhere reachable. Conditional changes below may shift it elsewhere.", + "Comments": "Move it somewhere reachable - key item rando can move this.", "EMType": 44, "EntityIndex": 12, "TargetLocation": { @@ -4148,74 +4148,6 @@ } ], "ConditionalAllWithin": [ - { - "Condition": { - "Comments": "If the spare switch from City is now a key, relocate it.", - "ConditionType": 0, - "EntityIndex": 12, - "EntityType": 129 - }, - "OnTrue": [ - [ - { - "Comments": "Default location from Any.", - "EMType": 1000 - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 44, - "EntityIndex": 12, - "TargetLocation": { - "X": 37376, - "Y": -1280, - "Z": 31232, - "Room": 67 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 44, - "EntityIndex": 12, - "TargetLocation": { - "X": 36352, - "Y": -3072, - "Z": 39424, - "Room": 59 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 44, - "EntityIndex": 12, - "TargetLocation": { - "X": 48640, - "Y": 7680, - "Z": 50688, - "Room": 63 - } - } - ], - [ - { - "Comments": "Potential key location.", - "EMType": 44, - "EntityIndex": 12, - "TargetLocation": { - "X": 34304, - "Y": 1024, - "Z": 40448, - "Room": 62 - } - } - ] - ] - }, { "Condition": { "Comments": "Check if room 3 contains water and move the slots accordingly.", From 053eab5992b752ccb24d6bb92ce9edda17dbee29 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:53:09 +0000 Subject: [PATCH 05/17] Update TR2 environment changes Return paths added to Opera, Wreck, The Deck, Tibet, and Ice Palace. Fixed flipmap issues in Catacombs ahead of the initial mask being randomized. Added various trigger checks ahead of key item rando. This includes converting some triggers to pickup type so they can be detected and moved, like the mask in Ice Palace. TR2 also has several checks for secret repositioning in environment mods e.g. after we have drained an area. This was specifically looking for stone, jade or gold in some cases. Secret zoning will change so these mods now look for each type. --- .../Environment/CATACOMB.TR2-Environment.json | 170 ++ .../TR2/Environment/DECK.TR2-Environment.json | 42 +- .../Environment/EMPRTOMB.TR2-Environment.json | 98 +- .../Environment/FLOATING.TR2-Environment.json | 321 ++-- .../Environment/ICECAVE.TR2-Environment.json | 802 +++++++++ .../TR2/Environment/KEEL.TR2-Environment.json | 86 + .../Environment/MONASTRY.TR2-Environment.json | 14 + .../Environment/OPERA.TR2-Environment.json | 483 +++++- .../Environment/PLATFORM.TR2-Environment.json | 8 + .../Environment/SKIDOO.TR2-Environment.json | 1521 +++++++++++++++-- .../Environment/UNWATER.TR2-Environment.json | 32 +- 11 files changed, 3294 insertions(+), 283 deletions(-) diff --git a/TRRandomizerCore/Resources/TR2/Environment/CATACOMB.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/CATACOMB.TR2-Environment.json index 9baaa5944..7e31d56f1 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/CATACOMB.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/CATACOMB.TR2-Environment.json @@ -112,6 +112,130 @@ }, "IsNegativeX": true }, + { + "Comments": "Restore missing breakable tile triggers in flip room 116.", + "EMType": 63, + "Locations": [ + { + "X": 34304, + "Y": 3840, + "Z": 44544, + "Room": 116 + } + ], + "BaseLocation": { + "X": 34304, + "Y": 3840, + "Z": 44544, + "Room": 98 + } + }, + { + "EMType": 63, + "Locations": [ + { + "X": 35328, + "Y": 3840, + "Z": 44544, + "Room": 116 + } + ], + "BaseLocation": { + "X": 35328, + "Y": 3840, + "Z": 44544, + "Room": 98 + } + }, + { + "EMType": 63, + "Locations": [ + { + "X": 36352, + "Y": 3840, + "Z": 44544, + "Room": 116 + } + ], + "BaseLocation": { + "X": 36352, + "Y": 3840, + "Z": 44544, + "Room": 98 + } + }, + { + "Comments": "Restore missing enemy triggers in flip room 116.", + "EMType": 63, + "Locations": [ + { + "X": 32256, + "Y": 5376, + "Z": 37376, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 38400, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 39424, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 40448, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 41472, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 42496, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 43520, + "Room": 116 + }, + { + "X": 32256, + "Y": 5376, + "Z": 44544, + "Room": 116 + } + ], + "BaseLocation": { + "X": 32256, + "Y": 5376, + "Z": 37376, + "Room": 98 + } + }, + { + "Comments": "Restore the missing ladder FD in room 116.", + "EMType": 0, + "TextureMap": {}, + "Location": { + "X": 36352, + "Y": 5376, + "Z": 44544, + "Room": 116 + }, + "IsPositiveX": true + }, { "EMType": 0, "Tags": [ @@ -2707,6 +2831,52 @@ "TargetSpriteID": 175 } ] + }, + { + "Condition": { + "Comments": "Check if key item #9 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 9, + "X": 27136, + "Y": 1024, + "Z": 44544, + "Room": 2 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 27136, + "Y": 1024, + "Z": 44544, + "Room": 2 + }, + "EntityLocation": 9 + } + ] + }, + { + "Condition": { + "Comments": "Check if key item #112 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 112, + "X": 19968, + "Y": 10496, + "Z": 54784, + "Room": 67 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 19968, + "Y": 10496, + "Z": 54784, + "Room": 67 + }, + "EntityLocation": 112 + } + ] } ], "ConditionalOneOf": [], diff --git a/TRRandomizerCore/Resources/TR2/Environment/DECK.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/DECK.TR2-Environment.json index bc2e78c57..44e2148c1 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/DECK.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/DECK.TR2-Environment.json @@ -1,5 +1,45 @@ { - "All": [], + "All": [ + { + "Comments": "Replace the trigger under the cabin key with a pad (only if key item rando is enabled).", + "EMType": 69, + "Tags": [ + 12 + ], + "Location": { + "X": 61952, + "Y": 5376, + "Z": 49664, + "Room": 15 + }, + "TrigType": 1 + }, + { + "Comments": "Make a ladder from the stern back to the first deck, in case the stern key is there and was missed.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1713": { + "86": { + "Rectangles": [ + 85, + 86, + 87 + ] + } + } + }, + "Location": { + "X": 39424, + "Y": 3072, + "Z": 36352, + "Room": 86 + }, + "IsPositiveZ": true + } + ], "Any": [ [ { diff --git a/TRRandomizerCore/Resources/TR2/Environment/EMPRTOMB.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/EMPRTOMB.TR2-Environment.json index 0cb82a124..f4cddc370 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/EMPRTOMB.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/EMPRTOMB.TR2-Environment.json @@ -1,5 +1,95 @@ { "All": [ + { + "Comments": "Convert door 191's activation if key item rando is enabled.", + "EMType": 48, + "Tags": [ + 12 + ], + "EntityIndex": 191, + "Flags": 0 + }, + { + "EMType": 68, + "Tags": [ + 12 + ], + "Location": { + "X": 47616, + "Y": 18944, + "Z": 44544, + "Room": 168 + }, + "Actions": [ + { + "Parameter": 191 + } + ] + }, + { + "EMType": 69, + "Tags": [ + 12 + ], + "Location": { + "X": 48640, + "Y": 18944, + "Z": 34304, + "Room": 116 + }, + "TrigType": 9 + }, + { + "Comments": "It's entirely possible to softlock in OG in the main chamber area, so prevent that by adjusting some triggers for trapdoors 79 and 144.", + "EMType": 71, + "Locations": [ + { + "X": 25088, + "Y": -1792, + "Z": 67072, + "Room": 90 + } + ], + "ActionItem": { + "Parameter": 79 + } + }, + { + "EMType": 71, + "Locations": [ + { + "X": 25088, + "Y": -1792, + "Z": 67072, + "Room": 90 + } + ], + "ActionItem": { + "Parameter": 145 + } + }, + { + "EMType": 61, + "Locations": [ + { + "X": 26112, + "Y": -11264, + "Z": 66048, + "Room": 135 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": 79 + }, + { + "Parameter": 145 + } + ] + } + }, { "Comments": "Create a return path from the top of the waterfall to the very beginning.", "EMType": 126, @@ -4686,7 +4776,9 @@ "Comments": "A glitched secret may be in the unreachable room, so move it to another glitched location.", "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -4757,7 +4849,9 @@ "Comments": "A glitched secret may be in the unreachable room, so move it to another glitched location.", "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { diff --git a/TRRandomizerCore/Resources/TR2/Environment/FLOATING.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/FLOATING.TR2-Environment.json index e9650721e..297b83848 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/FLOATING.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/FLOATING.TR2-Environment.json @@ -1,5 +1,79 @@ { - "All": [], + "All": [ + { + "Comments": "Tweak a slope at the end for easier key item exploration, if enabled.", + "EMType": 7, + "Tags": [ + 12 + ], + "Location": { + "X": 24064, + "Y": -8448, + "Z": 73216, + "Room": 40 + }, + "SlantType": 1, + "XSlant": 0, + "ZSlant": -1 + }, + { + "EMType": 23, + "Tags": [ + 12 + ], + "Modifications": [ + { + "RoomNumber": 40, + "FaceIndices": [ + 82, + 83 + ], + "VertexChanges": { + "0": { + "Y": -768 + }, + "1": { + "Y": -768 + } + } + }, + { + "RoomNumber": 40, + "FaceType": 1, + "FaceIndex": 12, + "VertexChanges": { + "0": { + "Y": -256, + "Z": -1024 + }, + "1": { + "Y": -256, + "Z": -1024 + }, + "2": { + "Y": -256, + "Z": -1024 + } + } + } + ] + }, + { + "EMType": 21, + "Tags": [ + 12 + ], + "TextureMap": { + "1557": { + "40": { + "Triangles": [ + 12 + ] + } + } + } + } + ], "Any": [ [ { @@ -30,6 +104,98 @@ "SideTexture": 1863, "Flags": 7 } + ], + [ + { + "Comments": "Move the end trigger.", + "EMType": 67, + "BaseLocation": { + "X": 22115, + "Y": -7424, + "Z": 64052, + "Room": 40 + }, + "NewLocation": { + "X": 22167, + "Y": -7424, + "Z": 61012, + "Room": 161 + } + }, + { + "Comments": "Deactivate the door into Lair.", + "EMType": 48, + "EntityIndex": 37, + "Flags": 0 + }, + { + "Comments": "Flip the door around so the portal's on the right side.", + "EMType": 44, + "EntityIndex": 37, + "TargetLocation": { + "X": 22016, + "Y": -7424, + "Z": 65024, + "Room": 40 + } + }, + { + "Comments": "Convert some spikes into a mystic plaque slot.", + "EMType": 45, + "EntityIndex": 58, + "NewEntityType": 182 + }, + { + "Comments": "Reposition it to the Lair door.", + "EMType": 44, + "EntityIndex": 58, + "TargetLocation": { + "X": 22016, + "Y": -7424, + "Z": 65024, + "Room": 40, + "Angle": 16384 + } + }, + { + "Comments": "Make a trigger to open the door.", + "EMType": 61, + "Locations": [ + { + "X": 22016, + "Y": -7424, + "Z": 65024, + "Room": 40 + } + ], + "Trigger": { + "TrigType": 3, + "Mask": 31, + "SwitchOrKeyRef": 58, + "Actions": [ + { + "Parameter": 37 + } + ] + } + }, + { + "Comments": "Convert some other spikes into a mystic plaque.", + "EMType": 45, + "EntityIndex": 57, + "NewEntityType": 174 + }, + { + "Comments": "Default position for the new mystic plaque - key item rando can move this.", + "EMType": 44, + "EntityIndex": 57, + "TargetLocation": { + "X": 26482, + "Y": -8636, + "Z": 72639, + "Room": 144 + } + } ] ], "AllWithin": [], @@ -2110,156 +2276,6 @@ } ] ] - }, - { - "Leader": [ - { - "Comments": "Move the end trigger.", - "EMType": 67, - "BaseLocation": { - "X": 22115, - "Y": -7424, - "Z": 64052, - "Room": 40 - }, - "NewLocation": { - "X": 22167, - "Y": -7424, - "Z": 61012, - "Room": 161 - } - }, - { - "Comments": "Deactivate the door into Lair.", - "EMType": 48, - "EntityIndex": 37, - "Flags": 0 - }, - { - "Comments": "Flip the door around so the portal's on the right side.", - "EMType": 44, - "EntityIndex": 37, - "TargetLocation": { - "X": 22016, - "Y": -7424, - "Z": 65024, - "Room": 40 - } - }, - { - "Comments": "Convert some spikes into a mystic plaque slot.", - "EMType": 45, - "EntityIndex": 58, - "NewEntityType": 182 - }, - { - "Comments": "Reposition it to the Lair door.", - "EMType": 44, - "EntityIndex": 58, - "TargetLocation": { - "X": 22016, - "Y": -7424, - "Z": 65024, - "Room": 40, - "Angle": 16384 - } - }, - { - "Comments": "Make a trigger to open the door.", - "EMType": 61, - "Locations": [ - { - "X": 22016, - "Y": -7424, - "Z": 65024, - "Room": 40 - } - ], - "Trigger": { - "TrigType": 3, - "Mask": 31, - "SwitchOrKeyRef": 58, - "Actions": [ - { - "Parameter": 37 - } - ] - } - }, - { - "Comments": "Convert some other spikes into a mystic plaque.", - "EMType": 45, - "EntityIndex": 57, - "NewEntityType": 174 - } - ], - "Followers": [ - [ - { - "Comments": "Default position for the new mystic plaque.", - "EMType": 44, - "EntityIndex": 57, - "TargetLocation": { - "X": 26482, - "Y": -8636, - "Z": 72639, - "Room": 144 - } - } - ], - [ - { - "Comments": "Potential position for the new mystic plaque.", - "EMType": 44, - "EntityIndex": 57, - "TargetLocation": { - "X": 23062, - "Y": -4484, - "Z": 67097, - "Room": 124 - } - } - ], - [ - { - "Comments": "Potential position for the new mystic plaque.", - "EMType": 44, - "EntityIndex": 57, - "TargetLocation": { - "X": 26358, - "Y": -5796, - "Z": 64409, - "Room": 159 - } - } - ], - [ - { - "Comments": "Potential position for the new mystic plaque.", - "EMType": 44, - "EntityIndex": 57, - "TargetLocation": { - "X": 33294, - "Y": -8351, - "Z": 64069, - "Room": 159 - } - } - ], - [ - { - "Comments": "Potential position for the new mystic plaque.", - "EMType": 44, - "EntityIndex": 57, - "TargetLocation": { - "X": 35268, - "Y": -9984, - "Z": 62927, - "Room": 41 - } - } - ] - ] } ], "ConditionalAllWithin": [], @@ -2605,6 +2621,7 @@ "1688": 1704, "1863": 1879, "1709": 1725, - "1678": 1694 + "1678": 1694, + "1557": 1573 } } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Environment/ICECAVE.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/ICECAVE.TR2-Environment.json index 542bb28e3..6427db9a4 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/ICECAVE.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/ICECAVE.TR2-Environment.json @@ -1,5 +1,724 @@ { "All": [ + { + "Comments": "Replace the trigger under the mask with a pickup type (only if key item rando is enabled, so that the trigger can be detected when moving the mask).", + "EMType": 61, + "Tags": [ + 12 + ], + "EntityLocation": 138, + "Trigger": { + "TrigType": 4, + "Mask": 31, + "Actions": [ + { + "Parameter": 138 + }, + { + "Parameter": 131 + } + ] + }, + "Replace": true + }, + { + "Comments": "If we've taken the shortcut past the mask door, make it open from the other side.", + "EMType": 61, + "Locations": [ + { + "X": 42496, + "Y": 3328, + "Z": 50688, + "Room": 31 + }, + { + "X": 41472, + "Y": 5888, + "Z": 55808, + "Room": 65 + }, + { + "X": 41472, + "Y": 5888, + "Z": 56832, + "Room": 65 + }, + { + "X": 41472, + "Y": 5888, + "Z": 57856, + "Room": 65 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": 83 + } + ] + } + }, + { + "Comments": "Create a return path from the chicken area to the yeti hideout.", + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 51200, + "Y": 9472, + "Z": 23552 + }, + "LinkedLocation": { + "X": 38400, + "Y": 6400, + "Z": 28160, + "Room": 61 + }, + "Textures": { + "Floor": 1369, + "Ceiling": 1343, + "WallAlignment": 4, + "Wall4": 1343, + "Wall3": 1416, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 8191, + "DefaultVertex": { + "Lighting": 6446, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 1536, + "Intensity1": 3072, + "Intensity2": 3072, + "Fade1": 2048, + "Fade2": 2048 + }, + { + "X": 1536, + "Y": -5376, + "Z": 1536, + "Intensity1": 1024, + "Intensity2": 1024, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 23, + "Width": 3, + "Depth": 4, + "CeilingHeights": { + "19": [ + 6 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 46080, + "Y": 3584, + "Z": 23552 + }, + "LinkedLocation": { + "X": 38400, + "Y": 6400, + "Z": 28160, + "Room": 61 + }, + "Textures": { + "Floor": 1369, + "Ceiling": 1343, + "WallAlignment": 4, + "Wall4": 1343, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 8191, + "DefaultVertex": { + "Lighting": 6446, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 2560, + "Intensity1": 3072, + "Intensity2": 3072, + "Fade1": 2048, + "Fade2": 2048 + }, + { + "X": 6656, + "Y": -512, + "Z": 1536, + "Intensity1": 1024, + "Intensity2": 1024, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 4, + "Width": 8, + "Depth": 4, + "FloorHeights": { + "-127": [ + 10, + 14, + 18, + 22, + 26 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 37888, + "Y": 3584, + "Z": 25600 + }, + "LinkedLocation": { + "X": 38400, + "Y": 6400, + "Z": 28160, + "Room": 61 + }, + "Textures": { + "Floor": 1369, + "Ceiling": 1343, + "WallAlignment": 4, + "Wall4": 1343, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 8191, + "DefaultVertex": { + "Lighting": 6446, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 2560, + "Intensity1": 1024, + "Intensity2": 1024, + "Fade1": 1024, + "Fade2": 1024 + }, + { + "X": 9728, + "Y": -512, + "Z": 1536, + "Intensity1": 3072, + "Intensity2": 3072, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 4, + "Width": 11, + "Depth": 4, + "FloorHeights": { + "-127": [ + 5, + 9, + 13, + 17, + 21, + 25, + 29, + 33 + ] + } + }, + { + "Comments": "Make visibility portals.", + "EMType": 81, + "Tags": [ + 9 + ], + "Portals": [ + { + "BaseRoom": 61, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 5120, + "Y": 3584, + "Z": 2048 + }, + { + "X": 4096, + "Y": 3584, + "Z": 2048 + }, + { + "X": 4096, + "Y": 3584, + "Z": 3072 + }, + { + "X": 5120, + "Y": 3584, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": 61, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": 3584, + "Z": 3072 + }, + { + "X": 2048, + "Y": 3584, + "Z": 3072 + }, + { + "X": 2048, + "Y": 3584, + "Z": 2048 + }, + { + "X": 1024, + "Y": 3584, + "Z": 2048 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": -2, + "Normal": { + "Z": 1 + }, + "Vertices": [ + { + "X": 10240, + "Y": 2560, + "Z": 1024 + }, + { + "X": 9216, + "Y": 2560, + "Z": 1024 + }, + { + "X": 9216, + "Y": 3584, + "Z": 1024 + }, + { + "X": 10240, + "Y": 3584, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": -1, + "Normal": { + "Z": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": 2560, + "Z": 3072 + }, + { + "X": 2048, + "Y": 2560, + "Z": 3072 + }, + { + "X": 2048, + "Y": 3584, + "Z": 3072 + }, + { + "X": 1024, + "Y": 3584, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": -3, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 6144, + "Y": 3584, + "Z": 2048 + }, + { + "X": 7168, + "Y": 3584, + "Z": 2048 + }, + { + "X": 7168, + "Y": 3584, + "Z": 1024 + }, + { + "X": 6144, + "Y": 3584, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -3, + "AdjoiningRoom": -2, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 2048, + "Y": 3584, + "Z": 1024 + }, + { + "X": 1024, + "Y": 3584, + "Z": 1024 + }, + { + "X": 1024, + "Y": 3584, + "Z": 2048 + }, + { + "X": 2048, + "Y": 3584, + "Z": 2048 + } + ] + }, + { + "BaseRoom": -3, + "AdjoiningRoom": 103, + "Normal": { + "Z": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": 8448, + "Z": 3072 + }, + { + "X": 2048, + "Y": -77, + "Z": 3072 + }, + { + "X": 2048, + "Y": 9472, + "Z": 3072 + }, + { + "X": 1024, + "Y": 9472, + "Z": 3072 + } + ] + }, + { + "BaseRoom": 103, + "AdjoiningRoom": -3, + "Normal": { + "Z": 1 + }, + "Vertices": [ + { + "X": 5120, + "Y": 8448, + "Z": 1024 + }, + { + "X": 4096, + "Y": -77, + "Z": 1024 + }, + { + "X": 4096, + "Y": 9472, + "Z": 1024 + }, + { + "X": 5120, + "Y": 9472, + "Z": 1024 + } + ] + } + ] + }, + { + "Comments": "Make horizontal portals.", + "EMType": 82, + "Tags": [ + 9 + ], + "Portals": { + "-1": { + "-2": [ + { + "X": 47616, + "Z": 26112 + } + ] + }, + "-2": { + "-1": [ + { + "X": 47616, + "Z": 27136 + } + ] + }, + "-3": { + "-2": [ + { + "X": 51712, + "Z": 25088 + } + ], + "103": [ + { + "X": 52736, + "Z": 27136 + } + ] + }, + "103": { + "-3": [ + { + "X": 52736, + "Z": 26112 + } + ] + }, + "126": { + "-3": [ + { + "X": 52736, + "Z": 26112 + } + ] + } + } + }, + { + "Comments": "Make vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 39424, + "Y": 3584, + "Z": 28160, + "Room": -1 + }, + "Floor": { + "X": 39424, + "Y": 4608, + "Z": 28160, + "Room": 61 + }, + "InheritFloorBox": true + }, + { + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 52736, + "Y": 3584, + "Z": 25088, + "Room": -2 + }, + "Floor": { + "X": 52736, + "Y": 4608, + "Z": 25088, + "Room": -3 + }, + "InheritFloorBox": true + }, + { + "Comments": "Add a ladder.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1510": { + "-3": { + "Rectangles": [ + 2, + 3, + 4, + 5, + 6 + ] + } + }, + "1512": { + "-3": { + "Rectangles": [ + 7 + ] + } + } + }, + "Location": { + "X": 52736, + "Y": 9472, + "Z": 25088, + "Room": -3 + }, + "IsNegativeX": true + }, + { + "Comments": "Adjust faces to fit.", + "EMType": 23, + "Tags": [ + 9 + ], + "Modifications": [ + { + "RoomNumber": 103, + "FaceIndex": 32, + "VertexChanges": { + "2": { + "Y": -1024 + }, + "3": { + "Y": -1024 + } + } + } + ], + "Rotations": [ + { + "RoomNumber": -3, + "FaceIndices": [ + 2 + ], + "VertexRemap": { + "0": 3, + "1": 0, + "2": 1, + "3": 2 + } + }, + { + "RoomNumber": -3, + "FaceIndices": [ + 3 + ], + "VertexRemap": { + "0": 1, + "1": 2, + "2": 3, + "3": 0 + } + }, + { + "RoomNumber": -3, + "FaceIndices": [ + 5, + 6 + ], + "VertexRemap": { + "0": 2, + "1": 3, + "2": 0, + "3": 1 + } + } + ] + }, + { + "Comments": "Remove redundant faces.", + "EMType": 22, + "Tags": [ + 9 + ], + "GeometryMap": { + "61": { + "Rectangles": [ + 39 + ] + }, + "-3": { + "Rectangles": [ + 1, + 28 + ] + }, + "-2": { + "Rectangles": [ + 7, + 25 + ] + }, + "-1": { + "Rectangles": [ + 0, + 37 + ] + } + } + }, + { + "Comments": "Generate lighting.", + "EMType": 128, + "Tags": [ + 9 + ], + "RoomIndices": [ + -1, + -2, + -3 + ] + }, { "Comments": "Add a ladder to room 34 as a return path.", "EMType": 0, @@ -393,6 +1112,20 @@ } ], [ + { + "Comments": "Raise the platform where the gong bonger normally is (to allow obvious exiting).", + "EMType": 1, + "Location": { + "X": 31232, + "Y": 9984, + "Z": 49664, + "Room": 29 + }, + "Clicks": -4, + "FloorTexture": 1375, + "SideTexture": 1375, + "Flags": 15 + }, { "Comments": "Drain the rooms below the lava bowl.", "EMType": 3, @@ -2069,6 +2802,75 @@ ] } ] + }, + { + "Condition": { + "Comments": "Check if key item #36 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 36, + "X": 30848, + "Y": 9984, + "Z": 48640, + "Room": 29 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 30848, + "Y": 9984, + "Z": 48640, + "Room": 29 + }, + "EntityLocation": 36 + } + ] + }, + { + "Condition": { + "Comments": "Check if key item #138 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 138, + "X": 60928, + "Y": 512, + "Z": 51712, + "Room": 100 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 60928, + "Y": 512, + "Z": 51712, + "Room": 100 + }, + "EntityLocation": 138 + } + ] + }, + { + "Condition": { + "Comments": "Check if key item #145 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 145, + "X": 57856, + "Y": 9984, + "Z": 30208, + "Room": 127 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 57856, + "Y": 9984, + "Z": 30208, + "Room": 127 + }, + "EntityLocation": 145 + } + ] } ], "ConditionalOneOf": [], diff --git a/TRRandomizerCore/Resources/TR2/Environment/KEEL.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/KEEL.TR2-Environment.json index 5a8ee9b3d..dcf4a8e53 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/KEEL.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/KEEL.TR2-Environment.json @@ -61,6 +61,92 @@ }, "IsNegativeZ": true }, + { + "Comments": "Modify the slopes to allow climbing back up.", + "EMType": 7, + "Tags": [ + 9 + ], + "Location": { + "X": 64000, + "Y": -2688, + "Z": 42496, + "Room": 43 + }, + "SlantType": 1, + "ZSlant": -2 + }, + { + "EMType": 7, + "Tags": [ + 9 + ], + "Location": { + "X": 62976, + "Y": -2688, + "Z": 42496, + "Room": 43 + }, + "SlantType": 1, + "ZSlant": -2 + }, + { + "Comments": "Move some faces for the new slopes.", + "EMType": 23, + "Tags": [ + 9 + ], + "Modifications": [ + { + "RoomNumber": 43, + "FaceIndices": [ + 8, + 30 + ], + "VertexChanges": { + "2": { + "Y": -256 + }, + "3": { + "Y": -256 + } + } + }, + { + "RoomNumber": 43, + "FaceIndices": [ + 15, + 33 + ], + "VertexChanges": { + "0": { + "Y": -256 + }, + "1": { + "Y": -256 + } + } + }, + { + "RoomNumber": 43, + "FaceIndex": 10, + "VertexChanges": { + "2": { + "Y": -256 + } + } + }, + { + "RoomNumber": 43, + "FaceIndex": 41, + "VertexChanges": { + "3": { + "Y": -256 + } + } + } + ] + }, { "Comments": "Make it possible to return to the piston room from below. The fake ladder here becomes real.", "EMType": 0, diff --git a/TRRandomizerCore/Resources/TR2/Environment/MONASTRY.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/MONASTRY.TR2-Environment.json index a7161accf..f13d8342c 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/MONASTRY.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/MONASTRY.TR2-Environment.json @@ -10,6 +10,20 @@ 5 ], "IsSkyboxVisible": true + }, + { + "Comments": "Replace the trigger under the flame room prayer wheel with a pad (only if key item rando is enabled).", + "EMType": 69, + "Tags": [ + 12 + ], + "Location": { + "X": 34304, + "Y": -1024, + "Z": 34304, + "Room": 54 + }, + "TrigType": 1 } ], "Any": [ diff --git a/TRRandomizerCore/Resources/TR2/Environment/OPERA.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/OPERA.TR2-Environment.json index 798d5ad9e..cc21553e4 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/OPERA.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/OPERA.TR2-Environment.json @@ -1,5 +1,486 @@ { - "All": [], + "All": [ + { + "Comments": "Create a return path from inside the opera house to the start area.", + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 83968, + "Y": 512, + "Z": 41984 + }, + "LinkedLocation": { + "X": 85504, + "Y": 2304, + "Z": 45568, + "Room": 50 + }, + "Textures": { + "Floor": 1699, + "Ceiling": 1672, + "WallAlignment": 5, + "Wall4": 1672, + "Wall1": 1700 + }, + "AmbientLighting": 8047, + "DefaultVertex": { + "Lighting": 6697, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 3584, + "Intensity1": 2048, + "Intensity2": 2048, + "Fade1": 1024, + "Fade2": 1024 + } + ], + "Height": 5, + "Width": 4, + "Depth": 5, + "FloorHeights": { + "-1": [ + 12, + 13 + ] + }, + "CeilingHeights": { + "-127": [ + 6, + 7 + ] + } + }, + { + "Comments": "Make visibility portals.", + "EMType": 81, + "Tags": [ + 9 + ], + "Portals": [ + { + "BaseRoom": 50, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 3072, + "Y": 512, + "Z": 2048 + }, + { + "X": 2048, + "Y": 512, + "Z": 2048 + }, + { + "X": 2048, + "Y": 512, + "Z": 3072 + }, + { + "X": 3072, + "Y": 512, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": 50, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": 512, + "Z": 4096 + }, + { + "X": 2048, + "Y": 512, + "Z": 4096 + }, + { + "X": 2048, + "Y": 512, + "Z": 3072 + }, + { + "X": 1024, + "Y": 512, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": 6, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 2048, + "Y": 512, + "Z": 2048 + }, + { + "X": 3072, + "Y": 512, + "Z": 2048 + }, + { + "X": 3072, + "Y": 512, + "Z": 1024 + }, + { + "X": 2048, + "Y": 512, + "Z": 1024 + } + ] + }, + { + "BaseRoom": 6, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 3072, + "Y": 512, + "Z": 7168 + }, + { + "X": 2048, + "Y": 512, + "Z": 7168 + }, + { + "X": 2048, + "Y": 512, + "Z": 8192 + }, + { + "X": 3072, + "Y": 512, + "Z": 8192 + } + ] + } + ] + }, + { + "Comments": "Make horizontal portals.", + "EMType": 82, + "Tags": [ + 9 + ], + "Portals": { + "50": { + "-1": [ + { + "X": 86528, + "Z": 45568 + } + ] + }, + "6": { + "-1": [ + { + "X": 86528, + "Z": 44544 + } + ] + } + } + }, + { + "Comments": "Make vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 85504, + "Y": 512, + "Z": 45568, + "Room": -1 + }, + "Floor": { + "X": 85504, + "Y": 1536, + "Z": 45568, + "Room": 50 + }, + "InheritFloorBox": true + }, + { + "Comments": "Make vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 86528, + "Y": 512, + "Z": 43520, + "Room": -1 + }, + "Floor": { + "X": 86528, + "Y": 1536, + "Z": 43520, + "Room": 6 + }, + "InheritFloorBox": true + }, + { + "Comments": "Add a ladder.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1702": { + "50": { + "Rectangles": [ + 29 + ] + } + }, + "1765": { + "50": { + "Rectangles": [ + 21 + ] + } + }, + "1769": { + "-1": { + "Rectangles": [ + 6 + ] + } + } + }, + "Location": { + "X": 85504, + "Y": 2304, + "Z": 45568, + "Room": 50 + }, + "IsPositiveX": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1702": { + "5": { + "Rectangles": [ + 109 + ] + } + }, + "1682": { + "5": { + "Rectangles": [ + 110 + ] + } + }, + "1769": { + "5": { + "Rectangles": [ + 108 + ] + } + } + }, + "Location": { + "X": 82432, + "Y": 2304, + "Z": 52736, + "Room": 5 + }, + "IsPositiveX": true + }, + { + "Comments": "Adjust faces to fit the ladder.", + "EMType": 23, + "Tags": [ + 9 + ], + "Modifications": [ + { + "RoomNumber": 50, + "FaceIndex": 29, + "VertexChanges": { + "0": { + "Y": 768 + }, + "1": { + "Y": 768 + } + } + }, + { + "RoomNumber": 50, + "FaceIndex": 21, + "VertexChanges": { + "0": { + "X": 1024 + }, + "1": { + "X": 1024 + }, + "2": { + "Y": 768 + }, + "3": { + "Y": 768 + } + } + } + ] + }, + { + "Comments": "Remove redundant faces.", + "EMType": 22, + "Tags": [ + 9 + ], + "GeometryMap": { + "-1": { + "Rectangles": [ + 0, + 9 + ] + }, + "6": { + "Rectangles": [ + 40 + ] + } + } + }, + { + "Comments": "Convert a fan into a trapdoor.", + "EMType": 45, + "Tags": [ + 9 + ], + "EntityIndex": 153, + "NewEntityType": 114 + }, + { + "Comments": "Kill Lara where the fan used to be.", + "EMType": 70, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 61952, + "Y": 11136, + "Z": 34304, + "Room": 128 + } + ] + }, + { + "Comments": "Move the door to block the path from the start side.", + "EMType": 44, + "Tags": [ + 9 + ], + "EntityIndex": 153, + "TargetLocation": { + "X": 86528, + "Y": 512, + "Z": 43520, + "Room": 6, + "Angle": -32768 + } + }, + { + "Comments": "Remove its old trigger action.", + "EMType": 72, + "Tags": [ + 9 + ], + "Entities": [ + 153 + ] + }, + { + "Comments": "Add a dummy trigger for it.", + "EMType": 61, + "Tags": [ + 9 + ], + "EntityLocation": 153, + "Trigger": { + "TrigType": 8, + "Mask": 31, + "Actions": [ + { + "Parameter": 153 + } + ] + } + }, + { + "Comments": "And a regular trigger for it, plus door 11 in case it was skipped.", + "EMType": 61, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 86528, + "Z": 44544, + "Room": -1 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": 153 + }, + { + "Parameter": 11 + } + ] + } + }, + { + "Comments": "Generate lighting.", + "EMType": 128, + "Tags": [ + 9 + ], + "RoomIndices": [ + -1 + ] + } + ], "Any": [ [ { diff --git a/TRRandomizerCore/Resources/TR2/Environment/PLATFORM.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/PLATFORM.TR2-Environment.json index 3c5dff29b..ab50110f0 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/PLATFORM.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/PLATFORM.TR2-Environment.json @@ -944,6 +944,8 @@ "Comments": "Adjust a secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ @@ -965,6 +967,8 @@ "Comments": "Floors another secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ @@ -980,6 +984,8 @@ "Comments": "Floors another secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ @@ -995,6 +1001,8 @@ "Comments": "Floors another secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ diff --git a/TRRandomizerCore/Resources/TR2/Environment/SKIDOO.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/SKIDOO.TR2-Environment.json index b47fdab72..d7400e198 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/SKIDOO.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/SKIDOO.TR2-Environment.json @@ -272,6 +272,1077 @@ } ] } + }, + { + "Comments": "Replace the trigger under the hut key with a pickup type (only if key item rando is enabled, so that the trigger can be detected when moving it).", + "EMType": 61, + "Tags": [ + 12 + ], + "Locations": [ + { + "X": 12800, + "Y": 1024, + "Z": 57856, + "Room": 97 + } + ], + "Trigger": { + "TrigType": 4, + "Mask": 31, + "Actions": [ + { + "Parameter": 48 + }, + { + "Parameter": 52 + } + ] + }, + "Replace": true + }, + { + "Comments": "Create a return path from near the hut back to the start.", + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 79872, + "Y": 256, + "Z": 21504 + }, + "LinkedLocation": { + "X": 80384, + "Y": 256, + "Z": 38400, + "Room": 18 + }, + "Textures": { + "Floor": 1308, + "Ceiling": 1308, + "WallAlignment": 4, + "Wall4": 1288, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 7680, + "DefaultVertex": { + "Lighting": 7680, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 16896, + "Intensity1": 4096, + "Intensity2": 4096, + "Fade1": 2560, + "Fade2": 2560 + }, + { + "X": 1536, + "Y": -512, + "Z": 1536, + "Intensity1": 3072, + "Intensity2": 3072, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 4, + "Width": 4, + "Depth": 18, + "FloorHeights": { + "-127": [ + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 73728, + "Y": 256, + "Z": 21504 + }, + "LinkedLocation": { + "X": 80384, + "Y": 256, + "Z": 38400, + "Room": 18 + }, + "Textures": { + "Floor": 1308, + "Ceiling": 1308, + "WallAlignment": 4, + "Wall4": 1288, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 7680, + "DefaultVertex": { + "Lighting": 7680, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 6656, + "Y": -512, + "Z": 1536, + "Intensity1": 3072, + "Intensity2": 3072, + "Fade1": 2048, + "Fade2": 2048 + }, + { + "X": 1536, + "Y": -4608, + "Z": 1536, + "Intensity1": 1024, + "Intensity2": 1024, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 20, + "Width": 8, + "Depth": 3, + "CeilingHeights": { + "16": [ + 7, + 10, + 13, + 16, + 19 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 73728, + "Y": -4864, + "Z": 19456 + }, + "LinkedLocation": { + "X": 80384, + "Y": 256, + "Z": 38400, + "Room": 18 + }, + "Textures": { + "Floor": 1308, + "Ceiling": 1308, + "WallAlignment": 5, + "Wall4": 1288, + "Wall2": 1376, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 7680, + "DefaultVertex": { + "Lighting": 7680, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 1536, + "Y": -512, + "Z": 3584, + "Intensity1": 1024, + "Intensity2": 1024, + "Fade1": 2048, + "Fade2": 2048 + }, + { + "X": 1536, + "Y": -2048, + "Z": 1536, + "Intensity1": 2048, + "Intensity2": 2048, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 10, + "Width": 3, + "Depth": 5, + "FloorHeights": { + "-6": [ + 6, + 7 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 70656, + "Y": -6400, + "Z": 13312 + }, + "LinkedLocation": { + "X": 80384, + "Y": 256, + "Z": 38400, + "Room": 18 + }, + "Textures": { + "Floor": 1308, + "Ceiling": 1308, + "WallAlignment": 4, + "Wall4": 1288, + "RandomRotationSeed": 3112023 + }, + "AmbientLighting": 7680, + "DefaultVertex": { + "Lighting": 7680, + "Lighting2": 6000, + "Attributes": 16 + }, + "Lights": [ + { + "X": 4608, + "Y": -512, + "Z": 6656, + "Intensity1": 2048, + "Intensity2": 2048, + "Fade1": 2048, + "Fade2": 2048 + } + ], + "Height": 4, + "Width": 6, + "Depth": 8, + "FloorHeights": { + "-127": [ + 10, + 11, + 12, + 13, + 14, + 18, + 19, + 20, + 21, + 22, + 26, + 27, + 28, + 29, + 30 + ] + } + }, + { + "Comments": "Make visibility portals.", + "EMType": 81, + "Tags": [ + 9 + ], + "Portals": [ + { + "BaseRoom": 81, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 5120, + "Y": -6400, + "Z": 6144 + }, + { + "X": 4096, + "Y": -6400, + "Z": 6144 + }, + { + "X": 4096, + "Y": -6400, + "Z": 7168 + }, + { + "X": 5120, + "Y": -6400, + "Z": 7168 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": 81, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -6400, + "Z": 2048 + }, + { + "X": 2048, + "Y": -6400, + "Z": 2048 + }, + { + "X": 2048, + "Y": -6400, + "Z": 1024 + }, + { + "X": 1024, + "Y": -6400, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": -2, + "Normal": { + "Z": -1 + }, + "Vertices": [ + { + "X": 4096, + "Y": -7424, + "Z": 7168 + }, + { + "X": 5120, + "Y": -7424, + "Z": 7168 + }, + { + "X": 5120, + "Y": -6400, + "Z": 7168 + }, + { + "X": 4096, + "Y": -6400, + "Z": 7168 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": -1, + "Normal": { + "Z": 1 + }, + "Vertices": [ + { + "X": 2048, + "Y": -7424, + "Z": 1024 + }, + { + "X": 1024, + "Y": -7424, + "Z": 1024 + }, + { + "X": 1024, + "Y": -6400, + "Z": 1024 + }, + { + "X": 2048, + "Y": -6400, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": -3, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -4864, + "Z": 4096 + }, + { + "X": 2048, + "Y": -4864, + "Z": 4096 + }, + { + "X": 2048, + "Y": -4864, + "Z": 3072 + }, + { + "X": 1024, + "Y": -4864, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -3, + "AdjoiningRoom": -2, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 2048, + "Y": -4864, + "Z": 1024 + }, + { + "X": 1024, + "Y": -4864, + "Z": 1024 + }, + { + "X": 1024, + "Y": -4864, + "Z": 2048 + }, + { + "X": 2048, + "Y": -4864, + "Z": 2048 + } + ] + }, + { + "BaseRoom": -3, + "AdjoiningRoom": -4, + "Normal": { + "X": -1 + }, + "Vertices": [ + { + "X": 7168, + "Y": -768, + "Z": 2048 + }, + { + "X": 7168, + "Y": -768, + "Z": 1024 + }, + { + "X": 7168, + "Y": 256, + "Z": 1024 + }, + { + "X": 7168, + "Y": 256, + "Z": 2048 + } + ] + }, + { + "BaseRoom": -4, + "AdjoiningRoom": -3, + "Normal": { + "X": 1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -768, + "Z": 1024 + }, + { + "X": 1024, + "Y": -768, + "Z": 2048 + }, + { + "X": 1024, + "Y": 256, + "Z": 2048 + }, + { + "X": 1024, + "Y": 256, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -4, + "AdjoiningRoom": 18, + "Normal": { + "X": 1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -768, + "Z": 16384 + }, + { + "X": 1024, + "Y": -768, + "Z": 17408 + }, + { + "X": 1024, + "Y": 256, + "Z": 17408 + }, + { + "X": 1024, + "Y": 256, + "Z": 16384 + } + ] + }, + { + "BaseRoom": 18, + "AdjoiningRoom": -4, + "Normal": { + "X": -1 + }, + "Vertices": [ + { + "X": 3072, + "Y": -768, + "Z": 5120 + }, + { + "X": 3072, + "Y": -768, + "Z": 4096 + }, + { + "X": 3072, + "Y": 256, + "Z": 4096 + }, + { + "X": 3072, + "Y": 256, + "Z": 5120 + } + ] + } + ] + }, + { + "Comments": "Make horizontal portals.", + "EMType": 82, + "Tags": [ + 9 + ], + "Portals": { + "81": { + "-1": [ + { + "X": 73216, + "Z": 14848 + } + ] + }, + "-1": { + "-2": [ + { + "X": 75264, + "Z": 20992 + } + ] + }, + "-2": { + "-1": [ + { + "X": 75264, + "Z": 19968 + } + ] + }, + "-3": { + "-2": [ + { + "X": 75264, + "Z": 22016 + } + ], + "-4": [ + { + "X": 81408, + "Z": 23040 + } + ] + }, + "-4": { + "-3": [ + { + "X": 80384, + "Z": 23040 + } + ], + "18": [ + { + "X": 80384, + "Z": 38400 + } + ] + }, + "18": { + "-4": [ + { + "X": 81408, + "Z": 38400 + } + ] + } + } + }, + { + "Comments": "Make vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 72192, + "Y": -6400, + "Z": 14848, + "Room": -1 + }, + "Floor": { + "X": 72192, + "Y": -5376, + "Z": 14848, + "Room": 81 + }, + "InheritFloorBox": true + }, + { + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 75264, + "Y": -4864, + "Z": 23040, + "Room": -2 + }, + "Floor": { + "X": 75264, + "Y": -3840, + "Z": 23040, + "Room": -3 + }, + "InheritFloorBox": true + }, + { + "Comments": "Add a ladder.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "-3": { + "Rectangles": [ + 16, + 17, + 18, + 19, + 20 + ] + }, + "-2": { + "Rectangles": [ + 21 + ] + } + }, + "1448": { + "-2": { + "Rectangles": [ + 20 + ] + } + } + }, + "Location": { + "X": 75264, + "Y": 256, + "Z": 23040, + "Room": -3 + }, + "IsNegativeZ": true + }, + { + "Comments": "Adjust faces to fit.", + "EMType": 23, + "Tags": [ + 9 + ], + "Modifications": [ + { + "RoomNumber": 81, + "FaceIndex": 71, + "VertexChanges": { + "2": { + "Y": -512, + "Z": 1024 + }, + "3": { + "Y": -768, + "Z": 1024 + } + } + }, + { + "RoomNumber": 81, + "FaceIndex": 73, + "VertexChanges": { + "0": { + "Y": -768 + }, + "1": { + "Y": -512 + } + } + }, + { + "RoomNumber": 81, + "FaceIndex": 79, + "VertexChanges": { + "0": { + "Y": -512 + }, + "1": { + "Y": -768 + } + } + } + ], + "Rotations": [ + { + "RoomNumber": -3, + "FaceIndices": [ + 16, + 19, + 20 + ], + "VertexRemap": { + "0": 1, + "1": 2, + "2": 3, + "3": 0 + } + }, + { + "RoomNumber": -3, + "FaceIndices": [ + 18 + ], + "VertexRemap": { + "0": 3, + "1": 0, + "2": 1, + "3": 2 + } + }, + { + "RoomNumber": -2, + "FaceIndices": [ + 21 + ], + "VertexRemap": { + "0": 3, + "1": 0, + "2": 1, + "3": 2 + } + } + ] + }, + { + "Comments": "Plug a gap in the wall in room 81.", + "EMType": 26, + "Tags": [ + 9 + ], + "Quads": { + "81": [ + { + "Vertices": [ + 107, + 104, + 78, + 77 + ], + "Texture": 1376 + } + ] + } + }, + { + "Comments": "Remove redundant faces.", + "EMType": 22, + "Tags": [ + 9 + ], + "GeometryMap": { + "18": { + "Rectangles": [ + 31 + ] + }, + "-4": { + "Rectangles": [ + 2, + 7 + ] + }, + "-3": { + "Rectangles": [ + 1, + 40 + ] + }, + "-2": { + "Rectangles": [ + 4, + 9 + ] + }, + "-1": { + "Rectangles": [ + 0, + 36 + ] + } + } + }, + { + "Comments": "Remove the ceiling slant from the portal we've created in room 81.", + "EMType": 7, + "Tags": [ + 9 + ], + "Location": { + "X": 72192, + "Y": -3456, + "Z": 14848, + "Room": 81 + }, + "RemoveSlant": true + }, + { + "Comments": "And raise the ceiling to match.", + "EMType": 5, + "Tags": [ + 9 + ], + "Location": { + "X": 72192, + "Y": -3456, + "Z": 14848, + "Room": 81 + }, + "CeilingClicks": -3 + }, + { + "Comments": "Generate lighting.", + "EMType": 128, + "Tags": [ + 9 + ], + "RoomIndices": [ + -1, + -2, + -3, + -4 + ] + }, + { + "Comments": "Add ladders near the boulders at the beginning.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "79": { + "Rectangles": [ + 20 + ] + }, + "78": { + "Rectangles": [ + 108 + ] + } + } + }, + "Location": { + "X": 84480, + "Y": 1920, + "Z": 10752, + "Room": 79 + }, + "IsPositiveZ": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "79": { + "Rectangles": [ + 24 + ] + }, + "78": { + "Rectangles": [ + 116 + ] + } + } + }, + "Location": { + "X": 85504, + "Y": 1920, + "Z": 10752, + "Room": 79 + }, + "IsPositiveZ": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "78": { + "Rectangles": [ + 126 + ] + } + } + }, + "Location": { + "X": 86528, + "Y": 1920, + "Z": 10752, + "Room": 78 + }, + "IsPositiveZ": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "78": { + "Rectangles": [ + 136 + ] + } + } + }, + "Location": { + "X": 87552, + "Y": 1920, + "Z": 10752, + "Room": 78 + }, + "IsPositiveZ": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1295": { + "78": { + "Rectangles": [ + 145 + ] + } + } + }, + "Location": { + "X": 88576, + "Y": 1920, + "Z": 10752, + "Room": 78 + }, + "IsPositiveZ": true + }, + { + "Comments": "Adjust faces to fit.", + "EMType": 23, + "Tags": [ + 9 + ], + "Rotations": [ + { + "RoomNumber": 79, + "FaceIndices": [ + 24 + ], + "VertexRemap": { + "0": 1, + "1": 2, + "2": 3, + "3": 0 + } + }, + { + "RoomNumber": 78, + "FaceIndices": [ + 145 + ], + "VertexRemap": { + "0": 1, + "1": 2, + "2": 3, + "3": 0 + } + } + ] } ], "Any": [ @@ -354,7 +1425,9 @@ "Comments": "Adjust a potential secret.", "EMType": 43, "Types": [ - 191 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -427,6 +1500,8 @@ "Comments": "Adjust a potential secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ @@ -477,6 +1552,8 @@ "Comments": "Adjust a potential secret.", "EMType": 43, "Types": [ + 192, + 191, 190 ], "SectorLocations": [ @@ -499,6 +1576,92 @@ "AllWithin": [ [ [ + { + "Comments": "Leave the first canyon as-is.", + "EMType": 1000 + } + ], + [ + { + "Comments": "Allow climbing out near the canyon entrance.", + "EMType": 7, + "Location": { + "X": 70144, + "Y": 2816, + "Z": 29184 + }, + "FloorClicks": 3 + }, + { + "Comments": "Fix facing.", + "EMType": 23, + "Modifications": [ + { + "FaceIndex": 46, + "VertexChanges": { + "0": { + "Y": 768 + }, + "1": { + "Y": 768 + }, + "2": { + "Y": 768 + }, + "3": { + "Y": 768 + } + } + }, + { + "FaceIndex": 50, + "VertexChanges": { + "0": { + "Y": 768 + }, + "1": { + "Y": 768 + } + } + }, + { + "FaceIndex": 47, + "VertexChanges": { + "0": { + "Y": 768 + }, + "1": { + "Y": 768 + } + } + } + ] + }, + { + "EMType": 26, + "Quads": { + "0": [ + { + "Vertices": [ + 82, + 83, + 200, + 199 + ], + "Texture": 1474 + }, + { + "Vertices": [ + 85, + 82, + 199, + 202 + ], + "Texture": 1475 + } + ] + } + }, { "Comments": "Raise the water in the first canyon.", "EMType": 2, @@ -522,7 +1685,9 @@ "Comments": "Adjust a potential secret.", "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -537,7 +1702,9 @@ "Comments": "Adjust a potential secret.", "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -565,61 +1732,90 @@ } }, { - "Comments": "Make some blocks as we can't flood rooms 37, 38 etc because of height differences.", - "EMType": 1, - "Location": { - "X": 59743, + "Comments": "Make a wall as we can't flood rooms 37, 38 etc because of height differences.", + "EMType": 127, + "Locations": [ + { + "X": 59904, + "Y": 6144, + "Z": 35328, + "Room": 37 + } + ], + "EntityMoveLocation": { + "X": 59904, "Y": 6144, - "Z": 34157, - "Room": 28 - }, - "Clicks": -5, - "FloorTexture": 1297, - "SideTexture": 1330, - "Flags": 9 + "Z": 35328, + "Room": 37 + } }, { - "EMType": 1, - "Location": { - "X": 59829, + "Comments": "Remove portals to match above.", + "EMType": 86, + "Location1": { + "X": 59904, "Y": 6144, - "Z": 35325, + "Z": 34304, "Room": 37 }, - "Clicks": -4, - "FloorTexture": 65535, - "SideTexture": 1297, - "Flags": 4 + "Location2": { + "X": 59904, + "Y": 6144, + "Z": 35328, + "Room": 28 + } + }, + { + "Comments": "Adjust faces to match the new layout.", + "EMType": 26, + "Quads": { + "37": [ + { + "Vertices": [ + 7, + 11, + 8, + 3 + ], + "Texture": 1291 + } + ] + } + }, + { + "EMType": 23, + "Modifications": [ + { + "RoomNumber": 28, + "FaceIndex": 16, + "VertexChanges": { + "2": { + "Y": 1024 + }, + "3": { + "Y": 768 + } + } + } + ] }, { - "Comments": "Tidy room 37 a little.", "EMType": 22, "GeometryMap": { "37": { "Triangles": [ + 0, 1 + ], + "Rectangles": [ + 0, + 1, + 2, + 16 ] } } }, - { - "Comments": "Move anything that sits in the now blocked doorway.", - "EMType": 43, - "SectorLocations": [ - { - "X": 59829, - "Y": 6144, - "Z": 35325, - "Room": 37 - } - ], - "TargetLocation": { - "X": 59955, - "Y": 6259, - "Z": 36417, - "Room": 37 - } - }, { "Comments": "Make some ladders to get out of room 34.", "EMType": 0, @@ -627,7 +1823,7 @@ 3 ], "TextureMap": { - "1386": { + "1295": { "34": { "Rectangles": [ 3 @@ -645,11 +1841,8 @@ }, { "EMType": 0, - "Tags": [ - 3 - ], "TextureMap": { - "1386": { + "1295": { "34": { "Rectangles": [ 9 @@ -667,11 +1860,8 @@ }, { "EMType": 0, - "Tags": [ - 3 - ], "TextureMap": { - "1386": { + "1295": { "34": { "Rectangles": [ 14 @@ -689,11 +1879,8 @@ }, { "EMType": 0, - "Tags": [ - 3 - ], "TextureMap": { - "1386": { + "1295": { "34": { "Rectangles": [ 20 @@ -711,11 +1898,8 @@ }, { "EMType": 0, - "Tags": [ - 3 - ], "TextureMap": { - "1386": { + "1295": { "34": { "Rectangles": [ 25 @@ -738,6 +1922,26 @@ }, "IsNegativeZ": true }, + { + "Comments": "Face rotations for the ladders.", + "EMType": 23, + "Rotations": [ + { + "RoomNumber": 34, + "FaceIndices": [ + 3, + 9, + 20 + ], + "VertexRemap": { + "0": 3, + "1": 0, + "2": 1, + "3": 2 + } + } + ] + }, { "Comments": "Remove rectangles to make a doorway.", "EMType": 22, @@ -797,44 +2001,7 @@ ], [ { - "Comments": "Or completely drain the first canyon.", - "EMType": 3, - "Tags": [ - 2 - ], - "RoomNumbers": [ - 13, - 21, - 29, - 38, - 39 - ], - "WaterTextures": [ - 1487, - 1488, - 1307, - 1489 - ] - }, - { - "Comments": "Remove the water sound sources for above.", - "EMType": 103, - "Source": { - "X": 65024, - "Y": 7936, - "Z": 31232 - } - }, - { - "EMType": 103, - "Source": { - "X": 77312, - "Y": 7936, - "Z": 31232 - } - }, - { - "Comments": "Make a ladder to link to the current one in this area.", + "Comments": "Or completely drain the first canyon. Make a ladder to link to the current one in this area.", "EMType": 0, "Tags": [ 3 @@ -843,28 +2010,21 @@ "1310": { "13": { "Rectangles": [ - 51 + 72 ] } }, "1295": { "13": { "Rectangles": [ - 52 + 73 ] } }, "1449": { "1": { "Rectangles": [ - 41 - ] - } - }, - "1439": { - "1": { - "Rectangles": [ - 41 + 62 ] } } @@ -878,21 +2038,120 @@ "IsPositiveX": true }, { - "Comments": "Add a warning for the bad slope in this area.", - "EMType": 24, - "Locations": [ + "Comments": "Fix an illegal slope to avoid softlock.", + "EMType": 7, + "Location": { + "X": 62976, + "Y": 10624, + "Z": 29184, + "Room": 29 + }, + "SlantType": 1, + "XSlant": -1 + }, + { + "Comments": "Fix faces.", + "EMType": 23, + "Modifications": [ { - "X": 62986, - "Y": 10767, - "Z": 29187, - "Room": 29, - "Angle": -32768 + "RoomNumber": 29, + "FaceIndex": 36, + "VertexChanges": { + "0": { + "Y": -512 + }, + "3": { + "Y": -512 + } + } + }, + { + "RoomNumber": 29, + "FaceIndex": 49, + "VertexChanges": { + "0": { + "Y": -512 + }, + "1": { + "Y": -512 + } + } + }, + { + "RoomNumber": 29, + "FaceIndex": 39, + "VertexChanges": { + "0": { + "Y": -512 + } + } + } + ], + "Rotations": [ + { + "RoomNumber": 1, + "FaceIndices": [ + 62 + ], + "VertexRemap": { + "0": 1, + "1": 2, + "2": 3, + "3": 0 + } } + ] + }, + { + "EMType": 26, + "Triangles": { + "29": [ + { + "Vertices": [ + 59, + 32, + 46 + ], + "Texture": 1361 + } + ] + } + }, + { + "Comments": "Perform the draining.", + "EMType": 3, + "Tags": [ + 2 ], - "Mesh": { - "Intensity1": 6400, - "Intensity2": 6400, - "MeshID": 23 + "RoomNumbers": [ + 13, + 21, + 29, + 38, + 39 + ], + "WaterTextures": [ + 1487, + 1488, + 1307, + 1489 + ] + }, + { + "Comments": "Remove the water sound sources for above.", + "EMType": 103, + "Source": { + "X": 65024, + "Y": 7936, + "Z": 31232 + } + }, + { + "EMType": 103, + "Source": { + "X": 77312, + "Y": 7936, + "Z": 31232 } } ] @@ -1905,7 +3164,31 @@ } ], "ConditionalAllWithin": [], - "ConditionalAll": [], + "ConditionalAll": [ + { + "Condition": { + "Comments": "Check if key item #48 is in its default position. If not, move the trigger to its new location.", + "ConditionType": 0, + "EntityIndex": 48, + "X": 12800, + "Y": 1024, + "Z": 57856, + "Room": 70 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 12800, + "Y": 1024, + "Z": 57856, + "Room": 97 + }, + "EntityLocation": 48 + } + ] + } + ], "ConditionalOneOf": [], "Mirrored": [] } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Environment/UNWATER.TR2-Environment.json b/TRRandomizerCore/Resources/TR2/Environment/UNWATER.TR2-Environment.json index f0b181dd1..b897035d5 100644 --- a/TRRandomizerCore/Resources/TR2/Environment/UNWATER.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR2/Environment/UNWATER.TR2-Environment.json @@ -392,7 +392,9 @@ "Comments": "Several secret adjustments are needed.", "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -412,7 +414,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -432,7 +436,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -452,7 +458,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -473,7 +481,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -494,7 +504,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -508,7 +520,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { @@ -535,7 +549,9 @@ { "EMType": 43, "Types": [ - 192 + 192, + 191, + 190 ], "SectorLocations": [ { From bc7f2aa9465d337fcd33804a607e995f8f8fc24d Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 16:56:11 +0000 Subject: [PATCH 06/17] Update TR3 environment changes Return paths added to Lud's and HSC, and updated in Area51 and Hallows. Key item checks performed to move triggers and/or make items visible e.g. old coin in Aldwych. --- .../Environment/ANTARC.TR2-Environment.json | 64 +++ .../Environment/AREA51.TR2-Environment.json | 17 + .../TR3/Environment/CITY.TR2-Environment.json | 229 ++++++++- .../Environment/COMPOUND.TR2-Environment.json | 461 +++++++++++++++++- .../Environment/NEVADA.TR2-Environment.json | 32 ++ .../Environment/SEWER.TR2-Environment.json | 32 ++ .../Environment/STPAUL.TR2-Environment.json | 20 + .../Environment/TOWER.TR2-Environment.json | 101 +++- 8 files changed, 953 insertions(+), 3 deletions(-) diff --git a/TRRandomizerCore/Resources/TR3/Environment/ANTARC.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/ANTARC.TR2-Environment.json index 8aa367a90..06e7a1ab5 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/ANTARC.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/ANTARC.TR2-Environment.json @@ -117,6 +117,70 @@ ] } ] + }, + { + "Condition": { + "Comments": "Check if key item #55 is in its default position. If not, ensure it is visible and remove its old trigger.", + "ConditionType": 0, + "EntityIndex": 55, + "X": 68096, + "Y": -3840, + "Z": 28160, + "Room": 87 + }, + "OnFalse": [ + { + "EMType": 48, + "EntityIndex": 55, + "Invisible": false + }, + { + "EMType": 71, + "Locations": [ + { + "X": 68096, + "Y": -3840, + "Z": 28160, + "Room": 87 + } + ], + "ActionItem": { + "Parameter": 55 + } + } + ] + }, + { + "Condition": { + "Comments": "Check if key item #66 is in its default position. If not, ensure it is visible and remove its old trigger.", + "ConditionType": 0, + "EntityIndex": 66, + "X": 54784, + "Y": -6144, + "Z": 47616, + "Room": 93 + }, + "OnFalse": [ + { + "EMType": 48, + "EntityIndex": 66, + "Invisible": false + }, + { + "EMType": 71, + "Locations": [ + { + "X": 54784, + "Y": -6144, + "Z": 47616, + "Room": 93 + } + ], + "ActionItem": { + "Parameter": 66 + } + } + ] } ], "ConditionalOneOf": [], diff --git a/TRRandomizerCore/Resources/TR3/Environment/AREA51.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/AREA51.TR2-Environment.json index c2a2bedea..b8e813b3c 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/AREA51.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/AREA51.TR2-Environment.json @@ -79,6 +79,23 @@ } } ] + }, + { + "Comments": "Make a step in room 64 to allow climbing back outside.", + "EMType": 1, + "Tags": [ + 9 + ], + "Location": { + "X": 34304, + "Y": 5632, + "Z": 60928, + "Room": 64 + }, + "Clicks": -1, + "FloorTexture": 1918, + "SideTexture": 2245, + "Flags": 15 } ], "Any": [], diff --git a/TRRandomizerCore/Resources/TR3/Environment/CITY.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/CITY.TR2-Environment.json index 0ad77c1dd..af91e59ea 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/CITY.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/CITY.TR2-Environment.json @@ -973,13 +973,240 @@ } ] } + }, + { + "Comments": "Replace the trigger under the wind mask with a pickup trigger, only if key item rando is enabled.", + "EMType": 61, + "Tags": [ + 12 + ], + "EntityLocation": 76, + "Trigger": { + "TrigType": 4, + "Mask": 31, + "Actions": [ + { + "Parameter": 76 + }, + { + "Parameter": 77 + } + ] + }, + "Replace": true + }, + { + "Comments": "Convert the exit door for the wind maze into a lifting type as it will no longer close.", + "EMType": 45, + "Tags": [ + 12 + ], + "EntityIndex": 77, + "NewEntityType": 133 + }, + { + "Comments": "Replace the trigger under the fire mask with a pickup trigger, only if key item rando is enabled.", + "EMType": 61, + "Tags": [ + 12 + ], + "EntityLocation": 105, + "Trigger": { + "TrigType": 4, + "Mask": 31, + "Actions": [ + { + "Parameter": 105 + }, + { + "Parameter": 106 + } + ] + }, + "Replace": true + }, + { + "Comments": "Convert the exit door for the fire room into a lifting type as it will no longer close.", + "EMType": 45, + "Tags": [ + 12 + ], + "EntityIndex": 106, + "NewEntityType": 133 + }, + { + "Comments": "Replace the trigger near the water mask with a pickup trigger for the mask, only if key item rando is enabled.", + "EMType": 61, + "Tags": [ + 12 + ], + "EntityLocation": 73, + "Trigger": { + "TrigType": 4, + "Mask": 31, + "Actions": [ + { + "Parameter": 73 + }, + { + "Parameter": 120 + } + ] + } + }, + { + "Comments": "Remove the switch trigger.", + "EMType": 62, + "Tags": [ + 12 + ], + "Locations": [ + { + "X": 37376, + "Y": -2048, + "Z": 89600, + "Room": 109 + } + ] + }, + { + "Comments": "Replace the switch with a pickup.", + "EMType": 45, + "Tags": [ + 12 + ], + "EntityIndex": 94, + "NewEntityType": 177 + }, + { + "Comments": "Put it where the mask was.", + "EMType": 44, + "Tags": [ + 12 + ], + "EntityIndex": 94, + "TargetLocation": { + "X": 35328, + "Y": -2560, + "Z": 89600, + "Room": 94 + } + }, + { + "Comments": "Replace the wall texture.", + "EMType": 21, + "Tags": [ + 12 + ], + "TextureMap": { + "1889": { + "109": { + "Rectangles": [ + 4 + ] + } + } + } } ], "Any": [], "AllWithin": [], "OneOf": [], "ConditionalAllWithin": [], - "ConditionalAll": [], + "ConditionalAll": [ + { + "Condition": { + "Comments": "If the earth mask has been moved, move its trigger.", + "ConditionType": 0, + "EntityIndex": 108, + "X": 44544, + "Y": -8192, + "Z": 77312, + "Room": 120 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 44544, + "Y": -8192, + "Z": 77312, + "Room": 120 + }, + "EntityLocation": 108 + } + ] + }, + { + "Condition": { + "Comments": "If the wind mask has been moved, move its trigger.", + "ConditionType": 0, + "EntityIndex": 76, + "X": 8704, + "Y": -12032, + "Z": 54784, + "Room": 97 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 8704, + "Y": -12032, + "Z": 54784, + "Room": 97 + }, + "EntityLocation": 76 + } + ] + }, + { + "Condition": { + "Comments": "If the water mask has been moved, move its trigger.", + "ConditionType": 0, + "EntityIndex": 73, + "X": 35328, + "Y": -2560, + "Z": 89600, + "Room": 94 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 35328, + "Y": -2560, + "Z": 89600, + "Room": 94 + }, + "EntityLocation": 73 + } + ] + }, + { + "Condition": { + "Comments": "If the fire mask has been moved, move its trigger.", + "ConditionType": 0, + "EntityIndex": 105, + "X": 16896, + "Y": 512, + "Z": 80384, + "Room": 119 + }, + "OnFalse": [ + { + "EMType": 67, + "BaseLocation": { + "X": 16896, + "Y": 512, + "Z": 80384, + "Room": 119 + }, + "EntityLocation": 105 + } + ] + } + ], "ConditionalOneOf": [], "Mirrored": [] } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Environment/COMPOUND.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/COMPOUND.TR2-Environment.json index d16480cd8..a147746ac 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/COMPOUND.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/COMPOUND.TR2-Environment.json @@ -1,5 +1,464 @@ { - "All": [], + "All": [ + { + "Comments": "Create a return path from OG key 179 to the top of the satellite tower area.", + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 63488, + "Y": -256, + "Z": 6144 + }, + "LinkedLocation": { + "X": 67072, + "Z": 7680, + "Room": 129 + }, + "Textures": { + "Floor": 1855, + "Ceiling": 1765, + "WallAlignment": 4, + "Wall4": 1827 + }, + "AmbientLighting": 7424, + "DefaultVertex": { + "Lighting": 3170, + "Attributes": 16, + "Colour": 3170 + }, + "Lights": [ + { + "X": 1536, + "Y": -768, + "Z": 1536, + "Intensity1": 512, + "Fade1": 4096, + "Colour": { + "Red": 255, + "Green": 255, + "Blue": 255 + }, + "LightProperties": [ + -1688, + -1, + 732, + 0 + ] + } + ], + "Height": 8, + "Width": 4, + "Depth": 8, + "FloorHeights": { + "-127": [ + 18, + 19, + 20, + 21, + 22 + ] + }, + "CeilingHeights": { + "4": [ + 9, + 10, + 11, + 12, + 13, + 17 + ] + } + }, + { + "EMType": 126, + "Tags": [ + 9 + ], + "Location": { + "X": 63488, + "Y": -2304, + "Z": 11264 + }, + "LinkedLocation": { + "X": 67072, + "Z": 7680, + "Room": 129 + }, + "Textures": { + "Floor": 1855, + "Ceiling": 1765, + "WallAlignment": 4, + "Wall4": 1827 + }, + "AmbientLighting": 7424, + "DefaultVertex": { + "Lighting": 3170, + "Attributes": 16, + "Colour": 3170 + }, + "Lights": [ + { + "X": 1536, + "Y": -768, + "Z": 1536, + "Intensity1": 512, + "Fade1": 4096, + "Colour": { + "Red": 255, + "Green": 255, + "Blue": 255 + }, + "LightProperties": [ + -1688, + -1, + 732, + 0 + ] + } + ], + "Height": 8, + "Width": 3, + "Depth": 5, + "FloorHeights": { + "-4": [ + 7 + ] + } + }, + { + "Comments": "Make visibility portals.", + "EMType": 81, + "Tags": [ + 9 + ], + "Portals": [ + { + "BaseRoom": 38, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 2048, + "Y": -2304, + "Z": 1024 + }, + { + "X": 1024, + "Y": -2304, + "Z": 1024 + }, + { + "X": 1024, + "Y": -2304, + "Z": 2048 + }, + { + "X": 2048, + "Y": -2304, + "Z": 2048 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": 38, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -2304, + "Z": 4096 + }, + { + "X": 2048, + "Y": -2304, + "Z": 4096 + }, + { + "X": 2048, + "Y": -2304, + "Z": 3072 + }, + { + "X": 1024, + "Y": -2304, + "Z": 3072 + } + ] + }, + { + "BaseRoom": -1, + "AdjoiningRoom": -2, + "Normal": { + "Y": -1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -2304, + "Z": 2048 + }, + { + "X": 2048, + "Y": -2304, + "Z": 2048 + }, + { + "X": 2048, + "Y": -2304, + "Z": 1024 + }, + { + "X": 1024, + "Y": -2304, + "Z": 1024 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": -1, + "Normal": { + "Y": 1 + }, + "Vertices": [ + { + "X": 2048, + "Y": -2304, + "Z": 6144 + }, + { + "X": 1024, + "Y": -2304, + "Z": 6144 + }, + { + "X": 1024, + "Y": -2304, + "Z": 7168 + }, + { + "X": 2048, + "Y": -2304, + "Z": 7168 + } + ] + }, + { + "BaseRoom": -2, + "AdjoiningRoom": 129, + "Normal": { + "X": -1 + }, + "Vertices": [ + { + "X": 3072, + "Y": -1280, + "Z": 2048 + }, + { + "X": 3072, + "Y": -1280, + "Z": 1024 + }, + { + "X": 3072, + "Y": -256, + "Z": 1024 + }, + { + "X": 3072, + "Y": -256, + "Z": 2048 + } + ] + }, + { + "BaseRoom": 129, + "AdjoiningRoom": -2, + "Normal": { + "X": 1 + }, + "Vertices": [ + { + "X": 1024, + "Y": -1280, + "Z": 1024 + }, + { + "X": 1024, + "Y": -1280, + "Z": 2048 + }, + { + "X": 1024, + "Y": -256, + "Z": 2048 + }, + { + "X": 1024, + "Y": -256, + "Z": 1024 + } + ] + } + ] + }, + { + "Comments": "Horizontal portals.", + "EMType": 82, + "Tags": [ + 9 + ], + "Portals": { + "38": { + "-1": [ + { + "X": 65024, + "Z": 13824 + } + ] + }, + "-2": { + "129": [ + { + "X": 67072, + "Z": 7680 + } + ], + "-1": [ + { + "X": 65024, + "Z": 13824 + } + ] + }, + "129": { + "-2": [ + { + "X": 66048, + "Z": 7680 + } + ] + } + } + }, + { + "Comments": "Vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 65024, + "Y": -2304, + "Z": 14848, + "Room": -1 + }, + "Floor": { + "X": 65024, + "Y": -1280, + "Z": 14848, + "Room": 38 + } + }, + { + "Comments": "Vertical portals.", + "EMType": 83, + "Tags": [ + 9 + ], + "Ceiling": { + "X": 65024, + "Y": -2304, + "Z": 12800, + "Room": -1 + }, + "Floor": { + "X": 65024, + "Y": -1280, + "Z": 12800, + "Room": -2 + } + }, + { + "Comments": "Add a ladder.", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1848": { + "-2": { + "Rectangles": [ + 24, + 25 + ] + }, + "-1": { + "Rectangles": [ + 4 + ] + } + } + }, + "Location": { + "X": 65024, + "Y": -256, + "Z": 12800, + "Room": -2 + }, + "IsPositiveZ": true + }, + { + "Comments": "Remove faces on portals.", + "EMType": 22, + "Tags": [ + 9 + ], + "GeometryMap": { + "38": { + "Rectangles": [ + 1 + ] + }, + "-1": { + "Rectangles": [ + 0, + 13 + ] + }, + "-2": { + "Rectangles": [ + 21, + 32 + ] + }, + "129": { + "Rectangles": [ + 3 + ] + } + } + }, + { + "Comments": "Generate lighting.", + "EMType": 128, + "Tags": [ + 9 + ], + "RoomIndices": [ + -1, + -2 + ] + } + ], "Any": [], "AllWithin": [], "OneOf": [], diff --git a/TRRandomizerCore/Resources/TR3/Environment/NEVADA.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/NEVADA.TR2-Environment.json index 4e3784d11..47489811c 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/NEVADA.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/NEVADA.TR2-Environment.json @@ -475,6 +475,38 @@ ] } ] + }, + { + "Condition": { + "Comments": "Check if key item #57 is in its default position. If not, ensure it is visible and remove its old trigger.", + "ConditionType": 0, + "EntityIndex": 57, + "X": 4608, + "Y": -3328, + "Z": 60928, + "Room": 69 + }, + "OnFalse": [ + { + "EMType": 48, + "EntityIndex": 57, + "Invisible": false + }, + { + "EMType": 71, + "Locations": [ + { + "X": 32256, + "Y": -12800, + "Z": 86528, + "Room": 119 + } + ], + "ActionItem": { + "Parameter": 57 + } + } + ] } ], "ConditionalOneOf": [], diff --git a/TRRandomizerCore/Resources/TR3/Environment/SEWER.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/SEWER.TR2-Environment.json index 384743c67..b9e01ec8c 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/SEWER.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/SEWER.TR2-Environment.json @@ -277,6 +277,38 @@ } } ] + }, + { + "Condition": { + "Comments": "Check if key item #86 is in its default position. If not, ensure it is visible and remove its old trigger.", + "ConditionType": 0, + "EntityIndex": 86, + "X": 62976, + "Y": 768, + "Z": 56832, + "Room": 42 + }, + "OnFalse": [ + { + "EMType": 48, + "EntityIndex": 86, + "Invisible": false + }, + { + "EMType": 71, + "Locations": [ + { + "X": 42496, + "Y": 768, + "Z": 58880, + "Room": 68 + } + ], + "ActionItem": { + "Parameter": 86 + } + } + ] } ], "ConditionalOneOf": [], diff --git a/TRRandomizerCore/Resources/TR3/Environment/STPAUL.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/STPAUL.TR2-Environment.json index 5bebabcab..1dd2d9ede 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/STPAUL.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/STPAUL.TR2-Environment.json @@ -1,5 +1,25 @@ { "All": [ + { + "Comments": "Allow resetting the zipline to avoid softlocks.", + "EMType": 61, + "Locations": [ + { + "X": 41472, + "Y": -3840, + "Z": 53760, + "Room": 55 + } + ], + "Trigger": { + "Mask": 31, + "Actions": [ + { + "Parameter": 9 + } + ] + } + }, { "Comments": "Create a return path to get back out of the cathedral.", "EMType": 126, diff --git a/TRRandomizerCore/Resources/TR3/Environment/TOWER.TR2-Environment.json b/TRRandomizerCore/Resources/TR3/Environment/TOWER.TR2-Environment.json index 6463d22e7..5f38a3877 100644 --- a/TRRandomizerCore/Resources/TR3/Environment/TOWER.TR2-Environment.json +++ b/TRRandomizerCore/Resources/TR3/Environment/TOWER.TR2-Environment.json @@ -1,5 +1,104 @@ { - "All": [], + "All": [ + { + "Comments": "Make ladders in rooms 69 and 72", + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1996": { + "72": { + "Rectangles": [ + 81 + ] + } + } + }, + "Location": { + "X": 54784, + "Y": -5376, + "Z": 35328, + "Room": 69 + }, + "IsPositiveX": true + }, + { + "EMType": 0, + "Tags": [ + 9 + ], + "TextureMap": { + "1996": { + "72": { + "Rectangles": [ + 79 + ] + } + } + }, + "Location": { + "X": 54784, + "Y": -5376, + "Z": 34304, + "Room": 69 + }, + "IsPositiveX": true + }, + { + "Comments": "Make a block to reach the ladder.", + "EMType": 1, + "Tags": [ + 9 + ], + "Location": { + "X": 53760, + "Y": -6656, + "Z": 35328, + "Room": 69 + }, + "Clicks": -4, + "FloorTexture": 2029, + "SideTexture": 2029, + "Flags": 15 + }, + { + "Comments": "Alter door 211 to avoid softlock if exploring the area before it again.", + "EMType": 48, + "Tags": [ + 9 + ], + "EntityIndex": 211, + "Flags": 0 + }, + { + "Comments": "Adjust its triggers.", + "EMType": 62, + "Tags": [ + 9 + ], + "Locations": [ + { + "X": 56832, + "Y": -1536, + "Z": 32256, + "Room": 198 + } + ] + }, + { + "EMType": 68, + "Tags": [ + 9 + ], + "EntityLocation": 109, + "Actions": [ + { + "Parameter": 211 + } + ] + } + ], "Any": [], "AllWithin": [], "OneOf": [], From 98b2a576fd8112dc5959b9ddc37a688bede87992 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:00:47 +0000 Subject: [PATCH 07/17] Fix TR2 model adjustments TR2 replaces P2 items with P3, to allow for the dragon to be placed in each level (the dagger is hardcoded as a P2 item). This was always done after key item rando to allow for zoning of the original items. I forgot to move this logic in #568. Zoning of these items must now be done based on them being P3. Removed the puzzle reassignment checks from TR3 as it's not applicable there. Also updated the enemy adjustment logic (this clears out unused enemies in heavy-item levels) so that the items can be re-used if needed. --- .../Editors/RandomizerSettings.cs | 2 +- TRRandomizerCore/Editors/TR2RandoEditor.cs | 45 +++++++++++-------- TRRandomizerCore/Editors/TR3RandoEditor.cs | 4 +- .../Processors/TR2/TR2EnemyAdjuster.cs | 4 ++ .../TR2/TR2GameStringRandomizer.cs | 2 +- .../TR3/TR3GameStringRandomizer.cs | 37 +++++++-------- 6 files changed, 51 insertions(+), 43 deletions(-) diff --git a/TRRandomizerCore/Editors/RandomizerSettings.cs b/TRRandomizerCore/Editors/RandomizerSettings.cs index 03f3dfa60..1f6b9fcde 100644 --- a/TRRandomizerCore/Editors/RandomizerSettings.cs +++ b/TRRandomizerCore/Editors/RandomizerSettings.cs @@ -138,7 +138,7 @@ public class RandomizerSettings public bool RandomizeItemPositions { get; set; } public bool DeduplicateTextures => RandomizeTextures || RandomizeNightMode || (RandomizeEnemies && CrossLevelEnemies) || RandomizeOutfits;// || RandomizeEnvironment; // Not needed until trap model import takes place - public bool ReassignPuzzleNames => RandomizeEnemies && CrossLevelEnemies; + public bool ReassignPuzzleItems => (RandomizeEnemies && CrossLevelEnemies) || (RandomizeItems && IncludeKeyItems); public bool RandomizeVfx { get; set; } public Color VfxFilterColor { get; set; } diff --git a/TRRandomizerCore/Editors/TR2RandoEditor.cs b/TRRandomizerCore/Editors/TR2RandoEditor.cs index 36d44e060..c0a6187cb 100644 --- a/TRRandomizerCore/Editors/TR2RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR2RandoEditor.cs @@ -33,7 +33,7 @@ protected override int GetSaveTarget(int numLevels) { int target = base.GetSaveTarget(numLevels); - if (Settings.RandomizeGameStrings || Settings.ReassignPuzzleNames) + if (Settings.RandomizeGameStrings || Settings.ReassignPuzzleItems) { target++; } @@ -83,10 +83,16 @@ protected override int GetSaveTarget(int numLevels) target += numLevels * 2; } + if (Settings.ReassignPuzzleItems) + { + // For TR2ModelAdjuster + target += numLevels; + } + if (Settings.RandomizeEnemies) { - // *4 => 3 for multithreading work, 1 for ModelAdjuster - target += Settings.CrossLevelEnemies ? numLevels * 4 : numLevels; + // 3 for multithreading cross-level work + target += Settings.CrossLevelEnemies ? numLevels * 3 : numLevels; // And again for eliminating unused enemies target += numLevels; } @@ -172,11 +178,12 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni Levels = levels, BasePath = wipDirectory, BackupPath = backupDirectory, - SaveMonitor = monitor + SaveMonitor = monitor, + ItemFactory = itemFactory, }.AdjustEnemies(); } - if (!monitor.IsCancelled && (Settings.RandomizeGameStrings || Settings.ReassignPuzzleNames)) + if (!monitor.IsCancelled && (Settings.RandomizeGameStrings || Settings.ReassignPuzzleItems)) { monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Adjusting game strings"); new TR2GameStringRandomizer @@ -228,23 +235,23 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni itemRandomizer.Randomize(Settings.ItemSeed); } - if (!monitor.IsCancelled && Settings.RandomizeEnemies) + if (!monitor.IsCancelled && Settings.ReassignPuzzleItems) { - if (Settings.CrossLevelEnemies) + // P2 items are converted to P3 in case the dragon is present as the dagger type is hardcoded. + // Must take place before enemy randomization. OG P2 key items must be zoned based on being P3. + monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Adjusting level models"); + new TR2ModelAdjuster { - // For now all P2 items become P3 to avoid dragon issues. This must take place after Item - // randomization for P2/3 zoning because P2 entities will become P3. - monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Adjusting level models"); - new TR2ModelAdjuster - { - ScriptEditor = tr23ScriptEditor, - Levels = levels, - BasePath = wipDirectory, - BackupPath = backupDirectory, - SaveMonitor = monitor - }.AdjustModels(); - } + ScriptEditor = tr23ScriptEditor, + Levels = levels, + BasePath = wipDirectory, + BackupPath = backupDirectory, + SaveMonitor = monitor + }.AdjustModels(); + } + if (!monitor.IsCancelled && Settings.RandomizeEnemies) + { monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing enemies"); new TR2EnemyRandomizer { diff --git a/TRRandomizerCore/Editors/TR3RandoEditor.cs b/TRRandomizerCore/Editors/TR3RandoEditor.cs index 7c335a99c..eb80095d7 100644 --- a/TRRandomizerCore/Editors/TR3RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR3RandoEditor.cs @@ -35,7 +35,7 @@ protected override int GetSaveTarget(int numLevels) // randomizers are implemented, just call Settings.GetSaveTarget(numLevels) per TR2. int target = base.GetSaveTarget(numLevels); - if (Settings.RandomizeGameStrings || Settings.ReassignPuzzleNames) + if (Settings.RandomizeGameStrings) { target++; } @@ -159,7 +159,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni using (textureMonitor) { - if (!monitor.IsCancelled && (Settings.RandomizeGameStrings || Settings.ReassignPuzzleNames)) + if (!monitor.IsCancelled && Settings.RandomizeGameStrings) { monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Adjusting game strings"); new TR3GameStringRandomizer diff --git a/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs b/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs index a2d3e3106..79d8863e6 100644 --- a/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs +++ b/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs @@ -3,6 +3,7 @@ using TRGE.Core; using TRLevelControl.Helpers; using TRLevelControl.Model; +using TRRandomizerCore.Helpers; namespace TRRandomizerCore.Processors; @@ -14,6 +15,8 @@ public class TR2EnemyAdjuster : TR2LevelProcessor [TR2LevelNames.MONASTERY] = new List { 38, 39, 118 } }; + public ItemFactory ItemFactory { get; set; } + public void AdjustEnemies() { foreach (TR2ScriptedLevel lvl in Levels) @@ -43,6 +46,7 @@ private void AdjustInstanceEnemies() { _levelInstance.Data.Entities[enemyIndex].TypeID = TR2Type.CameraTarget_N; FDUtilities.RemoveEntityTriggers(_levelInstance.Data, enemyIndex, floorData); + ItemFactory?.FreeItem(_levelInstance.Name, enemyIndex); } floorData.WriteToLevel(_levelInstance.Data); diff --git a/TRRandomizerCore/Randomizers/TR2/TR2GameStringRandomizer.cs b/TRRandomizerCore/Randomizers/TR2/TR2GameStringRandomizer.cs index 53783628f..eaa64531c 100644 --- a/TRRandomizerCore/Randomizers/TR2/TR2GameStringRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR2/TR2GameStringRandomizer.cs @@ -40,7 +40,7 @@ public override void Randomize(int seed) } } - if (Settings.ReassignPuzzleNames) + if (Settings.ReassignPuzzleItems) { // This is specific to the Dagger of Xian if it appears in other levels with the dragon. We'll just // use whatever has already been allocated as the dagger name in Lair. diff --git a/TRRandomizerCore/Randomizers/TR3/TR3GameStringRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3GameStringRandomizer.cs index b9766f781..c143c3123 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3GameStringRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3GameStringRandomizer.cs @@ -12,31 +12,28 @@ public class TR3GameStringRandomizer : BaseTR3Randomizer public override void Randomize(int seed) { - if (Settings.RandomizeGameStrings) - { - _generator = new Random(seed); - _g11n = new G11N(G11NGame.TR3); + _generator = new(seed); + _g11n = new(G11NGame.TR3); - if (!Settings.GameStringLanguage.IsHybrid) - { - _gameStrings = _g11n.GetGameStrings(Settings.GameStringLanguage) as TR23GameStrings; - } - _defaultGameStrings = _g11n.GetDefaultGameStrings() as TR23GameStrings; + if (!Settings.GameStringLanguage.IsHybrid) + { + _gameStrings = _g11n.GetGameStrings(Settings.GameStringLanguage) as TR23GameStrings; + } + _defaultGameStrings = _g11n.GetDefaultGameStrings() as TR23GameStrings; - TR23Script script = ScriptEditor.Script as TR23Script; - List gamestrings1 = new(script.GameStrings1); - List gamestrings2 = new(script.GameStrings2); + TR23Script script = ScriptEditor.Script as TR23Script; + List gamestrings1 = new(script.GameStrings1); + List gamestrings2 = new(script.GameStrings2); - ProcessGlobalStrings(0, gamestrings1); - ProcessGlobalStrings(1, gamestrings2); + ProcessGlobalStrings(0, gamestrings1); + ProcessGlobalStrings(1, gamestrings2); - script.GameStrings1 = gamestrings1.ToArray(); - script.GameStrings2 = gamestrings2.ToArray(); + script.GameStrings1 = gamestrings1.ToArray(); + script.GameStrings2 = gamestrings2.ToArray(); - foreach (AbstractTRScriptedLevel level in ScriptEditor.ScriptedLevels) - { - ProcessLevelStrings(level); - } + foreach (AbstractTRScriptedLevel level in ScriptEditor.ScriptedLevels) + { + ProcessLevelStrings(level); } SaveScript(); From df845fbf3f8bd3079d7e4d5b031757477fc1ccb1 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:03:20 +0000 Subject: [PATCH 08/17] Secret updates Moved some general consts into TRLevelControl as they're better placed there. Fixed some locations in TR2 that had the wrong room numbers set and one that was missing a skidoo flag. --- TRLevelControl/Helpers/TRConsts.cs | 3 +++ TRLevelControlTests/TR3/IOTests.cs | 5 +++-- .../Resources/TR2/Locations/locations.json | 16 +++++++++------- TRRandomizerCore/Secrets/TRSecretPlacement.cs | 10 ++++------ 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/TRLevelControl/Helpers/TRConsts.cs b/TRLevelControl/Helpers/TRConsts.cs index 9351cc169..2bc0c38d3 100644 --- a/TRLevelControl/Helpers/TRConsts.cs +++ b/TRLevelControl/Helpers/TRConsts.cs @@ -19,4 +19,7 @@ public static class TRConsts public const int WallShift = 10; public const int NoHeight = -32512; public const int WallClicks = -127; + + public const int MaskBits = 5; + public const int FullMask = (1 << MaskBits) - 1; } diff --git a/TRLevelControlTests/TR3/IOTests.cs b/TRLevelControlTests/TR3/IOTests.cs index ff62081ee..82b3ad6c1 100644 --- a/TRLevelControlTests/TR3/IOTests.cs +++ b/TRLevelControlTests/TR3/IOTests.cs @@ -1,5 +1,6 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using TRFDControl; +using TRLevelControl; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRLevelControl.Model.Base.Enums; @@ -217,7 +218,7 @@ public void TestSecretTriggerMasks() for (int totalSecrets = 1; totalSecrets <= 21; totalSecrets++) { // The number of doors determines the trigger masks - int requiredDoors = (int)Math.Ceiling((double)totalSecrets / TRSecretPlacement.MaskBits); + int requiredDoors = (int)Math.Ceiling((double)totalSecrets / TRConsts.MaskBits); List doors = new(requiredDoors); for (int i = 0; i < requiredDoors; i++) { @@ -245,7 +246,7 @@ public void TestSecretTriggerMasks() int mask = 0; doorTriggers.ForEach(s => mask += s.TriggerMask); - Assert.AreEqual(TRSecretPlacement.FullActivation, mask); + Assert.AreEqual(TRConsts.FullMask, mask); } } } diff --git a/TRRandomizerCore/Resources/TR2/Locations/locations.json b/TRRandomizerCore/Resources/TR2/Locations/locations.json index 5ad3194c6..7844145ae 100644 --- a/TRRandomizerCore/Resources/TR2/Locations/locations.json +++ b/TRRandomizerCore/Resources/TR2/Locations/locations.json @@ -636,7 +636,7 @@ "X": 33764, "Y": 787, "Z": 37989, - "Room": 65 + "Room": 66 }, { "X": 31643, @@ -1102,7 +1102,7 @@ "X": 25647, "Y": 807, "Z": 77925, - "Room": 154, + "Room": 146, "PackID": "apel" }, { @@ -1526,7 +1526,7 @@ "X": 53349, "Y": -116, "Z": 23023, - "Room": 71 + "Room": 64 }, { "X": 33893, @@ -1742,7 +1742,7 @@ "X": 69531, "Y": 8192, "Z": 59291, - "Room": 173 + "Room": 176 }, { "X": 72805, @@ -1953,7 +1953,7 @@ "X": 70154, "Y": 5632, "Z": 56820, - "Room": 115 + "Room": 116 }, { "X": 70168, @@ -1977,7 +1977,7 @@ "X": 75675, "Y": 7936, "Z": 48027, - "Room": 84 + "Room": 83 }, { "X": 88987, @@ -4772,7 +4772,9 @@ "X": 3181, "Y": -3300, "Z": 76871, - "Room": 74 + "Room": 74, + "TargetType": 13, + "VehicleRequired": true }, { "X": 6063, diff --git a/TRRandomizerCore/Secrets/TRSecretPlacement.cs b/TRRandomizerCore/Secrets/TRSecretPlacement.cs index 5f4453eaa..8d6c576d1 100644 --- a/TRRandomizerCore/Secrets/TRSecretPlacement.cs +++ b/TRRandomizerCore/Secrets/TRSecretPlacement.cs @@ -1,12 +1,10 @@ -using TRRandomizerCore.Helpers; +using TRLevelControl; +using TRRandomizerCore.Helpers; namespace TRRandomizerCore.Secrets; public class TRSecretPlacement where E : Enum { - public static readonly int MaskBits = 5; - public static readonly int FullActivation = (1 << MaskBits) - 1; - public Location Location { get; set; } public E PickupType { get; set; } public ushort EntityIndex { get; set; } @@ -21,7 +19,7 @@ public class TRSecretPlacement where E : Enum public TRSecretPlacement() { // Default to standard mask and no door - TriggerMask = (byte)FullActivation; + TriggerMask = TRConsts.FullMask; DoorIndex = ushort.MaxValue; CameraIndex = ushort.MaxValue; } @@ -50,7 +48,7 @@ public void SetMaskAndDoor(int secretCount, List doorItems) int alignedIndex = SecretIndex + 1; if (alignedIndex == secretCount || alignedIndex % split == 0) { - while (++position < MaskBits) + while (++position < TRConsts.MaskBits) { mask |= 1 << position; } From d227c222aa2d4c5ea67e00015773aa480acb9438 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:06:12 +0000 Subject: [PATCH 09/17] Create unified zoning logic Key items and secrets will now be placed using identical logic in all games. This uses routes (currently empty) to mark the minimum and maximum rooms key items can be placed in to prevent softlocks. For secrets, the previous sphere-testing method is replaced with a distance approximator, again using the provided level route. TR2 secrets will continue to be in Stone/Jade/Gold order, based on the dev-intended route of a level. --- .../Helpers/CollectionExtensions.cs | 15 + TRRandomizerCore/Helpers/ExtRoomInfo.cs | 43 ++ TRRandomizerCore/Helpers/ItemFactory.cs | 30 ++ .../Randomizers/Shared/IRouteManager.cs | 9 + .../Randomizers/Shared/LocationPicker.cs | 312 +++++++++++++-- .../Randomizers/Shared/SecretConsts.cs | 14 + .../Randomizers/Shared/SecretPicker.cs | 125 +++++- .../Randomizers/TR1/TR1ItemRandomizer.cs | 37 +- .../Randomizers/TR1/TR1SecretRandomizer.cs | 371 ++++++------------ .../Randomizers/TR2/TR2ItemRandomizer.cs | 355 ++++------------- .../Randomizers/TR2/TR2SecretRandomizer.cs | 361 ++++++----------- .../Randomizers/TR3/TR3ItemRandomizer.cs | 102 +---- .../Randomizers/TR3/TR3SecretRandomizer.cs | 341 ++++++---------- .../Resources/TR1/Locations/routes.json | 2 + .../Resources/TR2/Locations/routes.json | 2 + .../Resources/TR3/Locations/routes.json | 2 + 16 files changed, 1005 insertions(+), 1116 deletions(-) create mode 100644 TRRandomizerCore/Helpers/ExtRoomInfo.cs create mode 100644 TRRandomizerCore/Randomizers/Shared/IRouteManager.cs create mode 100644 TRRandomizerCore/Randomizers/Shared/SecretConsts.cs create mode 100644 TRRandomizerCore/Resources/TR1/Locations/routes.json create mode 100644 TRRandomizerCore/Resources/TR2/Locations/routes.json create mode 100644 TRRandomizerCore/Resources/TR3/Locations/routes.json diff --git a/TRRandomizerCore/Helpers/CollectionExtensions.cs b/TRRandomizerCore/Helpers/CollectionExtensions.cs index 5462fb35c..febe06b42 100644 --- a/TRRandomizerCore/Helpers/CollectionExtensions.cs +++ b/TRRandomizerCore/Helpers/CollectionExtensions.cs @@ -56,4 +56,19 @@ public static void Shuffle(this List list, Random rand) iterList.Remove(item); } } + + public static List> Split(this List list, int parts) + { + int boundary = (int)Math.Ceiling(list.Count / (double)parts); + List> splits = new(); + for (int i = 0; i < list.Count; i++) + { + if (i % boundary == 0) + { + splits.Add(new()); + } + splits[^1].Add(list[i]); + } + return splits; + } } diff --git a/TRRandomizerCore/Helpers/ExtRoomInfo.cs b/TRRandomizerCore/Helpers/ExtRoomInfo.cs new file mode 100644 index 000000000..6d1de44c2 --- /dev/null +++ b/TRRandomizerCore/Helpers/ExtRoomInfo.cs @@ -0,0 +1,43 @@ +using TRLevelControl; +using TRLevelControl.Model; + +namespace TRRandomizerCore.Helpers; + +public class ExtRoomInfo +{ + public int MinX { get; private set; } + public int MaxX { get; private set; } + public int MinZ { get; private set; } + public int MaxZ { get; private set; } + public int MinY { get; private set; } + public int MaxY { get; private set; } + + public int Width { get; private set; } + public int Height { get; private set; } + public int Depth { get; private set; } + + public int Size { get; private set; } + + public ExtRoomInfo(TRRoomInfo info, int numXSectors, int numZSectors) + { + MinX = info.X + TRConsts.Step4; + MaxX = info.X + TRConsts.Step4 * (numXSectors - 1); + MinZ = info.Z + TRConsts.Step4; + MaxZ = info.Z + TRConsts.Step4 * (numZSectors - 1); + MinY = info.YTop; + MaxY = info.YBottom; + + Width = numXSectors - 2; + Depth = numZSectors - 2; + Height = Math.Abs(MaxY - MinY) / TRConsts.Step1; + + Size = Width * Depth * Height; + } + + public bool Contains(Location location) + { + return location.X >= MinX && location.X < MaxX + && location.Y > MinY && location.Y <= MaxY + && location.Z >= MinZ && location.Z < MaxZ; + } +} diff --git a/TRRandomizerCore/Helpers/ItemFactory.cs b/TRRandomizerCore/Helpers/ItemFactory.cs index aed763a23..766e40612 100644 --- a/TRRandomizerCore/Helpers/ItemFactory.cs +++ b/TRRandomizerCore/Helpers/ItemFactory.cs @@ -91,6 +91,36 @@ public bool CanCreateItems(string lvl, List allItems, int count, bool return allItems.Count + count <= _entityLimit || allowLimitBreak; } + public TR1Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) + { + TR1Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); + if (entity != null) + { + LockItem(lvl, allItems.IndexOf(entity)); + } + return entity; + } + + public TR2Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) + { + TR2Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); + if (entity != null) + { + LockItem(lvl, allItems.IndexOf(entity)); + } + return entity; + } + + public TR3Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) + { + TR3Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); + if (entity != null) + { + LockItem(lvl, allItems.IndexOf(entity)); + } + return entity; + } + public TR1Entity CreateItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) { TR1Entity item; diff --git a/TRRandomizerCore/Randomizers/Shared/IRouteManager.cs b/TRRandomizerCore/Randomizers/Shared/IRouteManager.cs new file mode 100644 index 000000000..9db3a835a --- /dev/null +++ b/TRRandomizerCore/Randomizers/Shared/IRouteManager.cs @@ -0,0 +1,9 @@ +using TRRandomizerCore.Helpers; + +namespace TRRandomizerCore.Randomizers; + +public interface IRouteManager +{ + int LevelSize { get; } + int GetProximity(Location locationA, Location locationB); +} diff --git a/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs b/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs index 692fbde45..fe973935a 100644 --- a/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs +++ b/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs @@ -1,70 +1,330 @@ -using TRLevelControl; +using Newtonsoft.Json; +using TRLevelControl; using TRLevelControl.Model; +using TRRandomizerCore.Editors; using TRRandomizerCore.Helpers; using TRRandomizerCore.Utilities; namespace TRRandomizerCore.Randomizers; -public class LocationPicker +public class LocationPicker : IRouteManager { private static readonly int _rotation = -8192; - private List _locations; - private List _usedTriggerLocations; + private readonly Dictionary> _routes; + + private List _locations, _usedTriggerLocations, _currentRoute; + private List _allRooms; + private RandomizerSettings _settings; private Random _generator; public Func TriggerTestAction { get; set; } public Func KeyItemTestAction { get; set; } + public List RoomInfos { get; set; } + public int LevelSize { get; private set; } + + private enum KeyMode + { + Low, + High, + } - public void Initialise(List globalLocations, Random generator) + public LocationPicker(string routePath) + { + _routes = JsonConvert.DeserializeObject>>(File.ReadAllText(routePath)); + } + + public void Initialise(string levelName, List globalLocations, RandomizerSettings settings, Random generator) { _locations = globalLocations; _usedTriggerLocations = new(); + _settings = settings; _generator = generator; + LoadCurrentRoute(levelName); + _locations.Shuffle(_generator); + + _allRooms = _locations + .Select(l => l.Room) + .Distinct() + .ToList(); + + LevelSize = _allRooms.Sum(r => RoomInfos?[r].Size ?? 0); } - public List GetLocations() + private void LoadCurrentRoute(string levelName) { - return _locations; + _currentRoute = _routes.ContainsKey(levelName) ? _routes[levelName] : null; + if (_currentRoute == null || RoomInfos == null) + { + return; + } + + // Dynamic locations can indicate return paths or even added puzzle/challenge rooms. + // If we cannot match them precisely to a room that's been added, mark them as invalid. + // This assumes our level design does not overlap rooms anywhere. + List dynamicLocations = _currentRoute + .FindAll(l => l.RoomType == RoomType.ReturnPath || l.RoomType == RoomType.Challenge); + + foreach (Location location in dynamicLocations) + { + List matchingInfos = RoomInfos.FindAll(r => r.Contains(location)); + if (matchingInfos.Count == 1) + { + if ((location.RoomType == RoomType.ReturnPath || location.RequiresReturnPath) + && !_settings.IncludeReturnPathLocations) + { + // Return paths may be present, but the user doesn't want items placed here. + InvalidateLocation(location); + } + else + { + location.Room = RoomInfos.IndexOf(matchingInfos[0]); + } + } + else + { + InvalidateLocation(location); + } + } + } + + private static void InvalidateLocation(Location location) + { + location.Room = TRConsts.NoRoom; + location.Validated = false; } - public Location GetPickupLocation() + public void RandomizePickupLocation(TREntity entity) + where T : Enum { - return _locations[_generator.Next(0, _locations.Count)]; + Location location = GetRandomLocation(); + if (location != null) + { + SetLocation(entity, location); + } } - public Location GetKeyItemLocation(List locations, TREntity entity, bool hasPickupTrigger) + public void RandomizeKeyItemLocation(TREntity entity, bool hasPickupTrigger, int levelSequence, TRRoomInfo roomInfo) where T : Enum { - // Currently we pass in locations - once all key items are zoned, - // we can simply use the auto-generated locations. + int keyItemID = GetKeyItemID(levelSequence, entity, roomInfo); + if (!Enum.IsDefined(typeof(T), keyItemID)) + { + return; + } + + Location location = GetKeyItemLocation(keyItemID, entity, hasPickupTrigger); + if (location != null) + { + SetLocation(entity, location); + } + } - if (!hasPickupTrigger) + public Location GetKeyItemLocation(int keyItemID, TREntity entity, bool hasPickupTrigger) + where T : Enum + { + List roomPool = GetRoomPool(keyItemID); + if (roomPool.Count == 0) { - return locations[_generator.Next(0, locations.Count)]; + // This key item must remain static. + return null; } + Location newLocation; Location currentLocation = entity.GetLocation(); // If there is a trigger for this key item that will be shifted by environment // changes, make sure to select a location that doesn't already have a trigger. - Location location; - do + // Don't test triggers if we have picked the same tile, but do allow callers to + // handle their own specific tests in all cases. + while (true) + { + newLocation = GetRandomLocation(roomPool); + if (hasPickupTrigger && !newLocation.IsEquivalent(currentLocation) + && (TriggerTestAction(newLocation) || _usedTriggerLocations.Contains(newLocation))) + { + continue; + } + + if (KeyItemTestAction != null && !KeyItemTestAction(newLocation)) + { + continue; + } + + break; + } + + if (hasPickupTrigger) + { + _usedTriggerLocations.Add(newLocation); + } + + return newLocation; + } + + public List GetRoomPool(int keyItemID) + { + List roomPool = new(); + if (_currentRoute == null) + { + return roomPool; + } + + List zones = new(); + for (int i = 0; i < _currentRoute.Count; i++) + { + Location location = _currentRoute[i]; + if (TestLocation(location, KeyMode.Low, keyItemID)) + { + zones.Add(new() + { + LowIndex = i, + HighIndex = -1 + }); + } + + if (TestLocation(location, KeyMode.High, keyItemID)) + { + if (zones.Count == 0) + { + // Assume a waypoint at the start of the level has been omitted + zones.Add(new()); + } + + if (i == zones[^1].LowIndex) + { + // Intentionally do not move this item e.g. Seraph in The Deck + return roomPool; + } + + // Clamp to outside this room e.g. when several waypoints may be placed on + // an upper bound, we want to be in the previous room, not previous waypoint. + int highIndex = i; + int highRoom = _currentRoute[highIndex].Room; + while (_currentRoute[highIndex].Room == highRoom && highIndex >= 0) + { + highIndex--; + } + + zones[^1].HighIndex = highIndex; + } + } + + foreach (Zone zone in zones) + { + if (zone.HighIndex == -1) + { + // Assume the zone extends to level end + zone.HighIndex = _currentRoute.Count - 1; + } + + for (int i = zone.LowIndex; i <= zone.HighIndex; i++) + { + // Not validated indicates although part of a valid route overall, this + // room can't support key items e.g. room 38 in Temple of Xian + if (_currentRoute[i].Validated && !roomPool.Contains(_currentRoute[i].Room)) + { + roomPool.Add(_currentRoute[i].Room); + } + } + } + + return roomPool; + } + + private bool TestLocation(Location location, KeyMode keyTestMode, int keyItemID) + { + // This assumes that all possible scenarios are defined on a route + string keyIDs = keyTestMode == KeyMode.Low ? location.KeyItemsLow : location.KeyItemsHigh; + if (keyIDs == null || !keyIDs.Contains(keyItemID.ToString())) + { + return false; + } + + if (location.Range != _settings.KeyItemRange) + { + return false; + } + + return (location.RequiresReturnPath && _settings.IncludeReturnPathLocations) + || (!location.RequiresReturnPath && !_settings.IncludeReturnPathLocations); + } + + public int GetRoutePosition(Location location) + { + return _currentRoute.FindIndex(l => l.Room == location.Room); + } + + public List GetRouteRooms() + { + return _currentRoute + .Select(l => l.Room) + .Distinct() + .ToList(); + } + + public int GetProximity(Location location1, Location location2) + { + if (_currentRoute == null) + { + return -1; + } + + int routeIndex1 = _currentRoute.FindIndex(l => l.Room == location1.Room); + int routeIndex2 = _currentRoute.FindIndex(l => l.Room == location2.Room); + + int distance = 0; + if (routeIndex1 == -1 || routeIndex2 == -1) { - location = locations[_generator.Next(0, locations.Count)]; - if (location.IsEquivalent(currentLocation)) + return distance; + } + + HashSet visitedRooms = new(); + for (int i = Math.Min(routeIndex1, routeIndex2); i <= Math.Max(routeIndex1, routeIndex2); i++) + { + Location route = _currentRoute[i]; + if (route.Room != TRConsts.NoRoom && _allRooms.Contains(route.Room) && visitedRooms.Add(route.Room)) { - // No need to test if we've selected the same tile - break; + distance += RoomInfos[route.Room].Size; } } - while (TriggerTestAction(location) || _usedTriggerLocations.Contains(location) - || (KeyItemTestAction != null && !KeyItemTestAction(location))); - _usedTriggerLocations.Add(location); + return distance; + } + + public Location GetRandomLocation(List roomPool = null) + { + if (roomPool == null || !_locations.Any(l => roomPool.Contains(l.Room))) + { + roomPool = _allRooms; + } + + Location location; + do + { + location = _locations[_generator.Next(0, _locations.Count)]; + } + while (!roomPool.Contains(location.Room)); + return location; } + public static int GetKeyItemID(int levelSequence, TREntity entity, TRRoomInfo roomInfo) + where T : Enum + { + // Arbitrary method of generating unique IDs per level. + int x = (entity.X - roomInfo.X) / TRConsts.Step4; + int z = (entity.Z - roomInfo.Z) / TRConsts.Step4; + int y = entity.Y / TRConsts.Step1; + + return 10000 + + (levelSequence - 1) * 1000 + + (int)(object)entity.TypeID + + entity.Room * 2 + + x * z + + y; + } + public void SetLocation(TREntity entity, Location location) where T : Enum { @@ -82,4 +342,10 @@ public void SetLocation(TREntity entity, Location location) entity.Angle = (short)(_generator.Next(0, 8) * _rotation); } } + + private class Zone + { + public int LowIndex { get; set; } + public int HighIndex { get; set; } + } } diff --git a/TRRandomizerCore/Randomizers/Shared/SecretConsts.cs b/TRRandomizerCore/Randomizers/Shared/SecretConsts.cs new file mode 100644 index 000000000..ac9c75453 --- /dev/null +++ b/TRRandomizerCore/Randomizers/Shared/SecretConsts.cs @@ -0,0 +1,14 @@ +namespace TRRandomizerCore.Randomizers; + +public static class SecretConsts +{ + public static readonly string InvalidLocationMsg = "Cannot place a nonvalidated secret where a trigger already exists - {0} [X={1}, Y={2}, Z={3}, R={4}]"; + public static readonly string TrapdoorLocationMsg = "Cannot place a secret on the same sector as a bridge/trapdoor - {0} [X={1}, Y={2}, Z={3}, R={4}]"; + public static readonly string MidairErrorMsg = "Cannot place a secret in mid-air or on a breakable tile - {0} [X={1}, Y={2}, Z={3}, R={4}]"; + public static readonly string TriggerWarningMsg = "Existing trigger object action with parameter {0} will be lost - {1} [X={2}, Y={3}, Z={4}, R={5}]"; + public static readonly string FlipMapWarningMsg = "Secret is being placed in a room that has a flipmap - {0} [X={1}, Y={2}, Z={3}, R={4}]"; + public static readonly string FlipMapErrorMsg = "Secret cannot be placed in a flipped room - {0} [X={1}, Y={2}, Z={3}, R={4}]"; + public static readonly string EdgeInfoMsg = "Adding extra tile edge trigger for {0} [X={1}, Y={2}, Z={3}, R={4}]"; + + public static readonly int TriggerEdgeLimit = 103; // Within ~10% of a tile edge, triggers should be copied into neighbours +} diff --git a/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs b/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs index e47a24a08..de39f2b1f 100644 --- a/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs +++ b/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs @@ -1,14 +1,70 @@ -using TRRandomizerCore.Editors; +using System.Diagnostics; +using TRLevelControl.Model; +using TRRandomizerCore.Editors; using TRRandomizerCore.Helpers; namespace TRRandomizerCore.Randomizers; public class SecretPicker { + private const int _maxRetryLimit = 500; + private const float _distanceStep = 1.0f; + private const float _minDistanceDivisor = _distanceStep * 3; + private static readonly List _retryTolerances = new() + { + 10, 25, 50 + }; + + private int _proxEvaluationCount; + private float _distanceDivisor; + public RandomizerSettings Settings { get; set; } public Random Generator { get; set; } public IMirrorControl Mirrorer { get; set; } public ItemFactory ItemFactory { get; set; } + public IRouteManager RouteManager { get; set; } + public Func SectorAction { get; set; } + public Func PlacementTestAction { get; set; } + + public List GetLocations(List allLocations, bool isMirrored, int totalCount) + { + ResetEvaluators(totalCount); + + List locations = new(); + Queue guaranteedLocations = GetGuaranteedLocations(allLocations, isMirrored, totalCount, location => + { + bool result = TestLocation(location, locations, isMirrored, totalCount); + if (result) + { + locations.Add(location); + } + return result; + }); + + for (int i = 0; i < totalCount; i++) + { + Location location; + if (guaranteedLocations.Count > 0) + { + location = guaranteedLocations.Dequeue(); + } + else + { + do + { + location = allLocations[Generator.Next(0, allLocations.Count)]; + } + while (!TestLocation(location, locations, isMirrored, totalCount)); + } + + if (!locations.Contains(location)) + { + locations.Add(location); + } + } + + return locations; + } public Queue GetGuaranteedLocations(IEnumerable allLocations, bool isMirrored, int totalCount, Func validCallback = null) { @@ -94,6 +150,69 @@ public Queue GetGuaranteedLocations(IEnumerable allLocations return locations; } + public bool TestLocation(Location location, List usedLocations, bool isMirrored, int totalCount) + { + if (location.Difficulty == Difficulty.Hard && !Settings.HardSecrets) + { + return false; + } + + if (location.RequiresGlitch && !Settings.GlitchedSecrets) + { + return false; + } + + if (isMirrored && location.LevelState == LevelState.NotMirrored) + { + return false; + } + + if (!isMirrored && location.LevelState == LevelState.Mirrored) + { + return false; + } + + if (!PlacementTestAction?.Invoke(location) ?? false) + { + return false; + } + + if (usedLocations.Count == 0 || usedLocations == null) + { + ResetEvaluators(totalCount); + return true; + } + + _proxEvaluationCount++; + if (_retryTolerances.Contains(_proxEvaluationCount) || _proxEvaluationCount > _retryTolerances.Max()) + { + _distanceDivisor += _distanceStep; + } + + float minProximity = RouteManager.LevelSize / _distanceDivisor; + + TRRoomSector newSector = SectorAction(location); + foreach (Location used in usedLocations) + { + int proximity = RouteManager.GetProximity(location, used); + if ((proximity >= 0 && proximity < minProximity) + || newSector == SectorAction(used) + || (used.Room == location.Room && _proxEvaluationCount < _maxRetryLimit)) + { + return false; + } + } + + ResetEvaluators(totalCount); + return true; + } + + private void ResetEvaluators(int totalCount) + { + _proxEvaluationCount = 0; + _distanceDivisor = Math.Max(_minDistanceDivisor, totalCount); + } + public void FinaliseSecretPool(IEnumerable usedLocations, string level) { // Secrets in packs are permitted to enforce level state @@ -111,6 +230,10 @@ public void FinaliseSecretPool(IEnumerable usedLocations, string level // Indicates that a secret relies on another item to remain in its original position ItemFactory.LockItem(level, location.EntityIndex); } + +#if DEBUG + Debug.WriteLine(level + ": " + DescribeLocations(usedLocations)); +#endif } private static IEnumerable FilterLocations(IEnumerable locations, bool isMirrored, Difficulty difficulty, bool glitched) diff --git a/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs index 2852f265a..9888c7d5a 100644 --- a/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs @@ -49,7 +49,6 @@ public class TR1ItemRandomizer : BaseTR1Randomizer = 0, // Default = 21 }; - private readonly Dictionary> _keyItemLocations; private readonly Dictionary> _excludedLocations; private readonly Dictionary> _pistolLocations; @@ -66,10 +65,9 @@ public class TR1ItemRandomizer : BaseTR1Randomizer public TR1ItemRandomizer() { - _keyItemLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR1\Locations\item_locations.json")); _excludedLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR1\Locations\invalid_item_locations.json")); _pistolLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR1\Locations\unarmed_locations.json")); - _picker = new(); + _picker = new(GetResourcePath(@"TR1\Locations\routes.json")); } public override void Randomize(int seed) @@ -82,7 +80,7 @@ public override void Randomize(int seed) FindUnarmedLevelPistols(_levelInstance); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, false), Settings, _generator); _secretMapping = TRSecretMapping.Get(GetResourcePath($@"TR1\SecretMapping\{_levelInstance.Name}-SecretMapping.json")); if (Settings.IncludeExtraPickups) @@ -129,7 +127,6 @@ public void RandomizeKeyItems() foreach (TR1ScriptedLevel lvl in Levels) { LoadLevelInstance(lvl); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); RandomizeKeyItems(_levelInstance); SaveLevelInstance(); @@ -187,7 +184,7 @@ private void AddExtraPickups(TR1CombinedLevel level) break; } - TR1Entity newItem = ItemFactory.CreateItem(level.Name, level.Data.Entities, _picker.GetPickupLocation()); + TR1Entity newItem = ItemFactory.CreateItem(level.Name, level.Data.Entities, _picker.GetRandomLocation()); newItem.TypeID = stdItemTypes[_generator.Next(0, stdItemTypes.Count)]; } } @@ -300,8 +297,7 @@ public void RandomizeItemLocations(TR1CombinedLevel level) // Move standard items only, excluding any unarmed level pistols, and reward items if (TR1TypeUtilities.IsStandardPickupType(entity.TypeID) && entity != _unarmedLevelPistols) { - Location location = _picker.GetPickupLocation(); - _picker.SetLocation(entity, location); + _picker.RandomizePickupLocation(entity); entity.Intensity = 0; } } @@ -314,7 +310,7 @@ public void RandomizeItemLocations(TR1CombinedLevel level) } } - private List GetItemLocationPool(TR1CombinedLevel level) + private List GetItemLocationPool(TR1CombinedLevel level, bool keyItemMode) { List exclusions = new(); if (_excludedLocations.ContainsKey(level.Name)) @@ -345,34 +341,33 @@ private List GetItemLocationPool(TR1CombinedLevel level) } TR1LocationGenerator generator = new(); - return generator.Generate(level.Data, exclusions); + return generator.Generate(level.Data, exclusions, keyItemMode); } private void RandomizeKeyItems(TR1CombinedLevel level) { - List locations; - if (!_keyItemLocations.ContainsKey(level.Name) || (locations = _keyItemLocations[level.Name]).Count == 0) - { - return; - } - FDControl floorData = new(); floorData.ParseFromLevel(level.Data); _picker.TriggerTestAction = location => LocationUtilities.HasAnyTrigger(location, level.Data, floorData); + _picker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); + + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, true), Settings, _generator); for (int i = 0; i < level.Data.Entities.Count; i++) { TR1Entity entity = level.Data.Entities[i]; - if (!TR1TypeUtilities.IsKeyItemType(entity.TypeID) || IsSecretItem(entity, i, level.Data, floorData)) + if (!TR1TypeUtilities.IsKeyItemType(entity.TypeID) + || ItemFactory.IsItemLocked(level.Name, i)) { continue; } - int itemID = 10000 + ((level.Script.OriginalSequence - 1) * 1000) + (int)entity.TypeID + entity.Room; - List pool = locations.FindAll(l => l.KeyItemGroupID == itemID); - Location location = _picker.GetKeyItemLocation(locations, entity, LocationUtilities.HasPickupTriger(entity, i, level.Data, floorData)); - _picker.SetLocation(entity, location); + _picker.RandomizeKeyItemLocation( + entity, LocationUtilities.HasPickupTriger(entity, i, level.Data, floorData), + level.Script.OriginalSequence, level.Data.Rooms[entity.Room].Info); } } diff --git a/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs index 1059ab37a..6fc8ea19a 100644 --- a/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs @@ -1,6 +1,5 @@ using Newtonsoft.Json; using System.Diagnostics; -using System.Numerics; using TREnvironmentEditor.Helpers; using TREnvironmentEditor.Model.Types; using TRFDControl; @@ -8,6 +7,7 @@ using TRFDControl.Utilities; using TRGE.Core; using TRGE.Core.Item.Enums; +using TRLevelControl; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRModelTransporter.Transport; @@ -16,46 +16,26 @@ using TRRandomizerCore.Processors; using TRRandomizerCore.Secrets; using TRRandomizerCore.Utilities; +using SC = TRRandomizerCore.Randomizers.SecretConsts; namespace TRRandomizerCore.Randomizers; public class TR1SecretRandomizer : BaseTR1Randomizer, ISecretRandomizer { - private static readonly string _invalidLocationMsg = "Cannot place a nonvalidated secret where a trigger already exists - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _trapdoorLocationMsg = "Cannot place a secret on the same sector as a bridge/trapdoor - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _midairErrorMsg = "Cannot place a secret in mid-air or on a breakable tile - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _triggerWarningMsg = "Existing trigger object action with parameter {0} will be lost - {1} [X={2}, Y={3}, Z={4}, R={5}]"; - private static readonly string _flipMapWarningMsg = "Secret is being placed in a room that has a flipmap - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _flipMapErrorMsg = "Secret cannot be placed in a flipped room - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _edgeInfoMsg = "Adding extra tile edge trigger for {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly List _devRooms = null; - private static readonly ushort _maxSecretCount = 5; private readonly Dictionary> _locations, _unarmedLocations; - - private int _proxEvaluationCount; - - private static readonly float _LARGE_RADIUS = 5000.0f; - private static readonly float _MED_RADIUS = 2500.0f; - private static readonly float _SMALL_RADIUS = 750.0f; - private static readonly float _TINY_RADIUS = 5.0f; - - private static readonly int _LARGE_RETRY_TOLERANCE = 10; - private static readonly int _MED_RETRY_TOLERANCE = 25; - private static readonly int _SMALL_RETRY_TOLERANCE = 50; - - private static readonly int _triggerEdgeLimit = 103; // Within ~10% of a tile edge, triggers will be copied into neighbours + private readonly LocationPicker _routePicker; + private SecretPicker _secretPicker; public ItemFactory ItemFactory { get; set; } public IMirrorControl Mirrorer { get; set; } - private SecretPicker _picker; - public TR1SecretRandomizer() { _locations = JsonConvert.DeserializeObject>>(ReadResource(@"TR1\Locations\locations.json")); _unarmedLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR1\Locations\unarmed_locations.json")); + _routePicker = new(GetResourcePath(@"TR1\Locations\routes.json")); } public IEnumerable GetPacks() @@ -68,13 +48,14 @@ public IEnumerable GetPacks() public override void Randomize(int seed) { - _generator = new Random(seed); - _picker = new SecretPicker + _generator = new(seed); + _secretPicker = new() { Settings = Settings, Generator = _generator, ItemFactory = ItemFactory, Mirrorer = Mirrorer, + RouteManager = _routePicker, }; if (ScriptEditor.Edition.IsCommunityPatch && !Settings.UseSecretPack) @@ -410,56 +391,39 @@ private void PlaceAllSecrets(TR1CombinedLevel level, List pickupTypes, int pickupIndex = 0; ushort secretIndex = 0; ushort countedSecrets = _maxSecretCount; - bool damagingLocationUsed = false; - bool glitchedDamagingLocationUsed = false; foreach (Location location in locations) { - if (_devRooms == null || _devRooms.Contains(location.Room)) - { - if (Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.NotMirrored) - continue; + if (Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.NotMirrored) + continue; - if (!Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.Mirrored) - continue; - - secret.Location = location; - secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities, true); - secret.SecretIndex = (ushort)(secretIndex % countedSecrets); // Cycle through each secret number - secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; // Cycle through the types + if (!Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.Mirrored) + continue; - // #238 Point this secret to a specific camera and look-at target if applicable. - if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) - { - secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; - secret.CameraTarget = (ushort)rewardRoom.DoorIndices[0]; - } + secret.Location = location; + secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities, true); + secret.SecretIndex = (ushort)(secretIndex % countedSecrets); + secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; - secret.SetMaskAndDoor(countedSecrets, rewardRoom.DoorIndices); + if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) + { + secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; + secret.CameraTarget = (ushort)rewardRoom.DoorIndices[0]; + } - if (PlaceSecret(level, secret, floorData)) - { - // This will either make a new entity or repurpose an old one - TR1Entity entity = ItemFactory.CreateItem(level.Name, level.Data.Entities, secret.Location, true); - entity.TypeID = secret.PickupType; + secret.SetMaskAndDoor(countedSecrets, rewardRoom.DoorIndices); + PlaceSecret(level, secret, floorData); - secretIndex++; - pickupIndex++; + // This will either make a new entity or repurpose an old one + TR1Entity entity = ItemFactory.CreateLockedItem(level.Name, level.Data.Entities, secret.Location, true); + entity.TypeID = secret.PickupType; - if (location.RequiresDamage) - { - damagingLocationUsed = true; - if (location.RequiresGlitch) - { - glitchedDamagingLocationUsed = true; - } - } - } - } + secretIndex++; + pickupIndex++; } floorData.WriteToLevel(level.Data); - AddDamageControl(level, damagingLocationUsed, glitchedDamagingLocationUsed); + AddDamageControl(level, locations); } private void RandomizeSecrets(TR1CombinedLevel level, List pickupTypes, TRSecretRoom rewardRoom) @@ -469,49 +433,28 @@ private void RandomizeSecrets(TR1CombinedLevel level, List pickupTypes, List locations = _locations[level.Name]; locations.Shuffle(_generator); - List usedLocations = new(); - Queue guaranteedLocations = _picker.GetGuaranteedLocations(locations, Mirrorer.IsMirrored(level.Name), level.Script.NumSecrets, location => - { - bool result = EvaluateProximity(location, usedLocations, level, floorData); - if (result) - { - usedLocations.Add(location); - } - _proxEvaluationCount = 0; - return result; - }); + _secretPicker.SectorAction = loc + => FDUtilities.GetRoomSector(loc.X, loc.Y, loc.Z, (short)loc.Room, level.Data, floorData); + _secretPicker.PlacementTestAction = loc + => TestSecretPlacement(level, loc, floorData); - usedLocations.Clear(); + _routePicker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); + _routePicker.Initialise(level.Name, locations, Settings, _generator); + + List pickedLocations = _secretPicker.GetLocations(locations, Mirrorer.IsMirrored(level.Name), level.Script.NumSecrets); - TRSecretPlacement secret = new(); int pickupIndex = 0; - bool damagingLocationUsed = false; - bool glitchedDamagingLocationUsed = false; - while (secret.SecretIndex < level.Script.NumSecrets) + TRSecretPlacement secret = new(); + for (int i = 0; i < level.Script.NumSecrets; i++) { - Location location; - if (guaranteedLocations.Count > 0) - { - location = guaranteedLocations.Dequeue(); - } - else - { - do - { - location = locations[_generator.Next(0, locations.Count)]; - } - while (!EvaluateProximity(location, usedLocations, level, floorData)); - } - - _proxEvaluationCount = 0; - - usedLocations.Add(location); + Location location = pickedLocations[i]; secret.Location = location; secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities); - secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; // Cycle through the types + secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; - // #238 Point this secret to a specific camera and look-at target if applicable. if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) { secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; @@ -519,100 +462,28 @@ private void RandomizeSecrets(TR1CombinedLevel level, List pickupTypes, } secret.SetMaskAndDoor(level.Script.NumSecrets, rewardRoom.DoorIndices); + PlaceSecret(level, secret, floorData); - if (PlaceSecret(level, secret, floorData)) - { - // This will either make a new entity or repurpose an old one - TR1Entity entity = ItemFactory.CreateItem(level.Name, level.Data.Entities, secret.Location); - entity.TypeID = secret.PickupType; - - secret.SecretIndex++; - pickupIndex++; + // This will either make a new entity or repurpose an old one. Ensure it is locked + // to prevent item rando from potentially treating it as a key item. + TR1Entity entity = ItemFactory.CreateLockedItem(level.Name, level.Data.Entities, secret.Location); + entity.TypeID = secret.PickupType; - if (location.RequiresDamage) - { - damagingLocationUsed = true; - if (location.RequiresGlitch) - { - glitchedDamagingLocationUsed = true; - } - } - } + secret.SecretIndex++; + pickupIndex++; } floorData.WriteToLevel(level.Data); - AddDamageControl(level, damagingLocationUsed, glitchedDamagingLocationUsed); - - _picker.FinaliseSecretPool(usedLocations, level.Name); - -#if DEBUG - Debug.WriteLine(level.Name + ": " + SecretPicker.DescribeLocations(usedLocations)); -#endif - } - - private bool EvaluateProximity(Location loc, List usedLocs, TR1CombinedLevel level, FDControl floorData) - { - bool SafeToPlace = true; - if (loc.Difficulty == Difficulty.Hard && !Settings.HardSecrets) - return false; - - if (loc.RequiresGlitch && !Settings.GlitchedSecrets) - return false; - - if (Mirrorer.IsMirrored(level.Name) && loc.LevelState == LevelState.NotMirrored) - return false; - - if (!Mirrorer.IsMirrored(level.Name) && loc.LevelState == LevelState.Mirrored) - return false; - - if (usedLocs.Count == 0 || usedLocs == null) - return true; - - _proxEvaluationCount++; - - float proximity; - //Be more generous with proximity if we are failing to place. - if (_proxEvaluationCount <= _LARGE_RETRY_TOLERANCE) - { - proximity = _LARGE_RADIUS; - } - else if (_proxEvaluationCount > _LARGE_RETRY_TOLERANCE && _proxEvaluationCount <= _MED_RETRY_TOLERANCE) - { - proximity = _MED_RADIUS; - } - else if (_proxEvaluationCount > _MED_RETRY_TOLERANCE && _proxEvaluationCount <= _SMALL_RETRY_TOLERANCE) - { - proximity = _SMALL_RADIUS; - } - else - { - proximity = _TINY_RADIUS; - } - - Sphere newLoc = new(new Vector3(loc.X, loc.Y, loc.Z), proximity); - // Tilted sectors can still pass the proximity test, so in any case we never want 2 secrets sharing a tile. - // We also want to try to avoid secrets in the same room, unless we've exhausted all other attempts. - TRRoomSector newSector = FDUtilities.GetRoomSector(loc.X, loc.Y, loc.Z, (short)loc.Room, level.Data, floorData); - - foreach (Location used in usedLocs) - { - SafeToPlace = !newLoc.IsColliding(new Sphere(new Vector3(used.X, used.Y, used.Z), proximity)) - && newSector != FDUtilities.GetRoomSector(used.X, used.Y, used.Z, (short)used.Room, level.Data, floorData) - && (proximity == _TINY_RADIUS || used.Room != loc.Room); - - if (SafeToPlace == false) - break; - } - - return SafeToPlace; + AddDamageControl(level, pickedLocations); + _secretPicker.FinaliseSecretPool(pickedLocations, level.Name); } - private void AddDamageControl(TR1CombinedLevel level, bool damagingLocationUsed, bool glitchedDamagingLocationUsed) + private void AddDamageControl(TR1CombinedLevel level, List locations) { // If we have used a secret that requires damage, add a large medi to an unarmed level // weapon location. - if (damagingLocationUsed && _unarmedLocations.ContainsKey(level.Name)) + if (locations.Any(l => l.RequiresDamage) && _unarmedLocations.ContainsKey(level.Name)) { if (ItemFactory.CanCreateItem(level.Name, level.Data.Entities, Settings.DevelopmentMode)) { @@ -630,7 +501,7 @@ private void AddDamageControl(TR1CombinedLevel level, bool damagingLocationUsed, // If we have also used a secret that requires damage and is glitched, add an additional // medi as these tend to occur where Lara has to drop far after picking them up. - if (glitchedDamagingLocationUsed && ScriptEditor.Edition.IsCommunityPatch) + if (locations.Any(l => l.RequiresDamage && l.RequiresGlitch) && ScriptEditor.Edition.IsCommunityPatch) { level.Script.AddStartInventoryItem(TR1Items.SmallMedi); } @@ -663,17 +534,17 @@ private static void PopulateScriptStrings(int index, List gameStrings, s } } - private bool PlaceSecret(TR1CombinedLevel level, TRSecretPlacement secret, FDControl floorData) + private bool TestSecretPlacement(TR1CombinedLevel level, Location location, FDControl floorData) { // Check if this secret is being added to a flipped room, as that won't work for (int i = 0; i < level.Data.NumRooms; i++) { - if (level.Data.Rooms[i].AlternateRoom == secret.Location.Room) + if (level.Data.Rooms[i].AlternateRoom == location.Room) { if (Settings.DevelopmentMode) { // Place it anyway in dev mode to allow relocating - Debug.WriteLine(string.Format(_flipMapErrorMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, secret.Location.Room)); + Debug.WriteLine(string.Format(SC.FlipMapErrorMsg, level.Name, location.X, location.Y, location.Z, location.Room)); break; } else @@ -684,18 +555,18 @@ private bool PlaceSecret(TR1CombinedLevel level, TRSecretPlacement secr } // Get the sector and check if it is shared with a trapdoor, breakable tile or bridge, as these won't work either. - TRRoomSector sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, (short)secret.Location.Room, level.Data, floorData); + TRRoomSector sector = FDUtilities.GetRoomSector(location.X, location.Y, location.Z, (short)location.Room, level.Data, floorData); foreach (TR1Entity otherEntity in level.Data.Entities) { TR1Type type = otherEntity.TypeID; - if (secret.Location.Room == otherEntity.Room && (TR1TypeUtilities.IsTrapdoor(type) || TR1TypeUtilities.IsBridge(type) || type == TR1Type.FallingBlock)) + if (location.Room == otherEntity.Room && (TR1TypeUtilities.IsTrapdoor(type) || TR1TypeUtilities.IsBridge(type) || type == TR1Type.FallingBlock)) { TRRoomSector otherSector = FDUtilities.GetRoomSector(otherEntity.X, otherEntity.Y, otherEntity.Z, otherEntity.Room, level.Data, floorData); if (otherSector == sector) { if (Settings.DevelopmentMode) { - Debug.WriteLine(string.Format(_trapdoorLocationMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, secret.Location.Room)); + Debug.WriteLine(string.Format(SC.TrapdoorLocationMsg, level.Name, location.X, location.Y, location.Z, location.Room)); } return false; } @@ -704,50 +575,77 @@ private bool PlaceSecret(TR1CombinedLevel level, TRSecretPlacement secr // Additional checks for bridge, trapdoor and breakable tile triggers that may be in rooms further below. // We look for floating secrets except if underwater or if the flipped room exists and has a floor below it. - if (!CheckSectorsBelow(level, secret.Location, sector, floorData)) + if (!CheckSectorsBelow(level, location, sector, floorData)) { - Debug.WriteLine(string.Format(_midairErrorMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, secret.Location.Room)); + Debug.WriteLine(string.Format(SC.MidairErrorMsg, level.Name, location.X, location.Y, location.Z, location.Room)); return false; } - // Create the trigger. If this was unsuccessful, bail out. - if (!CreateSecretTriggers(level, secret, (short)secret.Location.Room, floorData, sector)) + if (!TestTriggerPlacement(level, location, (short)location.Room, sector, floorData)) { return false; } - // #248 If the room has a flipmap, make sure to add the trigger there too. - short altRoom = level.Data.Rooms[secret.Location.Room].AlternateRoom; + // If the room has a flipmap, make sure to test the trigger there too. + short altRoom = level.Data.Rooms[location.Room].AlternateRoom; if (altRoom != -1) { - sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom, level.Data, floorData); - if (!CreateSecretTriggers(level, secret, altRoom, floorData, sector)) + sector = FDUtilities.GetRoomSector(location.X, location.Y, location.Z, altRoom, level.Data, floorData); + if (!TestTriggerPlacement(level, location, altRoom, sector, floorData)) { return false; } if (Settings.DevelopmentMode) { - Debug.WriteLine(string.Format(_flipMapWarningMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom)); + Debug.WriteLine(string.Format(SC.FlipMapWarningMsg, level.Name, location.X, location.Y, location.Z, altRoom)); } } - // Turn off walk-to-items in T1M if we are placing on a slope above water. + return true; + } + + private bool TestTriggerPlacement(TR1CombinedLevel level, Location location, short room, TRRoomSector sector, FDControl floorData) + { + if (!location.Validated && LocationUtilities.HasAnyTrigger(sector, floorData)) + { + // There is already a trigger here and the location hasn't been marked as being + // safe to move the action items to the new pickup trigger. + if (Settings.DevelopmentMode) + { + Debug.WriteLine(string.Format(SC.InvalidLocationMsg, level.Name, location.X, location.Y, location.Z, room)); + } + return false; + } + return true; + } + + private void PlaceSecret(TR1CombinedLevel level, TRSecretPlacement secret, FDControl floorData) + { + // This assumes TestTriggerPlacement has already been called and passed. + TRRoomSector sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, (short)secret.Location.Room, level.Data, floorData); + CreateSecretTriggers(level, secret, (short)secret.Location.Room, floorData, sector); + + short altRoom = level.Data.Rooms[secret.Location.Room].AlternateRoom; + if (altRoom != -1) + { + sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom, level.Data, floorData); + CreateSecretTriggers(level, secret, altRoom, floorData, sector); + } + + // Turn off walk-to-items in TR1X if we are placing on a slope above water. if (ScriptEditor.Edition.IsCommunityPatch && !level.Data.Rooms[secret.Location.Room].ContainsWater && secret.Location.IsSlipperySlope(level.Data, floorData)) { (ScriptEditor as TR1ScriptEditor).WalkToItems = false; } - - // Checks have passed, so we can actually create the entity. - return true; } private static bool CheckSectorsBelow(TR1CombinedLevel level, Location location, TRRoomSector sector, FDControl floorData) { // Allow this check to be overridden with Validated - covers glitched locations. - if (!location.Validated && sector.RoomBelow != 255) + if (!location.Validated && sector.RoomBelow != TRConsts.NoRoom) { if (level.Data.Rooms[location.Room].ContainsWater) { @@ -760,7 +658,7 @@ private static bool CheckSectorsBelow(TR1CombinedLevel level, Location location, { // Flipped room may have a floor here, or be underwater sector = FDUtilities.GetRoomSector(location.X, location.Y, location.Z, level.Data.Rooms[location.Room].AlternateRoom, level.Data, floorData); - return sector.RoomBelow == 255 || level.Data.Rooms[altRoom].ContainsWater; + return sector.RoomBelow == TRConsts.NoRoom || level.Data.Rooms[altRoom].ContainsWater; } return false; @@ -769,55 +667,50 @@ private static bool CheckSectorsBelow(TR1CombinedLevel level, Location location, return true; } - private bool CreateSecretTriggers(TR1CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector baseSector) + private void CreateSecretTriggers(TR1CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector baseSector) { TRRoomSector mainSector = baseSector; - while (mainSector.RoomBelow != 255) + while (mainSector.RoomBelow != TRConsts.NoRoom) { - // Ensure we go as far down as possible - for example, Atlantis room 47 sector 10,9 - mainSector = FDUtilities.GetRoomSector(secret.Location.X, mainSector.Floor * 256 + 256, secret.Location.Z, mainSector.RoomBelow, level.Data, floorData); + // Ensure we go as far down as possible - for example, Atlantis room 47 sector 10,9 - but stay in the same room + mainSector = FDUtilities.GetRoomSector(secret.Location.X, (mainSector.Floor + 1) * TRConsts.Step1, secret.Location.Z, mainSector.RoomBelow, level.Data, floorData); } - if (!CreateSecretTrigger(level, secret, room, floorData, mainSector)) - { - return false; - } + CreateSecretTrigger(level, secret, room, floorData, mainSector); // Check neighbouring sectors if we are very close to tile edges. We scan 8 locations around // the secret's position based on the edge tolerance and see if the sector has changed. - ISet processedSectors = new HashSet { baseSector }; + HashSet processedSectors = new() { baseSector }; for (int xNorm = -1; xNorm < 2; xNorm++) { for (int zNorm = -1; zNorm < 2; zNorm++) { if (xNorm == 0 && zNorm == 0) continue; // Primary trigger's sector - int x = secret.Location.X + xNorm * _triggerEdgeLimit; - int z = secret.Location.Z + zNorm * _triggerEdgeLimit; + int x = secret.Location.X + xNorm * SC.TriggerEdgeLimit; + int z = secret.Location.Z + zNorm * SC.TriggerEdgeLimit; TRRoomSector neighbour = FDUtilities.GetRoomSector(x, secret.Location.Y, z, room, level.Data, floorData); // Process each unique sector only once and if it's a valid neighbour, add the extra trigger if (processedSectors.Add(neighbour) && !IsInvalidNeighbour(neighbour)) { - if (neighbour.RoomBelow != baseSector.RoomBelow && neighbour.RoomBelow != 255) + if (neighbour.RoomBelow != baseSector.RoomBelow && neighbour.RoomBelow != TRConsts.NoRoom) { // Try to find the absolute floor do { - neighbour = FDUtilities.GetRoomSector(x, (neighbour.Floor + 1) * 256, z, neighbour.RoomBelow, level.Data, floorData); + neighbour = FDUtilities.GetRoomSector(x, (neighbour.Floor + 1) * TRConsts.Step1, z, neighbour.RoomBelow, level.Data, floorData); } - while (neighbour.RoomBelow != 255); + while (neighbour.RoomBelow != TRConsts.NoRoom); } CreateSecretTrigger(level, secret, room, floorData, neighbour); if (Settings.DevelopmentMode) { - Debug.WriteLine(string.Format(_edgeInfoMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, room)); + Debug.WriteLine(string.Format(SC.EdgeInfoMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, room)); } } } } - - return true; } private static bool IsInvalidNeighbour(TRRoomSector neighbour) @@ -825,43 +718,31 @@ private static bool IsInvalidNeighbour(TRRoomSector neighbour) return neighbour.Floor == -127 && neighbour.Ceiling == -127; // Inside a wall } - private bool CreateSecretTrigger(TR1CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector sector) + private void CreateSecretTrigger(TR1CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector sector) { if (sector.FDIndex == 0) { floorData.CreateFloorData(sector); } - FDTriggerEntry existingTrigger = floorData.Entries[sector.FDIndex].Find(e => e is FDTriggerEntry) as FDTriggerEntry; - if (existingTrigger != null && !secret.Location.Validated) - { - // There is already a trigger here and the location hasn't been marked as being - // safe to move the action items to the new pickup trigger. - if (Settings.DevelopmentMode) - { - Debug.WriteLine(string.Format(_invalidLocationMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, room)); - } - return false; - } - // Make a new pickup trigger FDTriggerEntry trigger = new() { - Setup = new FDSetup { Value = 4 }, - TrigSetup = new FDTrigSetup + Setup = new() { Value = 4 }, + TrigSetup = new() { Value = 15872, Mask = secret.TriggerMask }, TrigType = FDTrigType.Pickup, - TrigActionList = new List + TrigActionList = new() { - new FDActionListItem + new() { TrigAction = FDTrigAction.Object, Parameter = secret.EntityIndex }, - new FDActionListItem + new() { TrigAction = FDTrigAction.SecretFound, Parameter = secret.SecretIndex @@ -871,7 +752,7 @@ private bool CreateSecretTrigger(TR1CombinedLevel level, TRSecretPlacement e is FDTriggerEntry) is FDTriggerEntry existingTrigger) { List existingActions = new(); foreach (FDActionListItem actionItem in existingTrigger.TrigActionList) @@ -892,10 +773,10 @@ private bool CreateSecretTrigger(TR1CombinedLevel level, TRSecretPlacement.FullActivation) + else if (secret.TriggerMask == TRConsts.FullMask) { existingActions.Add(actionItem); } @@ -911,8 +792,6 @@ private bool CreateSecretTrigger(TR1CombinedLevel level, TRSecretPlacement diff --git a/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs index 5477a2b00..9f46b49b3 100644 --- a/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs @@ -2,6 +2,7 @@ using TRFDControl; using TRFDControl.Utilities; using TRGE.Core; +using TRGE.Core.Item.Enums; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRModelTransporter.Packing; @@ -10,12 +11,19 @@ using TRRandomizerCore.Levels; using TRRandomizerCore.Textures; using TRRandomizerCore.Utilities; -using TRRandomizerCore.Zones; namespace TRRandomizerCore.Randomizers; public class TR2ItemRandomizer : BaseTR2Randomizer { + private static readonly Location _barkhangSeraphLocation = new() + { + X = 35328, + Y = 768, + Z = 17920, + Room = 43 + }; + internal TR2TextureMonitorBroker TextureMonitor { get; set; } public ItemFactory ItemFactory { get; set; } @@ -32,7 +40,7 @@ public TR2ItemRandomizer() { _excludedLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR2\Locations\invalid_item_locations.json")); _pistolLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR2\Locations\unarmed_locations.json")); - _picker = new(); + _picker = new(GetResourcePath(@"TR2\Locations\routes.json")); } public override void Randomize(int seed) @@ -45,7 +53,7 @@ public override void Randomize(int seed) FindUnarmedPistolsLocation(); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, false), Settings, _generator); if (Settings.RandomizeItemPositions) { @@ -104,7 +112,6 @@ public void RandomizeKeyItems() foreach (TR2ScriptedLevel lvl in Levels) { LoadLevelInstance(lvl); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); RandomizeKeyItems(_levelInstance); SaveLevelInstance(); @@ -130,7 +137,7 @@ public void RandomizeLevelsSprites() } } - private List GetItemLocationPool(TR2CombinedLevel level) + private List GetItemLocationPool(TR2CombinedLevel level, bool keyItemMode) { List exclusions = new(); if (_excludedLocations.ContainsKey(level.Name)) @@ -151,7 +158,7 @@ private List GetItemLocationPool(TR2CombinedLevel level) } TR2LocationGenerator generator = new(); - return generator.Generate(level.Data, exclusions); + return generator.Generate(level.Data, exclusions, keyItemMode); } private void RandomizeSprites() @@ -188,121 +195,6 @@ private void RandomizeSprites() _levelInstance.Data.SpriteTextures = _spriteRandomizer.Textures.ToArray(); } - /// - /// If Deck is before monastery Nothing happens... - /// If monastery is before deck the Seraph becomes a pickup in monastery and the Deck finishes normally without Seraph pickup - /// We are mindfull of Tibet inventory forcing Seraph in Vanilla and leave it only when it has been picked up previously - /// - private void RandomizeSeraph() - { - bool SeraphInMonastery = false; - - //List of pickup items - List stdItemTypes = TR2TypeUtilities.GetGunTypes(); - stdItemTypes.AddRange(TR2TypeUtilities.GetAmmoTypes()); - - if (_levelInstance.Is(TR2LevelNames.MONASTERY)) - { - TR2ScriptedLevel theDeck = Levels.Find(l => l.Is(TR2LevelNames.DECK)); - - // if The deck is included in levels I check if its after monastery - if (theDeck != null) - { - if (theDeck.Sequence > _levelInstance.Sequence) SeraphInMonastery = true; - } - else // Id Deck is not included we force the seraph in monastery - { - SeraphInMonastery = true; - } - - if (SeraphInMonastery) - { - // Get all visible pickups in the level (there may be invisible ones if using OneItem mode) - List pickups = _levelInstance.Data.Entities.FindAll(e => !e.Invisible && stdItemTypes.Contains(e.TypeID)); - List replacementCandidates = new(pickups); - - // Eliminate any that share a tile with an enemy in case of pacifist runs/unable to find guns - FDControl floorData = new(); - floorData.ParseFromLevel(_levelInstance.Data); - for (int i = replacementCandidates.Count - 1; i >= 0; i--) - { - TR2Entity pickup = replacementCandidates[i]; - TRRoomSector pickupTile = FDUtilities.GetRoomSector(pickup.X, pickup.Y, pickup.Z, pickup.Room, _levelInstance.Data, floorData); - // Does an enemy share this tile? If so, remove it from the candidate list - if (_levelInstance.Data.Entities.Find(e => e != pickup - && TR2TypeUtilities.IsEnemyType(e.TypeID) - && FDUtilities.GetRoomSector(e.X, e.Y, e.Z, e.Room, _levelInstance.Data, floorData) == pickupTile) != null) - { - replacementCandidates.RemoveAt(i); - } - } - - TR2Entity entityToReplace; - if (replacementCandidates.Count > 0) - { - // We have at least one pickup that's visible and not under an enemy, so pick one at random - entityToReplace = replacementCandidates[_generator.Next(0, replacementCandidates.Count)]; - } - else - { - // We couldn't find anything, but because The Deck has been processed first, we should - // add The Seraph somewhere to remain consistent - default to the puzzle slot itself and - // just move an item to the same tile. This will be extremely rare. - TR2Entity slot4 = _levelInstance.Data.Entities.Find(e => e.TypeID == TR2Type.PuzzleHole4); - entityToReplace = pickups[_generator.Next(0, pickups.Count)]; - entityToReplace.X = slot4.X; - entityToReplace.Y = slot4.Y; - entityToReplace.Z = slot4.Z; - entityToReplace.Room = slot4.Room; - } - - // Change the pickup type to The Seraph, and remove The Seraph from the inventory - entityToReplace.TypeID = TR2Type.Puzzle4_S_P; - _levelInstance.Script.RemoveStartInventoryItem(TRGE.Core.Item.Enums.TR2Items.Puzzle4); - } - } - else if (_levelInstance.Is(TR2LevelNames.TIBET)) - { - TR2ScriptedLevel deck = Levels.Find(l => l.Is(TR2LevelNames.DECK)); - TR2ScriptedLevel monastery = Levels.Find(l => l.Is(TR2LevelNames.MONASTERY)); - - // Deck not present => Barkhang pickup and used instant (if it's not present its never picked up anyway) - // Deck present but Barkhang absent => Seraph picked up at Deck and never consumed - // Deck and Barkhang presents => remove Seraph from Tibet if comes before deck or after barkhang - if (deck == null || - (monastery == null && _levelInstance.Script.Sequence < deck.Sequence) || - (monastery != null && (_levelInstance.Script.Sequence < deck.Sequence || _levelInstance.Script.Sequence < monastery.Sequence))) - { - _levelInstance.Script.RemoveStartInventoryItem(TRGE.Core.Item.Enums.TR2Items.Puzzle4); - } - } - else if (_levelInstance.Is(TR2LevelNames.DECK)) - { - TR2ScriptedLevel monastery = Levels.Find(l => l.Is(TR2LevelNames.MONASTERY)); - - if (monastery != null) - { - if (monastery.Sequence < _levelInstance.Sequence) SeraphInMonastery = true; - } - else // Id Monastery is not included we stay as before - { - SeraphInMonastery = false; - } - - if (SeraphInMonastery) - { - //Replace Seraph by a pickup - - TR2Entity seraph = _levelInstance.Data.Entities.Find(e => e.TypeID == TR2Type.Puzzle4_S_P); - - if (seraph != null) - { - seraph.TypeID = stdItemTypes[_generator.Next(0, stdItemTypes.Count)]; - } - } - } - } - public void RandomizeItemLocations(TR2CombinedLevel level) { if (level.Is(TR2LevelNames.HOME) && (level.Script.RemovesWeapons || level.Script.RemovesAmmo)) @@ -320,21 +212,26 @@ public void RandomizeItemLocations(TR2CombinedLevel level) continue; } - Location location = _picker.GetPickupLocation(); - if (location != null) - { - _picker.SetLocation(entity, location); - } + _picker.RandomizePickupLocation(entity); } } private void RandomizeKeyItems(TR2CombinedLevel level) { - ZonedLocationCollection zonedLocations = new(); - if (!level.IsAssault) - { - zonedLocations.PopulateZones(GetResourcePath($@"TR2\Zones\{level.Name}-Zones.json"), _picker.GetLocations(), ZonePopulationMethod.KeyPuzzleQuestOnly); - } + FDControl floorData = new(); + floorData.ParseFromLevel(level.Data); + + _picker.TriggerTestAction = location => LocationUtilities.HasAnyTrigger(location, level.Data, floorData); + _picker.KeyItemTestAction = location => TestKeyItemLocation(location, level); + _picker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); + + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, true), Settings, _generator); + + // The Seraph may be removed from The Deck and added to Barkhang. Do that first to allow + // its location to be changed. + AdjustSeraphContinuity(level); for (int i = 0; i < level.Data.Entities.Count; i++) { @@ -345,163 +242,61 @@ private void RandomizeKeyItems(TR2CombinedLevel level) continue; } - Location location; - do - { - location = GetKeyItemLocation(entity, i, zonedLocations); - } - while (location != null && !TestKeyItemLocation(location, level)); - - if (location != null) - { - _picker.SetLocation(entity, location); - } + _picker.RandomizeKeyItemLocation( + entity, LocationUtilities.HasPickupTriger(entity, i, level.Data, floorData), + level.Script.OriginalSequence, level.Data.Rooms[entity.Room].Info); } - - // Special case for the Seraph in Deck/Barkhang - RandomizeSeraph(); } - private Location GetKeyItemLocation(TR2Entity entity, int index, ZonedLocationCollection zonedLocations) + private void AdjustSeraphContinuity(TR2CombinedLevel level) { - Location location = null; - - switch (entity.TypeID) + if (!Settings.MaintainKeyContinuity) { - case TR2Type.Puzzle1_S_P: - if (zonedLocations.Puzzle1Zone.Count > 0) - { - if (_levelInstance.Name == TR2LevelNames.DA) - { - int burnerChipID = 120; - int consoleChipID = 7; - - //Special case - multiple chips - if (index == burnerChipID) - { - //Burner Chip - List allowedBurnerRooms = new() { 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 29, 32, 75, 80, 83, 84, 85, 86, 87, 88, 89 }; - do - { - location = zonedLocations.Puzzle1Zone[_generator.Next(0, zonedLocations.Puzzle1Zone.Count)]; - } - while (!allowedBurnerRooms.Contains(location.Room)); - } - else if (index == consoleChipID) - { - //Center Console Chip - List allowedConsoleRooms = new() { 2, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 29, 30, 32, 34, 35, 64, 65, 66, 68, 69, 70, 75, 80, 82, 83, 84, 85, 86, 87, 88, 89 }; - do - { - location = zonedLocations.Puzzle1Zone[_generator.Next(0, zonedLocations.Puzzle1Zone.Count)]; - } - while (!allowedConsoleRooms.Contains(location.Room)); - } - else - { - location = zonedLocations.Puzzle1Zone[_generator.Next(0, zonedLocations.Puzzle1Zone.Count)]; - } - } - else - { - location = zonedLocations.Puzzle1Zone[_generator.Next(0, zonedLocations.Puzzle1Zone.Count)]; - } - } - break; - case TR2Type.Puzzle2_S_P: - if (zonedLocations.Puzzle2Zone.Count > 0) - { - location = zonedLocations.Puzzle2Zone[_generator.Next(0, zonedLocations.Puzzle2Zone.Count)]; - } - break; - case TR2Type.Puzzle3_S_P: - if (zonedLocations.Puzzle3Zone.Count > 0) - { - location = zonedLocations.Puzzle3Zone[_generator.Next(0, zonedLocations.Puzzle3Zone.Count)]; - } - break; - case TR2Type.Puzzle4_S_P: - if (zonedLocations.Puzzle4Zone.Count > 0) - { - location = zonedLocations.Puzzle4Zone[_generator.Next(0, zonedLocations.Puzzle4Zone.Count)]; - } - break; - case TR2Type.Key1_S_P: - if (zonedLocations.Key1Zone.Count > 0) - { - if (_levelInstance.Name == TR2LevelNames.OPERA) - { - int startKeyID = 172; - int fanKeyID = 118; + return; + } - //Special case - multiple keys - if (index == startKeyID) - { - //Start key - List allowedStartRooms = new() { 10, 23, 25, 27, 29, 30, 31, 32, 33, 35, 127, 162, 163 }; - do - { - location = zonedLocations.Key1Zone[_generator.Next(0, zonedLocations.Key1Zone.Count)]; - } - while (!allowedStartRooms.Contains(location.Room)); - } - else if (index == fanKeyID) - { - //Fan area key - List allowedFanRooms = new() { 1, 5, 8, 16, 37, 38, 44, 46, 47, 48, 49, 50, 52, 53, 55, 57, 59, 60, 63, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 86, 87, 88, 89, 90, 93, 95, 96, 100, 102, 103, 105, 107, 109, 111, 120, 132, 139, 141, 143, 144, 151, 153, 154, 155, 156, 158, 159, 161, 174, 176, 177, 178, 179, 183, 185, 187, 188, 189 }; + if (level.Is(TR2LevelNames.MONASTERY)) + { + TR2ScriptedLevel theDeck = Levels.Find(l => l.Is(TR2LevelNames.DECK)); + if ((theDeck == null || theDeck.Sequence > level.Sequence) + && ItemFactory.CanCreateItem(level.Name, level.Data.Entities)) + { + // Place The Seraph inside Barkhang. This location determines the key item ID to + // therefore allow it to be randomized. + TR2Entity seraph = ItemFactory.CreateItem(level.Name, level.Data.Entities, _barkhangSeraphLocation); + seraph.TypeID = TR2Type.Puzzle4_S_P; + level.Script.RemoveStartInventoryItem(TR2Items.Puzzle4); + } + } + else if (level.Is(TR2LevelNames.TIBET)) + { + TR2ScriptedLevel deck = Levels.Find(l => l.Is(TR2LevelNames.DECK)); + TR2ScriptedLevel monastery = Levels.Find(l => l.Is(TR2LevelNames.MONASTERY)); - do - { - location = zonedLocations.Key1Zone[_generator.Next(0, zonedLocations.Key1Zone.Count)]; - } - while (!allowedFanRooms.Contains(location.Room)); - } - else - { - location = zonedLocations.Key1Zone[_generator.Next(0, zonedLocations.Key1Zone.Count)]; - } - } - else - { - location = zonedLocations.Key1Zone[_generator.Next(0, zonedLocations.Key1Zone.Count)]; - } - } - break; - case TR2Type.Key2_S_P: - if (zonedLocations.Key2Zone.Count > 0) - { - location = zonedLocations.Key2Zone[_generator.Next(0, zonedLocations.Key2Zone.Count)]; - } - break; - case TR2Type.Key3_S_P: - if (zonedLocations.Key3Zone.Count > 0) - { - location = zonedLocations.Key3Zone[_generator.Next(0, zonedLocations.Key3Zone.Count)]; - } - break; - case TR2Type.Key4_S_P: - if (zonedLocations.Key4Zone.Count > 0) - { - location = zonedLocations.Key4Zone[_generator.Next(0, zonedLocations.Key4Zone.Count)]; - } - break; - case TR2Type.Quest1_S_P: - if (zonedLocations.Quest1Zone.Count > 0) - { - location = zonedLocations.Quest1Zone[_generator.Next(0, zonedLocations.Quest1Zone.Count)]; - } - break; - case TR2Type.Quest2_S_P: - if (zonedLocations.Quest2Zone.Count > 0) + // Deck not present => Barkhang pickup only + // Deck present but Barkhang absent => Deck pickup, carried to Tibet if sequence is after + // Deck and Barkhang present => remove Seraph from Tibet unless it comes between these levels + if (deck == null || + (monastery == null && level.Script.Sequence < deck.Sequence) || + (monastery != null && (level.Script.Sequence < deck.Sequence || level.Script.Sequence > monastery.Sequence))) + { + level.Script.RemoveStartInventoryItem(TR2Items.Puzzle4); + } + } + else if (level.Is(TR2LevelNames.DECK)) + { + TR2ScriptedLevel monastery = Levels.Find(l => l.Is(TR2LevelNames.MONASTERY)); + if (monastery != null && monastery.Sequence < level.Sequence) + { + // Anticlimactic regular item pickup to end the level + TR2Entity seraph = level.Data.Entities.Find(e => e.TypeID == TR2Type.Puzzle4_S_P); + if (seraph != null) { - location = zonedLocations.Quest2Zone[_generator.Next(0, zonedLocations.Quest2Zone.Count)]; + List stdItemTypes = TR2TypeUtilities.GetStandardPickupTypes(); + seraph.TypeID = stdItemTypes[_generator.Next(0, stdItemTypes.Count)]; } - break; - default: - break; + } } - - return location; } private bool TestKeyItemLocation(Location location, TR2CombinedLevel level) @@ -512,12 +307,12 @@ private bool TestKeyItemLocation(Location location, TR2CombinedLevel level) .FindAll(e => TR2TypeUtilities.IsEnemyType(e.TypeID)) .Find(e => e.GetLocation().IsEquivalent(location)); - return enemy == null || TR2TypeUtilities.CanDropPickups + return enemy == null || (Settings.AllowEnemyKeyDrops && TR2TypeUtilities.CanDropPickups ( TR2TypeUtilities.GetAliasForLevel(level.Name, enemy.TypeID), Settings.RandomizeEnemies && !Settings.ProtectMonks, Settings.RandomizeEnemies && Settings.UnconditionalChickens - ); + )); } private void RandomizeItemTypes(TR2CombinedLevel level) diff --git a/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs index 1be45421b..5fea9055c 100644 --- a/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs @@ -1,21 +1,28 @@ using Newtonsoft.Json; -using System.Diagnostics; +using TRFDControl; +using TRFDControl.Utilities; using TRGE.Core; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRRandomizerCore.Helpers; +using TRRandomizerCore.Levels; using TRRandomizerCore.Utilities; -using TRRandomizerCore.Zones; namespace TRRandomizerCore.Randomizers; public class TR2SecretRandomizer : BaseTR2Randomizer, ISecretRandomizer { - private static readonly List _devRooms = null; private static readonly int _levelSecretCount = 3; + private static readonly List _textureFixLevels = new() + { + TR2LevelNames.FLOATER, + TR2LevelNames.LAIR, + TR2LevelNames.HOME + }; private readonly Dictionary> _locations; - private SecretPicker _picker; + private readonly LocationPicker _routePicker; + private SecretPicker _secretPicker; public IMirrorControl Mirrorer { get; set; } public ItemFactory ItemFactory { get; set; } @@ -23,6 +30,7 @@ public class TR2SecretRandomizer : BaseTR2Randomizer, ISecretRandomizer public TR2SecretRandomizer() { _locations = JsonConvert.DeserializeObject>>(ReadResource(@"TR2\Locations\locations.json")); + _routePicker = new(GetResourcePath(@"TR2\Locations\routes.json")); } public IEnumerable GetPacks() @@ -33,295 +41,174 @@ public IEnumerable GetPacks() .Distinct(); } - private void RandomizeSecrets(List LevelLocations) + public override void Randomize(int seed) { - if (LevelLocations.Count > 2) + _generator = new(seed); + _secretPicker = new() { - if (Settings.DevelopmentMode) - { - PlaceAllSecrets(LevelLocations); - return; - } - - Location goldLocation = null; - Location jadeLocation = null; - Location stoneLocation = null; - - // Applied guaranteed logic first. - Queue guaranteedLocations = _picker.GetGuaranteedLocations(LevelLocations, false, _levelSecretCount); - - //Apply zoning to the locations to ensure they are spread out. - List stoneZone, jadeZone, goldZone; - bool secretPackMode = Settings.UseSecretPack && LevelLocations.Any(l => l.PackID != Location.DefaultPackID); - if (secretPackMode) - { - stoneZone = jadeZone = goldZone = LevelLocations; - guaranteedLocations = new(guaranteedLocations.Reverse()); - } - else - { - ZonedLocationCollection zones = new(); - zones.PopulateZones(GetResourcePath(@"TR2\Zones\" + _levelInstance.Name + "-Zones.json"), LevelLocations, ZonePopulationMethod.SecretsOnly); - stoneZone = zones.StoneZone; - jadeZone = zones.JadeZone; - goldZone = zones.GoldZone; - } - - bool TestLocation(Location location, params Location[] setLocations) - { - if (secretPackMode) - { - return true; - } - - bool valid = true; - foreach (Location setLocation in setLocations) - { - valid &= setLocation == null || setLocation.Room != location.Room; - } - - return valid; - } + Settings = Settings, + Generator = _generator, + ItemFactory = ItemFactory, + Mirrorer = Mirrorer, + RouteManager = _routePicker + }; - while (guaranteedLocations.Count > 0) + foreach (TR2ScriptedLevel lvl in Levels) + { + LoadLevelInstance(lvl); + if (_locations.ContainsKey(_levelInstance.Name)) { - Location location = guaranteedLocations.Dequeue(); - if (goldZone.Contains(location) && goldLocation == null) + if (Settings.DevelopmentMode) { - if (TestLocation(location, stoneLocation, jadeLocation)) - { - goldLocation = location; - } + PlaceAllSecrets(_levelInstance); } - else if (jadeZone.Contains(location) && jadeLocation == null) - { - if (TestLocation(location, stoneLocation, goldLocation)) - { - jadeLocation = location; - } - } - else if (stoneLocation == null) + else { - if (TestLocation(location, jadeLocation, goldLocation)) - { - stoneLocation = location; - } + RandomizeSecrets(_levelInstance); } } - //Find suitable locations for those not allocated yet, ensuring they are zoned, do not share a room and difficulty. + FixSecretTextures(_levelInstance); + SaveLevelInstance(); - if (goldLocation == null) + if (!TriggerProgress()) { - do - { - goldLocation = goldZone[_generator.Next(0, goldZone.Count)]; - } while ((goldLocation.Difficulty == Difficulty.Hard && Settings.HardSecrets == false) || - (goldLocation.RequiresGlitch == true && Settings.GlitchedSecrets == false)); + break; } + } + } - if (jadeLocation == null) + private void PlaceAllSecrets(TR2CombinedLevel level) + { + Queue existingIndices = new(); + for (int i = 0; i < level.Data.Entities.Count; i++) + { + if (TR2TypeUtilities.IsSecretType(level.Data.Entities[i].TypeID)) { - do - { - jadeLocation = jadeZone[_generator.Next(0, jadeZone.Count)]; - } while ((jadeLocation.Room == goldLocation.Room) || - (jadeLocation.Difficulty == Difficulty.Hard && Settings.HardSecrets == false) || - (jadeLocation.RequiresGlitch == true && Settings.GlitchedSecrets == false)); + existingIndices.Enqueue(i); } + } - if (stoneLocation == null) - { - do - { - stoneLocation = stoneZone[_generator.Next(0, stoneZone.Count)]; - } while ((stoneLocation.Room == goldLocation.Room) || - (stoneLocation.Room == jadeLocation.Room) || - (stoneLocation.Difficulty == Difficulty.Hard && Settings.HardSecrets == false) || - (stoneLocation.RequiresGlitch == true && Settings.GlitchedSecrets == false)); - } + _routePicker.Initialise(level.Name, _locations[level.Name], Settings, _generator); - //Due to TRMod only accepting room space coords entities are actually stored in level space. So include some - //calls to support a transformation of any locations that are specified in room space to maintain backwards compatbility - //with older locations and support locations that are specified in both level or room space. - goldLocation = SpatialConverters.TransformToLevelSpace(goldLocation, _levelInstance.Data.Rooms[goldLocation.Room].Info); - jadeLocation = SpatialConverters.TransformToLevelSpace(jadeLocation, _levelInstance.Data.Rooms[jadeLocation.Room].Info); - stoneLocation = SpatialConverters.TransformToLevelSpace(stoneLocation, _levelInstance.Data.Rooms[stoneLocation.Room].Info); + // Simulate zoning of sorts by splitting the route equally. This of course doesn't guarantee + // what will be assigned in regular mode. + List routeRooms = _routePicker.GetRouteRooms(); + List> zones = routeRooms.Split(_levelSecretCount); + List secretTypes = TR2TypeUtilities.GetSecretTypes(); - Dictionary secretMap = new() + foreach (Location location in _locations[level.Name]) + { + TR2Entity entity; + if (existingIndices.Count > 0) { - [TR2Type.StoneSecret_S_P] = stoneLocation, - [TR2Type.JadeSecret_S_P] = jadeLocation, - [TR2Type.GoldSecret_S_P] = goldLocation - }; - - foreach (TR2Type secretType in secretMap.Keys) + entity = level.Data.Entities[existingIndices.Dequeue()]; + } + else { - //Does the level contain an entity for this type? - TR2Entity secretEntity = _levelInstance.Data.Entities.Find(ent => ent.TypeID == secretType); - - //If not, create a placeholder entity for now - if (secretEntity == null) - { - _levelInstance.Data.Entities.Add(secretEntity = new()); - } - - // Move it to the new location and ensure it has the correct type set - Location location = secretMap[secretType]; - secretEntity.TypeID = secretType; - secretEntity.Room = (short)location.Room; - secretEntity.X = location.X; - secretEntity.Y = location.Y; - secretEntity.Z = location.Z; - secretEntity.Intensity1 = -1; - secretEntity.Intensity2 = -1; - secretEntity.Angle = 0; - secretEntity.Flags = 0; + level.Data.Entities.Add(entity = new()); } - FixSecretTextures(); - CheckForSecretDamage(secretMap); - - _picker.FinaliseSecretPool(secretMap.Values, _levelInstance.Name); - -#if DEBUG - Debug.WriteLine(_levelInstance.Name + ": " + SecretPicker.DescribeLocations(secretMap.Values)); -#endif + int zone = zones.FindIndex(z => z.Contains(location.Room)); + PlaceSecret(entity, secretTypes[zone], location); } + + AddDamageControl(level, _locations[level.Name]); } - private void PlaceAllSecrets(List LevelLocations) + private void RandomizeSecrets(TR2CombinedLevel level) { - ZonedLocationCollection ZonedLocations = new(); + FDControl floorData = new(); + floorData.ParseFromLevel(level.Data); - ZonedLocations.PopulateZones(GetResourcePath(@"TR2\Zones\" + _levelInstance.Name + "-Zones.json"), LevelLocations, ZonePopulationMethod.SecretsOnly); + List locations = _locations[level.Name]; + locations.Shuffle(_generator); - // Store existing secret indices for re-use (avoids FD problems when the originals are removed) - Queue existingIndices = new(); - for (int i = 0; i < _levelInstance.Data.Entities.Count; i++) - { - if (TR2TypeUtilities.IsSecretType(_levelInstance.Data.Entities[i].TypeID)) - { - existingIndices.Enqueue(i); - } - } + _secretPicker.SectorAction = loc + => FDUtilities.GetRoomSector(loc.X, loc.Y, loc.Z, (short)loc.Room, level.Data, floorData); + _routePicker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); - //Add new entities - Dictionary> secretMap = new() - { - [TR2Type.StoneSecret_S_P] = ZonedLocations.StoneZone, - [TR2Type.JadeSecret_S_P] = ZonedLocations.JadeZone, - [TR2Type.GoldSecret_S_P] = ZonedLocations.GoldZone - }; + _routePicker.Initialise(level.Name, locations, Settings, _generator); - foreach (TR2Type secretType in secretMap.Keys) - { - foreach (Location loc in secretMap[secretType]) - { - Location copy = SpatialConverters.TransformToLevelSpace(loc, _levelInstance.Data.Rooms[loc.Room].Info); + // Organise picked locations according to route position to allow classic Stone/Jade/Gold order. + List pickedLocations = _secretPicker.GetLocations(locations, Mirrorer.IsMirrored(level.Name), _levelSecretCount); + List secretTypes = TR2TypeUtilities.GetSecretTypes(); + pickedLocations.Sort((l1, l2) => + _routePicker.GetRoutePosition(l1).CompareTo(_routePicker.GetRoutePosition(l2))); - if (_devRooms == null || _devRooms.Contains(copy.Room)) - { - TR2Entity entity; - if (existingIndices.Count > 0) - { - entity = _levelInstance.Data.Entities[existingIndices.Dequeue()]; - } - else - { - _levelInstance.Data.Entities.Add(entity = new()); - } - - entity.TypeID = secretType; - entity.Room = (short)copy.Room; - entity.X = copy.X; - entity.Y = copy.Y; - entity.Z = copy.Z; - entity.Angle = 0; - entity.Intensity1 = -1; - entity.Intensity2 = -1; - entity.Flags = 0; - } - } + for (int i = 0; i < pickedLocations.Count; i++) + { + TR2Entity entity = level.Data.Entities.Find(e => e.TypeID == secretTypes[i]); + entity ??= ItemFactory.CreateItem(level.Name, level.Data.Entities); + PlaceSecret(entity, secretTypes[i], pickedLocations[i]); } - FixSecretTextures(); + AddDamageControl(level, pickedLocations); + _secretPicker.FinaliseSecretPool(pickedLocations, level.Name); } - private void FixSecretTextures() + private void PlaceSecret(TR2Entity entity, TR2Type type, Location location) { - if (_levelInstance.Is(TR2LevelNames.FLOATER) || _levelInstance.Is(TR2LevelNames.LAIR) || _levelInstance.Is(TR2LevelNames.HOME)) - { - // Swap Stone and Jade textures - OG has them the wrong way around. - // SpriteSequence offsets have to remain in order, so swap the texture targets instead. - TRSpriteSequence stoneSequence = Array.Find(_levelInstance.Data.SpriteSequences, s => s.SpriteID == (int)TR2Type.StoneSecret_S_P); - TRSpriteSequence jadeSequence = Array.Find(_levelInstance.Data.SpriteSequences, s => s.SpriteID == (int)TR2Type.JadeSecret_S_P); - - TRSpriteTexture[] textures = _levelInstance.Data.SpriteTextures; - (textures[jadeSequence.Offset], textures[stoneSequence.Offset]) - = (textures[stoneSequence.Offset], textures[jadeSequence.Offset]); - } + _routePicker.SetLocation(entity, location); + entity.TypeID = type; + entity.Intensity1 = -1; + entity.Intensity2 = -1; + entity.Flags = 0; } - public override void Randomize(int seed) + private static void FixSecretTextures(TR2CombinedLevel level) { - _generator = new Random(seed); - _picker = new SecretPicker + if (!_textureFixLevels.Contains(level.Name)) { - Settings = Settings, - Generator = _generator, - ItemFactory = ItemFactory, - Mirrorer = Mirrorer, - }; - - foreach (TR2ScriptedLevel lvl in Levels) - { - //Read the level into a level object - LoadLevelInstance(lvl); - if (_locations.ContainsKey(_levelInstance.Name)) - { - //Apply the modifications - RandomizeSecrets(_locations[_levelInstance.Name]); + return; + } - //Write back the level file - SaveLevelInstance(); - } + // Swap Stone and Jade textures - OG has them the wrong way around. + // SpriteSequence offsets have to remain in order, so swap the texture targets instead. + TRSpriteSequence stoneSequence = Array.Find(level.Data.SpriteSequences, s => s.SpriteID == (int)TR2Type.StoneSecret_S_P); + TRSpriteSequence jadeSequence = Array.Find(level.Data.SpriteSequences, s => s.SpriteID == (int)TR2Type.JadeSecret_S_P); - if (!TriggerProgress()) - { - break; - } - } + TRSpriteTexture[] textures = level.Data.SpriteTextures; + (textures[jadeSequence.Offset], textures[stoneSequence.Offset]) + = (textures[stoneSequence.Offset], textures[jadeSequence.Offset]); } - private void CheckForSecretDamage(Dictionary secretMap) + private static void AddDamageControl(TR2CombinedLevel level, List locations) { + IEnumerable damagingLocations = locations.Where(l => l.RequiresDamage); + if (!damagingLocations.Any()) + { + return; + } + uint easyDamageCount = 0; uint hardDamageCount = 0; - foreach (TR2Type secretType in secretMap.Keys) + foreach (Location location in damagingLocations) { - Location location = secretMap[secretType]; - - if (location.RequiresDamage) + if (location.Difficulty == Difficulty.Hard) { - if (location.Difficulty == Difficulty.Hard) - hardDamageCount++; - else - easyDamageCount++; + hardDamageCount++; + } + else + { + easyDamageCount++; } } - // If we found some secrets needing damage - if (hardDamageCount > 0 || easyDamageCount > 0) + if (level.Script.RemovesWeapons) { - // If this an unarmed level I add one hard damage - if (_levelInstance.Script.RemovesWeapons) hardDamageCount++; - // If its one of the firsts level I add one easy damage - if (_levelInstance.Sequence < 2) easyDamageCount++; + hardDamageCount++; + } - _levelInstance.Script.AddStartInventoryItem(ItemUtilities.ConvertToScriptItem(TR2Type.LargeMed_S_P), hardDamageCount); - _levelInstance.Script.AddStartInventoryItem(ItemUtilities.ConvertToScriptItem(TR2Type.SmallMed_S_P), easyDamageCount); + if (level.Sequence < 2) + { + easyDamageCount++; } + + level.Script.AddStartInventoryItem(ItemUtilities.ConvertToScriptItem(TR2Type.LargeMed_S_P), hardDamageCount); + level.Script.AddStartInventoryItem(ItemUtilities.ConvertToScriptItem(TR2Type.SmallMed_S_P), easyDamageCount); } } diff --git a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs index 1758a36e3..c2f369df6 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs @@ -15,13 +15,9 @@ namespace TRRandomizerCore.Randomizers; public class TR3ItemRandomizer : BaseTR3Randomizer { - private readonly Dictionary _keyItemZones; - private readonly Dictionary> _keyItemLocations; private readonly Dictionary> _excludedLocations; private readonly Dictionary> _pistolLocations; - private static readonly int _ANY_ROOM_ALLOWED = 2048; //Max rooms is 1024 - so this should never be possible. - // Track the pistols so they remain a weapon type and aren't moved private TR3Entity _unarmedLevelPistols; @@ -34,11 +30,9 @@ public class TR3ItemRandomizer : BaseTR3Randomizer public TR3ItemRandomizer() { - _keyItemZones = JsonConvert.DeserializeObject>(ReadResource(@"TR3\Locations\Zones.json")); - _keyItemLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\item_locations.json")); _excludedLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\invalid_item_locations.json")); _pistolLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\unarmed_locations.json")); - _picker = new(); + _picker = new(GetResourcePath(@"TR3\Locations\routes.json")); } public override void Randomize(int seed) @@ -51,7 +45,7 @@ public override void Randomize(int seed) FindUnarmedLevelPistols(_levelInstance); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, false), Settings, _generator); _secretMapping = TRSecretMapping.Get(GetResourcePath($@"TR3\SecretMapping\{_levelInstance.Name}-SecretMapping.json")); // #312 If this is the assault course, import required models. On failure, don't perform any item rando. @@ -88,7 +82,6 @@ public void RandomizeKeyItems() foreach (TR3ScriptedLevel lvl in Levels) { LoadLevelInstance(lvl); - _picker.Initialise(GetItemLocationPool(_levelInstance), _generator); RandomizeKeyItems(_levelInstance); SaveLevelInstance(); @@ -276,17 +269,16 @@ public void RandomizeItemLocations(TR3CombinedLevel level) continue; } - TR3Entity ent = level.Data.Entities[i]; + TR3Entity entity = level.Data.Entities[i]; // Move standard items only, excluding any unarmed level pistols, and reward items - if (TR3TypeUtilities.IsStandardPickupType(ent.TypeID) && ent != _unarmedLevelPistols) + if (TR3TypeUtilities.IsStandardPickupType(entity.TypeID) && entity != _unarmedLevelPistols) { - Location location = _picker.GetPickupLocation(); - _picker.SetLocation(ent, location); + _picker.RandomizePickupLocation(entity); } } } - private List GetItemLocationPool(TR3CombinedLevel level) + private List GetItemLocationPool(TR3CombinedLevel level, bool keyItemMode) { List exclusions = new(); if (_excludedLocations.ContainsKey(level.Name)) @@ -333,60 +325,34 @@ private List GetItemLocationPool(TR3CombinedLevel level) } TR3LocationGenerator generator = new(); - return generator.Generate(level.Data, exclusions); + return generator.Generate(level.Data, exclusions, keyItemMode); } public void RandomizeKeyItems(TR3CombinedLevel level) { - if (!_keyItemLocations.ContainsKey(level.Name)) - { - return; - } - FDControl floorData = new(); floorData.ParseFromLevel(level.Data); _picker.TriggerTestAction = location => LocationUtilities.HasAnyTrigger(location, level.Data, floorData); _picker.KeyItemTestAction = location => TestKeyItemLocation(location, level); + _picker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); - //Get all locations that have a KeyItemGroupID - e.g. intended for key items - List levelLocations = _keyItemLocations[level.Name].Where(i => i.KeyItemGroupID != 0).ToList(); + _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, true), Settings, _generator); for (int i = 0; i < level.Data.Entities.Count; i++) { TR3Entity entity = level.Data.Entities[i]; - //Calculate its alias - TR3Type aliasedKeyItemID = entity.TypeID + entity.Room + GetLevelKeyItemBaseAlias(level.Name); - - //Any special handling for key item entities - switch (aliasedKeyItemID) + if (!TR3TypeUtilities.IsKeyItemType(entity.TypeID) + || ItemFactory.IsItemLocked(level.Name, i)) { - case TR3Type.DetonatorKey: - entity.Invisible = false; - break; - default: - break; + continue; } - if (aliasedKeyItemID < TR3Type.JungleKeyItemBase) - throw new NotSupportedException("Level does not have key item alias group defined"); - - //Is entity one we are allowed/expected to move? (is the alias and base type correct?) - if (_keyItemZones[level.Name].AliasedExpectedKeyItems.Contains(aliasedKeyItemID) && - _keyItemZones[level.Name].BaseExpectedKeyItems.Contains(entity.TypeID)) - { - do - { - //Only get locations that are to position the intended key item. - //We can probably get rid of the do while loop as any location in this list should be valid - List keyItemLocations = levelLocations.Where(i => i.KeyItemGroupID == (int)aliasedKeyItemID).ToList(); - Location location = _picker.GetKeyItemLocation(keyItemLocations, entity, LocationUtilities.HasPickupTriger(entity, i, level.Data, floorData)); - _picker.SetLocation(entity, location); - - } while (!_keyItemZones[level.Name].AllowedRooms[aliasedKeyItemID].Contains(entity.Room) && - (!_keyItemZones[level.Name].AllowedRooms[aliasedKeyItemID].Contains(_ANY_ROOM_ALLOWED))); - //Try generating locations until it is in the zone - if list contains 2048 then any room is allowed. - } + _picker.RandomizeKeyItemLocation( + entity, LocationUtilities.HasPickupTriger(entity, i, level.Data, floorData), + level.Script.OriginalSequence, level.Data.Rooms[entity.Room].Info); } } @@ -398,40 +364,10 @@ private bool TestKeyItemLocation(Location location, TR3CombinedLevel level) .FindAll(e => TR3TypeUtilities.IsEnemyType(e.TypeID)) .Find(e => e.GetLocation().IsEquivalent(location)); - return enemy == null || TR3TypeUtilities.CanDropPickups + return enemy == null || (Settings.AllowEnemyKeyDrops && TR3TypeUtilities.CanDropPickups ( TR3TypeUtilities.GetAliasForLevel(level.Name, enemy.TypeID), !Settings.RandomizeEnemies || Settings.ProtectMonks - ); - } - - private static int GetLevelKeyItemBaseAlias(string name) - { - TR3Type alias = name switch - { - TR3LevelNames.JUNGLE => TR3Type.JungleKeyItemBase, - TR3LevelNames.RUINS => TR3Type.TempleKeyItemBase, - TR3LevelNames.GANGES => TR3Type.GangesKeyItemBase, - TR3LevelNames.CAVES => TR3Type.KaliyaKeyItemBase, - TR3LevelNames.NEVADA => TR3Type.NevadaKeyItemBase, - TR3LevelNames.HSC => TR3Type.HSCKeyItemBase, - TR3LevelNames.AREA51 => TR3Type.Area51KeyItemBase, - TR3LevelNames.COASTAL => TR3Type.CoastalKeyItemBase, - TR3LevelNames.CRASH => TR3Type.CrashKeyItemBase, - TR3LevelNames.MADUBU => TR3Type.MadubuKeyItemBase, - TR3LevelNames.PUNA => TR3Type.PunaKeyItemBase, - TR3LevelNames.THAMES => TR3Type.ThamesKeyItemBase, - TR3LevelNames.ALDWYCH => TR3Type.AldwychKeyItemBase, - TR3LevelNames.LUDS => TR3Type.LudsKeyItemBase, - TR3LevelNames.CITY => TR3Type.CityKeyItemBase, - TR3LevelNames.ANTARC => TR3Type.AntarcticaKeyItemBase, - TR3LevelNames.RXTECH => TR3Type.RXKeyItemBase, - TR3LevelNames.TINNOS => TR3Type.TinnosKeyItemBase, - TR3LevelNames.WILLIE => TR3Type.CavernKeyItemBase, - TR3LevelNames.HALLOWS => TR3Type.HallowsKeyItemBase, - _ => default, - }; - - return (int)alias; + )); } } diff --git a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs index f012f35eb..f822b3140 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs @@ -5,6 +5,7 @@ using TRFDControl.Utilities; using TRGE.Core; using TRGE.Core.Item.Enums; +using TRLevelControl; using TRLevelControl.Helpers; using TRLevelControl.Model; using TRModelTransporter.Transport; @@ -14,45 +15,27 @@ using TRRandomizerCore.Secrets; using TRRandomizerCore.Textures; using TRRandomizerCore.Utilities; +using SC = TRRandomizerCore.Randomizers.SecretConsts; namespace TRRandomizerCore.Randomizers; public class TR3SecretRandomizer : BaseTR3Randomizer, ISecretRandomizer { - private static readonly string _invalidLocationMsg = "Cannot place a nonvalidated secret where a trigger already exists - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _trapdoorLocationMsg = "Cannot place a secret on the same sector as a bridge/trapdoor - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _triggerWarningMsg = "Existing trigger object action with parameter {0} will be lost - {1} [X={2}, Y={3}, Z={4}, R={5}]"; - private static readonly string _flipMapWarningMsg = "Secret is being placed in a room that has a flipmap - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _flipMapErrorMsg = "Secret cannot be placed in a flipped room - {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly string _edgeInfoMsg = "Adding extra tile edge trigger for {0} [X={1}, Y={2}, Z={3}, R={4}]"; - private static readonly List _devRooms = null; private static readonly ushort _devModeSecretCount = 6; private readonly Dictionary> _locations, _unarmedLocations; - - private int _proxEvaluationCount; - - private static readonly float _LARGE_RADIUS = 5000.0f; - private static readonly float _MED_RADIUS = 2500.0f; - private static readonly float _SMALL_RADIUS = 750.0f; - private static readonly float _TINY_RADIUS = 5.0f; - - private static readonly int _LARGE_RETRY_TOLERANCE = 10; - private static readonly int _MED_RETRY_TOLERANCE = 25; - private static readonly int _SMALL_RETRY_TOLERANCE = 50; - - private static readonly int _triggerEdgeLimit = 103; // Within ~10% of a tile edge, triggers will be copied into neighbours + private readonly LocationPicker _routePicker; + private SecretPicker _secretPicker; internal TR3TextureMonitorBroker TextureMonitor { get; set; } public ItemFactory ItemFactory { get; set; } public IMirrorControl Mirrorer { get; set; } - private SecretPicker _picker; - public TR3SecretRandomizer() { _locations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\locations.json")); _unarmedLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\unarmed_locations.json")); + _routePicker = new(GetResourcePath(@"TR3\Locations\routes.json")); } public IEnumerable GetPacks() @@ -65,13 +48,14 @@ public IEnumerable GetPacks() public override void Randomize(int seed) { - _generator = new Random(seed); - _picker = new SecretPicker + _generator = new(seed); + _secretPicker = new() { Settings = Settings, Generator = _generator, ItemFactory = ItemFactory, Mirrorer = Mirrorer, + RouteManager = _routePicker, }; SetMessage("Randomizing secrets - loading levels"); @@ -171,7 +155,7 @@ private TRSecretRoom MakePlaceholderRewardRoom(TR3CombinedLevel level // Trigger activation masks have 5 bits so we need a specific number of doors to match. // For development mode, test the maximum. double countedSecrets = Settings.DevelopmentMode ? _devModeSecretCount : level.Script.NumSecrets; - int requiredDoors = (int)Math.Ceiling(countedSecrets / TRSecretPlacement.MaskBits); + int requiredDoors = (int)Math.Ceiling(countedSecrets / TRConsts.MaskBits); // Make the doors and store the entity indices for the secret triggers rewardRoom = new TRSecretRoom @@ -341,56 +325,40 @@ private void PlaceAllSecrets(TR3CombinedLevel level, List pickupTypes, int pickupIndex = 0; ushort secretIndex = 0; ushort countedSecrets = _devModeSecretCount; // For dev mode test the max number of secrets in TR3 - bool damagingLocationUsed = false; - bool glitchedDamagingLocationUsed = false; foreach (Location location in locations) { - if (_devRooms == null || _devRooms.Contains(location.Room)) - { - if (Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.NotMirrored) - continue; - - if (!Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.Mirrored) - continue; + if (Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.NotMirrored) + continue; - secret.Location = location; - secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities, true); - secret.SecretIndex = (ushort)(secretIndex % countedSecrets); // Cycle through each secret number - secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; // Cycle through the types + if (!Mirrorer.IsMirrored(level.Name) && location.LevelState == LevelState.Mirrored) + continue; - // #238 Point this secret to a specific camera and look-at target if applicable. - if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) - { - secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; - secret.CameraTarget = (ushort)rewardRoom.DoorIndices[0]; - } + secret.Location = location; + secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities, true); + secret.SecretIndex = (ushort)(secretIndex % countedSecrets); // Cycle through each secret number + secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; // Cycle through the types - secret.SetMaskAndDoor(countedSecrets, rewardRoom.DoorIndices); + // #238 Point this secret to a specific camera and look-at target if applicable. + if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) + { + secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; + secret.CameraTarget = (ushort)rewardRoom.DoorIndices[0]; + } - if (PlaceSecret(level, secret, floorData)) - { - // This will either make a new entity or repurpose an old one - TR3Entity entity = ItemFactory.CreateItem(level.Name, level.Data.Entities, secret.Location, true); - entity.TypeID = secret.PickupType; + secret.SetMaskAndDoor(countedSecrets, rewardRoom.DoorIndices); + PlaceSecret(level, secret, floorData); - secretIndex++; - pickupIndex++; + // This will either make a new entity or repurpose an old one + TR3Entity entity = ItemFactory.CreateLockedItem(level.Name, level.Data.Entities, secret.Location, true); + entity.TypeID = secret.PickupType; - if (location.RequiresDamage) - { - damagingLocationUsed = true; - if (location.RequiresGlitch) - { - glitchedDamagingLocationUsed = true; - } - } - } - } + secretIndex++; + pickupIndex++; } floorData.WriteToLevel(level.Data); - AddDamageControl(level, pickupTypes, damagingLocationUsed, glitchedDamagingLocationUsed); + AddDamageControl(level, pickupTypes, locations); } private void RandomizeSecrets(TR3CombinedLevel level, List pickupTypes, TRSecretRoom rewardRoom) @@ -399,47 +367,29 @@ private void RandomizeSecrets(TR3CombinedLevel level, List pickupTypes, floorData.ParseFromLevel(level.Data); List locations = _locations[level.Name]; - List usedLocations = new(); + locations.Shuffle(_generator); - Queue guaranteedLocations = _picker.GetGuaranteedLocations(locations, Mirrorer.IsMirrored(level.Name), level.Script.NumSecrets, location => - { - bool result = EvaluateProximity(location, usedLocations, level); - if (result) - { - usedLocations.Add(location); - } - _proxEvaluationCount = 0; - return result; - }); + _secretPicker.SectorAction = loc + => FDUtilities.GetRoomSector(loc.X, loc.Y, loc.Z, (short)loc.Room, level.Data, floorData); + _secretPicker.PlacementTestAction = loc + => TestSecretPlacement(level, loc, floorData); - TRSecretPlacement secret = new(); - int pickupIndex = 0; - bool damagingLocationUsed = false; - bool glitchedDamagingLocationUsed = false; - while (secret.SecretIndex < level.Script.NumSecrets) - { - Location location; - if (guaranteedLocations.Count > 0) - { - location = guaranteedLocations.Dequeue(); - } - else - { - do - { - location = locations[_generator.Next(0, locations.Count)]; - } - while (!EvaluateProximity(location, usedLocations, level)); - } + _routePicker.RoomInfos = level.Data.Rooms + .Select(r => new ExtRoomInfo(r.Info, r.NumXSectors, r.NumZSectors)) + .ToList(); + _routePicker.Initialise(level.Name, locations, Settings, _generator); - _proxEvaluationCount = 0; + List pickedLocations = _secretPicker.GetLocations(locations, Mirrorer.IsMirrored(level.Name), level.Script.NumSecrets); - usedLocations.Add(location); + int pickupIndex = 0; + TRSecretPlacement secret = new(); + for (int i = 0; i < level.Script.NumSecrets; i++) + { + Location location = pickedLocations[i]; secret.Location = location; secret.EntityIndex = (ushort)ItemFactory.GetNextIndex(level.Name, level.Data.Entities); - secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; // Cycle through the types + secret.PickupType = pickupTypes[pickupIndex % pickupTypes.Count]; - // #238 Point this secret to a specific camera and look-at target if applicable. if (Settings.UseRewardRoomCameras && rewardRoom.HasCameras) { secret.CameraIndex = (ushort)rewardRoom.CameraIndices[pickupIndex % rewardRoom.CameraIndices.Count]; @@ -447,96 +397,28 @@ private void RandomizeSecrets(TR3CombinedLevel level, List pickupTypes, } secret.SetMaskAndDoor(level.Script.NumSecrets, rewardRoom.DoorIndices); + PlaceSecret(level, secret, floorData); - if (PlaceSecret(level, secret, floorData)) - { - // This will either make a new entity or repurpose an old one - TR3Entity entity = ItemFactory.CreateItem(level.Name, level.Data.Entities, secret.Location); - entity.TypeID = secret.PickupType; - - secret.SecretIndex++; - pickupIndex++; + // This will either make a new entity or repurpose an old one. Ensure it is locked + // to prevent item rando from potentially treating it as a key item. + TR3Entity entity = ItemFactory.CreateLockedItem(level.Name, level.Data.Entities, secret.Location); + entity.TypeID = secret.PickupType; - if (location.RequiresDamage) - { - damagingLocationUsed = true; - if (location.RequiresGlitch) - { - glitchedDamagingLocationUsed = true; - } - } - } + secret.SecretIndex++; + pickupIndex++; } floorData.WriteToLevel(level.Data); - AddDamageControl(level, pickupTypes, damagingLocationUsed, glitchedDamagingLocationUsed); - - _picker.FinaliseSecretPool(usedLocations, level.Name); - -#if DEBUG - Debug.WriteLine(level.Name + ": " + SecretPicker.DescribeLocations(usedLocations)); -#endif + AddDamageControl(level, pickupTypes, pickedLocations); + _secretPicker.FinaliseSecretPool(pickedLocations, level.Name); } - private bool EvaluateProximity(Location loc, List usedLocs, TR3CombinedLevel level) - { - bool SafeToPlace = true; - float proximity; - - if (loc.Difficulty == Difficulty.Hard && !Settings.HardSecrets) - return false; - - if (loc.RequiresGlitch && !Settings.GlitchedSecrets) - return false; - - if (Mirrorer.IsMirrored(level.Name) && loc.LevelState == LevelState.NotMirrored) - return false; - - if (!Mirrorer.IsMirrored(level.Name) && loc.LevelState == LevelState.Mirrored) - return false; - - if (usedLocs.Count == 0 || usedLocs == null) - return true; - - _proxEvaluationCount++; - - //Be more generous with proximity if we are failing to place. - if ( _proxEvaluationCount <= _LARGE_RETRY_TOLERANCE) - { - proximity = _LARGE_RADIUS; - } - else if (_proxEvaluationCount > _LARGE_RETRY_TOLERANCE && _proxEvaluationCount <= _MED_RETRY_TOLERANCE) - { - proximity = _MED_RADIUS; - } - else if (_proxEvaluationCount > _MED_RETRY_TOLERANCE && _proxEvaluationCount <= _SMALL_RETRY_TOLERANCE) - { - proximity = _SMALL_RADIUS; - } - else - { - proximity = _TINY_RADIUS; - } - - Sphere newLoc = new(new System.Numerics.Vector3(loc.X, loc.Y, loc.Z), proximity); - - foreach (Location used in usedLocs) - { - SafeToPlace = !newLoc.IsColliding(new Sphere(new System.Numerics.Vector3(used.X, used.Y, used.Z), proximity)); - - if (SafeToPlace == false) - break; - } - - return SafeToPlace; - } - - private void AddDamageControl(TR3CombinedLevel level, List pickupTypes, bool damagingLocationUsed, bool glitchedDamagingLocationUsed) + private void AddDamageControl(TR3CombinedLevel level, List pickupTypes, List locations) { // If we have used a secret that requires damage, add a large medi to an unarmed level // weapon location. - if (damagingLocationUsed && _unarmedLocations.ContainsKey(level.Name)) + if (locations.Any(l => l.RequiresDamage) && _unarmedLocations.ContainsKey(level.Name)) { if (ItemFactory.CanCreateItem(level.Name, level.Data.Entities, Settings.DevelopmentMode)) { @@ -554,7 +436,7 @@ private void AddDamageControl(TR3CombinedLevel level, List pickupTypes, // If we have also used a secret that requires damage and is glitched, add something to the // top ring to allow medi dupes. - if (glitchedDamagingLocationUsed) + if (locations.Any(l => l.RequiresDamage && l.RequiresGlitch)) { // If we have a spare model slot, duplicate one of the artefacts into this so that // we can add a hint with the item name. Otherwise, just re-use a puzzle item. @@ -621,17 +503,17 @@ private static void SetPuzzleTypeName(TR3CombinedLevel level, TR3Type itemType, } } - private bool PlaceSecret(TR3CombinedLevel level, TRSecretPlacement secret, FDControl floorData) + private bool TestSecretPlacement(TR3CombinedLevel level, Location location, FDControl floorData) { // Check if this secret is being added to a flipped room, as that won't work for (int i = 0; i < level.Data.NumRooms; i++) { - if (level.Data.Rooms[i].AlternateRoom == secret.Location.Room) + if (level.Data.Rooms[i].AlternateRoom == location.Room) { if (Settings.DevelopmentMode) { // Place it anyway in dev mode to allow relocating - Debug.WriteLine(string.Format(_flipMapErrorMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, secret.Location.Room)); + Debug.WriteLine(string.Format(SC.FlipMapErrorMsg, level.Name, location.X, location.Y, location.Z, location.Room)); break; } else @@ -642,69 +524,94 @@ private bool PlaceSecret(TR3CombinedLevel level, TRSecretPlacement secr } // Get the sector and check if it is shared with a trapdoor or bridge, as these won't work either. - TRRoomSector sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, (short)secret.Location.Room, level.Data, floorData); + TRRoomSector sector = FDUtilities.GetRoomSector(location.X, location.Y, location.Z, (short)location.Room, level.Data, floorData); foreach (TR3Entity otherEntity in level.Data.Entities) { TR3Type type = otherEntity.TypeID; - if (secret.Location.Room == otherEntity.Room && (TR3TypeUtilities.IsTrapdoor(type) || TR3TypeUtilities.IsBridge(type))) + if (location.Room == otherEntity.Room && (TR3TypeUtilities.IsTrapdoor(type) || TR3TypeUtilities.IsBridge(type))) { TRRoomSector otherSector = FDUtilities.GetRoomSector(otherEntity.X, otherEntity.Y, otherEntity.Z, otherEntity.Room, level.Data, floorData); if (otherSector == sector) { if (Settings.DevelopmentMode) { - Debug.WriteLine(string.Format(_trapdoorLocationMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, secret.Location.Room)); + Debug.WriteLine(string.Format(SC.TrapdoorLocationMsg, level.Name, location.X, location.Y, location.Z, location.Room)); } return false; } } } - // Create the trigger. If this was unsuccessful, bail out. - if (!CreateSecretTriggers(level, secret, (short)secret.Location.Room, floorData, sector)) + if (!TestTriggerPlacement(level, location, (short)location.Room, sector, floorData)) { return false; } - // #248 If the room has a flipmap, make sure to add the trigger there too. - short altRoom = level.Data.Rooms[secret.Location.Room].AlternateRoom; + // If the room has a flipmap, make sure to test the trigger there too. + short altRoom = level.Data.Rooms[location.Room].AlternateRoom; if (altRoom != -1) { - sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom, level.Data, floorData); - if (!CreateSecretTriggers(level, secret, altRoom, floorData, sector)) + sector = FDUtilities.GetRoomSector(location.X, location.Y, location.Z, altRoom, level.Data, floorData); + if (!TestTriggerPlacement(level, location, altRoom, sector, floorData)) { return false; } if (Settings.DevelopmentMode) { - Debug.WriteLine(string.Format(_flipMapWarningMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom)); + Debug.WriteLine(string.Format(SC.FlipMapWarningMsg, level.Name, location.X, location.Y, location.Z, altRoom)); } } - // Checks have passed, so we can actually create the entity. return true; } - private bool CreateSecretTriggers(TR3CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector baseSector) + private bool TestTriggerPlacement(TR3CombinedLevel level, Location location, short room, TRRoomSector sector, FDControl floorData) { - // Try to make the primary trigger - if (!CreateSecretTrigger(level, secret, room, floorData, baseSector)) + if (!location.Validated && LocationUtilities.HasAnyTrigger(sector, floorData)) { + // There is already a trigger here and the location hasn't been marked as being + // safe to move the action items to the new pickup trigger. + if (Settings.DevelopmentMode) + { + Debug.WriteLine(string.Format(SC.InvalidLocationMsg, level.Name, location.X, location.Y, location.Z, room)); + } return false; } + return true; + } + + + private void PlaceSecret(TR3CombinedLevel level, TRSecretPlacement secret, FDControl floorData) + { + // This assumes TestTriggerPlacement has already been called and passed. + TRRoomSector sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, (short)secret.Location.Room, level.Data, floorData); + CreateSecretTriggers(level, secret, (short)secret.Location.Room, floorData, sector); + + short altRoom = level.Data.Rooms[secret.Location.Room].AlternateRoom; + if (altRoom != -1) + { + sector = FDUtilities.GetRoomSector(secret.Location.X, secret.Location.Y, secret.Location.Z, altRoom, level.Data, floorData); + CreateSecretTriggers(level, secret, altRoom, floorData, sector); + } + } + + private void CreateSecretTriggers(TR3CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector baseSector) + { + // Try to make the primary trigger + CreateSecretTrigger(level, secret, room, floorData, baseSector); // Check neighbouring sectors if we are very close to tile edges. We scan 8 locations around // the secret's position based on the edge tolerance and see if the sector has changed. - ISet processedSectors = new HashSet { baseSector }; + HashSet processedSectors = new() { baseSector }; for (int xNorm = -1; xNorm < 2; xNorm++) { for (int zNorm = -1; zNorm < 2; zNorm++) { if (xNorm == 0 && zNorm == 0) continue; // Primary trigger's sector - int x = secret.Location.X + xNorm * _triggerEdgeLimit; - int z = secret.Location.Z + zNorm * _triggerEdgeLimit; + int x = secret.Location.X + xNorm * SC.TriggerEdgeLimit; + int z = secret.Location.Z + zNorm * SC.TriggerEdgeLimit; TRRoomSector neighbour = FDUtilities.GetRoomSector(x, secret.Location.Y, z, room, level.Data, floorData); // Process each unique sector only once and if it's a valid neighbour, add the extra trigger. @@ -712,18 +619,16 @@ private bool CreateSecretTriggers(TR3CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector sector) + private void CreateSecretTrigger(TR3CombinedLevel level, TRSecretPlacement secret, short room, FDControl floorData, TRRoomSector sector) { if (sector.FDIndex == 0) { floorData.CreateFloorData(sector); } - FDTriggerEntry existingTrigger = floorData.Entries[sector.FDIndex].Find(e => e is FDTriggerEntry) as FDTriggerEntry; - if (existingTrigger != null && !secret.Location.Validated) - { - // There is already a trigger here and the location hasn't been marked as being - // safe to move the action items to the new pickup trigger. - if (Settings.DevelopmentMode) - { - Debug.WriteLine(string.Format(_invalidLocationMsg, level.Name, secret.Location.X, secret.Location.Y, secret.Location.Z, room)); - } - return false; - } - // Make a new pickup trigger FDTriggerEntry trigger = new() { - Setup = new FDSetup { Value = 4 }, - TrigSetup = new FDTrigSetup + Setup = new() { Value = 4 }, + TrigSetup = new() { Value = 15872, Mask = secret.TriggerMask }, TrigType = FDTrigType.Pickup, - TrigActionList = new List + TrigActionList = new() { - new FDActionListItem + new() { TrigAction = FDTrigAction.Object, Parameter = secret.EntityIndex }, - new FDActionListItem + new() { TrigAction = FDTrigAction.SecretFound, Parameter = secret.SecretIndex @@ -783,7 +676,7 @@ private bool CreateSecretTrigger(TR3CombinedLevel level, TRSecretPlacement e is FDTriggerEntry) is FDTriggerEntry existingTrigger) { List existingActions = new(); foreach (FDActionListItem actionItem in existingTrigger.TrigActionList) @@ -802,9 +695,9 @@ private bool CreateSecretTrigger(TR3CombinedLevel level, TRSecretPlacement.FullActivation) + else if (secret.TriggerMask == TRConsts.FullMask) { existingActions.Add(actionItem); } @@ -820,8 +713,6 @@ private bool CreateSecretTrigger(TR3CombinedLevel level, TRSecretPlacement diff --git a/TRRandomizerCore/Resources/TR1/Locations/routes.json b/TRRandomizerCore/Resources/TR1/Locations/routes.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/TRRandomizerCore/Resources/TR1/Locations/routes.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Locations/routes.json b/TRRandomizerCore/Resources/TR2/Locations/routes.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/TRRandomizerCore/Resources/TR2/Locations/routes.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Locations/routes.json b/TRRandomizerCore/Resources/TR3/Locations/routes.json new file mode 100644 index 000000000..7a73a41bf --- /dev/null +++ b/TRRandomizerCore/Resources/TR3/Locations/routes.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file From 69991fa0339ae3425a9e92d87e3f79da61da05a8 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:10:27 +0000 Subject: [PATCH 10/17] Update aliases and shared space types Key item alias IDs updated per LocationPicker.GetKeyItemID. Additional objects identified that can share pickup space with items. --- TRLevelControl/Helpers/TR1TypeUtilities.cs | 17 +++ TRLevelControl/Helpers/TR2TypeUtilities.cs | 1 + TRLevelControl/Helpers/TR3TypeUtilities.cs | 7 +- TRLevelControl/Model/Base/Enums/TR1Type.cs | 79 +++++++------ TRLevelControl/Model/TR2/Enums/TR2Type.cs | 74 ++++++++++++ TRLevelControl/Model/TR3/Enums/TR3Type.cs | 127 ++++++++++----------- 6 files changed, 202 insertions(+), 103 deletions(-) diff --git a/TRLevelControl/Helpers/TR1TypeUtilities.cs b/TRLevelControl/Helpers/TR1TypeUtilities.cs index d87674080..29d695482 100644 --- a/TRLevelControl/Helpers/TR1TypeUtilities.cs +++ b/TRLevelControl/Helpers/TR1TypeUtilities.cs @@ -474,6 +474,21 @@ public static bool IsPushblockType(TR1Type type) return GetPushblockTypes().Contains(type); } + public static List GetCogMachineTypes() + { + return new() + { + TR1Type.Animating1, + TR1Type.Animating2, + TR1Type.Animating3, + }; + } + + public static bool IsCogMachineType(TR1Type type) + { + return GetCogMachineTypes().Contains(type); + } + public static bool CanSharePickupSpace(TR1Type type) { // Can we place a standard pickup on the same tile as this type? @@ -487,6 +502,7 @@ public static bool CanSharePickupSpace(TR1Type type) || IsTrapdoor(type) || IsDoorType(type) || IsPushblockType(type) + || IsCogMachineType(type) || type == TR1Type.CameraTarget_N || type == TR1Type.Earthquake_N || type == TR1Type.WaterfallMist_N @@ -494,6 +510,7 @@ public static bool CanSharePickupSpace(TR1Type type) || type == TR1Type.Barricade || type == TR1Type.RollingBall || type == TR1Type.MovingBlock + || type == TR1Type.SwingingBlade || type == TR1Type.Lara; } diff --git a/TRLevelControl/Helpers/TR2TypeUtilities.cs b/TRLevelControl/Helpers/TR2TypeUtilities.cs index 072f8bbbe..878531408 100644 --- a/TRLevelControl/Helpers/TR2TypeUtilities.cs +++ b/TRLevelControl/Helpers/TR2TypeUtilities.cs @@ -769,6 +769,7 @@ public static List UnrenderedTypes() TR2Type.DrippingWater_N, TR2Type.BartoliHideoutClock_N, TR2Type.SingingBirds_N, + TR2Type.DragonExplosionEmitter_N, }; } diff --git a/TRLevelControl/Helpers/TR3TypeUtilities.cs b/TRLevelControl/Helpers/TR3TypeUtilities.cs index c4eaeef9e..6498bcb1b 100644 --- a/TRLevelControl/Helpers/TR3TypeUtilities.cs +++ b/TRLevelControl/Helpers/TR3TypeUtilities.cs @@ -559,7 +559,8 @@ public static List GetSwitchTypes() TR3Type.SmallWallSwitch, TR3Type.PushButtonSwitch, TR3Type.WallSwitch, - TR3Type.UnderwaterSwitch + TR3Type.UnderwaterSwitch, + TR3Type.ValveWheelOrPulley, }; } @@ -654,8 +655,12 @@ public static bool CanSharePickupSpace(TR3Type type) || IsTrapdoor(type) || IsDoorType(type) || IsPushblockType(type) + || (IsVehicleType(type) && type != TR3Type.MineCart) || type == TR3Type.FallingBlock || type == TR3Type.RollingBallOrBarrel + || type == TR3Type.ZiplineHandle + || type == TR3Type.WaterfallMist_H + || type == TR3Type.DestroyableBoardedUpWindow || type == TR3Type.Lara; } diff --git a/TRLevelControl/Model/Base/Enums/TR1Type.cs b/TRLevelControl/Model/Base/Enums/TR1Type.cs index f62b2c8cc..f94c0a881 100644 --- a/TRLevelControl/Model/Base/Enums/TR1Type.cs +++ b/TRLevelControl/Model/Base/Enums/TR1Type.cs @@ -274,69 +274,72 @@ public enum TR1Type LaraMiscAnim_H_Atlantis = 2005, // Scion grab (includes level end) LaraMiscAnim_H_Pyramid = 2006, // Adam death - // Key Item Alias = 10000 + ((level.OriginalSequence - 1) * 1000) + KeyTypeID + Room + // Key item aliases CavesKeyItemBase = 10000, VilcabambaKeyItemBase = 11000, - VilcabambaGoldIdol = 11124, - VilcabambaSilverKey = 11143, + Vilcabamba_K1_SilverKey = 11183, + Vilcabamba_P1_GoldIdol = 11143, ValleyKeyItemBase = 12000, - ValleyCogAbovePool = 12150, - ValleyCogInWater = 12158, - ValleyCogAtBridge = 12168, + Valley_P1_CogAbovePool = 12177, + Valley_P1_CogBridge = 12242, + Valley_P1_CogTemple = 12241, QualopecKeyItemBase = 13000, FollyKeyItemBase = 14000, - FollyNeptuneKey = 14162, - FollyDamoclesKey = 14169, - FollyThorKey = 14176, - FollyAtlasKey = 14177, + Folly_K1_NeptuneKey = 14315, + Folly_K2_AtlasKey = 14299, + Folly_K3_DamoclesKey = 14290, + Folly_K4_ThorKey = 14280, ColosseumKeyItemBase = 15000, - ColosseumSuperBrightKey = 15183, + Colosseum_K1_RustyKey = 15217, MidasKeyItemBase = 16000, - MidasLeadBarTempleRoom = 16133, - MidasLeadBarFireRoom = 16149, - MidasLeadBarSpikeRoom = 16154, + Midas_LeadBar_FireRoom = 16178, + Midas_LeadBar_SpikeRoom = 16157, + Midas_LeadBar_TempleRoof = 16166, CisternKeyItemBase = 17000, - CisternRustyKeyNearPierre = 17151, - CisternSilverKeyBehindDoor = 17170, - CisternSilverKeyBetweenDoors = 17179, - CisternGoldKey = 17185, - CisternRustyKeyMainRoomLedge = 17222, + Cistern_K1_GoldKey = 17245, + Cistern_K2_SilverBehindDoor = 17208, + Cistern_K2_SilverBetweenDoors = 17231, + Cistern_K3_RustyKeyMainRoom = 17295, + Cistern_K3_RustyKeyNearPierre = 17143, TihocanKeyItemBase = 18000, - TihocanGoldKeyBeforeBlockRoom = 18144, - TihocanRustyKeyDoubleBoulders = 18209, - TihocanRustyKeyClangClang = 18210, - TihocanGoldKeyPierre = 18239, + Tihocan_K1_GoldKeyFlipMap = 18133, + Tihocan_K1_GoldKeyPierre = 18389, + Tihocan_K2_RustyKeyBoulders = 18277, + Tihocan_K2_RustyKeyClangClang = 18267, KhamoonKeyItemBase = 19000, - KhamoonSapphireKeySphinx = 19143, - KhamoonSapphireKeyEnd = 19162, + Khamoon_K1_SapphireKeyEnd = 19193, + Khamoon_K1_SapphireKeyStart = 19217, ObeliskKeyItemBase = 20000, - ObeliskEyeOfHorus = 20126, - ObeliskScarab = 20127, - ObeliskSealOfAnubis = 20128, - ObeliskAnkh = 20129, - ObeliskSapphireKey = 20199, + Obelisk_K1_SapphireKeyEnd = 20213, + Obelisk_K1_SapphireKeyStart = 20308, + Obelisk_P1_EyeOfHorus = 20160, + Obelisk_P2_Scarab = 20151, + Obelisk_P3_SealOfAnubis = 20152, + Obelisk_P4_Ankh = 20163, SanctuaryKeyItemBase = 21000, - SanctuaryAnkhBehindSphinx = 21126, - SanctuarySapphireKey = 21148, - SanctuaryAnkhAfterKey = 21150, - SanctuaryScarab = 21155, + Sanctuary_K1_GoldKey = 21191, + Sanctuary_P1_AnkhAfterKey = 21196, + Sanctuary_P1_AnkhBehindSphinx = 21100, + Sanctuary_P2_Scarab = 21202, MinesKeyItemBase = 22000, - MinesFuseNearCowboy = 22127, - MinesFuseNearShack = 22147, - MinesFuseNearConveyor = 22155, - MinesPyramidKey = 22179, + Mines_K1_RustyKey = 22137, + Mines_P1_BoulderFuse = 22160, + Mines_P1_ConveyorFuse = 22183, + Mines_P1_CowboyFuse = 22148, + Mines_P1_CowboyAltFuse = 22146, + Mines_P2_PyramidKey = 22216, AtlantisKeyItemBase = 23000, diff --git a/TRLevelControl/Model/TR2/Enums/TR2Type.cs b/TRLevelControl/Model/TR2/Enums/TR2Type.cs index 187a9eeee..f11ef7412 100644 --- a/TRLevelControl/Model/TR2/Enums/TR2Type.cs +++ b/TRLevelControl/Model/TR2/Enums/TR2Type.cs @@ -402,4 +402,78 @@ public enum TR2Type Puzzle1_M_H_Dagger = 3513, Puzzle2_M_H_Dagger = 3514, + + // Key item aliases + GW_K1_GuardhouseKey = 10291, + GW_K2_RustyKey = 10250, + + Venice_K1_BoathouseKey = 11210, + Venice_K2_SteelKey = 11353, + Venice_K3_IronKey = 11502, + + Bartoli_K1_LibraryKey = 12241, + Bartoli_K2_DetonatorKey = 12385, + + Opera_K1_OrnateKeyFans = 13449, + Opera_K1_OrnateKeyStart = 13544, + Opera_P1_RelayBox = 13395, + Opera_P2_CircuitBoard = 13377, + + Rig_K1_RedPassCard = 14238, + Rig_K2_YellowPassCard = 14193, + Rig_K3_GreenPassCard = 14240, + + DA_K1_RedPassCard = 15250, + DA_K4_BluePassCard = 15301, + DA_P1_MachineChipChopper = 15299, + DA_P1_MachineChipMiddleRoom = 15206, + + Wreck_K1_RestRoomKey = 17407, + Wreck_K2_RustyKey = 17343, + Wreck_K3_CabinKey = 17324, + Wreck_P1_RestroomBreaker = 17298, + Wreck_P1_ShardRoomBreaker = 17349, + Wreck_P1_StaircaseBreaker = 17304, + + LQ_K1_TheatreKey = 18300, + + Deck_K2_SternKey = 19368, + Deck_K3_StorageKey = 19385, + Deck_K4_CabinKey = 19262, + Deck_P4_TheSeraph = 19400, + + Tibet_K1_DrawbridgeKey = 20379, + Tibet_K2_HutKey = 20348, + + Barkhang_K1_StrongroomKey = 21328, + Barkhang_K2_TrapdoorKey = 21501, + Barkhang_K3_RooftopsKey = 21225, + Barkhang_K4_MainHallKey = 21464, + Barkhang_P1_BurnerRoomWheel = 21306, + Barkhang_P1_LadderTowerWheel = 21415, + Barkhang_P1_OutsideWheel = 21431, + Barkhang_P1_PoolWheel = 21485, + Barkhang_P1_RooftopWheel = 21330, + Barkhang_P2_EastGemstone = 21338, + Barkhang_P2_WestGemstone = 21332, + Barkhang_P4_TheSeraph = 21273, + + CoT_P1_TibetanMaskStart = 22222, + CoT_P1_TibetanMaskUnderwater = 22357, + CoT_Q1_GongHammer = 22342, + + Chicken_K2_GongHammer = 23315, + Chicken_P1_TibetanMask = 23379, + Chicken_Q2_Talion = 23503, + + Xian_K2_GoldKey = 24427, + Xian_K3_SilverKey = 24582, + Xian_K4_MainChamberKey = 24436, + Xian_P1_TheDragonSeal = 24387, + + Floater_P1_MysticPlaqueAltEnd = 25443, + Floater_P1_MysticPlaqueWest = 25232, + Floater_P2_MysticPlaqueEast = 25160, + + Lair_P1_MysticPlaque = 26145, } diff --git a/TRLevelControl/Model/TR3/Enums/TR3Type.cs b/TRLevelControl/Model/TR3/Enums/TR3Type.cs index 845aa7f31..44d119362 100644 --- a/TRLevelControl/Model/TR3/Enums/TR3Type.cs +++ b/TRLevelControl/Model/TR3/Enums/TR3Type.cs @@ -490,101 +490,100 @@ public enum TR3Type LaraVehicleAnimation_H_UPV = 8003, LaraVehicleAnimation_H_Boat = 8004, - // Key Item Alias = 10000 + ((level.OriginalSequence - 1) * 1000) + KeyTypeID + Room + // Key item aliases JungleKeyItemBase = 10000, - MonkeyKey = 10359, + Jungle_K4_IndraKey = 10590, TempleKeyItemBase = 11000, - GaneshaSpikeCorridorAfterMud = 11371, - Scimitar2 = 11410, - Scimitar1 = 11411, - GaneshaFlipmapPool = 11416, - GaneshaBeneathRandyRory = 11435, - GaneshaCurrentPool = 11444, - GaneshaSpikeCeiling = 11446, + Temple_K1_GaneshaCurrentPool = 11723, + Temple_K1_GaneshaFlipmapPool = 11641, + Temple_K1_GaneshaMudslide = 11539, + Temple_K1_GaneshaRandyRory = 11708, + Temple_K1_GaneshaSpikeCeiling = 11692, + Temple_P1_ScimitarEast = 11636, + Temple_P2_ScimitarWest = 11648, GangesKeyItemBase = 12000, - SnakePitKey = 12239, - MonkeyPitKey = 12323, + Ganges_K1_GateKeyMonkeyPit = 12425, + Ganges_K1_GateKeySnakePit = 12258, KaliyaKeyItemBase = 13000, - NevadaKeyItemBase = 14000, - DetonatorKey = 14294, //There are two on the level - we can ignore the one thats intended to be accessible - RooftopKeycard = 14378, - - HSCKeyItemBase = 15000, - InitialKeycard = 15234, - FinalYellowKey = 15239, - BlueKey = 15279, - SecretCorridorYellow = 15335, - SecretCorridorKeycard = 15350, - OutsideTurretsKeycard = 15355, - OutsideYellowKey = 15366, - - Area51KeyItemBase = 16000, - Disc2 = 16233, - Disc1 = 16257, - YellowKey = 16286, - UFOKeycard = 16322, - CoastalKeyItemBase = 17000, - SerpentStoneCubby = 17222, - SmugglersKey = 17231, - SerpentStoneTopWaterfall = 17326, - SerpentStoneTreetops = 17329, + Coastal_K1_SmugglersKey = 14300, + Coastal_P1_StoneAbovePool = 14447, + Coastal_P1_StoneTreetops = 14440, + Coastal_P1_StoneWaterfall = 14252, CrashKeyItemBase = 18000, - TuckermansKey = 18255, - BishopsKey = 18270, + Crash_K1_BishopsKey = 15364, + Crash_K2_TuckermansKey = 15278, MadubuKeyItemBase = 19000, PunaKeyItemBase = 20000, ThamesKeyItemBase = 21000, - CathedralKey = 21225, - FlueRoomKey = 21396, + Thames_K1_FlueRoomKey = 18524, + Thames_K2_CathedralKey = 18161, AldwychKeyItemBase = 22000, - SolomonKeyDrillShaft = 22235, - Ticket = 22243, - Penny = 22247, - MaintenanceKey = 22262, - SolomonKey3DoorPuzzle = 22301, - Star = 22325, - Mallet = 22334, + Aldwych_K1_MaintenanceKey = 19279, + Aldwych_K2_SolomonKey3Doors = 19362, + Aldwych_K3_SolomonKeyDrill = 19239, + Aldwych_P1_OldCoin = 19343, + Aldwych_P2_Ticket = 19302, + Aldwych_P3_Hammer = 19465, + Aldwych_P4_OrnateStar = 19448, LudsKeyItemBase = 23000, - EmbalmingFluid = 23283, - BoilerRoomKey = 23293, + Luds_K1_BoilerRoomKey = 20447, + Luds_P1_EmbalmingFluid = 20240, CityKeyItemBase = 24000, + NevadaKeyItemBase = 14000, + Nevada_K1_GeneratorAccessCard = 22578, + Nevada_K2_DetonatorKey = 22359, + Nevada_K2_DetonatorKeyUnused = 22419, + + HSCKeyItemBase = 15000, + HSC_K1_KeycardTypeA = 23260, + HSC_K2_KeycardTypeBSatellite = 23490, + HSC_K2_KeycardTypeBTurrets = 23454, + HSC_P1_BluePass = 23352, + HSC_P2_YellowPassEnd = 23322, + HSC_P2_YellowPassHangar = 23537, + HSC_P2_YellowPassSatellite = 23463, + + Area51KeyItemBase = 16000, + Area51_K1_LaunchCodeCard = 24433, + Area51_P2_CodeCDSilo = 24322, + Area51_P3_CodeCDWatchTower = 24253, + Area51_P4_HangarAccessPass = 24434, + AntarcticaKeyItemBase = 25000, - CrowbarAfterOpeningGenerator = 25292, - CrowbarAfterOpeningTower = 25298, - GeneratorKey = 25321, - CrowbarStandardPickup = 25339, - HutKey = 25375, + Antarc_K1_HutKey = 25526, + Antarc_P1_CrowbarGateControl = 25374, + Antarc_P1_CrowbarRegular = 25456, + Antarc_P1_CrowbarTower = 25371, + Antarc_P2_GateControlKey = 25446, RXKeyItemBase = 26000, - Battery = 26312, - Winch = 26333, - Crowbar = 26365, + RX_P1_Crowbar = 26679, + RX_P2_LeadAcidBattery = 26444, + RX_P3_WinchStarter = 26509, TinnosKeyItemBase = 27000, - UliKeyStart = 27251, - WaterMask = 27299, - WindMask = 27302, - EarthMask = 27325, - FireMask = 27324, - UliKeyMutants = 27435, + Tinnos_K1_UliKeyEnd = 27686, + Tinnos_K1_UliKeyStart = 27269, + Tinnos_P1_OceanicMaskEarth = 27421, + Tinnos_P1_OceanicMaskFire = 27449, + Tinnos_P1_OceanicMaskWater = 27395, + Tinnos_P1_OceanicMaskWind = 27368, CavernKeyItemBase = 28000, HallowsKeyItemBase = 29000, - VaultKey = 29242, - - NullKeyItem = 32700, + Hallows_K1_VaultKey = 29220, } From 25810db1d1b0b77f80d44576505575da9fb3815e Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:11:33 +0000 Subject: [PATCH 11/17] Route all levels Routing created for every level in TR1-3. This makes use of a trview plugin to allow visualisation of the created zones, which are generated by marking on waypoints low and high rooms along the route for each key item. Updated invalid item locations too as more came to light during this exercise. --- .../trview/plugins/key_items/manifest.json | 5 + Resources/trview/plugins/key_items/plugin.lua | 512 + .../TR1/Locations/invalid_item_locations.json | 144 +- .../Resources/TR1/Locations/routes.json | 8103 ++++++++ .../TR2/Locations/invalid_item_locations.json | 382 +- .../Resources/TR2/Locations/routes.json | 13673 +++++++++++++ .../TR3/Locations/invalid_item_locations.json | 724 +- .../Resources/TR3/Locations/routes.json | 16984 ++++++++++++++++ 8 files changed, 40424 insertions(+), 103 deletions(-) create mode 100644 Resources/trview/plugins/key_items/manifest.json create mode 100644 Resources/trview/plugins/key_items/plugin.lua diff --git a/Resources/trview/plugins/key_items/manifest.json b/Resources/trview/plugins/key_items/manifest.json new file mode 100644 index 000000000..c439c11cd --- /dev/null +++ b/Resources/trview/plugins/key_items/manifest.json @@ -0,0 +1,5 @@ +{ + "name": "Key Item Zones", + "author": "TRRando", + "description": "Show key item zones" +} diff --git a/Resources/trview/plugins/key_items/plugin.lua b/Resources/trview/plugins/key_items/plugin.lua new file mode 100644 index 000000000..9bc1bb54c --- /dev/null +++ b/Resources/trview/plugins/key_items/plugin.lua @@ -0,0 +1,512 @@ +LO_MODE = 0 +HI_MODE = 1 + +m_Ranges = {} +m_Ranges[1] = "Small" +m_Ranges[2] = "Medium" +m_Ranges[3] = "Large" + +m_ReturnPaths = {} +m_ReturnPaths[false] = "Off" +m_ReturnPaths[true] = "On" + +m_CurrentLevel = nil +m_FilterEnabled = false +m_ValidatedOnly = true +m_SelectedRange = 2 +m_UseReturnPaths = true +m_SelectedKeyItem = nil +m_KeyZones = {} + +m_KeyNames = {} +-- TR1 +m_KeyNames[1] = {} +m_KeyNames[1][11183] = "K1 Silver Key" +m_KeyNames[1][11143] = "P1 Gold Idol" +m_KeyNames[1][12177] = "P1 Cog (above pool)" +m_KeyNames[1][12242] = "P1 Cog (bridge)" +m_KeyNames[1][12241] = "P1 Cog (temple)" +m_KeyNames[1][14315] = "K1 Neptune Key" +m_KeyNames[1][14299] = "K2 Atlas Key" +m_KeyNames[1][14290] = "K3 Damocles Key" +m_KeyNames[1][14280] = "K4 Thor Key" +m_KeyNames[1][15217] = "K1 Rusty Key" +m_KeyNames[1][16178] = "Lead Bar (fire)" +m_KeyNames[1][16157] = "Lead Bar (spikes)" +m_KeyNames[1][16166] = "Lead Bar (temple)" +m_KeyNames[1][17245] = "K1 Gold Key" +m_KeyNames[1][17208] = "K2 Silver Key (behind door)" +m_KeyNames[1][17231] = "K2 Silver Key (between doors)" +m_KeyNames[1][17295] = "K3 Rusty Key (main room)" +m_KeyNames[1][17143] = "K3 Rusty Key (near Pierre)" +m_KeyNames[1][18389] = "K1 Gold Key (Pierre)" +m_KeyNames[1][18133] = "K1 Gold Key (flip map)" +m_KeyNames[1][18277] = "K2 Rusty Key (boulders)" +m_KeyNames[1][18267] = "K2 Rusty Key (clang-clang)" +m_KeyNames[1][19193] = "K1 Sapphire Key (end)" +m_KeyNames[1][19217] = "K1 Sapphire Key (start)" +m_KeyNames[1][20213] = "K1 Sapphire Key (alt ending)" +m_KeyNames[1][20308] = "K1 Sapphire Key (start)" +m_KeyNames[1][20160] = "P1 Eye of Horus" +m_KeyNames[1][20151] = "P2 Scarab" +m_KeyNames[1][20152] = "P3 Seal of Anubis" +m_KeyNames[1][20163] = "P4 Ankh" +m_KeyNames[1][21191] = "K1 Gold Key" +m_KeyNames[1][21196] = "P1 Ankh (after key)" +m_KeyNames[1][21100] = "P1 Ankh (behind Sphinx)" +m_KeyNames[1][21202] = "P2 Scarab" +m_KeyNames[1][22137] = "K1 Rusty Key" +m_KeyNames[1][22160] = "P1 Fuse (boulders)" +m_KeyNames[1][22183] = "P1 Fuse (conveyor)" +m_KeyNames[1][22148] = "P1 Fuse (Cowboy)" +m_KeyNames[1][22146] = "P1 Fuse (Cowboy, alt)" +m_KeyNames[1][22216] = "P2 Pyramid Key" + +-- TR2 +m_KeyNames[2] = {} +m_KeyNames[2][10291] = "K1 Guardhouse Key" +m_KeyNames[2][10250] = "K2 Rusty Key" +m_KeyNames[2][11210] = "K1 Boathouse Key" +m_KeyNames[2][11353] = "K2 Steel Key" +m_KeyNames[2][11502] = "K3 Iron Key" +m_KeyNames[2][12241] = "K1 Library Key" +m_KeyNames[2][12385] = "K2 Detonator Key" +m_KeyNames[2][13449] = "K1 Ornate Key (fan area)" +m_KeyNames[2][13544] = "K1 Ornate Key (start)" +m_KeyNames[2][13395] = "P1 Relay Box" +m_KeyNames[2][13377] = "P3 Circuit Board" +m_KeyNames[2][14238] = "K1 Red Pass Card" +m_KeyNames[2][14193] = "K2 Yellow Pass Card" +m_KeyNames[2][14240] = "K3 Green Pass Card" +m_KeyNames[2][15250] = "K1 Red Pass Card" +m_KeyNames[2][15301] = "K4 Blue Pass Card" +m_KeyNames[2][15299] = "P1 Machine Chip (helicopter area)" +m_KeyNames[2][15206] = "P1 Machine Chip (middle room)" +m_KeyNames[2][17407] = "K1 Rest Room Key" +m_KeyNames[2][17343] = "K2 Rusty Key" +m_KeyNames[2][17324] = "K3 Cabin Key" +m_KeyNames[2][17298] = "P1 Circuit Breaker (rest room area)" +m_KeyNames[2][17349] = "P1 Circuit Breaker (shard room)" +m_KeyNames[2][17304] = "P1 Circuit Breaker (staircase)" +m_KeyNames[2][18300] = "K1 Theatre Key" +m_KeyNames[2][19368] = "K2 Stern Key" +m_KeyNames[2][19385] = "K3 Storage Key" +m_KeyNames[2][19262] = "K4 Cabin Key" +m_KeyNames[2][19400] = "P4 The Seraph" +m_KeyNames[2][20379] = "K1 Drawbridge Key" +m_KeyNames[2][20348] = "K2 Hut Key" +m_KeyNames[2][21328] = "K1 Strongroom Key" +m_KeyNames[2][21501] = "K2 Trapdoor Key" +m_KeyNames[2][21225] = "K3 Rooftops Key" +m_KeyNames[2][21464] = "K4 Main Hall Key" +m_KeyNames[2][21306] = "P1 Prayer Wheel (burner room)" +m_KeyNames[2][21415] = "P1 Prayer Wheel (ladder tower)" +m_KeyNames[2][21431] = "P1 Prayer Wheel (outside area)" +m_KeyNames[2][21485] = "P1 Prayer Wheel (pool area)" +m_KeyNames[2][21330] = "P1 Prayer Wheel (rooftops)" +m_KeyNames[2][21338] = "P3 Gemstone (east)" +m_KeyNames[2][21332] = "P3 Gemstone (west)" +m_KeyNames[2][21273] = "P4 The Seraph" +m_KeyNames[2][22222] = "P1 Tibetan Mask (start)" +m_KeyNames[2][22357] = "P1 Tibetan Mask (underwater)" +m_KeyNames[2][22342] = "Q1 Gong Hammer (easter egg)" +m_KeyNames[2][23315] = "K2 Gong Hammer" +m_KeyNames[2][23379] = "P1 Tibetan Mask" +m_KeyNames[2][23503] = "Q2 Talion" +m_KeyNames[2][24427] = "K2 Gold Key" +m_KeyNames[2][24582] = "K3 Silver Key" +m_KeyNames[2][24436] = "K4 Main Chamber Key" +m_KeyNames[2][24387] = "P1 The Dragon Seal" +m_KeyNames[2][25443] = "P1 Mystic Plaque (alt ending)" +m_KeyNames[2][25232] = "P1 Mystic Plaque (west)" +m_KeyNames[2][25160] = "P3 Mystic Plaque (east)" +m_KeyNames[2][26145] = "P1 Mystic Plaque" + +-- TR3 +m_KeyNames[3] = {} +m_KeyNames[3][10590] = "K4 Indra Key" +m_KeyNames[3][11723] = "K1 Key of Ganesha (current pool)" +m_KeyNames[3][11641] = "K1 Key of Ganesha (flipmap pool)" +m_KeyNames[3][11539] = "K1 Key of Ganesha (mudslide)" +m_KeyNames[3][11708] = "K1 Key of Ganesha (Randy/Rory)" +m_KeyNames[3][11692] = "K1 Key of Ganesha (spike ceiling)" +m_KeyNames[3][11636] = "P1 Scimitar (east)" +m_KeyNames[3][11648] = "P2 Scimitar (west)" +m_KeyNames[3][12425] = "K1 Gate Key (monkey pit)" +m_KeyNames[3][12258] = "K1 Gate Key (snake pit)" +m_KeyNames[3][14300] = "K1 Smuggler's Key" +m_KeyNames[3][14447] = "P1 Serpent Stone (above pool)" +m_KeyNames[3][14440] = "P1 Serpent Stone (treetops)" +m_KeyNames[3][14252] = "P1 Serpent Stone (waterfall)" +m_KeyNames[3][15364] = "K1 Commander Bishop's Key" +m_KeyNames[3][15278] = "K2 Lt. Tuckerman's Key" +m_KeyNames[3][18524] = "K1 Flue Room Key" +m_KeyNames[3][18161] = "K2 Cathedral Key" +m_KeyNames[3][19279] = "K1 Maintenance Key" +m_KeyNames[3][19362] = "K2 Solomon's Key (door puzzle)" +m_KeyNames[3][19239] = "K3 Solomon's Key (drill shaft)" +m_KeyNames[3][19343] = "P1 Old Coin" +m_KeyNames[3][19302] = "P2 Ticket" +m_KeyNames[3][19465] = "P3 Hammer" +m_KeyNames[3][19448] = "P4 Ornate Star" +m_KeyNames[3][20447] = "K1 Boiler Room Key" +m_KeyNames[3][20240] = "P1 Embalming Fluid" +m_KeyNames[3][22578] = "K1 Generator Access Card" +m_KeyNames[3][22359] = "K2 Detonator Key" +m_KeyNames[3][22419] = "K2 Detonator Key (unused)" +m_KeyNames[3][23260] = "K1 Keycard Type A" +m_KeyNames[3][23490] = "K2 Keycard Type B (satellite dish tower)" +m_KeyNames[3][23454] = "K2 Keycard Type B (turret area)" +m_KeyNames[3][23352] = "P1 Blue Security Pass" +m_KeyNames[3][23322] = "P2 Yellow Security Pass (end)" +m_KeyNames[3][23537] = "P2 Yellow Security Pass (hangar access)" +m_KeyNames[3][23463] = "P2 Yellow Security Pass (satellite dish tower)" +m_KeyNames[3][24433] = "K1 Launch Code Card" +m_KeyNames[3][24322] = "P2 Code CD (silo)" +m_KeyNames[3][24253] = "P3 Code CD (watchtower)" +m_KeyNames[3][24434] = "P4 Hangar Access Pass" +m_KeyNames[3][25526] = "K1 Hut Key" +m_KeyNames[3][25374] = "P1 Crowbar (gate control)" +m_KeyNames[3][25456] = "P1 Crowbar (regular)" +m_KeyNames[3][25371] = "P1 Crowbar (tower)" +m_KeyNames[3][25446] = "P2 Gate Control Key" +m_KeyNames[3][26679] = "P1 Crowbar" +m_KeyNames[3][26444] = "P2 Lead Acid Battery" +m_KeyNames[3][26509] = "P3 Winch Starter" +m_KeyNames[3][27686] = "K1 Uli Key (end)" +m_KeyNames[3][27269] = "K1 Uli Key (start)" +m_KeyNames[3][27421] = "P1 Oceanic Mask (earth)" +m_KeyNames[3][27449] = "P1 Oceanic Mask (fire)" +m_KeyNames[3][27395] = "P1 Oceanic Mask (water)" +m_KeyNames[3][27368] = "P1 Oceanic Mask (wind)" +m_KeyNames[3][29220] = "K1 Vault Key" + +function select_key_item(id) + m_SelectedKeyItem = id + if m_FilterEnabled then + select_zones() + update_filter() + end +end + +function select_quick_view(range, return_paths) + m_SelectedRange = range + m_UseReturnPaths = return_paths + + select_zones() + if m_FilterEnabled then + update_filter() + end +end + +function select_zones() + if not m_FilterEnabled or m_SelectedKeyItem == nil then + return + end + + local matches = 0 + for _, zone in pairs(m_KeyZones[m_SelectedKeyItem]) do + local wp = trview.route.waypoints[zone.low] + zone.selected = wp.randomizer_settings.Range == m_Ranges[m_SelectedRange] + and wp.randomizer_settings.RequiresReturnPath == m_UseReturnPaths + if zone.selected then + matches = matches + 1 + end + end + + if matches == 0 then + for _, zone in pairs(m_KeyZones[m_SelectedKeyItem]) do + zone.selected = true + break + end + end +end + +function select_zone(zone) + for _, z in pairs(m_KeyZones[m_SelectedKeyItem]) do + z.selected = z == zone + if z.selected then + local wp = trview.route.waypoints[zone.low] + for range_id, range_desc in pairs(m_Ranges) do + if range_desc == wp.randomizer_settings.Range then + m_SelectedRange = range_id + end + end + m_UseReturnPaths = wp.randomizer_settings.RequiresReturnPath + end + end + + if m_FilterEnabled then + update_filter() + end +end + +function show_wp_room(idx, low_idx) + local wp = trview.route.waypoints[idx] + local low_wp = trview.route.waypoints[low_idx] + if (m_ValidatedOnly and not wp.randomizer_settings.Validated) + or (wp.randomizer_settings.RoomType == "ReturnPath" and not low_wp.randomizer_settings.RequiresReturnPath) then + return + end + + local room = trview.level.rooms[wp.room_number + 1] + if room ~= nil then + room.visible = true + end +end + +function update_filter() + if trview.level == nil then return end + + for _, r in pairs(trview.level.rooms) do + r.visible = not m_FilterEnabled + end + + if not m_FilterEnabled or m_SelectedKeyItem == nil then + return + end + + for _, zone in pairs(m_KeyZones[m_SelectedKeyItem]) do + if zone.selected then + local high = zone.high + if high == -1 then + -- Zone extends to EOL + high = #trview.route.waypoints + else + local wp = trview.route.waypoints[high] + local exc_room = wp.room_number + while wp.room_number == exc_room and high > 0 do + high = high - 1 + wp = trview.route.waypoints[high] + end + end + + for i = zone.low, high, 1 do + show_wp_room(i, zone.low) + end + end + end +end + +function show_unzoned_rooms() + if trview.level == nil then return end + + for _, r in pairs(trview.level.rooms) do + r.visible = true + end + + for _, wp in pairs(trview.route.waypoints) do + local room = trview.level.rooms[wp.room_number + 1] + if room ~= nil then + room.visible = false + end + end +end + +function update_key_items() + if trview.level == nil or trview.level.version > 3 then + return + end + + m_KeyZones = {} + + for _, wp in pairs(trview.route.waypoints) do + for id in string.gmatch(wp.randomizer_settings.KeyItemsLow, '([^,]+)') do + local key_id = tonumber(id) + m_KeyZones[key_id] = {} + + for _, range in pairs(m_Ranges) do + for paths, _ in pairs(m_ReturnPaths) do + build_key_zones(key_id, range, paths) + end + end + end + end +end + +function ordered_key_items() + local keys = {} + for k in pairs(m_KeyZones) do + keys[#keys+1] = k + end + + table.sort(keys, function(a,b) + return string.lower(get_key_name(a)) < string.lower(get_key_name(b)) + end) + + local i = 0 + return function() + i = i + 1 + if keys[i] then + return keys[i], m_KeyZones[keys[i]] + end + end +end + +function build_key_zones(key_id, range, paths) + local zone = {} + for idx, wp in pairs(trview.route.waypoints) do + if test_waypoint(wp, LO_MODE, key_id, range, paths) then + zone = {} + zone.low = idx + zone.high = -1 + zone.selected = false + table.insert(m_KeyZones[key_id], zone) + end + + if test_waypoint(wp, HI_MODE, key_id, range, paths) then + zone.high = idx + end + end +end + +function test_waypoint(wp, mode, key_id, range, paths) + local key_ids = nil + if mode == LO_MODE then + key_ids = wp.randomizer_settings.KeyItemsLow + else + key_ids = wp.randomizer_settings.KeyItemsHigh + end + + if not string.find(key_ids, tostring(key_id)) then + return false + end + + if wp.randomizer_settings.Range ~= range then + return false + end + + return (wp.randomizer_settings.RequiresReturnPath and paths) + or (not wp.randomizer_settings.RequiresReturnPath and not paths) +end + +function get_quick_label(range_id, return_path_id) + return m_Ranges[range_id] .. "/" .. m_ReturnPaths[return_path_id] +end + +function get_key_name(id) + if m_KeyNames[trview.level.version][id] ~= nil then + return m_KeyNames[trview.level.version][id] + end + return "Unknown" +end + +function get_high_wp_name(zone) + if zone.high < 0 then + return "N/A" + end + return tostring(zone.high - 1) +end + +function refresh() + if m_CurrentLevel ~= trview.level.filename then + m_FilterEnabled = false + m_SelectedKeyItem = nil + update_key_items() + m_CurrentLevel = trview.level.filename + end +end + +function render_ui() + if trview.level == nil or trview.level.version > 3 then + return + end + + refresh() + + if (ImGui.Begin { name = "Key Item Zones", flags = ImGui.WindowFlags.AlwaysAutoResize }) then + local filter_changed = false + filter_changed, m_FilterEnabled = ImGui.Checkbox({ label = "Show zoning", checked = m_FilterEnabled }) + + local valid_changed = false + ImGui.SameLine() + valid_changed, m_ValidatedOnly = ImGui.Checkbox({ label = "Validated", checked = m_ValidatedOnly }) + + ImGui.SameLine() + if ImGui.Button({ label = "Unzoned" }) then + show_unzoned_rooms() + end + + ImGui.SameLine() + if ImGui.Button({ label = "Refresh" }) then + update_key_items() + end + + if (filter_changed or valid_changed) then + select_zones() + update_filter() + end + + if ImGui.BeginCombo({ label = "Quick View", preview_value = get_quick_label(m_SelectedRange, m_UseReturnPaths) }) then + for range_id, _ in pairs(m_Ranges) do + for rp_id, _ in pairs(m_ReturnPaths) do + if (ImGui.Selectable( + { + label = get_quick_label(range_id, rp_id), + selected = range_id == m_SelectedRange and rp_id == m_UseReturnPaths, + flags = ImGui.SelectableFlags.SelectOnNav + })) then + select_quick_view(range_id, rp_id) + end + end + end + ImGui.EndCombo() + end + + if ImGui.BeginTable({ id = "Key Items", column = 2 }) then + ImGui.TableSetupColumn({ label = "Key Item" }) + ImGui.TableSetupColumn({ label = "Description" }) + ImGui.TableSetupScrollFreeze({ cols = 1, rows = 1 }) + ImGui.TableHeadersRow() + + for id, _ in ordered_key_items() do + ImGui.TableNextColumn() + if (ImGui.Selectable( + { + label = tostring(id), + selected = id == m_SelectedKeyItem, + flags = ImGui.SelectableFlags.SpanAllColumns | ImGui.SelectableFlags.SelectOnNav + })) then + select_key_item(id) + end + ImGui.TableNextColumn() + ImGui.Text({text = get_key_name(id)}) + + end + ImGui.EndTable() + end + + if m_SelectedKeyItem ~= nil and ImGui.BeginTable({ id = "Zones", column = 4 }) then + ImGui.TableSetupColumn({ label = "Low WP" }) + ImGui.TableSetupColumn({ label = "High WP" }) + ImGui.TableSetupColumn({ label = "Range" }) + ImGui.TableSetupColumn({ label = "Return Paths" }) + ImGui.TableSetupScrollFreeze({ cols = 1, rows = 1 }) + ImGui.TableHeadersRow() + + for _, zone in pairs(m_KeyZones[m_SelectedKeyItem]) do + local wp = trview.route.waypoints[zone.low] + ImGui.TableNextColumn() + if (ImGui.Selectable( + { + label = tostring(zone.low - 1), + selected = zone.selected, + flags = ImGui.SelectableFlags.SpanAllColumns | ImGui.SelectableFlags.SelectOnNav + })) then + select_zone(zone) + end + ImGui.TableNextColumn() + ImGui.Text({ text = get_high_wp_name(zone) }) + ImGui.TableNextColumn() + ImGui.Text({ text = tostring(wp.randomizer_settings.Range) }) + ImGui.TableNextColumn() + ImGui.Text({ text = m_ReturnPaths[wp.randomizer_settings.RequiresReturnPath] }) + end + ImGui.EndTable() + end + end + ImGui.End() +end + +update_key_items() +print("Rando key item zoning loaded") diff --git a/TRRandomizerCore/Resources/TR1/Locations/invalid_item_locations.json b/TRRandomizerCore/Resources/TR1/Locations/invalid_item_locations.json index e2fe5abb0..85fc5d213 100644 --- a/TRRandomizerCore/Resources/TR1/Locations/invalid_item_locations.json +++ b/TRRandomizerCore/Resources/TR1/Locations/invalid_item_locations.json @@ -223,6 +223,19 @@ "Z": 10752, "Room": 61 }, + { + "X": 39424, + "Y": -2048, + "Z": 75264, + "Room": 1, + "TargetType": 1 + }, + { + "X": 43520, + "Y": 384, + "Z": 68096, + "Room": 24 + }, { "X": 33280, "Y": -5120, @@ -828,20 +841,26 @@ "Y": 19968, "Z": 42496, "Room": 19 + }, + { + "X": 57856, + "Y": 19200, + "Z": 40448, + "Room": 25 } ], "LEVEL5.PHD": [ { - "X": 75264, - "Y": -4480, - "Z": 51712, - "Room": 10 + "X": 59904, + "Y": -4608, + "Z": 65024, + "Room": 42 }, { "X": 59904, "Y": -4608, - "Z": 66048, - "Room": 42 + "Z": 64000, + "Room": 41 } ], "LEVEL6.PHD": [ @@ -1032,6 +1051,12 @@ "Y": -5376, "Z": 59904, "Room": 24 + }, + { + "X": 37376, + "Y": -5376, + "Z": 48640, + "Room": 8 } ], "LEVEL7B.PHD": [ @@ -1052,6 +1077,27 @@ "Y": -2688, "Z": 58880, "Room": 78 + }, + { + "X": 40448, + "Y": -3840, + "Z": 67072, + "Room": 75, + "TargetType": 1 + }, + { + "X": 40448, + "Y": -3840, + "Z": 68096, + "Room": 75, + "TargetType": 1 + }, + { + "X": 40448, + "Y": -3840, + "Z": 69120, + "Room": 75, + "TargetType": 1 } ], "LEVEL8A.PHD": [ @@ -1238,6 +1284,12 @@ "Y": -4352, "Z": 35328, "Room": 41 + }, + { + "X": 57856, + "Y": -256, + "Z": 28160, + "Room": 42 } ], "LEVEL8B.PHD": [ @@ -1248,6 +1300,48 @@ "Room": 14, "InvalidatesRoom": true }, + { + "X": 54784, + "Y": 0, + "Z": 59904, + "Room": 32, + "TargetType": 1 + }, + { + "X": 54784, + "Y": 0, + "Z": 58880, + "Room": 32, + "TargetType": 1 + }, + { + "X": 54784, + "Y": 0, + "Z": 57856, + "Room": 32, + "TargetType": 1 + }, + { + "X": 54784, + "Y": 0, + "Z": 56832, + "Room": 32, + "TargetType": 1 + }, + { + "X": 54784, + "Y": 0, + "Z": 55808, + "Room": 32, + "TargetType": 1 + }, + { + "X": 54784, + "Y": 0, + "Z": 54784, + "Room": 32, + "TargetType": 1 + }, { "X": 44544, "Y": -4480, @@ -1552,6 +1646,20 @@ "Z": 28160, "Room": 33 }, + { + "X": 53760, + "Y": -5632, + "Z": 25088, + "Room": 3, + "TargetType": 1 + }, + { + "X": 53760, + "Y": -7168, + "Z": 24064, + "Room": 3, + "TargetType": 1 + }, { "X": 56832, "Y": -9984, @@ -1642,6 +1750,24 @@ "Z": 98816, "Room": 60 }, + { + "X": 69120, + "Y": 3328, + "Z": 96768, + "Room": 60 + }, + { + "X": 69120, + "Y": 3328, + "Z": 98816, + "Room": 60 + }, + { + "X": 72192, + "Y": 3328, + "Z": 97792, + "Room": 59 + }, { "X": 57856, "Y": -11264, @@ -1731,6 +1857,12 @@ "Y": -3840, "Z": 44544, "Room": 13 + }, + { + "X": 49664, + "Y": -3840, + "Z": 44544, + "Room": 10 } ], "LEVEL10B.PHD": [ diff --git a/TRRandomizerCore/Resources/TR1/Locations/routes.json b/TRRandomizerCore/Resources/TR1/Locations/routes.json index 7a73a41bf..795548ddc 100644 --- a/TRRandomizerCore/Resources/TR1/Locations/routes.json +++ b/TRRandomizerCore/Resources/TR1/Locations/routes.json @@ -1,2 +1,8105 @@ { + "LEVEL1.PHD": [ + { + "X": 75264, + "Y": 3072, + "Z": 6656, + "Room": 0 + }, + { + "X": 75264, + "Y": 3072, + "Z": 28160, + "Room": 6 + }, + { + "X": 81408, + "Y": 2432, + "Z": 32256, + "Room": 4 + }, + { + "X": 86528, + "Y": 3072, + "Z": 32256, + "Room": 5 + }, + { + "X": 89600, + "Y": 1024, + "Z": 38400, + "Room": 36 + }, + { + "X": 78336, + "Y": 128, + "Z": 37376, + "Room": 2 + }, + { + "X": 74240, + "Y": 0, + "Z": 46592, + "Room": 3 + }, + { + "X": 69120, + "Y": -2560, + "Z": 51712, + "Room": 28 + }, + { + "X": 78336, + "Y": 0, + "Z": 58880, + "Room": 1 + }, + { + "X": 72192, + "Y": 128, + "Z": 64000, + "Room": 7 + }, + { + "X": 66048, + "Y": 1664, + "Z": 62976, + "Room": 8 + }, + { + "X": 53760, + "Y": 7424, + "Z": 57856, + "Room": 9 + }, + { + "X": 43520, + "Y": 7168, + "Z": 56832, + "Room": 10 + }, + { + "X": 39424, + "Y": 4352, + "Z": 50688, + "Room": 29 + }, + { + "X": 34304, + "Y": 4352, + "Z": 48640, + "Room": 12 + }, + { + "X": 30208, + "Y": 4352, + "Z": 48640, + "Room": 13 + }, + { + "X": 29184, + "Y": 4608, + "Z": 57856, + "Room": 14 + }, + { + "X": 20992, + "Y": 6656, + "Z": 58880, + "Room": 16 + }, + { + "X": 19968, + "Y": 4352, + "Z": 46592, + "Room": 15 + }, + { + "X": 11776, + "Y": 3840, + "Z": 57856, + "Room": 21 + }, + { + "X": 7680, + "Y": 3712, + "Z": 64000, + "Room": 20 + }, + { + "X": 7680, + "Y": 7040, + "Z": 67072, + "Room": 19 + }, + { + "X": 11776, + "Y": 6656, + "Z": 59904, + "Room": 18 + }, + { + "X": 15872, + "Y": 6656, + "Z": 58880, + "Room": 17 + }, + { + "X": 8704, + "Y": 4096, + "Z": 70144, + "Room": 22 + }, + { + "X": 8704, + "Y": 3840, + "Z": 73216, + "Room": 23 + }, + { + "X": 8704, + "Y": 5632, + "Z": 80384, + "Room": 25 + }, + { + "X": 8704, + "Y": 5888, + "Z": 82432, + "Room": 26 + }, + { + "X": 8704, + "Y": 7168, + "Z": 87552, + "Room": 27 + }, + { + "X": 14848, + "Y": 7168, + "Z": 95744, + "Room": 37 + }, + { + "X": 27136, + "Y": 6400, + "Z": 89600, + "Room": 31 + }, + { + "X": 34304, + "Y": 4864, + "Z": 90624, + "Room": 34 + }, + { + "X": 34304, + "Y": 2048, + "Z": 76288, + "Room": 35 + }, + { + "X": 36352, + "Y": 4096, + "Z": 76288, + "Room": 32 + }, + { + "X": 39424, + "Y": 4352, + "Z": 62976, + "Room": 30 + }, + { + "X": 47616, + "Y": 4352, + "Z": 62976, + "Room": 33 + }, + { + "X": 43520, + "Y": 7168, + "Z": 66048, + "Room": 24 + }, + { + "X": 43520, + "Y": 7168, + "Z": 82432, + "Room": 11 + } + ], + "LEVEL2.PHD": [ + { + "X": 78592, + "Y": -1024, + "Z": 13824, + "Room": 90, + "KeyItemsLow": "11183" + }, + { + "X": 78336, + "Y": -1024, + "Z": 13824, + "Room": 90, + "KeyItemsLow": "11183", + "Range": "Medium" + }, + { + "X": 78080, + "Y": -1024, + "Z": 13824, + "Room": 90, + "KeyItemsLow": "11183,11143", + "Range": "Large" + }, + { + "X": 78080, + "Y": -1024, + "Z": 14080, + "Room": 90, + "KeyItemsLow": "11183", + "RequiresReturnPath": true + }, + { + "X": 78336, + "Y": -1024, + "Z": 14080, + "Room": 90, + "KeyItemsLow": "11183", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 78592, + "Y": -1024, + "Z": 14080, + "Room": 90, + "KeyItemsLow": "11183,11143", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 78336, + "Y": -1024, + "Z": 15872, + "Room": 13 + }, + { + "X": 81408, + "Y": -1280, + "Z": 27136, + "Room": 12 + }, + { + "X": 81408, + "Y": -768, + "Z": 37376, + "Room": 11 + }, + { + "X": 73216, + "Y": -384, + "Z": 44544, + "Room": 6 + }, + { + "X": 56832, + "Y": 0, + "Z": 44544, + "Room": 5 + }, + { + "X": 56832, + "Y": 0, + "Z": 26112, + "Room": 4 + }, + { + "X": 54784, + "Y": 0, + "Z": 25088, + "Room": 34 + }, + { + "X": 57856, + "Y": -512, + "Z": 15872, + "Room": 7 + }, + { + "X": 67072, + "Y": 0, + "Z": 17920, + "Room": 20 + }, + { + "X": 67072, + "Y": 0, + "Z": 23040, + "Room": 15 + }, + { + "X": 62976, + "Y": 0, + "Z": 27136, + "Room": 8 + }, + { + "X": 74240, + "Y": 0, + "Z": 29184, + "Room": 31 + }, + { + "X": 75264, + "Y": 0, + "Z": 29184, + "Room": 85 + }, + { + "X": 77312, + "Y": 0, + "Z": 29184, + "Room": 91 + }, + { + "X": 77312, + "Y": 0, + "Z": 31232, + "Room": 93 + }, + { + "X": 77312, + "Y": 0, + "Z": 33280, + "Room": 92 + }, + { + "X": 77312, + "Y": -1536, + "Z": 33280, + "Room": 33 + }, + { + "X": 74240, + "Y": 0, + "Z": 34304, + "Room": 32 + }, + { + "X": 66048, + "Y": 0, + "Z": 38400, + "Room": 10 + }, + { + "X": 62976, + "Y": 0, + "Z": 37376, + "Room": 9 + }, + { + "X": 61952, + "Y": 0, + "Z": 38400, + "Room": 18 + }, + { + "X": 61952, + "Y": 0, + "Z": 39424, + "Room": 16 + }, + { + "X": 59904, + "Y": -1792, + "Z": 39424, + "Room": 24 + }, + { + "X": 59904, + "Y": -2048, + "Z": 38400, + "Room": 25 + }, + { + "X": 59904, + "Y": -2048, + "Z": 35328, + "Room": 23 + }, + { + "X": 59904, + "Y": 1024, + "Z": 30208, + "Room": 19 + }, + { + "X": 59904, + "Y": -1024, + "Z": 30208, + "Room": 17 + }, + { + "X": 59904, + "Y": -1024, + "Z": 29184, + "Room": 35 + }, + { + "X": 60928, + "Y": 1024, + "Z": 29184, + "Room": 0 + }, + { + "X": 60928, + "Y": 1024, + "Z": 25088, + "Room": 14 + }, + { + "X": 61952, + "Y": -1280, + "Z": 20992, + "Room": 1 + }, + { + "X": 65024, + "Y": -2048, + "Z": 19968, + "Room": 2 + }, + { + "X": 70144, + "Y": -1024, + "Z": 20992, + "Room": 21 + }, + { + "X": 70144, + "Y": -768, + "Z": 22016, + "Room": 3 + }, + { + "X": 69120, + "Y": 2176, + "Z": 31232, + "Room": 30, + "KeyItemsHigh": "11183" + }, + { + "X": 69390, + "Y": 2309, + "Z": 31239, + "Room": 30, + "KeyItemsHigh": "11183", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": 8064, + "Z": 30208, + "Room": 28 + }, + { + "X": 80384, + "Y": 2560, + "Z": 23040, + "Room": 26 + }, + { + "X": 78336, + "Y": 7936, + "Z": 40448, + "Room": 27 + }, + { + "X": 72192, + "Y": 5120, + "Z": 40448, + "Room": 22 + }, + { + "X": 68096, + "Y": 3072, + "Z": 40448, + "Room": 29 + }, + { + "X": 67072, + "Y": 3072, + "Z": 44544, + "Room": 88 + }, + { + "X": 54784, + "Y": 0, + "Z": 28416, + "Room": 40, + "KeyItemsHigh": "11183", + "KeyItemsLow": "11143", + "Range": "Medium" + }, + { + "X": 54784, + "Y": 0, + "Z": 28160, + "Room": 40, + "KeyItemsHigh": "11183", + "KeyItemsLow": "11143", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": 0, + "Z": 27904, + "Room": 40, + "KeyItemsHigh": "11183", + "Range": "Large" + }, + { + "X": 54528, + "Y": 0, + "Z": 27904, + "Room": 40, + "KeyItemsHigh": "11183", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 0, + "Z": 28160, + "Room": 37 + }, + { + "X": 47616, + "Y": -896, + "Z": 32256, + "Room": 38 + }, + { + "X": 46592, + "Y": -512, + "Z": 24064, + "Room": 39 + }, + { + "X": 40448, + "Y": 0, + "Z": 28160, + "Room": 36 + }, + { + "X": 30208, + "Y": -1024, + "Z": 27136, + "Room": 46, + "KeyItemsLow": "11143" + }, + { + "X": 29952, + "Y": -1024, + "Z": 27136, + "Room": 46, + "KeyItemsLow": "11143", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": -1536, + "Z": 27136, + "Room": 49 + }, + { + "X": 25088, + "Y": -1536, + "Z": 22016, + "Room": 47 + }, + { + "X": 27136, + "Y": -1536, + "Z": 22016, + "Room": 43 + }, + { + "X": 29184, + "Y": 256, + "Z": 22016, + "Room": 48 + }, + { + "X": 28160, + "Y": -3584, + "Z": 20992, + "Room": 50 + }, + { + "X": 28160, + "Y": -4096, + "Z": 18944, + "Room": 51 + }, + { + "X": 25088, + "Y": -4864, + "Z": 18944, + "Room": 52 + }, + { + "X": 27136, + "Y": -5632, + "Z": 23040, + "Room": 53 + }, + { + "X": 33280, + "Y": -6400, + "Z": 23040, + "Room": 57 + }, + { + "X": 31232, + "Y": -7680, + "Z": 18944, + "Room": 60 + }, + { + "X": 29184, + "Y": -7936, + "Z": 20992, + "Room": 58 + }, + { + "X": 29184, + "Y": -7936, + "Z": 25088, + "Room": 55 + }, + { + "X": 28160, + "Y": -5888, + "Z": 29184, + "Room": 54 + }, + { + "X": 30208, + "Y": -3200, + "Z": 29184, + "Room": 42 + }, + { + "X": 30208, + "Y": -1024, + "Z": 31232, + "Room": 45 + }, + { + "X": 28160, + "Y": -1280, + "Z": 32256, + "Room": 64 + }, + { + "X": 28160, + "Y": -1536, + "Z": 33280, + "Room": 63 + }, + { + "X": 28160, + "Y": 256, + "Z": 35328, + "Room": 62 + }, + { + "X": 27136, + "Y": -3328, + "Z": 36352, + "Room": 69 + }, + { + "X": 31232, + "Y": -4608, + "Z": 37376, + "Room": 65 + }, + { + "X": 31232, + "Y": -5632, + "Z": 36352, + "Room": 70 + }, + { + "X": 25088, + "Y": -5888, + "Z": 36352, + "Room": 83 + }, + { + "X": 27136, + "Y": -6912, + "Z": 39424, + "Room": 84 + }, + { + "X": 30208, + "Y": -7936, + "Z": 35328, + "Room": 67 + }, + { + "X": 29184, + "Y": -7936, + "Z": 32256, + "Room": 68 + }, + { + "X": 30208, + "Y": -1024, + "Z": 29184, + "Room": 44 + }, + { + "X": 24064, + "Y": -1024, + "Z": 29184, + "Room": 61 + }, + { + "X": 19968, + "Y": 3840, + "Z": 29184, + "Room": 77 + }, + { + "X": 15872, + "Y": 1024, + "Z": 31232, + "Room": 86 + }, + { + "X": 8704, + "Y": -1024, + "Z": 35328, + "Room": 66 + }, + { + "X": 12800, + "Y": -2048, + "Z": 37376, + "Room": 82 + }, + { + "X": 14848, + "Y": -2816, + "Z": 34304, + "Room": 81 + }, + { + "X": 13824, + "Y": -1024, + "Z": 32256, + "Room": 73 + }, + { + "X": 11776, + "Y": -1024, + "Z": 25088, + "Room": 74 + }, + { + "X": 9728, + "Y": -1536, + "Z": 25088, + "Room": 80 + }, + { + "X": 11776, + "Y": -2816, + "Z": 22016, + "Room": 79 + }, + { + "X": 11776, + "Y": -3072, + "Z": 16896, + "Room": 89 + }, + { + "X": 13824, + "Y": -2816, + "Z": 25088, + "Room": 76 + }, + { + "X": 13824, + "Y": -2816, + "Z": 27136, + "Room": 72 + }, + { + "X": 11776, + "Y": -1024, + "Z": 29184, + "Room": 71 + }, + { + "X": 10752, + "Y": -1024, + "Z": 29440, + "Room": 87, + "KeyItemsHigh": "11143" + }, + { + "X": 10752, + "Y": -1024, + "Z": 29184, + "Room": 87, + "KeyItemsHigh": "11143", + "RequiresReturnPath": true + }, + { + "X": 10752, + "Y": -1024, + "Z": 28928, + "Room": 87, + "KeyItemsHigh": "11143", + "Range": "Medium" + }, + { + "X": 10496, + "Y": -1024, + "Z": 28928, + "Room": 87, + "KeyItemsHigh": "11143", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 10496, + "Y": -1024, + "Z": 29184, + "Room": 87, + "KeyItemsHigh": "11143", + "Range": "Large" + }, + { + "X": 10496, + "Y": -1024, + "Z": 29440, + "Room": 87, + "KeyItemsHigh": "11143", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL3A.PHD": [ + { + "X": 27136, + "Y": -256, + "Z": 77312, + "Room": 0, + "KeyItemsLow": "12177,12241,12242", + "Range": "Medium" + }, + { + "X": 26880, + "Y": -256, + "Z": 77312, + "Room": 0, + "KeyItemsLow": "12177,12241,12242", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 26880, + "Y": -256, + "Z": 77056, + "Room": 0, + "KeyItemsLow": "12177,12241,12242", + "Range": "Large" + }, + { + "X": 27136, + "Y": -256, + "Z": 77056, + "Room": 0, + "KeyItemsLow": "12177,12241,12242", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": -256, + "Z": 76288, + "Room": 1 + }, + { + "X": 33280, + "Y": 0, + "Z": 72192, + "Room": 17 + }, + { + "X": 33280, + "Y": 768, + "Z": 70144, + "Room": 24 + }, + { + "X": 39424, + "Y": 6912, + "Z": 65024, + "Room": 23 + }, + { + "X": 37376, + "Y": 4864, + "Z": 58880, + "Room": 29 + }, + { + "X": 37376, + "Y": 4864, + "Z": 51712, + "Room": 27 + }, + { + "X": 31232, + "Y": 6016, + "Z": 47616, + "Room": 16 + }, + { + "X": 30208, + "Y": 6912, + "Z": 40448, + "Room": 28 + }, + { + "X": 37376, + "Y": 2304, + "Z": 43520, + "Room": 30, + "KeyItemsLow": "12177,12241,12242" + }, + { + "X": 37632, + "Y": 2304, + "Z": 43520, + "Room": 30, + "KeyItemsLow": "12177,12241,12242", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": 3584, + "Z": 38400, + "Room": 51 + }, + { + "X": 41472, + "Y": 3584, + "Z": 28160, + "Room": 56 + }, + { + "X": 35328, + "Y": -2560, + "Z": 28160, + "Room": 34, + "Validated": false + }, + { + "X": 35328, + "Y": -2560, + "Z": 29184, + "Room": 6, + "Validated": false + }, + { + "X": 42496, + "Y": 3584, + "Z": 28160, + "Room": 57 + }, + { + "X": 30208, + "Y": 3328, + "Z": 22016, + "Room": 36 + }, + { + "X": 27136, + "Y": 2560, + "Z": 18944, + "Room": 37 + }, + { + "X": 29184, + "Y": 1920, + "Z": 8704, + "Room": 35 + }, + { + "X": 37376, + "Y": 3584, + "Z": 8704, + "Room": 31 + }, + { + "X": 35328, + "Y": -1920, + "Z": 5632, + "Room": 32, + "Validated": false + }, + { + "X": 34304, + "Y": -3200, + "Z": 13824, + "Room": 52, + "Validated": false + }, + { + "X": 38400, + "Y": 3584, + "Z": 11776, + "Room": 58 + }, + { + "X": 42496, + "Y": 3584, + "Z": 11776, + "Room": 60 + }, + { + "X": 31232, + "Y": 2304, + "Z": 13824, + "Room": 42 + }, + { + "X": 29184, + "Y": 1280, + "Z": 15872, + "Room": 41 + }, + { + "X": 29184, + "Y": 3328, + "Z": 4608, + "Room": 40 + }, + { + "X": 32256, + "Y": 5888, + "Z": 3584, + "Room": 38 + }, + { + "X": 42496, + "Y": 3584, + "Z": 7680, + "Room": 59 + }, + { + "X": 40448, + "Y": -512, + "Z": 2560, + "Room": 31 + }, + { + "X": 40448, + "Y": -512, + "Z": 1536, + "Room": 89 + }, + { + "X": 45568, + "Y": -3840, + "Z": 3584, + "Room": 53, + "Validated": false + }, + { + "X": 53760, + "Y": -5120, + "Z": 4608, + "Room": 39, + "Validated": false + }, + { + "X": 51712, + "Y": 3584, + "Z": 6656, + "Room": 61 + }, + { + "X": 61952, + "Y": 3584, + "Z": 7680, + "Room": 62 + }, + { + "X": 68096, + "Y": 1792, + "Z": 11776, + "Room": 63 + }, + { + "X": 70144, + "Y": 2048, + "Z": 11776, + "Room": 44 + }, + { + "X": 76288, + "Y": 6400, + "Z": 9728, + "Room": 47 + }, + { + "X": 80384, + "Y": 7936, + "Z": 9728, + "Room": 48 + }, + { + "X": 64000, + "Y": -1920, + "Z": 5632, + "Room": 65 + }, + { + "X": 66048, + "Y": -2560, + "Z": 11776, + "Room": 66 + }, + { + "X": 59904, + "Y": 3584, + "Z": 11776, + "Room": 33 + }, + { + "X": 49664, + "Y": -3328, + "Z": 17920, + "Room": 54, + "Validated": false + }, + { + "X": 46592, + "Y": -3840, + "Z": 20992, + "Room": 55, + "Validated": false + }, + { + "X": 52736, + "Y": -3584, + "Z": 19968, + "Room": 64, + "Validated": false + }, + { + "X": 60928, + "Y": 1024, + "Z": 22016, + "Room": 43 + }, + { + "X": 50688, + "Y": 2048, + "Z": 22016, + "Room": 57 + }, + { + "X": 35328, + "Y": -512, + "Z": 19968, + "Room": 58 + }, + { + "X": 38400, + "Y": -256, + "Z": 80384, + "Room": 3, + "KeyItemsHigh": "12177,12241,12242" + }, + { + "X": 38144, + "Y": -256, + "Z": 80384, + "Room": 3, + "KeyItemsHigh": "12177,12241,12242", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": -2176, + "Z": 85504, + "Room": 7 + }, + { + "X": 28160, + "Y": -2304, + "Z": 87552, + "Room": 8 + }, + { + "X": 37376, + "Y": -384, + "Z": 96768, + "Room": 9 + }, + { + "X": 42496, + "Y": -768, + "Z": 88576, + "Room": 11 + }, + { + "X": 40448, + "Y": 1536, + "Z": 87552, + "Room": 46 + }, + { + "X": 44544, + "Y": 1536, + "Z": 87552, + "Room": 12 + }, + { + "X": 47616, + "Y": 2816, + "Z": 87552, + "Room": 13 + }, + { + "X": 51712, + "Y": 3840, + "Z": 87552, + "Room": 15 + }, + { + "X": 53760, + "Y": 3584, + "Z": 80384, + "Room": 18 + }, + { + "X": 52736, + "Y": 3584, + "Z": 79360, + "Room": 19 + }, + { + "X": 46592, + "Y": 3584, + "Z": 80384, + "Room": 21 + }, + { + "X": 44544, + "Y": 2816, + "Z": 82432, + "Room": 22 + }, + { + "X": 43520, + "Y": 1280, + "Z": 79360, + "Room": 20 + }, + { + "X": 39424, + "Y": -3072, + "Z": 91648, + "Room": 5 + }, + { + "X": 35328, + "Y": 1664, + "Z": 90624, + "Room": 45 + }, + { + "X": 42752, + "Y": -2304, + "Z": 75264, + "Room": 14, + "KeyItemsHigh": "12177,12241,12242", + "Range": "Medium" + }, + { + "X": 42752, + "Y": -2304, + "Z": 75008, + "Room": 14, + "KeyItemsHigh": "12177,12241,12242", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -2304, + "Z": 75008, + "Room": 14, + "KeyItemsHigh": "12177,12241,12242", + "Range": "Large" + }, + { + "X": 42240, + "Y": -2304, + "Z": 75008, + "Room": 14, + "KeyItemsHigh": "12177,12241,12242", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": 4864, + "Z": 71168, + "Room": 49 + }, + { + "X": 39424, + "Y": 5760, + "Z": 75264, + "Room": 50 + } + ], + "LEVEL3B.PHD": [ + { + "X": 46592, + "Y": 6272, + "Z": 64000, + "Room": 19 + }, + { + "X": 55808, + "Y": 6656, + "Z": 61952, + "Room": 20 + }, + { + "X": 55808, + "Y": 6656, + "Z": 56832, + "Room": 21 + }, + { + "X": 55808, + "Y": 6656, + "Z": 51712, + "Room": 24 + }, + { + "X": 60928, + "Y": 6656, + "Z": 51712, + "Room": 25 + }, + { + "X": 62976, + "Y": 6656, + "Z": 51712, + "Room": 43 + }, + { + "X": 68096, + "Y": 8704, + "Z": 49664, + "Room": 27 + }, + { + "X": 68096, + "Y": 8704, + "Z": 52736, + "Room": 29 + }, + { + "X": 74240, + "Y": 7680, + "Z": 52736, + "Room": 30 + }, + { + "X": 72192, + "Y": 5376, + "Z": 51712, + "Room": 26 + }, + { + "X": 71168, + "Y": 2304, + "Z": 52736, + "Room": 45 + }, + { + "X": 69120, + "Y": 768, + "Z": 52736, + "Room": 48 + }, + { + "X": 68096, + "Y": 768, + "Z": 47616, + "Room": 50 + }, + { + "X": 65024, + "Y": 2560, + "Z": 47616, + "Room": 51 + }, + { + "X": 64000, + "Y": 5888, + "Z": 46592, + "Room": 49 + }, + { + "X": 66048, + "Y": 6656, + "Z": 46592, + "Room": 52 + }, + { + "X": 67072, + "Y": 5632, + "Z": 44544, + "Room": 53 + }, + { + "X": 74240, + "Y": 6656, + "Z": 45568, + "Room": 28 + }, + { + "X": 53760, + "Y": 6656, + "Z": 51712, + "Room": 36 + }, + { + "X": 50688, + "Y": 6656, + "Z": 48640, + "Room": 37 + }, + { + "X": 55808, + "Y": 6656, + "Z": 49664, + "Room": 31 + }, + { + "X": 56832, + "Y": 6656, + "Z": 41472, + "Room": 32 + }, + { + "X": 59904, + "Y": 10240, + "Z": 39424, + "Room": 33 + }, + { + "X": 59904, + "Y": 8192, + "Z": 46592, + "Room": 34 + }, + { + "X": 55808, + "Y": 4096, + "Z": 46592, + "Room": 35 + }, + { + "X": 55808, + "Y": 6656, + "Z": 66048, + "Room": 22 + }, + { + "X": 56832, + "Y": 6656, + "Z": 72192, + "Room": 39 + }, + { + "X": 65024, + "Y": 4608, + "Z": 75264, + "Room": 7 + }, + { + "X": 64000, + "Y": 6400, + "Z": 78336, + "Room": 4 + }, + { + "X": 73216, + "Y": 4608, + "Z": 72192, + "Room": 38 + }, + { + "X": 73216, + "Y": 3840, + "Z": 62976, + "Room": 5 + }, + { + "X": 68096, + "Y": 4480, + "Z": 61952, + "Room": 23 + }, + { + "X": 43520, + "Y": 5632, + "Z": 64000, + "Room": 18 + }, + { + "X": 43520, + "Y": 8576, + "Z": 55808, + "Room": 10 + }, + { + "X": 39424, + "Y": 7680, + "Z": 56832, + "Room": 17 + }, + { + "X": 31232, + "Y": 4096, + "Z": 56832, + "Room": 6 + }, + { + "X": 40448, + "Y": 4864, + "Z": 55808, + "Room": 11 + }, + { + "X": 42496, + "Y": 4736, + "Z": 46592, + "Room": 16 + }, + { + "X": 42496, + "Y": 4864, + "Z": 40448, + "Room": 14 + }, + { + "X": 36352, + "Y": 5632, + "Z": 38400, + "Room": 8 + }, + { + "X": 35328, + "Y": 6912, + "Z": 29184, + "Room": 15 + }, + { + "X": 38400, + "Y": 0, + "Z": 59904, + "Room": 9 + }, + { + "X": 38400, + "Y": -128, + "Z": 64000, + "Room": 1 + }, + { + "X": 37376, + "Y": -256, + "Z": 65024, + "Room": 0 + }, + { + "X": 41472, + "Y": 1152, + "Z": 66048, + "Room": 2 + }, + { + "X": 43520, + "Y": 1280, + "Z": 60928, + "Room": 13 + } + ], + "LEVEL4.PHD": [ + { + "X": 17920, + "Y": 0, + "Z": 40704, + "Room": 55, + "KeyItemsLow": "14315,14290,14280,14299", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 18176, + "Y": 0, + "Z": 40704, + "Room": 55, + "KeyItemsLow": "14315,14290,14280,14299", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": 0, + "Z": 39424, + "Room": 0 + }, + { + "X": 42496, + "Y": -768, + "Z": 39424, + "Room": 2 + }, + { + "X": 41472, + "Y": -2560, + "Z": 36352, + "Room": 36 + }, + { + "X": 41472, + "Y": -2816, + "Z": 43520, + "Room": 36 + }, + { + "X": 37376, + "Y": -3328, + "Z": 38400, + "Room": 1 + }, + { + "X": 30208, + "Y": -3328, + "Z": 34304, + "Room": 59 + }, + { + "X": 30208, + "Y": -3328, + "Z": 33280, + "Room": 58 + }, + { + "X": 29184, + "Y": -5632, + "Z": 32256, + "Room": 56 + }, + { + "X": 30208, + "Y": -8448, + "Z": 32256, + "Room": 52 + }, + { + "X": 24064, + "Y": -3072, + "Z": 38400, + "Room": 6 + }, + { + "X": 24064, + "Y": -1664, + "Z": 34304, + "Room": 5 + }, + { + "X": 35328, + "Y": 8064, + "Z": 34304, + "Room": 8 + }, + { + "X": 39424, + "Y": 8448, + "Z": 34304, + "Room": 11 + }, + { + "X": 40448, + "Y": 8448, + "Z": 34304, + "Room": 10 + }, + { + "X": 43520, + "Y": 8448, + "Z": 34304, + "Room": 15 + }, + { + "X": 41472, + "Y": 10752, + "Z": 33280, + "Room": 17 + }, + { + "X": 46592, + "Y": 10752, + "Z": 34304, + "Room": 14 + }, + { + "X": 44544, + "Y": 10752, + "Z": 34304, + "Room": 13 + }, + { + "X": 41472, + "Y": 13056, + "Z": 34560, + "Room": 12, + "KeyItemsLow": "14315,14290,14280,14299" + }, + { + "X": 41472, + "Y": 13056, + "Z": 34304, + "Room": 12, + "KeyItemsLow": "14315,14290,14280,14299", + "Range": "Medium" + }, + { + "X": 41472, + "Y": 13056, + "Z": 34048, + "Room": 12, + "KeyItemsLow": "14315,14290,14280,14299", + "Range": "Large" + }, + { + "X": 41216, + "Y": 13056, + "Z": 34048, + "Room": 12, + "KeyItemsLow": "14315,14290,14280,14299", + "RequiresReturnPath": true + }, + { + "X": 36352, + "Y": 13056, + "Z": 34304, + "Room": 9 + }, + { + "X": 33280, + "Y": 13056, + "Z": 34304, + "Room": 40 + }, + { + "X": 33280, + "Y": 12288, + "Z": 36352, + "Room": 41 + }, + { + "X": 32256, + "Y": 11008, + "Z": 41472, + "Room": 63, + "RoomType": "ReturnPath" + }, + { + "X": 30208, + "Y": 7424, + "Z": 40448, + "Room": 64, + "RoomType": "ReturnPath" + }, + { + "X": 30208, + "Y": 3840, + "Z": 42496, + "Room": 65, + "RoomType": "ReturnPath" + }, + { + "X": 27136, + "Y": 1280, + "Z": 45568, + "Room": 66, + "RoomType": "ReturnPath" + }, + { + "X": 25088, + "Y": 256, + "Z": 47616, + "Room": 67, + "RoomType": "ReturnPath" + }, + { + "X": 35328, + "Y": 11008, + "Z": 41472, + "Room": 18 + }, + { + "X": 38400, + "Y": 13568, + "Z": 40448, + "Room": 20 + }, + { + "X": 40448, + "Y": 15616, + "Z": 41472, + "Room": 21 + }, + { + "X": 38400, + "Y": 18176, + "Z": 41472, + "Room": 23 + }, + { + "X": 44544, + "Y": 18176, + "Z": 41472, + "Room": 62 + }, + { + "X": 46592, + "Y": 18432, + "Z": 41472, + "Room": 24 + }, + { + "X": 54784, + "Y": 19456, + "Z": 41472, + "Room": 25 + }, + { + "X": 59904, + "Y": 17152, + "Z": 37376, + "Room": 43 + }, + { + "X": 61952, + "Y": 14848, + "Z": 37376, + "Room": 16 + }, + { + "X": 62976, + "Y": 14848, + "Z": 42496, + "Room": 44 + }, + { + "X": 39424, + "Y": 20224, + "Z": 40448, + "Room": 3 + }, + { + "X": 41472, + "Y": 22016, + "Z": 36352, + "Room": 42 + }, + { + "X": 34304, + "Y": 19968, + "Z": 45568, + "Room": 61 + }, + { + "X": 33280, + "Y": 19968, + "Z": 45568, + "Room": 19 + }, + { + "X": 22016, + "Y": 19968, + "Z": 45568, + "Room": 38 + }, + { + "X": 18944, + "Y": 17152, + "Z": 45568, + "Room": 39 + }, + { + "X": 45568, + "Y": 16128, + "Z": 41472, + "Room": 48 + }, + { + "X": 49664, + "Y": 16128, + "Z": 46592, + "Room": 47 + }, + { + "X": 39424, + "Y": 11520, + "Z": 49664, + "Room": 4 + }, + { + "X": 39424, + "Y": 11264, + "Z": 52736, + "Room": 35 + }, + { + "X": 37376, + "Y": 30208, + "Z": 50688, + "Room": 31 + }, + { + "X": 37376, + "Y": 30208, + "Z": 52736, + "Room": 32 + }, + { + "X": 36352, + "Y": 28928, + "Z": 52736, + "Room": 53 + }, + { + "X": 38400, + "Y": 30208, + "Z": 55808, + "Room": 33 + }, + { + "X": 43520, + "Y": 23552, + "Z": 49664, + "Room": 60 + }, + { + "X": 30464, + "Y": 23296, + "Z": 38656, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299" + }, + { + "X": 30464, + "Y": 23296, + "Z": 38400, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299", + "RequiresReturnPath": true + }, + { + "X": 30464, + "Y": 23296, + "Z": 38144, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299", + "Range": "Medium" + }, + { + "X": 30208, + "Y": 23296, + "Z": 38144, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 23296, + "Z": 38400, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299", + "Range": "Large" + }, + { + "X": 30208, + "Y": 23296, + "Z": 38656, + "Room": 46, + "KeyItemsHigh": "14315,14290,14280,14299", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL5.PHD": [ + { + "X": 79360, + "Y": 0, + "Z": 34304, + "Room": 59, + "KeyItemsLow": "15217", + "Range": "Medium" + }, + { + "X": 79104, + "Y": 0, + "Z": 34304, + "Room": 59, + "KeyItemsLow": "15217", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 79104, + "Y": 0, + "Z": 34560, + "Room": 59, + "KeyItemsLow": "15217", + "Range": "Large" + }, + { + "X": 79360, + "Y": 0, + "Z": 34560, + "Room": 59, + "KeyItemsLow": "15217", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": -128, + "Z": 38400, + "Room": 4 + }, + { + "X": 82432, + "Y": 3072, + "Z": 43520, + "Room": 5 + }, + { + "X": 76288, + "Y": 4096, + "Z": 45568, + "Room": 3 + }, + { + "X": 73216, + "Y": 0, + "Z": 43520, + "Room": 8 + }, + { + "X": 65024, + "Y": 0, + "Z": 47616, + "Room": 30 + }, + { + "X": 65024, + "Y": -768, + "Z": 51712, + "Room": 33 + }, + { + "X": 65024, + "Y": -768, + "Z": 43520, + "Room": 17 + }, + { + "X": 65024, + "Y": 0, + "Z": 38400, + "Room": 6 + }, + { + "X": 58880, + "Y": -2560, + "Z": 38400, + "Room": 9 + }, + { + "X": 66048, + "Y": -2560, + "Z": 40448, + "Room": 10 + }, + { + "X": 61952, + "Y": -5120, + "Z": 40448, + "Room": 11 + }, + { + "X": 66048, + "Y": -5120, + "Z": 40448, + "Room": 12 + }, + { + "X": 77312, + "Y": -2560, + "Z": 49664, + "Room": 62 + }, + { + "X": 70144, + "Y": -2816, + "Z": 55808, + "Room": 2 + }, + { + "X": 66048, + "Y": -512, + "Z": 56832, + "Room": 87 + }, + { + "X": 62976, + "Y": -3968, + "Z": 53760, + "Room": 88 + }, + { + "X": 59904, + "Y": -3456, + "Z": 53760, + "Room": 7 + }, + { + "X": 60928, + "Y": -2048, + "Z": 49664, + "Room": 32 + }, + { + "X": 56832, + "Y": -2560, + "Z": 48896, + "Room": 73, + "KeyItemsLow": "15217" + }, + { + "X": 56832, + "Y": -2560, + "Z": 48640, + "Room": 73, + "KeyItemsLow": "15217", + "RequiresReturnPath": true + }, + { + "X": 56832, + "Y": -2560, + "Z": 47616, + "Room": 15 + }, + { + "X": 53760, + "Y": -3328, + "Z": 47616, + "Room": 79 + }, + { + "X": 51712, + "Y": -768, + "Z": 47616, + "Room": 64 + }, + { + "X": 44544, + "Y": -768, + "Z": 44544, + "Room": 63 + }, + { + "X": 39424, + "Y": -768, + "Z": 38400, + "Room": 20 + }, + { + "X": 38400, + "Y": -640, + "Z": 38400, + "Room": 69 + }, + { + "X": 34304, + "Y": 1280, + "Z": 38400, + "Room": 25 + }, + { + "X": 29184, + "Y": 1280, + "Z": 36352, + "Room": 1 + }, + { + "X": 31232, + "Y": 1280, + "Z": 42496, + "Room": 21 + }, + { + "X": 33280, + "Y": 1280, + "Z": 42496, + "Room": 35 + }, + { + "X": 36352, + "Y": 1152, + "Z": 40448, + "Room": 26 + }, + { + "X": 41472, + "Y": 1024, + "Z": 40448, + "Room": 85 + }, + { + "X": 45568, + "Y": 1024, + "Z": 40448, + "Room": 0 + }, + { + "X": 45568, + "Y": -768, + "Z": 48640, + "Room": 65 + }, + { + "X": 48640, + "Y": -768, + "Z": 48640, + "Room": 66 + }, + { + "X": 39424, + "Y": -768, + "Z": 51712, + "Room": 16 + }, + { + "X": 39424, + "Y": -768, + "Z": 56832, + "Room": 67 + }, + { + "X": 38400, + "Y": -384, + "Z": 57856, + "Room": 68 + }, + { + "X": 33280, + "Y": 512, + "Z": 57856, + "Room": 60 + }, + { + "X": 34304, + "Y": 1280, + "Z": 53760, + "Room": 61 + }, + { + "X": 34304, + "Y": 1280, + "Z": 52736, + "Room": 36 + }, + { + "X": 30208, + "Y": 1280, + "Z": 52736, + "Room": 22 + }, + { + "X": 28160, + "Y": 1280, + "Z": 50688, + "Room": 23 + }, + { + "X": 38400, + "Y": 1920, + "Z": 55808, + "Room": 28 + }, + { + "X": 42496, + "Y": 2816, + "Z": 55808, + "Room": 27 + }, + { + "X": 46592, + "Y": 2816, + "Z": 60928, + "Room": 29 + }, + { + "X": 43520, + "Y": -1536, + "Z": 59904, + "Room": 13 + }, + { + "X": 43520, + "Y": -3456, + "Z": 57856, + "Room": 19 + }, + { + "X": 39424, + "Y": -5120, + "Z": 62976, + "Room": 18 + }, + { + "X": 39424, + "Y": -3328, + "Z": 53760, + "Room": 18 + }, + { + "X": 39424, + "Y": -4608, + "Z": 49664, + "Room": 82 + }, + { + "X": 39424, + "Y": -4608, + "Z": 47616, + "Room": 81 + }, + { + "X": 37376, + "Y": -4096, + "Z": 47616, + "Room": 80 + }, + { + "X": 36352, + "Y": -3840, + "Z": 47616, + "Room": 24 + }, + { + "X": 32256, + "Y": -3840, + "Z": 47616, + "Room": 14 + }, + { + "X": 52736, + "Y": -3584, + "Z": 60928, + "Room": 74 + }, + { + "X": 50688, + "Y": -4608, + "Z": 64000, + "Room": 70 + }, + { + "X": 54784, + "Y": -4608, + "Z": 64000, + "Room": 71 + }, + { + "X": 58880, + "Y": -4608, + "Z": 64000, + "Room": 41 + }, + { + "X": 59904, + "Y": -4608, + "Z": 65024, + "Room": 42 + }, + { + "X": 59904, + "Y": -6016, + "Z": 68096, + "Room": 43 + }, + { + "X": 58880, + "Y": -8192, + "Z": 74240, + "Room": 44 + }, + { + "X": 54784, + "Y": -3840, + "Z": 60928, + "Room": 72 + }, + { + "X": 55808, + "Y": -4608, + "Z": 44544, + "Room": 76 + }, + { + "X": 55808, + "Y": -4608, + "Z": 33280, + "Room": 75 + }, + { + "X": 56832, + "Y": -4608, + "Z": 29184, + "Room": 45 + }, + { + "X": 57856, + "Y": -4608, + "Z": 24064, + "Room": 46 + }, + { + "X": 56832, + "Y": -6144, + "Z": 20992, + "Room": 47 + }, + { + "X": 56832, + "Y": -6912, + "Z": 23040, + "Room": 48 + }, + { + "X": 58880, + "Y": -7680, + "Z": 23040, + "Room": 49 + }, + { + "X": 58880, + "Y": -8448, + "Z": 20992, + "Room": 50 + }, + { + "X": 58880, + "Y": -8448, + "Z": 16896, + "Room": 51 + }, + { + "X": 52736, + "Y": -4608, + "Z": 32256, + "Room": 77 + }, + { + "X": 39424, + "Y": -4608, + "Z": 32256, + "Room": 84 + }, + { + "X": 36352, + "Y": -4608, + "Z": 32256, + "Room": 37 + }, + { + "X": 31232, + "Y": -6144, + "Z": 32256, + "Room": 52 + }, + { + "X": 29184, + "Y": -1920, + "Z": 31232, + "Room": 53 + }, + { + "X": 29184, + "Y": -6144, + "Z": 20992, + "Room": 56 + }, + { + "X": 30208, + "Y": -6144, + "Z": 18944, + "Room": 55 + }, + { + "X": 31232, + "Y": -5888, + "Z": 17920, + "Room": 54 + }, + { + "X": 35328, + "Y": -4608, + "Z": 34304, + "Room": 83 + }, + { + "X": 22016, + "Y": -2304, + "Z": 48640, + "Room": 57 + }, + { + "X": 35072, + "Y": -512, + "Z": 51456, + "Room": 38, + "KeyItemsHigh": "15217" + }, + { + "X": 35328, + "Y": -512, + "Z": 51456, + "Room": 38, + "KeyItemsHigh": "15217", + "RequiresReturnPath": true + }, + { + "X": 35584, + "Y": -512, + "Z": 51456, + "Room": 38, + "KeyItemsHigh": "15217", + "Range": "Medium" + }, + { + "X": 35584, + "Y": -512, + "Z": 51712, + "Room": 38, + "KeyItemsHigh": "15217", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": -512, + "Z": 51712, + "Room": 38, + "KeyItemsHigh": "15217", + "Range": "Large" + }, + { + "X": 35072, + "Y": -512, + "Z": 51712, + "Room": 38, + "KeyItemsHigh": "15217", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": -512, + "Z": 54784, + "Room": 39 + }, + { + "X": 35328, + "Y": -2304, + "Z": 62976, + "Room": 40 + }, + { + "X": 35328, + "Y": -256, + "Z": 72192, + "Room": 31 + } + ], + "LEVEL6.PHD": [ + { + "X": 50688, + "Y": -512, + "Z": 18944, + "Room": 0 + }, + { + "X": 50688, + "Y": 0, + "Z": 40448, + "Room": 10, + "KeyItemsLow": "16166,16178,16157", + "Range": "Medium" + }, + { + "X": 50432, + "Y": 0, + "Z": 40448, + "Room": 10, + "KeyItemsLow": "16166,16178,16157", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 50432, + "Y": 0, + "Z": 40704, + "Room": 10, + "KeyItemsLow": "16166,16178,16157", + "Range": "Large" + }, + { + "X": 50688, + "Y": 0, + "Z": 40704, + "Room": 10, + "KeyItemsLow": "16166,16178,16157", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 53760, + "Y": -2304, + "Z": 40448, + "Room": 11 + }, + { + "X": 53760, + "Y": -2048, + "Z": 33280, + "Room": 19 + }, + { + "X": 44544, + "Y": -2048, + "Z": 32256, + "Room": 13 + }, + { + "X": 44544, + "Y": -2048, + "Z": 45568, + "Room": 43 + }, + { + "X": 44544, + "Y": -2048, + "Z": 57856, + "Room": 44 + }, + { + "X": 31232, + "Y": -2048, + "Z": 57856, + "Room": 30 + }, + { + "X": 39424, + "Y": -4352, + "Z": 41472, + "Room": 9, + "KeyItemsLow": "16157,16178" + }, + { + "X": 39168, + "Y": -4352, + "Z": 41472, + "Room": 9, + "KeyItemsLow": "16157,16178", + "RequiresReturnPath": true + }, + { + "X": 29184, + "Y": -4352, + "Z": 41472, + "Room": 29 + }, + { + "X": 20992, + "Y": -4352, + "Z": 46592, + "Room": 34 + }, + { + "X": 23040, + "Y": -7424, + "Z": 49664, + "Room": 38 + }, + { + "X": 19968, + "Y": -7168, + "Z": 38400, + "Room": 37 + }, + { + "X": 16896, + "Y": -7424, + "Z": 38400, + "Room": 36 + }, + { + "X": 19968, + "Y": -7424, + "Z": 41472, + "Room": 32 + }, + { + "X": 16896, + "Y": -8448, + "Z": 46592, + "Room": 35 + }, + { + "X": 17920, + "Y": -4864, + "Z": 43520, + "Room": 33 + }, + { + "X": 24064, + "Y": -4352, + "Z": 51712, + "Room": 21 + }, + { + "X": 24064, + "Y": -4352, + "Z": 64000, + "Room": 23 + }, + { + "X": 23040, + "Y": -256, + "Z": 66048, + "Room": 22 + }, + { + "X": 23040, + "Y": -256, + "Z": 58880, + "Room": 24 + }, + { + "X": 31232, + "Y": -4352, + "Z": 35328, + "Room": 27 + }, + { + "X": 36352, + "Y": -4480, + "Z": 30208, + "Room": 42 + }, + { + "X": 40448, + "Y": -5376, + "Z": 29184, + "Room": 41 + }, + { + "X": 32256, + "Y": -6400, + "Z": 29184, + "Room": 28 + }, + { + "X": 31232, + "Y": -4352, + "Z": 47616, + "Room": 25 + }, + { + "X": 40448, + "Y": -4352, + "Z": 48640, + "Room": 62 + }, + { + "X": 42496, + "Y": -3840, + "Z": 45568, + "Room": 63 + }, + { + "X": 37376, + "Y": -2560, + "Z": 46592, + "Room": 64 + }, + { + "X": 42496, + "Y": -4864, + "Z": 53760, + "Room": 66 + }, + { + "X": 40448, + "Y": -6656, + "Z": 52736, + "Room": 65 + }, + { + "X": 35387, + "Y": -9220, + "Z": 53248, + "Room": 26 + }, + { + "X": 30208, + "Y": -8448, + "Z": 48640, + "Room": 54 + }, + { + "X": 30208, + "Y": -11392, + "Z": 53760, + "Room": 52, + "KeyItemsHigh": "16157,16178", + "KeyItemsLow": "16166" + }, + { + "X": 29952, + "Y": -11392, + "Z": 53760, + "Room": 52, + "KeyItemsHigh": "16157,16178", + "KeyItemsLow": "16166", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": -11008, + "Z": 56832, + "Room": 49 + }, + { + "X": 30208, + "Y": -9728, + "Z": 59904, + "Room": 46 + }, + { + "X": 33280, + "Y": -11008, + "Z": 61952, + "Room": 47 + }, + { + "X": 33280, + "Y": -9728, + "Z": 62976, + "Room": 50 + }, + { + "X": 51712, + "Y": -9600, + "Z": 62976, + "Room": 58 + }, + { + "X": 54784, + "Y": -11008, + "Z": 59904, + "Room": 59 + }, + { + "X": 49664, + "Y": -10240, + "Z": 56832, + "Room": 51, + "Validated": false + }, + { + "X": 30208, + "Y": -6400, + "Z": 55808, + "Room": 53 + }, + { + "X": 30208, + "Y": -6400, + "Z": 56832, + "Room": 31 + }, + { + "X": 35328, + "Y": -6400, + "Z": 60928, + "Room": 45 + }, + { + "X": 49664, + "Y": -6400, + "Z": 66048, + "Room": 55 + }, + { + "X": 52736, + "Y": -8192, + "Z": 70144, + "Room": 57 + }, + { + "X": 54784, + "Y": -15104, + "Z": 67072, + "Room": 60 + }, + { + "X": 54784, + "Y": -13952, + "Z": 56832, + "Room": 61 + }, + { + "X": 54784, + "Y": -7168, + "Z": 49664, + "Room": 56 + }, + { + "X": 52736, + "Y": -4608, + "Z": 44544, + "Room": 12 + }, + { + "X": 52736, + "Y": -4736, + "Z": 33280, + "Room": 15 + }, + { + "X": 60928, + "Y": -3712, + "Z": 33280, + "Room": 16 + }, + { + "X": 62976, + "Y": -4352, + "Z": 35328, + "Room": 3 + }, + { + "X": 66048, + "Y": -4608, + "Z": 33280, + "Room": 17 + }, + { + "X": 71168, + "Y": -384, + "Z": 32256, + "Room": 18 + }, + { + "X": 80384, + "Y": -4864, + "Z": 31232, + "Room": 8 + }, + { + "X": 82432, + "Y": -7808, + "Z": 36352, + "Room": 7 + }, + { + "X": 81408, + "Y": -4096, + "Z": 41472, + "Room": 6 + }, + { + "X": 85504, + "Y": -4096, + "Z": 38400, + "Room": 78 + }, + { + "X": 75264, + "Y": -3072, + "Z": 39424, + "Room": 5 + }, + { + "X": 59904, + "Y": -2048, + "Z": 40448, + "Room": 4, + "KeyItemsHigh": "16166" + }, + { + "X": 59648, + "Y": -2048, + "Z": 40448, + "Room": 4, + "KeyItemsHigh": "16166", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": -2048, + "Z": 45568, + "Room": 67 + }, + { + "X": 55808, + "Y": 0, + "Z": 53760, + "Room": 68 + }, + { + "X": 58880, + "Y": 512, + "Z": 53760, + "Room": 69 + }, + { + "X": 65024, + "Y": 0, + "Z": 58880, + "Room": 71 + }, + { + "X": 64000, + "Y": 0, + "Z": 60928, + "Room": 2 + }, + { + "X": 68096, + "Y": -1792, + "Z": 51712, + "Room": 70 + }, + { + "X": 70144, + "Y": -1792, + "Z": 51712, + "Room": 73 + }, + { + "X": 19968, + "Y": -4352, + "Z": 32256, + "Room": 39, + "KeyItemsLow": "16157,16178" + }, + { + "X": 19968, + "Y": -4352, + "Z": 32000, + "Room": 39, + "KeyItemsLow": "16157,16178", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -4352, + "Z": 29184, + "Room": 48 + }, + { + "X": 23040, + "Y": -7424, + "Z": 28160, + "Room": 14 + }, + { + "X": 24064, + "Y": -7424, + "Z": 30208, + "Room": 40 + }, + { + "X": 23040, + "Y": -5888, + "Z": 23040, + "Room": 20 + }, + { + "X": 20224, + "Y": -4608, + "Z": 19968, + "Room": 1, + "KeyItemsHigh": "16178,16157" + }, + { + "X": 20224, + "Y": -4608, + "Z": 19712, + "Room": 1, + "KeyItemsHigh": "16178,16157", + "RequiresReturnPath": true + }, + { + "X": 19968, + "Y": -4608, + "Z": 19712, + "Room": 1, + "KeyItemsHigh": "16166,16178,16157", + "Range": "Medium" + }, + { + "X": 19968, + "Y": -4608, + "Z": 19968, + "Room": 1, + "KeyItemsHigh": "16166,16178,16157", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 19968, + "Y": -4608, + "Z": 20224, + "Room": 1, + "KeyItemsHigh": "16166,16178,16157", + "Range": "Large" + }, + { + "X": 20224, + "Y": -4608, + "Z": 20224, + "Room": 1, + "KeyItemsHigh": "16166,16178,16157", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL7A.PHD": [ + { + "X": 46592, + "Y": -8448, + "Z": 76288, + "Room": 137, + "KeyItemsLow": "17143,17295,17208,17231,17245", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 46848, + "Y": -8448, + "Z": 76288, + "Room": 137, + "KeyItemsLow": "17143,17295,17208,17231,17245", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -5632, + "Z": 74240, + "Room": 5 + }, + { + "X": 46592, + "Y": -5632, + "Z": 72192, + "Room": 4 + }, + { + "X": 48640, + "Y": -5632, + "Z": 67072, + "Room": 135 + }, + { + "X": 45824, + "Y": -3328, + "Z": 68352, + "Room": 7, + "KeyItemsLow": "17143,17295,17208,17231,17245", + "Range": "Medium" + }, + { + "X": 45568, + "Y": -3328, + "Z": 68096, + "Room": 7, + "KeyItemsLow": "17143,17295,17208,17231,17245", + "Range": "Large" + }, + { + "X": 45568, + "Y": -3328, + "Z": 65024, + "Room": 99, + "KeyItemsLow": "17295" + }, + { + "X": 45824, + "Y": -3328, + "Z": 65024, + "Room": 99, + "KeyItemsLow": "17295", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": -3328, + "Z": 56832, + "Room": 101 + }, + { + "X": 45568, + "Y": -3328, + "Z": 52736, + "Room": 95 + }, + { + "X": 46592, + "Y": -3328, + "Z": 48640, + "Room": 96 + }, + { + "X": 43520, + "Y": 3328, + "Z": 59904, + "Room": 0 + }, + { + "X": 46592, + "Y": 1792, + "Z": 60928, + "Room": 83 + }, + { + "X": 39424, + "Y": -256, + "Z": 61952, + "Room": 111 + }, + { + "X": 40448, + "Y": -1792, + "Z": 59904, + "Room": 109 + }, + { + "X": 38400, + "Y": 0, + "Z": 62976, + "Room": 110 + }, + { + "X": 41472, + "Y": 0, + "Z": 66048, + "Room": 108 + }, + { + "X": 46592, + "Y": 0, + "Z": 66048, + "Room": 106 + }, + { + "X": 48640, + "Y": 0, + "Z": 61952, + "Room": 105 + }, + { + "X": 48640, + "Y": 0, + "Z": 52736, + "Room": 103 + }, + { + "X": 45568, + "Y": 0, + "Z": 49664, + "Room": 104 + }, + { + "X": 39424, + "Y": 0, + "Z": 49664, + "Room": 2 + }, + { + "X": 36352, + "Y": -3328, + "Z": 56832, + "Room": 102 + }, + { + "X": 35328, + "Y": -3328, + "Z": 51712, + "Room": 94 + }, + { + "X": 34304, + "Y": -5632, + "Z": 55808, + "Room": 92 + }, + { + "X": 31232, + "Y": -5888, + "Z": 55808, + "Room": 6, + "KeyItemsHigh": "17295", + "KeyItemsLow": "17143" + }, + { + "X": 31232, + "Y": -5888, + "Z": 55552, + "Room": 6, + "KeyItemsHigh": "17295", + "KeyItemsLow": "17143", + "RequiresReturnPath": true + }, + { + "X": 30976, + "Y": -5888, + "Z": 55552, + "Room": 6, + "KeyItemsHigh": "17245", + "Range": "Medium" + }, + { + "X": 30976, + "Y": -5888, + "Z": 55808, + "Room": 6, + "KeyItemsHigh": "17245", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": -6656, + "Z": 55808, + "Room": 9 + }, + { + "X": 27136, + "Y": -8448, + "Z": 60928, + "Room": 10 + }, + { + "X": 27136, + "Y": -10240, + "Z": 61952, + "Room": 3 + }, + { + "X": 28160, + "Y": -13312, + "Z": 64000, + "Room": 86 + }, + { + "X": 25088, + "Y": -3584, + "Z": 55808, + "Room": 11 + }, + { + "X": 20992, + "Y": -4096, + "Z": 58880, + "Room": 17 + }, + { + "X": 23040, + "Y": -3584, + "Z": 64000, + "Room": 18 + }, + { + "X": 24064, + "Y": -6912, + "Z": 68096, + "Room": 19 + }, + { + "X": 23040, + "Y": -7168, + "Z": 68096, + "Room": 20 + }, + { + "X": 28160, + "Y": -8192, + "Z": 64000, + "Room": 22 + }, + { + "X": 30208, + "Y": -5632, + "Z": 61952, + "Room": 23 + }, + { + "X": 32256, + "Y": -3328, + "Z": 57856, + "Room": 16 + }, + { + "X": 33280, + "Y": -5632, + "Z": 62976, + "Room": 90, + "KeyItemsHigh": "17143", + "KeyItemsLow": "17295", + "RequiresReturnPath": true + }, + { + "X": 33536, + "Y": -5632, + "Z": 62976, + "Room": 90, + "KeyItemsHigh": "17143", + "KeyItemsLow": "17295" + }, + { + "X": 33536, + "Y": -5632, + "Z": 63232, + "Room": 90, + "KeyItemsLow": "17245", + "Range": "Medium" + }, + { + "X": 33280, + "Y": -5632, + "Z": 63232, + "Room": 90, + "KeyItemsLow": "17245", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": -3584, + "Z": 65024, + "Room": 100 + }, + { + "X": 40448, + "Y": -5632, + "Z": 66048, + "Room": 91 + }, + { + "X": 49664, + "Y": -3328, + "Z": 59904, + "Room": 97 + }, + { + "X": 53504, + "Y": -3328, + "Z": 59648, + "Room": 21, + "KeyItemsHigh": "17295", + "KeyItemsLow": "17208,17231" + }, + { + "X": 53504, + "Y": -3328, + "Z": 59904, + "Room": 21, + "KeyItemsHigh": "17295", + "KeyItemsLow": "17208,17231", + "RequiresReturnPath": true + }, + { + "X": 53504, + "Y": -3328, + "Z": 60160, + "Room": 21, + "KeyItemsHigh": "17143,17295", + "Range": "Medium" + }, + { + "X": 53760, + "Y": -3328, + "Z": 60160, + "Room": 21, + "KeyItemsHigh": "17143,17295", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 53760, + "Y": -3328, + "Z": 59904, + "Room": 21, + "KeyItemsHigh": "17143,17295", + "Range": "Large" + }, + { + "X": 53760, + "Y": -3328, + "Z": 59648, + "Room": 21, + "KeyItemsHigh": "17143,17295", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": -5120, + "Z": 61952, + "Room": 24 + }, + { + "X": 57856, + "Y": -6656, + "Z": 60928, + "Room": 25 + }, + { + "X": 60928, + "Y": -7936, + "Z": 60928, + "Room": 26 + }, + { + "X": 62976, + "Y": -7936, + "Z": 57856, + "Room": 27 + }, + { + "X": 62976, + "Y": -6656, + "Z": 54784, + "Room": 29 + }, + { + "X": 64000, + "Y": -4608, + "Z": 55808, + "Room": 30 + }, + { + "X": 61952, + "Y": -3840, + "Z": 55808, + "Room": 31 + }, + { + "X": 61952, + "Y": -1280, + "Z": 51712, + "Room": 32 + }, + { + "X": 58880, + "Y": -1280, + "Z": 56832, + "Room": 35 + }, + { + "X": 58880, + "Y": -1280, + "Z": 59904, + "Room": 34 + }, + { + "X": 64000, + "Y": -1280, + "Z": 59904, + "Room": 33 + }, + { + "X": 56832, + "Y": -4608, + "Z": 48640, + "Room": 36 + }, + { + "X": 55808, + "Y": -3584, + "Z": 46592, + "Room": 37 + }, + { + "X": 55808, + "Y": -2304, + "Z": 43520, + "Room": 41 + }, + { + "X": 53760, + "Y": -1024, + "Z": 41472, + "Room": 40 + }, + { + "X": 48640, + "Y": -3840, + "Z": 42496, + "Room": 39 + }, + { + "X": 48640, + "Y": -5376, + "Z": 43520, + "Room": 38 + }, + { + "X": 53760, + "Y": -5632, + "Z": 37376, + "Room": 42 + }, + { + "X": 50688, + "Y": 1280, + "Z": 42496, + "Room": 44, + "KeyItemsLow": "17245" + }, + { + "X": 50688, + "Y": 1280, + "Z": 42752, + "Room": 44, + "KeyItemsLow": "17245", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": 1280, + "Z": 43520, + "Room": 45 + }, + { + "X": 45568, + "Y": 1280, + "Z": 42496, + "Room": 28 + }, + { + "X": 44544, + "Y": -256, + "Z": 41472, + "Room": 46 + }, + { + "X": 44544, + "Y": 1280, + "Z": 45568, + "Room": 50 + }, + { + "X": 43520, + "Y": 1280, + "Z": 51712, + "Room": 51 + }, + { + "X": 51712, + "Y": -3328, + "Z": 55808, + "Room": 53 + }, + { + "X": 52736, + "Y": -256, + "Z": 55808, + "Room": 54 + }, + { + "X": 53760, + "Y": -256, + "Z": 55808, + "Room": 71 + }, + { + "X": 54784, + "Y": 1024, + "Z": 56832, + "Room": 55 + }, + { + "X": 54784, + "Y": -256, + "Z": 53760, + "Room": 56 + }, + { + "X": 52736, + "Y": 0, + "Z": 52736, + "Room": 57 + }, + { + "X": 43520, + "Y": -3584, + "Z": 43520, + "Room": 48 + }, + { + "X": 43520, + "Y": 0, + "Z": 46592, + "Room": 49 + }, + { + "X": 40704, + "Y": -5376, + "Z": 48384, + "Room": 84, + "KeyItemsLow": "17143,17295", + "Range": "Medium" + }, + { + "X": 40704, + "Y": -5376, + "Z": 48640, + "Room": 84, + "KeyItemsLow": "17143,17295", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 40704, + "Y": -5376, + "Z": 48896, + "Room": 84, + "KeyItemsLow": "17143,17295", + "Range": "Large" + }, + { + "X": 40448, + "Y": -5376, + "Z": 48896, + "Room": 84, + "KeyItemsLow": "17143,17295", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -5376, + "Z": 49664, + "Room": 8 + }, + { + "X": 42496, + "Y": -5632, + "Z": 46592, + "Room": 81 + }, + { + "X": 43520, + "Y": -7424, + "Z": 44544, + "Room": 43 + }, + { + "X": 41472, + "Y": -7424, + "Z": 44544, + "Room": 82 + }, + { + "X": 40704, + "Y": -5632, + "Z": 47360, + "Room": 13, + "KeyItemsHigh": "17208,17231" + }, + { + "X": 40704, + "Y": -5632, + "Z": 47616, + "Room": 13, + "KeyItemsHigh": "17208,17231", + "RequiresReturnPath": true + }, + { + "X": 40704, + "Y": -5632, + "Z": 47872, + "Room": 13, + "KeyItemsHigh": "17208,17231,17143,17295", + "Range": "Medium" + }, + { + "X": 40448, + "Y": -5632, + "Z": 47872, + "Room": 13, + "KeyItemsHigh": "17208,17231,17143,17295", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": -5632, + "Z": 47616, + "Room": 13, + "KeyItemsHigh": "17208,17231,17143,17295", + "Range": "Large" + }, + { + "X": 40448, + "Y": -5632, + "Z": 47360, + "Room": 13, + "KeyItemsHigh": "17208,17231,17143,17295", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": -5632, + "Z": 43520, + "Room": 14 + }, + { + "X": 40448, + "Y": -8448, + "Z": 40448, + "Room": 15 + }, + { + "X": 40192, + "Y": -5888, + "Z": 36608, + "Room": 61, + "KeyItemsHigh": "17245" + }, + { + "X": 40448, + "Y": -5888, + "Z": 36608, + "Room": 61, + "KeyItemsHigh": "17245", + "RequiresReturnPath": true + }, + { + "X": 40704, + "Y": -5888, + "Z": 36608, + "Room": 61, + "KeyItemsHigh": "17245", + "Range": "Medium" + }, + { + "X": 40704, + "Y": -5888, + "Z": 36352, + "Room": 61, + "KeyItemsHigh": "17245", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": -5888, + "Z": 36352, + "Room": 61, + "KeyItemsHigh": "17245", + "Range": "Large" + }, + { + "X": 40192, + "Y": -5888, + "Z": 36352, + "Room": 61, + "KeyItemsHigh": "17245", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": -6400, + "Z": 25088, + "Room": 60 + }, + { + "X": 31232, + "Y": -6400, + "Z": 23040, + "Room": 66 + }, + { + "X": 32256, + "Y": -8704, + "Z": 22016, + "Room": 67 + }, + { + "X": 35328, + "Y": -9216, + "Z": 23040, + "Room": 65 + }, + { + "X": 40448, + "Y": -9216, + "Z": 26112, + "Room": 64 + }, + { + "X": 40448, + "Y": -7680, + "Z": 23040, + "Room": 63 + } + ], + "LEVEL7B.PHD": [ + { + "X": 57856, + "Y": 1024, + "Z": 1536, + "Room": 20, + "KeyItemsLow": "18133,18277,18267,18389", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": 4096, + "Z": 18944, + "Room": 22 + }, + { + "X": 57856, + "Y": 4096, + "Z": 17920, + "Room": 23 + }, + { + "X": 56832, + "Y": -256, + "Z": 16896, + "Room": 21 + }, + { + "X": 54784, + "Y": -256, + "Z": 17920, + "Room": 27 + }, + { + "X": 49664, + "Y": -256, + "Z": 17920, + "Room": 25 + }, + { + "X": 50688, + "Y": -3328, + "Z": 15872, + "Room": 26 + }, + { + "X": 47616, + "Y": -4864, + "Z": 15872, + "Room": 17 + }, + { + "X": 43520, + "Y": -6144, + "Z": 13824, + "Room": 28 + }, + { + "X": 43520, + "Y": -256, + "Z": 13824, + "Room": 29 + }, + { + "X": 42496, + "Y": -3328, + "Z": 13824, + "Room": 24 + }, + { + "X": 41472, + "Y": -3328, + "Z": 13824, + "Room": 84 + }, + { + "X": 41472, + "Y": 1024, + "Z": 16896, + "Room": 31 + }, + { + "X": 41472, + "Y": 4096, + "Z": 18944, + "Room": 59 + }, + { + "X": 41472, + "Y": 1024, + "Z": 27136, + "Room": 16 + }, + { + "X": 41472, + "Y": 1024, + "Z": 44544, + "Room": 0 + }, + { + "X": 41472, + "Y": 1024, + "Z": 62976, + "Room": 1 + }, + { + "X": 41472, + "Y": 1024, + "Z": 74240, + "Room": 32 + }, + { + "X": 41472, + "Y": -256, + "Z": 80384, + "Room": 33, + "KeyItemsLow": "18133" + }, + { + "X": 41216, + "Y": -256, + "Z": 80384, + "Room": 33, + "KeyItemsLow": "18267,18277,18133", + "Range": "Medium" + }, + { + "X": 41216, + "Y": -256, + "Z": 80640, + "Room": 33, + "KeyItemsLow": "18267,18277,18133", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -256, + "Z": 80640, + "Room": 33, + "KeyItemsLow": "18267,18277,18133", + "Range": "Large" + }, + { + "X": 41728, + "Y": -256, + "Z": 80640, + "Room": 33, + "KeyItemsLow": "18133", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -2304, + "Z": 78336, + "Room": 34 + }, + { + "X": 41472, + "Y": -2816, + "Z": 77312, + "Room": 36 + }, + { + "X": 39424, + "Y": -4096, + "Z": 78336, + "Room": 37 + }, + { + "X": 39424, + "Y": -5376, + "Z": 79360, + "Room": 38 + }, + { + "X": 38400, + "Y": -6656, + "Z": 81408, + "Room": 114, + "RoomType": "ReturnPath" + }, + { + "X": 37376, + "Y": -7680, + "Z": 79360, + "Room": 115, + "RoomType": "ReturnPath" + }, + { + "X": 37376, + "Y": -7680, + "Z": 61952, + "Room": 116, + "RoomType": "ReturnPath" + }, + { + "X": 37376, + "Y": -7680, + "Z": 43520, + "Room": 117, + "RoomType": "ReturnPath" + }, + { + "X": 37376, + "Y": -7680, + "Z": 25088, + "Room": 118, + "RoomType": "ReturnPath" + }, + { + "X": 38400, + "Y": -7680, + "Z": 17920, + "Room": 119, + "RoomType": "ReturnPath" + }, + { + "X": 40448, + "Y": -6656, + "Z": 76288, + "Room": 39 + }, + { + "X": 39424, + "Y": -5888, + "Z": 74240, + "Room": 40 + }, + { + "X": 37376, + "Y": -5120, + "Z": 75264, + "Room": 41 + }, + { + "X": 36352, + "Y": -4096, + "Z": 78336, + "Room": 42 + }, + { + "X": 34304, + "Y": -3584, + "Z": 77312, + "Room": 43 + }, + { + "X": 34304, + "Y": -2048, + "Z": 75264, + "Room": 45 + }, + { + "X": 36352, + "Y": -1536, + "Z": 75264, + "Room": 44 + }, + { + "X": 39424, + "Y": -768, + "Z": 75264, + "Room": 35 + }, + { + "X": 43520, + "Y": 0, + "Z": 70144, + "Room": 6, + "Validated": false + }, + { + "X": 46592, + "Y": -2560, + "Z": 69120, + "Room": 9, + "Validated": false + }, + { + "X": 44544, + "Y": -5376, + "Z": 78336, + "Room": 14 + }, + { + "X": 43520, + "Y": -6656, + "Z": 76288, + "Room": 46 + }, + { + "X": 42496, + "Y": -6144, + "Z": 74240, + "Room": 47 + }, + { + "X": 43520, + "Y": -6144, + "Z": 70144, + "Room": 49 + }, + { + "X": 42496, + "Y": -3328, + "Z": 76288, + "Room": 47 + }, + { + "X": 43520, + "Y": -3328, + "Z": 76288, + "Room": 50 + }, + { + "X": 45568, + "Y": 1536, + "Z": 79360, + "Room": 3 + }, + { + "X": 46592, + "Y": 1536, + "Z": 79360, + "Room": 68 + }, + { + "X": 49664, + "Y": 768, + "Z": 79360, + "Room": 69 + }, + { + "X": 49664, + "Y": -3456, + "Z": 74240, + "Room": 70 + }, + { + "X": 54784, + "Y": -3584, + "Z": 71168, + "Room": 67 + }, + { + "X": 53760, + "Y": -3328, + "Z": 70144, + "Room": 72 + }, + { + "X": 49664, + "Y": -3584, + "Z": 71168, + "Room": 71 + }, + { + "X": 51712, + "Y": -5120, + "Z": 71168, + "Room": 73 + }, + { + "X": 51712, + "Y": -6400, + "Z": 73216, + "Room": 66 + }, + { + "X": 52736, + "Y": -7936, + "Z": 76288, + "Room": 15 + }, + { + "X": 52736, + "Y": -3584, + "Z": 69120, + "Room": 75, + "KeyItemsLow": "18277,18267" + }, + { + "X": 52736, + "Y": -3584, + "Z": 68864, + "Room": 75, + "KeyItemsLow": "18277,18267", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": -2048, + "Z": 68096, + "Room": 76 + }, + { + "X": 38656, + "Y": -4096, + "Z": 67840, + "Room": 77, + "KeyItemsHigh": "18133" + }, + { + "X": 38400, + "Y": -4096, + "Z": 67840, + "Room": 77, + "KeyItemsHigh": "18133", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -4096, + "Z": 68096, + "Room": 77, + "KeyItemsHigh": "18133", + "Range": "Medium" + }, + { + "X": 38656, + "Y": -4096, + "Z": 68096, + "Room": 77, + "KeyItemsHigh": "18133", + "KeyItemsLow": "18389", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 38656, + "Y": -4096, + "Z": 68352, + "Room": 77, + "KeyItemsHigh": "18133", + "Range": "Large" + }, + { + "X": 38400, + "Y": -4096, + "Z": 68352, + "Room": 77, + "KeyItemsHigh": "18133", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": -4096, + "Z": 71168, + "Room": 82 + }, + { + "X": 31232, + "Y": -6144, + "Z": 61952, + "Room": 79 + }, + { + "X": 33280, + "Y": -4096, + "Z": 72192, + "Room": 81 + }, + { + "X": 33280, + "Y": -3840, + "Z": 58880, + "Room": 74 + }, + { + "X": 38400, + "Y": -4096, + "Z": 59904, + "Room": 78 + }, + { + "X": 23296, + "Y": 1280, + "Z": 67328, + "Room": 89, + "KeyItemsHigh": "18277,18267" + }, + { + "X": 23040, + "Y": 1280, + "Z": 67328, + "Room": 89, + "KeyItemsHigh": "18277,18267", + "RequiresReturnPath": true + }, + { + "X": 22784, + "Y": 1280, + "Z": 67328, + "Room": 89, + "KeyItemsHigh": "18277,18267", + "Range": "Medium" + }, + { + "X": 22784, + "Y": 1280, + "Z": 67072, + "Room": 89, + "KeyItemsHigh": "18277,18267", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": 1280, + "Z": 67072, + "Room": 89, + "KeyItemsHigh": "18277,18267", + "Range": "Large" + }, + { + "X": 23296, + "Y": 1280, + "Z": 67072, + "Room": 89, + "KeyItemsHigh": "18277,18267", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": 1280, + "Z": 66048, + "Room": 12, + "Validated": false + }, + { + "X": 23040, + "Y": 3072, + "Z": 62976, + "Room": 11 + }, + { + "X": 15872, + "Y": 6656, + "Z": 67840, + "Room": 99, + "KeyItemsLow": "18389", + "Range": "Medium" + }, + { + "X": 15872, + "Y": 6656, + "Z": 68096, + "Room": 99, + "KeyItemsLow": "18389", + "Range": "Large" + }, + { + "X": 12800, + "Y": 5120, + "Z": 68096, + "Room": 80 + }, + { + "X": 8704, + "Y": 3840, + "Z": 70144, + "Room": 102 + }, + { + "X": 6656, + "Y": 3840, + "Z": 73216, + "Room": 93 + }, + { + "X": 6656, + "Y": 0, + "Z": 78336, + "Room": 94 + }, + { + "X": 11776, + "Y": 1792, + "Z": 81408, + "Room": 96 + }, + { + "X": 10752, + "Y": 6400, + "Z": 80384, + "Room": 95 + }, + { + "X": 10752, + "Y": 5760, + "Z": 82432, + "Room": 106 + }, + { + "X": 16896, + "Y": 8192, + "Z": 82432, + "Room": 107 + }, + { + "X": 16896, + "Y": 6784, + "Z": 78336, + "Room": 105 + }, + { + "X": 12800, + "Y": 5120, + "Z": 74240, + "Room": 103 + }, + { + "X": 23040, + "Y": 6656, + "Z": 78336, + "Room": 92 + }, + { + "X": 27136, + "Y": 9472, + "Z": 77312, + "Room": 91 + }, + { + "X": 27904, + "Y": 7168, + "Z": 78336, + "Room": 98, + "KeyItemsLow": "18389" + }, + { + "X": 28160, + "Y": 7168, + "Z": 78336, + "Room": 98, + "KeyItemsLow": "18389", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 5632, + "Z": 77312, + "Room": 108 + }, + { + "X": 22016, + "Y": 3840, + "Z": 78336, + "Room": 90 + }, + { + "X": 26112, + "Y": 3840, + "Z": 85504, + "Room": 97 + }, + { + "X": 27136, + "Y": 3840, + "Z": 71168, + "Room": 120, + "RoomType": "ReturnPath" + }, + { + "X": 29184, + "Y": 256, + "Z": 70144, + "Room": 121, + "RoomType": "ReturnPath" + }, + { + "X": 30208, + "Y": -3328, + "Z": 72192, + "Room": 122, + "RoomType": "ReturnPath" + }, + { + "X": 28160, + "Y": 3840, + "Z": 78336, + "Room": 109 + }, + { + "X": 28160, + "Y": 3840, + "Z": 82432, + "Room": 110 + }, + { + "X": 32256, + "Y": 1280, + "Z": 85504, + "Room": 111 + }, + { + "X": 32000, + "Y": 3840, + "Z": 94720, + "Room": 112, + "KeyItemsHigh": "18389" + }, + { + "X": 32256, + "Y": 3840, + "Z": 94720, + "Room": 112, + "KeyItemsHigh": "18389", + "RequiresReturnPath": true + }, + { + "X": 32512, + "Y": 3840, + "Z": 94720, + "Room": 112, + "KeyItemsHigh": "18389", + "Range": "Medium" + }, + { + "X": 32512, + "Y": 3840, + "Z": 94976, + "Room": 112, + "KeyItemsHigh": "18389", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 32256, + "Y": 3840, + "Z": 94976, + "Room": 112, + "KeyItemsHigh": "18389", + "Range": "Large" + }, + { + "X": 32000, + "Y": 3840, + "Z": 94976, + "Room": 112, + "KeyItemsHigh": "18389", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL8A.PHD": [ + { + "X": 27136, + "Y": 0, + "Z": 6656, + "Room": 0, + "KeyItemsLow": "19217", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 26880, + "Y": 0, + "Z": 6656, + "Room": 0, + "KeyItemsLow": "19217,19193", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 29184, + "Y": -1280, + "Z": 6656, + "Room": 71, + "RequiresReturnPath": true, + "RoomType": "Challenge" + }, + { + "X": 31232, + "Y": 1792, + "Z": 7680, + "Room": 72, + "RequiresReturnPath": true, + "RoomType": "Challenge" + }, + { + "X": 35328, + "Y": 3840, + "Z": 7680, + "Room": 73, + "RequiresReturnPath": true, + "RoomType": "Challenge" + }, + { + "X": 33280, + "Y": 5888, + "Z": 6656, + "Room": 74, + "RequiresReturnPath": true, + "RoomType": "Challenge" + }, + { + "X": 28160, + "Y": 1152, + "Z": 15872, + "Room": 2, + "KeyItemsLow": "19217", + "Range": "Medium" + }, + { + "X": 27900, + "Y": 1216, + "Z": 15872, + "Room": 2, + "KeyItemsLow": "19217,19193", + "Range": "Large" + }, + { + "X": 27136, + "Y": 2304, + "Z": 16896, + "Room": 3 + }, + { + "X": 24064, + "Y": 1280, + "Z": 15872, + "Room": 17 + }, + { + "X": 24064, + "Y": 3328, + "Z": 15872, + "Room": 11 + }, + { + "X": 27136, + "Y": -512, + "Z": 20992, + "Room": 5, + "KeyItemsLow": "19217" + }, + { + "X": 26880, + "Y": -512, + "Z": 20992, + "Room": 5, + "KeyItemsLow": "19217", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": -2560, + "Z": 19968, + "Room": 6 + }, + { + "X": 27136, + "Y": -1920, + "Z": 26112, + "Room": 12 + }, + { + "X": 25088, + "Y": -2432, + "Z": 26112, + "Room": 13 + }, + { + "X": 34304, + "Y": 1536, + "Z": 29184, + "Room": 4 + }, + { + "X": 30208, + "Y": -4352, + "Z": 36352, + "Room": 14 + }, + { + "X": 31232, + "Y": -7040, + "Z": 36352, + "Room": 15, + "Validated": false + }, + { + "X": 31488, + "Y": 0, + "Z": 38400, + "Room": 47, + "KeyItemsHigh": "19217" + }, + { + "X": 31232, + "Y": 0, + "Z": 38400, + "Room": 47, + "KeyItemsHigh": "19217", + "RequiresReturnPath": true + }, + { + "X": 30976, + "Y": 0, + "Z": 38400, + "Room": 47, + "KeyItemsHigh": "19217", + "Range": "Medium" + }, + { + "X": 30976, + "Y": 0, + "Z": 38656, + "Room": 47, + "KeyItemsHigh": "19217", + "KeyItemsLow": "19193", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": 0, + "Z": 38656, + "Room": 47, + "KeyItemsHigh": "19217", + "Range": "Large" + }, + { + "X": 31488, + "Y": 0, + "Z": 38656, + "Room": 47, + "KeyItemsHigh": "19217", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": 0, + "Z": 47616, + "Room": 48 + }, + { + "X": 38400, + "Y": -1792, + "Z": 44544, + "Room": 56 + }, + { + "X": 38400, + "Y": -2304, + "Z": 29184, + "Room": 9 + }, + { + "X": 40448, + "Y": -2304, + "Z": 34304, + "Room": 28 + }, + { + "X": 47616, + "Y": -2304, + "Z": 34304, + "Room": 38 + }, + { + "X": 48640, + "Y": -2304, + "Z": 34304, + "Room": 40 + }, + { + "X": 50688, + "Y": 0, + "Z": 33280, + "Room": 42 + }, + { + "X": 47616, + "Y": 0, + "Z": 34304, + "Room": 37 + }, + { + "X": 46592, + "Y": 0, + "Z": 34304, + "Room": 32 + }, + { + "X": 47616, + "Y": -1792, + "Z": 28160, + "Room": 45 + }, + { + "X": 50688, + "Y": -5120, + "Z": 36352, + "Room": 68, + "Validated": false + }, + { + "X": 59904, + "Y": 1536, + "Z": 31232, + "Room": 57 + }, + { + "X": 58880, + "Y": 1152, + "Z": 28160, + "Room": 36 + }, + { + "X": 46592, + "Y": 1792, + "Z": 28160, + "Room": 10 + }, + { + "X": 41472, + "Y": 0, + "Z": 26112, + "Room": 19 + }, + { + "X": 45568, + "Y": -1792, + "Z": 28160, + "Room": 18 + }, + { + "X": 43520, + "Y": -4096, + "Z": 24064, + "Room": 20 + }, + { + "X": 43520, + "Y": -4096, + "Z": 23040, + "Room": 22 + }, + { + "X": 43520, + "Y": -6400, + "Z": 20992, + "Room": 23 + }, + { + "X": 42496, + "Y": -4096, + "Z": 33280, + "Room": 25 + }, + { + "X": 43520, + "Y": -7680, + "Z": 28160, + "Room": 26 + }, + { + "X": 47616, + "Y": -7936, + "Z": 30208, + "Room": 43 + }, + { + "X": 48640, + "Y": -7936, + "Z": 31232, + "Room": 44 + }, + { + "X": 57856, + "Y": -4096, + "Z": 31232, + "Room": 41 + }, + { + "X": 55808, + "Y": 1024, + "Z": 25088, + "Room": 52, + "KeyItemsLow": "19193", + "Range": "Medium" + }, + { + "X": 56832, + "Y": 2304, + "Z": 24064, + "Room": 53 + }, + { + "X": 54784, + "Y": 2304, + "Z": 28160, + "Room": 16 + }, + { + "X": 54784, + "Y": 3584, + "Z": 29184, + "Room": 54 + }, + { + "X": 52736, + "Y": 7424, + "Z": 36352, + "Room": 55 + }, + { + "X": 50688, + "Y": 7424, + "Z": 37376, + "Room": 59 + }, + { + "X": 58880, + "Y": 7424, + "Z": 37376, + "Room": 46 + }, + { + "X": 53760, + "Y": 4096, + "Z": 40448, + "Room": 35 + }, + { + "X": 51712, + "Y": 4096, + "Z": 42496, + "Room": 65 + }, + { + "X": 49664, + "Y": 4096, + "Z": 41472, + "Room": 35 + }, + { + "X": 46592, + "Y": 3840, + "Z": 41472, + "Room": 34, + "KeyItemsLow": "19193" + }, + { + "X": 46592, + "Y": 3840, + "Z": 41728, + "Room": 34, + "KeyItemsLow": "19193", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 2048, + "Z": 44544, + "Room": 50 + }, + { + "X": 46592, + "Y": -1536, + "Z": 37376, + "Room": 33 + }, + { + "X": 40448, + "Y": -4352, + "Z": 45568, + "Room": 51 + }, + { + "X": 41472, + "Y": 0, + "Z": 45568, + "Room": 49 + } + ], + "LEVEL8B.PHD": [ + { + "X": 45568, + "Y": 0, + "Z": 37376, + "Room": 24, + "KeyItemsLow": "20308,20160,20151,20152,20163", + "Range": "Medium" + }, + { + "X": 45312, + "Y": 0, + "Z": 37376, + "Room": 24, + "KeyItemsLow": "20308,20160,20151,20152,20163", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 45312, + "Y": 0, + "Z": 37632, + "Room": 24, + "KeyItemsLow": "20308,20160,20151,20152,20163,20213", + "Range": "Large" + }, + { + "X": 45568, + "Y": 0, + "Z": 37632, + "Room": 24, + "KeyItemsLow": "20308,20160,20151,20152,20163,20213", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": 0, + "Z": 28160, + "Room": 85, + "RoomType": "Challenge" + }, + { + "X": 44544, + "Y": -1280, + "Z": 26112, + "Room": 86, + "RoomType": "Challenge" + }, + { + "X": 47616, + "Y": 0, + "Z": 40448, + "Room": 29 + }, + { + "X": 55808, + "Y": 0, + "Z": 44544, + "Room": 32 + }, + { + "X": 56832, + "Y": 0, + "Z": 52736, + "Room": 39, + "KeyItemsLow": "20308" + }, + { + "X": 57088, + "Y": 0, + "Z": 52736, + "Room": 39, + "KeyItemsLow": "20308", + "RequiresReturnPath": true + }, + { + "X": 58880, + "Y": 256, + "Z": 60928, + "Room": 71 + }, + { + "X": 58880, + "Y": 1792, + "Z": 64000, + "Room": 69 + }, + { + "X": 58880, + "Y": 3840, + "Z": 67072, + "Room": 70 + }, + { + "X": 57856, + "Y": -256, + "Z": 70144, + "Room": 72 + }, + { + "X": 61952, + "Y": 0, + "Z": 60928, + "Room": 73 + }, + { + "X": 64000, + "Y": 4352, + "Z": 62976, + "Room": 74 + }, + { + "X": 69120, + "Y": 0, + "Z": 64000, + "Room": 75 + }, + { + "X": 62976, + "Y": -2048, + "Z": 61952, + "Room": 76 + }, + { + "X": 65024, + "Y": 0, + "Z": 57856, + "Room": 68 + }, + { + "X": 61184, + "Y": -2048, + "Z": 51712, + "Room": 60, + "KeyItemsHigh": "20308", + "KeyItemsLow": "20160,20151,20152,20163" + }, + { + "X": 60928, + "Y": -2048, + "Z": 51712, + "Room": 60, + "KeyItemsHigh": "20308", + "KeyItemsLow": "20160,20151,20152,20163", + "RequiresReturnPath": true + }, + { + "X": 60672, + "Y": -2048, + "Z": 51712, + "Room": 60, + "KeyItemsHigh": "20308", + "Range": "Medium" + }, + { + "X": 60672, + "Y": -2048, + "Z": 51456, + "Room": 60, + "KeyItemsHigh": "20308", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": -2048, + "Z": 51456, + "Room": 60, + "KeyItemsHigh": "20308", + "Range": "Large" + }, + { + "X": 61184, + "Y": -2048, + "Z": 51456, + "Room": 60, + "KeyItemsHigh": "20308", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 65024, + "Y": -3328, + "Z": 52736, + "Room": 57 + }, + { + "X": 53760, + "Y": -3072, + "Z": 56832, + "Room": 16 + }, + { + "X": 52736, + "Y": 2560, + "Z": 57856, + "Room": 56 + }, + { + "X": 50688, + "Y": 256, + "Z": 57856, + "Room": 36 + }, + { + "X": 52736, + "Y": 640, + "Z": 61952, + "Room": 54 + }, + { + "X": 47616, + "Y": 2816, + "Z": 62976, + "Room": 53 + }, + { + "X": 46592, + "Y": 1024, + "Z": 69120, + "Room": 52 + }, + { + "X": 45568, + "Y": 2560, + "Z": 66048, + "Room": 51 + }, + { + "X": 44544, + "Y": 3072, + "Z": 68096, + "Room": 55 + }, + { + "X": 51712, + "Y": -1280, + "Z": 67072, + "Room": 50 + }, + { + "X": 52736, + "Y": -3072, + "Z": 68096, + "Room": 34 + }, + { + "X": 51712, + "Y": -5888, + "Z": 65024, + "Room": 47 + }, + { + "X": 45568, + "Y": -8448, + "Z": 64000, + "Room": 46 + }, + { + "X": 46592, + "Y": -8448, + "Z": 61952, + "Room": 49 + }, + { + "X": 49664, + "Y": -8448, + "Z": 60928, + "Room": 42 + }, + { + "X": 44544, + "Y": -8704, + "Z": 64000, + "Room": 43 + }, + { + "X": 43520, + "Y": -8704, + "Z": 60928, + "Room": 37 + }, + { + "X": 43520, + "Y": -4352, + "Z": 57856, + "Room": 31 + }, + { + "X": 43520, + "Y": -2048, + "Z": 54784, + "Room": 35 + }, + { + "X": 35328, + "Y": 256, + "Z": 52736, + "Room": 48 + }, + { + "X": 44544, + "Y": -3072, + "Z": 58880, + "Room": 33 + }, + { + "X": 36352, + "Y": -5376, + "Z": 59904, + "Room": 38 + }, + { + "X": 38400, + "Y": -10496, + "Z": 52736, + "Room": 41 + }, + { + "X": 38400, + "Y": -11008, + "Z": 57856, + "Room": 44 + }, + { + "X": 49664, + "Y": -3072, + "Z": 51712, + "Room": 78 + }, + { + "X": 49664, + "Y": -3072, + "Z": 50688, + "Room": 45 + }, + { + "X": 53760, + "Y": -5888, + "Z": 46592, + "Room": 79 + }, + { + "X": 54784, + "Y": -5888, + "Z": 46592, + "Room": 80 + }, + { + "X": 49664, + "Y": -3072, + "Z": 43520, + "Room": 81 + }, + { + "X": 45568, + "Y": -512, + "Z": 45568, + "Room": 30 + }, + { + "X": 44544, + "Y": -768, + "Z": 45568, + "Room": 82 + }, + { + "X": 49664, + "Y": 2560, + "Z": 48640, + "Room": 83 + }, + { + "X": 51712, + "Y": -1536, + "Z": 43520, + "Room": 27, + "Validated": false + }, + { + "X": 49664, + "Y": -768, + "Z": 51712, + "Room": 77 + }, + { + "X": 49408, + "Y": 7680, + "Z": 56832, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163" + }, + { + "X": 49664, + "Y": 7680, + "Z": 56832, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163", + "RequiresReturnPath": true + }, + { + "X": 49920, + "Y": 7680, + "Z": 56832, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163", + "KeyItemsLow": "20213", + "Range": "Medium" + }, + { + "X": 49920, + "Y": 7680, + "Z": 56576, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163", + "KeyItemsLow": "20213", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 7680, + "Z": 56576, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163", + "Range": "Large" + }, + { + "X": 49408, + "Y": 7680, + "Z": 56576, + "Room": 63, + "KeyItemsHigh": "20160,20151,20152,20163", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 7680, + "Z": 40448, + "Room": 58 + }, + { + "X": 35328, + "Y": 1024, + "Z": 40448, + "Room": 62 + }, + { + "X": 36352, + "Y": -1024, + "Z": 46592, + "Room": 59 + }, + { + "X": 34304, + "Y": -3072, + "Z": 37376, + "Room": 61 + }, + { + "X": 34304, + "Y": -3200, + "Z": 31232, + "Room": 67 + }, + { + "X": 30464, + "Y": -2944, + "Z": 26112, + "Room": 12, + "KeyItemsLow": "20213" + }, + { + "X": 30208, + "Y": -2944, + "Z": 26112, + "Room": 12, + "KeyItemsLow": "20213", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": -2176, + "Z": 25088, + "Room": 11 + }, + { + "X": 34304, + "Y": -4224, + "Z": 26112, + "Room": 13 + }, + { + "X": 42496, + "Y": -2304, + "Z": 17920, + "Room": 8 + }, + { + "X": 42496, + "Y": -2688, + "Z": 27136, + "Room": 26, + "Validated": false + }, + { + "X": 42496, + "Y": -1536, + "Z": 34304, + "Room": 23, + "Validated": false + }, + { + "X": 41472, + "Y": -4352, + "Z": 37376, + "Room": 25, + "Validated": false + }, + { + "X": 35328, + "Y": 0, + "Z": 33280, + "Room": 22, + "Validated": false + }, + { + "X": 38400, + "Y": 1536, + "Z": 17920, + "Room": 3 + }, + { + "X": 29184, + "Y": -2944, + "Z": 13824, + "Room": 5 + }, + { + "X": 30208, + "Y": -1280, + "Z": 12800, + "Room": 4 + }, + { + "X": 26112, + "Y": -256, + "Z": 20736, + "Room": 9, + "KeyItemsHigh": "20213" + }, + { + "X": 26112, + "Y": -256, + "Z": 20992, + "Room": 9, + "KeyItemsHigh": "20213", + "RequiresReturnPath": true + }, + { + "X": 26112, + "Y": -256, + "Z": 21248, + "Room": 9, + "KeyItemsHigh": "20213", + "Range": "Medium" + }, + { + "X": 25856, + "Y": -256, + "Z": 21248, + "Room": 9, + "KeyItemsHigh": "20213", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 25856, + "Y": -256, + "Z": 20992, + "Room": 9, + "KeyItemsHigh": "20213", + "Range": "Large" + }, + { + "X": 25856, + "Y": -256, + "Z": 20736, + "Room": 9, + "KeyItemsHigh": "20213", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL8C.PHD": [ + { + "X": 9728, + "Y": -512, + "Z": 49664, + "Room": 60 + }, + { + "X": 15872, + "Y": 512, + "Z": 49664, + "Room": 56, + "KeyItemsLow": "21191,21100,21196", + "Range": "Large" + }, + { + "X": 15872, + "Y": 512, + "Z": 49408, + "Room": 56, + "KeyItemsLow": "21191,21100,21196", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 20992, + "Y": -512, + "Z": 49664, + "Room": 41 + }, + { + "X": 38400, + "Y": -4352, + "Z": 48640, + "Room": 2 + }, + { + "X": 40448, + "Y": -6912, + "Z": 48896, + "Room": 1, + "KeyItemsLow": "21100,21196" + }, + { + "X": 40448, + "Y": -6912, + "Z": 48640, + "Room": 1, + "KeyItemsLow": "21100,21196", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": -6912, + "Z": 48384, + "Room": 1, + "KeyItemsLow": "21100,21196,21191", + "Range": "Medium" + }, + { + "X": 40704, + "Y": -6912, + "Z": 48384, + "Room": 1, + "KeyItemsLow": "21100,21196,21191", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -9216, + "Z": 46592, + "Room": 3 + }, + { + "X": 45568, + "Y": -8832, + "Z": 58880, + "Room": 11 + }, + { + "X": 41472, + "Y": -6528, + "Z": 59904, + "Room": 10 + }, + { + "X": 36352, + "Y": -8448, + "Z": 57856, + "Room": 11 + }, + { + "X": 35328, + "Y": -8448, + "Z": 56832, + "Room": 12 + }, + { + "X": 33280, + "Y": -11520, + "Z": 54784, + "Room": 58 + }, + { + "X": 31232, + "Y": -13568, + "Z": 54784, + "Room": 59 + }, + { + "X": 28160, + "Y": -13568, + "Z": 55808, + "Room": 16 + }, + { + "X": 44544, + "Y": -3200, + "Z": 44544, + "Room": 0 + }, + { + "X": 54784, + "Y": -768, + "Z": 44544, + "Room": 6 + }, + { + "X": 48640, + "Y": -1152, + "Z": 57856, + "Room": 7 + }, + { + "X": 55808, + "Y": -5632, + "Z": 48640, + "Room": 8 + }, + { + "X": 57856, + "Y": -9216, + "Z": 48640, + "Room": 9 + }, + { + "X": 44544, + "Y": -1280, + "Z": 38400, + "Room": 13 + }, + { + "X": 48640, + "Y": -6656, + "Z": 36352, + "Room": 14 + }, + { + "X": 49664, + "Y": -8448, + "Z": 36352, + "Room": 15 + }, + { + "X": 37376, + "Y": -1280, + "Z": 39424, + "Room": 33, + "KeyItemsLow": "21191" + }, + { + "X": 37376, + "Y": -1280, + "Z": 39168, + "Room": 33, + "KeyItemsLow": "21191", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": -1280, + "Z": 36352, + "Room": 35 + }, + { + "X": 36352, + "Y": 1536, + "Z": 33280, + "Room": 34 + }, + { + "X": 36352, + "Y": 4352, + "Z": 32256, + "Room": 36 + }, + { + "X": 34304, + "Y": 0, + "Z": 34304, + "Room": 37 + }, + { + "X": 34304, + "Y": -2560, + "Z": 37376, + "Room": 38 + }, + { + "X": 29184, + "Y": 3712, + "Z": 38400, + "Room": 19 + }, + { + "X": 28160, + "Y": -1792, + "Z": 39424, + "Room": 39 + }, + { + "X": 28416, + "Y": -2048, + "Z": 35328, + "Room": 40, + "KeyItemsHigh": "21191" + }, + { + "X": 28160, + "Y": -2048, + "Z": 35328, + "Room": 40, + "KeyItemsHigh": "21191", + "RequiresReturnPath": true + }, + { + "X": 27904, + "Y": -2048, + "Z": 35328, + "Room": 40, + "KeyItemsHigh": "21191", + "Range": "Medium" + }, + { + "X": 27904, + "Y": -2048, + "Z": 35072, + "Room": 40, + "KeyItemsHigh": "21191", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": -2048, + "Z": 35072, + "Room": 40, + "KeyItemsHigh": "21191", + "Range": "Large" + }, + { + "X": 28416, + "Y": -2048, + "Z": 35072, + "Room": 40, + "KeyItemsHigh": "21191", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": 23552, + "Z": 47360, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202" + }, + { + "X": 37376, + "Y": 23552, + "Z": 47616, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": 23552, + "Z": 47872, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202", + "Range": "Medium" + }, + { + "X": 37120, + "Y": 23552, + "Z": 47872, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 37120, + "Y": 23552, + "Z": 47616, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202", + "Range": "Large" + }, + { + "X": 37120, + "Y": 23552, + "Z": 47360, + "Room": 4, + "KeyItemsHigh": "21100,21196", + "KeyItemsLow": "21202", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 23552, + "Z": 52736, + "Room": 45 + }, + { + "X": 23040, + "Y": 9984, + "Z": 52736, + "Room": 49 + }, + { + "X": 22016, + "Y": 7680, + "Z": 51712, + "Room": 52 + }, + { + "X": 28160, + "Y": 5632, + "Z": 44544, + "Room": 21 + }, + { + "X": 29184, + "Y": 8448, + "Z": 44544, + "Room": 22 + }, + { + "X": 33280, + "Y": 17920, + "Z": 52736, + "Room": 5 + }, + { + "X": 30208, + "Y": 23552, + "Z": 44544, + "Room": 24 + }, + { + "X": 27136, + "Y": 20992, + "Z": 44544, + "Room": 20 + }, + { + "X": 24064, + "Y": 19456, + "Z": 45568, + "Room": 26 + }, + { + "X": 24064, + "Y": 17920, + "Z": 49664, + "Room": 27 + }, + { + "X": 28160, + "Y": 16128, + "Z": 48640, + "Room": 28 + }, + { + "X": 27136, + "Y": 14080, + "Z": 44544, + "Room": 29 + }, + { + "X": 24064, + "Y": 12800, + "Z": 43520, + "Room": 64, + "RoomType": "Challenge" + }, + { + "X": 23040, + "Y": 12800, + "Z": 44544, + "Room": 64, + "RoomType": "Challenge" + }, + { + "X": 24064, + "Y": 12544, + "Z": 45568, + "Room": 30 + }, + { + "X": 24064, + "Y": 11008, + "Z": 49664, + "Room": 31 + }, + { + "X": 28160, + "Y": 9216, + "Z": 48640, + "Room": 23 + }, + { + "X": 27136, + "Y": 7168, + "Z": 44544, + "Room": 25 + }, + { + "X": 24064, + "Y": 5632, + "Z": 45568, + "Room": 32 + }, + { + "X": 24064, + "Y": 4096, + "Z": 49664, + "Room": 42 + }, + { + "X": 28160, + "Y": 2304, + "Z": 48640, + "Room": 43 + }, + { + "X": 27136, + "Y": 512, + "Z": 44544, + "Room": 44 + }, + { + "X": 26112, + "Y": 4608, + "Z": 52480, + "Room": 57, + "KeyItemsHigh": "21202" + }, + { + "X": 25856, + "Y": 4608, + "Z": 52480, + "Room": 57, + "KeyItemsHigh": "21202", + "RequiresReturnPath": true + }, + { + "X": 25856, + "Y": 4608, + "Z": 52736, + "Room": 57, + "KeyItemsHigh": "21202", + "Range": "Medium" + }, + { + "X": 26112, + "Y": 4608, + "Z": 52736, + "Room": 57, + "KeyItemsHigh": "21202", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 26112, + "Y": 4608, + "Z": 52992, + "Room": 57, + "KeyItemsHigh": "21202", + "Range": "Large" + }, + { + "X": 25856, + "Y": 4608, + "Z": 52992, + "Room": 57, + "KeyItemsHigh": "21202", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": 3072, + "Z": 53760, + "Room": 61 + }, + { + "X": 28160, + "Y": 4608, + "Z": 59904, + "Room": 62 + }, + { + "X": 38400, + "Y": 3072, + "Z": 59904, + "Room": 63 + } + ], + "LEVEL10A.PHD": [ + { + "X": 49664, + "Y": -4480, + "Z": 1536, + "Room": 86 + }, + { + "X": 49306, + "Y": -2265, + "Z": 9728, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22146" + }, + { + "X": 49664, + "Y": -2176, + "Z": 9728, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22146", + "RequiresReturnPath": true + }, + { + "X": 49993, + "Y": -2093, + "Z": 9728, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22137,22146", + "Range": "Medium" + }, + { + "X": 49993, + "Y": -2095, + "Z": 9984, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22137,22146", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -2176, + "Z": 9984, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22137,22146", + "Range": "Large" + }, + { + "X": 49306, + "Y": -2265, + "Z": 9984, + "Room": 0, + "KeyItemsLow": "22148,22160,22183,22216,22137,22146", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -1664, + "Z": 22016, + "Room": 4 + }, + { + "X": 54784, + "Y": -2688, + "Z": 27136, + "Room": 8 + }, + { + "X": 55808, + "Y": -5376, + "Z": 27136, + "Room": 5 + }, + { + "X": 56832, + "Y": -5376, + "Z": 31232, + "Room": 12 + }, + { + "X": 48640, + "Y": -5376, + "Z": 30208, + "Room": 3, + "KeyItemsLow": "22137" + }, + { + "X": 48640, + "Y": -5376, + "Z": 30464, + "Room": 3, + "KeyItemsLow": "22137", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -5376, + "Z": 33280, + "Room": 9 + }, + { + "X": 45568, + "Y": -4352, + "Z": 40448, + "Room": 10 + }, + { + "X": 46592, + "Y": -3840, + "Z": 47616, + "Room": 15 + }, + { + "X": 46592, + "Y": -3840, + "Z": 49664, + "Room": 40 + }, + { + "X": 53760, + "Y": -9216, + "Z": 30208, + "Room": 7, + "KeyItemsHigh": "22137" + }, + { + "X": 54016, + "Y": -9216, + "Z": 30208, + "Room": 7, + "KeyItemsHigh": "22137", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": -9216, + "Z": 27136, + "Room": 6 + }, + { + "X": 57856, + "Y": -9216, + "Z": 27136, + "Room": 28 + }, + { + "X": 62976, + "Y": -7680, + "Z": 26112, + "Room": 18 + }, + { + "X": 66048, + "Y": -7168, + "Z": 26112, + "Room": 87, + "KeyItemsHigh": "22137", + "Range": "Medium" + }, + { + "X": 66048, + "Y": -7168, + "Z": 25856, + "Room": 87, + "KeyItemsHigh": "22137", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": -8448, + "Z": 25088, + "Room": 30 + }, + { + "X": 72192, + "Y": -7168, + "Z": 28160, + "Room": 92 + }, + { + "X": 69120, + "Y": -7168, + "Z": 28160, + "Room": 94 + }, + { + "X": 67072, + "Y": -7168, + "Z": 28160, + "Room": 91 + }, + { + "X": 68096, + "Y": -7168, + "Z": 31232, + "Room": 93 + }, + { + "X": 74240, + "Y": -7168, + "Z": 27136, + "Room": 31 + }, + { + "X": 83456, + "Y": -6656, + "Z": 29184, + "Room": 19 + }, + { + "X": 86528, + "Y": -6656, + "Z": 29184, + "Room": 33 + }, + { + "X": 99840, + "Y": -6656, + "Z": 26112, + "Room": 37 + }, + { + "X": 98816, + "Y": -8448, + "Z": 33280, + "Room": 38 + }, + { + "X": 92672, + "Y": -7168, + "Z": 32256, + "Room": 34 + }, + { + "X": 86528, + "Y": -8576, + "Z": 25088, + "Room": 36 + }, + { + "X": 84480, + "Y": -10112, + "Z": 26112, + "Room": 35 + }, + { + "X": 81408, + "Y": -5632, + "Z": 23040, + "Room": 41 + }, + { + "X": 77312, + "Y": -7168, + "Z": 19968, + "Room": 43 + }, + { + "X": 75264, + "Y": -10880, + "Z": 20992, + "Room": 44 + }, + { + "X": 75264, + "Y": -11008, + "Z": 25088, + "Room": 42 + }, + { + "X": 43520, + "Y": -5632, + "Z": 22016, + "Room": 11, + "KeyItemsLow": "22137" + }, + { + "X": 43520, + "Y": -5632, + "Z": 22272, + "Room": 11, + "KeyItemsLow": "22137", + "RequiresReturnPath": true + }, + { + "X": 43264, + "Y": -5632, + "Z": 22272, + "Room": 11, + "KeyItemsLow": "22137", + "Range": "Medium" + }, + { + "X": 43264, + "Y": -5632, + "Z": 22016, + "Room": 11, + "KeyItemsLow": "22137", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 55808, + "Y": -3840, + "Z": 44544, + "Room": 13 + }, + { + "X": 57856, + "Y": -6144, + "Z": 44544, + "Room": 14 + }, + { + "X": 77312, + "Y": -6912, + "Z": 34304, + "Room": 85, + "KeyItemsHigh": "22137" + }, + { + "X": 77568, + "Y": -6912, + "Z": 34304, + "Room": 85, + "KeyItemsHigh": "22137", + "RequiresReturnPath": true + }, + { + "X": 77568, + "Y": -6912, + "Z": 34560, + "Room": 85, + "KeyItemsHigh": "22137", + "Range": "Medium" + }, + { + "X": 77312, + "Y": -6912, + "Z": 34560, + "Room": 85, + "KeyItemsHigh": "22137", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 77312, + "Y": -6784, + "Z": 41472, + "Room": 45 + }, + { + "X": 76288, + "Y": -6656, + "Z": 50688, + "Room": 89 + }, + { + "X": 65024, + "Y": -9472, + "Z": 29440, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146" + }, + { + "X": 65024, + "Y": -9472, + "Z": 29184, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146", + "RequiresReturnPath": true + }, + { + "X": 65024, + "Y": -9472, + "Z": 28928, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146", + "Range": "Medium" + }, + { + "X": 64768, + "Y": -9472, + "Z": 28928, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64768, + "Y": -9472, + "Z": 29184, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146", + "Range": "Large" + }, + { + "X": 64768, + "Y": -9472, + "Z": 29440, + "Room": 32, + "KeyItemsHigh": "22148,22160,22183,22146", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": -12032, + "Z": 30208, + "Room": 101 + }, + { + "X": 62976, + "Y": -12032, + "Z": 34304, + "Room": 103 + }, + { + "X": 59904, + "Y": -10752, + "Z": 29184, + "Room": 39 + }, + { + "X": 59904, + "Y": -9728, + "Z": 24064, + "Room": 20 + }, + { + "X": 60928, + "Y": -3840, + "Z": 44544, + "Room": 21, + "KeyItemsLow": "22137" + }, + { + "X": 61184, + "Y": -3840, + "Z": 44544, + "Room": 21, + "KeyItemsLow": "22137", + "RequiresReturnPath": true + }, + { + "X": 61184, + "Y": -3840, + "Z": 44800, + "Room": 21, + "KeyItemsLow": "22137", + "Range": "Medium" + }, + { + "X": 60928, + "Y": -3840, + "Z": 44800, + "Room": 21, + "KeyItemsLow": "22137", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62208, + "Y": -3072, + "Z": 51712, + "Room": 17, + "KeyItemsHigh": "22137" + }, + { + "X": 62208, + "Y": -3072, + "Z": 51968, + "Room": 17, + "KeyItemsHigh": "22137", + "RequiresReturnPath": true + }, + { + "X": 61952, + "Y": -3072, + "Z": 51968, + "Room": 17, + "KeyItemsHigh": "22137", + "Range": "Medium" + }, + { + "X": 61952, + "Y": -3072, + "Z": 51712, + "Room": 17, + "KeyItemsHigh": "22137", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 61696, + "Y": -3072, + "Z": 51712, + "Room": 17, + "KeyItemsHigh": "22137", + "Range": "Large" + }, + { + "X": 61696, + "Y": -3072, + "Z": 51968, + "Room": 17, + "KeyItemsHigh": "22137", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 53760, + "Y": -2944, + "Z": 51712, + "Room": 22 + }, + { + "X": 67072, + "Y": 1408, + "Z": 57856, + "Room": 24 + }, + { + "X": 64000, + "Y": 384, + "Z": 56832, + "Room": 23, + "Validated": false + }, + { + "X": 55808, + "Y": 2944, + "Z": 62976, + "Room": 26 + }, + { + "X": 56832, + "Y": 2688, + "Z": 66048, + "Room": 52 + }, + { + "X": 70144, + "Y": 3456, + "Z": 65024, + "Room": 53 + }, + { + "X": 70144, + "Y": 3584, + "Z": 58880, + "Room": 25 + }, + { + "X": 76288, + "Y": 4224, + "Z": 58880, + "Room": 46 + }, + { + "X": 79360, + "Y": 4352, + "Z": 56832, + "Room": 47 + }, + { + "X": 80384, + "Y": 2560, + "Z": 52736, + "Room": 107 + }, + { + "X": 87552, + "Y": 2560, + "Z": 53760, + "Room": 106 + }, + { + "X": 87552, + "Y": 4352, + "Z": 54784, + "Room": 99 + }, + { + "X": 78336, + "Y": 2304, + "Z": 54784, + "Room": 100 + }, + { + "X": 91648, + "Y": 5632, + "Z": 59904, + "Room": 48 + }, + { + "X": 83456, + "Y": 3584, + "Z": 67072, + "Room": 51, + "KeyItemsLow": "22216", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 82432, + "Y": 3456, + "Z": 66048, + "Room": 55 + }, + { + "X": 75264, + "Y": -1024, + "Z": 65024, + "Room": 56 + }, + { + "X": 69120, + "Y": -1024, + "Z": 64000, + "Room": 54 + }, + { + "X": 53760, + "Y": -3072, + "Z": 61952, + "Room": 27 + }, + { + "X": 90624, + "Y": 5632, + "Z": 65024, + "Room": 49, + "KeyItemsLow": "22216", + "Range": "Medium" + }, + { + "X": 90624, + "Y": 5632, + "Z": 65280, + "Room": 49, + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 90368, + "Y": 5632, + "Z": 65280, + "Room": 49, + "KeyItemsLow": "22216", + "Range": "Large" + }, + { + "X": 87552, + "Y": 5632, + "Z": 69120, + "Room": 50 + }, + { + "X": 72192, + "Y": 5632, + "Z": 69120, + "Room": 57 + }, + { + "X": 72192, + "Y": 5632, + "Z": 75264, + "Room": 58 + }, + { + "X": 64000, + "Y": 8960, + "Z": 80384, + "Room": 102 + }, + { + "X": 58880, + "Y": 8960, + "Z": 79360, + "Room": 104 + }, + { + "X": 59904, + "Y": 6400, + "Z": 81408, + "Room": 105 + }, + { + "X": 71168, + "Y": 3328, + "Z": 92672, + "Room": 59 + }, + { + "X": 70144, + "Y": 3328, + "Z": 97792, + "Room": 60 + }, + { + "X": 56832, + "Y": 1024, + "Z": 95744, + "Room": 61 + }, + { + "X": 56832, + "Y": -2048, + "Z": 91648, + "Room": 62 + }, + { + "X": 55808, + "Y": -5632, + "Z": 92672, + "Room": 63 + }, + { + "X": 56832, + "Y": -9984, + "Z": 89600, + "Room": 64, + "KeyItemsLow": "22216" + }, + { + "X": 57088, + "Y": -9984, + "Z": 89600, + "Room": 64, + "KeyItemsLow": "22216", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": -11264, + "Z": 95744, + "Room": 65 + }, + { + "X": 55808, + "Y": -11264, + "Z": 98816, + "Room": 81 + }, + { + "X": 54784, + "Y": -10752, + "Z": 100864, + "Room": 74 + }, + { + "X": 50688, + "Y": -9984, + "Z": 96768, + "Room": 67 + }, + { + "X": 54784, + "Y": -9984, + "Z": 93696, + "Room": 66 + }, + { + "X": 53760, + "Y": -9984, + "Z": 93696, + "Room": 68 + }, + { + "X": 48640, + "Y": -11264, + "Z": 91648, + "Room": 69 + }, + { + "X": 47616, + "Y": -9984, + "Z": 92672, + "Room": 80 + }, + { + "X": 47616, + "Y": -11008, + "Z": 85504, + "Room": 75 + }, + { + "X": 37376, + "Y": -8960, + "Z": 95744, + "Room": 73 + }, + { + "X": 37376, + "Y": -8960, + "Z": 90624, + "Room": 70 + }, + { + "X": 37376, + "Y": -9088, + "Z": 91648, + "Room": 72 + }, + { + "X": 36352, + "Y": -11008, + "Z": 91648, + "Room": 78 + }, + { + "X": 34304, + "Y": -11520, + "Z": 96768, + "Room": 77, + "Validated": false + }, + { + "X": 34304, + "Y": -11264, + "Z": 89600, + "Room": 76 + }, + { + "X": 31232, + "Y": -14336, + "Z": 88576, + "Room": 79 + }, + { + "X": 34304, + "Y": -11136, + "Z": 84480, + "Room": 71 + }, + { + "X": 33280, + "Y": -8704, + "Z": 92672, + "Room": 82, + "KeyItemsHigh": "22216" + }, + { + "X": 33536, + "Y": -8704, + "Z": 92672, + "Room": 82, + "KeyItemsHigh": "22216", + "RequiresReturnPath": true + }, + { + "X": 33536, + "Y": -8704, + "Z": 92928, + "Room": 82, + "KeyItemsHigh": "22216", + "Range": "Medium" + }, + { + "X": 33280, + "Y": -8704, + "Z": 92928, + "Room": 82, + "KeyItemsHigh": "22216", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 33024, + "Y": -8704, + "Z": 92928, + "Room": 82, + "KeyItemsHigh": "22216", + "Range": "Large" + }, + { + "X": 33024, + "Y": -8704, + "Z": 92672, + "Room": 82, + "KeyItemsHigh": "22216", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "LEVEL10B.PHD": [ + { + "X": 57856, + "Y": 10240, + "Z": 10752, + "Room": 12 + }, + { + "X": 57856, + "Y": 10240, + "Z": 18944, + "Room": 9 + }, + { + "X": 54784, + "Y": 10240, + "Z": 36352, + "Room": 22 + }, + { + "X": 55808, + "Y": 7680, + "Z": 33280, + "Room": 7 + }, + { + "X": 65024, + "Y": 7680, + "Z": 33280, + "Room": 11 + }, + { + "X": 59904, + "Y": 10240, + "Z": 38400, + "Room": 6 + }, + { + "X": 59904, + "Y": 10240, + "Z": 41472, + "Room": 2 + }, + { + "X": 59904, + "Y": 11520, + "Z": 41472, + "Room": 5 + }, + { + "X": 59904, + "Y": 11520, + "Z": 40448, + "Room": 98 + }, + { + "X": 60928, + "Y": 11520, + "Z": 37376, + "Room": 99 + }, + { + "X": 64000, + "Y": 9984, + "Z": 38400, + "Room": 68 + }, + { + "X": 64000, + "Y": 10240, + "Z": 43520, + "Room": 8 + }, + { + "X": 67072, + "Y": 10240, + "Z": 43520, + "Room": 13 + }, + { + "X": 70144, + "Y": 11776, + "Z": 45568, + "Room": 15 + }, + { + "X": 73216, + "Y": 10752, + "Z": 43520, + "Room": 16 + }, + { + "X": 68096, + "Y": 10240, + "Z": 52736, + "Room": 17 + }, + { + "X": 61952, + "Y": 11264, + "Z": 58880, + "Room": 20 + }, + { + "X": 60928, + "Y": 14464, + "Z": 59904, + "Room": 21 + }, + { + "X": 53760, + "Y": 5376, + "Z": 50688, + "Room": 97 + }, + { + "X": 52736, + "Y": 11008, + "Z": 57856, + "Room": 18 + }, + { + "X": 61952, + "Y": 8320, + "Z": 62976, + "Room": 26 + }, + { + "X": 43520, + "Y": 10496, + "Z": 58880, + "Room": 27 + }, + { + "X": 42496, + "Y": 4864, + "Z": 48640, + "Room": 31 + }, + { + "X": 43520, + "Y": 7424, + "Z": 48640, + "Room": 29 + }, + { + "X": 52736, + "Y": 4992, + "Z": 48640, + "Room": 30 + }, + { + "X": 54784, + "Y": 5120, + "Z": 48640, + "Room": 1 + }, + { + "X": 52736, + "Y": 4864, + "Z": 44544, + "Room": 28 + }, + { + "X": 51712, + "Y": 6144, + "Z": 44544, + "Room": 77 + }, + { + "X": 49664, + "Y": 6144, + "Z": 44544, + "Room": 76 + }, + { + "X": 47616, + "Y": 3328, + "Z": 42496, + "Room": 78 + }, + { + "X": 46592, + "Y": 2816, + "Z": 39424, + "Room": 81 + }, + { + "X": 46592, + "Y": 4608, + "Z": 38400, + "Room": 79 + }, + { + "X": 46592, + "Y": 3328, + "Z": 32256, + "Room": 32 + }, + { + "X": 48640, + "Y": 2816, + "Z": 29184, + "Room": 33 + }, + { + "X": 53760, + "Y": 0, + "Z": 36352, + "Room": 34 + }, + { + "X": 57856, + "Y": -640, + "Z": 31232, + "Room": 60 + }, + { + "X": 54784, + "Y": 0, + "Z": 37376, + "Room": 72 + }, + { + "X": 49664, + "Y": 256, + "Z": 39424, + "Room": 39 + }, + { + "X": 58880, + "Y": 0, + "Z": 36352, + "Room": 25 + }, + { + "X": 60928, + "Y": 0, + "Z": 36352, + "Room": 35 + }, + { + "X": 60928, + "Y": 0, + "Z": 41472, + "Room": 0 + }, + { + "X": 62976, + "Y": 0, + "Z": 44544, + "Room": 37 + }, + { + "X": 65024, + "Y": 0, + "Z": 46592, + "Room": 38 + }, + { + "X": 65024, + "Y": 1024, + "Z": 54784, + "Room": 61 + }, + { + "X": 61952, + "Y": 1024, + "Z": 56832, + "Room": 40 + }, + { + "X": 49664, + "Y": 1024, + "Z": 66048, + "Room": 69 + }, + { + "X": 50688, + "Y": -512, + "Z": 53760, + "Room": 86 + }, + { + "X": 56832, + "Y": -5120, + "Z": 51712, + "Room": 41 + }, + { + "X": 56832, + "Y": -5120, + "Z": 49664, + "Room": 3 + }, + { + "X": 53760, + "Y": -5120, + "Z": 47616, + "Room": 42 + }, + { + "X": 50688, + "Y": -5120, + "Z": 45568, + "Room": 87 + }, + { + "X": 51712, + "Y": -5120, + "Z": 40448, + "Room": 88 + }, + { + "X": 45568, + "Y": -5120, + "Z": 39424, + "Room": 89 + }, + { + "X": 39424, + "Y": -6656, + "Z": 42496, + "Room": 90 + }, + { + "X": 38400, + "Y": -6656, + "Z": 41472, + "Room": 92 + }, + { + "X": 38400, + "Y": -6656, + "Z": 36352, + "Room": 91 + }, + { + "X": 51712, + "Y": -8960, + "Z": 34304, + "Room": 100 + }, + { + "X": 52736, + "Y": -8576, + "Z": 36352, + "Room": 70 + }, + { + "X": 59904, + "Y": -8448, + "Z": 36352, + "Room": 71 + }, + { + "X": 62976, + "Y": -8448, + "Z": 35328, + "Room": 94, + "Validated": false + }, + { + "X": 59904, + "Y": -10240, + "Z": 37376, + "Room": 44 + }, + { + "X": 59904, + "Y": -10240, + "Z": 41472, + "Room": 4 + }, + { + "X": 62976, + "Y": -10240, + "Z": 43520, + "Room": 45 + }, + { + "X": 65024, + "Y": -10240, + "Z": 44544, + "Room": 46 + }, + { + "X": 65024, + "Y": -10240, + "Z": 54784, + "Room": 93 + }, + { + "X": 59904, + "Y": -11392, + "Z": 54784, + "Room": 47 + }, + { + "X": 52736, + "Y": -9344, + "Z": 55808, + "Room": 80 + }, + { + "X": 56832, + "Y": -10240, + "Z": 55808, + "Room": 84 + }, + { + "X": 55808, + "Y": -10112, + "Z": 53760, + "Room": 82 + }, + { + "X": 48640, + "Y": -13056, + "Z": 54784, + "Room": 62 + }, + { + "X": 47616, + "Y": -13312, + "Z": 55808, + "Room": 74 + }, + { + "X": 47616, + "Y": -14592, + "Z": 58880, + "Room": 73 + }, + { + "X": 45568, + "Y": -17536, + "Z": 62976, + "Room": 75, + "Validated": false + }, + { + "X": 44544, + "Y": -14208, + "Z": 62976, + "Room": 59 + }, + { + "X": 41472, + "Y": -13056, + "Z": 62976, + "Room": 10 + }, + { + "X": 31232, + "Y": -13312, + "Z": 59904, + "Room": 57 + }, + { + "X": 40448, + "Y": -15104, + "Z": 55808, + "Room": 55 + }, + { + "X": 40448, + "Y": -18432, + "Z": 49664, + "Room": 53 + }, + { + "X": 43520, + "Y": -18688, + "Z": 45568, + "Room": 54 + }, + { + "X": 48640, + "Y": -18688, + "Z": 39424, + "Room": 51 + }, + { + "X": 48640, + "Y": -18688, + "Z": 51712, + "Room": 52 + }, + { + "X": 48640, + "Y": -18688, + "Z": 45568, + "Room": 50 + }, + { + "X": 54784, + "Y": -18688, + "Z": 44544, + "Room": 49 + }, + { + "X": 57856, + "Y": -15616, + "Z": 45568, + "Room": 36 + }, + { + "X": 65024, + "Y": -15616, + "Z": 45568, + "Room": 48, + "Validated": false + }, + { + "X": 56832, + "Y": -15616, + "Z": 40448, + "Room": 56 + } + ], + "LEVEL10C.PHD": [ + { + "X": 58880, + "Y": -15616, + "Z": 11776, + "Room": 36 + }, + { + "X": 60928, + "Y": -10240, + "Z": 7680, + "Room": 4, + "Validated": false + }, + { + "X": 62976, + "Y": 0, + "Z": 10752, + "Room": 0, + "Validated": false + }, + { + "X": 60928, + "Y": 10240, + "Z": 7680, + "Room": 2, + "Validated": false + }, + { + "X": 66048, + "Y": -15616, + "Z": 11776, + "Room": 48 + }, + { + "X": 69120, + "Y": -15616, + "Z": 12800, + "Room": 6 + }, + { + "X": 69120, + "Y": -12544, + "Z": 19968, + "Room": 7 + }, + { + "X": 69120, + "Y": -12544, + "Z": 20992, + "Room": 8 + }, + { + "X": 71168, + "Y": -11008, + "Z": 26112, + "Room": 11 + }, + { + "X": 72192, + "Y": -11264, + "Z": 25088, + "Room": 12 + }, + { + "X": 72192, + "Y": -12672, + "Z": 20992, + "Room": 10 + }, + { + "X": 69120, + "Y": -14592, + "Z": 23040, + "Room": 9 + }, + { + "X": 69120, + "Y": -14592, + "Z": 27136, + "Room": 13 + }, + { + "X": 68096, + "Y": -14592, + "Z": 29184, + "Room": 14 + }, + { + "X": 66048, + "Y": -14592, + "Z": 30208, + "Room": 16 + }, + { + "X": 61952, + "Y": -12544, + "Z": 29184, + "Room": 15 + }, + { + "X": 62976, + "Y": -13568, + "Z": 27136, + "Room": 17 + }, + { + "X": 62976, + "Y": -13568, + "Z": 24064, + "Room": 18 + }, + { + "X": 62976, + "Y": -13568, + "Z": 18944, + "Room": 63 + }, + { + "X": 53760, + "Y": -13824, + "Z": 18944, + "Room": 38 + }, + { + "X": 64000, + "Y": -18688, + "Z": 16896, + "Room": 61 + }, + { + "X": 53760, + "Y": -23040, + "Z": 15872, + "Room": 60 + }, + { + "X": 52736, + "Y": -23040, + "Z": 8704, + "Room": 47 + }, + { + "X": 52736, + "Y": -18688, + "Z": 8704, + "Room": 50 + }, + { + "X": 55808, + "Y": -18688, + "Z": 10752, + "Room": 49 + }, + { + "X": 44544, + "Y": -18688, + "Z": 11776, + "Room": 54 + }, + { + "X": 42496, + "Y": -18688, + "Z": 11776, + "Room": 53 + }, + { + "X": 49664, + "Y": -18688, + "Z": 5632, + "Room": 51 + }, + { + "X": 54784, + "Y": -16384, + "Z": 5632, + "Room": 56 + }, + { + "X": 50688, + "Y": -18688, + "Z": 17920, + "Room": 52 + }, + { + "X": 46592, + "Y": -13056, + "Z": 16896, + "Room": 20 + }, + { + "X": 47616, + "Y": -12544, + "Z": 23040, + "Room": 21 + }, + { + "X": 47616, + "Y": -10880, + "Z": 34304, + "Room": 22 + }, + { + "X": 37376, + "Y": -11008, + "Z": 35328, + "Room": 23 + }, + { + "X": 34304, + "Y": -9088, + "Z": 35328, + "Room": 24 + }, + { + "X": 28160, + "Y": -5120, + "Z": 41472, + "Room": 25 + }, + { + "X": 32256, + "Y": -3584, + "Z": 45568, + "Room": 26 + }, + { + "X": 34304, + "Y": -512, + "Z": 40448, + "Room": 19 + }, + { + "X": 43520, + "Y": -512, + "Z": 39424, + "Room": 57 + }, + { + "X": 45568, + "Y": -768, + "Z": 51712, + "Room": 27 + }, + { + "X": 46592, + "Y": 3072, + "Z": 50688, + "Room": 28 + }, + { + "X": 59904, + "Y": -768, + "Z": 51712, + "Room": 29 + }, + { + "X": 68096, + "Y": 0, + "Z": 51712, + "Room": 64 + }, + { + "X": 65024, + "Y": 3968, + "Z": 53760, + "Room": 30, + "Validated": false + }, + { + "X": 65024, + "Y": 12544, + "Z": 50688, + "Room": 32 + }, + { + "X": 66048, + "Y": 8704, + "Z": 51712, + "Room": 31 + }, + { + "X": 65024, + "Y": 12032, + "Z": 55808, + "Room": 37 + }, + { + "X": 65024, + "Y": 9600, + "Z": 61952, + "Room": 33 + }, + { + "X": 65024, + "Y": 9728, + "Z": 64000, + "Room": 34 + }, + { + "X": 68096, + "Y": 9728, + "Z": 73216, + "Room": 43 + }, + { + "X": 48640, + "Y": 8832, + "Z": 68096, + "Room": 41 + }, + { + "X": 44544, + "Y": 9728, + "Z": 68096, + "Room": 42 + }, + { + "X": 45568, + "Y": 8064, + "Z": 74240, + "Room": 39 + }, + { + "X": 51712, + "Y": 5888, + "Z": 80384, + "Room": 35 + }, + { + "X": 51712, + "Y": 5888, + "Z": 82432, + "Room": 40 + }, + { + "X": 56832, + "Y": 2048, + "Z": 81408, + "Room": 45 + }, + { + "X": 56832, + "Y": 3584, + "Z": 76288, + "Room": 35 + }, + { + "X": 61952, + "Y": 2048, + "Z": 68096, + "Room": 44 + }, + { + "X": 61952, + "Y": 2048, + "Z": 62976, + "Room": 58 + }, + { + "X": 53760, + "Y": -1792, + "Z": 61952, + "Room": 55 + }, + { + "X": 53760, + "Y": 768, + "Z": 72192, + "Room": 46 + }, + { + "X": 48640, + "Y": 0, + "Z": 73216, + "Room": 59 + } + ] } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Locations/invalid_item_locations.json b/TRRandomizerCore/Resources/TR2/Locations/invalid_item_locations.json index ef5a74921..535e11335 100644 --- a/TRRandomizerCore/Resources/TR2/Locations/invalid_item_locations.json +++ b/TRRandomizerCore/Resources/TR2/Locations/invalid_item_locations.json @@ -40,6 +40,12 @@ "Room": 52, "Validated": false }, + { + "X": 18944, + "Y": 3456, + "Z": 56832, + "Room": 53 + }, { "X": 83456, "Y": 18304, @@ -1195,6 +1201,12 @@ "Room": 50, "InvalidatesRoom": true }, + { + "X": 33280, + "Y": -2560, + "Z": 94720, + "Room": 92 + }, { "X": 18944, "Y": -8704, @@ -1346,7 +1358,8 @@ "X": 41472, "Y": -5120, "Z": 55808, - "Room": 31 + "Room": 31, + "TargetType": 1 } ], "PLATFORM.TR2": [ @@ -1430,6 +1443,34 @@ "Z": 64000, "Room": 36, "InvalidatesRoom": true + }, + { + "X": 40448, + "Y": -5120, + "Z": 77312, + "Room": 15, + "TargetType": 1 + }, + { + "X": 45568, + "Y": -5120, + "Z": 82432, + "Room": 14, + "TargetType": 1 + }, + { + "X": 50688, + "Y": -5120, + "Z": 77312, + "Room": 16, + "TargetType": 1 + }, + { + "X": 45568, + "Y": -5120, + "Z": 72192, + "Room": 13, + "TargetType": 1 } ], "UNWATER.TR2": [ @@ -1680,11 +1721,18 @@ "Z": 86528, "Room": 60 }, + { + "X": 68096, + "Y": 4352, + "Z": 86528, + "Room": 60 + }, { "X": 66048, "Y": 4864, "Z": 70144, - "Room": 49 + "Room": 49, + "TargetType": 1 }, { "X": 58880, @@ -1712,6 +1760,18 @@ "Z": 36352, "Room": 40 }, + { + "X": 47616, + "Y": 3840, + "Z": 34304, + "Room": 36 + }, + { + "X": 46592, + "Y": 3840, + "Z": 34304, + "Room": 36 + }, { "X": 68096, "Y": 10752, @@ -2002,6 +2062,20 @@ "Z": 28160, "Room": 51, "InvalidatesRoom": true + }, + { + "X": 48640, + "Y": -2560, + "Z": 42496, + "Room": 36, + "TargetType": 1 + }, + { + "X": 49664, + "Y": -2560, + "Z": 42496, + "Room": 36, + "TargetType": 1 } ], "DECK.TR2": [ @@ -2230,6 +2304,54 @@ "Z": 67072, "Room": 10 }, + { + "X": 58880, + "Y": 4864, + "Z": 69120, + "Room": 10 + }, + { + "X": 59904, + "Y": 4608, + "Z": 67072, + "Room": 10 + }, + { + "X": 60928, + "Y": 3584, + "Z": 66048, + "Room": 10 + }, + { + "X": 60928, + "Y": 4608, + "Z": 65024, + "Room": 10 + }, + { + "X": 61952, + "Y": 4864, + "Z": 65024, + "Room": 11 + }, + { + "X": 61952, + "Y": 5376, + "Z": 64000, + "Room": 11 + }, + { + "X": 61952, + "Y": 4096, + "Z": 66048, + "Room": 11 + }, + { + "X": 61952, + "Y": 3584, + "Z": 67072, + "Room": 11 + }, { "X": 52736, "Y": 3072, @@ -2535,6 +2657,26 @@ "Room": 10, "InvalidatesRoom": true }, + { + "X": 12800, + "Y": -1536, + "Z": 51712, + "Room": 63, + "TargetType": 1 + }, + { + "X": 11776, + "Y": -1536, + "Z": 52736, + "Room": 63, + "TargetType": 1 + }, + { + "X": 76288, + "Y": 2816, + "Z": 29184, + "Room": 0 + }, { "X": 71168, "Y": -896, @@ -2542,6 +2684,20 @@ "Room": 10, "Validated": false }, + { + "X": 68096, + "Y": -384, + "Z": 29184, + "Room": 4, + "TargetType": 1 + }, + { + "X": 67072, + "Y": -896, + "Z": 29184, + "Room": 4, + "TargetType": 1 + }, { "X": 71168, "Y": -1024, @@ -3002,7 +3158,7 @@ "Room": 63 }, { - "X": 15872, + "X": 16896, "Y": 1024, "Z": 57856, "Room": 70 @@ -3629,6 +3785,54 @@ "Y": -4608, "Z": 65024, "Room": 55 + }, + { + "X": 69120, + "Y": 0, + "Z": 30208, + "Room": 12 + }, + { + "X": 70144, + "Y": 0, + "Z": 30208, + "Room": 12 + }, + { + "X": 71168, + "Y": 0, + "Z": 30208, + "Room": 12 + }, + { + "X": 72192, + "Y": 0, + "Z": 30208, + "Room": 12 + }, + { + "X": 72192, + "Y": 0, + "Z": 29184, + "Room": 12 + }, + { + "X": 71168, + "Y": 0, + "Z": 29184, + "Room": 12 + }, + { + "X": 70144, + "Y": 0, + "Z": 29184, + "Room": 12 + }, + { + "X": 69120, + "Y": 0, + "Z": 29184, + "Room": 12 } ], "CATACOMB.TR2": [ @@ -3638,6 +3842,31 @@ "Z": 34304, "Room": 0 }, + { + "X": 34304, + "Y": 10496, + "Z": 40448, + "Room": 17 + }, + { + "X": 35328, + "Y": 10496, + "Z": 40448, + "Room": 17 + }, + { + "X": 44544, + "Y": 4864, + "Z": 66048, + "Room": 42 + }, + { + "X": 53760, + "Y": 11520, + "Z": 39424, + "Room": 121, + "InvalidatesRoom": true + }, { "X": 27136, "Y": 1024, @@ -4169,11 +4398,64 @@ "Room": 31 }, { - "X": 37376, - "Y": 4224, + "X": 49664, + "Y": 6656, "Z": 20992, - "Room": 73, - "InvalidatesRoom": true + "Room": 73 + }, + { + "X": 49664, + "Y": 6784, + "Z": 19968, + "Room": 73 + }, + { + "X": 49664, + "Y": 6784, + "Z": 18944, + "Room": 73 + }, + { + "X": 48640, + "Y": 6656, + "Z": 20992, + "Room": 73 + }, + { + "X": 48640, + "Y": 6784, + "Z": 19968, + "Room": 73 + }, + { + "X": 48640, + "Y": 6784, + "Z": 18944, + "Room": 73 + }, + { + "X": 48640, + "Y": 6656, + "Z": 17920, + "Room": 73 + }, + { + "X": 48640, + "Y": 6528, + "Z": 16896, + "Room": 73 + }, + { + "X": 47616, + "Y": 6272, + "Z": 16896, + "Room": 73 + }, + { + "X": 47616, + "Y": 6400, + "Z": 17920, + "Room": 73 }, { "X": 53760, @@ -4228,6 +4510,12 @@ "Y": 6656, "Z": 29184, "Room": 10 + }, + { + "X": 49664, + "Y": 6912, + "Z": 35328, + "Room": 10 } ], "EMPRTOMB.TR2": [ @@ -4238,6 +4526,33 @@ "Room": 190, "InvalidatesRoom": true }, + { + "X": 28160, + "Y": -2560, + "Z": 69120, + "Room": 90 + }, + { + "X": 53760, + "Y": 15360, + "Z": 36352, + "Room": 40, + "InvalidatesRoom": true + }, + { + "X": 52736, + "Y": 15232, + "Z": 36352, + "Room": 40, + "Validated": false + }, + { + "X": 51712, + "Y": 14976, + "Z": 36352, + "Room": 40, + "Validated": false + }, { "X": 51712, "Y": 12544, @@ -4301,6 +4616,47 @@ "Z": 70144, "Room": 92 }, + { + "X": 19968, + "Y": -7680, + "Z": 70144, + "Room": 92, + "TargetType": 1 + }, + { + "X": 19968, + "Y": -7680, + "Z": 71168, + "Room": 92, + "TargetType": 1 + }, + { + "X": 19968, + "Y": -6656, + "Z": 69120, + "Room": 92, + "TargetType": 1 + }, + { + "X": 19968, + "Y": -5632, + "Z": 68096, + "Room": 92, + "TargetType": 1 + }, + { + "X": 18944, + "Y": -5632, + "Z": 68096, + "Room": 92, + "TargetType": 1 + }, + { + "X": 18944, + "Y": -2560, + "Z": 67072, + "Room": 90 + }, { "X": 20992, "Y": -7680, @@ -4811,6 +5167,12 @@ "Z": 60928, "Room": 91 }, + { + "X": 20992, + "Y": -2560, + "Z": 61952, + "Room": 90 + }, { "X": 23040, "Y": -1024, @@ -5121,6 +5483,12 @@ "Room": 37, "InvalidatesRoom": true }, + { + "X": 32256, + "Y": 2560, + "Z": 65024, + "Room": 72 + }, { "X": 38400, "Y": -4864, diff --git a/TRRandomizerCore/Resources/TR2/Locations/routes.json b/TRRandomizerCore/Resources/TR2/Locations/routes.json index 7a73a41bf..c2da992a3 100644 --- a/TRRandomizerCore/Resources/TR2/Locations/routes.json +++ b/TRRandomizerCore/Resources/TR2/Locations/routes.json @@ -1,2 +1,13675 @@ { + "WALL.TR2": [ + { + "X": 62976, + "Y": 0, + "Z": 25088, + "Room": 78, + "Validated": false + }, + { + "X": 62720, + "Y": 2688, + "Z": 23040, + "Room": 35, + "KeyItemsLow": "10250,10291", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": 2688, + "Z": 23040, + "Room": 35, + "KeyItemsLow": "10250,10291", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 5632, + "Z": 30208, + "Room": 36 + }, + { + "X": 69120, + "Y": 6400, + "Z": 37376, + "Room": 37 + }, + { + "X": 58880, + "Y": 1536, + "Z": 32256, + "Room": 38 + }, + { + "X": 56832, + "Y": -1408, + "Z": 35328, + "Room": 70 + }, + { + "X": 57856, + "Y": -4096, + "Z": 29184, + "Room": 69, + "Validated": false + }, + { + "X": 66048, + "Y": -4736, + "Z": 28160, + "Room": 67, + "Validated": false + }, + { + "X": 64000, + "Y": -3200, + "Z": 37376, + "Room": 68, + "Validated": false + }, + { + "X": 55808, + "Y": -5632, + "Z": 34304, + "Room": 73, + "Validated": false + }, + { + "X": 53760, + "Y": -3072, + "Z": 32256, + "Room": 31, + "KeyItemsLow": "10250,10291", + "RequiresReturnPath": true + }, + { + "X": 54016, + "Y": 1536, + "Z": 36352, + "Room": 33, + "KeyItemsLow": "10250,10291" + }, + { + "X": 53760, + "Y": 1536, + "Z": 36352, + "Room": 33, + "KeyItemsLow": "10250,10291", + "Range": "Medium" + }, + { + "X": 53504, + "Y": 1536, + "Z": 36352, + "Room": 33, + "KeyItemsLow": "10250,10291", + "Range": "Large" + }, + { + "X": 50688, + "Y": -1024, + "Z": 31232, + "Room": 3 + }, + { + "X": 47616, + "Y": 0, + "Z": 34304, + "Room": 0 + }, + { + "X": 47616, + "Y": 0, + "Z": 30208, + "Room": 2 + }, + { + "X": 39424, + "Y": 128, + "Z": 33280, + "Room": 77 + }, + { + "X": 40448, + "Y": 7808, + "Z": 38400, + "Room": 9 + }, + { + "X": 43520, + "Y": 6784, + "Z": 39424, + "Room": 34 + }, + { + "X": 40448, + "Y": 3712, + "Z": 41472, + "Room": 7 + }, + { + "X": 48640, + "Y": 2560, + "Z": 41472, + "Room": 24 + }, + { + "X": 30208, + "Y": 2944, + "Z": 40448, + "Room": 23 + }, + { + "X": 28160, + "Y": -256, + "Z": 38400, + "Room": 21, + "Validated": false + }, + { + "X": 28160, + "Y": -3456, + "Z": 46592, + "Room": 18, + "Validated": false + }, + { + "X": 31232, + "Y": -2176, + "Z": 47616, + "Room": 1, + "Validated": false + }, + { + "X": 35328, + "Y": -5504, + "Z": 48640, + "Room": 16, + "Validated": false + }, + { + "X": 36352, + "Y": -6528, + "Z": 49664, + "Room": 17, + "Validated": false + }, + { + "X": 48640, + "Y": -2176, + "Z": 47616, + "Room": 22, + "Validated": false + }, + { + "X": 52736, + "Y": -3712, + "Z": 45568, + "Room": 20, + "Validated": false + }, + { + "X": 51712, + "Y": -6144, + "Z": 37376, + "Room": 19, + "Validated": false + }, + { + "X": 47616, + "Y": -6144, + "Z": 37376, + "Room": 8, + "Validated": false + }, + { + "X": 47616, + "Y": -6144, + "Z": 34304, + "Room": 6, + "Validated": false + }, + { + "X": 47616, + "Y": -6144, + "Z": 30208, + "Room": 5, + "Validated": false + }, + { + "X": 48640, + "Y": -6144, + "Z": 30208, + "Room": 29, + "Validated": false + }, + { + "X": 50688, + "Y": -6784, + "Z": 31232, + "Room": 14, + "Validated": false + }, + { + "X": 51712, + "Y": -5632, + "Z": 28160, + "Room": 27, + "Validated": false + }, + { + "X": 49664, + "Y": -2688, + "Z": 29184, + "Room": 25, + "Validated": false + }, + { + "X": 47616, + "Y": -4224, + "Z": 27136, + "Room": 12, + "Validated": false + }, + { + "X": 48640, + "Y": -7040, + "Z": 25088, + "Room": 29, + "Validated": false + }, + { + "X": 47616, + "Y": -6784, + "Z": 25088, + "Room": 5, + "Validated": false + }, + { + "X": 30208, + "Y": -5632, + "Z": 27136, + "Room": 28, + "Validated": false + }, + { + "X": 28160, + "Y": -6400, + "Z": 27136, + "Room": 30, + "Validated": false + }, + { + "X": 24900, + "Y": -5120, + "Z": 28167, + "Room": 28, + "Validated": false + }, + { + "X": 29184, + "Y": -2304, + "Z": 30208, + "Room": 26, + "Validated": false + }, + { + "X": 30208, + "Y": -6144, + "Z": 30208, + "Room": 30, + "Validated": false + }, + { + "X": 30208, + "Y": -7168, + "Z": 31232, + "Room": 11, + "Validated": false + }, + { + "X": 30208, + "Y": -6144, + "Z": 37376, + "Room": 10, + "Validated": false + }, + { + "X": 30208, + "Y": 0, + "Z": 34048, + "Room": 4, + "KeyItemsHigh": "10291" + }, + { + "X": 30208, + "Y": 0, + "Z": 34304, + "Room": 4, + "KeyItemsHigh": "10291", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 0, + "Z": 34560, + "Room": 4, + "KeyItemsHigh": "10291", + "Range": "Medium" + }, + { + "X": 29952, + "Y": 0, + "Z": 34560, + "Room": 4, + "KeyItemsHigh": "10291", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 29952, + "Y": 0, + "Z": 34304, + "Room": 4, + "KeyItemsHigh": "10291", + "Range": "Large" + }, + { + "X": 29952, + "Y": 0, + "Z": 34048, + "Room": 4, + "KeyItemsHigh": "10291", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": -2560, + "Z": 32256, + "Room": 32 + }, + { + "X": 24064, + "Y": -256, + "Z": 36096, + "Room": 41, + "KeyItemsHigh": "10250" + }, + { + "X": 24064, + "Y": -256, + "Z": 36352, + "Room": 41, + "KeyItemsHigh": "10250", + "RequiresReturnPath": true + }, + { + "X": 24064, + "Y": -256, + "Z": 36608, + "Room": 41, + "KeyItemsHigh": "10250", + "Range": "Medium" + }, + { + "X": 23808, + "Y": -256, + "Z": 36608, + "Room": 41, + "KeyItemsHigh": "10250", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 23808, + "Y": -256, + "Z": 36352, + "Room": 41, + "KeyItemsHigh": "10250", + "Range": "Large" + }, + { + "X": 23808, + "Y": -256, + "Z": 36096, + "Room": 41, + "KeyItemsHigh": "10250", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 18944, + "Y": -256, + "Z": 36352, + "Room": 42 + }, + { + "X": 11776, + "Y": 0, + "Z": 36352, + "Room": 44 + }, + { + "X": 11776, + "Y": 4096, + "Z": 44544, + "Room": 46 + }, + { + "X": 9728, + "Y": 2304, + "Z": 45568, + "Room": 45, + "Validated": false + }, + { + "X": 11776, + "Y": 3328, + "Z": 51712, + "Room": 47 + }, + { + "X": 11776, + "Y": 3328, + "Z": 56832, + "Room": 52 + }, + { + "X": 16896, + "Y": 3328, + "Z": 57856, + "Room": 53 + }, + { + "X": 20992, + "Y": 3968, + "Z": 57856, + "Room": 49 + }, + { + "X": 25088, + "Y": 8192, + "Z": 59904, + "Room": 50 + }, + { + "X": 28160, + "Y": 6912, + "Z": 59904, + "Room": 51 + }, + { + "X": 33280, + "Y": 6912, + "Z": 59904, + "Room": 48 + }, + { + "X": 40448, + "Y": 7168, + "Z": 60928, + "Room": 54 + }, + { + "X": 44544, + "Y": 7168, + "Z": 60928, + "Room": 55 + }, + { + "X": 55808, + "Y": 11264, + "Z": 60928, + "Room": 56 + }, + { + "X": 55808, + "Y": 13312, + "Z": 64000, + "Room": 57 + }, + { + "X": 55808, + "Y": 13312, + "Z": 68096, + "Room": 59 + }, + { + "X": 59904, + "Y": 16000, + "Z": 73216, + "Room": 58 + }, + { + "X": 57856, + "Y": 15104, + "Z": 76288, + "Room": 66 + }, + { + "X": 57856, + "Y": 15488, + "Z": 72192, + "Room": 75 + }, + { + "X": 57856, + "Y": 24576, + "Z": 67072, + "Room": 83 + }, + { + "X": 62976, + "Y": 24832, + "Z": 69120, + "Room": 63 + }, + { + "X": 69120, + "Y": 25856, + "Z": 74240, + "Room": 62 + }, + { + "X": 79360, + "Y": 26880, + "Z": 74240, + "Room": 79 + }, + { + "X": 58880, + "Y": 11648, + "Z": 67072, + "Room": 76 + }, + { + "X": 61952, + "Y": 18048, + "Z": 70144, + "Room": 61, + "Validated": false + }, + { + "X": 67072, + "Y": 17664, + "Z": 79360, + "Room": 61 + }, + { + "X": 69120, + "Y": 17280, + "Z": 69120, + "Room": 74 + }, + { + "X": 80384, + "Y": 19712, + "Z": 74240, + "Room": 39 + }, + { + "X": 88576, + "Y": 20608, + "Z": 73216, + "Room": 64 + }, + { + "X": 88576, + "Y": 20480, + "Z": 69120, + "Room": 65 + } + ], + "BOAT.TR2": [ + { + "X": 58624, + "Y": 0, + "Z": 23040, + "Room": 0, + "KeyItemsLow": "11210" + }, + { + "X": 58880, + "Y": 0, + "Z": 23040, + "Room": 0, + "KeyItemsLow": "11210", + "RequiresReturnPath": true + }, + { + "X": 59136, + "Y": 0, + "Z": 23040, + "Room": 0, + "KeyItemsLow": "11210", + "Range": "Medium" + }, + { + "X": 59136, + "Y": 0, + "Z": 23296, + "Room": 0, + "KeyItemsLow": "11210", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 58880, + "Y": 0, + "Z": 23296, + "Room": 0, + "KeyItemsLow": "11210,11502,11353", + "Range": "Large" + }, + { + "X": 58624, + "Y": 0, + "Z": 23296, + "Room": 0, + "KeyItemsLow": "11210,11502,11353", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": -6656, + "Z": 29184, + "Room": 4, + "Validated": false + }, + { + "X": 58880, + "Y": 0, + "Z": 35328, + "Room": 6 + }, + { + "X": 55808, + "Y": -6656, + "Z": 38400, + "Room": 8, + "Validated": false + }, + { + "X": 54784, + "Y": 0, + "Z": 37376, + "Room": 16 + }, + { + "X": 52736, + "Y": 0, + "Z": 37376, + "Room": 17 + }, + { + "X": 50688, + "Y": -6400, + "Z": 34304, + "Room": 37, + "Validated": false + }, + { + "X": 53760, + "Y": -6400, + "Z": 38400, + "Room": 9, + "Validated": false + }, + { + "X": 53760, + "Y": -6400, + "Z": 41472, + "Room": 35, + "Validated": false + }, + { + "X": 47616, + "Y": 1536, + "Z": 37376, + "Room": 11 + }, + { + "X": 47616, + "Y": 1536, + "Z": 38400, + "Room": 14 + }, + { + "X": 47616, + "Y": 1408, + "Z": 43520, + "Room": 15 + }, + { + "X": 44544, + "Y": 1280, + "Z": 39424, + "Room": 30 + }, + { + "X": 42496, + "Y": 0, + "Z": 40448, + "Room": 29 + }, + { + "X": 49664, + "Y": 0, + "Z": 40448, + "Room": 20 + }, + { + "X": 50688, + "Y": -6656, + "Z": 43520, + "Room": 31, + "Validated": false + }, + { + "X": 48640, + "Y": -3328, + "Z": 47616, + "Room": 32, + "Validated": false + }, + { + "X": 49664, + "Y": 0, + "Z": 37376, + "Room": 19 + }, + { + "X": 51712, + "Y": 0, + "Z": 38400, + "Room": 18 + }, + { + "X": 51712, + "Y": -1792, + "Z": 39424, + "Room": 27 + }, + { + "X": 51712, + "Y": -3328, + "Z": 39424, + "Room": 24 + }, + { + "X": 53760, + "Y": -4096, + "Z": 39424, + "Room": 28 + }, + { + "X": 58880, + "Y": -3328, + "Z": 39424, + "Room": 7 + }, + { + "X": 60928, + "Y": -3072, + "Z": 37376, + "Room": 7 + }, + { + "X": 54784, + "Y": -3328, + "Z": 43520, + "Room": 36 + }, + { + "X": 49664, + "Y": -3456, + "Z": 44544, + "Room": 33 + }, + { + "X": 46592, + "Y": -3840, + "Z": 42496, + "Room": 26 + }, + { + "X": 45568, + "Y": -6656, + "Z": 40448, + "Room": 13, + "Validated": false + }, + { + "X": 46592, + "Y": -3840, + "Z": 36352, + "Room": 25 + }, + { + "X": 45568, + "Y": -6144, + "Z": 33280, + "Room": 12, + "Validated": false + }, + { + "X": 47616, + "Y": -4096, + "Z": 32256, + "Room": 34 + }, + { + "X": 47360, + "Y": 1408, + "Z": 32256, + "Room": 10, + "KeyItemsHigh": "11210" + }, + { + "X": 47616, + "Y": 1408, + "Z": 32256, + "Room": 10, + "KeyItemsHigh": "11210", + "RequiresReturnPath": true + }, + { + "X": 47872, + "Y": 1408, + "Z": 32256, + "Room": 10, + "KeyItemsHigh": "11210", + "Range": "Medium" + }, + { + "X": 47872, + "Y": 1408, + "Z": 32000, + "Room": 10, + "KeyItemsHigh": "11210", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 1408, + "Z": 32000, + "Room": 10, + "KeyItemsHigh": "11210", + "Range": "Large" + }, + { + "X": 47360, + "Y": 1408, + "Z": 32000, + "Room": 10, + "KeyItemsHigh": "11210", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 896, + "Z": 27136, + "Room": 41 + }, + { + "X": 47616, + "Y": 896, + "Z": 22016, + "Room": 143 + }, + { + "X": 47616, + "Y": 1280, + "Z": 16896, + "Room": 42 + }, + { + "X": 40448, + "Y": 5376, + "Z": 15872, + "Room": 44 + }, + { + "X": 37376, + "Y": 5376, + "Z": 15872, + "Room": 126 + }, + { + "X": 39424, + "Y": 2688, + "Z": 18944, + "Room": 53 + }, + { + "X": 39424, + "Y": 3840, + "Z": 26112, + "Room": 54 + }, + { + "X": 42496, + "Y": 2048, + "Z": 25088, + "Room": 45 + }, + { + "X": 43520, + "Y": 0, + "Z": 29184, + "Room": 58 + }, + { + "X": 42496, + "Y": 2048, + "Z": 31232, + "Room": 47 + }, + { + "X": 40448, + "Y": 3712, + "Z": 32256, + "Room": 55 + }, + { + "X": 37376, + "Y": 3968, + "Z": 32256, + "Room": 57 + }, + { + "X": 37376, + "Y": 3712, + "Z": 28160, + "Room": 56 + }, + { + "X": 32256, + "Y": 2048, + "Z": 31232, + "Room": 59 + }, + { + "X": 29184, + "Y": 2048, + "Z": 32256, + "Room": 60 + }, + { + "X": 32256, + "Y": 0, + "Z": 35328, + "Room": 61 + }, + { + "X": 33280, + "Y": 3200, + "Z": 36352, + "Room": 62 + }, + { + "X": 34304, + "Y": 896, + "Z": 39424, + "Room": 66 + }, + { + "X": 33536, + "Y": 1792, + "Z": 44544, + "Room": 97, + "KeyItemsLow": "11502,11353", + "Range": "Medium" + }, + { + "X": 33280, + "Y": 1792, + "Z": 44544, + "Room": 97, + "KeyItemsLow": "11502,11353", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 33024, + "Y": 1792, + "Z": 44544, + "Room": 97, + "KeyItemsLow": "11502,11353" + }, + { + "X": 33024, + "Y": 1927, + "Z": 44815, + "Room": 97, + "KeyItemsLow": "11502,11353", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": 1792, + "Z": 44544, + "Room": 106 + }, + { + "X": 26112, + "Y": 0, + "Z": 48640, + "Room": 74 + }, + { + "X": 24064, + "Y": -2304, + "Z": 49664, + "Room": 84 + }, + { + "X": 23040, + "Y": -4608, + "Z": 48640, + "Room": 120, + "Validated": false + }, + { + "X": 23040, + "Y": -1792, + "Z": 52736, + "Room": 96 + }, + { + "X": 27136, + "Y": -1792, + "Z": 52736, + "Room": 78 + }, + { + "X": 30208, + "Y": -1792, + "Z": 52736, + "Room": 77 + }, + { + "X": 29184, + "Y": -5120, + "Z": 51712, + "Room": 121, + "Validated": false + }, + { + "X": 33536, + "Y": -2304, + "Z": 56832, + "Room": 82, + "KeyItemsHigh": "11353" + }, + { + "X": 33280, + "Y": -2304, + "Z": 56832, + "Room": 82, + "KeyItemsHigh": "11353", + "RequiresReturnPath": true + }, + { + "X": 33024, + "Y": -2304, + "Z": 56832, + "Room": 82, + "KeyItemsHigh": "11353", + "Range": "Medium" + }, + { + "X": 33024, + "Y": -2304, + "Z": 57088, + "Room": 82, + "KeyItemsHigh": "11353", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": -2304, + "Z": 57088, + "Room": 82, + "KeyItemsHigh": "11353", + "Range": "Large" + }, + { + "X": 33536, + "Y": -2304, + "Z": 57088, + "Room": 82, + "KeyItemsHigh": "11353", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": -768, + "Z": 57856, + "Room": 110 + }, + { + "X": 41266, + "Y": 1630, + "Z": 43692, + "Room": 105, + "KeyItemsLow": "11353", + "Range": "Medium" + }, + { + "X": 41463, + "Y": 1584, + "Z": 43705, + "Room": 105, + "KeyItemsLow": "11353", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": 1536, + "Z": 43520, + "Room": 105, + "KeyItemsLow": "11353", + "Range": "Large" + }, + { + "X": 41223, + "Y": 1600, + "Z": 43529, + "Room": 105, + "KeyItemsLow": "11353", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 41193, + "Y": 1557, + "Z": 43329, + "Room": 105, + "KeyItemsLow": "11353" + }, + { + "X": 41518, + "Y": 1487, + "Z": 43372, + "Room": 105, + "KeyItemsLow": "11353", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": 0, + "Z": 46592, + "Room": 69 + }, + { + "X": 39424, + "Y": -5120, + "Z": 46592, + "Room": 118, + "Validated": false + }, + { + "X": 38400, + "Y": -3840, + "Z": 42496, + "Room": 119, + "Validated": false + }, + { + "X": 34304, + "Y": -2432, + "Z": 43520, + "Room": 85, + "Validated": false + }, + { + "X": 42496, + "Y": -2048, + "Z": 52736, + "Room": 92, + "Validated": false + }, + { + "X": 39424, + "Y": -5120, + "Z": 57856, + "Room": 117, + "Validated": false + }, + { + "X": 41472, + "Y": 1920, + "Z": 54784, + "Room": 104 + }, + { + "X": 43264, + "Y": 1920, + "Z": 61952, + "Room": 135, + "KeyItemsHigh": "11502,11353" + }, + { + "X": 43520, + "Y": 1920, + "Z": 61952, + "Room": 135, + "KeyItemsHigh": "11502,11353", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -1792, + "Z": 61952, + "Room": 139, + "Validated": false + }, + { + "X": 45568, + "Y": -1792, + "Z": 64000, + "Room": 132, + "Validated": false + }, + { + "X": 46592, + "Y": -4864, + "Z": 64000, + "Room": 131, + "Validated": false + }, + { + "X": 54784, + "Y": 1408, + "Z": 60928, + "Room": 101 + }, + { + "X": 55808, + "Y": 0, + "Z": 62976, + "Room": 72 + }, + { + "X": 58880, + "Y": 512, + "Z": 66048, + "Room": 147 + }, + { + "X": 60928, + "Y": -1792, + "Z": 62976, + "Room": 91 + }, + { + "X": 64000, + "Y": -1792, + "Z": 62976, + "Room": 90 + }, + { + "X": 65024, + "Y": -1664, + "Z": 60928, + "Room": 80 + }, + { + "X": 53760, + "Y": 1024, + "Z": 59904, + "Room": 137 + }, + { + "X": 53760, + "Y": 1536, + "Z": 52736, + "Room": 99 + }, + { + "X": 56832, + "Y": -5120, + "Z": 54784, + "Room": 116, + "Validated": false + }, + { + "X": 56832, + "Y": -4608, + "Z": 49664, + "Room": 116, + "Validated": false + }, + { + "X": 59904, + "Y": -4608, + "Z": 50688, + "Room": 113, + "Validated": false + }, + { + "X": 66048, + "Y": -4864, + "Z": 50688, + "Room": 140, + "Validated": false + }, + { + "X": 62976, + "Y": 0, + "Z": 51712, + "Room": 79 + }, + { + "X": 64000, + "Y": -256, + "Z": 50688, + "Room": 148 + }, + { + "X": 64000, + "Y": 768, + "Z": 48640, + "Room": 149 + }, + { + "X": 62976, + "Y": -2048, + "Z": 48640, + "Room": 150 + }, + { + "X": 58880, + "Y": -2048, + "Z": 51712, + "Room": 88 + }, + { + "X": 26112, + "Y": 1920, + "Z": 56832, + "Room": 107, + "KeyItemsLow": "11502,11353" + }, + { + "X": 26177, + "Y": 1947, + "Z": 57071, + "Room": 107, + "KeyItemsLow": "11502,11353", + "RequiresReturnPath": true + }, + { + "X": 26112, + "Y": 1792, + "Z": 59904, + "Room": 108 + }, + { + "X": 26112, + "Y": 1152, + "Z": 66048, + "Room": 109 + }, + { + "X": 24064, + "Y": -768, + "Z": 62976, + "Room": 81 + }, + { + "X": 20992, + "Y": -1024, + "Z": 64256, + "Room": 151, + "KeyItemsHigh": "11502,11353" + }, + { + "X": 20736, + "Y": -1024, + "Z": 64256, + "Room": 151, + "KeyItemsHigh": "11502,11353", + "RequiresReturnPath": true + }, + { + "X": 20736, + "Y": -1024, + "Z": 64000, + "Room": 151, + "KeyItemsHigh": "11502,11353", + "Range": "Medium" + }, + { + "X": 20992, + "Y": -1024, + "Z": 64000, + "Room": 151, + "KeyItemsHigh": "11502,11353", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 20992, + "Y": -1024, + "Z": 63744, + "Room": 151, + "KeyItemsHigh": "11502,11353", + "Range": "Large" + }, + { + "X": 20736, + "Y": -1024, + "Z": 63744, + "Room": 151, + "KeyItemsHigh": "11502,11353", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 1664, + "Z": 49408, + "Room": 98, + "KeyItemsLow": "11353,11502", + "Range": "Large" + }, + { + "X": 44544, + "Y": 1664, + "Z": 49664, + "Room": 98, + "KeyItemsLow": "11353,11502", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 1664, + "Z": 49920, + "Room": 98, + "KeyItemsLow": "11353,11502", + "Range": "Medium" + }, + { + "X": 44800, + "Y": 1664, + "Z": 49920, + "Room": 98, + "KeyItemsLow": "11353,11502", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -4736, + "Z": 51712, + "Room": 114, + "Validated": false + }, + { + "X": 46592, + "Y": 256, + "Z": 47616, + "Room": 152, + "Validated": false + }, + { + "X": 68096, + "Y": 1280, + "Z": 53760, + "Room": 136 + }, + { + "X": 79360, + "Y": 1536, + "Z": 53760, + "Room": 103 + }, + { + "X": 76288, + "Y": -3840, + "Z": 53760, + "Room": 115, + "Validated": false + }, + { + "X": 75264, + "Y": -3840, + "Z": 53760, + "Room": 141, + "Validated": false + }, + { + "X": 78336, + "Y": -1792, + "Z": 62976, + "Room": 89, + "Validated": false + }, + { + "X": 74240, + "Y": -4608, + "Z": 64000, + "Room": 111, + "Validated": false + }, + { + "X": 62976, + "Y": -3840, + "Z": 62976, + "Room": 112, + "Validated": false + }, + { + "X": 80384, + "Y": 896, + "Z": 58880, + "Room": 130 + }, + { + "X": 86528, + "Y": 0, + "Z": 60928, + "Room": 129 + }, + { + "X": 76288, + "Y": 1920, + "Z": 61952, + "Room": 100 + }, + { + "X": 38400, + "Y": 1152, + "Z": 59904, + "Room": 102 + }, + { + "X": 31232, + "Y": -4864, + "Z": 58880, + "Room": 125, + "Validated": false + }, + { + "X": 27136, + "Y": -5120, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 28160, + "Y": -2048, + "Z": 62976, + "Room": 94, + "Validated": false + }, + { + "X": 24064, + "Y": -4864, + "Z": 68096, + "Room": 124, + "Validated": false + }, + { + "X": 26112, + "Y": 1152, + "Z": 79104, + "Room": 146, + "KeyItemsHigh": "11353,11502", + "Range": "Large" + }, + { + "X": 26112, + "Y": 1152, + "Z": 79360, + "Room": 146, + "KeyItemsHigh": "11353,11502", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 26112, + "Y": 1152, + "Z": 79616, + "Room": 146, + "KeyItemsHigh": "11353,11502", + "Range": "Medium" + }, + { + "X": 25847, + "Y": 1218, + "Z": 79616, + "Room": 146, + "KeyItemsHigh": "11353,11502", + "Range": "Medium", + "RequiresReturnPath": true + } + ], + "VENICE.TR2": [ + { + "X": 73216, + "Y": 6144, + "Z": 20992, + "Room": 150, + "KeyItemsLow": "12241,12385", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": 6656, + "Z": 33280, + "Room": 154 + }, + { + "X": 70144, + "Y": 6656, + "Z": 46592, + "Room": 111 + }, + { + "X": 66048, + "Y": 6528, + "Z": 46592, + "Room": 164 + }, + { + "X": 71168, + "Y": 4608, + "Z": 44544, + "Room": 106 + }, + { + "X": 70144, + "Y": 2816, + "Z": 32256, + "Room": 101 + }, + { + "X": 69120, + "Y": 384, + "Z": 32256, + "Room": 104, + "Validated": false + }, + { + "X": 68096, + "Y": 2048, + "Z": 30208, + "Room": 99 + }, + { + "X": 68096, + "Y": 768, + "Z": 25088, + "Room": 75 + }, + { + "X": 67072, + "Y": 512, + "Z": 24064, + "Room": 68 + }, + { + "X": 66012, + "Y": 240, + "Z": 25600, + "Room": 91, + "Validated": false + }, + { + "X": 67072, + "Y": 512, + "Z": 22016, + "Room": 67 + }, + { + "X": 70144, + "Y": 4352, + "Z": 40448, + "Room": 105 + }, + { + "X": 69120, + "Y": 4352, + "Z": 40448, + "Room": 49 + }, + { + "X": 65024, + "Y": 4096, + "Z": 43520, + "Room": 118 + }, + { + "X": 62976, + "Y": 4096, + "Z": 40448, + "Room": 18 + }, + { + "X": 62976, + "Y": 4096, + "Z": 38400, + "Room": 119 + }, + { + "X": 64000, + "Y": 4096, + "Z": 34304, + "Room": 155 + }, + { + "X": 64000, + "Y": 3840, + "Z": 33280, + "Room": 108 + }, + { + "X": 60928, + "Y": 4096, + "Z": 34304, + "Room": 16 + }, + { + "X": 54784, + "Y": 4096, + "Z": 34304, + "Room": 110 + }, + { + "X": 61952, + "Y": 2048, + "Z": 40448, + "Room": 151 + }, + { + "X": 67072, + "Y": 2048, + "Z": 39424, + "Room": 117 + }, + { + "X": 67072, + "Y": 2048, + "Z": 43520, + "Room": 116 + }, + { + "X": 70144, + "Y": 896, + "Z": 43520, + "Room": 156 + }, + { + "X": 71168, + "Y": 512, + "Z": 43520, + "Room": 107 + }, + { + "X": 70144, + "Y": 128, + "Z": 47616, + "Room": 159 + }, + { + "X": 66048, + "Y": 512, + "Z": 45568, + "Room": 162 + }, + { + "X": 58880, + "Y": 3584, + "Z": 47616, + "Room": 163 + }, + { + "X": 57856, + "Y": 3072, + "Z": 44544, + "Room": 32, + "KeyItemsLow": "12241", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": 2304, + "Z": 41472, + "Room": 152 + }, + { + "X": 59904, + "Y": 1280, + "Z": 38400, + "Room": 153 + }, + { + "X": 65024, + "Y": 0, + "Z": 38400, + "Room": 13 + }, + { + "X": 64000, + "Y": 0, + "Z": 35328, + "Room": 14 + }, + { + "X": 64000, + "Y": 0, + "Z": 34304, + "Room": 1 + }, + { + "X": 67072, + "Y": 0, + "Z": 36352, + "Room": 157 + }, + { + "X": 64000, + "Y": -512, + "Z": 26112, + "Room": 10 + }, + { + "X": 64000, + "Y": -512, + "Z": 25088, + "Room": 93, + "KeyItemsLow": "12385", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": -3584, + "Z": 26112, + "Room": 123, + "Validated": false + }, + { + "X": 67072, + "Y": -1152, + "Z": 26112, + "Room": 103, + "Validated": false + }, + { + "X": 67072, + "Y": -1152, + "Z": 25088, + "Room": 98, + "Validated": false + }, + { + "X": 67072, + "Y": -1152, + "Z": 20992, + "Room": 125, + "Validated": false + }, + { + "X": 66048, + "Y": -1152, + "Z": 16896, + "Room": 128, + "Validated": false + }, + { + "X": 59904, + "Y": -512, + "Z": 25088, + "Room": 96 + }, + { + "X": 57856, + "Y": -512, + "Z": 26112, + "Room": 12 + }, + { + "X": 57856, + "Y": 0, + "Z": 27136, + "Room": 0 + }, + { + "X": 60928, + "Y": 0, + "Z": 30208, + "Room": 2 + }, + { + "X": 53760, + "Y": -256, + "Z": 30208, + "Room": 4 + }, + { + "X": 49664, + "Y": -1024, + "Z": 29184, + "Room": 5 + }, + { + "X": 42752, + "Y": 1280, + "Z": 29184, + "Room": 140, + "KeyItemsLow": "12241", + "Range": "Medium" + }, + { + "X": 42496, + "Y": 1280, + "Z": 29184, + "Room": 140, + "KeyItemsLow": "12385,12241", + "Range": "Large" + }, + { + "X": 41472, + "Y": 1280, + "Z": 29184, + "Room": 158 + }, + { + "X": 41472, + "Y": 1280, + "Z": 30208, + "Room": 6 + }, + { + "X": 41472, + "Y": 2816, + "Z": 31232, + "Room": 141 + }, + { + "X": 41472, + "Y": 2816, + "Z": 32256, + "Room": 50 + }, + { + "X": 42496, + "Y": 1280, + "Z": 38400, + "Room": 8, + "KeyItemsLow": "12241" + }, + { + "X": 42496, + "Y": 1280, + "Z": 38656, + "Room": 8, + "KeyItemsLow": "12241", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": 2560, + "Z": 39424, + "Room": 22 + }, + { + "X": 55808, + "Y": 2048, + "Z": 38400, + "Room": 15 + }, + { + "X": 55808, + "Y": 2048, + "Z": 33280, + "Room": 121, + "RoomType": "ReturnPath" + }, + { + "X": 45568, + "Y": 0, + "Z": 37376, + "Room": 7 + }, + { + "X": 48640, + "Y": -1280, + "Z": 37376, + "Room": 20 + }, + { + "X": 51712, + "Y": -2560, + "Z": 37376, + "Room": 21 + }, + { + "X": 53760, + "Y": -3840, + "Z": 37376, + "Room": 29 + }, + { + "X": 48640, + "Y": -5632, + "Z": 35328, + "Room": 30 + }, + { + "X": 45568, + "Y": -5120, + "Z": 38400, + "Room": 30 + }, + { + "X": 51712, + "Y": 256, + "Z": 41472, + "Room": 23 + }, + { + "X": 52736, + "Y": -1280, + "Z": 41472, + "Room": 31 + }, + { + "X": 52736, + "Y": -3840, + "Z": 41472, + "Room": 47 + }, + { + "X": 45568, + "Y": -1280, + "Z": 40448, + "Room": 20 + }, + { + "X": 45568, + "Y": 1792, + "Z": 41472, + "Room": 36 + }, + { + "X": 44544, + "Y": -1280, + "Z": 41472, + "Room": 24 + }, + { + "X": 44544, + "Y": -1024, + "Z": 42496, + "Room": 25 + }, + { + "X": 42496, + "Y": -4096, + "Z": 43520, + "Room": 115, + "Validated": false + }, + { + "X": 48640, + "Y": 5888, + "Z": 41472, + "Room": 40, + "KeyItemsLow": "12385", + "Range": "Medium" + }, + { + "X": 48640, + "Y": 5888, + "Z": 40448, + "Room": 37 + }, + { + "X": 52736, + "Y": 6912, + "Z": 37376, + "Room": 39 + }, + { + "X": 51712, + "Y": 6656, + "Z": 43520, + "Room": 28 + }, + { + "X": 54784, + "Y": 7680, + "Z": 34304, + "Room": 51, + "KeyItemsHigh": "12241" + }, + { + "X": 54528, + "Y": 7680, + "Z": 34304, + "Room": 51, + "KeyItemsHigh": "12241", + "RequiresReturnPath": true + }, + { + "X": 41984, + "Y": 5509, + "Z": 36390, + "Room": 17 + }, + { + "X": 47616, + "Y": 4608, + "Z": 35328, + "Room": 38, + "KeyItemsLow": "12241" + }, + { + "X": 47872, + "Y": 4608, + "Z": 35328, + "Room": 38, + "KeyItemsLow": "12241", + "RequiresReturnPath": true + }, + { + "X": 48896, + "Y": 4608, + "Z": 32256, + "Room": 42, + "KeyItemsHigh": "12241" + }, + { + "X": 48640, + "Y": 4608, + "Z": 32256, + "Room": 42, + "KeyItemsHigh": "12241", + "RequiresReturnPath": true + }, + { + "X": 48384, + "Y": 4608, + "Z": 32256, + "Room": 42, + "KeyItemsHigh": "12241", + "Range": "Medium" + }, + { + "X": 48384, + "Y": 4608, + "Z": 32000, + "Room": 42, + "KeyItemsHigh": "12241", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": 4608, + "Z": 32000, + "Room": 42, + "KeyItemsHigh": "12241", + "Range": "Large" + }, + { + "X": 48896, + "Y": 4608, + "Z": 32000, + "Room": 42, + "KeyItemsHigh": "12241", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 4608, + "Z": 27136, + "Room": 41 + }, + { + "X": 48640, + "Y": 4608, + "Z": 23040, + "Room": 59 + }, + { + "X": 47616, + "Y": 2560, + "Z": 20992, + "Room": 79 + }, + { + "X": 45568, + "Y": 2560, + "Z": 20992, + "Room": 120 + }, + { + "X": 50688, + "Y": 2560, + "Z": 22016, + "Room": 80 + }, + { + "X": 52736, + "Y": 4608, + "Z": 26112, + "Room": 58 + }, + { + "X": 52736, + "Y": 2304, + "Z": 25088, + "Room": 82 + }, + { + "X": 53760, + "Y": 1792, + "Z": 24064, + "Room": 84 + }, + { + "X": 54784, + "Y": -512, + "Z": 25088, + "Room": 83 + }, + { + "X": 53760, + "Y": -512, + "Z": 24064, + "Room": 81 + }, + { + "X": 53760, + "Y": -128, + "Z": 23040, + "Room": 64 + }, + { + "X": 53760, + "Y": 2304, + "Z": 19968, + "Room": 63 + }, + { + "X": 56832, + "Y": 2560, + "Z": 19968, + "Room": 77 + }, + { + "X": 60672, + "Y": 2176, + "Z": 20992, + "Room": 78, + "KeyItemsLow": "12385" + }, + { + "X": 60928, + "Y": 2176, + "Z": 20992, + "Room": 78, + "KeyItemsLow": "12385", + "RequiresReturnPath": true + }, + { + "X": 67072, + "Y": 2304, + "Z": 22016, + "Room": 66 + }, + { + "X": 69120, + "Y": 5120, + "Z": 22016, + "Room": 139 + }, + { + "X": 66048, + "Y": 4352, + "Z": 22016, + "Room": 85 + }, + { + "X": 59904, + "Y": 4608, + "Z": 22016, + "Room": 87 + }, + { + "X": 61952, + "Y": 4352, + "Z": 19968, + "Room": 86 + }, + { + "X": 58880, + "Y": 6144, + "Z": 19968, + "Room": 126 + }, + { + "X": 58880, + "Y": 6144, + "Z": 15872, + "Room": 127 + }, + { + "X": 56832, + "Y": 4608, + "Z": 22016, + "Room": 65 + }, + { + "X": 53760, + "Y": 4608, + "Z": 22016, + "Room": 62 + }, + { + "X": 52736, + "Y": 4352, + "Z": 24064, + "Room": 60 + }, + { + "X": 43520, + "Y": 4608, + "Z": 27136, + "Room": 43 + }, + { + "X": 42496, + "Y": 4352, + "Z": 24064, + "Room": 61 + }, + { + "X": 42496, + "Y": 4608, + "Z": 23040, + "Room": 70 + }, + { + "X": 45568, + "Y": -3328, + "Z": 23040, + "Room": 76, + "Validated": false + }, + { + "X": 42496, + "Y": -2304, + "Z": 16896, + "Room": 136, + "Validated": false + }, + { + "X": 41472, + "Y": -2304, + "Z": 16896, + "Room": 137, + "Validated": false + }, + { + "X": 39424, + "Y": 4608, + "Z": 22016, + "Room": 72 + }, + { + "X": 38400, + "Y": 5888, + "Z": 22016, + "Room": 134, + "Validated": false + }, + { + "X": 34304, + "Y": 4608, + "Z": 26368, + "Room": 73, + "KeyItemsHigh": "12385" + }, + { + "X": 34048, + "Y": 4608, + "Z": 26368, + "Room": 73, + "KeyItemsHigh": "12385", + "RequiresReturnPath": true + }, + { + "X": 34048, + "Y": 4608, + "Z": 26112, + "Room": 73, + "KeyItemsHigh": "12385", + "Range": "Medium" + }, + { + "X": 34048, + "Y": 4608, + "Z": 25856, + "Room": 73, + "KeyItemsHigh": "12385", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": 4608, + "Z": 25856, + "Room": 73, + "KeyItemsHigh": "12385", + "Range": "Large" + }, + { + "X": 34304, + "Y": 4608, + "Z": 26112, + "Room": 73, + "KeyItemsHigh": "12385", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": 2560, + "Z": 19968, + "Room": 130 + }, + { + "X": 37376, + "Y": 4608, + "Z": 34304, + "Room": 133 + }, + { + "X": 37376, + "Y": 2304, + "Z": 33280, + "Room": 130 + }, + { + "X": 38400, + "Y": 256, + "Z": 34304, + "Room": 131 + }, + { + "X": 34304, + "Y": -2048, + "Z": 34304, + "Room": 135 + }, + { + "X": 40448, + "Y": -1024, + "Z": 36352, + "Room": 138 + } + ], + "OPERA.TR2": [ + { + "X": 79360, + "Y": -640, + "Z": 26112, + "Room": 140, + "Validated": false + }, + { + "X": 79616, + "Y": 2816, + "Z": 31232, + "Room": 35, + "KeyItemsLow": "13544" + }, + { + "X": 79360, + "Y": 2816, + "Z": 31232, + "Room": 35, + "KeyItemsLow": "13544", + "RequiresReturnPath": true + }, + { + "X": 79104, + "Y": 2816, + "Z": 31232, + "Room": 35, + "KeyItemsLow": "13544", + "Range": "Medium" + }, + { + "X": 79104, + "Y": 2816, + "Z": 31488, + "Room": 35, + "KeyItemsLow": "13544", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": 2816, + "Z": 31488, + "Room": 35, + "KeyItemsLow": "13544", + "Range": "Large" + }, + { + "X": 79616, + "Y": 2816, + "Z": 31488, + "Room": 35, + "KeyItemsLow": "13544,13395,13377,13449", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 78336, + "Y": 9728, + "Z": 33280, + "Room": 23 + }, + { + "X": 78336, + "Y": 7936, + "Z": 31232, + "Room": 25 + }, + { + "X": 81408, + "Y": 7936, + "Z": 36352, + "Room": 27 + }, + { + "X": 73216, + "Y": 5632, + "Z": 36352, + "Room": 29 + }, + { + "X": 72192, + "Y": 4352, + "Z": 35328, + "Room": 31 + }, + { + "X": 73216, + "Y": 2816, + "Z": 35328, + "Room": 33 + }, + { + "X": 79360, + "Y": 6144, + "Z": 36352, + "Room": 162 + }, + { + "X": 74240, + "Y": 5376, + "Z": 37376, + "Room": 127 + }, + { + "X": 71168, + "Y": 4608, + "Z": 37376, + "Room": 163 + }, + { + "X": 70144, + "Y": -2560, + "Z": 34304, + "Room": 166, + "Validated": false + }, + { + "X": 71168, + "Y": 128, + "Z": 36352, + "Room": 39, + "Validated": false + }, + { + "X": 72192, + "Y": -1920, + "Z": 37376, + "Room": 36, + "Validated": false + }, + { + "X": 73216, + "Y": -128, + "Z": 31232, + "Room": 42, + "Validated": false + }, + { + "X": 70144, + "Y": -896, + "Z": 30208, + "Room": 167, + "Validated": false + }, + { + "X": 79360, + "Y": -768, + "Z": 30208, + "Room": 42, + "Validated": false + }, + { + "X": 85504, + "Y": -256, + "Z": 30208, + "Room": 43, + "Validated": false + }, + { + "X": 84480, + "Y": 4608, + "Z": 32256, + "Room": 32 + }, + { + "X": 84480, + "Y": 5888, + "Z": 33280, + "Room": 30 + }, + { + "X": 86528, + "Y": 6144, + "Z": 35328, + "Room": 10 + }, + { + "X": 85504, + "Y": 3072, + "Z": 36352, + "Room": 3 + }, + { + "X": 86528, + "Y": 3456, + "Z": 36352, + "Room": 9 + }, + { + "X": 87296, + "Y": 2560, + "Z": 37376, + "Room": 6, + "KeyItemsHigh": "13544" + }, + { + "X": 87552, + "Y": 2560, + "Z": 37376, + "Room": 6, + "KeyItemsHigh": "13544", + "RequiresReturnPath": true + }, + { + "X": 87808, + "Y": 2560, + "Z": 37376, + "Room": 6, + "KeyItemsHigh": "13544", + "Range": "Medium" + }, + { + "X": 87808, + "Y": 2560, + "Z": 37632, + "Room": 6, + "KeyItemsHigh": "13544", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 87552, + "Y": 2560, + "Z": 37632, + "Room": 6, + "KeyItemsHigh": "13544", + "Range": "Large" + }, + { + "X": 87296, + "Y": 2560, + "Z": 37632, + "Room": 6, + "KeyItemsHigh": "13544", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 84480, + "Y": 128, + "Z": 36352, + "Room": 41, + "Validated": false + }, + { + "X": 82432, + "Y": 2688, + "Z": 36352, + "Room": 21, + "Validated": false + }, + { + "X": 78336, + "Y": 2688, + "Z": 36352, + "Room": 20, + "Validated": false + }, + { + "X": 84480, + "Y": -1280, + "Z": 39424, + "Room": 11 + }, + { + "X": 87552, + "Y": -1152, + "Z": 37376, + "Room": 142, + "Validated": false + }, + { + "X": 77256, + "Y": -342, + "Z": 37888, + "Room": 184 + }, + { + "X": 70144, + "Y": -2944, + "Z": 39424, + "Room": 164, + "Validated": false + }, + { + "X": 72192, + "Y": -2560, + "Z": 44544, + "Room": 19, + "KeyItemsLow": "13395,13377,13449", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": -2560, + "Z": 48640, + "Room": 190 + }, + { + "X": 76288, + "Y": -1920, + "Z": 49664, + "Room": 13 + }, + { + "X": 86528, + "Y": -768, + "Z": 52736, + "Room": 15 + }, + { + "X": 86528, + "Y": -768, + "Z": 58880, + "Room": 171 + }, + { + "X": 86528, + "Y": -2816, + "Z": 59904, + "Room": 2 + }, + { + "X": 87552, + "Y": -1792, + "Z": 60928, + "Room": 169 + }, + { + "X": 82432, + "Y": -2048, + "Z": 59904, + "Room": 171 + }, + { + "X": 79360, + "Y": -2048, + "Z": 59904, + "Room": 170 + }, + { + "X": 73216, + "Y": -2560, + "Z": 60928, + "Room": 2 + }, + { + "X": 76288, + "Y": -2432, + "Z": 57856, + "Room": 14 + }, + { + "X": 77312, + "Y": -2944, + "Z": 56832, + "Room": 12 + }, + { + "X": 85504, + "Y": 256, + "Z": 54784, + "Room": 0 + }, + { + "X": 84480, + "Y": 2688, + "Z": 51712, + "Room": 172 + }, + { + "X": 85504, + "Y": 1408, + "Z": 49664, + "Room": 108 + }, + { + "X": 83456, + "Y": 256, + "Z": 52736, + "Room": 61 + }, + { + "X": 82432, + "Y": 2304, + "Z": 52480, + "Room": 5, + "KeyItemsLow": "13377,13395" + }, + { + "X": 82432, + "Y": 2304, + "Z": 52736, + "Room": 5, + "KeyItemsLow": "13377,13395,13449", + "Range": "Medium" + }, + { + "X": 82432, + "Y": 2304, + "Z": 52992, + "Room": 5, + "KeyItemsLow": "13377,13395,13449", + "Range": "Large" + }, + { + "X": 82176, + "Y": 2304, + "Z": 52480, + "Room": 5, + "KeyItemsLow": "13377,13395", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": 2048, + "Z": 59904, + "Room": 51 + }, + { + "X": 80384, + "Y": 2048, + "Z": 61952, + "Room": 16 + }, + { + "X": 81408, + "Y": 2048, + "Z": 62976, + "Room": 90 + }, + { + "X": 77312, + "Y": 3584, + "Z": 60928, + "Room": 67 + }, + { + "X": 78336, + "Y": 5120, + "Z": 60928, + "Room": 68 + }, + { + "X": 80384, + "Y": 6656, + "Z": 59904, + "Room": 69 + }, + { + "X": 80384, + "Y": 6656, + "Z": 62976, + "Room": 161 + }, + { + "X": 81408, + "Y": 6656, + "Z": 58880, + "Room": 55 + }, + { + "X": 82432, + "Y": 6656, + "Z": 58880, + "Room": 78 + }, + { + "X": 81408, + "Y": 6656, + "Z": 49664, + "Room": 72 + }, + { + "X": 75264, + "Y": 6400, + "Z": 48640, + "Room": 34 + }, + { + "X": 77312, + "Y": 7680, + "Z": 54784, + "Room": 66 + }, + { + "X": 73216, + "Y": 6656, + "Z": 54784, + "Room": 55 + }, + { + "X": 72192, + "Y": 6656, + "Z": 54784, + "Room": 65 + }, + { + "X": 72192, + "Y": 6656, + "Z": 48640, + "Room": 174 + }, + { + "X": 72192, + "Y": 6656, + "Z": 47616, + "Room": 144 + }, + { + "X": 72192, + "Y": 6656, + "Z": 59904, + "Room": 178 + }, + { + "X": 72192, + "Y": 7168, + "Z": 61952, + "Room": 86, + "KeyItemsHigh": "13377" + }, + { + "X": 71936, + "Y": 7168, + "Z": 61952, + "Room": 86, + "KeyItemsHigh": "13377", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": 5120, + "Z": 61952, + "Room": 87 + }, + { + "X": 66048, + "Y": 4480, + "Z": 64000, + "Room": 92 + }, + { + "X": 66048, + "Y": 3840, + "Z": 62976, + "Room": 91 + }, + { + "X": 67072, + "Y": 3840, + "Z": 70144, + "Room": 88 + }, + { + "X": 66048, + "Y": 2048, + "Z": 71168, + "Room": 95 + }, + { + "X": 70144, + "Y": 2048, + "Z": 71168, + "Room": 89 + }, + { + "X": 71168, + "Y": 2048, + "Z": 60928, + "Room": 52 + }, + { + "X": 71168, + "Y": 8448, + "Z": 53760, + "Room": 177, + "KeyItemsHigh": "13395", + "KeyItemsLow": "13377" + }, + { + "X": 70912, + "Y": 8448, + "Z": 53760, + "Room": 177, + "KeyItemsHigh": "13395", + "KeyItemsLow": "13377", + "RequiresReturnPath": true + }, + { + "X": 70144, + "Y": 8192, + "Z": 57856, + "Room": 179 + }, + { + "X": 69120, + "Y": 8192, + "Z": 57856, + "Room": 176 + }, + { + "X": 69120, + "Y": 8960, + "Z": 51712, + "Room": 46 + }, + { + "X": 60928, + "Y": 9728, + "Z": 49664, + "Room": 188 + }, + { + "X": 72192, + "Y": 8960, + "Z": 59904, + "Room": 76 + }, + { + "X": 75264, + "Y": 7424, + "Z": 60928, + "Room": 93 + }, + { + "X": 82432, + "Y": 1792, + "Z": 49664, + "Room": 37, + "KeyItemsLow": "13449" + }, + { + "X": 82688, + "Y": 1792, + "Z": 49664, + "Room": 37, + "KeyItemsLow": "13449", + "RequiresReturnPath": true + }, + { + "X": 84480, + "Y": 1792, + "Z": 48640, + "Room": 49, + "KeyItemsHigh": "13377" + }, + { + "X": 84480, + "Y": 1792, + "Z": 48384, + "Room": 49, + "KeyItemsHigh": "13377", + "RequiresReturnPath": true + }, + { + "X": 84480, + "Y": 1792, + "Z": 47616, + "Room": 50 + }, + { + "X": 86528, + "Y": 256, + "Z": 45568, + "Room": 193, + "RoomType": "ReturnPath" + }, + { + "X": 83456, + "Y": 2304, + "Z": 44544, + "Room": 47 + }, + { + "X": 80384, + "Y": 2304, + "Z": 43520, + "Room": 183 + }, + { + "X": 76288, + "Y": 2304, + "Z": 44544, + "Room": 57 + }, + { + "X": 78336, + "Y": 1024, + "Z": 45824, + "Room": 189, + "KeyItemsHigh": "13395", + "Range": "Medium" + }, + { + "X": 78592, + "Y": 1024, + "Z": 45824, + "Room": 189, + "KeyItemsHigh": "13395", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 78592, + "Y": 1024, + "Z": 45568, + "Room": 189, + "KeyItemsHigh": "13395", + "Range": "Large" + }, + { + "X": 78592, + "Y": 1024, + "Z": 45312, + "Room": 189, + "KeyItemsHigh": "13395", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": 1280, + "Z": 45568, + "Room": 38 + }, + { + "X": 81408, + "Y": 1792, + "Z": 47616, + "Room": 141 + }, + { + "X": 77312, + "Y": 7936, + "Z": 44544, + "Room": 60 + }, + { + "X": 77312, + "Y": 7936, + "Z": 42496, + "Room": 44 + }, + { + "X": 77312, + "Y": 10880, + "Z": 46592, + "Room": 48 + }, + { + "X": 78336, + "Y": 10496, + "Z": 47616, + "Room": 153 + }, + { + "X": 76288, + "Y": 9472, + "Z": 49664, + "Room": 82 + }, + { + "X": 74240, + "Y": 8960, + "Z": 48640, + "Room": 83 + }, + { + "X": 79360, + "Y": 10496, + "Z": 48640, + "Room": 154 + }, + { + "X": 82432, + "Y": 10496, + "Z": 46592, + "Room": 156 + }, + { + "X": 80384, + "Y": 11008, + "Z": 46592, + "Room": 155, + "KeyItemsLow": "13395", + "Range": "Medium" + }, + { + "X": 80128, + "Y": 11008, + "Z": 46592, + "Room": 155, + "KeyItemsLow": "13395", + "Range": "Large" + }, + { + "X": 80128, + "Y": 11008, + "Z": 46336, + "Room": 155, + "KeyItemsLow": "13395", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": 11008, + "Z": 46336, + "Room": 155, + "KeyItemsLow": "13395", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": 8064, + "Z": 44544, + "Room": 96 + }, + { + "X": 79360, + "Y": 6656, + "Z": 46592, + "Room": 143 + }, + { + "X": 80384, + "Y": 5376, + "Z": 44544, + "Room": 59 + }, + { + "X": 80384, + "Y": 5376, + "Z": 43520, + "Room": 185 + }, + { + "X": 80384, + "Y": 5376, + "Z": 42496, + "Room": 159 + }, + { + "X": 78336, + "Y": 5376, + "Z": 43520, + "Room": 1 + }, + { + "X": 76288, + "Y": 5376, + "Z": 44544, + "Room": 139 + }, + { + "X": 71168, + "Y": 4608, + "Z": 43520, + "Room": 158 + }, + { + "X": 69120, + "Y": 4608, + "Z": 40448, + "Room": 102 + }, + { + "X": 66048, + "Y": 7680, + "Z": 40448, + "Room": 105 + }, + { + "X": 69120, + "Y": 6656, + "Z": 40448, + "Room": 151 + }, + { + "X": 62976, + "Y": 8064, + "Z": 40448, + "Room": 79 + }, + { + "X": 56832, + "Y": 10496, + "Z": 40448, + "Room": 107 + }, + { + "X": 57856, + "Y": 10752, + "Z": 38400, + "Room": 106 + }, + { + "X": 58880, + "Y": 9728, + "Z": 39424, + "Room": 8 + }, + { + "X": 58880, + "Y": 9728, + "Z": 36352, + "Room": 111 + }, + { + "X": 62976, + "Y": 9856, + "Z": 36352, + "Room": 109 + }, + { + "X": 64000, + "Y": 8832, + "Z": 36352, + "Room": 132 + }, + { + "X": 65024, + "Y": 7680, + "Z": 36352, + "Room": 103 + }, + { + "X": 62976, + "Y": 6400, + "Z": 36352, + "Room": 187 + }, + { + "X": 66048, + "Y": 7680, + "Z": 36352, + "Room": 120 + }, + { + "X": 80384, + "Y": 4096, + "Z": 46592, + "Room": 63, + "KeyItemsHigh": "13395", + "Range": "Medium" + }, + { + "X": 80640, + "Y": 4096, + "Z": 46592, + "Room": 63, + "KeyItemsHigh": "13395", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": 3584, + "Z": 47616, + "Room": 100 + }, + { + "X": 79360, + "Y": 3584, + "Z": 48640, + "Room": 70 + }, + { + "X": 81408, + "Y": 3584, + "Z": 51712, + "Room": 53 + }, + { + "X": 82432, + "Y": 3584, + "Z": 53760, + "Room": 77 + }, + { + "X": 84224, + "Y": 3840, + "Z": 57600, + "Room": 135, + "KeyItemsHigh": "13449" + }, + { + "X": 84224, + "Y": 3840, + "Z": 57856, + "Room": 135, + "KeyItemsHigh": "13449", + "RequiresReturnPath": true + }, + { + "X": 84224, + "Y": 3840, + "Z": 58112, + "Room": 135, + "KeyItemsHigh": "13449", + "Range": "Medium" + }, + { + "X": 84480, + "Y": 3840, + "Z": 58112, + "Room": 135, + "KeyItemsHigh": "13449", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 84480, + "Y": 3840, + "Z": 57856, + "Room": 135, + "KeyItemsHigh": "13449,13395", + "Range": "Large" + }, + { + "X": 84480, + "Y": 3840, + "Z": 57600, + "Room": 135, + "KeyItemsHigh": "13449,13395", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 83456, + "Y": 5120, + "Z": 55808, + "Room": 75 + }, + { + "X": 80384, + "Y": 5120, + "Z": 50688, + "Room": 54 + }, + { + "X": 80384, + "Y": 5120, + "Z": 49664, + "Room": 71 + }, + { + "X": 70144, + "Y": 6656, + "Z": 56576, + "Room": 116, + "KeyItemsHigh": "13377", + "Range": "Medium" + }, + { + "X": 69888, + "Y": 6656, + "Z": 56576, + "Room": 116, + "KeyItemsHigh": "13377", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 69888, + "Y": 6656, + "Z": 56832, + "Room": 116, + "KeyItemsHigh": "13377", + "Range": "Large" + }, + { + "X": 69888, + "Y": 6656, + "Z": 57088, + "Room": 116, + "KeyItemsHigh": "13377", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 69120, + "Y": 6656, + "Z": 56832, + "Room": 117 + }, + { + "X": 66048, + "Y": 5376, + "Z": 54784, + "Room": 118 + }, + { + "X": 67072, + "Y": 3840, + "Z": 53760, + "Room": 119 + }, + { + "X": 70144, + "Y": 3584, + "Z": 52736, + "Room": 114 + }, + { + "X": 71168, + "Y": 3584, + "Z": 53760, + "Room": 58 + }, + { + "X": 73216, + "Y": 3584, + "Z": 50688, + "Room": 53 + }, + { + "X": 74240, + "Y": 4864, + "Z": 48640, + "Room": 152 + }, + { + "X": 73216, + "Y": 3840, + "Z": 47616, + "Room": 74 + }, + { + "X": 74240, + "Y": 6400, + "Z": 47616, + "Room": 81 + }, + { + "X": 71168, + "Y": 3840, + "Z": 47616, + "Room": 113 + }, + { + "X": 70144, + "Y": 3840, + "Z": 47616, + "Room": 123 + }, + { + "X": 67072, + "Y": 5888, + "Z": 48640, + "Room": 122 + }, + { + "X": 55808, + "Y": 6400, + "Z": 49664, + "Room": 121 + }, + { + "X": 50688, + "Y": 7168, + "Z": 49664, + "Room": 104 + } + ], + "RIG.TR2": [ + { + "X": 46592, + "Y": -1536, + "Z": 90624, + "Room": 4, + "KeyItemsLow": "14193", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -1536, + "Z": 90880, + "Room": 4, + "KeyItemsLow": "14193,14238,14240", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 46848, + "Y": -1536, + "Z": 90880, + "Room": 4, + "KeyItemsLow": "14193,14240,14238", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -1536, + "Z": 94720, + "Room": 5 + }, + { + "X": 45568, + "Y": -1536, + "Z": 96000, + "Room": 10, + "KeyItemsLow": "14193" + }, + { + "X": 45568, + "Y": -1536, + "Z": 95744, + "Room": 10, + "KeyItemsLow": "14193,14238,14240", + "Range": "Medium" + }, + { + "X": 45568, + "Y": -1536, + "Z": 95488, + "Room": 10, + "KeyItemsLow": "14193,14238,14240", + "Range": "Large" + }, + { + "X": 42496, + "Y": 2048, + "Z": 93696, + "Room": 6, + "KeyItemsHigh": "14193" + }, + { + "X": 42240, + "Y": 2048, + "Z": 93696, + "Room": 6, + "KeyItemsHigh": "14193", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": 2048, + "Z": 93696, + "Room": 88 + }, + { + "X": 34304, + "Y": 2048, + "Z": 93696, + "Room": 87 + }, + { + "X": 34304, + "Y": 2048, + "Z": 89600, + "Room": 89 + }, + { + "X": 34304, + "Y": 2048, + "Z": 79360, + "Room": 86 + }, + { + "X": 31232, + "Y": 2048, + "Z": 79360, + "Room": 85 + }, + { + "X": 24064, + "Y": -2048, + "Z": 92672, + "Room": 2 + }, + { + "X": 24064, + "Y": 2048, + "Z": 96768, + "Room": 78 + }, + { + "X": 20992, + "Y": 2048, + "Z": 95744, + "Room": 79 + }, + { + "X": 22016, + "Y": 2048, + "Z": 89600, + "Room": 14 + }, + { + "X": 22016, + "Y": 3072, + "Z": 96768, + "Room": 58 + }, + { + "X": 22016, + "Y": 2048, + "Z": 93696, + "Room": 77 + }, + { + "X": 24064, + "Y": -3072, + "Z": 76288, + "Room": 13, + "KeyItemsLow": "14193" + }, + { + "X": 24320, + "Y": -3072, + "Z": 76288, + "Room": 13, + "KeyItemsLow": "14193", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": -3072, + "Z": 78336, + "Room": 90 + }, + { + "X": 32256, + "Y": -3072, + "Z": 78336, + "Room": 91 + }, + { + "X": 38400, + "Y": -3072, + "Z": 78336, + "Room": 0 + }, + { + "X": 40448, + "Y": -2048, + "Z": 78336, + "Room": 96 + }, + { + "X": 42496, + "Y": -2560, + "Z": 78336, + "Room": 7 + }, + { + "X": 33280, + "Y": -1280, + "Z": 84480, + "Room": 97 + }, + { + "X": 37376, + "Y": -2816, + "Z": 84480, + "Room": 0 + }, + { + "X": 34304, + "Y": -3200, + "Z": 84480, + "Room": 93 + }, + { + "X": 31232, + "Y": -2944, + "Z": 84480, + "Room": 90 + }, + { + "X": 33280, + "Y": -2944, + "Z": 91648, + "Room": 92 + }, + { + "X": 33280, + "Y": -1280, + "Z": 88576, + "Room": 1 + }, + { + "X": 44544, + "Y": -1536, + "Z": 89600, + "Room": 11 + }, + { + "X": 42496, + "Y": -1792, + "Z": 75264, + "Room": 12 + }, + { + "X": 38400, + "Y": -2816, + "Z": 75264, + "Room": 3 + }, + { + "X": 37632, + "Y": -2816, + "Z": 73216, + "Room": 15, + "KeyItemsHigh": "14193", + "KeyItemsLow": "14238" + }, + { + "X": 37376, + "Y": -2816, + "Z": 73216, + "Room": 15, + "KeyItemsHigh": "14193", + "KeyItemsLow": "14238", + "RequiresReturnPath": true + }, + { + "X": 37120, + "Y": -2816, + "Z": 73216, + "Room": 15, + "KeyItemsHigh": "14193", + "Range": "Medium" + }, + { + "X": 37120, + "Y": -2816, + "Z": 72960, + "Room": 15, + "KeyItemsHigh": "14193", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": -2816, + "Z": 72960, + "Room": 15, + "KeyItemsHigh": "14193", + "Range": "Large" + }, + { + "X": 37632, + "Y": -2816, + "Z": 72960, + "Room": 15, + "KeyItemsHigh": "14193", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": -2816, + "Z": 69120, + "Room": 16 + }, + { + "X": 30208, + "Y": -4096, + "Z": 68096, + "Room": 17 + }, + { + "X": 34304, + "Y": -4096, + "Z": 66048, + "Room": 42 + }, + { + "X": 34304, + "Y": -4096, + "Z": 60928, + "Room": 43 + }, + { + "X": 31232, + "Y": -4096, + "Z": 60928, + "Room": 19 + }, + { + "X": 29184, + "Y": -4096, + "Z": 62976, + "Room": 20 + }, + { + "X": 28160, + "Y": -3968, + "Z": 65024, + "Room": 21 + }, + { + "X": 29184, + "Y": -5376, + "Z": 73216, + "Room": 22 + }, + { + "X": 27136, + "Y": -6912, + "Z": 73216, + "Room": 23 + }, + { + "X": 25088, + "Y": -6656, + "Z": 73216, + "Room": 24 + }, + { + "X": 25088, + "Y": 1024, + "Z": 67072, + "Room": 60 + }, + { + "X": 22016, + "Y": -3584, + "Z": 66048, + "Room": 27 + }, + { + "X": 19968, + "Y": -3584, + "Z": 67072, + "Room": 26 + }, + { + "X": 18944, + "Y": -8704, + "Z": 72192, + "Room": 50 + }, + { + "X": 38400, + "Y": -2816, + "Z": 69120, + "Room": 28 + }, + { + "X": 43520, + "Y": -4096, + "Z": 67072, + "Room": 29 + }, + { + "X": 41472, + "Y": -4096, + "Z": 67072, + "Room": 30 + }, + { + "X": 39424, + "Y": -4224, + "Z": 60928, + "Room": 31 + }, + { + "X": 42496, + "Y": -4992, + "Z": 55552, + "Room": 33, + "KeyItemsHigh": "14238", + "KeyItemsLow": "14240" + }, + { + "X": 42496, + "Y": -4992, + "Z": 55808, + "Room": 33, + "KeyItemsHigh": "14238", + "KeyItemsLow": "14240", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -4992, + "Z": 56064, + "Room": 33, + "KeyItemsHigh": "14238", + "Range": "Medium" + }, + { + "X": 42680, + "Y": -4945, + "Z": 56074, + "Room": 33, + "KeyItemsHigh": "14238", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42667, + "Y": -4949, + "Z": 55808, + "Room": 33, + "KeyItemsHigh": "14238", + "Range": "Large" + }, + { + "X": 42654, + "Y": -4952, + "Z": 55541, + "Room": 33, + "KeyItemsHigh": "14238", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 43520, + "Y": -4736, + "Z": 55808, + "Room": 32 + }, + { + "X": 48640, + "Y": -5120, + "Z": 57856, + "Room": 33 + }, + { + "X": 49664, + "Y": -7168, + "Z": 56832, + "Room": 38 + }, + { + "X": 52736, + "Y": -6912, + "Z": 55808, + "Room": 39 + }, + { + "X": 52736, + "Y": -5888, + "Z": 48640, + "Room": 37 + }, + { + "X": 47616, + "Y": -5120, + "Z": 53760, + "Room": 34 + }, + { + "X": 45568, + "Y": -1792, + "Z": 50688, + "Room": 36 + }, + { + "X": 43520, + "Y": -5888, + "Z": 48640, + "Room": 34 + }, + { + "X": 51712, + "Y": -3712, + "Z": 45568, + "Room": 53 + }, + { + "X": 42496, + "Y": 2560, + "Z": 45568, + "Room": 49 + }, + { + "X": 42496, + "Y": 2560, + "Z": 41472, + "Room": 98 + }, + { + "X": 38400, + "Y": 2560, + "Z": 41472, + "Room": 99 + }, + { + "X": 29184, + "Y": 2560, + "Z": 42496, + "Room": 48 + }, + { + "X": 28160, + "Y": 9984, + "Z": 40448, + "Room": 104 + }, + { + "X": 27136, + "Y": 6400, + "Z": 38400, + "Room": 108 + }, + { + "X": 30208, + "Y": 6400, + "Z": 38400, + "Room": 107 + }, + { + "X": 31232, + "Y": 9984, + "Z": 38400, + "Room": 103 + }, + { + "X": 39424, + "Y": 9984, + "Z": 34304, + "Room": 41 + }, + { + "X": 41472, + "Y": 6400, + "Z": 35328, + "Room": 63 + }, + { + "X": 38400, + "Y": 6400, + "Z": 38400, + "Room": 107 + }, + { + "X": 39424, + "Y": 9984, + "Z": 42496, + "Room": 64 + }, + { + "X": 39424, + "Y": 9984, + "Z": 51712, + "Room": 106 + }, + { + "X": 41472, + "Y": 6400, + "Z": 54784, + "Room": 110 + }, + { + "X": 38400, + "Y": 6400, + "Z": 54784, + "Room": 109 + }, + { + "X": 36352, + "Y": 9984, + "Z": 54784, + "Room": 105 + }, + { + "X": 29184, + "Y": 9984, + "Z": 58880, + "Room": 61 + }, + { + "X": 27136, + "Y": 6400, + "Z": 57856, + "Room": 44 + }, + { + "X": 30208, + "Y": 6400, + "Z": 54784, + "Room": 109 + }, + { + "X": 29184, + "Y": 9984, + "Z": 48640, + "Room": 62 + }, + { + "X": 26112, + "Y": 2560, + "Z": 37376, + "Room": 100 + }, + { + "X": 29184, + "Y": 2560, + "Z": 51712, + "Room": 40 + }, + { + "X": 30208, + "Y": 2560, + "Z": 51712, + "Room": 101 + }, + { + "X": 39424, + "Y": 2560, + "Z": 53760, + "Room": 102 + }, + { + "X": 43520, + "Y": 2048, + "Z": 53760, + "Room": 18 + }, + { + "X": 35328, + "Y": 768, + "Z": 59904, + "Room": 54 + }, + { + "X": 42496, + "Y": -2304, + "Z": 60928, + "Room": 55 + }, + { + "X": 52736, + "Y": -8960, + "Z": 59904, + "Room": 56 + }, + { + "X": 45568, + "Y": -1792, + "Z": 41472, + "Room": 35 + }, + { + "X": 45312, + "Y": -3840, + "Z": 39424, + "Room": 68, + "KeyItemsHigh": "14240" + }, + { + "X": 45568, + "Y": -3840, + "Z": 39424, + "Room": 68, + "KeyItemsHigh": "14240", + "RequiresReturnPath": true + }, + { + "X": 45824, + "Y": -3840, + "Z": 39424, + "Room": 68, + "KeyItemsHigh": "14240", + "Range": "Medium" + }, + { + "X": 45824, + "Y": -3840, + "Z": 39168, + "Room": 68, + "KeyItemsHigh": "14240", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": -3840, + "Z": 39168, + "Room": 68, + "KeyItemsHigh": "14240", + "Range": "Large" + }, + { + "X": 45312, + "Y": -3840, + "Z": 39168, + "Room": 68, + "KeyItemsHigh": "14240", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -1024, + "Z": 33280, + "Room": 69 + }, + { + "X": 38400, + "Y": 1280, + "Z": 33280, + "Room": 75 + }, + { + "X": 38400, + "Y": -256, + "Z": 27136, + "Room": 70 + } + ], + "PLATFORM.TR2": [ + { + "X": 49664, + "Y": 1280, + "Z": 58880, + "Room": 0 + }, + { + "X": 49664, + "Y": -256, + "Z": 57856, + "Room": 37 + }, + { + "X": 43520, + "Y": -2304, + "Z": 54784, + "Room": 39 + }, + { + "X": 45568, + "Y": 4096, + "Z": 53760, + "Room": 41 + }, + { + "X": 45568, + "Y": 4096, + "Z": 51712, + "Room": 51 + }, + { + "X": 44544, + "Y": 768, + "Z": 60672, + "Room": 44, + "KeyItemsLow": "15301", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 768, + "Z": 60928, + "Room": 44, + "KeyItemsLow": "15301", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 768, + "Z": 61184, + "Room": 44, + "KeyItemsLow": "15301,15299,15250,15206", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 40448, + "Y": 1024, + "Z": 60928, + "Room": 42 + }, + { + "X": 37376, + "Y": 4480, + "Z": 59904, + "Room": 43 + }, + { + "X": 36352, + "Y": 5120, + "Z": 51712, + "Room": 45 + }, + { + "X": 37376, + "Y": 2560, + "Z": 48640, + "Room": 46 + }, + { + "X": 40448, + "Y": 1024, + "Z": 51712, + "Room": 47 + }, + { + "X": 32256, + "Y": 1024, + "Z": 60928, + "Room": 48 + }, + { + "X": 23040, + "Y": 4096, + "Z": 71936, + "Room": 56, + "KeyItemsLow": "15301" + }, + { + "X": 23040, + "Y": 4096, + "Z": 72192, + "Room": 56, + "KeyItemsLow": "15301", + "Range": "Medium" + }, + { + "X": 23040, + "Y": 4096, + "Z": 72448, + "Room": 56, + "KeyItemsLow": "15301", + "Range": "Large" + }, + { + "X": 19968, + "Y": 4352, + "Z": 73216, + "Room": 57 + }, + { + "X": 18944, + "Y": 4352, + "Z": 70144, + "Room": 96, + "RoomType": "ReturnPath" + }, + { + "X": 19968, + "Y": -768, + "Z": 60928, + "Room": 97, + "RoomType": "ReturnPath" + }, + { + "X": 20992, + "Y": -11008, + "Z": 77312, + "Room": 50, + "KeyItemsLow": "15299,15250,15206", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": -11776, + "Z": 77312, + "Room": 55 + }, + { + "X": 27136, + "Y": -7040, + "Z": 74240, + "Room": 53 + }, + { + "X": 27136, + "Y": -5376, + "Z": 74240, + "Room": 54 + }, + { + "X": 23040, + "Y": -1408, + "Z": 74240, + "Room": 52 + }, + { + "X": 19968, + "Y": -1280, + "Z": 77312, + "Room": 62 + }, + { + "X": 13824, + "Y": -2816, + "Z": 75264, + "Room": 63 + }, + { + "X": 33280, + "Y": -5120, + "Z": 77568, + "Room": 49, + "KeyItemsHigh": "15301" + }, + { + "X": 33280, + "Y": -5120, + "Z": 77312, + "Room": 49, + "KeyItemsHigh": "15301", + "KeyItemsLow": "15299,15206", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": -5120, + "Z": 77056, + "Room": 49, + "KeyItemsHigh": "15301", + "Range": "Medium" + }, + { + "X": 33536, + "Y": -5120, + "Z": 77056, + "Room": 49, + "KeyItemsHigh": "15301", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 33536, + "Y": -5120, + "Z": 77312, + "Room": 49, + "KeyItemsHigh": "15301", + "Range": "Large" + }, + { + "X": 33536, + "Y": -5120, + "Z": 77568, + "Room": 49, + "KeyItemsHigh": "15301", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -5120, + "Z": 77056, + "Room": 15, + "KeyItemsLow": "15206,15299" + }, + { + "X": 38400, + "Y": -5120, + "Z": 77312, + "Room": 15, + "KeyItemsLow": "15206,15250,15299", + "Range": "Medium" + }, + { + "X": 38400, + "Y": -5120, + "Z": 77568, + "Room": 15, + "KeyItemsLow": "15206,15250,15299", + "Range": "Large" + }, + { + "X": 41472, + "Y": -5120, + "Z": 83456, + "Room": 14 + }, + { + "X": 45568, + "Y": -5120, + "Z": 85504, + "Room": 10, + "Validated": false + }, + { + "X": 50688, + "Y": -5120, + "Z": 83456, + "Room": 16 + }, + { + "X": 53760, + "Y": -5120, + "Z": 77312, + "Room": 29 + }, + { + "X": 60928, + "Y": -512, + "Z": 73216, + "Room": 32 + }, + { + "X": 66048, + "Y": -512, + "Z": 75264, + "Room": 83 + }, + { + "X": 69120, + "Y": -512, + "Z": 77312, + "Room": 84 + }, + { + "X": 69120, + "Y": -512, + "Z": 79360, + "Room": 85 + }, + { + "X": 70115, + "Y": -512, + "Z": 80308, + "Room": 86 + }, + { + "X": 74240, + "Y": -512, + "Z": 79360, + "Room": 89 + }, + { + "X": 74240, + "Y": -512, + "Z": 74240, + "Room": 88 + }, + { + "X": 69120, + "Y": -512, + "Z": 74240, + "Room": 87 + }, + { + "X": 49664, + "Y": -5120, + "Z": 70144, + "Room": 13 + }, + { + "X": 45568, + "Y": -5120, + "Z": 69120, + "Room": 25 + }, + { + "X": 41472, + "Y": -6656, + "Z": 66048, + "Room": 24 + }, + { + "X": 42496, + "Y": -7936, + "Z": 61952, + "Room": 75 + }, + { + "X": 45568, + "Y": -8704, + "Z": 61952, + "Room": 26 + }, + { + "X": 45568, + "Y": -9216, + "Z": 68096, + "Room": 22 + }, + { + "X": 45568, + "Y": -9216, + "Z": 72192, + "Room": 21 + }, + { + "X": 45568, + "Y": -9216, + "Z": 86528, + "Room": 23 + }, + { + "X": 42496, + "Y": -9216, + "Z": 86528, + "Room": 80 + }, + { + "X": 62720, + "Y": -3584, + "Z": 78336, + "Room": 30, + "KeyItemsHigh": "15299", + "KeyItemsLow": "15250" + }, + { + "X": 62976, + "Y": -3584, + "Z": 78336, + "Room": 30, + "KeyItemsHigh": "15299", + "KeyItemsLow": "15250", + "RequiresReturnPath": true + }, + { + "X": 63232, + "Y": -3584, + "Z": 78336, + "Room": 30, + "KeyItemsHigh": "15299", + "Range": "Medium" + }, + { + "X": 63232, + "Y": -3584, + "Z": 78592, + "Room": 30, + "KeyItemsHigh": "15299", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": -3584, + "Z": 78592, + "Room": 30, + "KeyItemsHigh": "15299", + "Range": "Large" + }, + { + "X": 62720, + "Y": -3584, + "Z": 78592, + "Room": 30, + "KeyItemsHigh": "15299", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": -3584, + "Z": 79360, + "Room": 64 + }, + { + "X": 62976, + "Y": -2816, + "Z": 83456, + "Room": 65 + }, + { + "X": 61952, + "Y": -2816, + "Z": 91648, + "Room": 2 + }, + { + "X": 59904, + "Y": 2560, + "Z": 87552, + "Room": 66 + }, + { + "X": 58880, + "Y": 3584, + "Z": 87552, + "Room": 11 + }, + { + "X": 54784, + "Y": 2304, + "Z": 86528, + "Room": 68 + }, + { + "X": 45568, + "Y": 2176, + "Z": 84480, + "Room": 69 + }, + { + "X": 47616, + "Y": 17920, + "Z": 78336, + "Room": 70 + }, + { + "X": 49152, + "Y": 981, + "Z": 77295, + "Room": 20, + "Validated": false + }, + { + "X": 66048, + "Y": -4608, + "Z": 75264, + "Room": 34 + }, + { + "X": 67072, + "Y": -4608, + "Z": 75264, + "Room": 31 + }, + { + "X": 58880, + "Y": -3328, + "Z": 67072, + "Room": 92 + }, + { + "X": 45568, + "Y": -7424, + "Z": 79360, + "Room": 72 + }, + { + "X": 45568, + "Y": -7424, + "Z": 80384, + "Room": 73 + }, + { + "X": 45568, + "Y": -5120, + "Z": 80384, + "Room": 12 + }, + { + "X": 45824, + "Y": -3584, + "Z": 77568, + "Room": 18, + "KeyItemsHigh": "15250,15206" + }, + { + "X": 45824, + "Y": -3584, + "Z": 77312, + "Room": 18, + "KeyItemsHigh": "15250,15206", + "RequiresReturnPath": true + }, + { + "X": 45824, + "Y": -3584, + "Z": 77056, + "Room": 18, + "KeyItemsHigh": "15250,15206", + "Range": "Medium" + }, + { + "X": 45568, + "Y": -3584, + "Z": 77056, + "Room": 18, + "KeyItemsHigh": "15250,15206", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": -3584, + "Z": 77312, + "Room": 18, + "KeyItemsHigh": "15250,15206", + "Range": "Large" + }, + { + "X": 45568, + "Y": -3584, + "Z": 77568, + "Room": 18, + "KeyItemsHigh": "15250,15206", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": -1024, + "Z": 84480, + "Room": 19 + }, + { + "X": 48640, + "Y": -768, + "Z": 82432, + "Room": 17 + }, + { + "X": 45568, + "Y": -1024, + "Z": 71168, + "Room": 74 + }, + { + "X": 45568, + "Y": 1024, + "Z": 60928, + "Room": 7 + }, + { + "X": 46592, + "Y": 3584, + "Z": 61952, + "Room": 3 + }, + { + "X": 51712, + "Y": 2816, + "Z": 61952, + "Room": 4 + }, + { + "X": 51712, + "Y": 2816, + "Z": 67072, + "Room": 8 + }, + { + "X": 53760, + "Y": 4096, + "Z": 67072, + "Room": 9 + }, + { + "X": 53760, + "Y": 3072, + "Z": 61952, + "Room": 5 + }, + { + "X": 55808, + "Y": 3072, + "Z": 61952, + "Room": 76 + }, + { + "X": 54784, + "Y": 2816, + "Z": 55808, + "Room": 79 + }, + { + "X": 55808, + "Y": 5376, + "Z": 55808, + "Room": 77 + }, + { + "X": 54784, + "Y": 5632, + "Z": 59904, + "Room": 78 + } + ], + "UNWATER.TR2": [ + { + "X": 28160, + "Y": -1024, + "Z": 41472, + "Room": 0 + }, + { + "X": 38400, + "Y": -512, + "Z": 51712, + "Room": 2 + }, + { + "X": 37376, + "Y": -512, + "Z": 51712, + "Room": 3 + }, + { + "X": 18944, + "Y": -1024, + "Z": 50688, + "Room": 6 + }, + { + "X": 18944, + "Y": -1536, + "Z": 32256, + "Room": 7 + }, + { + "X": 19068, + "Y": -15616, + "Z": 32440, + "Room": 59 + }, + { + "X": 38400, + "Y": -1024, + "Z": 32256, + "Room": 5 + }, + { + "X": 37364, + "Y": -15616, + "Z": 50671, + "Room": 54 + }, + { + "X": 45620, + "Y": -13387, + "Z": 57882, + "Room": 51 + }, + { + "X": 56832, + "Y": -1536, + "Z": 68096, + "Room": 9 + }, + { + "X": 61952, + "Y": -1792, + "Z": 65024, + "Room": 12 + }, + { + "X": 58880, + "Y": -4992, + "Z": 60928, + "Room": 11 + }, + { + "X": 62976, + "Y": -5632, + "Z": 53760, + "Room": 14 + }, + { + "X": 67072, + "Y": -1536, + "Z": 59904, + "Room": 15 + }, + { + "X": 66048, + "Y": -1536, + "Z": 62976, + "Room": 16 + }, + { + "X": 65024, + "Y": -2816, + "Z": 64000, + "Room": 13 + }, + { + "X": 66048, + "Y": -6144, + "Z": 67072, + "Room": 17 + }, + { + "X": 68096, + "Y": -1792, + "Z": 68096, + "Room": 18 + }, + { + "X": 70144, + "Y": -4352, + "Z": 67072, + "Room": 19 + }, + { + "X": 65024, + "Y": -7040, + "Z": 71168, + "Room": 20 + }, + { + "X": 66048, + "Y": -3584, + "Z": 75264, + "Room": 21 + }, + { + "X": 67072, + "Y": -1280, + "Z": 71168, + "Room": 62 + }, + { + "X": 70144, + "Y": -3584, + "Z": 71168, + "Room": 22 + }, + { + "X": 83456, + "Y": -3584, + "Z": 72192, + "Room": 60 + }, + { + "X": 83456, + "Y": -4480, + "Z": 77312, + "Room": 61 + }, + { + "X": 84480, + "Y": -2816, + "Z": 79360, + "Room": 63 + }, + { + "X": 85504, + "Y": -2944, + "Z": 78336, + "Room": 64 + }, + { + "X": 85504, + "Y": -3584, + "Z": 74240, + "Room": 33 + }, + { + "X": 79360, + "Y": -3840, + "Z": 70144, + "Room": 26 + }, + { + "X": 78336, + "Y": -5632, + "Z": 68096, + "Room": 67 + }, + { + "X": 78336, + "Y": -3840, + "Z": 62976, + "Room": 25 + }, + { + "X": 72192, + "Y": -3840, + "Z": 64000, + "Room": 47 + }, + { + "X": 74240, + "Y": -4352, + "Z": 70144, + "Room": 46 + }, + { + "X": 75264, + "Y": -3840, + "Z": 59904, + "Room": 28 + }, + { + "X": 83456, + "Y": -3840, + "Z": 64000, + "Room": 23 + }, + { + "X": 81408, + "Y": -4352, + "Z": 75264, + "Room": 24 + }, + { + "X": 75264, + "Y": -2560, + "Z": 51712, + "Room": 29 + }, + { + "X": 74240, + "Y": -3840, + "Z": 49664, + "Room": 30 + }, + { + "X": 74240, + "Y": -7168, + "Z": 49664, + "Room": 31 + }, + { + "X": 75264, + "Y": -10496, + "Z": 48640, + "Room": 32 + }, + { + "X": 75264, + "Y": -3840, + "Z": 47616, + "Room": 68 + }, + { + "X": 74240, + "Y": -13824, + "Z": 46592, + "Room": 34 + }, + { + "X": 75264, + "Y": -13824, + "Z": 41472, + "Room": 35 + }, + { + "X": 79360, + "Y": -8960, + "Z": 43520, + "Room": 36 + }, + { + "X": 84480, + "Y": -6528, + "Z": 44544, + "Room": 40 + }, + { + "X": 82432, + "Y": -6656, + "Z": 53760, + "Room": 41 + }, + { + "X": 83456, + "Y": -8448, + "Z": 47616, + "Room": 37 + }, + { + "X": 79360, + "Y": -13824, + "Z": 48640, + "Room": 38 + }, + { + "X": 82432, + "Y": -12032, + "Z": 37376, + "Room": 39 + }, + { + "X": 86528, + "Y": -12032, + "Z": 36352, + "Room": 27 + }, + { + "X": 80384, + "Y": -7168, + "Z": 38400, + "Room": 42 + }, + { + "X": 81408, + "Y": -7168, + "Z": 37376, + "Room": 76 + }, + { + "X": 82432, + "Y": -7168, + "Z": 35328, + "Room": 75 + }, + { + "X": 81408, + "Y": 0, + "Z": 32256, + "Room": 44 + }, + { + "X": 82432, + "Y": -1792, + "Z": 34304, + "Room": 74 + }, + { + "X": 81408, + "Y": -1792, + "Z": 37376, + "Room": 66 + }, + { + "X": 81408, + "Y": -3328, + "Z": 43520, + "Room": 49 + }, + { + "X": 81408, + "Y": -3584, + "Z": 45568, + "Room": 50 + } + ], + "KEEL.TR2": [ + { + "X": 66048, + "Y": -4352, + "Z": 29184, + "Room": 113, + "KeyItemsLow": "17324,17298,17304,17343,17349,17407", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 66304, + "Y": -4352, + "Z": 29184, + "Room": 113, + "KeyItemsLow": "17407,17304,17298,17349", + "RequiresReturnPath": true + }, + { + "X": 66304, + "Y": -4352, + "Z": 29440, + "Room": 113, + "KeyItemsLow": "17407,17343,17304,17298,17349", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": 0, + "Z": 30208, + "Room": 19 + }, + { + "X": 64000, + "Y": -1792, + "Z": 33280, + "Room": 112 + }, + { + "X": 62976, + "Y": -1792, + "Z": 37376, + "Room": 42 + }, + { + "X": 64000, + "Y": -3072, + "Z": 41472, + "Room": 43 + }, + { + "X": 62720, + "Y": 4352, + "Z": 43520, + "Room": 45, + "KeyItemsLow": "17298,17304,17349,17407" + }, + { + "X": 62976, + "Y": 4352, + "Z": 43520, + "Room": 45, + "KeyItemsLow": "17407,17343,17304,17298,17349", + "Range": "Medium" + }, + { + "X": 63232, + "Y": 4352, + "Z": 43520, + "Room": 45, + "KeyItemsLow": "17407,17343,17304,17298,17349", + "Range": "Large" + }, + { + "X": 64000, + "Y": 4608, + "Z": 51712, + "Room": 47 + }, + { + "X": 61952, + "Y": 2560, + "Z": 52736, + "Room": 12 + }, + { + "X": 67072, + "Y": 2560, + "Z": 52736, + "Room": 15 + }, + { + "X": 67072, + "Y": 2560, + "Z": 40448, + "Room": 14 + }, + { + "X": 67072, + "Y": 4352, + "Z": 39424, + "Room": 10 + }, + { + "X": 64000, + "Y": 4352, + "Z": 58880, + "Room": 5 + }, + { + "X": 68096, + "Y": 4224, + "Z": 56832, + "Room": 53 + }, + { + "X": 70144, + "Y": 5120, + "Z": 58880, + "Room": 54 + }, + { + "X": 69120, + "Y": 5120, + "Z": 60928, + "Room": 55 + }, + { + "X": 75264, + "Y": 3072, + "Z": 74240, + "Room": 56 + }, + { + "X": 79360, + "Y": 6400, + "Z": 59904, + "Room": 93 + }, + { + "X": 66048, + "Y": 4352, + "Z": 58880, + "Room": 48 + }, + { + "X": 66048, + "Y": 4736, + "Z": 61952, + "Room": 49 + }, + { + "X": 58880, + "Y": 4608, + "Z": 68096, + "Room": 91 + }, + { + "X": 75008, + "Y": 2304, + "Z": 76288, + "Room": 57, + "KeyItemsHigh": "17407", + "KeyItemsLow": "17343" + }, + { + "X": 75264, + "Y": 2304, + "Z": 76288, + "Room": 57, + "KeyItemsHigh": "17407", + "KeyItemsLow": "17343", + "RequiresReturnPath": true + }, + { + "X": 75520, + "Y": 2304, + "Z": 76288, + "Room": 57, + "KeyItemsHigh": "17407", + "Range": "Medium" + }, + { + "X": 75520, + "Y": 2304, + "Z": 76544, + "Room": 57, + "KeyItemsHigh": "17407", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 75264, + "Y": 2304, + "Z": 76544, + "Room": 57, + "KeyItemsHigh": "17407", + "Range": "Large" + }, + { + "X": 75008, + "Y": 2304, + "Z": 76544, + "Room": 57, + "KeyItemsHigh": "17407", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": 2304, + "Z": 82432, + "Room": 58 + }, + { + "X": 71168, + "Y": 3328, + "Z": 80384, + "Room": 61 + }, + { + "X": 66048, + "Y": 5376, + "Z": 83456, + "Room": 60 + }, + { + "X": 66048, + "Y": 2304, + "Z": 87552, + "Room": 65 + }, + { + "X": 59904, + "Y": 3328, + "Z": 88576, + "Room": 64 + }, + { + "X": 59904, + "Y": 3328, + "Z": 83456, + "Room": 63 + }, + { + "X": 59904, + "Y": 3072, + "Z": 78336, + "Room": 67 + }, + { + "X": 66048, + "Y": 3328, + "Z": 78336, + "Room": 66 + }, + { + "X": 70912, + "Y": 2304, + "Z": 83456, + "Room": 59, + "KeyItemsHigh": "17343" + }, + { + "X": 71168, + "Y": 2304, + "Z": 83456, + "Room": 59, + "KeyItemsHigh": "17343", + "RequiresReturnPath": true + }, + { + "X": 71424, + "Y": 2304, + "Z": 83456, + "Room": 59, + "KeyItemsHigh": "17343", + "Range": "Medium" + }, + { + "X": 71424, + "Y": 2304, + "Z": 83712, + "Room": 59, + "KeyItemsHigh": "17343", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": 2304, + "Z": 83712, + "Room": 59, + "KeyItemsHigh": "17343", + "Range": "Large" + }, + { + "X": 70912, + "Y": 2304, + "Z": 83712, + "Room": 59, + "KeyItemsHigh": "17343", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": 4352, + "Z": 87552, + "Room": 62 + }, + { + "X": 67072, + "Y": 5376, + "Z": 91648, + "Room": 68 + }, + { + "X": 60928, + "Y": 7680, + "Z": 92672, + "Room": 70 + }, + { + "X": 58880, + "Y": 5248, + "Z": 93696, + "Room": 69 + }, + { + "X": 58880, + "Y": 2432, + "Z": 97792, + "Room": 13 + }, + { + "X": 54784, + "Y": 4352, + "Z": 89600, + "Room": 71 + }, + { + "X": 54784, + "Y": 8960, + "Z": 87552, + "Room": 73 + }, + { + "X": 52736, + "Y": 2816, + "Z": 87552, + "Room": 97 + }, + { + "X": 51712, + "Y": 2816, + "Z": 88576, + "Room": 96 + }, + { + "X": 49664, + "Y": 1792, + "Z": 91648, + "Room": 95 + }, + { + "X": 54784, + "Y": 2816, + "Z": 84480, + "Room": 74 + }, + { + "X": 52736, + "Y": 2816, + "Z": 81408, + "Room": 75 + }, + { + "X": 48640, + "Y": 3584, + "Z": 82432, + "Room": 80 + }, + { + "X": 39424, + "Y": 5632, + "Z": 82432, + "Room": 76 + }, + { + "X": 56832, + "Y": 8960, + "Z": 85504, + "Room": 77 + }, + { + "X": 56832, + "Y": 3328, + "Z": 75264, + "Room": 78 + }, + { + "X": 56832, + "Y": 4608, + "Z": 70144, + "Room": 52 + }, + { + "X": 57856, + "Y": 3200, + "Z": 73216, + "Room": 86 + }, + { + "X": 62976, + "Y": 3072, + "Z": 72192, + "Room": 90 + }, + { + "X": 64000, + "Y": 3072, + "Z": 73216, + "Room": 18 + }, + { + "X": 60928, + "Y": 6912, + "Z": 42752, + "Room": 79, + "KeyItemsLow": "17407", + "Range": "Medium" + }, + { + "X": 60928, + "Y": 6912, + "Z": 42496, + "Room": 79, + "KeyItemsLow": "17407", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 6912, + "Z": 42240, + "Room": 79, + "KeyItemsLow": "17407,17343", + "Range": "Large" + }, + { + "X": 60672, + "Y": 6912, + "Z": 42240, + "Room": 79, + "KeyItemsLow": "17407,17343", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 56832, + "Y": 5888, + "Z": 39424, + "Room": 8 + }, + { + "X": 58880, + "Y": 1920, + "Z": 39424, + "Room": 9 + }, + { + "X": 58880, + "Y": -4096, + "Z": 38400, + "Room": 3, + "KeyItemsHigh": "17407", + "KeyItemsLow": "17324", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 59136, + "Y": -4096, + "Z": 38400, + "Room": 3, + "KeyItemsHigh": "17407", + "Range": "Medium" + }, + { + "X": 59136, + "Y": -4096, + "Z": 38144, + "Room": 3, + "KeyItemsHigh": "17343", + "Range": "Large" + }, + { + "X": 58880, + "Y": -4096, + "Z": 35328, + "Room": 21 + }, + { + "X": 59904, + "Y": -4096, + "Z": 28160, + "Room": 23 + }, + { + "X": 59904, + "Y": -4096, + "Z": 22016, + "Room": 25 + }, + { + "X": 56064, + "Y": -6656, + "Z": 36352, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349" + }, + { + "X": 55808, + "Y": -6656, + "Z": 36352, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349", + "RequiresReturnPath": true + }, + { + "X": 55552, + "Y": -6656, + "Z": 36352, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349", + "Range": "Medium" + }, + { + "X": 55552, + "Y": -6656, + "Z": 36096, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 55808, + "Y": -6656, + "Z": 36096, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349,17407", + "Range": "Large" + }, + { + "X": 56064, + "Y": -6656, + "Z": 36096, + "Room": 26, + "KeyItemsHigh": "17298,17304,17349,17407,17343", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 55808, + "Y": -7424, + "Z": 32256, + "Room": 20 + }, + { + "X": 55808, + "Y": -7424, + "Z": 26112, + "Room": 22 + }, + { + "X": 55808, + "Y": -7424, + "Z": 19968, + "Room": 24 + }, + { + "X": 55808, + "Y": -7424, + "Z": 15872, + "Room": 27 + }, + { + "X": 56832, + "Y": 3840, + "Z": 13824, + "Room": 30, + "KeyItemsLow": "17324", + "Range": "Medium" + }, + { + "X": 56832, + "Y": 3840, + "Z": 14080, + "Room": 30, + "KeyItemsLow": "17324", + "Range": "Large" + }, + { + "X": 55808, + "Y": 1536, + "Z": 19968, + "Room": 31 + }, + { + "X": 55808, + "Y": 2816, + "Z": 27136, + "Room": 32 + }, + { + "X": 55808, + "Y": 2944, + "Z": 28160, + "Room": 94 + }, + { + "X": 54784, + "Y": 3456, + "Z": 30208, + "Room": 85 + }, + { + "X": 51712, + "Y": 2816, + "Z": 29184, + "Room": 33, + "KeyItemsLow": "17324" + }, + { + "X": 51456, + "Y": 2816, + "Z": 29184, + "Room": 33, + "KeyItemsLow": "17324", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 2816, + "Z": 33280, + "Room": 36 + }, + { + "X": 45568, + "Y": 2816, + "Z": 35328, + "Room": 35 + }, + { + "X": 40448, + "Y": 3072, + "Z": 35328, + "Room": 39 + }, + { + "X": 55808, + "Y": 2816, + "Z": 35328, + "Room": 40 + }, + { + "X": 40448, + "Y": 3456, + "Z": 32256, + "Room": 37 + }, + { + "X": 39424, + "Y": 3200, + "Z": 25088, + "Room": 38 + }, + { + "X": 39424, + "Y": 7680, + "Z": 20992, + "Room": 104 + }, + { + "X": 39424, + "Y": 10112, + "Z": 30208, + "Room": 105 + }, + { + "X": 40448, + "Y": 6272, + "Z": 38400, + "Room": 106 + }, + { + "X": 41472, + "Y": 0, + "Z": 48640, + "Room": 11 + }, + { + "X": 44544, + "Y": 5376, + "Z": 40448, + "Room": 41 + }, + { + "X": 49664, + "Y": 2816, + "Z": 29440, + "Room": 34, + "KeyItemsHigh": "17324" + }, + { + "X": 49664, + "Y": 2816, + "Z": 29184, + "Room": 34, + "KeyItemsHigh": "17324", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 2816, + "Z": 28928, + "Room": 34, + "KeyItemsHigh": "17324", + "Range": "Medium" + }, + { + "X": 49408, + "Y": 2816, + "Z": 28928, + "Room": 34, + "KeyItemsHigh": "17324", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49408, + "Y": 2816, + "Z": 29184, + "Room": 34, + "KeyItemsHigh": "17324", + "Range": "Large" + }, + { + "X": 49408, + "Y": 2816, + "Z": 29440, + "Room": 34, + "KeyItemsHigh": "17324", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 1792, + "Z": 28160, + "Room": 81 + }, + { + "X": 47616, + "Y": 2560, + "Z": 23040, + "Room": 82 + }, + { + "X": 47616, + "Y": 4608, + "Z": 13824, + "Room": 83 + }, + { + "X": 47616, + "Y": 4608, + "Z": 11776, + "Room": 84 + }, + { + "X": 45568, + "Y": 11392, + "Z": 18944, + "Room": 99 + }, + { + "X": 45568, + "Y": 11392, + "Z": 19968, + "Room": 103 + }, + { + "X": 42496, + "Y": 10496, + "Z": 19968, + "Room": 100 + }, + { + "X": 43520, + "Y": 10368, + "Z": 15872, + "Room": 102 + }, + { + "X": 52736, + "Y": 11136, + "Z": 10752, + "Room": 101 + }, + { + "X": 56832, + "Y": 12032, + "Z": 16896, + "Room": 6 + }, + { + "X": 59904, + "Y": 12800, + "Z": 16896, + "Room": 7 + }, + { + "X": 69120, + "Y": 8448, + "Z": 16896, + "Room": 89 + }, + { + "X": 75264, + "Y": 12416, + "Z": 16896, + "Room": 88 + } + ], + "LIVING.TR2": [ + { + "X": 92672, + "Y": 5632, + "Z": 79360, + "Room": 4 + }, + { + "X": 87552, + "Y": 5376, + "Z": 80384, + "Room": 3 + }, + { + "X": 80384, + "Y": -256, + "Z": 79360, + "Room": 2, + "KeyItemsLow": "18300", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 77312, + "Y": 0, + "Z": 88576, + "Room": 0 + }, + { + "X": 68096, + "Y": 0, + "Z": 79360, + "Room": 50 + }, + { + "X": 66048, + "Y": 0, + "Z": 79360, + "Room": 5 + }, + { + "X": 66048, + "Y": 0, + "Z": 77312, + "Room": 60 + }, + { + "X": 67072, + "Y": 0, + "Z": 76288, + "Room": 24 + }, + { + "X": 67072, + "Y": 1792, + "Z": 75264, + "Room": 7 + }, + { + "X": 64000, + "Y": 1792, + "Z": 73216, + "Room": 6 + }, + { + "X": 58880, + "Y": -256, + "Z": 76288, + "Room": 10 + }, + { + "X": 58880, + "Y": -2048, + "Z": 79360, + "Room": 54 + }, + { + "X": 62976, + "Y": -2048, + "Z": 79360, + "Room": 58 + }, + { + "X": 66048, + "Y": -2048, + "Z": 79360, + "Room": 8 + }, + { + "X": 73216, + "Y": -4352, + "Z": 90624, + "Room": 1 + }, + { + "X": 73216, + "Y": -4352, + "Z": 91648, + "Room": 12 + }, + { + "X": 67072, + "Y": -4352, + "Z": 90624, + "Room": 13 + }, + { + "X": 67072, + "Y": -3840, + "Z": 85504, + "Room": 11 + }, + { + "X": 60928, + "Y": 640, + "Z": 64000, + "Room": 14 + }, + { + "X": 62976, + "Y": 4864, + "Z": 60928, + "Room": 15, + "KeyItemsLow": "18300", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 384, + "Z": 61952, + "Room": 68 + }, + { + "X": 64000, + "Y": 4352, + "Z": 52736, + "Room": 17 + }, + { + "X": 64000, + "Y": 512, + "Z": 57856, + "Room": 16, + "KeyItemsLow": "18300", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": -256, + "Z": 59904, + "Room": 80, + "KeyItemsHigh": "18300", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": -1792, + "Z": 51712, + "Room": 18 + }, + { + "X": 60928, + "Y": -2048, + "Z": 58880, + "Room": 19 + }, + { + "X": 58880, + "Y": -2176, + "Z": 59904, + "Room": 31 + }, + { + "X": 58880, + "Y": -1024, + "Z": 65024, + "Room": 30 + }, + { + "X": 55808, + "Y": -768, + "Z": 67072, + "Room": 29 + }, + { + "X": 54784, + "Y": -2304, + "Z": 73216, + "Room": 61 + }, + { + "X": 54784, + "Y": 1024, + "Z": 73216, + "Room": 62 + }, + { + "X": 53760, + "Y": -896, + "Z": 71168, + "Room": 27 + }, + { + "X": 49664, + "Y": 1792, + "Z": 68352, + "Room": 26, + "KeyItemsLow": "18300", + "Range": "Medium" + }, + { + "X": 49664, + "Y": 1792, + "Z": 68096, + "Room": 26, + "KeyItemsLow": "18300", + "Range": "Large" + }, + { + "X": 49664, + "Y": 2304, + "Z": 67072, + "Room": 28 + }, + { + "X": 47616, + "Y": 4224, + "Z": 67072, + "Room": 72 + }, + { + "X": 45568, + "Y": 3584, + "Z": 68096, + "Room": 77 + }, + { + "X": 46592, + "Y": 4608, + "Z": 72192, + "Room": 32 + }, + { + "X": 48640, + "Y": 1536, + "Z": 62976, + "Room": 69 + }, + { + "X": 49664, + "Y": 0, + "Z": 56832, + "Room": 70 + }, + { + "X": 58880, + "Y": -2560, + "Z": 52736, + "Room": 33, + "KeyItemsLow": "18300", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": -2048, + "Z": 49664, + "Room": 20 + }, + { + "X": 57856, + "Y": -3072, + "Z": 49664, + "Room": 21, + "KeyItemsLow": "18300" + }, + { + "X": 53760, + "Y": -3072, + "Z": 49664, + "Room": 22 + }, + { + "X": 58880, + "Y": -2048, + "Z": 40448, + "Room": 34 + }, + { + "X": 66048, + "Y": 128, + "Z": 39424, + "Room": 35 + }, + { + "X": 53760, + "Y": -2048, + "Z": 45568, + "Room": 23 + }, + { + "X": 50688, + "Y": -2816, + "Z": 44544, + "Room": 36 + }, + { + "X": 45568, + "Y": -2560, + "Z": 43520, + "Room": 39 + }, + { + "X": 41472, + "Y": -3072, + "Z": 42496, + "Room": 40 + }, + { + "X": 49408, + "Y": -2560, + "Z": 42496, + "Room": 36, + "KeyItemsHigh": "18300" + }, + { + "X": 49664, + "Y": -2560, + "Z": 42496, + "Room": 36, + "KeyItemsHigh": "18300", + "RequiresReturnPath": true + }, + { + "X": 49920, + "Y": -2560, + "Z": 42496, + "Room": 36, + "KeyItemsHigh": "18300", + "Range": "Medium" + }, + { + "X": 49920, + "Y": -2560, + "Z": 42240, + "Room": 36, + "KeyItemsHigh": "18300", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -2560, + "Z": 42240, + "Room": 36, + "KeyItemsHigh": "18300", + "Range": "Large" + }, + { + "X": 49408, + "Y": -2560, + "Z": 42240, + "Room": 36, + "KeyItemsHigh": "18300", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -2560, + "Z": 41472, + "Room": 37 + }, + { + "X": 41472, + "Y": -3840, + "Z": 37376, + "Room": 38 + }, + { + "X": 52736, + "Y": -2048, + "Z": 29184, + "Room": 81 + }, + { + "X": 47616, + "Y": -4608, + "Z": 28160, + "Room": 66 + }, + { + "X": 68096, + "Y": -1920, + "Z": 35328, + "Room": 42 + }, + { + "X": 73216, + "Y": 0, + "Z": 39424, + "Room": 79, + "Validated": false + }, + { + "X": 69120, + "Y": -2048, + "Z": 33280, + "Room": 43, + "Validated": false + }, + { + "X": 69120, + "Y": -4352, + "Z": 31232, + "Room": 45, + "Validated": false + }, + { + "X": 60928, + "Y": -6656, + "Z": 28160, + "Room": 52, + "Validated": false + }, + { + "X": 59904, + "Y": -6656, + "Z": 28160, + "Room": 51, + "Validated": false + }, + { + "X": 57856, + "Y": -4352, + "Z": 28160, + "Room": 46, + "Validated": false + }, + { + "X": 55808, + "Y": -2048, + "Z": 29184, + "Room": 44, + "Validated": false + }, + { + "X": 55808, + "Y": -1536, + "Z": 14848, + "Room": 71, + "Validated": false + }, + { + "X": 62976, + "Y": 0, + "Z": 15872, + "Room": 57, + "Validated": false + } + ], + "DECK.TR2": [ + { + "X": 48640, + "Y": -2048, + "Z": 52992, + "Room": 40 + }, + { + "X": 48640, + "Y": -2048, + "Z": 52736, + "Room": 40, + "KeyItemsLow": "19368", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": -2048, + "Z": 52480, + "Room": 40, + "KeyItemsLow": "19262,19385", + "Range": "Medium" + }, + { + "X": 48896, + "Y": -2048, + "Z": 52480, + "Room": 40, + "KeyItemsLow": "19368,19262,19385", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48896, + "Y": -2048, + "Z": 52736, + "Room": 40, + "KeyItemsLow": "19262,19385", + "Range": "Large" + }, + { + "X": 48896, + "Y": -2048, + "Z": 52992, + "Room": 40, + "KeyItemsLow": "19368,19262,19385", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -2048, + "Z": 49664, + "Room": 19 + }, + { + "X": 49664, + "Y": -2048, + "Z": 44544, + "Room": 20 + }, + { + "X": 50688, + "Y": -4736, + "Z": 40448, + "Room": 39 + }, + { + "X": 36352, + "Y": -2048, + "Z": 44544, + "Room": 30 + }, + { + "X": 36352, + "Y": -2048, + "Z": 45568, + "Room": 21 + }, + { + "X": 51712, + "Y": 10240, + "Z": 58880, + "Room": 80, + "KeyItemsLow": "19368" + }, + { + "X": 51712, + "Y": 10240, + "Z": 59136, + "Room": 80, + "KeyItemsLow": "19368", + "Range": "Medium" + }, + { + "X": 51968, + "Y": 10240, + "Z": 59136, + "Room": 80, + "KeyItemsLow": "19368", + "Range": "Large" + }, + { + "X": 52736, + "Y": 4736, + "Z": 61952, + "Room": 79 + }, + { + "X": 51712, + "Y": 9984, + "Z": 53760, + "Room": 104 + }, + { + "X": 48640, + "Y": 9344, + "Z": 46592, + "Room": 103 + }, + { + "X": 48640, + "Y": 1792, + "Z": 37376, + "Room": 76 + }, + { + "X": 47616, + "Y": 3072, + "Z": 36352, + "Room": 70 + }, + { + "X": 51712, + "Y": 5632, + "Z": 29184, + "Room": 8 + }, + { + "X": 54784, + "Y": 5888, + "Z": 28160, + "Room": 0 + }, + { + "X": 51712, + "Y": 6400, + "Z": 26112, + "Room": 83 + }, + { + "X": 39424, + "Y": 3072, + "Z": 35328, + "Room": 86 + }, + { + "X": 35328, + "Y": 1792, + "Z": 37376, + "Room": 77 + }, + { + "X": 30208, + "Y": 2560, + "Z": 32256, + "Room": 84 + }, + { + "X": 33280, + "Y": 1792, + "Z": 31488, + "Room": 85, + "KeyItemsHigh": "19368" + }, + { + "X": 33280, + "Y": 1792, + "Z": 31232, + "Room": 85, + "KeyItemsHigh": "19368", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": 1792, + "Z": 30976, + "Room": 85, + "KeyItemsHigh": "19368", + "Range": "Medium" + }, + { + "X": 33536, + "Y": 1792, + "Z": 30976, + "Room": 85, + "KeyItemsHigh": "19368", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 33536, + "Y": 1792, + "Z": 31232, + "Room": 85, + "KeyItemsHigh": "19368", + "Range": "Large" + }, + { + "X": 33536, + "Y": 1792, + "Z": 31488, + "Room": 85, + "KeyItemsHigh": "19368", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": 6912, + "Z": 31232, + "Room": 87 + }, + { + "X": 38400, + "Y": 4608, + "Z": 38400, + "Room": 107 + }, + { + "X": 38400, + "Y": 4608, + "Z": 44544, + "Room": 108 + }, + { + "X": 46592, + "Y": 7424, + "Z": 27136, + "Room": 88 + }, + { + "X": 50688, + "Y": 7168, + "Z": 27136, + "Room": 106 + }, + { + "X": 56832, + "Y": 8320, + "Z": 27136, + "Room": 3 + }, + { + "X": 59904, + "Y": 7424, + "Z": 26112, + "Room": 4 + }, + { + "X": 59904, + "Y": 6144, + "Z": 26112, + "Room": 81, + "KeyItemsHigh": "19262,19385", + "Range": "Medium" + }, + { + "X": 60160, + "Y": 6144, + "Z": 26112, + "Room": 81, + "KeyItemsHigh": "19262,19385", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 5888, + "Z": 33280, + "Room": 22 + }, + { + "X": 58880, + "Y": 6016, + "Z": 35328, + "Room": 18 + }, + { + "X": 61952, + "Y": 5632, + "Z": 36352, + "Room": 15 + }, + { + "X": 59904, + "Y": 6912, + "Z": 37376, + "Room": 28 + }, + { + "X": 61952, + "Y": 7168, + "Z": 38400, + "Room": 27 + }, + { + "X": 60928, + "Y": 9600, + "Z": 41472, + "Room": 29 + }, + { + "X": 61952, + "Y": 10752, + "Z": 51712, + "Room": 24 + }, + { + "X": 67072, + "Y": 5888, + "Z": 55808, + "Room": 14 + }, + { + "X": 67072, + "Y": 5504, + "Z": 64000, + "Room": 11 + }, + { + "X": 60928, + "Y": 3584, + "Z": 66048, + "Room": 10 + }, + { + "X": 60928, + "Y": 10752, + "Z": 51712, + "Room": 25 + }, + { + "X": 53760, + "Y": 7936, + "Z": 55808, + "Room": 26 + }, + { + "X": 53760, + "Y": 5888, + "Z": 54784, + "Room": 12 + }, + { + "X": 53760, + "Y": 5888, + "Z": 50688, + "Room": 17 + }, + { + "X": 55808, + "Y": 5504, + "Z": 46592, + "Room": 16 + }, + { + "X": 54784, + "Y": 5504, + "Z": 61952, + "Room": 13 + }, + { + "X": 53760, + "Y": 4608, + "Z": 64000, + "Room": 9 + }, + { + "X": 53760, + "Y": 10112, + "Z": 68096, + "Room": 23 + }, + { + "X": 50688, + "Y": 5888, + "Z": 67072, + "Room": 89 + }, + { + "X": 51712, + "Y": 4736, + "Z": 72192, + "Room": 90 + }, + { + "X": 58880, + "Y": 1792, + "Z": 70144, + "Room": 92 + }, + { + "X": 58880, + "Y": 0, + "Z": 57856, + "Room": 94 + }, + { + "X": 60928, + "Y": -256, + "Z": 49664, + "Room": 56 + }, + { + "X": 60928, + "Y": 1152, + "Z": 66048, + "Room": 53 + }, + { + "X": 62976, + "Y": -4864, + "Z": 71168, + "Room": 72 + }, + { + "X": 59904, + "Y": -9472, + "Z": 76288, + "Room": 91, + "KeyItemsLow": "19385" + }, + { + "X": 59904, + "Y": -9472, + "Z": 76544, + "Room": 91, + "KeyItemsLow": "19385", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -11008, + "Z": 76544, + "Room": 68, + "KeyItemsLow": "19262,19385", + "Range": "Medium" + }, + { + "X": 50688, + "Y": -11008, + "Z": 76288, + "Room": 68, + "KeyItemsLow": "19262,19385", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 43520, + "Y": -10240, + "Z": 77312, + "Room": 111 + }, + { + "X": 39424, + "Y": -10240, + "Z": 77312, + "Room": 66 + }, + { + "X": 35328, + "Y": -10240, + "Z": 77312, + "Room": 63 + }, + { + "X": 36352, + "Y": -10240, + "Z": 68096, + "Room": 115 + }, + { + "X": 40448, + "Y": -10240, + "Z": 68096, + "Room": 114 + }, + { + "X": 49664, + "Y": -9216, + "Z": 60928, + "Room": 52 + }, + { + "X": 38400, + "Y": -10240, + "Z": 57856, + "Room": 51 + }, + { + "X": 29184, + "Y": -7424, + "Z": 56832, + "Room": 48 + }, + { + "X": 41472, + "Y": -6656, + "Z": 59904, + "Room": 47 + }, + { + "X": 39424, + "Y": -5120, + "Z": 56832, + "Room": 59 + }, + { + "X": 36352, + "Y": -5120, + "Z": 57856, + "Room": 93 + }, + { + "X": 39424, + "Y": -6656, + "Z": 50688, + "Room": 64 + }, + { + "X": 40448, + "Y": -6656, + "Z": 50688, + "Room": 55 + }, + { + "X": 48384, + "Y": -4352, + "Z": 55808, + "Room": 45, + "KeyItemsLow": "19262" + }, + { + "X": 48640, + "Y": -4352, + "Z": 55808, + "Room": 45, + "KeyItemsLow": "19262", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -4352, + "Z": 49664, + "Room": 41 + }, + { + "X": 33280, + "Y": -4352, + "Z": 52736, + "Room": 46 + }, + { + "X": 32256, + "Y": -4352, + "Z": 49664, + "Room": 43 + }, + { + "X": 35328, + "Y": -4096, + "Z": 41472, + "Room": 42 + }, + { + "X": 28160, + "Y": -4096, + "Z": 38400, + "Room": 82 + }, + { + "X": 33280, + "Y": -3584, + "Z": 33280, + "Room": 31 + }, + { + "X": 40448, + "Y": -2304, + "Z": 30208, + "Room": 33 + }, + { + "X": 40448, + "Y": -2048, + "Z": 27136, + "Room": 34 + }, + { + "X": 39424, + "Y": -2048, + "Z": 27136, + "Room": 32 + }, + { + "X": 33280, + "Y": -1024, + "Z": 27136, + "Room": 60 + }, + { + "X": 28160, + "Y": -256, + "Z": 27136, + "Room": 95 + }, + { + "X": 26112, + "Y": -2816, + "Z": 36352, + "Room": 98 + }, + { + "X": 25088, + "Y": -5376, + "Z": 46592, + "Room": 99 + }, + { + "X": 24064, + "Y": -9344, + "Z": 54784, + "Room": 97 + }, + { + "X": 24064, + "Y": -11520, + "Z": 62976, + "Room": 96 + }, + { + "X": 36352, + "Y": -12544, + "Z": 60928, + "Room": 62 + }, + { + "X": 42496, + "Y": -12544, + "Z": 60928, + "Room": 58 + }, + { + "X": 43520, + "Y": -10752, + "Z": 71168, + "Room": 65 + }, + { + "X": 38400, + "Y": -10240, + "Z": 71168, + "Room": 109 + }, + { + "X": 42496, + "Y": -10240, + "Z": 65024, + "Room": 110 + }, + { + "X": 39424, + "Y": -10240, + "Z": 66304, + "Room": 67, + "KeyItemsHigh": "19262" + }, + { + "X": 39424, + "Y": -10240, + "Z": 66048, + "Room": 67, + "KeyItemsHigh": "19262", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": -10240, + "Z": 65792, + "Room": 67, + "KeyItemsHigh": "19262", + "Range": "Medium" + }, + { + "X": 39168, + "Y": -10240, + "Z": 65792, + "Room": 67, + "KeyItemsHigh": "19262", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 39168, + "Y": -10240, + "Z": 66048, + "Room": 67, + "KeyItemsHigh": "19262", + "Range": "Large" + }, + { + "X": 39168, + "Y": -10240, + "Z": 66304, + "Room": 67, + "KeyItemsHigh": "19262", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 36352, + "Y": -10240, + "Z": 79360, + "Room": 113 + }, + { + "X": 40448, + "Y": -11264, + "Z": 79360, + "Room": 112 + }, + { + "X": 35328, + "Y": -14336, + "Z": 79360, + "Room": 61 + }, + { + "X": 44544, + "Y": -14336, + "Z": 79360, + "Room": 57 + }, + { + "X": 43520, + "Y": -14336, + "Z": 80384, + "Room": 100 + }, + { + "X": 38400, + "Y": -14976, + "Z": 81408, + "Room": 101 + }, + { + "X": 38400, + "Y": -18432, + "Z": 76288, + "Room": 102 + }, + { + "X": 34048, + "Y": 1536, + "Z": 16896, + "Room": 105, + "KeyItemsHigh": "19385,19400", + "KeyItemsLow": "19400" + }, + { + "X": 34304, + "Y": 1536, + "Z": 16896, + "Room": 105, + "KeyItemsHigh": "19385,19400", + "KeyItemsLow": "19400", + "RequiresReturnPath": true + }, + { + "X": 34560, + "Y": 1536, + "Z": 16896, + "Room": 105, + "KeyItemsHigh": "19400,19385", + "KeyItemsLow": "19400", + "Range": "Medium" + }, + { + "X": 34560, + "Y": 1536, + "Z": 16640, + "Room": 105, + "KeyItemsHigh": "19400,19385", + "KeyItemsLow": "19400", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": 1536, + "Z": 16640, + "Room": 105, + "KeyItemsHigh": "19400,19385", + "KeyItemsLow": "19400", + "Range": "Large" + }, + { + "X": 34048, + "Y": 1536, + "Z": 16640, + "Room": 105, + "KeyItemsHigh": "19400,19385", + "KeyItemsLow": "19400", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "SKIDOO.TR2": [ + { + "X": 95744, + "Y": -256, + "Z": 17920, + "Room": 76, + "KeyItemsLow": "20379,20348", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 95744, + "Y": -256, + "Z": 11776, + "Room": 77 + }, + { + "X": 90624, + "Y": -1792, + "Z": 10752, + "Room": 78 + }, + { + "X": 82432, + "Y": 1536, + "Z": 10752, + "Room": 79 + }, + { + "X": 81408, + "Y": 1536, + "Z": 7680, + "Room": 80 + }, + { + "X": 77312, + "Y": 0, + "Z": 10752, + "Room": 78 + }, + { + "X": 72192, + "Y": -3456, + "Z": 10752, + "Room": 81 + }, + { + "X": 72192, + "Y": -2048, + "Z": 19968, + "Room": 83, + "KeyItemsLow": "20379,20348", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 70144, + "Y": 9984, + "Z": 20992, + "Room": 69 + }, + { + "X": 72192, + "Y": -1536, + "Z": 23040, + "Room": 17 + }, + { + "X": 71168, + "Y": -1024, + "Z": 27136, + "Room": 10 + }, + { + "X": 70144, + "Y": 2816, + "Z": 29184, + "Room": 0, + "KeyItemsLow": "20379,20348", + "Range": "Medium" + }, + { + "X": 70144, + "Y": 2874, + "Z": 29425, + "Room": 0, + "KeyItemsLow": "20379,20348", + "Range": "Large" + }, + { + "X": 72192, + "Y": 5248, + "Z": 29184, + "Room": 1 + }, + { + "X": 72192, + "Y": 5248, + "Z": 28160, + "Room": 19 + }, + { + "X": 75264, + "Y": 8704, + "Z": 26112, + "Room": 84 + }, + { + "X": 79360, + "Y": 6656, + "Z": 29184, + "Room": 20 + }, + { + "X": 82432, + "Y": 4096, + "Z": 33280, + "Room": 24 + }, + { + "X": 80384, + "Y": 2176, + "Z": 35328, + "Room": 18 + }, + { + "X": 82432, + "Y": 256, + "Z": 34304, + "Room": 149, + "RoomType": "ReturnPath" + }, + { + "X": 80384, + "Y": 256, + "Z": 23040, + "Room": 150, + "RoomType": "ReturnPath" + }, + { + "X": 75264, + "Y": -6400, + "Z": 22016, + "Room": 151, + "RoomType": "ReturnPath" + }, + { + "X": 75264, + "Y": -6400, + "Z": 19968, + "Room": 152, + "RoomType": "ReturnPath" + }, + { + "X": 79360, + "Y": 3840, + "Z": 36352, + "Room": 34 + }, + { + "X": 73216, + "Y": 6656, + "Z": 39424, + "Room": 36 + }, + { + "X": 70144, + "Y": 7296, + "Z": 39424, + "Room": 39 + }, + { + "X": 66048, + "Y": 7552, + "Z": 39424, + "Room": 38 + }, + { + "X": 61952, + "Y": 6528, + "Z": 39424, + "Room": 35 + }, + { + "X": 59904, + "Y": 6272, + "Z": 37376, + "Room": 37 + }, + { + "X": 59904, + "Y": 6144, + "Z": 34304, + "Room": 28 + }, + { + "X": 60928, + "Y": 10624, + "Z": 32256, + "Room": 29 + }, + { + "X": 64000, + "Y": 11648, + "Z": 31232, + "Room": 13 + }, + { + "X": 79360, + "Y": 10496, + "Z": 31232, + "Room": 21 + }, + { + "X": 76288, + "Y": -256, + "Z": 35328, + "Room": 4 + }, + { + "X": 69120, + "Y": 256, + "Z": 36352, + "Room": 12, + "KeyItemsLow": "20348,20379" + }, + { + "X": 69120, + "Y": 256, + "Z": 36608, + "Room": 12, + "KeyItemsLow": "20348,20379", + "RequiresReturnPath": true + }, + { + "X": 78336, + "Y": 0, + "Z": 38400, + "Room": 11 + }, + { + "X": 79360, + "Y": 1152, + "Z": 43520, + "Room": 26 + }, + { + "X": 78336, + "Y": 0, + "Z": 46592, + "Room": 3 + }, + { + "X": 75264, + "Y": 1024, + "Z": 43520, + "Room": 15 + }, + { + "X": 73216, + "Y": -640, + "Z": 44544, + "Room": 7 + }, + { + "X": 70144, + "Y": -1536, + "Z": 46592, + "Room": 6 + }, + { + "X": 68096, + "Y": 256, + "Z": 45568, + "Room": 16 + }, + { + "X": 68096, + "Y": -128, + "Z": 46592, + "Room": 5 + }, + { + "X": 70144, + "Y": 1024, + "Z": 42496, + "Room": 130 + }, + { + "X": 62976, + "Y": -1536, + "Z": 45568, + "Room": 33, + "Validated": false + }, + { + "X": 81408, + "Y": -4736, + "Z": 30208, + "Room": 23, + "Validated": false + }, + { + "X": 81408, + "Y": -4352, + "Z": 28160, + "Room": 25, + "Validated": false + }, + { + "X": 62976, + "Y": 1536, + "Z": 43520, + "Room": 40 + }, + { + "X": 44544, + "Y": 1536, + "Z": 44544, + "Room": 51 + }, + { + "X": 40448, + "Y": 1408, + "Z": 50688, + "Room": 53 + }, + { + "X": 41472, + "Y": 2688, + "Z": 61952, + "Room": 54 + }, + { + "X": 51712, + "Y": 0, + "Z": 62976, + "Room": 136 + }, + { + "X": 55808, + "Y": 128, + "Z": 59904, + "Room": 62 + }, + { + "X": 57856, + "Y": -384, + "Z": 51712, + "Room": 46 + }, + { + "X": 61952, + "Y": 128, + "Z": 54784, + "Room": 137 + }, + { + "X": 64000, + "Y": 1792, + "Z": 61952, + "Room": 138 + }, + { + "X": 61952, + "Y": -1152, + "Z": 55808, + "Room": 137 + }, + { + "X": 70144, + "Y": -2048, + "Z": 60928, + "Room": 49 + }, + { + "X": 72192, + "Y": -2048, + "Z": 60928, + "Room": 48 + }, + { + "X": 72192, + "Y": -2048, + "Z": 56832, + "Room": 47 + }, + { + "X": 84480, + "Y": 4608, + "Z": 55808, + "Room": 50, + "Validated": false + }, + { + "X": 88576, + "Y": -2048, + "Z": 55808, + "Room": 55 + }, + { + "X": 89600, + "Y": -1024, + "Z": 72192, + "Room": 41 + }, + { + "X": 89600, + "Y": 5888, + "Z": 75264, + "Room": 42, + "Validated": false + }, + { + "X": 88576, + "Y": 5120, + "Z": 80384, + "Room": 43, + "Validated": false + }, + { + "X": 89600, + "Y": 5120, + "Z": 82432, + "Room": 44, + "Validated": false + }, + { + "X": 92672, + "Y": -2560, + "Z": 92672, + "Room": 52 + }, + { + "X": 95744, + "Y": -5504, + "Z": 93696, + "Room": 86 + }, + { + "X": 86528, + "Y": -2304, + "Z": 90624, + "Room": 56 + }, + { + "X": 83456, + "Y": -2048, + "Z": 95744, + "Room": 57 + }, + { + "X": 65024, + "Y": 128, + "Z": 95744, + "Room": 58 + }, + { + "X": 59904, + "Y": 8192, + "Z": 93696, + "Room": 60, + "Validated": false + }, + { + "X": 45568, + "Y": -896, + "Z": 95744, + "Room": 66 + }, + { + "X": 38400, + "Y": -1536, + "Z": 93696, + "Room": 65 + }, + { + "X": 32256, + "Y": -768, + "Z": 92672, + "Room": 14 + }, + { + "X": 30208, + "Y": -1024, + "Z": 87552, + "Room": 116, + "Validated": false + }, + { + "X": 13824, + "Y": -640, + "Z": 91648, + "Room": 71 + }, + { + "X": 8704, + "Y": -768, + "Z": 91648, + "Room": 72 + }, + { + "X": 9728, + "Y": -512, + "Z": 78336, + "Room": 74 + }, + { + "X": 15872, + "Y": -1280, + "Z": 78336, + "Room": 73 + }, + { + "X": 17920, + "Y": -1536, + "Z": 82432, + "Room": 133 + }, + { + "X": 16896, + "Y": -1664, + "Z": 83456, + "Room": 134 + }, + { + "X": 10752, + "Y": -1920, + "Z": 85504, + "Room": 135 + }, + { + "X": 6656, + "Y": 5888, + "Z": 86528, + "Room": 75 + }, + { + "X": 4608, + "Y": 2816, + "Z": 87552, + "Room": 87 + }, + { + "X": 1536, + "Y": 4864, + "Z": 89600, + "Room": 90 + }, + { + "X": 1536, + "Y": 4864, + "Z": 92672, + "Room": 88 + }, + { + "X": 4608, + "Y": 4864, + "Z": 93696, + "Room": 91 + }, + { + "X": 8704, + "Y": 4096, + "Z": 91648, + "Room": 93 + }, + { + "X": 10752, + "Y": 3328, + "Z": 91648, + "Room": 94 + }, + { + "X": 12800, + "Y": 1792, + "Z": 89600, + "Room": 92 + }, + { + "X": 16896, + "Y": 4224, + "Z": 89600, + "Room": 61 + }, + { + "X": 16896, + "Y": 4224, + "Z": 90624, + "Room": 132 + }, + { + "X": 29184, + "Y": 7936, + "Z": 95744, + "Room": 148 + }, + { + "X": 17920, + "Y": 0, + "Z": 66048, + "Room": 63 + }, + { + "X": 23040, + "Y": -2048, + "Z": 65280, + "Room": 64, + "KeyItemsHigh": "20379", + "Validated": false + }, + { + "X": 23296, + "Y": -2048, + "Z": 65280, + "Room": 64, + "KeyItemsHigh": "20379", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 23296, + "Y": -2048, + "Z": 65024, + "Room": 64, + "KeyItemsHigh": "20379", + "Range": "Medium", + "Validated": false + }, + { + "X": 23040, + "Y": -2048, + "Z": 65024, + "Room": 64, + "KeyItemsHigh": "20379", + "Range": "Medium", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 23296, + "Y": -2048, + "Z": 64768, + "Room": 64, + "KeyItemsHigh": "20379", + "Range": "Large", + "Validated": false + }, + { + "X": 23040, + "Y": -2048, + "Z": 64768, + "Room": 64, + "KeyItemsHigh": "20379", + "Range": "Large", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 9728, + "Y": -2048, + "Z": 64000, + "Room": 67, + "Validated": false + }, + { + "X": 8704, + "Y": -2048, + "Z": 49664, + "Room": 68, + "Validated": false + }, + { + "X": 18944, + "Y": 6144, + "Z": 46592, + "Room": 89, + "Validated": false + }, + { + "X": 15872, + "Y": 1024, + "Z": 57856, + "Room": 70 + }, + { + "X": 71936, + "Y": 1024, + "Z": 44544, + "Room": 131, + "KeyItemsHigh": "20348" + }, + { + "X": 72192, + "Y": 1024, + "Z": 44544, + "Room": 131, + "KeyItemsHigh": "20348", + "RequiresReturnPath": true + }, + { + "X": 72448, + "Y": 1024, + "Z": 44544, + "Room": 131, + "KeyItemsHigh": "20348", + "Range": "Medium" + }, + { + "X": 71936, + "Y": 1024, + "Z": 44800, + "Room": 131, + "KeyItemsHigh": "20348", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 72192, + "Y": 1024, + "Z": 44800, + "Room": 131, + "KeyItemsHigh": "20348", + "Range": "Large" + }, + { + "X": 72448, + "Y": 1024, + "Z": 44800, + "Room": 131, + "KeyItemsHigh": "20348", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 82432, + "Y": 1280, + "Z": 43520, + "Room": 95 + }, + { + "X": 89600, + "Y": 1408, + "Z": 43520, + "Room": 98 + }, + { + "X": 92672, + "Y": 2816, + "Z": 34304, + "Room": 99 + }, + { + "X": 86528, + "Y": 2560, + "Z": 20992, + "Room": 100 + }, + { + "X": 79360, + "Y": 10496, + "Z": 18944, + "Room": 101 + }, + { + "X": 76288, + "Y": 10496, + "Z": 19968, + "Room": 144 + }, + { + "X": 74240, + "Y": 2560, + "Z": 19968, + "Room": 102 + }, + { + "X": 55808, + "Y": -2560, + "Z": 18944, + "Room": 103 + }, + { + "X": 50688, + "Y": -2816, + "Z": 3584, + "Room": 108 + }, + { + "X": 37376, + "Y": -2816, + "Z": 2560, + "Room": 107, + "Validated": false + }, + { + "X": 31232, + "Y": -4736, + "Z": 6656, + "Room": 120, + "Validated": false + }, + { + "X": 33280, + "Y": -4608, + "Z": 13824, + "Room": 105, + "Validated": false + }, + { + "X": 37376, + "Y": 1024, + "Z": 8704, + "Room": 104 + }, + { + "X": 36352, + "Y": -1280, + "Z": 23040, + "Room": 109 + }, + { + "X": 29184, + "Y": 2944, + "Z": 11776, + "Room": 114 + }, + { + "X": 27136, + "Y": 1920, + "Z": 7680, + "Room": 106 + }, + { + "X": 28160, + "Y": 2688, + "Z": 16896, + "Room": 115 + }, + { + "X": 26112, + "Y": 3072, + "Z": 12800, + "Room": 112 + }, + { + "X": 16896, + "Y": 1920, + "Z": 22016, + "Room": 121 + }, + { + "X": 14848, + "Y": 2560, + "Z": 22016, + "Room": 125 + }, + { + "X": 24064, + "Y": 8576, + "Z": 23040, + "Room": 123 + }, + { + "X": 15872, + "Y": 8192, + "Z": 25088, + "Room": 126 + }, + { + "X": 26112, + "Y": 8960, + "Z": 26112, + "Room": 127 + }, + { + "X": 22016, + "Y": 14080, + "Z": 26112, + "Room": 128 + }, + { + "X": 22016, + "Y": 18432, + "Z": 29184, + "Room": 129 + }, + { + "X": 15872, + "Y": 13952, + "Z": 32256, + "Room": 124 + }, + { + "X": 11776, + "Y": 15616, + "Z": 32256, + "Room": 146 + } + ], + "MONASTRY.TR2": [ + { + "X": 97792, + "Y": 1024, + "Z": 17920, + "Room": 81 + }, + { + "X": 97792, + "Y": 3328, + "Z": 16640, + "Room": 128, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338", + "Range": "Medium" + }, + { + "X": 97536, + "Y": 3328, + "Z": 16640, + "Room": 128, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 97536, + "Y": 3328, + "Z": 16896, + "Room": 128, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338,21464,21501,21328,21225,21273", + "Range": "Large" + }, + { + "X": 97536, + "Y": 3328, + "Z": 17152, + "Room": 128, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338,21464,21501,21328,21225,21273", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 93696, + "Y": 4096, + "Z": 17920, + "Room": 24 + }, + { + "X": 92672, + "Y": 5120, + "Z": 24064, + "Room": 26 + }, + { + "X": 82432, + "Y": 4096, + "Z": 25088, + "Room": 92 + }, + { + "X": 83456, + "Y": 4096, + "Z": 23040, + "Room": 25 + }, + { + "X": 85504, + "Y": 4992, + "Z": 10752, + "Room": 27 + }, + { + "X": 81408, + "Y": -256, + "Z": 10752, + "Room": 16 + }, + { + "X": 91648, + "Y": 0, + "Z": 22016, + "Room": 28 + }, + { + "X": 90624, + "Y": -512, + "Z": 23040, + "Room": 23 + }, + { + "X": 81408, + "Y": 0, + "Z": 16896, + "Room": 15, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338,21225" + }, + { + "X": 81408, + "Y": 0, + "Z": 16640, + "Room": 15, + "KeyItemsLow": "21306,21330,21415,21431,21485,21332,21338,21225", + "RequiresReturnPath": true + }, + { + "X": 81152, + "Y": 0, + "Z": 16640, + "Room": 15, + "KeyItemsLow": "21464", + "Range": "Medium" + }, + { + "X": 81152, + "Y": 0, + "Z": 16896, + "Room": 15, + "KeyItemsLow": "21464", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 75264, + "Y": 0, + "Z": 18944, + "Room": 9 + }, + { + "X": 76288, + "Y": 0, + "Z": 28160, + "Room": 10 + }, + { + "X": 83456, + "Y": -256, + "Z": 30208, + "Room": 17 + }, + { + "X": 72192, + "Y": 0, + "Z": 24064, + "Room": 47 + }, + { + "X": 71168, + "Y": 0, + "Z": 26112, + "Room": 59 + }, + { + "X": 71168, + "Y": 0, + "Z": 28160, + "Room": 12 + }, + { + "X": 72192, + "Y": 0, + "Z": 22016, + "Room": 7 + }, + { + "X": 72192, + "Y": 0, + "Z": 20992, + "Room": 8, + "KeyItemsLow": "21464" + }, + { + "X": 72192, + "Y": 0, + "Z": 20736, + "Room": 8, + "KeyItemsLow": "21464", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": 0, + "Z": 18944, + "Room": 20 + }, + { + "X": 65024, + "Y": 0, + "Z": 18944, + "Room": 93 + }, + { + "X": 64000, + "Y": -5632, + "Z": 18944, + "Room": 107, + "KeyItemsHigh": "21225" + }, + { + "X": 64000, + "Y": -5632, + "Z": 19200, + "Room": 107, + "KeyItemsHigh": "21225", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": -4608, + "Z": 34304, + "Room": 32 + }, + { + "X": 49664, + "Y": -4736, + "Z": 34304, + "Room": 49 + }, + { + "X": 39424, + "Y": -5120, + "Z": 34304, + "Room": 50 + }, + { + "X": 38400, + "Y": -6912, + "Z": 30208, + "Room": 116 + }, + { + "X": 28416, + "Y": -6912, + "Z": 24064, + "Room": 115, + "KeyItemsHigh": "21464" + }, + { + "X": 28160, + "Y": -6912, + "Z": 24064, + "Room": 115, + "KeyItemsHigh": "21464", + "RequiresReturnPath": true + }, + { + "X": 24064, + "Y": -8192, + "Z": 24064, + "Room": 78 + }, + { + "X": 23040, + "Y": 4352, + "Z": 24064, + "Room": 122 + }, + { + "X": 23040, + "Y": 3584, + "Z": 38400, + "Room": 124 + }, + { + "X": 24064, + "Y": 3584, + "Z": 47616, + "Room": 129 + }, + { + "X": 26112, + "Y": 3584, + "Z": 45568, + "Room": 130 + }, + { + "X": 25088, + "Y": 0, + "Z": 41472, + "Room": 53 + }, + { + "X": 29184, + "Y": 0, + "Z": 34304, + "Room": 54 + }, + { + "X": 35328, + "Y": 0, + "Z": 37376, + "Room": 132 + }, + { + "X": 36352, + "Y": -4608, + "Z": 37632, + "Room": 52, + "KeyItemsLow": "21464" + }, + { + "X": 36608, + "Y": -4608, + "Z": 37632, + "Room": 52, + "KeyItemsLow": "21464", + "RequiresReturnPath": true + }, + { + "X": 67072, + "Y": 0, + "Z": 24320, + "Room": 46, + "KeyItemsHigh": "21464" + }, + { + "X": 67072, + "Y": 0, + "Z": 24064, + "Room": 46, + "KeyItemsHigh": "21464", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": 0, + "Z": 24320, + "Room": 104, + "KeyItemsLow": "21328,21273" + }, + { + "X": 62976, + "Y": 0, + "Z": 24064, + "Room": 104, + "KeyItemsLow": "21328,21273", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": 0, + "Z": 23808, + "Room": 104, + "KeyItemsHigh": "21464", + "KeyItemsLow": "21328,21501,21225,21273", + "Range": "Medium" + }, + { + "X": 62720, + "Y": 0, + "Z": 23808, + "Room": 104, + "KeyItemsHigh": "21464", + "KeyItemsLow": "21328,21501,21225,21273", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62720, + "Y": 0, + "Z": 24064, + "Room": 104, + "KeyItemsHigh": "21464", + "Range": "Large" + }, + { + "X": 62720, + "Y": 0, + "Z": 24320, + "Room": 104, + "KeyItemsHigh": "21464", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 0, + "Z": 36352, + "Room": 30 + }, + { + "X": 60928, + "Y": 0, + "Z": 38400, + "Room": 65 + }, + { + "X": 66048, + "Y": 0, + "Z": 44544, + "Room": 67 + }, + { + "X": 64000, + "Y": 0, + "Z": 46592, + "Room": 66 + }, + { + "X": 65024, + "Y": 0, + "Z": 54784, + "Room": 69 + }, + { + "X": 59904, + "Y": 0, + "Z": 14848, + "Room": 4 + }, + { + "X": 51712, + "Y": 256, + "Z": 29184, + "Room": 99 + }, + { + "X": 46592, + "Y": -2560, + "Z": 24064, + "Room": 100 + }, + { + "X": 46592, + "Y": 2048, + "Z": 30208, + "Room": 155 + }, + { + "X": 48640, + "Y": 0, + "Z": 36352, + "Room": 18, + "KeyItemsHigh": "21328,21273" + }, + { + "X": 48896, + "Y": 0, + "Z": 36352, + "Room": 18, + "KeyItemsHigh": "21328,21273", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": 0, + "Z": 38400, + "Room": 61 + }, + { + "X": 52736, + "Y": 0, + "Z": 44544, + "Room": 60 + }, + { + "X": 52736, + "Y": 0, + "Z": 50688, + "Room": 31 + }, + { + "X": 52736, + "Y": 3840, + "Z": 52736, + "Room": 83 + }, + { + "X": 52736, + "Y": 0, + "Z": 55808, + "Room": 75 + }, + { + "X": 57856, + "Y": -256, + "Z": 56832, + "Room": 89 + }, + { + "X": 57856, + "Y": 1536, + "Z": 66048, + "Room": 137 + }, + { + "X": 65024, + "Y": -1792, + "Z": 69120, + "Room": 139 + }, + { + "X": 66048, + "Y": -4864, + "Z": 70144, + "Room": 140 + }, + { + "X": 65024, + "Y": -7936, + "Z": 69120, + "Room": 141 + }, + { + "X": 66048, + "Y": -11008, + "Z": 69120, + "Room": 142 + }, + { + "X": 64000, + "Y": 1792, + "Z": 62976, + "Room": 143 + }, + { + "X": 64000, + "Y": 2560, + "Z": 52736, + "Room": 144 + }, + { + "X": 55808, + "Y": 0, + "Z": 53760, + "Room": 71 + }, + { + "X": 48640, + "Y": 0, + "Z": 42496, + "Room": 37, + "KeyItemsLow": "21501" + }, + { + "X": 48640, + "Y": 0, + "Z": 42752, + "Room": 37, + "KeyItemsLow": "21501", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": 0, + "Z": 50688, + "Room": 135 + }, + { + "X": 45568, + "Y": 0, + "Z": 52736, + "Room": 38 + }, + { + "X": 40448, + "Y": 0, + "Z": 52736, + "Room": 39 + }, + { + "X": 37376, + "Y": 1024, + "Z": 52736, + "Room": 133 + }, + { + "X": 34304, + "Y": 0, + "Z": 49664, + "Room": 160 + }, + { + "X": 32256, + "Y": 1024, + "Z": 52736, + "Room": 134 + }, + { + "X": 29184, + "Y": 0, + "Z": 49664, + "Room": 159 + }, + { + "X": 28160, + "Y": 0, + "Z": 52736, + "Room": 153 + }, + { + "X": 26112, + "Y": -128, + "Z": 48640, + "Room": 42 + }, + { + "X": 27136, + "Y": -640, + "Z": 46592, + "Room": 161 + }, + { + "X": 36352, + "Y": 3072, + "Z": 46592, + "Room": 56 + }, + { + "X": 38400, + "Y": -256, + "Z": 47616, + "Room": 149 + }, + { + "X": 44544, + "Y": 0, + "Z": 48640, + "Room": 22 + }, + { + "X": 79360, + "Y": 0, + "Z": 33536, + "Room": 14, + "KeyItemsHigh": "21501" + }, + { + "X": 79360, + "Y": 0, + "Z": 33280, + "Room": 14, + "KeyItemsHigh": "21501", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": 0, + "Z": 33024, + "Room": 14, + "KeyItemsHigh": "21225,21328,21501", + "Range": "Medium" + }, + { + "X": 79104, + "Y": 0, + "Z": 33024, + "Room": 14, + "KeyItemsHigh": "21225,21328,21501", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 79104, + "Y": 0, + "Z": 33280, + "Room": 14, + "KeyItemsHigh": "21225,21328,21501", + "Range": "Large" + }, + { + "X": 79104, + "Y": 0, + "Z": 33536, + "Room": 14, + "KeyItemsHigh": "21225,21328,21501", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": 1280, + "Z": 15872, + "Room": 2 + }, + { + "X": 54784, + "Y": 0, + "Z": 9728, + "Room": 86 + }, + { + "X": 52736, + "Y": 0, + "Z": 8704, + "Room": 94 + }, + { + "X": 46592, + "Y": -384, + "Z": 11776, + "Room": 96 + }, + { + "X": 34304, + "Y": -3584, + "Z": 11776, + "Room": 110 + }, + { + "X": 27136, + "Y": -3584, + "Z": 14848, + "Room": 87 + }, + { + "X": 27136, + "Y": -512, + "Z": 22016, + "Room": 82 + }, + { + "X": 19968, + "Y": -4864, + "Z": 22016, + "Room": 112 + }, + { + "X": 19968, + "Y": -8704, + "Z": 22016, + "Room": 98 + }, + { + "X": 20992, + "Y": -8064, + "Z": 22016, + "Room": 97 + }, + { + "X": 23040, + "Y": -7936, + "Z": 12800, + "Room": 111 + }, + { + "X": 23040, + "Y": -7552, + "Z": 9728, + "Room": 40 + }, + { + "X": 22513, + "Y": 709, + "Z": 8367, + "Room": 113, + "Validated": false + }, + { + "X": 23040, + "Y": -7936, + "Z": 4608, + "Room": 114 + }, + { + "X": 14848, + "Y": -10112, + "Z": 3584, + "Room": 146 + }, + { + "X": 14848, + "Y": -11136, + "Z": 8704, + "Room": 148 + }, + { + "X": 14848, + "Y": -12800, + "Z": 10752, + "Room": 145 + }, + { + "X": 8704, + "Y": -9984, + "Z": 11776, + "Room": 147 + }, + { + "X": 59904, + "Y": 0, + "Z": 8704, + "Room": 5 + }, + { + "X": 59904, + "Y": -4608, + "Z": 9728, + "Room": 84, + "Validated": false + }, + { + "X": 59904, + "Y": 0, + "Z": 11776, + "Room": 72 + }, + { + "X": 69120, + "Y": -512, + "Z": 34304, + "Room": 88 + }, + { + "X": 69120, + "Y": -3072, + "Z": 44544, + "Room": 91 + }, + { + "X": 73216, + "Y": -3072, + "Z": 44544, + "Room": 63 + }, + { + "X": 72192, + "Y": -5376, + "Z": 42496, + "Room": 64, + "Validated": false + }, + { + "X": 73216, + "Y": -5376, + "Z": 42496, + "Room": 21, + "Validated": false + }, + { + "X": 72192, + "Y": -5760, + "Z": 49664, + "Room": 77, + "Validated": false + }, + { + "X": 71168, + "Y": -3072, + "Z": 47616, + "Room": 41 + }, + { + "X": 70144, + "Y": -2816, + "Z": 59904, + "Room": 62 + }, + { + "X": 65024, + "Y": -4608, + "Z": 62976, + "Room": 76 + }, + { + "X": 64000, + "Y": -4608, + "Z": 64000, + "Room": 138 + }, + { + "X": 66048, + "Y": 0, + "Z": 57856, + "Room": 70 + }, + { + "X": 71168, + "Y": -3328, + "Z": 60928, + "Room": 85 + }, + { + "X": 75264, + "Y": -4608, + "Z": 62720, + "Room": 55, + "KeyItemsHigh": "21338,21332" + }, + { + "X": 75264, + "Y": -4608, + "Z": 62976, + "Room": 55, + "KeyItemsHigh": "21338,21332", + "RequiresReturnPath": true + }, + { + "X": 75264, + "Y": -4608, + "Z": 63232, + "Room": 55, + "KeyItemsHigh": "21338,21332", + "Range": "Medium" + }, + { + "X": 75008, + "Y": -4608, + "Z": 63232, + "Room": 55, + "KeyItemsHigh": "21338,21332", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 75008, + "Y": -4608, + "Z": 62976, + "Room": 55, + "KeyItemsHigh": "21338,21332", + "Range": "Large" + }, + { + "X": 75008, + "Y": -4608, + "Z": 62720, + "Room": 55, + "KeyItemsHigh": "21338,21332", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 54016, + "Y": 0, + "Z": 34304, + "Room": 3, + "KeyItemsLow": "21338,21332" + }, + { + "X": 53760, + "Y": 0, + "Z": 34304, + "Room": 3, + "KeyItemsLow": "21338,21332", + "RequiresReturnPath": true + }, + { + "X": 53504, + "Y": 0, + "Z": 34304, + "Room": 3, + "KeyItemsLow": "21338,21332", + "Range": "Medium" + }, + { + "X": 53504, + "Y": 0, + "Z": 34560, + "Room": 3, + "KeyItemsLow": "21338,21332", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 53760, + "Y": 0, + "Z": 34560, + "Room": 3, + "KeyItemsLow": "21338,21332", + "Range": "Large" + }, + { + "X": 54016, + "Y": 0, + "Z": 34560, + "Room": 3, + "KeyItemsLow": "21338,21332", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": -4352, + "Z": 35328, + "Room": 109 + }, + { + "X": 47616, + "Y": -4352, + "Z": 34304, + "Room": 0 + }, + { + "X": 47616, + "Y": -4608, + "Z": 28160, + "Room": 101 + }, + { + "X": 46592, + "Y": -5760, + "Z": 28160, + "Room": 102 + }, + { + "X": 46592, + "Y": -6912, + "Z": 24064, + "Room": 103 + }, + { + "X": 46592, + "Y": -7424, + "Z": 16896, + "Room": 157 + }, + { + "X": 48640, + "Y": 2048, + "Z": 24064, + "Room": 155 + }, + { + "X": 48640, + "Y": 4352, + "Z": 23296, + "Room": 156, + "KeyItemsHigh": "21338,21332" + }, + { + "X": 48640, + "Y": 4352, + "Z": 23040, + "Room": 156, + "KeyItemsHigh": "21338,21332", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": 4352, + "Z": 22784, + "Room": 156, + "KeyItemsHigh": "21338,21332", + "Range": "Medium" + }, + { + "X": 48384, + "Y": 4352, + "Z": 22784, + "Room": 156, + "KeyItemsHigh": "21338,21332", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48384, + "Y": 4352, + "Z": 23040, + "Room": 156, + "KeyItemsHigh": "21338,21332", + "Range": "Large" + }, + { + "X": 48384, + "Y": 4352, + "Z": 23296, + "Room": 156, + "KeyItemsHigh": "21338,21332", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 4352, + "Z": 24064, + "Room": 152 + }, + { + "X": 44544, + "Y": -256, + "Z": 34304, + "Room": 57 + }, + { + "X": 38400, + "Y": -896, + "Z": 34304, + "Room": 150 + }, + { + "X": 38400, + "Y": 2048, + "Z": 48640, + "Room": 151 + }, + { + "X": 44544, + "Y": 1024, + "Z": 20224, + "Room": 73, + "KeyItemsLow": "21273" + }, + { + "X": 44544, + "Y": 1024, + "Z": 19968, + "Room": 73, + "KeyItemsLow": "21273", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 1024, + "Z": 19712, + "Room": 73, + "Range": "Medium" + }, + { + "X": 44288, + "Y": 1024, + "Z": 19712, + "Room": 73, + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": 768, + "Z": 19968, + "Room": 1 + }, + { + "X": 35328, + "Y": 768, + "Z": 20224, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485" + }, + { + "X": 35328, + "Y": 768, + "Z": 19968, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": 768, + "Z": 19712, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485", + "Range": "Medium" + }, + { + "X": 35072, + "Y": 768, + "Z": 19712, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 35072, + "Y": 768, + "Z": 19968, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485", + "Range": "Large" + }, + { + "X": 35072, + "Y": 768, + "Z": 20224, + "Room": 43, + "KeyItemsHigh": "21306,21330,21415,21431,21485", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 768, + "Z": 22272, + "Room": 44, + "KeyItemsHigh": "21273" + }, + { + "X": 28160, + "Y": 768, + "Z": 22016, + "Room": 44, + "KeyItemsHigh": "21273", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 768, + "Z": 21760, + "Room": 44, + "KeyItemsHigh": "21273", + "Range": "Medium" + }, + { + "X": 27904, + "Y": 768, + "Z": 21760, + "Room": 44, + "KeyItemsHigh": "21273", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 27904, + "Y": 768, + "Z": 22016, + "Room": 44, + "KeyItemsHigh": "21273", + "Range": "Large" + }, + { + "X": 27904, + "Y": 768, + "Z": 22272, + "Room": 44, + "KeyItemsHigh": "21273", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "CATACOMB.TR2": [ + { + "X": 3584, + "Y": -5632, + "Z": 36608, + "Room": 0, + "KeyItemsLow": "22222,22342", + "Range": "Medium" + }, + { + "X": 3584, + "Y": -5632, + "Z": 36352, + "Room": 0, + "KeyItemsLow": "22222,22357,22342", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 3584, + "Y": -5632, + "Z": 36096, + "Room": 0, + "KeyItemsLow": "22222,22342", + "Range": "Large" + }, + { + "X": 3840, + "Y": -5632, + "Z": 36096, + "Room": 0, + "KeyItemsLow": "22222,22357,22342", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 3840, + "Y": -5632, + "Z": 36352, + "Room": 0, + "KeyItemsLow": "22342" + }, + { + "X": 3840, + "Y": -5632, + "Z": 36608, + "Room": 0, + "KeyItemsLow": "22342", + "RequiresReturnPath": true + }, + { + "X": 10752, + "Y": -3840, + "Z": 36352, + "Room": 5 + }, + { + "X": 13824, + "Y": 2176, + "Z": 38400, + "Room": 74 + }, + { + "X": 13824, + "Y": 1280, + "Z": 36352, + "Room": 6 + }, + { + "X": 15872, + "Y": -2048, + "Z": 38400, + "Room": 7 + }, + { + "X": 18944, + "Y": -256, + "Z": 44544, + "Room": 1, + "KeyItemsLow": "22222" + }, + { + "X": 19200, + "Y": -256, + "Z": 44544, + "Room": 1, + "KeyItemsLow": "22222", + "RequiresReturnPath": true + }, + { + "X": 20992, + "Y": 1536, + "Z": 37376, + "Room": 3 + }, + { + "X": 23040, + "Y": 3584, + "Z": 43520, + "Room": 98 + }, + { + "X": 34304, + "Y": 3200, + "Z": 41472, + "Room": 4 + }, + { + "X": 33280, + "Y": 256, + "Z": 44544, + "Room": 2 + }, + { + "X": 33280, + "Y": 5376, + "Z": 35328, + "Room": 118 + }, + { + "X": 37376, + "Y": 7168, + "Z": 35328, + "Room": 16 + }, + { + "X": 29184, + "Y": 7424, + "Z": 39424, + "Room": 43 + }, + { + "X": 29184, + "Y": 10752, + "Z": 41728, + "Room": 125, + "KeyItemsHigh": "22222" + }, + { + "X": 29184, + "Y": 10752, + "Z": 41472, + "Room": 125, + "KeyItemsHigh": "22222", + "RequiresReturnPath": true + }, + { + "X": 29184, + "Y": 10752, + "Z": 41216, + "Room": 125, + "KeyItemsHigh": "22222", + "KeyItemsLow": "22357", + "Range": "Medium" + }, + { + "X": 29440, + "Y": 10752, + "Z": 41216, + "Room": 125, + "KeyItemsHigh": "22222", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 29440, + "Y": 10752, + "Z": 41472, + "Room": 125, + "KeyItemsHigh": "22222", + "KeyItemsLow": "22357", + "Range": "Large" + }, + { + "X": 29440, + "Y": 10752, + "Z": 41728, + "Room": 125, + "KeyItemsHigh": "22222", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 10496, + "Z": 40448, + "Room": 124 + }, + { + "X": 34304, + "Y": 10496, + "Z": 41472, + "Room": 17 + }, + { + "X": 34304, + "Y": 9984, + "Z": 46592, + "Room": 20 + }, + { + "X": 34304, + "Y": 8064, + "Z": 51712, + "Room": 18 + }, + { + "X": 42496, + "Y": 7936, + "Z": 50688, + "Room": 104 + }, + { + "X": 43520, + "Y": 5632, + "Z": 50688, + "Room": 128, + "Validated": false + }, + { + "X": 43520, + "Y": 5632, + "Z": 52736, + "Room": 106, + "Validated": false + }, + { + "X": 41472, + "Y": 5888, + "Z": 47616, + "Room": 59, + "Validated": false + }, + { + "X": 32256, + "Y": 3584, + "Z": 49664, + "Room": 40, + "Validated": false + }, + { + "X": 30208, + "Y": 3840, + "Z": 46592, + "Room": 61, + "Validated": false + }, + { + "X": 41472, + "Y": 3584, + "Z": 55808, + "Room": 64, + "Validated": false + }, + { + "X": 40448, + "Y": 8064, + "Z": 52736, + "Room": 62 + }, + { + "X": 40448, + "Y": 8192, + "Z": 60928, + "Room": 8 + }, + { + "X": 43520, + "Y": 1536, + "Z": 60928, + "Room": 66, + "Validated": false + }, + { + "X": 48640, + "Y": 5632, + "Z": 60928, + "Room": 46 + }, + { + "X": 31232, + "Y": 5888, + "Z": 53760, + "Room": 63 + }, + { + "X": 28160, + "Y": 8192, + "Z": 51712, + "Room": 107, + "KeyItemsLow": "22357" + }, + { + "X": 28160, + "Y": 8192, + "Z": 51456, + "Room": 107, + "KeyItemsLow": "22357", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 8192, + "Z": 50688, + "Room": 108 + }, + { + "X": 23040, + "Y": 8192, + "Z": 48640, + "Room": 60 + }, + { + "X": 20992, + "Y": 8192, + "Z": 51712, + "Room": 29 + }, + { + "X": 19968, + "Y": 10496, + "Z": 54784, + "Room": 67 + }, + { + "X": 44288, + "Y": 9216, + "Z": 58880, + "Room": 79, + "KeyItemsHigh": "22357" + }, + { + "X": 44544, + "Y": 9216, + "Z": 58880, + "Room": 79, + "KeyItemsHigh": "22357", + "RequiresReturnPath": true + }, + { + "X": 44800, + "Y": 9216, + "Z": 58880, + "Room": 79, + "KeyItemsHigh": "22357", + "Range": "Medium" + }, + { + "X": 44800, + "Y": 9216, + "Z": 58624, + "Room": 79, + "KeyItemsHigh": "22357", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 9216, + "Z": 58624, + "Room": 79, + "KeyItemsHigh": "22357", + "Range": "Large" + }, + { + "X": 44288, + "Y": 9216, + "Z": 58624, + "Room": 79, + "KeyItemsHigh": "22357", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 9216, + "Z": 59904, + "Room": 11 + }, + { + "X": 52736, + "Y": 9728, + "Z": 57856, + "Room": 30 + }, + { + "X": 48640, + "Y": 10752, + "Z": 57856, + "Room": 34 + }, + { + "X": 44544, + "Y": 11520, + "Z": 47616, + "Room": 10 + }, + { + "X": 44544, + "Y": 11520, + "Z": 59904, + "Room": 14 + }, + { + "X": 60928, + "Y": 9216, + "Z": 52736, + "Room": 83 + }, + { + "X": 62976, + "Y": 9216, + "Z": 52736, + "Room": 77 + }, + { + "X": 29184, + "Y": 5376, + "Z": 54784, + "Room": 65 + }, + { + "X": 23040, + "Y": 3840, + "Z": 53760, + "Room": 58 + }, + { + "X": 23040, + "Y": 3840, + "Z": 50688, + "Room": 35 + }, + { + "X": 17920, + "Y": 2432, + "Z": 54784, + "Room": 58 + }, + { + "X": 17920, + "Y": 2048, + "Z": 53760, + "Room": 84 + }, + { + "X": 16896, + "Y": -256, + "Z": 52736, + "Room": 87, + "Validated": false + }, + { + "X": 17920, + "Y": 3328, + "Z": 58880, + "Room": 54 + }, + { + "X": 17920, + "Y": -256, + "Z": 58880, + "Room": 88 + }, + { + "X": 17920, + "Y": -1024, + "Z": 61952, + "Room": 89 + }, + { + "X": 19968, + "Y": 5248, + "Z": 65024, + "Room": 22 + }, + { + "X": 19968, + "Y": 8448, + "Z": 62976, + "Room": 28 + }, + { + "X": 16896, + "Y": 3584, + "Z": 64000, + "Room": 92 + }, + { + "X": 19968, + "Y": 3712, + "Z": 61952, + "Room": 57 + }, + { + "X": 14848, + "Y": 3584, + "Z": 69120, + "Room": 91 + }, + { + "X": 6656, + "Y": 3584, + "Z": 61952, + "Room": 25 + }, + { + "X": 6656, + "Y": -1024, + "Z": 59904, + "Room": 94 + }, + { + "X": 6656, + "Y": 5376, + "Z": 59904, + "Room": 21 + }, + { + "X": 10752, + "Y": 5888, + "Z": 58880, + "Room": 82 + }, + { + "X": 11776, + "Y": 2816, + "Z": 53760, + "Room": 24 + }, + { + "X": 11776, + "Y": 256, + "Z": 53760, + "Room": 97 + }, + { + "X": 11776, + "Y": 3584, + "Z": 49664, + "Room": 23 + }, + { + "X": 18944, + "Y": 5120, + "Z": 46592, + "Room": 36 + }, + { + "X": 32256, + "Y": 5888, + "Z": 60928, + "Room": 39 + }, + { + "X": 35328, + "Y": 5888, + "Z": 61952, + "Room": 38 + }, + { + "X": 36352, + "Y": 3328, + "Z": 62976, + "Room": 81 + }, + { + "X": 34304, + "Y": 8192, + "Z": 62976, + "Room": 71 + }, + { + "X": 34304, + "Y": 8192, + "Z": 64000, + "Room": 70 + }, + { + "X": 38400, + "Y": 4864, + "Z": 66048, + "Room": 33 + }, + { + "X": 39424, + "Y": 4864, + "Z": 66048, + "Room": 42 + }, + { + "X": 46592, + "Y": 3840, + "Z": 68096, + "Room": 126 + }, + { + "X": 45568, + "Y": 1792, + "Z": 69120, + "Room": 49 + }, + { + "X": 43520, + "Y": 1792, + "Z": 65024, + "Room": 48 + }, + { + "X": 49664, + "Y": 3840, + "Z": 66048, + "Room": 127 + }, + { + "X": 50688, + "Y": 7936, + "Z": 66048, + "Room": 52 + }, + { + "X": 50688, + "Y": 7936, + "Z": 67072, + "Room": 73 + } + ], + "ICECAVE.TR2": [ + { + "X": 77312, + "Y": 256, + "Z": 57856, + "Room": 97, + "Validated": false + }, + { + "X": 61952, + "Y": 7936, + "Z": 66048, + "Room": 42, + "KeyItemsLow": "23379", + "Range": "Medium" + }, + { + "X": 61696, + "Y": 7936, + "Z": 66048, + "Room": 42, + "KeyItemsLow": "23379", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 61696, + "Y": 7936, + "Z": 65792, + "Room": 42, + "KeyItemsLow": "23379", + "Range": "Large" + }, + { + "X": 61952, + "Y": 7936, + "Z": 65792, + "Room": 42, + "KeyItemsLow": "23379,23315,23503", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 3840, + "Z": 65024, + "Room": 147 + }, + { + "X": 60928, + "Y": 7936, + "Z": 72192, + "Room": 93 + }, + { + "X": 62976, + "Y": 7936, + "Z": 72192, + "Room": 40 + }, + { + "X": 66048, + "Y": 7936, + "Z": 72192, + "Room": 45 + }, + { + "X": 66048, + "Y": 7936, + "Z": 74240, + "Room": 44 + }, + { + "X": 69120, + "Y": 7936, + "Z": 74240, + "Room": 51 + }, + { + "X": 73216, + "Y": 7936, + "Z": 73216, + "Room": 87 + }, + { + "X": 68096, + "Y": 7936, + "Z": 68096, + "Room": 48 + }, + { + "X": 72192, + "Y": 2816, + "Z": 70144, + "Room": 53 + }, + { + "X": 68096, + "Y": 2816, + "Z": 72192, + "Room": 54 + }, + { + "X": 70144, + "Y": 5632, + "Z": 75264, + "Room": 52 + }, + { + "X": 68096, + "Y": 5632, + "Z": 68096, + "Room": 92 + }, + { + "X": 64000, + "Y": 5888, + "Z": 70144, + "Room": 46 + }, + { + "X": 68096, + "Y": 5632, + "Z": 77312, + "Room": 62 + }, + { + "X": 68096, + "Y": 5632, + "Z": 80384, + "Room": 106 + }, + { + "X": 68096, + "Y": 10496, + "Z": 83456, + "Room": 107 + }, + { + "X": 74240, + "Y": 5632, + "Z": 77312, + "Room": 84 + }, + { + "X": 74240, + "Y": 4864, + "Z": 74240, + "Room": 86 + }, + { + "X": 73216, + "Y": 7936, + "Z": 69120, + "Room": 55 + }, + { + "X": 75264, + "Y": 3328, + "Z": 67072, + "Room": 150 + }, + { + "X": 77312, + "Y": 7936, + "Z": 69120, + "Room": 89 + }, + { + "X": 77312, + "Y": 4864, + "Z": 69120, + "Room": 94 + }, + { + "X": 80384, + "Y": 3328, + "Z": 69120, + "Room": 95 + }, + { + "X": 81408, + "Y": 2304, + "Z": 70144, + "Room": 32 + }, + { + "X": 81408, + "Y": 0, + "Z": 69120, + "Room": 96 + }, + { + "X": 80384, + "Y": -1024, + "Z": 69120, + "Room": 5, + "KeyItemsLow": "23379" + }, + { + "X": 80384, + "Y": -1024, + "Z": 68864, + "Room": 5, + "KeyItemsLow": "23379", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": -1024, + "Z": 66048, + "Room": 4 + }, + { + "X": 72192, + "Y": 0, + "Z": 65024, + "Room": 98 + }, + { + "X": 62976, + "Y": 1024, + "Z": 64000, + "Room": 101 + }, + { + "X": 62976, + "Y": 1536, + "Z": 61952, + "Room": 100 + }, + { + "X": 73216, + "Y": -1024, + "Z": 68096, + "Room": 4 + }, + { + "X": 62976, + "Y": -256, + "Z": 68352, + "Room": 99, + "KeyItemsHigh": "23379" + }, + { + "X": 62976, + "Y": -256, + "Z": 68096, + "Room": 99, + "KeyItemsHigh": "23379", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": -256, + "Z": 67840, + "Room": 99, + "KeyItemsHigh": "23379", + "Range": "Medium" + }, + { + "X": 62720, + "Y": -256, + "Z": 67840, + "Room": 99, + "KeyItemsHigh": "23379", + "KeyItemsLow": "23315", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62720, + "Y": -256, + "Z": 68096, + "Room": 99, + "KeyItemsHigh": "23379", + "Range": "Large" + }, + { + "X": 62720, + "Y": -256, + "Z": 68352, + "Room": 99, + "KeyItemsHigh": "23379", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 58880, + "Y": 1536, + "Z": 67072, + "Room": 135 + }, + { + "X": 57856, + "Y": 3072, + "Z": 64000, + "Room": 41 + }, + { + "X": 54784, + "Y": 3328, + "Z": 61952, + "Room": 90 + }, + { + "X": 54784, + "Y": 6656, + "Z": 57856, + "Room": 34, + "KeyItemsLow": "23315", + "Range": "Large" + }, + { + "X": 53760, + "Y": 5632, + "Z": 56832, + "Room": 131 + }, + { + "X": 52736, + "Y": 5632, + "Z": 56832, + "Room": 65 + }, + { + "X": 53760, + "Y": 5632, + "Z": 53760, + "Room": 148 + }, + { + "X": 52736, + "Y": 5632, + "Z": 53760, + "Room": 59, + "KeyItemsLow": "23315", + "Range": "Medium" + }, + { + "X": 50688, + "Y": 8064, + "Z": 56832, + "Room": 64 + }, + { + "X": 52736, + "Y": 7936, + "Z": 53760, + "Room": 130 + }, + { + "X": 48640, + "Y": 8192, + "Z": 54784, + "Room": 15 + }, + { + "X": 45568, + "Y": 9216, + "Z": 51712, + "Room": 16 + }, + { + "X": 50688, + "Y": 8192, + "Z": 64000, + "Room": 6 + }, + { + "X": 55808, + "Y": 5632, + "Z": 64000, + "Room": 36 + }, + { + "X": 53760, + "Y": 1536, + "Z": 64000, + "Room": 68, + "Validated": false + }, + { + "X": 52736, + "Y": 1792, + "Z": 68096, + "Room": 38, + "Validated": false + }, + { + "X": 52736, + "Y": 4864, + "Z": 70144, + "Room": 33, + "Validated": false + }, + { + "X": 55808, + "Y": 768, + "Z": 68096, + "Room": 39, + "Validated": false + }, + { + "X": 47616, + "Y": 5888, + "Z": 64000, + "Room": 30 + }, + { + "X": 41472, + "Y": 5888, + "Z": 56832, + "Room": 65 + }, + { + "X": 40448, + "Y": 5888, + "Z": 56832, + "Room": 67 + }, + { + "X": 38400, + "Y": 8192, + "Z": 54784, + "Room": 132 + }, + { + "X": 38400, + "Y": 8192, + "Z": 53760, + "Room": 133 + }, + { + "X": 33280, + "Y": 8192, + "Z": 51712, + "Room": 60 + }, + { + "X": 32256, + "Y": 8192, + "Z": 54784, + "Room": 22 + }, + { + "X": 30208, + "Y": 10496, + "Z": 57856, + "Room": 71 + }, + { + "X": 27136, + "Y": -256, + "Z": 55808, + "Room": 116, + "Validated": false + }, + { + "X": 28160, + "Y": -1024, + "Z": 66048, + "Room": 118, + "Validated": false + }, + { + "X": 30208, + "Y": 3840, + "Z": 69120, + "Room": 119, + "Validated": false + }, + { + "X": 26112, + "Y": 3584, + "Z": 49664, + "Room": 17, + "Validated": false + }, + { + "X": 42496, + "Y": 3584, + "Z": 52736, + "Room": 31 + }, + { + "X": 51712, + "Y": 3584, + "Z": 55808, + "Room": 66, + "Validated": false + }, + { + "X": 40448, + "Y": 3840, + "Z": 49664, + "Room": 63 + }, + { + "X": 31232, + "Y": 9984, + "Z": 49664, + "Room": 29, + "KeyItemsLow": "23315" + }, + { + "X": 31232, + "Y": 9984, + "Z": 49408, + "Room": 29, + "KeyItemsLow": "23315", + "RequiresReturnPath": true + }, + { + "X": 30976, + "Y": 9984, + "Z": 49408, + "Room": 29, + "KeyItemsLow": "23503", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 32256, + "Y": 9600, + "Z": 41472, + "Room": 24 + }, + { + "X": 33280, + "Y": 8320, + "Z": 37376, + "Room": 25 + }, + { + "X": 34304, + "Y": 7040, + "Z": 31232, + "Room": 8 + }, + { + "X": 36352, + "Y": 6400, + "Z": 30208, + "Room": 61 + }, + { + "X": 30208, + "Y": 7552, + "Z": 31232, + "Room": 56 + }, + { + "X": 33280, + "Y": 6400, + "Z": 25088, + "Room": 11 + }, + { + "X": 35328, + "Y": 4864, + "Z": 25088, + "Room": 69 + }, + { + "X": 36352, + "Y": 4096, + "Z": 24832, + "Room": 74, + "KeyItemsHigh": "23315" + }, + { + "X": 36352, + "Y": 4096, + "Z": 25088, + "Room": 74, + "KeyItemsHigh": "23315", + "RequiresReturnPath": true + }, + { + "X": 36352, + "Y": 4096, + "Z": 25344, + "Room": 74, + "KeyItemsHigh": "23315", + "Range": "Medium" + }, + { + "X": 36608, + "Y": 4096, + "Z": 25344, + "Room": 74, + "KeyItemsHigh": "23315", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 36608, + "Y": 4096, + "Z": 25088, + "Room": 74, + "KeyItemsHigh": "23315", + "Range": "Large" + }, + { + "X": 36608, + "Y": 4096, + "Z": 24832, + "Room": 74, + "KeyItemsHigh": "23315", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": 4224, + "Z": 20992, + "Room": 73 + }, + { + "X": 50688, + "Y": 5888, + "Z": 16896, + "Room": 75 + }, + { + "X": 54784, + "Y": 23296, + "Z": 22016, + "Room": 88, + "Validated": false + }, + { + "X": 55808, + "Y": 6528, + "Z": 23040, + "Room": 85 + }, + { + "X": 56832, + "Y": 5888, + "Z": 24064, + "Room": 77 + }, + { + "X": 57856, + "Y": 14848, + "Z": 26112, + "Room": 102, + "Validated": false + }, + { + "X": 57856, + "Y": 1280, + "Z": 27136, + "Room": 80 + }, + { + "X": 59904, + "Y": 3456, + "Z": 29184, + "Room": 9, + "Validated": false + }, + { + "X": 58880, + "Y": 6656, + "Z": 29952, + "Room": 10, + "KeyItemsLow": "23503" + }, + { + "X": 58880, + "Y": 6656, + "Z": 30208, + "Room": 10, + "KeyItemsLow": "23503", + "Range": "Medium" + }, + { + "X": 58880, + "Y": 6656, + "Z": 30464, + "Room": 10, + "KeyItemsLow": "23503", + "Range": "Large" + }, + { + "X": 59136, + "Y": 6656, + "Z": 30464, + "Room": 10, + "KeyItemsLow": "23503", + "RequiresReturnPath": true + }, + { + "X": 61952, + "Y": 9472, + "Z": 30208, + "Room": 103 + }, + { + "X": 52736, + "Y": 9472, + "Z": 25088, + "Room": 151, + "RoomType": "ReturnPath" + }, + { + "X": 51712, + "Y": 3584, + "Z": 25088, + "Room": 152, + "RoomType": "ReturnPath" + }, + { + "X": 47616, + "Y": 3584, + "Z": 27136, + "Room": 153, + "RoomType": "ReturnPath" + }, + { + "X": 62976, + "Y": 11008, + "Z": 36096, + "Room": 128, + "KeyItemsHigh": "23503" + }, + { + "X": 62976, + "Y": 11008, + "Z": 36352, + "Room": 128, + "KeyItemsHigh": "23503", + "RequiresReturnPath": true + }, + { + "X": 61952, + "Y": 11520, + "Z": 36352, + "Room": 126 + }, + { + "X": 61952, + "Y": 11520, + "Z": 37376, + "Room": 138 + }, + { + "X": 49664, + "Y": 15616, + "Z": 46592, + "Room": 141 + }, + { + "X": 50688, + "Y": 18688, + "Z": 48640, + "Room": 142 + }, + { + "X": 48640, + "Y": 11520, + "Z": 29184, + "Room": 7 + }, + { + "X": 57856, + "Y": 9984, + "Z": 30208, + "Room": 127, + "KeyItemsLow": "23503" + }, + { + "X": 58112, + "Y": 9984, + "Z": 30208, + "Room": 127, + "KeyItemsLow": "23503", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 11520, + "Z": 42752, + "Room": 144, + "KeyItemsHigh": "23503" + }, + { + "X": 64000, + "Y": 11520, + "Z": 42496, + "Room": 144, + "KeyItemsHigh": "23503", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 11520, + "Z": 42240, + "Room": 144, + "KeyItemsHigh": "23503", + "Range": "Medium" + }, + { + "X": 64256, + "Y": 11520, + "Z": 42240, + "Room": 144, + "KeyItemsHigh": "23503", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64256, + "Y": 11520, + "Z": 42496, + "Room": 144, + "KeyItemsHigh": "23503", + "Range": "Large" + }, + { + "X": 64256, + "Y": 11520, + "Z": 42752, + "Room": 144, + "KeyItemsHigh": "23503", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 65024, + "Y": 11520, + "Z": 42496, + "Room": 143 + } + ], + "EMPRTOMB.TR2": [ + { + "X": 7680, + "Y": -22784, + "Z": 81408, + "Room": 190, + "KeyItemsLow": "24427,24387,24582,24436", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 7680, + "Y": -23040, + "Z": 79360, + "Room": 79 + }, + { + "X": 7680, + "Y": -23040, + "Z": 73216, + "Room": 18 + }, + { + "X": 7680, + "Y": -23040, + "Z": 64000, + "Room": 17 + }, + { + "X": 12800, + "Y": -21888, + "Z": 64000, + "Room": 45 + }, + { + "X": 10752, + "Y": -18560, + "Z": 62976, + "Room": 15 + }, + { + "X": 8704, + "Y": -14720, + "Z": 59904, + "Room": 4 + }, + { + "X": 7680, + "Y": -10752, + "Z": 58880, + "Room": 186 + }, + { + "X": 7680, + "Y": -6528, + "Z": 53760, + "Room": 187 + }, + { + "X": 7680, + "Y": -3584, + "Z": 52736, + "Room": 5 + }, + { + "X": 7680, + "Y": 1536, + "Z": 57856, + "Room": 7 + }, + { + "X": 9728, + "Y": 3584, + "Z": 57856, + "Room": 182 + }, + { + "X": 11776, + "Y": 5632, + "Z": 57856, + "Room": 181 + }, + { + "X": 13824, + "Y": 8832, + "Z": 57856, + "Room": 146 + }, + { + "X": 14848, + "Y": 9600, + "Z": 57856, + "Room": 189 + }, + { + "X": 17920, + "Y": 12544, + "Z": 57856, + "Room": 188 + }, + { + "X": 17920, + "Y": 13312, + "Z": 55808, + "Room": 162 + }, + { + "X": 24064, + "Y": 16640, + "Z": 56832, + "Room": 9, + "Validated": false + }, + { + "X": 23040, + "Y": 12288, + "Z": 60928, + "Room": 88, + "Validated": false + }, + { + "X": 24064, + "Y": 22912, + "Z": 47616, + "Room": 12, + "Validated": false + }, + { + "X": 20736, + "Y": 28672, + "Z": 44544, + "Room": 13, + "KeyItemsLow": "24427,24387,24582", + "Range": "Medium" + }, + { + "X": 20992, + "Y": 28672, + "Z": 44544, + "Room": 13, + "KeyItemsLow": "24427,24387,24582,24436", + "Range": "Large" + }, + { + "X": 21248, + "Y": 28672, + "Z": 44544, + "Room": 13, + "KeyItemsLow": "24387,24582,24427", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 20736, + "Y": 28672, + "Z": 44288, + "Room": 13, + "KeyItemsLow": "24582,24427" + }, + { + "X": 20992, + "Y": 28672, + "Z": 44288, + "Room": 13, + "KeyItemsLow": "24582,24427", + "RequiresReturnPath": true + }, + { + "X": 22016, + "Y": 24832, + "Z": 40448, + "Room": 100 + }, + { + "X": 28160, + "Y": 28288, + "Z": 43520, + "Room": 39 + }, + { + "X": 35328, + "Y": 23424, + "Z": 43520, + "Room": 14 + }, + { + "X": 44544, + "Y": 18176, + "Z": 43520, + "Room": 38, + "Validated": false + }, + { + "X": 19968, + "Y": 23296, + "Z": 41472, + "Room": 89 + }, + { + "X": 19968, + "Y": 18176, + "Z": 39424, + "Room": 21 + }, + { + "X": 19968, + "Y": 18688, + "Z": 37376, + "Room": 16 + }, + { + "X": 19968, + "Y": 20992, + "Z": 37376, + "Room": 22 + }, + { + "X": 18944, + "Y": 23936, + "Z": 37376, + "Room": 23 + }, + { + "X": 15872, + "Y": 18944, + "Z": 32256, + "Room": 25 + }, + { + "X": 10752, + "Y": 19712, + "Z": 33280, + "Room": 30 + }, + { + "X": 11776, + "Y": 16512, + "Z": 36352, + "Room": 26 + }, + { + "X": 10752, + "Y": 16640, + "Z": 37376, + "Room": 50 + }, + { + "X": 10752, + "Y": 20608, + "Z": 43520, + "Room": 27 + }, + { + "X": 15872, + "Y": 18432, + "Z": 47616, + "Room": 3 + }, + { + "X": 47616, + "Y": 21760, + "Z": 44544, + "Room": 163, + "KeyItemsHigh": "24582", + "KeyItemsLow": "24387" + }, + { + "X": 47616, + "Y": 21760, + "Z": 44288, + "Room": 163, + "KeyItemsHigh": "24582", + "RequiresReturnPath": true + }, + { + "X": 15872, + "Y": 18432, + "Z": 48640, + "Room": 193, + "RoomType": "ReturnPath" + }, + { + "X": 15872, + "Y": 18432, + "Z": 65024, + "Room": 194, + "RoomType": "ReturnPath" + }, + { + "X": 15872, + "Y": 6144, + "Z": 81408, + "Room": 196, + "RoomType": "ReturnPath" + }, + { + "X": 15872, + "Y": -8192, + "Z": 80384, + "Room": 198, + "RoomType": "ReturnPath" + }, + { + "X": 16896, + "Y": -22528, + "Z": 80384, + "Room": 200, + "RoomType": "ReturnPath" + }, + { + "X": 14848, + "Y": -25088, + "Z": 81408, + "Room": 201, + "RoomType": "ReturnPath" + }, + { + "X": 47616, + "Y": 21760, + "Z": 43520, + "Room": 164, + "KeyItemsLow": "24387", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 21760, + "Z": 43520, + "Room": 42 + }, + { + "X": 48640, + "Y": 21760, + "Z": 46592, + "Room": 165 + }, + { + "X": 51712, + "Y": 21760, + "Z": 45568, + "Room": 41 + }, + { + "X": 52736, + "Y": 21760, + "Z": 49664, + "Room": 43, + "Validated": false + }, + { + "X": 52736, + "Y": 21760, + "Z": 39424, + "Room": 44, + "Validated": false + }, + { + "X": 61952, + "Y": 21760, + "Z": 43520, + "Room": 67 + }, + { + "X": 66048, + "Y": 18176, + "Z": 42496, + "Room": 70 + }, + { + "X": 73216, + "Y": 20096, + "Z": 42496, + "Room": 72, + "Validated": false + }, + { + "X": 76288, + "Y": 23552, + "Z": 42496, + "Room": 65, + "Validated": false + }, + { + "X": 75264, + "Y": 23296, + "Z": 45568, + "Room": 167, + "Validated": false + }, + { + "X": 74240, + "Y": 23296, + "Z": 42496, + "Room": 73, + "Validated": false + }, + { + "X": 72192, + "Y": 23296, + "Z": 46592, + "Room": 77, + "Validated": false + }, + { + "X": 71168, + "Y": 16896, + "Z": 50688, + "Room": 147, + "Validated": false + }, + { + "X": 70144, + "Y": 14464, + "Z": 50688, + "Room": 78, + "Validated": false + }, + { + "X": 69120, + "Y": 15872, + "Z": 50688, + "Room": 80, + "Validated": false + }, + { + "X": 61952, + "Y": 19200, + "Z": 51712, + "Room": 115, + "Validated": false + }, + { + "X": 58880, + "Y": 19456, + "Z": 47616, + "Room": 66 + }, + { + "X": 49664, + "Y": 19200, + "Z": 44544, + "Room": 168, + "KeyItemsHigh": "24427" + }, + { + "X": 49408, + "Y": 19200, + "Z": 44544, + "Room": 168, + "KeyItemsHigh": "24427", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 18688, + "Z": 42496, + "Room": 116 + }, + { + "X": 48128, + "Y": 18558, + "Z": 31201, + "Room": 117 + }, + { + "X": 48640, + "Y": 18944, + "Z": 26112, + "Room": 37 + }, + { + "X": 48640, + "Y": 18944, + "Z": 23040, + "Room": 60 + }, + { + "X": 48640, + "Y": 17664, + "Z": 15872, + "Room": 62, + "Validated": false + }, + { + "X": 45568, + "Y": 14848, + "Z": 10752, + "Room": 121, + "Validated": false + }, + { + "X": 45568, + "Y": 14336, + "Z": 9728, + "Room": 35, + "Validated": false + }, + { + "X": 48588, + "Y": 19732, + "Z": 22528, + "Room": 118 + }, + { + "X": 45568, + "Y": 17920, + "Z": 26112, + "Room": 56 + }, + { + "X": 50688, + "Y": 14848, + "Z": 24064, + "Room": 122 + }, + { + "X": 45568, + "Y": 12544, + "Z": 33280, + "Room": 122 + }, + { + "X": 45568, + "Y": 12544, + "Z": 36352, + "Room": 36 + }, + { + "X": 51712, + "Y": 14976, + "Z": 36352, + "Room": 40 + }, + { + "X": 58880, + "Y": 19456, + "Z": 40448, + "Room": 178 + }, + { + "X": 48640, + "Y": 16640, + "Z": 39424, + "Room": 143 + }, + { + "X": 48640, + "Y": 16640, + "Z": 36352, + "Room": 180 + }, + { + "X": 48640, + "Y": 15872, + "Z": 34304, + "Room": 142 + }, + { + "X": 61952, + "Y": 20224, + "Z": 40448, + "Room": 0 + }, + { + "X": 64768, + "Y": 23296, + "Z": 46592, + "Room": 68, + "KeyItemsHigh": "24387", + "Validated": false + }, + { + "X": 65024, + "Y": 23296, + "Z": 46592, + "Room": 68, + "KeyItemsHigh": "24387", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 65280, + "Y": 23296, + "Z": 46592, + "Room": 68, + "KeyItemsHigh": "24387", + "Range": "Medium", + "Validated": false + }, + { + "X": 65280, + "Y": 23296, + "Z": 46848, + "Room": 68, + "KeyItemsHigh": "24387", + "Range": "Medium", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 65024, + "Y": 23296, + "Z": 46848, + "Room": 68, + "KeyItemsHigh": "24387", + "Range": "Large", + "Validated": false + }, + { + "X": 64768, + "Y": 23296, + "Z": 46848, + "Room": 68, + "KeyItemsHigh": "24387", + "Range": "Large", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 65024, + "Y": 23552, + "Z": 48640, + "Room": 76, + "Validated": false + }, + { + "X": 73216, + "Y": 32256, + "Z": 57856, + "Room": 81, + "Validated": false + }, + { + "X": 76288, + "Y": 32256, + "Z": 53760, + "Room": 108, + "Validated": false + }, + { + "X": 75264, + "Y": 31744, + "Z": 51712, + "Room": 107, + "Validated": false + }, + { + "X": 75264, + "Y": 29696, + "Z": 50688, + "Room": 101, + "Validated": false + }, + { + "X": 77312, + "Y": 32000, + "Z": 48640, + "Room": 102, + "Validated": false + }, + { + "X": 85504, + "Y": 29952, + "Z": 47616, + "Room": 103, + "Validated": false + }, + { + "X": 95744, + "Y": 29952, + "Z": 45568, + "Room": 111, + "Validated": false + }, + { + "X": 93696, + "Y": 31104, + "Z": 43520, + "Room": 133, + "Validated": false + }, + { + "X": 71168, + "Y": 30976, + "Z": 47616, + "Room": 110, + "Validated": false + }, + { + "X": 76288, + "Y": 27136, + "Z": 52736, + "Room": 112, + "Validated": false + }, + { + "X": 77312, + "Y": 26368, + "Z": 52736, + "Room": 132, + "Validated": false + }, + { + "X": 77312, + "Y": 25344, + "Z": 44544, + "Room": 125, + "Validated": false + }, + { + "X": 77312, + "Y": 26752, + "Z": 42496, + "Room": 61, + "Validated": false + }, + { + "X": 78336, + "Y": 24832, + "Z": 42496, + "Room": 192, + "Validated": false + }, + { + "X": 73216, + "Y": 25344, + "Z": 42496, + "Room": 83, + "Validated": false + }, + { + "X": 30208, + "Y": 29696, + "Z": 35328, + "Room": 57, + "Validated": false + }, + { + "X": 27136, + "Y": 29696, + "Z": 35328, + "Room": 29 + }, + { + "X": 21760, + "Y": 24576, + "Z": 39424, + "Room": 86, + "KeyItemsLow": "24582" + }, + { + "X": 22016, + "Y": 24576, + "Z": 39424, + "Room": 86, + "KeyItemsLow": "24582", + "RequiresReturnPath": true + }, + { + "X": 22272, + "Y": 24576, + "Z": 39424, + "Room": 86, + "KeyItemsHigh": "24427", + "Range": "Medium" + }, + { + "X": 22272, + "Y": 24576, + "Z": 39168, + "Room": 86, + "KeyItemsHigh": "24427", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 22016, + "Y": 24576, + "Z": 39168, + "Room": 86, + "KeyItemsHigh": "24427", + "Range": "Large" + }, + { + "X": 21760, + "Y": 24576, + "Z": 39168, + "Room": 86, + "KeyItemsHigh": "24427", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 18944, + "Y": 28544, + "Z": 30208, + "Room": 2 + }, + { + "X": 16896, + "Y": 26880, + "Z": 33280, + "Room": 1 + }, + { + "X": 17920, + "Y": 26752, + "Z": 25088, + "Room": 96 + }, + { + "X": 19968, + "Y": 23040, + "Z": 26112, + "Room": 6 + }, + { + "X": 13824, + "Y": 17152, + "Z": 26112, + "Room": 151 + }, + { + "X": 12800, + "Y": 17024, + "Z": 26112, + "Room": 150 + }, + { + "X": 8704, + "Y": 17024, + "Z": 26112, + "Room": 149 + }, + { + "X": 5632, + "Y": 17280, + "Z": 20992, + "Room": 152 + }, + { + "X": 8704, + "Y": 18688, + "Z": 13824, + "Room": 156 + }, + { + "X": 9728, + "Y": 19712, + "Z": 9728, + "Room": 153 + }, + { + "X": 10752, + "Y": 19456, + "Z": 6656, + "Room": 158 + }, + { + "X": 13824, + "Y": 21632, + "Z": 8704, + "Room": 155 + }, + { + "X": 22016, + "Y": 17664, + "Z": 8704, + "Room": 148 + }, + { + "X": 16896, + "Y": 17536, + "Z": 13824, + "Room": 154 + }, + { + "X": 17920, + "Y": 14080, + "Z": 26112, + "Room": 151 + }, + { + "X": 35072, + "Y": 22528, + "Z": 38400, + "Room": 105, + "KeyItemsHigh": "24582" + }, + { + "X": 35328, + "Y": 22528, + "Z": 38400, + "Room": 105, + "KeyItemsHigh": "24582", + "RequiresReturnPath": true + }, + { + "X": 35584, + "Y": 22528, + "Z": 38400, + "Room": 105, + "KeyItemsHigh": "24582", + "KeyItemsLow": "24436", + "Range": "Medium" + }, + { + "X": 35584, + "Y": 22528, + "Z": 38144, + "Room": 105, + "KeyItemsHigh": "24582", + "KeyItemsLow": "24436", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": 22528, + "Z": 38144, + "Room": 105, + "KeyItemsHigh": "24582", + "Range": "Large" + }, + { + "X": 35072, + "Y": 22528, + "Z": 38144, + "Room": 105, + "KeyItemsHigh": "24582", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": 22528, + "Z": 37376, + "Room": 94 + }, + { + "X": 40448, + "Y": 18688, + "Z": 36352, + "Room": 93 + }, + { + "X": 39424, + "Y": 18176, + "Z": 51712, + "Room": 104 + }, + { + "X": 34304, + "Y": 14592, + "Z": 54784, + "Room": 145 + }, + { + "X": 28160, + "Y": 12288, + "Z": 52736, + "Room": 98 + }, + { + "X": 18944, + "Y": 12288, + "Z": 51712, + "Room": 8 + }, + { + "X": 33280, + "Y": 17920, + "Z": 52736, + "Room": 87, + "Validated": false + }, + { + "X": 32256, + "Y": 17920, + "Z": 52736, + "Room": 49, + "Validated": false + }, + { + "X": 32256, + "Y": 17920, + "Z": 51712, + "Room": 59, + "Validated": false + }, + { + "X": 35328, + "Y": 14848, + "Z": 57856, + "Room": 106 + }, + { + "X": 35328, + "Y": 768, + "Z": 67072, + "Room": 144 + }, + { + "X": 34304, + "Y": -512, + "Z": 66048, + "Room": 34 + }, + { + "X": 29184, + "Y": -1792, + "Z": 66048, + "Room": 90, + "KeyItemsLow": "24436" + }, + { + "X": 28928, + "Y": -1792, + "Z": 66048, + "Room": 90, + "KeyItemsLow": "24436", + "RequiresReturnPath": true + }, + { + "X": 27136, + "Y": -1024, + "Z": 70144, + "Room": 91, + "Validated": false + }, + { + "X": 18944, + "Y": -5632, + "Z": 68096, + "Room": 92 + }, + { + "X": 24064, + "Y": -10752, + "Z": 69120, + "Room": 46 + }, + { + "X": 26112, + "Y": -11264, + "Z": 66048, + "Room": 135 + }, + { + "X": 29184, + "Y": -10880, + "Z": 69120, + "Room": 136 + }, + { + "X": 23040, + "Y": -11264, + "Z": 66304, + "Room": 129, + "KeyItemsHigh": "24436" + }, + { + "X": 23040, + "Y": -11264, + "Z": 66048, + "Room": 129, + "KeyItemsHigh": "24436", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -11264, + "Z": 65792, + "Room": 129, + "KeyItemsHigh": "24436", + "Range": "Medium" + }, + { + "X": 22784, + "Y": -11264, + "Z": 65792, + "Room": 129, + "KeyItemsHigh": "24436", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 22784, + "Y": -11264, + "Z": 66048, + "Room": 129, + "KeyItemsHigh": "24436", + "Range": "Large" + }, + { + "X": 22784, + "Y": -11264, + "Z": 66304, + "Room": 129, + "KeyItemsHigh": "24436", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 19968, + "Y": -10880, + "Z": 61952, + "Room": 97 + }, + { + "X": 19968, + "Y": -15104, + "Z": 62976, + "Room": 32 + }, + { + "X": 16896, + "Y": -24448, + "Z": 61952, + "Room": 33 + } + ], + "FLOATING.TR2": [ + { + "X": 82432, + "Y": -9216, + "Z": 55552, + "Room": 8, + "KeyItemsLow": "25232,25160" + }, + { + "X": 82432, + "Y": -9216, + "Z": 55808, + "Room": 8, + "KeyItemsLow": "25232,25160", + "RequiresReturnPath": true + }, + { + "X": 82432, + "Y": -9216, + "Z": 56064, + "Room": 8, + "KeyItemsLow": "25232,25160", + "Range": "Medium" + }, + { + "X": 82688, + "Y": -9216, + "Z": 56064, + "Room": 8, + "KeyItemsLow": "25232,25160", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 82688, + "Y": -9216, + "Z": 55808, + "Room": 8, + "KeyItemsLow": "25232,25160", + "Range": "Large" + }, + { + "X": 82688, + "Y": -9216, + "Z": 55552, + "Room": 8, + "KeyItemsLow": "25232,25160", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 83456, + "Y": -9216, + "Z": 55808, + "Room": 152 + }, + { + "X": 83456, + "Y": -8832, + "Z": 54784, + "Room": 153 + }, + { + "X": 82432, + "Y": -8576, + "Z": 54784, + "Room": 99 + }, + { + "X": 71168, + "Y": -6912, + "Z": 52736, + "Room": 94 + }, + { + "X": 68096, + "Y": -7424, + "Z": 53760, + "Room": 98 + }, + { + "X": 73216, + "Y": -2816, + "Z": 50688, + "Room": 1 + }, + { + "X": 71168, + "Y": -3456, + "Z": 64000, + "Room": 105 + }, + { + "X": 71168, + "Y": -3584, + "Z": 65024, + "Room": 72 + }, + { + "X": 70144, + "Y": -3584, + "Z": 65024, + "Room": 104 + }, + { + "X": 72192, + "Y": -5632, + "Z": 66048, + "Room": 2 + }, + { + "X": 73216, + "Y": -4352, + "Z": 69120, + "Room": 103 + }, + { + "X": 75264, + "Y": -5504, + "Z": 70144, + "Room": 102 + }, + { + "X": 74240, + "Y": -6784, + "Z": 69120, + "Room": 3 + }, + { + "X": 76288, + "Y": -1408, + "Z": 68096, + "Room": 17 + }, + { + "X": 74240, + "Y": -768, + "Z": 68096, + "Room": 18 + }, + { + "X": 69120, + "Y": -768, + "Z": 67072, + "Room": 16 + }, + { + "X": 64000, + "Y": -1280, + "Z": 67072, + "Room": 4 + }, + { + "X": 61952, + "Y": -2560, + "Z": 65024, + "Room": 7 + }, + { + "X": 61952, + "Y": -2816, + "Z": 60928, + "Room": 5 + }, + { + "X": 57856, + "Y": -6656, + "Z": 56832, + "Room": 6 + }, + { + "X": 65024, + "Y": -9344, + "Z": 56832, + "Room": 8 + }, + { + "X": 64000, + "Y": -9216, + "Z": 49664, + "Room": 127, + "Validated": false + }, + { + "X": 62976, + "Y": -6656, + "Z": 49664, + "Room": 136, + "Validated": false + }, + { + "X": 53760, + "Y": -7040, + "Z": 56832, + "Room": 21 + }, + { + "X": 48640, + "Y": -7168, + "Z": 56576, + "Room": 24, + "KeyItemsHigh": "25232,25160" + }, + { + "X": 48640, + "Y": -7168, + "Z": 56832, + "Room": 24, + "KeyItemsHigh": "25232,25160", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": -7168, + "Z": 57088, + "Room": 24, + "KeyItemsHigh": "25232,25160", + "Range": "Medium" + }, + { + "X": 48384, + "Y": -7168, + "Z": 57088, + "Room": 24, + "KeyItemsHigh": "25232,25160", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48384, + "Y": -7168, + "Z": 56832, + "Room": 24, + "KeyItemsHigh": "25232,25160", + "Range": "Large" + }, + { + "X": 48384, + "Y": -7168, + "Z": 56576, + "Room": 24, + "KeyItemsHigh": "25232,25160", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -7168, + "Z": 59904, + "Room": 45 + }, + { + "X": 40448, + "Y": -8064, + "Z": 64000, + "Room": 25 + }, + { + "X": 40448, + "Y": -7680, + "Z": 57856, + "Room": 25 + }, + { + "X": 44544, + "Y": -9216, + "Z": 50688, + "Room": 44 + }, + { + "X": 44544, + "Y": -9216, + "Z": 49664, + "Room": 61 + }, + { + "X": 44544, + "Y": -7424, + "Z": 46592, + "Room": 60 + }, + { + "X": 45568, + "Y": -5632, + "Z": 40448, + "Room": 66, + "Validated": false + }, + { + "X": 44544, + "Y": -4736, + "Z": 44544, + "Room": 51 + }, + { + "X": 40448, + "Y": -3072, + "Z": 56832, + "Room": 101 + }, + { + "X": 44544, + "Y": -2560, + "Z": 57856, + "Room": 0 + }, + { + "X": 45568, + "Y": -2560, + "Z": 57856, + "Room": 29 + }, + { + "X": 46592, + "Y": -1408, + "Z": 54784, + "Room": 28 + }, + { + "X": 49664, + "Y": -4608, + "Z": 54784, + "Room": 83 + }, + { + "X": 48640, + "Y": -7040, + "Z": 54784, + "Room": 74 + }, + { + "X": 48640, + "Y": -4352, + "Z": 49664, + "Room": 23 + }, + { + "X": 43520, + "Y": -3072, + "Z": 47616, + "Room": 63 + }, + { + "X": 47616, + "Y": -7680, + "Z": 48640, + "Room": 37 + }, + { + "X": 46592, + "Y": -8448, + "Z": 42496, + "Room": 65 + }, + { + "X": 47616, + "Y": -9728, + "Z": 49664, + "Room": 39 + }, + { + "X": 47616, + "Y": -10240, + "Z": 50688, + "Room": 43 + }, + { + "X": 39424, + "Y": -2048, + "Z": 64000, + "Room": 73 + }, + { + "X": 37376, + "Y": -2816, + "Z": 67072, + "Room": 75 + }, + { + "X": 29184, + "Y": -128, + "Z": 68096, + "Room": 112, + "Validated": false + }, + { + "X": 37376, + "Y": 0, + "Z": 69120, + "Room": 77 + }, + { + "X": 42496, + "Y": -1024, + "Z": 70144, + "Room": 46 + }, + { + "X": 40448, + "Y": 3840, + "Z": 68096, + "Room": 79 + }, + { + "X": 39424, + "Y": 2560, + "Z": 66048, + "Room": 91 + }, + { + "X": 28160, + "Y": 4352, + "Z": 68096, + "Room": 119 + }, + { + "X": 27136, + "Y": 4224, + "Z": 68096, + "Room": 118 + }, + { + "X": 30208, + "Y": 4224, + "Z": 74240, + "Room": 121 + }, + { + "X": 29184, + "Y": 2816, + "Z": 74240, + "Room": 122 + }, + { + "X": 37376, + "Y": 1792, + "Z": 74240, + "Room": 122 + }, + { + "X": 39424, + "Y": 0, + "Z": 73216, + "Room": 52 + }, + { + "X": 39424, + "Y": 768, + "Z": 77312, + "Room": 80 + }, + { + "X": 39424, + "Y": -1280, + "Z": 73216, + "Room": 126 + }, + { + "X": 38400, + "Y": -1280, + "Z": 76288, + "Room": 133 + }, + { + "X": 37376, + "Y": -1280, + "Z": 74240, + "Room": 86 + }, + { + "X": 33280, + "Y": 2560, + "Z": 78336, + "Room": 123 + }, + { + "X": 33280, + "Y": 2560, + "Z": 77312, + "Room": 78 + }, + { + "X": 32256, + "Y": 4352, + "Z": 80384, + "Room": 149 + }, + { + "X": 35328, + "Y": 4608, + "Z": 83456, + "Room": 145 + }, + { + "X": 34304, + "Y": 4608, + "Z": 85504, + "Room": 147 + }, + { + "X": 27136, + "Y": 4608, + "Z": 84480, + "Room": 146 + }, + { + "X": 30208, + "Y": 4608, + "Z": 76288, + "Room": 148 + }, + { + "X": 32256, + "Y": 4096, + "Z": 91648, + "Room": 26 + }, + { + "X": 31232, + "Y": 3328, + "Z": 96768, + "Room": 106 + }, + { + "X": 27136, + "Y": 2304, + "Z": 95744, + "Room": 129 + }, + { + "X": 27136, + "Y": 1536, + "Z": 92672, + "Room": 128 + }, + { + "X": 31232, + "Y": 512, + "Z": 91648, + "Room": 107 + }, + { + "X": 32256, + "Y": -1280, + "Z": 83456, + "Room": 86 + }, + { + "X": 26112, + "Y": -1280, + "Z": 78336, + "Room": 76 + }, + { + "X": 22272, + "Y": -9728, + "Z": 77312, + "Room": 81, + "KeyItemsLow": "25443" + }, + { + "X": 22016, + "Y": -9728, + "Z": 77312, + "Room": 81, + "KeyItemsLow": "25443", + "RequiresReturnPath": true + }, + { + "X": 21760, + "Y": -9728, + "Z": 77312, + "Room": 81, + "KeyItemsLow": "25443", + "Range": "Medium" + }, + { + "X": 21760, + "Y": -9728, + "Z": 77056, + "Room": 81, + "KeyItemsLow": "25443", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 22016, + "Y": -9728, + "Z": 77056, + "Room": 81, + "KeyItemsLow": "25443", + "Range": "Large" + }, + { + "X": 22272, + "Y": -9728, + "Z": 77056, + "Room": 81, + "KeyItemsLow": "25443", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 22016, + "Y": -9728, + "Z": 76288, + "Room": 90 + }, + { + "X": 18944, + "Y": -8960, + "Z": 72192, + "Room": 134 + }, + { + "X": 26112, + "Y": -8320, + "Z": 72192, + "Room": 144 + }, + { + "X": 24064, + "Y": -7808, + "Z": 67072, + "Room": 40 + }, + { + "X": 20992, + "Y": -5376, + "Z": 68096, + "Room": 124 + }, + { + "X": 25088, + "Y": -5376, + "Z": 66048, + "Room": 160 + }, + { + "X": 25088, + "Y": -5376, + "Z": 62976, + "Room": 159 + }, + { + "X": 35328, + "Y": -9984, + "Z": 62976, + "Room": 41 + }, + { + "X": 38400, + "Y": -10752, + "Z": 64000, + "Room": 42, + "Validated": false + }, + { + "X": 35328, + "Y": -12672, + "Z": 62976, + "Room": 53, + "Validated": false + }, + { + "X": 22272, + "Y": -7424, + "Z": 61952, + "Room": 161, + "KeyItemsHigh": "25443" + }, + { + "X": 22016, + "Y": -7424, + "Z": 61952, + "Room": 161, + "KeyItemsHigh": "25443", + "RequiresReturnPath": true + }, + { + "X": 21760, + "Y": -7424, + "Z": 61952, + "Room": 161, + "KeyItemsHigh": "25443", + "Range": "Medium" + }, + { + "X": 21760, + "Y": -7424, + "Z": 62208, + "Room": 161, + "KeyItemsHigh": "25443", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 22016, + "Y": -7424, + "Z": 62208, + "Room": 161, + "KeyItemsHigh": "25443", + "Range": "Large" + }, + { + "X": 22272, + "Y": -7424, + "Z": 62208, + "Room": 161, + "KeyItemsHigh": "25443", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "XIAN.TR2": [ + { + "X": 73472, + "Y": -9472, + "Z": 78336, + "Room": 17, + "KeyItemsLow": "26145" + }, + { + "X": 73216, + "Y": -9472, + "Z": 78336, + "Room": 17, + "KeyItemsLow": "26145", + "RequiresReturnPath": true + }, + { + "X": 72960, + "Y": -9472, + "Z": 78336, + "Room": 17, + "KeyItemsLow": "26145", + "Range": "Medium" + }, + { + "X": 72960, + "Y": -9472, + "Z": 78080, + "Room": 17, + "KeyItemsLow": "26145", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": -9472, + "Z": 78080, + "Room": 17, + "KeyItemsLow": "26145", + "Range": "Large" + }, + { + "X": 73472, + "Y": -9472, + "Z": 78080, + "Room": 17, + "KeyItemsLow": "26145", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 73216, + "Y": -9472, + "Z": 77312, + "Room": 0 + }, + { + "X": 73216, + "Y": -9472, + "Z": 75264, + "Room": 3 + }, + { + "X": 67072, + "Y": -8960, + "Z": 70144, + "Room": 1 + }, + { + "X": 52480, + "Y": -9216, + "Z": 66048, + "Room": 2, + "KeyItemsHigh": "26145" + }, + { + "X": 52736, + "Y": -9216, + "Z": 66048, + "Room": 2, + "KeyItemsHigh": "26145", + "RequiresReturnPath": true + }, + { + "X": 52992, + "Y": -9216, + "Z": 66048, + "Room": 2, + "KeyItemsHigh": "26145", + "Range": "Medium" + }, + { + "X": 52992, + "Y": -9216, + "Z": 65792, + "Room": 2, + "KeyItemsHigh": "26145", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": -9216, + "Z": 65792, + "Room": 2, + "KeyItemsHigh": "26145", + "Range": "Large" + }, + { + "X": 52480, + "Y": -9216, + "Z": 65792, + "Room": 2, + "KeyItemsHigh": "26145", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": -7168, + "Z": 57856, + "Room": 16 + }, + { + "X": 48640, + "Y": -7168, + "Z": 57856, + "Room": 20 + }, + { + "X": 41472, + "Y": -7168, + "Z": 57856, + "Room": 19 + }, + { + "X": 48640, + "Y": -7168, + "Z": 47616, + "Room": 18 + }, + { + "X": 46592, + "Y": -4864, + "Z": 42496, + "Room": 15 + }, + { + "X": 46592, + "Y": -4864, + "Z": 39424, + "Room": 13 + }, + { + "X": 52736, + "Y": -4864, + "Z": 37376, + "Room": 5 + }, + { + "X": 54784, + "Y": -4864, + "Z": 42496, + "Room": 14 + }, + { + "X": 51712, + "Y": -7168, + "Z": 29184, + "Room": 22 + }, + { + "X": 50688, + "Y": -7040, + "Z": 19968, + "Room": 21 + } + ], + "HOUSE.TR2": [ + { + "X": 34304, + "Y": 256, + "Z": 64000, + "Room": 52 + }, + { + "X": 31232, + "Y": 256, + "Z": 65024, + "Room": 57, + "InvalidatesRoom": true + }, + { + "X": 27136, + "Y": 0, + "Z": 61952, + "Room": 27 + }, + { + "X": 29184, + "Y": 0, + "Z": 65024, + "Room": 58 + }, + { + "X": 26112, + "Y": 512, + "Z": 65024, + "Room": 11 + }, + { + "X": 38400, + "Y": 0, + "Z": 65024, + "Room": 9 + }, + { + "X": 41472, + "Y": 0, + "Z": 78336, + "Room": 8 + }, + { + "X": 36352, + "Y": -512, + "Z": 81408, + "Room": 7 + }, + { + "X": 34304, + "Y": -512, + "Z": 75264, + "Room": 53 + }, + { + "X": 32256, + "Y": -2560, + "Z": 67072, + "Room": 54 + }, + { + "X": 27136, + "Y": -2560, + "Z": 64000, + "Room": 32 + }, + { + "X": 36352, + "Y": 256, + "Z": 71168, + "Room": 10 + }, + { + "X": 39424, + "Y": 1536, + "Z": 74240, + "Room": 60 + }, + { + "X": 36352, + "Y": 2560, + "Z": 72192, + "Room": 61 + }, + { + "X": 34304, + "Y": 2560, + "Z": 72192, + "Room": 63 + }, + { + "X": 31232, + "Y": 2560, + "Z": 76288, + "Room": 65 + }, + { + "X": 29184, + "Y": 2560, + "Z": 80384, + "Room": 66 + }, + { + "X": 29184, + "Y": 2816, + "Z": 83456, + "Room": 12 + }, + { + "X": 29184, + "Y": 2560, + "Z": 92672, + "Room": 59 + }, + { + "X": 28160, + "Y": 6144, + "Z": 89600, + "Room": 13 + }, + { + "X": 28160, + "Y": 2560, + "Z": 75264, + "Room": 64 + }, + { + "X": 25088, + "Y": 2048, + "Z": 77312, + "Room": 69 + }, + { + "X": 25088, + "Y": 2048, + "Z": 73216, + "Room": 68 + }, + { + "X": 25088, + "Y": 2048, + "Z": 70144, + "Room": 67 + }, + { + "X": 29184, + "Y": 2560, + "Z": 65024, + "Room": 56 + }, + { + "X": 31232, + "Y": 2560, + "Z": 64000, + "Room": 72 + }, + { + "X": 37376, + "Y": 2560, + "Z": 61952, + "Room": 71 + }, + { + "X": 38400, + "Y": 2560, + "Z": 62976, + "Room": 70 + }, + { + "X": 37376, + "Y": 2048, + "Z": 60928, + "Room": 55 + }, + { + "X": 35328, + "Y": 2304, + "Z": 60928, + "Room": 51 + }, + { + "X": 36352, + "Y": 2560, + "Z": 66048, + "Room": 62 + }, + { + "X": 47616, + "Y": 2560, + "Z": 70144, + "Room": 48 + }, + { + "X": 48640, + "Y": 2560, + "Z": 62976, + "Room": 50 + }, + { + "X": 47616, + "Y": 2560, + "Z": 61952, + "Room": 49 + }, + { + "X": 50688, + "Y": -256, + "Z": 62976, + "Room": 19 + }, + { + "X": 47616, + "Y": -4352, + "Z": 69120, + "Room": 38 + }, + { + "X": 37376, + "Y": -5376, + "Z": 62976, + "Room": 37 + }, + { + "X": 47616, + "Y": 2560, + "Z": 60928, + "Room": 1 + }, + { + "X": 46592, + "Y": 2560, + "Z": 60928, + "Room": 2 + }, + { + "X": 39424, + "Y": 2816, + "Z": 56832, + "Room": 18 + }, + { + "X": 32256, + "Y": 0, + "Z": 56832, + "Room": 28 + }, + { + "X": 60928, + "Y": -1024, + "Z": 60928, + "Room": 30 + }, + { + "X": 46592, + "Y": -1024, + "Z": 53760, + "Room": 29 + }, + { + "X": 39424, + "Y": -1024, + "Z": 53760, + "Room": 28 + }, + { + "X": 30208, + "Y": 3840, + "Z": 56832, + "Room": 40 + }, + { + "X": 28160, + "Y": 3584, + "Z": 56832, + "Room": 44 + }, + { + "X": 24064, + "Y": 3584, + "Z": 56832, + "Room": 39 + }, + { + "X": 23040, + "Y": 2560, + "Z": 58880, + "Room": 3 + }, + { + "X": 22016, + "Y": -1024, + "Z": 53760, + "Room": 27 + }, + { + "X": 16896, + "Y": -1024, + "Z": 64000, + "Room": 26 + }, + { + "X": 23040, + "Y": 2560, + "Z": 64000, + "Room": 43 + }, + { + "X": 23040, + "Y": 2560, + "Z": 73216, + "Room": 5 + }, + { + "X": 22016, + "Y": 3072, + "Z": 76288, + "Room": 16 + }, + { + "X": 23040, + "Y": 2560, + "Z": 82432, + "Room": 42 + }, + { + "X": 23040, + "Y": 2560, + "Z": 90624, + "Room": 15 + }, + { + "X": 16896, + "Y": -1024, + "Z": 89600, + "Room": 25 + }, + { + "X": 20992, + "Y": -1024, + "Z": 97792, + "Room": 24 + }, + { + "X": 25088, + "Y": 2560, + "Z": 96768, + "Room": 41 + }, + { + "X": 34304, + "Y": 2560, + "Z": 96768, + "Room": 84 + }, + { + "X": 34304, + "Y": -1024, + "Z": 97792, + "Room": 23 + }, + { + "X": 33280, + "Y": 0, + "Z": 84480, + "Room": 34 + }, + { + "X": 29184, + "Y": -6144, + "Z": 83456, + "Room": 31 + }, + { + "X": 38400, + "Y": -4352, + "Z": 85504, + "Room": 36 + }, + { + "X": 38400, + "Y": 0, + "Z": 87552, + "Room": 35 + }, + { + "X": 39424, + "Y": -1024, + "Z": 97792, + "Room": 22 + }, + { + "X": 53760, + "Y": -1024, + "Z": 97792, + "Room": 21 + }, + { + "X": 60928, + "Y": -1024, + "Z": 85504, + "Room": 20 + }, + { + "X": 38400, + "Y": 2560, + "Z": 86528, + "Room": 83 + }, + { + "X": 39424, + "Y": 2560, + "Z": 86528, + "Room": 14 + }, + { + "X": 49664, + "Y": 2560, + "Z": 86528, + "Room": 17 + }, + { + "X": 53760, + "Y": 2560, + "Z": 86528, + "Room": 74 + }, + { + "X": 53760, + "Y": 2304, + "Z": 85504, + "Room": 6 + }, + { + "X": 55808, + "Y": 2560, + "Z": 87552, + "Room": 75 + }, + { + "X": 55808, + "Y": 2560, + "Z": 91648, + "Room": 76 + }, + { + "X": 52736, + "Y": 2560, + "Z": 96768, + "Room": 78 + }, + { + "X": 48640, + "Y": 2560, + "Z": 96768, + "Room": 80 + }, + { + "X": 38400, + "Y": 2560, + "Z": 96768, + "Room": 4 + }, + { + "X": 38400, + "Y": 3712, + "Z": 94720, + "Room": 0 + }, + { + "X": 44544, + "Y": 2560, + "Z": 91648, + "Room": 73 + }, + { + "X": 41472, + "Y": 2560, + "Z": 88576, + "Room": 81 + }, + { + "X": 46592, + "Y": 2560, + "Z": 88576, + "Room": 82 + }, + { + "X": 48640, + "Y": 2560, + "Z": 88576, + "Room": 79 + }, + { + "X": 51712, + "Y": 2560, + "Z": 88576, + "Room": 77 + }, + { + "X": 54784, + "Y": 2816, + "Z": 81408, + "Room": 33 + }, + { + "X": 61952, + "Y": 2560, + "Z": 70144, + "Room": 85 + } + ] } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Locations/invalid_item_locations.json b/TRRandomizerCore/Resources/TR3/Locations/invalid_item_locations.json index 1e79dadfd..414931ef8 100644 --- a/TRRandomizerCore/Resources/TR3/Locations/invalid_item_locations.json +++ b/TRRandomizerCore/Resources/TR3/Locations/invalid_item_locations.json @@ -7,6 +7,36 @@ "Room": 3, "InvalidatesRoom": true }, + { + "X": 26112, + "Y": 26368, + "Z": 60928, + "Room": 149 + }, + { + "X": 26112, + "Y": 26368, + "Z": 59904, + "Room": 149 + }, + { + "X": 25088, + "Y": 17664, + "Z": 52736, + "Room": 17 + }, + { + "X": 48640, + "Y": 27904, + "Z": 65024, + "Room": 164 + }, + { + "X": 95744, + "Y": 20224, + "Z": 60928, + "Room": 77 + }, { "X": 59904, "Y": 23936, @@ -480,6 +510,157 @@ "Room": 1, "InvalidatesRoom": true }, + { + "X": 64000, + "Y": 8960, + "Z": 62976, + "Room": 88, + "TargetType": 1 + }, + { + "X": 65024, + "Y": 8192, + "Z": 64000, + "Room": 88 + }, + { + "X": 64000, + "Y": 8192, + "Z": 64000, + "Room": 88 + }, + { + "X": 62976, + "Y": 8192, + "Z": 64000, + "Room": 88 + }, + { + "X": 61952, + "Y": 8192, + "Z": 64000, + "Room": 88 + }, + { + "X": 60928, + "Y": 8192, + "Z": 64000, + "Room": 87 + }, + { + "X": 59904, + "Y": 8192, + "Z": 64000, + "Room": 87 + }, + { + "X": 62976, + "Y": 8192, + "Z": 66048, + "Room": 88 + }, + { + "X": 64000, + "Y": 8192, + "Z": 66048, + "Room": 88 + }, + { + "X": 65024, + "Y": 8192, + "Z": 66048, + "Room": 88 + }, + { + "X": 66048, + "Y": 7936, + "Z": 66048, + "Room": 88 + }, + { + "X": 49664, + "Y": 8960, + "Z": 18944, + "Room": 173 + }, + { + "X": 49664, + "Y": 8960, + "Z": 19968, + "Room": 173 + }, + { + "X": 49664, + "Y": 8960, + "Z": 20992, + "Room": 173 + }, + { + "X": 49664, + "Y": 8960, + "Z": 22016, + "Room": 173 + }, + { + "X": 49664, + "Y": 8960, + "Z": 23040, + "Room": 173 + }, + { + "X": 49664, + "Y": 8960, + "Z": 24064, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 25088, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 26112, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 27136, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 28160, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 29184, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 30208, + "Room": 172 + }, + { + "X": 49664, + "Y": 8960, + "Z": 31232, + "Room": 172 + }, + { + "X": 56832, + "Y": 1280, + "Z": 82432, + "Room": 162 + }, { "X": 60928, "Y": 8448, @@ -522,6 +703,12 @@ "Z": 19968, "Room": 176 }, + { + "X": 52736, + "Y": 8960, + "Z": 19968, + "Room": 173 + }, { "X": 69120, "Y": -5504, @@ -689,11 +876,16 @@ "InvalidatesRoom": true }, { - "X": 17920, - "Y": 7168, - "Z": 66048, - "Room": 220, - "InvalidatesRoom": true + "X": 18944, + "Y": 6912, + "Z": 61952, + "Room": 220 + }, + { + "X": 15872, + "Y": 6912, + "Z": 61952, + "Room": 220 }, { "X": 43520, @@ -956,11 +1148,10 @@ "Room": 20 }, { - "X": 35328, + "X": 37376, "Y": -6912, "Z": 56832, - "Room": 6, - "InvalidatesRoom": true + "Room": 6 }, { "X": 18944, @@ -980,6 +1171,12 @@ "Z": 51712, "Room": 23, "InvalidatesRoom": true + }, + { + "X": 19968, + "Y": -8448, + "Z": 56832, + "Room": 7 } ], "SHORE.TR2": [ @@ -1138,6 +1335,26 @@ "Room": 3, "InvalidatesRoom": true }, + { + "X": 14848, + "Y": -128, + "Z": 25088, + "Room": 3, + "Validated": false + }, + { + "X": 14848, + "Y": -1280, + "Z": 26112, + "Room": 3, + "Validated": false + }, + { + "X": 17920, + "Y": -7680, + "Z": 84480, + "Room": 15 + }, { "X": 23040, "Y": -640, @@ -1158,6 +1375,12 @@ "Z": 77312, "Room": 14 }, + { + "X": 15872, + "Y": -1024, + "Z": 81408, + "Room": 14 + }, { "X": 17210, "Y": -7019, @@ -1522,6 +1745,30 @@ "Room": 3, "InvalidatesRoom": true }, + { + "X": 30208, + "Y": -512, + "Z": 57856, + "Room": 46 + }, + { + "X": 64914, + "Y": -8362, + "Z": 27367, + "Room": 62 + }, + { + "X": 61952, + "Y": -6528, + "Z": 41472, + "Room": 5 + }, + { + "X": 58880, + "Y": -6784, + "Z": 41472, + "Room": 5 + }, { "X": 62976, "Y": -4096, @@ -2685,6 +2932,13 @@ "Room": 0, "InvalidatesRoom": true }, + { + "X": 43520, + "Y": -14848, + "Z": 55808, + "Room": 153, + "TargetType": 1 + }, { "X": 38400, "Y": -21504, @@ -2792,6 +3046,27 @@ "Room": 22, "InvalidatesRoom": true }, + { + "X": 39424, + "Y": -21504, + "Z": 59904, + "Room": 22, + "Validated": false + }, + { + "X": 39424, + "Y": -21504, + "Z": 58880, + "Room": 22, + "Validated": false + }, + { + "X": 38400, + "Y": -21504, + "Z": 59904, + "Room": 22, + "Validated": false + }, { "X": 38400, "Y": -23040, @@ -2806,6 +3081,62 @@ "Room": 122, "InvalidatesRoom": true }, + { + "X": 37376, + "Y": -20736, + "Z": 59904, + "Room": 122, + "Validated": false + }, + { + "X": 37376, + "Y": -20736, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 38400, + "Y": -20736, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 40448, + "Y": -19968, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 41472, + "Y": -19968, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 42496, + "Y": -19968, + "Z": 58880, + "Room": 122, + "Validated": false + }, + { + "X": 42496, + "Y": -19968, + "Z": 57856, + "Room": 122, + "Validated": false + }, + { + "X": 42496, + "Y": -20736, + "Z": 55808, + "Room": 122, + "Validated": false + }, { "X": 57856, "Y": -20224, @@ -3164,6 +3495,20 @@ "Z": 20992, "Room": 1 }, + { + "X": 56832, + "Y": 12800, + "Z": 68096, + "Room": 5, + "TargetType": 1 + }, + { + "X": 55808, + "Y": 12800, + "Z": 68096, + "Room": 5, + "TargetType": 1 + }, { "X": 71168, "Y": -2432, @@ -4440,13 +4785,6 @@ "Z": 39424, "Room": 41 }, - { - "X": 18944, - "Y": -1792, - "Z": 58880, - "Room": 44, - "InvalidatesRoom": true - }, { "X": 17920, "Y": -5632, @@ -4710,6 +5048,13 @@ "Z": 25088, "Room": 44 }, + { + "X": 1536, + "Y": -512, + "Z": 38400, + "Room": 54, + "TargetType": 1 + }, { "X": 67072, "Y": -4864, @@ -4722,6 +5067,12 @@ "Z": 16896, "Room": 44 }, + { + "X": 71168, + "Y": -3840, + "Z": 18944, + "Room": 44 + }, { "X": 59904, "Y": 512, @@ -4735,23 +5086,77 @@ "Room": 99 }, { - "X": 16896, - "Y": -768, - "Z": 40448, - "Room": 8, - "InvalidatesRoom": true + "X": 16896, + "Y": -768, + "Z": 40448, + "Room": 8, + "InvalidatesRoom": true + }, + { + "X": 3584, + "Y": 1280, + "Z": 83456, + "Room": 80, + "InvalidatesRoom": true + }, + { + "X": 64000, + "Y": -9472, + "Z": 38400, + "Room": 134 + }, + { + "X": 62976, + "Y": -9472, + "Z": 38400, + "Room": 134 + }, + { + "X": 62976, + "Y": -9472, + "Z": 39424, + "Room": 134 + }, + { + "X": 61952, + "Y": -9472, + "Z": 39424, + "Room": 134 + }, + { + "X": 60928, + "Y": -9472, + "Z": 39424, + "Room": 134 + }, + { + "X": 59904, + "Y": -9472, + "Z": 39424, + "Room": 134 + }, + { + "X": 59904, + "Y": -9472, + "Z": 38400, + "Room": 134 + }, + { + "X": 60928, + "Y": -9472, + "Z": 38400, + "Room": 134 }, { - "X": 3584, - "Y": 1280, - "Z": 83456, - "Room": 80, - "InvalidatesRoom": true + "X": 59904, + "Y": -9472, + "Z": 37376, + "Room": 134 }, { - "X": 64000, + "X": 60928, "Y": -9472, - "Z": 38400, + "Z": 37376, "Room": 134 }, { @@ -5064,6 +5469,12 @@ "Room": 6, "InvalidatesRoom": true }, + { + "X": 37376, + "Y": 6144, + "Z": 60928, + "Room": 132 + }, { "X": 49664, "Y": -1024, @@ -5177,6 +5588,37 @@ "Z": 47616, "Room": 28 }, + { + "X": 27136, + "Y": -2304, + "Z": 48640, + "Room": 135 + }, + { + "X": 42496, + "Y": -2048, + "Z": 29184, + "Room": 105 + }, + { + "X": 45568, + "Y": -2048, + "Z": 29184, + "Room": 105 + }, + { + "X": 48640, + "Y": -2048, + "Z": 29184, + "Room": 105 + }, + { + "X": 28160, + "Y": 3584, + "Z": 74240, + "Room": 89, + "TargetType": 1 + }, { "X": 27136, "Y": -1920, @@ -5313,6 +5755,20 @@ "Room": 129, "InvalidatesRoom": true }, + { + "X": 16896, + "Y": -4736, + "Z": 45568, + "Room": 129, + "Validated": false + }, + { + "X": 17920, + "Y": -4736, + "Z": 45568, + "Room": 129, + "Validated": false + }, { "X": 22016, "Y": 4864, @@ -5341,6 +5797,13 @@ "Room": 150, "InvalidatesRoom": true }, + { + "X": 18944, + "Y": -7936, + "Z": 47616, + "Room": 150, + "Validated": false + }, { "X": 24064, "Y": -4864, @@ -5669,6 +6132,41 @@ "Room": 13, "InvalidatesRoom": true }, + { + "X": 29184, + "Y": -7680, + "Z": 3584, + "Room": 13, + "Validated": false + }, + { + "X": 27136, + "Y": -7040, + "Z": 4608, + "Room": 13, + "Validated": false + }, + { + "X": 26112, + "Y": -6656, + "Z": 4608, + "Room": 13, + "Validated": false + }, + { + "X": 26112, + "Y": -6272, + "Z": 5632, + "Room": 13, + "Validated": false + }, + { + "X": 26112, + "Y": -6144, + "Z": 6656, + "Room": 13, + "Validated": false + }, { "X": 41409, "Y": -3546, @@ -6298,6 +6796,12 @@ "Z": 56832, "Room": 11 }, + { + "X": 29184, + "Y": 4608, + "Z": 58880, + "Room": 11 + }, { "X": 45568, "Y": 7424, @@ -6347,13 +6851,6 @@ "Room": 23, "InvalidatesRoom": true }, - { - "X": 39449, - "Y": 11142, - "Z": 49618, - "Room": 83, - "InvalidatesRoom": true - }, { "X": 21995, "Y": -6707, @@ -6389,12 +6886,6 @@ "Room": 44, "InvalidatesRoom": true }, - { - "X": 54784, - "Y": 7680, - "Z": 73216, - "Room": 45 - }, { "X": 46592, "Y": 5632, @@ -6429,6 +6920,12 @@ "Z": 45519, "Room": 78 }, + { + "X": 41472, + "Y": 2304, + "Z": 45568, + "Room": 2 + }, { "X": 32256, "Y": 8192, @@ -6436,20 +6933,6 @@ "Room": 82, "InvalidatesRoom": true }, - { - "X": 42496, - "Y": 11520, - "Z": 49664, - "Room": 84, - "InvalidatesRoom": true - }, - { - "X": 61952, - "Y": 7936, - "Z": 67072, - "Room": 86, - "InvalidatesRoom": true - }, { "X": 65024, "Y": 7936, @@ -6544,13 +7027,6 @@ "Room": 109, "InvalidatesRoom": true }, - { - "X": 43520, - "Y": 11008, - "Z": 44544, - "Room": 110, - "InvalidatesRoom": true - }, { "X": 51712, "Y": 7296, @@ -6802,11 +7278,40 @@ ], "CITY.TR2": [ { - "X": 7661, - "Y": -8999, - "Z": 48206, - "Room": 42, - "InvalidatesRoom": true + "X": 7680, + "Y": -8192, + "Z": 46592, + "Room": 100 + }, + { + "X": 9728, + "Y": -8704, + "Z": 47616, + "Room": 42 + }, + { + "X": 77312, + "Y": 0, + "Z": 57856, + "Room": 44 + }, + { + "X": 75264, + "Y": 0, + "Z": 57856, + "Room": 44 + }, + { + "X": 70144, + "Y": -1792, + "Z": 47616, + "Room": 44 + }, + { + "X": 71168, + "Y": -1792, + "Z": 46592, + "Room": 44 }, { "X": 23040, @@ -7301,12 +7806,6 @@ "Z": 42496, "Room": 21 }, - { - "X": 60111, - "Y": -11008, - "Z": 61750, - "Room": 12 - }, { "X": 43668, "Y": -1202, @@ -7461,24 +7960,6 @@ "Y": 768, "Z": 67884, "Room": 5 - }, - { - "X": 58819, - "Y": -12032, - "Z": 65900, - "Room": 12 - }, - { - "X": 59830, - "Y": -12251, - "Z": 66146, - "Room": 12 - }, - { - "X": 58121, - "Y": -11008, - "Z": 65779, - "Room": 12 } ], "STPAUL.TR2": [ @@ -7631,6 +8112,69 @@ "Y": -5120, "Z": 58050, "Room": 55 + }, + { + "X": 45568, + "Y": 5632, + "Z": 54784, + "Room": 58, + "TargetType": 1 + }, + { + "X": 46592, + "Y": 5632, + "Z": 53760, + "Room": 58, + "TargetType": 1 + }, + { + "X": 46592, + "Y": 5632, + "Z": 54784, + "Room": 58, + "TargetType": 1 + }, + { + "X": 46592, + "Y": 5632, + "Z": 55808, + "Room": 58, + "TargetType": 1 + }, + { + "X": 47616, + "Y": 5632, + "Z": 55808, + "Room": 58, + "TargetType": 1 + }, + { + "X": 47616, + "Y": 5632, + "Z": 54784, + "Room": 58, + "TargetType": 1 + }, + { + "X": 48640, + "Y": 5632, + "Z": 54784, + "Room": 58, + "TargetType": 1 + }, + { + "X": 48640, + "Y": 5632, + "Z": 53760, + "Room": 58, + "TargetType": 1 + }, + { + "X": 49664, + "Y": 5632, + "Z": 53760, + "Room": 58, + "TargetType": 1 } ] } \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Locations/routes.json b/TRRandomizerCore/Resources/TR3/Locations/routes.json index 7a73a41bf..97c82f7da 100644 --- a/TRRandomizerCore/Resources/TR3/Locations/routes.json +++ b/TRRandomizerCore/Resources/TR3/Locations/routes.json @@ -1,2 +1,16986 @@ { + "JUNGLE.TR2": [ + { + "X": 28160, + "Y": -256, + "Z": 28160, + "Room": 4, + "KeyItemsLow": "10590", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 20992, + "Y": -1280, + "Z": 33280, + "Room": 13, + "Validated": false + }, + { + "X": 27136, + "Y": 2816, + "Z": 32256, + "Room": 21 + }, + { + "X": 28160, + "Y": 6528, + "Z": 37376, + "Room": 2 + }, + { + "X": 28160, + "Y": 5888, + "Z": 39424, + "Room": 21 + }, + { + "X": 28160, + "Y": 5888, + "Z": 40448, + "Room": 20 + }, + { + "X": 28160, + "Y": 8832, + "Z": 40448, + "Room": 22 + }, + { + "X": 28160, + "Y": 9600, + "Z": 41472, + "Room": 23 + }, + { + "X": 29184, + "Y": 13440, + "Z": 46592, + "Room": 17 + }, + { + "X": 32256, + "Y": 12800, + "Z": 52736, + "Room": 18, + "Validated": false + }, + { + "X": 25088, + "Y": 17024, + "Z": 58880, + "Room": 29 + }, + { + "X": 29184, + "Y": 19584, + "Z": 54784, + "Room": 16 + }, + { + "X": 29184, + "Y": 22656, + "Z": 58880, + "Room": 26, + "KeyItemsLow": "10590", + "Range": "Large" + }, + { + "X": 25088, + "Y": 24064, + "Z": 59904, + "Room": 135 + }, + { + "X": 25088, + "Y": 26624, + "Z": 56832, + "Room": 165, + "RoomType": "ReturnPath" + }, + { + "X": 25088, + "Y": 26624, + "Z": 54784, + "Room": 166, + "RoomType": "ReturnPath" + }, + { + "X": 26112, + "Y": 14336, + "Z": 39424, + "Room": 168, + "RoomType": "ReturnPath" + }, + { + "X": 22016, + "Y": 26112, + "Z": 59904, + "Room": 134 + }, + { + "X": 19968, + "Y": 26496, + "Z": 61952, + "Room": 130 + }, + { + "X": 17920, + "Y": 24064, + "Z": 56832, + "Room": 141 + }, + { + "X": 17920, + "Y": 21248, + "Z": 53760, + "Room": 142, + "Validated": false + }, + { + "X": 26112, + "Y": 23808, + "Z": 67072, + "Room": 3, + "Validated": false + }, + { + "X": 26112, + "Y": 23808, + "Z": 68096, + "Room": 36, + "Validated": false + }, + { + "X": 24064, + "Y": 23808, + "Z": 67072, + "Room": 131 + }, + { + "X": 25088, + "Y": 22272, + "Z": 67072, + "Room": 137, + "Validated": false + }, + { + "X": 26112, + "Y": 22272, + "Z": 60928, + "Room": 136, + "Validated": false + }, + { + "X": 30208, + "Y": 22016, + "Z": 70144, + "Room": 25 + }, + { + "X": 26112, + "Y": 27136, + "Z": 64000, + "Room": 129 + }, + { + "X": 27136, + "Y": 27136, + "Z": 64000, + "Room": 147 + }, + { + "X": 31232, + "Y": 26496, + "Z": 77312, + "Room": 31 + }, + { + "X": 32256, + "Y": 26880, + "Z": 79360, + "Room": 32 + }, + { + "X": 34304, + "Y": 27136, + "Z": 79360, + "Room": 1 + }, + { + "X": 36352, + "Y": 27136, + "Z": 77312, + "Room": 83 + }, + { + "X": 38400, + "Y": 29824, + "Z": 73216, + "Room": 79 + }, + { + "X": 38400, + "Y": 29696, + "Z": 68096, + "Room": 158 + }, + { + "X": 38400, + "Y": 30720, + "Z": 58880, + "Room": 37 + }, + { + "X": 38400, + "Y": 30592, + "Z": 49664, + "Room": 157 + }, + { + "X": 36352, + "Y": 29440, + "Z": 48640, + "Room": 100 + }, + { + "X": 34304, + "Y": 29184, + "Z": 55808, + "Room": 155 + }, + { + "X": 33280, + "Y": 27136, + "Z": 60928, + "Room": 146 + }, + { + "X": 29184, + "Y": 25344, + "Z": 61952, + "Room": 27 + }, + { + "X": 29184, + "Y": 26368, + "Z": 59904, + "Room": 149 + }, + { + "X": 27136, + "Y": 25600, + "Z": 61952, + "Room": 148 + }, + { + "X": 40448, + "Y": 25856, + "Z": 59904, + "Room": 30 + }, + { + "X": 42496, + "Y": 23424, + "Z": 57856, + "Room": 34, + "Validated": false + }, + { + "X": 43520, + "Y": 25600, + "Z": 59904, + "Room": 40 + }, + { + "X": 46592, + "Y": 27520, + "Z": 59904, + "Room": 5 + }, + { + "X": 43520, + "Y": 25856, + "Z": 54784, + "Room": 6 + }, + { + "X": 54784, + "Y": 27520, + "Z": 58880, + "Room": 42 + }, + { + "X": 54784, + "Y": 27392, + "Z": 62976, + "Room": 43 + }, + { + "X": 52736, + "Y": 27904, + "Z": 65024, + "Room": 41 + }, + { + "X": 49664, + "Y": 27904, + "Z": 65024, + "Room": 164 + }, + { + "X": 59904, + "Y": 25728, + "Z": 65024, + "Room": 44 + }, + { + "X": 60928, + "Y": 25344, + "Z": 66048, + "Room": 45 + }, + { + "X": 62976, + "Y": 25600, + "Z": 65024, + "Room": 47 + }, + { + "X": 65024, + "Y": 24832, + "Z": 62976, + "Room": 28 + }, + { + "X": 74240, + "Y": 24064, + "Z": 60928, + "Room": 39 + }, + { + "X": 75264, + "Y": 25344, + "Z": 65024, + "Room": 46 + }, + { + "X": 77312, + "Y": 24832, + "Z": 58880, + "Room": 48 + }, + { + "X": 81408, + "Y": 25856, + "Z": 53760, + "Room": 54 + }, + { + "X": 83456, + "Y": 22528, + "Z": 58880, + "Room": 65, + "Validated": false + }, + { + "X": 86528, + "Y": 25088, + "Z": 48640, + "Room": 51 + }, + { + "X": 91648, + "Y": 24832, + "Z": 46592, + "Room": 52 + }, + { + "X": 91648, + "Y": 24832, + "Z": 41472, + "Room": 53 + }, + { + "X": 84480, + "Y": 24064, + "Z": 37376, + "Room": 61 + }, + { + "X": 89600, + "Y": 23296, + "Z": 43520, + "Room": 59 + }, + { + "X": 90624, + "Y": 23680, + "Z": 43520, + "Room": 60 + }, + { + "X": 86528, + "Y": 24448, + "Z": 43520, + "Room": 49 + }, + { + "X": 89600, + "Y": 22656, + "Z": 47616, + "Room": 58 + }, + { + "X": 87552, + "Y": 22400, + "Z": 46592, + "Room": 67 + }, + { + "X": 89600, + "Y": 22528, + "Z": 48640, + "Room": 66 + }, + { + "X": 89600, + "Y": 22528, + "Z": 51712, + "Room": 68 + }, + { + "X": 87552, + "Y": 24064, + "Z": 54784, + "Room": 72 + }, + { + "X": 87552, + "Y": 24064, + "Z": 56832, + "Room": 76 + }, + { + "X": 91648, + "Y": 23552, + "Z": 59904, + "Room": 74 + }, + { + "X": 89600, + "Y": 25984, + "Z": 55808, + "Room": 70 + }, + { + "X": 90624, + "Y": 26368, + "Z": 59904, + "Room": 71 + }, + { + "X": 87552, + "Y": 27392, + "Z": 54784, + "Room": 88 + }, + { + "X": 82432, + "Y": 27392, + "Z": 54784, + "Room": 87 + }, + { + "X": 88576, + "Y": 23552, + "Z": 59904, + "Room": 73 + }, + { + "X": 87552, + "Y": 23552, + "Z": 60928, + "Room": 10 + }, + { + "X": 87552, + "Y": 23552, + "Z": 61952, + "Room": 90 + }, + { + "X": 88576, + "Y": 23808, + "Z": 65024, + "Room": 161 + }, + { + "X": 89600, + "Y": 23808, + "Z": 65024, + "Room": 162 + }, + { + "X": 92672, + "Y": 22528, + "Z": 60928, + "Room": 14 + }, + { + "X": 93696, + "Y": 19712, + "Z": 62976, + "Room": 75 + }, + { + "X": 94720, + "Y": 20224, + "Z": 61952, + "Room": 78 + }, + { + "X": 95744, + "Y": 20224, + "Z": 61952, + "Room": 77 + }, + { + "X": 94720, + "Y": 17152, + "Z": 70144, + "Room": 143 + }, + { + "X": 90624, + "Y": 28416, + "Z": 68096, + "Room": 62, + "KeyItemsLow": "10590", + "Range": "Medium" + }, + { + "X": 90368, + "Y": 28416, + "Z": 68096, + "Room": 62, + "KeyItemsLow": "10590", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 82432, + "Y": 27776, + "Z": 70144, + "Room": 80 + }, + { + "X": 82432, + "Y": 26112, + "Z": 66048, + "Room": 144 + }, + { + "X": 82432, + "Y": 25728, + "Z": 65024, + "Room": 50 + }, + { + "X": 82432, + "Y": 27008, + "Z": 61952, + "Room": 99 + }, + { + "X": 74240, + "Y": 27392, + "Z": 71168, + "Room": 63 + }, + { + "X": 71168, + "Y": 27136, + "Z": 75264, + "Room": 151 + }, + { + "X": 76288, + "Y": 24064, + "Z": 76288, + "Room": 152, + "Validated": false + }, + { + "X": 71168, + "Y": 27648, + "Z": 78336, + "Room": 154 + }, + { + "X": 66048, + "Y": 28160, + "Z": 78336, + "Room": 81 + }, + { + "X": 52736, + "Y": 30208, + "Z": 78336, + "Room": 0 + }, + { + "X": 58880, + "Y": 25984, + "Z": 77312, + "Room": 84 + }, + { + "X": 59904, + "Y": 23936, + "Z": 76288, + "Room": 86 + }, + { + "X": 53760, + "Y": 22272, + "Z": 76288, + "Room": 145, + "Validated": false + }, + { + "X": 53760, + "Y": 24064, + "Z": 80384, + "Room": 7 + }, + { + "X": 51712, + "Y": 24064, + "Z": 79360, + "Room": 85 + }, + { + "X": 48640, + "Y": 23808, + "Z": 70144, + "Room": 163 + }, + { + "X": 45568, + "Y": 27136, + "Z": 80384, + "Room": 89 + }, + { + "X": 44544, + "Y": 27136, + "Z": 82432, + "Room": 91 + }, + { + "X": 42496, + "Y": 27136, + "Z": 82432, + "Room": 95 + }, + { + "X": 41472, + "Y": 25856, + "Z": 80384, + "Room": 98 + }, + { + "X": 38400, + "Y": 28160, + "Z": 82432, + "Room": 113 + }, + { + "X": 36352, + "Y": 27904, + "Z": 86528, + "Room": 160 + }, + { + "X": 41472, + "Y": 27648, + "Z": 93696, + "Room": 128 + }, + { + "X": 43520, + "Y": 28160, + "Z": 94720, + "Room": 114 + }, + { + "X": 43520, + "Y": 28160, + "Z": 89600, + "Room": 105 + }, + { + "X": 45568, + "Y": 27904, + "Z": 89600, + "Room": 106 + }, + { + "X": 47616, + "Y": 29696, + "Z": 91648, + "Room": 102 + }, + { + "X": 56832, + "Y": 27904, + "Z": 90624, + "Room": 103 + }, + { + "X": 52736, + "Y": 30208, + "Z": 85504, + "Room": 107 + }, + { + "X": 50688, + "Y": 27904, + "Z": 82432, + "Room": 109 + }, + { + "X": 47616, + "Y": 27520, + "Z": 82432, + "Room": 110, + "Validated": false + }, + { + "X": 50688, + "Y": 27904, + "Z": 96768, + "Room": 117 + }, + { + "X": 42496, + "Y": 27904, + "Z": 84480, + "Room": 153, + "KeyItemsLow": "10590" + }, + { + "X": 42496, + "Y": 27904, + "Z": 84224, + "Room": 153, + "KeyItemsLow": "10590", + "RequiresReturnPath": true + }, + { + "X": 43520, + "Y": 27648, + "Z": 84480, + "Room": 93 + }, + { + "X": 46592, + "Y": 27648, + "Z": 83456, + "Room": 133 + }, + { + "X": 45568, + "Y": 25344, + "Z": 84480, + "Room": 94 + }, + { + "X": 43520, + "Y": 25728, + "Z": 84480, + "Room": 92 + }, + { + "X": 43520, + "Y": 25728, + "Z": 86528, + "Room": 96 + }, + { + "X": 43520, + "Y": 24064, + "Z": 86528, + "Room": 97 + }, + { + "X": 41472, + "Y": 22272, + "Z": 80384, + "Room": 150, + "Validated": false + }, + { + "X": 34304, + "Y": 22272, + "Z": 77312, + "Room": 156, + "Validated": false + }, + { + "X": 44544, + "Y": 24064, + "Z": 86528, + "Room": 101 + }, + { + "X": 43520, + "Y": 22272, + "Z": 92672, + "Room": 159, + "Validated": false + }, + { + "X": 36352, + "Y": 30464, + "Z": 88576, + "Room": 115 + }, + { + "X": 30208, + "Y": 31232, + "Z": 88576, + "Room": 116 + }, + { + "X": 28160, + "Y": 30848, + "Z": 78336, + "Room": 118 + }, + { + "X": 24064, + "Y": 30208, + "Z": 78336, + "Room": 119 + }, + { + "X": 24064, + "Y": 26880, + "Z": 72192, + "Room": 108 + }, + { + "X": 26112, + "Y": 26496, + "Z": 72192, + "Room": 104 + }, + { + "X": 25088, + "Y": 26368, + "Z": 76288, + "Room": 124 + }, + { + "X": 23040, + "Y": 26368, + "Z": 76288, + "Room": 122 + }, + { + "X": 25088, + "Y": 26368, + "Z": 69120, + "Room": 125 + }, + { + "X": 25088, + "Y": 23808, + "Z": 71168, + "Room": 132 + }, + { + "X": 20992, + "Y": 21376, + "Z": 70144, + "Room": 123, + "Validated": false + }, + { + "X": 20992, + "Y": 23808, + "Z": 76288, + "Room": 38 + }, + { + "X": 18944, + "Y": 23808, + "Z": 76288, + "Room": 126 + }, + { + "X": 11776, + "Y": 22272, + "Z": 77312, + "Room": 120, + "Validated": false + }, + { + "X": 16896, + "Y": 25600, + "Z": 76288, + "Room": 127 + }, + { + "X": 10752, + "Y": 26240, + "Z": 73216, + "Room": 24 + }, + { + "X": 10752, + "Y": 26880, + "Z": 77312, + "Room": 82 + } + ], + "TEMPLE.TR2": [ + { + "X": 94720, + "Y": -512, + "Z": 26112, + "Room": 18, + "KeyItemsLow": "11539,11641,11636,11648,11708,11723,11692", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 92672, + "Y": -640, + "Z": 35328, + "Room": 16 + }, + { + "X": 85504, + "Y": 1280, + "Z": 35328, + "Room": 21 + }, + { + "X": 83456, + "Y": 2304, + "Z": 33280, + "Room": 22 + }, + { + "X": 86528, + "Y": 2048, + "Z": 30208, + "Room": 23 + }, + { + "X": 83456, + "Y": 2304, + "Z": 39424, + "Room": 51 + }, + { + "X": 84480, + "Y": 2432, + "Z": 42496, + "Room": 50 + }, + { + "X": 85504, + "Y": 2304, + "Z": 42496, + "Room": 56 + }, + { + "X": 88576, + "Y": 1280, + "Z": 42496, + "Room": 57 + }, + { + "X": 92672, + "Y": 1280, + "Z": 42496, + "Room": 54 + }, + { + "X": 92672, + "Y": 1024, + "Z": 40448, + "Room": 55 + }, + { + "X": 94720, + "Y": 1280, + "Z": 43520, + "Room": 59 + }, + { + "X": 96768, + "Y": 1152, + "Z": 44544, + "Room": 61 + }, + { + "X": 97792, + "Y": 1152, + "Z": 46592, + "Room": 60 + }, + { + "X": 96768, + "Y": 1280, + "Z": 50688, + "Room": 62 + }, + { + "X": 94720, + "Y": 512, + "Z": 52736, + "Room": 63 + }, + { + "X": 93696, + "Y": -384, + "Z": 52736, + "Room": 10 + }, + { + "X": 89600, + "Y": 1408, + "Z": 54784, + "Room": 9, + "Validated": false + }, + { + "X": 85504, + "Y": 2688, + "Z": 56832, + "Room": 8, + "Validated": false + }, + { + "X": 81408, + "Y": -256, + "Z": 58880, + "Room": 46 + }, + { + "X": 81408, + "Y": -256, + "Z": 46592, + "Room": 47 + }, + { + "X": 79360, + "Y": 2304, + "Z": 52736, + "Room": 80 + }, + { + "X": 79360, + "Y": -256, + "Z": 45568, + "Room": 44, + "KeyItemsLow": "11539,11641", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 76288, + "Y": -256, + "Z": 46592, + "Room": 35 + }, + { + "X": 77312, + "Y": 0, + "Z": 48640, + "Room": 48 + }, + { + "X": 77312, + "Y": -640, + "Z": 58880, + "Room": 0 + }, + { + "X": 76288, + "Y": -1920, + "Z": 59904, + "Room": 35 + }, + { + "X": 80384, + "Y": -3072, + "Z": 59904, + "Room": 39 + }, + { + "X": 80384, + "Y": -3072, + "Z": 57856, + "Room": 49 + }, + { + "X": 76288, + "Y": -3584, + "Z": 60928, + "Room": 36 + }, + { + "X": 77312, + "Y": -5760, + "Z": 60928, + "Room": 40, + "Validated": false + }, + { + "X": 68096, + "Y": -5632, + "Z": 59904, + "Room": 2, + "Validated": false + }, + { + "X": 67072, + "Y": -5760, + "Z": 58880, + "Room": 34, + "Validated": false + }, + { + "X": 67072, + "Y": -9728, + "Z": 57856, + "Room": 33, + "Validated": false + }, + { + "X": 77312, + "Y": -3584, + "Z": 45568, + "Room": 38, + "Range": "Medium" + }, + { + "X": 78336, + "Y": -5760, + "Z": 45568, + "Room": 6 + }, + { + "X": 77312, + "Y": -3328, + "Z": 44544, + "Room": 43, + "KeyItemsHigh": "11539,11641", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": -3328, + "Z": 44544, + "Room": 7 + }, + { + "X": 82432, + "Y": -3328, + "Z": 43520, + "Room": 52 + }, + { + "X": 82432, + "Y": -3328, + "Z": 40448, + "Room": 53 + }, + { + "X": 82432, + "Y": -3584, + "Z": 37376, + "Room": 12 + }, + { + "X": 84480, + "Y": -3200, + "Z": 33280, + "Room": 25 + }, + { + "X": 86528, + "Y": -3328, + "Z": 33280, + "Room": 19 + }, + { + "X": 89600, + "Y": -3328, + "Z": 37376, + "Room": 17 + }, + { + "X": 83456, + "Y": -3072, + "Z": 24064, + "Room": 67 + }, + { + "X": 83456, + "Y": -3840, + "Z": 23040, + "Room": 69 + }, + { + "X": 78336, + "Y": -3328, + "Z": 24064, + "Room": 68 + }, + { + "X": 77312, + "Y": -3072, + "Z": 24064, + "Room": 70 + }, + { + "X": 75264, + "Y": -1024, + "Z": 25088, + "Room": 24 + }, + { + "X": 78336, + "Y": 1408, + "Z": 27136, + "Room": 31 + }, + { + "X": 79360, + "Y": -128, + "Z": 24064, + "Room": 66 + }, + { + "X": 82432, + "Y": -128, + "Z": 23040, + "Room": 65 + }, + { + "X": 75264, + "Y": -3072, + "Z": 27136, + "Room": 27 + }, + { + "X": 81408, + "Y": -6912, + "Z": 34304, + "Room": 28, + "Validated": false + }, + { + "X": 82432, + "Y": -6016, + "Z": 29184, + "Room": 26, + "Validated": false + }, + { + "X": 73216, + "Y": -3072, + "Z": 29184, + "Room": 29, + "KeyItemsLow": "11636,11648", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 72192, + "Y": -2944, + "Z": 31232, + "Room": 30 + }, + { + "X": 72192, + "Y": -768, + "Z": 35328, + "Room": 71 + }, + { + "X": 69120, + "Y": -768, + "Z": 37376, + "Room": 75 + }, + { + "X": 67072, + "Y": -768, + "Z": 38400, + "Room": 72 + }, + { + "X": 65024, + "Y": -512, + "Z": 38400, + "Room": 73 + }, + { + "X": 65024, + "Y": -256, + "Z": 39424, + "Room": 74 + }, + { + "X": 65024, + "Y": 3456, + "Z": 44544, + "Room": 76 + }, + { + "X": 65024, + "Y": 7168, + "Z": 48640, + "Room": 77, + "KeyItemsLow": "11539" + }, + { + "X": 64768, + "Y": 7168, + "Z": 48640, + "Room": 77, + "KeyItemsLow": "11539", + "Range": "Medium" + }, + { + "X": 64768, + "Y": 7168, + "Z": 48896, + "Room": 77, + "KeyItemsLow": "11539,11641", + "Range": "Large" + }, + { + "X": 64256, + "Y": 7168, + "Z": 48640, + "Room": 77, + "KeyItemsLow": "11539,11641", + "RequiresReturnPath": true + }, + { + "X": 64256, + "Y": 7168, + "Z": 48384, + "Room": 77, + "KeyItemsLow": "11539,11641,11708,11723,11692", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 7168, + "Z": 48384, + "Room": 77, + "KeyItemsLow": "11636,11648", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 7168, + "Z": 52736, + "Room": 79 + }, + { + "X": 67072, + "Y": -256, + "Z": 48640, + "Room": 224, + "RoomType": "ReturnPath" + }, + { + "X": 61952, + "Y": 7168, + "Z": 53760, + "Room": 81 + }, + { + "X": 65024, + "Y": 5120, + "Z": 57856, + "Room": 83 + }, + { + "X": 59904, + "Y": 5120, + "Z": 54784, + "Room": 84 + }, + { + "X": 59904, + "Y": 7168, + "Z": 55808, + "Room": 82 + }, + { + "X": 58112, + "Y": 6912, + "Z": 52992, + "Room": 202, + "KeyItemsHigh": "11539", + "KeyItemsLow": "11641" + }, + { + "X": 58112, + "Y": 6912, + "Z": 52736, + "Room": 202, + "KeyItemsLow": "11641", + "Range": "Medium" + }, + { + "X": 58112, + "Y": 6912, + "Z": 52480, + "Room": 202, + "KeyItemsHigh": "11648", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": 5632, + "Z": 51712, + "Room": 89 + }, + { + "X": 52736, + "Y": 6912, + "Z": 50688, + "Room": 190 + }, + { + "X": 51712, + "Y": 6912, + "Z": 48640, + "Room": 188 + }, + { + "X": 47616, + "Y": 6912, + "Z": 48640, + "Room": 189 + }, + { + "X": 48640, + "Y": 7936, + "Z": 45568, + "Room": 191 + }, + { + "X": 49664, + "Y": 6912, + "Z": 43520, + "Room": 187 + }, + { + "X": 49664, + "Y": 6912, + "Z": 40448, + "Room": 169 + }, + { + "X": 49664, + "Y": 8960, + "Z": 36352, + "Room": 171 + }, + { + "X": 49664, + "Y": 6656, + "Z": 32256, + "Room": 170 + }, + { + "X": 49664, + "Y": 8960, + "Z": 31232, + "Room": 172, + "KeyItemsHigh": "11539", + "Range": "Medium" + }, + { + "X": 49664, + "Y": 8960, + "Z": 23040, + "Room": 173 + }, + { + "X": 52736, + "Y": 6656, + "Z": 20992, + "Room": 174 + }, + { + "X": 52736, + "Y": 4608, + "Z": 19968, + "Room": 175 + }, + { + "X": 50688, + "Y": 1280, + "Z": 23040, + "Room": 177 + }, + { + "X": 45568, + "Y": 1664, + "Z": 19968, + "Room": 176 + }, + { + "X": 39424, + "Y": 3456, + "Z": 18944, + "Room": 178 + }, + { + "X": 41472, + "Y": 3840, + "Z": 19968, + "Room": 181 + }, + { + "X": 44544, + "Y": 3840, + "Z": 18944, + "Room": 182 + }, + { + "X": 45568, + "Y": 3840, + "Z": 15872, + "Room": 183 + }, + { + "X": 49664, + "Y": 3840, + "Z": 15872, + "Room": 184 + }, + { + "X": 37376, + "Y": 1024, + "Z": 20992, + "Room": 180 + }, + { + "X": 33280, + "Y": 1024, + "Z": 22016, + "Room": 185 + }, + { + "X": 33280, + "Y": 1024, + "Z": 26112, + "Room": 200 + }, + { + "X": 41472, + "Y": 2560, + "Z": 27136, + "Room": 201 + }, + { + "X": 49664, + "Y": 6656, + "Z": 27136, + "Room": 203 + }, + { + "X": 46592, + "Y": 8448, + "Z": 46592, + "Room": 192 + }, + { + "X": 57600, + "Y": 8448, + "Z": 61952, + "Room": 85, + "KeyItemsHigh": "11641" + }, + { + "X": 57856, + "Y": 8448, + "Z": 61952, + "Room": 85, + "KeyItemsHigh": "11641", + "Range": "Medium" + }, + { + "X": 58112, + "Y": 8448, + "Z": 61952, + "Room": 85, + "KeyItemsLow": "11648", + "RequiresReturnPath": true + }, + { + "X": 59904, + "Y": 8192, + "Z": 62976, + "Room": 87 + }, + { + "X": 61952, + "Y": 8192, + "Z": 64000, + "Room": 88 + }, + { + "X": 57856, + "Y": 6912, + "Z": 63744, + "Room": 90 + }, + { + "X": 57600, + "Y": 6912, + "Z": 63744, + "Room": 90, + "KeyItemsHigh": "11539,11641", + "Range": "Large" + }, + { + "X": 57600, + "Y": 6912, + "Z": 64000, + "Room": 90, + "KeyItemsHigh": "11636", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": 6784, + "Z": 73216, + "Room": 97 + }, + { + "X": 45568, + "Y": 4608, + "Z": 75264, + "Room": 98 + }, + { + "X": 50688, + "Y": 4864, + "Z": 73216, + "Room": 99 + }, + { + "X": 54784, + "Y": 4864, + "Z": 73216, + "Room": 100 + }, + { + "X": 57856, + "Y": 4864, + "Z": 74240, + "Room": 101 + }, + { + "X": 57856, + "Y": 4864, + "Z": 76288, + "Room": 105 + }, + { + "X": 57856, + "Y": 4864, + "Z": 78336, + "Room": 106 + }, + { + "X": 57856, + "Y": 4864, + "Z": 79360, + "Room": 107 + }, + { + "X": 57856, + "Y": 4864, + "Z": 81408, + "Room": 103 + }, + { + "X": 57856, + "Y": 4608, + "Z": 85504, + "Room": 104 + }, + { + "X": 57856, + "Y": 3840, + "Z": 88576, + "Room": 109 + }, + { + "X": 58880, + "Y": 3584, + "Z": 91648, + "Room": 118 + }, + { + "X": 60928, + "Y": 3584, + "Z": 91648, + "Room": 110 + }, + { + "X": 59904, + "Y": 3584, + "Z": 92672, + "Room": 121 + }, + { + "X": 59904, + "Y": 3584, + "Z": 95744, + "Room": 112 + }, + { + "X": 58880, + "Y": 3584, + "Z": 94720, + "Room": 119 + }, + { + "X": 55808, + "Y": 3840, + "Z": 95744, + "Room": 111 + }, + { + "X": 56832, + "Y": 3584, + "Z": 93696, + "Room": 120 + }, + { + "X": 59904, + "Y": 1280, + "Z": 92672, + "Room": 126 + }, + { + "X": 59904, + "Y": 1280, + "Z": 91648, + "Room": 122 + }, + { + "X": 56832, + "Y": 1280, + "Z": 92672, + "Room": 125 + }, + { + "X": 56832, + "Y": 1280, + "Z": 94720, + "Room": 123 + }, + { + "X": 55808, + "Y": -1536, + "Z": 92672, + "Room": 14 + }, + { + "X": 59904, + "Y": 1536, + "Z": 94720, + "Room": 123 + }, + { + "X": 58880, + "Y": 7168, + "Z": 92672, + "Room": 124, + "Validated": false + }, + { + "X": 56832, + "Y": 7168, + "Z": 92672, + "Room": 128, + "Validated": false + }, + { + "X": 54784, + "Y": 6912, + "Z": 93696, + "Room": 127, + "Validated": false + }, + { + "X": 50688, + "Y": 7168, + "Z": 93696, + "Room": 137, + "Validated": false + }, + { + "X": 50688, + "Y": 7168, + "Z": 94720, + "Room": 138, + "Validated": false + }, + { + "X": 52736, + "Y": 5120, + "Z": 94720, + "Room": 136, + "KeyItemsLow": "11539" + }, + { + "X": 52736, + "Y": 5120, + "Z": 94464, + "Room": 136, + "KeyItemsLow": "11539", + "Range": "Medium" + }, + { + "X": 52480, + "Y": 5120, + "Z": 94464, + "Room": 136, + "KeyItemsLow": "11539", + "Range": "Large" + }, + { + "X": 52480, + "Y": 5120, + "Z": 94976, + "Room": 136, + "KeyItemsLow": "11641", + "Range": "Medium" + }, + { + "X": 52992, + "Y": 5120, + "Z": 94976, + "Room": 136, + "KeyItemsLow": "11641", + "Range": "Large" + }, + { + "X": 51712, + "Y": 5120, + "Z": 93696, + "Room": 135 + }, + { + "X": 50688, + "Y": 5376, + "Z": 93696, + "Room": 132 + }, + { + "X": 50688, + "Y": 5376, + "Z": 94720, + "Room": 131 + }, + { + "X": 46592, + "Y": 7168, + "Z": 96768, + "Room": 130, + "Validated": false + }, + { + "X": 45568, + "Y": 7168, + "Z": 92672, + "Room": 129, + "Validated": false + }, + { + "X": 40448, + "Y": 7168, + "Z": 96768, + "Room": 142, + "Validated": false + }, + { + "X": 40448, + "Y": 7168, + "Z": 93696, + "Room": 143, + "Validated": false + }, + { + "X": 46592, + "Y": 4608, + "Z": 95744, + "Room": 133 + }, + { + "X": 46592, + "Y": 4608, + "Z": 92672, + "Room": 134 + }, + { + "X": 38400, + "Y": 5120, + "Z": 92672, + "Room": 141 + }, + { + "X": 38400, + "Y": 5120, + "Z": 95744, + "Room": 140 + }, + { + "X": 35328, + "Y": 4864, + "Z": 91648, + "Room": 144 + }, + { + "X": 35328, + "Y": 4864, + "Z": 93696, + "Room": 145 + }, + { + "X": 34304, + "Y": 4864, + "Z": 95744, + "Room": 146 + }, + { + "X": 35328, + "Y": 4864, + "Z": 89600, + "Room": 147 + }, + { + "X": 55808, + "Y": 2176, + "Z": 92672, + "Room": 150, + "KeyItemsHigh": "11539" + }, + { + "X": 55808, + "Y": 2165, + "Z": 92928, + "Room": 150, + "KeyItemsHigh": "11539", + "Range": "Medium" + }, + { + "X": 55552, + "Y": 2240, + "Z": 92928, + "Room": 150, + "KeyItemsHigh": "11539", + "Range": "Large" + }, + { + "X": 55552, + "Y": 2241, + "Z": 92416, + "Room": 150, + "KeyItemsHigh": "11641", + "Range": "Medium" + }, + { + "X": 55808, + "Y": 2175, + "Z": 92416, + "Room": 150, + "KeyItemsHigh": "11641", + "Range": "Large" + }, + { + "X": 55808, + "Y": 1920, + "Z": 94720, + "Room": 151, + "Validated": false + }, + { + "X": 55808, + "Y": 2048, + "Z": 91648, + "Room": 5 + }, + { + "X": 54784, + "Y": 2048, + "Z": 90624, + "Room": 152 + }, + { + "X": 54784, + "Y": 1792, + "Z": 87552, + "Room": 161 + }, + { + "X": 55808, + "Y": 4608, + "Z": 85504, + "Room": 225, + "RoomType": "ReturnPath" + }, + { + "X": 54784, + "Y": 1280, + "Z": 82432, + "Room": 162 + }, + { + "X": 49664, + "Y": 256, + "Z": 82432, + "Room": 163 + }, + { + "X": 48640, + "Y": 256, + "Z": 80384, + "Room": 164 + }, + { + "X": 48640, + "Y": 256, + "Z": 74240, + "Room": 166 + }, + { + "X": 48640, + "Y": 256, + "Z": 71168, + "Room": 168 + }, + { + "X": 49664, + "Y": 256, + "Z": 70144, + "Room": 167 + }, + { + "X": 50688, + "Y": 256, + "Z": 75264, + "Room": 165 + }, + { + "X": 48640, + "Y": -512, + "Z": 62976, + "Room": 197 + }, + { + "X": 46592, + "Y": -512, + "Z": 62976, + "Room": 226, + "RoomType": "ReturnPath" + }, + { + "X": 46592, + "Y": 8960, + "Z": 64000, + "Room": 227, + "RoomType": "ReturnPath" + }, + { + "X": 47616, + "Y": 8960, + "Z": 64000, + "Room": 228, + "RoomType": "ReturnPath" + }, + { + "X": 52736, + "Y": -512, + "Z": 58880, + "Room": 198 + }, + { + "X": 54784, + "Y": 6912, + "Z": 61184, + "Room": 193, + "KeyItemsHigh": "11539,11641", + "RequiresReturnPath": true + }, + { + "X": 55040, + "Y": 6912, + "Z": 61184, + "Room": 193, + "KeyItemsHigh": "11539,11641", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 55040, + "Y": 6912, + "Z": 60928, + "Room": 193, + "KeyItemsHigh": "11539,11641", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": 3584, + "Z": 58880, + "Room": 194, + "KeyItemsLow": "11636,11708,11723,11692", + "RequiresReturnPath": true + }, + { + "X": 51712, + "Y": 3584, + "Z": 58880, + "Room": 195 + }, + { + "X": 48640, + "Y": 1280, + "Z": 59904, + "Room": 196 + }, + { + "X": 47616, + "Y": 1280, + "Z": 59904, + "Room": 229, + "RoomType": "ReturnPath" + }, + { + "X": 45568, + "Y": 3584, + "Z": 58624, + "Room": 216, + "KeyItemsLow": "11648,11636" + }, + { + "X": 45568, + "Y": 3584, + "Z": 58880, + "Room": 216, + "KeyItemsLow": "11648,11636", + "Range": "Medium" + }, + { + "X": 45568, + "Y": 3584, + "Z": 59136, + "Room": 216, + "KeyItemsLow": "11648,11636", + "Range": "Large" + }, + { + "X": 45568, + "Y": 3584, + "Z": 61952, + "Room": 218 + }, + { + "X": 42496, + "Y": 3584, + "Z": 61952, + "Room": 204 + }, + { + "X": 43520, + "Y": 3584, + "Z": 54784, + "Room": 217 + }, + { + "X": 42496, + "Y": 4608, + "Z": 57856, + "Room": 219 + }, + { + "X": 37376, + "Y": 3584, + "Z": 58880, + "Room": 206 + }, + { + "X": 33280, + "Y": 1536, + "Z": 59904, + "Room": 207 + }, + { + "X": 41472, + "Y": 1536, + "Z": 58880, + "Room": 205 + }, + { + "X": 43520, + "Y": 1536, + "Z": 59904, + "Room": 223 + }, + { + "X": 32256, + "Y": 4352, + "Z": 58624, + "Room": 208, + "KeyItemsHigh": "11648,11636" + }, + { + "X": 32256, + "Y": 4352, + "Z": 58880, + "Room": 208, + "KeyItemsHigh": "11648,11636", + "Range": "Medium" + }, + { + "X": 32256, + "Y": 4352, + "Z": 59136, + "Room": 208, + "KeyItemsHigh": "11648,11636", + "Range": "Large" + }, + { + "X": 32000, + "Y": 4352, + "Z": 58624, + "Room": 208, + "KeyItemsHigh": "11636,11648", + "RequiresReturnPath": true + }, + { + "X": 32000, + "Y": 4352, + "Z": 58880, + "Room": 208, + "KeyItemsHigh": "11636,11648", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 32000, + "Y": 4352, + "Z": 59136, + "Room": 208, + "KeyItemsHigh": "11636,11648", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 4352, + "Z": 61952, + "Room": 209 + }, + { + "X": 30208, + "Y": 4352, + "Z": 54784, + "Room": 210 + }, + { + "X": 27136, + "Y": 5376, + "Z": 54528, + "Room": 213, + "KeyItemsLow": "11708,11723,11692" + }, + { + "X": 27136, + "Y": 5376, + "Z": 54784, + "Room": 213, + "KeyItemsLow": "11708,11723,11692", + "Range": "Medium" + }, + { + "X": 27136, + "Y": 5376, + "Z": 55040, + "Room": 213, + "KeyItemsLow": "11708,11723,11692", + "Range": "Large" + }, + { + "X": 22016, + "Y": 4352, + "Z": 52736, + "Room": 211 + }, + { + "X": 15872, + "Y": 4352, + "Z": 50688, + "Room": 215 + }, + { + "X": 14848, + "Y": 5632, + "Z": 49664, + "Room": 222 + }, + { + "X": 14848, + "Y": 5632, + "Z": 51712, + "Room": 221 + }, + { + "X": 10752, + "Y": 4096, + "Z": 65024, + "Room": 212 + }, + { + "X": 16896, + "Y": 6912, + "Z": 69120, + "Room": 220 + }, + { + "X": 11008, + "Y": 2304, + "Z": 69888, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692" + }, + { + "X": 10752, + "Y": 2304, + "Z": 69888, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692", + "Range": "Medium" + }, + { + "X": 10496, + "Y": 2304, + "Z": 69888, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692", + "Range": "Large" + }, + { + "X": 10496, + "Y": 2304, + "Z": 70144, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692", + "RequiresReturnPath": true + }, + { + "X": 10752, + "Y": 2304, + "Z": 70144, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 11008, + "Y": 2304, + "Z": 70144, + "Room": 214, + "KeyItemsHigh": "11708,11723,11692", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "QUADCHAS.TR2": [ + { + "X": 84480, + "Y": -256, + "Z": 58880, + "Room": 1, + "KeyItemsLow": "12258,12425", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 84480, + "Y": 2176, + "Z": 55808, + "Room": 5, + "Validated": false + }, + { + "X": 78336, + "Y": -2048, + "Z": 54784, + "Room": 2 + }, + { + "X": 79360, + "Y": -4864, + "Z": 52736, + "Room": 14, + "Validated": false + }, + { + "X": 86528, + "Y": -4352, + "Z": 60928, + "Room": 12, + "Validated": false + }, + { + "X": 89600, + "Y": -4736, + "Z": 54784, + "Room": 13, + "Validated": false + }, + { + "X": 83456, + "Y": -256, + "Z": 49664, + "Room": 10 + }, + { + "X": 80384, + "Y": 768, + "Z": 47616, + "Room": 31 + }, + { + "X": 78336, + "Y": 768, + "Z": 40448, + "Room": 34 + }, + { + "X": 81408, + "Y": 768, + "Z": 37376, + "Room": 35 + }, + { + "X": 84480, + "Y": 768, + "Z": 36352, + "Room": 66 + }, + { + "X": 86528, + "Y": 768, + "Z": 38400, + "Room": 18 + }, + { + "X": 84480, + "Y": 768, + "Z": 34304, + "Room": 175 + }, + { + "X": 83456, + "Y": -1280, + "Z": 34304, + "Room": 176 + }, + { + "X": 84480, + "Y": -256, + "Z": 60928, + "Room": 7 + }, + { + "X": 89600, + "Y": -2048, + "Z": 61952, + "Room": 124 + }, + { + "X": 90624, + "Y": 768, + "Z": 48640, + "Room": 10 + }, + { + "X": 91648, + "Y": 1152, + "Z": 47616, + "Room": 70 + }, + { + "X": 94720, + "Y": 1280, + "Z": 45568, + "Room": 71 + }, + { + "X": 94720, + "Y": 1280, + "Z": 42496, + "Room": 39 + }, + { + "X": 94720, + "Y": 1280, + "Z": 40448, + "Room": 21 + }, + { + "X": 94720, + "Y": 6656, + "Z": 38400, + "Room": 28, + "Validated": false + }, + { + "X": 92672, + "Y": 640, + "Z": 34304, + "Room": 22 + }, + { + "X": 89600, + "Y": 6912, + "Z": 31232, + "Room": 26 + }, + { + "X": 91648, + "Y": 512, + "Z": 29184, + "Room": 40, + "KeyItemsLow": "12258,12425", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 93696, + "Y": 384, + "Z": 27136, + "Room": 41 + }, + { + "X": 93696, + "Y": 128, + "Z": 24064, + "Room": 42 + }, + { + "X": 90624, + "Y": -2688, + "Z": 20992, + "Room": 45 + }, + { + "X": 94720, + "Y": -2688, + "Z": 20992, + "Room": 44 + }, + { + "X": 97792, + "Y": -4096, + "Z": 16896, + "Room": 46 + }, + { + "X": 93696, + "Y": -5376, + "Z": 13824, + "Room": 47 + }, + { + "X": 86528, + "Y": -5376, + "Z": 13824, + "Room": 48 + }, + { + "X": 84480, + "Y": -2560, + "Z": 12800, + "Room": 49 + }, + { + "X": 88576, + "Y": -2560, + "Z": 13824, + "Room": 43 + }, + { + "X": 80384, + "Y": -1536, + "Z": 13824, + "Room": 50 + }, + { + "X": 78336, + "Y": -128, + "Z": 14848, + "Room": 51 + }, + { + "X": 77312, + "Y": 640, + "Z": 18944, + "Room": 25 + }, + { + "X": 77312, + "Y": 896, + "Z": 24064, + "Room": 57, + "KeyItemsLow": "12258,12425", + "Range": "Medium" + }, + { + "X": 77056, + "Y": 896, + "Z": 24064, + "Room": 57, + "KeyItemsLow": "12258,12425", + "Range": "Large" + }, + { + "X": 74240, + "Y": 512, + "Z": 26112, + "Room": 58 + }, + { + "X": 68096, + "Y": 512, + "Z": 23040, + "Room": 27 + }, + { + "X": 78336, + "Y": 1792, + "Z": 27136, + "Room": 16 + }, + { + "X": 78336, + "Y": 3072, + "Z": 30208, + "Room": 75 + }, + { + "X": 76288, + "Y": 2304, + "Z": 34304, + "Room": 76 + }, + { + "X": 72192, + "Y": 512, + "Z": 35328, + "Room": 59 + }, + { + "X": 75264, + "Y": -640, + "Z": 33280, + "Room": 72 + }, + { + "X": 77312, + "Y": 0, + "Z": 32256, + "Room": 15 + }, + { + "X": 68096, + "Y": 512, + "Z": 30208, + "Room": 60 + }, + { + "X": 69120, + "Y": 768, + "Z": 37376, + "Room": 63, + "KeyItemsLow": "12258,12425" + }, + { + "X": 69120, + "Y": 768, + "Z": 37632, + "Room": 63, + "KeyItemsLow": "12258,12425", + "RequiresReturnPath": true + }, + { + "X": 67072, + "Y": 1024, + "Z": 40448, + "Room": 77 + }, + { + "X": 76288, + "Y": 1280, + "Z": 36352, + "Room": 81 + }, + { + "X": 74240, + "Y": 2048, + "Z": 37376, + "Room": 82 + }, + { + "X": 72192, + "Y": 1280, + "Z": 39424, + "Room": 78 + }, + { + "X": 72192, + "Y": 1536, + "Z": 41472, + "Room": 79 + }, + { + "X": 70144, + "Y": 1536, + "Z": 44544, + "Room": 80 + }, + { + "X": 64000, + "Y": 1536, + "Z": 44544, + "Room": 83 + }, + { + "X": 60928, + "Y": -512, + "Z": 45568, + "Room": 84 + }, + { + "X": 60928, + "Y": -768, + "Z": 39424, + "Room": 85 + }, + { + "X": 62976, + "Y": -2304, + "Z": 34304, + "Room": 86 + }, + { + "X": 64000, + "Y": -2560, + "Z": 42496, + "Room": 87 + }, + { + "X": 57856, + "Y": -2816, + "Z": 44544, + "Room": 91 + }, + { + "X": 54784, + "Y": -2816, + "Z": 37376, + "Room": 90, + "Validated": false + }, + { + "X": 51712, + "Y": -2816, + "Z": 40448, + "Room": 95 + }, + { + "X": 48640, + "Y": -2560, + "Z": 43520, + "Room": 98 + }, + { + "X": 46592, + "Y": -512, + "Z": 42496, + "Room": 100 + }, + { + "X": 47616, + "Y": -512, + "Z": 39424, + "Room": 101 + }, + { + "X": 49664, + "Y": -512, + "Z": 37376, + "Room": 102 + }, + { + "X": 46592, + "Y": -2560, + "Z": 39424, + "Room": 55 + }, + { + "X": 49664, + "Y": -2304, + "Z": 37376, + "Room": 99 + }, + { + "X": 51712, + "Y": -256, + "Z": 41472, + "Room": 94, + "KeyItemsHigh": "12258,12425" + }, + { + "X": 51712, + "Y": -256, + "Z": 41728, + "Room": 94, + "KeyItemsHigh": "12258,12425", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": -256, + "Z": 42496, + "Room": 89 + }, + { + "X": 55808, + "Y": -768, + "Z": 39424, + "Room": 88 + }, + { + "X": 48640, + "Y": -256, + "Z": 46592, + "Room": 96 + }, + { + "X": 42496, + "Y": 0, + "Z": 48640, + "Room": 148 + }, + { + "X": 44544, + "Y": 0, + "Z": 50688, + "Room": 149 + }, + { + "X": 50688, + "Y": 768, + "Z": 55808, + "Room": 30, + "KeyItemsHigh": "12258,12425", + "Range": "Medium", + "Validated": false + }, + { + "X": 50944, + "Y": 768, + "Z": 55808, + "Room": 30, + "KeyItemsHigh": "12258,12425", + "Range": "Large", + "Validated": false + }, + { + "X": 55808, + "Y": 768, + "Z": 65024, + "Room": 23, + "Validated": false + }, + { + "X": 79360, + "Y": -1792, + "Z": 11776, + "Room": 52 + }, + { + "X": 74240, + "Y": -2432, + "Z": 7680, + "Room": 103 + }, + { + "X": 68096, + "Y": 2560, + "Z": 8704, + "Room": 106, + "Validated": false + }, + { + "X": 66048, + "Y": 2560, + "Z": 8704, + "Room": 105, + "Validated": false + }, + { + "X": 65024, + "Y": -3712, + "Z": 8704, + "Room": 104 + }, + { + "X": 61952, + "Y": 2304, + "Z": 6656, + "Room": 107, + "Validated": false + }, + { + "X": 60928, + "Y": -5248, + "Z": 9728, + "Room": 110 + }, + { + "X": 60928, + "Y": -6400, + "Z": 17920, + "Room": 112 + }, + { + "X": 58880, + "Y": -4608, + "Z": 23040, + "Room": 113 + }, + { + "X": 56832, + "Y": -5120, + "Z": 26112, + "Room": 125 + }, + { + "X": 51712, + "Y": -2816, + "Z": 22016, + "Room": 114 + }, + { + "X": 45568, + "Y": -3072, + "Z": 22016, + "Room": 120, + "KeyItemsHigh": "12258,12425", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -2944, + "Z": 26112, + "Room": 121 + }, + { + "X": 38400, + "Y": -2688, + "Z": 29184, + "Room": 127 + }, + { + "X": 31232, + "Y": -2560, + "Z": 32256, + "Room": 129 + }, + { + "X": 34304, + "Y": -2560, + "Z": 35328, + "Room": 130 + }, + { + "X": 31232, + "Y": -2560, + "Z": 38400, + "Room": 126 + }, + { + "X": 30208, + "Y": -5120, + "Z": 31232, + "Room": 128 + }, + { + "X": 30208, + "Y": -5120, + "Z": 32256, + "Room": 132 + }, + { + "X": 36352, + "Y": -5632, + "Z": 33280, + "Room": 138 + }, + { + "X": 43520, + "Y": -2560, + "Z": 33280, + "Room": 137 + }, + { + "X": 34304, + "Y": -5120, + "Z": 36352, + "Room": 133 + }, + { + "X": 30208, + "Y": -5376, + "Z": 38400, + "Room": 131 + }, + { + "X": 39424, + "Y": -5376, + "Z": 41472, + "Room": 139 + }, + { + "X": 40448, + "Y": -3200, + "Z": 45568, + "Room": 141 + }, + { + "X": 34304, + "Y": -5632, + "Z": 46592, + "Room": 154 + }, + { + "X": 33280, + "Y": -5376, + "Z": 48640, + "Room": 155 + }, + { + "X": 33280, + "Y": -3584, + "Z": 50688, + "Room": 170 + }, + { + "X": 30208, + "Y": -5376, + "Z": 54784, + "Room": 171 + }, + { + "X": 31232, + "Y": -5120, + "Z": 58880, + "Room": 173 + }, + { + "X": 38400, + "Y": -5248, + "Z": 60928, + "Room": 174 + }, + { + "X": 34304, + "Y": 384, + "Z": 60928, + "Room": 172 + }, + { + "X": 38400, + "Y": 512, + "Z": 61952, + "Room": 169 + }, + { + "X": 42496, + "Y": 384, + "Z": 60928, + "Room": 159 + }, + { + "X": 42496, + "Y": 768, + "Z": 64000, + "Room": 156 + }, + { + "X": 41472, + "Y": 896, + "Z": 70144, + "Room": 160 + }, + { + "X": 40448, + "Y": -3200, + "Z": 74240, + "Room": 161, + "Validated": false + }, + { + "X": 42496, + "Y": 4736, + "Z": 79360, + "Room": 162 + }, + { + "X": 47616, + "Y": 4608, + "Z": 75264, + "Room": 122 + }, + { + "X": 43520, + "Y": 10240, + "Z": 77312, + "Room": 166 + }, + { + "X": 44544, + "Y": 8320, + "Z": 72192, + "Room": 163 + }, + { + "X": 44544, + "Y": 8192, + "Z": 70144, + "Room": 165 + }, + { + "X": 43520, + "Y": 5888, + "Z": 69120, + "Room": 164 + }, + { + "X": 43520, + "Y": 5888, + "Z": 68096, + "Room": 167, + "KeyItemsHigh": "12258,12425", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "TONYBOSS.TR2": [ + { + "X": 3584, + "Y": -15360, + "Z": 47616, + "Room": 20 + }, + { + "X": 2560, + "Y": -17408, + "Z": 47616, + "Room": 20, + "Validated": false + }, + { + "X": 4608, + "Y": -15360, + "Z": 47616, + "Room": 3 + }, + { + "X": 9728, + "Y": -15360, + "Z": 44544, + "Room": 14 + }, + { + "X": 18944, + "Y": -12288, + "Z": 44544, + "Room": 15 + }, + { + "X": 18944, + "Y": -14848, + "Z": 52736, + "Room": 17 + }, + { + "X": 26112, + "Y": -14848, + "Z": 60928, + "Room": 16 + }, + { + "X": 20992, + "Y": -14848, + "Z": 60928, + "Room": 16 + }, + { + "X": 15872, + "Y": -14848, + "Z": 59904, + "Room": 17 + }, + { + "X": 26112, + "Y": -12800, + "Z": 65024, + "Room": 18 + }, + { + "X": 22016, + "Y": -12544, + "Z": 65024, + "Room": 19 + }, + { + "X": 18944, + "Y": -12032, + "Z": 67072, + "Room": 10 + }, + { + "X": 10752, + "Y": -15360, + "Z": 58880, + "Room": 9 + }, + { + "X": 16896, + "Y": -12032, + "Z": 56832, + "Room": 13 + }, + { + "X": 19968, + "Y": -11008, + "Z": 62976, + "Room": 11 + }, + { + "X": 23040, + "Y": -11008, + "Z": 61952, + "Room": 12 + }, + { + "X": 23040, + "Y": -11008, + "Z": 57856, + "Room": 5 + }, + { + "X": 24064, + "Y": -6912, + "Z": 56832, + "Room": 4 + }, + { + "X": 22016, + "Y": -7296, + "Z": 56832, + "Room": 7, + "Validated": false + }, + { + "X": 32256, + "Y": -6912, + "Z": 56832, + "Room": 6 + }, + { + "X": 37376, + "Y": -6912, + "Z": 55808, + "Room": 8 + }, + { + "X": 40448, + "Y": -4864, + "Z": 52736, + "Room": 24 + }, + { + "X": 47616, + "Y": -256, + "Z": 52736, + "Room": 22 + }, + { + "X": 48640, + "Y": 5120, + "Z": 54784, + "Room": 23, + "Validated": false + } + ], + "SHORE.TR2": [ + { + "X": 19200, + "Y": 2304, + "Z": 13824, + "Room": 7, + "KeyItemsLow": "14300" + }, + { + "X": 18944, + "Y": 2304, + "Z": 13824, + "Room": 7, + "KeyItemsLow": "14300", + "RequiresReturnPath": true + }, + { + "X": 18688, + "Y": 2304, + "Z": 13824, + "Room": 7, + "KeyItemsLow": "14300", + "Range": "Medium" + }, + { + "X": 18688, + "Y": 2304, + "Z": 14080, + "Room": 7, + "KeyItemsLow": "14300,14252,14447,14440", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 18944, + "Y": 2304, + "Z": 14080, + "Room": 7, + "KeyItemsLow": "14300", + "Range": "Large" + }, + { + "X": 19200, + "Y": 2304, + "Z": 14080, + "Room": 7, + "KeyItemsLow": "14300,14252,14447,14440", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 16896, + "Y": 3072, + "Z": 19968, + "Room": 6 + }, + { + "X": 14848, + "Y": -128, + "Z": 25088, + "Room": 3 + }, + { + "X": 23040, + "Y": -640, + "Z": 18944, + "Room": 4, + "Validated": false + }, + { + "X": 20992, + "Y": 0, + "Z": 9728, + "Room": 24, + "Validated": false + }, + { + "X": 19968, + "Y": 2560, + "Z": 9728, + "Room": 25, + "Validated": false + }, + { + "X": 24064, + "Y": 640, + "Z": 33280, + "Room": 172 + }, + { + "X": 24064, + "Y": 0, + "Z": 35328, + "Room": 173 + }, + { + "X": 30208, + "Y": 896, + "Z": 33280, + "Room": 1 + }, + { + "X": 31232, + "Y": -256, + "Z": 35328, + "Room": 0 + }, + { + "X": 19968, + "Y": -256, + "Z": 44544, + "Room": 174 + }, + { + "X": 15872, + "Y": -384, + "Z": 45568, + "Room": 2, + "KeyItemsLow": "14252,14447,14440", + "RequiresReturnPath": true + }, + { + "X": 14848, + "Y": 1024, + "Z": 40448, + "Room": 5 + }, + { + "X": 6656, + "Y": -2816, + "Z": 50688, + "Room": 8 + }, + { + "X": 13824, + "Y": 384, + "Z": 49408, + "Room": 20, + "KeyItemsHigh": "14300" + }, + { + "X": 13824, + "Y": 384, + "Z": 49664, + "Room": 20, + "KeyItemsHigh": "14300", + "Range": "Medium" + }, + { + "X": 13824, + "Y": 384, + "Z": 49920, + "Room": 20, + "KeyItemsHigh": "14300", + "Range": "Large" + }, + { + "X": 16640, + "Y": 2304, + "Z": 50688, + "Room": 67, + "KeyItemsLow": "14252,14447,14440" + }, + { + "X": 16896, + "Y": 2304, + "Z": 50688, + "Room": 67, + "KeyItemsLow": "14252,14447,14440", + "Range": "Medium" + }, + { + "X": 17152, + "Y": 2304, + "Z": 50688, + "Room": 67, + "KeyItemsLow": "14252,14447,14440", + "Range": "Large" + }, + { + "X": 16896, + "Y": 2560, + "Z": 51712, + "Room": 11 + }, + { + "X": 16896, + "Y": 3200, + "Z": 53760, + "Room": 45 + }, + { + "X": 16896, + "Y": 3584, + "Z": 55808, + "Room": 44 + }, + { + "X": 14848, + "Y": 2816, + "Z": 58880, + "Room": 23 + }, + { + "X": 15872, + "Y": 256, + "Z": 61952, + "Room": 22, + "KeyItemsHigh": "14300", + "RequiresReturnPath": true + }, + { + "X": 16896, + "Y": -1280, + "Z": 67072, + "Room": 14 + }, + { + "X": 15872, + "Y": -768, + "Z": 86528, + "Room": 118 + }, + { + "X": 15872, + "Y": -5888, + "Z": 88576, + "Room": 122 + }, + { + "X": 17920, + "Y": -6784, + "Z": 92672, + "Room": 123 + }, + { + "X": 25088, + "Y": -6400, + "Z": 88576, + "Room": 124 + }, + { + "X": 25088, + "Y": -7424, + "Z": 84480, + "Room": 178 + }, + { + "X": 18944, + "Y": -1024, + "Z": 87552, + "Room": 119 + }, + { + "X": 25088, + "Y": -768, + "Z": 89600, + "Room": 120 + }, + { + "X": 25088, + "Y": 896, + "Z": 92672, + "Room": 135, + "KeyItemsHigh": "14300", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 25088, + "Y": 2432, + "Z": 93696, + "Room": 53 + }, + { + "X": 32256, + "Y": 3072, + "Z": 93696, + "Room": 130 + }, + { + "X": 33280, + "Y": 2816, + "Z": 92672, + "Room": 17 + }, + { + "X": 35328, + "Y": 9728, + "Z": 94720, + "Room": 126, + "Validated": false + }, + { + "X": 32256, + "Y": 10240, + "Z": 96768, + "Room": 16, + "Validated": false + }, + { + "X": 31232, + "Y": 10240, + "Z": 96768, + "Room": 21, + "Validated": false + }, + { + "X": 27136, + "Y": 9856, + "Z": 96768, + "Room": 71, + "Validated": false + }, + { + "X": 35328, + "Y": 2560, + "Z": 92672, + "Room": 164 + }, + { + "X": 37376, + "Y": -768, + "Z": 92672, + "Room": 121 + }, + { + "X": 36352, + "Y": -2304, + "Z": 94720, + "Room": 127 + }, + { + "X": 42240, + "Y": -2816, + "Z": 90880, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440" + }, + { + "X": 42240, + "Y": -2816, + "Z": 90624, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440", + "RequiresReturnPath": true + }, + { + "X": 42240, + "Y": -2816, + "Z": 90368, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440", + "Range": "Medium" + }, + { + "X": 42496, + "Y": -2816, + "Z": 90368, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -2816, + "Z": 90624, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440", + "Range": "Large" + }, + { + "X": 42496, + "Y": -2816, + "Z": 90880, + "Room": 134, + "KeyItemsHigh": "14252,14447,14440", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -2560, + "Z": 92672, + "Room": 133 + }, + { + "X": 42496, + "Y": -2176, + "Z": 94720, + "Room": 117 + }, + { + "X": 44544, + "Y": -1408, + "Z": 93696, + "Room": 115 + }, + { + "X": 51712, + "Y": -2048, + "Z": 88576, + "Room": 58 + }, + { + "X": 52736, + "Y": -2048, + "Z": 87552, + "Room": 116 + }, + { + "X": 55808, + "Y": -2048, + "Z": 90624, + "Room": 89 + }, + { + "X": 32256, + "Y": 256, + "Z": 90624, + "Room": 35 + }, + { + "X": 31232, + "Y": 256, + "Z": 90624, + "Room": 52 + }, + { + "X": 8704, + "Y": 768, + "Z": 56832, + "Room": 12, + "KeyItemsHigh": "14300", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 3584, + "Y": 1792, + "Z": 57856, + "Room": 13 + }, + { + "X": 3584, + "Y": -256, + "Z": 65024, + "Room": 138 + }, + { + "X": 4608, + "Y": 4352, + "Z": 67072, + "Room": 63 + }, + { + "X": 4608, + "Y": -5376, + "Z": 65024, + "Room": 62 + }, + { + "X": 8704, + "Y": -4480, + "Z": 73216, + "Room": 139 + }, + { + "X": 3584, + "Y": -5248, + "Z": 82432, + "Room": 62 + }, + { + "X": 9728, + "Y": -6144, + "Z": 81408, + "Room": 60 + }, + { + "X": 10752, + "Y": -6144, + "Z": 80384, + "Room": 66 + }, + { + "X": 12800, + "Y": -6016, + "Z": 79360, + "Room": 39 + }, + { + "X": 13824, + "Y": -7168, + "Z": 76288, + "Room": 15 + }, + { + "X": 19968, + "Y": -6016, + "Z": 79360, + "Room": 64 + }, + { + "X": 20992, + "Y": -6400, + "Z": 79360, + "Room": 65 + }, + { + "X": 22016, + "Y": -6912, + "Z": 81408, + "Room": 77 + }, + { + "X": 25088, + "Y": -7040, + "Z": 81408, + "Room": 38 + }, + { + "X": 29184, + "Y": -6912, + "Z": 81408, + "Room": 41 + }, + { + "X": 30208, + "Y": -6912, + "Z": 81408, + "Room": 42 + }, + { + "X": 32256, + "Y": -4608, + "Z": 81408, + "Room": 132 + }, + { + "X": 32256, + "Y": -4736, + "Z": 82432, + "Room": 131 + }, + { + "X": 33280, + "Y": -6144, + "Z": 81408, + "Room": 128 + }, + { + "X": 34304, + "Y": -6912, + "Z": 81408, + "Room": 43 + }, + { + "X": 35328, + "Y": -6912, + "Z": 81408, + "Room": 40 + }, + { + "X": 37376, + "Y": -5632, + "Z": 79360, + "Room": 68 + }, + { + "X": 39424, + "Y": -3200, + "Z": 79360, + "Room": 59 + }, + { + "X": 44544, + "Y": 0, + "Z": 79360, + "Room": 94 + }, + { + "X": 45568, + "Y": 0, + "Z": 81408, + "Room": 96 + }, + { + "X": 47616, + "Y": 0, + "Z": 83456, + "Room": 111 + }, + { + "X": 46592, + "Y": 0, + "Z": 84480, + "Room": 54 + }, + { + "X": 50688, + "Y": 0, + "Z": 83456, + "Room": 82 + }, + { + "X": 53760, + "Y": 0, + "Z": 83456, + "Room": 112 + }, + { + "X": 55808, + "Y": 0, + "Z": 84480, + "Room": 57 + }, + { + "X": 56832, + "Y": 0, + "Z": 84480, + "Room": 56 + }, + { + "X": 50688, + "Y": 0, + "Z": 82432, + "Room": 36 + }, + { + "X": 53760, + "Y": 0, + "Z": 82432, + "Room": 92 + }, + { + "X": 55808, + "Y": 0, + "Z": 82432, + "Room": 81 + }, + { + "X": 61952, + "Y": 0, + "Z": 82432, + "Room": 88 + }, + { + "X": 68096, + "Y": -896, + "Z": 82432, + "Room": 162 + }, + { + "X": 68096, + "Y": -2048, + "Z": 77312, + "Room": 19 + }, + { + "X": 76288, + "Y": -1792, + "Z": 75264, + "Room": 188 + }, + { + "X": 74240, + "Y": -5120, + "Z": 68096, + "Room": 168, + "Validated": false + }, + { + "X": 55808, + "Y": 0, + "Z": 80384, + "Room": 90 + }, + { + "X": 54784, + "Y": 0, + "Z": 80384, + "Room": 91 + }, + { + "X": 50688, + "Y": 0, + "Z": 80384, + "Room": 95 + }, + { + "X": 48640, + "Y": -256, + "Z": 76288, + "Room": 93 + }, + { + "X": 48640, + "Y": -384, + "Z": 75264, + "Room": 97 + }, + { + "X": 46592, + "Y": -2944, + "Z": 76288, + "Room": 110, + "Validated": false + }, + { + "X": 46592, + "Y": -256, + "Z": 75264, + "Room": 80 + }, + { + "X": 46592, + "Y": -512, + "Z": 72192, + "Room": 49, + "Validated": false + }, + { + "X": 43520, + "Y": -512, + "Z": 72192, + "Room": 78 + }, + { + "X": 42496, + "Y": -512, + "Z": 68096, + "Room": 74 + }, + { + "X": 38400, + "Y": -2176, + "Z": 68096, + "Room": 75 + }, + { + "X": 36352, + "Y": -512, + "Z": 68096, + "Room": 144 + }, + { + "X": 31232, + "Y": -512, + "Z": 71168, + "Room": 146 + }, + { + "X": 31232, + "Y": -512, + "Z": 73216, + "Room": 155 + }, + { + "X": 27136, + "Y": -512, + "Z": 73216, + "Room": 156 + }, + { + "X": 26112, + "Y": -768, + "Z": 73216, + "Room": 145 + }, + { + "X": 26112, + "Y": -768, + "Z": 74240, + "Room": 70 + }, + { + "X": 23040, + "Y": -2304, + "Z": 69120, + "Room": 34 + }, + { + "X": 20992, + "Y": -3840, + "Z": 66048, + "Room": 33, + "Validated": false + }, + { + "X": 27136, + "Y": -512, + "Z": 65024, + "Room": 147 + }, + { + "X": 28160, + "Y": -512, + "Z": 67072, + "Room": 157 + }, + { + "X": 31232, + "Y": -512, + "Z": 67072, + "Room": 141 + }, + { + "X": 31232, + "Y": -512, + "Z": 62976, + "Room": 148 + }, + { + "X": 26112, + "Y": -512, + "Z": 61952, + "Room": 149 + }, + { + "X": 25088, + "Y": -2048, + "Z": 60928, + "Room": 152 + }, + { + "X": 26112, + "Y": -2048, + "Z": 59904, + "Room": 160 + }, + { + "X": 24064, + "Y": -2048, + "Z": 59904, + "Room": 150 + }, + { + "X": 24064, + "Y": -2048, + "Z": 55808, + "Room": 154 + }, + { + "X": 29184, + "Y": -2048, + "Z": 55808, + "Room": 151 + }, + { + "X": 30208, + "Y": -2048, + "Z": 56832, + "Room": 158 + }, + { + "X": 31232, + "Y": -2048, + "Z": 57856, + "Room": 159 + }, + { + "X": 36352, + "Y": -2048, + "Z": 56832, + "Room": 153 + }, + { + "X": 36352, + "Y": -2048, + "Z": 60928, + "Room": 142 + }, + { + "X": 34304, + "Y": -3584, + "Z": 64000, + "Room": 28 + }, + { + "X": 34304, + "Y": -4096, + "Z": 62976, + "Room": 143 + }, + { + "X": 37376, + "Y": -4608, + "Z": 61952, + "Room": 73 + }, + { + "X": 38400, + "Y": -4352, + "Z": 61952, + "Room": 72 + }, + { + "X": 38400, + "Y": -4352, + "Z": 59904, + "Room": 86 + }, + { + "X": 38400, + "Y": -4352, + "Z": 57856, + "Room": 137 + }, + { + "X": 37376, + "Y": -4608, + "Z": 56832, + "Room": 85 + }, + { + "X": 25088, + "Y": -4608, + "Z": 54784, + "Room": 30 + }, + { + "X": 23040, + "Y": -4608, + "Z": 55808, + "Room": 32 + }, + { + "X": 28160, + "Y": -4352, + "Z": 64000, + "Room": 76 + }, + { + "X": 29184, + "Y": -3328, + "Z": 67072, + "Room": 140 + }, + { + "X": 32256, + "Y": -3584, + "Z": 72192, + "Room": 76 + }, + { + "X": 38400, + "Y": -4352, + "Z": 64000, + "Room": 136 + }, + { + "X": 39424, + "Y": -4224, + "Z": 66048, + "Room": 187 + }, + { + "X": 42496, + "Y": -3840, + "Z": 66048, + "Room": 186 + }, + { + "X": 44544, + "Y": -3840, + "Z": 66048, + "Room": 184 + }, + { + "X": 48640, + "Y": -3840, + "Z": 66048, + "Room": 182 + }, + { + "X": 49664, + "Y": -3712, + "Z": 67072, + "Room": 183 + }, + { + "X": 48640, + "Y": -2432, + "Z": 68096, + "Room": 50 + }, + { + "X": 42496, + "Y": -4096, + "Z": 67072, + "Room": 185, + "Validated": false + }, + { + "X": 48640, + "Y": -384, + "Z": 68096, + "Room": 79 + }, + { + "X": 49664, + "Y": -128, + "Z": 68096, + "Room": 99 + }, + { + "X": 50688, + "Y": 0, + "Z": 68096, + "Room": 100 + }, + { + "X": 50688, + "Y": 0, + "Z": 73216, + "Room": 98 + }, + { + "X": 52736, + "Y": 0, + "Z": 76288, + "Room": 48 + }, + { + "X": 55808, + "Y": 0, + "Z": 75264, + "Room": 47 + }, + { + "X": 55808, + "Y": 0, + "Z": 72192, + "Room": 46 + }, + { + "X": 57856, + "Y": 256, + "Z": 73216, + "Room": 194 + }, + { + "X": 58880, + "Y": 512, + "Z": 72192, + "Room": 193 + }, + { + "X": 59904, + "Y": -1024, + "Z": 74240, + "Room": 47 + }, + { + "X": 60928, + "Y": 3840, + "Z": 70144, + "Room": 27 + }, + { + "X": 64000, + "Y": 3840, + "Z": 71168, + "Room": 31 + }, + { + "X": 64000, + "Y": -1792, + "Z": 78336, + "Room": 195 + }, + { + "X": 64000, + "Y": -4352, + "Z": 79360, + "Room": 192 + }, + { + "X": 70144, + "Y": -4736, + "Z": 79360, + "Room": 191 + }, + { + "X": 73216, + "Y": -5120, + "Z": 78336, + "Room": 181 + }, + { + "X": 70144, + "Y": -5120, + "Z": 77312, + "Room": 165, + "Validated": false + }, + { + "X": 69120, + "Y": -5120, + "Z": 75264, + "Room": 167, + "Validated": false + }, + { + "X": 69120, + "Y": -6400, + "Z": 74240, + "Room": 10, + "Validated": false + }, + { + "X": 75264, + "Y": -5760, + "Z": 77312, + "Room": 169, + "Validated": false + }, + { + "X": 76288, + "Y": -6400, + "Z": 78336, + "Room": 197, + "Validated": false + }, + { + "X": 95744, + "Y": -2048, + "Z": 76288, + "Room": 18, + "Validated": false + }, + { + "X": 93696, + "Y": -7168, + "Z": 79360, + "Room": 190, + "Validated": false + }, + { + "X": 73216, + "Y": -5376, + "Z": 75264, + "Room": 166 + } + ], + "CRASH.TR2": [ + { + "X": 11776, + "Y": -5376, + "Z": 74240, + "Room": 90 + }, + { + "X": 12800, + "Y": -5376, + "Z": 73216, + "Room": 86 + }, + { + "X": 11776, + "Y": -5376, + "Z": 76288, + "Room": 91 + }, + { + "X": 12800, + "Y": -5120, + "Z": 79360, + "Room": 92, + "Validated": false + }, + { + "X": 11776, + "Y": -6400, + "Z": 78336, + "Room": 10, + "Validated": false + }, + { + "X": 8704, + "Y": -5120, + "Z": 76288, + "Room": 87, + "Validated": false + }, + { + "X": 10752, + "Y": -7936, + "Z": 73216, + "Room": 90, + "Validated": false + }, + { + "X": 13824, + "Y": -2048, + "Z": 76288, + "Room": 19, + "KeyItemsLow": "15278,15364", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 8704, + "Y": -1920, + "Z": 79360, + "Room": 83, + "Validated": false + }, + { + "X": 6656, + "Y": -4608, + "Z": 80384, + "Room": 96, + "Validated": false + }, + { + "X": 6656, + "Y": -512, + "Z": 83456, + "Room": 82, + "Validated": false + }, + { + "X": 13824, + "Y": -5120, + "Z": 69120, + "Room": 88, + "Validated": false + }, + { + "X": 15872, + "Y": -2688, + "Z": 77312, + "Room": 93 + }, + { + "X": 16896, + "Y": -5504, + "Z": 81408, + "Room": 97, + "Validated": false + }, + { + "X": 25088, + "Y": -6400, + "Z": 83456, + "Room": 95, + "Validated": false + }, + { + "X": 34304, + "Y": -1792, + "Z": 77312, + "Room": 18, + "KeyItemsLow": "15364,15278", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": -1408, + "Z": 79360, + "Room": 44 + }, + { + "X": 44288, + "Y": 1792, + "Z": 79360, + "Room": 51, + "KeyItemsLow": "15278,15364", + "Range": "Large" + }, + { + "X": 44544, + "Y": 1792, + "Z": 79360, + "Room": 51, + "KeyItemsLow": "15278,15364", + "Range": "Medium" + }, + { + "X": 45568, + "Y": 1664, + "Z": 72192, + "Room": 50 + }, + { + "X": 45568, + "Y": 2048, + "Z": 70144, + "Room": 52 + }, + { + "X": 47616, + "Y": -1408, + "Z": 70144, + "Room": 49, + "Validated": false + }, + { + "X": 45568, + "Y": 768, + "Z": 64000, + "Room": 54 + }, + { + "X": 47616, + "Y": -2048, + "Z": 61952, + "Room": 17 + }, + { + "X": 47616, + "Y": -512, + "Z": 58880, + "Room": 77 + }, + { + "X": 50688, + "Y": 0, + "Z": 56832, + "Room": 76 + }, + { + "X": 60928, + "Y": -2688, + "Z": 54784, + "Room": 2 + }, + { + "X": 55808, + "Y": -5376, + "Z": 55808, + "Room": 5 + }, + { + "X": 48640, + "Y": -2304, + "Z": 56832, + "Room": 6 + }, + { + "X": 49664, + "Y": -2304, + "Z": 57856, + "Room": 33 + }, + { + "X": 52736, + "Y": -2304, + "Z": 58880, + "Room": 23 + }, + { + "X": 53760, + "Y": -3328, + "Z": 62976, + "Room": 24 + }, + { + "X": 58880, + "Y": 2048, + "Z": 66048, + "Room": 26 + }, + { + "X": 60928, + "Y": -2048, + "Z": 66048, + "Room": 25 + }, + { + "X": 60928, + "Y": -4096, + "Z": 61952, + "Room": 22 + }, + { + "X": 59904, + "Y": -4096, + "Z": 58880, + "Room": 5 + }, + { + "X": 64000, + "Y": -3072, + "Z": 51712, + "Room": 3 + }, + { + "X": 49664, + "Y": -2048, + "Z": 47616, + "Room": 2 + }, + { + "X": 48640, + "Y": -1920, + "Z": 48640, + "Room": 77 + }, + { + "X": 48640, + "Y": -2048, + "Z": 50688, + "Room": 6 + }, + { + "X": 44544, + "Y": 1536, + "Z": 45568, + "Room": 68, + "KeyItemsLow": "15364" + }, + { + "X": 44288, + "Y": 1536, + "Z": 45568, + "Room": 68, + "KeyItemsLow": "15364", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 1536, + "Z": 45312, + "Room": 68, + "KeyItemsHigh": "15278", + "Range": "Medium" + }, + { + "X": 44288, + "Y": 1536, + "Z": 45312, + "Room": 68, + "KeyItemsHigh": "15278", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": 1408, + "Z": 45568, + "Room": 69 + }, + { + "X": 41472, + "Y": -512, + "Z": 46592, + "Room": 48 + }, + { + "X": 38400, + "Y": -1536, + "Z": 53760, + "Room": 53 + }, + { + "X": 32256, + "Y": -2048, + "Z": 46592, + "Room": 53, + "Validated": false + }, + { + "X": 27136, + "Y": 2048, + "Z": 51712, + "Room": 45 + }, + { + "X": 22016, + "Y": 1792, + "Z": 57856, + "Room": 47 + }, + { + "X": 25088, + "Y": 2432, + "Z": 60928, + "Room": 56 + }, + { + "X": 29184, + "Y": 2048, + "Z": 64000, + "Room": 47 + }, + { + "X": 30208, + "Y": 2048, + "Z": 64000, + "Room": 46 + }, + { + "X": 26112, + "Y": 2048, + "Z": 44544, + "Room": 79 + }, + { + "X": 19968, + "Y": 1792, + "Z": 70144, + "Room": 35 + }, + { + "X": 27136, + "Y": 2048, + "Z": 44544, + "Room": 80 + }, + { + "X": 50688, + "Y": -512, + "Z": 45568, + "Room": 78, + "KeyItemsHigh": "15364" + }, + { + "X": 50944, + "Y": -512, + "Z": 45568, + "Room": 78, + "KeyItemsHigh": "15364", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -512, + "Z": 45312, + "Room": 78, + "KeyItemsLow": "15278", + "Range": "Medium" + }, + { + "X": 50944, + "Y": -512, + "Z": 45312, + "Room": 78, + "KeyItemsLow": "15278", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 59904, + "Y": 1024, + "Z": 40448, + "Room": 43 + }, + { + "X": 54784, + "Y": 1024, + "Z": 38400, + "Room": 29 + }, + { + "X": 62976, + "Y": -1792, + "Z": 45568, + "Room": 1 + }, + { + "X": 72192, + "Y": -256, + "Z": 40448, + "Room": 28, + "KeyItemsLow": "15278" + }, + { + "X": 72192, + "Y": -256, + "Z": 40192, + "Room": 28, + "KeyItemsLow": "15278", + "RequiresReturnPath": true + }, + { + "X": 72448, + "Y": -256, + "Z": 40448, + "Room": 28, + "KeyItemsHigh": "15364", + "Range": "Medium" + }, + { + "X": 72448, + "Y": -256, + "Z": 40192, + "Room": 28, + "KeyItemsHigh": "15364", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 72192, + "Y": -256, + "Z": 39424, + "Room": 32 + }, + { + "X": 71168, + "Y": -256, + "Z": 36352, + "Room": 20 + }, + { + "X": 69120, + "Y": -256, + "Z": 35328, + "Room": 67 + }, + { + "X": 68096, + "Y": -256, + "Z": 33280, + "Room": 57 + }, + { + "X": 67072, + "Y": -2048, + "Z": 34304, + "Room": 58 + }, + { + "X": 65024, + "Y": -4352, + "Z": 33280, + "Room": 59 + }, + { + "X": 71168, + "Y": -6272, + "Z": 32256, + "Room": 60 + }, + { + "X": 70144, + "Y": -8576, + "Z": 25088, + "Room": 62 + }, + { + "X": 72192, + "Y": -6144, + "Z": 24064, + "Room": 60, + "Validated": false + }, + { + "X": 69120, + "Y": 2560, + "Z": 26112, + "Room": 61 + }, + { + "X": 68096, + "Y": 0, + "Z": 20992, + "Room": 70 + }, + { + "X": 66048, + "Y": 0, + "Z": 20992, + "Room": 71 + }, + { + "X": 64000, + "Y": 0, + "Z": 18944, + "Room": 72 + }, + { + "X": 62976, + "Y": -2048, + "Z": 17920, + "Room": 30 + }, + { + "X": 80384, + "Y": -4096, + "Z": 45568, + "Room": 11, + "KeyItemsLow": "15364" + }, + { + "X": 80640, + "Y": -4096, + "Z": 45568, + "Room": 11, + "KeyItemsLow": "15364", + "RequiresReturnPath": true + }, + { + "X": 80640, + "Y": -4096, + "Z": 45312, + "Room": 11, + "KeyItemsLow": "15364", + "Range": "Medium" + }, + { + "X": 80384, + "Y": -4096, + "Z": 45312, + "Room": 11, + "KeyItemsLow": "15364", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": -4864, + "Z": 39424, + "Room": 14, + "Validated": false + }, + { + "X": 74240, + "Y": -2816, + "Z": 38400, + "Room": 13, + "Validated": false + }, + { + "X": 76288, + "Y": -1664, + "Z": 38400, + "Room": 12, + "Validated": false + }, + { + "X": 54784, + "Y": -2432, + "Z": 49664, + "Room": 4 + }, + { + "X": 53760, + "Y": -2560, + "Z": 49664, + "Room": 16 + }, + { + "X": 60928, + "Y": -256, + "Z": 49664, + "Room": 9 + }, + { + "X": 52736, + "Y": 0, + "Z": 49664, + "Room": 38 + }, + { + "X": 80384, + "Y": -2048, + "Z": 55040, + "Room": 3, + "KeyItemsHigh": "15278,15364" + }, + { + "X": 80384, + "Y": -2048, + "Z": 54784, + "Room": 3, + "KeyItemsHigh": "15278,15364", + "RequiresReturnPath": true + }, + { + "X": 80384, + "Y": -2048, + "Z": 54528, + "Room": 3, + "KeyItemsHigh": "15278,15364", + "Range": "Medium" + }, + { + "X": 80640, + "Y": -2048, + "Z": 54528, + "Room": 3, + "KeyItemsHigh": "15278,15364", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 80640, + "Y": -2048, + "Z": 54784, + "Room": 3, + "KeyItemsHigh": "15278,15364", + "Range": "Large" + }, + { + "X": 80640, + "Y": -2048, + "Z": 55040, + "Room": 3, + "KeyItemsHigh": "15278,15364", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 81408, + "Y": -2048, + "Z": 55808, + "Room": 42 + }, + { + "X": 78336, + "Y": -2048, + "Z": 59904, + "Room": 41 + } + ], + "RAPIDS.TR2": [ + { + "X": 73216, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 76288, + "Y": -27392, + "Z": 45568, + "Room": 53 + }, + { + "X": 71168, + "Y": -25088, + "Z": 48640, + "Room": 48 + }, + { + "X": 69120, + "Y": -21632, + "Z": 47616, + "Room": 44 + }, + { + "X": 65024, + "Y": -25856, + "Z": 57856, + "Room": 54, + "Validated": false + }, + { + "X": 65024, + "Y": -25856, + "Z": 62976, + "Room": 52, + "Validated": false + }, + { + "X": 68096, + "Y": -23168, + "Z": 62976, + "Room": 55, + "Validated": false + }, + { + "X": 78336, + "Y": -28160, + "Z": 51712, + "Room": 99 + }, + { + "X": 77312, + "Y": -22784, + "Z": 51712, + "Room": 78 + }, + { + "X": 76288, + "Y": -22784, + "Z": 51712, + "Room": 78 + }, + { + "X": 66048, + "Y": -22528, + "Z": 43520, + "Room": 45 + }, + { + "X": 62976, + "Y": -20736, + "Z": 42496, + "Room": 49 + }, + { + "X": 68096, + "Y": -23296, + "Z": 37376, + "Room": 47 + }, + { + "X": 68096, + "Y": -23040, + "Z": 35328, + "Room": 33 + }, + { + "X": 65024, + "Y": -21248, + "Z": 33280, + "Room": 58 + }, + { + "X": 65024, + "Y": -17408, + "Z": 28160, + "Room": 57 + }, + { + "X": 66048, + "Y": -17408, + "Z": 27136, + "Room": 37 + }, + { + "X": 67072, + "Y": -17408, + "Z": 26112, + "Room": 35 + }, + { + "X": 66048, + "Y": -18688, + "Z": 22016, + "Room": 36 + }, + { + "X": 71168, + "Y": -21760, + "Z": 22016, + "Room": 32 + }, + { + "X": 59904, + "Y": -19072, + "Z": 28160, + "Room": 39 + }, + { + "X": 55808, + "Y": -18688, + "Z": 28160, + "Room": 46 + }, + { + "X": 53760, + "Y": -18560, + "Z": 24064, + "Room": 20 + }, + { + "X": 53760, + "Y": -17664, + "Z": 19968, + "Room": 7 + }, + { + "X": 71168, + "Y": -23040, + "Z": 33280, + "Room": 14 + }, + { + "X": 72192, + "Y": -20992, + "Z": 33280, + "Room": 18 + }, + { + "X": 73216, + "Y": -20992, + "Z": 35328, + "Room": 11 + }, + { + "X": 77312, + "Y": -20736, + "Z": 38400, + "Room": 77 + }, + { + "X": 82432, + "Y": -16640, + "Z": 39424, + "Room": 17 + }, + { + "X": 88576, + "Y": -22016, + "Z": 38400, + "Room": 76 + }, + { + "X": 87552, + "Y": -19712, + "Z": 31232, + "Room": 13 + }, + { + "X": 84480, + "Y": -14848, + "Z": 25088, + "Room": 23, + "Validated": false + }, + { + "X": 84480, + "Y": -21760, + "Z": 24064, + "Room": 16 + }, + { + "X": 83456, + "Y": -21760, + "Z": 24064, + "Room": 18 + }, + { + "X": 80384, + "Y": -24192, + "Z": 20992, + "Room": 14 + }, + { + "X": 79360, + "Y": -21248, + "Z": 18944, + "Room": 6 + }, + { + "X": 79360, + "Y": -23040, + "Z": 18944, + "Room": 15, + "Validated": false + }, + { + "X": 80384, + "Y": -21120, + "Z": 15872, + "Room": 26 + }, + { + "X": 78336, + "Y": -20992, + "Z": 12800, + "Room": 25 + }, + { + "X": 81408, + "Y": -24448, + "Z": 19968, + "Room": 24 + }, + { + "X": 83456, + "Y": -24320, + "Z": 18944, + "Room": 27 + }, + { + "X": 87552, + "Y": -25088, + "Z": 18944, + "Room": 143 + }, + { + "X": 89600, + "Y": -25088, + "Z": 20992, + "Room": 28 + }, + { + "X": 90624, + "Y": -19584, + "Z": 23040, + "Room": 30 + }, + { + "X": 91648, + "Y": -20480, + "Z": 19968, + "Room": 144 + }, + { + "X": 47616, + "Y": 3072, + "Z": 84480, + "Room": 101 + }, + { + "X": 51712, + "Y": 7424, + "Z": 83456, + "Room": 103 + }, + { + "X": 51712, + "Y": 3840, + "Z": 80384, + "Room": 102 + }, + { + "X": 47616, + "Y": 4608, + "Z": 62976, + "Room": 64 + }, + { + "X": 43520, + "Y": 4864, + "Z": 59904, + "Room": 125 + }, + { + "X": 43520, + "Y": 2048, + "Z": 57856, + "Room": 79 + }, + { + "X": 43520, + "Y": 4352, + "Z": 55808, + "Room": 81 + }, + { + "X": 39424, + "Y": 2048, + "Z": 57856, + "Room": 79 + }, + { + "X": 40448, + "Y": 1536, + "Z": 42496, + "Room": 71 + }, + { + "X": 38400, + "Y": -4480, + "Z": 35328, + "Room": 66 + }, + { + "X": 39424, + "Y": -4608, + "Z": 32256, + "Room": 126 + }, + { + "X": 39424, + "Y": 512, + "Z": 31232, + "Room": 128 + }, + { + "X": 50688, + "Y": -1792, + "Z": 31232, + "Room": 129 + }, + { + "X": 55808, + "Y": -1792, + "Z": 33280, + "Room": 130 + }, + { + "X": 55808, + "Y": -5120, + "Z": 41472, + "Room": 72 + }, + { + "X": 50688, + "Y": -5248, + "Z": 44544, + "Room": 73, + "Validated": false + }, + { + "X": 58880, + "Y": -5120, + "Z": 50688, + "Room": 131 + }, + { + "X": 59904, + "Y": -5120, + "Z": 50688, + "Room": 132 + }, + { + "X": 56832, + "Y": -4224, + "Z": 54784, + "Room": 90 + }, + { + "X": 59904, + "Y": -4352, + "Z": 56832, + "Room": 59, + "Validated": false + }, + { + "X": 51712, + "Y": 1792, + "Z": 73216, + "Room": 104 + }, + { + "X": 51712, + "Y": -1664, + "Z": 74240, + "Room": 118 + }, + { + "X": 51712, + "Y": -1792, + "Z": 76288, + "Room": 134 + }, + { + "X": 52736, + "Y": -768, + "Z": 79360, + "Room": 136 + }, + { + "X": 53760, + "Y": 14336, + "Z": 74240, + "Room": 137 + }, + { + "X": 53760, + "Y": 14336, + "Z": 73216, + "Room": 97 + }, + { + "X": 53760, + "Y": 14336, + "Z": 70144, + "Room": 138 + }, + { + "X": 52736, + "Y": 14336, + "Z": 73216, + "Room": 140 + }, + { + "X": 49664, + "Y": 14336, + "Z": 72192, + "Room": 139 + }, + { + "X": 43520, + "Y": 13056, + "Z": 72192, + "Room": 95 + }, + { + "X": 56832, + "Y": 13056, + "Z": 72192, + "Room": 96 + } + ], + "TRIBOSS.TR2": [ + { + "X": 46592, + "Y": -9344, + "Z": 60928, + "Room": 0 + }, + { + "X": 44544, + "Y": -9472, + "Z": 58880, + "Room": 5 + }, + { + "X": 35328, + "Y": -13824, + "Z": 58880, + "Room": 7 + }, + { + "X": 30208, + "Y": -15616, + "Z": 58880, + "Room": 10 + }, + { + "X": 37376, + "Y": -17408, + "Z": 56832, + "Room": 16 + }, + { + "X": 39424, + "Y": -16640, + "Z": 52736, + "Room": 15 + }, + { + "X": 45568, + "Y": -16640, + "Z": 52736, + "Room": 17 + }, + { + "X": 49664, + "Y": -14592, + "Z": 51712, + "Room": 20 + }, + { + "X": 50688, + "Y": -14592, + "Z": 51712, + "Room": 21 + }, + { + "X": 50688, + "Y": -11008, + "Z": 50688, + "Room": 25 + }, + { + "X": 50688, + "Y": -10240, + "Z": 48640, + "Room": 22 + }, + { + "X": 46592, + "Y": -9984, + "Z": 47616, + "Room": 23 + }, + { + "X": 30208, + "Y": -18176, + "Z": 59904, + "Room": 11 + }, + { + "X": 30208, + "Y": -18176, + "Z": 61952, + "Room": 13 + }, + { + "X": 48640, + "Y": -8704, + "Z": 57856, + "Room": 1 + }, + { + "X": 51712, + "Y": -8832, + "Z": 57856, + "Room": 28 + }, + { + "X": 56832, + "Y": -5376, + "Z": 57856, + "Room": 29 + } + ], + "ROOFS.TR2": [ + { + "X": 41216, + "Y": -21504, + "Z": 41472, + "Room": 52, + "KeyItemsLow": "18161" + }, + { + "X": 41472, + "Y": -21504, + "Z": 41472, + "Room": 52, + "KeyItemsLow": "18161", + "RequiresReturnPath": true + }, + { + "X": 41728, + "Y": -21504, + "Z": 41472, + "Room": 52, + "KeyItemsLow": "18161,18524", + "Range": "Medium" + }, + { + "X": 41728, + "Y": -21504, + "Z": 41216, + "Room": 52, + "KeyItemsLow": "18161,18524", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -21504, + "Z": 41216, + "Room": 52, + "KeyItemsLow": "18161,18524", + "Range": "Large" + }, + { + "X": 41216, + "Y": -21504, + "Z": 41216, + "Room": 52, + "KeyItemsLow": "18161,18524", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": -21504, + "Z": 41472, + "Room": 25 + }, + { + "X": 36352, + "Y": -25856, + "Z": 38400, + "Room": 128, + "Validated": false + }, + { + "X": 40448, + "Y": -19200, + "Z": 39424, + "Room": 127 + }, + { + "X": 44544, + "Y": -21760, + "Z": 38400, + "Room": 45 + }, + { + "X": 45568, + "Y": -19712, + "Z": 37376, + "Room": 130 + }, + { + "X": 45568, + "Y": -17152, + "Z": 32256, + "Room": 135 + }, + { + "X": 45568, + "Y": -14848, + "Z": 30208, + "Room": 136 + }, + { + "X": 46592, + "Y": -13312, + "Z": 30208, + "Room": 148, + "Validated": false + }, + { + "X": 48640, + "Y": -11648, + "Z": 26112, + "Room": 34 + }, + { + "X": 47616, + "Y": -11776, + "Z": 24064, + "Room": 36 + }, + { + "X": 45568, + "Y": -11520, + "Z": 24064, + "Room": 35 + }, + { + "X": 48640, + "Y": -18944, + "Z": 31232, + "Room": 129 + }, + { + "X": 41472, + "Y": -18688, + "Z": 41472, + "Room": 131 + }, + { + "X": 39424, + "Y": -14848, + "Z": 45568, + "Room": 95, + "KeyItemsLow": "18524" + }, + { + "X": 39424, + "Y": -14848, + "Z": 45824, + "Room": 95, + "KeyItemsLow": "18524", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": -14848, + "Z": 46592, + "Room": 99 + }, + { + "X": 39424, + "Y": -14848, + "Z": 47616, + "Room": 158 + }, + { + "X": 42496, + "Y": -14848, + "Z": 53760, + "Room": 175 + }, + { + "X": 43520, + "Y": -14848, + "Z": 47616, + "Room": 172 + }, + { + "X": 41472, + "Y": -12032, + "Z": 51712, + "Room": 173 + }, + { + "X": 41472, + "Y": -8704, + "Z": 51712, + "Room": 174 + }, + { + "X": 39424, + "Y": -12288, + "Z": 45568, + "Room": 96 + }, + { + "X": 37376, + "Y": -13824, + "Z": 46592, + "Room": 156 + }, + { + "X": 36352, + "Y": -13952, + "Z": 47616, + "Room": 49 + }, + { + "X": 35328, + "Y": -13952, + "Z": 47616, + "Room": 157 + }, + { + "X": 35328, + "Y": -13824, + "Z": 46592, + "Room": 155 + }, + { + "X": 35328, + "Y": -14848, + "Z": 55808, + "Room": 153 + }, + { + "X": 36352, + "Y": -16128, + "Z": 55808, + "Room": 152 + }, + { + "X": 34304, + "Y": -7936, + "Z": 45568, + "Room": 166 + }, + { + "X": 34304, + "Y": -9216, + "Z": 41472, + "Room": 98 + }, + { + "X": 37376, + "Y": -20224, + "Z": 41472, + "Room": 62 + }, + { + "X": 39424, + "Y": -17792, + "Z": 45568, + "Room": 86 + }, + { + "X": 42496, + "Y": -20736, + "Z": 55808, + "Room": 122 + }, + { + "X": 43520, + "Y": -21888, + "Z": 54784, + "Room": 126, + "Validated": false + }, + { + "X": 45568, + "Y": -20736, + "Z": 57856, + "Room": 144, + "Validated": false + }, + { + "X": 51712, + "Y": -20736, + "Z": 57856, + "Room": 125, + "Validated": false + }, + { + "X": 52736, + "Y": -21504, + "Z": 55808, + "Room": 116, + "Validated": false + }, + { + "X": 57856, + "Y": -17920, + "Z": 57856, + "Room": 102, + "Validated": false + }, + { + "X": 57856, + "Y": -17920, + "Z": 61952, + "Room": 179, + "Validated": false + }, + { + "X": 51712, + "Y": -14848, + "Z": 61952, + "Room": 183, + "Validated": false + }, + { + "X": 50688, + "Y": -14848, + "Z": 61952, + "Room": 147, + "Validated": false + }, + { + "X": 45568, + "Y": -14848, + "Z": 70144, + "Room": 53, + "Validated": false + }, + { + "X": 46592, + "Y": -12032, + "Z": 77312, + "Room": 56, + "Validated": false + }, + { + "X": 52736, + "Y": -12032, + "Z": 71168, + "Room": 63, + "Validated": false + }, + { + "X": 52736, + "Y": -19584, + "Z": 74240, + "Room": 188, + "Validated": false + }, + { + "X": 65024, + "Y": -16256, + "Z": 67072, + "Room": 119, + "Validated": false + }, + { + "X": 65024, + "Y": -15872, + "Z": 68096, + "Room": 120, + "Validated": false + }, + { + "X": 68096, + "Y": -18944, + "Z": 68096, + "Room": 118, + "Validated": false + }, + { + "X": 62976, + "Y": -15616, + "Z": 58880, + "Room": 103, + "Validated": false + }, + { + "X": 39424, + "Y": -21504, + "Z": 59904, + "Room": 22 + }, + { + "X": 38144, + "Y": -17664, + "Z": 53760, + "Room": 50, + "KeyItemsHigh": "18524" + }, + { + "X": 38400, + "Y": -17664, + "Z": 53760, + "Room": 50, + "KeyItemsHigh": "18524", + "RequiresReturnPath": true + }, + { + "X": 38656, + "Y": -17664, + "Z": 53760, + "Room": 50, + "KeyItemsHigh": "18524", + "Range": "Medium" + }, + { + "X": 38656, + "Y": -17664, + "Z": 53504, + "Room": 50, + "KeyItemsHigh": "18524", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -17664, + "Z": 53504, + "Room": 50, + "KeyItemsHigh": "18524", + "Range": "Large" + }, + { + "X": 38144, + "Y": -17664, + "Z": 53504, + "Room": 50, + "KeyItemsHigh": "18524", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -17664, + "Z": 52736, + "Room": 48 + }, + { + "X": 42496, + "Y": -21760, + "Z": 49664, + "Room": 65 + }, + { + "X": 43520, + "Y": -18304, + "Z": 49664, + "Room": 159 + }, + { + "X": 43520, + "Y": -14848, + "Z": 57856, + "Room": 181 + }, + { + "X": 42496, + "Y": -13184, + "Z": 61952, + "Room": 182 + }, + { + "X": 32256, + "Y": -8448, + "Z": 61952, + "Room": 70 + }, + { + "X": 31232, + "Y": -7936, + "Z": 58880, + "Room": 71 + }, + { + "X": 30208, + "Y": -7936, + "Z": 41472, + "Room": 11 + }, + { + "X": 29184, + "Y": -7936, + "Z": 41472, + "Room": 9 + }, + { + "X": 28160, + "Y": -8192, + "Z": 44544, + "Room": 10 + }, + { + "X": 27136, + "Y": -8192, + "Z": 47616, + "Room": 7 + }, + { + "X": 26112, + "Y": -512, + "Z": 45568, + "Room": 3 + }, + { + "X": 30208, + "Y": -7936, + "Z": 50688, + "Room": 38 + }, + { + "X": 29184, + "Y": -7936, + "Z": 53760, + "Room": 39 + }, + { + "X": 28160, + "Y": -8192, + "Z": 53760, + "Room": 40 + }, + { + "X": 27136, + "Y": -6656, + "Z": 53760, + "Room": 37 + }, + { + "X": 27136, + "Y": -8192, + "Z": 56832, + "Room": 69 + }, + { + "X": 24064, + "Y": -3328, + "Z": 53760, + "Room": 59 + }, + { + "X": 27136, + "Y": 0, + "Z": 54784, + "Room": 76 + }, + { + "X": 17920, + "Y": 0, + "Z": 54784, + "Room": 77 + }, + { + "X": 16896, + "Y": -1024, + "Z": 54784, + "Room": 93 + }, + { + "X": 16896, + "Y": -3456, + "Z": 54784, + "Room": 78 + }, + { + "X": 16896, + "Y": -3840, + "Z": 56832, + "Room": 189 + }, + { + "X": 19968, + "Y": -4352, + "Z": 61952, + "Room": 83 + }, + { + "X": 30208, + "Y": -2816, + "Z": 61952, + "Room": 67 + }, + { + "X": 28160, + "Y": -2560, + "Z": 61952, + "Room": 66 + }, + { + "X": 27136, + "Y": -2048, + "Z": 66048, + "Room": 32 + }, + { + "X": 28160, + "Y": -2560, + "Z": 69120, + "Room": 187 + }, + { + "X": 25088, + "Y": -2048, + "Z": 70144, + "Room": 185 + }, + { + "X": 24064, + "Y": -2048, + "Z": 70144, + "Room": 186 + }, + { + "X": 23040, + "Y": -1792, + "Z": 72192, + "Room": 68 + }, + { + "X": 23040, + "Y": -2048, + "Z": 68096, + "Room": 33 + }, + { + "X": 23040, + "Y": -2048, + "Z": 65024, + "Room": 73 + }, + { + "X": 25088, + "Y": -2048, + "Z": 64000, + "Room": 72 + }, + { + "X": 25088, + "Y": -2048, + "Z": 59904, + "Room": 184 + }, + { + "X": 25088, + "Y": -2048, + "Z": 57856, + "Room": 82 + }, + { + "X": 25088, + "Y": -8192, + "Z": 39424, + "Room": 44 + }, + { + "X": 25088, + "Y": -8192, + "Z": 38400, + "Room": 42 + }, + { + "X": 22016, + "Y": -8448, + "Z": 37376, + "Room": 43 + }, + { + "X": 22016, + "Y": -8448, + "Z": 36352, + "Room": 8 + }, + { + "X": 24064, + "Y": -256, + "Z": 35328, + "Room": 4 + }, + { + "X": 28160, + "Y": -8448, + "Z": 36352, + "Room": 64 + }, + { + "X": 29184, + "Y": -8448, + "Z": 36352, + "Room": 61 + }, + { + "X": 18944, + "Y": -11264, + "Z": 30208, + "Room": 123 + }, + { + "X": 18944, + "Y": -11264, + "Z": 37376, + "Room": 75 + }, + { + "X": 18944, + "Y": -11264, + "Z": 41472, + "Room": 80 + }, + { + "X": 24064, + "Y": 1152, + "Z": 29184, + "Room": 88 + }, + { + "X": 23040, + "Y": 1536, + "Z": 24064, + "Room": 87 + }, + { + "X": 41472, + "Y": -4096, + "Z": 25088, + "Room": 90 + }, + { + "X": 48640, + "Y": -5632, + "Z": 24064, + "Room": 84 + }, + { + "X": 46592, + "Y": -6400, + "Z": 23040, + "Room": 13 + }, + { + "X": 50688, + "Y": -8704, + "Z": 23040, + "Room": 150 + }, + { + "X": 45568, + "Y": -8704, + "Z": 24064, + "Room": 12 + }, + { + "X": 49664, + "Y": -8704, + "Z": 31232, + "Room": 160 + }, + { + "X": 48640, + "Y": -8704, + "Z": 32256, + "Room": 51 + }, + { + "X": 50688, + "Y": -12544, + "Z": 35328, + "Room": 148 + }, + { + "X": 51712, + "Y": -14848, + "Z": 36352, + "Room": 108 + }, + { + "X": 55808, + "Y": -17152, + "Z": 39424, + "Room": 107 + }, + { + "X": 57856, + "Y": -18176, + "Z": 40448, + "Room": 106 + }, + { + "X": 57856, + "Y": -20224, + "Z": 37376, + "Room": 124, + "Validated": false + }, + { + "X": 64000, + "Y": -20736, + "Z": 35328, + "Room": 112, + "Validated": false + }, + { + "X": 59904, + "Y": -21504, + "Z": 27136, + "Room": 113 + }, + { + "X": 50688, + "Y": -21504, + "Z": 27136, + "Room": 132, + "Validated": false + }, + { + "X": 57856, + "Y": -19200, + "Z": 42496, + "Room": 2 + }, + { + "X": 57856, + "Y": -25728, + "Z": 43520, + "Room": 1, + "Validated": false + }, + { + "X": 58880, + "Y": -21760, + "Z": 46592, + "Room": 0 + }, + { + "X": 51712, + "Y": -15616, + "Z": 55808, + "Room": 180 + }, + { + "X": 50688, + "Y": -13312, + "Z": 56832, + "Room": 140 + }, + { + "X": 57600, + "Y": -17920, + "Z": 55808, + "Room": 178, + "KeyItemsHigh": "18161" + }, + { + "X": 57856, + "Y": -17920, + "Z": 55808, + "Room": 178, + "KeyItemsHigh": "18161", + "RequiresReturnPath": true + }, + { + "X": 58112, + "Y": -17920, + "Z": 55808, + "Room": 178, + "KeyItemsHigh": "18161", + "Range": "Medium" + }, + { + "X": 58112, + "Y": -17920, + "Z": 56064, + "Room": 178, + "KeyItemsHigh": "18161", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": -17920, + "Z": 56064, + "Room": 178, + "KeyItemsHigh": "18161", + "Range": "Large" + }, + { + "X": 57600, + "Y": -17920, + "Z": 56064, + "Room": 178, + "KeyItemsHigh": "18161", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "SEWER.TR2": [ + { + "X": 71168, + "Y": -10624, + "Z": 98816, + "Room": 157 + }, + { + "X": 72192, + "Y": -8064, + "Z": 98816, + "Room": 0, + "Validated": false + }, + { + "X": 70144, + "Y": -7168, + "Z": 98816, + "Room": 49 + }, + { + "X": 71168, + "Y": 1024, + "Z": 97792, + "Room": 21 + }, + { + "X": 71168, + "Y": -2304, + "Z": 97024, + "Room": 23, + "KeyItemsLow": "19343" + }, + { + "X": 71168, + "Y": -2304, + "Z": 96768, + "Room": 23, + "KeyItemsLow": "19343", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": -2304, + "Z": 96512, + "Room": 23, + "KeyItemsLow": "19343", + "Range": "Medium" + }, + { + "X": 71424, + "Y": -2304, + "Z": 96512, + "Room": 23, + "KeyItemsLow": "19343", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 71424, + "Y": -2304, + "Z": 96768, + "Room": 23, + "KeyItemsLow": "19343,19465,19448", + "Range": "Large" + }, + { + "X": 71424, + "Y": -2304, + "Z": 97024, + "Room": 23, + "KeyItemsLow": "19343,19465,19448", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": -2304, + "Z": 94720, + "Room": 34 + }, + { + "X": 71168, + "Y": -3328, + "Z": 90624, + "Room": 29 + }, + { + "X": 66048, + "Y": -4864, + "Z": 93696, + "Room": 146 + }, + { + "X": 69120, + "Y": -6912, + "Z": 91648, + "Room": 37 + }, + { + "X": 69120, + "Y": -8704, + "Z": 90624, + "Room": 110 + }, + { + "X": 65024, + "Y": -5888, + "Z": 85248, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302" + }, + { + "X": 65024, + "Y": -5888, + "Z": 85504, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302", + "RequiresReturnPath": true + }, + { + "X": 65024, + "Y": -5888, + "Z": 85760, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302", + "Range": "Medium" + }, + { + "X": 64768, + "Y": -5888, + "Z": 85760, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 64768, + "Y": -5888, + "Z": 85504, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302", + "Range": "Large" + }, + { + "X": 64768, + "Y": -5888, + "Z": 85248, + "Room": 37, + "KeyItemsHigh": "19302", + "KeyItemsLow": "19302", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 69120, + "Y": -11264, + "Z": 85504, + "Room": 120 + }, + { + "X": 71168, + "Y": -5888, + "Z": 83456, + "Room": 38 + }, + { + "X": 71168, + "Y": -5888, + "Z": 85504, + "Room": 151 + }, + { + "X": 70144, + "Y": -5888, + "Z": 86528, + "Room": 152 + }, + { + "X": 61952, + "Y": -5632, + "Z": 76288, + "Room": 39 + }, + { + "X": 58112, + "Y": 768, + "Z": 60928, + "Room": 41, + "KeyItemsHigh": "19343", + "KeyItemsLow": "19279" + }, + { + "X": 57856, + "Y": 768, + "Z": 60928, + "Room": 41, + "KeyItemsHigh": "19343", + "KeyItemsLow": "19279", + "RequiresReturnPath": true + }, + { + "X": 57600, + "Y": 768, + "Z": 60928, + "Room": 41, + "KeyItemsLow": "19362,19239,19279", + "Range": "Medium" + }, + { + "X": 57600, + "Y": 768, + "Z": 61184, + "Room": 41, + "KeyItemsLow": "19362,19239,19279", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": 768, + "Z": 61184, + "Room": 41, + "KeyItemsLow": "19239,19362,19279", + "Range": "Large" + }, + { + "X": 58112, + "Y": 768, + "Z": 61184, + "Room": 41, + "KeyItemsLow": "19239,19362,19279", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 60928, + "Y": 768, + "Z": 57856, + "Room": 42 + }, + { + "X": 65024, + "Y": 1408, + "Z": 55808, + "Room": 148 + }, + { + "X": 76288, + "Y": 3840, + "Z": 55808, + "Room": 98, + "Validated": false + }, + { + "X": 87552, + "Y": 6528, + "Z": 55808, + "Room": 141, + "Validated": false + }, + { + "X": 45568, + "Y": 1408, + "Z": 55808, + "Room": 51 + }, + { + "X": 34304, + "Y": 3840, + "Z": 55808, + "Room": 90, + "Validated": false + }, + { + "X": 23040, + "Y": 6656, + "Z": 55808, + "Room": 142, + "Validated": false + }, + { + "X": 10752, + "Y": 9344, + "Z": 55808, + "Room": 144, + "Validated": false + }, + { + "X": 45568, + "Y": 768, + "Z": 57856, + "Room": 20, + "Validated": false + }, + { + "X": 44544, + "Y": 768, + "Z": 58880, + "Room": 68, + "Validated": false + }, + { + "X": 60928, + "Y": 3456, + "Z": 62976, + "Room": 44 + }, + { + "X": 72192, + "Y": 4736, + "Z": 62976, + "Room": 16, + "Validated": false + }, + { + "X": 82432, + "Y": 4864, + "Z": 62976, + "Room": 121, + "Validated": false + }, + { + "X": 52736, + "Y": 4608, + "Z": 62976, + "Room": 54, + "Validated": false + }, + { + "X": 33280, + "Y": 6272, + "Z": 62976, + "Room": 125, + "Validated": false + }, + { + "X": 23040, + "Y": 6400, + "Z": 61952, + "Room": 138, + "Validated": false + }, + { + "X": 10752, + "Y": 6272, + "Z": 61952, + "Room": 139, + "Validated": false + }, + { + "X": 51456, + "Y": 5376, + "Z": 66048, + "Room": 70, + "KeyItemsHigh": "19362", + "Range": "Medium" + }, + { + "X": 51712, + "Y": 5376, + "Z": 66048, + "Room": 70, + "KeyItemsHigh": "19362", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 51968, + "Y": 5376, + "Z": 66048, + "Room": 70, + "KeyItemsLow": "19239" + }, + { + "X": 51968, + "Y": 5376, + "Z": 66304, + "Room": 70, + "KeyItemsLow": "19239", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": 2560, + "Z": 68096, + "Room": 8 + }, + { + "X": 48640, + "Y": 1280, + "Z": 71168, + "Room": 103 + }, + { + "X": 50688, + "Y": -256, + "Z": 70144, + "Room": 112 + }, + { + "X": 48640, + "Y": -768, + "Z": 67072, + "Room": 111 + }, + { + "X": 50688, + "Y": -1536, + "Z": 65024, + "Room": 107 + }, + { + "X": 53760, + "Y": -512, + "Z": 69120, + "Room": 58 + }, + { + "X": 55808, + "Y": 2176, + "Z": 68096, + "Room": 102, + "Validated": false + }, + { + "X": 55808, + "Y": 15872, + "Z": 69120, + "Room": 5 + }, + { + "X": 57856, + "Y": 15360, + "Z": 70144, + "Room": 65 + }, + { + "X": 56832, + "Y": 14080, + "Z": 66048, + "Room": 7 + }, + { + "X": 55808, + "Y": 14080, + "Z": 66048, + "Room": 6 + }, + { + "X": 56832, + "Y": 11264, + "Z": 66048, + "Room": 2 + }, + { + "X": 57856, + "Y": 9728, + "Z": 66048, + "Room": 64 + }, + { + "X": 57856, + "Y": 12032, + "Z": 65024, + "Room": 114 + }, + { + "X": 55808, + "Y": 5888, + "Z": 65024, + "Room": 50 + }, + { + "X": 53760, + "Y": 3584, + "Z": 66048, + "Room": 102 + }, + { + "X": 55808, + "Y": 512, + "Z": 67072, + "Room": 58 + }, + { + "X": 56832, + "Y": 512, + "Z": 64000, + "Room": 115 + }, + { + "X": 54784, + "Y": -2048, + "Z": 64000, + "Room": 69 + }, + { + "X": 57856, + "Y": -1536, + "Z": 70144, + "Room": 9 + }, + { + "X": 58880, + "Y": -1536, + "Z": 70144, + "Room": 154 + }, + { + "X": 58880, + "Y": -3072, + "Z": 68096, + "Room": 153 + }, + { + "X": 58880, + "Y": -4864, + "Z": 64000, + "Room": 155 + }, + { + "X": 48896, + "Y": -3328, + "Z": 66048, + "Room": 55, + "KeyItemsHigh": "19279,19239", + "Validated": false + }, + { + "X": 48640, + "Y": -3328, + "Z": 66048, + "Room": 55, + "KeyItemsHigh": "19239,19279", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 48384, + "Y": -3328, + "Z": 66048, + "Room": 55, + "KeyItemsHigh": "19239", + "Range": "Medium", + "Validated": false + }, + { + "X": 48384, + "Y": -3328, + "Z": 66304, + "Room": 55, + "KeyItemsHigh": "19239", + "Range": "Medium", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 45568, + "Y": -2048, + "Z": 71168, + "Room": 118, + "KeyItemsLow": "19362" + }, + { + "X": 45312, + "Y": -2048, + "Z": 71168, + "Room": 118, + "KeyItemsLow": "19362", + "RequiresReturnPath": true + }, + { + "X": 45312, + "Y": -2048, + "Z": 71424, + "Room": 118, + "KeyItemsLow": "19362", + "Range": "Medium" + }, + { + "X": 45568, + "Y": -2048, + "Z": 71424, + "Room": 118, + "KeyItemsLow": "19362", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 43520, + "Y": -2048, + "Z": 72192, + "Room": 119 + }, + { + "X": 41472, + "Y": -2048, + "Z": 71168, + "Room": 118 + }, + { + "X": 38400, + "Y": -3328, + "Z": 75264, + "Room": 74 + }, + { + "X": 38400, + "Y": -3328, + "Z": 78336, + "Room": 66 + }, + { + "X": 46592, + "Y": -4096, + "Z": 78336, + "Room": 67 + }, + { + "X": 46592, + "Y": -4096, + "Z": 79360, + "Room": 60 + }, + { + "X": 48640, + "Y": -3328, + "Z": 80384, + "Room": 87 + }, + { + "X": 53760, + "Y": -4096, + "Z": 83456, + "Room": 71 + }, + { + "X": 53760, + "Y": -3968, + "Z": 86528, + "Room": 130 + }, + { + "X": 53760, + "Y": -3072, + "Z": 87552, + "Room": 128 + }, + { + "X": 55808, + "Y": -3584, + "Z": 87552, + "Room": 129 + }, + { + "X": 54784, + "Y": -2048, + "Z": 91648, + "Room": 131 + }, + { + "X": 40448, + "Y": -2560, + "Z": 90624, + "Room": 133 + }, + { + "X": 50688, + "Y": -4096, + "Z": 83456, + "Room": 79 + }, + { + "X": 51712, + "Y": -4352, + "Z": 85504, + "Room": 32 + }, + { + "X": 48640, + "Y": -6912, + "Z": 86528, + "Room": 91 + }, + { + "X": 44544, + "Y": -7296, + "Z": 86528, + "Room": 92 + }, + { + "X": 41472, + "Y": -6912, + "Z": 85504, + "Room": 85 + }, + { + "X": 47616, + "Y": -4096, + "Z": 83456, + "Room": 89 + }, + { + "X": 45568, + "Y": -5376, + "Z": 89600, + "Room": 76 + }, + { + "X": 46592, + "Y": -2432, + "Z": 87552, + "Room": 77 + }, + { + "X": 43520, + "Y": -4096, + "Z": 88576, + "Room": 134 + }, + { + "X": 47616, + "Y": -2560, + "Z": 89600, + "Room": 80 + }, + { + "X": 54784, + "Y": -5248, + "Z": 89600, + "Room": 82 + }, + { + "X": 68352, + "Y": -1280, + "Z": 66304, + "Room": 40, + "KeyItemsHigh": "19362" + }, + { + "X": 68096, + "Y": -1280, + "Z": 66304, + "Room": 40, + "KeyItemsHigh": "19362", + "RequiresReturnPath": true + }, + { + "X": 67840, + "Y": -1280, + "Z": 66304, + "Room": 40, + "KeyItemsHigh": "19362,19279,19343", + "KeyItemsLow": "19465,19448", + "Range": "Medium" + }, + { + "X": 67840, + "Y": -1280, + "Z": 66048, + "Room": 40, + "KeyItemsHigh": "19362,19279,19343", + "KeyItemsLow": "19465,19448", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": -1280, + "Z": 66048, + "Room": 40, + "KeyItemsHigh": "19362,19239", + "Range": "Large" + }, + { + "X": 68352, + "Y": -1280, + "Z": 66048, + "Room": 40, + "KeyItemsHigh": "19362,19239", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": -1280, + "Z": 62976, + "Room": 57 + }, + { + "X": 67072, + "Y": -1792, + "Z": 50688, + "Room": 162 + }, + { + "X": 67072, + "Y": 0, + "Z": 49664, + "Room": 159 + }, + { + "X": 70144, + "Y": -1024, + "Z": 51712, + "Room": 84 + }, + { + "X": 71168, + "Y": -1024, + "Z": 58880, + "Room": 84 + }, + { + "X": 72192, + "Y": -640, + "Z": 62976, + "Room": 33, + "Validated": false + }, + { + "X": 72192, + "Y": -640, + "Z": 74240, + "Room": 97, + "Validated": false + }, + { + "X": 72192, + "Y": -512, + "Z": 77312, + "Room": 96, + "Validated": false + }, + { + "X": 72192, + "Y": 896, + "Z": 83456, + "Room": 100, + "Validated": false + }, + { + "X": 72192, + "Y": -640, + "Z": 46592, + "Room": 11 + }, + { + "X": 72192, + "Y": 1152, + "Z": 35328, + "Room": 12 + }, + { + "X": 71168, + "Y": 1280, + "Z": 29184, + "Room": 31 + }, + { + "X": 71168, + "Y": 1024, + "Z": 33280, + "Room": 25 + }, + { + "X": 72192, + "Y": 1152, + "Z": 24064, + "Room": 19, + "Validated": false + }, + { + "X": 72192, + "Y": 3200, + "Z": 12800, + "Room": 26, + "Validated": false + }, + { + "X": 72192, + "Y": 3200, + "Z": 4608, + "Room": 13, + "Validated": false + }, + { + "X": 71168, + "Y": 2432, + "Z": 27136, + "Room": 22 + }, + { + "X": 69120, + "Y": 1024, + "Z": 27136, + "Room": 17 + }, + { + "X": 68096, + "Y": 1024, + "Z": 27136, + "Room": 10, + "Validated": false + }, + { + "X": 57856, + "Y": 1024, + "Z": 29184, + "Room": 143, + "KeyItemsLow": "19465,19448" + }, + { + "X": 57600, + "Y": 1024, + "Z": 29184, + "Room": 143, + "KeyItemsLow": "19465,19448", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": 1024, + "Z": 22016, + "Room": 1 + }, + { + "X": 44544, + "Y": 1280, + "Z": 17920, + "Room": 117 + }, + { + "X": 41472, + "Y": 768, + "Z": 20992, + "Room": 127 + }, + { + "X": 53760, + "Y": 1024, + "Z": 27136, + "Room": 27 + }, + { + "X": 54784, + "Y": 2304, + "Z": 28160, + "Room": 30 + }, + { + "X": 58880, + "Y": 2304, + "Z": 28160, + "Room": 28 + }, + { + "X": 58880, + "Y": 2304, + "Z": 45568, + "Room": 72 + }, + { + "X": 58880, + "Y": -768, + "Z": 45568, + "Room": 83, + "Validated": false + }, + { + "X": 56832, + "Y": -4096, + "Z": 42496, + "Room": 86, + "KeyItemsHigh": "19279,19343", + "Range": "Large" + }, + { + "X": 56832, + "Y": -4096, + "Z": 42240, + "Room": 86, + "KeyItemsHigh": "19279,19343", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": -4224, + "Z": 40448, + "Room": 126 + }, + { + "X": 48896, + "Y": -4608, + "Z": 38400, + "Room": 62, + "KeyItemsHigh": "19448" + }, + { + "X": 48896, + "Y": -4608, + "Z": 38656, + "Room": 62, + "KeyItemsHigh": "19448", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": -4608, + "Z": 38656, + "Room": 62, + "KeyItemsHigh": "19448", + "Range": "Medium" + }, + { + "X": 48384, + "Y": -4608, + "Z": 38656, + "Room": 62, + "KeyItemsHigh": "19448", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48384, + "Y": -4608, + "Z": 38400, + "Room": 62, + "KeyItemsHigh": "19448", + "Range": "Large" + }, + { + "X": 48640, + "Y": -4608, + "Z": 38400, + "Room": 62, + "KeyItemsHigh": "19448", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": -6400, + "Z": 42496, + "Room": 122 + }, + { + "X": 60928, + "Y": -5376, + "Z": 42496, + "Room": 123 + }, + { + "X": 52480, + "Y": -2048, + "Z": 51456, + "Room": 63, + "KeyItemsHigh": "19465" + }, + { + "X": 52736, + "Y": -2048, + "Z": 51456, + "Room": 63, + "KeyItemsHigh": "19465", + "RequiresReturnPath": true + }, + { + "X": 52992, + "Y": -2048, + "Z": 51456, + "Room": 63, + "KeyItemsHigh": "19465", + "Range": "Medium" + }, + { + "X": 52992, + "Y": -2048, + "Z": 51712, + "Room": 63, + "KeyItemsHigh": "19465", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": -2048, + "Z": 51712, + "Room": 63, + "KeyItemsHigh": "19465", + "Range": "Large" + }, + { + "X": 52480, + "Y": -2048, + "Z": 51712, + "Room": 63, + "KeyItemsHigh": "19465", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -2048, + "Z": 51712, + "Room": 15 + }, + { + "X": 48640, + "Y": -3840, + "Z": 51712, + "Room": 160 + }, + { + "X": 49664, + "Y": -768, + "Z": 52480, + "Room": 149, + "KeyItemsLow": "19465,19448", + "Range": "Medium" + }, + { + "X": 49664, + "Y": -768, + "Z": 52736, + "Room": 149, + "KeyItemsLow": "19465,19448", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -768, + "Z": 52992, + "Room": 149, + "KeyItemsLow": "19465,19448", + "Range": "Large" + }, + { + "X": 49408, + "Y": -768, + "Z": 52992, + "Room": 149, + "KeyItemsLow": "19465,19448", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": -768, + "Z": 52736, + "Room": 52 + }, + { + "X": 41472, + "Y": -256, + "Z": 50688, + "Room": 18 + }, + { + "X": 46592, + "Y": 768, + "Z": 50688, + "Room": 43 + }, + { + "X": 54784, + "Y": 768, + "Z": 51712, + "Room": 53 + }, + { + "X": 64000, + "Y": 1280, + "Z": 48640, + "Room": 75 + }, + { + "X": 65024, + "Y": 1152, + "Z": 48640, + "Room": 36 + }, + { + "X": 67072, + "Y": 512, + "Z": 48640, + "Room": 48 + }, + { + "X": 69120, + "Y": 1792, + "Z": 47616, + "Room": 161 + }, + { + "X": 46592, + "Y": 1024, + "Z": 52736, + "Room": 94 + }, + { + "X": 47360, + "Y": 2560, + "Z": 48640, + "Room": 109, + "KeyItemsHigh": "19465,19448", + "Range": "Medium" + }, + { + "X": 47616, + "Y": 2560, + "Z": 48640, + "Room": 109, + "KeyItemsHigh": "19465,19448", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 47872, + "Y": 2560, + "Z": 48640, + "Room": 109, + "KeyItemsHigh": "19465,19448", + "Range": "Large" + }, + { + "X": 47872, + "Y": 2560, + "Z": 48384, + "Room": 109, + "KeyItemsHigh": "19465,19448", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": 3072, + "Z": 46592, + "Room": 137 + }, + { + "X": 44544, + "Y": 3072, + "Z": 47616, + "Room": 136 + }, + { + "X": 44544, + "Y": 768, + "Z": 48640, + "Room": 135 + }, + { + "X": 46592, + "Y": 768, + "Z": 48640, + "Room": 105 + }, + { + "X": 46592, + "Y": 2560, + "Z": 41472, + "Room": 104 + }, + { + "X": 49664, + "Y": -768, + "Z": 54784, + "Room": 45 + }, + { + "X": 49664, + "Y": -768, + "Z": 58880, + "Room": 101 + }, + { + "X": 52736, + "Y": -3328, + "Z": 70144, + "Room": 158 + }, + { + "X": 50688, + "Y": 4352, + "Z": 36352, + "Room": 104 + } + ], + "TOWER.TR2": [ + { + "X": 81408, + "Y": -17920, + "Z": 39424, + "Room": 36, + "KeyItemsLow": "20447,20240", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 81408, + "Y": -17920, + "Z": 39168, + "Room": 36, + "KeyItemsLow": "20447,20240", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 81408, + "Y": -17920, + "Z": 34304, + "Room": 57 + }, + { + "X": 77312, + "Y": -17152, + "Z": 32256, + "Room": 49 + }, + { + "X": 74240, + "Y": -16128, + "Z": 32256, + "Room": 50 + }, + { + "X": 72192, + "Y": -15616, + "Z": 31232, + "Room": 141 + }, + { + "X": 69120, + "Y": -16128, + "Z": 32256, + "Room": 48 + }, + { + "X": 68096, + "Y": -15872, + "Z": 30208, + "Room": 46 + }, + { + "X": 67072, + "Y": -15872, + "Z": 29184, + "Room": 43, + "Validated": false + }, + { + "X": 66048, + "Y": -15488, + "Z": 27136, + "Room": 10, + "Validated": false + }, + { + "X": 61952, + "Y": -12288, + "Z": 27136, + "Room": 8, + "Validated": false + }, + { + "X": 61952, + "Y": -13696, + "Z": 28160, + "Room": 5, + "Validated": false + }, + { + "X": 61952, + "Y": -12032, + "Z": 32256, + "Room": 3 + }, + { + "X": 58880, + "Y": -11008, + "Z": 34304, + "Room": 2 + }, + { + "X": 57856, + "Y": -8704, + "Z": 34304, + "Room": 72 + }, + { + "X": 61952, + "Y": -15872, + "Z": 32256, + "Room": 4, + "KeyItemsLow": "20240", + "Range": "Large" + }, + { + "X": 62208, + "Y": -15872, + "Z": 32256, + "Room": 4, + "KeyItemsLow": "20240", + "Range": "Medium" + }, + { + "X": 62976, + "Y": -15616, + "Z": 32256, + "Room": 33 + }, + { + "X": 62976, + "Y": -15616, + "Z": 31232, + "Room": 38 + }, + { + "X": 67072, + "Y": -15104, + "Z": 31232, + "Room": 45 + }, + { + "X": 62976, + "Y": -20736, + "Z": 31232, + "Room": 17 + }, + { + "X": 62976, + "Y": -22016, + "Z": 31232, + "Room": 0 + }, + { + "X": 59904, + "Y": -26880, + "Z": 32256, + "Room": 63 + }, + { + "X": 58880, + "Y": -26880, + "Z": 32256, + "Room": 65, + "KeyItemsHigh": "20447", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -26880, + "Z": 33280, + "Room": 105 + }, + { + "X": 54784, + "Y": -28672, + "Z": 33280, + "Room": 120 + }, + { + "X": 54784, + "Y": -26368, + "Z": 34304, + "Room": 124 + }, + { + "X": 53760, + "Y": -26368, + "Z": 34304, + "Room": 123 + }, + { + "X": 52736, + "Y": -26368, + "Z": 34304, + "Room": 121 + }, + { + "X": 51712, + "Y": -26368, + "Z": 34304, + "Room": 107 + }, + { + "X": 50688, + "Y": -26368, + "Z": 35328, + "Room": 115 + }, + { + "X": 50688, + "Y": -26368, + "Z": 36352, + "Room": 112 + }, + { + "X": 49664, + "Y": -25600, + "Z": 37376, + "Room": 111, + "KeyItemsLow": "20240" + }, + { + "X": 49983, + "Y": -25600, + "Z": 37374, + "Room": 111, + "KeyItemsLow": "20240", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -26368, + "Z": 42496, + "Room": 108 + }, + { + "X": 51712, + "Y": -27904, + "Z": 42496, + "Room": 113 + }, + { + "X": 51712, + "Y": -29440, + "Z": 43520, + "Room": 126 + }, + { + "X": 51712, + "Y": -29440, + "Z": 44544, + "Room": 127 + }, + { + "X": 49664, + "Y": -29440, + "Z": 44544, + "Room": 128 + }, + { + "X": 50688, + "Y": -32256, + "Z": 44544, + "Room": 27 + }, + { + "X": 51712, + "Y": -29440, + "Z": 37376, + "Room": 129 + }, + { + "X": 51712, + "Y": -30464, + "Z": 36352, + "Room": 131 + }, + { + "X": 50688, + "Y": -29568, + "Z": 34304, + "Room": 133 + }, + { + "X": 50688, + "Y": -31488, + "Z": 42496, + "Room": 130 + }, + { + "X": 47616, + "Y": -30976, + "Z": 37376, + "Room": 132 + }, + { + "X": 46592, + "Y": -30976, + "Z": 37376, + "Room": 136 + }, + { + "X": 45568, + "Y": -31104, + "Z": 38400, + "Room": 78 + }, + { + "X": 44544, + "Y": -24064, + "Z": 37376, + "Room": 87, + "Validated": false + }, + { + "X": 44544, + "Y": 512, + "Z": 38400, + "Room": 188, + "Validated": false + }, + { + "X": 40448, + "Y": -31488, + "Z": 38400, + "Room": 83 + }, + { + "X": 40448, + "Y": -31488, + "Z": 36352, + "Room": 109 + }, + { + "X": 40448, + "Y": -30464, + "Z": 35328, + "Room": 147 + }, + { + "X": 41472, + "Y": -30464, + "Z": 32256, + "Room": 169 + }, + { + "X": 42496, + "Y": -30464, + "Z": 31232, + "Room": 171 + }, + { + "X": 42496, + "Y": -30464, + "Z": 27136, + "Room": 172 + }, + { + "X": 44544, + "Y": -30464, + "Z": 27136, + "Room": 164 + }, + { + "X": 44544, + "Y": -30464, + "Z": 29184, + "Room": 152 + }, + { + "X": 44544, + "Y": -30464, + "Z": 30208, + "Room": 150 + }, + { + "X": 44544, + "Y": -30464, + "Z": 31232, + "Room": 52 + }, + { + "X": 43520, + "Y": -30464, + "Z": 34304, + "Room": 149 + }, + { + "X": 47616, + "Y": -28928, + "Z": 27136, + "Room": 173 + }, + { + "X": 51712, + "Y": -27008, + "Z": 26112, + "Room": 56, + "KeyItemsHigh": "20240" + }, + { + "X": 51456, + "Y": -27008, + "Z": 26112, + "Room": 56, + "KeyItemsHigh": "20240", + "RequiresReturnPath": true + }, + { + "X": 49664, + "Y": -23552, + "Z": 28160, + "Room": 15, + "Validated": false + }, + { + "X": 43520, + "Y": -22016, + "Z": 32256, + "Room": 68, + "Validated": false + }, + { + "X": 43520, + "Y": -19200, + "Z": 30208, + "Room": 70, + "Validated": false + }, + { + "X": 48640, + "Y": -20608, + "Z": 28160, + "Room": 18 + }, + { + "X": 59904, + "Y": -22016, + "Z": 28160, + "Room": 75, + "Validated": false + }, + { + "X": 59904, + "Y": -19200, + "Z": 29184, + "Room": 76, + "Validated": false + }, + { + "X": 44544, + "Y": -13824, + "Z": 32256, + "Room": 73 + }, + { + "X": 46592, + "Y": -15744, + "Z": 22016, + "Room": 35 + }, + { + "X": 58880, + "Y": -13824, + "Z": 18944, + "Room": 77 + }, + { + "X": 60928, + "Y": -13824, + "Z": 24064, + "Room": 20 + }, + { + "X": 73216, + "Y": -15360, + "Z": 23040, + "Room": 174 + }, + { + "X": 73216, + "Y": -17152, + "Z": 24064, + "Room": 175 + }, + { + "X": 71168, + "Y": -18432, + "Z": 25088, + "Room": 54 + }, + { + "X": 72192, + "Y": -18944, + "Z": 22016, + "Room": 71 + }, + { + "X": 72192, + "Y": -20224, + "Z": 23040, + "Room": 209 + }, + { + "X": 73216, + "Y": -18432, + "Z": 26112, + "Room": 176 + }, + { + "X": 73216, + "Y": -17152, + "Z": 27136, + "Room": 148 + }, + { + "X": 81664, + "Y": -17920, + "Z": 43520, + "Room": 177, + "KeyItemsHigh": "20240", + "Range": "Medium" + }, + { + "X": 81664, + "Y": -17920, + "Z": 43776, + "Room": 177, + "KeyItemsHigh": "20240", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 81408, + "Y": -17920, + "Z": 43776, + "Room": 177, + "KeyItemsHigh": "20240", + "Range": "Large" + }, + { + "X": 81152, + "Y": -17920, + "Z": 43776, + "Room": 177, + "KeyItemsHigh": "20240", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 81408, + "Y": 768, + "Z": 45568, + "Room": 98 + }, + { + "X": 73216, + "Y": 1024, + "Z": 44544, + "Room": 42 + }, + { + "X": 72192, + "Y": 640, + "Z": 45568, + "Room": 11 + }, + { + "X": 70144, + "Y": 0, + "Z": 40448, + "Room": 182 + }, + { + "X": 66048, + "Y": 768, + "Z": 40448, + "Room": 183 + }, + { + "X": 70144, + "Y": 1536, + "Z": 55808, + "Room": 97 + }, + { + "X": 66048, + "Y": 2304, + "Z": 55808, + "Room": 137 + }, + { + "X": 56832, + "Y": 3840, + "Z": 43520, + "Room": 192 + }, + { + "X": 57856, + "Y": -768, + "Z": 37376, + "Room": 32 + }, + { + "X": 58880, + "Y": -2816, + "Z": 37376, + "Room": 195 + }, + { + "X": 60928, + "Y": -1536, + "Z": 33280, + "Room": 196, + "RequiresReturnPath": true + }, + { + "X": 59904, + "Y": -1536, + "Z": 28160, + "Room": 197 + }, + { + "X": 61952, + "Y": -3072, + "Z": 28160, + "Room": 100 + }, + { + "X": 58880, + "Y": -1536, + "Z": 32256, + "Room": 198 + }, + { + "X": 53760, + "Y": -2176, + "Z": 32256, + "Room": 40, + "KeyItemsLow": "20447" + }, + { + "X": 53504, + "Y": -2118, + "Z": 32256, + "Room": 40, + "KeyItemsLow": "20447", + "RequiresReturnPath": true + }, + { + "X": 53762, + "Y": -2176, + "Z": 32509, + "Room": 40, + "KeyItemsLow": "20447", + "Range": "Medium" + }, + { + "X": 53491, + "Y": -2108, + "Z": 32488, + "Room": 40, + "KeyItemsLow": "20447", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 53301, + "Y": -2061, + "Z": 32203, + "Room": 40, + "KeyItemsLow": "20447", + "Range": "Large" + }, + { + "X": 53316, + "Y": -2065, + "Z": 32426, + "Room": 40, + "KeyItemsLow": "20240", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -1664, + "Z": 33280, + "Room": 134 + }, + { + "X": 51712, + "Y": -1408, + "Z": 38400, + "Room": 47 + }, + { + "X": 49664, + "Y": -4352, + "Z": 35328, + "Room": 69 + }, + { + "X": 50688, + "Y": -2816, + "Z": 30208, + "Room": 189 + }, + { + "X": 44544, + "Y": -6912, + "Z": 22016, + "Room": 24 + }, + { + "X": 57856, + "Y": -4096, + "Z": 22016, + "Room": 29 + }, + { + "X": 57856, + "Y": -1536, + "Z": 20992, + "Room": 25 + }, + { + "X": 56832, + "Y": 128, + "Z": 22016, + "Room": 203 + }, + { + "X": 56832, + "Y": -1536, + "Z": 26112, + "Room": 102 + }, + { + "X": 58880, + "Y": -1536, + "Z": 26112, + "Room": 135 + }, + { + "X": 58880, + "Y": -1536, + "Z": 24064, + "Room": 103, + "KeyItemsHigh": "20447", + "Validated": false + }, + { + "X": 58880, + "Y": -1536, + "Z": 23808, + "Room": 103, + "KeyItemsHigh": "20447", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 58624, + "Y": -1536, + "Z": 23808, + "Room": 103, + "KeyItemsHigh": "20240", + "Range": "Large", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 53760, + "Y": 640, + "Z": 22016, + "Room": 204 + }, + { + "X": 51712, + "Y": 640, + "Z": 22016, + "Room": 84 + }, + { + "X": 49664, + "Y": 640, + "Z": 22016, + "Room": 34 + }, + { + "X": 32256, + "Y": 1280, + "Z": 20992, + "Room": 39, + "KeyItemsHigh": "20447", + "Range": "Medium" + }, + { + "X": 32256, + "Y": 1280, + "Z": 20736, + "Room": 39, + "KeyItemsHigh": "20447", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": 1280, + "Z": 17920, + "Room": 86 + }, + { + "X": 28160, + "Y": 1280, + "Z": 29184, + "Room": 1 + }, + { + "X": 31232, + "Y": -2048, + "Z": 28160, + "Room": 92 + }, + { + "X": 31232, + "Y": -1792, + "Z": 29184, + "Room": 190 + }, + { + "X": 28160, + "Y": -2560, + "Z": 29184, + "Room": 200 + }, + { + "X": 24064, + "Y": -2304, + "Z": 22016, + "Room": 180 + }, + { + "X": 35328, + "Y": 1280, + "Z": 25088, + "Room": 61 + }, + { + "X": 39424, + "Y": 896, + "Z": 25088, + "Room": 64 + }, + { + "X": 35328, + "Y": -2688, + "Z": 20992, + "Room": 93 + }, + { + "X": 38400, + "Y": -2304, + "Z": 23040, + "Room": 101 + }, + { + "X": 38400, + "Y": -2304, + "Z": 29184, + "Room": 139 + }, + { + "X": 39424, + "Y": 2816, + "Z": 30208, + "Room": 90 + }, + { + "X": 37376, + "Y": 2816, + "Z": 30208, + "Room": 140 + }, + { + "X": 28160, + "Y": -1920, + "Z": 17920, + "Room": 144 + }, + { + "X": 30208, + "Y": -1920, + "Z": 15872, + "Room": 146 + }, + { + "X": 39424, + "Y": -2304, + "Z": 16896, + "Room": 145 + }, + { + "X": 26112, + "Y": -1792, + "Z": 33280, + "Room": 181 + }, + { + "X": 25088, + "Y": -2560, + "Z": 25088, + "Room": 179 + }, + { + "X": 26112, + "Y": 1280, + "Z": 33280, + "Room": 6 + }, + { + "X": 29184, + "Y": -26624, + "Z": 36352, + "Room": 156, + "KeyItemsLow": "20447", + "Range": "Medium" + }, + { + "X": 29440, + "Y": -26624, + "Z": 36352, + "Room": 156, + "KeyItemsLow": "20447", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 29184, + "Y": -25600, + "Z": 37376, + "Room": 153 + }, + { + "X": 30208, + "Y": -21760, + "Z": 38400, + "Room": 160 + }, + { + "X": 29184, + "Y": -26624, + "Z": 46592, + "Room": 161 + }, + { + "X": 29184, + "Y": -26624, + "Z": 47616, + "Room": 162 + }, + { + "X": 31232, + "Y": -26496, + "Z": 46592, + "Room": 163 + }, + { + "X": 31232, + "Y": -26368, + "Z": 45568, + "Room": 157 + }, + { + "X": 31232, + "Y": -27904, + "Z": 35328, + "Room": 166 + }, + { + "X": 26112, + "Y": -26624, + "Z": 33280, + "Room": 159 + }, + { + "X": 26112, + "Y": -27904, + "Z": 35328, + "Room": 165 + }, + { + "X": 26112, + "Y": -27904, + "Z": 36352, + "Room": 168 + }, + { + "X": 26112, + "Y": -28032, + "Z": 46592, + "Room": 110 + }, + { + "X": 26112, + "Y": -28160, + "Z": 47616, + "Room": 119 + }, + { + "X": 28160, + "Y": -27648, + "Z": 48640, + "Room": 122 + }, + { + "X": 28160, + "Y": -17152, + "Z": 50688, + "Room": 104, + "Validated": false + }, + { + "X": 28160, + "Y": -28416, + "Z": 31232, + "Room": 167 + }, + { + "X": 27904, + "Y": -26880, + "Z": 28160, + "Room": 191, + "KeyItemsHigh": "20447", + "Range": "Medium" + }, + { + "X": 27904, + "Y": -26880, + "Z": 27904, + "Room": 191, + "KeyItemsHigh": "20447", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": -26880, + "Z": 27904, + "Room": 191, + "KeyItemsHigh": "20447", + "Range": "Large" + }, + { + "X": 28416, + "Y": -26880, + "Z": 27904, + "Room": 191, + "KeyItemsHigh": "20447", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 35328, + "Y": -2560, + "Z": 26112, + "Room": 184 + }, + { + "X": 33280, + "Y": -768, + "Z": 34304, + "Room": 16 + }, + { + "X": 32256, + "Y": -26624, + "Z": 32256, + "Room": 158 + }, + { + "X": 33280, + "Y": -26624, + "Z": 36352, + "Room": 155 + }, + { + "X": 33280, + "Y": -26368, + "Z": 47616, + "Room": 208 + }, + { + "X": 33280, + "Y": -26368, + "Z": 52736, + "Room": 55 + }, + { + "X": 33280, + "Y": -26368, + "Z": 53760, + "Room": 53 + }, + { + "X": 32256, + "Y": -28160, + "Z": 47616, + "Room": 67 + }, + { + "X": 26112, + "Y": -26880, + "Z": 47616, + "Room": 143 + }, + { + "X": 25088, + "Y": -29696, + "Z": 48640, + "Room": 51 + }, + { + "X": 25088, + "Y": -30464, + "Z": 50688, + "Room": 41 + }, + { + "X": 26112, + "Y": -30464, + "Z": 50688, + "Room": 9 + }, + { + "X": 30208, + "Y": -29440, + "Z": 50688, + "Room": 106 + }, + { + "X": 31232, + "Y": -29440, + "Z": 50688, + "Room": 19 + }, + { + "X": 31232, + "Y": -30464, + "Z": 53760, + "Room": 21 + }, + { + "X": 28160, + "Y": -30208, + "Z": 48640, + "Room": 22 + }, + { + "X": 29184, + "Y": -30336, + "Z": 48640, + "Room": 207 + } + ], + "OFFICE.TR2": [ + { + "X": 51712, + "Y": 0, + "Z": 50688, + "Room": 4 + }, + { + "X": 52736, + "Y": 0, + "Z": 47616, + "Room": 1 + }, + { + "X": 52736, + "Y": 0, + "Z": 45568, + "Room": 19 + }, + { + "X": 47616, + "Y": 0, + "Z": 53760, + "Room": 7 + }, + { + "X": 44544, + "Y": 0, + "Z": 53760, + "Room": 8 + }, + { + "X": 40448, + "Y": -4352, + "Z": 53760, + "Room": 10 + }, + { + "X": 42496, + "Y": -6400, + "Z": 53760, + "Room": 11 + }, + { + "X": 42496, + "Y": -7936, + "Z": 52736, + "Room": 12 + }, + { + "X": 38400, + "Y": -10496, + "Z": 59904, + "Room": 13 + }, + { + "X": 38400, + "Y": -11776, + "Z": 59904, + "Room": 14 + }, + { + "X": 31232, + "Y": -13312, + "Z": 53760, + "Room": 15 + }, + { + "X": 33280, + "Y": -13312, + "Z": 58880, + "Room": 15, + "Validated": false + }, + { + "X": 33280, + "Y": -15360, + "Z": 57856, + "Room": 16, + "Validated": false + }, + { + "X": 29184, + "Y": -17152, + "Z": 58880, + "Room": 17, + "Validated": false + } + ], + "NEVADA.TR2": [ + { + "X": 23040, + "Y": -2176, + "Z": 4608, + "Room": 0, + "KeyItemsLow": "22359,22578", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": 0, + "Z": 8704, + "Room": 1 + }, + { + "X": 26112, + "Y": 0, + "Z": 19968, + "Room": 4 + }, + { + "X": 30208, + "Y": 0, + "Z": 24064, + "Room": 6 + }, + { + "X": 22016, + "Y": 768, + "Z": 27136, + "Room": 11 + }, + { + "X": 23040, + "Y": -256, + "Z": 32256, + "Room": 5 + }, + { + "X": 25088, + "Y": -768, + "Z": 36352, + "Room": 9 + }, + { + "X": 28160, + "Y": -1280, + "Z": 36352, + "Room": 16 + }, + { + "X": 28160, + "Y": -2560, + "Z": 31232, + "Room": 15 + }, + { + "X": 31232, + "Y": -256, + "Z": 32256, + "Room": 18 + }, + { + "X": 29184, + "Y": -512, + "Z": 33280, + "Room": 17 + }, + { + "X": 35328, + "Y": -5120, + "Z": 30208, + "Room": 10 + }, + { + "X": 35328, + "Y": -5120, + "Z": 26112, + "Room": 7 + }, + { + "X": 35328, + "Y": -5120, + "Z": 18944, + "Room": 8 + }, + { + "X": 29184, + "Y": -5120, + "Z": 22016, + "Room": 3 + }, + { + "X": 13824, + "Y": -7040, + "Z": 26112, + "Room": 21, + "Validated": false + }, + { + "X": 14848, + "Y": -2048, + "Z": 18944, + "Room": 19 + }, + { + "X": 11776, + "Y": -5120, + "Z": 15872, + "Room": 20, + "Validated": false + }, + { + "X": 15872, + "Y": -5120, + "Z": 10752, + "Room": 2, + "Validated": false + }, + { + "X": 32256, + "Y": 2944, + "Z": 18944, + "Room": 24, + "KeyItemsLow": "22359,22578", + "Range": "Large" + }, + { + "X": 38400, + "Y": 3584, + "Z": 19968, + "Room": 25 + }, + { + "X": 37376, + "Y": 256, + "Z": 30208, + "Room": 26, + "KeyItemsLow": "22359", + "Range": "Medium" + }, + { + "X": 37376, + "Y": 256, + "Z": 30464, + "Room": 26, + "KeyItemsLow": "22359", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 36352, + "Y": 0, + "Z": 32256, + "Room": 181, + "RoomType": "ReturnPath" + }, + { + "X": 38400, + "Y": 0, + "Z": 33280, + "Room": 27 + }, + { + "X": 39424, + "Y": -256, + "Z": 38400, + "Room": 28 + }, + { + "X": 44544, + "Y": 0, + "Z": 44544, + "Room": 34 + }, + { + "X": 46592, + "Y": -3456, + "Z": 49664, + "Room": 35 + }, + { + "X": 42496, + "Y": 1280, + "Z": 50688, + "Room": 33 + }, + { + "X": 45568, + "Y": 7424, + "Z": 50688, + "Room": 32 + }, + { + "X": 45568, + "Y": 7680, + "Z": 43520, + "Room": 31 + }, + { + "X": 28160, + "Y": 9472, + "Z": 39424, + "Room": 40 + }, + { + "X": 33280, + "Y": 4864, + "Z": 38400, + "Room": 29 + }, + { + "X": 41472, + "Y": -3840, + "Z": 43520, + "Room": 30, + "KeyItemsLow": "22578", + "Range": "Medium" + }, + { + "X": 41472, + "Y": -3840, + "Z": 43264, + "Room": 30, + "KeyItemsLow": "22578", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": -3328, + "Z": 44544, + "Room": 36 + }, + { + "X": 35328, + "Y": -3072, + "Z": 48640, + "Room": 170 + }, + { + "X": 35328, + "Y": -3200, + "Z": 50688, + "Room": 123, + "Validated": false + }, + { + "X": 39424, + "Y": -512, + "Z": 57856, + "Room": 174, + "Validated": false + }, + { + "X": 28160, + "Y": -3200, + "Z": 41472, + "Room": 37, + "KeyItemsLow": "22359" + }, + { + "X": 28160, + "Y": -3200, + "Z": 41216, + "Room": 37, + "KeyItemsLow": "22359", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -3072, + "Z": 42496, + "Room": 41 + }, + { + "X": 19968, + "Y": -3072, + "Z": 47616, + "Room": 48 + }, + { + "X": 13824, + "Y": -5376, + "Z": 47616, + "Room": 46 + }, + { + "X": 17920, + "Y": -3200, + "Z": 57856, + "Room": 47 + }, + { + "X": 19968, + "Y": -1792, + "Z": 57856, + "Room": 44 + }, + { + "X": 17920, + "Y": -3200, + "Z": 58880, + "Room": 134 + }, + { + "X": 17920, + "Y": -3200, + "Z": 59904, + "Room": 130 + }, + { + "X": 22016, + "Y": -3328, + "Z": 65024, + "Room": 43 + }, + { + "X": 27136, + "Y": -3328, + "Z": 58880, + "Room": 133 + }, + { + "X": 25088, + "Y": -5632, + "Z": 60928, + "Room": 165 + }, + { + "X": 24064, + "Y": -9216, + "Z": 60928, + "Room": 51 + }, + { + "X": 23040, + "Y": -9728, + "Z": 59904, + "Room": 49 + }, + { + "X": 22016, + "Y": -8704, + "Z": 60928, + "Room": 61 + }, + { + "X": 18944, + "Y": -9216, + "Z": 60928, + "Room": 62 + }, + { + "X": 16896, + "Y": -9472, + "Z": 55808, + "Room": 52, + "Validated": false + }, + { + "X": 17920, + "Y": -5632, + "Z": 60928, + "Room": 45, + "Validated": false + }, + { + "X": 22016, + "Y": -8704, + "Z": 67072, + "Room": 58 + }, + { + "X": 23040, + "Y": -9728, + "Z": 66048, + "Room": 56 + }, + { + "X": 22016, + "Y": -8704, + "Z": 73216, + "Room": 107 + }, + { + "X": 23040, + "Y": -9728, + "Z": 73216, + "Room": 67 + }, + { + "X": 27136, + "Y": -8448, + "Z": 74240, + "Room": 110 + }, + { + "X": 27136, + "Y": -9728, + "Z": 73216, + "Room": 65 + }, + { + "X": 32256, + "Y": -5376, + "Z": 71168, + "Room": 108 + }, + { + "X": 35328, + "Y": -5632, + "Z": 71168, + "Room": 177 + }, + { + "X": 31232, + "Y": -8448, + "Z": 67072, + "Room": 63, + "Validated": false + }, + { + "X": 32256, + "Y": -5376, + "Z": 73216, + "Room": 109 + }, + { + "X": 32256, + "Y": -5376, + "Z": 77312, + "Room": 111 + }, + { + "X": 29184, + "Y": -14592, + "Z": 72192, + "Room": 66, + "Validated": false + }, + { + "X": 36352, + "Y": -1280, + "Z": 81408, + "Room": 141 + }, + { + "X": 37376, + "Y": -1280, + "Z": 86528, + "Room": 166 + }, + { + "X": 39424, + "Y": -12800, + "Z": 86528, + "Room": 120 + }, + { + "X": 36352, + "Y": -12800, + "Z": 86528, + "Room": 119 + }, + { + "X": 32256, + "Y": -9600, + "Z": 56832, + "Room": 64 + }, + { + "X": 31232, + "Y": -6528, + "Z": 58880, + "Room": 57 + }, + { + "X": 30208, + "Y": -6656, + "Z": 56832, + "Room": 179 + }, + { + "X": 11776, + "Y": -3328, + "Z": 58880, + "Room": 68 + }, + { + "X": 10752, + "Y": -3584, + "Z": 60928, + "Room": 81 + }, + { + "X": 7680, + "Y": -3712, + "Z": 58880, + "Room": 82 + }, + { + "X": 5632, + "Y": -3328, + "Z": 59904, + "Room": 74 + }, + { + "X": 3584, + "Y": 2304, + "Z": 59904, + "Room": 80, + "Validated": false + }, + { + "X": 4608, + "Y": 4864, + "Z": 60672, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "Validated": false + }, + { + "X": 4608, + "Y": 4864, + "Z": 60928, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 4608, + "Y": 4864, + "Z": 61184, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "Range": "Medium", + "Validated": false + }, + { + "X": 4352, + "Y": 4864, + "Z": 61184, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "Range": "Medium", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 4352, + "Y": 4864, + "Z": 60928, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "Range": "Large", + "Validated": false + }, + { + "X": 4352, + "Y": 4864, + "Z": 60672, + "Room": 83, + "KeyItemsHigh": "22419", + "KeyItemsLow": "22419", + "Range": "Large", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 4608, + "Y": -3584, + "Z": 61952, + "Room": 78 + }, + { + "X": 1536, + "Y": -3328, + "Z": 60928, + "Room": 73 + }, + { + "X": 2560, + "Y": -3584, + "Z": 57856, + "Room": 77 + }, + { + "X": 3584, + "Y": -5632, + "Z": 61952, + "Room": 76, + "Validated": false + }, + { + "X": 3584, + "Y": -5632, + "Z": 57856, + "Room": 75, + "Validated": false + }, + { + "X": 38400, + "Y": -1792, + "Z": 49920, + "Room": 171, + "KeyItemsHigh": "22359" + }, + { + "X": 38400, + "Y": -1792, + "Z": 49664, + "Room": 171, + "KeyItemsHigh": "22359", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": -1792, + "Z": 49408, + "Room": 171, + "KeyItemsHigh": "22359", + "Range": "Medium" + }, + { + "X": 38593, + "Y": -1695, + "Z": 49408, + "Room": 171, + "KeyItemsHigh": "22359", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 38593, + "Y": -1701, + "Z": 49661, + "Room": 171, + "KeyItemsHigh": "22359", + "Range": "Large" + }, + { + "X": 38593, + "Y": -1693, + "Z": 49915, + "Room": 171, + "KeyItemsHigh": "22359", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -3328, + "Z": 52736, + "Room": 172 + }, + { + "X": 42496, + "Y": -5120, + "Z": 53760, + "Room": 118, + "KeyItemsLow": "22578" + }, + { + "X": 42752, + "Y": -5120, + "Z": 53760, + "Room": 118, + "KeyItemsLow": "22578", + "RequiresReturnPath": true + }, + { + "X": 46592, + "Y": -4352, + "Z": 54784, + "Room": 116 + }, + { + "X": 56832, + "Y": -2944, + "Z": 61952, + "Room": 112 + }, + { + "X": 55808, + "Y": -2816, + "Z": 71168, + "Room": 152 + }, + { + "X": 55808, + "Y": -3584, + "Z": 75264, + "Room": 92 + }, + { + "X": 57856, + "Y": -4096, + "Z": 78336, + "Room": 95 + }, + { + "X": 55808, + "Y": -5888, + "Z": 80384, + "Room": 97 + }, + { + "X": 55808, + "Y": -7680, + "Z": 81408, + "Room": 96 + }, + { + "X": 55808, + "Y": -6656, + "Z": 83456, + "Room": 94 + }, + { + "X": 56832, + "Y": -5248, + "Z": 84480, + "Room": 93 + }, + { + "X": 54784, + "Y": -5120, + "Z": 85504, + "Room": 168 + }, + { + "X": 57856, + "Y": -3072, + "Z": 65024, + "Room": 117 + }, + { + "X": 62976, + "Y": -2304, + "Z": 64000, + "Room": 153 + }, + { + "X": 65024, + "Y": -128, + "Z": 67072, + "Room": 148 + }, + { + "X": 67072, + "Y": -128, + "Z": 72192, + "Room": 144 + }, + { + "X": 56832, + "Y": -3328, + "Z": 80384, + "Room": 98 + }, + { + "X": 55808, + "Y": -2816, + "Z": 83456, + "Room": 99 + }, + { + "X": 53760, + "Y": -2816, + "Z": 83456, + "Room": 155 + }, + { + "X": 47616, + "Y": -6656, + "Z": 84480, + "Room": 159 + }, + { + "X": 48640, + "Y": -4608, + "Z": 86528, + "Room": 169 + }, + { + "X": 52736, + "Y": -6144, + "Z": 85504, + "Room": 160, + "Validated": false + }, + { + "X": 42496, + "Y": -5504, + "Z": 86528, + "Room": 158, + "Validated": false + }, + { + "X": 49664, + "Y": -3840, + "Z": 80384, + "Room": 151 + }, + { + "X": 44544, + "Y": -2816, + "Z": 79360, + "Room": 150 + }, + { + "X": 46592, + "Y": -2816, + "Z": 73216, + "Room": 149 + }, + { + "X": 50688, + "Y": -2816, + "Z": 70144, + "Room": 115 + }, + { + "X": 48640, + "Y": -3072, + "Z": 68096, + "Room": 113 + }, + { + "X": 51712, + "Y": -6656, + "Z": 76288, + "Room": 154 + }, + { + "X": 47616, + "Y": -3328, + "Z": 78336, + "Room": 156 + }, + { + "X": 51712, + "Y": -3072, + "Z": 78336, + "Room": 162 + }, + { + "X": 48640, + "Y": -3072, + "Z": 74240, + "Room": 163 + }, + { + "X": 50688, + "Y": -2816, + "Z": 64000, + "Room": 114 + }, + { + "X": 58624, + "Y": -2816, + "Z": 77312, + "Room": 143, + "KeyItemsHigh": "22578", + "Validated": false + }, + { + "X": 58880, + "Y": -2816, + "Z": 77312, + "Room": 143, + "KeyItemsHigh": "22578", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 59136, + "Y": -2816, + "Z": 77312, + "Room": 143, + "KeyItemsHigh": "22578", + "Range": "Medium", + "Validated": false + }, + { + "X": 59136, + "Y": -2816, + "Z": 77568, + "Room": 143, + "KeyItemsHigh": "22578", + "Range": "Medium", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 58880, + "Y": -2816, + "Z": 77568, + "Room": 143, + "KeyItemsHigh": "22578", + "Range": "Large", + "Validated": false + }, + { + "X": 58624, + "Y": -2816, + "Z": 77568, + "Room": 143, + "KeyItemsHigh": "22578", + "Range": "Large", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 62976, + "Y": 0, + "Z": 82432, + "Room": 145, + "Validated": false + }, + { + "X": 69120, + "Y": 2560, + "Z": 87552, + "Room": 146, + "Validated": false + } + ], + "COMPOUND.TR2": [ + { + "X": 17152, + "Y": 0, + "Z": 24064, + "Room": 2, + "KeyItemsLow": "23260" + }, + { + "X": 16896, + "Y": 0, + "Z": 24064, + "Room": 2, + "KeyItemsLow": "23260", + "RequiresReturnPath": true + }, + { + "X": 16640, + "Y": 0, + "Z": 24064, + "Room": 2, + "KeyItemsLow": "23260", + "Range": "Medium" + }, + { + "X": 16640, + "Y": 0, + "Z": 24320, + "Room": 2, + "KeyItemsLow": "23260", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 16896, + "Y": 0, + "Z": 24320, + "Room": 2, + "KeyItemsLow": "23260,23454,23537", + "Range": "Large" + }, + { + "X": 17152, + "Y": 0, + "Z": 24320, + "Room": 2, + "KeyItemsLow": "23260,23454,23537", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 16896, + "Y": 0, + "Z": 27136, + "Room": 117 + }, + { + "X": 13824, + "Y": 0, + "Z": 26112, + "Room": 1 + }, + { + "X": 10752, + "Y": 0, + "Z": 26112, + "Room": 0 + }, + { + "X": 7680, + "Y": 0, + "Z": 26112, + "Room": 113 + }, + { + "X": 5632, + "Y": 512, + "Z": 29184, + "Room": 7 + }, + { + "X": 16896, + "Y": 0, + "Z": 36352, + "Room": 6 + }, + { + "X": 13824, + "Y": 0, + "Z": 36352, + "Room": 5 + }, + { + "X": 10752, + "Y": 0, + "Z": 36352, + "Room": 4 + }, + { + "X": 7680, + "Y": 0, + "Z": 36352, + "Room": 3 + }, + { + "X": 5632, + "Y": -512, + "Z": 37376, + "Room": 57 + }, + { + "X": 3584, + "Y": -512, + "Z": 36352, + "Room": 56 + }, + { + "X": 1536, + "Y": -512, + "Z": 35328, + "Room": 54 + }, + { + "X": 3584, + "Y": -1792, + "Z": 37376, + "Room": 9 + }, + { + "X": 23040, + "Y": -1792, + "Z": 37376, + "Room": 63 + }, + { + "X": 20992, + "Y": 3328, + "Z": 37376, + "Room": 64, + "Validated": false + }, + { + "X": 19968, + "Y": 256, + "Z": 37376, + "Room": 53 + }, + { + "X": 20992, + "Y": 256, + "Z": 30208, + "Room": 58 + }, + { + "X": 22016, + "Y": 2048, + "Z": 23040, + "Room": 51 + }, + { + "X": 23040, + "Y": 2048, + "Z": 25088, + "Room": 50 + }, + { + "X": 20992, + "Y": 2048, + "Z": 28160, + "Room": 49 + }, + { + "X": 19968, + "Y": 2048, + "Z": 22016, + "Room": 32 + }, + { + "X": 19968, + "Y": 2048, + "Z": 26112, + "Room": 52 + }, + { + "X": 19968, + "Y": 2048, + "Z": 30208, + "Room": 10 + }, + { + "X": 24064, + "Y": 2048, + "Z": 32000, + "Room": 11, + "KeyItemsHigh": "23260" + }, + { + "X": 24064, + "Y": 2048, + "Z": 32256, + "Room": 11, + "KeyItemsHigh": "23260", + "RequiresReturnPath": true + }, + { + "X": 24064, + "Y": 2048, + "Z": 32512, + "Room": 11, + "KeyItemsHigh": "23260", + "KeyItemsLow": "23454,23537", + "Range": "Medium" + }, + { + "X": 24320, + "Y": 2048, + "Z": 32512, + "Room": 11, + "KeyItemsHigh": "23260", + "KeyItemsLow": "23454,23537", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 24320, + "Y": 2048, + "Z": 32256, + "Room": 11, + "KeyItemsHigh": "23260", + "Range": "Large" + }, + { + "X": 24320, + "Y": 2048, + "Z": 32000, + "Room": 11, + "KeyItemsHigh": "23260", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": 2048, + "Z": 33280, + "Room": 16 + }, + { + "X": 31232, + "Y": 2048, + "Z": 37376, + "Room": 20 + }, + { + "X": 26112, + "Y": 2048, + "Z": 40448, + "Room": 21 + }, + { + "X": 25088, + "Y": 0, + "Z": 44544, + "Room": 27 + }, + { + "X": 32256, + "Y": -768, + "Z": 42496, + "Room": 24 + }, + { + "X": 35328, + "Y": -768, + "Z": 41472, + "Room": 23 + }, + { + "X": 35328, + "Y": -768, + "Z": 39424, + "Room": 26 + }, + { + "X": 29184, + "Y": 768, + "Z": 36352, + "Room": 15 + }, + { + "X": 28160, + "Y": 2304, + "Z": 19968, + "Room": 13 + }, + { + "X": 27136, + "Y": 2560, + "Z": 18944, + "Room": 12 + }, + { + "X": 27136, + "Y": 2304, + "Z": 22016, + "Room": 14 + }, + { + "X": 27136, + "Y": 2176, + "Z": 24064, + "Room": 17 + }, + { + "X": 28160, + "Y": 2048, + "Z": 27136, + "Room": 18 + }, + { + "X": 35328, + "Y": 1536, + "Z": 42496, + "Room": 22 + }, + { + "X": 43520, + "Y": 2048, + "Z": 37376, + "Room": 84 + }, + { + "X": 45568, + "Y": 2048, + "Z": 36352, + "Room": 86 + }, + { + "X": 46592, + "Y": 2048, + "Z": 34304, + "Room": 85 + }, + { + "X": 48640, + "Y": 2048, + "Z": 34304, + "Room": 102 + }, + { + "X": 39424, + "Y": 2048, + "Z": 36352, + "Room": 19 + }, + { + "X": 38400, + "Y": 256, + "Z": 44544, + "Room": 25 + }, + { + "X": 39424, + "Y": 3840, + "Z": 47616, + "Room": 88 + }, + { + "X": 40448, + "Y": 2560, + "Z": 47616, + "Room": 90 + }, + { + "X": 42496, + "Y": 2560, + "Z": 48640, + "Room": 91 + }, + { + "X": 41472, + "Y": -768, + "Z": 50688, + "Room": 93 + }, + { + "X": 43520, + "Y": -2304, + "Z": 50688, + "Room": 87, + "KeyItemsLow": "23454,23537" + }, + { + "X": 43776, + "Y": -2304, + "Z": 50688, + "Room": 87, + "KeyItemsLow": "23454,23537", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -2304, + "Z": 50688, + "Room": 120 + }, + { + "X": 52736, + "Y": -2304, + "Z": 50688, + "Room": 132 + }, + { + "X": 55808, + "Y": -6400, + "Z": 47616, + "Room": 133 + }, + { + "X": 64000, + "Y": -9472, + "Z": 49664, + "Room": 101 + }, + { + "X": 64000, + "Y": -9472, + "Z": 46592, + "Room": 130 + }, + { + "X": 73216, + "Y": -9216, + "Z": 39424, + "Room": 131 + }, + { + "X": 73216, + "Y": -11008, + "Z": 41472, + "Room": 136, + "Validated": false + }, + { + "X": 76288, + "Y": -12032, + "Z": 40448, + "Room": 146, + "Validated": false + }, + { + "X": 74240, + "Y": -7936, + "Z": 37376, + "Room": 145 + }, + { + "X": 74240, + "Y": -4352, + "Z": 35328, + "Room": 104 + }, + { + "X": 73216, + "Y": -3584, + "Z": 30208, + "Room": 105 + }, + { + "X": 74240, + "Y": -3584, + "Z": 30208, + "Room": 108 + }, + { + "X": 67072, + "Y": -9472, + "Z": 39680, + "Room": 134, + "KeyItemsHigh": "23454", + "Validated": false + }, + { + "X": 67072, + "Y": -9472, + "Z": 39424, + "Room": 134, + "KeyItemsHigh": "23454", + "RequiresReturnPath": true + }, + { + "X": 67072, + "Y": -9472, + "Z": 39168, + "Room": 134, + "KeyItemsHigh": "23454", + "Range": "Medium" + }, + { + "X": 66816, + "Y": -9472, + "Z": 39168, + "Room": 134, + "KeyItemsHigh": "23454", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 66816, + "Y": -9472, + "Z": 39424, + "Room": 134, + "KeyItemsHigh": "23454", + "Range": "Large" + }, + { + "X": 66816, + "Y": -9472, + "Z": 39680, + "Room": 134, + "KeyItemsHigh": "23454", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 58880, + "Y": -9216, + "Z": 38400, + "Room": 138, + "Validated": false + }, + { + "X": 58880, + "Y": -11008, + "Z": 41472, + "Room": 137, + "Validated": false + }, + { + "X": 55808, + "Y": -12288, + "Z": 42496, + "Room": 158, + "Validated": false + }, + { + "X": 56832, + "Y": -4864, + "Z": 33280, + "Room": 159 + }, + { + "X": 57856, + "Y": -4608, + "Z": 30208, + "Room": 160 + }, + { + "X": 51712, + "Y": -7680, + "Z": 30208, + "Room": 100, + "Validated": false + }, + { + "X": 58880, + "Y": -3584, + "Z": 30208, + "Room": 112 + }, + { + "X": 70144, + "Y": -3584, + "Z": 31232, + "Room": 106 + }, + { + "X": 50944, + "Y": -5120, + "Z": 16128, + "Room": 111, + "KeyItemsHigh": "23537" + }, + { + "X": 50944, + "Y": -5120, + "Z": 15872, + "Room": 111, + "KeyItemsHigh": "23537", + "RequiresReturnPath": true + }, + { + "X": 50944, + "Y": -5120, + "Z": 15616, + "Room": 111, + "KeyItemsHigh": "23537", + "Range": "Medium" + }, + { + "X": 50688, + "Y": -5120, + "Z": 15616, + "Room": 111, + "KeyItemsHigh": "23537", + "KeyItemsLow": "23490,23463", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 50688, + "Y": -5120, + "Z": 15872, + "Room": 111, + "KeyItemsHigh": "23537", + "Range": "Large" + }, + { + "X": 50688, + "Y": -5120, + "Z": 16128, + "Room": 111, + "KeyItemsHigh": "23537", + "KeyItemsLow": "23322,23352,23463,23490", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 45568, + "Y": -5120, + "Z": 14848, + "Room": 116 + }, + { + "X": 49664, + "Y": -4224, + "Z": 13824, + "Room": 182 + }, + { + "X": 50688, + "Y": -3840, + "Z": 11776, + "Room": 181 + }, + { + "X": 52736, + "Y": -3584, + "Z": 12800, + "Room": 179 + }, + { + "X": 56832, + "Y": -2560, + "Z": 12800, + "Room": 180 + }, + { + "X": 56832, + "Y": -2560, + "Z": 13824, + "Room": 135, + "Validated": false + }, + { + "X": 55808, + "Y": -2304, + "Z": 18944, + "Room": 140, + "KeyItemsLow": "23490,23463", + "RequiresReturnPath": true + }, + { + "X": 57856, + "Y": -1792, + "Z": 19968, + "Room": 115 + }, + { + "X": 57856, + "Y": -1280, + "Z": 27136, + "Room": 139 + }, + { + "X": 65024, + "Y": -1280, + "Z": 27136, + "Room": 47 + }, + { + "X": 71168, + "Y": -2304, + "Z": 27136, + "Room": 45 + }, + { + "X": 71168, + "Y": -256, + "Z": 24064, + "Room": 43 + }, + { + "X": 70144, + "Y": -1280, + "Z": 16896, + "Room": 55 + }, + { + "X": 69120, + "Y": -1280, + "Z": 14848, + "Room": 141 + }, + { + "X": 65024, + "Y": -1280, + "Z": 14848, + "Room": 38 + }, + { + "X": 65024, + "Y": -2816, + "Z": 22016, + "Room": 163 + }, + { + "X": 65024, + "Y": -1024, + "Z": 22016, + "Room": 46 + }, + { + "X": 65024, + "Y": -1280, + "Z": 24064, + "Room": 48 + }, + { + "X": 71168, + "Y": -3840, + "Z": 23040, + "Room": 44 + }, + { + "X": 71168, + "Y": 13568, + "Z": 20992, + "Room": 161, + "Validated": false + }, + { + "X": 71424, + "Y": 10240, + "Z": 22016, + "Room": 118, + "KeyItemsLow": "23490,23463" + }, + { + "X": 71168, + "Y": 10240, + "Z": 22016, + "Room": 118, + "KeyItemsLow": "23490,23463", + "Range": "Medium" + }, + { + "X": 70912, + "Y": 10240, + "Z": 22016, + "Room": 118, + "KeyItemsLow": "23322,23352,23490,23463", + "Range": "Large" + }, + { + "X": 66048, + "Y": 8704, + "Z": 19968, + "Room": 142 + }, + { + "X": 64000, + "Y": 8704, + "Z": 20992, + "Room": 143 + }, + { + "X": 64000, + "Y": 8704, + "Z": 31232, + "Room": 144 + }, + { + "X": 72192, + "Y": 8960, + "Z": 30208, + "Room": 147 + }, + { + "X": 77312, + "Y": 14592, + "Z": 17920, + "Room": 183 + }, + { + "X": 82432, + "Y": 12800, + "Z": 18944, + "Room": 170 + }, + { + "X": 81408, + "Y": 8960, + "Z": 27136, + "Room": 171 + }, + { + "X": 77312, + "Y": 8960, + "Z": 27136, + "Room": 162 + }, + { + "X": 75264, + "Y": 8960, + "Z": 29184, + "Room": 128 + }, + { + "X": 72192, + "Y": 8960, + "Z": 29184, + "Room": 123 + }, + { + "X": 71168, + "Y": 5888, + "Z": 28160, + "Room": 121 + }, + { + "X": 71168, + "Y": 4608, + "Z": 24064, + "Room": 41 + }, + { + "X": 71168, + "Y": 1792, + "Z": 15872, + "Room": 127 + }, + { + "X": 71168, + "Y": -256, + "Z": 7680, + "Room": 125 + }, + { + "X": 67072, + "Y": -256, + "Z": 7680, + "Room": 129 + }, + { + "X": 65024, + "Y": -256, + "Z": 7680, + "Room": 186, + "RoomType": "ReturnPath" + }, + { + "X": 65024, + "Y": -3328, + "Z": 13824, + "Room": 187, + "RoomType": "ReturnPath" + }, + { + "X": 71168, + "Y": 8960, + "Z": 25088, + "Room": 124 + }, + { + "X": 71168, + "Y": 6656, + "Z": 24064, + "Room": 122 + }, + { + "X": 70912, + "Y": 16640, + "Z": 22016, + "Room": 148, + "KeyItemsHigh": "23463,23490" + }, + { + "X": 71168, + "Y": 16640, + "Z": 22016, + "Room": 148, + "KeyItemsHigh": "23463,23490", + "RequiresReturnPath": true + }, + { + "X": 71424, + "Y": 16640, + "Z": 22016, + "Room": 148, + "KeyItemsHigh": "23463", + "Range": "Medium" + }, + { + "X": 71424, + "Y": 16640, + "Z": 22272, + "Room": 148, + "KeyItemsHigh": "23463", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": 16640, + "Z": 22272, + "Room": 148, + "KeyItemsHigh": "23463", + "Range": "Large" + }, + { + "X": 70912, + "Y": 16640, + "Z": 22272, + "Room": 148, + "KeyItemsHigh": "23463", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": 16640, + "Z": 23040, + "Room": 150, + "KeyItemsLow": "23322,23352", + "Range": "Medium" + }, + { + "X": 71168, + "Y": 16640, + "Z": 23296, + "Room": 150, + "KeyItemsLow": "23322,23352", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": 15104, + "Z": 35328, + "Room": 151 + }, + { + "X": 79360, + "Y": 12544, + "Z": 35328, + "Room": 175 + }, + { + "X": 79360, + "Y": 11648, + "Z": 40448, + "Room": 152 + }, + { + "X": 79360, + "Y": 9472, + "Z": 47616, + "Room": 83 + }, + { + "X": 79360, + "Y": 6144, + "Z": 48640, + "Room": 154 + }, + { + "X": 82432, + "Y": 7168, + "Z": 48640, + "Room": 156 + }, + { + "X": 82432, + "Y": 7168, + "Z": 49664, + "Room": 153 + }, + { + "X": 81408, + "Y": 1408, + "Z": 59904, + "Room": 67 + }, + { + "X": 79360, + "Y": 1024, + "Z": 60160, + "Room": 66, + "KeyItemsLow": "23322,23352" + }, + { + "X": 79360, + "Y": 1024, + "Z": 59904, + "Room": 66, + "KeyItemsLow": "23322,23352", + "RequiresReturnPath": true + }, + { + "X": 79360, + "Y": 0, + "Z": 58880, + "Room": 61 + }, + { + "X": 79360, + "Y": -1024, + "Z": 57856, + "Room": 59 + }, + { + "X": 80384, + "Y": 1024, + "Z": 53760, + "Room": 166 + }, + { + "X": 79360, + "Y": 1024, + "Z": 50688, + "Room": 167 + }, + { + "X": 78336, + "Y": 512, + "Z": 49664, + "Room": 168 + }, + { + "X": 76288, + "Y": -256, + "Z": 7680, + "Room": 126, + "Validated": false + }, + { + "X": 82432, + "Y": -256, + "Z": 7680, + "Room": 177, + "Validated": false + }, + { + "X": 61952, + "Y": -9728, + "Z": 41472, + "Room": 149, + "Validated": false + }, + { + "X": 77312, + "Y": 1152, + "Z": 59904, + "Room": 65 + }, + { + "X": 75264, + "Y": 1280, + "Z": 60928, + "Room": 36 + }, + { + "X": 75264, + "Y": 896, + "Z": 64000, + "Room": 37 + }, + { + "X": 75264, + "Y": -1536, + "Z": 74240, + "Room": 39 + }, + { + "X": 78336, + "Y": -1664, + "Z": 76288, + "Room": 40 + }, + { + "X": 91648, + "Y": -4864, + "Z": 76288, + "Room": 74 + }, + { + "X": 90624, + "Y": -4864, + "Z": 81408, + "Room": 169, + "Validated": false + }, + { + "X": 88576, + "Y": -6656, + "Z": 78336, + "Room": 76 + }, + { + "X": 89600, + "Y": -6656, + "Z": 76288, + "Room": 75 + }, + { + "X": 91648, + "Y": -6656, + "Z": 71936, + "Room": 71, + "KeyItemsHigh": "23352" + }, + { + "X": 91648, + "Y": -6656, + "Z": 72192, + "Room": 71, + "KeyItemsHigh": "23352", + "RequiresReturnPath": true + }, + { + "X": 91648, + "Y": -6656, + "Z": 72448, + "Room": 71, + "KeyItemsHigh": "23352", + "Range": "Medium" + }, + { + "X": 91904, + "Y": -6656, + "Z": 72448, + "Room": 71, + "KeyItemsHigh": "23352", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 91904, + "Y": -6656, + "Z": 72192, + "Room": 71, + "KeyItemsHigh": "23352", + "Range": "Large" + }, + { + "X": 91904, + "Y": -6656, + "Z": 71936, + "Room": 71, + "KeyItemsHigh": "23352", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 72192, + "Y": -2048, + "Z": 60928, + "Room": 34 + }, + { + "X": 70144, + "Y": -3840, + "Z": 57856, + "Room": 33 + }, + { + "X": 71936, + "Y": 2048, + "Z": 52736, + "Room": 70, + "KeyItemsHigh": "23322" + }, + { + "X": 72192, + "Y": 2048, + "Z": 52736, + "Room": 70, + "KeyItemsHigh": "23322", + "RequiresReturnPath": true + }, + { + "X": 72448, + "Y": 2048, + "Z": 52736, + "Room": 70, + "KeyItemsHigh": "23322,23490", + "Range": "Medium" + }, + { + "X": 72448, + "Y": 2048, + "Z": 52480, + "Room": 70, + "KeyItemsHigh": "23322,23490", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 72192, + "Y": 2048, + "Z": 52480, + "Room": 70, + "KeyItemsHigh": "23322", + "Range": "Large" + }, + { + "X": 71936, + "Y": 2048, + "Z": 52480, + "Room": 70, + "KeyItemsHigh": "23322", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 70144, + "Y": 2048, + "Z": 49664, + "Room": 157 + }, + { + "X": 68096, + "Y": 512, + "Z": 52736, + "Room": 99 + }, + { + "X": 59904, + "Y": 0, + "Z": 57856, + "Room": 97 + }, + { + "X": 64000, + "Y": 512, + "Z": 60928, + "Room": 98 + }, + { + "X": 61952, + "Y": 0, + "Z": 64000, + "Room": 95 + }, + { + "X": 56832, + "Y": 0, + "Z": 67072, + "Room": 96 + }, + { + "X": 50688, + "Y": 0, + "Z": 71168, + "Room": 81 + }, + { + "X": 57856, + "Y": -256, + "Z": 62976, + "Room": 94, + "KeyItemsHigh": "23490", + "Range": "Large" + }, + { + "X": 57856, + "Y": -256, + "Z": 62720, + "Room": 94, + "KeyItemsHigh": "23490", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "AREA51.TR2": [ + { + "X": 64000, + "Y": 3072, + "Z": 52736, + "Room": 31, + "KeyItemsLow": "24253,24322,24434,24433", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 64000, + "Y": 3072, + "Z": 55808, + "Room": 11 + }, + { + "X": 62976, + "Y": 3072, + "Z": 61952, + "Room": 12 + }, + { + "X": 54784, + "Y": 3072, + "Z": 60928, + "Room": 14, + "Validated": false + }, + { + "X": 57856, + "Y": 3072, + "Z": 60928, + "Room": 54 + }, + { + "X": 57856, + "Y": 2048, + "Z": 55808, + "Room": 46, + "Validated": false + }, + { + "X": 60928, + "Y": 1536, + "Z": 55808, + "Room": 128 + }, + { + "X": 54784, + "Y": 0, + "Z": 55808, + "Room": 40 + }, + { + "X": 50688, + "Y": -1024, + "Z": 55808, + "Room": 34 + }, + { + "X": 49664, + "Y": -1024, + "Z": 53760, + "Room": 35 + }, + { + "X": 49664, + "Y": -1024, + "Z": 51712, + "Room": 13 + }, + { + "X": 50688, + "Y": -1024, + "Z": 58880, + "Room": 9 + }, + { + "X": 52736, + "Y": -1024, + "Z": 61952, + "Room": 131 + }, + { + "X": 52736, + "Y": -2304, + "Z": 67072, + "Room": 10 + }, + { + "X": 52736, + "Y": -2560, + "Z": 72192, + "Room": 1 + }, + { + "X": 43520, + "Y": -3328, + "Z": 74240, + "Room": 122, + "Validated": false + }, + { + "X": 43520, + "Y": -3328, + "Z": 75264, + "Room": 124, + "Validated": false + }, + { + "X": 39424, + "Y": -3328, + "Z": 70144, + "Room": 4 + }, + { + "X": 40448, + "Y": 256, + "Z": 69120, + "Room": 0, + "KeyItemsLow": "24434,24322,24253", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 384, + "Z": 64000, + "Room": 41 + }, + { + "X": 39424, + "Y": 2048, + "Z": 61952, + "Room": 44 + }, + { + "X": 40448, + "Y": 3584, + "Z": 61952, + "Room": 62 + }, + { + "X": 43520, + "Y": 3584, + "Z": 61952, + "Room": 140, + "Validated": false + }, + { + "X": 37376, + "Y": 3584, + "Z": 61952, + "Room": 63 + }, + { + "X": 34304, + "Y": 5632, + "Z": 60672, + "Room": 64, + "KeyItemsLow": "24434,24322", + "Range": "Medium" + }, + { + "X": 34304, + "Y": 5632, + "Z": 60928, + "Room": 64, + "KeyItemsLow": "24434,24433,24322,24253", + "Range": "Large" + }, + { + "X": 34304, + "Y": 5632, + "Z": 67072, + "Room": 66 + }, + { + "X": 28160, + "Y": 5632, + "Z": 68096, + "Room": 68 + }, + { + "X": 34304, + "Y": 5632, + "Z": 51712, + "Room": 65 + }, + { + "X": 36352, + "Y": 5632, + "Z": 47616, + "Room": 136 + }, + { + "X": 41472, + "Y": 6528, + "Z": 46592, + "Room": 70, + "Validated": false + }, + { + "X": 38400, + "Y": 5632, + "Z": 41472, + "Room": 69, + "Validated": false + }, + { + "X": 39424, + "Y": 7424, + "Z": 51712, + "Room": 60 + }, + { + "X": 25088, + "Y": 7424, + "Z": 51712, + "Room": 71, + "Validated": false + }, + { + "X": 34304, + "Y": 7424, + "Z": 54784, + "Room": 72, + "KeyItemsLow": "24322,24434" + }, + { + "X": 34048, + "Y": 7424, + "Z": 54784, + "Room": 72, + "KeyItemsLow": "24434,24322", + "RequiresReturnPath": true + }, + { + "X": 31232, + "Y": 7424, + "Z": 54784, + "Room": 145 + }, + { + "X": 37376, + "Y": 7424, + "Z": 55808, + "Room": 144 + }, + { + "X": 37376, + "Y": 7296, + "Z": 56832, + "Room": 132 + }, + { + "X": 31232, + "Y": 6656, + "Z": 58880, + "Room": 73, + "KeyItemsLow": "24253", + "Range": "Medium" + }, + { + "X": 25088, + "Y": 4096, + "Z": 56832, + "Room": 74 + }, + { + "X": 23040, + "Y": 2816, + "Z": 53760, + "Room": 61 + }, + { + "X": 23040, + "Y": 1536, + "Z": 62976, + "Room": 51 + }, + { + "X": 24064, + "Y": 3712, + "Z": 62976, + "Room": 49 + }, + { + "X": 23040, + "Y": 2816, + "Z": 50688, + "Room": 79 + }, + { + "X": 20992, + "Y": 2816, + "Z": 50688, + "Room": 76 + }, + { + "X": 18944, + "Y": 5120, + "Z": 51712, + "Room": 75 + }, + { + "X": 10752, + "Y": 5760, + "Z": 51712, + "Room": 77 + }, + { + "X": 15872, + "Y": 3584, + "Z": 55808, + "Room": 76 + }, + { + "X": 12800, + "Y": 2816, + "Z": 54784, + "Room": 55 + }, + { + "X": 12800, + "Y": 6912, + "Z": 49664, + "Room": 110 + }, + { + "X": 13824, + "Y": 6912, + "Z": 49664, + "Room": 80 + }, + { + "X": 18688, + "Y": 1536, + "Z": 52736, + "Room": 78, + "KeyItemsHigh": "24322" + }, + { + "X": 18944, + "Y": 1536, + "Z": 52736, + "Room": 78, + "KeyItemsHigh": "24322", + "RequiresReturnPath": true + }, + { + "X": 19200, + "Y": 1536, + "Z": 52736, + "Room": 78, + "KeyItemsHigh": "24322", + "Range": "Medium" + }, + { + "X": 19200, + "Y": 1536, + "Z": 52992, + "Room": 78, + "KeyItemsHigh": "24322", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 18944, + "Y": 1536, + "Z": 52992, + "Room": 78, + "KeyItemsHigh": "24322", + "Range": "Large" + }, + { + "X": 18688, + "Y": 1536, + "Z": 52992, + "Room": 78, + "KeyItemsHigh": "24322", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 24064, + "Y": 3584, + "Z": 67072, + "Room": 56 + }, + { + "X": 24064, + "Y": 2816, + "Z": 75264, + "Room": 89 + }, + { + "X": 27904, + "Y": 3840, + "Z": 73216, + "Room": 87, + "KeyItemsHigh": "24434" + }, + { + "X": 28160, + "Y": 3840, + "Z": 73216, + "Room": 87, + "KeyItemsHigh": "24434", + "RequiresReturnPath": true + }, + { + "X": 28416, + "Y": 3840, + "Z": 73216, + "Room": 87, + "KeyItemsHigh": "24434", + "KeyItemsLow": "24433", + "Range": "Medium" + }, + { + "X": 28416, + "Y": 3840, + "Z": 72960, + "Room": 87, + "KeyItemsHigh": "24434", + "KeyItemsLow": "24433", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 3840, + "Z": 72960, + "Room": 87, + "KeyItemsHigh": "24434", + "Range": "Large" + }, + { + "X": 27904, + "Y": 3840, + "Z": 72960, + "Room": 87, + "KeyItemsHigh": "24434", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": 4608, + "Z": 73216, + "Room": 81 + }, + { + "X": 33280, + "Y": 4608, + "Z": 74240, + "Room": 84 + }, + { + "X": 32256, + "Y": 768, + "Z": 81408, + "Room": 88 + }, + { + "X": 36352, + "Y": 2816, + "Z": 70144, + "Room": 141 + }, + { + "X": 34304, + "Y": 1536, + "Z": 67072, + "Room": 93 + }, + { + "X": 34304, + "Y": 1536, + "Z": 50688, + "Room": 94 + }, + { + "X": 35328, + "Y": 3328, + "Z": 46592, + "Room": 90 + }, + { + "X": 33280, + "Y": 4608, + "Z": 47616, + "Room": 91 + }, + { + "X": 32256, + "Y": 3840, + "Z": 46336, + "Room": 92, + "KeyItemsLow": "24253" + }, + { + "X": 32256, + "Y": 3840, + "Z": 46592, + "Room": 92, + "KeyItemsLow": "24253", + "RequiresReturnPath": true + }, + { + "X": 30208, + "Y": 3712, + "Z": 45568, + "Room": 115 + }, + { + "X": 30208, + "Y": 2304, + "Z": 39424, + "Room": 117 + }, + { + "X": 34304, + "Y": 1408, + "Z": 38400, + "Room": 116 + }, + { + "X": 34304, + "Y": -512, + "Z": 30208, + "Room": 108 + }, + { + "X": 39424, + "Y": -2048, + "Z": 30208, + "Room": 105 + }, + { + "X": 49664, + "Y": -2048, + "Z": 30208, + "Room": 104 + }, + { + "X": 48640, + "Y": -2048, + "Z": 42496, + "Room": 103, + "KeyItemsHigh": "24253", + "KeyItemsLow": "24433" + }, + { + "X": 48384, + "Y": -2048, + "Z": 42496, + "Room": 103, + "KeyItemsHigh": "24253", + "KeyItemsLow": "24433", + "RequiresReturnPath": true + }, + { + "X": 39424, + "Y": -2304, + "Z": 44544, + "Room": 96 + }, + { + "X": 35328, + "Y": -2304, + "Z": 47616, + "Room": 123 + }, + { + "X": 44544, + "Y": -2304, + "Z": 47616, + "Room": 120 + }, + { + "X": 43520, + "Y": -4352, + "Z": 48640, + "Room": 97 + }, + { + "X": 39424, + "Y": -2304, + "Z": 55808, + "Room": 3 + }, + { + "X": 37376, + "Y": -3840, + "Z": 54784, + "Room": 146 + }, + { + "X": 48640, + "Y": -2048, + "Z": 36352, + "Room": 99 + }, + { + "X": 41472, + "Y": -8192, + "Z": 39424, + "Room": 102 + }, + { + "X": 45568, + "Y": -6144, + "Z": 35328, + "Room": 101 + }, + { + "X": 43520, + "Y": -4352, + "Z": 36352, + "Room": 98 + }, + { + "X": 24064, + "Y": 5888, + "Z": 72192, + "Room": 59 + }, + { + "X": 23040, + "Y": 6400, + "Z": 65024, + "Room": 52 + }, + { + "X": 20992, + "Y": 5888, + "Z": 64000, + "Room": 109 + }, + { + "X": 16128, + "Y": 5632, + "Z": 65024, + "Room": 57, + "KeyItemsHigh": "24433" + }, + { + "X": 15872, + "Y": 5632, + "Z": 65024, + "Room": 57, + "KeyItemsHigh": "24433", + "RequiresReturnPath": true + }, + { + "X": 15616, + "Y": 5632, + "Z": 65024, + "Room": 57, + "KeyItemsHigh": "24433", + "Range": "Medium" + }, + { + "X": 15616, + "Y": 5632, + "Z": 64768, + "Room": 57, + "KeyItemsHigh": "24433", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 15872, + "Y": 5632, + "Z": 64768, + "Room": 57, + "KeyItemsHigh": "24433", + "Range": "Large" + }, + { + "X": 16128, + "Y": 5632, + "Z": 64768, + "Room": 57, + "KeyItemsHigh": "24433", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -512, + "Z": 66048, + "Room": 53 + }, + { + "X": 23040, + "Y": -2816, + "Z": 66048, + "Room": 50 + }, + { + "X": 23040, + "Y": -2560, + "Z": 68096, + "Room": 126, + "KeyItemsLow": "24253" + }, + { + "X": 23296, + "Y": -2560, + "Z": 68096, + "Room": 126, + "KeyItemsLow": "24253", + "RequiresReturnPath": true + }, + { + "X": 26112, + "Y": -2304, + "Z": 68096, + "Room": 125, + "Validated": false + }, + { + "X": 26112, + "Y": -2304, + "Z": 59904, + "Room": 45 + }, + { + "X": 25088, + "Y": -2176, + "Z": 59904, + "Room": 47 + }, + { + "X": 19968, + "Y": -1280, + "Z": 58880, + "Room": 48 + }, + { + "X": 19968, + "Y": -3072, + "Z": 55808, + "Room": 130 + }, + { + "X": 19968, + "Y": -4864, + "Z": 51712, + "Room": 127 + }, + { + "X": 18944, + "Y": -7936, + "Z": 47616, + "Room": 150 + }, + { + "X": 16896, + "Y": -4736, + "Z": 45568, + "Room": 129 + }, + { + "X": 16896, + "Y": -4608, + "Z": 49664, + "Room": 25 + }, + { + "X": 13824, + "Y": -3840, + "Z": 49664, + "Room": 26 + }, + { + "X": 20992, + "Y": -2816, + "Z": 48640, + "Room": 135 + }, + { + "X": 27136, + "Y": -2176, + "Z": 47616, + "Room": 28, + "Validated": false + }, + { + "X": 28160, + "Y": -1280, + "Z": 43520, + "Room": 30 + }, + { + "X": 31232, + "Y": 2816, + "Z": 43520, + "Room": 24 + }, + { + "X": 38400, + "Y": -2048, + "Z": 35328, + "Room": 114 + }, + { + "X": 37376, + "Y": -1536, + "Z": 32256, + "Room": 113 + }, + { + "X": 34560, + "Y": -1476, + "Z": 28416, + "Room": 112, + "KeyItemsHigh": "24253" + }, + { + "X": 34560, + "Y": -1476, + "Z": 28160, + "Room": 112, + "KeyItemsHigh": "24253", + "RequiresReturnPath": true + }, + { + "X": 34560, + "Y": -1476, + "Z": 27904, + "Room": 112, + "KeyItemsHigh": "24253", + "Range": "Medium" + }, + { + "X": 34304, + "Y": -1408, + "Z": 27904, + "Room": 112, + "KeyItemsHigh": "24253", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 34304, + "Y": -1408, + "Z": 28160, + "Room": 112, + "KeyItemsHigh": "24253", + "Range": "Large" + }, + { + "X": 34304, + "Y": -1408, + "Z": 28416, + "Room": 112, + "KeyItemsHigh": "24253", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 33280, + "Y": -1152, + "Z": 28160, + "Room": 111 + }, + { + "X": 37376, + "Y": -1920, + "Z": 37376, + "Room": 32 + }, + { + "X": 37376, + "Y": -1280, + "Z": 40448, + "Room": 33 + }, + { + "X": 29184, + "Y": -1280, + "Z": 42496, + "Room": 36 + }, + { + "X": 46592, + "Y": -6656, + "Z": 41472, + "Room": 42 + }, + { + "X": 38400, + "Y": -5888, + "Z": 42496, + "Room": 43 + }, + { + "X": 36352, + "Y": -768, + "Z": 43520, + "Room": 138 + }, + { + "X": 43520, + "Y": -3584, + "Z": 34304, + "Room": 16 + }, + { + "X": 44544, + "Y": -3584, + "Z": 36352, + "Room": 17 + }, + { + "X": 45568, + "Y": -4864, + "Z": 36352, + "Room": 121 + }, + { + "X": 48640, + "Y": -4992, + "Z": 36352, + "Room": 19 + }, + { + "X": 50688, + "Y": -6912, + "Z": 36352, + "Room": 18 + } + ], + "ANTARC.TR2": [ + { + "X": 32256, + "Y": -3712, + "Z": 4352, + "Room": 12, + "KeyItemsLow": "25526,25446,25456", + "Range": "Large" + }, + { + "X": 32256, + "Y": -3712, + "Z": 4608, + "Room": 12, + "KeyItemsLow": "25526,25446,25456", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 29184, + "Y": 128, + "Z": 3584, + "Room": 11 + }, + { + "X": 34304, + "Y": -3968, + "Z": 10752, + "Room": 28 + }, + { + "X": 36352, + "Y": -3968, + "Z": 12800, + "Room": 64 + }, + { + "X": 35328, + "Y": -3840, + "Z": 15872, + "Room": 2 + }, + { + "X": 39424, + "Y": -4864, + "Z": 15872, + "Room": 65 + }, + { + "X": 41472, + "Y": -5120, + "Z": 18944, + "Room": 20 + }, + { + "X": 40448, + "Y": -6400, + "Z": 19968, + "Room": 19 + }, + { + "X": 41472, + "Y": -3584, + "Z": 26112, + "Room": 24 + }, + { + "X": 40448, + "Y": -768, + "Z": 25088, + "Room": 25 + }, + { + "X": 34304, + "Y": 128, + "Z": 20992, + "Room": 34 + }, + { + "X": 31232, + "Y": 640, + "Z": 12800, + "Room": 33 + }, + { + "X": 28160, + "Y": 896, + "Z": 17920, + "Room": 35 + }, + { + "X": 23040, + "Y": -384, + "Z": 34304, + "Room": 38 + }, + { + "X": 26112, + "Y": 2048, + "Z": 45568, + "Room": 37 + }, + { + "X": 25088, + "Y": -256, + "Z": 47616, + "Room": 82 + }, + { + "X": 29184, + "Y": 1536, + "Z": 43520, + "Room": 36 + }, + { + "X": 33280, + "Y": -3584, + "Z": 30208, + "Room": 32 + }, + { + "X": 39424, + "Y": -5248, + "Z": 28160, + "Room": 200 + }, + { + "X": 38400, + "Y": -6784, + "Z": 29184, + "Room": 22 + }, + { + "X": 42496, + "Y": -7296, + "Z": 28160, + "Room": 8 + }, + { + "X": 44544, + "Y": -6272, + "Z": 22016, + "Room": 16 + }, + { + "X": 44544, + "Y": -7296, + "Z": 17920, + "Room": 57 + }, + { + "X": 30208, + "Y": -3456, + "Z": 45568, + "Room": 5 + }, + { + "X": 34304, + "Y": -5120, + "Z": 45568, + "Room": 6 + }, + { + "X": 35328, + "Y": -6528, + "Z": 45568, + "Room": 42 + }, + { + "X": 35328, + "Y": -6784, + "Z": 43520, + "Room": 43 + }, + { + "X": 27136, + "Y": -6400, + "Z": 43520, + "Room": 7 + }, + { + "X": 26112, + "Y": -4864, + "Z": 37376, + "Room": 114 + }, + { + "X": 24064, + "Y": -3584, + "Z": 39424, + "Room": 48 + }, + { + "X": 25088, + "Y": -2304, + "Z": 42496, + "Room": 154 + }, + { + "X": 24064, + "Y": -2304, + "Z": 42496, + "Room": 125 + }, + { + "X": 24064, + "Y": -2304, + "Z": 33280, + "Room": 144 + }, + { + "X": 24064, + "Y": -4608, + "Z": 25088, + "Room": 160 + }, + { + "X": 24064, + "Y": -4608, + "Z": 24064, + "Room": 131 + }, + { + "X": 25088, + "Y": -4864, + "Z": 23040, + "Room": 62 + }, + { + "X": 26112, + "Y": -4864, + "Z": 25088, + "Room": 63 + }, + { + "X": 25088, + "Y": -4352, + "Z": 27136, + "Room": 143 + }, + { + "X": 26112, + "Y": -3584, + "Z": 30208, + "Room": 61 + }, + { + "X": 25088, + "Y": -4352, + "Z": 16896, + "Room": 159 + }, + { + "X": 27136, + "Y": -3072, + "Z": 15872, + "Room": 53 + }, + { + "X": 26112, + "Y": -3200, + "Z": 14848, + "Room": 121 + }, + { + "X": 26112, + "Y": -3456, + "Z": 13824, + "Room": 52 + }, + { + "X": 26112, + "Y": -5120, + "Z": 12800, + "Room": 138 + }, + { + "X": 26112, + "Y": -6144, + "Z": 24064, + "Room": 124 + }, + { + "X": 25088, + "Y": -6144, + "Z": 20992, + "Room": 123 + }, + { + "X": 25088, + "Y": -6144, + "Z": 19968, + "Room": 129 + }, + { + "X": 27136, + "Y": -6144, + "Z": 18944, + "Room": 58 + }, + { + "X": 26112, + "Y": -6144, + "Z": 15872, + "Room": 3 + }, + { + "X": 29184, + "Y": -6144, + "Z": 16896, + "Room": 56 + }, + { + "X": 23040, + "Y": -6144, + "Z": 16896, + "Room": 56 + }, + { + "X": 20992, + "Y": -6016, + "Z": 29184, + "Room": 163 + }, + { + "X": 20992, + "Y": -4096, + "Z": 30208, + "Room": 126 + }, + { + "X": 25088, + "Y": -6912, + "Z": 12800, + "Room": 39 + }, + { + "X": 27136, + "Y": -6272, + "Z": 5632, + "Room": 13 + }, + { + "X": 30208, + "Y": -8960, + "Z": 2560, + "Room": 153 + }, + { + "X": 46592, + "Y": -512, + "Z": 24064, + "Room": 21 + }, + { + "X": 50688, + "Y": -3584, + "Z": 27136, + "Room": 162 + }, + { + "X": 50688, + "Y": -3584, + "Z": 28160, + "Room": 180 + }, + { + "X": 51712, + "Y": -6528, + "Z": 28160, + "Room": 182 + }, + { + "X": 54784, + "Y": -6656, + "Z": 28160, + "Room": 193 + }, + { + "X": 53760, + "Y": -6656, + "Z": 26112, + "Room": 190 + }, + { + "X": 50688, + "Y": -6400, + "Z": 25088, + "Room": 164 + }, + { + "X": 55808, + "Y": -6656, + "Z": 27136, + "Room": 181 + }, + { + "X": 57856, + "Y": -6784, + "Z": 26112, + "Room": 197 + }, + { + "X": 57856, + "Y": -1280, + "Z": 25088, + "Room": 46 + }, + { + "X": 64768, + "Y": -1280, + "Z": 27648, + "Room": 99, + "KeyItemsLow": "25456" + }, + { + "X": 64768, + "Y": -1280, + "Z": 27904, + "Room": 99, + "KeyItemsLow": "25456", + "RequiresReturnPath": true + }, + { + "X": 65024, + "Y": -1280, + "Z": 28160, + "Room": 99, + "KeyItemsLow": "25526,25446,25456", + "Range": "Medium" + }, + { + "X": 65024, + "Y": -1280, + "Z": 27904, + "Room": 99, + "KeyItemsLow": "25526,25446,25456", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 66048, + "Y": -256, + "Z": 30208, + "Room": 102 + }, + { + "X": 67072, + "Y": -640, + "Z": 32256, + "Room": 101 + }, + { + "X": 67072, + "Y": -3584, + "Z": 32256, + "Room": 89 + }, + { + "X": 66048, + "Y": -3584, + "Z": 31232, + "Room": 72 + }, + { + "X": 66048, + "Y": -3584, + "Z": 28160, + "Room": 87 + }, + { + "X": 67072, + "Y": -4864, + "Z": 31232, + "Room": 86 + }, + { + "X": 67072, + "Y": -6656, + "Z": 38400, + "Room": 104, + "Validated": false + }, + { + "X": 69120, + "Y": -3328, + "Z": 42496, + "Room": 166 + }, + { + "X": 61952, + "Y": -3200, + "Z": 41472, + "Room": 158 + }, + { + "X": 58880, + "Y": -3328, + "Z": 43520, + "Room": 106 + }, + { + "X": 54784, + "Y": -2816, + "Z": 46592, + "Room": 91 + }, + { + "X": 52736, + "Y": -3072, + "Z": 47616, + "Room": 105 + }, + { + "X": 54784, + "Y": -8448, + "Z": 47616, + "Room": 94, + "Validated": false + }, + { + "X": 53760, + "Y": -2816, + "Z": 49664, + "Room": 107 + }, + { + "X": 57856, + "Y": -2816, + "Z": 48640, + "Room": 108 + }, + { + "X": 60928, + "Y": -2816, + "Z": 46592, + "Room": 112 + }, + { + "X": 61952, + "Y": -3456, + "Z": 49664, + "Room": 17 + }, + { + "X": 61952, + "Y": -2816, + "Z": 53760, + "Room": 170 + }, + { + "X": 57856, + "Y": -2816, + "Z": 54784, + "Room": 119 + }, + { + "X": 55808, + "Y": -2688, + "Z": 60928, + "Room": 117 + }, + { + "X": 48640, + "Y": -2816, + "Z": 60928, + "Room": 92 + }, + { + "X": 45568, + "Y": -2688, + "Z": 64000, + "Room": 187 + }, + { + "X": 46592, + "Y": -2816, + "Z": 71168, + "Room": 133 + }, + { + "X": 46592, + "Y": -4352, + "Z": 74240, + "Room": 192, + "Validated": false + }, + { + "X": 42496, + "Y": -3072, + "Z": 67072, + "Room": 147 + }, + { + "X": 41472, + "Y": -3072, + "Z": 67072, + "Room": 195 + }, + { + "X": 37376, + "Y": -3840, + "Z": 67072, + "Room": 196 + }, + { + "X": 37376, + "Y": -4352, + "Z": 65024, + "Room": 198 + }, + { + "X": 39424, + "Y": -4608, + "Z": 65024, + "Room": 27 + }, + { + "X": 42496, + "Y": -4608, + "Z": 66048, + "Room": 191 + }, + { + "X": 38400, + "Y": -4608, + "Z": 66048, + "Room": 161 + }, + { + "X": 41472, + "Y": -4608, + "Z": 71168, + "Room": 134 + }, + { + "X": 55808, + "Y": -6144, + "Z": 46592, + "Room": 93 + }, + { + "X": 55040, + "Y": -6144, + "Z": 48640, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374" + }, + { + "X": 54784, + "Y": -6144, + "Z": 48640, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374", + "RequiresReturnPath": true + }, + { + "X": 54528, + "Y": -6144, + "Z": 48640, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374", + "Range": "Medium" + }, + { + "X": 54528, + "Y": -6144, + "Z": 48896, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 54784, + "Y": -6144, + "Z": 48896, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374", + "Range": "Large" + }, + { + "X": 55040, + "Y": -6144, + "Z": 48896, + "Room": 116, + "KeyItemsHigh": "25456", + "KeyItemsLow": "25371,25374", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 55808, + "Y": -6400, + "Z": 51712, + "Room": 98 + }, + { + "X": 56832, + "Y": -6272, + "Z": 51712, + "Room": 97 + }, + { + "X": 60928, + "Y": -6400, + "Z": 45568, + "Room": 95 + }, + { + "X": 54784, + "Y": -3072, + "Z": 52736, + "Room": 109 + }, + { + "X": 54784, + "Y": -3072, + "Z": 54784, + "Room": 118 + }, + { + "X": 54784, + "Y": -1280, + "Z": 64000, + "Room": 177 + }, + { + "X": 52736, + "Y": 1664, + "Z": 64000, + "Room": 59 + }, + { + "X": 49664, + "Y": -512, + "Z": 64000, + "Room": 177 + }, + { + "X": 50688, + "Y": -2304, + "Z": 65024, + "Room": 176 + }, + { + "X": 50688, + "Y": -2816, + "Z": 66048, + "Room": 175 + }, + { + "X": 50688, + "Y": -2304, + "Z": 67072, + "Room": 60 + }, + { + "X": 50688, + "Y": -4864, + "Z": 77312, + "Room": 18 + }, + { + "X": 48640, + "Y": -4864, + "Z": 75264, + "Room": 172, + "Validated": false + }, + { + "X": 53760, + "Y": -4352, + "Z": 75264, + "Room": 174 + }, + { + "X": 54784, + "Y": -4352, + "Z": 75264, + "Room": 128 + }, + { + "X": 56832, + "Y": -4608, + "Z": 76288, + "Room": 31 + }, + { + "X": 58880, + "Y": -6400, + "Z": 76288, + "Room": 55 + }, + { + "X": 60928, + "Y": -4608, + "Z": 75264, + "Room": 29 + }, + { + "X": 58880, + "Y": -4864, + "Z": 73216, + "Room": 127 + }, + { + "X": 64000, + "Y": -6144, + "Z": 71168, + "Room": 54, + "Validated": false + }, + { + "X": 64000, + "Y": -4736, + "Z": 70144, + "Room": 15 + }, + { + "X": 55808, + "Y": -2816, + "Z": 70144, + "Room": 122 + }, + { + "X": 56832, + "Y": -4352, + "Z": 82432, + "Room": 66 + }, + { + "X": 61952, + "Y": -3328, + "Z": 83456, + "Room": 120 + }, + { + "X": 67072, + "Y": -2688, + "Z": 83456, + "Room": 155 + }, + { + "X": 67072, + "Y": -2816, + "Z": 81408, + "Room": 47 + }, + { + "X": 70144, + "Y": -2688, + "Z": 79360, + "Room": 78, + "KeyItemsLow": "25446" + }, + { + "X": 70144, + "Y": -2688, + "Z": 79104, + "Room": 78, + "KeyItemsLow": "25446", + "RequiresReturnPath": true + }, + { + "X": 71168, + "Y": -2816, + "Z": 76288, + "Room": 77 + }, + { + "X": 74240, + "Y": -3072, + "Z": 74240, + "Room": 178 + }, + { + "X": 76288, + "Y": -3072, + "Z": 74240, + "Room": 171 + }, + { + "X": 76288, + "Y": -3072, + "Z": 78336, + "Room": 115 + }, + { + "X": 69120, + "Y": -2816, + "Z": 72192, + "Room": 69 + }, + { + "X": 74240, + "Y": -2816, + "Z": 69120, + "Room": 132 + }, + { + "X": 73216, + "Y": -2816, + "Z": 62976, + "Room": 67 + }, + { + "X": 69120, + "Y": 256, + "Z": 61952, + "Room": 141 + }, + { + "X": 67072, + "Y": -2560, + "Z": 60928, + "Room": 68 + }, + { + "X": 67840, + "Y": -3840, + "Z": 29184, + "Room": 88, + "KeyItemsHigh": "25371,25374" + }, + { + "X": 68096, + "Y": -3840, + "Z": 29184, + "Room": 88, + "KeyItemsHigh": "25371,25374", + "RequiresReturnPath": true + }, + { + "X": 68352, + "Y": -3840, + "Z": 29184, + "Room": 88, + "KeyItemsHigh": "25371,25374", + "Range": "Medium" + }, + { + "X": 68352, + "Y": -3840, + "Z": 28928, + "Room": 88, + "KeyItemsHigh": "25371,25374", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 68096, + "Y": -3840, + "Z": 28928, + "Room": 88, + "KeyItemsHigh": "25371,25374", + "Range": "Large" + }, + { + "X": 67840, + "Y": -3840, + "Z": 28928, + "Room": 88, + "KeyItemsHigh": "25371,25374", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 62976, + "Y": -4864, + "Z": 34048, + "Room": 90, + "KeyItemsHigh": "25446", + "KeyItemsLow": "25526", + "Validated": false + }, + { + "X": 62976, + "Y": -4864, + "Z": 34304, + "Room": 90, + "KeyItemsHigh": "25446", + "KeyItemsLow": "25526", + "RequiresReturnPath": true, + "Validated": false + }, + { + "X": 62976, + "Y": -4864, + "Z": 34560, + "Room": 90, + "KeyItemsHigh": "25446", + "Range": "Medium" + }, + { + "X": 62720, + "Y": -4864, + "Z": 34560, + "Room": 90, + "KeyItemsHigh": "25446", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 62720, + "Y": -4864, + "Z": 34304, + "Room": 90, + "KeyItemsHigh": "25446", + "Range": "Large" + }, + { + "X": 62720, + "Y": -4864, + "Z": 34048, + "Room": 90, + "KeyItemsHigh": "25446", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 61952, + "Y": -640, + "Z": 36352, + "Room": 103 + }, + { + "X": 57856, + "Y": -1920, + "Z": 38400, + "Room": 74 + }, + { + "X": 53760, + "Y": -1280, + "Z": 37376, + "Room": 186 + }, + { + "X": 52736, + "Y": -512, + "Z": 37376, + "Room": 186 + }, + { + "X": 50688, + "Y": -512, + "Z": 37376, + "Room": 188 + }, + { + "X": 48640, + "Y": -3584, + "Z": 36352, + "Room": 179 + }, + { + "X": 47616, + "Y": -3712, + "Z": 35328, + "Room": 203 + }, + { + "X": 51712, + "Y": -3712, + "Z": 38400, + "Room": 148, + "Validated": false + }, + { + "X": 55808, + "Y": -4096, + "Z": 37376, + "Room": 165, + "Validated": false + }, + { + "X": 52736, + "Y": -512, + "Z": 39424, + "Room": 151 + }, + { + "X": 52736, + "Y": -512, + "Z": 40448, + "Room": 151 + }, + { + "X": 40448, + "Y": -5120, + "Z": 20992, + "Room": 201 + }, + { + "X": 50688, + "Y": -1024, + "Z": 39424, + "Room": 156 + }, + { + "X": 50688, + "Y": -1280, + "Z": 41472, + "Room": 157 + }, + { + "X": 47616, + "Y": -1536, + "Z": 41472, + "Room": 75 + }, + { + "X": 46592, + "Y": -3584, + "Z": 40448, + "Room": 70 + }, + { + "X": 47616, + "Y": -1664, + "Z": 50688, + "Room": 76 + }, + { + "X": 46592, + "Y": -1920, + "Z": 53760, + "Room": 202 + }, + { + "X": 47616, + "Y": -3584, + "Z": 54784, + "Room": 73 + }, + { + "X": 48640, + "Y": -3840, + "Z": 50688, + "Room": 71 + }, + { + "X": 47616, + "Y": -5376, + "Z": 55808, + "Room": 73 + }, + { + "X": 45568, + "Y": -7168, + "Z": 55808, + "Room": 49 + }, + { + "X": 43520, + "Y": -7168, + "Z": 52736, + "Room": 44 + }, + { + "X": 39424, + "Y": -7168, + "Z": 53760, + "Room": 83 + }, + { + "X": 38400, + "Y": -8704, + "Z": 53760, + "Room": 41, + "Validated": false + }, + { + "X": 39424, + "Y": -9216, + "Z": 56832, + "Room": 81, + "Validated": false + }, + { + "X": 37376, + "Y": -7168, + "Z": 56832, + "Room": 84 + }, + { + "X": 37376, + "Y": -7168, + "Z": 60928, + "Room": 80 + }, + { + "X": 44288, + "Y": -7168, + "Z": 59904, + "Room": 85, + "KeyItemsHigh": "25526" + }, + { + "X": 44544, + "Y": -7168, + "Z": 59904, + "Room": 85, + "KeyItemsHigh": "25526", + "RequiresReturnPath": true + }, + { + "X": 44800, + "Y": -7168, + "Z": 59904, + "Room": 85, + "KeyItemsHigh": "25526", + "Range": "Medium" + }, + { + "X": 44800, + "Y": -7168, + "Z": 60160, + "Room": 85, + "KeyItemsHigh": "25526", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -7168, + "Z": 60160, + "Room": 85, + "KeyItemsHigh": "25526", + "Range": "Large" + }, + { + "X": 44288, + "Y": -7168, + "Z": 60160, + "Room": 85, + "KeyItemsHigh": "25526", + "Range": "Large", + "RequiresReturnPath": true + } + ], + "MINES.TR2": [ + { + "X": 59904, + "Y": 1024, + "Z": 25088, + "Room": 40, + "KeyItemsLow": "26679,26444,26509", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 59904, + "Y": 1024, + "Z": 25088, + "Room": 40, + "KeyItemsLow": "26444,26509,26679", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 59904, + "Y": -512, + "Z": 23040, + "Room": 54 + }, + { + "X": 59904, + "Y": -512, + "Z": 22016, + "Room": 55 + }, + { + "X": 59904, + "Y": -512, + "Z": 20992, + "Room": 52 + }, + { + "X": 62976, + "Y": -512, + "Z": 20992, + "Room": 49 + }, + { + "X": 62976, + "Y": -512, + "Z": 27136, + "Room": 50 + }, + { + "X": 59904, + "Y": -512, + "Z": 27136, + "Room": 53 + }, + { + "X": 58880, + "Y": -512, + "Z": 27136, + "Room": 48 + }, + { + "X": 56832, + "Y": -512, + "Z": 26112, + "Room": 47 + }, + { + "X": 58880, + "Y": -512, + "Z": 20992, + "Room": 46 + }, + { + "X": 59904, + "Y": -512, + "Z": 28160, + "Room": 51 + }, + { + "X": 59904, + "Y": -384, + "Z": 31232, + "Room": 62 + }, + { + "X": 59648, + "Y": 5888, + "Z": 34304, + "Room": 65, + "KeyItemsLow": "26679,26444,26509", + "Range": "Medium" + }, + { + "X": 59904, + "Y": 5888, + "Z": 34304, + "Room": 65, + "KeyItemsLow": "26679,26444,26509", + "Range": "Large" + }, + { + "X": 58880, + "Y": 5376, + "Z": 34304, + "Room": 174 + }, + { + "X": 59904, + "Y": 6272, + "Z": 36352, + "Room": 67 + }, + { + "X": 59904, + "Y": 5888, + "Z": 39424, + "Room": 79 + }, + { + "X": 56832, + "Y": 6400, + "Z": 40448, + "Room": 111 + }, + { + "X": 47616, + "Y": 5760, + "Z": 45568, + "Room": 78 + }, + { + "X": 28160, + "Y": 3072, + "Z": 45568, + "Room": 8, + "Validated": false + }, + { + "X": 29184, + "Y": 4608, + "Z": 56832, + "Room": 10, + "Validated": false + }, + { + "X": 42496, + "Y": 6272, + "Z": 56832, + "Room": 12, + "Validated": false + }, + { + "X": 46592, + "Y": 7424, + "Z": 56832, + "Room": 19, + "Validated": false + }, + { + "X": 49664, + "Y": 7424, + "Z": 61952, + "Room": 68 + }, + { + "X": 49664, + "Y": 7936, + "Z": 70144, + "Room": 80 + }, + { + "X": 54784, + "Y": 7680, + "Z": 73216, + "Room": 45 + }, + { + "X": 53760, + "Y": 8064, + "Z": 69120, + "Room": 14 + }, + { + "X": 53760, + "Y": 7936, + "Z": 65024, + "Room": 18 + }, + { + "X": 55808, + "Y": 6400, + "Z": 59904, + "Room": 77 + }, + { + "X": 55808, + "Y": 8192, + "Z": 66048, + "Room": 146 + }, + { + "X": 55808, + "Y": 16256, + "Z": 71168, + "Room": 150 + }, + { + "X": 54784, + "Y": 17024, + "Z": 73216, + "Room": 151 + }, + { + "X": 55808, + "Y": 19456, + "Z": 70144, + "Room": 81 + }, + { + "X": 53760, + "Y": 23040, + "Z": 71168, + "Room": 107 + }, + { + "X": 53760, + "Y": 21888, + "Z": 70144, + "Room": 152 + }, + { + "X": 53760, + "Y": 23296, + "Z": 68096, + "Room": 153 + }, + { + "X": 53760, + "Y": 27776, + "Z": 71168, + "Room": 156, + "KeyItemsLow": "26679" + }, + { + "X": 53760, + "Y": 27776, + "Z": 71424, + "Room": 156, + "KeyItemsLow": "26679", + "RequiresReturnPath": true + }, + { + "X": 55808, + "Y": 29568, + "Z": 72192, + "Room": 170 + }, + { + "X": 56832, + "Y": 26368, + "Z": 70144, + "Room": 157 + }, + { + "X": 56832, + "Y": 26496, + "Z": 69120, + "Room": 158 + }, + { + "X": 57856, + "Y": 26624, + "Z": 66048, + "Room": 164 + }, + { + "X": 58880, + "Y": 26624, + "Z": 66048, + "Room": 160 + }, + { + "X": 65024, + "Y": 28672, + "Z": 62976, + "Room": 161 + }, + { + "X": 61952, + "Y": 28672, + "Z": 58880, + "Room": 188 + }, + { + "X": 67072, + "Y": 24320, + "Z": 53760, + "Room": 190 + }, + { + "X": 67072, + "Y": 24320, + "Z": 52736, + "Room": 192 + }, + { + "X": 74240, + "Y": 24064, + "Z": 61952, + "Room": 162 + }, + { + "X": 75264, + "Y": 23808, + "Z": 61952, + "Room": 163 + }, + { + "X": 75264, + "Y": 17920, + "Z": 71168, + "Room": 165 + }, + { + "X": 69120, + "Y": 14592, + "Z": 72192, + "Room": 166 + }, + { + "X": 64000, + "Y": 11776, + "Z": 71168, + "Room": 169 + }, + { + "X": 65024, + "Y": 8704, + "Z": 70144, + "Room": 168 + }, + { + "X": 70144, + "Y": 2816, + "Z": 69120, + "Room": 167 + }, + { + "X": 70144, + "Y": 5248, + "Z": 66048, + "Room": 95, + "Validated": false + }, + { + "X": 62976, + "Y": 7936, + "Z": 66048, + "Room": 86 + }, + { + "X": 58880, + "Y": 7936, + "Z": 70144, + "Room": 56 + }, + { + "X": 72192, + "Y": 3712, + "Z": 66048, + "Room": 0, + "Validated": false + }, + { + "X": 78336, + "Y": 256, + "Z": 66048, + "Room": 96, + "Validated": false + }, + { + "X": 89600, + "Y": 4096, + "Z": 66048, + "Room": 98, + "Validated": false + }, + { + "X": 95744, + "Y": 5120, + "Z": 66048, + "Room": 97, + "Validated": false + }, + { + "X": 98816, + "Y": 5120, + "Z": 62976, + "Room": 184, + "Validated": false + }, + { + "X": 98816, + "Y": 5120, + "Z": 59904, + "Room": 185, + "Validated": false + }, + { + "X": 98816, + "Y": 5120, + "Z": 56832, + "Room": 114, + "Validated": false + }, + { + "X": 94720, + "Y": 5120, + "Z": 57856, + "Room": 15, + "Validated": false + }, + { + "X": 82432, + "Y": 11776, + "Z": 57856, + "Room": 99, + "Validated": false + }, + { + "X": 80384, + "Y": 8704, + "Z": 57856, + "Room": 101, + "Validated": false + }, + { + "X": 78336, + "Y": 8192, + "Z": 57856, + "Room": 100, + "Validated": false + }, + { + "X": 68096, + "Y": 3712, + "Z": 57856, + "Room": 103, + "Validated": false + }, + { + "X": 65024, + "Y": 4480, + "Z": 52736, + "Room": 105, + "Validated": false + }, + { + "X": 65024, + "Y": 5888, + "Z": 48640, + "Room": 104 + }, + { + "X": 59904, + "Y": 5888, + "Z": 45568, + "Room": 70 + }, + { + "X": 47616, + "Y": 5888, + "Z": 41728, + "Room": 106, + "KeyItemsHigh": "26679", + "KeyItemsLow": "26444,26509" + }, + { + "X": 47616, + "Y": 5888, + "Z": 41472, + "Room": 106, + "KeyItemsHigh": "26679", + "KeyItemsLow": "26444,26509", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 5888, + "Z": 41216, + "Room": 106, + "KeyItemsHigh": "26679", + "Range": "Medium" + }, + { + "X": 47360, + "Y": 5888, + "Z": 41216, + "Room": 106, + "KeyItemsHigh": "26679", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 47360, + "Y": 5888, + "Z": 41472, + "Room": 106, + "KeyItemsHigh": "26679", + "Range": "Large" + }, + { + "X": 47360, + "Y": 5888, + "Z": 41728, + "Room": 106, + "KeyItemsHigh": "26679", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 52736, + "Y": 2048, + "Z": 48640, + "Room": 75 + }, + { + "X": 47616, + "Y": 3840, + "Z": 49664, + "Room": 64 + }, + { + "X": 45568, + "Y": 3840, + "Z": 49664, + "Room": 186 + }, + { + "X": 44544, + "Y": 4992, + "Z": 49664, + "Room": 177 + }, + { + "X": 41472, + "Y": 6144, + "Z": 49664, + "Room": 2 + }, + { + "X": 51712, + "Y": 8448, + "Z": 52736, + "Room": 108 + }, + { + "X": 51712, + "Y": 4608, + "Z": 65024, + "Room": 60, + "Validated": false + }, + { + "X": 50688, + "Y": 4608, + "Z": 67072, + "Room": 195, + "Validated": false + }, + { + "X": 51712, + "Y": 5120, + "Z": 71168, + "Room": 112, + "Validated": false + }, + { + "X": 49664, + "Y": 4608, + "Z": 68096, + "Room": 61, + "Validated": false + }, + { + "X": 47616, + "Y": 4736, + "Z": 69120, + "Room": 115, + "Validated": false + }, + { + "X": 34304, + "Y": 5248, + "Z": 69120, + "Room": 16, + "Validated": false + }, + { + "X": 31232, + "Y": 5632, + "Z": 64000, + "Room": 109 + }, + { + "X": 31232, + "Y": 8064, + "Z": 58880, + "Room": 11 + }, + { + "X": 31232, + "Y": 10752, + "Z": 55808, + "Room": 13 + }, + { + "X": 41472, + "Y": 10496, + "Z": 52736, + "Room": 66 + }, + { + "X": 41472, + "Y": 11520, + "Z": 49664, + "Room": 84 + }, + { + "X": 43520, + "Y": 11008, + "Z": 44544, + "Room": 110 + }, + { + "X": 39424, + "Y": 11136, + "Z": 49664, + "Room": 83 + }, + { + "X": 28160, + "Y": 7424, + "Z": 55808, + "Room": 116 + }, + { + "X": 25088, + "Y": 7424, + "Z": 53760, + "Room": 129 + }, + { + "X": 25088, + "Y": 7424, + "Z": 50688, + "Room": 130 + }, + { + "X": 14848, + "Y": 8832, + "Z": 51712, + "Room": 85 + }, + { + "X": 14848, + "Y": 14848, + "Z": 57856, + "Room": 87 + }, + { + "X": 7680, + "Y": 14848, + "Z": 59904, + "Room": 91 + }, + { + "X": 7680, + "Y": 15616, + "Z": 64000, + "Room": 93 + }, + { + "X": 12800, + "Y": 15616, + "Z": 64000, + "Room": 94 + }, + { + "X": 13824, + "Y": 15616, + "Z": 61952, + "Room": 90 + }, + { + "X": 16896, + "Y": 15488, + "Z": 60928, + "Room": 189 + }, + { + "X": 16896, + "Y": 15360, + "Z": 58880, + "Room": 159 + }, + { + "X": 22016, + "Y": 14848, + "Z": 61952, + "Room": 92 + }, + { + "X": 22016, + "Y": 14848, + "Z": 57856, + "Room": 89 + }, + { + "X": 23040, + "Y": 7424, + "Z": 56832, + "Room": 117 + }, + { + "X": 22016, + "Y": 7680, + "Z": 52736, + "Room": 119 + }, + { + "X": 16896, + "Y": 7168, + "Z": 52736, + "Room": 120 + }, + { + "X": 16896, + "Y": 5888, + "Z": 58880, + "Room": 128 + }, + { + "X": 16896, + "Y": 7424, + "Z": 60928, + "Room": 122 + }, + { + "X": 16896, + "Y": 7424, + "Z": 68096, + "Room": 125 + }, + { + "X": 13824, + "Y": 7424, + "Z": 65024, + "Room": 124 + }, + { + "X": 14848, + "Y": 6912, + "Z": 64000, + "Room": 123 + }, + { + "X": 10752, + "Y": 11776, + "Z": 65024, + "Room": 126 + }, + { + "X": 10752, + "Y": 10624, + "Z": 62976, + "Room": 187 + }, + { + "X": 18944, + "Y": 6912, + "Z": 60928, + "Room": 118 + }, + { + "X": 32256, + "Y": 8192, + "Z": 50688, + "Room": 82 + }, + { + "X": 43520, + "Y": 8832, + "Z": 41472, + "Room": 110, + "Validated": false + }, + { + "X": 43520, + "Y": 5504, + "Z": 36352, + "Room": 127, + "Validated": false + }, + { + "X": 43520, + "Y": 5504, + "Z": 34304, + "Room": 44, + "Validated": false + }, + { + "X": 45568, + "Y": 5632, + "Z": 31232, + "Room": 58, + "Validated": false + }, + { + "X": 44544, + "Y": 5632, + "Z": 32256, + "Room": 193, + "Validated": false + }, + { + "X": 43520, + "Y": 5632, + "Z": 30208, + "Room": 133, + "Validated": false + }, + { + "X": 46592, + "Y": 5376, + "Z": 26112, + "Room": 134, + "Validated": false + }, + { + "X": 51712, + "Y": 5632, + "Z": 31232, + "Room": 42, + "Validated": false + }, + { + "X": 51712, + "Y": 6400, + "Z": 36352, + "Room": 17, + "Validated": false + }, + { + "X": 51712, + "Y": 8448, + "Z": 41472, + "Room": 69 + }, + { + "X": 57856, + "Y": 3840, + "Z": 46592, + "Room": 74 + }, + { + "X": 52736, + "Y": 3840, + "Z": 49664, + "Room": 72 + }, + { + "X": 54784, + "Y": 3584, + "Z": 41472, + "Room": 71 + }, + { + "X": 54784, + "Y": 3456, + "Z": 40448, + "Room": 43 + }, + { + "X": 54784, + "Y": 2176, + "Z": 34304, + "Room": 102, + "Validated": false + }, + { + "X": 49664, + "Y": 2816, + "Z": 30208, + "Room": 131, + "Validated": false + }, + { + "X": 41472, + "Y": 3968, + "Z": 30208, + "Room": 132, + "Validated": false + }, + { + "X": 34304, + "Y": -2048, + "Z": 30208, + "Room": 136, + "Validated": false + }, + { + "X": 27136, + "Y": -8064, + "Z": 30208, + "Room": 32 + }, + { + "X": 16896, + "Y": -7680, + "Z": 30208, + "Room": 137 + }, + { + "X": 9728, + "Y": -10624, + "Z": 30208, + "Room": 138, + "Validated": false + }, + { + "X": 6656, + "Y": -10240, + "Z": 35328, + "Room": 139, + "Validated": false + }, + { + "X": 6656, + "Y": -7808, + "Z": 50688, + "Room": 141, + "Validated": false + }, + { + "X": 10752, + "Y": -7040, + "Z": 54784, + "Room": 143, + "Validated": false + }, + { + "X": 12800, + "Y": -6272, + "Z": 54784, + "Room": 182, + "Validated": false + }, + { + "X": 13824, + "Y": -5504, + "Z": 54784, + "Room": 178, + "Validated": false + }, + { + "X": 27136, + "Y": -4352, + "Z": 58880, + "Room": 144, + "Validated": false + }, + { + "X": 27136, + "Y": -7040, + "Z": 65024, + "Room": 145, + "Validated": false + }, + { + "X": 31232, + "Y": -7168, + "Z": 69120, + "Room": 147, + "Validated": false + }, + { + "X": 35328, + "Y": -6912, + "Z": 74240, + "Room": 176, + "Validated": false + }, + { + "X": 36352, + "Y": -6912, + "Z": 76288, + "Room": 148, + "Validated": false + }, + { + "X": 35328, + "Y": -6784, + "Z": 79360, + "Room": 175, + "Validated": false + }, + { + "X": 40448, + "Y": -5760, + "Z": 78336, + "Room": 142, + "Validated": false + }, + { + "X": 51712, + "Y": -3456, + "Z": 78336, + "Room": 140, + "Validated": false + }, + { + "X": 54784, + "Y": -3456, + "Z": 74240, + "Room": 149, + "Validated": false + }, + { + "X": 54784, + "Y": 256, + "Z": 60928, + "Room": 135 + }, + { + "X": 24320, + "Y": -1536, + "Z": 28160, + "Room": 23, + "KeyItemsHigh": "26444,26509" + }, + { + "X": 24064, + "Y": -1536, + "Z": 28160, + "Room": 23, + "KeyItemsHigh": "26444,26509", + "RequiresReturnPath": true + }, + { + "X": 23808, + "Y": -1536, + "Z": 28160, + "Room": 23, + "KeyItemsHigh": "26444,26509", + "Range": "Medium" + }, + { + "X": 23808, + "Y": -1536, + "Z": 28416, + "Room": 23, + "KeyItemsHigh": "26444,26509", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 24064, + "Y": -1536, + "Z": 28416, + "Room": 23, + "KeyItemsHigh": "26444,26509", + "Range": "Large" + }, + { + "X": 24320, + "Y": -1536, + "Z": 28416, + "Room": 23, + "KeyItemsHigh": "26444,26509", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 20992, + "Y": -5248, + "Z": 31232, + "Room": 25 + }, + { + "X": 25088, + "Y": 1024, + "Z": 31232, + "Room": 197 + }, + { + "X": 26112, + "Y": -768, + "Z": 30208, + "Room": 198 + }, + { + "X": 23040, + "Y": 6528, + "Z": 31232, + "Room": 21 + }, + { + "X": 25088, + "Y": 8960, + "Z": 29184, + "Room": 28 + }, + { + "X": 23040, + "Y": 17408, + "Z": 30208, + "Room": 20 + }, + { + "X": 25088, + "Y": 15360, + "Z": 30208, + "Room": 35 + }, + { + "X": 26112, + "Y": 17664, + "Z": 27136, + "Room": 179 + }, + { + "X": 24064, + "Y": 17152, + "Z": 27136, + "Room": 180 + }, + { + "X": 23040, + "Y": 15872, + "Z": 27136, + "Room": 181 + }, + { + "X": 26112, + "Y": 3328, + "Z": 25088, + "Room": 34 + }, + { + "X": 24064, + "Y": 1920, + "Z": 24064, + "Room": 7 + }, + { + "X": 25088, + "Y": -2560, + "Z": 25088, + "Room": 9 + }, + { + "X": 19968, + "Y": 0, + "Z": 18944, + "Room": 1 + }, + { + "X": 13824, + "Y": 3712, + "Z": 29184, + "Room": 5 + }, + { + "X": 13824, + "Y": 3712, + "Z": 30208, + "Room": 173 + }, + { + "X": 15872, + "Y": 9728, + "Z": 27136, + "Room": 172, + "Validated": false + }, + { + "X": 16896, + "Y": 9728, + "Z": 15872, + "Room": 171, + "Validated": false + }, + { + "X": 10752, + "Y": 0, + "Z": 13824, + "Room": 4 + }, + { + "X": 9728, + "Y": -2048, + "Z": 16896, + "Room": 6 + }, + { + "X": 10752, + "Y": -256, + "Z": 16896, + "Room": 3 + } + ], + "CITY.TR2": [ + { + "X": 98816, + "Y": 0, + "Z": 69376, + "Room": 9, + "KeyItemsLow": "27269" + }, + { + "X": 98816, + "Y": 0, + "Z": 69120, + "Room": 9, + "KeyItemsLow": "27269", + "RequiresReturnPath": true + }, + { + "X": 98816, + "Y": 0, + "Z": 68864, + "Room": 9, + "KeyItemsLow": "27269", + "Range": "Medium" + }, + { + "X": 98560, + "Y": 0, + "Z": 68864, + "Room": 9, + "KeyItemsLow": "27269", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 98560, + "Y": 0, + "Z": 69120, + "Room": 9, + "KeyItemsLow": "27269", + "Range": "Large" + }, + { + "X": 98560, + "Y": 0, + "Z": 69376, + "Room": 9, + "KeyItemsLow": "27269,27686", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 94720, + "Y": -256, + "Z": 69120, + "Room": 4 + }, + { + "X": 90624, + "Y": 1280, + "Z": 70144, + "Room": 1 + }, + { + "X": 91648, + "Y": 0, + "Z": 73216, + "Room": 15 + }, + { + "X": 92672, + "Y": 0, + "Z": 64000, + "Room": 6 + }, + { + "X": 92672, + "Y": 0, + "Z": 62976, + "Room": 0 + }, + { + "X": 93696, + "Y": 0, + "Z": 58880, + "Room": 7 + }, + { + "X": 93696, + "Y": 0, + "Z": 56832, + "Room": 31 + }, + { + "X": 93696, + "Y": 0, + "Z": 53760, + "Room": 37 + }, + { + "X": 89600, + "Y": 0, + "Z": 54784, + "Room": 33 + }, + { + "X": 86528, + "Y": -3840, + "Z": 58880, + "Room": 23 + }, + { + "X": 86528, + "Y": -3840, + "Z": 57856, + "Room": 24 + }, + { + "X": 83456, + "Y": -4608, + "Z": 58880, + "Room": 25 + }, + { + "X": 83456, + "Y": -4352, + "Z": 65024, + "Room": 26 + }, + { + "X": 85504, + "Y": -3840, + "Z": 65024, + "Room": 11 + }, + { + "X": 85504, + "Y": -3840, + "Z": 66048, + "Room": 12 + }, + { + "X": 90624, + "Y": -2688, + "Z": 67072, + "Room": 17 + }, + { + "X": 85504, + "Y": -2560, + "Z": 61952, + "Room": 13 + }, + { + "X": 84480, + "Y": -2048, + "Z": 61952, + "Room": 19 + }, + { + "X": 81408, + "Y": -2560, + "Z": 61952, + "Room": 20 + }, + { + "X": 81408, + "Y": -2560, + "Z": 62976, + "Room": 27 + }, + { + "X": 86528, + "Y": -512, + "Z": 76032, + "Room": 28, + "KeyItemsHigh": "27269" + }, + { + "X": 86528, + "Y": -512, + "Z": 76288, + "Room": 28, + "KeyItemsHigh": "27269", + "RequiresReturnPath": true + }, + { + "X": 86528, + "Y": -512, + "Z": 76544, + "Room": 28, + "KeyItemsHigh": "27269", + "Range": "Medium" + }, + { + "X": 86272, + "Y": -512, + "Z": 76544, + "Room": 28, + "KeyItemsHigh": "27269", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 86272, + "Y": -512, + "Z": 76288, + "Room": 28, + "KeyItemsHigh": "27269", + "Range": "Large" + }, + { + "X": 86272, + "Y": -512, + "Z": 76032, + "Room": 28, + "KeyItemsHigh": "27269", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 85504, + "Y": -256, + "Z": 76288, + "Room": 2 + }, + { + "X": 85504, + "Y": -256, + "Z": 75264, + "Room": 29 + }, + { + "X": 86528, + "Y": -3840, + "Z": 76288, + "Room": 30 + }, + { + "X": 87552, + "Y": -2816, + "Z": 73216, + "Room": 34 + }, + { + "X": 84480, + "Y": -3840, + "Z": 73216, + "Room": 21 + }, + { + "X": 83456, + "Y": -3840, + "Z": 73216, + "Room": 16 + }, + { + "X": 84480, + "Y": -768, + "Z": 78336, + "Room": 22 + }, + { + "X": 87552, + "Y": 0, + "Z": 79360, + "Room": 8 + }, + { + "X": 90624, + "Y": -2304, + "Z": 52736, + "Room": 39 + }, + { + "X": 90624, + "Y": -2304, + "Z": 54784, + "Room": 32 + }, + { + "X": 88576, + "Y": 0, + "Z": 52736, + "Room": 36 + }, + { + "X": 87552, + "Y": -256, + "Z": 52736, + "Room": 44 + }, + { + "X": 76288, + "Y": -768, + "Z": 45568, + "Room": 47 + }, + { + "X": 73216, + "Y": -3328, + "Z": 46592, + "Room": 43 + }, + { + "X": 80384, + "Y": -3968, + "Z": 58880, + "Room": 46, + "Validated": false + }, + { + "X": 81408, + "Y": 6656, + "Z": 50688, + "Room": 45, + "Validated": false + }, + { + "X": 82432, + "Y": 5760, + "Z": 58880, + "Room": 48, + "Validated": false + }, + { + "X": 23040, + "Y": -3328, + "Z": 60928, + "Room": 76, + "KeyItemsLow": "27368", + "Range": "Large" + }, + { + "X": 22784, + "Y": -3328, + "Z": 60928, + "Room": 76, + "KeyItemsLow": "27368", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -3328, + "Z": 55808, + "Room": 82 + }, + { + "X": 24064, + "Y": -3328, + "Z": 55808, + "Room": 89 + }, + { + "X": 25088, + "Y": -3328, + "Z": 50688, + "Room": 232 + }, + { + "X": 23040, + "Y": -3328, + "Z": 46592, + "Room": 90 + }, + { + "X": 24064, + "Y": -3328, + "Z": 44544, + "Room": 231 + }, + { + "X": 29184, + "Y": -3328, + "Z": 39424, + "Room": 230 + }, + { + "X": 23040, + "Y": -3328, + "Z": 39424, + "Room": 90 + }, + { + "X": 20171, + "Y": -3328, + "Z": 39159, + "Room": 92 + }, + { + "X": 18944, + "Y": -3328, + "Z": 54784, + "Room": 83 + }, + { + "X": 17920, + "Y": -3328, + "Z": 50688, + "Room": 91 + }, + { + "X": 12800, + "Y": -3328, + "Z": 49664, + "Room": 86 + }, + { + "X": 13824, + "Y": -3328, + "Z": 52736, + "Room": 85 + }, + { + "X": 14848, + "Y": -3328, + "Z": 52736, + "Room": 93 + }, + { + "X": 14848, + "Y": -3328, + "Z": 55808, + "Room": 84 + }, + { + "X": 12800, + "Y": -3328, + "Z": 54784, + "Room": 88 + }, + { + "X": 11776, + "Y": -3328, + "Z": 52736, + "Room": 87 + }, + { + "X": 11776, + "Y": -3328, + "Z": 41472, + "Room": 80 + }, + { + "X": 12032, + "Y": -3328, + "Z": 40448, + "Room": 81, + "KeyItemsLow": "27368" + }, + { + "X": 11776, + "Y": -3328, + "Z": 40448, + "Room": 81, + "KeyItemsLow": "27368", + "RequiresReturnPath": true + }, + { + "X": 11520, + "Y": -3328, + "Z": 40448, + "Room": 81, + "KeyItemsLow": "27368", + "Range": "Medium" + }, + { + "X": 11520, + "Y": -3328, + "Z": 40192, + "Room": 81, + "KeyItemsLow": "27368,27686", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 14848, + "Y": -3328, + "Z": 37376, + "Room": 35 + }, + { + "X": 10752, + "Y": -3328, + "Z": 38400, + "Room": 50 + }, + { + "X": 8704, + "Y": -3584, + "Z": 38400, + "Room": 41 + }, + { + "X": 7680, + "Y": -8192, + "Z": 46592, + "Room": 100 + }, + { + "X": 7680, + "Y": -8704, + "Z": 47616, + "Room": 42 + }, + { + "X": 7680, + "Y": -10240, + "Z": 50688, + "Room": 97 + }, + { + "X": 10496, + "Y": -11520, + "Z": 54784, + "Room": 99, + "KeyItemsHigh": "27368" + }, + { + "X": 10752, + "Y": -11520, + "Z": 54784, + "Room": 99, + "KeyItemsHigh": "27368", + "RequiresReturnPath": true + }, + { + "X": 11008, + "Y": -11520, + "Z": 54784, + "Room": 99, + "KeyItemsHigh": "27368", + "Range": "Medium" + }, + { + "X": 11008, + "Y": -11520, + "Z": 55040, + "Room": 99, + "KeyItemsHigh": "27368", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 10752, + "Y": -11520, + "Z": 55040, + "Room": 99, + "KeyItemsHigh": "27368", + "Range": "Large" + }, + { + "X": 10496, + "Y": -11520, + "Z": 55040, + "Room": 99, + "KeyItemsHigh": "27368", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 10752, + "Y": 1024, + "Z": 57856, + "Room": 167 + }, + { + "X": 11776, + "Y": 1024, + "Z": 57856, + "Room": 166 + }, + { + "X": 15872, + "Y": 0, + "Z": 58880, + "Room": 165 + }, + { + "X": 16896, + "Y": 0, + "Z": 65024, + "Room": 161 + }, + { + "X": 34304, + "Y": -3328, + "Z": 65024, + "Room": 79 + }, + { + "X": 42496, + "Y": -3328, + "Z": 65024, + "Room": 152, + "Validated": false + }, + { + "X": 41216, + "Y": -3328, + "Z": 74240, + "Room": 153, + "KeyItemsLow": "27421" + }, + { + "X": 41472, + "Y": -3328, + "Z": 74240, + "Room": 153, + "KeyItemsLow": "27421", + "RequiresReturnPath": true + }, + { + "X": 41728, + "Y": -3328, + "Z": 74240, + "Room": 153, + "KeyItemsLow": "27421", + "Range": "Medium" + }, + { + "X": 41728, + "Y": -3328, + "Z": 74496, + "Room": 153, + "KeyItemsLow": "27421", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 41472, + "Y": -3328, + "Z": 74496, + "Room": 153, + "KeyItemsLow": "27421", + "Range": "Large" + }, + { + "X": 41216, + "Y": -3328, + "Z": 74496, + "Room": 153, + "KeyItemsLow": "27421", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": -4608, + "Z": 71168, + "Room": 152 + }, + { + "X": 44544, + "Y": -5888, + "Z": 74240, + "Room": 204, + "Validated": false + }, + { + "X": 38400, + "Y": -5376, + "Z": 75264, + "Room": 148 + }, + { + "X": 35328, + "Y": -5888, + "Z": 73216, + "Room": 147 + }, + { + "X": 35328, + "Y": -7680, + "Z": 61952, + "Room": 149 + }, + { + "X": 43520, + "Y": -7808, + "Z": 62976, + "Room": 150 + }, + { + "X": 44544, + "Y": -7424, + "Z": 74240, + "Room": 120 + }, + { + "X": 37376, + "Y": 2560, + "Z": 66304, + "Room": 171, + "KeyItemsHigh": "27421" + }, + { + "X": 37376, + "Y": 2560, + "Z": 66048, + "Room": 171, + "KeyItemsHigh": "27421", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": 2560, + "Z": 65792, + "Room": 171, + "KeyItemsHigh": "27421", + "Range": "Medium" + }, + { + "X": 37120, + "Y": 2560, + "Z": 65792, + "Room": 171, + "KeyItemsHigh": "27421", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 37120, + "Y": 2560, + "Z": 66048, + "Room": 171, + "KeyItemsHigh": "27421", + "Range": "Large" + }, + { + "X": 37120, + "Y": 2560, + "Z": 66304, + "Room": 171, + "KeyItemsHigh": "27421", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 28160, + "Y": 1536, + "Z": 65024, + "Room": 169 + }, + { + "X": 22016, + "Y": 3840, + "Z": 64000, + "Room": 225 + }, + { + "X": 22016, + "Y": 3840, + "Z": 66048, + "Room": 226 + }, + { + "X": 19968, + "Y": 3840, + "Z": 64000, + "Room": 224 + }, + { + "X": 19968, + "Y": 3840, + "Z": 66048, + "Room": 223 + }, + { + "X": 18944, + "Y": 3840, + "Z": 65024, + "Room": 207 + }, + { + "X": 23040, + "Y": -3328, + "Z": 69120, + "Room": 77 + }, + { + "X": 23296, + "Y": -1536, + "Z": 75264, + "Room": 125, + "KeyItemsLow": "27395" + }, + { + "X": 23040, + "Y": -1536, + "Z": 75264, + "Room": 125, + "KeyItemsLow": "27395", + "RequiresReturnPath": true + }, + { + "X": 22784, + "Y": -1536, + "Z": 75264, + "Room": 125, + "KeyItemsLow": "27395", + "Range": "Medium" + }, + { + "X": 22784, + "Y": -1536, + "Z": 75520, + "Room": 125, + "KeyItemsLow": "27395", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -1536, + "Z": 75520, + "Room": 125, + "KeyItemsLow": "27395", + "Range": "Large" + }, + { + "X": 23296, + "Y": -1536, + "Z": 75520, + "Room": 125, + "KeyItemsLow": "27395", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 23040, + "Y": -1536, + "Z": 77312, + "Room": 127 + }, + { + "X": 23040, + "Y": 1792, + "Z": 82432, + "Room": 128 + }, + { + "X": 24064, + "Y": 1280, + "Z": 76288, + "Room": 126 + }, + { + "X": 23040, + "Y": 4096, + "Z": 75264, + "Room": 129 + }, + { + "X": 28160, + "Y": 7424, + "Z": 74240, + "Room": 130 + }, + { + "X": 30208, + "Y": 7424, + "Z": 75264, + "Room": 131 + }, + { + "X": 34304, + "Y": 6528, + "Z": 76288, + "Room": 155 + }, + { + "X": 38400, + "Y": 7680, + "Z": 76288, + "Room": 135 + }, + { + "X": 33280, + "Y": 5376, + "Z": 75264, + "Room": 133 + }, + { + "X": 33280, + "Y": 6400, + "Z": 74240, + "Room": 134 + }, + { + "X": 35328, + "Y": -768, + "Z": 75264, + "Room": 122 + }, + { + "X": 35328, + "Y": -2560, + "Z": 72192, + "Room": 141 + }, + { + "X": 36352, + "Y": -2304, + "Z": 79360, + "Room": 145 + }, + { + "X": 34304, + "Y": -2304, + "Z": 79360, + "Room": 144 + }, + { + "X": 35328, + "Y": -768, + "Z": 79360, + "Room": 146 + }, + { + "X": 35328, + "Y": -512, + "Z": 83456, + "Room": 108 + }, + { + "X": 35328, + "Y": -1792, + "Z": 87552, + "Room": 94 + }, + { + "X": 37376, + "Y": -2048, + "Z": 89600, + "Room": 109 + }, + { + "X": 35328, + "Y": -768, + "Z": 69120, + "Room": 142 + }, + { + "X": 28160, + "Y": 4224, + "Z": 70144, + "Room": 143 + }, + { + "X": 38400, + "Y": 7424, + "Z": 75264, + "Room": 136 + }, + { + "X": 38144, + "Y": 7424, + "Z": 74240, + "Room": 139, + "KeyItemsHigh": "27395" + }, + { + "X": 38400, + "Y": 7424, + "Z": 74240, + "Room": 139, + "KeyItemsHigh": "27395", + "RequiresReturnPath": true + }, + { + "X": 38656, + "Y": 7424, + "Z": 74240, + "Room": 139, + "KeyItemsHigh": "27395", + "Range": "Medium" + }, + { + "X": 38656, + "Y": 7424, + "Z": 73984, + "Room": 139, + "KeyItemsHigh": "27395", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": 7424, + "Z": 73984, + "Room": 139, + "KeyItemsHigh": "27395", + "Range": "Large" + }, + { + "X": 38144, + "Y": 7424, + "Z": 73984, + "Room": 139, + "KeyItemsHigh": "27395", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 38400, + "Y": 9728, + "Z": 70144, + "Room": 173 + }, + { + "X": 31232, + "Y": 12544, + "Z": 70144, + "Room": 176 + }, + { + "X": 22016, + "Y": 12800, + "Z": 69120, + "Room": 177 + }, + { + "X": 16896, + "Y": -1024, + "Z": 69120, + "Room": 182 + }, + { + "X": 15872, + "Y": 1024, + "Z": 69120, + "Room": 96 + }, + { + "X": 16896, + "Y": -3328, + "Z": 65024, + "Room": 78 + }, + { + "X": 11776, + "Y": -3328, + "Z": 65024, + "Room": 102 + }, + { + "X": 5632, + "Y": -2816, + "Z": 65024, + "Room": 104 + }, + { + "X": 3584, + "Y": -3072, + "Z": 72192, + "Room": 103 + }, + { + "X": 3584, + "Y": -3200, + "Z": 74240, + "Room": 111, + "Validated": false + }, + { + "X": 3584, + "Y": -3328, + "Z": 77312, + "Room": 116, + "Validated": false + }, + { + "X": 3584, + "Y": -1664, + "Z": 73216, + "Room": 114 + }, + { + "X": 3840, + "Y": 1024, + "Z": 77312, + "Room": 115, + "KeyItemsLow": "27449" + }, + { + "X": 3584, + "Y": 1024, + "Z": 77312, + "Room": 115, + "KeyItemsLow": "27449", + "RequiresReturnPath": true + }, + { + "X": 3328, + "Y": 1024, + "Z": 77312, + "Room": 115, + "KeyItemsLow": "27449", + "Range": "Medium" + }, + { + "X": 3328, + "Y": 1024, + "Z": 77568, + "Room": 115, + "KeyItemsLow": "27449", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 3584, + "Y": 1024, + "Z": 77568, + "Room": 115, + "KeyItemsLow": "27449", + "Range": "Large" + }, + { + "X": 3840, + "Y": 1024, + "Z": 77568, + "Room": 115, + "KeyItemsLow": "27449", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 14848, + "Y": 1024, + "Z": 80384, + "Room": 118 + }, + { + "X": 15872, + "Y": 1024, + "Z": 80384, + "Room": 119 + }, + { + "X": 17152, + "Y": 1024, + "Z": 78592, + "Room": 162, + "KeyItemsHigh": "27449" + }, + { + "X": 16896, + "Y": 1024, + "Z": 78592, + "Room": 162, + "KeyItemsHigh": "27449", + "RequiresReturnPath": true + }, + { + "X": 16640, + "Y": 1024, + "Z": 78592, + "Room": 162, + "KeyItemsHigh": "27449", + "Range": "Medium" + }, + { + "X": 16640, + "Y": 1024, + "Z": 78336, + "Room": 162, + "KeyItemsHigh": "27449", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 16896, + "Y": 1024, + "Z": 78336, + "Room": 162, + "KeyItemsHigh": "27449", + "Range": "Large" + }, + { + "X": 17152, + "Y": 1024, + "Z": 78336, + "Room": 162, + "KeyItemsHigh": "27449", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 69120, + "Y": -256, + "Z": 51712, + "Room": 51, + "KeyItemsLow": "27686", + "Range": "Large" + }, + { + "X": 66048, + "Y": 0, + "Z": 55808, + "Room": 57 + }, + { + "X": 62976, + "Y": 0, + "Z": 53760, + "Room": 52 + }, + { + "X": 60928, + "Y": -256, + "Z": 51712, + "Room": 53 + }, + { + "X": 56832, + "Y": -3584, + "Z": 50688, + "Room": 55, + "Validated": false + }, + { + "X": 52736, + "Y": -256, + "Z": 51712, + "Room": 56 + }, + { + "X": 43520, + "Y": -1280, + "Z": 51712, + "Room": 62 + }, + { + "X": 38400, + "Y": -1280, + "Z": 51712, + "Room": 58, + "KeyItemsLow": "27686", + "Range": "Medium" + }, + { + "X": 36352, + "Y": -2048, + "Z": 58880, + "Room": 63 + }, + { + "X": 36352, + "Y": -2048, + "Z": 59904, + "Room": 72 + }, + { + "X": 36352, + "Y": -2560, + "Z": 62976, + "Room": 66 + }, + { + "X": 33280, + "Y": -3072, + "Z": 62976, + "Room": 75 + }, + { + "X": 29184, + "Y": -1664, + "Z": 68096, + "Room": 74 + }, + { + "X": 29184, + "Y": -1664, + "Z": 61952, + "Room": 73 + }, + { + "X": 25088, + "Y": 0, + "Z": 61952, + "Room": 70 + }, + { + "X": 25088, + "Y": 0, + "Z": 62976, + "Room": 67 + }, + { + "X": 25088, + "Y": 0, + "Z": 68096, + "Room": 71 + }, + { + "X": 24064, + "Y": 768, + "Z": 64000, + "Room": 67 + }, + { + "X": 19968, + "Y": 0, + "Z": 62976, + "Room": 68 + }, + { + "X": 39424, + "Y": -3840, + "Z": 52736, + "Room": 60, + "Validated": false + }, + { + "X": 33280, + "Y": -3840, + "Z": 55808, + "Room": 61, + "Validated": false + }, + { + "X": 34304, + "Y": -4864, + "Z": 51712, + "Room": 59, + "Validated": false + }, + { + "X": 30208, + "Y": -4096, + "Z": 51712, + "Room": 227, + "Validated": false + }, + { + "X": 36352, + "Y": -1280, + "Z": 48640, + "Room": 65 + }, + { + "X": 36352, + "Y": -1280, + "Z": 45568, + "Room": 181 + }, + { + "X": 33280, + "Y": -1280, + "Z": 44544, + "Room": 184 + }, + { + "X": 34304, + "Y": -1280, + "Z": 43520, + "Room": 185 + }, + { + "X": 35328, + "Y": -640, + "Z": 42496, + "Room": 186 + }, + { + "X": 37376, + "Y": -256, + "Z": 42496, + "Room": 183 + }, + { + "X": 37376, + "Y": 0, + "Z": 34304, + "Room": 101, + "KeyItemsLow": "27686" + }, + { + "X": 37120, + "Y": 0, + "Z": 34304, + "Room": 101, + "KeyItemsLow": "27686", + "RequiresReturnPath": true + }, + { + "X": 37376, + "Y": -256, + "Z": 28160, + "Room": 197 + }, + { + "X": 43520, + "Y": -256, + "Z": 34304, + "Room": 196 + }, + { + "X": 31232, + "Y": -256, + "Z": 34304, + "Room": 188 + }, + { + "X": 42496, + "Y": -3328, + "Z": 36352, + "Room": 175 + }, + { + "X": 31232, + "Y": -3328, + "Z": 32256, + "Room": 191 + }, + { + "X": 30208, + "Y": -3328, + "Z": 32256, + "Room": 190 + }, + { + "X": 27136, + "Y": -3328, + "Z": 28160, + "Room": 202 + }, + { + "X": 23040, + "Y": -3328, + "Z": 32256, + "Room": 187 + }, + { + "X": 26112, + "Y": -3328, + "Z": 36352, + "Room": 172 + }, + { + "X": 29184, + "Y": -1280, + "Z": 33280, + "Room": 192 + }, + { + "X": 29184, + "Y": -2048, + "Z": 36352, + "Room": 203 + }, + { + "X": 29184, + "Y": 512, + "Z": 36352, + "Room": 195 + }, + { + "X": 24064, + "Y": 2048, + "Z": 34304, + "Room": 194 + }, + { + "X": 31232, + "Y": 6912, + "Z": 30208, + "Room": 201 + }, + { + "X": 23040, + "Y": 5120, + "Z": 31232, + "Room": 208 + }, + { + "X": 20992, + "Y": 5120, + "Z": 33280, + "Room": 218 + }, + { + "X": 20992, + "Y": 5376, + "Z": 37376, + "Room": 216 + }, + { + "X": 20992, + "Y": 4992, + "Z": 40448, + "Room": 210 + }, + { + "X": 17920, + "Y": 5120, + "Z": 39424, + "Room": 211 + }, + { + "X": 20992, + "Y": 5248, + "Z": 42496, + "Room": 213 + }, + { + "X": 24064, + "Y": 5248, + "Z": 49664, + "Room": 214 + }, + { + "X": 27136, + "Y": 5376, + "Z": 44544, + "Room": 215 + }, + { + "X": 29184, + "Y": 5120, + "Z": 39424, + "Room": 211 + }, + { + "X": 30208, + "Y": 5120, + "Z": 39424, + "Room": 209 + }, + { + "X": 25088, + "Y": 5120, + "Z": 54784, + "Room": 212 + }, + { + "X": 28160, + "Y": 5376, + "Z": 53760, + "Room": 221 + }, + { + "X": 30208, + "Y": 5632, + "Z": 54784, + "Room": 219 + }, + { + "X": 28160, + "Y": 5376, + "Z": 55808, + "Room": 220 + }, + { + "X": 18944, + "Y": 512, + "Z": 57856, + "Room": 189 + }, + { + "X": 48896, + "Y": 6144, + "Z": 47872, + "Room": 54, + "KeyItemsHigh": "27686" + }, + { + "X": 48896, + "Y": 6144, + "Z": 47616, + "Room": 54, + "KeyItemsHigh": "27686", + "RequiresReturnPath": true + }, + { + "X": 48896, + "Y": 6144, + "Z": 47360, + "Room": 54, + "KeyItemsHigh": "27686", + "Range": "Medium" + }, + { + "X": 48640, + "Y": 6144, + "Z": 47360, + "Room": 54, + "KeyItemsHigh": "27686", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": 6144, + "Z": 47616, + "Room": 54, + "KeyItemsHigh": "27686", + "Range": "Large" + }, + { + "X": 48640, + "Y": 6144, + "Z": 47872, + "Room": 54, + "KeyItemsHigh": "27686", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 47616, + "Y": 6144, + "Z": 47616, + "Room": 156 + }, + { + "X": 23040, + "Y": 3584, + "Z": 65024, + "Room": 222 + } + ], + "CHAMBER.TR2": [ + { + "X": 61952, + "Y": -512, + "Z": 62976, + "Room": 5 + }, + { + "X": 67072, + "Y": -512, + "Z": 62976, + "Room": 15 + }, + { + "X": 57856, + "Y": -512, + "Z": 72192, + "Room": 6 + }, + { + "X": 48640, + "Y": -512, + "Z": 62976, + "Room": 9 + }, + { + "X": 57856, + "Y": -512, + "Z": 53760, + "Room": 8 + }, + { + "X": 66048, + "Y": -3328, + "Z": 62976, + "Room": 10 + }, + { + "X": 67072, + "Y": -3328, + "Z": 62976, + "Room": 11 + }, + { + "X": 69120, + "Y": -3328, + "Z": 64000, + "Room": 13 + }, + { + "X": 69120, + "Y": -4096, + "Z": 68096, + "Room": 2 + }, + { + "X": 62976, + "Y": -6272, + "Z": 68096, + "Room": 3 + }, + { + "X": 59904, + "Y": -8192, + "Z": 65024, + "Room": 4 + }, + { + "X": 55808, + "Y": -10240, + "Z": 62976, + "Room": 12 + }, + { + "X": 53760, + "Y": -11008, + "Z": 62976, + "Room": 7 + }, + { + "X": 55808, + "Y": -11008, + "Z": 58880, + "Room": 16 + }, + { + "X": 55808, + "Y": -10880, + "Z": 56832, + "Room": 17 + }, + { + "X": 55808, + "Y": -6016, + "Z": 49664, + "Room": 18 + }, + { + "X": 54784, + "Y": -1024, + "Z": 40448, + "Room": 20 + }, + { + "X": 49664, + "Y": 128, + "Z": 40448, + "Room": 21 + }, + { + "X": 48640, + "Y": 0, + "Z": 37376, + "Room": 23 + }, + { + "X": 40448, + "Y": -2176, + "Z": 43520, + "Room": 26, + "Validated": false + }, + { + "X": 36352, + "Y": -256, + "Z": 39424, + "Room": 27 + }, + { + "X": 35328, + "Y": 0, + "Z": 37376, + "Room": 43 + }, + { + "X": 43520, + "Y": 0, + "Z": 37376, + "Room": 24 + }, + { + "X": 39424, + "Y": 0, + "Z": 36352, + "Room": 25 + }, + { + "X": 38400, + "Y": 0, + "Z": 30208, + "Room": 28 + }, + { + "X": 40448, + "Y": -2816, + "Z": 29184, + "Room": 35, + "Validated": false + }, + { + "X": 37376, + "Y": -3200, + "Z": 31232, + "Room": 31, + "Validated": false + }, + { + "X": 38400, + "Y": -2816, + "Z": 34304, + "Room": 34, + "Validated": false + }, + { + "X": 32256, + "Y": 0, + "Z": 25088, + "Room": 37 + }, + { + "X": 31232, + "Y": -2816, + "Z": 25088, + "Room": 36, + "Validated": false + }, + { + "X": 23040, + "Y": 0, + "Z": 27136, + "Room": 29 + } + ], + "STPAUL.TR2": [ + { + "X": 57856, + "Y": -17536, + "Z": 55808, + "Room": 40 + }, + { + "X": 49664, + "Y": -9216, + "Z": 55808, + "Room": 48, + "KeyItemsLow": "29220", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 49408, + "Y": -9216, + "Z": 55808, + "Room": 48, + "KeyItemsLow": "29220", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": -9216, + "Z": 54784, + "Room": 49 + }, + { + "X": 45568, + "Y": -12032, + "Z": 54784, + "Room": 50 + }, + { + "X": 42496, + "Y": -12032, + "Z": 54784, + "Room": 51 + }, + { + "X": 48640, + "Y": -13568, + "Z": 65024, + "Room": 0 + }, + { + "X": 50688, + "Y": -11264, + "Z": 60928, + "Room": 20 + }, + { + "X": 44544, + "Y": -7424, + "Z": 58880, + "Room": 45 + }, + { + "X": 46592, + "Y": -7168, + "Z": 54784, + "Room": 46 + }, + { + "X": 48384, + "Y": -4864, + "Z": 56064, + "Room": 47, + "KeyItemsLow": "29220" + }, + { + "X": 48640, + "Y": -4864, + "Z": 56064, + "Room": 47, + "KeyItemsLow": "29220", + "RequiresReturnPath": true + }, + { + "X": 48640, + "Y": -4864, + "Z": 55808, + "Room": 47, + "KeyItemsLow": "29220", + "Range": "Medium" + }, + { + "X": 48640, + "Y": -4864, + "Z": 55552, + "Room": 47, + "KeyItemsLow": "29220", + "Range": "Large" + }, + { + "X": 45568, + "Y": -2304, + "Z": 58880, + "Room": 44 + }, + { + "X": 40448, + "Y": 1280, + "Z": 60928, + "Room": 57 + }, + { + "X": 50688, + "Y": 1280, + "Z": 53760, + "Room": 42 + }, + { + "X": 45568, + "Y": -3840, + "Z": 53760, + "Room": 52 + }, + { + "X": 46592, + "Y": -5504, + "Z": 52736, + "Room": 67 + }, + { + "X": 40448, + "Y": -7424, + "Z": 53760, + "Room": 2 + }, + { + "X": 38400, + "Y": -7424, + "Z": 53760, + "Room": 68, + "RoomType": "ReturnPath" + }, + { + "X": 41472, + "Y": -11008, + "Z": 53760, + "Room": 18 + }, + { + "X": 40448, + "Y": -8704, + "Z": 52736, + "Room": 13 + }, + { + "X": 40448, + "Y": -5376, + "Z": 62976, + "Room": 55 + }, + { + "X": 40448, + "Y": -4992, + "Z": 65024, + "Room": 56 + }, + { + "X": 41472, + "Y": -2816, + "Z": 64000, + "Room": 44 + }, + { + "X": 40448, + "Y": -2816, + "Z": 65024, + "Room": 61 + }, + { + "X": 40448, + "Y": -2816, + "Z": 66048, + "Room": 65 + }, + { + "X": 39424, + "Y": 128, + "Z": 66048, + "Room": 62 + }, + { + "X": 43520, + "Y": 2048, + "Z": 66048, + "Room": 27 + }, + { + "X": 43520, + "Y": 2048, + "Z": 69120, + "Room": 26 + }, + { + "X": 46592, + "Y": 1024, + "Z": 68096, + "Room": 28 + }, + { + "X": 46592, + "Y": 1024, + "Z": 66048, + "Room": 23 + }, + { + "X": 45568, + "Y": 1024, + "Z": 66048, + "Room": 29 + }, + { + "X": 46592, + "Y": -256, + "Z": 66048, + "Room": 37 + }, + { + "X": 45568, + "Y": 1024, + "Z": 68096, + "Room": 30 + }, + { + "X": 45568, + "Y": -3072, + "Z": 67072, + "Room": 36 + }, + { + "X": 45568, + "Y": -2816, + "Z": 65024, + "Room": 66 + }, + { + "X": 51712, + "Y": 7168, + "Z": 61952, + "Room": 60 + }, + { + "X": 47616, + "Y": 5632, + "Z": 59904, + "Room": 58 + }, + { + "X": 44544, + "Y": 5632, + "Z": 57856, + "Room": 41 + }, + { + "X": 44544, + "Y": 5632, + "Z": 59904, + "Room": 43 + }, + { + "X": 48640, + "Y": 2304, + "Z": 64000, + "Room": 33 + }, + { + "X": 48640, + "Y": 2304, + "Z": 65024, + "Room": 15 + }, + { + "X": 48640, + "Y": 2304, + "Z": 66048, + "Room": 14 + }, + { + "X": 46592, + "Y": 1280, + "Z": 65024, + "Room": 17 + }, + { + "X": 44544, + "Y": 5632, + "Z": 55040, + "Room": 38, + "KeyItemsHigh": "29220" + }, + { + "X": 44544, + "Y": 5632, + "Z": 54784, + "Room": 38, + "KeyItemsHigh": "29220", + "RequiresReturnPath": true + }, + { + "X": 44544, + "Y": 5632, + "Z": 54528, + "Room": 38, + "KeyItemsHigh": "29220", + "Range": "Medium" + }, + { + "X": 44288, + "Y": 5632, + "Z": 54528, + "Room": 38, + "KeyItemsHigh": "29220", + "Range": "Medium", + "RequiresReturnPath": true + }, + { + "X": 44288, + "Y": 5632, + "Z": 54784, + "Room": 38, + "KeyItemsHigh": "29220", + "Range": "Large" + }, + { + "X": 44288, + "Y": 5632, + "Z": 55040, + "Room": 38, + "KeyItemsHigh": "29220", + "Range": "Large", + "RequiresReturnPath": true + }, + { + "X": 42496, + "Y": 8960, + "Z": 54784, + "Room": 5 + }, + { + "X": 38400, + "Y": 5632, + "Z": 38400, + "Room": 19 + }, + { + "X": 35328, + "Y": 1536, + "Z": 39424, + "Room": 6 + }, + { + "X": 32256, + "Y": 1536, + "Z": 39424, + "Room": 21 + } + ] } \ No newline at end of file From 0d121a5146bec55bb2c89ca69559d0616fbf64f5 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:16:51 +0000 Subject: [PATCH 12/17] Remove legacy data/classes All previous zoning/manual location files removed. Redundant classes removed, and redundant properties removed from Location. --- .../Helpers/LevelPickupZoneDescriptor.cs | 14 - TRRandomizerCore/Helpers/Location.cs | 2 - TRRandomizerCore/Helpers/Sphere.cs | 27 - .../TR1/Locations/item_locations.json | 2731 --------- .../Resources/TR2/Zones/BOAT.TR2-Zones.json | 17 - .../TR2/Zones/CATACOMB.TR2-Zones.json | 19 - .../Resources/TR2/Zones/DECK.TR2-Zones.json | 19 - .../TR2/Zones/EMPRTOMB.TR2-Zones.json | 21 - .../TR2/Zones/FLOATING.TR2-Zones.json | 18 - .../Resources/TR2/Zones/HOUSE.TR2-Zones.json | 16 - .../TR2/Zones/ICECAVE.TR2-Zones.json | 20 - .../Resources/TR2/Zones/KEEL.TR2-Zones.json | 23 - .../Resources/TR2/Zones/LIVING.TR2-Zones.json | 17 - .../TR2/Zones/MONASTRY.TR2-Zones.json | 21 - .../Resources/TR2/Zones/OPERA.TR2-Zones.json | 21 - .../TR2/Zones/PLATFORM.TR2-Zones.json | 22 - .../Resources/TR2/Zones/RIG.TR2-Zones.json | 19 - .../Resources/TR2/Zones/SKIDOO.TR2-Zones.json | 17 - .../TR2/Zones/UNWATER.TR2-Zones.json | 18 - .../Resources/TR2/Zones/VENICE.TR2-Zones.json | 19 - .../Resources/TR2/Zones/WALL.TR2-Zones.json | 23 - .../Resources/TR2/Zones/XIAN.TR2-Zones.json | 18 - .../Resources/TR3/Locations/Zones.json | 446 -- .../TR3/Locations/item_locations.json | 5121 ----------------- .../Utilities/SpatialConverters.cs | 28 - TRRandomizerCore/Zones/LevelZones.cs | 27 - .../Zones/ZonedLocationCollection.cs | 289 - 27 files changed, 9033 deletions(-) delete mode 100644 TRRandomizerCore/Helpers/LevelPickupZoneDescriptor.cs delete mode 100644 TRRandomizerCore/Helpers/Sphere.cs delete mode 100644 TRRandomizerCore/Resources/TR1/Locations/item_locations.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/BOAT.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/CATACOMB.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/DECK.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/EMPRTOMB.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/FLOATING.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/HOUSE.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/ICECAVE.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/KEEL.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/LIVING.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/MONASTRY.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/OPERA.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/PLATFORM.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/RIG.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/SKIDOO.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/UNWATER.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/VENICE.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/WALL.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR2/Zones/XIAN.TR2-Zones.json delete mode 100644 TRRandomizerCore/Resources/TR3/Locations/Zones.json delete mode 100644 TRRandomizerCore/Resources/TR3/Locations/item_locations.json delete mode 100644 TRRandomizerCore/Utilities/SpatialConverters.cs delete mode 100644 TRRandomizerCore/Zones/LevelZones.cs delete mode 100644 TRRandomizerCore/Zones/ZonedLocationCollection.cs diff --git a/TRRandomizerCore/Helpers/LevelPickupZoneDescriptor.cs b/TRRandomizerCore/Helpers/LevelPickupZoneDescriptor.cs deleted file mode 100644 index a1631c438..000000000 --- a/TRRandomizerCore/Helpers/LevelPickupZoneDescriptor.cs +++ /dev/null @@ -1,14 +0,0 @@ -using TRLevelControl.Model; - -namespace TRRandomizerCore.Helpers; - -public class LevelPickupZoneDescriptor -{ - //Key items can be used to place secret artefacts (in games such as TR3) - - //so this will hold a list of actual key item entities to randomize to avoid secrets being randomized. - public List AliasedExpectedKeyItems { get; set; } - public List BaseExpectedKeyItems { get; set; } - - //Per each entity - what rooms that entity is allowed to be placed in (Zones). - public Dictionary> AllowedRooms { get; set; } -} diff --git a/TRRandomizerCore/Helpers/Location.cs b/TRRandomizerCore/Helpers/Location.cs index 7e5a931a8..08e9c5d49 100644 --- a/TRRandomizerCore/Helpers/Location.cs +++ b/TRRandomizerCore/Helpers/Location.cs @@ -13,13 +13,11 @@ public class Location public int Room { get; set; } public bool RequiresGlitch { get; set; } public Difficulty Difficulty { get; set; } - public bool IsInRoomSpace { get; set; } public ItemRange Range { get; set; } public RoomType RoomType { get; set; } public bool VehicleRequired { get; set; } public bool RequiresDamage { get; set; } public bool InvalidatesRoom { get; set; } - public int KeyItemGroupID { get; set; } public bool RequiresReturnPath { get; set; } public LevelState LevelState { get; set; } diff --git a/TRRandomizerCore/Helpers/Sphere.cs b/TRRandomizerCore/Helpers/Sphere.cs deleted file mode 100644 index d557833da..000000000 --- a/TRRandomizerCore/Helpers/Sphere.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Numerics; - -namespace TRRandomizerCore.Helpers; - -public class Sphere -{ - public Vector3 Centre { get; set; } - - public float Radius { get; set; } - - public Sphere(Vector3 centre, float radius) - { - Centre = centre; - Radius = radius; - } - - public bool IsColliding(Sphere other) - { - Vector3 distance = Centre - other.Centre; - - float length = (float)Math.Sqrt((distance.X * distance.X) + (distance.Y * distance.Y) + (distance.Z * distance.Z)); - - float sumRadius = Radius + other.Radius; - - return (length < sumRadius); - } -} diff --git a/TRRandomizerCore/Resources/TR1/Locations/item_locations.json b/TRRandomizerCore/Resources/TR1/Locations/item_locations.json deleted file mode 100644 index b007a8205..000000000 --- a/TRRandomizerCore/Resources/TR1/Locations/item_locations.json +++ /dev/null @@ -1,2731 +0,0 @@ -{ - "LEVEL2.PHD": [ - { - "X": 76288, - "Y": -1280, - "Z": 25088, - "Room": 13, - "KeyItemGroupID": 11124 - }, - { - "X": 75264, - "Y": -1024, - "Z": 18944, - "Room": 13, - "KeyItemGroupID": 11124 - }, - { - "X": 67072, - "Y": 0, - "Z": 18944, - "Room": 20, - "KeyItemGroupID": 11124 - }, - { - "X": 54784, - "Y": 0, - "Z": 25088, - "Room": 34, - "KeyItemGroupID": 11124 - }, - { - "X": 59904, - "Y": -1280, - "Z": 25088, - "Room": 1, - "KeyItemGroupID": 11124 - }, - { - "X": 80384, - "Y": -1152, - "Z": 41472, - "Room": 11, - "KeyItemGroupID": 11124 - }, - { - "X": 69120, - "Y": 5120, - "Z": 42496, - "Room": 22, - "KeyItemGroupID": 11124 - }, - { - "X": 32256, - "Y": -1024, - "Z": 26112, - "Room": 36, - "KeyItemGroupID": 11124 - }, - { - "X": 31232, - "Y": -7936, - "Z": 36352, - "Room": 67, - "KeyItemGroupID": 11124 - }, - { - "X": 28160, - "Y": 256, - "Z": 24064, - "Room": 48, - "KeyItemGroupID": 11124 - }, - { - "X": 18944, - "Y": -768, - "Z": 31232, - "Room": 71, - "KeyItemGroupID": 11124 - }, - { - "X": 16896, - "Y": -3072, - "Z": 20992, - "Room": 79, - "KeyItemGroupID": 11124 - }, - { - "X": 11776, - "Y": -2816, - "Z": 24064, - "Room": 76, - "KeyItemGroupID": 11124 - }, - { - "X": 15872, - "Y": 1536, - "Z": 33280, - "Room": 86, - "KeyItemGroupID": 11124 - }, - { - "X": 12800, - "Y": -1024, - "Z": 33280, - "Room": 73, - "KeyItemGroupID": 11124 - }, - { - "X": 44544, - "Y": -384, - "Z": 31232, - "Room": 37, - "KeyItemGroupID": 11124 - }, - { - "X": 39424, - "Y": -896, - "Z": 23040, - "Room": 36, - "KeyItemGroupID": 11124 - }, - { - "X": 80384, - "Y": -1792, - "Z": 15872, - "Room": 13, - "KeyItemGroupID": 11143 - }, - { - "X": 58880, - "Y": 0, - "Z": 36352, - "Room": 9, - "KeyItemGroupID": 11143 - }, - { - "X": 69120, - "Y": -1024, - "Z": 19968, - "Room": 21, - "KeyItemGroupID": 11143 - }, - { - "X": 79360, - "Y": -1280, - "Z": 25088, - "Room": 13, - "KeyItemGroupID": 11143 - }, - { - "X": 78336, - "Y": -1536, - "Z": 33280, - "Room": 33, - "KeyItemGroupID": 11143 - }, - { - "X": 65024, - "Y": 0, - "Z": 44544, - "Room": 6, - "KeyItemGroupID": 11143 - }, - { - "X": 83456, - "Y": 2816, - "Z": 25088, - "Room": 26, - "KeyItemGroupID": 11143 - }, - { - "X": 60928, - "Y": 0, - "Z": 39424, - "Room": 16, - "KeyItemGroupID": 11143 - }, - { - "X": 65024, - "Y": -2048, - "Z": 19968, - "Room": 2, - "KeyItemGroupID": 11143 - }, - { - "X": 55808, - "Y": 0, - "Z": 43520, - "Room": 5, - "KeyItemGroupID": 11143 - } - ], - "LEVEL3A.PHD": [ - { - "X": 39424, - "Y": 4864, - "Z": 70144, - "Room": 24, - "KeyItemGroupID": 12150 - }, - { - "X": 37376, - "Y": 4736, - "Z": 54784, - "Room": 29, - "KeyItemGroupID": 12150 - }, - { - "X": 39424, - "Y": -768, - "Z": 84480, - "Room": 3, - "KeyItemGroupID": 12150 - }, - { - "X": 31232, - "Y": -2560, - "Z": 89600, - "Room": 8, - "KeyItemGroupID": 12150 - }, - { - "X": 33280, - "Y": -3072, - "Z": 94720, - "Room": 5, - "KeyItemGroupID": 12150 - }, - { - "X": 30208, - "Y": 6912, - "Z": 38400, - "Room": 28, - "KeyItemGroupID": 12150 - }, - { - "X": 34304, - "Y": 2304, - "Z": 32256, - "Room": 51, - "KeyItemGroupID": 12150 - }, - { - "X": 44544, - "Y": -512, - "Z": 20992, - "Room": 57, - "KeyItemGroupID": 12150 - }, - { - "X": 29184, - "Y": 3328, - "Z": 10752, - "Room": 41, - "KeyItemGroupID": 12150 - }, - { - "X": 28160, - "Y": 0, - "Z": 3584, - "Room": 40, - "KeyItemGroupID": 12150 - }, - { - "X": 52736, - "Y": 3584, - "Z": 5632, - "Room": 61, - "KeyItemGroupID": 12150 - }, - { - "X": 33280, - "Y": 768, - "Z": 70144, - "Room": 24, - "KeyItemGroupID": 12158 - }, - { - "X": 33280, - "Y": -3072, - "Z": 91648, - "Room": 5, - "KeyItemGroupID": 12158 - }, - { - "X": 40448, - "Y": 4608, - "Z": 69120, - "Room": 24, - "KeyItemGroupID": 12158 - }, - { - "X": 49664, - "Y": 3328, - "Z": 34304, - "Room": 51, - "KeyItemGroupID": 12158 - }, - { - "X": 53760, - "Y": 1280, - "Z": 22016, - "Room": 43, - "KeyItemGroupID": 12158 - }, - { - "X": 67072, - "Y": -2560, - "Z": 11776, - "Room": 66, - "KeyItemGroupID": 12158 - }, - { - "X": 76288, - "Y": 2304, - "Z": 14848, - "Room": 44, - "KeyItemGroupID": 12158 - }, - { - "X": 68096, - "Y": 1792, - "Z": 14848, - "Room": 63, - "KeyItemGroupID": 12158 - }, - { - "X": 66048, - "Y": 2816, - "Z": 8704, - "Room": 62, - "KeyItemGroupID": 12158 - }, - { - "X": 57856, - "Y": 3584, - "Z": 17920, - "Room": 33, - "KeyItemGroupID": 12158 - }, - { - "X": 49664, - "Y": 2048, - "Z": 2560, - "Room": 59, - "KeyItemGroupID": 12168 - }, - { - "X": 35328, - "Y": 1792, - "Z": 3584, - "Room": 31, - "KeyItemGroupID": 12168 - }, - { - "X": 40448, - "Y": -512, - "Z": 1536, - "Room": 89, - "KeyItemGroupID": 12168 - }, - { - "X": 48640, - "Y": 3584, - "Z": 24064, - "Room": 57, - "KeyItemGroupID": 12168 - }, - { - "X": 39424, - "Y": 1792, - "Z": 43520, - "Room": 30, - "KeyItemGroupID": 12168 - }, - { - "X": 43520, - "Y": -1024, - "Z": 86528, - "Room": 11, - "KeyItemGroupID": 12168 - }, - { - "X": 33280, - "Y": -256, - "Z": 76288, - "Room": 1, - "KeyItemGroupID": 12168 - }, - { - "X": 32256, - "Y": 6528, - "Z": 43520, - "Room": 16, - "KeyItemGroupID": 12168 - }, - { - "X": 27136, - "Y": 2560, - "Z": 18944, - "Room": 37, - "KeyItemGroupID": 12168 - }, - { - "X": 52736, - "Y": 3584, - "Z": 12800, - "Room": 33, - "KeyItemGroupID": 12168 - } - ], - "LEVEL4.PHD": [ - { - "X": 33280, - "Y": 11008, - "Z": 41472, - "Room": 41, - "KeyItemGroupID": 14177 - }, - { - "X": 41472, - "Y": 11776, - "Z": 45568, - "Room": 18, - "KeyItemGroupID": 14177 - }, - { - "X": 20992, - "Y": 19968, - "Z": 47616, - "Room": 38, - "KeyItemGroupID": 14177 - }, - { - "X": 36352, - "Y": 20224, - "Z": 36352, - "Room": 3, - "KeyItemGroupID": 14177 - }, - { - "X": 49664, - "Y": 16128, - "Z": 43520, - "Room": 47, - "KeyItemGroupID": 14177 - }, - { - "X": 41472, - "Y": 11264, - "Z": 52736, - "Room": 35, - "KeyItemGroupID": 14177 - }, - { - "X": 40448, - "Y": 23552, - "Z": 41472, - "Room": 42, - "KeyItemGroupID": 14177 - }, - { - "X": 54784, - "Y": 19456, - "Z": 45568, - "Room": 25, - "KeyItemGroupID": 14177 - }, - { - "X": 61952, - "Y": 14848, - "Z": 43520, - "Room": 16, - "KeyItemGroupID": 14177 - }, - { - "X": 18944, - "Y": 17152, - "Z": 44544, - "Room": 39, - "KeyItemGroupID": 14177 - }, - { - "X": 54784, - "Y": 19456, - "Z": 37376, - "Room": 25, - "KeyItemGroupID": 14176 - }, - { - "X": 43520, - "Y": 17664, - "Z": 36352, - "Room": 23, - "KeyItemGroupID": 14176 - }, - { - "X": 33280, - "Y": 19968, - "Z": 45568, - "Room": 19, - "KeyItemGroupID": 14176 - }, - { - "X": 35328, - "Y": 11520, - "Z": 43520, - "Room": 18, - "KeyItemGroupID": 14176 - }, - { - "X": 35328, - "Y": 13568, - "Z": 42496, - "Room": 20, - "KeyItemGroupID": 14176 - }, - { - "X": 36352, - "Y": 28928, - "Z": 52736, - "Room": 53, - "KeyItemGroupID": 14176 - }, - { - "X": 36352, - "Y": 11520, - "Z": 49664, - "Room": 4, - "KeyItemGroupID": 14176 - }, - { - "X": 34304, - "Y": 23296, - "Z": 36352, - "Room": 42, - "KeyItemGroupID": 14176 - }, - { - "X": 39424, - "Y": 18176, - "Z": 42496, - "Room": 23, - "KeyItemGroupID": 14176 - }, - { - "X": 35328, - "Y": 16384, - "Z": 43520, - "Room": 21, - "KeyItemGroupID": 14176 - }, - { - "X": 31232, - "Y": 23296, - "Z": 45568, - "Room": 42, - "KeyItemGroupID": 14169 - }, - { - "X": 40448, - "Y": 20224, - "Z": 41472, - "Room": 3, - "KeyItemGroupID": 14169 - }, - { - "X": 40448, - "Y": 16384, - "Z": 45568, - "Room": 21, - "KeyItemGroupID": 14169 - }, - { - "X": 43520, - "Y": 13824, - "Z": 40448, - "Room": 20, - "KeyItemGroupID": 14169 - }, - { - "X": 50688, - "Y": 14080, - "Z": 41472, - "Room": 47, - "KeyItemGroupID": 14169 - }, - { - "X": 35328, - "Y": 12544, - "Z": 36352, - "Room": 20, - "KeyItemGroupID": 14169 - }, - { - "X": 38400, - "Y": 16128, - "Z": 36352, - "Room": 21, - "KeyItemGroupID": 14169 - }, - { - "X": 35328, - "Y": 16384, - "Z": 41472, - "Room": 21, - "KeyItemGroupID": 14169 - }, - { - "X": 35328, - "Y": 18432, - "Z": 45568, - "Room": 23, - "KeyItemGroupID": 14169 - }, - { - "X": 43520, - "Y": 22016, - "Z": 36352, - "Room": 42, - "KeyItemGroupID": 14169 - }, - { - "X": 36352, - "Y": 11264, - "Z": 52736, - "Room": 35, - "KeyItemGroupID": 14162 - }, - { - "X": 48640, - "Y": 15616, - "Z": 41472, - "Room": 48, - "KeyItemGroupID": 14162 - }, - { - "X": 35328, - "Y": 18432, - "Z": 37376, - "Room": 23, - "KeyItemGroupID": 14162 - }, - { - "X": 35328, - "Y": 20224, - "Z": 43520, - "Room": 3, - "KeyItemGroupID": 14162 - }, - { - "X": 31232, - "Y": 23296, - "Z": 36352, - "Room": 42, - "KeyItemGroupID": 14162 - }, - { - "X": 39424, - "Y": 16128, - "Z": 40448, - "Room": 21, - "KeyItemGroupID": 14162 - }, - { - "X": 60928, - "Y": 17152, - "Z": 37376, - "Room": 43, - "KeyItemGroupID": 14162 - }, - { - "X": 40448, - "Y": 18176, - "Z": 39424, - "Room": 23, - "KeyItemGroupID": 14162 - }, - { - "X": 33280, - "Y": 12032, - "Z": 37376, - "Room": 41, - "KeyItemGroupID": 14162 - }, - { - "X": 39424, - "Y": 11520, - "Z": 36352, - "Room": 18, - "KeyItemGroupID": 14162 - } - ], - "LEVEL5.PHD": [ - { - "X": 55808, - "Y": -4608, - "Z": 45568, - "Room": 76, - "KeyItemGroupID": 15183 - }, - { - "X": 58880, - "Y": -8192, - "Z": 74240, - "Room": 44, - "KeyItemGroupID": 15183 - }, - { - "X": 44544, - "Y": -4096, - "Z": 60928, - "Room": 19, - "KeyItemGroupID": 15183 - }, - { - "X": 22016, - "Y": -2304, - "Z": 48640, - "Room": 57, - "KeyItemGroupID": 15183 - }, - { - "X": 31232, - "Y": 1280, - "Z": 50688, - "Room": 22 - }, - { - "X": 33280, - "Y": 1280, - "Z": 50688, - "Room": 36 - }, - { - "X": 58880, - "Y": -7680, - "Z": 23040, - "Room": 49, - "KeyItemGroupID": 15183 - }, - { - "X": 53760, - "Y": -6144, - "Z": 30208, - "Room": 77, - "KeyItemGroupID": 15183 - }, - { - "X": 43520, - "Y": 1792, - "Z": 60928, - "Room": 29, - "KeyItemGroupID": 15183 - }, - { - "X": 44544, - "Y": -5120, - "Z": 31232, - "Room": 77, - "KeyItemGroupID": 15183 - }, - { - "X": 48640, - "Y": -6144, - "Z": 66048, - "Room": 70, - "KeyItemGroupID": 15183 - } - ], - "LEVEL6.PHD": [ - { - "X": 87552, - "Y": -4096, - "Z": 40448, - "Room": 78, - "KeyItemGroupID": 16133 - }, - { - "X": 78336, - "Y": -3328, - "Z": 34304, - "Room": 6, - "KeyItemGroupID": 16133 - }, - { - "X": 73216, - "Y": -2304, - "Z": 41472, - "Room": 5, - "KeyItemGroupID": 16133 - }, - { - "X": 66048, - "Y": -2816, - "Z": 41472, - "Room": 3, - "KeyItemGroupID": 16133 - }, - { - "X": 80384, - "Y": -4864, - "Z": 32256, - "Room": 8, - "KeyItemGroupID": 16133 - }, - { - "X": 62976, - "Y": -4352, - "Z": 34304, - "Room": 16, - "KeyItemGroupID": 16133 - }, - { - "X": 54784, - "Y": -4608, - "Z": 46592, - "Room": 56, - "KeyItemGroupID": 16133 - }, - { - "X": 55808, - "Y": -15104, - "Z": 62976, - "Room": 60, - "KeyItemGroupID": 16133 - }, - { - "X": 49664, - "Y": -6400, - "Z": 61952, - "Room": 45, - "KeyItemGroupID": 16133 - }, - { - "X": 28160, - "Y": -6400, - "Z": 70144, - "Room": 31, - "KeyItemGroupID": 16133 - }, - { - "X": 32256, - "Y": -9728, - "Z": 62976, - "Room": 46, - "KeyItemGroupID": 16133 - }, - { - "X": 54784, - "Y": -8192, - "Z": 61952, - "Room": 58, - "KeyItemGroupID": 16133 - }, - { - "X": 29184, - "Y": -8448, - "Z": 47616, - "Room": 54, - "KeyItemGroupID": 16133 - }, - { - "X": 24064, - "Y": -4608, - "Z": 20992, - "Room": 20, - "KeyItemGroupID": 16133 - }, - { - "X": 32256, - "Y": -6400, - "Z": 61952, - "Room": 31, - "KeyItemGroupID": 16133 - }, - { - "X": 24064, - "Y": -4352, - "Z": 64000, - "Room": 23, - "KeyItemGroupID": 16149 - }, - { - "X": 22016, - "Y": -256, - "Z": 53760, - "Room": 24, - "KeyItemGroupID": 16149 - }, - { - "X": 19968, - "Y": -4352, - "Z": 49664, - "Room": 34, - "KeyItemGroupID": 16149 - }, - { - "X": 17920, - "Y": -4608, - "Z": 42496, - "Room": 33, - "KeyItemGroupID": 16149 - }, - { - "X": 23040, - "Y": -7424, - "Z": 30208, - "Room": 40, - "KeyItemGroupID": 16149 - }, - { - "X": 43520, - "Y": -2048, - "Z": 50688, - "Room": 43, - "KeyItemGroupID": 16149 - }, - { - "X": 36352, - "Y": -2048, - "Z": 65024, - "Room": 44, - "KeyItemGroupID": 16149 - }, - { - "X": 34304, - "Y": -6400, - "Z": 64000, - "Room": 45, - "KeyItemGroupID": 16149 - }, - { - "X": 22016, - "Y": -4352, - "Z": 31232, - "Room": 39, - "KeyItemGroupID": 16149 - }, - { - "X": 41472, - "Y": -4352, - "Z": 47616, - "Room": 62, - "KeyItemGroupID": 16149 - }, - { - "X": 38400, - "Y": -2560, - "Z": 49664, - "Room": 64, - "KeyItemGroupID": 16149 - }, - { - "X": 35328, - "Y": -2560, - "Z": 48640, - "Room": 64, - "KeyItemGroupID": 16149 - }, - { - "X": 16896, - "Y": -7424, - "Z": 38400, - "Room": 36, - "KeyItemGroupID": 16149 - }, - { - "X": 60928, - "Y": -768, - "Z": 49664, - "Room": 69, - "KeyItemGroupID": 16149 - }, - { - "X": 78336, - "Y": 0, - "Z": 51712, - "Room": 73, - "KeyItemGroupID": 16149 - }, - { - "X": 41472, - "Y": -6400, - "Z": 35328, - "Room": 41, - "KeyItemGroupID": 16154 - }, - { - "X": 41472, - "Y": -2816, - "Z": 35328, - "Room": 13, - "KeyItemGroupID": 16154 - }, - { - "X": 64000, - "Y": -2304, - "Z": 35328, - "Room": 3, - "KeyItemGroupID": 16154 - }, - { - "X": 34304, - "Y": -4352, - "Z": 35328, - "Room": 27, - "KeyItemGroupID": 16154 - }, - { - "X": 25088, - "Y": -7424, - "Z": 33280, - "Room": 40, - "KeyItemGroupID": 16154 - }, - { - "X": 29184, - "Y": -7424, - "Z": 49664, - "Room": 38, - "KeyItemGroupID": 16154 - }, - { - "X": 48640, - "Y": 0, - "Z": 41472, - "Room": 10, - "KeyItemGroupID": 16154 - }, - { - "X": 32256, - "Y": -11008, - "Z": 71168, - "Room": 49, - "KeyItemGroupID": 16154 - }, - { - "X": 40448, - "Y": -4608, - "Z": 43520, - "Room": 13, - "KeyItemGroupID": 16154 - }, - { - "X": 38400, - "Y": -4352, - "Z": 44544, - "Room": 25, - "KeyItemGroupID": 16154 - }, - { - "X": 50688, - "Y": -6400, - "Z": 57856, - "Room": 45, - "KeyItemGroupID": 16154 - }, - { - "X": 48640, - "Y": -2048, - "Z": 61952, - "Room": 44, - "KeyItemGroupID": 16154 - }, - { - "X": 50688, - "Y": -2048, - "Z": 65024, - "Room": 44, - "KeyItemGroupID": 16154 - }, - { - "X": 33280, - "Y": -4352, - "Z": 39424, - "Room": 27, - "KeyItemGroupID": 16154 - }, - { - "X": 23040, - "Y": -6400, - "Z": 47616, - "Room": 29, - "EntityIndex": 16154 - } - ], - "LEVEL7A.PHD": [ - { - "X": 27136, - "Y": -3584, - "Z": 67072, - "Room": 18, - "KeyItemGroupID": 17151 - }, - { - "X": 24064, - "Y": -6656, - "Z": 54784, - "Room": 9, - "KeyItemGroupID": 17151 - }, - { - "X": 23040, - "Y": -10240, - "Z": 54784, - "Room": 3, - "KeyItemGroupID": 17151 - }, - { - "X": 29184, - "Y": -8448, - "Z": 65024, - "Room": 22, - "KeyItemGroupID": 17151 - }, - { - "X": 33280, - "Y": -3840, - "Z": 48640, - "Room": 94, - "KeyItemGroupID": 17151 - }, - { - "X": 42496, - "Y": -5376, - "Z": 49664, - "Room": 84, - "KeyItemGroupID": 17151 - }, - { - "X": 39424, - "Y": 0, - "Z": 64000, - "Room": 110, - "KeyItemGroupID": 17151 - }, - { - "X": 35328, - "Y": -1024, - "Z": 59904, - "Room": 111, - "KeyItemGroupID": 17151 - }, - { - "X": 33280, - "Y": 0, - "Z": 53760, - "Room": 111, - "KeyItemGroupID": 17151 - }, - { - "X": 45568, - "Y": -3328, - "Z": 48640, - "Room": 95, - "KeyItemGroupID": 17151 - }, - { - "X": 64000, - "Y": -4864, - "Z": 54784, - "Room": 30, - "KeyItemGroupID": 17170 - }, - { - "X": 62976, - "Y": -3584, - "Z": 54784, - "Room": 31, - "KeyItemGroupID": 17170 - }, - { - "X": 59904, - "Y": -1280, - "Z": 59904, - "Room": 34, - "KeyItemGroupID": 17170 - }, - { - "X": 58880, - "Y": -3584, - "Z": 53760, - "Room": 31, - "KeyItemGroupID": 17170 - }, - { - "X": 56832, - "Y": -4608, - "Z": 47616, - "Room": 36, - "KeyItemGroupID": 17170 - }, - { - "X": 48640, - "Y": -4096, - "Z": 39424, - "Room": 39, - "KeyItemGroupID": 17170 - }, - { - "X": 51712, - "Y": -5376, - "Z": 39424, - "Room": 38, - "KeyItemGroupID": 17170 - }, - { - "X": 48640, - "Y": -1024, - "Z": 43520, - "Room": 40, - "KeyItemGroupID": 17170 - }, - { - "X": 56832, - "Y": -1024, - "Z": 43520, - "Room": 41, - "KeyItemGroupID": 17170 - }, - { - "X": 62976, - "Y": -7936, - "Z": 56832, - "Room": 27, - "KeyItemGroupID": 17170 - }, - { - "X": 47616, - "Y": -256, - "Z": 43520, - "Room": 46, - "KeyItemGroupID": 17179 - }, - { - "X": 45568, - "Y": 1280, - "Z": 49664, - "Room": 50, - "KeyItemGroupID": 17179 - }, - { - "X": 40448, - "Y": -4352, - "Z": 52736, - "Room": 95, - "KeyItemGroupID": 17179 - }, - { - "X": 38400, - "Y": -5376, - "Z": 49664, - "Room": 8, - "KeyItemGroupID": 17179 - }, - { - "X": 50688, - "Y": 0, - "Z": 48640, - "Room": 103, - "KeyItemGroupID": 17179 - }, - { - "X": 50688, - "Y": 0, - "Z": 66048, - "Room": 106, - "KeyItemGroupID": 17179 - }, - { - "X": 34304, - "Y": -5632, - "Z": 54784, - "Room": 92, - "KeyItemGroupID": 17179 - }, - { - "X": 28160, - "Y": -8960, - "Z": 57856, - "Room": 10, - "KeyItemGroupID": 17179 - }, - { - "X": 46592, - "Y": -3584, - "Z": 44544, - "Room": 48, - "KeyItemGroupID": 17179 - }, - { - "X": 43520, - "Y": -3584, - "Z": 42496, - "Room": 48, - "KeyItemGroupID": 17179 - }, - { - "X": 51712, - "Y": 1024, - "Z": 56832, - "Room": 55, - "KeyItemGroupID": 17185 - }, - { - "X": 50688, - "Y": 0, - "Z": 55808, - "Room": 105, - "KeyItemGroupID": 17185 - }, - { - "X": 42496, - "Y": -6656, - "Z": 43520, - "Room": 14, - "KeyItemGroupID": 17185 - }, - { - "X": 38400, - "Y": -8448, - "Z": 36352, - "Room": 15, - "KeyItemGroupID": 17185 - }, - { - "X": 38400, - "Y": -6656, - "Z": 43520, - "Room": 14, - "KeyItemGroupID": 17185 - }, - { - "X": 33280, - "Y": -5632, - "Z": 66048, - "Room": 90, - "KeyItemGroupID": 17185 - }, - { - "X": 35328, - "Y": -3328, - "Z": 55808, - "Room": 102, - "KeyItemGroupID": 17185 - }, - { - "X": 40448, - "Y": 0, - "Z": 50688, - "Room": 104, - "KeyItemGroupID": 17185 - }, - { - "X": 47616, - "Y": -256, - "Z": 41472, - "Room": 46, - "KeyItemGroupID": 17185 - }, - { - "X": 45568, - "Y": 3072, - "Z": 61952, - "Room": 0, - "KeyItemGroupID": 17185 - }, - { - "X": 34304, - "Y": -5632, - "Z": 56832, - "Room": 92, - "KeyItemGroupID": 17222 - }, - { - "X": 33280, - "Y": -3328, - "Z": 55808, - "Room": 102, - "KeyItemGroupID": 17222 - }, - { - "X": 30208, - "Y": -5632, - "Z": 58880, - "Room": 23, - "KeyItemGroupID": 17222 - }, - { - "X": 23040, - "Y": -8960, - "Z": 60928, - "Room": 10, - "KeyItemGroupID": 17222 - }, - { - "X": 46592, - "Y": -3328, - "Z": 70144, - "Room": 7, - "KeyItemGroupID": 17222 - }, - { - "X": 49664, - "Y": 0, - "Z": 54784, - "Room": 105, - "KeyItemGroupID": 17222 - }, - { - "X": 40448, - "Y": 3072, - "Z": 54784, - "Room": 0, - "KeyItemGroupID": 17222 - }, - { - "X": 42496, - "Y": 1280, - "Z": 51712, - "Room": 51, - "KeyItemGroupID": 17222 - }, - { - "X": 50688, - "Y": -3328, - "Z": 55808, - "Room": 97, - "KeyItemGroupID": 17222 - }, - { - "X": 23040, - "Y": -7168, - "Z": 68096, - "Room": 20, - "KeyItemGroupID": 17222 - } - ], - "LEVEL7B.PHD": [ - { - "X": 54784, - "Y": -6400, - "Z": 73216, - "Room": 66, - "KeyItemGroupID": 18144 - }, - { - "X": 53760, - "Y": -3328, - "Z": 70144, - "Room": 72, - "KeyItemGroupID": 18144 - }, - { - "X": 45568, - "Y": 1536, - "Z": 79360, - "Room": 3, - "KeyItemGroupID": 18144 - }, - { - "X": 41472, - "Y": -256, - "Z": 76288, - "Room": 35, - "KeyItemGroupID": 18144 - }, - { - "X": 35328, - "Y": -1792, - "Z": 75264, - "Room": 44, - "KeyItemGroupID": 18144 - }, - { - "X": 39424, - "Y": -5376, - "Z": 81408, - "Room": 38, - "KeyItemGroupID": 18144 - }, - { - "X": 40448, - "Y": -256, - "Z": 80384, - "Room": 33, - "KeyItemGroupID": 18144 - }, - { - "X": 52736, - "Y": -1024, - "Z": 68096, - "Room": 76, - "KeyItemGroupID": 18144 - }, - { - "X": 49664, - "Y": -6400, - "Z": 73216, - "Room": 66, - "KeyItemGroupID": 18144 - }, - { - "X": 44544, - "Y": -5376, - "Z": 78336, - "Room": 14, - "KeyItemGroupID": 18144 - }, - { - "X": 43520, - "Y": -4480, - "Z": 58880, - "Room": 78, - "KeyItemGroupID": 18209 - }, - { - "X": 33280, - "Y": -3840, - "Z": 56832, - "Room": 74, - "KeyItemGroupID": 18209 - }, - { - "X": 52736, - "Y": -3584, - "Z": 67072, - "Room": 75, - "KeyItemGroupID": 18209 - }, - { - "X": 38400, - "Y": -4096, - "Z": 71168, - "Room": 82, - "KeyItemGroupID": 18209 - }, - { - "X": 32256, - "Y": -4096, - "Z": 71168, - "Room": 81, - "KeyItemGroupID": 18209 - }, - { - "X": 40448, - "Y": -1024, - "Z": 68096, - "Room": 76, - "KeyItemGroupID": 18209 - }, - { - "X": 33280, - "Y": -4480, - "Z": 57856, - "Room": 78, - "KeyItemGroupID": 18209 - }, - { - "X": 54784, - "Y": -3840, - "Z": 75264, - "Room": 70, - "KeyItemGroupID": 18209 - }, - { - "X": 51712, - "Y": -7936, - "Z": 78336, - "Room": 15, - "KeyItemGroupID": 18209 - }, - { - "X": 32256, - "Y": -4096, - "Z": 68096, - "Room": 77, - "KeyItemGroupID": 18209 - }, - { - "X": 32256, - "Y": -3840, - "Z": 58880, - "Room": 74, - "KeyItemGroupID": 18210 - }, - { - "X": 36352, - "Y": -4096, - "Z": 72192, - "Room": 82, - "KeyItemGroupID": 18210 - }, - { - "X": 34304, - "Y": -4096, - "Z": 72192, - "Room": 81, - "KeyItemGroupID": 18210 - }, - { - "X": 47616, - "Y": -1024, - "Z": 68096, - "Room": 76, - "KeyItemGroupID": 18210 - }, - { - "X": 52736, - "Y": -3584, - "Z": 69120, - "Room": 75, - "KeyItemGroupID": 18210 - }, - { - "X": 51712, - "Y": -3328, - "Z": 70144, - "Room": 72, - "KeyItemGroupID": 18210 - }, - { - "X": 52736, - "Y": -7936, - "Z": 80384, - "Room": 15, - "KeyItemGroupID": 18210 - }, - { - "X": 27136, - "Y": 3840, - "Z": 81408, - "Room": 90, - "KeyItemGroupID": 18239 - }, - { - "X": 27136, - "Y": 3840, - "Z": 75264, - "Room": 90, - "KeyItemGroupID": 18239 - }, - { - "X": 36352, - "Y": 3840, - "Z": 82432, - "Room": 110, - "KeyItemGroupID": 18239 - }, - { - "X": 35328, - "Y": 3584, - "Z": 91648, - "Room": 110, - "KeyItemGroupID": 18239 - }, - { - "X": 19968, - "Y": 3840, - "Z": 89600, - "Room": 97, - "KeyItemGroupID": 18239 - }, - { - "X": 31232, - "Y": 5632, - "Z": 77312, - "Room": 108, - "KeyItemGroupID": 18239 - }, - { - "X": 22016, - "Y": 3840, - "Z": 81408, - "Room": 90, - "KeyItemGroupID": 18239 - } - ], - "LEVEL8A.PHD": [ - { - "X": 33280, - "Y": -1024, - "Z": 26112, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 37376, - "Y": -512, - "Z": 26112, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 36352, - "Y": 0, - "Z": 30208, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 31232, - "Y": -512, - "Z": 34304, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 28160, - "Y": -512, - "Z": 37376, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 37376, - "Y": 0, - "Z": 36352, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 32256, - "Y": -3072, - "Z": 37376, - "Room": 13, - "KeyItemGroupID": 19143 - }, - { - "X": 24064, - "Y": -256, - "Z": 33280, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 34304, - "Y": 1536, - "Z": 29184, - "Room": 4, - "KeyItemGroupID": 19143 - }, - { - "X": 24064, - "Y": -512, - "Z": 35328, - "Room": 12, - "KeyItemGroupID": 19143 - }, - { - "X": 34304, - "Y": -5376, - "Z": 45568, - "Room": 51, - "KeyItemGroupID": 19162 - }, - { - "X": 45568, - "Y": 3840, - "Z": 37376, - "Room": 34, - "KeyItemGroupID": 19162 - }, - { - "X": 57856, - "Y": 7424, - "Z": 31232, - "Room": 55, - "KeyItemGroupID": 19162 - }, - { - "X": 55808, - "Y": 1024, - "Z": 25088, - "Room": 52, - "KeyItemGroupID": 19162 - }, - { - "X": 39424, - "Y": 0, - "Z": 46592, - "Room": 49, - "KeyItemGroupID": 19162 - } - ], - "LEVEL8B.PHD": [ - { - "X": 57856, - "Y": 3840, - "Z": 74240, - "Room": 70, - "KeyItemGroupID": 20199 - }, - { - "X": 61952, - "Y": -256, - "Z": 69120, - "Room": 72, - "KeyItemGroupID": 20199 - }, - { - "X": 69120, - "Y": -256, - "Z": 56832, - "Room": 68, - "KeyItemGroupID": 20199 - }, - { - "X": 68096, - "Y": 0, - "Z": 55808, - "Room": 68, - "KeyItemGroupID": 20199 - }, - { - "X": 53760, - "Y": 1536, - "Z": 41472, - "Room": 29, - "KeyItemGroupID": 20199 - }, - { - "X": 59904, - "Y": 4352, - "Z": 62976, - "Room": 74, - "KeyItemGroupID": 20199 - }, - { - "X": 60928, - "Y": -2048, - "Z": 60928, - "Room": 76, - "KeyItemGroupID": 20199 - }, - { - "X": 58880, - "Y": -3328, - "Z": 56832, - "Room": 57, - "KeyItemGroupID": 20126 - }, - { - "X": 53760, - "Y": -3072, - "Z": 55808, - "Room": 16, - "KeyItemGroupID": 20126 - }, - { - "X": 56832, - "Y": 0, - "Z": 59904, - "Room": 39, - "KeyItemGroupID": 20126 - }, - { - "X": 52736, - "Y": 2560, - "Z": 59904, - "Room": 56, - "KeyItemGroupID": 20126 - }, - { - "X": 47616, - "Y": 3328, - "Z": 67072, - "Room": 53, - "KeyItemGroupID": 20126 - }, - { - "X": 45568, - "Y": 3072, - "Z": 62976, - "Room": 51, - "KeyItemGroupID": 20126 - }, - { - "X": 43520, - "Y": -1024, - "Z": 60928, - "Room": 35, - "KeyItemGroupID": 20126 - }, - { - "X": 41472, - "Y": -3072, - "Z": 59904, - "Room": 31, - "KeyItemGroupID": 20126 - }, - { - "X": 37376, - "Y": -10240, - "Z": 65024, - "Room": 43, - "KeyItemGroupID": 20126 - }, - { - "X": 45568, - "Y": -8192, - "Z": 60928, - "Room": 42, - "KeyItemGroupID": 20126 - }, - { - "X": 44544, - "Y": -11264, - "Z": 55808, - "Room": 41, - "KeyItemGroupID": 20126 - }, - { - "X": 50688, - "Y": -3328, - "Z": 42496, - "Room": 81, - "KeyItemGroupID": 20126 - }, - { - "X": 53760, - "Y": -2816, - "Z": 60928, - "Room": 16, - "KeyItemGroupID": 20126 - }, - { - "X": 50688, - "Y": -5888, - "Z": 69120, - "Room": 47, - "KeyItemGroupID": 20126 - }, - { - "X": 37376, - "Y": -10496, - "Z": 58880, - "Room": 43, - "KeyItemGroupID": 20128 - }, - { - "X": 45568, - "Y": -3328, - "Z": 55808, - "Room": 16, - "KeyItemGroupID": 20128 - }, - { - "X": 48640, - "Y": 256, - "Z": 57856, - "Room": 36, - "KeyItemGroupID": 20128 - }, - { - "X": 52736, - "Y": -2816, - "Z": 60928, - "Room": 16, - "KeyItemGroupID": 20128 - }, - { - "X": 52736, - "Y": 1024, - "Z": 62976, - "Room": 52, - "KeyItemGroupID": 20128 - }, - { - "X": 69120, - "Y": 0, - "Z": 61952, - "Room": 75, - "KeyItemGroupID": 20128 - }, - { - "X": 71168, - "Y": -768, - "Z": 55808, - "Room": 68, - "KeyItemGroupID": 20128 - }, - { - "X": 59904, - "Y": 0, - "Z": 55808, - "Room": 39, - "KeyItemGroupID": 20128 - }, - { - "X": 50688, - "Y": 2560, - "Z": 54784, - "Room": 56, - "KeyItemGroupID": 20128 - }, - { - "X": 64000, - "Y": 0, - "Z": 59904, - "Room": 39, - "KeyItemGroupID": 20129 - }, - { - "X": 65024, - "Y": -3328, - "Z": 56832, - "Room": 57, - "KeyItemGroupID": 20129 - }, - { - "X": 64000, - "Y": -2816, - "Z": 50688, - "Room": 60, - "KeyItemGroupID": 20129 - }, - { - "X": 49664, - "Y": -3072, - "Z": 59904, - "Room": 16, - "KeyItemGroupID": 20129 - }, - { - "X": 42496, - "Y": -11008, - "Z": 56832, - "Room": 41, - "KeyItemGroupID": 20129 - }, - { - "X": 41472, - "Y": -9472, - "Z": 64000, - "Room": 43, - "KeyItemGroupID": 20129 - }, - { - "X": 32256, - "Y": 256, - "Z": 52736, - "Room": 48, - "KeyItemGroupID": 20129 - }, - { - "X": 41472, - "Y": -3072, - "Z": 53760, - "Room": 31, - "KeyItemGroupID": 20129 - }, - { - "X": 53760, - "Y": -4608, - "Z": 47616, - "Room": 45, - "KeyItemGroupID": 20129 - }, - { - "X": 68096, - "Y": 4352, - "Z": 62976, - "Room": 74, - "KeyItemGroupID": 20127 - }, - { - "X": 56832, - "Y": 0, - "Z": 54784, - "Room": 39, - "KeyItemGroupID": 20127 - }, - { - "X": 45568, - "Y": -5632, - "Z": 48640, - "Room": 79, - "KeyItemGroupID": 20127 - }, - { - "X": 45568, - "Y": 2560, - "Z": 49664, - "Room": 83, - "KeyItemGroupID": 20127 - }, - { - "X": 54784, - "Y": -5888, - "Z": 44544, - "Room": 80, - "KeyItemGroupID": 20127 - }, - { - "X": 46592, - "Y": -2816, - "Z": 52736, - "Room": 16, - "KeyItemGroupID": 20127 - }, - { - "X": 37376, - "Y": -10752, - "Z": 55808, - "Room": 41, - "KeyItemGroupID": 20127 - }, - { - "X": 44544, - "Y": -10496, - "Z": 60928, - "Room": 43, - "KeyItemGroupID": 20127 - }, - { - "X": 44544, - "Y": -8704, - "Z": 62976, - "Room": 43, - "KeyItemGroupID": 20127 - }, - { - "X": 45568, - "Y": -3072, - "Z": 65024, - "Room": 34, - "KeyItemGroupID": 20127 - }, - { - "X": 52736, - "Y": -4608, - "Z": 62976, - "Room": 34, - "KeyItemGroupID": 20127 - }, - { - "X": 61952, - "Y": -768, - "Z": 72192, - "Room": 72, - "KeyItemGroupID": 20127 - }, - { - "X": 64000, - "Y": -3328, - "Z": 52736, - "Room": 57, - "KeyItemGroupID": 20127 - }, - { - "X": 55808, - "Y": 0, - "Z": 46592, - "Room": 32, - "KeyItemGroupID": 20127 - }, - { - "X": 34304, - "Y": -5376, - "Z": 59904, - "Room": 38, - "KeyItemGroupID": 20127 - } - ], - "LEVEL8C.PHD": [ - { - "X": 30208, - "Y": -11520, - "Z": 54784, - "Room": 58, - "KeyItemGroupID": 21126 - }, - { - "X": 36352, - "Y": -7424, - "Z": 58880, - "Room": 10, - "KeyItemGroupID": 21126 - }, - { - "X": 43520, - "Y": -896, - "Z": 57856, - "Room": 7, - "KeyItemGroupID": 21126 - }, - { - "X": 53760, - "Y": -5120, - "Z": 58880, - "Room": 10, - "KeyItemGroupID": 21126 - }, - { - "X": 57856, - "Y": -8448, - "Z": 42496, - "Room": 9, - "KeyItemGroupID": 21126 - }, - { - "X": 52736, - "Y": -8448, - "Z": 34304, - "Room": 15, - "KeyItemGroupID": 21126 - }, - { - "X": 42496, - "Y": -6272, - "Z": 44544, - "Room": 1, - "KeyItemGroupID": 21126 - }, - { - "X": 38400, - "Y": -4352, - "Z": 47616, - "Room": 2, - "KeyItemGroupID": 21126 - }, - { - "X": 54784, - "Y": -768, - "Z": 40448, - "Room": 6, - "KeyItemGroupID": 21126 - }, - { - "X": 57856, - "Y": -8448, - "Z": 56832, - "Room": 9, - "KeyItemGroupID": 21126 - }, - { - "X": 32256, - "Y": -512, - "Z": 37376, - "Room": 38, - "KeyItemGroupID": 21148 - }, - { - "X": 37376, - "Y": 4352, - "Z": 32256, - "Room": 36, - "KeyItemGroupID": 21148 - }, - { - "X": 39424, - "Y": -896, - "Z": 41472, - "Room": 0, - "KeyItemGroupID": 21148 - }, - { - "X": 38400, - "Y": -6528, - "Z": 45568, - "Room": 1, - "KeyItemGroupID": 21148 - }, - { - "X": 43520, - "Y": -11904, - "Z": 47616, - "Room": 3, - "KeyItemGroupID": 21148 - }, - { - "X": 46592, - "Y": -1664, - "Z": 43520, - "Room": 0, - "KeyItemGroupID": 21148 - }, - { - "X": 57856, - "Y": -8704, - "Z": 49664, - "Room": 9, - "KeyItemGroupID": 21148 - }, - { - "X": 45568, - "Y": -8704, - "Z": 54784, - "Room": 3, - "KeyItemGroupID": 21148 - }, - { - "X": 23040, - "Y": -13824, - "Z": 55808, - "Room": 16, - "KeyItemGroupID": 21148 - }, - { - "X": 18944, - "Y": 0, - "Z": 50688, - "Room": 56, - "KeyItemGroupID": 21148 - }, - { - "X": 34304, - "Y": 4224, - "Z": 31232, - "Room": 36, - "KeyItemGroupID": 21150 - }, - { - "X": 39424, - "Y": 256, - "Z": 35328, - "Room": 35, - "KeyItemGroupID": 21150 - }, - { - "X": 38400, - "Y": -4352, - "Z": 49664, - "Room": 2, - "KeyItemGroupID": 21150 - }, - { - "X": 34304, - "Y": -8576, - "Z": 50688, - "Room": 12, - "KeyItemGroupID": 21150 - }, - { - "X": 50688, - "Y": -6144, - "Z": 34304, - "Room": 14, - "KeyItemGroupID": 21150 - }, - { - "X": 56832, - "Y": -5248, - "Z": 47616, - "Room": 8, - "KeyItemGroupID": 21150 - }, - { - "X": 45568, - "Y": -5248, - "Z": 58880, - "Room": 10, - "KeyItemGroupID": 21150 - }, - { - "X": 40448, - "Y": -5504, - "Z": 41472, - "Room": 1, - "KeyItemGroupID": 21150 - }, - { - "X": 44544, - "Y": -2944, - "Z": 34304, - "Room": 13, - "KeyItemGroupID": 21150 - }, - { - "X": 18944, - "Y": 0, - "Z": 46592, - "Room": 56, - "KeyItemGroupID": 21150 - }, - { - "X": 18944, - "Y": 7680, - "Z": 46592, - "Room": 52, - "KeyItemGroupID": 21155 - }, - { - "X": 18944, - "Y": 9984, - "Z": 52736, - "Room": 49, - "KeyItemGroupID": 21155 - }, - { - "X": 28160, - "Y": 8448, - "Z": 44544, - "Room": 22, - "KeyItemGroupID": 21155 - }, - { - "X": 33280, - "Y": 23552, - "Z": 41472, - "Room": 4, - "KeyItemGroupID": 21155 - }, - { - "X": 33280, - "Y": 23552, - "Z": 55808, - "Room": 4, - "KeyItemGroupID": 21155 - }, - { - "X": 42496, - "Y": 20352, - "Z": 52736, - "Room": 4, - "KeyItemGroupID": 21155 - }, - { - "X": 24064, - "Y": 18944, - "Z": 46592, - "Room": 26, - "KeyItemGroupID": 21155 - }, - { - "X": 23040, - "Y": 7680, - "Z": 45568, - "Room": 52, - "KeyItemGroupID": 21155 - }, - { - "X": 28160, - "Y": 17664, - "Z": 48640, - "Room": 5, - "KeyItemGroupID": 21155 - }, - { - "X": 41472, - "Y": 23552, - "Z": 44544, - "Room": 4, - "KeyItemGroupID": 21155 - } - ], - "LEVEL10A.PHD": [ - { - "X": 55808, - "Y": -3840, - "Z": 44544, - "Room": 13, - "KeyItemGroupID": 22127 - }, - { - "X": 49664, - "Y": -4352, - "Z": 40448, - "Room": 10, - "KeyItemGroupID": 22127 - }, - { - "X": 46592, - "Y": -3840, - "Z": 50688, - "Room": 40, - "KeyItemGroupID": 22127 - }, - { - "X": 44544, - "Y": -6400, - "Z": 29184, - "Room": 3, - "KeyItemGroupID": 22127 - }, - { - "X": 38400, - "Y": -5632, - "Z": 23040, - "Room": 11, - "KeyItemGroupID": 22127 - }, - { - "X": 50688, - "Y": -1536, - "Z": 28160, - "Room": 4, - "KeyItemGroupID": 22127 - }, - { - "X": 52736, - "Y": -9216, - "Z": 30208, - "Room": 7, - "KeyItemGroupID": 22127 - }, - { - "X": 70144, - "Y": -8448, - "Z": 34304, - "Room": 30, - "KeyItemGroupID": 22127 - }, - { - "X": 44544, - "Y": -5632, - "Z": 23040, - "Room": 3, - "KeyItemGroupID": 22127 - }, - { - "X": 57856, - "Y": -6144, - "Z": 44544, - "Room": 14, - "KeyItemGroupID": 22127 - }, - { - "X": 99840, - "Y": -7808, - "Z": 31232, - "Room": 37, - "KeyItemGroupID": 22147 - }, - { - "X": 92672, - "Y": -7168, - "Z": 32256, - "Room": 34, - "KeyItemGroupID": 22147 - }, - { - "X": 83456, - "Y": -10240, - "Z": 26112, - "Room": 35, - "KeyItemGroupID": 22147 - }, - { - "X": 81408, - "Y": -7936, - "Z": 33280, - "Room": 31, - "KeyItemGroupID": 22147 - }, - { - "X": 76288, - "Y": -6656, - "Z": 27136, - "Room": 31, - "KeyItemGroupID": 22147 - }, - { - "X": 75264, - "Y": -8960, - "Z": 15872, - "Room": 43, - "KeyItemGroupID": 22147 - }, - { - "X": 60928, - "Y": -8064, - "Z": 26112, - "Room": 28, - "KeyItemGroupID": 22147 - }, - { - "X": 55808, - "Y": -5376, - "Z": 32256, - "Room": 12, - "KeyItemGroupID": 22147 - }, - { - "X": 52736, - "Y": -1536, - "Z": 30208, - "Room": 4, - "KeyItemGroupID": 22147 - }, - { - "X": 45568, - "Y": -5632, - "Z": 26112, - "Room": 3, - "KeyItemGroupID": 22147 - }, - { - "X": 75264, - "Y": -6784, - "Z": 52736, - "Room": 89, - "KeyItemGroupID": 22155 - }, - { - "X": 77312, - "Y": -7168, - "Z": 22016, - "Room": 41, - "KeyItemGroupID": 22155 - }, - { - "X": 39424, - "Y": -5632, - "Z": 23040, - "Room": 11, - "KeyItemGroupID": 22155 - }, - { - "X": 48640, - "Y": -4096, - "Z": 45568, - "Room": 10, - "KeyItemGroupID": 22155 - }, - { - "X": 62976, - "Y": -3584, - "Z": 48640, - "Room": 21, - "KeyItemGroupID": 22155 - }, - { - "X": 73216, - "Y": -8448, - "Z": 35328, - "Room": 30, - "KeyItemGroupID": 22155 - }, - { - "X": 66048, - "Y": -7552, - "Z": 35328, - "Room": 91, - "KeyItemGroupID": 22155 - }, - { - "X": 75264, - "Y": -6784, - "Z": 25088, - "Room": 31, - "KeyItemGroupID": 22155 - }, - { - "X": 77312, - "Y": -6656, - "Z": 47616, - "Room": 45, - "KeyItemGroupID": 22155 - }, - { - "X": 79360, - "Y": -6656, - "Z": 39424, - "Room": 85, - "KeyItemGroupID": 22155 - }, - { - "X": 30208, - "Y": -15360, - "Z": 87552, - "Room": 79, - "KeyItemGroupID": 22179 - }, - { - "X": 36352, - "Y": -11008, - "Z": 94720, - "Room": 78, - "KeyItemGroupID": 22179 - }, - { - "X": 43520, - "Y": -9984, - "Z": 100864, - "Room": 80, - "KeyItemGroupID": 22179 - }, - { - "X": 51712, - "Y": -11264, - "Z": 98816, - "Room": 69, - "KeyItemGroupID": 22179 - }, - { - "X": 51712, - "Y": -11264, - "Z": 95744, - "Room": 69, - "KeyItemGroupID": 22179 - }, - { - "X": 51712, - "Y": -11264, - "Z": 89600, - "Room": 69, - "KeyItemGroupID": 22179 - }, - { - "X": 50688, - "Y": -9984, - "Z": 94720, - "Room": 67, - "KeyItemGroupID": 22179 - }, - { - "X": 56832, - "Y": -9984, - "Z": 95744, - "Room": 64, - "KeyItemGroupID": 22179 - }, - { - "X": 56832, - "Y": -11264, - "Z": 95744, - "Room": 65, - "KeyItemGroupID": 22179 - }, - { - "X": 35328, - "Y": -11008, - "Z": 81408, - "Room": 71, - "KeyItemGroupID": 22179 - } - ] -} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Zones/BOAT.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/BOAT.TR2-Zones.json deleted file mode 100644 index 5d05faf4f..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/BOAT.TR2-Zones.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - 0: [ 0, 4, 7, 8, 11, 12, 13, 14, 15, 24, 28, 31, 32, 35, 36, 37, 42, 54, 55, 65 ], - 1: [ 74, 77, 84, 85, 94, 96, 97, 102, 106, 109, 110, 119, 120, 121, 122, 124, 125, 151, 154 ], - 2: [ 72, 88, 89, 91, 92, 100, 101, 105, 109, 111, 112, 114, 115, 116, 118, 131, 136, 137, 139, 140, 147, 148, 152 ], - 3: [ 0, 6, 7, 11, 14, 15, 16, 17, 18, 19, 24, 25, 26, 28, 29, 30, 33, 34, 36 ], - 4: [ 0, 6, 7, 10, 11, 14, 15, 16, 17, 18, 19, 24, 25, 26, 28, 29, 30, 33, 34, 36, 41, 42, 44, 45, 47, 53, 54, 55, 56, 57, 58, 59, 60, 62, 66, 72, 74, 77, 78, 79, 80, 81, 84, 88, 90, 91, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 126, 129, 130, 135, 136, 137, 147, 143, 149, 150, 151 ], - 5: [ 0, 6, 7, 10, 11, 14, 15, 16, 17, 18, 19, 24, 25, 26, 28, 29, 30, 33, 34, 36, 41, 42, 44, 45, 47, 53, 54, 55, 56, 57, 58, 59, 60, 62, 66, 72, 74, 77, 78, 79, 80, 81, 84, 88, 90, 91, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 126, 129, 130, 135, 136, 137, 147, 143, 149, 150 ], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 0, 6, 7, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 33, 34, 36 ], - 14: [ 45, 47, 58, 59, 60, 61, 69, 72, 74, 77, 78, 79, 80, 81, 84, 88, 90, 91, 96, 129 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/CATACOMB.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/CATACOMB.TR2-Zones.json deleted file mode 100644 index 20b149f01..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/CATACOMB.TR2-Zones.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - 0: [ 0, 1, 3, 4, 5, 7, 16, 98 ], - 1: [ 18, 30, 40, 46, 59, 60, 61, 63, 64, 67, 79, 124 ], - 2: [ 23, 25, 28, 35, 36, 38, 42, 48, 66, 81, 82, 87, 89, 92, 126 ], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 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 ], - 12: [], - 13: [ 17, 19, 124 ], - 14: [ 8, 18, 20, 29, 39, 46, 60, 62, 63, 65, 67, 104, 107, 108 ], - 15: [ 10, 11, 14, 23, 24, 25, 30, 33, 34, 35, 38, 42, 48, 49, 52, 58, 65, 70, 71, 73, 77, 79, 83, 84, 88, 89, 91, 92, 94, 97, 126, 127 ], - 16: [ 0, 1, 2, 3, 4, 5, 6, 7, 16, 35, 43, 74, 98, 118 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/DECK.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/DECK.TR2-Zones.json deleted file mode 100644 index c7e20a778..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/DECK.TR2-Zones.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - 0: [ 0, 8, 19, 21, 30, 32, 39, 40, 60, 70, 76, 79, 84, 85, 103, 108 ], - 1: [ 9, 10, 11, 17, 18, 22, 23, 24, 25, 27, 72, 90, 97, 99 ], - 2: [ 45, 46, 51, 52, 55, 58, 61, 68, 100, 102, 105 ], - 3: [], - 4: [ 0, 8, 19, 20, 21, 30, 31, 32, 33, 34, 40, 60, 70, 76, 77, 79, 80, 83, 84, 86, 103, 104, 107, 108 ], - 5: [ 0, 3, 4, 8, 9, 10, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 40, 41, 42, 43, 45, 46, 47, 48, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 72, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 106, 107, 108, 109, 110, 111, 112, 113, 114 ], - 6: [ 0, 3, 4, 8, 9, 10, 12, 15, 17, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 40, 41, 42, 43, 45, 46, 47, 48, 51, 52, 53, 55, 56, 58, 59, 60, 62, 63, 64, 65, 66, 68, 70, 72, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 103, 104, 106, 107 ], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 19, 20, 21, 30, 40, 41, 42, 43, 45, 46, 47, 48, 51, 52, 55, 57, 58, 59, 61, 62, 63, 64, 66, 68, 82, 93, 110, 111, 114, 115 ], - 14: [ 0, 8, 31, 32, 60, 61, 70, 76, 77, 79, 83, 84, 86, 95, 96, 97, 98, 99 ], - 15: [ 57, 61, 67, 100, 101, 102, 112, 113 ], - 16: [ 9, 10, 11, 12, 13, 14, 15, 17, 18, 22, 53, 56, 72, 81, 89, 90, 91, 92, 94 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/EMPRTOMB.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/EMPRTOMB.TR2-Zones.json deleted file mode 100644 index f93a84518..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/EMPRTOMB.TR2-Zones.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - 0: [ 4, 5, 7, 9, 12, 14, 15, 33, 45, 88, 146, 190 ], - 1: [ 6, 26, 27, 30, 38, 40, 41, 43, 44, 50, 56, 57, 61, 66, 70, 72, 77, 83, 112, 115, 116, 117, 118, 121, 142, 143, 149, 154, 155, 156, 167, 168 ], - 2: [ 59, 90, 92, 104, 106, 145 ], - 3: [], - 4: [ 0, 3, 13, 14, 16, 20, 21, 22, 23, 25, 26, 27, 29, 30, 35, 36, 37, 39, 40, 41, 42, 50, 56, 60, 62, 66, 67, 68, 70, 76, 89, 115, 116, 121, 122, 143, 164, 165, 168, 178 ], - 5: [ 0, 1, 2, 3, 6, 13, 14, 16, 20, 21, 22, 23, 25, 26, 27, 29, 30, 35, 36, 37, 39, 40, 41, 42, 50, 56, 60, 62, 66, 67, 68, 70, 76, 86, 89, 96, 115, 116, 121, 122, 143, 148, 149, 150, 151, 152, 153, 154, 155, 156, 164, 165, 168, 178 ], - 6: [ 8, 34, 46, 49, 53, 59, 87, 93, 94, 98, 104, 105, 106, 135, 144, 145 ], - 7: [ 0, 3, 13, 14, 16, 20, 21, 22, 23, 25, 26, 27, 29, 30, 35, 36, 37, 39, 40, 41, 42, 50, 56, 60, 62, 66, 67, 70, 89, 115, 116, 121, 122, 143, 164, 165, 168, 178 ], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 14, 17, 18, 29, 35, 36, 37, 39, 41, 42, 56, 60, 62, 65, 66, 67, 70, 73, 77, 78, 79, 80, 57, 89, 114, 115, 116, 121, 122, 147, 163, 164, 165, 168, 178, 190 ], - 14: [ 3, 16, 20, 21, 22, 23, 25, 26, 27, 30, 50 ], - 15: [ 8, 34, 38, 46, 90, 92, 93, 94, 98, 104, 105, 106, 135, 144, 145 ], - 16: [ 32, 33, 90, 92, 129 ], - 17: [ 57, 61, 68, 76, 81, 101, 102, 107, 108, 110, 111, 112, 125, 132, 133, 192 ], - 18: [ 1, 2, 86, 96, 148, 149, 150, 151, 152, 153, 154, 155, 156 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/FLOATING.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/FLOATING.TR2-Zones.json deleted file mode 100644 index 3396285ac..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/FLOATING.TR2-Zones.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - 0: [ 1, 2, 18, 103, 104, 127, 136, 153 ], - 1: [ 24, 25, 28, 39, 43, 44, 51, 60, 61, 63, 65, 66, 74, 75, 77, 80, 101, 119, 122 ], - 2: [ 40, 41, 42, 53, 77, 78, 79, 86, 90, 112, 144 ], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 72, 94, 96, 98, 99, 100, 102, 103, 104, 105, 125, 127, 136, 152, 153 ], - 8: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 72, 94, 96, 98, 99, 100, 102, 103, 104, 105, 125, 127, 136, 152, 153 ], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 1, 3, 4, 5, 6, 7, 8, 17, 18, 21, 72, 94, 98, 99, 102, 104, 105 ], - 14: [ 0, 23, 24, 25, 29, 37, 39, 43, 44, 45, 60, 63, 74, 83, 101 ], - 15: [ 26, 40, 41, 46, 52, 73, 75, 76, 77, 78, 79, 81, 86, 90, 91, 106, 107, 118, 119, 121, 122, 123, 124, 126, 128, 129, 133, 134, 144, 145, 146, 147, 148, 149, 159, 160 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/HOUSE.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/HOUSE.TR2-Zones.json deleted file mode 100644 index b326aeaa0..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/HOUSE.TR2-Zones.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - 0: [], - 1: [], - 2: [], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [] -} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR2/Zones/ICECAVE.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/ICECAVE.TR2-Zones.json deleted file mode 100644 index e91fb1e85..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/ICECAVE.TR2-Zones.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - 0: [ 5, 46, 90, 94, 95, 99, 100, 106, 107, 135, 147, 150 ], - 1: [ 8, 15, 17, 24, 29, 31, 33, 34, 36, 39, 56, 60, 61, 63, 64, 66, 68, 73, 74, 80, 85, 88, 102, 116, 118, 119, 130, 132 ], - 2: [ 7, 103, 127, 138, 141, 142 ], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 4, 5, 40, 42, 44, 45, 48, 51, 52, 53, 54, 55, 84, 86, 87, 89, 92, 93, 94, 96, 98, 100, 101, 106, 121, 125 ], - 14: [ 15, 16, 30, 31, 34, 41, 59, 60, 63, 64, 65, 90, 99, 131, 133, 135, 148 ], - 15: [ 8, 11, 24, 25, 29, 56, 61, 69 ], - 16: [ 74, 75, 77, 80, 85 ], - 17: [ 7, 10, 103, 126, 127, 128, 138, 141 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/KEEL.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/KEEL.TR2-Zones.json deleted file mode 100644 index cc8d14946..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/KEEL.TR2-Zones.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - 0: [ 42, 43, 45, 47, 49, 52, 55, 56, 57, 60, 61, 65, 66, 68, 70, 73, 75, 76, 80, 113 ], - 1: [ 3, 21, 22, 24, 30, 33, 35, 36, 37, 40, 41, 79, 94, 106 ], - 2: [ 2, 7, 81, 82, 83, 84, 87, 88, 89, 100, 101, 103 ], - 3: [ 3, 8, 9, 10, 12, 14, 15, 21, 23, 25, 45, 47, 48, 49, 53, 55, 54, 55, 56, 79, 91, 93 ], - 4: [ 3, 8, 9, 10, 12, 14, 15, 21, 23, 25, 45, 47, 48, 49, 53, 55, 54, 55, 56, 57, 58, 61, 63, 64, 65, 66, 67, 79, 91, 93 ], - 5: [ 11, 26, 27, 30, 31, 32, 33, 35, 37, 38, 39, 40, 41, 85, 94, 104, 105, 106 ], - 6: [], - 7: [ 3, 8, 9, 10, 12, 13, 14, 15, 18, 21, 23, 25, 45, 47, 48, 49, 52, 53, 55, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 73, 74, 75, 76, 77, 78, 79, 80, 86, 90, 91, 95, 96, 97, 93 ], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 19, 42, 43, 112, 113 ], - 14: [ 3, 5, 8, 10, 21, 23, 25, 45, 47, 48, 49, 53, 54, 55, 56, 79, 91, 93 ], - 15: [ 57, 58, 60, 61, 63, 64, 65, 66, 67 ], - 16: [ 13, 59, 60, 62, 68, 69, 71, 74, 75, 76, 80, 95, 96, 97], - 17: [ 12, 14, 15 ], - 18: [ 26, 27, 109, 110, 111 ], - 19: [ 11, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 85, 94, 104, 105, 106 ], - 20: [ 6, 7, 34, 36, 81, 82, 83, 84, 88, 89, 99, 101, 102, 103 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/LIVING.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/LIVING.TR2-Zones.json deleted file mode 100644 index 9a5610f98..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/LIVING.TR2-Zones.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - 0: [ 0, 1, 2, 3, 4, 6, 7, 11, 14, 17, 50, 68 ], - 1: [ 16, 18, 26, 32, 33, 61, 69, 70, 80 ], - 2: [ 21, 22, 34, 35, 36, 37, 38, 42, 44, 46, 51, 66, 71, 79, 81 ], - 3: [ 20, 21, 22, 23, 26, 28, 32, 33, 34, 35, 36, 39, 40, 42, 69, 70, 72, 77 ], - 4: [], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 24, 27, 29, 30, 31, 50, 54, 58, 60, 68, 80 ], - 14: [ 20, 21, 22, 23, 26, 28, 32, 33, 34, 35, 42, 69, 70 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/MONASTRY.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/MONASTRY.TR2-Zones.json deleted file mode 100644 index f840e0e43..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/MONASTRY.TR2-Zones.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - 0: [ 10, 15, 17, 23, 24, 25, 27, 55, 76, 77, 81, 128 ], - 1: [ 13, 53, 56, 39, 60, 61, 65, 66, 69, 83, 99, 155, 160 ], - 2: [ 21, 43, 55, 70, 76, 77, 82, 84, 97, 110, 113, 145, 148 ], - 3: [ ], - 4: [ ], - 5: [ ], - 6: [ ], - 7: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 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 ], - 8: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 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 ], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 7, 8, 9, 10, 12, 15, 17, 20, 23, 24, 25, 26, 27, 28, 32, 46, 47, 49, 50, 52, 53, 54, 59, 78, 92, 93, 97, 107, 116, 122, 124, 128, 129, 130, 132 ], - 14: [ 0, 1, 3, 4, 18, 22, 30, 31, 37, 38, 39, 42, 60, 61, 65, 66, 67, 71, 73, 75, 89, 99, 100, 101, 102, 103, 104, 109, 133, 134, 135, 137, 139, 140, 141, 142, 143, 144, 149, 153, 155, 157, 161 ], - 15: [ 19, 41, 55, 62, 63, 70, 76, 85, 88, 91, 138 ], - 16: [ 43, 44 ], - 17: [ 56, 57, 150, 151, 152, 156 ], - 18: [ 2, 5, 72, 86, 87, 94, 96, 97, 98, 110, 111, 112, 114, 145, 146, 147, 148 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/OPERA.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/OPERA.TR2-Zones.json deleted file mode 100644 index 4f663ec61..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/OPERA.TR2-Zones.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - 0: [ 6, 9, 10, 11, 23, 32, 33, 36, 41, 42, 140, 142, 162, 164, 166, 184 ], - 1: [ 0, 2, 13, 34, 38, 44, 53, 55, 57, 63, 76, 79, 84, 86, 87, 89, 90, 105, 106, 107, 108, 152, 154, 155, 161, 169, 173 ], - 2: [ 81, 104, 113, 114, 115, 116, 117, 118, 121, 122, 123 ], - 3: [ 10, 23, 25, 27, 29, 30, 31, 32, 33, 35, 127, 162, 163, - 1, 5, 8, 16, 37, 38, 44, 46, 47, 48, 49, 50, 52, 53, 55, 57, 59, 60, 63, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 86, 87, 88, 89, 90, 93, 95, 96, 100, 102, 103, 105, 107, 109, 111, 120, 132, 139, 141, 143, 144, 151, 153, 154, 155, 156, 158, 159, 161, 174, 176, 177, 178, 179, 183, 185, 187, 188, 189], - 4: [], - 5: [], - 6: [], - 7: [ 1, 5, 8, 16, 37, 46, 47, 49, 50, 52, 53, 55, 57, 59, 63, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 86, 87, 88, 89, 90, 93, 95, 96, 100, 102, 103, 105, 107, 109, 111, 120, 132, 139, 143, 144, 151, 155, 158, 159, 161, 174, 176, 177, 178, 179, 183, 185, 187, 188, 190 ], - 8: [ 0, 1, 2, 5, 8, 12, 13, 14, 15, 16, 19, 37, 38, 44, 46, 47, 48, 49, 50, 52, 53, 55, 57, 59, 60, 63, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 86, 87, 88, 89, 90, 93, 95, 96, 100, 102, 103, 105, 107, 109, 111, 120, 132, 135, 139, 141, 143, 144, 151, 153, 154, 155, 156, 158, 159, 161, 169, 170, 171, 172, 174, 176, 177, 178, 179, 183, 185, 187, 188, 189, 190 ], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 3, 10, 23, 25, 27, 29, 30, 31, 32, 33, 35, 127, 162, 163 ], - 14: [ 2, 6, 11, 12, 13, 14, 15, 19, 170, 171, 190 ], - 15: [ 1, 5, 8, 37, 46, 47, 49, 50, 51, 52, 53, 54, 55, 57, 59, 65, 66, 67, 68, 69, 70, 71, 72, 75, 77, 78, 86, 87, 89, 91, 93, 100, 102, 103, 105, 107, 109, 111, 120, 132, 139, 144, 151, 158, 159, 174, 178, 183, 187, 185 ], - 16: [ 0, 38, 44, 60, 61, 83, 135, 141, 172, 189 ], - 17: [ 53, 58, 81, 104, 113, 114, 117, 118, 119, 121, 122, 123, 152 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/PLATFORM.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/PLATFORM.TR2-Zones.json deleted file mode 100644 index a6efde0f0..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/PLATFORM.TR2-Zones.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - 0: [ 0, 42, 43, 45, 46, 48, 51, 52, 53, 54, 55, 63 ], - 1: [ 10, 13, 15, 16, 18, 21, 22, 23, 30, 31, 34, 72, 80, 87 ], - 2: [ 4, 7, 8, 17, 19, 20, 65, 66, 70, 76, 78, 79 ], - 3: [ 2, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 29, 30, 32, 34, 35, 64, 65, 66, 68, 69, 70, 75, 80, 82, 83, 84, 85, 86, 87, 88, 89 ], - 4: [], - 5: [], - 6: [ 48, 50, 52, 53, 54, 55, 56, 57, 62, 63 ], - 7: [ 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 29, 32, 75, 80, 83, 84, 85, 86, 87, 88, 89, - 2, 12, 13, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 29, 30, 32, 34, 35, 64, 65, 66, 68, 69, 70, 75, 80, 82, 83, 84, 85, 86, 87, 88, 89 ], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 37, 39, 42, 44, 47 ], - 14: [ 48, 50, 52, 54, 55, 56, 57, 62, 63 ], - 15: [ 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 29, 30, 32, 34, 49, 75, 80, 83, 84, 85, 86, 87, 88, 89 ], - 16: [ 2, 11, 12, 13, 14, 15, 16, 17, 30, 31, 34, 64, 65, 66, 68 ], - 17: [ 12, 17, 18, 19, 74 ], - 18: [ 3, 4, 5, 8, 9, 76, 77, 78 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/RIG.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/RIG.TR2-Zones.json deleted file mode 100644 index 3c08ae3ca..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/RIG.TR2-Zones.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - 0: [ 0, 2, 4, 6, 11, 77, 88, 90, 92, 96, 97 ], - 1: [ 15, 17, 20, 22, 23, 24, 30, 31, 42, 43, 50, 60 ], - 2: [ 32, 34, 35, 41, 44, 63, 70, 83, 99, 101, 102, 106, 108 ], - 3: [ 0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 42, 43, 50, 60, 77, 78, 79, 85, 86, 87, 88, 89, 90, 91, 92, 93, 96, 97], - 4: [ 0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 77, 78, 79, 85, 86, 87, 88, 89, 90, 91, 92, 93, 96, 97 ], - 5: [ 0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 48, 49, 50, 53, 54, 55, 56, 60, 61, 62, 63, 64, 77, 78, 79, 85, 86, 87, 88, 89, 90, 91, 92, 93, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110 ], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 0, 1, 3, 4, 5, 7, 10, 11, 12, 13, 90, 91, 92, 93, 96, 97 ], - 14: [ 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 42, 43, 50, 60 ], - 15: [ 18, 32, 33, 34, 36, 37, 38, 39, 40, 44, 48, 49, 53, 54, 55, 56, 63, 98, 99, 100, 101, 102, 107, 108, 109, 110 ], - 16: [ 34, 35, 68, 69, 70, 75 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/SKIDOO.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/SKIDOO.TR2-Zones.json deleted file mode 100644 index 4aa17e8d6..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/SKIDOO.TR2-Zones.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - 0: [ 0, 1, 3, 6, 10, 18, 19, 23, 25, 33, 34, 69, 76, 77, 78, 79, 81 ], - 1: [ 14, 42, 44, 46, 47, 50, 56, 60, 62, 63, 64, 66, 67, 68, 70, 73, 74, 75, 89, 94, 97, 116, 132, 134, 136, 138 ], - 2: [ 99, 103, 105, 107, 109, 112, 120, 121, 123, 125, 126, 127, 128, 129, 146 ], - 3: [ 0, 1, 7, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 28, 34, 35, 37, 38, 39, 40, 41, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 71, 72, 73, 74, 75, 86, 87, 88, 90, 91, 92, 93, 94, 132, 133, 134, 135, 136, 137, 138, 148 ], - 4: [ 0, 1, 7, 11, 12, 13, 14, 15, 16, 18, 19, 20, 24, 28, 34, 35, 37, 38, 39, 40, 41, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 68, 71, 72, 73, 74, 75, 86, 87, 88, 90, 91, 92, 93, 94, 132, 133, 134, 135, 136, 137, 138, 148 ], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 0, 1, 4, 5, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 24, 26, 28, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 68, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 83, 86, 87, 88, 90, 91, 92, 93, 94, 96, 97, 130, 132, 133, 135, 136, 137, 138, 142, 143, 148 ], - 14: [ 95, 98, 99, 100, 101, 102, 103, 104, 112, 114, 115, 121, 123, 124, 126, 127, 128, 129, 131, 144 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/UNWATER.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/UNWATER.TR2-Zones.json deleted file mode 100644 index b7e0316f1..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/UNWATER.TR2-Zones.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - 0: [ 0, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 17, 18, 20, 47, 51, 54, 59 ], - 1: [ 21, 22, 23, 28, 67 ], - 2: [ 27, 36, 37, 40, 44, 50, 74 ], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [0, 2, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], - 14: [21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 46, 47, 60, 61, 62, 63, 64, 67, 68], - 15: [27, 37, 38, 39, 40, 41, 42, 44, 49, 50, 66, 71, 72, 74, 75, 76] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/VENICE.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/VENICE.TR2-Zones.json deleted file mode 100644 index f87b9f320..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/VENICE.TR2-Zones.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - 0: [ 0, 4, 5, 13, 16, 68, 96, 104, 107, 110, 117, 118, 123, 150, 151, 154, 164 ], - 1: [ 6, 15, 17, 22, 25, 28, 29, 30, 38, 51, 115, 140, 141 ], - 2: [ 43, 59, 62, 63, 70, 71, 73, 76, 77, 78, 86, 98, 126, 127, 130, 131, 134, 135, 138, 139 ], - 3: [ 6, 8, 15, 17, 20, 22, 23, 24, 25, 28, 29, 30, 31, 33, 36, 37, 38, 39, 47, 50, 51, 71, 141, 158 ], - 4: [ 6, 8, 15, 17, 20, 22, 23, 24, 25, 28, 29, 30, 31, 33, 36, 37, 38, 39, 41, 42, 43, 47, 50, 51, 58, 59, 61, 62, 63, 64, 65, 66, 70, 73, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 120, 126, 127, 130, 134, 139, 141, 158 ], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 16, 18, 49, 67, 68, 75, 99, 101, 105, 106, 107, 108, 110, 116, 117, 118, 119, 151, 155, 156, 159, 162, 163 ], - 14: [ 0, 1, 2, 4, 5, 10, 12, 13, 14, 32, 93, 96, 152, 153, 157 ], - 15: [ 6, 8, 15, 20, 22, 24, 25, 29, 30, 31, 36, 38, 47, 140, 158 ], - 16: [ 41, 42, 43, 58, 59, 60, 61, 62, 63, 65, 66, 70, 72, 73, 77, 78, 85, 86, 87, 130, 131, 135, 138, 145, 146 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/WALL.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/WALL.TR2-Zones.json deleted file mode 100644 index e8514e708..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/WALL.TR2-Zones.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - 0: [ 3, 31, 33, 35, 36, 37, 67, 68, 70 ], - 1: [ 0, 2, 5, 7, 8, 9, 17, 18, 20, 21, 22, 25, 26, 27, 28, 29, 30, 32, 42, 77 ], - 2: [ 45, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 61, 63, 64, 65, 66, 74 ], - 3: [ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 77 ], - 4: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 77 ], - 5: [], - 6: [], - 7: [], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 31, 36, 38, 70], - 14: [ 3 ], - 15: [ 0, 77 ], - 16: [ 7, 9, 34 ], - 17: [ 4, 32, 41, 42, 44, 47 ], - 18: [ 48, 49, 50, 51, 52, 53, 56, 57, 59 ], - 19: [ 58, 62, 63, 66, 75, 76, 79, 83 ], - 20: [ 39, 64, 65, 74 ] -} diff --git a/TRRandomizerCore/Resources/TR2/Zones/XIAN.TR2-Zones.json b/TRRandomizerCore/Resources/TR2/Zones/XIAN.TR2-Zones.json deleted file mode 100644 index 1788062bd..000000000 --- a/TRRandomizerCore/Resources/TR2/Zones/XIAN.TR2-Zones.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - 0: [ 1, 3, 17 ], - 1: [ 13, 16, 18, 19 ], - 2: [ 21 ], - 3: [], - 4: [], - 5: [], - 6: [], - 7: [ 0, 1, 3, 17 ], - 8: [], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [ 0, 1, 3, 17 ], - 14: [ 2, 16, 18, 19, 20 ], - 15: [ 5, 13, 14, 15 ] -} diff --git a/TRRandomizerCore/Resources/TR3/Locations/Zones.json b/TRRandomizerCore/Resources/TR3/Locations/Zones.json deleted file mode 100644 index a5d01d5bf..000000000 --- a/TRRandomizerCore/Resources/TR3/Locations/Zones.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "JUNGLE.TR2": { - "AliasedExpectedKeyItems": [ - 10359 - ], - "BaseExpectedKeyItems": [ - 227 - ], - "AllowedRooms": { - "MonkeyKey": [ - 2048 - ] - } - }, - "TEMPLE.TR2": { - "AliasedExpectedKeyItems": [ - 11371, - 11410, - 11411, - 11416, - 11435, - 11444, - 11446 - ], - "BaseExpectedKeyItems": [ - 205, - 206, - 224 - ], - "AllowedRooms": { - "GaneshaSpikeCorridorAfterMud": [ - 2048 - ], - "Scimitar2": [ - 2048 - ], - "Scimitar1": [ - 2048 - ], - "GaneshaFlipmapPool": [ - 2048 - ], - "GaneshaBeneathRandyRory": [ - 2048 - ], - "GaneshaCurrentPool": [ - 2048 - ], - "GaneshaSpikeCeiling": [ - 2048 - ] - } - }, - "QUADCHAS.TR2": { - "AliasedExpectedKeyItems": [ - 12239, - 12323 - ], - "BaseExpectedKeyItems": [ - 224 - ], - "AllowedRooms": { - "SnakePitKey": [ - 2048 - ], - "MonkeyPitKey": [ - 2048 - ] - } - }, - "TONYBOSS.TR2": { - "AliasedExpectedKeyItems": [ - 32700 - ], - "BaseExpectedKeyItems": [ - 32700 - ], - "AllowedRooms": { - "NullKeyItem": [ - 2048 - ] - } - }, - "NEVADA.TR2": { - "AliasedExpectedKeyItems": [ - 14294, - 14378 - ], - "BaseExpectedKeyItems": [ - 224, - 225 - ], - "AllowedRooms": { - "DetonatorKey": [ - 2048 - ], - "RooftopKeycard": [ - 2048 - ] - } - }, - "COMPOUND.TR2": { - "AliasedExpectedKeyItems": [ - 15234, - 15239, - 15279, - 15350, - 15335, - 15355, - 15366 - ], - "BaseExpectedKeyItems": [ - 205, - 206, - 224, - 225 - ], - "AllowedRooms": { - "InitialKeycard": [ - 2048 - ], - "FinalYellowKey": [ - 2048 - ], - "BlueKey": [ - 2048 - ], - "SecretCorridorKeycard": [ - 2048 - ], - "SecretCorridorYellow": [ - 2048 - ], - "OutsideTurretsKeycard": [ - 2048 - ], - "OutsideYellowKey": [ - 2048 - ] - } - }, - "AREA51.TR2": { - "AliasedExpectedKeyItems": [ - 16233, - 16257, - 16286, - 16322 - ], - "BaseExpectedKeyItems": [ - 206, - 207, - 208, - 224 - ], - "AllowedRooms": { - "Disc2": [ - 2048 - ], - "Disc1": [ - 2048 - ], - "YellowKey": [ - 2048 - ], - "UFOKeycard": [ - 2048 - ] - } - }, - "SHORE.TR2": { - "AliasedExpectedKeyItems": [ - 17222, - 17231, - 17326, - 17329 - ], - "BaseExpectedKeyItems": [ - 205, - 224 - ], - "AllowedRooms": { - "SerpentStoneCubby": [ - 2048 - ], - "SmugglersKey": [ - 2048 - ], - "SerpentStoneTopWaterfall": [ - 2048 - ], - "SerpentStoneTreetops": [ - 2048 - ] - } - }, - "CRASH.TR2": { - "AliasedExpectedKeyItems": [ - 18255, - 18270 - ], - "BaseExpectedKeyItems": [ - 224, - 225 - ], - "AllowedRooms": { - "TuckermansKey": [ - 2048 - ], - "BishopsKey": [ - 2048 - ] - } - }, - "RAPIDS.TR2": { - "AliasedExpectedKeyItems": [ - 32700 - ], - "BaseExpectedKeyItems": [ - 32700 - ], - "AllowedRooms": { - "NullKeyItem": [ - 2048 - ] - } - }, - "TRIBOSS.TR2": { - "AliasedExpectedKeyItems": [ - 32700 - ], - "BaseExpectedKeyItems": [ - 32700 - ], - "AllowedRooms": { - "NullKeyItem": [ - 2048 - ] - } - }, - "ROOFS.TR2": { - "AliasedExpectedKeyItems": [ - 21225, - 21396 - ], - "BaseExpectedKeyItems": [ - 224, - 225 - ], - "AllowedRooms": { - "CathedralKey": [ - 2048 - ], - "FlueRoomKey": [ - 2048 - ] - } - }, - "SEWER.TR2": { - "AliasedExpectedKeyItems": [ - 22235, - 22243, - 22247, - 22262, - 22301, - 22325, - 22334 - ], - "BaseExpectedKeyItems": [ - 205, - 206, - 207, - 208, - 224, - 225, - 226 - ], - "AllowedRooms": { - "SolomonKeyDrillShaft": [ - 2048 - ], - "Ticket": [ - 2048 - ], - "Penny": [ - 2048 - ], - "MaintenanceKey": [ - 2048 - ], - "SolomonKey3DoorPuzzle": [ - 2048 - ], - "Star": [ - 2048 - ], - "Mallet": [ - 2048 - ] - } - }, - "TOWER.TR2": { - "AliasedExpectedKeyItems": [ - 23283, - 23293 - ], - "BaseExpectedKeyItems": [ - 205, - 224 - ], - "AllowedRooms": { - "EmbalmingFluid": [ - 2048 - ], - "BoilerRoomKey": [ - 2048 - ] - } - }, - "OFFICE.TR2": { - "AliasedExpectedKeyItems": [ - 32700 - ], - "BaseExpectedKeyItems": [ - 32700 - ], - "AllowedRooms": { - "NullKeyItem": [ - 2048 - ] - } - }, - "ANTARC.TR2": { - "AliasedExpectedKeyItems": [ - 25375, - 25292, - 25298, - 25321, - 25339 - ], - "BaseExpectedKeyItems": [ - 205, - 206, - 224 - ], - "AllowedRooms": { - "HutKey": [ - 2048 - ], - "CrowbarAfterOpeningGenerator": [ - 2048 - ], - "CrowbarAfterOpeningTower": [ - 2048 - ], - "GeneratorKey": [ - 2048 - ], - "CrowbarStandardPickup": [ - 2048 - ] - } - }, - "MINES.TR2": { - "AliasedExpectedKeyItems": [ - 26312, - 26333, - 26365 - ], - "BaseExpectedKeyItems": [ - 205, - 206, - 207 - ], - "AllowedRooms": { - "Battery": [ - 2048 - ], - "Winch": [ - 2048 - ], - "Crowbar": [ - 2048 - ] - } - }, - "CITY.TR2": { - "AliasedExpectedKeyItems": [ - 27251, - 27299, - 27302, - 27325, - 27324, - 27435 - ], - "BaseExpectedKeyItems": [ - 205, - 224 - ], - "AllowedRooms": { - "UliKeyStart": [ - 2048 - ], - "WaterMask": [ - 2048 - ], - "WindMask": [ - 2048 - ], - "EarthMask": [ - 2048 - ], - "FireMask": [ - 2048 - ], - "UliKeyMutants": [ - 2048 - ] - } - }, - "CHAMBER.TR2": { - "AliasedExpectedKeyItems": [ - 32700 - ], - "BaseExpectedKeyItems": [ - 32700 - ], - "AllowedRooms": { - "NullKeyItem": [ - 2048 - ] - } - }, - "STPAUL.TR2": { - "AliasedExpectedKeyItems": [ - 29242 - ], - "BaseExpectedKeyItems": [ - 224 - ], - "AllowedRooms": { - "VaultKey": [ - 2048 - ] - } - } -} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Locations/item_locations.json b/TRRandomizerCore/Resources/TR3/Locations/item_locations.json deleted file mode 100644 index 2c4f02d5e..000000000 --- a/TRRandomizerCore/Resources/TR3/Locations/item_locations.json +++ /dev/null @@ -1,5121 +0,0 @@ -{ - "JUNGLE.TR2": [ - { - "X": 27203, - "Y": 24064, - "Z": 61980, - "Room": 26, - "KeyItemGroupID": 10359 - }, - { - "X": 33280, - "Y": 27136, - "Z": 71168, - "Room": 147, - "KeyItemGroupID": 10359 - }, - { - "X": 31249, - "Y": 26378, - "Z": 80360, - "Room": 31, - "KeyItemGroupID": 10359 - }, - { - "X": 36328, - "Y": 27136, - "Z": 76279, - "Room": 83, - "KeyItemGroupID": 10359 - }, - { - "X": 47588, - "Y": 24064, - "Z": 70140, - "Room": 163, - "KeyItemGroupID": 10359 - }, - { - "X": 51705, - "Y": 24064, - "Z": 75262, - "Room": 85, - "KeyItemGroupID": 10359 - }, - { - "X": 57857, - "Y": 26493, - "Z": 76297, - "Room": 84, - "KeyItemGroupID": 10359 - }, - { - "X": 77312, - "Y": 27136, - "Z": 77312, - "Room": 151, - "KeyItemGroupID": 10359 - }, - { - "X": 89616, - "Y": 28160, - "Z": 76321, - "Room": 62, - "KeyItemGroupID": 10359 - }, - { - "X": 79385, - "Y": 25600, - "Z": 63939, - "Room": 50, - "KeyItemGroupID": 10359 - }, - { - "X": 82362, - "Y": 26880, - "Z": 65016, - "Room": 99, - "KeyItemGroupID": 10359 - }, - { - "X": 86557, - "Y": 21504, - "Z": 62914, - "Room": 14, - "KeyItemGroupID": 10359 - }, - { - "X": 92656, - "Y": 23808, - "Z": 63986, - "Room": 162, - "KeyItemGroupID": 10359 - }, - { - "X": 93675, - "Y": 19712, - "Z": 62963, - "Room": 75, - "KeyItemGroupID": 10359 - }, - { - "X": 93633, - "Y": 17152, - "Z": 70138, - "Room": 143, - "KeyItemGroupID": 10359 - }, - { - "X": 89595, - "Y": 24064, - "Z": 53671, - "Room": 72, - "KeyItemGroupID": 10359 - }, - { - "X": 88529, - "Y": 25611, - "Z": 53758, - "Room": 70, - "KeyItemGroupID": 10359 - }, - { - "X": 85585, - "Y": 27392, - "Z": 54775, - "Room": 88, - "KeyItemGroupID": 10359 - }, - { - "X": 83424, - "Y": 25735, - "Z": 51659, - "Room": 54, - "KeyItemGroupID": 10359 - }, - { - "X": 69067, - "Y": 24576, - "Z": 61030, - "Room": 28, - "KeyItemGroupID": 10359 - }, - { - "X": 62867, - "Y": 24832, - "Z": 61995, - "Room": 28, - "KeyItemGroupID": 10359 - }, - { - "X": 54689, - "Y": 27799, - "Z": 65088, - "Room": 43, - "KeyItemGroupID": 10359 - }, - { - "X": 54784, - "Y": 27264, - "Z": 61952, - "Room": 43, - "KeyItemGroupID": 10359 - }, - { - "X": 40417, - "Y": 25856, - "Z": 59941, - "Room": 30, - "KeyItemGroupID": 10359 - }, - { - "X": 33303, - "Y": 27136, - "Z": 60962, - "Room": 146, - "KeyItemGroupID": 10359 - }, - { - "X": 24140, - "Y": 25088, - "Z": 54760, - "Room": 141, - "KeyItemGroupID": 10359 - }, - { - "X": 15001, - "Y": 27136, - "Z": 59942, - "Room": 134, - "KeyItemGroupID": 10359 - }, - { - "X": 22030, - "Y": 26112, - "Z": 73234, - "Room": 122, - "KeyItemGroupID": 10359 - }, - { - "X": 27081, - "Y": 30578, - "Z": 77380, - "Room": 118, - "KeyItemGroupID": 10359 - }, - { - "X": 35328, - "Y": 29952, - "Z": 91648, - "Room": 113, - "KeyItemGroupID": 10359 - }, - { - "X": 38400, - "Y": 28160, - "Z": 81408, - "Room": 113, - "KeyItemGroupID": 10359 - }, - { - "X": 41438, - "Y": 25856, - "Z": 80357, - "Room": 98, - "KeyItemGroupID": 10359 - }, - { - "X": 43525, - "Y": 24069, - "Z": 86501, - "Room": 97, - "KeyItemGroupID": 10359 - }, - { - "X": 43559, - "Y": 24320, - "Z": 91625, - "Room": 97, - "KeyItemGroupID": 10359 - }, - { - "X": 50699, - "Y": 27904, - "Z": 90652, - "Room": 106, - "KeyItemGroupID": 10359 - }, - { - "X": 50677, - "Y": 27904, - "Z": 87532, - "Room": 106, - "KeyItemGroupID": 10359 - }, - { - "X": 57903, - "Y": 27904, - "Z": 90617, - "Room": 103, - "KeyItemGroupID": 10359 - } - ], - "TEMPLE.TR2": [ - { - "X": 9728, - "Y": 3328, - "Z": 57856, - "Room": 211, - "KeyItemGroupID": 11435 - }, - { - "X": 22016, - "Y": 4352, - "Z": 57856, - "Room": 211, - "KeyItemGroupID": 11435 - }, - { - "X": 23019, - "Y": 5376, - "Z": 62972, - "Room": 213, - "KeyItemGroupID": 11435 - }, - { - "X": 28194, - "Y": 3328, - "Z": 61980, - "Room": 209, - "KeyItemGroupID": 11435 - }, - { - "X": 31184, - "Y": 5120, - "Z": 58802, - "Room": 208, - "KeyItemGroupID": 11435 - }, - { - "X": 11726, - "Y": 4352, - "Z": 53705, - "Room": 211, - "KeyItemGroupID": 11435 - }, - { - "X": 19960, - "Y": 4352, - "Z": 62998, - "Room": 211, - "KeyItemGroupID": 11435 - }, - { - "X": 20980, - "Y": 4096, - "Z": 65027, - "Room": 212, - "KeyItemGroupID": 11435 - }, - { - "X": 9706, - "Y": 4096, - "Z": 69140, - "Room": 212, - "KeyItemGroupID": 11435 - }, - { - "X": 19978, - "Y": 7168, - "Z": 69090, - "Room": 220, - "KeyItemGroupID": 11444 - }, - { - "X": 13744, - "Y": 7168, - "Z": 69075, - "Room": 220, - "KeyItemGroupID": 11444 - }, - { - "X": 13806, - "Y": 7168, - "Z": 62949, - "Room": 220, - "KeyItemGroupID": 11444 - }, - { - "X": 16889, - "Y": 7168, - "Z": 63997, - "Room": 220, - "KeyItemGroupID": 11444 - }, - { - "X": 20007, - "Y": 7168, - "Z": 63038, - "Room": 220, - "KeyItemGroupID": 11444 - }, - { - "X": 20999, - "Y": 4096, - "Z": 65046, - "Room": 212, - "KeyItemGroupID": 11444 - }, - { - "X": 9681, - "Y": 4096, - "Z": 69232, - "Room": 212, - "KeyItemGroupID": 11444 - }, - { - "X": 46592, - "Y": 5888, - "Z": 46592, - "Room": 189, - "KeyItemGroupID": 11416 - }, - { - "X": 53760, - "Y": 5888, - "Z": 45568, - "Room": 190, - "KeyItemGroupID": 11416 - }, - { - "X": 62976, - "Y": 7168, - "Z": 61952, - "Room": 81, - "KeyItemGroupID": 11416 - }, - { - "X": 55742, - "Y": 7168, - "Z": 54752, - "Room": 82, - "KeyItemGroupID": 11416 - }, - { - "X": 47770, - "Y": 6656, - "Z": 37383, - "Room": 170, - "KeyItemGroupID": 11416 - }, - { - "X": 51630, - "Y": 6656, - "Z": 37377, - "Room": 170, - "KeyItemGroupID": 11416 - }, - { - "X": 66074, - "Y": 8192, - "Z": 62951, - "Room": 88, - "KeyItemGroupID": 11416 - }, - { - "X": 61952, - "Y": 7936, - "Z": 69120, - "Room": 88, - "KeyItemGroupID": 11416 - }, - { - "X": 50669, - "Y": 8960, - "Z": 18946, - "Room": 173, - "KeyItemGroupID": 11416 - }, - { - "X": 49664, - "Y": 1792, - "Z": 17920, - "Room": 177, - "KeyItemGroupID": 11416 - }, - { - "X": 50724, - "Y": 4608, - "Z": 22996, - "Room": 175, - "KeyItemGroupID": 11416 - }, - { - "X": 44589, - "Y": 1419, - "Z": 22033, - "Room": 176, - "KeyItemGroupID": 11416 - }, - { - "X": 40448, - "Y": 1024, - "Z": 18944, - "Room": 176, - "KeyItemGroupID": 11416 - }, - { - "X": 48640, - "Y": 3840, - "Z": 14848, - "Room": 184, - "KeyItemGroupID": 11416 - }, - { - "X": 34272, - "Y": 768, - "Z": 27186, - "Room": 200, - "KeyItemGroupID": 11416 - }, - { - "X": 42541, - "Y": 2560, - "Z": 26154, - "Room": 201, - "KeyItemGroupID": 11416 - }, - { - "X": 47621, - "Y": 2689, - "Z": 26152, - "Room": 201, - "KeyItemGroupID": 11416 - }, - { - "X": 14738, - "Y": 4352, - "Z": 46546, - "Room": 215, - "KeyItemGroupID": 11446 - }, - { - "X": 15888, - "Y": 4352, - "Z": 47639, - "Room": 215, - "KeyItemGroupID": 11446 - }, - { - "X": 22016, - "Y": 4352, - "Z": 57856, - "Room": 211, - "KeyItemGroupID": 11446 - }, - { - "X": 15860, - "Y": 4352, - "Z": 64035, - "Room": 211, - "KeyItemGroupID": 11446 - }, - { - "X": 26075, - "Y": 5376, - "Z": 58858, - "Room": 213, - "KeyItemGroupID": 11446 - }, - { - "X": 14864, - "Y": 5888, - "Z": 52732, - "Room": 221, - "KeyItemGroupID": 11446 - }, - { - "X": 22033, - "Y": 4096, - "Z": 69150, - "Room": 212, - "KeyItemGroupID": 11446 - }, - { - "X": 46547, - "Y": 5236, - "Z": 70121, - "Room": 98, - "KeyItemGroupID": 11371 - }, - { - "X": 57856, - "Y": 4864, - "Z": 74240, - "Room": 101, - "KeyItemGroupID": 11371 - }, - { - "X": 57830, - "Y": 3584, - "Z": 91685, - "Room": 118, - "KeyItemGroupID": 11371 - }, - { - "X": 54784, - "Y": 3840, - "Z": 94720, - "Room": 111, - "KeyItemGroupID": 11371 - }, - { - "X": 61952, - "Y": 3840, - "Z": 93696, - "Room": 110, - "KeyItemGroupID": 11371 - }, - { - "X": 57913, - "Y": 3840, - "Z": 96731, - "Room": 112, - "KeyItemGroupID": 11371 - }, - { - "X": 59925, - "Y": 1280, - "Z": 92739, - "Room": 126, - "KeyItemGroupID": 11371 - }, - { - "X": 56832, - "Y": -1536, - "Z": 94720, - "Room": 14, - "KeyItemGroupID": 11371 - }, - { - "X": 50688, - "Y": 256, - "Z": 75264, - "Room": 165, - "KeyItemGroupID": 11371 - }, - { - "X": 56832, - "Y": -512, - "Z": 57856, - "Room": 198, - "KeyItemGroupID": 11371 - }, - { - "X": 56832, - "Y": 1280, - "Z": 94720, - "Room": 123, - "KeyItemGroupID": 11371 - }, - { - "X": 56832, - "Y": 4864, - "Z": 74240, - "Room": 101, - "KeyItemGroupID": 11371 - }, - { - "X": 36329, - "Y": 5120, - "Z": 93656, - "Room": 141, - "KeyItemGroupID": 11371 - }, - { - "X": 36302, - "Y": 5120, - "Z": 97818, - "Room": 140, - "KeyItemGroupID": 11371 - }, - { - "X": 35328, - "Y": 4864, - "Z": 87552, - "Room": 147, - "KeyItemGroupID": 11371 - }, - { - "X": 54784, - "Y": 1280, - "Z": 84480, - "Room": 161, - "KeyItemGroupID": 11371 - }, - { - "X": 40448, - "Y": 5632, - "Z": 93696, - "Room": 132, - "KeyItemGroupID": 11371 - }, - { - "X": 33313, - "Y": 2816, - "Z": 53703, - "Room": 206, - "KeyItemGroupID": 11411 - }, - { - "X": 33280, - "Y": 1536, - "Z": 56832, - "Room": 207, - "KeyItemGroupID": 11411 - }, - { - "X": 42497, - "Y": 3584, - "Z": 53740, - "Room": 204, - "KeyItemGroupID": 11411 - }, - { - "X": 42479, - "Y": 4608, - "Z": 57844, - "Room": 219, - "KeyItemGroupID": 11411 - }, - { - "X": 51712, - "Y": 3328, - "Z": 54784, - "Room": 195, - "KeyItemGroupID": 11411 - }, - { - "X": 33257, - "Y": 1536, - "Z": 59901, - "Room": 207, - "KeyItemGroupID": 11410 - }, - { - "X": 33292, - "Y": 2816, - "Z": 62983, - "Room": 206, - "KeyItemGroupID": 11410 - }, - { - "X": 42475, - "Y": 3584, - "Z": 63049, - "Room": 204, - "KeyItemGroupID": 11410 - }, - { - "X": 42496, - "Y": 4608, - "Z": 58880, - "Room": 219, - "KeyItemGroupID": 11410 - }, - { - "X": 51712, - "Y": 3328, - "Z": 60928, - "Room": 195, - "KeyItemGroupID": 11410 - }, - { - "X": 49664, - "Y": -512, - "Z": 53760, - "Room": 197, - "KeyItemGroupID": 11410 - }, - { - "X": 51712, - "Y": -512, - "Z": 62976, - "Room": 197, - "KeyItemGroupID": 11410 - }, - { - "X": 47616, - "Y": 256, - "Z": 72192, - "Room": 166, - "KeyItemGroupID": 11410 - } - ], - "QUADCHAS.TR2": [ - { - "X": 45535, - "Y": -2816, - "Z": 35318, - "Room": 55, - "KeyItemGroupID": 12323 - }, - { - "X": 50688, - "Y": -2304, - "Z": 35328, - "Room": 99, - "KeyItemGroupID": 12323 - }, - { - "X": 47616, - "Y": -2560, - "Z": 40448, - "Room": 98, - "KeyItemGroupID": 12323 - }, - { - "X": 45568, - "Y": -2560, - "Z": 41472, - "Room": 98, - "KeyItemGroupID": 12323 - }, - { - "X": 48631, - "Y": -2560, - "Z": 45559, - "Room": 98, - "KeyItemGroupID": 12323 - }, - { - "X": 52807, - "Y": -2560, - "Z": 42453, - "Room": 91, - "KeyItemGroupID": 12323 - }, - { - "X": 55789, - "Y": -2560, - "Z": 44469, - "Room": 91, - "KeyItemGroupID": 12323 - }, - { - "X": 54803, - "Y": -1024, - "Z": 47673, - "Room": 89, - "KeyItemGroupID": 12323 - }, - { - "X": 50709, - "Y": 768, - "Z": 55834, - "Room": 30, - "KeyItemGroupID": 12323 - }, - { - "X": 62941, - "Y": -2304, - "Z": 44561, - "Room": 87, - "KeyItemGroupID": 12323 - }, - { - "X": 63890, - "Y": -2560, - "Z": 41486, - "Room": 87, - "KeyItemGroupID": 12323 - }, - { - "X": 64000, - "Y": -2560, - "Z": 37376, - "Room": 86, - "KeyItemGroupID": 12323 - }, - { - "X": 63992, - "Y": -768, - "Z": 37357, - "Room": 85, - "KeyItemGroupID": 12323 - }, - { - "X": 54761, - "Y": -768, - "Z": 36358, - "Room": 88, - "KeyItemGroupID": 12323 - }, - { - "X": 59925, - "Y": -2816, - "Z": 44491, - "Room": 87, - "KeyItemGroupID": 12323 - }, - { - "X": 77312, - "Y": 256, - "Z": 34304, - "Room": 72, - "KeyItemGroupID": 12239 - }, - { - "X": 75248, - "Y": -643, - "Z": 33264, - "Room": 72, - "KeyItemGroupID": 12239 - }, - { - "X": 73216, - "Y": -768, - "Z": 33280, - "Room": 59, - "KeyItemGroupID": 12239 - }, - { - "X": 70144, - "Y": 512, - "Z": 29184, - "Room": 60, - "KeyItemGroupID": 12239 - }, - { - "X": 70144, - "Y": 512, - "Z": 30208, - "Room": 60, - "KeyItemGroupID": 12239 - }, - { - "X": 70174, - "Y": 768, - "Z": 41523, - "Room": 63, - "KeyItemGroupID": 12239 - }, - { - "X": 72192, - "Y": 256, - "Z": 36352, - "Room": 78, - "KeyItemGroupID": 12239 - }, - { - "X": 71168, - "Y": 1536, - "Z": 41472, - "Room": 79, - "KeyItemGroupID": 12239 - }, - { - "X": 72271, - "Y": 1536, - "Z": 43627, - "Room": 79, - "KeyItemGroupID": 12239 - }, - { - "X": 67044, - "Y": 512, - "Z": 42424, - "Room": 80, - "KeyItemGroupID": 12239 - }, - { - "X": 67083, - "Y": 512, - "Z": 45537, - "Room": 80, - "KeyItemGroupID": 12239 - }, - { - "X": 80384, - "Y": 3072, - "Z": 30208, - "Room": 75, - "KeyItemGroupID": 12239 - }, - { - "X": 73319, - "Y": 512, - "Z": 26118, - "Room": 58, - "KeyItemGroupID": 12239 - } - ], - "SHORE.TR2": [ - { - "X": 32294, - "Y": 3119, - "Z": 93791, - "Room": 130, - "KeyItemGroupID": 17222 - }, - { - "X": 35305, - "Y": 2560, - "Z": 91662, - "Room": 164, - "KeyItemGroupID": 17222 - }, - { - "X": 25088, - "Y": 2432, - "Z": 93696, - "Room": 53, - "KeyItemGroupID": 17222 - }, - { - "X": 30199, - "Y": -1024, - "Z": 89647, - "Room": 120, - "KeyItemGroupID": 17222 - }, - { - "X": 34282, - "Y": -1024, - "Z": 89553, - "Room": 121, - "KeyItemGroupID": 17222 - }, - { - "X": 36352, - "Y": -2304, - "Z": 94720, - "Room": 127, - "KeyItemGroupID": 17222 - }, - { - "X": 42496, - "Y": -2560, - "Z": 91648, - "Room": 134, - "KeyItemGroupID": 17222 - }, - { - "X": 38927, - "Y": -768, - "Z": 91133, - "Room": 121, - "KeyItemGroupID": 17222 - }, - { - "X": 27146, - "Y": -773, - "Z": 90655, - "Room": 120, - "KeyItemGroupID": 17222 - }, - { - "X": 27637, - "Y": 1789, - "Z": 91735, - "Room": 135, - "KeyItemGroupID": 17222 - }, - { - "X": 37914, - "Y": -4096, - "Z": 87525, - "Room": 121, - "KeyItemGroupID": 17326 - }, - { - "X": 28168, - "Y": -5616, - "Z": 87583, - "Room": 120, - "KeyItemGroupID": 17326 - }, - { - "X": 29164, - "Y": -4352, - "Z": 88496, - "Room": 120, - "KeyItemGroupID": 17326 - }, - { - "X": 41471, - "Y": -4217, - "Z": 87576, - "Room": 121, - "KeyItemGroupID": 17326 - }, - { - "X": 20998, - "Y": -6400, - "Z": 86528, - "Room": 123, - "KeyItemGroupID": 17326 - }, - { - "X": 25088, - "Y": -7424, - "Z": 84480, - "Room": 178, - "KeyItemGroupID": 17326 - }, - { - "X": 22016, - "Y": -2048, - "Z": 89600, - "Room": 119, - "KeyItemGroupID": 17326 - }, - { - "X": 18949, - "Y": -1020, - "Z": 92691, - "Room": 119, - "KeyItemGroupID": 17326 - }, - { - "X": 14848, - "Y": -384, - "Z": 78336, - "Room": 14, - "KeyItemGroupID": 17326 - }, - { - "X": 16805, - "Y": -6866, - "Z": 86505, - "Room": 122, - "KeyItemGroupID": 17329 - }, - { - "X": 12780, - "Y": -6019, - "Z": 85516, - "Room": 122, - "KeyItemGroupID": 17329 - }, - { - "X": 13861, - "Y": -5888, - "Z": 88511, - "Room": 122, - "KeyItemGroupID": 17329 - }, - { - "X": 15827, - "Y": -5888, - "Z": 88620, - "Room": 122, - "KeyItemGroupID": 17329 - }, - { - "X": 17120, - "Y": -5888, - "Z": 90422, - "Room": 122, - "KeyItemGroupID": 17329 - }, - { - "X": 17920, - "Y": -6784, - "Z": 92672, - "Room": 123, - "KeyItemGroupID": 17329 - }, - { - "X": 13942, - "Y": -256, - "Z": 79425, - "Room": 14, - "KeyItemGroupID": 17329 - }, - { - "X": 17803, - "Y": -256, - "Z": 79586, - "Room": 14, - "KeyItemGroupID": 17329 - }, - { - "X": 15828, - "Y": -1024, - "Z": 81705, - "Room": 14, - "KeyItemGroupID": 17329 - }, - { - "X": 18944, - "Y": -1792, - "Z": 80384, - "Room": 14, - "KeyItemGroupID": 17329 - }, - { - "X": 31229, - "Y": 1666, - "Z": 17914, - "Room": 7, - "KeyItemGroupID": 17231 - }, - { - "X": 14848, - "Y": -1280, - "Z": 26112, - "Room": 3, - "KeyItemGroupID": 17231 - }, - { - "X": 14873, - "Y": -128, - "Z": 25090, - "Room": 3, - "KeyItemGroupID": 17231 - }, - { - "X": 23527, - "Y": 3318, - "Z": 29658, - "Room": 7, - "KeyItemGroupID": 17231 - }, - { - "X": 31255, - "Y": 2048, - "Z": 30190, - "Room": 7, - "KeyItemGroupID": 17231 - }, - { - "X": 23058, - "Y": -249, - "Z": 36837, - "Room": 173, - "KeyItemGroupID": 17231 - }, - { - "X": 30500, - "Y": -201, - "Z": 36065, - "Room": 0, - "KeyItemGroupID": 17231 - }, - { - "X": 21579, - "Y": -428, - "Z": 43902, - "Room": 173, - "KeyItemGroupID": 17231 - }, - { - "X": 14421, - "Y": -450, - "Z": 45834, - "Room": 2, - "KeyItemGroupID": 17231 - }, - { - "X": 8761, - "Y": -436, - "Z": 46801, - "Room": 2, - "KeyItemGroupID": 17231 - }, - { - "X": 3814, - "Y": -179, - "Z": 45274, - "Room": 2, - "KeyItemGroupID": 17231 - }, - { - "X": 2582, - "Y": 645, - "Z": 41524, - "Room": 5, - "KeyItemGroupID": 17231 - }, - { - "X": 11234, - "Y": 2304, - "Z": 36839, - "Room": 5, - "KeyItemGroupID": 17231 - }, - { - "X": 13844, - "Y": -555, - "Z": 38393, - "Room": 2, - "KeyItemGroupID": 17231 - } - ], - "CRASH.TR2": [ - { - "X": 35337, - "Y": 2048, - "Z": 59890, - "Room": 46, - "KeyItemGroupID": 18270 - }, - { - "X": 39501, - "Y": 2048, - "Z": 63990, - "Room": 46, - "KeyItemGroupID": 18270 - }, - { - "X": 32751, - "Y": 2048, - "Z": 66583, - "Room": 46, - "KeyItemGroupID": 18270 - }, - { - "X": 23814, - "Y": 1794, - "Z": 62455, - "Room": 47, - "KeyItemGroupID": 18270 - }, - { - "X": 19968, - "Y": 1792, - "Z": 68096, - "Room": 47, - "KeyItemGroupID": 18270 - }, - { - "X": 18944, - "Y": 1024, - "Z": 50688, - "Room": 45, - "KeyItemGroupID": 18270 - }, - { - "X": 26112, - "Y": 2048, - "Z": 45568, - "Room": 45, - "KeyItemGroupID": 18270 - }, - { - "X": 20992, - "Y": 2048, - "Z": 47616, - "Room": 45, - "KeyItemGroupID": 18270 - }, - { - "X": 19968, - "Y": 2048, - "Z": 51712, - "Room": 45, - "KeyItemGroupID": 18270 - }, - { - "X": 27136, - "Y": 2048, - "Z": 51712, - "Room": 45, - "KeyItemGroupID": 18270 - }, - { - "X": 35330, - "Y": -512, - "Z": 45552, - "Room": 48, - "KeyItemGroupID": 18270 - }, - { - "X": 33308, - "Y": -512, - "Z": 55775, - "Room": 48, - "KeyItemGroupID": 18270 - }, - { - "X": 37376, - "Y": -1664, - "Z": 53760, - "Room": 53, - "KeyItemGroupID": 18270 - }, - { - "X": 41472, - "Y": -512, - "Z": 47616, - "Room": 48, - "KeyItemGroupID": 18270 - }, - { - "X": 50661, - "Y": -3072, - "Z": 49802, - "Room": 2, - "KeyItemGroupID": 18270 - }, - { - "X": 52209, - "Y": -252, - "Z": 44001, - "Room": 78, - "KeyItemGroupID": 18270 - }, - { - "X": 57341, - "Y": -764, - "Z": 44024, - "Room": 78, - "KeyItemGroupID": 18270 - }, - { - "X": 48639, - "Y": -2304, - "Z": 57853, - "Room": 6, - "KeyItemGroupID": 18270 - }, - { - "X": 50498, - "Y": -768, - "Z": 61943, - "Room": 23, - "KeyItemGroupID": 18270 - }, - { - "X": 51644, - "Y": -2304, - "Z": 59957, - "Room": 23, - "KeyItemGroupID": 18270 - }, - { - "X": 61952, - "Y": -2048, - "Z": 62976, - "Room": 25, - "KeyItemGroupID": 18270 - }, - { - "X": 64000, - "Y": 0, - "Z": 15872, - "Room": 72, - "KeyItemGroupID": 18255 - }, - { - "X": 64000, - "Y": 0, - "Z": 18944, - "Room": 72, - "KeyItemGroupID": 18255 - }, - { - "X": 61952, - "Y": 256, - "Z": 18944, - "Room": 72, - "KeyItemGroupID": 18255 - }, - { - "X": 61952, - "Y": 256, - "Z": 19968, - "Room": 72, - "KeyItemGroupID": 18255 - }, - { - "X": 58880, - "Y": 0, - "Z": 20992, - "Room": 72, - "KeyItemGroupID": 18255 - }, - { - "X": 70172, - "Y": -270, - "Z": 22975, - "Room": 57, - "KeyItemGroupID": 18255 - }, - { - "X": 72221, - "Y": 2560, - "Z": 29181, - "Room": 61, - "KeyItemGroupID": 18255 - }, - { - "X": 68068, - "Y": 2560, - "Z": 26149, - "Room": 61, - "KeyItemGroupID": 18255 - }, - { - "X": 63972, - "Y": 2560, - "Z": 26184, - "Room": 61, - "KeyItemGroupID": 18255 - }, - { - "X": 68096, - "Y": 0, - "Z": 30208, - "Room": 57, - "KeyItemGroupID": 18255 - }, - { - "X": 68096, - "Y": -4608, - "Z": 31232, - "Room": 59, - "KeyItemGroupID": 18255 - }, - { - "X": 68096, - "Y": -6144, - "Z": 27136, - "Room": 60, - "KeyItemGroupID": 18255 - }, - { - "X": 72192, - "Y": -6144, - "Z": 30208, - "Room": 60, - "KeyItemGroupID": 18255 - }, - { - "X": 70144, - "Y": -8576, - "Z": 25088, - "Room": 62, - "KeyItemGroupID": 18255 - }, - { - "X": 63994, - "Y": -6144, - "Z": 24022, - "Room": 60, - "KeyItemGroupID": 18255 - }, - { - "X": 71170, - "Y": 0, - "Z": 58792, - "Room": 1, - "KeyItemGroupID": 18255 - }, - { - "X": 78332, - "Y": 0, - "Z": 56824, - "Room": 1, - "KeyItemGroupID": 18255 - }, - { - "X": 80340, - "Y": 0, - "Z": 44551, - "Room": 1, - "KeyItemGroupID": 18255 - }, - { - "X": 56832, - "Y": 1024, - "Z": 39424, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 52736, - "Y": 1024, - "Z": 36352, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 52736, - "Y": 1024, - "Z": 33280, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 54784, - "Y": 1024, - "Z": 30208, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 56832, - "Y": 1024, - "Z": 30208, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 58880, - "Y": 1024, - "Z": 33280, - "Room": 29, - "KeyItemGroupID": 18255 - }, - { - "X": 58880, - "Y": 1024, - "Z": 36352, - "Room": 29, - "KeyItemGroupID": 18255 - } - ], - "ROOFS.TR2": [ - { - "X": 63054, - "Y": -19200, - "Z": 48568, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 57856, - "Y": -19200, - "Z": 43500, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 52694, - "Y": -19200, - "Z": 48596, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 57856, - "Y": -19200, - "Z": 54784, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 54784, - "Y": -19200, - "Z": 48640, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 51716, - "Y": -19200, - "Z": 42481, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 63012, - "Y": -19200, - "Z": 42545, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 51659, - "Y": -19200, - "Z": 54749, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 62947, - "Y": -19200, - "Z": 54771, - "Room": 2, - "KeyItemGroupID": 21225 - }, - { - "X": 50688, - "Y": -13312, - "Z": 55808, - "Room": 140, - "KeyItemGroupID": 21225 - }, - { - "X": 57841, - "Y": -18176, - "Z": 41452, - "Room": 106, - "KeyItemGroupID": 21225 - }, - { - "X": 57922, - "Y": -18176, - "Z": 38432, - "Room": 106, - "KeyItemGroupID": 21225 - }, - { - "X": 57821, - "Y": -20224, - "Z": 34307, - "Room": 112, - "KeyItemGroupID": 21225 - }, - { - "X": 61873, - "Y": -19200, - "Z": 35310, - "Room": 112, - "KeyItemGroupID": 21225 - }, - { - "X": 53799, - "Y": -19200, - "Z": 35366, - "Room": 112, - "KeyItemGroupID": 21225 - }, - { - "X": 62976, - "Y": -15104, - "Z": 41472, - "Room": 108, - "KeyItemGroupID": 21225 - }, - { - "X": 63958, - "Y": -19200, - "Z": 26179, - "Room": 112, - "KeyItemGroupID": 21225 - }, - { - "X": 41472, - "Y": -15104, - "Z": 53760, - "Room": 158, - "KeyItemGroupID": 21396 - }, - { - "X": 40448, - "Y": -15104, - "Z": 53760, - "Room": 158, - "KeyItemGroupID": 21396 - }, - { - "X": 37376, - "Y": -8704, - "Z": 47616, - "Room": 174, - "KeyItemGroupID": 21396 - }, - { - "X": 37376, - "Y": -8704, - "Z": 50688, - "Room": 174, - "KeyItemGroupID": 21396 - }, - { - "X": 41472, - "Y": -12032, - "Z": 50688, - "Room": 173, - "KeyItemGroupID": 21396 - }, - { - "X": 41472, - "Y": -8704, - "Z": 47616, - "Room": 174, - "KeyItemGroupID": 21396 - }, - { - "X": 43520, - "Y": -13824, - "Z": 46592, - "Room": 156, - "KeyItemGroupID": 21396 - }, - { - "X": 41472, - "Y": -13824, - "Z": 46592, - "Room": 156, - "KeyItemGroupID": 21396 - }, - { - "X": 38400, - "Y": -14848, - "Z": 45568, - "Room": 95, - "KeyItemGroupID": 21396 - }, - { - "X": 36400, - "Y": -12288, - "Z": 45541, - "Room": 96, - "KeyItemGroupID": 21396 - }, - { - "X": 42493, - "Y": -13568, - "Z": 41486, - "Room": 96, - "KeyItemGroupID": 21396 - }, - { - "X": 36262, - "Y": -13568, - "Z": 41496, - "Room": 96, - "KeyItemGroupID": 21396 - }, - { - "X": 39424, - "Y": -17792, - "Z": 45568, - "Room": 86, - "KeyItemGroupID": 21396 - }, - { - "X": 37389, - "Y": -16384, - "Z": 41387, - "Room": 86, - "KeyItemGroupID": 21396 - }, - { - "X": 43552, - "Y": -16520, - "Z": 42493, - "Room": 86, - "KeyItemGroupID": 21396 - }, - { - "X": 44557, - "Y": -17926, - "Z": 45591, - "Room": 86, - "KeyItemGroupID": 21396 - } - ], - "SEWER.TR2": [ - { - "X": 60994, - "Y": -8704, - "Z": 84520, - "Room": 110, - "KeyItemGroupID": 22262 - }, - { - "X": 60916, - "Y": -8704, - "Z": 88659, - "Room": 110, - "KeyItemGroupID": 22262 - }, - { - "X": 69144, - "Y": -8704, - "Z": 88594, - "Room": 110, - "KeyItemGroupID": 22262 - }, - { - "X": 67018, - "Y": -8704, - "Z": 84514, - "Room": 110, - "KeyItemGroupID": 22262 - }, - { - "X": 63003, - "Y": -5888, - "Z": 89615, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 67085, - "Y": -5888, - "Z": 89594, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 68008, - "Y": -5888, - "Z": 89616, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 66021, - "Y": -7424, - "Z": 85547, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 63969, - "Y": -7424, - "Z": 85542, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 68097, - "Y": -5888, - "Z": 79384, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 66030, - "Y": -5888, - "Z": 79348, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 63999, - "Y": -5888, - "Z": 79365, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 61923, - "Y": -5888, - "Z": 79289, - "Room": 37, - "KeyItemGroupID": 22262 - }, - { - "X": 70144, - "Y": -8704, - "Z": 82432, - "Room": 110, - "KeyItemGroupID": 22262 - }, - { - "X": 43563, - "Y": 1023, - "Z": 24071, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 43576, - "Y": 1024, - "Z": 25082, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 49641, - "Y": 1024, - "Z": 23043, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 49707, - "Y": 1024, - "Z": 22003, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 50687, - "Y": 1024, - "Z": 19893, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 50759, - "Y": 1024, - "Z": 25099, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 52779, - "Y": 1024, - "Z": 23060, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 52763, - "Y": 1024, - "Z": 22013, - "Room": 1, - "KeyItemGroupID": 22334 - }, - { - "X": 61951, - "Y": 768, - "Z": 56904, - "Room": 42, - "KeyItemGroupID": 22247 - }, - { - "X": 63986, - "Y": 768, - "Z": 56956, - "Room": 42, - "KeyItemGroupID": 22247 - }, - { - "X": 40529, - "Y": 2287, - "Z": 55793, - "Room": 51, - "KeyItemGroupID": 22247 - }, - { - "X": 40606, - "Y": 2302, - "Z": 54935, - "Room": 51, - "KeyItemGroupID": 22247 - }, - { - "X": 73170, - "Y": 3054, - "Z": 55830, - "Room": 148, - "KeyItemGroupID": 22247 - }, - { - "X": 73143, - "Y": 3035, - "Z": 54711, - "Room": 148, - "KeyItemGroupID": 22247 - }, - { - "X": 57312, - "Y": 1536, - "Z": 55316, - "Room": 42, - "KeyItemGroupID": 22247 - }, - { - "X": 56804, - "Y": 768, - "Z": 59399, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 58862, - "Y": 768, - "Z": 59438, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 60935, - "Y": 766, - "Z": 59398, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 50658, - "Y": 768, - "Z": 60941, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 50696, - "Y": 768, - "Z": 62993, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 54784, - "Y": 768, - "Z": 56832, - "Room": 42, - "KeyItemGroupID": 22247 - }, - { - "X": 54784, - "Y": 768, - "Z": 57856, - "Room": 42, - "KeyItemGroupID": 22247 - }, - { - "X": 52713, - "Y": 256, - "Z": 58855, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 61935, - "Y": 768, - "Z": 60928, - "Room": 41, - "KeyItemGroupID": 22247 - }, - { - "X": 44514, - "Y": -4096, - "Z": 84471, - "Room": 89, - "KeyItemGroupID": 22301 - }, - { - "X": 44498, - "Y": -2816, - "Z": 88453, - "Room": 77, - "KeyItemGroupID": 22301 - }, - { - "X": 46583, - "Y": -2304, - "Z": 85565, - "Room": 77, - "KeyItemGroupID": 22301 - }, - { - "X": 57855, - "Y": -5888, - "Z": 89591, - "Room": 82, - "KeyItemGroupID": 22301 - }, - { - "X": 41530, - "Y": -6912, - "Z": 86540, - "Room": 92, - "KeyItemGroupID": 22301 - }, - { - "X": 51705, - "Y": -4096, - "Z": 78339, - "Room": 67, - "KeyItemGroupID": 22301 - }, - { - "X": 52802, - "Y": -4096, - "Z": 81413, - "Room": 60, - "KeyItemGroupID": 22301 - }, - { - "X": 40456, - "Y": -2560, - "Z": 91650, - "Room": 131, - "KeyItemGroupID": 22301 - }, - { - "X": 55817, - "Y": -2048, - "Z": 91634, - "Room": 129, - "KeyItemGroupID": 22301 - }, - { - "X": 40444, - "Y": -3840, - "Z": 64034, - "Room": 55, - "KeyItemGroupID": 22301 - }, - { - "X": 45558, - "Y": -3328, - "Z": 73241, - "Room": 55, - "KeyItemGroupID": 22301 - }, - { - "X": 46633, - "Y": -2048, - "Z": 71165, - "Room": 118, - "KeyItemGroupID": 22301 - }, - { - "X": 38407, - "Y": -3328, - "Z": 68076, - "Room": 55, - "KeyItemGroupID": 22301 - }, - { - "X": 51722, - "Y": -2304, - "Z": 62970, - "Room": 69, - "KeyItemGroupID": 22235 - }, - { - "X": 51675, - "Y": -2048, - "Z": 61935, - "Room": 69, - "KeyItemGroupID": 22235 - }, - { - "X": 62976, - "Y": -2304, - "Z": 62976, - "Room": 69, - "KeyItemGroupID": 22235 - }, - { - "X": 62932, - "Y": -2304, - "Z": 61940, - "Room": 69, - "KeyItemGroupID": 22235 - }, - { - "X": 55813, - "Y": 512, - "Z": 67083, - "Room": 58, - "KeyItemGroupID": 22235 - }, - { - "X": 54777, - "Y": 2557, - "Z": 65019, - "Room": 102, - "KeyItemGroupID": 22235 - }, - { - "X": 54615, - "Y": 5120, - "Z": 66041, - "Room": 50, - "KeyItemGroupID": 22235 - }, - { - "X": 54797, - "Y": 9472, - "Z": 66052, - "Room": 64, - "KeyItemGroupID": 22235 - }, - { - "X": 57862, - "Y": 9728, - "Z": 66027, - "Room": 64, - "KeyItemGroupID": 22235 - }, - { - "X": 55816, - "Y": 12800, - "Z": 65015, - "Room": 6, - "KeyItemGroupID": 22235 - }, - { - "X": 57866, - "Y": 13568, - "Z": 66030, - "Room": 65, - "KeyItemGroupID": 22235 - }, - { - "X": 62977, - "Y": -5888, - "Z": 85479, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 60886, - "Y": -5888, - "Z": 85491, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 67068, - "Y": -5888, - "Z": 85454, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 69098, - "Y": -5888, - "Z": 85488, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 67050, - "Y": -1280, - "Z": 66563, - "Room": 40, - "KeyItemGroupID": 22243 - }, - { - "X": 67077, - "Y": -5888, - "Z": 77817, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 62954, - "Y": -5888, - "Z": 77818, - "Room": 37, - "KeyItemGroupID": 22243 - }, - { - "X": 62870, - "Y": 255, - "Z": 63755, - "Room": 39, - "KeyItemGroupID": 22243 - }, - { - "X": 49641, - "Y": -4608, - "Z": 34303, - "Room": 62, - "KeyItemGroupID": 22325 - }, - { - "X": 48633, - "Y": -4608, - "Z": 34308, - "Room": 62, - "KeyItemGroupID": 22325 - }, - { - "X": 46630, - "Y": -376, - "Z": 48669, - "Room": 43, - "KeyItemGroupID": 22325 - }, - { - "X": 55287, - "Y": 672, - "Z": 51589, - "Room": 53, - "KeyItemGroupID": 22325 - }, - { - "X": 60928, - "Y": 768, - "Z": 50688, - "Room": 43, - "KeyItemGroupID": 22325 - }, - { - "X": 58867, - "Y": 768, - "Z": 51698, - "Room": 53, - "KeyItemGroupID": 22325 - }, - { - "X": 41472, - "Y": -256, - "Z": 50688, - "Room": 18, - "KeyItemGroupID": 22325 - }, - { - "X": 49664, - "Y": -768, - "Z": 57856, - "Room": 45, - "KeyItemGroupID": 22325 - } - ], - "TOWER.TR2": [ - { - "X": 56852, - "Y": -4352, - "Z": 28120, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 56838, - "Y": -4096, - "Z": 29195, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 59870, - "Y": -5632, - "Z": 30227, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 59912, - "Y": -4409, - "Z": 33287, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 59801, - "Y": -3840, - "Z": 28158, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 58851, - "Y": -4352, - "Z": 26131, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 50674, - "Y": -5376, - "Z": 25106, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 49658, - "Y": -7936, - "Z": 26133, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 46596, - "Y": -8730, - "Z": 31232, - "Room": 72, - "KeyItemGroupID": 23293 - }, - { - "X": 46606, - "Y": -5888, - "Z": 27141, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 47633, - "Y": -5245, - "Z": 25063, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 48661, - "Y": -5376, - "Z": 31266, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 50659, - "Y": -4225, - "Z": 31237, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 53758, - "Y": -6656, - "Z": 35306, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 49677, - "Y": -4483, - "Z": 37369, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 49717, - "Y": -4352, - "Z": 35379, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 48640, - "Y": -1280, - "Z": 33259, - "Room": 134, - "KeyItemGroupID": 23293 - }, - { - "X": 46577, - "Y": -2304, - "Z": 37337, - "Room": 134, - "KeyItemGroupID": 23293 - }, - { - "X": 46592, - "Y": -1280, - "Z": 40448, - "Room": 134, - "KeyItemGroupID": 23293 - }, - { - "X": 53760, - "Y": -1536, - "Z": 37376, - "Room": 47, - "KeyItemGroupID": 23293 - }, - { - "X": 59078, - "Y": -5462, - "Z": 35160, - "Room": 69, - "KeyItemGroupID": 23293 - }, - { - "X": 58882, - "Y": -2304, - "Z": 20962, - "Room": 25, - "KeyItemGroupID": 23293 - }, - { - "X": 40448, - "Y": -30464, - "Z": 34304, - "Room": 147, - "KeyItemGroupID": 23283 - }, - { - "X": 44544, - "Y": -30464, - "Z": 29184, - "Room": 152, - "KeyItemGroupID": 23283 - }, - { - "X": 44544, - "Y": -30464, - "Z": 28160, - "Room": 164, - "KeyItemGroupID": 23283 - }, - { - "X": 54784, - "Y": -28928, - "Z": 27136, - "Room": 173, - "KeyItemGroupID": 23283 - }, - { - "X": 51794, - "Y": -27007, - "Z": 26112, - "Room": 56, - "KeyItemGroupID": 23283 - }, - { - "X": 49637, - "Y": -22784, - "Z": 31244, - "Room": 15, - "KeyItemGroupID": 23283 - }, - { - "X": 51683, - "Y": -20480, - "Z": 27111, - "Room": 18, - "KeyItemGroupID": 23283 - }, - { - "X": 49623, - "Y": -23592, - "Z": 28185, - "Room": 15, - "KeyItemGroupID": 23283 - }, - { - "X": 51704, - "Y": -14336, - "Z": 27163, - "Room": 35, - "KeyItemGroupID": 23283 - }, - { - "X": 51685, - "Y": -18688, - "Z": 30236, - "Room": 18, - "KeyItemGroupID": 23283 - }, - { - "X": 43520, - "Y": -13824, - "Z": 31232, - "Room": 73, - "KeyItemGroupID": 23283 - }, - { - "X": 59887, - "Y": -13881, - "Z": 31262, - "Room": 77, - "KeyItemGroupID": 23283 - }, - { - "X": 66048, - "Y": -14592, - "Z": 25088, - "Room": 20, - "KeyItemGroupID": 23283 - }, - { - "X": 73233, - "Y": -15360, - "Z": 26143, - "Room": 174, - "KeyItemGroupID": 23283 - }, - { - "X": 73246, - "Y": -15360, - "Z": 22970, - "Room": 174, - "KeyItemGroupID": 23283 - }, - { - "X": 69120, - "Y": -18432, - "Z": 25088, - "Room": 54, - "KeyItemGroupID": 23283 - } - ], - "NEVADA.TR2": [ - { - "X": 5632, - "Y": -3328, - "Z": 61952, - "Room": 78, - "KeyItemGroupID": 14294 - }, - { - "X": 25088, - "Y": -3200, - "Z": 61952, - "Room": 43, - "KeyItemGroupID": 14294 - }, - { - "X": 27629, - "Y": -3328, - "Z": 57931, - "Room": 47, - "KeyItemGroupID": 14294 - }, - { - "X": 13824, - "Y": -3328, - "Z": 53760, - "Room": 48, - "KeyItemGroupID": 14294 - }, - { - "X": 14875, - "Y": -3328, - "Z": 62998, - "Room": 130, - "KeyItemGroupID": 14294 - }, - { - "X": 27225, - "Y": -3328, - "Z": 50686, - "Room": 48, - "KeyItemGroupID": 14294 - }, - { - "X": 19967, - "Y": -3200, - "Z": 46437, - "Room": 41, - "KeyItemGroupID": 14294 - }, - { - "X": 23043, - "Y": -3200, - "Z": 43519, - "Room": 41, - "KeyItemGroupID": 14294 - }, - { - "X": 26148, - "Y": -3328, - "Z": 42548, - "Room": 37, - "KeyItemGroupID": 14294 - }, - { - "X": 22021, - "Y": -8704, - "Z": 74221, - "Room": 107, - "KeyItemGroupID": 14294 - }, - { - "X": 31136, - "Y": -10240, - "Z": 76258, - "Room": 65, - "KeyItemGroupID": 14294 - }, - { - "X": 34233, - "Y": -10240, - "Z": 73167, - "Room": 65, - "KeyItemGroupID": 14294 - }, - { - "X": 42477, - "Y": -9728, - "Z": 78370, - "Room": 65, - "KeyItemGroupID": 14294 - }, - { - "X": 42496, - "Y": -9728, - "Z": 74240, - "Room": 65, - "KeyItemGroupID": 14294 - }, - { - "X": 30241, - "Y": -9728, - "Z": 68136, - "Room": 65, - "KeyItemGroupID": 14294 - }, - { - "X": 36265, - "Y": -12800, - "Z": 86511, - "Room": 119, - "KeyItemGroupID": 14294 - }, - { - "X": 30202, - "Y": -6695, - "Z": 56875, - "Room": 179, - "KeyItemGroupID": 14294 - }, - { - "X": 36333, - "Y": -5376, - "Z": 78332, - "Room": 111, - "KeyItemGroupID": 14294 - }, - { - "X": 34301, - "Y": -3199, - "Z": 42495, - "Room": 30, - "KeyItemGroupID": 14294 - }, - { - "X": 41472, - "Y": -3840, - "Z": 43520, - "Room": 30, - "KeyItemGroupID": 14294 - }, - { - "X": 46592, - "Y": -4096, - "Z": 44544, - "Room": 35, - "KeyItemGroupID": 14294 - }, - { - "X": 41472, - "Y": 2304, - "Z": 51712, - "Room": 33, - "KeyItemGroupID": 14294 - }, - { - "X": 43520, - "Y": 7936, - "Z": 43520, - "Room": 31, - "KeyItemGroupID": 14294 - }, - { - "X": 28160, - "Y": 8704, - "Z": 42496, - "Room": 40, - "KeyItemGroupID": 14294 - }, - { - "X": 28160, - "Y": 9472, - "Z": 39424, - "Room": 40, - "KeyItemGroupID": 14294 - }, - { - "X": 39424, - "Y": -128, - "Z": 60928, - "Room": 174, - "KeyItemGroupID": 14294 - }, - { - "X": 48620, - "Y": -5888, - "Z": 79358, - "Room": 154, - "KeyItemGroupID": 14378 - }, - { - "X": 48626, - "Y": -5888, - "Z": 74265, - "Room": 154, - "KeyItemGroupID": 14378 - }, - { - "X": 53716, - "Y": -2816, - "Z": 80362, - "Room": 151, - "KeyItemGroupID": 14378 - }, - { - "X": 46519, - "Y": -2943, - "Z": 71168, - "Room": 149, - "KeyItemGroupID": 14378 - }, - { - "X": 51712, - "Y": -2816, - "Z": 68096, - "Room": 115, - "KeyItemGroupID": 14378 - }, - { - "X": 49664, - "Y": -2816, - "Z": 62976, - "Room": 114, - "KeyItemGroupID": 14378 - }, - { - "X": 45828, - "Y": -2935, - "Z": 63967, - "Room": 114, - "KeyItemGroupID": 14378 - }, - { - "X": 45598, - "Y": -3072, - "Z": 65041, - "Room": 113, - "KeyItemGroupID": 14378 - }, - { - "X": 43528, - "Y": -3072, - "Z": 65031, - "Room": 113, - "KeyItemGroupID": 14378 - }, - { - "X": 42496, - "Y": -3072, - "Z": 66048, - "Room": 113, - "KeyItemGroupID": 14378 - }, - { - "X": 45568, - "Y": -3072, - "Z": 69120, - "Room": 113, - "KeyItemGroupID": 14378 - }, - { - "X": 47616, - "Y": -3072, - "Z": 77312, - "Room": 156, - "KeyItemGroupID": 14378 - }, - { - "X": 55821, - "Y": -2816, - "Z": 73239, - "Room": 152, - "KeyItemGroupID": 14378 - }, - { - "X": 66048, - "Y": 0, - "Z": 69120, - "Room": 148, - "KeyItemGroupID": 14378 - }, - { - "X": 68096, - "Y": 0, - "Z": 68096, - "Room": 148, - "KeyItemGroupID": 14378 - }, - { - "X": 65044, - "Y": 0, - "Z": 78323, - "Room": 144, - "KeyItemGroupID": 14378 - }, - { - "X": 70985, - "Y": 0, - "Z": 77133, - "Room": 144, - "KeyItemGroupID": 14378 - }, - { - "X": 54784, - "Y": -2816, - "Z": 56832, - "Room": 116, - "KeyItemGroupID": 14378 - } - ], - "COMPOUND.TR2": [ - { - "X": 93744, - "Y": -4864, - "Z": 82426, - "Room": 74, - "KeyItemGroupID": 15279 - }, - { - "X": 95720, - "Y": -4864, - "Z": 72180, - "Room": 74, - "KeyItemGroupID": 15279 - }, - { - "X": 88574, - "Y": -6656, - "Z": 80414, - "Room": 76, - "KeyItemGroupID": 15279 - }, - { - "X": 74272, - "Y": -1792, - "Z": 75252, - "Room": 39, - "KeyItemGroupID": 15279 - }, - { - "X": 75244, - "Y": -1536, - "Z": 77328, - "Room": 39, - "KeyItemGroupID": 15279 - }, - { - "X": 70139, - "Y": 1280, - "Z": 53740, - "Room": 65, - "KeyItemGroupID": 15279 - }, - { - "X": 78325, - "Y": 1023, - "Z": 58897, - "Room": 66, - "KeyItemGroupID": 15279 - }, - { - "X": 77342, - "Y": 1024, - "Z": 56860, - "Room": 65, - "KeyItemGroupID": 15279 - }, - { - "X": 75285, - "Y": 1280, - "Z": 53796, - "Room": 65, - "KeyItemGroupID": 15279 - }, - { - "X": 72193, - "Y": -3584, - "Z": 60966, - "Room": 33, - "KeyItemGroupID": 15239 - }, - { - "X": 71202, - "Y": -3584, - "Z": 53788, - "Room": 33, - "KeyItemGroupID": 15239 - }, - { - "X": 75263, - "Y": -3584, - "Z": 53771, - "Room": 33, - "KeyItemGroupID": 15239 - }, - { - "X": 75254, - "Y": -3584, - "Z": 60924, - "Room": 33, - "KeyItemGroupID": 15239 - }, - { - "X": 77300, - "Y": -3840, - "Z": 56835, - "Room": 33, - "KeyItemGroupID": 15239 - }, - { - "X": 77340, - "Y": -2048, - "Z": 60960, - "Room": 34, - "KeyItemGroupID": 15239 - }, - { - "X": 70275, - "Y": -2048, - "Z": 60908, - "Room": 34, - "KeyItemGroupID": 15239 - }, - { - "X": 73216, - "Y": -2048, - "Z": 53760, - "Room": 34, - "KeyItemGroupID": 15239 - }, - { - "X": 78331, - "Y": 512, - "Z": 49713, - "Room": 168, - "KeyItemGroupID": 15239 - }, - { - "X": 79352, - "Y": 6144, - "Z": 48643, - "Room": 154, - "KeyItemGroupID": 15239 - }, - { - "X": 79348, - "Y": 9472, - "Z": 49596, - "Room": 83, - "KeyItemGroupID": 15239 - }, - { - "X": 82466, - "Y": 4334, - "Z": 55842, - "Room": 153, - "KeyItemGroupID": 15239 - }, - { - "X": 78342, - "Y": -256, - "Z": 56812, - "Room": 61, - "KeyItemGroupID": 15239 - }, - { - "X": 14813, - "Y": -256, - "Z": 23035, - "Room": 1, - "KeyItemGroupID": 15234 - }, - { - "X": 11798, - "Y": -256, - "Z": 23047, - "Room": 0, - "KeyItemGroupID": 15234 - }, - { - "X": 8688, - "Y": -256, - "Z": 23078, - "Room": 113, - "KeyItemGroupID": 15234 - }, - { - "X": 8726, - "Y": -256, - "Z": 38387, - "Room": 3, - "KeyItemGroupID": 15234 - }, - { - "X": 11740, - "Y": -256, - "Z": 38420, - "Room": 4, - "KeyItemGroupID": 15234 - }, - { - "X": 14864, - "Y": -256, - "Z": 38402, - "Room": 5, - "KeyItemGroupID": 15234 - }, - { - "X": 17894, - "Y": -256, - "Z": 38354, - "Room": 6, - "KeyItemGroupID": 15234 - }, - { - "X": 11760, - "Y": 0, - "Z": 31244, - "Room": 117, - "KeyItemGroupID": 15234 - }, - { - "X": 22004, - "Y": 256, - "Z": 26086, - "Room": 58, - "KeyItemGroupID": 15234 - }, - { - "X": 21052, - "Y": 2048, - "Z": 29187, - "Room": 49, - "KeyItemGroupID": 15234 - }, - { - "X": 21019, - "Y": 2048, - "Z": 26103, - "Room": 50, - "KeyItemGroupID": 15234 - }, - { - "X": 19942, - "Y": 2048, - "Z": 17900, - "Room": 32, - "KeyItemGroupID": 15234 - }, - { - "X": 19981, - "Y": -2816, - "Z": 38421, - "Room": 63, - "KeyItemGroupID": 15234 - }, - { - "X": 63978, - "Y": -9472, - "Z": 50590, - "Room": 101, - "KeyItemGroupID": 15355 - }, - { - "X": 40403, - "Y": -2304, - "Z": 50683, - "Room": 87, - "KeyItemGroupID": 15355 - }, - { - "X": 66049, - "Y": -8704, - "Z": 45556, - "Room": 130, - "KeyItemGroupID": 15355 - }, - { - "X": 67007, - "Y": -8704, - "Z": 43578, - "Room": 130, - "KeyItemGroupID": 15355 - }, - { - "X": 69032, - "Y": -9728, - "Z": 46303, - "Room": 130, - "KeyItemGroupID": 15355 - }, - { - "X": 58971, - "Y": -8960, - "Z": 36330, - "Room": 138, - "KeyItemGroupID": 15355 - }, - { - "X": 58915, - "Y": -8960, - "Z": 34323, - "Room": 138, - "KeyItemGroupID": 15355 - }, - { - "X": 58946, - "Y": -4864, - "Z": 33307, - "Room": 159, - "KeyItemGroupID": 15355 - }, - { - "X": 59968, - "Y": -4864, - "Z": 20037, - "Room": 160, - "KeyItemGroupID": 15355 - }, - { - "X": 53760, - "Y": -4864, - "Z": 22016, - "Room": 160, - "KeyItemGroupID": 15355 - }, - { - "X": 69085, - "Y": -3840, - "Z": 34316, - "Room": 106, - "KeyItemGroupID": 15355 - }, - { - "X": 77349, - "Y": -3840, - "Z": 29157, - "Room": 108, - "KeyItemGroupID": 15355 - }, - { - "X": 73237, - "Y": -3584, - "Z": 27158, - "Room": 105, - "KeyItemGroupID": 15355 - }, - { - "X": 51657, - "Y": -4864, - "Z": 17898, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 51717, - "Y": -4864, - "Z": 21955, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 54781, - "Y": -4864, - "Z": 12777, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 58370, - "Y": -4608, - "Z": 13280, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 58400, - "Y": -4608, - "Z": 16409, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 51691, - "Y": -4864, - "Z": 26109, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 51700, - "Y": -4864, - "Z": 30227, - "Room": 160, - "KeyItemGroupID": 15366 - }, - { - "X": 56887, - "Y": -9216, - "Z": 39442, - "Room": 138, - "KeyItemGroupID": 15366 - }, - { - "X": 71122, - "Y": -3584, - "Z": 33273, - "Room": 106, - "KeyItemGroupID": 15366 - }, - { - "X": 75332, - "Y": -3584, - "Z": 31242, - "Room": 108, - "KeyItemGroupID": 15366 - }, - { - "X": 74277, - "Y": -7936, - "Z": 37068, - "Room": 145, - "KeyItemGroupID": 15366 - }, - { - "X": 66033, - "Y": -10240, - "Z": 40450, - "Room": 130, - "KeyItemGroupID": 15366 - }, - { - "X": 62976, - "Y": -10496, - "Z": 43520, - "Room": 149, - "KeyItemGroupID": 15366 - }, - { - "X": 67097, - "Y": -256, - "Z": 7666, - "Room": 129, - "KeyItemGroupID": 15350 - }, - { - "X": 68081, - "Y": 5120, - "Z": 17944, - "Room": 41, - "KeyItemGroupID": 15350 - }, - { - "X": 74229, - "Y": 5120, - "Z": 18014, - "Room": 41, - "KeyItemGroupID": 15350 - }, - { - "X": 74206, - "Y": 5120, - "Z": 24065, - "Room": 41, - "KeyItemGroupID": 15350 - }, - { - "X": 68087, - "Y": 4864, - "Z": 24039, - "Room": 41, - "KeyItemGroupID": 15350 - }, - { - "X": 72176, - "Y": 8960, - "Z": 23089, - "Room": 124, - "KeyItemGroupID": 15350 - }, - { - "X": 63079, - "Y": 8704, - "Z": 19945, - "Room": 142, - "KeyItemGroupID": 15350 - }, - { - "X": 64004, - "Y": 8704, - "Z": 31229, - "Room": 144, - "KeyItemGroupID": 15350 - }, - { - "X": 77312, - "Y": 8960, - "Z": 28160, - "Room": 162, - "KeyItemGroupID": 15350 - }, - { - "X": 76241, - "Y": 8960, - "Z": 20972, - "Room": 162, - "KeyItemGroupID": 15350 - }, - { - "X": 81414, - "Y": 14592, - "Z": 17874, - "Room": 183, - "KeyItemGroupID": 15350 - }, - { - "X": 74230, - "Y": 14592, - "Z": 24025, - "Room": 161, - "KeyItemGroupID": 15350 - }, - { - "X": 68031, - "Y": 14592, - "Z": 24065, - "Room": 161, - "KeyItemGroupID": 15350 - }, - { - "X": 68110, - "Y": 14592, - "Z": 17901, - "Room": 161, - "KeyItemGroupID": 15350 - }, - { - "X": 71169, - "Y": 8704, - "Z": 17931, - "Room": 118, - "KeyItemGroupID": 15350 - }, - { - "X": 75252, - "Y": 8960, - "Z": 19985, - "Room": 118, - "KeyItemGroupID": 15350 - }, - { - "X": 82414, - "Y": -256, - "Z": 5638, - "Room": 177, - "KeyItemGroupID": 15335 - }, - { - "X": 75264, - "Y": -256, - "Z": 7680, - "Room": 125, - "KeyItemGroupID": 15335 - }, - { - "X": 71158, - "Y": 4834, - "Z": 19909, - "Room": 41, - "KeyItemGroupID": 15335 - }, - { - "X": 71166, - "Y": 4853, - "Z": 22036, - "Room": 41, - "KeyItemGroupID": 15335 - }, - { - "X": 72225, - "Y": 4847, - "Z": 20965, - "Room": 41, - "KeyItemGroupID": 15335 - }, - { - "X": 70087, - "Y": 4835, - "Z": 21019, - "Room": 41, - "KeyItemGroupID": 15335 - }, - { - "X": 66026, - "Y": -1024, - "Z": 19935, - "Room": 46, - "KeyItemGroupID": 15335 - }, - { - "X": 67089, - "Y": -1280, - "Z": 23022, - "Room": 46, - "KeyItemGroupID": 15335 - }, - { - "X": 69073, - "Y": -1280, - "Z": 22010, - "Room": 43, - "KeyItemGroupID": 15335 - }, - { - "X": 74260, - "Y": -255, - "Z": 21002, - "Room": 43, - "KeyItemGroupID": 15335 - }, - { - "X": 71215, - "Y": -256, - "Z": 17931, - "Room": 43, - "KeyItemGroupID": 15335 - }, - { - "X": 73205, - "Y": -3840, - "Z": 18979, - "Room": 44, - "KeyItemGroupID": 15335 - }, - { - "X": 65798, - "Y": 8704, - "Z": 19928, - "Room": 142, - "KeyItemGroupID": 15335 - } - ], - "AREA51.TR2": [ - { - "X": 21957, - "Y": 3584, - "Z": 62965, - "Room": 49, - "KeyItemGroupID": 16257 - }, - { - "X": 25032, - "Y": 3588, - "Z": 62937, - "Room": 49, - "KeyItemGroupID": 16257 - }, - { - "X": 13826, - "Y": 4864, - "Z": 54812, - "Room": 75, - "KeyItemGroupID": 16257 - }, - { - "X": 34315, - "Y": 7424, - "Z": 57842, - "Room": 72, - "KeyItemGroupID": 16257 - }, - { - "X": 25088, - "Y": 3584, - "Z": 55808, - "Room": 74, - "KeyItemGroupID": 16257 - }, - { - "X": 20930, - "Y": 2816, - "Z": 49638, - "Room": 76, - "KeyItemGroupID": 16257 - }, - { - "X": 12801, - "Y": 2816, - "Z": 50657, - "Room": 55, - "KeyItemGroupID": 16257 - }, - { - "X": 16922, - "Y": 6912, - "Z": 49619, - "Room": 80, - "KeyItemGroupID": 16257 - }, - { - "X": 19971, - "Y": 4864, - "Z": 56845, - "Room": 75, - "KeyItemGroupID": 16257 - }, - { - "X": 25153, - "Y": 2816, - "Z": 72242, - "Room": 56, - "KeyItemGroupID": 16257 - }, - { - "X": 24080, - "Y": 5888, - "Z": 70148, - "Room": 59, - "KeyItemGroupID": 16257 - }, - { - "X": 17908, - "Y": -4724, - "Z": 45521, - "Room": 129, - "KeyItemGroupID": 16233 - }, - { - "X": 12794, - "Y": -4864, - "Z": 46089, - "Room": 127, - "KeyItemGroupID": 16233 - }, - { - "X": 18944, - "Y": -7936, - "Z": 47616, - "Room": 150, - "KeyItemGroupID": 16233 - }, - { - "X": 22016, - "Y": -4864, - "Z": 50688, - "Room": 127, - "KeyItemGroupID": 16233 - }, - { - "X": 19457, - "Y": -3840, - "Z": 54270, - "Room": 130, - "KeyItemGroupID": 16233 - }, - { - "X": 25088, - "Y": -2816, - "Z": 62976, - "Room": 50, - "KeyItemGroupID": 16233 - }, - { - "X": 26139, - "Y": -2304, - "Z": 65530, - "Room": 125, - "KeyItemGroupID": 16233 - }, - { - "X": 26130, - "Y": -2304, - "Z": 58863, - "Room": 45, - "KeyItemGroupID": 16233 - }, - { - "X": 22014, - "Y": -2816, - "Z": 62959, - "Room": 50, - "KeyItemGroupID": 16233 - }, - { - "X": 25088, - "Y": -512, - "Z": 62976, - "Room": 53, - "KeyItemGroupID": 16233 - }, - { - "X": 48617, - "Y": -2048, - "Z": 32256, - "Room": 99, - "KeyItemGroupID": 16322 - }, - { - "X": 47616, - "Y": -2048, - "Z": 31220, - "Room": 99, - "KeyItemGroupID": 16322 - }, - { - "X": 40456, - "Y": -2048, - "Z": 31225, - "Room": 99, - "KeyItemGroupID": 16322 - }, - { - "X": 44029, - "Y": -2048, - "Z": 40454, - "Room": 99, - "KeyItemGroupID": 16322 - }, - { - "X": 48637, - "Y": -2048, - "Z": 38911, - "Room": 99, - "KeyItemGroupID": 16322 - }, - { - "X": 42828, - "Y": -2048, - "Z": 41987, - "Room": 103, - "KeyItemGroupID": 16322 - }, - { - "X": 49664, - "Y": -2304, - "Z": 47616, - "Room": 120, - "KeyItemGroupID": 16322 - }, - { - "X": 37376, - "Y": -2048, - "Z": 47616, - "Room": 96, - "KeyItemGroupID": 16322 - }, - { - "X": 33280, - "Y": -2304, - "Z": 47616, - "Room": 123, - "KeyItemGroupID": 16322 - }, - { - "X": 29184, - "Y": -2304, - "Z": 47616, - "Room": 123, - "KeyItemGroupID": 16322 - }, - { - "X": 39941, - "Y": -3328, - "Z": 48630, - "Room": 96, - "KeyItemGroupID": 16322 - }, - { - "X": 39934, - "Y": -3328, - "Z": 65025, - "Room": 3, - "KeyItemGroupID": 16322 - }, - { - "X": 43573, - "Y": -3328, - "Z": 55867, - "Room": 3, - "KeyItemGroupID": 16322 - }, - { - "X": 36352, - "Y": -3328, - "Z": 59904, - "Room": 3, - "KeyItemGroupID": 16322 - }, - { - "X": 43541, - "Y": -4352, - "Z": 44525, - "Room": 97, - "KeyItemGroupID": 16322 - }, - { - "X": 36340, - "Y": -4352, - "Z": 44544, - "Room": 97, - "KeyItemGroupID": 16322 - }, - { - "X": 13816, - "Y": 1536, - "Z": 56844, - "Room": 78, - "KeyItemGroupID": 16286 - }, - { - "X": 18932, - "Y": 1536, - "Z": 54797, - "Room": 78, - "KeyItemGroupID": 16286 - }, - { - "X": 19969, - "Y": 1536, - "Z": 49649, - "Room": 78, - "KeyItemGroupID": 16286 - }, - { - "X": 13807, - "Y": 1536, - "Z": 52741, - "Room": 78, - "KeyItemGroupID": 16286 - }, - { - "X": 14846, - "Y": 6912, - "Z": 49658, - "Room": 80, - "KeyItemGroupID": 16286 - }, - { - "X": 20980, - "Y": 4864, - "Z": 53760, - "Room": 75, - "KeyItemGroupID": 16286 - }, - { - "X": 25088, - "Y": 3584, - "Z": 55808, - "Room": 74, - "KeyItemGroupID": 16286 - }, - { - "X": 23040, - "Y": 1536, - "Z": 66048, - "Room": 51, - "KeyItemGroupID": 16286 - }, - { - "X": 23035, - "Y": 1536, - "Z": 59925, - "Room": 61, - "KeyItemGroupID": 16286 - } - ], - "ANTARC.TR2": [ - { - "X": 67054, - "Y": -4864, - "Z": 31293, - "Room": 86, - "KeyItemGroupID": 25292 - }, - { - "X": 68085, - "Y": -3584, - "Z": 27156, - "Room": 87, - "KeyItemGroupID": 25292 - }, - { - "X": 66000, - "Y": -3328, - "Z": 27118, - "Room": 87, - "KeyItemGroupID": 25292 - }, - { - "X": 63949, - "Y": -3353, - "Z": 38358, - "Room": 89, - "KeyItemGroupID": 25292 - }, - { - "X": 69126, - "Y": -4608, - "Z": 38385, - "Room": 89, - "KeyItemGroupID": 25292 - }, - { - "X": 68128, - "Y": -4608, - "Z": 39431, - "Room": 89, - "KeyItemGroupID": 25292 - }, - { - "X": 65008, - "Y": 0, - "Z": 35318, - "Room": 101, - "KeyItemGroupID": 25292 - }, - { - "X": 67105, - "Y": -512, - "Z": 38416, - "Room": 101, - "KeyItemGroupID": 25292 - }, - { - "X": 69115, - "Y": -3328, - "Z": 42490, - "Room": 166, - "KeyItemGroupID": 25292 - }, - { - "X": 55826, - "Y": -6144, - "Z": 52765, - "Room": 98, - "KeyItemGroupID": 25298 - }, - { - "X": 53810, - "Y": -6144, - "Z": 53683, - "Room": 98, - "KeyItemGroupID": 25298 - }, - { - "X": 57895, - "Y": -6144, - "Z": 53742, - "Room": 97, - "KeyItemGroupID": 25298 - }, - { - "X": 60884, - "Y": -6144, - "Z": 50720, - "Room": 97, - "KeyItemGroupID": 25298 - }, - { - "X": 60909, - "Y": -6400, - "Z": 44626, - "Room": 95, - "KeyItemGroupID": 25298 - }, - { - "X": 54648, - "Y": -2816, - "Z": 47587, - "Room": 91, - "KeyItemGroupID": 25298 - }, - { - "X": 58902, - "Y": -3328, - "Z": 51701, - "Room": 108, - "KeyItemGroupID": 25298 - }, - { - "X": 52720, - "Y": -2927, - "Z": 51647, - "Room": 105, - "KeyItemGroupID": 25298 - }, - { - "X": 59858, - "Y": -3584, - "Z": 47557, - "Room": 112, - "KeyItemGroupID": 25298 - }, - { - "X": 44602, - "Y": -4608, - "Z": 73230, - "Room": 134, - "KeyItemGroupID": 25339 - }, - { - "X": 44544, - "Y": -4608, - "Z": 71168, - "Room": 134, - "KeyItemGroupID": 25339 - }, - { - "X": 39424, - "Y": -4608, - "Z": 65024, - "Room": 27, - "KeyItemGroupID": 25339 - }, - { - "X": 39424, - "Y": -4608, - "Z": 61952, - "Room": 27, - "KeyItemGroupID": 25339 - }, - { - "X": 41468, - "Y": -5120, - "Z": 64031, - "Room": 27, - "KeyItemGroupID": 25339 - }, - { - "X": 39403, - "Y": -4608, - "Z": 70160, - "Room": 191, - "KeyItemGroupID": 25339 - }, - { - "X": 42496, - "Y": -4608, - "Z": 73245, - "Room": 134, - "KeyItemGroupID": 25339 - }, - { - "X": 45568, - "Y": -2816, - "Z": 72192, - "Room": 133, - "KeyItemGroupID": 25339 - }, - { - "X": 46592, - "Y": -2944, - "Z": 69120, - "Room": 187, - "KeyItemGroupID": 25339 - }, - { - "X": 45581, - "Y": -2816, - "Z": 75279, - "Room": 133, - "KeyItemGroupID": 25339 - }, - { - "X": 45540, - "Y": -2816, - "Z": 61913, - "Room": 187, - "KeyItemGroupID": 25339 - }, - { - "X": 39424, - "Y": -4608, - "Z": 65024, - "Room": 27, - "KeyItemGroupID": 25339 - }, - { - "X": 43520, - "Y": -2816, - "Z": 62976, - "Room": 187, - "KeyItemGroupID": 25339 - }, - { - "X": 76288, - "Y": -3072, - "Z": 81408, - "Room": 115, - "KeyItemGroupID": 25321 - }, - { - "X": 75243, - "Y": -3072, - "Z": 82457, - "Room": 115, - "KeyItemGroupID": 25321 - }, - { - "X": 78435, - "Y": -3071, - "Z": 79338, - "Room": 115, - "KeyItemGroupID": 25321 - }, - { - "X": 70144, - "Y": -2816, - "Z": 75264, - "Room": 77, - "KeyItemGroupID": 25321 - }, - { - "X": 71168, - "Y": -2688, - "Z": 78336, - "Room": 78, - "KeyItemGroupID": 25321 - }, - { - "X": 73240, - "Y": -2816, - "Z": 80377, - "Room": 78, - "KeyItemGroupID": 25321 - }, - { - "X": 73233, - "Y": -2816, - "Z": 77277, - "Room": 78, - "KeyItemGroupID": 25321 - }, - { - "X": 71168, - "Y": -2944, - "Z": 73216, - "Room": 77, - "KeyItemGroupID": 25321 - }, - { - "X": 73525, - "Y": -2815, - "Z": 72974, - "Room": 77, - "KeyItemGroupID": 25321 - }, - { - "X": 75028, - "Y": -3072, - "Z": 79922, - "Room": 115, - "KeyItemGroupID": 25321 - }, - { - "X": 52734, - "Y": -512, - "Z": 36349, - "Room": 186, - "KeyItemGroupID": 25375 - }, - { - "X": 50695, - "Y": -1024, - "Z": 42515, - "Room": 157, - "KeyItemGroupID": 25375 - }, - { - "X": 45676, - "Y": -1811, - "Z": 44327, - "Room": 75, - "KeyItemGroupID": 25375 - }, - { - "X": 48561, - "Y": -1280, - "Z": 52656, - "Room": 76, - "KeyItemGroupID": 25375 - }, - { - "X": 46630, - "Y": -1931, - "Z": 53807, - "Room": 202, - "KeyItemGroupID": 25375 - }, - { - "X": 48685, - "Y": -3864, - "Z": 50636, - "Room": 71, - "KeyItemGroupID": 25375 - }, - { - "X": 47118, - "Y": -3591, - "Z": 40425, - "Room": 70, - "KeyItemGroupID": 25375 - }, - { - "X": 47616, - "Y": -3712, - "Z": 35328, - "Room": 203, - "KeyItemGroupID": 25375 - }, - { - "X": 61100, - "Y": -1280, - "Z": 38216, - "Room": 103, - "KeyItemGroupID": 25375 - }, - { - "X": 64029, - "Y": -1280, - "Z": 29692, - "Room": 102, - "KeyItemGroupID": 25375 - }, - { - "X": 53814, - "Y": -1906, - "Z": 26109, - "Room": 46, - "KeyItemGroupID": 25375 - } - ], - "MINES.TR2": [ - { - "X": 44495, - "Y": 5888, - "Z": 41497, - "Room": 106, - "KeyItemGroupID": 26312 - }, - { - "X": 52736, - "Y": 3840, - "Z": 51712, - "Room": 72, - "KeyItemGroupID": 26312 - }, - { - "X": 52781, - "Y": 3840, - "Z": 47595, - "Room": 72, - "KeyItemGroupID": 26312 - }, - { - "X": 50626, - "Y": 3840, - "Z": 45536, - "Room": 72, - "KeyItemGroupID": 26312 - }, - { - "X": 51728, - "Y": 2048, - "Z": 51576, - "Room": 75, - "KeyItemGroupID": 26312 - }, - { - "X": 59907, - "Y": 5888, - "Z": 41435, - "Room": 70, - "KeyItemGroupID": 26312 - }, - { - "X": 59904, - "Y": 6272, - "Z": 35328, - "Room": 67, - "KeyItemGroupID": 26312 - }, - { - "X": 60928, - "Y": 6272, - "Z": 35328, - "Room": 67, - "KeyItemGroupID": 26312 - }, - { - "X": 48621, - "Y": 7936, - "Z": 41473, - "Room": 69, - "KeyItemGroupID": 26312 - }, - { - "X": 51725, - "Y": 5888, - "Z": 44596, - "Room": 70, - "KeyItemGroupID": 26312 - }, - { - "X": 46592, - "Y": 3840, - "Z": 50688, - "Room": 64, - "KeyItemGroupID": 26312 - }, - { - "X": 36352, - "Y": 4864, - "Z": 42496, - "Room": 2, - "KeyItemGroupID": 26312 - }, - { - "X": 20986, - "Y": -7936, - "Z": 29160, - "Room": 32, - "KeyItemGroupID": 26312 - }, - { - "X": 17920, - "Y": -8960, - "Z": 27136, - "Room": 32, - "KeyItemGroupID": 26312 - }, - { - "X": 26170, - "Y": -8333, - "Z": 28106, - "Room": 32, - "KeyItemGroupID": 26312 - }, - { - "X": 24067, - "Y": -1536, - "Z": 28129, - "Room": 23, - "KeyItemGroupID": 26312 - }, - { - "X": 52736, - "Y": 7936, - "Z": 70144, - "Room": 80, - "KeyItemGroupID": 26365 - }, - { - "X": 57851, - "Y": 8065, - "Z": 70128, - "Room": 56, - "KeyItemGroupID": 26365 - }, - { - "X": 54784, - "Y": 7936, - "Z": 58880, - "Room": 77, - "KeyItemGroupID": 26365 - }, - { - "X": 53760, - "Y": 7936, - "Z": 68096, - "Room": 14, - "KeyItemGroupID": 26365 - }, - { - "X": 52660, - "Y": 8192, - "Z": 65022, - "Room": 18, - "KeyItemGroupID": 26365 - }, - { - "X": 56832, - "Y": 17152, - "Z": 74240, - "Room": 151, - "KeyItemGroupID": 26365 - }, - { - "X": 57812, - "Y": 16929, - "Z": 73304, - "Room": 151, - "KeyItemGroupID": 26365 - }, - { - "X": 54784, - "Y": 29696, - "Z": 72192, - "Room": 170, - "KeyItemGroupID": 26365 - }, - { - "X": 53760, - "Y": 24576, - "Z": 62976, - "Room": 153, - "KeyItemGroupID": 26365 - }, - { - "X": 57856, - "Y": 26624, - "Z": 66048, - "Room": 164, - "KeyItemGroupID": 26365 - }, - { - "X": 67072, - "Y": 26496, - "Z": 56832, - "Room": 160, - "KeyItemGroupID": 26365 - }, - { - "X": 70144, - "Y": 26624, - "Z": 67072, - "Room": 160, - "KeyItemGroupID": 26365 - }, - { - "X": 63813, - "Y": 25088, - "Z": 67422, - "Room": 160, - "KeyItemGroupID": 26365 - }, - { - "X": 70065, - "Y": 24811, - "Z": 65019, - "Room": 160, - "KeyItemGroupID": 26365 - }, - { - "X": 71636, - "Y": 25344, - "Z": 57924, - "Room": 160, - "KeyItemGroupID": 26365 - }, - { - "X": 74213, - "Y": 17920, - "Z": 70171, - "Room": 165, - "KeyItemGroupID": 26365 - }, - { - "X": 69125, - "Y": 14594, - "Z": 71121, - "Room": 166, - "KeyItemGroupID": 26365 - }, - { - "X": 66074, - "Y": 12301, - "Z": 72240, - "Room": 166, - "KeyItemGroupID": 26365 - }, - { - "X": 70144, - "Y": 2560, - "Z": 67072, - "Room": 167, - "KeyItemGroupID": 26365 - }, - { - "X": 10767, - "Y": 7424, - "Z": 60928, - "Room": 124, - "KeyItemGroupID": 26333 - }, - { - "X": 12800, - "Y": 7424, - "Z": 62976, - "Room": 124, - "KeyItemGroupID": 26333 - }, - { - "X": 20992, - "Y": 6912, - "Z": 60928, - "Room": 118, - "KeyItemGroupID": 26333 - }, - { - "X": 15929, - "Y": 6912, - "Z": 63557, - "Room": 122, - "KeyItemGroupID": 26333 - }, - { - "X": 14857, - "Y": 6912, - "Z": 64064, - "Room": 123, - "KeyItemGroupID": 26333 - }, - { - "X": 31292, - "Y": 10752, - "Z": 55812, - "Room": 13, - "KeyItemGroupID": 26333 - }, - { - "X": 41493, - "Y": 8192, - "Z": 53757, - "Room": 11, - "KeyItemGroupID": 26333 - }, - { - "X": 18944, - "Y": 14848, - "Z": 57856, - "Room": 87, - "KeyItemGroupID": 26333 - }, - { - "X": 19936, - "Y": 14848, - "Z": 58828, - "Room": 89, - "KeyItemGroupID": 26333 - }, - { - "X": 7680, - "Y": 14976, - "Z": 60928, - "Room": 91, - "KeyItemGroupID": 26333 - }, - { - "X": 11793, - "Y": 15360, - "Z": 58777, - "Room": 159, - "KeyItemGroupID": 26333 - }, - { - "X": 23084, - "Y": 6912, - "Z": 59892, - "Room": 117, - "KeyItemGroupID": 26333 - } - ], - "CITY.TR2": [ - { - "X": 44544, - "Y": -8192, - "Z": 77312, - "Room": 120, - "KeyItemGroupID": 27325 - }, - { - "X": 16896, - "Y": 512, - "Z": 80384, - "Room": 119, - "KeyItemGroupID": 27324 - }, - { - "X": 32256, - "Y": 5120, - "Z": 48640, - "Room": 209, - "KeyItemGroupID": 27435 - }, - { - "X": 32239, - "Y": 6144, - "Z": 54824, - "Room": 219, - "KeyItemGroupID": 27435 - }, - { - "X": 32222, - "Y": 6144, - "Z": 49633, - "Room": 219, - "KeyItemGroupID": 27435 - }, - { - "X": 28149, - "Y": 5376, - "Z": 56756, - "Room": 220, - "KeyItemGroupID": 27435 - }, - { - "X": 25035, - "Y": 5120, - "Z": 56784, - "Room": 212, - "KeyItemGroupID": 27435 - }, - { - "X": 28160, - "Y": 3840, - "Z": 49648, - "Room": 210, - "KeyItemGroupID": 27435 - }, - { - "X": 18944, - "Y": 5120, - "Z": 38400, - "Room": 211, - "KeyItemGroupID": 27435 - }, - { - "X": 25131, - "Y": 5375, - "Z": 38446, - "Room": 216, - "KeyItemGroupID": 27435 - }, - { - "X": 22027, - "Y": 5376, - "Z": 44688, - "Room": 213, - "KeyItemGroupID": 27435 - }, - { - "X": 24022, - "Y": 5120, - "Z": 47671, - "Room": 210, - "KeyItemGroupID": 27435 - }, - { - "X": 23039, - "Y": 5120, - "Z": 55815, - "Room": 212, - "KeyItemGroupID": 27435 - }, - { - "X": 18936, - "Y": 5120, - "Z": 55786, - "Room": 212, - "KeyItemGroupID": 27435 - }, - { - "X": 22015, - "Y": -3328, - "Z": 38418, - "Room": 90, - "KeyItemGroupID": 27435 - }, - { - "X": 28161, - "Y": -3327, - "Z": 44521, - "Room": 231, - "KeyItemGroupID": 27435 - }, - { - "X": 26906, - "Y": -3328, - "Z": 46597, - "Room": 232, - "KeyItemGroupID": 27435 - }, - { - "X": 28145, - "Y": -3328, - "Z": 55744, - "Room": 89, - "KeyItemGroupID": 27435 - }, - { - "X": 21078, - "Y": -3328, - "Z": 53649, - "Room": 90, - "KeyItemGroupID": 27435 - }, - { - "X": 14586, - "Y": -3328, - "Z": 52685, - "Room": 93, - "KeyItemGroupID": 27435 - }, - { - "X": 15023, - "Y": -3328, - "Z": 50472, - "Room": 91, - "KeyItemGroupID": 27435 - }, - { - "X": 18108, - "Y": -3328, - "Z": 41594, - "Room": 91, - "KeyItemGroupID": 27435 - }, - { - "X": 10787, - "Y": -3328, - "Z": 36408, - "Room": 35, - "KeyItemGroupID": 27435 - }, - { - "X": 7637, - "Y": -8192, - "Z": 46552, - "Room": 100, - "KeyItemGroupID": 27435 - }, - { - "X": 32256, - "Y": -7680, - "Z": 65024, - "Room": 147, - "KeyItemGroupID": 27435 - }, - { - "X": 40466, - "Y": -3840, - "Z": 74121, - "Room": 153, - "KeyItemGroupID": 27435 - }, - { - "X": 41472, - "Y": -7424, - "Z": 61952, - "Room": 149, - "KeyItemGroupID": 27435 - }, - { - "X": 43534, - "Y": -7424, - "Z": 68073, - "Room": 150, - "KeyItemGroupID": 27435 - }, - { - "X": 9768, - "Y": -4352, - "Z": 65932, - "Room": 102, - "KeyItemGroupID": 27435 - }, - { - "X": 5646, - "Y": -2816, - "Z": 62962, - "Room": 104, - "KeyItemGroupID": 27435 - }, - { - "X": 1527, - "Y": -2048, - "Z": 63957, - "Room": 104, - "KeyItemGroupID": 27435 - }, - { - "X": 3523, - "Y": -3072, - "Z": 72124, - "Room": 103, - "KeyItemGroupID": 27435 - }, - { - "X": 6696, - "Y": 1280, - "Z": 80460, - "Room": 115, - "KeyItemGroupID": 27435 - }, - { - "X": 8666, - "Y": 1280, - "Z": 80367, - "Room": 115, - "KeyItemGroupID": 27435 - }, - { - "X": 10709, - "Y": 1280, - "Z": 80253, - "Room": 115, - "KeyItemGroupID": 27435 - }, - { - "X": 17207, - "Y": 1024, - "Z": 81388, - "Room": 119, - "KeyItemGroupID": 27435 - }, - { - "X": 17159, - "Y": 1024, - "Z": 79369, - "Room": 119, - "KeyItemGroupID": 27435 - }, - { - "X": 24167, - "Y": 1280, - "Z": 76263, - "Room": 126, - "KeyItemGroupID": 27435 - }, - { - "X": 21953, - "Y": 1280, - "Z": 76365, - "Room": 126, - "KeyItemGroupID": 27435 - }, - { - "X": 30718, - "Y": 7424, - "Z": 75094, - "Room": 131, - "KeyItemGroupID": 27435 - }, - { - "X": 36285, - "Y": 5376, - "Z": 75239, - "Room": 133, - "KeyItemGroupID": 27435 - }, - { - "X": 35192, - "Y": -768, - "Z": 69091, - "Room": 142, - "KeyItemGroupID": 27435 - }, - { - "X": 34229, - "Y": -2560, - "Z": 72162, - "Room": 141, - "KeyItemGroupID": 27435 - }, - { - "X": 36413, - "Y": -2560, - "Z": 77282, - "Room": 141, - "KeyItemGroupID": 27435 - }, - { - "X": 34309, - "Y": -2048, - "Z": 89894, - "Room": 94, - "KeyItemGroupID": 27435 - }, - { - "X": 86509, - "Y": -3840, - "Z": 58867, - "Room": 23, - "KeyItemGroupID": 27251 - }, - { - "X": 85418, - "Y": -2559, - "Z": 61949, - "Room": 13, - "KeyItemGroupID": 27251 - }, - { - "X": 85478, - "Y": -1024, - "Z": 59894, - "Room": 0, - "KeyItemGroupID": 27251 - }, - { - "X": 85515, - "Y": -255, - "Z": 63979, - "Room": 6, - "KeyItemGroupID": 27251 - }, - { - "X": 85517, - "Y": -256, - "Z": 72233, - "Room": 4, - "KeyItemGroupID": 27251 - }, - { - "X": 94662, - "Y": -256, - "Z": 76305, - "Room": 15, - "KeyItemGroupID": 27251 - }, - { - "X": 94720, - "Y": -2816, - "Z": 66048, - "Room": 17, - "KeyItemGroupID": 27251 - }, - { - "X": 90642, - "Y": -2699, - "Z": 67063, - "Room": 17, - "KeyItemGroupID": 27251 - }, - { - "X": 90640, - "Y": -3840, - "Z": 65018, - "Room": 11, - "KeyItemGroupID": 27251 - }, - { - "X": 86486, - "Y": -3840, - "Z": 67069, - "Room": 12, - "KeyItemGroupID": 27251 - }, - { - "X": 86619, - "Y": -3840, - "Z": 70130, - "Room": 12, - "KeyItemGroupID": 27251 - }, - { - "X": 83321, - "Y": -4608, - "Z": 61968, - "Room": 25, - "KeyItemGroupID": 27251 - }, - { - "X": 90582, - "Y": 0, - "Z": 54757, - "Room": 31, - "KeyItemGroupID": 27251 - }, - { - "X": 100783, - "Y": -256, - "Z": 69114, - "Room": 9, - "KeyItemGroupID": 27251 - }, - { - "X": 35328, - "Y": -2560, - "Z": 89600, - "Room": 94, - "KeyItemGroupID": 27299 - }, - { - "X": 8704, - "Y": -12032, - "Z": 54784, - "Room": 97, - "KeyItemGroupID": 27302 - } - ], - "STPAUL.TR2": [ - { - "X": 49664, - "Y": -3840, - "Z": 55808, - "Room": 47, - "KeyItemGroupID": 29242 - }, - { - "X": 49645, - "Y": -3072, - "Z": 63963, - "Room": 44, - "KeyItemGroupID": 29242 - }, - { - "X": 48643, - "Y": 1280, - "Z": 53767, - "Room": 57, - "KeyItemGroupID": 29242 - }, - { - "X": 54782, - "Y": 1279, - "Z": 53743, - "Room": 42, - "KeyItemGroupID": 29242 - }, - { - "X": 45556, - "Y": -2048, - "Z": 54757, - "Room": 44, - "KeyItemGroupID": 29242 - }, - { - "X": 41472, - "Y": -2048, - "Z": 54784, - "Room": 44, - "KeyItemGroupID": 29242 - }, - { - "X": 45558, - "Y": -2304, - "Z": 58807, - "Room": 44, - "KeyItemGroupID": 29242 - }, - { - "X": 40461, - "Y": -4990, - "Z": 65029, - "Room": 56, - "KeyItemGroupID": 29242 - }, - { - "X": 41469, - "Y": -2816, - "Z": 64000, - "Room": 44, - "KeyItemGroupID": 29242 - }, - { - "X": 43492, - "Y": 2048, - "Z": 69161, - "Room": 26, - "KeyItemGroupID": 29242 - }, - { - "X": 51711, - "Y": 7168, - "Z": 60932, - "Room": 60, - "KeyItemGroupID": 29242 - }, - { - "X": 45528, - "Y": 5632, - "Z": 64031, - "Room": 58, - "KeyItemGroupID": 29242 - }, - { - "X": 42494, - "Y": 5632, - "Z": 59893, - "Room": 43, - "KeyItemGroupID": 29242 - }, - { - "X": 42496, - "Y": 5632, - "Z": 57856, - "Room": 41, - "KeyItemGroupID": 29242 - } - ] -} \ No newline at end of file diff --git a/TRRandomizerCore/Utilities/SpatialConverters.cs b/TRRandomizerCore/Utilities/SpatialConverters.cs deleted file mode 100644 index b0fc88b4d..000000000 --- a/TRRandomizerCore/Utilities/SpatialConverters.cs +++ /dev/null @@ -1,28 +0,0 @@ -using TRRandomizerCore.Helpers; -using TRLevelControl.Model; - -namespace TRRandomizerCore.Utilities; - -internal static class SpatialConverters -{ - internal static Location TransformToLevelSpace(Location loc, TRRoomInfo room) - { - if (loc.IsInRoomSpace) - { - return new Location - { - Room = loc.Room, - X = (loc.X + room.X), - Y = (room.YBottom - loc.Y), - Z = (loc.Z + room.Z), - Difficulty = loc.Difficulty, - IsInRoomSpace = loc.IsInRoomSpace, - RequiresGlitch = loc.RequiresGlitch - }; - } - else - { - return loc; - } - } -} diff --git a/TRRandomizerCore/Zones/LevelZones.cs b/TRRandomizerCore/Zones/LevelZones.cs deleted file mode 100644 index f0ae9725a..000000000 --- a/TRRandomizerCore/Zones/LevelZones.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace TRRandomizerCore.Zones; - -enum LevelZones : int -{ - StoneSecretZone = 0, - JadeSecretZone, - GoldSecretZone, - Key1Zone, - Key2Zone, - Key3Zone, - Key4Zone, - Puzzle1Zone, - Puzzle2Zone, - Puzzle3Zone, - Puzzle4Zone, - Quest1Zone, - Quest2Zone, - ItemZones -} - -enum ZonePopulationMethod -{ - SecretsOnly, - KeyPuzzleQuestOnly, - GeneralOnly, - Full -} diff --git a/TRRandomizerCore/Zones/ZonedLocationCollection.cs b/TRRandomizerCore/Zones/ZonedLocationCollection.cs deleted file mode 100644 index 2da018c2b..000000000 --- a/TRRandomizerCore/Zones/ZonedLocationCollection.cs +++ /dev/null @@ -1,289 +0,0 @@ -using Newtonsoft.Json; -using TRRandomizerCore.Helpers; - -namespace TRRandomizerCore.Zones; - -class ZonedLocationCollection -{ - private readonly Dictionary> _zoneAppliedLocations; - private int _numGeneralZones; - - public List StoneZone - { - get - { - return GetZoneLocations((int)LevelZones.StoneSecretZone); - } - } - - public List JadeZone - { - get - { - return GetZoneLocations((int)LevelZones.JadeSecretZone); - } - } - - public List GoldZone - { - get - { - return GetZoneLocations((int)LevelZones.GoldSecretZone); - } - } - - public List Key1Zone - { - get - { - return GetZoneLocations((int)LevelZones.Key1Zone); - } - } - - public List Key2Zone - { - get - { - return GetZoneLocations((int)LevelZones.Key2Zone); - } - } - - public List Key3Zone - { - get - { - return GetZoneLocations((int)LevelZones.Key3Zone); - } - } - - public List Key4Zone - { - get - { - return GetZoneLocations((int)LevelZones.Key4Zone); - } - } - - public List Puzzle1Zone - { - get - { - return GetZoneLocations((int)LevelZones.Puzzle1Zone); - } - } - - public List Puzzle2Zone - { - get - { - return GetZoneLocations((int)LevelZones.Puzzle2Zone); - } - } - - public List Puzzle3Zone - { - get - { - return GetZoneLocations((int)LevelZones.Puzzle3Zone); - } - } - - public List Puzzle4Zone - { - get - { - return GetZoneLocations((int)LevelZones.Puzzle4Zone); - } - } - - public List Quest1Zone - { - get - { - return GetZoneLocations((int)LevelZones.Quest1Zone); - } - } - - public List Quest2Zone - { - get - { - return GetZoneLocations((int)LevelZones.Quest2Zone); - } - } - - public List GeneralZone - { - get - { - return GetZoneLocations((int)LevelZones.ItemZones); - } - } - - public int NumGeneralZones - { - get - { - return _numGeneralZones; - } - } - - public List GetZoneLocations(int zone) - { - if (_zoneAppliedLocations.ContainsKey(zone)) - { - return _zoneAppliedLocations[zone]; - } - - return null; - } - - /// - /// Populate to get for each secret or key item index the list of locations they are set to appear into in both json for Zone and location in this specific level - /// - /// path of the Zone file for the level @"TR2\Zones\" + _levelInstance.Name + "-Zones.json" - /// locations.json serialized - /// SecretsOnly;KeyPuzzleQuestOnly; are the only ones used today - public void PopulateZones(string zoneFilePath, List locations, ZonePopulationMethod popMethod) - { - Dictionary> ZoneMap = JsonConvert.DeserializeObject>>(File.ReadAllText(zoneFilePath)); - - if (popMethod == ZonePopulationMethod.SecretsOnly || popMethod == ZonePopulationMethod.Full) - { - _zoneAppliedLocations.Add((int)LevelZones.StoneSecretZone, (from loc in locations - where ZoneMap[(int)LevelZones.StoneSecretZone].Contains(loc.Room) - select loc).ToList()); - // HSH is not zoned... file is empty... so each secret can go everywhere - if (!DoesZoneHaveLocations((int)LevelZones.StoneSecretZone)) - _zoneAppliedLocations[(int)LevelZones.StoneSecretZone] = locations; - - _zoneAppliedLocations.Add((int)LevelZones.JadeSecretZone, (from loc in locations - where ZoneMap[(int)LevelZones.JadeSecretZone].Contains(loc.Room) - select loc).ToList()); - - if (!DoesZoneHaveLocations((int)LevelZones.JadeSecretZone)) - _zoneAppliedLocations[(int)LevelZones.JadeSecretZone] = locations; - - _zoneAppliedLocations.Add((int)LevelZones.GoldSecretZone, (from loc in locations - where ZoneMap[(int)LevelZones.GoldSecretZone].Contains(loc.Room) - select loc).ToList()); - - if (!DoesZoneHaveLocations((int)LevelZones.GoldSecretZone)) - _zoneAppliedLocations[(int)LevelZones.GoldSecretZone] = locations; - } - - if (popMethod == ZonePopulationMethod.KeyPuzzleQuestOnly || popMethod == ZonePopulationMethod.Full) - { - //We don't fall back to populating with all locations for these as if there is no set defined we don't want to open - //up the full pool otherwise softlock city - Danza. - - _zoneAppliedLocations.Add((int)LevelZones.Key1Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Key1Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Key2Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Key2Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Key3Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Key3Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Key4Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Key4Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Puzzle1Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Puzzle1Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Puzzle2Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Puzzle2Zone].Contains(loc.Room) - select loc).ToList()); - - _zoneAppliedLocations.Add((int)LevelZones.Puzzle3Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Puzzle3Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Puzzle4Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Puzzle4Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Quest1Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Quest1Zone].Contains(loc.Room) - select loc).ToList()); - - - _zoneAppliedLocations.Add((int)LevelZones.Quest2Zone, (from loc in locations - where ZoneMap[(int)LevelZones.Quest2Zone].Contains(loc.Room) - select loc).ToList()); - - } - - if (popMethod == ZonePopulationMethod.GeneralOnly || popMethod == ZonePopulationMethod.Full) - { - _zoneAppliedLocations.Add((int)LevelZones.ItemZones, (from loc in locations - where ZoneMap[(int)LevelZones.ItemZones].Contains(loc.Room) - select loc).ToList()); - - //Only bother looking for additional zones if the first general zone contains any - if (DoesZoneHaveLocations((int)LevelZones.ItemZones)) - { - bool clearLast = false; - - for (int i = ((int)LevelZones.ItemZones + 1); i < ZoneMap.Count; i++) - { - _zoneAppliedLocations.Add(i, (from loc in locations - where ZoneMap[i].Contains(loc.Room) - select loc).ToList()); - - if (!DoesZoneHaveLocations(i)) - { - //If latest zone doesnt have any locations break and stop. - //Then remove the zone from the dictionary. - clearLast = true; - - break; - } - - //If we have a new general zone with actual locations increase the count - _numGeneralZones++; - } - - if (clearLast) - _zoneAppliedLocations.Remove(ZoneMap.Count - 1); - } - else - { - // General item zone was empty so open up the full pool - _zoneAppliedLocations[(int)LevelZones.ItemZones] = locations; - } - } - } - - public ZonedLocationCollection() - { - _zoneAppliedLocations = new Dictionary>(); - _numGeneralZones = 1; - } - - private bool DoesZoneHaveLocations(int zone) - { - if (_zoneAppliedLocations.ContainsKey(zone)) - { - if (_zoneAppliedLocations[zone].Count > 0) - { - return true; - } - } - - return false; - } -} From 8c141a144ea49dd8fdd5a64081739281e9472122 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:17:42 +0000 Subject: [PATCH 13/17] Add documentation --- CHANGELOG.md | 8 +++++++- Resources/Documentation/RETURNPATHS.md | 22 +++++++++++----------- Resources/Documentation/SECRETS.md | 19 ++++++++----------- Resources/Documentation/ZONES.md | 26 ++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 Resources/Documentation/ZONES.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f441e2303..4d6878998 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,15 @@ - added a TR2 secret pack (Eycore) (#559) - added a TR2 secret pack (Towandaa) (#558) - added more return paths to TR2 and TR3 (#563) +- added an option to control whether or not key items can be allocated to enemies (#474) +- added an option to control the range in which key items can appear (#474) +- added an option to control whether or not key items can be placed in locations that rely on return paths (#474) +- added an option to control key item continuity e.g. The Seraph being placed as an item in Barkhang Monastery if The Deck hasn't been visited (#474) +- added item randomization to Home Sweet Home, provided the level starts with weapons and ammo already (#474) - fixed spelling mistakes in TR1 French gamestring localization (#560) +- fixed a key item softlock in Diving Area (#564) - improved changelog, readme and contributing documentation -- improved item location generation in TR1-3, and added item randomization to Home Sweet Home (#474) +- improved regular item, key item, and secret item location generation and selection in TR1-3 (#474) - replaced purist mode with explicit options for adding return paths, fixing OG bugs, and fixing shortcuts (#563) ## [V1.7.3](https://github.com/LostArtefacts/TR-Rando/compare/V1.7.2...V1.7.3) - 2023-09-30 diff --git a/Resources/Documentation/RETURNPATHS.md b/Resources/Documentation/RETURNPATHS.md index 02f6045f8..48eecf7f1 100644 --- a/Resources/Documentation/RETURNPATHS.md +++ b/Resources/Documentation/RETURNPATHS.md @@ -19,7 +19,7 @@ Following are details on the return paths that are available. See `Global Settin | City of Khamoon | Some slopes are adjusted to make returning to the start possible, and a trapdoor in room 42 will always remain raised to allow climbing out. | | Obelisk of Khamoon | _Not required_ | | Sanctuary of the Scion | _Not required_ | -| Natla's Mines | _Not required_ | +| Natla's Mines | Trapdoors added in the TNT area to return back across the lava or back to the start. | | Atlantis | Link rooms added between rooms 30 and 50. | | The Great Pyramid | _Not implemented due to trap behaviour._ | @@ -29,17 +29,17 @@ Following are details on the return paths that are available. See `Global Settin | Great Wall | Ladder added to room 3 to allow returning to the beginning. Other points of no return remain. | | Venice | _Not required_ | | Bartoli's Hideout | Links added between rooms 22, 101, and 121. | -| Opera House | _Not required_ | +| Opera House | Link room added between rooms 6 and 50; and a ladder added from room 5 to 61. | | Offshore Rig | Door 19 will remain open after passing through it. | | Diving Area | Link rooms added between rooms 48 and 56; door 22 will remain open after passing through it; and a ladder is added to room 3. | | 40 Fathoms | Ladders added to rooms 21 and 36; trapdoor 30 will always remain open. | -| Wreck of the Maria Doria | Ladders added to rooms 43 and 27-30. | +| Wreck of the Maria Doria | Slopes adjusted in room 43, and ladders added to rooms 43 and 27-30. | | Living Quarters | Portal added between rooms 18 and 33. | -| The Deck | _Not required_ | -| Tibetan Foothills | Ramp added to room 53 to allow returning with the red skidoo. | +| The Deck | Ladder added between rooms 30 and 86. | +| Tibetan Foothills | Ramp added to room 53 to allow returning with the red skidoo; ladders added in rooms 78/79 to return to the start; link rooms added between rooms 18 and 81. | | Barkhang Monastery | _Not required_ | | Catacombs of the Talion | Ladders added to rooms 19 and 117. | -| Ice Palace | Ladder added to room 34. _Point of no return above the gong remains._ | +| Ice Palace | Ladder added to room 34. Link rooms added between rooms 61 and 103. | | Temple of Xian | Link rooms added between rooms 3 and 190. | | Floating Islands | _Not required_ | | Dragon's Lair | Slopes adjusted in room 2 to allow exiting the main arena. | @@ -57,14 +57,14 @@ Following are details on the return paths that are available. See `Global Settin | Madubu Gorge | _Not implemented_ | | Temple of Puna | _Not implemented_ | | Thames Wharf | _Not implemented_ | -| Aldwych | _Not implemented_ | -| Lud's Gate | _Not implemented_ | +| Aldwych | _Not required_ | +| Lud's Gate | Ladders added between rooms 69 and 72. | | City | _Not required_ | | Nevada Desert | Link room added between rooms 18 and 26. | -| High Security Compound | _Not required_ | -| Area 51 | Slopes adjusted in room 0 to allow returning to room 4. | +| High Security Compound | Link room added between rooms 38 and 129. | +| Area 51 | Slopes adjusted in room 0 to allow returning to room 4; step added in room 64 to allow climbing out to room 63. | | Antarctica | _Not required_ | | RX-Tech Mines | Platform added to room 65 to allow reaching the ladder above. | | Lost City of Tinnos | Trapdoor added to room 44 to allow returning across the bridge. Each element room can be re-visited. | | Meteorite Cavern | Ladders added to rooms 17 and 18 to allow returning up the slope. | -| All Hallows | Link room added between rooms 2 and 49. | +| All Hallows | Link room added between rooms 2 and 49; plus, the zipline will reset after having used it. | diff --git a/Resources/Documentation/SECRETS.md b/Resources/Documentation/SECRETS.md index dd8292f1d..c8c938fff 100644 --- a/Resources/Documentation/SECRETS.md +++ b/Resources/Documentation/SECRETS.md @@ -1,12 +1,16 @@ # Secrets Jump to: +* [Placement](#placement) * [TR1](#tr1) * [TR2](#tr2) * [TR3](#tr3) * [Generating Locations](#generating-locations) -# TR1 +## Placement +Refer to [zones](ZONES.MD) for details on how secret locations are selected. + +## TR1 Original secret triggers are removed during randomization and artefacts are instead added to the level for Lara to collect. Once she collects all of the secrets in a level, a door will open to a new room where the rewards she would otherwise have collected can be found. When picking up a secret, a camera hint will show you the location of this room. The imported artefacts become either a key type, puzzle type or quest type, whichever is available in the level to re-purpose. @@ -34,9 +38,6 @@ The artefact types to collect will change per level. This is in place to ensure | Atlantis | Gold Idol | | Pyramid | Gold Idol | -### Zoning -Secrets are positioned by proximity so that they are fairly equally spread out across the level. - ### Secret Count If [Tomb1Main](https://github.com/rr-/Tomb1Main) is being used, the number of secrets to collect per level can be changed. When you start a level, check Lara's compass to find out how many secrets you need to collect. @@ -48,13 +49,12 @@ The options are: | Shuffled | Use the secret count from another level - the total number of secrets in the game will remain the same. | | Custom | Allocate a number of secrets of your choice (the maximum is currently 5 due to the current reward room implementations). | - ---- # TR2 -Zoning details for TR2 can be found at https://github.com/DanzaG/TR2-Rando/wiki/Zones#secrets +The standard Stone, Jade and Gold dragons will be placed in each level. ---- -# TR3 +## TR3 Secret randomization logic in TR3 works in exactly the same way as TR1. ### Artefacts @@ -71,7 +71,7 @@ Several artefacts are imported per level. This will depend on the secret count a Currently, the number of secrets per level is hard-coded to the level's original sequence. ---- -# Generating Locations +## Generating Locations Use trview to generate secret locations by making use of the available [randomizer settings](https://github.com/chreden/trview#randomizer-integration) feature. The file below should be copied locally to `%LOCALAPPDATA%/trview`. https://github.com/LostArtefacts/TR-Rando/blob/master/TRRandomizerCore/Resources/Shared/randomizer.json @@ -121,8 +121,5 @@ Note that in normal mode, secrets whose states do not match the level are simply Other environment changes should also be kept in mind when placing secrets; for example, rooms may be flooded/drained or some geometry may change. Refer to the specific level environment files in each case. Conditional changes can be made to either undo other environment modifications, or to add your own changes to fit your secrets. Conditional changes are performed following all other standard environment changes, aside from level mirroring, which is always performed last. -### TR2 Zoning -As pre-defined secrets may not necessarily fall into the default [zones](https://github.com/LostArtefacts/TR-Rando/wiki/Zones#secrets), you should position your waypoints manually in stone-jade-gold order instead. For TR1 and TR3, this is not important due to the different zoning technique and the arbitrary artefact types. - ### Underwater Corner Secrets When placing secrets in corners underwater, there is a minimum distance from each wall the secret will need to be positioned - this is 130 units. Any closer to the wall and Lara won't pick the secret up. diff --git a/Resources/Documentation/ZONES.md b/Resources/Documentation/ZONES.md new file mode 100644 index 000000000..397143537 --- /dev/null +++ b/Resources/Documentation/ZONES.md @@ -0,0 +1,26 @@ +# Zones +Zones are used to mark areas within a level in which items can appear. Each game behaves in the same way, and the zoning is applied in three separate cases. + +## Regular items +Guns, ammo, medipacks etc are placed at completely random points in the level, but will always be within reach. Items are placed centre-tile and if placed on a slope, it will always be a slope Lara can stand on. Locations are filtered based on several factors, such as death tiles, tiles that contain large static meshes or other objects that could interfere with Lara picking up the item. + +## Key items +Keys, puzzle items and quest items are placed in well-defined zones, so that the items will always appear before their respective locks/slots. The randomizer provides a `range` option to generally allow controlling the area in which a key item can appear. This is not a uniform setting for every level, because some levels are less linear than others. In addition, the randomizer allows key items to be placed based on whether or not there are [return paths](RETURNPATHS.md) available. This can produce lots of variety as a result - consider the following scenarios as an example, using *The Talion* from Ice Palace in TR2. + +| Range | Return Paths | Zone | +|-|-|-| +| Small | Disabled | The ice structure around the gong at the end of the level. | +| Small | Enabled | The ice structure around the gong at the end of the level, plus the return path from here leading to the yeti pit (and no further). | +| Medium | Disabled | The entire area at the end of the level after dropping to the gong. | +| Medium | Enabled | Anywhere from room 29 onwards (where the gong hammer is normally located). | +| Large | Disabled | _Same as Medium/Disabled_ | +| Large | Enabled | Anywhere from level start to level end. | + +## Secrets +Zone lines for secrets are not as clear-cut as they are for key items. Rather, secrets are placed based on how close they are to each other. So the first secret is placed by the randomizer, then when trying to place the next, if it's deemed too close to the first, another location will be picked. This process continues until all locations are populated, and the required distance is reduced if the randomizer is unable to find suitable locations. + +For TR2, once all locations are selected, they are allocated as Stone, Jade and Gold based on the dev-intended completion route of a level. +For TR1 and TR3, models are imported artefacts so their order is irrelevant. + +## Zone management +The above zoning is achieved using trview JSON files that define level routes, and along each route key waypoints are marked, for example to delimit key item zones. Zones can be managed and visualised using the `key_items` plugin located at https://github.com/LostArtefacts/TR-Rando/tree/master/Resources/trview/plugins. Refer to the [trview documentation](https://github.com/chreden/trview/blob/master/doc/lua/plugins.md) for guidance on setting this up. From dd10b7d21a1e80756c35bc652ae4cd99709fd8ed Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sat, 11 Nov 2023 21:18:03 +0000 Subject: [PATCH 14/17] Update UI New key item options added to the UI. --- TRRandomizerView/Model/ControllerOptions.cs | 95 +++++++++++++++++++- TRRandomizerView/Windows/AdvancedWindow.xaml | 52 ++++++++++- 2 files changed, 142 insertions(+), 5 deletions(-) diff --git a/TRRandomizerView/Model/ControllerOptions.cs b/TRRandomizerView/Model/ControllerOptions.cs index 32ff429ab..47c8dbedd 100644 --- a/TRRandomizerView/Model/ControllerOptions.cs +++ b/TRRandomizerView/Model/ControllerOptions.cs @@ -30,7 +30,7 @@ public class ControllerOptions : INotifyPropertyChanged private BoolItemControlClass _isHardSecrets, _allowGlitched, _guaranteeSecrets, _useRewardRoomCameras, _useRandomSecretModels; private TRSecretCountMode _secretCountMode; private uint _minSecretCount, _maxSecretCount; - private BoolItemControlClass _includeKeyItems, _includeExtraPickups, _randomizeItemTypes, _randomizeItemLocations; + private BoolItemControlClass _includeKeyItems, _allowReturnPathLocations, _includeExtraPickups, _randomizeItemTypes, _randomizeItemLocations, _allowEnemyKeyDrops, _maintainKeyContinuity; private BoolItemControlClass _crossLevelEnemies, _protectMonks, _docileWillard, _swapEnemyAppearance, _allowEmptyEggs, _hideEnemies, _removeLevelEndingLarson, _giveUnarmedItems; private BoolItemControlClass _persistTextures, _randomizeWaterColour, _retainLevelTextures, _retainKeySpriteTextures, _retainSecretSpriteTextures, _retainEnemyTextures, _retainLaraTextures; private BoolItemControlClass _changeAmbientTracks, _includeBlankTracks, _changeTriggerTracks, _separateSecretTracks, _changeWeaponSFX, _changeCrashSFX, _changeEnemySFX, _changeDoorSFX, _linkCreatureSFX, _randomizeWibble; @@ -84,10 +84,12 @@ public class ControllerOptions : INotifyPropertyChanged private RandoDifficulty _randoEnemyDifficulty; private ItemDifficulty _randoItemDifficulty; + private ItemRange _keyItemRange; private GlobeDisplayOption _globeDisplayOption; private BirdMonsterBehaviour _birdMonsterBehaviour; private DragonSpawnType _dragonSpawnType; + private ItemRange[] _itemRanges; private Language[] _availableLanguages; private Language _gameStringLanguage; @@ -1617,6 +1619,16 @@ public BoolItemControlClass IncludeKeyItems } } + public BoolItemControlClass AllowReturnPathLocations + { + get => _allowReturnPathLocations; + set + { + _allowReturnPathLocations = value; + FirePropertyChanged(); + } + } + public BoolItemControlClass IncludeExtraPickups { get => _includeExtraPickups; @@ -1657,6 +1669,46 @@ public ItemDifficulty RandoItemDifficulty } } + public ItemRange KeyItemRange + { + get => _keyItemRange; + set + { + _keyItemRange = value; + FirePropertyChanged(); + } + } + + public ItemRange[] ItemRanges + { + get => _itemRanges; + set + { + _itemRanges = value; + FirePropertyChanged(); + } + } + + public BoolItemControlClass AllowEnemyKeyDrops + { + get => _allowEnemyKeyDrops; + set + { + _allowEnemyKeyDrops = value; + FirePropertyChanged(); + } + } + + public BoolItemControlClass MaintainKeyContinuity + { + get => _maintainKeyContinuity; + set + { + _maintainKeyContinuity = value; + FirePropertyChanged(); + } + } + public bool RandomizeEnemies { get => _randomEnemiesControl.IsActive; @@ -2730,9 +2782,27 @@ public ControllerOptions() IncludeKeyItems = new BoolItemControlClass() { Title = "Include key items", - Description = "Most key item positions will be randomized. Keys will spawn before their respective locks." + Description = "The positions of key item pickups will be randomized. Items will be placed before their respective locks/slots." }; BindingOperations.SetBinding(IncludeKeyItems, BoolItemControlClass.IsActiveProperty, randomizeItemsBinding); + AllowReturnPathLocations = new() + { + Title = "Allow return path locations", + Description = "Allows key items to be placed before points of no return, provided that return paths are enabled (see Global Settings)." + }; + BindingOperations.SetBinding(AllowReturnPathLocations, BoolItemControlClass.IsActiveProperty, randomizeItemsBinding); + AllowEnemyKeyDrops = new() + { + Title = "Allow enemy key item drops", + Description = "Allows key items to be allocated to enemies who will drop them when killed." + }; + BindingOperations.SetBinding(AllowEnemyKeyDrops, BoolItemControlClass.IsActiveProperty, randomizeItemsBinding); + MaintainKeyContinuity = new() + { + Title = "Maintain key item continuity", + Description = $"Maintains continuity for key items when level sequencing changes.{Environment.NewLine}e.g. The Seraph will become a pickup in Barkhang Monastery if The Deck has not yet been visited." + }; + BindingOperations.SetBinding(MaintainKeyContinuity, BoolItemControlClass.IsActiveProperty, randomizeItemsBinding); IncludeExtraPickups = new BoolItemControlClass { Title = "Add extra pickups", @@ -2740,6 +2810,8 @@ public ControllerOptions() }; BindingOperations.SetBinding(IncludeExtraPickups, BoolItemControlClass.IsActiveProperty, randomizeItemsBinding); + IncludeKeyItems.PropertyChanged += IncludeKeyItems_PropertyChanged; + // Enemies Binding randomizeEnemiesBinding = new(nameof(RandomizeEnemies)) { Source = this }; CrossLevelEnemies = new BoolItemControlClass() @@ -3032,7 +3104,7 @@ public ControllerOptions() }; ItemBoolItemControls = new List() { - _randomizeItemTypes, _randomizeItemLocations, _includeKeyItems, _includeExtraPickups + _randomizeItemTypes, _randomizeItemLocations, _includeKeyItems, _allowReturnPathLocations, _allowEnemyKeyDrops, _maintainKeyContinuity, _includeExtraPickups }; EnemyBoolItemControls = new List() { @@ -3074,6 +3146,12 @@ public ControllerOptions() }; } + private void IncludeKeyItems_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + AllowReturnPathLocations.IsActive = IncludeKeyItems.Value; + AllowEnemyKeyDrops.IsActive = IncludeKeyItems.Value; + } + private void SecretCategory_PropertyChanged(object sender, PropertyChangedEventArgs e) { GuaranteeSecrets.IsActive = IsGlitchedSecrets.Value || IsHardSecrets.Value; @@ -3103,6 +3181,7 @@ private void AdjustAvailableOptions() _docileWillard.IsAvailable = IsTR3; _includeKeyItems.IsAvailable = IsKeyItemTypeSupported; + _maintainKeyContinuity.IsAvailable = IsKeyContinuityTypeSupported; _includeExtraPickups.IsAvailable = IsExtraPickupsTypeSupported; _allowGlitched.IsAvailable = IsGlitchedSecretsSupported; @@ -3203,10 +3282,15 @@ public void Load(TRRandomizerController controller) RandomizeItems = _controller.RandomizeItems; ItemSeed = _controller.ItemSeed; IncludeKeyItems.Value = _controller.IncludeKeyItems; + AllowReturnPathLocations.Value = _controller.AllowReturnPathLocations; IncludeExtraPickups.Value = _controller.IncludeExtraPickups; RandomizeItemTypes.Value = _controller.RandomizeItemTypes; RandomizeItemPositions.Value = _controller.RandomizeItemPositions; RandoItemDifficulty = _controller.RandoItemDifficulty; + ItemRanges = Enum.GetValues(); + KeyItemRange = _controller.KeyItemRange; + AllowEnemyKeyDrops.Value = _controller.AllowEnemyKeyDrops; + MaintainKeyContinuity.Value = _controller.MaintainKeyContinuity; RandomizeEnemies = _controller.RandomizeEnemies; EnemySeed = _controller.EnemySeed; @@ -3502,10 +3586,14 @@ public void Save() _controller.RandomizeItems = RandomizeItems; _controller.ItemSeed = ItemSeed; _controller.IncludeKeyItems = IncludeKeyItems.Value; + _controller.AllowReturnPathLocations = AllowReturnPathLocations.Value; _controller.IncludeExtraPickups = IncludeExtraPickups.Value; _controller.RandomizeItemTypes = RandomizeItemTypes.Value; _controller.RandomizeItemPositions = RandomizeItemPositions.Value; _controller.RandoItemDifficulty = RandoItemDifficulty; + _controller.KeyItemRange = KeyItemRange; + _controller.AllowEnemyKeyDrops = AllowEnemyKeyDrops.Value; + _controller.MaintainKeyContinuity = MaintainKeyContinuity.Value; _controller.RandomizeEnemies = RandomizeEnemies; _controller.EnemySeed = EnemySeed; @@ -3712,6 +3800,7 @@ public void Unload() public bool IsSecretRewardTypeSupported => IsRandomizationSupported(TRRandomizerType.SecretReward); public bool IsItemTypeSupported => IsRandomizationSupported(TRRandomizerType.Item); public bool IsKeyItemTypeSupported => IsRandomizationSupported(TRRandomizerType.KeyItems); + public bool IsKeyContinuityTypeSupported => IsRandomizationSupported(TRRandomizerType.KeyContinuity); public bool IsExtraPickupsTypeSupported => IsRandomizationSupported(TRRandomizerType.ExtraPickups); public bool IsEnemyTypeSupported => IsRandomizationSupported(TRRandomizerType.Enemy); public bool IsTextureTypeSupported => IsRandomizationSupported(TRRandomizerType.Texture); diff --git a/TRRandomizerView/Windows/AdvancedWindow.xaml b/TRRandomizerView/Windows/AdvancedWindow.xaml index d050fd4f3..6e3910a63 100644 --- a/TRRandomizerView/Windows/AdvancedWindow.xaml +++ b/TRRandomizerView/Windows/AdvancedWindow.xaml @@ -90,6 +90,7 @@ + @@ -121,7 +122,7 @@ + VerticalAlignment="Top"> @@ -197,8 +198,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + - From e779724f98ee13d2e1789f6326da8e48ed53361b Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sun, 12 Nov 2023 18:51:45 +0000 Subject: [PATCH 15/17] Fix TR3 secret rewards On the Japanese version, secret rewards were still being included in normal item randomization because we weren't testing the version in every scenario. Made a subclass for this case to avoid duplicating the check everywhere. --- .../Randomizers/TR3/TR3ItemRandomizer.cs | 4 ++-- .../Randomizers/TR3/TR3SecretRandomizer.cs | 14 +++-------- .../TR3/TR3SecretRewardRandomizer.cs | 2 +- TRRandomizerCore/Secrets/TR3SecretMapping.cs | 23 +++++++++++++++++++ 4 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 TRRandomizerCore/Secrets/TR3SecretMapping.cs diff --git a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs index c2f369df6..2907e4725 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs @@ -22,7 +22,7 @@ public class TR3ItemRandomizer : BaseTR3Randomizer private TR3Entity _unarmedLevelPistols; // Secret reward items handled in separate class, so track the reward entities - private TRSecretMapping _secretMapping; + private TR3SecretMapping _secretMapping; private readonly LocationPicker _picker; @@ -46,7 +46,7 @@ public override void Randomize(int seed) FindUnarmedLevelPistols(_levelInstance); _picker.Initialise(_levelInstance.Name, GetItemLocationPool(_levelInstance, false), Settings, _generator); - _secretMapping = TRSecretMapping.Get(GetResourcePath($@"TR3\SecretMapping\{_levelInstance.Name}-SecretMapping.json")); + _secretMapping = TR3SecretMapping.Get(GetResourcePath($@"TR3\SecretMapping\{_levelInstance.Name}-SecretMapping.json"), IsJPVersion); // #312 If this is the assault course, import required models. On failure, don't perform any item rando. if (_levelInstance.IsAssault && !ImportAssaultModels(_levelInstance)) diff --git a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs index f822b3140..b29af7cee 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs @@ -174,7 +174,7 @@ private TRSecretRoom MakePlaceholderRewardRoom(TR3CombinedLevel level private void ActualiseRewardRoom(TR3CombinedLevel level, TRSecretRoom placeholder) { - TRSecretMapping secretMapping = TRSecretMapping.Get(GetResourcePath(@"TR3\SecretMapping\" + level.Name + "-SecretMapping.json")); + TR3SecretMapping secretMapping = TR3SecretMapping.Get(GetResourcePath($@"TR3\SecretMapping\{level.Name}-SecretMapping.json"), IsJPVersion); if (secretMapping == null) { return; @@ -213,19 +213,11 @@ private void ActualiseRewardRoom(TR3CombinedLevel level, TRSecretRoom } } - // Get the reward entities - Thames in JP version has different indices, so - // these are defined separately. - List rewardEntities = secretMapping.RewardEntities; - if (IsJPVersion && secretMapping.JPRewardEntities != null) - { - rewardEntities = secretMapping.JPRewardEntities; - } - // Spread the rewards out fairly evenly across each defined position in the new room. int rewardPositionCount = rewardRoom.RewardPositions.Count; - for (int i = 0; i < rewardEntities.Count; i++) + for (int i = 0; i < secretMapping.RewardEntities.Count; i++) { - TR3Entity item = level.Data.Entities[rewardEntities[i]]; + TR3Entity item = level.Data.Entities[secretMapping.RewardEntities[i]]; Location position = rewardRoom.RewardPositions[i % rewardPositionCount]; item.X = position.X; diff --git a/TRRandomizerCore/Randomizers/TR3/TR3SecretRewardRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3SecretRewardRandomizer.cs index 309d25078..aac54ff17 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3SecretRewardRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3SecretRewardRandomizer.cs @@ -34,7 +34,7 @@ private void RandomizeRewards(TR3CombinedLevel level) return; } - TRSecretMapping secretMapping = TRSecretMapping.Get(GetResourcePath(@"TR3\SecretMapping\" + level.Name + "-SecretMapping.json")); + TR3SecretMapping secretMapping = TR3SecretMapping.Get(GetResourcePath($@"TR3\SecretMapping\{level.Name}-SecretMapping.json"), IsJPVersion); List stdItemTypes = TR3TypeUtilities.GetStandardPickupTypes(); // A bit cruel as rewards? diff --git a/TRRandomizerCore/Secrets/TR3SecretMapping.cs b/TRRandomizerCore/Secrets/TR3SecretMapping.cs new file mode 100644 index 000000000..92c25dcaa --- /dev/null +++ b/TRRandomizerCore/Secrets/TR3SecretMapping.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using TREnvironmentEditor; +using TRLevelControl.Model; + +namespace TRRandomizerCore.Secrets; + +public class TR3SecretMapping : TRSecretMapping +{ + public static TR3SecretMapping Get(string packPath, bool japaneseVersion) + { + if (!File.Exists(packPath)) + { + return null; + } + + TR3SecretMapping mapping = JsonConvert.DeserializeObject(File.ReadAllText(packPath), EMEditorMapping.Converter); + if (japaneseVersion && mapping.JPRewardEntities != null) + { + mapping.RewardEntities = mapping.JPRewardEntities; + } + return mapping; + } +} From b237ed4fb23823644bfe1fedd4232811e6c45344 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:20:45 +0000 Subject: [PATCH 16/17] Refactor dynamic room checks --- .../Randomizers/Shared/LocationPicker.cs | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs b/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs index fe973935a..472327d61 100644 --- a/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs +++ b/TRRandomizerCore/Randomizers/Shared/LocationPicker.cs @@ -60,7 +60,8 @@ private void LoadCurrentRoute(string levelName) } // Dynamic locations can indicate return paths or even added puzzle/challenge rooms. - // If we cannot match them precisely to a room that's been added, mark them as invalid. + // If we cannot match them precisely to a room that's been added, or if they are return + // paths but we don't want items there, mark them as invalid. // This assumes our level design does not overlap rooms anywhere. List dynamicLocations = _currentRoute .FindAll(l => l.RoomType == RoomType.ReturnPath || l.RoomType == RoomType.Challenge); @@ -68,22 +69,15 @@ private void LoadCurrentRoute(string levelName) foreach (Location location in dynamicLocations) { List matchingInfos = RoomInfos.FindAll(r => r.Contains(location)); - if (matchingInfos.Count == 1) + if (matchingInfos.Count != 1 + || (!_settings.IncludeReturnPathLocations + && (location.RoomType == RoomType.ReturnPath || location.RequiresReturnPath))) { - if ((location.RoomType == RoomType.ReturnPath || location.RequiresReturnPath) - && !_settings.IncludeReturnPathLocations) - { - // Return paths may be present, but the user doesn't want items placed here. - InvalidateLocation(location); - } - else - { - location.Room = RoomInfos.IndexOf(matchingInfos[0]); - } + InvalidateLocation(location); } else { - InvalidateLocation(location); + location.Room = RoomInfos.IndexOf(matchingInfos[0]); } } } From 06df5d484d700fa48c86d1e516ac1413fb95f189 Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Mon, 13 Nov 2023 20:50:04 +0000 Subject: [PATCH 17/17] Make ItemFactory generic Removed several duplicated methods in ItemFactory by making it generic. --- TRLevelControl/Model/Base/TR1Entity.cs | 20 +-- TRLevelControl/Model/Common/ITREntity.cs | 10 ++ TRLevelControl/Model/Common/TREntity.cs | 7 +- TRLevelControl/Model/TR2/TR2Entity.cs | 12 +- TRLevelControl/Model/TR3/TR3Entity.cs | 12 +- TRLevelControl/Model/TR4/TR4AIEntity.cs | 12 +- TRLevelControl/Model/TR4/TR4Entity.cs | 12 +- TRLevelControl/Model/TR5/TR5AIEntity.cs | 12 +- TRLevelControl/Model/TR5/TR5Entity.cs | 12 +- TRRandomizerCore/Editors/TR1RandoEditor.cs | 3 +- TRRandomizerCore/Editors/TR2RandoEditor.cs | 6 +- TRRandomizerCore/Editors/TR3RandoEditor.cs | 6 +- TRRandomizerCore/Helpers/ItemFactory.cs | 157 ++---------------- .../Processors/TR2/TR2EnemyAdjuster.cs | 2 +- .../Processors/TR3/TR3SequenceProcessor.cs | 2 +- .../Randomizers/Shared/SecretPicker.cs | 5 +- .../Randomizers/TR1/TR1EnemyRandomizer.cs | 4 +- .../Randomizers/TR1/TR1ItemRandomizer.cs | 2 +- .../Randomizers/TR1/TR1SecretRandomizer.cs | 4 +- .../Randomizers/TR2/TR2ItemRandomizer.cs | 4 +- .../Randomizers/TR2/TR2SecretRandomizer.cs | 4 +- .../Randomizers/TR3/TR3EnemyRandomizer.cs | 2 +- .../Randomizers/TR3/TR3ItemRandomizer.cs | 2 +- .../Randomizers/TR3/TR3SecretRandomizer.cs | 4 +- 24 files changed, 69 insertions(+), 247 deletions(-) create mode 100644 TRLevelControl/Model/Common/ITREntity.cs diff --git a/TRLevelControl/Model/Base/TR1Entity.cs b/TRLevelControl/Model/Base/TR1Entity.cs index 76aeceaaa..bfd8ee58e 100644 --- a/TRLevelControl/Model/Base/TR1Entity.cs +++ b/TRLevelControl/Model/Base/TR1Entity.cs @@ -1,27 +1,9 @@ namespace TRLevelControl.Model; -public class TR1Entity : TREntity, ICloneable +public class TR1Entity : TREntity { public short Intensity { get; set; } - public TR1Entity Clone() - { - return new() - { - TypeID = TypeID, - Room = Room, - X = X, - Y = Y, - Z = Z, - Angle = Angle, - Intensity = Intensity, - Flags = Flags, - }; - } - - object ICloneable.Clone() - => Clone(); - public override string ToString() { return $"{base.ToString()} Intensity: {Intensity}"; diff --git a/TRLevelControl/Model/Common/ITREntity.cs b/TRLevelControl/Model/Common/ITREntity.cs new file mode 100644 index 000000000..a87fb8132 --- /dev/null +++ b/TRLevelControl/Model/Common/ITREntity.cs @@ -0,0 +1,10 @@ +namespace TRLevelControl.Model; + +public interface ITREntity : ICloneable +{ + public int X { get; set; } + public int Y { get; set; } + public int Z { get; set; } + public short Room { get; set; } + public short Angle { get; set; } +} diff --git a/TRLevelControl/Model/Common/TREntity.cs b/TRLevelControl/Model/Common/TREntity.cs index ec9bef867..b938c2c96 100644 --- a/TRLevelControl/Model/Common/TREntity.cs +++ b/TRLevelControl/Model/Common/TREntity.cs @@ -1,6 +1,6 @@ namespace TRLevelControl.Model; -public class TREntity +public class TREntity : ITREntity where T : Enum { public T TypeID { get; set; } @@ -53,6 +53,11 @@ public ushort CodeBits } } + public object Clone() + { + return MemberwiseClone(); + } + public override string ToString() { return $"{base.ToString()} TypeID: {TypeID} X: {X} Y: {Y} Z: {Z} Room: {Room} Angle: {Angle} Flags: {Flags}"; diff --git a/TRLevelControl/Model/TR2/TR2Entity.cs b/TRLevelControl/Model/TR2/TR2Entity.cs index ac7cbb7e8..fa42336ce 100644 --- a/TRLevelControl/Model/TR2/TR2Entity.cs +++ b/TRLevelControl/Model/TR2/TR2Entity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR2Entity : TREntity, ICloneable +public class TR2Entity : TREntity { public short Intensity1 { get; set; } public short Intensity2 { get; set; } - public TR2Entity Clone() - { - return (TR2Entity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} Intensity1: {Intensity1} Intensity2: {Intensity2}"; diff --git a/TRLevelControl/Model/TR3/TR3Entity.cs b/TRLevelControl/Model/TR3/TR3Entity.cs index 9c7d8ddb3..9a0e2dca2 100644 --- a/TRLevelControl/Model/TR3/TR3Entity.cs +++ b/TRLevelControl/Model/TR3/TR3Entity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR3Entity : TREntity, ICloneable +public class TR3Entity : TREntity { public short Intensity1 { get; set; } public short Intensity2 { get; set; } - public TR3Entity Clone() - { - return (TR3Entity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} Intensity1: {Intensity1} Intensity2: {Intensity2}"; diff --git a/TRLevelControl/Model/TR4/TR4AIEntity.cs b/TRLevelControl/Model/TR4/TR4AIEntity.cs index 69789b584..ae7b84af6 100644 --- a/TRLevelControl/Model/TR4/TR4AIEntity.cs +++ b/TRLevelControl/Model/TR4/TR4AIEntity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR4AIEntity : TREntity, ICloneable +public class TR4AIEntity : TREntity { public short OCB { get; set; } public short Box { get; set; } - public TR4AIEntity Clone() - { - return (TR4AIEntity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} OCB: {OCB} Box: {Box}"; diff --git a/TRLevelControl/Model/TR4/TR4Entity.cs b/TRLevelControl/Model/TR4/TR4Entity.cs index 4f28d7811..e74d6f21b 100644 --- a/TRLevelControl/Model/TR4/TR4Entity.cs +++ b/TRLevelControl/Model/TR4/TR4Entity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR4Entity : TREntity, ICloneable +public class TR4Entity : TREntity { public short Intensity { get; set; } public short OCB { get; set; } - public TR4Entity Clone() - { - return (TR4Entity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} Intensity: {Intensity} OCB: {OCB}"; diff --git a/TRLevelControl/Model/TR5/TR5AIEntity.cs b/TRLevelControl/Model/TR5/TR5AIEntity.cs index cfd07cfa9..7b8829f04 100644 --- a/TRLevelControl/Model/TR5/TR5AIEntity.cs +++ b/TRLevelControl/Model/TR5/TR5AIEntity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR5AIEntity : TREntity, ICloneable +public class TR5AIEntity : TREntity { public short OCB { get; set; } public short Box { get; set; } - public TR5AIEntity Clone() - { - return (TR5AIEntity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} OCB: {OCB} Box: {Box}"; diff --git a/TRLevelControl/Model/TR5/TR5Entity.cs b/TRLevelControl/Model/TR5/TR5Entity.cs index 0c0d7f126..cff98a048 100644 --- a/TRLevelControl/Model/TR5/TR5Entity.cs +++ b/TRLevelControl/Model/TR5/TR5Entity.cs @@ -1,20 +1,10 @@ namespace TRLevelControl.Model; -public class TR5Entity : TREntity, ICloneable +public class TR5Entity : TREntity { public short Intensity { get; set; } public short OCB { get; set; } - public TR5Entity Clone() - { - return (TR5Entity)MemberwiseClone(); - } - - object ICloneable.Clone() - { - return Clone(); - } - public override string ToString() { return $"{base.ToString()} Intensity: {Intensity} OCB: {OCB}"; diff --git a/TRRandomizerCore/Editors/TR1RandoEditor.cs b/TRRandomizerCore/Editors/TR1RandoEditor.cs index 4ad16f0e4..710873f7a 100644 --- a/TRRandomizerCore/Editors/TR1RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR1RandoEditor.cs @@ -2,6 +2,7 @@ using System.Drawing; using TRGE.Coord; using TRGE.Core; +using TRLevelControl.Model; using TRRandomizerCore.Helpers; using TRRandomizerCore.Processors; using TRRandomizerCore.Randomizers; @@ -134,7 +135,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni scriptEditor.SaveScript(); } - ItemFactory itemFactory = new(@"Resources\TR1\Items\repurposable_items.json"); + ItemFactory itemFactory = new(@"Resources\TR1\Items\repurposable_items.json"); TR1TextureMonitorBroker textureMonitor = new(); TR1ItemRandomizer itemRandomizer = new() diff --git a/TRRandomizerCore/Editors/TR2RandoEditor.cs b/TRRandomizerCore/Editors/TR2RandoEditor.cs index c0a6187cb..027b28d06 100644 --- a/TRRandomizerCore/Editors/TR2RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR2RandoEditor.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using TRGE.Coord; using TRGE.Core; +using TRLevelControl.Model; using TRRandomizerCore.Helpers; using TRRandomizerCore.Processors; using TRRandomizerCore.Randomizers; @@ -138,7 +139,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni scriptEditor.SaveScript(); } - ItemFactory itemFactory = new(); + ItemFactory itemFactory = new() + { + DefaultItem = new() { Intensity1 = -1, Intensity2 = -1 } + }; TR2TextureMonitorBroker textureMonitor = new(); TR2ItemRandomizer itemRandomizer = new() diff --git a/TRRandomizerCore/Editors/TR3RandoEditor.cs b/TRRandomizerCore/Editors/TR3RandoEditor.cs index eb80095d7..1f36c268e 100644 --- a/TRRandomizerCore/Editors/TR3RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR3RandoEditor.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using TRGE.Coord; using TRGE.Core; +using TRLevelControl.Model; using TRRandomizerCore.Helpers; using TRRandomizerCore.Processors; using TRRandomizerCore.Randomizers; @@ -131,7 +132,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni } // Shared tracker objects between randomizers - ItemFactory itemFactory = new(@"Resources\TR3\Items\repurposable_items.json"); + ItemFactory itemFactory = new(@"Resources\TR3\Items\repurposable_items.json") + { + DefaultItem = new() { Intensity1 = -1, Intensity2 = -1 } + }; TR3TextureMonitorBroker textureMonitor = new(); TR3ItemRandomizer itemRandomizer = new() diff --git a/TRRandomizerCore/Helpers/ItemFactory.cs b/TRRandomizerCore/Helpers/ItemFactory.cs index 766e40612..d1a1b8e65 100644 --- a/TRRandomizerCore/Helpers/ItemFactory.cs +++ b/TRRandomizerCore/Helpers/ItemFactory.cs @@ -3,7 +3,8 @@ namespace TRRandomizerCore.Helpers; -public class ItemFactory +public class ItemFactory + where T : class, ITREntity, new() { private static readonly int _entityLimit = 256; @@ -11,6 +12,8 @@ public class ItemFactory private readonly Dictionary> _availableItems; private readonly Dictionary> _lockedItems; + public T DefaultItem { get; set; } + public ItemFactory(string dataPath = null) { _reusableItemDefaults = dataPath == null @@ -36,22 +39,7 @@ public Queue GetItemPool(string lvl) return _availableItems[lvl]; } - public int GetNextIndex(string lvl, List allItems, bool allowLimitBreak = false) - { - return GetNextIndex(lvl, allItems.Count, allowLimitBreak); - } - - public int GetNextIndex(string lvl, List allItems, bool allowLimitBreak = false) - { - return GetNextIndex(lvl, allItems.Count, allowLimitBreak); - } - - public int GetNextIndex(string lvl, List allItems, bool allowLimitBreak = false) - { - return GetNextIndex(lvl, allItems.Count, allowLimitBreak); - } - - public int GetNextIndex(string lvl, int totalItemCount, bool allowLimitBreak) + public int GetNextIndex(string lvl, List allItems, bool allowLimitBreak = false) { Queue pool = GetItemPool(lvl); if (pool.Count > 0) @@ -59,41 +47,24 @@ public int GetNextIndex(string lvl, int totalItemCount, bool allowLimitBreak) return pool.Peek(); } - return (totalItemCount < _entityLimit || allowLimitBreak) ? totalItemCount : -1; - } - - public bool CanCreateItem(string lvl, List allItems, bool allowLimitBreak = false) - { - return GetNextIndex(lvl, allItems, allowLimitBreak) != -1; - } - - public bool CanCreateItem(string lvl, List allItems, bool allowLimitBreak = false) - { - return GetNextIndex(lvl, allItems, allowLimitBreak) != -1; + return (allItems.Count < _entityLimit || allowLimitBreak) ? allItems.Count : -1; } - public bool CanCreateItem(string lvl, List allItems, bool allowLimitBreak = false) + public bool CanCreateItem(string lvl, List allItems, bool allowLimitBreak = false) { return GetNextIndex(lvl, allItems, allowLimitBreak) != -1; } - public bool CanCreateItems(string lvl, List allItems, int count, bool allowLimitBreak = false) - { - int reusableCount = GetItemPool(lvl).Count; - count -= Math.Min(count, reusableCount); - return allItems.Count + count <= _entityLimit || allowLimitBreak; - } - - public bool CanCreateItems(string lvl, List allItems, int count, bool allowLimitBreak = false) + public bool CanCreateItems(string lvl, List allItems, int count, bool allowLimitBreak = false) { int reusableCount = GetItemPool(lvl).Count; count -= Math.Min(count, reusableCount); return allItems.Count + count <= _entityLimit || allowLimitBreak; } - public TR1Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) + public T CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) { - TR1Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); + T entity = CreateItem(lvl, allItems, location, allowLimitBreak); if (entity != null) { LockItem(lvl, allItems.IndexOf(entity)); @@ -101,114 +72,21 @@ public TR1Entity CreateLockedItem(string lvl, List allItems, Location return entity; } - public TR2Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) + public T CreateItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) { - TR2Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); - if (entity != null) - { - LockItem(lvl, allItems.IndexOf(entity)); - } - return entity; - } - - public TR3Entity CreateLockedItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) - { - TR3Entity entity = CreateItem(lvl, allItems, location, allowLimitBreak); - if (entity != null) - { - LockItem(lvl, allItems.IndexOf(entity)); - } - return entity; - } - - public TR1Entity CreateItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) - { - TR1Entity item; + T item = (T)DefaultItem?.Clone() ?? new(); Queue pool = GetItemPool(lvl); if (pool.Count > 0) { - item = allItems[pool.Dequeue()]; + allItems[pool.Dequeue()] = item; } - else + else if (allItems.Count < _entityLimit || allowLimitBreak) { - if (allItems.Count < _entityLimit || allowLimitBreak) - { - allItems.Add(item = new()); - } - else - { - return null; - } - } - - if (location != null) - { - item.X = location.X; - item.Y = location.Y; - item.Z = location.Z; - item.Room = (short)location.Room; - item.Angle = location.Angle; - } - - // Set some defaults - item.Intensity = 0; - item.Flags = 0; - return item; - } - - public TR2Entity CreateItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) - { - TR2Entity item; - Queue pool = GetItemPool(lvl); - if (pool.Count > 0) - { - item = allItems[pool.Dequeue()]; + allItems.Add(item); } else { - if (allItems.Count < _entityLimit || allowLimitBreak) - { - allItems.Add(item = new()); - } - else - { - return null; - } - } - - if (location != null) - { - item.X = location.X; - item.Y = location.Y; - item.Z = location.Z; - item.Room = (short)location.Room; - item.Angle = location.Angle; - } - - // Set some defaults - item.Intensity1 = item.Intensity2 = -1; - item.Flags = 0; - return item; - } - - public TR3Entity CreateItem(string lvl, List allItems, Location location = null, bool allowLimitBreak = false) - { - TR3Entity item; - Queue pool = GetItemPool(lvl); - if (pool.Count > 0) - { - item = allItems[pool.Dequeue()]; - } - else - { - if (allItems.Count < _entityLimit || allowLimitBreak) - { - allItems.Add(item = new()); - } - else - { - return null; - } + return null; } if (location != null) @@ -220,9 +98,6 @@ public TR3Entity CreateItem(string lvl, List allItems, Location locat item.Angle = location.Angle; } - // Set some defaults - item.Intensity1 = item.Intensity2 = -1; - item.Flags = 0; return item; } diff --git a/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs b/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs index 79d8863e6..aa6ca8220 100644 --- a/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs +++ b/TRRandomizerCore/Processors/TR2/TR2EnemyAdjuster.cs @@ -15,7 +15,7 @@ public class TR2EnemyAdjuster : TR2LevelProcessor [TR2LevelNames.MONASTERY] = new List { 38, 39, 118 } }; - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public void AdjustEnemies() { diff --git a/TRRandomizerCore/Processors/TR3/TR3SequenceProcessor.cs b/TRRandomizerCore/Processors/TR3/TR3SequenceProcessor.cs index ee2974b7c..845a750bd 100644 --- a/TRRandomizerCore/Processors/TR3/TR3SequenceProcessor.cs +++ b/TRRandomizerCore/Processors/TR3/TR3SequenceProcessor.cs @@ -49,7 +49,7 @@ public class TR3SequenceProcessor : TR3LevelProcessor public RandomizerSettings Settings { get; set; } public TR3TextureMonitorBroker TextureMonitor { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public void Run() { diff --git a/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs b/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs index de39f2b1f..6b68b7e39 100644 --- a/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs +++ b/TRRandomizerCore/Randomizers/Shared/SecretPicker.cs @@ -5,7 +5,8 @@ namespace TRRandomizerCore.Randomizers; -public class SecretPicker +public class SecretPicker + where T : class, ITREntity, new() { private const int _maxRetryLimit = 500; private const float _distanceStep = 1.0f; @@ -21,7 +22,7 @@ public class SecretPicker public RandomizerSettings Settings { get; set; } public Random Generator { get; set; } public IMirrorControl Mirrorer { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public IRouteManager RouteManager { get; set; } public Func SectorAction { get; set; } public Func PlacementTestAction { get; set; } diff --git a/TRRandomizerCore/Randomizers/TR1/TR1EnemyRandomizer.cs b/TRRandomizerCore/Randomizers/TR1/TR1EnemyRandomizer.cs index 6ab8646f6..f3695192f 100644 --- a/TRRandomizerCore/Randomizers/TR1/TR1EnemyRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR1/TR1EnemyRandomizer.cs @@ -35,7 +35,7 @@ public class TR1EnemyRandomizer : BaseTR1Randomizer private ISet _resultantEnemies; internal TR1TextureMonitorBroker TextureMonitor { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public override void Randomize(int seed) { @@ -1302,7 +1302,7 @@ private void CloneEnemies(TR1CombinedLevel level) }); } - TR1Entity clone = enemy.Clone(); + TR1Entity clone = (TR1Entity)enemy.Clone(); level.Data.Entities.Add(clone); if (enemy.TypeID != TR1Type.AtlanteanEgg diff --git a/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs index 9888c7d5a..3a28d7b27 100644 --- a/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR1/TR1ItemRandomizer.cs @@ -61,7 +61,7 @@ public class TR1ItemRandomizer : BaseTR1Randomizer private readonly LocationPicker _picker; private ItemSpriteRandomizer _spriteRandomizer; - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public TR1ItemRandomizer() { diff --git a/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs index 6fc8ea19a..965260152 100644 --- a/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR1/TR1SecretRandomizer.cs @@ -26,9 +26,9 @@ public class TR1SecretRandomizer : BaseTR1Randomizer, ISecretRandomizer private readonly Dictionary> _locations, _unarmedLocations; private readonly LocationPicker _routePicker; - private SecretPicker _secretPicker; + private SecretPicker _secretPicker; - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public IMirrorControl Mirrorer { get; set; } public TR1SecretRandomizer() diff --git a/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs index 9f46b49b3..4bb644afb 100644 --- a/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR2/TR2ItemRandomizer.cs @@ -25,7 +25,7 @@ public class TR2ItemRandomizer : BaseTR2Randomizer }; internal TR2TextureMonitorBroker TextureMonitor { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } // This replaces plane cargo index as TRGE may have randomized the weaponless level(s), but will also have injected pistols // into predefined locations. See FindUnarmedPistolsLocation below. @@ -506,7 +506,7 @@ private void CopyEntity(TR2Entity entity, TR2Type newType) { if (_levelInstance.Data.Entities.Count < _levelInstance.GetMaximumEntityLimit()) { - TR2Entity copy = entity.Clone(); + TR2Entity copy = (TR2Entity)entity.Clone(); copy.TypeID = newType; _levelInstance.Data.Entities.Add(copy); } diff --git a/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs index 5fea9055c..b5e825c89 100644 --- a/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR2/TR2SecretRandomizer.cs @@ -22,10 +22,10 @@ public class TR2SecretRandomizer : BaseTR2Randomizer, ISecretRandomizer private readonly Dictionary> _locations; private readonly LocationPicker _routePicker; - private SecretPicker _secretPicker; + private SecretPicker _secretPicker; public IMirrorControl Mirrorer { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public TR2SecretRandomizer() { diff --git a/TRRandomizerCore/Randomizers/TR3/TR3EnemyRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3EnemyRandomizer.cs index bf9349ce9..a2a512a12 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3EnemyRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3EnemyRandomizer.cs @@ -20,7 +20,7 @@ public class TR3EnemyRandomizer : BaseTR3Randomizer private ISet _resultantEnemies; internal TR3TextureMonitorBroker TextureMonitor { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public override void Randomize(int seed) { diff --git a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs index 2907e4725..807b91276 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3ItemRandomizer.cs @@ -26,7 +26,7 @@ public class TR3ItemRandomizer : BaseTR3Randomizer private readonly LocationPicker _picker; - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public TR3ItemRandomizer() { diff --git a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs index b29af7cee..b28575cb8 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3SecretRandomizer.cs @@ -25,10 +25,10 @@ public class TR3SecretRandomizer : BaseTR3Randomizer, ISecretRandomizer private readonly Dictionary> _locations, _unarmedLocations; private readonly LocationPicker _routePicker; - private SecretPicker _secretPicker; + private SecretPicker _secretPicker; internal TR3TextureMonitorBroker TextureMonitor { get; set; } - public ItemFactory ItemFactory { get; set; } + public ItemFactory ItemFactory { get; set; } public IMirrorControl Mirrorer { get; set; } public TR3SecretRandomizer()