Esempio n. 1
0
 private void FetchGrubLocations(RandomizerState state)
 {
     if (RandomizerMod.Instance.Settings.RandomizeMimics)
     {
         if (RandomizerMod.Instance.Settings.RandomizeGrubs)
         {
             grubLocations = FetchLocationsByPool(state, "GrubItem");
         }
         else
         {
             grubLocations = RandomizerMod.Instance.Settings._mimicPlacements
                             .Where(kvp => !kvp.Value)
                             .ToDictionary(kvp => kvp.Key, kvp => 1);
         }
     }
     else
     {
         if (RandomizerMod.Instance.Settings.RandomizeGrubs)
         {
             grubLocations = FetchLocationsByPool(state, "Grub");
         }
         else
         {
             grubLocations = LogicManager.GetItemsByPool("Grub").ToDictionary(grub => grub, grub => 1);
         }
     }
 }
        public void PlaceItem(string item, string location)
        {
            if (shopItems.ContainsKey(location))
            {
                shopItems[location].Add(item);
            }
            else
            {
                nonShopItems.Add(location, item);
            }
            UpdateOrder(location);
            unplacedLocations.Remove(location);
            if (LogicManager.GetItemDef(item).progression)
            {
                unplacedProgression.Remove(item);
                UpdateReachableLocations(item);
            }
            else
            {
                unplacedItems.Remove(item);
            }

            if (LogicManager.GetItemsByPool("Grub").Contains(item))
            {
                pm.AddGrubLocation(location);
            }
            else if (LogicManager.GetItemsByPool("Root").Contains(item))
            {
                pm.AddEssenceLocation(location, LogicManager.GetItemDef(item).geo);
            }
        }
        // Randomize Mimics in the PreRandomizer if the case that Mimics are on but Grubs are off
        public static void RandomizeMimics()
        {
            int grubcount = 1;

            if (!(!RandomizerMod.Instance.Settings.RandomizeGrubs && RandomizerMod.Instance.Settings.RandomizeMimics))
            {
                return;
            }

            List <string> locations = new List <string>();

            locations.AddRange(LogicManager.GetItemsByPool("Grub"));
            locations.AddRange(LogicManager.GetItemsByPool("Mimic"));

            int num_mimics = rand.Next(MIN_MIMIC_COUNT, MAX_MIMIC_COUNT + 1);

            for (int i = 0; i < num_mimics; i++)
            {
                string location = locations[rand.Next(locations.Count)];
                RandomizerMod.Instance.Settings._mimicPlacements[location] = true;
                locations.Remove(location);
                grubcount++;
            }
            foreach (string loc in locations)
            {
                RandomizerMod.Instance.Settings._mimicPlacements[loc] = false;
                grubcount++;
            }
        }
        public void PlaceItem(string item, string location)
        {
            if (shopItems.ContainsKey(location))
            {
                shopItems[location].Add(item);
            }
            else
            {
                nonShopItems.Add(location, item);
            }

            unplacedLocations.Remove(location);
            if (LogicManager.GetItemDef(item).progression)
            {
                unplacedProgression.Remove(item);
                UpdateReachableLocations(item);
            }
            else
            {
                unplacedItems.Remove(item);
            }

            if (LogicManager.GetItemsByPool("Grub").Contains(item))
            {
                pm.AddGrubLocation(location);
            }
            else if (LogicManager.GetItemsByPool("Root").Contains(item))
            {
                pm.AddEssenceLocation(location, LogicManager.GetItemDef(item).geo);
            }
            Log("Placing " + item + " at " + location + ". There are " + reachableLocations.Count + " reachable locations and " + availableCount + " available locations.");
        }
 private void FetchGrubLocations(RandomizerState state)
 {
     if (RandomizerMod.Instance.Settings.RandomizeGrubs)
     {
         grubLocations = FetchLocationsByPool(state, "Grub");
     }
     else
     {
         grubLocations = LogicManager.GetItemsByPool("Grub").ToDictionary(grub => grub, grub => 1);
     }
 }
