Баффы (#510)
* Moodsystem cleanups * remove overhydrated and overfed mood debuffs * admins now join game deadmined + new player timers * faster arrivals * recharging rcd with metal, glass, plastic or cable coils * better timings and costs + building apc and camera * preparing for rpd * RPD + make RCD more generic * add rpd to atmos lockers, rcd to engivend * rcd and rpd to technologies * dont deadmin me in debug * rcd ammo buff * add ChargeCountModifier logic for non stackable items * increase time to become experienced player * Dynamic Radial Menus (#29678) * fix * Clean Some Code * Some Commentaries * Update Content.Client/UserInterface/Controls/RadialContainer.cs * Update Content.Client/UserInterface/Controls/RadialContainer.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * more dynamically parameters --------- Co-authored-by: Rinary <72972221+Rinary1@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
This commit is contained in:
@@ -56,7 +56,7 @@ public sealed class RCDConstructionGhostSystem : EntitySystem
|
||||
}
|
||||
|
||||
// If the placer has not changed, exit
|
||||
_rcdSystem.UpdateCachedPrototype(heldEntity.Value, rcd);
|
||||
_rcdSystem.UpdateCachedPrototype(rcd);
|
||||
|
||||
if (heldEntity == placerEntity && rcd.CachedPrototype.Prototype == placerProto)
|
||||
return;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<ui:RadialMenu xmlns="https://spacestation14.io"
|
||||
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
xmlns:rcd="clr-namespace:Content.Client.RCD"
|
||||
BackButtonStyleClass="RadialMenuBackButton"
|
||||
CloseButtonStyleClass="RadialMenuCloseButton"
|
||||
VerticalExpand="True"
|
||||
@@ -12,36 +11,9 @@
|
||||
|
||||
<!-- Entry layer (shows main categories) -->
|
||||
<ui:RadialContainer Name="Main" VerticalExpand="True" HorizontalExpand="True" Radius="64" ReserveSpaceForHiddenChildren="False">
|
||||
<ui:RadialMenuTextureButton StyleClasses="RadialMenuButton" SetSize="64 64" ToolTip="{Loc 'rcd-component-walls-and-flooring'}" TargetLayer="WallsAndFlooring" Visible="False">
|
||||
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/walls_and_flooring.png"/>
|
||||
</ui:RadialMenuTextureButton>
|
||||
<ui:RadialMenuTextureButton StyleClasses="RadialMenuButton" SetSize="64 64" ToolTip="{Loc 'rcd-component-windows-and-grilles'}" TargetLayer="WindowsAndGrilles" Visible="False">
|
||||
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/windows_and_grilles.png"/>
|
||||
</ui:RadialMenuTextureButton>
|
||||
<ui:RadialMenuTextureButton StyleClasses="RadialMenuButton" SetSize="64 64" ToolTip="{Loc 'rcd-component-airlocks'}" TargetLayer="Airlocks" Visible="False">
|
||||
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/airlocks.png"/>
|
||||
</ui:RadialMenuTextureButton>
|
||||
<ui:RadialMenuTextureButton StyleClasses="RadialMenuButton" SetSize="64 64" ToolTip="{Loc 'rcd-component-electrical'}" TargetLayer="Electrical" Visible="False">
|
||||
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/multicoil.png"/>
|
||||
</ui:RadialMenuTextureButton>
|
||||
<ui:RadialMenuTextureButton StyleClasses="RadialMenuButton" SetSize="64 64" ToolTip="{Loc 'rcd-component-lighting'}" TargetLayer="Lighting" Visible="False">
|
||||
<TextureRect VerticalAlignment="Center" HorizontalAlignment="Center" TextureScale="2 2" TexturePath="/Textures/Interface/Radial/RCD/lighting.png"/>
|
||||
</ui:RadialMenuTextureButton>
|
||||
<!-- Categories -->
|
||||
</ui:RadialContainer>
|
||||
|
||||
<!-- Walls and flooring -->
|
||||
<ui:RadialContainer Name="WallsAndFlooring" VerticalExpand="True" HorizontalExpand="True" Radius="64"/>
|
||||
|
||||
<!-- Windows and grilles -->
|
||||
<ui:RadialContainer Name="WindowsAndGrilles" VerticalExpand="True" HorizontalExpand="True" Radius="64"/>
|
||||
|
||||
<!-- Airlocks -->
|
||||
<ui:RadialContainer Name="Airlocks" VerticalExpand="True" HorizontalExpand="True" Radius="64"/>
|
||||
|
||||
<!-- Computer and machine frames -->
|
||||
<ui:RadialContainer Name="Electrical" VerticalExpand="True" HorizontalExpand="True" Radius="64"/>
|
||||
|
||||
<!-- Lighting -->
|
||||
<ui:RadialContainer Name="Lighting" VerticalExpand="True" HorizontalExpand="True" Radius="64"/>
|
||||
<!-- Another categories -->
|
||||
|
||||
</ui:RadialMenu>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Linq;
|
||||
using Content.Client.UserInterface.Controls;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.RCD;
|
||||
@@ -10,6 +11,10 @@ using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Prototypes;
|
||||
using System.Numerics;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Shared.Graphics.RSI;
|
||||
using Robust.Shared.Serialization.Manager.Exceptions;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client.RCD;
|
||||
|
||||
@@ -40,13 +45,12 @@ public sealed partial class RCDMenu : RadialMenu
|
||||
// Find the main radial container
|
||||
var main = FindControl<RadialContainer>("Main");
|
||||
|
||||
if (main == null)
|
||||
return;
|
||||
|
||||
// Populate secondary radial containers
|
||||
if (!_entManager.TryGetComponent<RCDComponent>(owner, out var rcd))
|
||||
return;
|
||||
|
||||
SetupCategories(main, rcd); // WD
|
||||
|
||||
foreach (var protoId in rcd.AvailablePrototypes)
|
||||
{
|
||||
if (!_protoManager.TryIndex(protoId, out var proto))
|
||||
@@ -55,12 +59,9 @@ public sealed partial class RCDMenu : RadialMenu
|
||||
if (proto.Mode == RcdMode.Invalid)
|
||||
continue;
|
||||
|
||||
var parent = FindControl<RadialContainer>(proto.Category);
|
||||
var parent = Children.First(c => c.Name == proto.Category.Id);
|
||||
|
||||
if (parent == null)
|
||||
continue;
|
||||
|
||||
var tooltip = Loc.GetString(proto.SetName);
|
||||
var tooltip = Loc.GetString(proto.Name);
|
||||
|
||||
if ((proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject) &&
|
||||
proto.Prototype != null && _protoManager.TryIndex(proto.Prototype, out var entProto))
|
||||
@@ -80,17 +81,16 @@ public sealed partial class RCDMenu : RadialMenu
|
||||
|
||||
if (proto.Sprite != null)
|
||||
{
|
||||
var tex = new TextureRect()
|
||||
var tex = new TextureRect
|
||||
{
|
||||
VerticalAlignment = VAlignment.Center,
|
||||
HorizontalAlignment = HAlignment.Center,
|
||||
Texture = _spriteSystem.Frame0(proto.Sprite),
|
||||
Texture = GetSprite(proto.Sprite),
|
||||
TextureScale = new Vector2(2f, 2f),
|
||||
};
|
||||
|
||||
button.AddChild(tex);
|
||||
}
|
||||
|
||||
parent.AddChild(button);
|
||||
|
||||
// Ensure that the button that transitions the menu to the associated category layer
|
||||
@@ -119,6 +119,50 @@ public sealed partial class RCDMenu : RadialMenu
|
||||
SendRCDSystemMessageAction += bui.SendRCDSystemMessage;
|
||||
}
|
||||
|
||||
private void SetupCategories(RadialContainer main, RCDComponent rcd)
|
||||
{
|
||||
foreach (var categoryId in rcd.CategoryPrototypes)
|
||||
{
|
||||
if (!_protoManager.TryIndex(categoryId, out var category))
|
||||
continue;
|
||||
|
||||
var button = new RadialMenuTextureButton
|
||||
{
|
||||
StyleClasses = { "RadialMenuButton" },
|
||||
SetSize = new Vector2(64f, 64f),
|
||||
ToolTip = Loc.GetString(category.TooltipBase + categoryId), // rcd-component- + WindowsAndGrilles = rcd-component-WindowsAndGrilles
|
||||
TargetLayer = categoryId,
|
||||
Visible = false,
|
||||
};
|
||||
|
||||
var texture = new TextureRect
|
||||
{
|
||||
VerticalAlignment = VAlignment.Center,
|
||||
HorizontalAlignment = HAlignment.Center,
|
||||
TextureScale = new Vector2(2, 2),
|
||||
Texture = GetSprite(category.SpritePath)
|
||||
};
|
||||
|
||||
button.AddChild(texture);
|
||||
main.AddChild(button);
|
||||
|
||||
var container = new RadialContainer
|
||||
{
|
||||
Name = categoryId,
|
||||
VerticalExpand = true,
|
||||
HorizontalExpand = true,
|
||||
Radius = 64
|
||||
};
|
||||
|
||||
AddChild(container);
|
||||
}
|
||||
}
|
||||
|
||||
private Texture GetSprite(SpriteSpecifier specifier)
|
||||
{
|
||||
return _spriteSystem.Frame0(specifier);
|
||||
}
|
||||
|
||||
private void AddRCDMenuButtonOnClickActions(Control control)
|
||||
{
|
||||
var radialContainer = control as RadialContainer;
|
||||
@@ -140,11 +184,11 @@ public sealed partial class RCDMenu : RadialMenu
|
||||
if (_playerManager.LocalSession?.AttachedEntity != null &&
|
||||
_protoManager.TryIndex(castChild.ProtoId, out var proto))
|
||||
{
|
||||
var msg = Loc.GetString("rcd-component-change-mode", ("mode", Loc.GetString(proto.SetName)));
|
||||
var msg = Loc.GetString("rcd-component-change-mode", ("mode", Loc.GetString(proto.Name)));
|
||||
|
||||
if (proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject)
|
||||
{
|
||||
var name = Loc.GetString(proto.SetName);
|
||||
var name = Loc.GetString(proto.Name);
|
||||
|
||||
if (proto.Prototype != null &&
|
||||
_protoManager.TryIndex(proto.Prototype, out var entProto))
|
||||
|
||||
@@ -70,9 +70,15 @@ public class RadialContainer : LayoutContainer
|
||||
|
||||
protected override void Draw(DrawingHandleScreen handle)
|
||||
{
|
||||
const float baseRadius = 15f; // WD
|
||||
const float radiusIncrement = 12f; // WD
|
||||
|
||||
var children = ReserveSpaceForHiddenChildren ? Children : Children.Where(x => x.Visible);
|
||||
var childCount = children.Count();
|
||||
|
||||
// Add padding from the center at higher child counts so they don't overlap.
|
||||
Radius = baseRadius + (childCount * radiusIncrement);
|
||||
|
||||
// Determine the size of the arc, accounting for clockwise and anti-clockwise arrangements
|
||||
var arc = AngularRange.Y - AngularRange.X;
|
||||
arc = (arc < 0) ? MathF.Tau + arc : arc;
|
||||
|
||||
@@ -217,7 +217,6 @@ namespace Content.Server.GameTicking
|
||||
|
||||
var readyPlayers = new List<ICommonSession>();
|
||||
var readyPlayerProfiles = new Dictionary<NetUserId, HumanoidCharacterProfile>();
|
||||
var autoDeAdmin = _cfg.GetCVar(CCVars.AdminDeadminOnJoin);
|
||||
var stalinBunkerEnabled = _configurationManager.GetCVar(WhiteCVars.StalinEnabled);
|
||||
|
||||
foreach (var (userId, status) in _playerGameStatuses)
|
||||
@@ -225,11 +224,17 @@ namespace Content.Server.GameTicking
|
||||
if (LobbyEnabled && status != PlayerGameStatus.ReadyToPlay) continue;
|
||||
if (!_playerManager.TryGetSessionById(userId, out var session)) continue;
|
||||
|
||||
#if FULL_RELEASE // dont deadmin me in debug
|
||||
|
||||
var autoDeAdmin = _cfg.GetCVar(CCVars.AdminDeadminOnJoin);
|
||||
|
||||
if (autoDeAdmin && _adminManager.IsAdmin(session))
|
||||
{
|
||||
_adminManager.DeAdmin(session);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (stalinBunkerEnabled)
|
||||
{
|
||||
await _stalinManager.RefreshUsersData();
|
||||
|
||||
@@ -8,13 +8,13 @@ namespace Content.Server._White.Mood;
|
||||
[RegisterComponent]
|
||||
public sealed partial class MoodComponent : Component
|
||||
{
|
||||
[DataField("currentMoodLevel"), ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public float CurrentMoodLevel;
|
||||
|
||||
[DataField("currentMoodThreshold"), ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public MoodThreshold CurrentMoodThreshold;
|
||||
|
||||
[DataField("lastThreshold"), ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public MoodThreshold LastThreshold;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
@@ -23,22 +23,22 @@ public sealed partial class MoodComponent : Component
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public readonly Dictionary<string, float> UncategorisedEffects = new();
|
||||
|
||||
[DataField("slowdownSpeedModifier"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
public float SlowdownSpeedModifier = 0.75f;
|
||||
|
||||
[DataField("increaseSpeedModifier"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
public float IncreaseSpeedModifier = 1.15f;
|
||||
|
||||
[DataField("increaseCritThreshold"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
public float IncreaseCritThreshold = 1.2f;
|
||||
|
||||
[DataField("decreaseCritThreshold"), ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
public float DecreaseCritThreshold = 0.9f;
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public FixedPoint2 CritThresholdBeforeModify;
|
||||
|
||||
[DataField("moodThresholds", customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, float>))]
|
||||
[DataField(customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, float>))]
|
||||
public Dictionary<MoodThreshold, float> MoodThresholds = new()
|
||||
{
|
||||
{ MoodThreshold.VeryVeryGood, 10.0f },
|
||||
@@ -53,7 +53,7 @@ public sealed partial class MoodComponent : Component
|
||||
{ MoodThreshold.Dead, 0.0f }
|
||||
};
|
||||
|
||||
[DataField("moodThresholdsAlerts", customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, AlertType>))]
|
||||
[DataField(customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, AlertType>))]
|
||||
public Dictionary<MoodThreshold, AlertType> MoodThresholdsAlerts = new()
|
||||
{
|
||||
{ MoodThreshold.Dead, AlertType.MoodDead },
|
||||
@@ -69,7 +69,7 @@ public sealed partial class MoodComponent : Component
|
||||
{ MoodThreshold.Insane, AlertType.Insane }
|
||||
};
|
||||
|
||||
[DataField("moodChangeValues", customTypeSerializer: typeof(DictionarySerializer<Enum, float>))]
|
||||
[DataField(customTypeSerializer: typeof(DictionarySerializer<Enum, float>))]
|
||||
public Dictionary<Enum, float> MoodChangeValues = new()
|
||||
{
|
||||
{ MoodChangeLevel.None , 0.0f },
|
||||
@@ -80,7 +80,7 @@ public sealed partial class MoodComponent : Component
|
||||
{ MoodChangeLevel.Large , 2f }
|
||||
};
|
||||
|
||||
[DataField("healthMoodEffectsThresholds", customTypeSerializer: typeof(DictionarySerializer<string, float>))]
|
||||
[DataField(customTypeSerializer: typeof(DictionarySerializer<string, float>))]
|
||||
public Dictionary<string, float> HealthMoodEffectsThresholds = new()
|
||||
{
|
||||
{ "HealthHeavyDamage", 80f },
|
||||
|
||||
@@ -108,8 +108,8 @@ public sealed class MoodSystem : EntitySystem
|
||||
if (!component.MoodChangeValues.TryGetValue(oldPrototype.MoodChange, out var oldValue))
|
||||
return;
|
||||
|
||||
amount += (oldPrototype.PositiveEffect ? -oldValue : oldValue) +
|
||||
(prototype.PositiveEffect ? value : -value);
|
||||
amount += (oldPrototype.Positive ? -oldValue : oldValue) +
|
||||
(prototype.Positive ? value : -value);
|
||||
|
||||
component.CategorisedEffects[prototype.Category] = prototype.ID;
|
||||
}
|
||||
@@ -117,7 +117,7 @@ public sealed class MoodSystem : EntitySystem
|
||||
else
|
||||
{
|
||||
component.CategorisedEffects.Add(prototype.Category, prototype.ID);
|
||||
amount += prototype.PositiveEffect ? value : -value;
|
||||
amount += prototype.Positive ? value : -value;
|
||||
}
|
||||
|
||||
if (prototype.Timeout != 0)
|
||||
@@ -132,7 +132,7 @@ public sealed class MoodSystem : EntitySystem
|
||||
if (component.UncategorisedEffects.TryGetValue(prototype.ID, out _))
|
||||
return;
|
||||
|
||||
var effectValue = prototype.PositiveEffect ? value : -value;
|
||||
var effectValue = prototype.Positive ? value : -value;
|
||||
|
||||
component.UncategorisedEffects.Add(prototype.ID, effectValue);
|
||||
amount += effectValue;
|
||||
@@ -173,7 +173,7 @@ public sealed class MoodSystem : EntitySystem
|
||||
if (!comp.MoodChangeValues.TryGetValue(currentProto.MoodChange, out var value))
|
||||
return;
|
||||
|
||||
amount += currentProto.PositiveEffect ? -value : value;
|
||||
amount += currentProto.Positive ? -value : value;
|
||||
comp.CategorisedEffects.Remove(category);
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ public sealed class MoodSystem : EntitySystem
|
||||
if (!component.MoodChangeValues.TryGetValue(prototype.MoodChange, out var value))
|
||||
return;
|
||||
|
||||
amount += prototype.PositiveEffect ? value : -value;
|
||||
amount += prototype.Positive ? value : -value;
|
||||
}
|
||||
|
||||
foreach (var (_, value) in component.UncategorisedEffects)
|
||||
@@ -438,7 +438,7 @@ public sealed partial class ShowMoodEffects : IAlertClick
|
||||
{
|
||||
var chatManager = IoCManager.Resolve<IChatManager>();
|
||||
|
||||
var color = proto.PositiveEffect ? "#008000" : "#BA0000";
|
||||
var color = proto.Positive ? "#008000" : "#BA0000";
|
||||
var msg = $"[font size=10][color={color}]{proto.Description}[/color][/font]";
|
||||
|
||||
chatManager.ChatMessageToOne(ChatChannel.Emotes, msg, msg, EntityUid.Invalid, false,
|
||||
|
||||
@@ -838,7 +838,7 @@ namespace Content.Shared.CCVar
|
||||
/// de-admin them.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<bool> AdminDeadminOnJoin =
|
||||
CVarDef.Create("admin.deadmin_on_join", false, CVar.SERVERONLY);
|
||||
CVarDef.Create("admin.deadmin_on_join", true, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the name the client sees in ahelps. Set empty to disable.
|
||||
@@ -851,7 +851,7 @@ namespace Content.Shared.CCVar
|
||||
/// If 0, appearing as a new player is disabled.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> NewPlayerThreshold =
|
||||
CVarDef.Create("admin.new_player_threshold", 0, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER);
|
||||
CVarDef.Create("admin.new_player_threshold", 4320, CVar.ARCHIVE | CVar.REPLICATED | CVar.SERVER);
|
||||
|
||||
/// <summary>
|
||||
/// How long an admin client can go without any input before being considered AFK.
|
||||
@@ -1346,7 +1346,7 @@ namespace Content.Shared.CCVar
|
||||
|
||||
/// <summary>
|
||||
/// Config for when the restart vote should be allowed to be called based on percentage of ghosts.
|
||||
///
|
||||
/// </summary>
|
||||
public static readonly CVarDef<int> VoteRestartGhostPercentage =
|
||||
CVarDef.Create("vote.restart_ghost_percentage", 75, CVar.SERVERONLY);
|
||||
|
||||
@@ -1441,7 +1441,7 @@ namespace Content.Shared.CCVar
|
||||
/// Whether the arrivals terminal should be on a planet map.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<bool> ArrivalsPlanet =
|
||||
CVarDef.Create("shuttle.arrivals_planet", true, CVar.SERVERONLY);
|
||||
CVarDef.Create("shuttle.arrivals_planet", false, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Whether the arrivals shuttle is enabled.
|
||||
@@ -1459,7 +1459,7 @@ namespace Content.Shared.CCVar
|
||||
/// Cooldown between arrivals departures. This should be longer than the FTL time or it will double cycle.
|
||||
/// </summary>
|
||||
public static readonly CVarDef<float> ArrivalsCooldown =
|
||||
CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY);
|
||||
CVarDef.Create("shuttle.arrivals_cooldown", 10f, CVar.SERVERONLY);
|
||||
|
||||
/// <summary>
|
||||
/// Are players allowed to return on the arrivals shuttle.
|
||||
|
||||
@@ -114,7 +114,7 @@ public sealed class HungerSystem : EntitySystem
|
||||
return;
|
||||
|
||||
//WD start
|
||||
if (_net.IsServer)
|
||||
if (_net.IsServer && component.CurrentThreshold != HungerThreshold.Overfed)
|
||||
{
|
||||
var ev = new MoodEffectEvent("Hunger" + component.CurrentThreshold);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
|
||||
@@ -112,10 +112,13 @@ public sealed class ThirstSystem : EntitySystem
|
||||
_alerts.ClearAlertCategory(uid, AlertCategory.Thirst);
|
||||
}
|
||||
|
||||
//WD start
|
||||
// WD start
|
||||
if (component.CurrentThirstThreshold != ThirstThreshold.OverHydrated)
|
||||
{
|
||||
var ev = new MoodEffectEvent("Thirst" + component.CurrentThirstThreshold);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
//WD end
|
||||
}
|
||||
// WD end
|
||||
|
||||
switch (component.CurrentThirstThreshold)
|
||||
{
|
||||
|
||||
@@ -13,4 +13,8 @@ public sealed partial class RCDAmmoComponent : Component
|
||||
/// </summary>
|
||||
[DataField("charges"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||
public int Charges = 30;
|
||||
|
||||
[DataField] public bool CanBeExamined = true; // WD
|
||||
|
||||
[DataField] public float ChargeCountModifier = 1; // WD
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Content.Shared._White.RCD;
|
||||
using Content.Shared.RCD.Systems;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
@@ -33,6 +34,12 @@ public sealed partial class RCDComponent : Component
|
||||
[DataField, AutoNetworkedField]
|
||||
public ProtoId<RCDPrototype> ProtoId { get; set; } = "Invalid";
|
||||
|
||||
/// <summary>
|
||||
/// The ProtoId of the currently selected RCD prototype
|
||||
/// </summary>
|
||||
[DataField(required: true), AutoNetworkedField]
|
||||
public HashSet<ProtoId<RCDCategoryPrototype>> CategoryPrototypes = default!;
|
||||
|
||||
/// <summary>
|
||||
/// A cached copy of currently selected RCD prototype
|
||||
/// </summary>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using Content.Shared._White.RCD;
|
||||
using Content.Shared.Physics;
|
||||
using Robust.Shared.Physics.Collision.Shapes;
|
||||
using Robust.Shared.Prototypes;
|
||||
@@ -23,14 +24,14 @@ public sealed class RCDPrototype : IPrototype
|
||||
/// <summary>
|
||||
/// The name associated with the prototype
|
||||
/// </summary>
|
||||
[DataField("name"), ViewVariables(VVAccess.ReadOnly)]
|
||||
public string SetName { get; private set; } = "Unknown";
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public string Name { get; private set; } = "Unknown";
|
||||
|
||||
/// <summary>
|
||||
/// The name of the radial container that this prototype will be listed under on the RCD menu
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public string Category { get; private set; } = "Undefined";
|
||||
public ProtoId<RCDCategoryPrototype> Category { get; private set; } = "WallsAndFlooring"; // WD
|
||||
|
||||
/// <summary>
|
||||
/// Texture path for this prototypes menu icon
|
||||
@@ -42,7 +43,7 @@ public sealed class RCDPrototype : IPrototype
|
||||
/// The entity prototype that will be constructed (mode dependent)
|
||||
/// </summary>
|
||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||
public string? Prototype { get; private set; } = string.Empty;
|
||||
public ProtoId<EntityPrototype>? Prototype { get; private set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Number of charges consumed when the operation is completed
|
||||
|
||||
@@ -4,6 +4,7 @@ using Content.Shared.Examine;
|
||||
using Content.Shared.Interaction;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.RCD.Components;
|
||||
using Content.Shared.Stacks;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared.RCD.Systems;
|
||||
@@ -13,20 +14,37 @@ public sealed class RCDAmmoSystem : EntitySystem
|
||||
[Dependency] private readonly SharedChargesSystem _charges = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly SharedStackSystem _stack = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<RCDAmmoComponent, ComponentInit>(OnInit); // WD edit
|
||||
|
||||
SubscribeLocalEvent<RCDAmmoComponent, ExaminedEvent>(OnExamine);
|
||||
SubscribeLocalEvent<RCDAmmoComponent, AfterInteractEvent>(OnAfterInteract);
|
||||
}
|
||||
|
||||
// WD edit start
|
||||
private void OnInit(EntityUid uid, RCDAmmoComponent rcdAmmoComponent, ComponentInit _)
|
||||
{
|
||||
if (TryComp<StackComponent>(uid, out var stackComponent))
|
||||
rcdAmmoComponent.Charges = (int) (stackComponent.Count * rcdAmmoComponent.ChargeCountModifier);
|
||||
else
|
||||
rcdAmmoComponent.Charges = (int) (rcdAmmoComponent.Charges * rcdAmmoComponent.ChargeCountModifier);
|
||||
|
||||
}
|
||||
// WD edit end
|
||||
|
||||
private void OnExamine(EntityUid uid, RCDAmmoComponent comp, ExaminedEvent args)
|
||||
{
|
||||
if (!args.IsInDetailsRange)
|
||||
return;
|
||||
|
||||
if (!comp.CanBeExamined) // WD edit
|
||||
return;
|
||||
|
||||
var examineMessage = Loc.GetString("rcd-ammo-component-on-examine", ("charges", comp.Charges));
|
||||
args.PushText(examineMessage);
|
||||
}
|
||||
@@ -51,6 +69,15 @@ public sealed class RCDAmmoSystem : EntitySystem
|
||||
}
|
||||
|
||||
_popup.PopupClient(Loc.GetString("rcd-ammo-component-after-interact-refilled"), target, user);
|
||||
|
||||
// WD edit start
|
||||
if (TryComp<StackComponent>(uid, out var stackComponent))
|
||||
{
|
||||
var spent = (int) (count / comp.ChargeCountModifier) == 0 ? 1 : (int) (count / comp.ChargeCountModifier);
|
||||
_stack.SetCount(uid, stackComponent.Count - spent);
|
||||
}
|
||||
// WD edit end
|
||||
|
||||
_charges.AddCharges(target, count, charges);
|
||||
comp.Charges -= count;
|
||||
Dirty(uid, comp);
|
||||
|
||||
@@ -25,6 +25,7 @@ using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Timing;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Shared._White.ClothingGrant.Systems;
|
||||
|
||||
namespace Content.Shared.RCD.Systems;
|
||||
|
||||
@@ -75,7 +76,7 @@ public class RCDSystem : EntitySystem
|
||||
if (component.AvailablePrototypes.Any())
|
||||
{
|
||||
component.ProtoId = component.AvailablePrototypes.First();
|
||||
UpdateCachedPrototype(uid, component);
|
||||
UpdateCachedPrototype(component);
|
||||
Dirty(uid, component);
|
||||
|
||||
return;
|
||||
@@ -96,7 +97,7 @@ public class RCDSystem : EntitySystem
|
||||
|
||||
// Set the current RCD prototype to the one supplied
|
||||
component.ProtoId = args.ProtoId;
|
||||
UpdateCachedPrototype(uid, component);
|
||||
UpdateCachedPrototype(component);
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
@@ -106,13 +107,14 @@ public class RCDSystem : EntitySystem
|
||||
return;
|
||||
|
||||
// Update cached prototype if required
|
||||
UpdateCachedPrototype(uid, component);
|
||||
UpdateCachedPrototype(component);
|
||||
|
||||
var msg = Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(component.CachedPrototype.SetName)));
|
||||
var msg = Loc.GetString("rcd-component-examine-mode-details", ("mode", Loc.GetString(component.CachedPrototype.Name)));
|
||||
|
||||
if (component.CachedPrototype.Mode == RcdMode.ConstructTile || component.CachedPrototype.Mode == RcdMode.ConstructObject)
|
||||
var mode = component.CachedPrototype.Mode;
|
||||
if (mode == RcdMode.ConstructTile || mode == RcdMode.ConstructObject)
|
||||
{
|
||||
var name = Loc.GetString(component.CachedPrototype.SetName);
|
||||
var name = Loc.GetString(component.CachedPrototype.Name);
|
||||
|
||||
if (component.CachedPrototype.Prototype != null &&
|
||||
_protoManager.TryIndex(component.CachedPrototype.Prototype, out var proto))
|
||||
@@ -225,7 +227,7 @@ public class RCDSystem : EntitySystem
|
||||
|
||||
private void OnDoAfterAttempt(EntityUid uid, RCDComponent component, DoAfterAttemptEvent<RCDDoAfterEvent> args)
|
||||
{
|
||||
if (args.Event?.DoAfter?.Args == null)
|
||||
if (args.Event?.DoAfter?.Args == null) // wtf if this
|
||||
return;
|
||||
|
||||
// Exit if the RCD prototype has changed
|
||||
@@ -302,7 +304,7 @@ public class RCDSystem : EntitySystem
|
||||
public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user, bool popMsgs = true)
|
||||
{
|
||||
// Update cached prototype if required
|
||||
UpdateCachedPrototype(uid, component);
|
||||
UpdateCachedPrototype(component);
|
||||
|
||||
// Check that the RCD has enough ammo to get the job done
|
||||
TryComp<LimitedChargesComponent>(uid, out var charges);
|
||||
@@ -589,7 +591,7 @@ public class RCDSystem : EntitySystem
|
||||
return boundingPolygon.ComputeAABB(boundingTransform, 0).Intersects(fixture.Shape.ComputeAABB(entXform, 0));
|
||||
}
|
||||
|
||||
public void UpdateCachedPrototype(EntityUid uid, RCDComponent component)
|
||||
public void UpdateCachedPrototype(RCDComponent component)
|
||||
{
|
||||
if (component.ProtoId.Id != component.CachedPrototype?.Prototype)
|
||||
component.CachedPrototype = _protoManager.Index(component.ProtoId);
|
||||
|
||||
@@ -3,6 +3,7 @@ using Content.Shared.Inventory.Events;
|
||||
using Robust.Shared.Serialization.Manager;
|
||||
using Content.Shared.Tag;
|
||||
using Content.Shared._White.ClothingGrant.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared._White.ClothingGrant.Systems;
|
||||
@@ -40,24 +41,29 @@ public sealed class ClothingGrantingSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var (name, data) in component.Components)
|
||||
{
|
||||
var newComp = (Component) _componentFactory.GetComponent(name);
|
||||
|
||||
if (HasComp(args.Equipee, newComp.GetType()))
|
||||
continue;
|
||||
|
||||
newComp.Owner = args.Equipee;
|
||||
|
||||
var temp = (object) newComp;
|
||||
_serializationManager.CopyTo(data.Component, ref temp);
|
||||
EntityManager.AddComponent(args.Equipee, (Component)temp!);
|
||||
}
|
||||
AddComponents(args.Equipee, component.Components);
|
||||
|
||||
component.IsActive = true;
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
public void AddComponents(EntityUid uid, ComponentRegistry components)
|
||||
{
|
||||
foreach (var (name, data) in components)
|
||||
{
|
||||
var newComp = (Component) _componentFactory.GetComponent(name);
|
||||
|
||||
if (HasComp(uid, newComp.GetType()))
|
||||
continue;
|
||||
|
||||
newComp.Owner = uid;
|
||||
|
||||
var temp = (object) newComp;
|
||||
_serializationManager.CopyTo(data.Component, ref temp);
|
||||
EntityManager.AddComponent(uid, (Component)temp!);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCompUnequip(EntityUid uid, ClothingGrantComponentComponent component, GotUnequippedEvent args)
|
||||
{
|
||||
if (!component.IsActive) return;
|
||||
|
||||
@@ -3,29 +3,25 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations;
|
||||
|
||||
namespace Content.Shared._White.Mood;
|
||||
|
||||
[Prototype("moodEffect")]
|
||||
[Prototype]
|
||||
public sealed class MoodEffectPrototype : IPrototype
|
||||
{
|
||||
[ViewVariables]
|
||||
[IdDataField]
|
||||
public string ID { get; } = default!;
|
||||
|
||||
[DataField("desc", required: true)]
|
||||
[DataField(required: true)]
|
||||
public string Description = string.Empty;
|
||||
|
||||
[DataField("moodChange", customTypeSerializer: typeof(EnumSerializer), required: true)]
|
||||
[DataField(customTypeSerializer: typeof(EnumSerializer), required: true)]
|
||||
public Enum MoodChange = default!;
|
||||
|
||||
[DataField("positiveEffect", required: true)]
|
||||
public bool PositiveEffect;
|
||||
[DataField] public bool Positive;
|
||||
|
||||
[DataField("timeout")]
|
||||
public int Timeout;
|
||||
[DataField] public int Timeout;
|
||||
|
||||
[DataField("hidden")]
|
||||
public bool Hidden;
|
||||
[DataField] public bool Hidden;
|
||||
|
||||
//If mob already has effect of the same category, the new one will replace the old one.
|
||||
[DataField("category")]
|
||||
public string? Category;
|
||||
// If mob already has effect of the same category, the new one will replace the old one.
|
||||
[DataField] public string? Category;
|
||||
}
|
||||
|
||||
17
Content.Shared/_White/RCD/RCDCategoryPrototype.cs
Normal file
17
Content.Shared/_White/RCD/RCDCategoryPrototype.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared._White.RCD;
|
||||
|
||||
[Prototype("rcdCategory")]
|
||||
public sealed class RCDCategoryPrototype : IPrototype
|
||||
{
|
||||
[IdDataField]
|
||||
public string ID { get; private set; } = default!;
|
||||
|
||||
[DataField]
|
||||
public string TooltipBase = "rcd-category-";
|
||||
|
||||
[DataField(required: true)]
|
||||
public SpriteSpecifier SpritePath = default!;
|
||||
}
|
||||
@@ -1,30 +1,59 @@
|
||||
### UI
|
||||
# WD EDIT ALL
|
||||
|
||||
# Shown when an RCD is examined in details range
|
||||
rcd-component-examine-detail = В данный момент выбран режим { $mode }.
|
||||
# Shown when an RCD is examined in details range
|
||||
rcd-component-examine-detail-count =
|
||||
Находится в режиме { $mode ->
|
||||
*[other] _
|
||||
[floors] полы
|
||||
[walls] стены
|
||||
[airlock] шлюзы
|
||||
[deconstruct] разбор
|
||||
}, и { $ammoCount ->
|
||||
*[zero] не содержит зарядов.
|
||||
[one] содержит 1 заряд.
|
||||
[few] содержит { $ammoCount } заряда.
|
||||
[other] содержит { $ammoCount } зарядов.
|
||||
}
|
||||
# UI
|
||||
|
||||
### Interaction Messages
|
||||
rcd-component-examine-mode-details = Текущий режим: '{$mode}'.
|
||||
rcd-component-examine-build-details = Текущий режим строительства: {$name}.
|
||||
|
||||
# Shown when changing RCD Mode
|
||||
rcd-component-change-mode = РЦД переключён в режим { $mode }.
|
||||
|
||||
## Interaction Messages
|
||||
|
||||
# Mode change
|
||||
rcd-component-change-mode = РЦД переключён в режим '{$mode}'.
|
||||
rcd-component-change-build-mode = РЦД переключён в режим строительства {$name}.
|
||||
|
||||
# Ammo count
|
||||
rcd-component-no-ammo-message = В РЦД закончились заряды!
|
||||
rcd-component-tile-indestructible-message = Эта плитка не может быть уничтожена!
|
||||
rcd-component-tile-obstructed-message = Этот тайл заблокирован!
|
||||
rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это деконструировать!
|
||||
rcd-component-cannot-build-floor-tile-not-empty-message = Пол можно построить только в космосе или на покрытии!
|
||||
rcd-component-cannot-build-wall-tile-not-empty-message = Вы не можете построить стену в космосе!
|
||||
rcd-component-cannot-build-airlock-tile-not-empty-message = Вы не можете построить шлюз в космосе!
|
||||
rcd-component-insufficient-ammo-message = В РЦД недостаточно зарядов!
|
||||
|
||||
# Deconstruction
|
||||
rcd-component-tile-indestructible-message = Эта плитка неразрушима!
|
||||
rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это демонтировать!
|
||||
rcd-component-nothing-to-deconstruct-message = Здесь нечего демонтировать!
|
||||
rcd-component-tile-obstructed-message = Вы не можете демонтировать плитку, если на ней что-то есть!
|
||||
|
||||
# Construction
|
||||
rcd-component-no-valid-grid = Вы слишком далеко в открытом космосе, чтобы строить здесь!
|
||||
rcd-component-must-build-on-empty-tile-message = Здесь уже есть фундамент!
|
||||
rcd-component-cannot-build-on-empty-tile-message = Вы не можете строить это без фундамента!
|
||||
rcd-component-must-build-on-subfloor-message = Вы можете строить это только на открытом полу!
|
||||
rcd-component-cannot-build-on-subfloor-message = Вы не можете строить это на открытом полу!
|
||||
rcd-component-cannot-build-on-occupied-tile-message = Вы не можете строить здесь, это место уже занято!
|
||||
rcd-component-cannot-build-identical-tile = Эта плитка уже существует!
|
||||
|
||||
|
||||
### Category names
|
||||
|
||||
# RCD
|
||||
rcd-category-WallsAndFlooring = Стены и пол
|
||||
rcd-category-WindowsAndGrilles = Окна и решётки
|
||||
rcd-category-Airlocks = Шлюзы
|
||||
rcd-category-Electrical = Электрика
|
||||
rcd-category-Lighting = Освещение
|
||||
|
||||
# RPD
|
||||
rcd-category-Pipes = Трубы
|
||||
rcd-category-GasDevices = Атмосферные приборы
|
||||
rcd-category-DisposalPipes = Мусорные трубы
|
||||
rcd-category-DisposalUnits = Мусорные приборы
|
||||
|
||||
### Prototype names (note: constructable items will be puralized)
|
||||
|
||||
rcd-component-deconstruct = демонтаж
|
||||
rcd-component-floor-steel = стальная плитка
|
||||
rcd-component-plating = лист обшивки
|
||||
|
||||
# RPD naming
|
||||
|
||||
ent-RapidPipeDispenser = РПД
|
||||
.desc = Новейшее ручное строительное устройство, которое может быстро размещать трубы и атмосферные приборы.
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
- id: ClothingEyesGlassesMeson
|
||||
- id: ClothingShoesBootsMag
|
||||
- id: ClothingHandsGlovesColorYellow
|
||||
- id: RapidPipeDispenser # WD
|
||||
|
||||
- type: entity
|
||||
id: LockerAtmosphericsFilled
|
||||
@@ -111,6 +112,7 @@
|
||||
- id: ClothingEyesGlassesMeson
|
||||
- id: ClothingShoesBootsMag
|
||||
- id: ClothingHandsGlovesColorYellow
|
||||
- id: RapidPipeDispenser # WD
|
||||
|
||||
- type: entity
|
||||
id: LockerEngineerFilledHardsuit
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
- id: ClothingOuterHardsuitEngineeringWhite
|
||||
- id: ClothingMaskBreath
|
||||
- id: OxygenTankFilled
|
||||
- id: RapidPipeDispenser # WD
|
||||
|
||||
- type: entity
|
||||
id: LockerChiefEngineerFilled
|
||||
@@ -169,6 +170,7 @@
|
||||
- id: RCDAmmo
|
||||
amount: 2
|
||||
- id: HolofanProjector
|
||||
- id: RapidPipeDispenser # WD
|
||||
|
||||
- type: entity
|
||||
id: LockerChiefMedicalOfficerFilledHardsuit
|
||||
|
||||
@@ -12,6 +12,5 @@
|
||||
GeigerCounter: 3
|
||||
InflatableWallStack1: 24
|
||||
InflatableDoorStack1: 8
|
||||
emaggedInventory:
|
||||
RCD: 1
|
||||
RCDAmmo: 3
|
||||
RCD: 3 # WD
|
||||
RCDAmmo: 3 # WD
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
reagents:
|
||||
- ReagentId: Silicon
|
||||
Quantity: 10
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
|
||||
- type: entity
|
||||
parent: SheetGlass
|
||||
@@ -172,6 +174,9 @@
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 2
|
||||
|
||||
- type: entity
|
||||
parent: SheetRGlass
|
||||
@@ -249,6 +254,9 @@
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 2
|
||||
|
||||
- type: entity
|
||||
parent: SheetPGlass
|
||||
@@ -315,6 +323,9 @@
|
||||
- ReagentId: Carbon
|
||||
Quantity: 0.5
|
||||
canReact: false
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 3
|
||||
|
||||
- type: entity
|
||||
parent: SheetRPGlass
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
Quantity: 9
|
||||
- ReagentId: Carbon
|
||||
Quantity: 1
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
|
||||
- type: entity
|
||||
parent: SheetSteel
|
||||
@@ -206,6 +208,9 @@
|
||||
- ReagentId: Carbon
|
||||
Quantity: 1
|
||||
canReact: false
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 2
|
||||
|
||||
- type: entity
|
||||
parent: SheetPlasteel
|
||||
|
||||
@@ -164,6 +164,9 @@
|
||||
- ReagentId: Phosphorus
|
||||
Quantity: 5
|
||||
canReact: false
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 0.5
|
||||
|
||||
- type: entity
|
||||
parent: SheetPlastic
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
Quantity: 4.5
|
||||
- ReagentId: Carbon
|
||||
Quantity: 0.5
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 0.5
|
||||
|
||||
- type: entity
|
||||
parent: PartRodMetal
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
price: 0
|
||||
- type: StackPrice
|
||||
price: 1
|
||||
- type: RCDAmmo # WD
|
||||
canBeExamined: false
|
||||
chargeCountModifier: 0.2
|
||||
|
||||
- type: entity
|
||||
id: CableHVStack
|
||||
|
||||
@@ -395,32 +395,11 @@
|
||||
path: "/Audio/Items/drill_hit.ogg"
|
||||
|
||||
- type: entity
|
||||
id: RCD
|
||||
id: BaseRCD
|
||||
parent: BaseItem
|
||||
name: RCD
|
||||
description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function.
|
||||
components:
|
||||
- type: RCD
|
||||
availablePrototypes:
|
||||
- WallSolid
|
||||
- FloorSteel
|
||||
- Plating
|
||||
- Catwalk
|
||||
- Grille
|
||||
- Window
|
||||
- WindowDirectional
|
||||
- WindowReinforcedDirectional
|
||||
- ReinforcedWindow
|
||||
- Airlock
|
||||
- AirlockGlass
|
||||
- Firelock
|
||||
- TubeLight
|
||||
- BulbLight
|
||||
- LVCable
|
||||
- MVCable
|
||||
- HVCable
|
||||
- CableTerminal
|
||||
- Deconstruct
|
||||
- type: LimitedCharges
|
||||
maxCharges: 30
|
||||
charges: 30
|
||||
@@ -449,13 +428,18 @@
|
||||
key: enum.RcdUiKey.Key
|
||||
|
||||
- type: entity
|
||||
id: RCDEmpty
|
||||
parent: RCD
|
||||
suffix: Empty
|
||||
id: RCD
|
||||
parent: BaseRCD
|
||||
name: RCD
|
||||
description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function.
|
||||
components:
|
||||
- type: LimitedCharges
|
||||
charges: 0
|
||||
- type: RCD
|
||||
categoryPrototypes: # WD
|
||||
- WallsAndFlooring # WD
|
||||
- WindowsAndGrilles # WD
|
||||
- Airlocks # WD
|
||||
- Electrical # WD
|
||||
- Lighting # WD
|
||||
availablePrototypes:
|
||||
- WallSolid
|
||||
- FloorSteel
|
||||
@@ -469,6 +453,76 @@
|
||||
- Airlock
|
||||
- AirlockGlass
|
||||
- Firelock
|
||||
- TubeLight
|
||||
- BulbLight
|
||||
- LVCable
|
||||
- MVCable
|
||||
- HVCable
|
||||
- CableTerminal
|
||||
- APC # WD
|
||||
- Camera # WD
|
||||
- Deconstruct
|
||||
|
||||
- type: entity
|
||||
id: RCDEmpty
|
||||
parent: RCD
|
||||
suffix: Empty
|
||||
components:
|
||||
- type: LimitedCharges
|
||||
charges: 0
|
||||
|
||||
- type: entity # WD
|
||||
id: RapidPipeDispenser
|
||||
parent: BaseRCD
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: White/Items/Tools/rpd.rsi
|
||||
- type: Item
|
||||
size: Normal
|
||||
shape:
|
||||
- 0, 0, 1, 0
|
||||
- type: Clothing
|
||||
sprite: White/Items/Tools/rpd.rsi
|
||||
quickEquip: false
|
||||
slots:
|
||||
- Belt
|
||||
- type: RCD
|
||||
categoryPrototypes:
|
||||
- Pipes
|
||||
- GasDevices
|
||||
- DisposalPipes
|
||||
- DisposalUnits
|
||||
availablePrototypes:
|
||||
- PipeStraight # pipes
|
||||
- PipeBend
|
||||
- PipeTJunction
|
||||
- PipeFourway
|
||||
- GasCanisterPort # gas devices
|
||||
- GasFilter
|
||||
- GasMixer
|
||||
- GasOutletInjector
|
||||
- GasPressurePump
|
||||
- GasVolumePump
|
||||
- GasValve
|
||||
- SignalControlledValve
|
||||
- PressureControlledValve
|
||||
- GasVentScrubber
|
||||
- GasVentPump
|
||||
- GasPassiveVent
|
||||
- DisposalPipe # disposal pipes
|
||||
- DisposalBend
|
||||
- DisposalJunction
|
||||
- DisposalJunctionFlipped
|
||||
- DisposalYJunction
|
||||
- DisposalRouter
|
||||
- DisposalRouterFlipped
|
||||
- DisposalTagger
|
||||
- DisposalSignalRouter
|
||||
- DisposalSignalRouterFlipped
|
||||
- DisposalTrunk
|
||||
- DisposalUnit # disposal units
|
||||
- MailingUnit
|
||||
- ToiletEmpty
|
||||
|
||||
- type: entity
|
||||
id: RCDRecharging
|
||||
@@ -500,6 +554,7 @@
|
||||
description: A cartridge of raw matter compacted by bluespace technology. Used in rapid construction devices.
|
||||
components:
|
||||
- type: RCDAmmo
|
||||
chargeCountModifier: 1.5
|
||||
- type: Sprite
|
||||
sprite: Objects/Tools/rcd.rsi
|
||||
state: ammo
|
||||
|
||||
@@ -348,6 +348,8 @@
|
||||
- KitchenKnife # WD EDIT
|
||||
- ButchCleaver # WD EDIT
|
||||
- WeaponTempGun # WD EDIT
|
||||
- RapidPipeDispenserRecipe # WD edit
|
||||
- RCDRecipe # WD edit
|
||||
- DeviceQuantumSpinInverter
|
||||
- type: EmagLatheRecipes
|
||||
emagDynamicRecipes:
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
mode: ConstructTile
|
||||
prototype: Plating
|
||||
cost: 1
|
||||
delay: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- CanBuildOnEmptyTile
|
||||
fx: EffectRCDConstruct1
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: FloorSteel
|
||||
@@ -53,11 +53,11 @@
|
||||
mode: ConstructTile
|
||||
prototype: FloorSteel
|
||||
cost: 1
|
||||
delay: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- CanBuildOnEmptyTile
|
||||
fx: EffectRCDConstruct1
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: Catwalk
|
||||
@@ -66,13 +66,13 @@
|
||||
mode: ConstructObject
|
||||
prototype: Catwalk
|
||||
cost: 1
|
||||
delay: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
- IsCatwalk
|
||||
rotation: Fixed
|
||||
fx: EffectRCDConstruct1
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
# Walls
|
||||
- type: rcd
|
||||
@@ -93,11 +93,11 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/grille.png
|
||||
mode: ConstructObject
|
||||
prototype: Grille
|
||||
cost: 4
|
||||
delay: 2
|
||||
cost: 1
|
||||
delay: 1
|
||||
collisionMask: FullTileMask
|
||||
rotation: Fixed
|
||||
fx: EffectRCDConstruct2
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
# Windows
|
||||
- type: rcd
|
||||
@@ -106,13 +106,13 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/window.png
|
||||
mode: ConstructObject
|
||||
prototype: Window
|
||||
cost: 3
|
||||
delay: 2
|
||||
cost: 2
|
||||
delay: 1
|
||||
collisionMask: FullTileMask
|
||||
rules:
|
||||
- IsWindow
|
||||
rotation: Fixed
|
||||
fx: EffectRCDConstruct2
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
- type: rcd
|
||||
id: WindowDirectional
|
||||
@@ -120,7 +120,7 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/directional.png
|
||||
mode: ConstructObject
|
||||
prototype: WindowDirectional
|
||||
cost: 2
|
||||
cost: 1
|
||||
delay: 1
|
||||
collisionMask: FullTileMask
|
||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||
@@ -136,12 +136,12 @@
|
||||
mode: ConstructObject
|
||||
prototype: ReinforcedWindow
|
||||
cost: 4
|
||||
delay: 3
|
||||
delay: 2
|
||||
collisionMask: FullTileMask
|
||||
rules:
|
||||
- IsWindow
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct3
|
||||
fx: EffectRCDConstruct2
|
||||
|
||||
- type: rcd
|
||||
id: WindowReinforcedDirectional
|
||||
@@ -149,14 +149,14 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png
|
||||
mode: ConstructObject
|
||||
prototype: WindowReinforcedDirectional
|
||||
cost: 3
|
||||
delay: 2
|
||||
cost: 2
|
||||
delay: 1
|
||||
collisionMask: FullTileMask
|
||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||
rules:
|
||||
- IsWindow
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct2
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
# Airlocks
|
||||
- type: rcd
|
||||
@@ -166,10 +166,10 @@
|
||||
mode: ConstructObject
|
||||
prototype: Airlock
|
||||
cost: 4
|
||||
delay: 4
|
||||
delay: 3
|
||||
collisionMask: FullTileMask
|
||||
rotation: Camera
|
||||
fx: EffectRCDConstruct4
|
||||
fx: EffectRCDConstruct3
|
||||
|
||||
- type: rcd
|
||||
id: AirlockGlass
|
||||
@@ -178,10 +178,10 @@
|
||||
mode: ConstructObject
|
||||
prototype: AirlockGlass
|
||||
cost: 4
|
||||
delay: 4
|
||||
delay: 3
|
||||
collisionMask: FullTileMask
|
||||
rotation: Camera
|
||||
fx: EffectRCDConstruct4
|
||||
fx: EffectRCDConstruct3
|
||||
|
||||
- type: rcd
|
||||
id: Firelock
|
||||
@@ -189,11 +189,11 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/firelock.png
|
||||
mode: ConstructObject
|
||||
prototype: Firelock
|
||||
cost: 4
|
||||
delay: 3
|
||||
cost: 2
|
||||
delay: 2
|
||||
collisionMask: FullTileMask
|
||||
rotation: Camera
|
||||
fx: EffectRCDConstruct3
|
||||
fx: EffectRCDConstruct2
|
||||
|
||||
# Lighting
|
||||
- type: rcd
|
||||
@@ -202,12 +202,12 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/tube_light.png
|
||||
mode: ConstructObject
|
||||
prototype: Poweredlight
|
||||
cost: 2
|
||||
delay: 1
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: TabletopMachineMask
|
||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: BulbLight
|
||||
@@ -215,12 +215,12 @@
|
||||
sprite: /Textures/Interface/Radial/RCD/bulb_light.png
|
||||
mode: ConstructObject
|
||||
prototype: PoweredSmallLight
|
||||
cost: 2
|
||||
delay: 1
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: TabletopMachineMask
|
||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
# Electrical
|
||||
- type: rcd
|
||||
@@ -278,3 +278,28 @@
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd # WD
|
||||
id: APC
|
||||
category: Electrical
|
||||
sprite: /Textures/Structures/Power/apc.rsi/static.png
|
||||
mode: ConstructObject
|
||||
prototype: APCConstructed
|
||||
cost: 4
|
||||
delay: 1
|
||||
collisionMask: None
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
- type: rcd # WD
|
||||
id: Camera
|
||||
category: Electrical
|
||||
sprite: /Textures/Structures/Wallmounts/camera.rsi/cameracase.png
|
||||
mode: ConstructObject
|
||||
prototype: SurveillanceCameraConstructed
|
||||
cost: 1
|
||||
delay: 1
|
||||
collisionMask: TabletopMachineMask
|
||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
@@ -54,6 +54,7 @@
|
||||
- AutolatheHyperConvectionMachineCircuitboard
|
||||
- ProtolatheHyperConvectionMachineCircuitboard
|
||||
- SheetifierMachineCircuitboard
|
||||
- RCDRecipe # WD
|
||||
|
||||
- type: technology
|
||||
id: PowerGeneration
|
||||
@@ -85,6 +86,7 @@
|
||||
recipeUnlocks:
|
||||
- ThermomachineFreezerMachineCircuitBoard
|
||||
- GasRecyclerMachineCircuitboard
|
||||
- RapidPipeDispenserRecipe # WD
|
||||
|
||||
- type: technology
|
||||
id: RipleyAPLU
|
||||
|
||||
@@ -1,51 +1,43 @@
|
||||
- type: moodEffect
|
||||
id: Handcuffed
|
||||
desc: "Кажется мои выходки кто-то заметил."
|
||||
description: "Кажется мои выходки кто-то заметил."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
|
||||
- type: moodEffect
|
||||
id: Suffocating
|
||||
desc: "НЕ.. МОГУ... ДЫШАТЬ..."
|
||||
description: "НЕ.. МОГУ... ДЫШАТЬ..."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
timeout: 1
|
||||
|
||||
- type: moodEffect
|
||||
id: OnFire
|
||||
desc: "ГОРЮ!!!"
|
||||
description: "ГОРЮ!!!"
|
||||
moodChange: enum.MoodChangeLevel.Big
|
||||
positiveEffect: false
|
||||
|
||||
- type: moodEffect
|
||||
id: Creampied
|
||||
desc: "Меня окремили. На вкус как пирог."
|
||||
description: "Меня окремили. На вкус как пирог."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
timeout: 3
|
||||
|
||||
- type: moodEffect
|
||||
id: MobSlipped
|
||||
desc: "Опять поскальзываюсь. Надо быть аккуратней."
|
||||
description: "Опять поскальзываюсь. Надо быть аккуратней."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
timeout: 3
|
||||
|
||||
- type: moodEffect
|
||||
id: MobVomit
|
||||
desc: "Меня только что вырвало. Мерзость."
|
||||
description: "Меня только что вырвало. Мерзость."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
timeout: 8
|
||||
|
||||
- type: moodEffect
|
||||
id: MobLowPressure
|
||||
desc: "Меня сейчас разорвёт наружу!"
|
||||
description: "Меня сейчас разорвёт наружу!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
|
||||
- type: moodEffect
|
||||
id: MobHighPressure
|
||||
desc: "На меня оказывается огромное давление!"
|
||||
description: "На меня оказывается огромное давление!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
|
||||
@@ -1,66 +1,66 @@
|
||||
- type: moodEffect
|
||||
id: BeingHugged
|
||||
desc: "Обнимашки - круто."
|
||||
description: "Обнимашки - круто."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 2
|
||||
|
||||
- type: moodEffect
|
||||
id: BeingPet
|
||||
desc: "Меня погладили!"
|
||||
description: "Меня погладили!"
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 2
|
||||
|
||||
- type: moodEffect
|
||||
id: ArcadePlay
|
||||
desc: "Я весело поиграл в интересную аркаду."
|
||||
description: "Я весело поиграл в интересную аркаду."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 8
|
||||
|
||||
- type: moodEffect
|
||||
id: GotBlessed
|
||||
desc: "Меня благословили."
|
||||
description: "Меня благословили."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 8
|
||||
|
||||
- type: moodEffect
|
||||
id: PetAnimal
|
||||
desc: "Животные такие милые! Не могу перестать их гладить!"
|
||||
description: "Животные такие милые! Не могу перестать их гладить!"
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 5
|
||||
|
||||
- type: moodEffect
|
||||
id: SavedLife
|
||||
desc: "Так приятно спасать чью-то жизнь."
|
||||
description: "Так приятно спасать чью-то жизнь."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 8
|
||||
|
||||
- type: moodEffect
|
||||
id: TraitorFocused #Used for traitors to boost their goals completion.
|
||||
desc: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
|
||||
description: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
|
||||
- type: moodEffect
|
||||
id: RevolutionFocused #Used for revolution
|
||||
desc: "СЛАВА РЕВОЛЮЦИИ!!!"
|
||||
description: "СЛАВА РЕВОЛЮЦИИ!!!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
|
||||
- type: moodEffect
|
||||
id: CultFocused
|
||||
desc: "Знаю правду, славим великого!"
|
||||
description: "Знаю правду, славим великого!"
|
||||
moodChange: enum.MoodChangeLevel.Big
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
|
||||
- type: moodEffect
|
||||
id: Stimulator
|
||||
desc: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
|
||||
description: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
timeout: 2
|
||||
@@ -1,87 +1,78 @@
|
||||
#Hunger
|
||||
- type: moodEffect
|
||||
id: HungerOverfed
|
||||
desc: "Во мне столько жира..."
|
||||
description: "Во мне столько жира..."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
category: "Hunger"
|
||||
|
||||
- type: moodEffect
|
||||
id: HungerOkay
|
||||
desc: "Мой желудок полон!"
|
||||
description: "Мой желудок полон!"
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
category: "Hunger"
|
||||
|
||||
- type: moodEffect
|
||||
id: HungerPeckish
|
||||
desc: "Хочу есть."
|
||||
description: "Хочу есть."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
category: "Hunger"
|
||||
|
||||
- type: moodEffect
|
||||
id: HungerStarving
|
||||
desc: "Голодаю!"
|
||||
description: "Голодаю!"
|
||||
moodChange: enum.MoodChangeLevel.Big
|
||||
positiveEffect: false
|
||||
category: "Hunger"
|
||||
|
||||
#Thirst
|
||||
- type: moodEffect
|
||||
id: ThirstOverHydrated
|
||||
desc: "СЛИШКОМ МНОГО ВОДЫ..."
|
||||
description: "СЛИШКОМ МНОГО ВОДЫ..."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
category: "Thirst"
|
||||
|
||||
- type: moodEffect
|
||||
id: ThirstOkay
|
||||
desc: "Не хочу пить."
|
||||
description: "Не хочу пить."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
category: "Thirst"
|
||||
|
||||
- type: moodEffect
|
||||
id: ThirstThirsty
|
||||
desc: "Хочу пить."
|
||||
description: "Хочу пить."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
category: "Thirst"
|
||||
|
||||
- type: moodEffect
|
||||
id: ThirstParched
|
||||
desc: "ВОДЫ!"
|
||||
description: "ВОДЫ!"
|
||||
moodChange: enum.MoodChangeLevel.Big
|
||||
positiveEffect: false
|
||||
category: "Thirst"
|
||||
|
||||
#Health
|
||||
- type: moodEffect
|
||||
id: HealthNoDamage
|
||||
desc: "Чувствую себя лишённым боли."
|
||||
description: "Чувствую себя лишённым боли."
|
||||
moodChange: enum.MoodChangeLevel.None
|
||||
positiveEffect: true
|
||||
positive: true
|
||||
hidden: true
|
||||
category: "Health"
|
||||
|
||||
- type: moodEffect
|
||||
id: HealthLightDamage
|
||||
desc: "Мои ссадины жгутся."
|
||||
description: "Мои ссадины жгутся."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: false
|
||||
category: "Health"
|
||||
|
||||
- type: moodEffect
|
||||
id: HealthSevereDamage
|
||||
desc: "Сильная боль пронзает меня."
|
||||
description: "Сильная боль пронзает меня."
|
||||
moodChange: enum.MoodChangeLevel.Medium
|
||||
positiveEffect: false
|
||||
category: "Health"
|
||||
|
||||
- type: moodEffect
|
||||
id: HealthHeavyDamage
|
||||
desc: "Агония гложет мою душу!"
|
||||
description: "Агония гложет мою душу!"
|
||||
moodChange: enum.MoodChangeLevel.Large
|
||||
positiveEffect: false
|
||||
category: "Health"
|
||||
|
||||
43
Resources/Prototypes/_White/RCD/categories.yml
Normal file
43
Resources/Prototypes/_White/RCD/categories.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
- type: rcdCategory
|
||||
id: WallsAndFlooring
|
||||
spritePath: /Textures/Interface/Radial/RCD/walls_and_flooring.png
|
||||
|
||||
- type: rcdCategory
|
||||
id: WindowsAndGrilles
|
||||
spritePath: /Textures/Interface/Radial/RCD/windows_and_grilles.png
|
||||
|
||||
- type: rcdCategory
|
||||
id: Airlocks
|
||||
spritePath: /Textures/Interface/Radial/RCD/airlocks.png
|
||||
|
||||
- type: rcdCategory
|
||||
id: Electrical
|
||||
spritePath: /Textures/Interface/Radial/RCD/multicoil.png
|
||||
|
||||
- type: rcdCategory
|
||||
id: Lighting
|
||||
spritePath: /Textures/Interface/Radial/RCD/lighting.png
|
||||
|
||||
- type: rcdCategory
|
||||
id: Pipes
|
||||
spritePath:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pipe.rsi
|
||||
state: pipeFourway
|
||||
|
||||
- type: rcdCategory
|
||||
id: GasDevices
|
||||
spritePath:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/vent.rsi
|
||||
state: vent_off
|
||||
|
||||
- type: rcdCategory
|
||||
id: DisposalPipes
|
||||
spritePath:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: conpipe-t
|
||||
|
||||
- type: rcdCategory
|
||||
id: DisposalUnits
|
||||
spritePath:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: disposal
|
||||
482
Resources/Prototypes/_White/RPD/rpd.yml
Normal file
482
Resources/Prototypes/_White/RPD/rpd.yml
Normal file
@@ -0,0 +1,482 @@
|
||||
# Pipes
|
||||
|
||||
- type: rcd
|
||||
id: PipeStraight
|
||||
category: Pipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pipe.rsi
|
||||
state: pipeStraight
|
||||
mode: ConstructObject
|
||||
prototype: GasPipeStraight
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: PipeBend
|
||||
category: Pipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pipe.rsi
|
||||
state: pipeBend
|
||||
mode: ConstructObject
|
||||
prototype: GasPipeBend
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: PipeTJunction
|
||||
category: Pipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pipe.rsi
|
||||
state: pipeTJunction
|
||||
mode: ConstructObject
|
||||
prototype: GasPipeTJunction
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: PipeFourway
|
||||
category: Pipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pipe.rsi
|
||||
state: pipeFourway
|
||||
mode: ConstructObject
|
||||
prototype: GasPipeFourway
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
# Gas devices
|
||||
|
||||
- type: rcd
|
||||
id: GasCanisterPort
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/gascanisterport.rsi
|
||||
state: gasCanisterPort
|
||||
mode: ConstructObject
|
||||
prototype: GasPort
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasFilter
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/gasfilter.rsi
|
||||
state: gasFilter
|
||||
mode: ConstructObject
|
||||
prototype: GasFilter
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasMixer
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/gasmixer.rsi
|
||||
state: gasMixer
|
||||
mode: ConstructObject
|
||||
prototype: GasMixer
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasOutletInjector
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/outletinjector.rsi
|
||||
state: injector
|
||||
mode: ConstructObject
|
||||
prototype: GasOutletInjector
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasPressurePump
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pump.rsi
|
||||
state: pumpPressure
|
||||
mode: ConstructObject
|
||||
prototype: GasPressurePump
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasVolumePump
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pump.rsi
|
||||
state: pumpVolume
|
||||
mode: ConstructObject
|
||||
prototype: GasVolumePump
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasValve
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pump.rsi
|
||||
state: pumpManualValve
|
||||
mode: ConstructObject
|
||||
prototype: GasValve
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: SignalControlledValve
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pump.rsi
|
||||
state: pumpDigitalValve
|
||||
mode: ConstructObject
|
||||
prototype: SignalControlledValve
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: PressureControlledValve
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/pneumaticvalve.rsi
|
||||
state: off
|
||||
mode: ConstructObject
|
||||
prototype: PressureControlledValve
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasVentScrubber
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/scrubber.rsi
|
||||
state: scrub_off
|
||||
mode: ConstructObject
|
||||
prototype: GasVentScrubber
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasVentPump
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/vent.rsi
|
||||
state: vent_off
|
||||
mode: ConstructObject
|
||||
prototype: GasVentPump
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: GasPassiveVent
|
||||
category: GasDevices
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/Atmospherics/vent.rsi
|
||||
state: vent_off
|
||||
mode: ConstructObject
|
||||
prototype: GasPassiveVent
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
# Disposal pipes
|
||||
|
||||
- type: rcd
|
||||
id: DisposalPipe
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-s
|
||||
mode: ConstructObject
|
||||
prototype: DisposalPipe
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalBend
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-c
|
||||
mode: ConstructObject
|
||||
prototype: DisposalBend
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalJunction
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-j1
|
||||
mode: ConstructObject
|
||||
prototype: DisposalJunction
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalJunctionFlipped
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-j1
|
||||
mode: ConstructObject
|
||||
prototype: DisposalJunctionFlipped
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalYJunction
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-y
|
||||
mode: ConstructObject
|
||||
prototype: DisposalYJunction
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalRouter
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-j1s
|
||||
mode: ConstructObject
|
||||
prototype: DisposalRouter
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalRouterFlipped
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-j2s
|
||||
mode: ConstructObject
|
||||
prototype: DisposalRouterFlipped
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalTagger
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: pipe-tagger
|
||||
mode: ConstructObject
|
||||
prototype: DisposalTagger
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalSignalRouter
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: signal-router
|
||||
mode: ConstructObject
|
||||
prototype: DisposalSignalRouter
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalSignalRouterFlipped
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: signal-router-flipped
|
||||
mode: ConstructObject
|
||||
prototype: DisposalSignalRouterFlipped
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
- type: rcd
|
||||
id: DisposalTrunk
|
||||
category: DisposalPipes
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: conpipe-t
|
||||
mode: ConstructObject
|
||||
prototype: DisposalTrunk
|
||||
cost: 1
|
||||
delay: 0
|
||||
collisionMask: InteractImpassable
|
||||
rules:
|
||||
- MustBuildOnSubfloor
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct0
|
||||
|
||||
# Disposal units
|
||||
|
||||
- type: rcd
|
||||
id: DisposalUnit
|
||||
category: DisposalUnits
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: disposal
|
||||
mode: ConstructObject
|
||||
prototype: DisposalUnit
|
||||
cost: 2
|
||||
delay: 1
|
||||
collisionMask: InteractImpassable
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
- type: rcd
|
||||
id: MailingUnit
|
||||
category: DisposalUnits
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Piping/disposal.rsi
|
||||
state: mailing
|
||||
mode: ConstructObject
|
||||
prototype: MailingUnit
|
||||
cost: 2
|
||||
delay: 1
|
||||
collisionMask: InteractImpassable
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
- type: rcd
|
||||
id: ToiletEmpty
|
||||
category: DisposalUnits
|
||||
sprite:
|
||||
sprite: /Textures/Structures/Furniture/toilet.rsi
|
||||
state: condisposal
|
||||
mode: ConstructObject
|
||||
prototype: ToiletEmpty
|
||||
cost: 2
|
||||
delay: 1
|
||||
collisionMask: InteractImpassable
|
||||
rotation: User
|
||||
fx: EffectRCDConstruct1
|
||||
|
||||
@@ -167,3 +167,19 @@
|
||||
completetime: 3
|
||||
materials:
|
||||
Steel: 800
|
||||
|
||||
- type: latheRecipe
|
||||
id: RapidPipeDispenserRecipe
|
||||
result: RapidPipeDispenser
|
||||
completetime: 1
|
||||
materials:
|
||||
Steel: 300
|
||||
Glass: 300
|
||||
|
||||
- type: latheRecipe
|
||||
id: RCDRecipe
|
||||
result: RCD
|
||||
completetime: 1
|
||||
materials:
|
||||
Steel: 300
|
||||
Glass: 300
|
||||
|
||||
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/equipped-BELT.png
Normal file
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/equipped-BELT.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/icon.png
Normal file
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 875 B |
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/inhand-left.png
Normal file
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/inhand-left.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/inhand-right.png
Normal file
BIN
Resources/Textures/White/Items/Tools/rpd.rsi/inhand-right.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
26
Resources/Textures/White/Items/Tools/rpd.rsi/meta.json
Normal file
26
Resources/Textures/White/Items/Tools/rpd.rsi/meta.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from cev-eris at commit https://github.com/discordia-space/CEV-Eris/commit/ce025775f73b66934ca96f3a8edc30993ea70b4d and modified by Swept",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "equipped-BELT",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 701 B |
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "",
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user