Mining Rebalance (#30920)

* first pass

* this shit too

* ok fix that shit

* buff

* actually fix that
This commit is contained in:
Nemanja
2024-08-15 21:43:54 -04:00
committed by GitHub
parent 921ed4ec5d
commit 3cdd62b0dd
22 changed files with 233 additions and 167 deletions

View File

@@ -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<WeightedRandomPrototype> _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<string, int>();
// 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<OreDunGenPrototype>(ore));
var layerCount = layers.GetOrNew(ore);
layerCount++;
layers[ore] = layerCount;
}
return new AsteroidOffering
{
DungeonConfig = configProto,
Id = configId,
DungeonConfig = config,
MarkerLayers = layers,
};
}