diff --git a/Content.Server/Botany/Systems/MutationSystem.cs b/Content.Server/Botany/Systems/MutationSystem.cs index 474859823a..c927237510 100644 --- a/Content.Server/Botany/Systems/MutationSystem.cs +++ b/Content.Server/Botany/Systems/MutationSystem.cs @@ -38,7 +38,7 @@ public sealed class MutationSystem : EntitySystem } // Add up everything in the bits column and put the number here. - const int totalbits = 275; + const int totalbits = 262; #pragma warning disable IDE0055 // disable formatting warnings because this looks more readable // Tolerances (55) @@ -65,10 +65,10 @@ public sealed class MutationSystem : EntitySystem // Kill the plant (30) MutateBool(ref seed.Viable , false, 30, totalbits, severity); - // Fun (90) + // Fun (72) MutateBool(ref seed.Seedless , true , 10, totalbits, severity); MutateBool(ref seed.Slip , true , 10, totalbits, severity); - MutateBool(ref seed.Sentient , true , 10, totalbits, severity); + MutateBool(ref seed.Sentient , true , 2 , totalbits, severity); MutateBool(ref seed.Ligneous , true , 10, totalbits, severity); MutateBool(ref seed.Bioluminescent, true , 10, totalbits, severity); MutateBool(ref seed.TurnIntoKudzu , true , 10, totalbits, severity); @@ -115,10 +115,10 @@ public sealed class MutationSystem : EntitySystem CrossFloat(ref result.Production, a.Production); CrossFloat(ref result.Potency, a.Potency); + // we do not transfer Sentient to another plant to avoid ghost role spam CrossBool(ref result.Seedless, a.Seedless); CrossBool(ref result.Viable, a.Viable); CrossBool(ref result.Slip, a.Slip); - CrossBool(ref result.Sentient, a.Sentient); CrossBool(ref result.Ligneous, a.Ligneous); CrossBool(ref result.Bioluminescent, a.Bioluminescent); CrossBool(ref result.TurnIntoKudzu, a.TurnIntoKudzu); diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index c8842e1493..53cee92a29 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -298,8 +298,17 @@ public sealed class PlantHolderSystem : EntitySystem { healthOverride = component.Health; } - component.Seed.Unique = false; - var seed = _botany.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User, healthOverride); + var packetSeed = component.Seed; + if (packetSeed.Sentient) + { + packetSeed = packetSeed.Clone(); // clone before modifying the seed + packetSeed.Sentient = false; + } + else + { + packetSeed.Unique = false; + } + var seed = _botany.SpawnSeedPacket(packetSeed, Transform(args.User).Coordinates, args.User, healthOverride); _randomHelper.RandomOffset(seed, 0.25f); var displayName = Loc.GetString(component.Seed.DisplayName); _popup.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message", @@ -626,8 +635,15 @@ public sealed class PlantHolderSystem : EntitySystem } else if (component.Age < 0) // Revert back to seed packet! { + var packetSeed = component.Seed; + if (packetSeed.Sentient) + { + if (!packetSeed.Unique) // clone if necessary before modifying the seed + packetSeed = packetSeed.Clone(); + packetSeed.Sentient = false; // remove Sentient to avoid ghost role spam + } // will put it in the trays hands if it has any, please do not try doing this - _botany.SpawnSeedPacket(component.Seed, Transform(uid).Coordinates, uid); + _botany.SpawnSeedPacket(packetSeed, Transform(uid).Coordinates, uid); RemovePlant(uid, component); component.ForceUpdate = true; Update(uid, component); diff --git a/Content.Server/Botany/Systems/SeedExtractorSystem.cs b/Content.Server/Botany/Systems/SeedExtractorSystem.cs index 9a5e70762e..4a0d56bfe9 100644 --- a/Content.Server/Botany/Systems/SeedExtractorSystem.cs +++ b/Content.Server/Botany/Systems/SeedExtractorSystem.cs @@ -42,12 +42,19 @@ public sealed class SeedExtractorSystem : EntitySystem var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1); var coords = Transform(uid).Coordinates; + var packetSeed = seed; + if (packetSeed.Sentient) + { + if (!packetSeed.Unique) // clone if necessary before modifying the seed + packetSeed = packetSeed.Clone(); + packetSeed.Sentient = false; // remove Sentient to avoid ghost role spam + } if (amount > 1) - seed.Unique = false; + packetSeed.Unique = false; for (var i = 0; i < amount; i++) { - _botanySystem.SpawnSeedPacket(seed, coords, args.User); + _botanySystem.SpawnSeedPacket(packetSeed, coords, args.User); } } }