more expedition changes (#17403)
Co-authored-by: deltanedas <@deltanedas:kde.org> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
@@ -16,6 +16,7 @@ using Robust.Client.UserInterface.XAML;
|
|||||||
using Robust.Shared.Configuration;
|
using Robust.Shared.Configuration;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Client.Salvage.UI;
|
namespace Content.Client.Salvage.UI;
|
||||||
|
|
||||||
@@ -194,10 +195,19 @@ public sealed partial class SalvageExpeditionWindow : FancyWindow,
|
|||||||
Text = Loc.GetString("salvage-expedition-window-rewards")
|
Text = Loc.GetString("salvage-expedition-window-rewards")
|
||||||
});
|
});
|
||||||
|
|
||||||
// there will always be 3 rewards so no need for 0 check
|
var rewards = new Dictionary<string, int>();
|
||||||
|
foreach (var reward in mission.Rewards)
|
||||||
|
{
|
||||||
|
var name = _prototype.Index<EntityPrototype>(reward).Name;
|
||||||
|
var count = rewards.GetOrNew(name);
|
||||||
|
count++;
|
||||||
|
rewards[name] = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
// there will always be 3 or more rewards so no need for 0 check
|
||||||
lBox.AddChild(new Label()
|
lBox.AddChild(new Label()
|
||||||
{
|
{
|
||||||
Text = string.Join("\n", mission.Rewards.Select(id => "- " + _prototype.Index<EntityPrototype>(id).Name)),
|
Text = string.Join("\n", rewards.Select(o => "- " + o.Key + (o.Value > 1 ? $" x {o.Value}" : ""))).TrimEnd(),
|
||||||
FontColorOverride = StyleNano.ConcerningOrangeFore,
|
FontColorOverride = StyleNano.ConcerningOrangeFore,
|
||||||
HorizontalAlignment = HAlignment.Left,
|
HorizontalAlignment = HAlignment.Left,
|
||||||
Margin = new Thickness(0f, 0f, 0f, 5f)
|
Margin = new Thickness(0f, 0f, 0f, 5f)
|
||||||
|
|||||||
@@ -115,8 +115,7 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
|
|||||||
_entManager.System<AtmosphereSystem>().SetMapSpace(mapUid, air.Space, atmos);
|
_entManager.System<AtmosphereSystem>().SetMapSpace(mapUid, air.Space, atmos);
|
||||||
_entManager.System<AtmosphereSystem>().SetMapGasMixture(mapUid, new GasMixture(2500)
|
_entManager.System<AtmosphereSystem>().SetMapGasMixture(mapUid, new GasMixture(2500)
|
||||||
{
|
{
|
||||||
// TODO: temperature mods
|
Temperature = mission.Temperature,
|
||||||
Temperature = 293.15f,
|
|
||||||
Moles = moles,
|
Moles = moles,
|
||||||
}, atmos);
|
}, atmos);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
||||||
|
|
||||||
|
public interface IBiomeSpecificMod : ISalvageMod
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Whitelist for biomes. If null then any biome is allowed.
|
||||||
|
/// </summary>
|
||||||
|
List<string>? Biomes { get; }
|
||||||
|
}
|
||||||
@@ -7,5 +7,8 @@ public interface ISalvageMod
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
string Description { get; }
|
string Description { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cost for difficulty modifiers.
|
||||||
|
/// </summary>
|
||||||
float Cost { get; }
|
float Cost { get; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
|||||||
/// Which one is selected depends on the mission difficulty, different weightedRandoms are picked from.
|
/// Which one is selected depends on the mission difficulty, different weightedRandoms are picked from.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Prototype("salvageAirMod")]
|
[Prototype("salvageAirMod")]
|
||||||
public sealed class SalvageAirMod : IPrototype, ISalvageMod
|
public sealed class SalvageAirMod : IPrototype, IBiomeSpecificMod
|
||||||
{
|
{
|
||||||
[IdDataField]
|
[IdDataField]
|
||||||
public string ID { get; } = default!;
|
public string ID { get; } = default!;
|
||||||
@@ -23,6 +23,10 @@ public sealed class SalvageAirMod : IPrototype, ISalvageMod
|
|||||||
[DataField("cost")]
|
[DataField("cost")]
|
||||||
public float Cost { get; } = 0f;
|
public float Cost { get; } = 0f;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
||||||
|
public List<string>? Biomes { get; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set to true if this planet will have no atmosphere.
|
/// Set to true if this planet will have no atmosphere.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -34,10 +38,4 @@ public sealed class SalvageAirMod : IPrototype, ISalvageMod
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("gases")]
|
[DataField("gases")]
|
||||||
public float[] Gases = new float[Atmospherics.AdjustedNumberOfGases];
|
public float[] Gases = new float[Atmospherics.AdjustedNumberOfGases];
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Biomes this air mixture is allowed to occur in.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
|
||||||
public List<string>? Biomes;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,24 +6,23 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy
|
|||||||
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
||||||
|
|
||||||
[Prototype("salvageDungeonMod")]
|
[Prototype("salvageDungeonMod")]
|
||||||
public sealed class SalvageDungeonMod : IPrototype, ISalvageMod
|
public sealed class SalvageDungeonMod : IPrototype, IBiomeSpecificMod
|
||||||
{
|
{
|
||||||
[IdDataField] public string ID { get; } = default!;
|
[IdDataField] public string ID { get; } = default!;
|
||||||
|
|
||||||
[DataField("desc")] public string Description { get; } = string.Empty;
|
[DataField("desc")] public string Description { get; } = string.Empty;
|
||||||
|
|
||||||
[DataField("proto", customTypeSerializer:typeof(PrototypeIdSerializer<DungeonConfigPrototype>))]
|
/// <inheridoc/>
|
||||||
public string Proto = string.Empty;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Cost for difficulty modifiers.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("cost")]
|
[DataField("cost")]
|
||||||
public float Cost { get; } = 0f;
|
public float Cost { get; } = 0f;
|
||||||
|
|
||||||
|
/// <inheridoc/>
|
||||||
|
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
||||||
|
public List<string>? Biomes { get; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Biomes this dungeon can occur in.
|
/// The config to use for spawning the dungeon.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("biomeMods", customTypeSerializer:typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
[DataField("proto", customTypeSerializer: typeof(PrototypeIdSerializer<DungeonConfigPrototype>))]
|
||||||
public List<string>? BiomeMods;
|
public string Proto = string.Empty;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,23 +4,19 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy
|
|||||||
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
||||||
|
|
||||||
[Prototype("salvageLightMod")]
|
[Prototype("salvageLightMod")]
|
||||||
public sealed class SalvageLightMod : IPrototype, ISalvageMod
|
public sealed class SalvageLightMod : IPrototype, IBiomeSpecificMod
|
||||||
{
|
{
|
||||||
[IdDataField] public string ID { get; } = default!;
|
[IdDataField] public string ID { get; } = default!;
|
||||||
|
|
||||||
[DataField("desc")] public string Description { get; } = string.Empty;
|
[DataField("desc")] public string Description { get; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <inheritdoc/>
|
||||||
/// Cost for difficulty modifiers.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("cost")]
|
[DataField("cost")]
|
||||||
public float Cost { get; } = 0f;
|
public float Cost { get; } = 0f;
|
||||||
|
|
||||||
[DataField("color", required: true)] public Color? Color;
|
/// <inheritdoc/>
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Biomes that this color applies to.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
||||||
public List<string>? Biomes;
|
public List<string>? Biomes { get; } = null;
|
||||||
|
|
||||||
|
[DataField("color", required: true)] public Color? Color;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||||
|
|
||||||
|
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
||||||
|
|
||||||
|
[Prototype("salvageTemperatureMod")]
|
||||||
|
public sealed class SalvageTemperatureMod : IPrototype, IBiomeSpecificMod
|
||||||
|
{
|
||||||
|
[IdDataField] public string ID { get; } = default!;
|
||||||
|
|
||||||
|
[DataField("desc")] public string Description { get; } = string.Empty;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
[DataField("cost")]
|
||||||
|
public float Cost { get; } = 0f;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
||||||
|
public List<string>? Biomes { get; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Temperature in the planets air mix.
|
||||||
|
/// </summary>
|
||||||
|
[DataField("temperature")]
|
||||||
|
public float Temperature = 293.15f;
|
||||||
|
}
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
using Content.Shared.Parallax.Biomes;
|
|
||||||
using Content.Shared.Weather;
|
using Content.Shared.Weather;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
@@ -7,24 +6,23 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototy
|
|||||||
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
namespace Content.Shared.Salvage.Expeditions.Modifiers;
|
||||||
|
|
||||||
[Prototype("salvageWeatherMod")]
|
[Prototype("salvageWeatherMod")]
|
||||||
public sealed class SalvageWeatherMod : IPrototype, ISalvageMod
|
public sealed class SalvageWeatherMod : IPrototype, IBiomeSpecificMod
|
||||||
{
|
{
|
||||||
[IdDataField] public string ID { get; } = default!;
|
[IdDataField] public string ID { get; } = default!;
|
||||||
|
|
||||||
[DataField("desc")] public string Description { get; } = string.Empty;
|
[DataField("desc")] public string Description { get; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <inheritdoc/>
|
||||||
/// Cost for difficulty modifiers.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("cost")]
|
[DataField("cost")]
|
||||||
public float Cost { get; } = 0f;
|
public float Cost { get; } = 0f;
|
||||||
|
|
||||||
[DataField("weather", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<WeatherPrototype>))]
|
/// <inheritdoc/>
|
||||||
public string WeatherPrototype = string.Empty;
|
[DataField("biomes", customTypeSerializer: typeof(PrototypeIdListSerializer<SalvageBiomeMod>))]
|
||||||
|
public List<string>? Biomes { get; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whitelist for biomes. If empty assumed any allowed.
|
/// Weather prototype to use on the planet.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("biomes", customTypeSerializer:typeof(PrototypeIdListSerializer<BiomeTemplatePrototype>))]
|
[DataField("weather", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<WeatherPrototype>))]
|
||||||
public List<string> Biomes = new();
|
public string WeatherPrototype = string.Empty;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ public sealed record SalvageMission(
|
|||||||
SalvageMissionType Mission,
|
SalvageMissionType Mission,
|
||||||
string Biome,
|
string Biome,
|
||||||
string Air,
|
string Air,
|
||||||
|
float Temperature,
|
||||||
Color? Color,
|
Color? Color,
|
||||||
TimeSpan Duration,
|
TimeSpan Duration,
|
||||||
List<string> Rewards,
|
List<string> Rewards,
|
||||||
@@ -140,6 +141,11 @@ public sealed record SalvageMission(
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly string Air = Air;
|
public readonly string Air = Air;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Temperature of the planet's atmosphere.
|
||||||
|
/// </summary>
|
||||||
|
public readonly float Temperature = Temperature;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Lighting color to be used (AKA outdoor lighting).
|
/// Lighting color to be used (AKA outdoor lighting).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ public abstract class SharedSalvageSystem : EntitySystem
|
|||||||
case DifficultyRating.Moderate:
|
case DifficultyRating.Moderate:
|
||||||
return 4;
|
return 4;
|
||||||
case DifficultyRating.Hazardous:
|
case DifficultyRating.Hazardous:
|
||||||
return 6;
|
|
||||||
case DifficultyRating.Extreme:
|
|
||||||
return 8;
|
return 8;
|
||||||
|
case DifficultyRating.Extreme:
|
||||||
|
return 16;
|
||||||
default:
|
default:
|
||||||
throw new ArgumentOutOfRangeException(nameof(rating), rating, null);
|
throw new ArgumentOutOfRangeException(nameof(rating), rating, null);
|
||||||
}
|
}
|
||||||
@@ -97,16 +97,23 @@ public abstract class SharedSalvageSystem : EntitySystem
|
|||||||
var rand = new System.Random(seed);
|
var rand = new System.Random(seed);
|
||||||
var faction = GetMod<SalvageFactionPrototype>(rand, ref rating);
|
var faction = GetMod<SalvageFactionPrototype>(rand, ref rating);
|
||||||
var biome = GetMod<SalvageBiomeMod>(rand, ref rating);
|
var biome = GetMod<SalvageBiomeMod>(rand, ref rating);
|
||||||
var dungeon = GetDungeon(biome.ID, rand, ref rating);
|
var dungeon = GetBiomeMod<SalvageDungeonMod>(biome.ID, rand, ref rating);
|
||||||
var mods = new List<string>();
|
var mods = new List<string>();
|
||||||
|
|
||||||
var air = GetAir(biome.ID, rand, ref rating);
|
var air = GetBiomeMod<SalvageAirMod>(biome.ID, rand, ref rating);
|
||||||
if (air.Description != string.Empty)
|
if (air.Description != string.Empty)
|
||||||
{
|
{
|
||||||
mods.Add(air.Description);
|
mods.Add(air.Description);
|
||||||
}
|
}
|
||||||
|
|
||||||
var light = GetLight(biome.ID, rand, ref rating);
|
// only show the description if there is an atmosphere since wont matter otherwise
|
||||||
|
var temp = GetBiomeMod<SalvageTemperatureMod>(biome.ID, rand, ref rating);
|
||||||
|
if (temp.Description != string.Empty && !air.Space)
|
||||||
|
{
|
||||||
|
mods.Add(temp.Description);
|
||||||
|
}
|
||||||
|
|
||||||
|
var light = GetBiomeMod<SalvageLightMod>(biome.ID, rand, ref rating);
|
||||||
if (light.Description != string.Empty)
|
if (light.Description != string.Empty)
|
||||||
{
|
{
|
||||||
mods.Add(light.Description);
|
mods.Add(light.Description);
|
||||||
@@ -124,60 +131,18 @@ public abstract class SharedSalvageSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
var rewards = GetRewards(difficulty, rand);
|
var rewards = GetRewards(difficulty, rand);
|
||||||
return new SalvageMission(seed, difficulty, dungeon.ID, faction.ID, config, biome.ID, air.ID, light.Color, duration, rewards, mods);
|
return new SalvageMission(seed, difficulty, dungeon.ID, faction.ID, config, biome.ID, air.ID, temp.Temperature, light.Color, duration, rewards, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: probably worth putting the biome whitelist thing in a common thing then having a getmod overload for it
|
public T GetBiomeMod<T>(string biome, System.Random rand, ref float rating) where T : class, IPrototype, IBiomeSpecificMod
|
||||||
public SalvageDungeonMod GetDungeon(string biome, System.Random rand, ref float rating)
|
|
||||||
{
|
{
|
||||||
var mods = _proto.EnumeratePrototypes<SalvageDungeonMod>().ToList();
|
var mods = _proto.EnumeratePrototypes<T>().ToList();
|
||||||
mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
|
mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
|
||||||
rand.Shuffle(mods);
|
rand.Shuffle(mods);
|
||||||
|
|
||||||
foreach (var mod in mods)
|
foreach (var mod in mods)
|
||||||
{
|
{
|
||||||
if (mod.BiomeMods?.Contains(biome) == false ||
|
if (mod.Cost > rating || (mod.Biomes != null && !mod.Biomes.Contains(biome)))
|
||||||
mod.Cost > rating)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rating -= (int) mod.Cost;
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new InvalidOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public SalvageAirMod GetAir(string biome, System.Random rand, ref float rating)
|
|
||||||
{
|
|
||||||
var mods = _proto.EnumeratePrototypes<SalvageAirMod>().ToList();
|
|
||||||
mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
|
|
||||||
rand.Shuffle(mods);
|
|
||||||
|
|
||||||
foreach (var mod in mods)
|
|
||||||
{
|
|
||||||
if (mod.Biomes?.Contains(biome) == false || mod.Cost > rating)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
rating -= mod.Cost;
|
|
||||||
|
|
||||||
return mod;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new InvalidOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
public SalvageLightMod GetLight(string biome, System.Random rand, ref float rating)
|
|
||||||
{
|
|
||||||
var mods = _proto.EnumeratePrototypes<SalvageLightMod>().ToList();
|
|
||||||
mods.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
|
|
||||||
rand.Shuffle(mods);
|
|
||||||
|
|
||||||
foreach (var mod in mods)
|
|
||||||
{
|
|
||||||
if (mod.Biomes?.Contains(biome) == false || mod.Cost > rating)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rating -= mod.Cost;
|
rating -= mod.Cost;
|
||||||
@@ -238,9 +203,9 @@ public abstract class SharedSalvageSystem : EntitySystem
|
|||||||
case DifficultyRating.Moderate:
|
case DifficultyRating.Moderate:
|
||||||
return new string[] { common, rare, rare };
|
return new string[] { common, rare, rare };
|
||||||
case DifficultyRating.Hazardous:
|
case DifficultyRating.Hazardous:
|
||||||
return new string[] { rare, rare, epic };
|
return new string[] { rare, rare, rare, epic };
|
||||||
case DifficultyRating.Extreme:
|
case DifficultyRating.Extreme:
|
||||||
return new string[] { rare, epic, epic };
|
return new string[] { rare, rare, epic, epic, epic };
|
||||||
default:
|
default:
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7948,11 +7948,11 @@ entities:
|
|||||||
- pos: 7.5,32.5
|
- pos: 7.5,32.5
|
||||||
parent: 1653
|
parent: 1653
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: PowerCellHyperPrinted
|
- proto: PowerCellHighPrinted
|
||||||
entities:
|
entities:
|
||||||
- uid: 1599
|
- uid: 822
|
||||||
components:
|
components:
|
||||||
- pos: 33.368233,13.5307665
|
- pos: 33.49889,13.580287
|
||||||
parent: 1653
|
parent: 1653
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: PowerCellRecharger
|
- proto: PowerCellRecharger
|
||||||
@@ -8929,6 +8929,49 @@ entities:
|
|||||||
- pos: 25.506968,14.578961
|
- pos: 25.506968,14.578961
|
||||||
parent: 1653
|
parent: 1653
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: SheetGlass
|
||||||
|
entities:
|
||||||
|
- uid: 841
|
||||||
|
components:
|
||||||
|
- pos: 0.32647848,15.48905
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- uid: 844
|
||||||
|
components:
|
||||||
|
- pos: 53.377705,4.600436
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetPlastic
|
||||||
|
entities:
|
||||||
|
- uid: 838
|
||||||
|
components:
|
||||||
|
- pos: 10.278141,7.4876976
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- uid: 839
|
||||||
|
components:
|
||||||
|
- pos: 0.43585348,16.5828
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- uid: 846
|
||||||
|
components:
|
||||||
|
- pos: 6.3194933,22.541233
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetRGlass
|
||||||
|
entities:
|
||||||
|
- uid: 1112
|
||||||
|
components:
|
||||||
|
- pos: 20.352413,24.551647
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetSteel
|
||||||
|
entities:
|
||||||
|
- uid: 840
|
||||||
|
components:
|
||||||
|
- pos: 0.46710348,15.942175
|
||||||
|
parent: 1653
|
||||||
|
type: Transform
|
||||||
- proto: ShuttersWindow
|
- proto: ShuttersWindow
|
||||||
entities:
|
entities:
|
||||||
- uid: 580
|
- uid: 580
|
||||||
|
|||||||
@@ -3144,11 +3144,6 @@ entities:
|
|||||||
- pos: 19.42657,0.6288943
|
- pos: 19.42657,0.6288943
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
- uid: 398
|
|
||||||
components:
|
|
||||||
- pos: 28.387192,8.540832
|
|
||||||
parent: 588
|
|
||||||
type: Transform
|
|
||||||
- proto: BookRandom
|
- proto: BookRandom
|
||||||
entities:
|
entities:
|
||||||
- uid: 1835
|
- uid: 1835
|
||||||
@@ -7708,6 +7703,13 @@ entities:
|
|||||||
- pos: 10.645364,44.67479
|
- pos: 10.645364,44.67479
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: ClusterBangFull
|
||||||
|
entities:
|
||||||
|
- uid: 599
|
||||||
|
components:
|
||||||
|
- pos: 33.484257,28.42918
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: ComputerAlert
|
- proto: ComputerAlert
|
||||||
entities:
|
entities:
|
||||||
- uid: 999
|
- uid: 999
|
||||||
@@ -9004,6 +9006,13 @@ entities:
|
|||||||
- pos: 10.5,48.5
|
- pos: 10.5,48.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: GatfruitSeeds
|
||||||
|
entities:
|
||||||
|
- uid: 562
|
||||||
|
components:
|
||||||
|
- pos: 8.528373,27.49547
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: Gauze
|
- proto: Gauze
|
||||||
entities:
|
entities:
|
||||||
- uid: 1482
|
- uid: 1482
|
||||||
@@ -9191,18 +9200,17 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- proto: HospitalCurtains
|
- proto: HospitalCurtains
|
||||||
entities:
|
entities:
|
||||||
|
- uid: 402
|
||||||
|
components:
|
||||||
|
- pos: 8.5,27.5
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- uid: 949
|
- uid: 949
|
||||||
components:
|
components:
|
||||||
- rot: 1.5707963267948966 rad
|
- rot: 1.5707963267948966 rad
|
||||||
pos: 8.5,24.5
|
pos: 8.5,24.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
- uid: 950
|
|
||||||
components:
|
|
||||||
- rot: 1.5707963267948966 rad
|
|
||||||
pos: 8.5,27.5
|
|
||||||
parent: 588
|
|
||||||
type: Transform
|
|
||||||
- uid: 951
|
- uid: 951
|
||||||
components:
|
components:
|
||||||
- rot: 1.5707963267948966 rad
|
- rot: 1.5707963267948966 rad
|
||||||
@@ -9352,6 +9360,13 @@ entities:
|
|||||||
- pos: 30.5,42.5
|
- pos: 30.5,42.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: IngotGold
|
||||||
|
entities:
|
||||||
|
- uid: 952
|
||||||
|
components:
|
||||||
|
- pos: 11.069347,39.504154
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: KitchenMicrowave
|
- proto: KitchenMicrowave
|
||||||
entities:
|
entities:
|
||||||
- uid: 524
|
- uid: 524
|
||||||
@@ -9606,13 +9621,6 @@ entities:
|
|||||||
- pos: 30.614443,28.392822
|
- pos: 30.614443,28.392822
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: MedkitBruteFilled
|
|
||||||
entities:
|
|
||||||
- uid: 402
|
|
||||||
components:
|
|
||||||
- pos: 30.512049,27.511803
|
|
||||||
parent: 588
|
|
||||||
type: Transform
|
|
||||||
- proto: MedkitCombatFilled
|
- proto: MedkitCombatFilled
|
||||||
entities:
|
entities:
|
||||||
- uid: 1154
|
- uid: 1154
|
||||||
@@ -9828,7 +9836,7 @@ entities:
|
|||||||
- pos: 22.5,40.5
|
- pos: 22.5,40.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: PowerCellHigh
|
- proto: PowerCellHyper
|
||||||
entities:
|
entities:
|
||||||
- uid: 469
|
- uid: 469
|
||||||
components:
|
components:
|
||||||
@@ -11174,6 +11182,24 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- proto: RemoteSignaller
|
- proto: RemoteSignaller
|
||||||
entities:
|
entities:
|
||||||
|
- uid: 593
|
||||||
|
components:
|
||||||
|
- pos: 34.361877,24.623777
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
|
- linkedPorts:
|
||||||
|
1238:
|
||||||
|
- Pressed: Toggle
|
||||||
|
1239:
|
||||||
|
- Pressed: Toggle
|
||||||
|
1237:
|
||||||
|
- Pressed: Toggle
|
||||||
|
registeredSinks:
|
||||||
|
Pressed:
|
||||||
|
- 1238
|
||||||
|
- 1239
|
||||||
|
- 1237
|
||||||
|
type: DeviceLinkSource
|
||||||
- uid: 1104
|
- uid: 1104
|
||||||
components:
|
components:
|
||||||
- pos: 25.24476,30.698978
|
- pos: 25.24476,30.698978
|
||||||
@@ -11288,6 +11314,39 @@ entities:
|
|||||||
- pos: 28.5,42.5
|
- pos: 28.5,42.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: SheetGlass
|
||||||
|
entities:
|
||||||
|
- uid: 649
|
||||||
|
components:
|
||||||
|
- pos: 14.3137455,32.471424
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetPlasteel
|
||||||
|
entities:
|
||||||
|
- uid: 866
|
||||||
|
components:
|
||||||
|
- pos: 2.412651,34.456436
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetPlastic
|
||||||
|
entities:
|
||||||
|
- uid: 398
|
||||||
|
components:
|
||||||
|
- pos: 20.04785,45.07574
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
|
- proto: SheetSteel
|
||||||
|
entities:
|
||||||
|
- uid: 656
|
||||||
|
components:
|
||||||
|
- pos: 26.36062,32.5183
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
|
- uid: 699
|
||||||
|
components:
|
||||||
|
- pos: 29.259031,40.432583
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: ShowcaseRobot
|
- proto: ShowcaseRobot
|
||||||
entities:
|
entities:
|
||||||
- uid: 1621
|
- uid: 1621
|
||||||
@@ -11307,11 +11366,17 @@ entities:
|
|||||||
- pos: 34.5,27.5
|
- pos: 34.5,27.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- links:
|
||||||
|
- 593
|
||||||
|
type: DeviceLinkSink
|
||||||
- uid: 1238
|
- uid: 1238
|
||||||
components:
|
components:
|
||||||
- pos: 32.5,27.5
|
- pos: 32.5,27.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- links:
|
||||||
|
- 593
|
||||||
|
type: DeviceLinkSink
|
||||||
- proto: ShuttersWindow
|
- proto: ShuttersWindow
|
||||||
entities:
|
entities:
|
||||||
- uid: 1239
|
- uid: 1239
|
||||||
@@ -11319,6 +11384,9 @@ entities:
|
|||||||
- pos: 33.5,27.5
|
- pos: 33.5,27.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- links:
|
||||||
|
- 593
|
||||||
|
type: DeviceLinkSink
|
||||||
- proto: SignCloning
|
- proto: SignCloning
|
||||||
entities:
|
entities:
|
||||||
- uid: 1484
|
- uid: 1484
|
||||||
@@ -11474,6 +11542,13 @@ entities:
|
|||||||
- pos: 24.466219,48.441994
|
- pos: 24.466219,48.441994
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: SpeedLoaderMagnumHighVelocity
|
||||||
|
entities:
|
||||||
|
- uid: 950
|
||||||
|
components:
|
||||||
|
- pos: 28.703945,8.421182
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: StasisBed
|
- proto: StasisBed
|
||||||
entities:
|
entities:
|
||||||
- uid: 1425
|
- uid: 1425
|
||||||
@@ -11481,6 +11556,13 @@ entities:
|
|||||||
- pos: 13.5,43.5
|
- pos: 13.5,43.5
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: StimkitFilled
|
||||||
|
entities:
|
||||||
|
- uid: 561
|
||||||
|
components:
|
||||||
|
- pos: 30.39083,27.514402
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: StimpackMini
|
- proto: StimpackMini
|
||||||
entities:
|
entities:
|
||||||
- uid: 1879
|
- uid: 1879
|
||||||
@@ -12763,6 +12845,13 @@ entities:
|
|||||||
- pos: 22.543945,6.5464144
|
- pos: 22.543945,6.5464144
|
||||||
parent: 588
|
parent: 588
|
||||||
type: Transform
|
type: Transform
|
||||||
|
- proto: WeaponShotgunKammerer
|
||||||
|
entities:
|
||||||
|
- uid: 583
|
||||||
|
components:
|
||||||
|
- pos: 26.57963,35.4414
|
||||||
|
parent: 588
|
||||||
|
type: Transform
|
||||||
- proto: WindoorAssemblySecure
|
- proto: WindoorAssemblySecure
|
||||||
entities:
|
entities:
|
||||||
- uid: 696
|
- uid: 696
|
||||||
|
|||||||
@@ -97,6 +97,39 @@
|
|||||||
- type: Stack
|
- type: Stack
|
||||||
count: 1000
|
count: 1000
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: SpaceCash
|
||||||
|
id: SpaceCash2500
|
||||||
|
suffix: 2500
|
||||||
|
components:
|
||||||
|
- type: Icon
|
||||||
|
sprite: Objects/Economy/cash.rsi
|
||||||
|
state: cash_1000
|
||||||
|
- type: Stack
|
||||||
|
count: 2500
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: SpaceCash
|
||||||
|
id: SpaceCash5000
|
||||||
|
suffix: 5000
|
||||||
|
components:
|
||||||
|
- type: Icon
|
||||||
|
sprite: Objects/Economy/cash.rsi
|
||||||
|
state: cash_1000
|
||||||
|
- type: Stack
|
||||||
|
count: 5000
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: SpaceCash
|
||||||
|
id: SpaceCash10000
|
||||||
|
suffix: 10000
|
||||||
|
components:
|
||||||
|
- type: Icon
|
||||||
|
sprite: Objects/Economy/cash.rsi
|
||||||
|
state: cash_1000
|
||||||
|
- type: Stack
|
||||||
|
count: 10000
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SpaceCash
|
parent: SpaceCash
|
||||||
id: SpaceCash1000000
|
id: SpaceCash1000000
|
||||||
|
|||||||
@@ -65,8 +65,8 @@
|
|||||||
- type: salvageLightMod
|
- type: salvageLightMod
|
||||||
id: Night
|
id: Night
|
||||||
desc: Night time
|
desc: Night time
|
||||||
|
cost: 2
|
||||||
color: null
|
color: null
|
||||||
cost: 1
|
|
||||||
|
|
||||||
# Time mods -> at least 1 required
|
# Time mods -> at least 1 required
|
||||||
- type: salvageTimeMod
|
- type: salvageTimeMod
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
- type: salvageDungeonMod
|
- type: salvageDungeonMod
|
||||||
id: Experiment
|
id: Experiment
|
||||||
proto: Experiment
|
proto: Experiment
|
||||||
biomeMods:
|
biomes:
|
||||||
- Caves
|
- Caves
|
||||||
#- LowDesert
|
#- LowDesert
|
||||||
- Snow
|
- Snow
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
- type: salvageDungeonMod
|
- type: salvageDungeonMod
|
||||||
id: LavaBrig
|
id: LavaBrig
|
||||||
proto: LavaBrig
|
proto: LavaBrig
|
||||||
biomeMods:
|
biomes:
|
||||||
- Lava
|
- Lava
|
||||||
|
|
||||||
# Air mixtures
|
# Air mixtures
|
||||||
@@ -195,3 +195,65 @@
|
|||||||
biomes:
|
biomes:
|
||||||
- Caves
|
- Caves
|
||||||
- Lava
|
- Lava
|
||||||
|
|
||||||
|
# Temperatures
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: RoomTemp
|
||||||
|
biomes:
|
||||||
|
- Caves
|
||||||
|
#- LowDesert
|
||||||
|
- Grasslands
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Hot
|
||||||
|
temperature: 323.15 # 50C
|
||||||
|
biomes:
|
||||||
|
- Caves
|
||||||
|
#- LowDesert
|
||||||
|
- Grasslands
|
||||||
|
- Lava
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Burning
|
||||||
|
desc: High temperature
|
||||||
|
cost: 1
|
||||||
|
temperature: 423.15 # 200C
|
||||||
|
biomes:
|
||||||
|
- Caves
|
||||||
|
#- LowDesert
|
||||||
|
- Lava
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Melting
|
||||||
|
desc: Extreme heat
|
||||||
|
cost: 4
|
||||||
|
temperature: 1273.15 # 1000C hot hot hot
|
||||||
|
biomes:
|
||||||
|
- Lava
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Cold
|
||||||
|
temperature: 275.15 # 2C
|
||||||
|
biomes:
|
||||||
|
- Caves
|
||||||
|
#- LowDesert
|
||||||
|
- Grasslands
|
||||||
|
- Snow
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Tundra
|
||||||
|
desc: Low temperature
|
||||||
|
cost: 2
|
||||||
|
temperature: 263.15 # -40C
|
||||||
|
biomes:
|
||||||
|
- Caves
|
||||||
|
- Snow
|
||||||
|
|
||||||
|
- type: salvageTemperatureMod
|
||||||
|
id: Frozen
|
||||||
|
desc: Extreme cold
|
||||||
|
cost: 3
|
||||||
|
temperature: 123.15 # -150C
|
||||||
|
biomes:
|
||||||
|
- Snow
|
||||||
|
|||||||
@@ -16,6 +16,9 @@
|
|||||||
RandomArtifactSpawner: 0.25
|
RandomArtifactSpawner: 0.25
|
||||||
# weighted down since it sells for a lot
|
# weighted down since it sells for a lot
|
||||||
NuclearBombKeg: 0.1
|
NuclearBombKeg: 0.1
|
||||||
|
# money
|
||||||
|
SpaceCash500: 0.5
|
||||||
|
SpaceCash1000: 0.25
|
||||||
|
|
||||||
- type: weightedRandom
|
- type: weightedRandom
|
||||||
id: SalvageRewardRare
|
id: SalvageRewardRare
|
||||||
@@ -27,14 +30,11 @@
|
|||||||
SheetUranium: 1.0
|
SheetUranium: 1.0
|
||||||
CratePartsT3: 1.0
|
CratePartsT3: 1.0
|
||||||
CratePartsT3T4: 0.5
|
CratePartsT3T4: 0.5
|
||||||
# things the expedition team might want
|
|
||||||
CrateEmergencyBruteKit: 0.5
|
|
||||||
CrateMedicalSupplies: 0.5
|
|
||||||
CrateSecurityRiot: 0.5
|
|
||||||
# cloning boards
|
# cloning boards
|
||||||
CloningPodMachineCircuitboard: 0.5
|
CloningPodMachineCircuitboard: 0.5
|
||||||
MedicalScannerMachineCircuitboard: 0.5
|
MedicalScannerMachineCircuitboard: 0.5
|
||||||
CloningConsoleComputerCircuitboard: 0.5
|
CloningConsoleComputerCircuitboard: 0.5
|
||||||
|
BiomassReclaimerMachineCircuitboard: 0.5
|
||||||
# basic weapons
|
# basic weapons
|
||||||
CrateArmorySMG: 0.25
|
CrateArmorySMG: 0.25
|
||||||
CrateArmoryLaser: 0.25
|
CrateArmoryLaser: 0.25
|
||||||
@@ -43,6 +43,10 @@
|
|||||||
ClothingHeadHelmetSwat: 0.1
|
ClothingHeadHelmetSwat: 0.1
|
||||||
# rare weapons
|
# rare weapons
|
||||||
WeaponSubMachineGunC20r: 0.1
|
WeaponSubMachineGunC20r: 0.1
|
||||||
|
# money
|
||||||
|
SpaceCash500: 1.0
|
||||||
|
SpaceCash1000: 0.75
|
||||||
|
SpaceCash2500: 0.5
|
||||||
|
|
||||||
- type: weightedRandom
|
- type: weightedRandom
|
||||||
id: SalvageRewardEpic
|
id: SalvageRewardEpic
|
||||||
@@ -50,14 +54,16 @@
|
|||||||
# rare machinery
|
# rare machinery
|
||||||
ResearchAndDevelopmentServerMachineCircuitboard: 1.0
|
ResearchAndDevelopmentServerMachineCircuitboard: 1.0
|
||||||
CratePartsT4: 1.0
|
CratePartsT4: 1.0
|
||||||
|
PowerCellAntiqueProto: 0.25
|
||||||
# rare weapons
|
# rare weapons
|
||||||
WeaponAdvancedLaser: 1.0
|
WeaponAdvancedLaser: 1.0
|
||||||
WeaponLaserCannon: 1.0
|
WeaponLaserCannon: 1.0
|
||||||
WeaponXrayCannon: 1.0
|
WeaponXrayCannon: 1.0
|
||||||
WeaponSniperHristov: 1.0
|
WeaponSniperHristov: 1.0
|
||||||
# extremely rare weapons
|
|
||||||
GatfruitSeeds: 0.25
|
|
||||||
WeaponLauncherRocket: 0.1
|
|
||||||
# rare chemicals
|
# rare chemicals
|
||||||
CognizineChemistryBottle: 1.0
|
CognizineChemistryBottle: 1.0
|
||||||
OmnizineChemistryBottle: 1.0
|
OmnizineChemistryBottle: 1.0
|
||||||
|
# money
|
||||||
|
SpaceCash2500: 1.0
|
||||||
|
SpaceCash5000: 0.75
|
||||||
|
SpaceCash10000: 0.5
|
||||||
|
|||||||
Reference in New Issue
Block a user