Баффы (#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
|
// If the placer has not changed, exit
|
||||||
_rcdSystem.UpdateCachedPrototype(heldEntity.Value, rcd);
|
_rcdSystem.UpdateCachedPrototype(rcd);
|
||||||
|
|
||||||
if (heldEntity == placerEntity && rcd.CachedPrototype.Prototype == placerProto)
|
if (heldEntity == placerEntity && rcd.CachedPrototype.Prototype == placerProto)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<ui:RadialMenu xmlns="https://spacestation14.io"
|
<ui:RadialMenu xmlns="https://spacestation14.io"
|
||||||
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
|
xmlns:ui="clr-namespace:Content.Client.UserInterface.Controls"
|
||||||
xmlns:rcd="clr-namespace:Content.Client.RCD"
|
|
||||||
BackButtonStyleClass="RadialMenuBackButton"
|
BackButtonStyleClass="RadialMenuBackButton"
|
||||||
CloseButtonStyleClass="RadialMenuCloseButton"
|
CloseButtonStyleClass="RadialMenuCloseButton"
|
||||||
VerticalExpand="True"
|
VerticalExpand="True"
|
||||||
@@ -12,36 +11,9 @@
|
|||||||
|
|
||||||
<!-- Entry layer (shows main categories) -->
|
<!-- Entry layer (shows main categories) -->
|
||||||
<ui:RadialContainer Name="Main" VerticalExpand="True" HorizontalExpand="True" Radius="64" ReserveSpaceForHiddenChildren="False">
|
<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">
|
<!-- Categories -->
|
||||||
<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>
|
|
||||||
</ui:RadialContainer>
|
</ui:RadialContainer>
|
||||||
|
|
||||||
<!-- Walls and flooring -->
|
<!-- Another categories -->
|
||||||
<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"/>
|
|
||||||
|
|
||||||
</ui:RadialMenu>
|
</ui:RadialMenu>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Linq;
|
||||||
using Content.Client.UserInterface.Controls;
|
using Content.Client.UserInterface.Controls;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
using Content.Shared.RCD;
|
using Content.Shared.RCD;
|
||||||
@@ -10,6 +11,10 @@ using Robust.Client.UserInterface.Controls;
|
|||||||
using Robust.Client.UserInterface.XAML;
|
using Robust.Client.UserInterface.XAML;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using System.Numerics;
|
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;
|
namespace Content.Client.RCD;
|
||||||
|
|
||||||
@@ -40,13 +45,12 @@ public sealed partial class RCDMenu : RadialMenu
|
|||||||
// Find the main radial container
|
// Find the main radial container
|
||||||
var main = FindControl<RadialContainer>("Main");
|
var main = FindControl<RadialContainer>("Main");
|
||||||
|
|
||||||
if (main == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Populate secondary radial containers
|
// Populate secondary radial containers
|
||||||
if (!_entManager.TryGetComponent<RCDComponent>(owner, out var rcd))
|
if (!_entManager.TryGetComponent<RCDComponent>(owner, out var rcd))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
SetupCategories(main, rcd); // WD
|
||||||
|
|
||||||
foreach (var protoId in rcd.AvailablePrototypes)
|
foreach (var protoId in rcd.AvailablePrototypes)
|
||||||
{
|
{
|
||||||
if (!_protoManager.TryIndex(protoId, out var proto))
|
if (!_protoManager.TryIndex(protoId, out var proto))
|
||||||
@@ -55,12 +59,9 @@ public sealed partial class RCDMenu : RadialMenu
|
|||||||
if (proto.Mode == RcdMode.Invalid)
|
if (proto.Mode == RcdMode.Invalid)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var parent = FindControl<RadialContainer>(proto.Category);
|
var parent = Children.First(c => c.Name == proto.Category.Id);
|
||||||
|
|
||||||
if (parent == null)
|
var tooltip = Loc.GetString(proto.Name);
|
||||||
continue;
|
|
||||||
|
|
||||||
var tooltip = Loc.GetString(proto.SetName);
|
|
||||||
|
|
||||||
if ((proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject) &&
|
if ((proto.Mode == RcdMode.ConstructTile || proto.Mode == RcdMode.ConstructObject) &&
|
||||||
proto.Prototype != null && _protoManager.TryIndex(proto.Prototype, out var entProto))
|
proto.Prototype != null && _protoManager.TryIndex(proto.Prototype, out var entProto))
|
||||||
@@ -80,17 +81,16 @@ public sealed partial class RCDMenu : RadialMenu
|
|||||||
|
|
||||||
if (proto.Sprite != null)
|
if (proto.Sprite != null)
|
||||||
{
|
{
|
||||||
var tex = new TextureRect()
|
var tex = new TextureRect
|
||||||
{
|
{
|
||||||
VerticalAlignment = VAlignment.Center,
|
VerticalAlignment = VAlignment.Center,
|
||||||
HorizontalAlignment = HAlignment.Center,
|
HorizontalAlignment = HAlignment.Center,
|
||||||
Texture = _spriteSystem.Frame0(proto.Sprite),
|
Texture = GetSprite(proto.Sprite),
|
||||||
TextureScale = new Vector2(2f, 2f),
|
TextureScale = new Vector2(2f, 2f),
|
||||||
};
|
};
|
||||||
|
|
||||||
button.AddChild(tex);
|
button.AddChild(tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
parent.AddChild(button);
|
parent.AddChild(button);
|
||||||
|
|
||||||
// Ensure that the button that transitions the menu to the associated category layer
|
// 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;
|
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)
|
private void AddRCDMenuButtonOnClickActions(Control control)
|
||||||
{
|
{
|
||||||
var radialContainer = control as RadialContainer;
|
var radialContainer = control as RadialContainer;
|
||||||
@@ -140,11 +184,11 @@ public sealed partial class RCDMenu : RadialMenu
|
|||||||
if (_playerManager.LocalSession?.AttachedEntity != null &&
|
if (_playerManager.LocalSession?.AttachedEntity != null &&
|
||||||
_protoManager.TryIndex(castChild.ProtoId, out var proto))
|
_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)
|
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 &&
|
if (proto.Prototype != null &&
|
||||||
_protoManager.TryIndex(proto.Prototype, out var entProto))
|
_protoManager.TryIndex(proto.Prototype, out var entProto))
|
||||||
|
|||||||
@@ -70,9 +70,15 @@ public class RadialContainer : LayoutContainer
|
|||||||
|
|
||||||
protected override void Draw(DrawingHandleScreen handle)
|
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 children = ReserveSpaceForHiddenChildren ? Children : Children.Where(x => x.Visible);
|
||||||
var childCount = children.Count();
|
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
|
// Determine the size of the arc, accounting for clockwise and anti-clockwise arrangements
|
||||||
var arc = AngularRange.Y - AngularRange.X;
|
var arc = AngularRange.Y - AngularRange.X;
|
||||||
arc = (arc < 0) ? MathF.Tau + arc : arc;
|
arc = (arc < 0) ? MathF.Tau + arc : arc;
|
||||||
|
|||||||
@@ -217,7 +217,6 @@ namespace Content.Server.GameTicking
|
|||||||
|
|
||||||
var readyPlayers = new List<ICommonSession>();
|
var readyPlayers = new List<ICommonSession>();
|
||||||
var readyPlayerProfiles = new Dictionary<NetUserId, HumanoidCharacterProfile>();
|
var readyPlayerProfiles = new Dictionary<NetUserId, HumanoidCharacterProfile>();
|
||||||
var autoDeAdmin = _cfg.GetCVar(CCVars.AdminDeadminOnJoin);
|
|
||||||
var stalinBunkerEnabled = _configurationManager.GetCVar(WhiteCVars.StalinEnabled);
|
var stalinBunkerEnabled = _configurationManager.GetCVar(WhiteCVars.StalinEnabled);
|
||||||
|
|
||||||
foreach (var (userId, status) in _playerGameStatuses)
|
foreach (var (userId, status) in _playerGameStatuses)
|
||||||
@@ -225,11 +224,17 @@ namespace Content.Server.GameTicking
|
|||||||
if (LobbyEnabled && status != PlayerGameStatus.ReadyToPlay) continue;
|
if (LobbyEnabled && status != PlayerGameStatus.ReadyToPlay) continue;
|
||||||
if (!_playerManager.TryGetSessionById(userId, out var session)) 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))
|
if (autoDeAdmin && _adminManager.IsAdmin(session))
|
||||||
{
|
{
|
||||||
_adminManager.DeAdmin(session);
|
_adminManager.DeAdmin(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
if (stalinBunkerEnabled)
|
if (stalinBunkerEnabled)
|
||||||
{
|
{
|
||||||
await _stalinManager.RefreshUsersData();
|
await _stalinManager.RefreshUsersData();
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ namespace Content.Server._White.Mood;
|
|||||||
[RegisterComponent]
|
[RegisterComponent]
|
||||||
public sealed partial class MoodComponent : Component
|
public sealed partial class MoodComponent : Component
|
||||||
{
|
{
|
||||||
[DataField("currentMoodLevel"), ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public float CurrentMoodLevel;
|
public float CurrentMoodLevel;
|
||||||
|
|
||||||
[DataField("currentMoodThreshold"), ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public MoodThreshold CurrentMoodThreshold;
|
public MoodThreshold CurrentMoodThreshold;
|
||||||
|
|
||||||
[DataField("lastThreshold"), ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public MoodThreshold LastThreshold;
|
public MoodThreshold LastThreshold;
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadOnly)]
|
[ViewVariables(VVAccess.ReadOnly)]
|
||||||
@@ -23,22 +23,22 @@ public sealed partial class MoodComponent : Component
|
|||||||
[ViewVariables(VVAccess.ReadOnly)]
|
[ViewVariables(VVAccess.ReadOnly)]
|
||||||
public readonly Dictionary<string, float> UncategorisedEffects = new();
|
public readonly Dictionary<string, float> UncategorisedEffects = new();
|
||||||
|
|
||||||
[DataField("slowdownSpeedModifier"), ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
public float SlowdownSpeedModifier = 0.75f;
|
public float SlowdownSpeedModifier = 0.75f;
|
||||||
|
|
||||||
[DataField("increaseSpeedModifier"), ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
public float IncreaseSpeedModifier = 1.15f;
|
public float IncreaseSpeedModifier = 1.15f;
|
||||||
|
|
||||||
[DataField("increaseCritThreshold"), ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
public float IncreaseCritThreshold = 1.2f;
|
public float IncreaseCritThreshold = 1.2f;
|
||||||
|
|
||||||
[DataField("decreaseCritThreshold"), ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
public float DecreaseCritThreshold = 0.9f;
|
public float DecreaseCritThreshold = 0.9f;
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadOnly)]
|
[ViewVariables(VVAccess.ReadOnly)]
|
||||||
public FixedPoint2 CritThresholdBeforeModify;
|
public FixedPoint2 CritThresholdBeforeModify;
|
||||||
|
|
||||||
[DataField("moodThresholds", customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, float>))]
|
[DataField(customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, float>))]
|
||||||
public Dictionary<MoodThreshold, float> MoodThresholds = new()
|
public Dictionary<MoodThreshold, float> MoodThresholds = new()
|
||||||
{
|
{
|
||||||
{ MoodThreshold.VeryVeryGood, 10.0f },
|
{ MoodThreshold.VeryVeryGood, 10.0f },
|
||||||
@@ -53,7 +53,7 @@ public sealed partial class MoodComponent : Component
|
|||||||
{ MoodThreshold.Dead, 0.0f }
|
{ MoodThreshold.Dead, 0.0f }
|
||||||
};
|
};
|
||||||
|
|
||||||
[DataField("moodThresholdsAlerts", customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, AlertType>))]
|
[DataField(customTypeSerializer: typeof(DictionarySerializer<MoodThreshold, AlertType>))]
|
||||||
public Dictionary<MoodThreshold, AlertType> MoodThresholdsAlerts = new()
|
public Dictionary<MoodThreshold, AlertType> MoodThresholdsAlerts = new()
|
||||||
{
|
{
|
||||||
{ MoodThreshold.Dead, AlertType.MoodDead },
|
{ MoodThreshold.Dead, AlertType.MoodDead },
|
||||||
@@ -69,7 +69,7 @@ public sealed partial class MoodComponent : Component
|
|||||||
{ MoodThreshold.Insane, AlertType.Insane }
|
{ MoodThreshold.Insane, AlertType.Insane }
|
||||||
};
|
};
|
||||||
|
|
||||||
[DataField("moodChangeValues", customTypeSerializer: typeof(DictionarySerializer<Enum, float>))]
|
[DataField(customTypeSerializer: typeof(DictionarySerializer<Enum, float>))]
|
||||||
public Dictionary<Enum, float> MoodChangeValues = new()
|
public Dictionary<Enum, float> MoodChangeValues = new()
|
||||||
{
|
{
|
||||||
{ MoodChangeLevel.None , 0.0f },
|
{ MoodChangeLevel.None , 0.0f },
|
||||||
@@ -80,7 +80,7 @@ public sealed partial class MoodComponent : Component
|
|||||||
{ MoodChangeLevel.Large , 2f }
|
{ MoodChangeLevel.Large , 2f }
|
||||||
};
|
};
|
||||||
|
|
||||||
[DataField("healthMoodEffectsThresholds", customTypeSerializer: typeof(DictionarySerializer<string, float>))]
|
[DataField(customTypeSerializer: typeof(DictionarySerializer<string, float>))]
|
||||||
public Dictionary<string, float> HealthMoodEffectsThresholds = new()
|
public Dictionary<string, float> HealthMoodEffectsThresholds = new()
|
||||||
{
|
{
|
||||||
{ "HealthHeavyDamage", 80f },
|
{ "HealthHeavyDamage", 80f },
|
||||||
|
|||||||
@@ -108,8 +108,8 @@ public sealed class MoodSystem : EntitySystem
|
|||||||
if (!component.MoodChangeValues.TryGetValue(oldPrototype.MoodChange, out var oldValue))
|
if (!component.MoodChangeValues.TryGetValue(oldPrototype.MoodChange, out var oldValue))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
amount += (oldPrototype.PositiveEffect ? -oldValue : oldValue) +
|
amount += (oldPrototype.Positive ? -oldValue : oldValue) +
|
||||||
(prototype.PositiveEffect ? value : -value);
|
(prototype.Positive ? value : -value);
|
||||||
|
|
||||||
component.CategorisedEffects[prototype.Category] = prototype.ID;
|
component.CategorisedEffects[prototype.Category] = prototype.ID;
|
||||||
}
|
}
|
||||||
@@ -117,7 +117,7 @@ public sealed class MoodSystem : EntitySystem
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
component.CategorisedEffects.Add(prototype.Category, prototype.ID);
|
component.CategorisedEffects.Add(prototype.Category, prototype.ID);
|
||||||
amount += prototype.PositiveEffect ? value : -value;
|
amount += prototype.Positive ? value : -value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prototype.Timeout != 0)
|
if (prototype.Timeout != 0)
|
||||||
@@ -132,7 +132,7 @@ public sealed class MoodSystem : EntitySystem
|
|||||||
if (component.UncategorisedEffects.TryGetValue(prototype.ID, out _))
|
if (component.UncategorisedEffects.TryGetValue(prototype.ID, out _))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var effectValue = prototype.PositiveEffect ? value : -value;
|
var effectValue = prototype.Positive ? value : -value;
|
||||||
|
|
||||||
component.UncategorisedEffects.Add(prototype.ID, effectValue);
|
component.UncategorisedEffects.Add(prototype.ID, effectValue);
|
||||||
amount += effectValue;
|
amount += effectValue;
|
||||||
@@ -173,7 +173,7 @@ public sealed class MoodSystem : EntitySystem
|
|||||||
if (!comp.MoodChangeValues.TryGetValue(currentProto.MoodChange, out var value))
|
if (!comp.MoodChangeValues.TryGetValue(currentProto.MoodChange, out var value))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
amount += currentProto.PositiveEffect ? -value : value;
|
amount += currentProto.Positive ? -value : value;
|
||||||
comp.CategorisedEffects.Remove(category);
|
comp.CategorisedEffects.Remove(category);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +205,7 @@ public sealed class MoodSystem : EntitySystem
|
|||||||
if (!component.MoodChangeValues.TryGetValue(prototype.MoodChange, out var value))
|
if (!component.MoodChangeValues.TryGetValue(prototype.MoodChange, out var value))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
amount += prototype.PositiveEffect ? value : -value;
|
amount += prototype.Positive ? value : -value;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var (_, value) in component.UncategorisedEffects)
|
foreach (var (_, value) in component.UncategorisedEffects)
|
||||||
@@ -438,7 +438,7 @@ public sealed partial class ShowMoodEffects : IAlertClick
|
|||||||
{
|
{
|
||||||
var chatManager = IoCManager.Resolve<IChatManager>();
|
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]";
|
var msg = $"[font size=10][color={color}]{proto.Description}[/color][/font]";
|
||||||
|
|
||||||
chatManager.ChatMessageToOne(ChatChannel.Emotes, msg, msg, EntityUid.Invalid, false,
|
chatManager.ChatMessageToOne(ChatChannel.Emotes, msg, msg, EntityUid.Invalid, false,
|
||||||
|
|||||||
@@ -838,7 +838,7 @@ namespace Content.Shared.CCVar
|
|||||||
/// de-admin them.
|
/// de-admin them.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<bool> AdminDeadminOnJoin =
|
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>
|
/// <summary>
|
||||||
/// Overrides the name the client sees in ahelps. Set empty to disable.
|
/// 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.
|
/// If 0, appearing as a new player is disabled.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<int> NewPlayerThreshold =
|
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>
|
/// <summary>
|
||||||
/// How long an admin client can go without any input before being considered AFK.
|
/// How long an admin client can go without any input before being considered AFK.
|
||||||
@@ -1346,7 +1346,7 @@ namespace Content.Shared.CCVar
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Config for when the restart vote should be allowed to be called based on percentage of ghosts.
|
/// Config for when the restart vote should be allowed to be called based on percentage of ghosts.
|
||||||
///
|
/// </summary>
|
||||||
public static readonly CVarDef<int> VoteRestartGhostPercentage =
|
public static readonly CVarDef<int> VoteRestartGhostPercentage =
|
||||||
CVarDef.Create("vote.restart_ghost_percentage", 75, CVar.SERVERONLY);
|
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.
|
/// Whether the arrivals terminal should be on a planet map.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<bool> ArrivalsPlanet =
|
public static readonly CVarDef<bool> ArrivalsPlanet =
|
||||||
CVarDef.Create("shuttle.arrivals_planet", true, CVar.SERVERONLY);
|
CVarDef.Create("shuttle.arrivals_planet", false, CVar.SERVERONLY);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether the arrivals shuttle is enabled.
|
/// 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.
|
/// Cooldown between arrivals departures. This should be longer than the FTL time or it will double cycle.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<float> ArrivalsCooldown =
|
public static readonly CVarDef<float> ArrivalsCooldown =
|
||||||
CVarDef.Create("shuttle.arrivals_cooldown", 50f, CVar.SERVERONLY);
|
CVarDef.Create("shuttle.arrivals_cooldown", 10f, CVar.SERVERONLY);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Are players allowed to return on the arrivals shuttle.
|
/// Are players allowed to return on the arrivals shuttle.
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public sealed class HungerSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//WD start
|
//WD start
|
||||||
if (_net.IsServer)
|
if (_net.IsServer && component.CurrentThreshold != HungerThreshold.Overfed)
|
||||||
{
|
{
|
||||||
var ev = new MoodEffectEvent("Hunger" + component.CurrentThreshold);
|
var ev = new MoodEffectEvent("Hunger" + component.CurrentThreshold);
|
||||||
RaiseLocalEvent(uid, ev);
|
RaiseLocalEvent(uid, ev);
|
||||||
|
|||||||
@@ -113,8 +113,11 @@ public sealed class ThirstSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WD start
|
// WD start
|
||||||
|
if (component.CurrentThirstThreshold != ThirstThreshold.OverHydrated)
|
||||||
|
{
|
||||||
var ev = new MoodEffectEvent("Thirst" + component.CurrentThirstThreshold);
|
var ev = new MoodEffectEvent("Thirst" + component.CurrentThirstThreshold);
|
||||||
RaiseLocalEvent(uid, ev);
|
RaiseLocalEvent(uid, ev);
|
||||||
|
}
|
||||||
// WD end
|
// WD end
|
||||||
|
|
||||||
switch (component.CurrentThirstThreshold)
|
switch (component.CurrentThirstThreshold)
|
||||||
|
|||||||
@@ -13,4 +13,8 @@ public sealed partial class RCDAmmoComponent : Component
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("charges"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
[DataField("charges"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||||
public int Charges = 30;
|
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 Content.Shared.RCD.Systems;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
@@ -33,6 +34,12 @@ public sealed partial class RCDComponent : Component
|
|||||||
[DataField, AutoNetworkedField]
|
[DataField, AutoNetworkedField]
|
||||||
public ProtoId<RCDPrototype> ProtoId { get; set; } = "Invalid";
|
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>
|
/// <summary>
|
||||||
/// A cached copy of currently selected RCD prototype
|
/// A cached copy of currently selected RCD prototype
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Content.Shared._White.RCD;
|
||||||
using Content.Shared.Physics;
|
using Content.Shared.Physics;
|
||||||
using Robust.Shared.Physics.Collision.Shapes;
|
using Robust.Shared.Physics.Collision.Shapes;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
@@ -23,14 +24,14 @@ public sealed class RCDPrototype : IPrototype
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name associated with the prototype
|
/// The name associated with the prototype
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("name"), ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public string SetName { get; private set; } = "Unknown";
|
public string Name { get; private set; } = "Unknown";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the radial container that this prototype will be listed under on the RCD menu
|
/// The name of the radial container that this prototype will be listed under on the RCD menu
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public string Category { get; private set; } = "Undefined";
|
public ProtoId<RCDCategoryPrototype> Category { get; private set; } = "WallsAndFlooring"; // WD
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Texture path for this prototypes menu icon
|
/// 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)
|
/// The entity prototype that will be constructed (mode dependent)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
[DataField, ViewVariables(VVAccess.ReadOnly)]
|
||||||
public string? Prototype { get; private set; } = string.Empty;
|
public ProtoId<EntityPrototype>? Prototype { get; private set; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Number of charges consumed when the operation is completed
|
/// Number of charges consumed when the operation is completed
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Content.Shared.Examine;
|
|||||||
using Content.Shared.Interaction;
|
using Content.Shared.Interaction;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
using Content.Shared.RCD.Components;
|
using Content.Shared.RCD.Components;
|
||||||
|
using Content.Shared.Stacks;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Shared.RCD.Systems;
|
namespace Content.Shared.RCD.Systems;
|
||||||
@@ -13,20 +14,37 @@ public sealed class RCDAmmoSystem : EntitySystem
|
|||||||
[Dependency] private readonly SharedChargesSystem _charges = default!;
|
[Dependency] private readonly SharedChargesSystem _charges = default!;
|
||||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
[Dependency] private readonly IGameTiming _timing = default!;
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
|
[Dependency] private readonly SharedStackSystem _stack = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<RCDAmmoComponent, ComponentInit>(OnInit); // WD edit
|
||||||
|
|
||||||
SubscribeLocalEvent<RCDAmmoComponent, ExaminedEvent>(OnExamine);
|
SubscribeLocalEvent<RCDAmmoComponent, ExaminedEvent>(OnExamine);
|
||||||
SubscribeLocalEvent<RCDAmmoComponent, AfterInteractEvent>(OnAfterInteract);
|
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)
|
private void OnExamine(EntityUid uid, RCDAmmoComponent comp, ExaminedEvent args)
|
||||||
{
|
{
|
||||||
if (!args.IsInDetailsRange)
|
if (!args.IsInDetailsRange)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!comp.CanBeExamined) // WD edit
|
||||||
|
return;
|
||||||
|
|
||||||
var examineMessage = Loc.GetString("rcd-ammo-component-on-examine", ("charges", comp.Charges));
|
var examineMessage = Loc.GetString("rcd-ammo-component-on-examine", ("charges", comp.Charges));
|
||||||
args.PushText(examineMessage);
|
args.PushText(examineMessage);
|
||||||
}
|
}
|
||||||
@@ -51,6 +69,15 @@ public sealed class RCDAmmoSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
_popup.PopupClient(Loc.GetString("rcd-ammo-component-after-interact-refilled"), target, user);
|
_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);
|
_charges.AddCharges(target, count, charges);
|
||||||
comp.Charges -= count;
|
comp.Charges -= count;
|
||||||
Dirty(uid, comp);
|
Dirty(uid, comp);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using Robust.Shared.Serialization;
|
|||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Content.Shared._White.ClothingGrant.Systems;
|
||||||
|
|
||||||
namespace Content.Shared.RCD.Systems;
|
namespace Content.Shared.RCD.Systems;
|
||||||
|
|
||||||
@@ -75,7 +76,7 @@ public class RCDSystem : EntitySystem
|
|||||||
if (component.AvailablePrototypes.Any())
|
if (component.AvailablePrototypes.Any())
|
||||||
{
|
{
|
||||||
component.ProtoId = component.AvailablePrototypes.First();
|
component.ProtoId = component.AvailablePrototypes.First();
|
||||||
UpdateCachedPrototype(uid, component);
|
UpdateCachedPrototype(component);
|
||||||
Dirty(uid, component);
|
Dirty(uid, component);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -96,7 +97,7 @@ public class RCDSystem : EntitySystem
|
|||||||
|
|
||||||
// Set the current RCD prototype to the one supplied
|
// Set the current RCD prototype to the one supplied
|
||||||
component.ProtoId = args.ProtoId;
|
component.ProtoId = args.ProtoId;
|
||||||
UpdateCachedPrototype(uid, component);
|
UpdateCachedPrototype(component);
|
||||||
Dirty(uid, component);
|
Dirty(uid, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,13 +107,14 @@ public class RCDSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Update cached prototype if required
|
// 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 &&
|
if (component.CachedPrototype.Prototype != null &&
|
||||||
_protoManager.TryIndex(component.CachedPrototype.Prototype, out var proto))
|
_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)
|
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;
|
return;
|
||||||
|
|
||||||
// Exit if the RCD prototype has changed
|
// 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)
|
public bool IsRCDOperationStillValid(EntityUid uid, RCDComponent component, MapGridData mapGridData, EntityUid? target, EntityUid user, bool popMsgs = true)
|
||||||
{
|
{
|
||||||
// Update cached prototype if required
|
// Update cached prototype if required
|
||||||
UpdateCachedPrototype(uid, component);
|
UpdateCachedPrototype(component);
|
||||||
|
|
||||||
// Check that the RCD has enough ammo to get the job done
|
// Check that the RCD has enough ammo to get the job done
|
||||||
TryComp<LimitedChargesComponent>(uid, out var charges);
|
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));
|
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)
|
if (component.ProtoId.Id != component.CachedPrototype?.Prototype)
|
||||||
component.CachedPrototype = _protoManager.Index(component.ProtoId);
|
component.CachedPrototype = _protoManager.Index(component.ProtoId);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using Content.Shared.Inventory.Events;
|
|||||||
using Robust.Shared.Serialization.Manager;
|
using Robust.Shared.Serialization.Manager;
|
||||||
using Content.Shared.Tag;
|
using Content.Shared.Tag;
|
||||||
using Content.Shared._White.ClothingGrant.Components;
|
using Content.Shared._White.ClothingGrant.Components;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Shared._White.ClothingGrant.Systems;
|
namespace Content.Shared._White.ClothingGrant.Systems;
|
||||||
@@ -40,24 +41,29 @@ public sealed class ClothingGrantingSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var (name, data) in component.Components)
|
AddComponents(args.Equipee, 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!);
|
|
||||||
}
|
|
||||||
|
|
||||||
component.IsActive = true;
|
component.IsActive = true;
|
||||||
Dirty(uid, component);
|
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)
|
private void OnCompUnequip(EntityUid uid, ClothingGrantComponentComponent component, GotUnequippedEvent args)
|
||||||
{
|
{
|
||||||
if (!component.IsActive) return;
|
if (!component.IsActive) return;
|
||||||
|
|||||||
@@ -3,29 +3,25 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations;
|
|||||||
|
|
||||||
namespace Content.Shared._White.Mood;
|
namespace Content.Shared._White.Mood;
|
||||||
|
|
||||||
[Prototype("moodEffect")]
|
[Prototype]
|
||||||
public sealed class MoodEffectPrototype : IPrototype
|
public sealed class MoodEffectPrototype : IPrototype
|
||||||
{
|
{
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
[IdDataField]
|
[IdDataField]
|
||||||
public string ID { get; } = default!;
|
public string ID { get; } = default!;
|
||||||
|
|
||||||
[DataField("desc", required: true)]
|
[DataField(required: true)]
|
||||||
public string Description = string.Empty;
|
public string Description = string.Empty;
|
||||||
|
|
||||||
[DataField("moodChange", customTypeSerializer: typeof(EnumSerializer), required: true)]
|
[DataField(customTypeSerializer: typeof(EnumSerializer), required: true)]
|
||||||
public Enum MoodChange = default!;
|
public Enum MoodChange = default!;
|
||||||
|
|
||||||
[DataField("positiveEffect", required: true)]
|
[DataField] public bool Positive;
|
||||||
public bool PositiveEffect;
|
|
||||||
|
|
||||||
[DataField("timeout")]
|
[DataField] public int Timeout;
|
||||||
public int Timeout;
|
|
||||||
|
|
||||||
[DataField("hidden")]
|
[DataField] public bool Hidden;
|
||||||
public bool Hidden;
|
|
||||||
|
|
||||||
// If mob already has effect of the same category, the new one will replace the old one.
|
// If mob already has effect of the same category, the new one will replace the old one.
|
||||||
[DataField("category")]
|
[DataField] public string? Category;
|
||||||
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
|
# UI
|
||||||
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 } зарядов.
|
|
||||||
}
|
|
||||||
|
|
||||||
### 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-no-ammo-message = В РЦД закончились заряды!
|
||||||
rcd-component-tile-indestructible-message = Эта плитка не может быть уничтожена!
|
rcd-component-insufficient-ammo-message = В РЦД недостаточно зарядов!
|
||||||
rcd-component-tile-obstructed-message = Этот тайл заблокирован!
|
|
||||||
rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это деконструировать!
|
# Deconstruction
|
||||||
rcd-component-cannot-build-floor-tile-not-empty-message = Пол можно построить только в космосе или на покрытии!
|
rcd-component-tile-indestructible-message = Эта плитка неразрушима!
|
||||||
rcd-component-cannot-build-wall-tile-not-empty-message = Вы не можете построить стену в космосе!
|
rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это демонтировать!
|
||||||
rcd-component-cannot-build-airlock-tile-not-empty-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: ClothingEyesGlassesMeson
|
||||||
- id: ClothingShoesBootsMag
|
- id: ClothingShoesBootsMag
|
||||||
- id: ClothingHandsGlovesColorYellow
|
- id: ClothingHandsGlovesColorYellow
|
||||||
|
- id: RapidPipeDispenser # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerAtmosphericsFilled
|
id: LockerAtmosphericsFilled
|
||||||
@@ -111,6 +112,7 @@
|
|||||||
- id: ClothingEyesGlassesMeson
|
- id: ClothingEyesGlassesMeson
|
||||||
- id: ClothingShoesBootsMag
|
- id: ClothingShoesBootsMag
|
||||||
- id: ClothingHandsGlovesColorYellow
|
- id: ClothingHandsGlovesColorYellow
|
||||||
|
- id: RapidPipeDispenser # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerEngineerFilledHardsuit
|
id: LockerEngineerFilledHardsuit
|
||||||
|
|||||||
@@ -152,6 +152,7 @@
|
|||||||
- id: ClothingOuterHardsuitEngineeringWhite
|
- id: ClothingOuterHardsuitEngineeringWhite
|
||||||
- id: ClothingMaskBreath
|
- id: ClothingMaskBreath
|
||||||
- id: OxygenTankFilled
|
- id: OxygenTankFilled
|
||||||
|
- id: RapidPipeDispenser # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerChiefEngineerFilled
|
id: LockerChiefEngineerFilled
|
||||||
@@ -169,6 +170,7 @@
|
|||||||
- id: RCDAmmo
|
- id: RCDAmmo
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: HolofanProjector
|
- id: HolofanProjector
|
||||||
|
- id: RapidPipeDispenser # WD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerChiefMedicalOfficerFilledHardsuit
|
id: LockerChiefMedicalOfficerFilledHardsuit
|
||||||
|
|||||||
@@ -12,6 +12,5 @@
|
|||||||
GeigerCounter: 3
|
GeigerCounter: 3
|
||||||
InflatableWallStack1: 24
|
InflatableWallStack1: 24
|
||||||
InflatableDoorStack1: 8
|
InflatableDoorStack1: 8
|
||||||
emaggedInventory:
|
RCD: 3 # WD
|
||||||
RCD: 1
|
RCDAmmo: 3 # WD
|
||||||
RCDAmmo: 3
|
|
||||||
|
|||||||
@@ -86,6 +86,8 @@
|
|||||||
reagents:
|
reagents:
|
||||||
- ReagentId: Silicon
|
- ReagentId: Silicon
|
||||||
Quantity: 10
|
Quantity: 10
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetGlass
|
parent: SheetGlass
|
||||||
@@ -172,6 +174,9 @@
|
|||||||
max: 1
|
max: 1
|
||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetRGlass
|
parent: SheetRGlass
|
||||||
@@ -249,6 +254,9 @@
|
|||||||
max: 1
|
max: 1
|
||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetPGlass
|
parent: SheetPGlass
|
||||||
@@ -315,6 +323,9 @@
|
|||||||
- ReagentId: Carbon
|
- ReagentId: Carbon
|
||||||
Quantity: 0.5
|
Quantity: 0.5
|
||||||
canReact: false
|
canReact: false
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 3
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetRPGlass
|
parent: SheetRPGlass
|
||||||
|
|||||||
@@ -70,6 +70,8 @@
|
|||||||
Quantity: 9
|
Quantity: 9
|
||||||
- ReagentId: Carbon
|
- ReagentId: Carbon
|
||||||
Quantity: 1
|
Quantity: 1
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetSteel
|
parent: SheetSteel
|
||||||
@@ -206,6 +208,9 @@
|
|||||||
- ReagentId: Carbon
|
- ReagentId: Carbon
|
||||||
Quantity: 1
|
Quantity: 1
|
||||||
canReact: false
|
canReact: false
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetPlasteel
|
parent: SheetPlasteel
|
||||||
|
|||||||
@@ -164,6 +164,9 @@
|
|||||||
- ReagentId: Phosphorus
|
- ReagentId: Phosphorus
|
||||||
Quantity: 5
|
Quantity: 5
|
||||||
canReact: false
|
canReact: false
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 0.5
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SheetPlastic
|
parent: SheetPlastic
|
||||||
|
|||||||
@@ -74,6 +74,9 @@
|
|||||||
Quantity: 4.5
|
Quantity: 4.5
|
||||||
- ReagentId: Carbon
|
- ReagentId: Carbon
|
||||||
Quantity: 0.5
|
Quantity: 0.5
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 0.5
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: PartRodMetal
|
parent: PartRodMetal
|
||||||
|
|||||||
@@ -27,6 +27,9 @@
|
|||||||
price: 0
|
price: 0
|
||||||
- type: StackPrice
|
- type: StackPrice
|
||||||
price: 1
|
price: 1
|
||||||
|
- type: RCDAmmo # WD
|
||||||
|
canBeExamined: false
|
||||||
|
chargeCountModifier: 0.2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CableHVStack
|
id: CableHVStack
|
||||||
|
|||||||
@@ -395,32 +395,11 @@
|
|||||||
path: "/Audio/Items/drill_hit.ogg"
|
path: "/Audio/Items/drill_hit.ogg"
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: RCD
|
id: BaseRCD
|
||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
name: RCD
|
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.
|
description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function.
|
||||||
components:
|
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
|
- type: LimitedCharges
|
||||||
maxCharges: 30
|
maxCharges: 30
|
||||||
charges: 30
|
charges: 30
|
||||||
@@ -449,13 +428,18 @@
|
|||||||
key: enum.RcdUiKey.Key
|
key: enum.RcdUiKey.Key
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: RCDEmpty
|
id: RCD
|
||||||
parent: RCD
|
parent: BaseRCD
|
||||||
suffix: Empty
|
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:
|
components:
|
||||||
- type: LimitedCharges
|
|
||||||
charges: 0
|
|
||||||
- type: RCD
|
- type: RCD
|
||||||
|
categoryPrototypes: # WD
|
||||||
|
- WallsAndFlooring # WD
|
||||||
|
- WindowsAndGrilles # WD
|
||||||
|
- Airlocks # WD
|
||||||
|
- Electrical # WD
|
||||||
|
- Lighting # WD
|
||||||
availablePrototypes:
|
availablePrototypes:
|
||||||
- WallSolid
|
- WallSolid
|
||||||
- FloorSteel
|
- FloorSteel
|
||||||
@@ -469,6 +453,76 @@
|
|||||||
- Airlock
|
- Airlock
|
||||||
- AirlockGlass
|
- AirlockGlass
|
||||||
- Firelock
|
- 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
|
- type: entity
|
||||||
id: RCDRecharging
|
id: RCDRecharging
|
||||||
@@ -500,6 +554,7 @@
|
|||||||
description: A cartridge of raw matter compacted by bluespace technology. Used in rapid construction devices.
|
description: A cartridge of raw matter compacted by bluespace technology. Used in rapid construction devices.
|
||||||
components:
|
components:
|
||||||
- type: RCDAmmo
|
- type: RCDAmmo
|
||||||
|
chargeCountModifier: 1.5
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Tools/rcd.rsi
|
sprite: Objects/Tools/rcd.rsi
|
||||||
state: ammo
|
state: ammo
|
||||||
|
|||||||
@@ -348,6 +348,8 @@
|
|||||||
- KitchenKnife # WD EDIT
|
- KitchenKnife # WD EDIT
|
||||||
- ButchCleaver # WD EDIT
|
- ButchCleaver # WD EDIT
|
||||||
- WeaponTempGun # WD EDIT
|
- WeaponTempGun # WD EDIT
|
||||||
|
- RapidPipeDispenserRecipe # WD edit
|
||||||
|
- RCDRecipe # WD edit
|
||||||
- DeviceQuantumSpinInverter
|
- DeviceQuantumSpinInverter
|
||||||
- type: EmagLatheRecipes
|
- type: EmagLatheRecipes
|
||||||
emagDynamicRecipes:
|
emagDynamicRecipes:
|
||||||
|
|||||||
@@ -39,11 +39,11 @@
|
|||||||
mode: ConstructTile
|
mode: ConstructTile
|
||||||
prototype: Plating
|
prototype: Plating
|
||||||
cost: 1
|
cost: 1
|
||||||
delay: 1
|
delay: 0
|
||||||
collisionMask: InteractImpassable
|
collisionMask: InteractImpassable
|
||||||
rules:
|
rules:
|
||||||
- CanBuildOnEmptyTile
|
- CanBuildOnEmptyTile
|
||||||
fx: EffectRCDConstruct1
|
fx: EffectRCDConstruct0
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: FloorSteel
|
id: FloorSteel
|
||||||
@@ -53,11 +53,11 @@
|
|||||||
mode: ConstructTile
|
mode: ConstructTile
|
||||||
prototype: FloorSteel
|
prototype: FloorSteel
|
||||||
cost: 1
|
cost: 1
|
||||||
delay: 1
|
delay: 0
|
||||||
collisionMask: InteractImpassable
|
collisionMask: InteractImpassable
|
||||||
rules:
|
rules:
|
||||||
- CanBuildOnEmptyTile
|
- CanBuildOnEmptyTile
|
||||||
fx: EffectRCDConstruct1
|
fx: EffectRCDConstruct0
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: Catwalk
|
id: Catwalk
|
||||||
@@ -66,13 +66,13 @@
|
|||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Catwalk
|
prototype: Catwalk
|
||||||
cost: 1
|
cost: 1
|
||||||
delay: 1
|
delay: 0
|
||||||
collisionMask: InteractImpassable
|
collisionMask: InteractImpassable
|
||||||
rules:
|
rules:
|
||||||
- MustBuildOnSubfloor
|
- MustBuildOnSubfloor
|
||||||
- IsCatwalk
|
- IsCatwalk
|
||||||
rotation: Fixed
|
rotation: Fixed
|
||||||
fx: EffectRCDConstruct1
|
fx: EffectRCDConstruct0
|
||||||
|
|
||||||
# Walls
|
# Walls
|
||||||
- type: rcd
|
- type: rcd
|
||||||
@@ -93,11 +93,11 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/grille.png
|
sprite: /Textures/Interface/Radial/RCD/grille.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Grille
|
prototype: Grille
|
||||||
cost: 4
|
cost: 1
|
||||||
delay: 2
|
delay: 1
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rotation: Fixed
|
rotation: Fixed
|
||||||
fx: EffectRCDConstruct2
|
fx: EffectRCDConstruct1
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
- type: rcd
|
- type: rcd
|
||||||
@@ -106,13 +106,13 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/window.png
|
sprite: /Textures/Interface/Radial/RCD/window.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Window
|
prototype: Window
|
||||||
cost: 3
|
cost: 2
|
||||||
delay: 2
|
delay: 1
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rules:
|
rules:
|
||||||
- IsWindow
|
- IsWindow
|
||||||
rotation: Fixed
|
rotation: Fixed
|
||||||
fx: EffectRCDConstruct2
|
fx: EffectRCDConstruct1
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: WindowDirectional
|
id: WindowDirectional
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/directional.png
|
sprite: /Textures/Interface/Radial/RCD/directional.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: WindowDirectional
|
prototype: WindowDirectional
|
||||||
cost: 2
|
cost: 1
|
||||||
delay: 1
|
delay: 1
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||||
@@ -136,12 +136,12 @@
|
|||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: ReinforcedWindow
|
prototype: ReinforcedWindow
|
||||||
cost: 4
|
cost: 4
|
||||||
delay: 3
|
delay: 2
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rules:
|
rules:
|
||||||
- IsWindow
|
- IsWindow
|
||||||
rotation: User
|
rotation: User
|
||||||
fx: EffectRCDConstruct3
|
fx: EffectRCDConstruct2
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: WindowReinforcedDirectional
|
id: WindowReinforcedDirectional
|
||||||
@@ -149,14 +149,14 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png
|
sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: WindowReinforcedDirectional
|
prototype: WindowReinforcedDirectional
|
||||||
cost: 3
|
cost: 2
|
||||||
delay: 2
|
delay: 1
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||||
rules:
|
rules:
|
||||||
- IsWindow
|
- IsWindow
|
||||||
rotation: User
|
rotation: User
|
||||||
fx: EffectRCDConstruct2
|
fx: EffectRCDConstruct1
|
||||||
|
|
||||||
# Airlocks
|
# Airlocks
|
||||||
- type: rcd
|
- type: rcd
|
||||||
@@ -166,10 +166,10 @@
|
|||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Airlock
|
prototype: Airlock
|
||||||
cost: 4
|
cost: 4
|
||||||
delay: 4
|
delay: 3
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rotation: Camera
|
rotation: Camera
|
||||||
fx: EffectRCDConstruct4
|
fx: EffectRCDConstruct3
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: AirlockGlass
|
id: AirlockGlass
|
||||||
@@ -178,10 +178,10 @@
|
|||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: AirlockGlass
|
prototype: AirlockGlass
|
||||||
cost: 4
|
cost: 4
|
||||||
delay: 4
|
delay: 3
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rotation: Camera
|
rotation: Camera
|
||||||
fx: EffectRCDConstruct4
|
fx: EffectRCDConstruct3
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: Firelock
|
id: Firelock
|
||||||
@@ -189,11 +189,11 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/firelock.png
|
sprite: /Textures/Interface/Radial/RCD/firelock.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Firelock
|
prototype: Firelock
|
||||||
cost: 4
|
cost: 2
|
||||||
delay: 3
|
delay: 2
|
||||||
collisionMask: FullTileMask
|
collisionMask: FullTileMask
|
||||||
rotation: Camera
|
rotation: Camera
|
||||||
fx: EffectRCDConstruct3
|
fx: EffectRCDConstruct2
|
||||||
|
|
||||||
# Lighting
|
# Lighting
|
||||||
- type: rcd
|
- type: rcd
|
||||||
@@ -202,12 +202,12 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/tube_light.png
|
sprite: /Textures/Interface/Radial/RCD/tube_light.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: Poweredlight
|
prototype: Poweredlight
|
||||||
cost: 2
|
cost: 1
|
||||||
delay: 1
|
delay: 0
|
||||||
collisionMask: TabletopMachineMask
|
collisionMask: TabletopMachineMask
|
||||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||||
rotation: User
|
rotation: User
|
||||||
fx: EffectRCDConstruct1
|
fx: EffectRCDConstruct0
|
||||||
|
|
||||||
- type: rcd
|
- type: rcd
|
||||||
id: BulbLight
|
id: BulbLight
|
||||||
@@ -215,12 +215,12 @@
|
|||||||
sprite: /Textures/Interface/Radial/RCD/bulb_light.png
|
sprite: /Textures/Interface/Radial/RCD/bulb_light.png
|
||||||
mode: ConstructObject
|
mode: ConstructObject
|
||||||
prototype: PoweredSmallLight
|
prototype: PoweredSmallLight
|
||||||
cost: 2
|
cost: 1
|
||||||
delay: 1
|
delay: 0
|
||||||
collisionMask: TabletopMachineMask
|
collisionMask: TabletopMachineMask
|
||||||
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
collisionBounds: "-0.23,-0.49,0.23,-0.36"
|
||||||
rotation: User
|
rotation: User
|
||||||
fx: EffectRCDConstruct1
|
fx: EffectRCDConstruct0
|
||||||
|
|
||||||
# Electrical
|
# Electrical
|
||||||
- type: rcd
|
- type: rcd
|
||||||
@@ -278,3 +278,28 @@
|
|||||||
- MustBuildOnSubfloor
|
- MustBuildOnSubfloor
|
||||||
rotation: User
|
rotation: User
|
||||||
fx: EffectRCDConstruct0
|
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
|
- AutolatheHyperConvectionMachineCircuitboard
|
||||||
- ProtolatheHyperConvectionMachineCircuitboard
|
- ProtolatheHyperConvectionMachineCircuitboard
|
||||||
- SheetifierMachineCircuitboard
|
- SheetifierMachineCircuitboard
|
||||||
|
- RCDRecipe # WD
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
id: PowerGeneration
|
id: PowerGeneration
|
||||||
@@ -85,6 +86,7 @@
|
|||||||
recipeUnlocks:
|
recipeUnlocks:
|
||||||
- ThermomachineFreezerMachineCircuitBoard
|
- ThermomachineFreezerMachineCircuitBoard
|
||||||
- GasRecyclerMachineCircuitboard
|
- GasRecyclerMachineCircuitboard
|
||||||
|
- RapidPipeDispenserRecipe # WD
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
id: RipleyAPLU
|
id: RipleyAPLU
|
||||||
|
|||||||
@@ -1,51 +1,43 @@
|
|||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: Handcuffed
|
id: Handcuffed
|
||||||
desc: "Кажется мои выходки кто-то заметил."
|
description: "Кажется мои выходки кто-то заметил."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: Suffocating
|
id: Suffocating
|
||||||
desc: "НЕ.. МОГУ... ДЫШАТЬ..."
|
description: "НЕ.. МОГУ... ДЫШАТЬ..."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
timeout: 1
|
timeout: 1
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: OnFire
|
id: OnFire
|
||||||
desc: "ГОРЮ!!!"
|
description: "ГОРЮ!!!"
|
||||||
moodChange: enum.MoodChangeLevel.Big
|
moodChange: enum.MoodChangeLevel.Big
|
||||||
positiveEffect: false
|
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: Creampied
|
id: Creampied
|
||||||
desc: "Меня окремили. На вкус как пирог."
|
description: "Меня окремили. На вкус как пирог."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
timeout: 3
|
timeout: 3
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: MobSlipped
|
id: MobSlipped
|
||||||
desc: "Опять поскальзываюсь. Надо быть аккуратней."
|
description: "Опять поскальзываюсь. Надо быть аккуратней."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
timeout: 3
|
timeout: 3
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: MobVomit
|
id: MobVomit
|
||||||
desc: "Меня только что вырвало. Мерзость."
|
description: "Меня только что вырвало. Мерзость."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
timeout: 8
|
timeout: 8
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: MobLowPressure
|
id: MobLowPressure
|
||||||
desc: "Меня сейчас разорвёт наружу!"
|
description: "Меня сейчас разорвёт наружу!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: MobHighPressure
|
id: MobHighPressure
|
||||||
desc: "На меня оказывается огромное давление!"
|
description: "На меня оказывается огромное давление!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: BeingHugged
|
id: BeingHugged
|
||||||
desc: "Обнимашки - круто."
|
description: "Обнимашки - круто."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 2
|
timeout: 2
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: BeingPet
|
id: BeingPet
|
||||||
desc: "Меня погладили!"
|
description: "Меня погладили!"
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 2
|
timeout: 2
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: ArcadePlay
|
id: ArcadePlay
|
||||||
desc: "Я весело поиграл в интересную аркаду."
|
description: "Я весело поиграл в интересную аркаду."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 8
|
timeout: 8
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: GotBlessed
|
id: GotBlessed
|
||||||
desc: "Меня благословили."
|
description: "Меня благословили."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 8
|
timeout: 8
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: PetAnimal
|
id: PetAnimal
|
||||||
desc: "Животные такие милые! Не могу перестать их гладить!"
|
description: "Животные такие милые! Не могу перестать их гладить!"
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 5
|
timeout: 5
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: SavedLife
|
id: SavedLife
|
||||||
desc: "Так приятно спасать чью-то жизнь."
|
description: "Так приятно спасать чью-то жизнь."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 8
|
timeout: 8
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: TraitorFocused #Used for traitors to boost their goals completion.
|
id: TraitorFocused #Used for traitors to boost their goals completion.
|
||||||
desc: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
|
description: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: RevolutionFocused #Used for revolution
|
id: RevolutionFocused #Used for revolution
|
||||||
desc: "СЛАВА РЕВОЛЮЦИИ!!!"
|
description: "СЛАВА РЕВОЛЮЦИИ!!!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: CultFocused
|
id: CultFocused
|
||||||
desc: "Знаю правду, славим великого!"
|
description: "Знаю правду, славим великого!"
|
||||||
moodChange: enum.MoodChangeLevel.Big
|
moodChange: enum.MoodChangeLevel.Big
|
||||||
positiveEffect: true
|
positive: true
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: Stimulator
|
id: Stimulator
|
||||||
desc: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
|
description: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
timeout: 2
|
timeout: 2
|
||||||
@@ -1,87 +1,78 @@
|
|||||||
#Hunger
|
#Hunger
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HungerOverfed
|
id: HungerOverfed
|
||||||
desc: "Во мне столько жира..."
|
description: "Во мне столько жира..."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
category: "Hunger"
|
category: "Hunger"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HungerOkay
|
id: HungerOkay
|
||||||
desc: "Мой желудок полон!"
|
description: "Мой желудок полон!"
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
category: "Hunger"
|
category: "Hunger"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HungerPeckish
|
id: HungerPeckish
|
||||||
desc: "Хочу есть."
|
description: "Хочу есть."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
category: "Hunger"
|
category: "Hunger"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HungerStarving
|
id: HungerStarving
|
||||||
desc: "Голодаю!"
|
description: "Голодаю!"
|
||||||
moodChange: enum.MoodChangeLevel.Big
|
moodChange: enum.MoodChangeLevel.Big
|
||||||
positiveEffect: false
|
|
||||||
category: "Hunger"
|
category: "Hunger"
|
||||||
|
|
||||||
#Thirst
|
#Thirst
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: ThirstOverHydrated
|
id: ThirstOverHydrated
|
||||||
desc: "СЛИШКОМ МНОГО ВОДЫ..."
|
description: "СЛИШКОМ МНОГО ВОДЫ..."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
category: "Thirst"
|
category: "Thirst"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: ThirstOkay
|
id: ThirstOkay
|
||||||
desc: "Не хочу пить."
|
description: "Не хочу пить."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: true
|
positive: true
|
||||||
category: "Thirst"
|
category: "Thirst"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: ThirstThirsty
|
id: ThirstThirsty
|
||||||
desc: "Хочу пить."
|
description: "Хочу пить."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
category: "Thirst"
|
category: "Thirst"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: ThirstParched
|
id: ThirstParched
|
||||||
desc: "ВОДЫ!"
|
description: "ВОДЫ!"
|
||||||
moodChange: enum.MoodChangeLevel.Big
|
moodChange: enum.MoodChangeLevel.Big
|
||||||
positiveEffect: false
|
|
||||||
category: "Thirst"
|
category: "Thirst"
|
||||||
|
|
||||||
#Health
|
#Health
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HealthNoDamage
|
id: HealthNoDamage
|
||||||
desc: "Чувствую себя лишённым боли."
|
description: "Чувствую себя лишённым боли."
|
||||||
moodChange: enum.MoodChangeLevel.None
|
moodChange: enum.MoodChangeLevel.None
|
||||||
positiveEffect: true
|
positive: true
|
||||||
hidden: true
|
hidden: true
|
||||||
category: "Health"
|
category: "Health"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HealthLightDamage
|
id: HealthLightDamage
|
||||||
desc: "Мои ссадины жгутся."
|
description: "Мои ссадины жгутся."
|
||||||
moodChange: enum.MoodChangeLevel.Small
|
moodChange: enum.MoodChangeLevel.Small
|
||||||
positiveEffect: false
|
|
||||||
category: "Health"
|
category: "Health"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HealthSevereDamage
|
id: HealthSevereDamage
|
||||||
desc: "Сильная боль пронзает меня."
|
description: "Сильная боль пронзает меня."
|
||||||
moodChange: enum.MoodChangeLevel.Medium
|
moodChange: enum.MoodChangeLevel.Medium
|
||||||
positiveEffect: false
|
|
||||||
category: "Health"
|
category: "Health"
|
||||||
|
|
||||||
- type: moodEffect
|
- type: moodEffect
|
||||||
id: HealthHeavyDamage
|
id: HealthHeavyDamage
|
||||||
desc: "Агония гложет мою душу!"
|
description: "Агония гложет мою душу!"
|
||||||
moodChange: enum.MoodChangeLevel.Large
|
moodChange: enum.MoodChangeLevel.Large
|
||||||
positiveEffect: false
|
|
||||||
category: "Health"
|
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
|
completetime: 3
|
||||||
materials:
|
materials:
|
||||||
Steel: 800
|
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