private static bool TestStartLocation(string start)
 {
     // could potentially add logic checks here in the future
     StartDef startDef = LogicManager.GetStartLocation(start);
     if (RandomizerMod.Instance.Settings.RandomizeStartItems)
     {
         return true;
     }
     if (RandomizerMod.Instance.Settings.RandomizeRooms)
     {
         if (startDef.roomSafe)
         {
             return true;
         }
         else return false;
     }
     if (RandomizerMod.Instance.Settings.RandomizeAreas)
     {
         if (startDef.areaSafe)
         {
             return true;
         }
         else return false;
     }
     if (startDef.itemSafe) return true;
     return false;
 }
        public static void RandomizeStartingLocation()
        {
            if (RandomizerMod.Instance.Settings.RandomizeStartLocation)
            {
                List<string> startLocations = LogicManager.StartLocations.Where(start => TestStartLocation(start)).ToList();
                StartName = startLocations[rand.Next(startLocations.Count)];
            }
            else if (!LogicManager.StartLocations.Contains(RandomizerMod.Instance.Settings.StartName))
            {
                StartName = "King's Pass";
            }
            else StartName = RandomizerMod.Instance.Settings.StartName;

            Log("Setting start location as " + StartName);

            StartDef def = LogicManager.GetStartLocation(StartName);

            if (startProgression == null)
            {
                startProgression = new List<string>();
            }
            if (!RandomizerMod.Instance.Settings.RandomizeRooms)
            {
                startProgression.Add(def.waypoint);
            }
            if (RandomizerMod.Instance.Settings.RandomizeAreas && !string.IsNullOrEmpty(def.areaTransition))
            {
                startProgression.Add(def.areaTransition);
            }
            if (RandomizerMod.Instance.Settings.RandomizeRooms)
            {
                startProgression.Add(def.roomTransition);
            }
        }
        public static void RandomizeStartingLocation()
        {
            if (RandomizerMod.Instance.Settings.RandomizeStartLocation)
            {
                MiniPM pm = new MiniPM();
                pm.logicFlags["ITEMRANDO"] = !RandomizerMod.Instance.Settings.RandomizeTransitions;
                pm.logicFlags["AREARANDO"] = RandomizerMod.Instance.Settings.RandomizeAreas;
                pm.logicFlags["ROOMRANDO"] = RandomizerMod.Instance.Settings.RandomizeRooms;

                pm.logicFlags["MILDSKIPS"]     = RandomizerMod.Instance.Settings.MildSkips;
                pm.logicFlags["SHADESKIPS"]    = RandomizerMod.Instance.Settings.ShadeSkips;
                pm.logicFlags["ACIDSKIPS"]     = RandomizerMod.Instance.Settings.AcidSkips;
                pm.logicFlags["FIREBALLSKIPS"] = RandomizerMod.Instance.Settings.FireballSkips;
                pm.logicFlags["SPIKETUNNELS"]  = RandomizerMod.Instance.Settings.SpikeTunnels;
                pm.logicFlags["DARKROOMS"]     = RandomizerMod.Instance.Settings.DarkRooms;
                pm.logicFlags["SPICYSKIPS"]    = RandomizerMod.Instance.Settings.SpicySkips;

                pm.logicFlags["VERTICAL"]           = RandomizerMod.Instance.Settings.RandomizeStartItems;
                pm.logicFlags["SWIM"]               = !RandomizerMod.Instance.Settings.RandomizeSwim;
                pm.logicFlags["2MASKS"]             = !RandomizerMod.Instance.Settings.CursedMasks;
                pm.logicFlags["NONRANDOMELEVATORS"] = !RandomizerMod.Instance.Settings.ElevatorPass;

                List <string> startLocations = LogicManager.StartLocations
                                               .Where(start => pm.Evaluate(LogicManager.GetStartLocation(start).logic))
                                               .Except(new string[] { "King's Pass" })
                                               .ToList();
                StartName = startLocations[rand.Next(startLocations.Count)];
            }
            else if (!LogicManager.StartLocations.Contains(RandomizerMod.Instance.Settings.StartName))
            {
                StartName = "King's Pass";
            }
            else
            {
                StartName = RandomizerMod.Instance.Settings.StartName;
            }

            Log("Setting start location as " + StartName);

            StartDef def = LogicManager.GetStartLocation(StartName);

            if (startProgression == null)
            {
                startProgression = new List <string>();
            }
            if (!RandomizerMod.Instance.Settings.RandomizeRooms)
            {
                startProgression.Add(def.waypoint);
            }
            if (RandomizerMod.Instance.Settings.RandomizeAreas && !string.IsNullOrEmpty(def.areaTransition))
            {
                startProgression.Add(def.areaTransition);
            }
            if (RandomizerMod.Instance.Settings.RandomizeRooms)
            {
                startProgression.Add(def.roomTransition);
            }
        }
        private static bool TestStartLocation(string start)
        {
            // could potentially add logic checks here in the future
            StartDef startDef = LogicManager.GetStartLocation(start);

            if (RandomizerMod.Instance.Settings.RandomizeStartItems)
            {
                return(true);
            }
            if (RandomizerMod.Instance.Settings.RandomizeRooms)
            {
                if (startDef.roomSafe)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            if (RandomizerMod.Instance.Settings.RandomizeAreas)
            {
                if (startDef.areaSafe)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            if (startDef.sceneName == "Mines_35" && !RandomizerMod.Instance.Settings.EarlyGeo)
            {
                return(false);
            }
            if (startDef.itemSafe)
            {
                return(true);
            }
            return(false);
        }