Esempio n. 6
0
        private HashSet <string> GetRandomizedLocations()
        {
            HashSet <string> locations = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }

            locations = new HashSet <string>(locations.Where(item => LogicManager.GetItemDef(item).type != ItemType.Shop));
            locations.UnionWith(LogicManager.ShopNames);
            return(locations);
        }
Esempio n. 7
0
        private void FetchEggLocations(RandomizerState state)
        {
            if (!RandomizerMod.Instance.Settings.EggShop)
            {
                return;
            }

            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                eggLocations = FetchLocationsByPool(state, "EggShopItem");
            }
            else
            {
                // Easiest to simply ignore the egg at sly
                eggLocations = LogicManager.GetItemsByPool("Egg").Where(egg => LogicManager.GetItemDef(egg).type != ItemType.Shop)
                               .ToDictionary(egg => egg, egg => 1);
            }
        }
        private void FetchGrubLocations(RandomizerState state)
        {
            switch (state)
            {
            default:
                grubLocations = LogicManager.GetItemsByPool("Grub").ToDictionary(grub => grub, grub => 1);
                break;

            case RandomizerState.InProgress when RandomizerMod.Instance.Settings.RandomizeGrubs:
                grubLocations = new Dictionary <string, int>();
                break;

            case RandomizerState.Validating when RandomizerMod.Instance.Settings.RandomizeGrubs:
                grubLocations = ItemManager.nonShopItems.Where(kvp => LogicManager.GetItemDef(kvp.Value).pool == "Grub").ToDictionary(kvp => kvp.Value, kvp => 1);
                foreach (var kvp in ItemManager.shopItems)
                {
                    if (kvp.Value.Any(item => LogicManager.GetItemDef(item).pool == "Grub"))
                    {
                        grubLocations.Add(kvp.Key, kvp.Value.Count(item => LogicManager.GetItemDef(item).pool == "Grub"));
                    }
                }
                break;

            case RandomizerState.Completed when RandomizerMod.Instance.Settings.RandomizeGrubs:
                grubLocations = RandomizerMod.Instance.Settings.ItemPlacements
                                .Where(pair => LogicManager.GetItemDef(pair.Item1).pool == "Grub" && !LogicManager.ShopNames.Contains(pair.Item2))
                                .ToDictionary(pair => pair.Item2, kvp => 1);
                foreach (string shop in LogicManager.ShopNames)
                {
                    if (RandomizerMod.Instance.Settings.ItemPlacements.Any(pair => pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == "Grub"))
                    {
                        grubLocations.Add(shop, RandomizerMod.Instance.Settings.ItemPlacements.Count(pair => pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == "Grub"));
                    }
                }
                break;
            }
        }
