From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 16 Aug 2024 01:43:54 +0000 (-0400) Subject: Mining Rebalance (#30920) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=3cdd62b0dd880135a4d83f6dcf0be4f1f95c3e8d;p=space-station-14.git Mining Rebalance (#30920) * first pass * this shit too * ok fix that shit * buff * actually fix that --- diff --git a/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs b/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs index a248126a85..56cabb0ea5 100644 --- a/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs +++ b/Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs @@ -63,7 +63,7 @@ public sealed class SalvageMagnetBoundUserInterface : BoundUserInterface switch (offer) { case AsteroidOffering asteroid: - option.Title = Loc.GetString($"dungeon-config-proto-{asteroid.DungeonConfig.ID}"); + option.Title = Loc.GetString($"dungeon-config-proto-{asteroid.Id}"); var layerKeys = asteroid.MarkerLayers.Keys.ToList(); layerKeys.Sort(); diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index d3919347f7..1d7ea2a440 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -623,14 +623,14 @@ public sealed partial class BiomeSystem : SharedBiomeSystem var groupSize = rand.Next(layerProto.MinGroupSize, layerProto.MaxGroupSize + 1); // While we have remaining tiles keep iterating - while (groupSize >= 0 && remainingTiles.Count > 0) + while (groupSize > 0 && remainingTiles.Count > 0) { var startNode = rand.PickAndTake(remainingTiles); frontier.Clear(); frontier.Add(startNode); // This essentially may lead to a vein being split in multiple areas but the count matters more than position. - while (frontier.Count > 0 && groupSize >= 0) + while (frontier.Count > 0 && groupSize > 0) { // Need to pick a random index so we don't just get straight lines of ores. var frontierIndex = rand.Next(frontier.Count); @@ -643,9 +643,6 @@ public sealed partial class BiomeSystem : SharedBiomeSystem { for (var y = -1; y <= 1; y++) { - if (x != 0 && y != 0) - continue; - var neighbor = new Vector2i(node.X + x, node.Y + y); if (frontier.Contains(neighbor) || !remainingTiles.Contains(neighbor)) diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.OreDunGen.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.OreDunGen.cs index e89c1d7e47..679eecb4f7 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.OreDunGen.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.OreDunGen.cs @@ -88,14 +88,14 @@ public sealed partial class DungeonJob var groupSize = random.Next(gen.MinGroupSize, gen.MaxGroupSize + 1); // While we have remaining tiles keep iterating - while (groupSize >= 0 && availableTiles.Count > 0) + while (groupSize > 0 && availableTiles.Count > 0) { var startNode = random.PickAndTake(availableTiles); frontier.Clear(); frontier.Add(startNode); // This essentially may lead to a vein being split in multiple areas but the count matters more than position. - while (frontier.Count > 0 && groupSize >= 0) + while (frontier.Count > 0 && groupSize > 0) { // Need to pick a random index so we don't just get straight lines of ores. var frontierIndex = random.Next(frontier.Count); @@ -108,9 +108,6 @@ public sealed partial class DungeonJob { for (var y = -1; y <= 1; y++) { - if (x != 0 && y != 0) - continue; - var neighbor = new Vector2i(node.X + x, node.Y + y); if (frontier.Contains(neighbor) || !availableTiles.Contains(neighbor)) @@ -142,7 +139,7 @@ public sealed partial class DungeonJob if (groupSize > 0) { - _sawmill.Warning($"Found remaining group size for ore veins!"); + _sawmill.Warning($"Found remaining group size for ore veins of {gen.Replacement ?? "null"}!"); } } } diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.cs index 1468a80902..6631eb24b0 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.cs @@ -44,7 +44,7 @@ public sealed partial class DungeonJob : Job> private EntityQuery _physicsQuery; private EntityQuery _xformQuery; - private readonly DungeonConfigPrototype _gen; + private readonly DungeonConfig _gen; private readonly int _seed; private readonly Vector2i _position; @@ -65,7 +65,7 @@ public sealed partial class DungeonJob : Job> EntityLookupSystem lookup, TileSystem tile, SharedTransformSystem transform, - DungeonConfigPrototype gen, + DungeonConfig gen, MapGridComponent grid, EntityUid gridUid, int seed, @@ -102,7 +102,7 @@ public sealed partial class DungeonJob : Job> /// Should we reserve tiles even if the config doesn't specify. private async Task> GetDungeons( Vector2i position, - DungeonConfigPrototype config, + DungeonConfig config, DungeonData data, List layers, HashSet reservedTiles, @@ -139,7 +139,7 @@ public sealed partial class DungeonJob : Job> protected override async Task?> Process() { - _sawmill.Info($"Generating dungeon {_gen.ID} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}"); + _sawmill.Info($"Generating dungeon {_gen} with seed {_seed} on {_entManager.ToPrettyString(_gridUid)}"); _grid.CanSplit = false; var random = new Random(_seed); var position = (_position + random.NextPolarVector2(_gen.MinOffset, _gen.MaxOffset)).Floored(); @@ -177,7 +177,7 @@ public sealed partial class DungeonJob : Job> int seed, Random random) { - _sawmill.Debug($"Doing postgen {layer.GetType()} for {_gen.ID} with seed {_seed}"); + _sawmill.Debug($"Doing postgen {layer.GetType()} for {_gen} with seed {_seed}"); // If there's a way to just call the methods directly for the love of god tell me. // Some of these don't care about reservedtiles because they only operate on dungeon tiles (which should diff --git a/Content.Server/Procedural/DungeonSystem.cs b/Content.Server/Procedural/DungeonSystem.cs index 9a7abb7e33..68c4a98610 100644 --- a/Content.Server/Procedural/DungeonSystem.cs +++ b/Content.Server/Procedural/DungeonSystem.cs @@ -183,7 +183,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem return mapId; } - public void GenerateDungeon(DungeonConfigPrototype gen, + public void GenerateDungeon(DungeonConfig gen, EntityUid gridUid, MapGridComponent grid, Vector2i position, @@ -214,7 +214,7 @@ public sealed partial class DungeonSystem : SharedDungeonSystem } public async Task> GenerateDungeonAsync( - DungeonConfigPrototype gen, + DungeonConfig gen, EntityUid gridUid, MapGridComponent grid, Vector2i position, diff --git a/Content.Server/Salvage/SpawnSalvageMissionJob.cs b/Content.Server/Salvage/SpawnSalvageMissionJob.cs index e9318792b7..525fe01a1f 100644 --- a/Content.Server/Salvage/SpawnSalvageMissionJob.cs +++ b/Content.Server/Salvage/SpawnSalvageMissionJob.cs @@ -175,7 +175,7 @@ public sealed class SpawnSalvageMissionJob : Job var dungeonOffset = new Vector2(0f, dungeonOffsetDistance); dungeonOffset = dungeonRotation.RotateVec(dungeonOffset); var dungeonMod = _prototypeManager.Index(mission.Dungeon); - var dungeonConfig = _prototypeManager.Index(dungeonMod.Proto); + var dungeonConfig = _prototypeManager.Index(dungeonMod.Proto); var dungeons = await WaitAsyncTask(_dungeon.GenerateDungeonAsync(dungeonConfig, mapUid, grid, (Vector2i) dungeonOffset, _missionParams.Seed)); diff --git a/Content.Shared/Destructible/Thresholds/MinMax.cs b/Content.Shared/Destructible/Thresholds/MinMax.cs index e086a0f61c..8487b98b49 100644 --- a/Content.Shared/Destructible/Thresholds/MinMax.cs +++ b/Content.Shared/Destructible/Thresholds/MinMax.cs @@ -17,7 +17,12 @@ public partial struct MinMax Max = max; } - public int Next(IRobustRandom random) + public readonly int Next(IRobustRandom random) + { + return random.Next(Min, Max + 1); + } + + public readonly int Next(System.Random random) { return random.Next(Min, Max + 1); } diff --git a/Content.Shared/Procedural/DungeonConfigPrototype.cs b/Content.Shared/Procedural/DungeonConfig.cs similarity index 88% rename from Content.Shared/Procedural/DungeonConfigPrototype.cs rename to Content.Shared/Procedural/DungeonConfig.cs index d0d8e0ff12..c4093741ec 100644 --- a/Content.Shared/Procedural/DungeonConfigPrototype.cs +++ b/Content.Shared/Procedural/DungeonConfig.cs @@ -1,14 +1,10 @@ -using Content.Shared.Procedural.PostGeneration; using Robust.Shared.Prototypes; namespace Content.Shared.Procedural; -[Prototype] -public sealed partial class DungeonConfigPrototype : IPrototype +[Virtual, DataDefinition] +public partial class DungeonConfig { - [IdDataField] - public string ID { get; private set; } = default!; - /// /// /// @@ -18,7 +14,7 @@ public sealed partial class DungeonConfigPrototype : IPrototype /// /// The secret sauce, procedural generation layers that get run. /// - [DataField(required: true)] + [DataField] public List Layers = new(); /// @@ -51,3 +47,10 @@ public sealed partial class DungeonConfigPrototype : IPrototype [DataField] public int MaxOffset; } + +[Prototype] +public sealed class DungeonConfigPrototype : DungeonConfig, IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; +} diff --git a/Content.Shared/Procedural/DungeonGenerators/PrototypeDunGen.cs b/Content.Shared/Procedural/DungeonGenerators/PrototypeDunGen.cs index 346c60a6cb..2772c97977 100644 --- a/Content.Shared/Procedural/DungeonGenerators/PrototypeDunGen.cs +++ b/Content.Shared/Procedural/DungeonGenerators/PrototypeDunGen.cs @@ -3,7 +3,7 @@ using Robust.Shared.Prototypes; namespace Content.Shared.Procedural.DungeonGenerators; /// -/// Runs another . +/// Runs another . /// Used for storing data on 1 system. /// public sealed partial class PrototypeDunGen : IDunGenLayer diff --git a/Content.Shared/Procedural/DungeonLayers/OreDunGen.cs b/Content.Shared/Procedural/DungeonLayers/OreDunGen.cs index 31bf367d0e..308e44b4cc 100644 --- a/Content.Shared/Procedural/DungeonLayers/OreDunGen.cs +++ b/Content.Shared/Procedural/DungeonLayers/OreDunGen.cs @@ -8,7 +8,8 @@ namespace Content.Shared.Procedural.DungeonLayers; /// /// Generates on top of existing entities for sanity reasons moreso than performance. /// -public sealed partial class OreDunGen : IDunGenLayer +[Virtual] +public partial class OreDunGen : IDunGenLayer { /// /// If the vein generation should occur on top of existing entities what are we replacing. diff --git a/Content.Shared/Procedural/DungeonLayers/OreDunGenPrototype.cs b/Content.Shared/Procedural/DungeonLayers/OreDunGenPrototype.cs new file mode 100644 index 0000000000..84ea85f878 --- /dev/null +++ b/Content.Shared/Procedural/DungeonLayers/OreDunGenPrototype.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Procedural.DungeonLayers; + +[Prototype] +public sealed partial class OreDunGenPrototype : OreDunGen, IPrototype +{ + [IdDataField] + public string ID { set; get; } = default!; +} diff --git a/Content.Shared/Salvage/Expeditions/Modifiers/SalvageDungeonModPrototype.cs b/Content.Shared/Salvage/Expeditions/Modifiers/SalvageDungeonModPrototype.cs index 713bdf08b3..acce4b3ace 100644 --- a/Content.Shared/Salvage/Expeditions/Modifiers/SalvageDungeonModPrototype.cs +++ b/Content.Shared/Salvage/Expeditions/Modifiers/SalvageDungeonModPrototype.cs @@ -23,6 +23,6 @@ public sealed partial class SalvageDungeonModPrototype : IPrototype, IBiomeSpeci /// /// The config to use for spawning the dungeon. /// - [DataField("proto", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] - public string Proto = string.Empty; + [DataField(required: true)] + public ProtoId Proto = string.Empty; } diff --git a/Content.Shared/Salvage/Magnet/AsteroidOffering.cs b/Content.Shared/Salvage/Magnet/AsteroidOffering.cs index 3ab69c6d6c..38da94afee 100644 --- a/Content.Shared/Salvage/Magnet/AsteroidOffering.cs +++ b/Content.Shared/Salvage/Magnet/AsteroidOffering.cs @@ -7,7 +7,9 @@ namespace Content.Shared.Salvage.Magnet; /// public record struct AsteroidOffering : ISalvageMagnetOffering { - public DungeonConfigPrototype DungeonConfig; + public string Id; + + public DungeonConfig DungeonConfig; /// /// Calculated marker layers for the asteroid. diff --git a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs index 62edb36db9..7285e36126 100644 --- a/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs +++ b/Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs @@ -1,8 +1,9 @@ +using Content.Shared.Destructible.Thresholds; using Content.Shared.Procedural; -using Content.Shared.Procedural.PostGeneration; +using Content.Shared.Procedural.DungeonLayers; +using Content.Shared.Random; using Content.Shared.Random.Helpers; using Content.Shared.Salvage.Magnet; -using Content.Shared.Store; using Robust.Shared.Prototypes; using Robust.Shared.Utility; @@ -20,6 +21,10 @@ public abstract partial class SharedSalvageSystem "SwissCheeseAsteroid" }; + private readonly ProtoId _asteroidOreWeights = "AsteroidOre"; + + private readonly MinMax _asteroidOreCount = new(5, 7); + public ISalvageMagnetOffering GetSalvageOffering(int seed) { var rand = new System.Random(seed); @@ -27,33 +32,40 @@ public abstract partial class SharedSalvageSystem // Asteroid seed if (seed % 2 == 0) { - var config = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)]; - var configProto = _proto.Index(config); + var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)]; + var configProto =_proto.Index(configId); var layers = new Dictionary(); - // If we ever add more random layers will need to Next on these. - foreach (var layer in configProto.Layers) + var data = new DungeonData(); + data.Apply(configProto.Data); + + var config = new DungeonConfig() { - switch (layer) - { - case BiomeDunGen: - rand.Next(); - break; - case BiomeMarkerLayerDunGen marker: - for (var i = 0; i < marker.Count; i++) - { - var proto = _proto.Index(marker.MarkerTemplate).Pick(rand); - var layerCount = layers.GetOrNew(proto); - layerCount++; - layers[proto] = layerCount; - } - break; - } + Data = data, + Layers = new(configProto.Layers), + MaxCount = configProto.MaxCount, + MaxOffset = configProto.MaxOffset, + MinCount = configProto.MinCount, + MinOffset = configProto.MinOffset, + ReserveTiles = configProto.ReserveTiles + }; + + var count = _asteroidOreCount.Next(rand); + var weightedProto = _proto.Index(_asteroidOreWeights); + for (var i = 0; i < count; i++) + { + var ore = weightedProto.Pick(rand); + config.Layers.Add(_proto.Index(ore)); + + var layerCount = layers.GetOrNew(ore); + layerCount++; + layers[ore] = layerCount; } return new AsteroidOffering { - DungeonConfig = configProto, + Id = configId, + DungeonConfig = config, MarkerLayers = layers, }; } diff --git a/Resources/Locale/en-US/salvage/salvage-magnet.ftl b/Resources/Locale/en-US/salvage/salvage-magnet.ftl index c60bafcc13..462a8123b5 100644 --- a/Resources/Locale/en-US/salvage/salvage-magnet.ftl +++ b/Resources/Locale/en-US/salvage/salvage-magnet.ftl @@ -18,6 +18,7 @@ salvage-magnet-resources = {$resource -> [OrePlasma] Plasma [OreUranium] Uranium [OreArtifactFragment] Artifact fragments + [OreBananium] Bananium *[other] {$resource} } @@ -72,4 +73,4 @@ salvage-map-proto-AsteroidBase = Asteroid Base salvage-map-proto-RuinCargoBase = Ruined Cargo Storage salvage-map-proto-SecurityChunk = Security Department Chunk salvage-map-proto-EngineeringChunk = Engineering Department Chunk -salvage-map-proto-OutpostArm = Overrun Outpost Arm \ No newline at end of file +salvage-map-proto-OutpostArm = Overrun Outpost Arm diff --git a/Resources/Prototypes/Entities/Objects/Materials/ore.yml b/Resources/Prototypes/Entities/Objects/Materials/ore.yml index 136d20cc81..429b0764e9 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/ore.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/ore.yml @@ -48,7 +48,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawGold: 500 + RawGold: 100 - type: Extractable grindableSolutionName: goldore - type: SolutionContainerManager @@ -79,7 +79,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawDiamond: 500 + RawDiamond: 100 - type: Extractable grindableSolutionName: diamondore - type: SolutionContainerManager @@ -110,7 +110,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawIron: 500 + RawIron: 100 - type: Extractable grindableSolutionName: ironore - type: SolutionContainerManager @@ -141,7 +141,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawPlasma: 500 + RawPlasma: 100 - type: PointLight radius: 1.2 energy: 0.6 @@ -177,7 +177,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawSilver: 500 + RawSilver: 100 - type: Extractable grindableSolutionName: silverore - type: SolutionContainerManager @@ -208,7 +208,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawQuartz: 500 + RawQuartz: 100 - type: Extractable grindableSolutionName: quartzore - type: SolutionContainerManager @@ -239,7 +239,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawUranium: 500 + RawUranium: 100 - type: PointLight radius: 1.2 energy: 0.8 @@ -278,7 +278,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawBananium: 500 + RawBananium: 100 - type: PointLight radius: 1.2 energy: 1 @@ -334,7 +334,7 @@ Quantity: 0.1 - type: PhysicalComposition materialComposition: - Coal: 500 + Coal: 100 - type: entity parent: Coal @@ -357,7 +357,7 @@ - type: Material - type: PhysicalComposition materialComposition: - RawSalt: 500 + RawSalt: 100 - type: Extractable grindableSolutionName: saltore - type: SolutionContainerManager @@ -375,4 +375,4 @@ suffix: Single components: - type: Stack - count: 1 \ No newline at end of file + count: 1 diff --git a/Resources/Prototypes/Procedural/Magnet/asteroid.yml b/Resources/Prototypes/Procedural/Magnet/asteroid.yml index c380dfbc7c..043c890765 100644 --- a/Resources/Prototypes/Procedural/Magnet/asteroid.yml +++ b/Resources/Prototypes/Procedural/Magnet/asteroid.yml @@ -1,24 +1,10 @@ -- type: weightedRandom - id: AsteroidOre - weights: - OreIron: 1.0 - OreQuartz: 1.0 - OreCoal: 1.0 - OreSalt: 1.0 - OreGold: 0.25 - OreDiamond: 0.05 - OreSilver: 0.25 - OrePlasma: 0.15 - OreUranium: 0.15 - OreArtifactFragment: 0.15 - # Large asteroids, typically 1 - type: dungeonConfig id: BlobAsteroid # Floor generation layers: - !type:NoiseDunGen - tileCap: 1500 + tileCap: 1000 capStd: 32 iterations: 3 layers: @@ -35,10 +21,6 @@ - !type:BiomeDunGen biomeTemplate: Asteroid - # Generate ore veins - - !type:BiomeMarkerLayerDunGen - markerTemplate: AsteroidOre - # Multiple smaller asteroids # This is a pain so we generate fewer tiles - type: dungeonConfig @@ -46,7 +28,7 @@ # Floor generation layers: - !type:NoiseDunGen - tileCap: 1000 + tileCap: 750 capStd: 32 layers: - tile: FloorAsteroidSand @@ -62,17 +44,13 @@ - !type:BiomeDunGen biomeTemplate: Asteroid - # Generate ore veins - - !type:BiomeMarkerLayerDunGen - markerTemplate: AsteroidOre - # Long and spindly, less smooth than blob - type: dungeonConfig id: SpindlyAsteroid # Floor generation layers: - !type:NoiseDunGen - tileCap: 1500 + tileCap: 1000 capStd: 32 layers: - tile: FloorAsteroidSand @@ -89,17 +67,13 @@ - !type:BiomeDunGen biomeTemplate: Asteroid - # Generate ore veins - - !type:BiomeMarkerLayerDunGen - markerTemplate: AsteroidOre - # Lots of holes in it - type: dungeonConfig id: SwissCheeseAsteroid # Floor generation layers: - !type:NoiseDunGen - tileCap: 1500 + tileCap: 1000 capStd: 32 layers: - tile: FloorAsteroidSand @@ -114,7 +88,3 @@ # Generate biome - !type:BiomeDunGen biomeTemplate: Asteroid - - # Generate ore veins - - !type:BiomeMarkerLayerDunGen - markerTemplate: AsteroidOre diff --git a/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml new file mode 100644 index 0000000000..f1ee05f6ee --- /dev/null +++ b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml @@ -0,0 +1,95 @@ +- type: weightedRandom + id: AsteroidOre + weights: + OreIron: 1.0 + OreQuartz: 1.0 + OreCoal: 0.33 + OreSalt: 0.25 + OreGold: 0.25 + OreSilver: 0.25 + OrePlasma: 0.15 + OreUranium: 0.15 + OreArtifactFragment: 0.10 + OreBananium: 0.10 + +- type: oreDunGen + id: OreIron + replacement: AsteroidRock + entity: AsteroidRockTin + count: 5 + minGroupSize: 5 + maxGroupSize: 7 + +- type: oreDunGen + id: OreQuartz + replacement: AsteroidRock + entity: AsteroidRockQuartz + count: 5 + minGroupSize: 5 + maxGroupSize: 7 + +- type: oreDunGen + id: OreCoal + replacement: AsteroidRock + entity: AsteroidRockCoal + count: 3 + minGroupSize: 5 + maxGroupSize: 7 + +- type: oreDunGen + id: OreSalt + replacement: AsteroidRock + entity: AsteroidRockSalt + count: 3 + minGroupSize: 5 + maxGroupSize: 7 + +- type: oreDunGen + id: OreGold + replacement: AsteroidRock + entity: AsteroidRockGold + count: 4 + minGroupSize: 4 + maxGroupSize: 6 + +- type: oreDunGen + id: OreSilver + replacement: AsteroidRock + entity: AsteroidRockSilver + count: 4 + minGroupSize: 4 + maxGroupSize: 6 + +- type: oreDunGen + id: OrePlasma + replacement: AsteroidRock + entity: AsteroidRockPlasma + count: 4 + minGroupSize: 3 + maxGroupSize: 6 + +- type: oreDunGen + id: OreUranium + replacement: AsteroidRock + entity: AsteroidRockUranium + count: 4 + minGroupSize: 3 + maxGroupSize: 6 + +- type: oreDunGen + id: OreBananium + replacement: AsteroidRock + entity: AsteroidRockBananium + count: 6 + minGroupSize: 3 + maxGroupSize: 6 + +- type: oreDunGen + id: OreArtifactFragment + replacement: AsteroidRock + entity: AsteroidRockArtifactFragment + count: 5 + minGroupSize: 1 + maxGroupSize: 2 + + diff --git a/Resources/Prototypes/Procedural/biome_ore_templates.yml b/Resources/Prototypes/Procedural/biome_ore_templates.yml index a6e5fac2d8..ae033230b6 100644 --- a/Resources/Prototypes/Procedural/biome_ore_templates.yml +++ b/Resources/Prototypes/Procedural/biome_ore_templates.yml @@ -10,7 +10,7 @@ WallRockSnow: WallRockSnowTin maxCount: 30 minGroupSize: 10 - maxGroupSize: 20 + maxGroupSize: 15 radius: 4 - type: biomeMarkerLayer @@ -23,7 +23,7 @@ WallRockSnow: WallRockSnowQuartz maxCount: 30 minGroupSize: 10 - maxGroupSize: 20 + maxGroupSize: 15 radius: 4 - type: biomeMarkerLayer @@ -36,8 +36,8 @@ WallRockSand: WallRockSandCoal WallRockSnow: WallRockSnowCoal maxCount: 30 - minGroupSize: 10 - maxGroupSize: 20 + minGroupSize: 8 + maxGroupSize: 12 radius: 4 - type: biomeMarkerLayer @@ -50,8 +50,8 @@ WallRockSand: WallRockSandSalt WallRockSnow: WallRockSnowSalt maxCount: 30 - minGroupSize: 10 - maxGroupSize: 20 + minGroupSize: 8 + maxGroupSize: 12 radius: 4 # Medium value @@ -65,7 +65,7 @@ WallRockChromite: WallRockChromiteGold WallRockSand: WallRockSandGold WallRockSnow: WallRockSnowGold - maxCount: 30 + maxCount: 20 minGroupSize: 5 maxGroupSize: 10 radius: 4 @@ -80,7 +80,7 @@ WallRockChromite: WallRockChromiteSilver WallRockSand: WallRockSandSilver WallRockSnow: WallRockSnowSilver - maxCount: 30 + maxCount: 20 minGroupSize: 5 maxGroupSize: 10 radius: 4 @@ -97,8 +97,8 @@ WallRockSand: WallRockSandPlasma WallRockSnow: WallRockSnowPlasma maxCount: 12 - minGroupSize: 5 - maxGroupSize: 10 + minGroupSize: 4 + maxGroupSize: 8 radius: 4 # Uranium @@ -111,23 +111,9 @@ WallRockChromite: WallRockChromiteUranium WallRockSand: WallRockSandUranium WallRockSnow: WallRockSnowUranium - maxCount: 12 - minGroupSize: 5 - maxGroupSize: 10 - radius: 4 - -- type: biomeMarkerLayer - id: OreBananium - entityMask: - AsteroidRock: AsteroidRockBananium - WallRock: WallRockBananium - WallRockBasalt: WallRockBasaltBananium - WallRockChromite: WallRockChromiteBananium - WallRockSand: WallRockSandBananium - WallRockSnow: WallRockSnowBananium - maxCount: 12 - minGroupSize: 5 - maxGroupSize: 10 + maxCount: 15 + minGroupSize: 4 + maxGroupSize: 8 radius: 4 - type: biomeMarkerLayer diff --git a/Resources/Prototypes/Procedural/salvage_loot.yml b/Resources/Prototypes/Procedural/salvage_loot.yml index da99da7c75..68bfcd8957 100644 --- a/Resources/Prototypes/Procedural/salvage_loot.yml +++ b/Resources/Prototypes/Procedural/salvage_loot.yml @@ -171,13 +171,6 @@ - !type:BiomeMarkerLoot proto: OreUranium -- type: salvageLoot - id: OreBananium - guaranteed: true - loots: - - !type:BiomeMarkerLoot - proto: OreBananium - - type: salvageLoot id: OreDiamond guaranteed: true diff --git a/Resources/Prototypes/Procedural/vgroid.yml b/Resources/Prototypes/Procedural/vgroid.yml index 6e9fc6f395..4371e9cad5 100644 --- a/Resources/Prototypes/Procedural/vgroid.yml +++ b/Resources/Prototypes/Procedural/vgroid.yml @@ -26,62 +26,56 @@ replacement: IronRock entity: IronRockIron count: 50 - minGroupSize: 20 - maxGroupSize: 30 + minGroupSize: 10 + maxGroupSize: 15 - !type:OreDunGen replacement: IronRock entity: IronRockCoal count: 50 - minGroupSize: 20 - maxGroupSize: 30 + minGroupSize: 8 + maxGroupSize: 12 - !type:OreDunGen replacement: IronRock entity: IronRockQuartz count: 50 - minGroupSize: 20 - maxGroupSize: 30 + minGroupSize: 10 + maxGroupSize: 15 - !type:OreDunGen replacement: IronRock entity: IronRockSalt count: 50 - minGroupSize: 20 - maxGroupSize: 30 + minGroupSize: 8 + maxGroupSize: 12 - !type:OreDunGen replacement: IronRock entity: IronRockGold - count: 50 - minGroupSize: 10 - maxGroupSize: 20 + count: 40 + minGroupSize: 8 + maxGroupSize: 12 - !type:OreDunGen replacement: IronRock entity: IronRockSilver - count: 50 - minGroupSize: 10 - maxGroupSize: 20 + count: 40 + minGroupSize: 8 + maxGroupSize: 12 - !type:OreDunGen replacement: IronRock entity: IronRockPlasma - count: 50 - minGroupSize: 10 - maxGroupSize: 20 + count: 35 + minGroupSize: 4 + maxGroupSize: 8 - !type:OreDunGen replacement: IronRock entity: IronRockUranium - count: 50 - minGroupSize: 10 - maxGroupSize: 20 - - !type:OreDunGen - replacement: IronRock - entity: IronRockBananium - count: 50 - minGroupSize: 10 - maxGroupSize: 20 + count: 35 + minGroupSize: 4 + maxGroupSize: 8 - !type:OreDunGen replacement: IronRock entity: IronRockArtifactFragment - count: 50 - minGroupSize: 2 - maxGroupSize: 4 + count: 25 + minGroupSize: 1 + maxGroupSize: 3 - !type:OreDunGen replacement: IronRock entity: IronRockDiamond diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml index 146f04b49c..30ac6a5373 100644 --- a/Resources/Prototypes/ore.yml +++ b/Resources/Prototypes/ore.yml @@ -56,7 +56,7 @@ id: OreBananium oreEntity: BananiumOre1 minOreYield: 1 - maxOreYield: 3 + maxOreYield: 2 - type: ore id: OreDiamond @@ -83,8 +83,8 @@ - type: ore id: OreArtifactFragment oreEntity: ArtifactFragment1 - minOreYield: 2 - maxOreYield: 4 + minOreYield: 1 + maxOreYield: 3 - type: weightedRandomOre id: RandomOreDistributionStandard