public override void Generate(Map map, GenStepParams parms) { if (map.TileInfo.WaterCovered) { return; } ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRockChunks != RockChunksOverwriteType.AddToCaves) { return; } freqFactorNoise = new Perlin(0.014999999664723873, 2.0, 0.5, 6, Rand.Int, QualityMode.Medium); freqFactorNoise = new ScaleBias(1.0, 1.0, freqFactorNoise); NoiseDebugUI.StoreNoiseRender(freqFactorNoise, "cave_rock_chunks_freq_factor"); MapGenFloatGrid elevation = MapGenerator.Elevation; foreach (IntVec3 cell in map.AllCells) { float probVal = PlaceProbabilityPerCell * freqFactorNoise.GetValue(cell); if (elevation[cell] >= ThreshLooseRock && Rand.Value < probVal) { GrowLowRockFormationFrom(cell, map); } } freqFactorNoise = null; }
public static bool Prefix(World __instance, ref bool __result, int tile) { BiomeDef biome = __instance.grid[tile].biome; // Set via modext caves ModExt_Biome_GenStep_BetterCaves extCaves = biome.GetModExtension <ModExt_Biome_GenStep_BetterCaves>(); if (extCaves != null) { __result = true; return(false); } // Set via modext feature control ModExt_Biome_FeatureControl extFtControl = biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null) { if (extFtControl.overwriteCaves == GenFeatureTristate.Add) { __result = true; return(false); } if (extFtControl.overwriteCaves == GenFeatureTristate.Remove) { __result = false; return(false); } } return(true); }
public static bool Prefix(ref bool __result, IntVec3 c, Map map, bool canRoofPunch) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { return(true); } if (!c.Walkable(map)) { __result = false; return(false); } if (c.CloseToEdge(map, MaxDistanceToEdge)) { __result = true; return(false); } RoofDef roof = c.GetRoof(map); if (roof != null && !canRoofPunch) { __result = false; } else { __result = true; } return(false); }
public static bool Prefix(Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.overwriteRockChunks == RockChunksOverwriteType.Remove) { return(false); } return(true); }
public static bool Prefix(GenStep_CaveHives __instance, Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.overwriteHives == HiveOverwriteType.Remove) { return(false); } return(true); }
public static bool Prefix(Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.overwriteCaves == GenFeatureTristate.Remove) { return(false); } return(true); }
public static bool Prefix(Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.removeShrines) { return(false); } return(true); }
public static bool Prefix(Room __instance, ref bool __result) { ModExt_Biome_FeatureControl extFtControl = __instance.Map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.roomCalculationType == RoomCalculationType.Default) { return(true); } __result = __instance.OutdoorsByRCType(extFtControl.roomCalculationType); return(false); }
public static bool Prefix(ref bool __result, out IntVec3 result, Map map, float roadChance, Predicate <IntVec3> extraValidator = null) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { result = IntVec3.Invalid; return(true); } __result = CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => c.Standable(map) && map.reachability.CanReachColony(c) && c.GetRoom(map, RegionType.Set_Passable).TouchesMapEdge&& (extraValidator == null || extraValidator(c)), map, roadChance, out result); return(false); }
public static bool Prefix(World __instance, ref Rot4 __result, int tileID) { Tile tileObj = __instance.grid[tileID]; ModExt_Biome_FeatureControl extFtControl = tileObj.biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.removeBeach) { __result = Rot4.Invalid; return(false); } return(true); }
public static bool Prefix(IntVec3 dropSpot, Map map, Thing t) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { return(true); } // Spawn things from orbital trading directly on deep cave maps instead making a drop pod GenPlace.TryPlaceThing(t, dropSpot, map, ThingPlaceMode.Near); return(false); }
public static void Postfix(GenStep_CaveHives __instance, Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && extFtControl.overwriteHives == HiveOverwriteType.AddActive) { List <Hive> spawnedHives = Traverse.Create(__instance).Field("spawnedHives").GetValue <List <Hive> >(); Hive lastAddedHive = spawnedHives.Last(); lastAddedHive.canSpawnPawns = true; lastAddedHive.GetComp <CompSpawnerHives>().canSpawnHives = true; } }
public static bool Prefix(Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { return(true); } DeepProfiler.Start("RebuildAllRegions"); map.regionAndRoomUpdater.RebuildAllRegionsAndRooms(); DeepProfiler.End(); MapGenerator.PlayerStartSpot = CellFinderLoose.TryFindCentralCell(map, 7, MinRoomCellCount, (IntVec3 x) => x.CloseToEdge(map, MaxDistanceToEdge)); return(false); }
public static void Postfix(GenStep_CaveHives __instance, Map map) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null && (extFtControl.overwriteHives == HiveOverwriteType.Add || extFtControl.overwriteHives == HiveOverwriteType.AddActive)) { int hiveCount = map.ScaleValueOnSize(extFtControl.additionalHivesScaling); Traverse trav = Traverse.Create(__instance).Method("TrySpawnHive", new object[] { map }); for (int i = 0; i < hiveCount; i++) { trav.GetValue(); } } }
public static void Prefix(IntVec3 dropCenter, Map map, ref bool instaDrop) { ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { return; } // Set instaDrop to true if the drop pot should arrive near the map edge // This is mainly for event refugee and resource drops (which should maybe be deactivated at all on deep cave maps) if (dropCenter.CloseToEdge(map, MaxDistanceToEdge)) { instaDrop = true; } }
public static void Prefix(ScenPart_PlayerPawnsArriveMethod __instance, Map map) { if (Find.GameInitData == null) { return; } ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl == null || extFtControl.overwriteRoof != RoofOverwriteType.FullStable) { return; } // Force standing spawn type if roof is full overwritten Traverse.Create(__instance).Field("method").SetValue(PlayerPawnsArriveMethod.Standing); }
public static void Postfix(Map map) { IntVec3[] adj = GenAdj.AdjacentCells; TerrainDef[] grid = map.terrainGrid.topGrid; // Do stuff for biome TundraSkerries if (map.Biome == BiomeDefOf.TundraSkerries) { // Smooth island edges for (int i = 0, iLen = grid.Count(); i < iLen; i++) { int count = 0; if (grid[i] == TerrainDefOf.NormalSand || grid[i] == TerrainDefOf.Sandstone_Rough || grid[i] == TerrainDefOf.Granite_Rough || grid[i] == TerrainDefOf.Limestone_Rough || grid[i] == TerrainDefOf.Slate_Rough || grid[i] == TerrainDefOf.Marble_Rough) { IntVec3 currCell = map.cellIndices.IndexToCell(i); for (int j = 0; j < 8; j++) { IntVec3 c = currCell + adj[j]; if (c.InBounds(map) && map.terrainGrid.TerrainAt(c) == TerrainDefOf.WaterOceanShallow) { count++; } } if (count > 5) { map.terrainGrid.SetTerrain(currCell, TerrainDefOf.WaterOceanShallow); } } } } // Do general postfix replacement afterwards for (int i = 0, iLen = grid.Count(); i < iLen; i++) { // Check for too steep water edges if (grid[i] == TerrainDefOf.WaterOceanDeep) { IntVec3 currCell = map.cellIndices.IndexToCell(i); for (int j = 0; j < 8; j++) { IntVec3 c = currCell + adj[j]; if (c.InBounds(map) && map.terrainGrid.TerrainAt(c) == TerrainDefOf.WaterOceanShallow) { map.terrainGrid.SetTerrain(c, TerrainDefOf.WaterOceanChestDeep); map.terrainGrid.SetTerrain(currCell, TerrainDefOf.WaterOceanChestDeep); } } } } // Overwrite roof if needed ModExt_Biome_FeatureControl extFtControl = map.Biome.GetModExtension <ModExt_Biome_FeatureControl>(); if (extFtControl != null) { if (extFtControl.overwriteRoof == RoofOverwriteType.FullStable) { GenRoof.SetRoofComplete(map, RoofDefOf.RoofRockUncollapsable); } else if (extFtControl.overwriteRoof == RoofOverwriteType.DeepOnlyStable) { GenRoof.SetStableDeepRoof(map); } } }