Esempio n. 9
0
        private void FetchEssenceLocationsFromPool(RandomizerState state, string pool, bool poolRandomized)
        {
            switch (state)
            {
            default:
                foreach (string root in LogicManager.GetItemsByPool(pool))
                {
                    essenceLocations.Add(root, LogicManager.GetItemDef(root).geo);
                }
                break;

            case RandomizerState.InProgress when poolRandomized:
            case RandomizerState.HelperLog when poolRandomized:
                break;

            case RandomizerState.Validating when poolRandomized:
                foreach (var kvp in ItemManager.nonShopItems)
                {
                    if (LogicManager.GetItemDef(kvp.Value).pool == pool)
                    {
                        essenceLocations.Add(kvp.Key, LogicManager.GetItemDef(kvp.Value).geo);
                    }
                }
                foreach (var kvp in ItemManager.shopItems)
                {
                    foreach (string item in kvp.Value)
                    {
                        if (LogicManager.GetItemDef(item).pool == pool)
                        {
                            if (!essenceLocations.ContainsKey(kvp.Key))
                            {
                                essenceLocations.Add(kvp.Key, 0);
                            }
                            essenceLocations[kvp.Key] += LogicManager.GetItemDef(item).geo;
                        }
                    }
                }
                break;

            case RandomizerState.Completed when poolRandomized:
                foreach (var pair in RandomizerMod.Instance.Settings.ItemPlacements)
                {
                    if (LogicManager.GetItemDef(pair.Item1).pool == pool && !LogicManager.ShopNames.Contains(pair.Item2))
                    {
                        essenceLocations.Add(pair.Item2, LogicManager.GetItemDef(pair.Item1).geo);
                    }
                }
                foreach (string shop in LogicManager.ShopNames)
                {
                    if (RandomizerMod.Instance.Settings.ItemPlacements.Any(pair => pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == pool))
                    {
                        essenceLocations.Add(shop, 0);
                        foreach (var pair in RandomizerMod.Instance.Settings.ItemPlacements)
                        {
                            if (pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == pool)
                            {
                                essenceLocations[shop] += LogicManager.GetItemDef(pair.Item1).geo;
                            }
                        }
                    }
                }
                break;
            }
        }
        public static HashSet <string> GetRandomizedLocations()
        {
            HashSet <string> locations = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaps)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Map"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeStags)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Stag"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrubs)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Grub"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeWhisperingRoots)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Root"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRocks)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Rock"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSoulTotems)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Soul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTotems)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("PalaceSoul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLoreTablets)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Lore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTablets)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("PalaceLore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLifebloodCocoons)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Cocoon"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrimmkinFlames)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Flame"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeBossEssence)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Essence_Boss"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeBossGeo)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Boss_Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeFocus)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Cursed"));
            }

            // With Lore tablets randomized, we need to remove the World Sense and Focus locations from the pool
            if (RandomizerMod.Instance.Settings.RandomizeLoreTablets)
            {
                // World Sense is "randomized" even if vanilla through the vanilla manager, so we need to remove the tablet location
                // regardless of whether or not dreamers are randomized
                locations.Remove("Lore_Tablet-World_Sense");
                if (RandomizerMod.Instance.Settings.RandomizeFocus)
                {
                    locations.Remove("Focus");
                }
            }

            // Adding *three* new locations to KP throws off the balance a bit. Put 3 more items in shops instead.
            // if (RandomizerMod.Instance.Settings.CursedNail) locations.UnionWith(LogicManager.GetItemsByPool("CursedNail"));

            // Split Claw
            if (RandomizerMod.Instance.Settings.RandomizeClawPieces && RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("SplitClaw"));
                locations.Remove("Mantis_Claw");
            }
            // Add a new location at Hornet 1 in Split Cloak Mode
            if (RandomizerMod.Instance.Settings.RandomizeCloakPieces && RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("SplitCloakLocation"));
            }

            locations = new HashSet <string>(locations.Where(item => LogicManager.GetItemDef(item).type != ItemType.Shop));
            locations.UnionWith(LogicManager.ShopNames);

            return(locations);
        }
        private static HashSet <string> GetRandomizedItems() // not suitable outside randomizer, because it can't compute duplicate items
        {
            HashSet <string> items = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaps)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Map"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeStags)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Stag"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrubs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Grub"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeWhisperingRoots)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Root"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRocks)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Rock"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSoulTotems)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Soul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTotems)
            {
                items.UnionWith(LogicManager.GetItemsByPool("PalaceSoul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLoreTablets)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Lore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTablets)
            {
                items.UnionWith(LogicManager.GetItemsByPool("PalaceLore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLifebloodCocoons)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Cocoon"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrimmkinFlames)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Flame"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeBossEssence)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Essence_Boss"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeBossGeo)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Boss_Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeFocus)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Cursed"));
            }
            if (RandomizerMod.Instance.Settings.CursedNail)
            {
                items.UnionWith(LogicManager.GetItemsByPool("CursedNail"));
            }

            if (RandomizerMod.Instance.Settings.RandomizeClawPieces && RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("SplitClaw"));
                items.Remove("Mantis_Claw");
            }

            if (RandomizerMod.Instance.Settings.RandomizeCloakPieces && RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("SplitCloak"));
                items.Remove("Mothwing_Cloak");
                items.Remove("Shade_Cloak");
                // We'll remove a randomly chosen cloak piece after setting up dupes
            }

            if (RandomizerMod.Instance.Settings.Cursed)
            {
                items.Remove("Shade_Soul");
                items.Remove("Descending_Dark");
                items.Remove("Abyss_Shriek");

                int i = 0;

                List <string> iterate = items.ToList();
                foreach (string item in iterate)
                {
                    switch (LogicManager.GetItemDef(item).pool)
                    {
                    case "Mask":
                    case "Vessel":
                    case "Ore":
                    case "Notch":
                    case "Geo":
                    case "Egg":
                    case "Relic":
                    case "Rock":
                    case "Soul":
                    case "PalaceSoul":
                    case "Boss_Geo":
                        items.Remove(item);
                        items.Add("1_Geo_(" + i + ")");
                        i++;
                        break;
                    }
                }
            }

            if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
            {
                duplicatedItems = new List <string>();

                // Add support for duplicate major items without all four main pools randomized - only add dupes for the randomized pools.
                foreach (string majorItem in items
                         .Where(_item => LogicManager.GetItemDef(_item).majorItem)
                         .ToList())
                {
                    if (Randomizer.startItems.Contains(majorItem))
                    {
                        continue;
                    }
                    if (RandomizerMod.Instance.Settings.Cursed && (majorItem == "Vengeful_Spirit" || majorItem == "Desolate_Dive" || majorItem == "Howling_Wraiths"))
                    {
                        continue;
                    }

                    // Do not duplicate claw pieces
                    if (LogicManager.GetItemDef(majorItem).pool == "SplitClaw")
                    {
                        continue;
                    }

                    duplicatedItems.Add(majorItem);
                }

                // The Dreamer item needs to be added separately, because it is not actually a duplicate of a randomized item
                if (RandomizerMod.Instance.Settings.RandomizeDreamers)
                {
                    duplicatedItems.Add("Dreamer");
                }
            }

            if (RandomizerMod.Instance.Settings.RandomizeCloakPieces && RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                // In Split Cloak mode, we randomly omit one of the four Left MWC, Right MWC, Left SC, Right SC.
                // We omit the i'th element of this list. We need to do it like this rather than just omit a shade cloak piece
                // so that (e.g.) picking up the Left Shade Cloak item doesn't spoil that it's a Left Shade Cloak seed.
                switch (new Random(RandomizerMod.Instance.Settings.Seed + 61).Next(4))
                {
                case 0:
                    items.Remove("Left_Mothwing_Cloak");
                    if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
                    {
                        duplicatedItems.Remove("Right_Mothwing_Cloak");
                    }
                    break;

                case 1:
                    items.Remove("Right_Mothwing_Cloak");
                    if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
                    {
                        duplicatedItems.Remove("Left_Mothwing_Cloak");
                    }
                    break;

                case 2:
                    items.Remove("Left_Shade_Cloak");
                    if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
                    {
                        duplicatedItems.Remove("Right_Shade_Cloak");
                    }
                    break;

                case 3:
                    items.Remove("Right_Shade_Cloak");
                    if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
                    {
                        duplicatedItems.Remove("Left_Shade_Cloak");
                    }
                    break;
                }
            }

            return(items);
        }
