diff --git a/Gamemodes/RRTimeTester.cs b/Gamemodes/RRTimeTester.cs new file mode 100644 index 000000000..ec305f140 --- /dev/null +++ b/Gamemodes/RRTimeTester.cs @@ -0,0 +1,49 @@ +/*using System.Linq; +using System.Collections.Generic; +using System.Diagnostics; +using UnityEngine; + +namespace EHR.Gamemodes; + +public static class RRTimeTester +{ + public static string HUDText; + + public static System.Collections.IEnumerator DoTest() + { + var allRooms = ShipStatus.Instance.AllRooms.Select(x => x.RoomId).ToHashSet(); + allRooms.Remove(SystemTypes.Hallway); + allRooms.Remove(SystemTypes.Outside); + if (SubmergedCompatibility.IsSubmerged()) allRooms.RemoveWhere(x => (byte)x > 135); + var map = RandomSpawn.SpawnMap.GetSpawnMap(); + var stopwatch = new Stopwatch(); + var mapName = Main.CurrentMap.ToString(); + var doneCombos = new List<(SystemTypes, SystemTypes)>(); + + foreach (SystemTypes systemTypes in allRooms) + { + foreach (SystemTypes otherSystemTypes in allRooms) + { + if (systemTypes == otherSystemTypes || doneCombos.Exists(x => x.Item1 == systemTypes && x.Item2 == otherSystemTypes || x.Item1 == otherSystemTypes && x.Item2 == systemTypes)) continue; + string otherSystemTypesName = Translator.GetString(otherSystemTypes.ToString()); + Redo: + HUDText = $"<#ffff00>{otherSystemTypesName}"; + PlayerControl.LocalPlayer.TP(map.Positions.GetValueOrDefault(systemTypes, systemTypes.GetRoomClass().transform.position)); + yield return new WaitForSeconds(0.5f); + while (PlayerControl.LocalPlayer.IsInRoom(systemTypes)) yield return null; + stopwatch.Restart(); + while (PlayerControl.LocalPlayer.onLadder || PlayerControl.LocalPlayer.inMovingPlat || !PlayerControl.LocalPlayer.IsInRoom(otherSystemTypes)) + { + HUDText = $"{otherSystemTypesName}\n{stopwatch.Elapsed.TotalSeconds:N1}"; + yield return null; + if (Input.GetKey(KeyCode.Backspace)) goto Redo; + } + stopwatch.Stop(); + doneCombos.Add((systemTypes, otherSystemTypes)); + File.AppendAllText($"./RRTestResults-{mapName}.txt", $"\n{systemTypes}-{otherSystemTypes}:{stopwatch.Elapsed.TotalSeconds + 1:N0}"); + } + } + + HUDText = "<#00ff00>TEST COMPLETE"; + } +}*/ \ No newline at end of file diff --git a/Gamemodes/RoomRush.cs b/Gamemodes/RoomRush.cs index 2f715fadf..6b7be191a 100644 --- a/Gamemodes/RoomRush.cs +++ b/Gamemodes/RoomRush.cs @@ -13,7 +13,7 @@ namespace EHR.Gamemodes; public static class RoomRush { - private static OptionItem GlobalTimeMultiplier; + private static OptionItem GlobalTimeAddition; private static OptionItem TimeWhenFirstTwoPlayersEnterRoom; private static OptionItem VentTimes; private static OptionItem DisplayRoomName; @@ -40,83 +40,586 @@ public static class RoomRush private static RandomSpawn.SpawnMap Map; - public static readonly Dictionary> Multipliers = new() + // Minimum time needed to make the closest path between the two rooms with the worst possible conditions at 1.25x player speed + public static readonly Dictionary> RawTimeNeeded = new() { [MapNames.Skeld] = new() { - [(SystemTypes.Admin, SystemTypes.Weapons)] = 2, - [(SystemTypes.Admin, SystemTypes.Nav)] = 2, - [(SystemTypes.Admin, SystemTypes.Comms)] = 2, - [(SystemTypes.Admin, SystemTypes.Shields)] = 2, - [(SystemTypes.Admin, SystemTypes.LifeSupp)] = 4, - [(SystemTypes.Electrical, SystemTypes.MedBay)] = 3, - [(SystemTypes.Electrical, SystemTypes.Security)] = 3, - [(SystemTypes.Electrical, SystemTypes.LifeSupp)] = 2, - [(SystemTypes.MedBay, SystemTypes.Security)] = 3, - [(SystemTypes.Admin, SystemTypes.Security)] = 2, - [(SystemTypes.Security, SystemTypes.LifeSupp)] = 2, - [(SystemTypes.Cafeteria, SystemTypes.LifeSupp)] = 2, - [(SystemTypes.Storage, SystemTypes.Security)] = 2, - [(SystemTypes.Storage, SystemTypes.MedBay)] = 2 + [(SystemTypes.Admin, SystemTypes.Cafeteria)] = 2, + [(SystemTypes.Admin, SystemTypes.Nav)] = 10, + [(SystemTypes.Admin, SystemTypes.Weapons)] = 6, + [(SystemTypes.Admin, SystemTypes.LifeSupp)] = 8, + [(SystemTypes.Admin, SystemTypes.Shields)] = 5, + [(SystemTypes.Admin, SystemTypes.Electrical)] = 6, + [(SystemTypes.Admin, SystemTypes.Reactor)] = 11, + [(SystemTypes.Admin, SystemTypes.Storage)] = 2, + [(SystemTypes.Admin, SystemTypes.LowerEngine)] = 8, + [(SystemTypes.Admin, SystemTypes.UpperEngine)] = 8, + [(SystemTypes.Admin, SystemTypes.Comms)] = 5, + [(SystemTypes.Admin, SystemTypes.Security)] = 11, + [(SystemTypes.Admin, SystemTypes.MedBay)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Nav)] = 5, + [(SystemTypes.Cafeteria, SystemTypes.Weapons)] = 1, + [(SystemTypes.Cafeteria, SystemTypes.LifeSupp)] = 4, + [(SystemTypes.Cafeteria, SystemTypes.Shields)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Electrical)] = 6, + [(SystemTypes.Cafeteria, SystemTypes.Reactor)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Storage)] = 2, + [(SystemTypes.Cafeteria, SystemTypes.LowerEngine)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.UpperEngine)] = 4, + [(SystemTypes.Cafeteria, SystemTypes.Comms)] = 5, + [(SystemTypes.Cafeteria, SystemTypes.Security)] = 6, + [(SystemTypes.Cafeteria, SystemTypes.MedBay)] = 2, + [(SystemTypes.Nav, SystemTypes.Weapons)] = 3, + [(SystemTypes.Nav, SystemTypes.LifeSupp)] = 3, + [(SystemTypes.Nav, SystemTypes.Shields)] = 4, + [(SystemTypes.Nav, SystemTypes.Electrical)] = 11, + [(SystemTypes.Nav, SystemTypes.Reactor)] = 15, + [(SystemTypes.Nav, SystemTypes.Storage)] = 7, + [(SystemTypes.Nav, SystemTypes.LowerEngine)] = 13, + [(SystemTypes.Nav, SystemTypes.UpperEngine)] = 12, + [(SystemTypes.Nav, SystemTypes.Comms)] = 6, + [(SystemTypes.Nav, SystemTypes.Security)] = 15, + [(SystemTypes.Nav, SystemTypes.MedBay)] = 11, + [(SystemTypes.Weapons, SystemTypes.LifeSupp)] = 2, + [(SystemTypes.Weapons, SystemTypes.Shields)] = 5, + [(SystemTypes.Weapons, SystemTypes.Electrical)] = 10, + [(SystemTypes.Weapons, SystemTypes.Reactor)] = 11, + [(SystemTypes.Weapons, SystemTypes.Storage)] = 6, + [(SystemTypes.Weapons, SystemTypes.LowerEngine)] = 12, + [(SystemTypes.Weapons, SystemTypes.UpperEngine)] = 8, + [(SystemTypes.Weapons, SystemTypes.Comms)] = 7, + [(SystemTypes.Weapons, SystemTypes.Security)] = 11, + [(SystemTypes.Weapons, SystemTypes.MedBay)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.Shields)] = 5, + [(SystemTypes.LifeSupp, SystemTypes.Electrical)] = 12, + [(SystemTypes.LifeSupp, SystemTypes.Reactor)] = 14, + [(SystemTypes.LifeSupp, SystemTypes.Storage)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.LowerEngine)] = 14, + [(SystemTypes.LifeSupp, SystemTypes.UpperEngine)] = 10, + [(SystemTypes.LifeSupp, SystemTypes.Comms)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.Security)] = 13, + [(SystemTypes.LifeSupp, SystemTypes.MedBay)] = 9, + [(SystemTypes.Shields, SystemTypes.Electrical)] = 7, + [(SystemTypes.Shields, SystemTypes.Reactor)] = 12, + [(SystemTypes.Shields, SystemTypes.Storage)] = 3, + [(SystemTypes.Shields, SystemTypes.LowerEngine)] = 9, + [(SystemTypes.Shields, SystemTypes.UpperEngine)] = 11, + [(SystemTypes.Shields, SystemTypes.Comms)] = 2, + [(SystemTypes.Shields, SystemTypes.Security)] = 12, + [(SystemTypes.Shields, SystemTypes.MedBay)] = 10, + [(SystemTypes.Electrical, SystemTypes.Reactor)] = 6, + [(SystemTypes.Electrical, SystemTypes.Storage)] = 2, + [(SystemTypes.Electrical, SystemTypes.LowerEngine)] = 3, + [(SystemTypes.Electrical, SystemTypes.UpperEngine)] = 7, + [(SystemTypes.Electrical, SystemTypes.Comms)] = 7, + [(SystemTypes.Electrical, SystemTypes.Security)] = 6, + [(SystemTypes.Electrical, SystemTypes.MedBay)] = 11, + [(SystemTypes.Reactor, SystemTypes.Storage)] = 7, + [(SystemTypes.Reactor, SystemTypes.LowerEngine)] = 3, + [(SystemTypes.Reactor, SystemTypes.UpperEngine)] = 3, + [(SystemTypes.Reactor, SystemTypes.Comms)] = 12, + [(SystemTypes.Reactor, SystemTypes.Security)] = 2, + [(SystemTypes.Reactor, SystemTypes.MedBay)] = 6, + [(SystemTypes.Storage, SystemTypes.LowerEngine)] = 5, + [(SystemTypes.Storage, SystemTypes.UpperEngine)] = 8, + [(SystemTypes.Storage, SystemTypes.Comms)] = 3, + [(SystemTypes.Storage, SystemTypes.Security)] = 8, + [(SystemTypes.Storage, SystemTypes.MedBay)] = 7, + [(SystemTypes.LowerEngine, SystemTypes.UpperEngine)] = 3, + [(SystemTypes.LowerEngine, SystemTypes.Comms)] = 9, + [(SystemTypes.LowerEngine, SystemTypes.Security)] = 3, + [(SystemTypes.LowerEngine, SystemTypes.MedBay)] = 7, + [(SystemTypes.UpperEngine, SystemTypes.Comms)] = 11, + [(SystemTypes.UpperEngine, SystemTypes.Security)] = 3, + [(SystemTypes.UpperEngine, SystemTypes.MedBay)] = 3, + [(SystemTypes.Comms, SystemTypes.Security)] = 12, + [(SystemTypes.Comms, SystemTypes.MedBay)] = 10, + [(SystemTypes.Security, SystemTypes.MedBay)] = 6 }, [MapNames.MiraHQ] = new() { - [(SystemTypes.Launchpad, SystemTypes.Reactor)] = 2, - [(SystemTypes.Greenhouse, SystemTypes.Laboratory)] = 2, - [(SystemTypes.Office, SystemTypes.Laboratory)] = 2, - [(SystemTypes.Storage, SystemTypes.Comms)] = 4, - [(SystemTypes.Cafeteria, SystemTypes.Comms)] = 2, - [(SystemTypes.Balcony, SystemTypes.Comms)] = 2, - [(SystemTypes.Storage, SystemTypes.MedBay)] = 3, - [(SystemTypes.Cafeteria, SystemTypes.MedBay)] = 2, - [(SystemTypes.Balcony, SystemTypes.MedBay)] = 2, - [(SystemTypes.Storage, SystemTypes.LockerRoom)] = 2 + [(SystemTypes.Decontamination, SystemTypes.Launchpad)] = 9, + [(SystemTypes.Decontamination, SystemTypes.Cafeteria)] = 8, + [(SystemTypes.Decontamination, SystemTypes.Storage)] = 11, + [(SystemTypes.Decontamination, SystemTypes.Reactor)] = 1, + [(SystemTypes.Decontamination, SystemTypes.Laboratory)] = 3, + [(SystemTypes.Decontamination, SystemTypes.LockerRoom)] = 1, + [(SystemTypes.Decontamination, SystemTypes.Admin)] = 9, + [(SystemTypes.Decontamination, SystemTypes.Office)] = 8, + [(SystemTypes.Decontamination, SystemTypes.Greenhouse)] = 9, + [(SystemTypes.Decontamination, SystemTypes.Comms)] = 4, + [(SystemTypes.Decontamination, SystemTypes.Balcony)] = 11, + [(SystemTypes.Decontamination, SystemTypes.MedBay)] = 4, + [(SystemTypes.Launchpad, SystemTypes.Cafeteria)] = 13, + [(SystemTypes.Launchpad, SystemTypes.Storage)] = 15, + [(SystemTypes.Launchpad, SystemTypes.Reactor)] = 13, + [(SystemTypes.Launchpad, SystemTypes.Laboratory)] = 13, + [(SystemTypes.Launchpad, SystemTypes.LockerRoom)] = 8, + [(SystemTypes.Launchpad, SystemTypes.Admin)] = 13, + [(SystemTypes.Launchpad, SystemTypes.Office)] = 13, + [(SystemTypes.Launchpad, SystemTypes.Greenhouse)] = 14, + [(SystemTypes.Launchpad, SystemTypes.Comms)] = 8, + [(SystemTypes.Launchpad, SystemTypes.Balcony)] = 15, + [(SystemTypes.Launchpad, SystemTypes.MedBay)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Storage)] = 1, + [(SystemTypes.Cafeteria, SystemTypes.Reactor)] = 12, + [(SystemTypes.Cafeteria, SystemTypes.Laboratory)] = 13, + [(SystemTypes.Cafeteria, SystemTypes.LockerRoom)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Admin)] = 6, + [(SystemTypes.Cafeteria, SystemTypes.Office)] = 6, + [(SystemTypes.Cafeteria, SystemTypes.Greenhouse)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Comms)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Balcony)] = 1, + [(SystemTypes.Cafeteria, SystemTypes.MedBay)] = 8, + [(SystemTypes.Storage, SystemTypes.Reactor)] = 14, + [(SystemTypes.Storage, SystemTypes.Laboratory)] = 15, + [(SystemTypes.Storage, SystemTypes.LockerRoom)] = 9, + [(SystemTypes.Storage, SystemTypes.Admin)] = 8, + [(SystemTypes.Storage, SystemTypes.Office)] = 8, + [(SystemTypes.Storage, SystemTypes.Greenhouse)] = 9, + [(SystemTypes.Storage, SystemTypes.Comms)] = 9, + [(SystemTypes.Storage, SystemTypes.Balcony)] = 2, + [(SystemTypes.Storage, SystemTypes.MedBay)] = 10, + [(SystemTypes.Reactor, SystemTypes.Laboratory)] = 2, + [(SystemTypes.Reactor, SystemTypes.LockerRoom)] = 4, + [(SystemTypes.Reactor, SystemTypes.Admin)] = 12, + [(SystemTypes.Reactor, SystemTypes.Office)] = 12, + [(SystemTypes.Reactor, SystemTypes.Greenhouse)] = 13, + [(SystemTypes.Reactor, SystemTypes.Comms)] = 7, + [(SystemTypes.Reactor, SystemTypes.Balcony)] = 14, + [(SystemTypes.Reactor, SystemTypes.MedBay)] = 8, + [(SystemTypes.Laboratory, SystemTypes.LockerRoom)] = 5, + [(SystemTypes.Laboratory, SystemTypes.Admin)] = 13, + [(SystemTypes.Laboratory, SystemTypes.Office)] = 12, + [(SystemTypes.Laboratory, SystemTypes.Greenhouse)] = 13, + [(SystemTypes.Laboratory, SystemTypes.Comms)] = 8, + [(SystemTypes.Laboratory, SystemTypes.Balcony)] = 15, + [(SystemTypes.Laboratory, SystemTypes.MedBay)] = 8, + [(SystemTypes.LockerRoom, SystemTypes.Admin)] = 7, + [(SystemTypes.LockerRoom, SystemTypes.Office)] = 6, + [(SystemTypes.LockerRoom, SystemTypes.Greenhouse)] = 7, + [(SystemTypes.LockerRoom, SystemTypes.Comms)] = 2, + [(SystemTypes.LockerRoom, SystemTypes.Balcony)] = 9, + [(SystemTypes.LockerRoom, SystemTypes.MedBay)] = 3, + [(SystemTypes.Admin, SystemTypes.Office)] = 2, + [(SystemTypes.Admin, SystemTypes.Greenhouse)] = 2, + [(SystemTypes.Admin, SystemTypes.Comms)] = 7, + [(SystemTypes.Admin, SystemTypes.Balcony)] = 8, + [(SystemTypes.Admin, SystemTypes.MedBay)] = 8, + [(SystemTypes.Office, SystemTypes.Greenhouse)] = 2, + [(SystemTypes.Office, SystemTypes.Comms)] = 6, + [(SystemTypes.Office, SystemTypes.Balcony)] = 8, + [(SystemTypes.Office, SystemTypes.MedBay)] = 7, + [(SystemTypes.Greenhouse, SystemTypes.Comms)] = 7, + [(SystemTypes.Greenhouse, SystemTypes.Balcony)] = 9, + [(SystemTypes.Greenhouse, SystemTypes.MedBay)] = 8, + [(SystemTypes.Comms, SystemTypes.Balcony)] = 9, + [(SystemTypes.Comms, SystemTypes.MedBay)] = 2, + [(SystemTypes.Balcony, SystemTypes.MedBay)] = 10 }, [MapNames.Polus] = new() { - [(SystemTypes.Storage, SystemTypes.Comms)] = 2, - [(SystemTypes.Storage, SystemTypes.Office)] = 2, - [(SystemTypes.Storage, SystemTypes.Admin)] = 2, - [(SystemTypes.Security, SystemTypes.LifeSupp)] = 2, - [(SystemTypes.Security, SystemTypes.Comms)] = 2, - [(SystemTypes.Office, SystemTypes.Specimens)] = 2, - [(SystemTypes.Comms, SystemTypes.Electrical)] = 2 + [(SystemTypes.Decontamination2, SystemTypes.Electrical)] = 15, + [(SystemTypes.Decontamination2, SystemTypes.Security)] = 17, + [(SystemTypes.Decontamination2, SystemTypes.LifeSupp)] = 18, + [(SystemTypes.Decontamination2, SystemTypes.Weapons)] = 16, + [(SystemTypes.Decontamination2, SystemTypes.Comms)] = 16, + [(SystemTypes.Decontamination2, SystemTypes.Office)] = 14, + [(SystemTypes.Decontamination2, SystemTypes.Admin)] = 17, + [(SystemTypes.Decontamination2, SystemTypes.Specimens)] = 6, + [(SystemTypes.Decontamination2, SystemTypes.Laboratory)] = 1, + [(SystemTypes.Decontamination2, SystemTypes.Storage)] = 14, + [(SystemTypes.Decontamination2, SystemTypes.Dropship)] = 13, + [(SystemTypes.Decontamination2, SystemTypes.Decontamination3)] = 6, + [(SystemTypes.Decontamination2, SystemTypes.BoilerRoom)] = 20, + [(SystemTypes.Decontamination3, SystemTypes.Electrical)] = 14, + [(SystemTypes.Decontamination3, SystemTypes.Security)] = 17, + [(SystemTypes.Decontamination3, SystemTypes.LifeSupp)] = 13, + [(SystemTypes.Decontamination3, SystemTypes.Weapons)] = 10, + [(SystemTypes.Decontamination3, SystemTypes.Comms)] = 11, + [(SystemTypes.Decontamination3, SystemTypes.Office)] = 7, + [(SystemTypes.Decontamination3, SystemTypes.Admin)] = 5, + [(SystemTypes.Decontamination3, SystemTypes.Specimens)] = 5, + [(SystemTypes.Decontamination3, SystemTypes.Laboratory)] = 14, + [(SystemTypes.Decontamination3, SystemTypes.Storage)] = 13, + [(SystemTypes.Decontamination3, SystemTypes.Dropship)] = 14, + [(SystemTypes.Decontamination3, SystemTypes.BoilerRoom)] = 15, + [(SystemTypes.Electrical, SystemTypes.Security)] = 1, + [(SystemTypes.Electrical, SystemTypes.LifeSupp)] = 2, + [(SystemTypes.Electrical, SystemTypes.Weapons)] = 5, + [(SystemTypes.Electrical, SystemTypes.Comms)] = 5, + [(SystemTypes.Electrical, SystemTypes.Office)] = 7, + [(SystemTypes.Electrical, SystemTypes.Admin)] = 8, + [(SystemTypes.Electrical, SystemTypes.Specimens)] = 14, + [(SystemTypes.Electrical, SystemTypes.Laboratory)] = 5, + [(SystemTypes.Electrical, SystemTypes.Storage)] = 3, + [(SystemTypes.Electrical, SystemTypes.Dropship)] = 3, + [(SystemTypes.Electrical, SystemTypes.BoilerRoom)] = 4, + [(SystemTypes.Security, SystemTypes.LifeSupp)] = 5, + [(SystemTypes.Security, SystemTypes.Weapons)] = 8, + [(SystemTypes.Security, SystemTypes.Comms)] = 8, + [(SystemTypes.Security, SystemTypes.Office)] = 10, + [(SystemTypes.Security, SystemTypes.Admin)] = 11, + [(SystemTypes.Security, SystemTypes.Specimens)] = 17, + [(SystemTypes.Security, SystemTypes.Laboratory)] = 8, + [(SystemTypes.Security, SystemTypes.Storage)] = 6, + [(SystemTypes.Security, SystemTypes.Dropship)] = 6, + [(SystemTypes.Security, SystemTypes.BoilerRoom)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.Weapons)] = 4, + [(SystemTypes.LifeSupp, SystemTypes.Comms)] = 3, + [(SystemTypes.LifeSupp, SystemTypes.Office)] = 6, + [(SystemTypes.LifeSupp, SystemTypes.Admin)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.Specimens)] = 14, + [(SystemTypes.LifeSupp, SystemTypes.Laboratory)] = 10, + [(SystemTypes.LifeSupp, SystemTypes.Storage)] = 8, + [(SystemTypes.LifeSupp, SystemTypes.Dropship)] = 7, + [(SystemTypes.LifeSupp, SystemTypes.BoilerRoom)] = 1, + [(SystemTypes.Weapons, SystemTypes.Comms)] = 2, + [(SystemTypes.Weapons, SystemTypes.Office)] = 4, + [(SystemTypes.Weapons, SystemTypes.Admin)] = 5, + [(SystemTypes.Weapons, SystemTypes.Specimens)] = 11, + [(SystemTypes.Weapons, SystemTypes.Laboratory)] = 7, + [(SystemTypes.Weapons, SystemTypes.Storage)] = 5, + [(SystemTypes.Weapons, SystemTypes.Dropship)] = 6, + [(SystemTypes.Weapons, SystemTypes.BoilerRoom)] = 5, + [(SystemTypes.Comms, SystemTypes.Office)] = 5, + [(SystemTypes.Comms, SystemTypes.Admin)] = 5, + [(SystemTypes.Comms, SystemTypes.Specimens)] = 12, + [(SystemTypes.Comms, SystemTypes.Laboratory)] = 8, + [(SystemTypes.Comms, SystemTypes.Storage)] = 5, + [(SystemTypes.Comms, SystemTypes.Dropship)] = 6, + [(SystemTypes.Comms, SystemTypes.BoilerRoom)] = 5, + [(SystemTypes.Office, SystemTypes.Admin)] = 2, + [(SystemTypes.Office, SystemTypes.Specimens)] = 9, + [(SystemTypes.Office, SystemTypes.Laboratory)] = 5, + [(SystemTypes.Office, SystemTypes.Storage)] = 7, + [(SystemTypes.Office, SystemTypes.Dropship)] = 7, + [(SystemTypes.Office, SystemTypes.BoilerRoom)] = 9, + [(SystemTypes.Admin, SystemTypes.Specimens)] = 6, + [(SystemTypes.Admin, SystemTypes.Laboratory)] = 8, + [(SystemTypes.Admin, SystemTypes.Storage)] = 7, + [(SystemTypes.Admin, SystemTypes.Dropship)] = 8, + [(SystemTypes.Admin, SystemTypes.BoilerRoom)] = 9, + [(SystemTypes.Specimens, SystemTypes.Laboratory)] = 5, + [(SystemTypes.Specimens, SystemTypes.Storage)] = 14, + [(SystemTypes.Specimens, SystemTypes.Dropship)] = 12, + [(SystemTypes.Specimens, SystemTypes.BoilerRoom)] = 15, + [(SystemTypes.Laboratory, SystemTypes.Storage)] = 5, + [(SystemTypes.Laboratory, SystemTypes.Dropship)] = 4, + [(SystemTypes.Laboratory, SystemTypes.BoilerRoom)] = 11, + [(SystemTypes.Storage, SystemTypes.Dropship)] = 3, + [(SystemTypes.Storage, SystemTypes.BoilerRoom)] = 9, + [(SystemTypes.Dropship, SystemTypes.BoilerRoom)] = 9 }, [MapNames.Airship] = new() { - [(SystemTypes.Showers, SystemTypes.CargoBay)] = 2, - [(SystemTypes.Showers, SystemTypes.Medical)] = 2, - [(SystemTypes.Comms, SystemTypes.VaultRoom)] = 2, - [(SystemTypes.MeetingRoom, SystemTypes.Records)] = 5, - [(SystemTypes.MeetingRoom, SystemTypes.Lounge)] = 3, - [(SystemTypes.MeetingRoom, SystemTypes.MainHall)] = 2, - [(SystemTypes.MeetingRoom, SystemTypes.CargoBay)] = 2, - [(SystemTypes.MeetingRoom, SystemTypes.Showers)] = 2, - [(SystemTypes.Engine, SystemTypes.Security)] = 2, - [(SystemTypes.Engine, SystemTypes.HallOfPortraits)] = 2, - [(SystemTypes.MainHall, SystemTypes.Security)] = 2 + [(SystemTypes.Ventilation, SystemTypes.Cockpit)] = 24, + [(SystemTypes.Ventilation, SystemTypes.Armory)] = 23, + [(SystemTypes.Ventilation, SystemTypes.Comms)] = 23, + [(SystemTypes.Ventilation, SystemTypes.Engine)] = 17, + [(SystemTypes.Ventilation, SystemTypes.Brig)] = 22, + [(SystemTypes.Ventilation, SystemTypes.VaultRoom)] = 22, + [(SystemTypes.Ventilation, SystemTypes.Kitchen)] = 17, + [(SystemTypes.Ventilation, SystemTypes.ViewingDeck)] = 20, + [(SystemTypes.Ventilation, SystemTypes.GapRoom)] = 23, + [(SystemTypes.Ventilation, SystemTypes.MainHall)] = 13, + [(SystemTypes.Ventilation, SystemTypes.Showers)] = 10, + [(SystemTypes.Ventilation, SystemTypes.Records)] = 9, + [(SystemTypes.Ventilation, SystemTypes.Lounge)] = 7, + [(SystemTypes.Ventilation, SystemTypes.Security)] = 14, + [(SystemTypes.Ventilation, SystemTypes.CargoBay)] = 11, + [(SystemTypes.Ventilation, SystemTypes.Electrical)] = 7, + [(SystemTypes.Ventilation, SystemTypes.Medical)] = 13, + [(SystemTypes.Ventilation, SystemTypes.MeetingRoom)] = 25, + [(SystemTypes.Ventilation, SystemTypes.HallOfPortraits)] = 16, + [(SystemTypes.Cockpit, SystemTypes.Armory)] = 3, + [(SystemTypes.Cockpit, SystemTypes.Comms)] = 2, + [(SystemTypes.Cockpit, SystemTypes.Engine)] = 4, + [(SystemTypes.Cockpit, SystemTypes.Brig)] = 8, + [(SystemTypes.Cockpit, SystemTypes.VaultRoom)] = 10, + [(SystemTypes.Cockpit, SystemTypes.Kitchen)] = 5, + [(SystemTypes.Cockpit, SystemTypes.ViewingDeck)] = 7, + [(SystemTypes.Cockpit, SystemTypes.GapRoom)] = 16, + [(SystemTypes.Cockpit, SystemTypes.MainHall)] = 8, + [(SystemTypes.Cockpit, SystemTypes.Showers)] = 12, + [(SystemTypes.Cockpit, SystemTypes.Records)] = 15, + [(SystemTypes.Cockpit, SystemTypes.Lounge)] = 17, + [(SystemTypes.Cockpit, SystemTypes.Security)] = 10, + [(SystemTypes.Cockpit, SystemTypes.CargoBay)] = 21, + [(SystemTypes.Cockpit, SystemTypes.Electrical)] = 12, + [(SystemTypes.Cockpit, SystemTypes.Medical)] = 15, + [(SystemTypes.Cockpit, SystemTypes.MeetingRoom)] = 13, + [(SystemTypes.Cockpit, SystemTypes.HallOfPortraits)] = 8, + [(SystemTypes.Armory, SystemTypes.Comms)] = 2, + [(SystemTypes.Armory, SystemTypes.Engine)] = 2, + [(SystemTypes.Armory, SystemTypes.Brig)] = 7, + [(SystemTypes.Armory, SystemTypes.VaultRoom)] = 8, + [(SystemTypes.Armory, SystemTypes.Kitchen)] = 1, + [(SystemTypes.Armory, SystemTypes.ViewingDeck)] = 3, + [(SystemTypes.Armory, SystemTypes.GapRoom)] = 15, + [(SystemTypes.Armory, SystemTypes.MainHall)] = 7, + [(SystemTypes.Armory, SystemTypes.Showers)] = 11, + [(SystemTypes.Armory, SystemTypes.Records)] = 13, + [(SystemTypes.Armory, SystemTypes.Lounge)] = 15, + [(SystemTypes.Armory, SystemTypes.Security)] = 6, + [(SystemTypes.Armory, SystemTypes.CargoBay)] = 21, + [(SystemTypes.Armory, SystemTypes.Electrical)] = 8, + [(SystemTypes.Armory, SystemTypes.Medical)] = 18, + [(SystemTypes.Armory, SystemTypes.MeetingRoom)] = 11, + [(SystemTypes.Armory, SystemTypes.HallOfPortraits)] = 4, + [(SystemTypes.Comms, SystemTypes.Engine)] = 3, + [(SystemTypes.Comms, SystemTypes.Brig)] = 7, + [(SystemTypes.Comms, SystemTypes.VaultRoom)] = 9, + [(SystemTypes.Comms, SystemTypes.Kitchen)] = 4, + [(SystemTypes.Comms, SystemTypes.ViewingDeck)] = 6, + [(SystemTypes.Comms, SystemTypes.GapRoom)] = 15, + [(SystemTypes.Comms, SystemTypes.MainHall)] = 7, + [(SystemTypes.Comms, SystemTypes.Showers)] = 11, + [(SystemTypes.Comms, SystemTypes.Records)] = 13, + [(SystemTypes.Comms, SystemTypes.Lounge)] = 16, + [(SystemTypes.Comms, SystemTypes.Security)] = 9, + [(SystemTypes.Comms, SystemTypes.CargoBay)] = 20, + [(SystemTypes.Comms, SystemTypes.Electrical)] = 11, + [(SystemTypes.Comms, SystemTypes.Medical)] = 18, + [(SystemTypes.Comms, SystemTypes.MeetingRoom)] = 12, + [(SystemTypes.Comms, SystemTypes.HallOfPortraits)] = 7, + [(SystemTypes.Engine, SystemTypes.Brig)] = 1, + [(SystemTypes.Engine, SystemTypes.VaultRoom)] = 2, + [(SystemTypes.Engine, SystemTypes.Kitchen)] = 4, + [(SystemTypes.Engine, SystemTypes.ViewingDeck)] = 6, + [(SystemTypes.Engine, SystemTypes.GapRoom)] = 10, + [(SystemTypes.Engine, SystemTypes.MainHall)] = 1, + [(SystemTypes.Engine, SystemTypes.Showers)] = 5, + [(SystemTypes.Engine, SystemTypes.Records)] = 8, + [(SystemTypes.Engine, SystemTypes.Lounge)] = 10, + [(SystemTypes.Engine, SystemTypes.Security)] = 8, + [(SystemTypes.Engine, SystemTypes.CargoBay)] = 14, + [(SystemTypes.Engine, SystemTypes.Electrical)] = 5, + [(SystemTypes.Engine, SystemTypes.Medical)] = 12, + [(SystemTypes.Engine, SystemTypes.MeetingRoom)] = 5, + [(SystemTypes.Engine, SystemTypes.HallOfPortraits)] = 7, + [(SystemTypes.Brig, SystemTypes.VaultRoom)] = 1, + [(SystemTypes.Brig, SystemTypes.Kitchen)] = 9, + [(SystemTypes.Brig, SystemTypes.ViewingDeck)] = 11, + [(SystemTypes.Brig, SystemTypes.GapRoom)] = 14, + [(SystemTypes.Brig, SystemTypes.MainHall)] = 5, + [(SystemTypes.Brig, SystemTypes.Showers)] = 9, + [(SystemTypes.Brig, SystemTypes.Records)] = 12, + [(SystemTypes.Brig, SystemTypes.Lounge)] = 14, + [(SystemTypes.Brig, SystemTypes.Security)] = 12, + [(SystemTypes.Brig, SystemTypes.CargoBay)] = 18, + [(SystemTypes.Brig, SystemTypes.Electrical)] = 10, + [(SystemTypes.Brig, SystemTypes.Medical)] = 16, + [(SystemTypes.Brig, SystemTypes.MeetingRoom)] = 4, + [(SystemTypes.Brig, SystemTypes.HallOfPortraits)] = 12, + [(SystemTypes.VaultRoom, SystemTypes.Kitchen)] = 10, + [(SystemTypes.VaultRoom, SystemTypes.ViewingDeck)] = 12, + [(SystemTypes.VaultRoom, SystemTypes.GapRoom)] = 15, + [(SystemTypes.VaultRoom, SystemTypes.MainHall)] = 7, + [(SystemTypes.VaultRoom, SystemTypes.Showers)] = 11, + [(SystemTypes.VaultRoom, SystemTypes.Records)] = 13, + [(SystemTypes.VaultRoom, SystemTypes.Lounge)] = 15, + [(SystemTypes.VaultRoom, SystemTypes.Security)] = 13, + [(SystemTypes.VaultRoom, SystemTypes.CargoBay)] = 19, + [(SystemTypes.VaultRoom, SystemTypes.Electrical)] = 11, + [(SystemTypes.VaultRoom, SystemTypes.Medical)] = 18, + [(SystemTypes.VaultRoom, SystemTypes.MeetingRoom)] = 6, + [(SystemTypes.VaultRoom, SystemTypes.HallOfPortraits)] = 13, + [(SystemTypes.Kitchen, SystemTypes.ViewingDeck)] = 1, + [(SystemTypes.Kitchen, SystemTypes.GapRoom)] = 16, + [(SystemTypes.Kitchen, SystemTypes.MainHall)] = 9, + [(SystemTypes.Kitchen, SystemTypes.Showers)] = 12, + [(SystemTypes.Kitchen, SystemTypes.Records)] = 14, + [(SystemTypes.Kitchen, SystemTypes.Lounge)] = 16, + [(SystemTypes.Kitchen, SystemTypes.Security)] = 3, + [(SystemTypes.Kitchen, SystemTypes.CargoBay)] = 18, + [(SystemTypes.Kitchen, SystemTypes.Electrical)] = 5, + [(SystemTypes.Kitchen, SystemTypes.Medical)] = 14, + [(SystemTypes.Kitchen, SystemTypes.MeetingRoom)] = 14, + [(SystemTypes.Kitchen, SystemTypes.HallOfPortraits)] = 1, + [(SystemTypes.ViewingDeck, SystemTypes.GapRoom)] = 18, + [(SystemTypes.ViewingDeck, SystemTypes.MainHall)] = 11, + [(SystemTypes.ViewingDeck, SystemTypes.Showers)] = 14, + [(SystemTypes.ViewingDeck, SystemTypes.Records)] = 17, + [(SystemTypes.ViewingDeck, SystemTypes.Lounge)] = 18, + [(SystemTypes.ViewingDeck, SystemTypes.Security)] = 6, + [(SystemTypes.ViewingDeck, SystemTypes.CargoBay)] = 21, + [(SystemTypes.ViewingDeck, SystemTypes.Electrical)] = 7, + [(SystemTypes.ViewingDeck, SystemTypes.Medical)] = 16, + [(SystemTypes.ViewingDeck, SystemTypes.MeetingRoom)] = 15, + [(SystemTypes.ViewingDeck, SystemTypes.HallOfPortraits)] = 4, + [(SystemTypes.GapRoom, SystemTypes.MainHall)] = 7, + [(SystemTypes.GapRoom, SystemTypes.Showers)] = 11, + [(SystemTypes.GapRoom, SystemTypes.Records)] = 13, + [(SystemTypes.GapRoom, SystemTypes.Lounge)] = 15, + [(SystemTypes.GapRoom, SystemTypes.Security)] = 13, + [(SystemTypes.GapRoom, SystemTypes.CargoBay)] = 20, + [(SystemTypes.GapRoom, SystemTypes.Electrical)] = 11, + [(SystemTypes.GapRoom, SystemTypes.Medical)] = 19, + [(SystemTypes.GapRoom, SystemTypes.MeetingRoom)] = 18, + [(SystemTypes.GapRoom, SystemTypes.HallOfPortraits)] = 14, + [(SystemTypes.MainHall, SystemTypes.Showers)] = 1, + [(SystemTypes.MainHall, SystemTypes.Records)] = 3, + [(SystemTypes.MainHall, SystemTypes.Lounge)] = 5, + [(SystemTypes.MainHall, SystemTypes.Security)] = 5, + [(SystemTypes.MainHall, SystemTypes.CargoBay)] = 10, + [(SystemTypes.MainHall, SystemTypes.Electrical)] = 1, + [(SystemTypes.MainHall, SystemTypes.Medical)] = 9, + [(SystemTypes.MainHall, SystemTypes.MeetingRoom)] = 10, + [(SystemTypes.MainHall, SystemTypes.HallOfPortraits)] = 6, + [(SystemTypes.Showers, SystemTypes.Records)] = 1, + [(SystemTypes.Showers, SystemTypes.Lounge)] = 3, + [(SystemTypes.Showers, SystemTypes.Security)] = 8, + [(SystemTypes.Showers, SystemTypes.CargoBay)] = 8, + [(SystemTypes.Showers, SystemTypes.Electrical)] = 4, + [(SystemTypes.Showers, SystemTypes.Medical)] = 12, + [(SystemTypes.Showers, SystemTypes.MeetingRoom)] = 14, + [(SystemTypes.Showers, SystemTypes.HallOfPortraits)] = 9, + [(SystemTypes.Records, SystemTypes.Lounge)] = 1, + [(SystemTypes.Records, SystemTypes.Security)] = 9, + [(SystemTypes.Records, SystemTypes.CargoBay)] = 6, + [(SystemTypes.Records, SystemTypes.Electrical)] = 6, + [(SystemTypes.Records, SystemTypes.Medical)] = 8, + [(SystemTypes.Records, SystemTypes.MeetingRoom)] = 16, + [(SystemTypes.Records, SystemTypes.HallOfPortraits)] = 12, + [(SystemTypes.Lounge, SystemTypes.Security)] = 15, + [(SystemTypes.Lounge, SystemTypes.CargoBay)] = 1, + [(SystemTypes.Lounge, SystemTypes.Electrical)] = 8, + [(SystemTypes.Lounge, SystemTypes.Medical)] = 4, + [(SystemTypes.Lounge, SystemTypes.MeetingRoom)] = 18, + [(SystemTypes.Lounge, SystemTypes.HallOfPortraits)] = 17, + [(SystemTypes.Security, SystemTypes.CargoBay)] = 14, + [(SystemTypes.Security, SystemTypes.Electrical)] = 1, + [(SystemTypes.Security, SystemTypes.Medical)] = 10, + [(SystemTypes.Security, SystemTypes.MeetingRoom)] = 18, + [(SystemTypes.Security, SystemTypes.HallOfPortraits)] = 1, + [(SystemTypes.CargoBay, SystemTypes.Electrical)] = 5, + [(SystemTypes.CargoBay, SystemTypes.Medical)] = 1, + [(SystemTypes.CargoBay, SystemTypes.MeetingRoom)] = 22, + [(SystemTypes.CargoBay, SystemTypes.HallOfPortraits)] = 16, + [(SystemTypes.Electrical, SystemTypes.Medical)] = 1, + [(SystemTypes.Electrical, SystemTypes.MeetingRoom)] = 14, + [(SystemTypes.Electrical, SystemTypes.HallOfPortraits)] = 3, + [(SystemTypes.Medical, SystemTypes.MeetingRoom)] = 22, + [(SystemTypes.Medical, SystemTypes.HallOfPortraits)] = 12, + [(SystemTypes.MeetingRoom, SystemTypes.HallOfPortraits)] = 15 }, [MapNames.Fungle] = new() { - [(SystemTypes.Lookout, SystemTypes.SleepingQuarters)] = 3, - [(SystemTypes.Lookout, SystemTypes.MeetingRoom)] = 2, - [(SystemTypes.Lookout, SystemTypes.Storage)] = 3, - [(SystemTypes.MiningPit, SystemTypes.SleepingQuarters)] = 2, - [(SystemTypes.MiningPit, SystemTypes.MeetingRoom)] = 2, - [(SystemTypes.MiningPit, SystemTypes.Storage)] = 2, - [(SystemTypes.MiningPit, SystemTypes.Dropship)] = 2, - [(SystemTypes.MiningPit, SystemTypes.Comms)] = 2 - }, - [(MapNames)6] = new() - { - [(SystemTypes.Admin, SystemTypes.MeetingRoom)] = 2, - [(SystemTypes.Admin, SystemTypes.Lounge)] = 2, - [(SystemTypes.Comms, SystemTypes.Medical)] = 2, - [((SystemTypes)SubmergedCompatibility.SubmergedSystemTypes.Research, SystemTypes.Medical)] = 3, - [((SystemTypes)SubmergedCompatibility.SubmergedSystemTypes.Ballast, SystemTypes.Security)] = 2 + [(SystemTypes.Cafeteria, SystemTypes.Comms)] = 23, + [(SystemTypes.Cafeteria, SystemTypes.FishingDock)] = 7, + [(SystemTypes.Cafeteria, SystemTypes.Dropship)] = 3, + [(SystemTypes.Cafeteria, SystemTypes.Greenhouse)] = 10, + [(SystemTypes.Cafeteria, SystemTypes.Kitchen)] = 5, + [(SystemTypes.Cafeteria, SystemTypes.Laboratory)] = 13, + [(SystemTypes.Cafeteria, SystemTypes.Lookout)] = 15, + [(SystemTypes.Cafeteria, SystemTypes.MeetingRoom)] = 4, + [(SystemTypes.Cafeteria, SystemTypes.SleepingQuarters)] = 6, + [(SystemTypes.Cafeteria, SystemTypes.MiningPit)] = 17, + [(SystemTypes.Cafeteria, SystemTypes.Reactor)] = 15, + [(SystemTypes.Cafeteria, SystemTypes.RecRoom)] = 4, + [(SystemTypes.Cafeteria, SystemTypes.Storage)] = 5, + [(SystemTypes.Cafeteria, SystemTypes.UpperEngine)] = 17, + [(SystemTypes.Comms, SystemTypes.FishingDock)] = 23, + [(SystemTypes.Comms, SystemTypes.Dropship)] = 19, + [(SystemTypes.Comms, SystemTypes.Greenhouse)] = 13, + [(SystemTypes.Comms, SystemTypes.Kitchen)] = 21, + [(SystemTypes.Comms, SystemTypes.Laboratory)] = 21, + [(SystemTypes.Comms, SystemTypes.Lookout)] = 8, + [(SystemTypes.Comms, SystemTypes.MeetingRoom)] = 15, + [(SystemTypes.Comms, SystemTypes.SleepingQuarters)] = 17, + [(SystemTypes.Comms, SystemTypes.MiningPit)] = 8, + [(SystemTypes.Comms, SystemTypes.Reactor)] = 9, + [(SystemTypes.Comms, SystemTypes.RecRoom)] = 21, + [(SystemTypes.Comms, SystemTypes.Storage)] = 19, + [(SystemTypes.Comms, SystemTypes.UpperEngine)] = 5, + [(SystemTypes.FishingDock, SystemTypes.Dropship)] = 8, + [(SystemTypes.FishingDock, SystemTypes.Greenhouse)] = 12, + [(SystemTypes.FishingDock, SystemTypes.Kitchen)] = 1, + [(SystemTypes.FishingDock, SystemTypes.Laboratory)] = 14, + [(SystemTypes.FishingDock, SystemTypes.Lookout)] = 18, + [(SystemTypes.FishingDock, SystemTypes.MeetingRoom)] = 6, + [(SystemTypes.FishingDock, SystemTypes.SleepingQuarters)] = 9, + [(SystemTypes.FishingDock, SystemTypes.MiningPit)] = 19, + [(SystemTypes.FishingDock, SystemTypes.Reactor)] = 17, + [(SystemTypes.FishingDock, SystemTypes.RecRoom)] = 4, + [(SystemTypes.FishingDock, SystemTypes.Storage)] = 8, + [(SystemTypes.FishingDock, SystemTypes.UpperEngine)] = 21, + [(SystemTypes.Dropship, SystemTypes.Greenhouse)] = 9, + [(SystemTypes.Dropship, SystemTypes.Kitchen)] = 6, + [(SystemTypes.Dropship, SystemTypes.Laboratory)] = 12, + [(SystemTypes.Dropship, SystemTypes.Lookout)] = 14, + [(SystemTypes.Dropship, SystemTypes.MeetingRoom)] = 3, + [(SystemTypes.Dropship, SystemTypes.SleepingQuarters)] = 5, + [(SystemTypes.Dropship, SystemTypes.MiningPit)] = 15, + [(SystemTypes.Dropship, SystemTypes.Reactor)] = 13, + [(SystemTypes.Dropship, SystemTypes.RecRoom)] = 5, + [(SystemTypes.Dropship, SystemTypes.Storage)] = 2, + [(SystemTypes.Dropship, SystemTypes.UpperEngine)] = 16, + [(SystemTypes.Greenhouse, SystemTypes.Kitchen)] = 11, + [(SystemTypes.Greenhouse, SystemTypes.Laboratory)] = 10, + [(SystemTypes.Greenhouse, SystemTypes.Lookout)] = 7, + [(SystemTypes.Greenhouse, SystemTypes.MeetingRoom)] = 6, + [(SystemTypes.Greenhouse, SystemTypes.SleepingQuarters)] = 7, + [(SystemTypes.Greenhouse, SystemTypes.MiningPit)] = 9, + [(SystemTypes.Greenhouse, SystemTypes.Reactor)] = 5, + [(SystemTypes.Greenhouse, SystemTypes.RecRoom)] = 11, + [(SystemTypes.Greenhouse, SystemTypes.Storage)] = 9, + [(SystemTypes.Greenhouse, SystemTypes.UpperEngine)] = 9, + [(SystemTypes.Kitchen, SystemTypes.Laboratory)] = 12, + [(SystemTypes.Kitchen, SystemTypes.Lookout)] = 16, + [(SystemTypes.Kitchen, SystemTypes.MeetingRoom)] = 5, + [(SystemTypes.Kitchen, SystemTypes.SleepingQuarters)] = 7, + [(SystemTypes.Kitchen, SystemTypes.MiningPit)] = 17, + [(SystemTypes.Kitchen, SystemTypes.Reactor)] = 15, + [(SystemTypes.Kitchen, SystemTypes.RecRoom)] = 3, + [(SystemTypes.Kitchen, SystemTypes.Storage)] = 7, + [(SystemTypes.Kitchen, SystemTypes.UpperEngine)] = 19, + [(SystemTypes.Laboratory, SystemTypes.Lookout)] = 16, + [(SystemTypes.Laboratory, SystemTypes.MeetingRoom)] = 8, + [(SystemTypes.Laboratory, SystemTypes.SleepingQuarters)] = 9, + [(SystemTypes.Laboratory, SystemTypes.MiningPit)] = 17, + [(SystemTypes.Laboratory, SystemTypes.Reactor)] = 13, + [(SystemTypes.Laboratory, SystemTypes.RecRoom)] = 13, + [(SystemTypes.Laboratory, SystemTypes.Storage)] = 12, + [(SystemTypes.Laboratory, SystemTypes.UpperEngine)] = 17, + [(SystemTypes.Lookout, SystemTypes.MeetingRoom)] = 9, + [(SystemTypes.Lookout, SystemTypes.SleepingQuarters)] = 10, + [(SystemTypes.Lookout, SystemTypes.MiningPit)] = 2, + [(SystemTypes.Lookout, SystemTypes.Reactor)] = 6, + [(SystemTypes.Lookout, SystemTypes.RecRoom)] = 14, + [(SystemTypes.Lookout, SystemTypes.Storage)] = 12, + [(SystemTypes.Lookout, SystemTypes.UpperEngine)] = 4, + [(SystemTypes.MeetingRoom, SystemTypes.SleepingQuarters)] = 1, + [(SystemTypes.MeetingRoom, SystemTypes.MiningPit)] = 11, + [(SystemTypes.MeetingRoom, SystemTypes.Reactor)] = 10, + [(SystemTypes.MeetingRoom, SystemTypes.RecRoom)] = 4, + [(SystemTypes.MeetingRoom, SystemTypes.Storage)] = 3, + [(SystemTypes.MeetingRoom, SystemTypes.UpperEngine)] = 12, + [(SystemTypes.SleepingQuarters, SystemTypes.MiningPit)] = 13, + [(SystemTypes.SleepingQuarters, SystemTypes.Reactor)] = 11, + [(SystemTypes.SleepingQuarters, SystemTypes.RecRoom)] = 6, + [(SystemTypes.SleepingQuarters, SystemTypes.Storage)] = 4, + [(SystemTypes.SleepingQuarters, SystemTypes.UpperEngine)] = 13, + [(SystemTypes.MiningPit, SystemTypes.Reactor)] = 7, + [(SystemTypes.MiningPit, SystemTypes.RecRoom)] = 15, + [(SystemTypes.MiningPit, SystemTypes.Storage)] = 13, + [(SystemTypes.MiningPit, SystemTypes.UpperEngine)] = 3, + [(SystemTypes.Reactor, SystemTypes.RecRoom)] = 15, + [(SystemTypes.Reactor, SystemTypes.Storage)] = 13, + [(SystemTypes.Reactor, SystemTypes.UpperEngine)] = 5, + [(SystemTypes.RecRoom, SystemTypes.Storage)] = 6, + [(SystemTypes.RecRoom, SystemTypes.UpperEngine)] = 17, + [(SystemTypes.Storage, SystemTypes.UpperEngine)] = 15 } }; + static RoomRush() + { + RawTimeNeeded[MapNames.Dleks] = RawTimeNeeded[MapNames.Skeld]; + } + public static bool PointsSystem => WinByPointsInsteadOfDeaths.GetBool(); public static int RawPointsToWin => PointsToWin.GetInt(); @@ -126,10 +629,11 @@ public static class RoomRush Color color = Utils.GetRoleColor(CustomRoles.RRPlayer); const CustomGameMode gameMode = CustomGameMode.RoomRush; - GlobalTimeMultiplier = new FloatOptionItem(id++, "RR_GlobalTimeMultiplier", new(0.05f, 3f, 0.05f), 1f, TabGroup.GameSettings) + GlobalTimeAddition = new IntegerOptionItem(id++, "RR_GlobalTimeAddition", new(0, 15, 1), 4, TabGroup.GameSettings) .SetHeader(true) .SetColor(color) - .SetGameMode(gameMode); + .SetGameMode(gameMode) + .SetValueFormat(OptionFormat.Seconds); TimeWhenFirstTwoPlayersEnterRoom = new IntegerOptionItem(id++, "RR_TimeWhenTwoPlayersEntersRoom", new(1, 30, 1), 5, TabGroup.GameSettings) .SetColor(color) @@ -190,6 +694,9 @@ public static class RoomRush public static IEnumerator GameStartTasks() { + /*yield return RRTimeTester.DoTest(); + yield break;*/ + GameGoing = false; int ventLimit = VentTimes.GetInt(); @@ -198,8 +705,6 @@ public static class RoomRush AllRooms = ShipStatus.Instance.AllRooms.Select(x => x.RoomId).ToHashSet(); AllRooms.Remove(SystemTypes.Hallway); AllRooms.Remove(SystemTypes.Outside); - AllRooms.Remove(SystemTypes.Ventilation); - AllRooms.RemoveWhere(x => x.ToString().Contains("Decontamination")); if (SubmergedCompatibility.IsSubmerged()) AllRooms.RemoveWhere(x => (byte)x > 135); DonePlayers = []; @@ -336,13 +841,10 @@ public static class RoomRush float speed = Main.RealOptionsData.GetFloat(FloatOptionNames.PlayerSpeedMod); int time; - if (!Main.LIMap) + if (RawTimeNeeded.TryGetValue(map, out Dictionary<(SystemTypes, SystemTypes), int> rawTimes)) { - Vector2 previousPos = Map.Positions.GetValueOrDefault(previous, initial ? Main.EnumerateAlivePlayerControls().RandomElement().Pos() : previous.GetRoomClass().transform.position); - float distance = initial ? 50 : Vector2.Distance(goalPos, previousPos); - time = (int)Math.Ceiling(distance / speed); - Dictionary<(SystemTypes, SystemTypes), int> multipliers = Multipliers[map == MapNames.Dleks ? MapNames.Skeld : map]; - time *= multipliers.GetValueOrDefault((previous, RoomGoal), multipliers.GetValueOrDefault((RoomGoal, previous), 1)); + time = initial ? rawTimes.Values.Max() : rawTimes.GetValueOrDefault((previous, RoomGoal), rawTimes.GetValueOrDefault((RoomGoal, previous), 25)); + time = (int)Math.Round(time / (speed / 1.25f)); bool involvesDecontamination = map switch { @@ -353,41 +855,25 @@ public static class RoomRush }; if (involvesDecontamination) - { - int decontaminationTime = Options.ChangeDecontaminationTime.GetBool() - ? map == MapNames.Polus - ? Options.DecontaminationTimeOnPolus.GetInt() + Options.DecontaminationDoorOpenTimeOnPolus.GetInt() - : Options.DecontaminationTimeOnMiraHQ.GetInt() + Options.DecontaminationDoorOpenTimeOnMiraHQ.GetInt() - : 6; - - if (SubmergedCompatibility.IsSubmerged()) decontaminationTime = 3; - time += decontaminationTime; - } + time += 2; switch (map) { - case MapNames.Fungle when RoomGoal == SystemTypes.Laboratory || previous == SystemTypes.Laboratory: - time += (int)(8 / speed); - break; - case MapNames.Polus when (RoomGoal == SystemTypes.Laboratory && previous is not SystemTypes.Storage and not SystemTypes.Specimens and not SystemTypes.Office) || (previous == SystemTypes.Laboratory && RoomGoal is not SystemTypes.Office and not SystemTypes.Storage and not SystemTypes.Electrical and not SystemTypes.Specimens): - time -= (int)(5 * speed); - break; - case MapNames.Airship when previous == SystemTypes.GapRoom: - time *= RoomGoal switch + case MapNames.Airship: + time += previous switch { - SystemTypes.MeetingRoom => 6, - SystemTypes.Brig or SystemTypes.VaultRoom or SystemTypes.Records or SystemTypes.Showers or SystemTypes.Lounge => 3, - SystemTypes.Engine or SystemTypes.CargoBay or SystemTypes.Medical => 2, - _ => 1 + SystemTypes.Engine => 3, + SystemTypes.MainHall => 2, + _ => 0 }; break; } - var maxTime = (int)Math.Ceiling((map is MapNames.Skeld or MapNames.Dleks ? 25 : 32) / speed); - time = Math.Clamp((int)Math.Round(time * GlobalTimeMultiplier.GetFloat()), 6, maxTime); + time += GlobalTimeAddition.GetInt(); + if (time < 6) time = 6; } else - time = (int)Math.Ceiling(32 / speed * GlobalTimeMultiplier.GetFloat()); + time = (int)Math.Ceiling(32 / speed); TimeLimitEndTS = Utils.TimeStamp + time; Logger.Info($"Starting a new round - Goal = from: {Translator.GetString(previous.ToString())} ({previous}), to: {Translator.GetString(RoomGoal.ToString())} ({RoomGoal}) - Time: {time} ({map})", "RoomRush"); diff --git a/Modules/CustomRoleSelector.cs b/Modules/CustomRoleSelector.cs index f880cea81..9ef5294e7 100644 --- a/Modules/CustomRoleSelector.cs +++ b/Modules/CustomRoleSelector.cs @@ -105,7 +105,6 @@ internal static class CustomRoleSelector { case CustomRoles.Ventriloquist when GameStates.CurrentServerType == GameStates.ServerType.Vanilla: case CustomRoles.Weatherman when Main.LIMap || GameStates.CurrentServerType == GameStates.ServerType.Vanilla: - case CustomRoles.RoomRusher when Main.LIMap: case CustomRoles.Doctor when Options.EveryoneSeesDeathReasons.GetBool(): case CustomRoles.LovingCrewmate or CustomRoles.LovingImpostor when !loversData.Spawning: case CustomRoles.Commander when optImpNum <= 1 && Commander.CannotSpawnAsSoloImp.GetBool(): diff --git a/Patches/HudPatch.cs b/Patches/HudPatch.cs index 40ac211d2..b827db214 100644 --- a/Patches/HudPatch.cs +++ b/Patches/HudPatch.cs @@ -269,6 +269,7 @@ internal static class HudManagerPatch LowerInfoText.text = Options.CurrentGameMode switch { + //CustomGameMode.RoomRush => RRTimeTester.HUDText, CustomGameMode.SoloPVP => SoloPVP.GetHudText(), CustomGameMode.FFA => FreeForAll.GetHudText(), CustomGameMode.StopAndGo => StopAndGo.GetHudText(), diff --git a/Patches/PlayerJoinAndLeftPatch.cs b/Patches/PlayerJoinAndLeftPatch.cs index e8493bc5a..b0f22f092 100644 --- a/Patches/PlayerJoinAndLeftPatch.cs +++ b/Patches/PlayerJoinAndLeftPatch.cs @@ -319,13 +319,10 @@ internal static class OnGameJoinedPatch { File.SetAttributes(file, FileAttributes.Normal); // remove read-only to avoid exceptions File.Delete(file); - filesDeleted++; - } - else - { - // keep dry-run count behavior (so the user sees how many would be affected) - filesDeleted++; } + + // keep dry-run count behavior (so the user sees how many would be affected) + filesDeleted++; } } catch (Exception exFile) diff --git a/Resources/Lang/en_US.jsonc b/Resources/Lang/en_US.jsonc index 4d5c1a7cd..a174e91a2 100644 --- a/Resources/Lang/en_US.jsonc +++ b/Resources/Lang/en_US.jsonc @@ -8146,7 +8146,7 @@ "RR_DontKillPlayersOutsideRoomWhenTimeRunsOut": "Don't Kill Players Outside the Room When the Time Runs Out", "RR_DontLowerTimeLimitWhenTwoPlayersEnterCorrectRoom": "Don't Lower Time Limit When the First Two Players Enter the Correct Room", "RR_FirstPoints": "1st place: {0} with {1} points", - "RR_GlobalTimeMultiplier": "Global Time Multiplier (for adjusting the difficulty)", + "RR_GlobalTimeAddition": "Global Time Addition (to raw necessary time)", "RR_Points": "Points: {0}/{1}", "RR_PointsToWin": "Points to Win - Multiplied by how many players are in the game", "RR_ReadyQM": "Ready?\\nStarting in <#ffff44>{0}", diff --git a/Roles/Standard/Neutral/Benign/RoomRusher.cs b/Roles/Standard/Neutral/Benign/RoomRusher.cs index b1330df8c..2cfd03666 100644 --- a/Roles/Standard/Neutral/Benign/RoomRusher.cs +++ b/Roles/Standard/Neutral/Benign/RoomRusher.cs @@ -14,9 +14,8 @@ public class RoomRusher : RoleBase public static bool On; private static HashSet AllRooms = []; - private static RandomSpawn.SpawnMap Map; - private static OptionItem GlobalTimeMultiplier; + private static OptionItem GlobalTimeAddition; private static OptionItem MaxVents; private static OptionItem RoomNameDisplay; private static OptionItem Arrow; @@ -39,7 +38,7 @@ public class RoomRusher : RoleBase public override void SetupCustomOption() { StartSetup(645100) - .AutoSetupOption(ref GlobalTimeMultiplier, 1f, new FloatValueRule(0.05f, 2f, 0.05f), OptionFormat.Multiplier, overrideName: "RR_GlobalTimeMultiplier") + .AutoSetupOption(ref GlobalTimeAddition, 4, new IntegerValueRule(0, 15, 1), OptionFormat.Seconds, overrideName: "RR_GlobalTimeAddition") .AutoSetupOption(ref MaxVents, 1, new IntegerValueRule(0, 30, 1)) .AutoSetupOption(ref RoomNameDisplay, true, overrideName: "RR_DisplayRoomName") .AutoSetupOption(ref Arrow, false, overrideName: "RR_DisplayArrowToRoom") @@ -67,12 +66,8 @@ public class RoomRusher : RoleBase AllRooms = ShipStatus.Instance.AllRooms.Select(x => x.RoomId).ToHashSet(); AllRooms.Remove(SystemTypes.Hallway); AllRooms.Remove(SystemTypes.Outside); - AllRooms.Remove(SystemTypes.Ventilation); - AllRooms.RemoveWhere(x => x.ToString().Contains("Decontamination")); if (SubmergedCompatibility.IsSubmerged()) AllRooms.RemoveWhere(x => (byte)x > 135); - Map = RandomSpawn.SpawnMap.GetSpawnMap(); - StartNewRound(true); }, Main.CurrentMap == MapNames.Airship ? 22f : 14f); } @@ -105,13 +100,11 @@ public class RoomRusher : RoleBase if (!initial && !dontCount) CompletedNum++; PlayerControl rrpc = RoomRusherId.GetPlayer(); RoomGoal = AllRooms.Without(previous).RandomElement(); - Vector2 goalPos = Map.Positions.GetValueOrDefault(RoomGoal, RoomGoal.GetRoomClass().transform.position); - Vector2 previousPos = Map.Positions.GetValueOrDefault(previous, initial ? rrpc.Pos() : previous.GetRoomClass().transform.position); - float distance = initial || afterMeeting ? 50 : Vector2.Distance(goalPos, previousPos); + Vector2 goalPos = RoomGoal.GetRoomClass().transform.position; float speed = Main.RealOptionsData.GetFloat(FloatOptionNames.PlayerSpeedMod); - var time = (int)Math.Ceiling(distance / speed); - Dictionary<(SystemTypes, SystemTypes), int> multipliers = RoomRush.Multipliers[map == MapNames.Dleks ? MapNames.Skeld : map]; - time *= multipliers.GetValueOrDefault((previous, RoomGoal), multipliers.GetValueOrDefault((RoomGoal, previous), 1)); + var rawTimes = RoomRush.RawTimeNeeded.GetValueOrDefault(map, []); + var time = initial ? rawTimes.Values.Max() : rawTimes.GetValueOrDefault((previous, RoomGoal), rawTimes.GetValueOrDefault((RoomGoal, previous), 25)); + time = (int)Math.Round(time / (speed / 1.25f)); bool involvesDecontamination = map switch { @@ -122,38 +115,23 @@ public class RoomRusher : RoleBase }; if (involvesDecontamination) - { - int decontaminationTime = Options.ChangeDecontaminationTime.GetBool() - ? map == MapNames.Polus - ? Options.DecontaminationTimeOnPolus.GetInt() + Options.DecontaminationDoorOpenTimeOnPolus.GetInt() - : Options.DecontaminationTimeOnMiraHQ.GetInt() + Options.DecontaminationDoorOpenTimeOnMiraHQ.GetInt() - : 6; - - if (SubmergedCompatibility.IsSubmerged()) decontaminationTime = 3; - time += decontaminationTime + 3; - } + time += 2; switch (map) { - case MapNames.Fungle when RoomGoal == SystemTypes.Laboratory || previous == SystemTypes.Laboratory: - time += (int)(8 / speed); - break; - case MapNames.Polus when (RoomGoal == SystemTypes.Laboratory && previous is not SystemTypes.Storage and not SystemTypes.Specimens and not SystemTypes.Office) || (previous == SystemTypes.Laboratory && RoomGoal is not SystemTypes.Office and not SystemTypes.Storage and not SystemTypes.Electrical and not SystemTypes.Specimens): - time -= (int)(5 * speed); - break; - case MapNames.Airship when previous == SystemTypes.GapRoom: - time *= RoomGoal switch + case MapNames.Airship: + time += previous switch { - SystemTypes.MeetingRoom => 6, - SystemTypes.Brig or SystemTypes.VaultRoom or SystemTypes.Records or SystemTypes.Showers or SystemTypes.Lounge => 3, - SystemTypes.Engine or SystemTypes.CargoBay or SystemTypes.Medical => 2, - _ => 1 + SystemTypes.Engine => 3, + SystemTypes.MainHall => 2, + _ => 0 }; break; } - var maxTime = (int)Math.Ceiling(32 / speed); - TimeLeft = Math.Clamp((int)Math.Round(time * GlobalTimeMultiplier.GetFloat()), 6, maxTime); + time += GlobalTimeAddition.GetInt(); + if (time < 6) time = 6; + Logger.Info($"Goal = from: {Translator.GetString(previous.ToString())} ({previous}), to: {Translator.GetString(RoomGoal.ToString())} ({RoomGoal}) - Time: {TimeLeft} ({map})", "Room Rusher"); LocateArrow.RemoveAllTarget(RoomRusherId); LocateArrow.Add(RoomRusherId, goalPos);