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); } }
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); }
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; } }
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); }
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); }
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); }
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); }