Esempio n. 12
0
        private HashSet <string> GetRandomizedItems()
        {
            HashSet <string> items = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }

            if (RandomizerMod.Instance.Settings.Cursed)
            {
                items.Remove("Shade_Soul");
                items.Remove("Descending_Dark");
                items.Remove("Abyss_Shriek");

                int i = 0;

                List <string> iterate = items.ToList();
                foreach (string item in iterate)
                {
                    switch (LogicManager.GetItemDef(item).pool)
                    {
                    case "Mask":
                    case "Vessel":
                    case "Ore":
                    case "Notch":
                    case "Geo":
                    case "Egg":
                    case "Relic":
                        items.Remove(item);
                        items.Add("1_Geo_(" + i + ")");
                        i++;
                        break;
                    }
                }
            }

            return(items);
        }
        private void FetchEssenceLocations(RandomizerState state)
        {
            essenceLocations = LogicManager.GetItemsByPool("Essence_Boss")
                               .ToDictionary(item => item, item => LogicManager.GetItemDef(item).geo);

            switch (state)
            {
            default:
                foreach (string root in LogicManager.GetItemsByPool("Root"))
                {
                    essenceLocations.Add(root, LogicManager.GetItemDef(root).geo);
                }
                break;

            case RandomizerState.InProgress when RandomizerMod.Instance.Settings.RandomizeWhisperingRoots:
                break;

            case RandomizerState.Validating when RandomizerMod.Instance.Settings.RandomizeWhisperingRoots:
                foreach (var kvp in ItemManager.nonShopItems)
                {
                    if (LogicManager.GetItemDef(kvp.Value).pool == "Root")
                    {
                        essenceLocations.Add(kvp.Key, LogicManager.GetItemDef(kvp.Value).geo);
                    }
                }
                foreach (var kvp in ItemManager.shopItems)
                {
                    foreach (string item in kvp.Value)
                    {
                        if (LogicManager.GetItemDef(item).pool == "Root")
                        {
                            if (!essenceLocations.ContainsKey(kvp.Key))
                            {
                                essenceLocations.Add(kvp.Key, 0);
                            }
                            essenceLocations[kvp.Key] += LogicManager.GetItemDef(item).geo;
                        }
                    }
                }
                break;

            case RandomizerState.Completed when RandomizerMod.Instance.Settings.RandomizeWhisperingRoots:
                foreach (var pair in RandomizerMod.Instance.Settings.ItemPlacements)
                {
                    if (LogicManager.GetItemDef(pair.Item1).pool == "Root" && !LogicManager.ShopNames.Contains(pair.Item2))
                    {
                        essenceLocations.Add(pair.Item2, LogicManager.GetItemDef(pair.Item1).geo);
                    }
                }
                foreach (string shop in LogicManager.ShopNames)
                {
                    if (RandomizerMod.Instance.Settings.ItemPlacements.Any(pair => pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == "Root"))
                    {
                        essenceLocations.Add(shop, 0);
                        foreach (var pair in RandomizerMod.Instance.Settings.ItemPlacements)
                        {
                            if (pair.Item2 == shop && LogicManager.GetItemDef(pair.Item1).pool == "Root")
                            {
                                essenceLocations[shop] += LogicManager.GetItemDef(pair.Item1).geo;
                            }
                        }
                    }
                }
                break;
            }
        }
        public static HashSet <string> GetRandomizedItems()
        {
            HashSet <string> items = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaps)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Map"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeStags)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Stag"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrubs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Grub"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeWhisperingRoots)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Root"));
            }

            if (RandomizerMod.Instance.Settings.Cursed)
            {
                items.Remove("Shade_Soul");
                items.Remove("Descending_Dark");
                items.Remove("Abyss_Shriek");

                int i = 0;

                List <string> iterate = items.ToList();
                foreach (string item in iterate)
                {
                    switch (LogicManager.GetItemDef(item).pool)
                    {
                    case "Mask":
                    case "Vessel":
                    case "Ore":
                    case "Notch":
                    case "Geo":
                    case "Egg":
                    case "Relic":
                        items.Remove(item);
                        items.Add("1_Geo_(" + i + ")");
                        i++;
                        break;
                    }
                }
            }

            if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
            {
                int i = 0;
                foreach (string majorItem in items.Where(_item => LogicManager.GetItemDef(_item).majorItem).ToList())
                {
                    items.Add($"Placeholder_({i++})"); // we mask the duplicates during the randomizer so that they are placed uniformly without consideration of logic
                }
            }


            return(items);
        }
