示例#1
0
        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;
        }
示例#2
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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;
            }
        }
示例#16
0
        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);
                }
            }
        }