]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add space debris to salvage magnet (#31113)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Sat, 24 Aug 2024 02:09:36 +0000 (22:09 -0400)
committerGitHub <noreply@github.com>
Sat, 24 Aug 2024 02:09:36 +0000 (12:09 +1000)
* add space debris to salvage magnet

* multiplication

* necessary mercy for NPCs

* back and forth on mercy

Content.Client/Salvage/UI/SalvageMagnetBoundUserInterface.cs
Content.Server/Salvage/Magnet/SalvageMagnetDataComponent.cs
Content.Server/Salvage/SalvageSystem.Magnet.cs
Content.Shared/CCVar/CCVars.cs
Content.Shared/Salvage/Magnet/DebrisOffering.cs [new file with mode: 0644]
Content.Shared/Salvage/SharedSalvageSystem.Magnet.cs
Resources/Locale/en-US/salvage/salvage-magnet.ftl
Resources/Prototypes/Procedural/Magnet/space_debris.yml [new file with mode: 0644]
Resources/Prototypes/Procedural/Magnet/space_debris_templates.yml [new file with mode: 0644]

index 7e99426f87be8e03488e88185f2698ddcbc3080b..d691f9acef3aac3dd6bc8bc8597c4b308c4091ed 100644 (file)
@@ -53,9 +53,9 @@ public sealed class SalvageMagnetBoundUserInterface : BoundUserInterface
             option.Claimed = current.ActiveSeed == seed;
             var claimIndex = i;
 
-            option.ClaimPressed += args =>
+            option.ClaimPressed += _ =>
             {
-                SendMessage(new MagnetClaimOfferEvent()
+                SendMessage(new MagnetClaimOfferEvent
                 {
                     Index = claimIndex
                 });
@@ -72,20 +72,20 @@ public sealed class SalvageMagnetBoundUserInterface : BoundUserInterface
                     {
                         var count = asteroid.MarkerLayers[resource];
 
-                        var container = new BoxContainer()
+                        var container = new BoxContainer
                         {
                             Orientation = BoxContainer.LayoutOrientation.Horizontal,
                             HorizontalExpand = true,
                         };
 
-                        var resourceLabel = new Label()
+                        var resourceLabel = new Label
                         {
                             Text = Loc.GetString("salvage-magnet-resources",
                                 ("resource", resource)),
                             HorizontalAlignment = Control.HAlignment.Left,
                         };
 
-                        var countLabel = new Label()
+                        var countLabel = new Label
                         {
                             Text = Loc.GetString("salvage-magnet-resources-count", ("count", count)),
                             HorizontalAlignment = Control.HAlignment.Right,
@@ -98,6 +98,9 @@ public sealed class SalvageMagnetBoundUserInterface : BoundUserInterface
                         option.AddContent(container);
                     }
 
+                    break;
+                case DebrisOffering debris:
+                    option.Title = Loc.GetString($"salvage-magnet-debris-{debris.Id}");
                     break;
                 case SalvageOffering salvage:
                     option.Title = Loc.GetString($"salvage-map-wreck");
index 4c4a222280108890b1d94fcfdc95dbf8a53f413b..07a8fe1f38c2bf238a39a8bf0403699ba7b18c6a 100644 (file)
@@ -44,7 +44,7 @@ public sealed partial class SalvageMagnetDataComponent : Component
     public List<int> Offered = new();
 
     [DataField]
-    public int OfferCount = 6;
+    public int OfferCount = 5;
 
     [DataField]
     public int ActiveSeed;
index 57a57d3c6337ba0f4670c6aa05eb3093eefe1d3c..81db78fb20113a3ba6fc4a53c8016ab411354624 100644 (file)
@@ -4,6 +4,7 @@ using System.Threading.Tasks;
 using Content.Server.Salvage.Magnet;
 using Content.Shared.Humanoid;
 using Content.Shared.Mobs.Components;
+using Content.Shared.Procedural;
 using Content.Shared.Radio;
 using Content.Shared.Salvage.Magnet;
 using Robust.Server.Maps;
@@ -269,6 +270,11 @@ public sealed partial class SalvageSystem
                 var grid = _mapManager.CreateGridEntity(salvMap);
                 await _dungeon.GenerateDungeonAsync(asteroid.DungeonConfig, grid.Owner, grid.Comp, Vector2i.Zero, seed);
                 break;
+            case DebrisOffering debris:
+                var debrisProto = _prototypeManager.Index<DungeonConfigPrototype>(debris.Id);
+                var debrisGrid = _mapManager.CreateGridEntity(salvMap);
+                await _dungeon.GenerateDungeonAsync(debrisProto, debrisGrid.Owner, debrisGrid.Comp, Vector2i.Zero, seed);
+                break;
             case SalvageOffering wreck:
                 var salvageProto = wreck.SalvageMap;
 
@@ -309,7 +315,7 @@ public sealed partial class SalvageSystem
             bounds = bounds?.Union(childAABB) ?? childAABB;
 
             // Update mass scanner names as relevant.
-            if (offering is AsteroidOffering)
+            if (offering is AsteroidOffering or DebrisOffering)
             {
                 _metaData.SetEntityName(mapChild, Loc.GetString("salvage-asteroid-name"));
                 _gravity.EnableGravity(mapChild);
index 7e61ec8a58260a50ab91c7a40bbb9d4cfab0ae12..c3307c53fb6eaf510559d5c3684b501ae4c4753f 100644 (file)
@@ -2134,7 +2134,7 @@ namespace Content.Shared.CCVar
         ///     Whether or not world generation is enabled.
         /// </summary>
         public static readonly CVarDef<bool> WorldgenEnabled =
-            CVarDef.Create("worldgen.enabled", true, CVar.SERVERONLY);
+            CVarDef.Create("worldgen.enabled", false, CVar.SERVERONLY);
 
         /// <summary>
         ///     The worldgen config to use.
diff --git a/Content.Shared/Salvage/Magnet/DebrisOffering.cs b/Content.Shared/Salvage/Magnet/DebrisOffering.cs
new file mode 100644 (file)
index 0000000..953b9dc
--- /dev/null
@@ -0,0 +1,9 @@
+namespace Content.Shared.Salvage.Magnet;
+
+/// <summary>
+/// Space debis offered for the magnet.
+/// </summary>
+public record struct DebrisOffering : ISalvageMagnetOffering
+{
+    public string Id;
+}
index 7285e36126e22e8fed52a8ae278b410226a22a36..a530844598d67ddce9d92525e19d517666189c98 100644 (file)
@@ -5,6 +5,7 @@ using Content.Shared.Random;
 using Content.Shared.Random.Helpers;
 using Content.Shared.Salvage.Magnet;
 using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
 using Robust.Shared.Utility;
 
 namespace Content.Shared.Salvage;
@@ -13,6 +14,13 @@ public abstract partial class SharedSalvageSystem
 {
     private readonly List<SalvageMapPrototype> _salvageMaps = new();
 
+    private Dictionary<ISalvageMagnetOffering, float> _offeringWeights = new()
+    {
+        { new AsteroidOffering(), 3.0f },
+        { new DebrisOffering(), 4.0f },
+        { new SalvageOffering(), 1.0f }
+    };
+
     private readonly List<ProtoId<DungeonConfigPrototype>> _asteroidConfigs = new()
     {
         "BlobAsteroid",
@@ -25,61 +33,75 @@ public abstract partial class SharedSalvageSystem
 
     private readonly MinMax _asteroidOreCount = new(5, 7);
 
+    private readonly List<ProtoId<DungeonConfigPrototype>> _debrisConfigs = new()
+    {
+        "ChunkDebris"
+    };
+
     public ISalvageMagnetOffering GetSalvageOffering(int seed)
     {
         var rand = new System.Random(seed);
 
-        // Asteroid seed
-        if (seed % 2 == 0)
+        var type = SharedRandomExtensions.Pick(_offeringWeights, rand);
+        switch (type)
         {
-            var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)];
-            var configProto =_proto.Index(configId);
-            var layers = new Dictionary<string, int>();
-
-            var data = new DungeonData();
-            data.Apply(configProto.Data);
+            case AsteroidOffering:
+                var configId = _asteroidConfigs[rand.Next(_asteroidConfigs.Count)];
+                var configProto =_proto.Index(configId);
+                var layers = new Dictionary<string, int>();
 
-            var config = new DungeonConfig()
-            {
-                Data = data,
-                Layers = new(configProto.Layers),
-                MaxCount = configProto.MaxCount,
-                MaxOffset = configProto.MaxOffset,
-                MinCount = configProto.MinCount,
-                MinOffset = configProto.MinOffset,
-                ReserveTiles = configProto.ReserveTiles
-            };
+                var data = new DungeonData();
+                data.Apply(configProto.Data);
 
-            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 config = new DungeonConfig
+                {
+                    Data = data,
+                    Layers = new(configProto.Layers),
+                    MaxCount = configProto.MaxCount,
+                    MaxOffset = configProto.MaxOffset,
+                    MinCount = configProto.MinCount,
+                    MinOffset = configProto.MinOffset,
+                    ReserveTiles = configProto.ReserveTiles
+                };
 
-                var layerCount = layers.GetOrNew(ore);
-                layerCount++;
-                layers[ore] = layerCount;
-            }
+                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));
 
-            return new AsteroidOffering
-            {
-                Id = configId,
-                DungeonConfig = config,
-                MarkerLayers = layers,
-            };
-        }
+                    var layerCount = layers.GetOrNew(ore);
+                    layerCount++;
+                    layers[ore] = layerCount;
+                }
 
-        // Salvage map seed
-        _salvageMaps.Clear();
-        _salvageMaps.AddRange(_proto.EnumeratePrototypes<SalvageMapPrototype>());
-        _salvageMaps.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
-        var mapIndex = rand.Next(_salvageMaps.Count);
-        var map = _salvageMaps[mapIndex];
+                return new AsteroidOffering
+                {
+                    Id = configId,
+                    DungeonConfig = config,
+                    MarkerLayers = layers,
+                };
+            case DebrisOffering:
+                var id = rand.Pick(_debrisConfigs);
+                return new DebrisOffering
+                {
+                    Id = id
+                };
+            case SalvageOffering:
+                // Salvage map seed
+                _salvageMaps.Clear();
+                _salvageMaps.AddRange(_proto.EnumeratePrototypes<SalvageMapPrototype>());
+                _salvageMaps.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
+                var mapIndex = rand.Next(_salvageMaps.Count);
+                var map = _salvageMaps[mapIndex];
 
-        return new SalvageOffering()
-        {
-            SalvageMap = map,
-        };
+                return new SalvageOffering
+                {
+                    SalvageMap = map,
+                };
+            default:
+                throw new NotImplementedException($"Salvage type {type} not implemented!");
+        }
     }
 }
