(uid, out var charges);
@@ -589,7 +591,7 @@ public class RCDSystem : EntitySystem
return boundingPolygon.ComputeAABB(boundingTransform, 0).Intersects(fixture.Shape.ComputeAABB(entXform, 0));
}
- public void UpdateCachedPrototype(EntityUid uid, RCDComponent component)
+ public void UpdateCachedPrototype(RCDComponent component)
{
if (component.ProtoId.Id != component.CachedPrototype?.Prototype)
component.CachedPrototype = _protoManager.Index(component.ProtoId);
diff --git a/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs b/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs
index bd67e508e6..d3c669c017 100644
--- a/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs
+++ b/Content.Shared/_White/ClothingGrant/Systems/ClothingGrantingSystem.cs
@@ -3,6 +3,7 @@ using Content.Shared.Inventory.Events;
using Robust.Shared.Serialization.Manager;
using Content.Shared.Tag;
using Content.Shared._White.ClothingGrant.Components;
+using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
namespace Content.Shared._White.ClothingGrant.Systems;
@@ -40,24 +41,29 @@ public sealed class ClothingGrantingSystem : EntitySystem
return;
}
- foreach (var (name, data) in component.Components)
- {
- var newComp = (Component) _componentFactory.GetComponent(name);
-
- if (HasComp(args.Equipee, newComp.GetType()))
- continue;
-
- newComp.Owner = args.Equipee;
-
- var temp = (object) newComp;
- _serializationManager.CopyTo(data.Component, ref temp);
- EntityManager.AddComponent(args.Equipee, (Component)temp!);
- }
+ AddComponents(args.Equipee, component.Components);
component.IsActive = true;
Dirty(uid, component);
}
+ public void AddComponents(EntityUid uid, ComponentRegistry components)
+ {
+ foreach (var (name, data) in components)
+ {
+ var newComp = (Component) _componentFactory.GetComponent(name);
+
+ if (HasComp(uid, newComp.GetType()))
+ continue;
+
+ newComp.Owner = uid;
+
+ var temp = (object) newComp;
+ _serializationManager.CopyTo(data.Component, ref temp);
+ EntityManager.AddComponent(uid, (Component)temp!);
+ }
+ }
+
private void OnCompUnequip(EntityUid uid, ClothingGrantComponentComponent component, GotUnequippedEvent args)
{
if (!component.IsActive) return;
diff --git a/Content.Shared/_White/Mood/MoodEffectPrototype.cs b/Content.Shared/_White/Mood/MoodEffectPrototype.cs
index 03a005f188..0f1e57eafe 100644
--- a/Content.Shared/_White/Mood/MoodEffectPrototype.cs
+++ b/Content.Shared/_White/Mood/MoodEffectPrototype.cs
@@ -3,29 +3,25 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations;
namespace Content.Shared._White.Mood;
-[Prototype("moodEffect")]
+[Prototype]
public sealed class MoodEffectPrototype : IPrototype
{
[ViewVariables]
[IdDataField]
public string ID { get; } = default!;
- [DataField("desc", required: true)]
+ [DataField(required: true)]
public string Description = string.Empty;
- [DataField("moodChange", customTypeSerializer: typeof(EnumSerializer), required: true)]
+ [DataField(customTypeSerializer: typeof(EnumSerializer), required: true)]
public Enum MoodChange = default!;
- [DataField("positiveEffect", required: true)]
- public bool PositiveEffect;
+ [DataField] public bool Positive;
- [DataField("timeout")]
- public int Timeout;
+ [DataField] public int Timeout;
- [DataField("hidden")]
- public bool Hidden;
+ [DataField] public bool Hidden;
- //If mob already has effect of the same category, the new one will replace the old one.
- [DataField("category")]
- public string? Category;
+ // If mob already has effect of the same category, the new one will replace the old one.
+ [DataField] public string? Category;
}
diff --git a/Content.Shared/_White/RCD/RCDCategoryPrototype.cs b/Content.Shared/_White/RCD/RCDCategoryPrototype.cs
new file mode 100644
index 0000000000..61ef3d54e2
--- /dev/null
+++ b/Content.Shared/_White/RCD/RCDCategoryPrototype.cs
@@ -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!;
+}
diff --git a/Resources/Locale/ru-RU/rcd/components/rcd-component.ftl b/Resources/Locale/ru-RU/rcd/components/rcd-component.ftl
index f15eae7e85..b5cdb6ec78 100644
--- a/Resources/Locale/ru-RU/rcd/components/rcd-component.ftl
+++ b/Resources/Locale/ru-RU/rcd/components/rcd-component.ftl
@@ -1,30 +1,59 @@
-### UI
+# WD EDIT ALL
-# Shown when an RCD is examined in details range
-rcd-component-examine-detail = В данный момент выбран режим { $mode }.
-# Shown when an RCD is examined in details range
-rcd-component-examine-detail-count =
- Находится в режиме { $mode ->
- *[other] _
- [floors] полы
- [walls] стены
- [airlock] шлюзы
- [deconstruct] разбор
- }, и { $ammoCount ->
- *[zero] не содержит зарядов.
- [one] содержит 1 заряд.
- [few] содержит { $ammoCount } заряда.
- [other] содержит { $ammoCount } зарядов.
- }
+# UI
-### Interaction Messages
+rcd-component-examine-mode-details = Текущий режим: '{$mode}'.
+rcd-component-examine-build-details = Текущий режим строительства: {$name}.
-# Shown when changing RCD Mode
-rcd-component-change-mode = РЦД переключён в режим { $mode }.
+
+## Interaction Messages
+
+# Mode change
+rcd-component-change-mode = РЦД переключён в режим '{$mode}'.
+rcd-component-change-build-mode = РЦД переключён в режим строительства {$name}.
+
+# Ammo count
rcd-component-no-ammo-message = В РЦД закончились заряды!
-rcd-component-tile-indestructible-message = Эта плитка не может быть уничтожена!
-rcd-component-tile-obstructed-message = Этот тайл заблокирован!
-rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это деконструировать!
-rcd-component-cannot-build-floor-tile-not-empty-message = Пол можно построить только в космосе или на покрытии!
-rcd-component-cannot-build-wall-tile-not-empty-message = Вы не можете построить стену в космосе!
-rcd-component-cannot-build-airlock-tile-not-empty-message = Вы не можете построить шлюз в космосе!
+rcd-component-insufficient-ammo-message = В РЦД недостаточно зарядов!
+
+# Deconstruction
+rcd-component-tile-indestructible-message = Эта плитка неразрушима!
+rcd-component-deconstruct-target-not-on-whitelist-message = Вы не можете это демонтировать!
+rcd-component-nothing-to-deconstruct-message = Здесь нечего демонтировать!
+rcd-component-tile-obstructed-message = Вы не можете демонтировать плитку, если на ней что-то есть!
+
+# Construction
+rcd-component-no-valid-grid = Вы слишком далеко в открытом космосе, чтобы строить здесь!
+rcd-component-must-build-on-empty-tile-message = Здесь уже есть фундамент!
+rcd-component-cannot-build-on-empty-tile-message = Вы не можете строить это без фундамента!
+rcd-component-must-build-on-subfloor-message = Вы можете строить это только на открытом полу!
+rcd-component-cannot-build-on-subfloor-message = Вы не можете строить это на открытом полу!
+rcd-component-cannot-build-on-occupied-tile-message = Вы не можете строить здесь, это место уже занято!
+rcd-component-cannot-build-identical-tile = Эта плитка уже существует!
+
+
+### Category names
+
+# RCD
+rcd-category-WallsAndFlooring = Стены и пол
+rcd-category-WindowsAndGrilles = Окна и решётки
+rcd-category-Airlocks = Шлюзы
+rcd-category-Electrical = Электрика
+rcd-category-Lighting = Освещение
+
+# RPD
+rcd-category-Pipes = Трубы
+rcd-category-GasDevices = Атмосферные приборы
+rcd-category-DisposalPipes = Мусорные трубы
+rcd-category-DisposalUnits = Мусорные приборы
+
+### Prototype names (note: constructable items will be puralized)
+
+rcd-component-deconstruct = демонтаж
+rcd-component-floor-steel = стальная плитка
+rcd-component-plating = лист обшивки
+
+# RPD naming
+
+ent-RapidPipeDispenser = РПД
+ .desc = Новейшее ручное строительное устройство, которое может быстро размещать трубы и атмосферные приборы.
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml
index b0f918a508..da190df84a 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml
@@ -92,6 +92,7 @@
- id: ClothingEyesGlassesMeson
- id: ClothingShoesBootsMag
- id: ClothingHandsGlovesColorYellow
+ - id: RapidPipeDispenser # WD
- type: entity
id: LockerAtmosphericsFilled
@@ -111,6 +112,7 @@
- id: ClothingEyesGlassesMeson
- id: ClothingShoesBootsMag
- id: ClothingHandsGlovesColorYellow
+ - id: RapidPipeDispenser # WD
- type: entity
id: LockerEngineerFilledHardsuit
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
index 876150fe6f..7ff1f531a1 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
@@ -152,6 +152,7 @@
- id: ClothingOuterHardsuitEngineeringWhite
- id: ClothingMaskBreath
- id: OxygenTankFilled
+ - id: RapidPipeDispenser # WD
- type: entity
id: LockerChiefEngineerFilled
@@ -169,6 +170,7 @@
- id: RCDAmmo
amount: 2
- id: HolofanProjector
+ - id: RapidPipeDispenser # WD
- type: entity
id: LockerChiefMedicalOfficerFilledHardsuit
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml
index a90485b074..fc102d0765 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/engivend.yml
@@ -12,6 +12,5 @@
GeigerCounter: 3
InflatableWallStack1: 24
InflatableDoorStack1: 8
- emaggedInventory:
- RCD: 1
- RCDAmmo: 3
+ RCD: 3 # WD
+ RCDAmmo: 3 # WD
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
index 1bc4e1b0d7..efe5a9edb8 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml
@@ -86,6 +86,8 @@
reagents:
- ReagentId: Silicon
Quantity: 10
+ - type: RCDAmmo # WD
+ canBeExamined: false
- type: entity
parent: SheetGlass
@@ -172,6 +174,9 @@
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 2
- type: entity
parent: SheetRGlass
@@ -249,6 +254,9 @@
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 2
- type: entity
parent: SheetPGlass
@@ -315,6 +323,9 @@
- ReagentId: Carbon
Quantity: 0.5
canReact: false
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 3
- type: entity
parent: SheetRPGlass
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
index 3a7b35f1cf..66cb2a76a3 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml
@@ -70,6 +70,8 @@
Quantity: 9
- ReagentId: Carbon
Quantity: 1
+ - type: RCDAmmo # WD
+ canBeExamined: false
- type: entity
parent: SheetSteel
@@ -206,6 +208,9 @@
- ReagentId: Carbon
Quantity: 1
canReact: false
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 2
- type: entity
parent: SheetPlasteel
diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
index 18590e98df..0f8aedfb36 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml
@@ -164,6 +164,9 @@
- ReagentId: Phosphorus
Quantity: 5
canReact: false
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 0.5
- type: entity
parent: SheetPlastic
diff --git a/Resources/Prototypes/Entities/Objects/Materials/parts.yml b/Resources/Prototypes/Entities/Objects/Materials/parts.yml
index 652ddcd917..ca4d300efd 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/parts.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/parts.yml
@@ -74,6 +74,9 @@
Quantity: 4.5
- ReagentId: Carbon
Quantity: 0.5
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 0.5
- type: entity
parent: PartRodMetal
diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml
index 17d1794c17..f7d39f19fd 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml
@@ -27,6 +27,9 @@
price: 0
- type: StackPrice
price: 1
+ - type: RCDAmmo # WD
+ canBeExamined: false
+ chargeCountModifier: 0.2
- type: entity
id: CableHVStack
diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
index 3d8754d226..640a5e435e 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
@@ -395,32 +395,11 @@
path: "/Audio/Items/drill_hit.ogg"
- type: entity
- id: RCD
+ id: BaseRCD
parent: BaseItem
name: RCD
description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function.
components:
- - type: RCD
- availablePrototypes:
- - WallSolid
- - FloorSteel
- - Plating
- - Catwalk
- - Grille
- - Window
- - WindowDirectional
- - WindowReinforcedDirectional
- - ReinforcedWindow
- - Airlock
- - AirlockGlass
- - Firelock
- - TubeLight
- - BulbLight
- - LVCable
- - MVCable
- - HVCable
- - CableTerminal
- - Deconstruct
- type: LimitedCharges
maxCharges: 30
charges: 30
@@ -449,13 +428,18 @@
key: enum.RcdUiKey.Key
- type: entity
- id: RCDEmpty
- parent: RCD
- suffix: Empty
+ id: RCD
+ parent: BaseRCD
+ name: RCD
+ description: The rapid construction device can be used to quickly place and remove various station structures and fixtures. Requires compressed matter to function.
components:
- - type: LimitedCharges
- charges: 0
- type: RCD
+ categoryPrototypes: # WD
+ - WallsAndFlooring # WD
+ - WindowsAndGrilles # WD
+ - Airlocks # WD
+ - Electrical # WD
+ - Lighting # WD
availablePrototypes:
- WallSolid
- FloorSteel
@@ -469,6 +453,76 @@
- Airlock
- AirlockGlass
- Firelock
+ - TubeLight
+ - BulbLight
+ - LVCable
+ - MVCable
+ - HVCable
+ - CableTerminal
+ - APC # WD
+ - Camera # WD
+ - Deconstruct
+
+- type: entity
+ id: RCDEmpty
+ parent: RCD
+ suffix: Empty
+ components:
+ - type: LimitedCharges
+ charges: 0
+
+- type: entity # WD
+ id: RapidPipeDispenser
+ parent: BaseRCD
+ components:
+ - type: Sprite
+ sprite: White/Items/Tools/rpd.rsi
+ - type: Item
+ size: Normal
+ shape:
+ - 0, 0, 1, 0
+ - type: Clothing
+ sprite: White/Items/Tools/rpd.rsi
+ quickEquip: false
+ slots:
+ - Belt
+ - type: RCD
+ categoryPrototypes:
+ - Pipes
+ - GasDevices
+ - DisposalPipes
+ - DisposalUnits
+ availablePrototypes:
+ - PipeStraight # pipes
+ - PipeBend
+ - PipeTJunction
+ - PipeFourway
+ - GasCanisterPort # gas devices
+ - GasFilter
+ - GasMixer
+ - GasOutletInjector
+ - GasPressurePump
+ - GasVolumePump
+ - GasValve
+ - SignalControlledValve
+ - PressureControlledValve
+ - GasVentScrubber
+ - GasVentPump
+ - GasPassiveVent
+ - DisposalPipe # disposal pipes
+ - DisposalBend
+ - DisposalJunction
+ - DisposalJunctionFlipped
+ - DisposalYJunction
+ - DisposalRouter
+ - DisposalRouterFlipped
+ - DisposalTagger
+ - DisposalSignalRouter
+ - DisposalSignalRouterFlipped
+ - DisposalTrunk
+ - DisposalUnit # disposal units
+ - MailingUnit
+ - ToiletEmpty
- type: entity
id: RCDRecharging
@@ -500,6 +554,7 @@
description: A cartridge of raw matter compacted by bluespace technology. Used in rapid construction devices.
components:
- type: RCDAmmo
+ chargeCountModifier: 1.5
- type: Sprite
sprite: Objects/Tools/rcd.rsi
state: ammo
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 884e351494..93c05506a8 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -348,6 +348,8 @@
- KitchenKnife # WD EDIT
- ButchCleaver # WD EDIT
- WeaponTempGun # WD EDIT
+ - RapidPipeDispenserRecipe # WD edit
+ - RCDRecipe # WD edit
- DeviceQuantumSpinInverter
- type: EmagLatheRecipes
emagDynamicRecipes:
diff --git a/Resources/Prototypes/RCD/rcd.yml b/Resources/Prototypes/RCD/rcd.yml
index 500b5f59bf..1101233cb6 100644
--- a/Resources/Prototypes/RCD/rcd.yml
+++ b/Resources/Prototypes/RCD/rcd.yml
@@ -2,7 +2,7 @@
- type: rcd
id: Invalid # Hidden prototype - do not add to RCDs
mode: Invalid
-
+
- type: rcd
id: Deconstruct
name: rcd-component-deconstruct
@@ -13,14 +13,14 @@
rotation: Camera
- type: rcd
- id: DeconstructLattice # Hidden prototype - do not add to RCDs
+ id: DeconstructLattice # Hidden prototype - do not add to RCDs
name: rcd-component-deconstruct
mode: Deconstruct
cost: 2
delay: 0
rotation: Camera
fx: EffectRCDConstruct0
-
+
- type: rcd
id: DeconstructTile # Hidden prototype - do not add to RCDs
name: rcd-component-deconstruct
@@ -30,7 +30,7 @@
rotation: Camera
fx: EffectRCDDeconstruct4
-# Flooring
+# Flooring
- type: rcd
id: Plating
name: rcd-component-plating
@@ -39,12 +39,12 @@
mode: ConstructTile
prototype: Plating
cost: 1
- delay: 1
+ delay: 0
collisionMask: InteractImpassable
rules:
- CanBuildOnEmptyTile
- fx: EffectRCDConstruct1
-
+ fx: EffectRCDConstruct0
+
- type: rcd
id: FloorSteel
name: rcd-component-floor-steel
@@ -53,11 +53,11 @@
mode: ConstructTile
prototype: FloorSteel
cost: 1
- delay: 1
+ delay: 0
collisionMask: InteractImpassable
rules:
- CanBuildOnEmptyTile
- fx: EffectRCDConstruct1
+ fx: EffectRCDConstruct0
- type: rcd
id: Catwalk
@@ -66,13 +66,13 @@
mode: ConstructObject
prototype: Catwalk
cost: 1
- delay: 1
+ delay: 0
collisionMask: InteractImpassable
rules:
- MustBuildOnSubfloor
- IsCatwalk
rotation: Fixed
- fx: EffectRCDConstruct1
+ fx: EffectRCDConstruct0
# Walls
- type: rcd
@@ -80,7 +80,7 @@
category: WallsAndFlooring
sprite: /Textures/Interface/Radial/RCD/solid_wall.png
mode: ConstructObject
- prototype: WallSolid
+ prototype: WallSolid
cost: 4
delay: 2
collisionMask: FullTileMask
@@ -93,11 +93,11 @@
sprite: /Textures/Interface/Radial/RCD/grille.png
mode: ConstructObject
prototype: Grille
- cost: 4
- delay: 2
+ cost: 1
+ delay: 1
collisionMask: FullTileMask
rotation: Fixed
- fx: EffectRCDConstruct2
+ fx: EffectRCDConstruct1
# Windows
- type: rcd
@@ -106,20 +106,49 @@
sprite: /Textures/Interface/Radial/RCD/window.png
mode: ConstructObject
prototype: Window
- cost: 3
- delay: 2
+ cost: 2
+ delay: 1
collisionMask: FullTileMask
rules:
- IsWindow
rotation: Fixed
- fx: EffectRCDConstruct2
-
+ fx: EffectRCDConstruct1
+
- type: rcd
id: WindowDirectional
category: WindowsAndGrilles
sprite: /Textures/Interface/Radial/RCD/directional.png
mode: ConstructObject
prototype: WindowDirectional
+ cost: 1
+ delay: 1
+ collisionMask: FullTileMask
+ collisionBounds: "-0.23,-0.49,0.23,-0.36"
+ rules:
+ - IsWindow
+ rotation: User
+ fx: EffectRCDConstruct1
+
+- type: rcd
+ id: ReinforcedWindow
+ category: WindowsAndGrilles
+ sprite: /Textures/Interface/Radial/RCD/window_reinforced.png
+ mode: ConstructObject
+ prototype: ReinforcedWindow
+ cost: 4
+ delay: 2
+ collisionMask: FullTileMask
+ rules:
+ - IsWindow
+ rotation: User
+ fx: EffectRCDConstruct2
+
+- type: rcd
+ id: WindowReinforcedDirectional
+ category: WindowsAndGrilles
+ sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png
+ mode: ConstructObject
+ prototype: WindowReinforcedDirectional
cost: 2
delay: 1
collisionMask: FullTileMask
@@ -128,35 +157,6 @@
- IsWindow
rotation: User
fx: EffectRCDConstruct1
-
-- type: rcd
- id: ReinforcedWindow
- category: WindowsAndGrilles
- sprite: /Textures/Interface/Radial/RCD/window_reinforced.png
- mode: ConstructObject
- prototype: ReinforcedWindow
- cost: 4
- delay: 3
- collisionMask: FullTileMask
- rules:
- - IsWindow
- rotation: User
- fx: EffectRCDConstruct3
-
-- type: rcd
- id: WindowReinforcedDirectional
- category: WindowsAndGrilles
- sprite: /Textures/Interface/Radial/RCD/directional_reinforced.png
- mode: ConstructObject
- prototype: WindowReinforcedDirectional
- cost: 3
- delay: 2
- collisionMask: FullTileMask
- collisionBounds: "-0.23,-0.49,0.23,-0.36"
- rules:
- - IsWindow
- rotation: User
- fx: EffectRCDConstruct2
# Airlocks
- type: rcd
@@ -166,11 +166,11 @@
mode: ConstructObject
prototype: Airlock
cost: 4
- delay: 4
+ delay: 3
collisionMask: FullTileMask
rotation: Camera
- fx: EffectRCDConstruct4
-
+ fx: EffectRCDConstruct3
+
- type: rcd
id: AirlockGlass
category: Airlocks
@@ -178,22 +178,22 @@
mode: ConstructObject
prototype: AirlockGlass
cost: 4
- delay: 4
+ delay: 3
collisionMask: FullTileMask
rotation: Camera
- fx: EffectRCDConstruct4
-
+ fx: EffectRCDConstruct3
+
- type: rcd
id: Firelock
category: Airlocks
sprite: /Textures/Interface/Radial/RCD/firelock.png
mode: ConstructObject
prototype: Firelock
- cost: 4
- delay: 3
+ cost: 2
+ delay: 2
collisionMask: FullTileMask
rotation: Camera
- fx: EffectRCDConstruct3
+ fx: EffectRCDConstruct2
# Lighting
- type: rcd
@@ -202,25 +202,25 @@
sprite: /Textures/Interface/Radial/RCD/tube_light.png
mode: ConstructObject
prototype: Poweredlight
- cost: 2
- delay: 1
+ cost: 1
+ delay: 0
collisionMask: TabletopMachineMask
collisionBounds: "-0.23,-0.49,0.23,-0.36"
rotation: User
- fx: EffectRCDConstruct1
-
+ fx: EffectRCDConstruct0
+
- type: rcd
id: BulbLight
category: Lighting
sprite: /Textures/Interface/Radial/RCD/bulb_light.png
mode: ConstructObject
prototype: PoweredSmallLight
- cost: 2
- delay: 1
+ cost: 1
+ delay: 0
collisionMask: TabletopMachineMask
collisionBounds: "-0.23,-0.49,0.23,-0.36"
rotation: User
- fx: EffectRCDConstruct1
+ fx: EffectRCDConstruct0
# Electrical
- type: rcd
@@ -236,7 +236,7 @@
- MustBuildOnSubfloor
rotation: Fixed
fx: EffectRCDConstruct0
-
+
- type: rcd
id: MVCable
category: Electrical
@@ -250,7 +250,7 @@
- MustBuildOnSubfloor
rotation: Fixed
fx: EffectRCDConstruct0
-
+
- type: rcd
id: HVCable
category: Electrical
@@ -264,7 +264,7 @@
- MustBuildOnSubfloor
rotation: Fixed
fx: EffectRCDConstruct0
-
+
- type: rcd
id: CableTerminal
category: Electrical
@@ -277,4 +277,29 @@
rules:
- MustBuildOnSubfloor
rotation: User
- fx: EffectRCDConstruct0
\ No newline at end of file
+ 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
diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml
index ccc6e9c0f4..f4acd916c0 100644
--- a/Resources/Prototypes/Research/industrial.yml
+++ b/Resources/Prototypes/Research/industrial.yml
@@ -54,6 +54,7 @@
- AutolatheHyperConvectionMachineCircuitboard
- ProtolatheHyperConvectionMachineCircuitboard
- SheetifierMachineCircuitboard
+ - RCDRecipe # WD
- type: technology
id: PowerGeneration
@@ -85,6 +86,7 @@
recipeUnlocks:
- ThermomachineFreezerMachineCircuitBoard
- GasRecyclerMachineCircuitboard
+ - RapidPipeDispenserRecipe # WD
- type: technology
id: RipleyAPLU
diff --git a/Resources/Prototypes/_White/Mood/generic_negativeEffects.yml b/Resources/Prototypes/_White/Mood/generic_negativeEffects.yml
index 7deab7f4f6..296b3b4465 100644
--- a/Resources/Prototypes/_White/Mood/generic_negativeEffects.yml
+++ b/Resources/Prototypes/_White/Mood/generic_negativeEffects.yml
@@ -1,51 +1,43 @@
- type: moodEffect
id: Handcuffed
- desc: "Кажется мои выходки кто-то заметил."
+ description: "Кажется мои выходки кто-то заметил."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
- type: moodEffect
id: Suffocating
- desc: "НЕ.. МОГУ... ДЫШАТЬ..."
+ description: "НЕ.. МОГУ... ДЫШАТЬ..."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
timeout: 1
- type: moodEffect
id: OnFire
- desc: "ГОРЮ!!!"
+ description: "ГОРЮ!!!"
moodChange: enum.MoodChangeLevel.Big
- positiveEffect: false
- type: moodEffect
id: Creampied
- desc: "Меня окремили. На вкус как пирог."
+ description: "Меня окремили. На вкус как пирог."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
timeout: 3
- type: moodEffect
id: MobSlipped
- desc: "Опять поскальзываюсь. Надо быть аккуратней."
+ description: "Опять поскальзываюсь. Надо быть аккуратней."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
timeout: 3
- type: moodEffect
id: MobVomit
- desc: "Меня только что вырвало. Мерзость."
+ description: "Меня только что вырвало. Мерзость."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
timeout: 8
- type: moodEffect
id: MobLowPressure
- desc: "Меня сейчас разорвёт наружу!"
+ description: "Меня сейчас разорвёт наружу!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
- type: moodEffect
id: MobHighPressure
- desc: "На меня оказывается огромное давление!"
+ description: "На меня оказывается огромное давление!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
diff --git a/Resources/Prototypes/_White/Mood/generic_positveEffects.yml b/Resources/Prototypes/_White/Mood/generic_positveEffects.yml
index 856879bdc2..ac67188d30 100644
--- a/Resources/Prototypes/_White/Mood/generic_positveEffects.yml
+++ b/Resources/Prototypes/_White/Mood/generic_positveEffects.yml
@@ -1,66 +1,66 @@
- type: moodEffect
id: BeingHugged
- desc: "Обнимашки - круто."
+ description: "Обнимашки - круто."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: true
+ positive: true
timeout: 2
- type: moodEffect
id: BeingPet
- desc: "Меня погладили!"
+ description: "Меня погладили!"
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: true
+ positive: true
timeout: 2
- type: moodEffect
id: ArcadePlay
- desc: "Я весело поиграл в интересную аркаду."
+ description: "Я весело поиграл в интересную аркаду."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: true
+ positive: true
timeout: 8
- type: moodEffect
id: GotBlessed
- desc: "Меня благословили."
+ description: "Меня благословили."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: true
+ positive: true
timeout: 8
- type: moodEffect
id: PetAnimal
- desc: "Животные такие милые! Не могу перестать их гладить!"
+ description: "Животные такие милые! Не могу перестать их гладить!"
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: true
+ positive: true
timeout: 5
- type: moodEffect
id: SavedLife
- desc: "Так приятно спасать чью-то жизнь."
+ description: "Так приятно спасать чью-то жизнь."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
+ positive: true
timeout: 8
- type: moodEffect
id: TraitorFocused #Used for traitors to boost their goals completion.
- desc: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
+ description: "У меня есть цель, и я добьюсь её, во что бы то ни стало!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
+ positive: true
- type: moodEffect
id: RevolutionFocused #Used for revolution
- desc: "СЛАВА РЕВОЛЮЦИИ!!!"
+ description: "СЛАВА РЕВОЛЮЦИИ!!!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
+ positive: true
- type: moodEffect
id: CultFocused
- desc: "Знаю правду, славим великого!"
+ description: "Знаю правду, славим великого!"
moodChange: enum.MoodChangeLevel.Big
- positiveEffect: true
+ positive: true
- type: moodEffect
id: Stimulator
- desc: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
+ description: "Я ЧУВСТВУЮ ЭТО, В МОЕЙ КРОВИ НАХОДИТСЯ ЧТО-ТО НЕОБЫЧНОЕ!!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
- timeout: 2
\ No newline at end of file
+ positive: true
+ timeout: 2
diff --git a/Resources/Prototypes/_White/Mood/moodEffects_needs.yml b/Resources/Prototypes/_White/Mood/moodEffects_needs.yml
index 7266cbe8f3..f99aac0ebc 100644
--- a/Resources/Prototypes/_White/Mood/moodEffects_needs.yml
+++ b/Resources/Prototypes/_White/Mood/moodEffects_needs.yml
@@ -1,87 +1,78 @@
#Hunger
- type: moodEffect
id: HungerOverfed
- desc: "Во мне столько жира..."
+ description: "Во мне столько жира..."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
category: "Hunger"
- type: moodEffect
id: HungerOkay
- desc: "Мой желудок полон!"
+ description: "Мой желудок полон!"
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
+ positive: true
category: "Hunger"
- type: moodEffect
id: HungerPeckish
- desc: "Хочу есть."
+ description: "Хочу есть."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
category: "Hunger"
- type: moodEffect
id: HungerStarving
- desc: "Голодаю!"
+ description: "Голодаю!"
moodChange: enum.MoodChangeLevel.Big
- positiveEffect: false
category: "Hunger"
#Thirst
- type: moodEffect
id: ThirstOverHydrated
- desc: "СЛИШКОМ МНОГО ВОДЫ..."
+ description: "СЛИШКОМ МНОГО ВОДЫ..."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
category: "Thirst"
- type: moodEffect
id: ThirstOkay
- desc: "Не хочу пить."
+ description: "Не хочу пить."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: true
+ positive: true
category: "Thirst"
- type: moodEffect
id: ThirstThirsty
- desc: "Хочу пить."
+ description: "Хочу пить."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
category: "Thirst"
- type: moodEffect
id: ThirstParched
- desc: "ВОДЫ!"
+ description: "ВОДЫ!"
moodChange: enum.MoodChangeLevel.Big
- positiveEffect: false
category: "Thirst"
#Health
- type: moodEffect
id: HealthNoDamage
- desc: "Чувствую себя лишённым боли."
+ description: "Чувствую себя лишённым боли."
moodChange: enum.MoodChangeLevel.None
- positiveEffect: true
+ positive: true
hidden: true
category: "Health"
- type: moodEffect
id: HealthLightDamage
- desc: "Мои ссадины жгутся."
+ description: "Мои ссадины жгутся."
moodChange: enum.MoodChangeLevel.Small
- positiveEffect: false
category: "Health"
- type: moodEffect
id: HealthSevereDamage
- desc: "Сильная боль пронзает меня."
+ description: "Сильная боль пронзает меня."
moodChange: enum.MoodChangeLevel.Medium
- positiveEffect: false
category: "Health"
- type: moodEffect
id: HealthHeavyDamage
- desc: "Агония гложет мою душу!"
+ description: "Агония гложет мою душу!"
moodChange: enum.MoodChangeLevel.Large
- positiveEffect: false
category: "Health"
diff --git a/Resources/Prototypes/_White/RCD/categories.yml b/Resources/Prototypes/_White/RCD/categories.yml
new file mode 100644
index 0000000000..bd88be5ad4
--- /dev/null
+++ b/Resources/Prototypes/_White/RCD/categories.yml
@@ -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
diff --git a/Resources/Prototypes/_White/RPD/rpd.yml b/Resources/Prototypes/_White/RPD/rpd.yml
new file mode 100644
index 0000000000..d2ef3481dd
--- /dev/null
+++ b/Resources/Prototypes/_White/RPD/rpd.yml
@@ -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
+
diff --git a/Resources/Prototypes/_White/Recipes/lathe_recipes.yml b/Resources/Prototypes/_White/Recipes/lathe_recipes.yml
index 1d1620b717..4cba462e3b 100644
--- a/Resources/Prototypes/_White/Recipes/lathe_recipes.yml
+++ b/Resources/Prototypes/_White/Recipes/lathe_recipes.yml
@@ -166,4 +166,20 @@
result: ShinanoGrenadeBeanbag
completetime: 3
materials:
- Steel: 800
\ No newline at end of file
+ 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
diff --git a/Resources/Textures/White/Items/Tools/rpd.rsi/equipped-BELT.png b/Resources/Textures/White/Items/Tools/rpd.rsi/equipped-BELT.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1182e5dfc1697421064bdb576af05c8c6eafdca
GIT binary patch
literal 422
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
diff --git a/Resources/Textures/_Sunrise/Entities/Objects/Devices/portable_camera_viewer.rsi/meta.json b/Resources/Textures/_Sunrise/Entities/Objects/Devices/portable_camera_viewer.rsi/meta.json
deleted file mode 100644
index fb7d306474..0000000000
--- a/Resources/Textures/_Sunrise/Entities/Objects/Devices/portable_camera_viewer.rsi/meta.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "version": 1,
- "size": {
- "x": 32,
- "y": 32
- },
- "license": "CC-BY-SA-3.0",
- "copyright": "",
- "states": [
- {
- "name": "icon"
- }
- ]
-}