diff --git a/TREnvironmentEditor/Model/Types/Triggers/EMMoveTriggerFunction.cs b/TREnvironmentEditor/Model/Types/Triggers/EMMoveTriggerFunction.cs index f1a301453..09a8de86d 100644 --- a/TREnvironmentEditor/Model/Types/Triggers/EMMoveTriggerFunction.cs +++ b/TREnvironmentEditor/Model/Types/Triggers/EMMoveTriggerFunction.cs @@ -42,23 +42,26 @@ public override void ApplyToLevel(TR3Level level) private bool MoveTriggers(TRRoomSector baseSector, TRRoomSector newSector, FDControl control) { - if (baseSector.FDIndex != 0) + if (baseSector != newSector && baseSector.FDIndex != 0) { - if (newSector.FDIndex == 0) + List triggers = control.Entries[baseSector.FDIndex].FindAll(e => e is FDTriggerEntry); + if (triggers.Count > 0) { - control.CreateFloorData(newSector); - } + if (newSector.FDIndex == 0) + { + control.CreateFloorData(newSector); + } - List triggers = control.Entries[baseSector.FDIndex].FindAll(e => e is FDTriggerEntry); - control.Entries[newSector.FDIndex].AddRange(triggers); + control.Entries[newSector.FDIndex].AddRange(triggers); - control.Entries[baseSector.FDIndex].RemoveAll(e => triggers.Contains(e)); - if (control.Entries[baseSector.FDIndex].Count == 0) - { - control.RemoveFloorData(baseSector); - } + control.Entries[baseSector.FDIndex].RemoveAll(e => triggers.Contains(e)); + if (control.Entries[baseSector.FDIndex].Count == 0) + { + control.RemoveFloorData(baseSector); + } - return true; + return true; + } } return false; diff --git a/TRRandomizerCore/Editors/TR3RandoEditor.cs b/TRRandomizerCore/Editors/TR3RandoEditor.cs index 752e077e0..f88b86f81 100644 --- a/TRRandomizerCore/Editors/TR3RandoEditor.cs +++ b/TRRandomizerCore/Editors/TR3RandoEditor.cs @@ -84,6 +84,11 @@ protected override int GetSaveTarget(int numLevels) target += numLevels * 3; } + if (Settings.RandomizeStartPosition) + { + target += numLevels; + } + // Environment randomizer always runs target += numLevels; @@ -193,6 +198,19 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni }.Randomize(Settings.EnemySeed); } + if (!monitor.IsCancelled && Settings.RandomizeStartPosition) + { + monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing start positions"); + new TR3StartPositionRandomizer + { + ScriptEditor = tr23ScriptEditor, + Levels = levels, + BasePath = wipDirectory, + SaveMonitor = monitor, + Settings = Settings + }.Randomize(Settings.StartPositionSeed); + } + if (!monitor.IsCancelled) { monitor.FireSaveStateBeginning(TRSaveCategory.Custom, /*Settings.RandomizeEnvironment ? "Randomizing environment" : */"Applying default environment packs"); @@ -276,7 +294,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni TextureMonitor = textureMonitor }.Randomize(Settings.TextureSeed); } - else if (Settings.RandomizeNightMode) + else if (Settings.RandomizeNightMode && !Settings.RandomizeVfx) { monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing night mode textures"); new TR3TextureRandomizer diff --git a/TRRandomizerCore/Randomizers/TR3/TR3StartPositionRandomizer.cs b/TRRandomizerCore/Randomizers/TR3/TR3StartPositionRandomizer.cs index 88a38d2e1..cf0ee9711 100644 --- a/TRRandomizerCore/Randomizers/TR3/TR3StartPositionRandomizer.cs +++ b/TRRandomizerCore/Randomizers/TR3/TR3StartPositionRandomizer.cs @@ -1,16 +1,120 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using TREnvironmentEditor.Helpers; +using TREnvironmentEditor.Model.Types; +using TRGE.Core; +using TRLevelReader.Model; +using TRLevelReader.Model.Enums; +using TRRandomizerCore.Helpers; +using TRRandomizerCore.Levels; namespace TRRandomizerCore.Randomizers { public class TR3StartPositionRandomizer : BaseTR3Randomizer { + private static readonly short _rotation = -8192; + private Dictionary> _startLocations; + public override void Randomize(int seed) { - throw new NotImplementedException(); + _generator = new Random(seed); + _startLocations = JsonConvert.DeserializeObject>>(ReadResource(@"TR3\Locations\start_positions.json")); + + foreach (TR3ScriptedLevel lvl in Levels) + { + LoadLevelInstance(lvl); + + RandomizeStartPosition(_levelInstance); + + SaveLevelInstance(); + + if (!TriggerProgress()) + { + break; + } + } + } + + private void RandomizeStartPosition(TR3CombinedLevel level) + { + List entities = level.Data.Entities.ToList(); + TR2Entity lara = entities.Find(e => e.TypeID == (short)TR3Entities.Lara); + + // If we haven't defined anything for a level, Lara will just be rotated. This is most likely where there are + // triggers just after Lara's starting spot, so we just skip them here. + if (!Settings.RotateStartPositionOnly && _startLocations.ContainsKey(level.Name)) + { + List locations = _startLocations[level.Name]; + if (Settings.DevelopmentMode) + { + foreach (Location loc in locations) + { + entities.Add(new TR2Entity + { + TypeID = (short)TR3Entities.Lara, + X = loc.X, + Y = loc.Y, + Z = loc.Z, + Room = (short)loc.Room, + Angle = lara.Angle, + Intensity1 = -1, + Intensity2 = -1, + Flags = 0 + }); + } + } + else + { + Location location; + do + { + location = locations[_generator.Next(0, locations.Count)]; + } + while (!location.Validated); + + // If there are any triggers below Lara, move them + new EMMoveTriggerFunction + { + BaseLocation = new EMLocation + { + X = lara.X, + Y = lara.Y, + Z = lara.Z, + Room = lara.Room + }, + NewLocation = new EMLocation + { + X = location.X, + Y = location.Y, + Z = location.Z, + Room = (short)location.Room + } + }.ApplyToLevel(level.Data); + + lara.X = location.X; + lara.Y = location.Y; + lara.Z = location.Z; + lara.Room = (short)location.Room; + lara.Angle = (short)(_generator.Next(0, 8) * _rotation); + } + } + else + { + short currentAngle = lara.Angle; + do + { + lara.Angle = (short)(_generator.Next(0, 8) * _rotation); + } + while (lara.Angle == currentAngle); + } + + if (Settings.DevelopmentMode) + { + level.Data.Entities = entities.ToArray(); + level.Data.NumEntities = (uint)entities.Count; + } } } -} +} \ No newline at end of file diff --git a/TRRandomizerCore/Resources/TR3/Locations/start_positions.json b/TRRandomizerCore/Resources/TR3/Locations/start_positions.json new file mode 100644 index 000000000..2ca1f494c --- /dev/null +++ b/TRRandomizerCore/Resources/TR3/Locations/start_positions.json @@ -0,0 +1,1152 @@ +{ + "JUNGLE.TR2": [ + { + "X": 27136, + "Y": -256, + "Z": 28160, + "Room": 4 + }, + { + "X": 26112, + "Y": -256, + "Z": 28160, + "Room": 4 + }, + { + "X": 25088, + "Y": -256, + "Z": 28160, + "Room": 4 + }, + { + "X": 23040, + "Y": -2816, + "Z": 28160, + "Room": 4 + }, + { + "X": 28967, + "Y": -403, + "Z": 27954, + "Room": 4 + }, + { + "X": 30014, + "Y": -952, + "Z": 28386, + "Room": 4 + }, + { + "X": 31232, + "Y": -1152, + "Z": 28160, + "Room": 4 + }, + { + "X": 32437, + "Y": -1931, + "Z": 28512, + "Room": 4 + }, + { + "X": 33267, + "Y": -2526, + "Z": 29208, + "Room": 4 + }, + { + "X": 28186, + "Y": -70, + "Z": 29043, + "Room": 4 + }, + { + "X": 27003, + "Y": -256, + "Z": 28942, + "Room": 4 + }, + { + "X": 26077, + "Y": -916, + "Z": 30576, + "Room": 4 + }, + { + "X": 24064, + "Y": 128, + "Z": 30208, + "Room": 4 + }, + { + "X": 24100, + "Y": 90, + "Z": 30810, + "Room": 4 + }, + { + "X": 25088, + "Y": 768, + "Z": 32256, + "Room": 4 + }, + { + "X": 24064, + "Y": 1024, + "Z": 32256, + "Room": 4 + }, + { + "X": 31413, + "Y": -512, + "Z": 30054, + "Room": 4 + }, + { + "X": 26112, + "Y": -256, + "Z": 29184, + "Room": 4 + }, + { + "X": 25291, + "Y": -256, + "Z": 28989, + "Room": 4 + }, + { + "X": 27341, + "Y": -64, + "Z": 30030, + "Room": 4 + }, + { + "X": 24258, + "Y": 61, + "Z": 29307, + "Room": 4 + } + ], + "TEMPLE.TR2": [ + { + "X": 93384, + "Y": -2265, + "Z": 28479, + "Room": 18 + }, + { + "X": 88576, + "Y": -1024, + "Z": 27136, + "Room": 18 + }, + { + "X": 87552, + "Y": -640, + "Z": 26112, + "Room": 18 + }, + { + "X": 93696, + "Y": -384, + "Z": 27136, + "Room": 18 + }, + { + "X": 93696, + "Y": -512, + "Z": 26112, + "Room": 18 + }, + { + "X": 92672, + "Y": -512, + "Z": 26112, + "Room": 18 + }, + { + "X": 92519, + "Y": -512, + "Z": 26903, + "Room": 18 + }, + { + "X": 90624, + "Y": -1152, + "Z": 27136, + "Room": 18 + } + ], + "QUADCHAS.TR2": [ + { + "X": 73216, + "Y": -5504, + "Z": 54784, + "Room": 0 + }, + { + "X": 80384, + "Y": 768, + "Z": 47616, + "Room": 31 + }, + { + "X": 82432, + "Y": -256, + "Z": 59904, + "Room": 1 + }, + { + "X": 79360, + "Y": -256, + "Z": 58880, + "Room": 1 + }, + { + "X": 78336, + "Y": -2048, + "Z": 55808, + "Room": 2 + }, + { + "X": 78336, + "Y": -2048, + "Z": 54784, + "Room": 2 + }, + { + "X": 78336, + "Y": -2048, + "Z": 53760, + "Room": 2 + }, + { + "X": 79360, + "Y": -1408, + "Z": 53760, + "Room": 1 + }, + { + "X": 79360, + "Y": -1408, + "Z": 54784, + "Room": 1 + }, + { + "X": 79360, + "Y": -1536, + "Z": 55808, + "Room": 1 + }, + { + "X": 79360, + "Y": -3200, + "Z": 56832, + "Room": 2 + }, + { + "X": 79360, + "Y": -1664, + "Z": 52736, + "Room": 1 + }, + { + "X": 80384, + "Y": -256, + "Z": 53760, + "Room": 1 + }, + { + "X": 80384, + "Y": -256, + "Z": 54784, + "Room": 1 + }, + { + "X": 81408, + "Y": -256, + "Z": 55808, + "Room": 1 + }, + { + "X": 80384, + "Y": -256, + "Z": 51712, + "Room": 1 + }, + { + "X": 84480, + "Y": -256, + "Z": 62976, + "Room": 7 + }, + { + "X": 88576, + "Y": -384, + "Z": 62976, + "Room": 7 + }, + { + "X": 81408, + "Y": -256, + "Z": 57856, + "Room": 1 + }, + { + "X": 85504, + "Y": -512, + "Z": 48640, + "Room": 10 + } + ], + "TONYBOSS.TR2": [ + { + "X": 5632, + "Y": -15360, + "Z": 44544, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 44544, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 45568, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 46592, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 47616, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 48640, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 49664, + "Room": 3 + }, + { + "X": 4608, + "Y": -15360, + "Z": 50688, + "Room": 3 + }, + { + "X": 5632, + "Y": -15360, + "Z": 50688, + "Room": 3 + }, + { + "X": 6656, + "Y": -15360, + "Z": 50688, + "Room": 3 + }, + { + "X": 7680, + "Y": -15360, + "Z": 50688, + "Room": 3 + }, + { + "X": 8704, + "Y": -15360, + "Z": 50688, + "Room": 3 + }, + { + "X": 9728, + "Y": -15360, + "Z": 48640, + "Room": 9 + }, + { + "X": 11776, + "Y": -15360, + "Z": 49664, + "Room": 9 + } + ], + "SHORE.TR2": [ + { + "X": 20723, + "Y": 0, + "Z": 9504, + "Room": 24 + }, + { + "X": 19772, + "Y": 0, + "Z": 6877, + "Room": 24 + }, + { + "X": 18944, + "Y": -256, + "Z": 4608, + "Room": 24 + }, + { + "X": 17920, + "Y": -128, + "Z": 4608, + "Room": 24 + }, + { + "X": 22207, + "Y": -169, + "Z": 4760, + "Room": 24 + }, + { + "X": 21268, + "Y": -256, + "Z": 5772, + "Room": 24 + }, + { + "X": 21974, + "Y": -2348, + "Z": 10716, + "Room": 24 + }, + { + "X": 20992, + "Y": -640, + "Z": 15872, + "Room": 4 + } + ], + "CRASH.TR2": [ + { + "X": 12800, + "Y": -5376, + "Z": 76288, + "Room": 86 + }, + { + "X": 12800, + "Y": -5376, + "Z": 75264, + "Room": 86 + }, + { + "X": 12800, + "Y": -5376, + "Z": 74240, + "Room": 86 + }, + { + "X": 12800, + "Y": -5376, + "Z": 73216, + "Room": 86 + }, + { + "X": 11776, + "Y": -5376, + "Z": 73216, + "Room": 90 + }, + { + "X": 11776, + "Y": -5376, + "Z": 76288, + "Room": 91 + }, + { + "X": 10752, + "Y": -5376, + "Z": 76288, + "Room": 91 + }, + { + "X": 10752, + "Y": -5376, + "Z": 75264, + "Room": 90 + }, + { + "X": 11776, + "Y": -5376, + "Z": 75264, + "Room": 90 + }, + { + "X": 10752, + "Y": -5376, + "Z": 74240, + "Room": 90 + } + ], + "RAPIDS.TR2": [ + { + "X": 75264, + "Y": -26112, + "Z": 54784, + "Room": 50 + }, + { + "X": 74240, + "Y": -26112, + "Z": 54784, + "Room": 50 + }, + { + "X": 73216, + "Y": -26112, + "Z": 54784, + "Room": 50 + }, + { + "X": 72192, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 74240, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 75264, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 76288, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 77312, + "Y": -25984, + "Z": 55808, + "Room": 50 + }, + { + "X": 77312, + "Y": -26112, + "Z": 54784, + "Room": 50 + }, + { + "X": 77312, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 76288, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 75264, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 74240, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 73216, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 72192, + "Y": -25856, + "Z": 56832, + "Room": 50 + }, + { + "X": 77308, + "Y": -28669, + "Z": 58365, + "Room": 53 + } + ], + "TRIBOSS.TR2": [ + { + "X": 45568, + "Y": -10496, + "Z": 61952, + "Room": 0 + }, + { + "X": 46592, + "Y": -10112, + "Z": 61952, + "Room": 0 + }, + { + "X": 47616, + "Y": -10496, + "Z": 61952, + "Room": 0 + }, + { + "X": 45568, + "Y": -9728, + "Z": 60928, + "Room": 0 + }, + { + "X": 47616, + "Y": -9728, + "Z": 60928, + "Room": 0 + } + ], + "ROOFS.TR2": [ + { + "X": 38400, + "Y": -21504, + "Z": 45568, + "Room": 25 + }, + { + "X": 38400, + "Y": -21504, + "Z": 44544, + "Room": 25 + }, + { + "X": 38400, + "Y": -21504, + "Z": 43520, + "Room": 25 + }, + { + "X": 38400, + "Y": -21504, + "Z": 42496, + "Room": 25 + }, + { + "X": 38400, + "Y": -21504, + "Z": 41472, + "Room": 25 + }, + { + "X": 39424, + "Y": -21504, + "Z": 41472, + "Room": 25 + }, + { + "X": 40448, + "Y": -21504, + "Z": 41472, + "Room": 52 + }, + { + "X": 42496, + "Y": -21504, + "Z": 41472, + "Room": 52 + }, + { + "X": 33280, + "Y": -24704, + "Z": 41472, + "Room": 25 + }, + { + "X": 34378, + "Y": -23293, + "Z": 41460, + "Room": 25 + }, + { + "X": 35283, + "Y": -23293, + "Z": 41463, + "Room": 25 + } + ], + "SEWER.TR2": [ + { + "X": 71168, + "Y": -12160, + "Z": 98816, + "Room": 157 + } + ], + "TOWER.TR2": [ + { + "X": 80384, + "Y": -17920, + "Z": 40448, + "Room": 36 + }, + { + "X": 81408, + "Y": -17920, + "Z": 40448, + "Room": 36 + }, + { + "X": 82432, + "Y": -17920, + "Z": 40448, + "Room": 36 + }, + { + "X": 81408, + "Y": -17920, + "Z": 41472, + "Room": 36 + }, + { + "X": 83456, + "Y": -17920, + "Z": 40448, + "Room": 36 + }, + { + "X": 83456, + "Y": -17920, + "Z": 39424, + "Room": 36 + }, + { + "X": 82432, + "Y": -17920, + "Z": 39424, + "Room": 36 + }, + { + "X": 82432, + "Y": -17920, + "Z": 38400, + "Room": 36 + }, + { + "X": 83456, + "Y": -17920, + "Z": 38400, + "Room": 36 + }, + { + "X": 82432, + "Y": -17920, + "Z": 37376, + "Room": 36 + }, + { + "X": 81408, + "Y": -17920, + "Z": 37376, + "Room": 36 + }, + { + "X": 80384, + "Y": -17920, + "Z": 37376, + "Room": 36 + }, + { + "X": 84480, + "Y": -18432, + "Z": 37376, + "Room": 36 + } + ], + "OFFICE.TR2": [ + { + "X": 48640, + "Y": 0, + "Z": 50688, + "Room": 4 + }, + { + "X": 51712, + "Y": 0, + "Z": 47616, + "Room": 1 + }, + { + "X": 48640, + "Y": 0, + "Z": 53760, + "Room": 4 + } + ], + "NEVADA.TR2": [ + { + "X": 23040, + "Y": -2176, + "Z": 4608, + "Room": 0 + }, + { + "X": 24107, + "Y": -3499, + "Z": 3156, + "Room": 0 + }, + { + "X": 22048, + "Y": -3539, + "Z": 3131, + "Room": 0 + }, + { + "X": 20786, + "Y": -3867, + "Z": 3424, + "Room": 0 + } + ], + "COMPOUND.TR2": [ + { + "X": 15851, + "Y": 0, + "Z": 23171, + "Room": 2 + }, + { + "X": 16896, + "Y": 0, + "Z": 23040, + "Room": 2 + }, + { + "X": 16048, + "Y": 0, + "Z": 24031, + "Room": 2 + }, + { + "X": 15872, + "Y": 0, + "Z": 25088, + "Room": 2 + }, + { + "X": 16896, + "Y": 0, + "Z": 25088, + "Room": 2 + }, + { + "X": 17920, + "Y": 0, + "Z": 25088, + "Room": 2 + }, + { + "X": 17920, + "Y": -256, + "Z": 24064, + "Room": 2 + }, + { + "X": 17920, + "Y": -256, + "Z": 23040, + "Room": 2 + } + ], + "AREA51.TR2": [ + { + "X": 65024, + "Y": 3072, + "Z": 52736, + "Room": 31 + }, + { + "X": 65024, + "Y": 3072, + "Z": 53760, + "Room": 31 + }, + { + "X": 65024, + "Y": 3072, + "Z": 54784, + "Room": 31 + }, + { + "X": 64000, + "Y": 3072, + "Z": 54784, + "Room": 31 + }, + { + "X": 64000, + "Y": 3072, + "Z": 55808, + "Room": 11 + }, + { + "X": 65024, + "Y": 3072, + "Z": 55808, + "Room": 11 + }, + { + "X": 66048, + "Y": 3072, + "Z": 55808, + "Room": 11 + }, + { + "X": 66048, + "Y": 2304, + "Z": 56832, + "Room": 11 + }, + { + "X": 65024, + "Y": 3072, + "Z": 56832, + "Room": 11 + }, + { + "X": 64000, + "Y": 3072, + "Z": 56832, + "Room": 11 + }, + { + "X": 61952, + "Y": 2048, + "Z": 56832, + "Room": 11 + }, + { + "X": 62976, + "Y": 2048, + "Z": 56832, + "Room": 11 + }, + { + "X": 62976, + "Y": 2048, + "Z": 55808, + "Room": 11 + } + ], + "ANTARC.TR2": [ + { + "X": 32256, + "Y": -3712, + "Z": 3584, + "Room": 12 + }, + { + "X": 33280, + "Y": -3968, + "Z": 4608, + "Room": 12 + }, + { + "X": 33280, + "Y": -4864, + "Z": 5632, + "Room": 12 + }, + { + "X": 32269, + "Y": -3840, + "Z": 5995, + "Room": 12 + }, + { + "X": 34587, + "Y": -3840, + "Z": 6378, + "Room": 12 + }, + { + "X": 33490, + "Y": -3773, + "Z": 6409, + "Room": 12 + }, + { + "X": 31480, + "Y": -3393, + "Z": 8434, + "Room": 12 + }, + { + "X": 31424, + "Y": -3240, + "Z": 9885, + "Room": 12 + }, + { + "X": 41472, + "Y": -6400, + "Z": 19968, + "Room": 19 + } + ], + "MINES.TR2": [ + { + "X": 59904, + "Y": 1024, + "Z": 25088, + "Room": 40 + } + ], + "CITY.TR2": [ + { + "X": 96768, + "Y": 0, + "Z": 68096, + "Room": 9 + }, + { + "X": 96768, + "Y": 0, + "Z": 69120, + "Room": 9 + }, + { + "X": 96768, + "Y": 0, + "Z": 70144, + "Room": 9 + }, + { + "X": 97792, + "Y": 0, + "Z": 70144, + "Room": 9 + }, + { + "X": 97792, + "Y": 0, + "Z": 69120, + "Room": 9 + }, + { + "X": 97792, + "Y": 0, + "Z": 68096, + "Room": 9 + }, + { + "X": 98816, + "Y": 0, + "Z": 68096, + "Room": 9 + }, + { + "X": 98816, + "Y": 0, + "Z": 70144, + "Room": 9 + }, + { + "X": 99840, + "Y": 0, + "Z": 70144, + "Room": 9 + }, + { + "X": 99840, + "Y": 0, + "Z": 69120, + "Room": 9 + }, + { + "X": 99840, + "Y": 0, + "Z": 68096, + "Room": 9 + }, + { + "X": 100864, + "Y": -256, + "Z": 69120, + "Room": 9 + } + ], + "CHAMBER.TR2": [ + { + "X": 61952, + "Y": -512, + "Z": 61952, + "Room": 5 + }, + { + "X": 61952, + "Y": -512, + "Z": 64000, + "Room": 5 + }, + { + "X": 62976, + "Y": -512, + "Z": 62976, + "Room": 5 + }, + { + "X": 61952, + "Y": -512, + "Z": 62976, + "Room": 5 + } + ], + "STPAUL.TR2": [ + { + "X": 57856, + "Y": -17536, + "Z": 55808, + "Room": 40 + }, + { + "X": 56832, + "Y": -16768, + "Z": 55808, + "Room": 40 + }, + { + "X": 55808, + "Y": -16000, + "Z": 55808, + "Room": 40 + }, + { + "X": 54784, + "Y": -15232, + "Z": 55808, + "Room": 40 + } + ] +} \ No newline at end of file diff --git a/TRRandomizerCore/TRRandomizerController.cs b/TRRandomizerCore/TRRandomizerController.cs index 1c55f0034..6fef9cc4b 100644 --- a/TRRandomizerCore/TRRandomizerController.cs +++ b/TRRandomizerCore/TRRandomizerController.cs @@ -26,7 +26,8 @@ public class TRRandomizerController { TRRandomizerType.LevelSequence, TRRandomizerType.Unarmed, TRRandomizerType.Ammoless, TRRandomizerType.Audio, TRRandomizerType.Outfit, TRRandomizerType.Secret, TRRandomizerType.GlobeDisplay, TRRandomizerType.RewardRooms, TRRandomizerType.SFX, TRRandomizerType.Item, - TRRandomizerType.NightMode, TRRandomizerType.SecretReward, TRRandomizerType.Text, TRRandomizerType.Enemy, TRRandomizerType.Texture + TRRandomizerType.NightMode, TRRandomizerType.SecretReward, TRRandomizerType.Text, TRRandomizerType.Enemy, TRRandomizerType.Texture, + TRRandomizerType.StartPosition } };