Make the sentient plant mutation non-copyable to other plantholders (#29133)
make the sentient plant mutation not propagate by clipping, using the seed extractor or cryoxadone
This commit is contained in:
@@ -38,7 +38,7 @@ public sealed class MutationSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add up everything in the bits column and put the number here.
|
// 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
|
#pragma warning disable IDE0055 // disable formatting warnings because this looks more readable
|
||||||
// Tolerances (55)
|
// Tolerances (55)
|
||||||
@@ -65,10 +65,10 @@ public sealed class MutationSystem : EntitySystem
|
|||||||
// Kill the plant (30)
|
// Kill the plant (30)
|
||||||
MutateBool(ref seed.Viable , false, 30, totalbits, severity);
|
MutateBool(ref seed.Viable , false, 30, totalbits, severity);
|
||||||
|
|
||||||
// Fun (90)
|
// Fun (72)
|
||||||
MutateBool(ref seed.Seedless , true , 10, totalbits, severity);
|
MutateBool(ref seed.Seedless , true , 10, totalbits, severity);
|
||||||
MutateBool(ref seed.Slip , 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.Ligneous , true , 10, totalbits, severity);
|
||||||
MutateBool(ref seed.Bioluminescent, true , 10, totalbits, severity);
|
MutateBool(ref seed.Bioluminescent, true , 10, totalbits, severity);
|
||||||
MutateBool(ref seed.TurnIntoKudzu , 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.Production, a.Production);
|
||||||
CrossFloat(ref result.Potency, a.Potency);
|
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.Seedless, a.Seedless);
|
||||||
CrossBool(ref result.Viable, a.Viable);
|
CrossBool(ref result.Viable, a.Viable);
|
||||||
CrossBool(ref result.Slip, a.Slip);
|
CrossBool(ref result.Slip, a.Slip);
|
||||||
CrossBool(ref result.Sentient, a.Sentient);
|
|
||||||
CrossBool(ref result.Ligneous, a.Ligneous);
|
CrossBool(ref result.Ligneous, a.Ligneous);
|
||||||
CrossBool(ref result.Bioluminescent, a.Bioluminescent);
|
CrossBool(ref result.Bioluminescent, a.Bioluminescent);
|
||||||
CrossBool(ref result.TurnIntoKudzu, a.TurnIntoKudzu);
|
CrossBool(ref result.TurnIntoKudzu, a.TurnIntoKudzu);
|
||||||
|
|||||||
@@ -298,8 +298,17 @@ public sealed class PlantHolderSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
healthOverride = component.Health;
|
healthOverride = component.Health;
|
||||||
}
|
}
|
||||||
component.Seed.Unique = false;
|
var packetSeed = component.Seed;
|
||||||
var seed = _botany.SpawnSeedPacket(component.Seed, Transform(args.User).Coordinates, args.User, healthOverride);
|
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);
|
_randomHelper.RandomOffset(seed, 0.25f);
|
||||||
var displayName = Loc.GetString(component.Seed.DisplayName);
|
var displayName = Loc.GetString(component.Seed.DisplayName);
|
||||||
_popup.PopupCursor(Loc.GetString("plant-holder-component-take-sample-message",
|
_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!
|
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
|
// 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);
|
RemovePlant(uid, component);
|
||||||
component.ForceUpdate = true;
|
component.ForceUpdate = true;
|
||||||
Update(uid, component);
|
Update(uid, component);
|
||||||
|
|||||||
@@ -42,12 +42,19 @@ public sealed class SeedExtractorSystem : EntitySystem
|
|||||||
var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1);
|
var amount = _random.Next(seedExtractor.BaseMinSeeds, seedExtractor.BaseMaxSeeds + 1);
|
||||||
var coords = Transform(uid).Coordinates;
|
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)
|
if (amount > 1)
|
||||||
seed.Unique = false;
|
packetSeed.Unique = false;
|
||||||
|
|
||||||
for (var i = 0; i < amount; i++)
|
for (var i = 0; i < amount; i++)
|
||||||
{
|
{
|
||||||
_botanySystem.SpawnSeedPacket(seed, coords, args.User);
|
_botanySystem.SpawnSeedPacket(packetSeed, coords, args.User);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user