Esempio n. 15
0
        public static HashSet <string> GetRandomizedLocations()
        {
            HashSet <string> locations = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaps)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Map"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeStags)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Stag"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrubs)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Grub"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeWhisperingRoots)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Root"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRocks)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Rock"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSoulTotems)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Soul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTotems)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("PalaceSoul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLoreTablets)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Lore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLifebloodCocoons)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Cocoon"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrimmkinFlames)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Flame"));
            }
            if (RandomizerMod.Instance.Settings.Cursed)
            {
                locations.UnionWith(LogicManager.GetItemsByPool("Cursed"));
            }

            locations = new HashSet <string>(locations.Where(item => LogicManager.GetItemDef(item).type != ItemType.Shop));
            locations.UnionWith(LogicManager.ShopNames);

            return(locations);
        }
Esempio n. 16
0
        private static HashSet <string> GetRandomizedItems() // not suitable outside randomizer, because it can't compute duplicate items
        {
            HashSet <string> items = new HashSet <string>();

            if (RandomizerMod.Instance.Settings.RandomizeDreamers)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Dreamer"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSkills)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Skill"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharms)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Charm"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeKeys)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Key"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaskShards)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Mask"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeVesselFragments)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Vessel"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePaleOre)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Ore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeCharmNotches)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Notch"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGeoChests)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Geo"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRancidEggs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Egg"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRelics)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Relic"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeMaps)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Map"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeStags)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Stag"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrubs)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Grub"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeWhisperingRoots)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Root"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeRocks)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Rock"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeSoulTotems)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Soul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizePalaceTotems)
            {
                items.UnionWith(LogicManager.GetItemsByPool("PalaceSoul"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLoreTablets)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Lore"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeLifebloodCocoons)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Cocoon"));
            }
            if (RandomizerMod.Instance.Settings.RandomizeGrimmkinFlames)
            {
                items.UnionWith(LogicManager.GetItemsByPool("Flame"));
            }

            if (RandomizerMod.Instance.Settings.Cursed)
            {
                items.Remove("Shade_Soul");
                items.Remove("Descending_Dark");
                items.Remove("Abyss_Shriek");

                int i = 0;

                List <string> iterate = items.ToList();
                foreach (string item in iterate)
                {
                    switch (LogicManager.GetItemDef(item).pool)
                    {
                    case "Mask":
                    case "Vessel":
                    case "Ore":
                    case "Notch":
                    case "Geo":
                    case "Egg":
                    case "Relic":
                    case "Rock":
                    case "Soul":
                    case "PalaceSoul":
                    case "Lore":
                        items.Remove(item);
                        items.Add("1_Geo_(" + i + ")");
                        i++;
                        break;
                    }
                }

                items.UnionWith(LogicManager.GetItemsByPool("Cursed"));
            }

            if (RandomizerMod.Instance.Settings.DuplicateMajorItems)
            {
                duplicatedItems = new List <string>();
                foreach (string majorItem in LogicManager.ItemNames.Where(_item => LogicManager.GetItemDef(_item).majorItem).ToList())
                {
                    if (Randomizer.startItems.Contains(majorItem))
                    {
                        continue;
                    }
                    if (RandomizerMod.Instance.Settings.Cursed && (majorItem == "Vengeful_Spirit" || majorItem == "Desolate_Dive" || majorItem == "Howling_Wraiths"))
                    {
                        continue;
                    }
                    duplicatedItems.Add(majorItem);
                }
            }

            return(items);
        }