index 5ed2649569caad016c8fd3a2f8f8d1943f63d666..e160a8c0e04b27fac29196a3d10b891153b37c78 100644 (file)
@@ -31,6 +31,9 @@ salvage-magnet-resources-count = {$count ->
     *[other] (Extraordinary)
 }
 
+# Debris
+salvage-magnet-debris-ChunkDebris = Space Debris
+
 # Asteroids
 dungeon-config-proto-BlobAsteroid = Asteroid clump
 dungeon-config-proto-ClusterAsteroid = Asteroid cluster
diff --git a/Resources/Prototypes/Procedural/Magnet/space_debris.yml b/Resources/Prototypes/Procedural/Magnet/space_debris.yml
new file mode 100644 (file)
index 0000000..26b4ae2
--- /dev/null
@@ -0,0 +1,40 @@
+- type: dungeonConfig
+  id: ChunkDebris
+  # Floor generation
+  layers:
+    - !type:NoiseDunGen
+      tileCap: 500
+      capStd: 32
+      iterations: 5
+      layers:
+      - tile: FloorSteel
+        threshold: 0.50
+        noise:
+          frequency: 0.05
+          noiseType: OpenSimplex2
+          fractalType: FBm
+          octaves: 3
+          lacunarity: 3
+          gain: 0.5
+      - tile: Plating
+        threshold: 0.35
+        noise:
+          frequency: 0.05
+          noiseType: OpenSimplex2
+          fractalType: FBm
+          octaves: 3
+          lacunarity: 3
+          gain: 0.3
+      - tile: Lattice
+        threshold: 0.25
+        noise:
+          frequency: 0.05
+          noiseType: OpenSimplex2
+          fractalType: FBm
+          octaves: 3
+          lacunarity: 3
+          gain: 0.5
+
+    # Generate biome
+    - !type:BiomeDunGen
+      biomeTemplate: SpaceDebris
diff --git a/Resources/Prototypes/Procedural/Magnet/space_debris_templates.yml b/Resources/Prototypes/Procedural/Magnet/space_debris_templates.yml
new file mode 100644 (file)
index 0000000..6500f44
--- /dev/null
@@ -0,0 +1,115 @@
+# Asteroid
+- type: biomeTemplate
+  id: SpaceDebris
+  layers:
+  - !type:BiomeEntityLayer
+    threshold: 0.20
+    noise:
+      seed: 0
+      noiseType: OpenSimplex2
+      fractalType: Ridged
+      octaves: 4
+      frequency: 0.065
+      gain: 5
+      lacunarity: 1.5
+    allowedTiles:
+    - Plating
+    - FloorSteel
+    entities:
+    - WallSolid
+    - AirlockMaintLocked
+    - Girder
+    - Girder
+    - WallReinforced
+    - WallSolid
+    - WallSolid
+  - !type:BiomeEntityLayer
+    threshold: 0.5
+    noise:
+      seed: 0
+      noiseType: OpenSimplex2
+      fractalType: Ridged
+      octaves: 4
+      frequency: 0.065
+      gain: 2
+      lacunarity: 1.5
+    allowedTiles:
+    - Plating
+    - Lattice
+    entities:
+    - Grille
+    - Grille
+    - Grille
+    - GrilleBroken
+  - !type:BiomeDecalLayer
+    allowedTiles:
+    - FloorSteel
+    threshold: -0.5
+    divisions: 1
+    noise:
+      seed: 1
+      frequency: 1
+    decals:
+    - DirtHeavy
+    - DirtHeavy
+    - DirtHeavy
+    - DirtMedium
+    - DirtMedium
+    - DirtLight
+  - !type:BiomeEntityLayer
+    threshold: 0.45
+    noise:
+      seed: 1
+      noiseType: OpenSimplex2
+      fractalType: Ridged
+      octaves: 4
+      frequency: 0.065
+      gain: 2
+      lacunarity: 1.5
+    allowedTiles:
+    - Plating
+    - FloorSteel
+    entities:
+    - WeldingFuelTankFull
+    - Table
+    - SalvageCanisterSpawner
+    - Rack
+    - ClosetMaintenanceFilledRandom
+    - ClosetMaintenanceFilledRandom
+  - !type:BiomeEntityLayer
+    allowedTiles:
+    - FloorSteel
+    - Plating
+    threshold: 0.2
+    noise:
+      seed: 1
+      frequency: 1
+    entities:
+    - SalvageSpawnerScrapCommon
+    - SalvageSpawnerScrapCommon75
+    - SalvageSpawnerScrapCommon75
+    - SalvageSpawnerScrapValuable
+    - SalvageSpawnerScrapValuable75
+  - !type:BiomeEntityLayer
+    allowedTiles:
+    - FloorSteel
+    threshold: 0.7
+    noise:
+      seed: 1
+      frequency: 1
+    entities:
+    - SalvageSpawnerTreasureValuable
+    - SalvageSpawnerEquipmentValuable
+    - SalvageSpawnerTreasure
+    - SalvageSpawnerTreasure
+    - SalvageSpawnerEquipment
+    - SalvageSpawnerEquipment
+  - !type:BiomeEntityLayer
+    allowedTiles:
+    - FloorSteel
+    threshold: 0.85
+    noise:
+      seed: 1
+      frequency: 1
+    entities:
+    - SalvageSpawnerMobMagnet75