Botany produce fix (#622)

https://github.com/space-wizards/space-station-14/pull/27210
This commit is contained in:
RedBurningPhoenix
2024-08-15 17:16:00 +05:00
committed by GitHub
parent aa8dc511da
commit c9b7cfd868
2 changed files with 25 additions and 7 deletions

View File

@@ -40,7 +40,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 = 270;
// Tolerances (55) // Tolerances (55)
MutateFloat(ref seed.NutrientConsumption , 0.05f, 1.2f, 5, totalbits, severity); MutateFloat(ref seed.NutrientConsumption , 0.05f, 1.2f, 5, totalbits, severity);
@@ -66,7 +66,7 @@ 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 (80)
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 , 10, totalbits, severity);
@@ -153,6 +153,12 @@ public sealed class MutationSystem : EntitySystem
if (!Random(probBitflip)) if (!Random(probBitflip))
return; return;
if (min == max)
{
val = min;
return;
}
// Starting number of bits that are high, between 0 and bits. // Starting number of bits that are high, between 0 and bits.
// In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded. // In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded.
int valInt = (int)MathF.Round((val - min) / (max - min) * bits); int valInt = (int)MathF.Round((val - min) / (max - min) * bits);
@@ -186,10 +192,22 @@ public sealed class MutationSystem : EntitySystem
if (!Random(probBitflip)) if (!Random(probBitflip))
return; return;
if (min == max)
{
val = min;
return;
}
// Starting number of bits that are high, between 0 and bits.
// In other words, it's val mapped linearly from range [min, max] to range [0, bits], and then rounded.
int valInt = (int)MathF.Round((val - min) / (max - min) * bits);
// val may be outside the range of min/max due to starting prototype values, so clamp.
valInt = Math.Clamp(valInt, 0, bits);
// Probability that the bit flip increases n. // Probability that the bit flip increases n.
// The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasive it it. // The higher the current value is, the lower the probability of increasing value is, and the higher the probability of decreasing it.
// In other words, it tends to go to the middle. // In other words, it tends to go to the middle.
float probIncrease = 1 - (float)val / bits; float probIncrease = 1 - (float)valInt / bits;
int valMutated; int valMutated;
if (Random(probIncrease)) if (Random(probIncrease))
{ {

View File

@@ -518,10 +518,10 @@ public sealed class PlantHolderSystem : EntitySystem
var environment = _atmosphere.GetContainingMixture(uid, true, true) ?? GasMixture.SpaceGas; var environment = _atmosphere.GetContainingMixture(uid, true, true) ?? GasMixture.SpaceGas;
if (component.Seed.ConsumeGasses.Count > 0)
{
component.MissingGas = 0; component.MissingGas = 0;
if (component.Seed.ConsumeGasses.Count > 0)
{
foreach (var (gas, amount) in component.Seed.ConsumeGasses) foreach (var (gas, amount) in component.Seed.ConsumeGasses)
{ {
if (environment.GetMoles(gas) < amount) if (environment.GetMoles(gas) < amount)