Make recyclers great again (#6653)
Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
|||||||
using Content.Server.MachineLinking.Events;
|
using Content.Server.MachineLinking.Events;
|
||||||
using Content.Server.MachineLinking.Models;
|
using Content.Server.MachineLinking.Models;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
|
using Content.Server.Recycling;
|
||||||
|
using Content.Server.Recycling.Components;
|
||||||
using Content.Server.Stunnable;
|
using Content.Server.Stunnable;
|
||||||
using Content.Shared.Conveyor;
|
using Content.Shared.Conveyor;
|
||||||
using Content.Shared.Item;
|
using Content.Shared.Item;
|
||||||
@@ -20,6 +22,7 @@ namespace Content.Server.Conveyor
|
|||||||
{
|
{
|
||||||
public sealed class ConveyorSystem : EntitySystem
|
public sealed class ConveyorSystem : EntitySystem
|
||||||
{
|
{
|
||||||
|
[Dependency] private RecyclerSystem _recycler = default!;
|
||||||
[Dependency] private StunSystem _stunSystem = default!;
|
[Dependency] private StunSystem _stunSystem = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
@@ -87,6 +90,15 @@ namespace Content.Server.Conveyor
|
|||||||
TwoWayLeverSignal.Right => ConveyorState.Forward,
|
TwoWayLeverSignal.Right => ConveyorState.Forward,
|
||||||
_ => ConveyorState.Off
|
_ => ConveyorState.Off
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (TryComp<RecyclerComponent>(component.Owner, out var recycler))
|
||||||
|
{
|
||||||
|
if (component.State != ConveyorState.Off)
|
||||||
|
_recycler.EnableRecycler(recycler);
|
||||||
|
else
|
||||||
|
_recycler.DisableRecycler(recycler);
|
||||||
|
}
|
||||||
|
|
||||||
UpdateAppearance(component);
|
UpdateAppearance(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,8 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using Content.Server.Conveyor;
|
using Content.Server.Conveyor;
|
||||||
using Content.Shared.Conveyor;
|
using Content.Shared.Conveyor;
|
||||||
using Content.Shared.Movement.Components;
|
using Content.Shared.Movement.Components;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Maths;
|
|
||||||
using Robust.Shared.Physics;
|
using Robust.Shared.Physics;
|
||||||
using Robust.Shared.Physics.Controllers;
|
using Robust.Shared.Physics.Controllers;
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,20 @@
|
|||||||
using System;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Serialization.Manager.Attributes;
|
|
||||||
|
|
||||||
namespace Content.Server.Recycling.Components
|
namespace Content.Server.Recycling.Components
|
||||||
{
|
{
|
||||||
[RegisterComponent]
|
[RegisterComponent, Friend(typeof(RecyclerSystem))]
|
||||||
public sealed class RecyclableComponent : Component
|
public sealed class RecyclableComponent : Component
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IEntityManager _entMan = default!;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The prototype that will be spawned on recycle.
|
/// The prototype that will be spawned on recycle.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("prototype")] private string? _prototype;
|
[DataField("prototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))] public string? Prototype;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The amount of things that will be spawned on recycle.
|
/// The amount of things that will be spawned on recycle.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("amount")] private int _amount = 1;
|
[DataField("amount")] public int Amount = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether this is "safe" to recycle or not.
|
/// Whether this is "safe" to recycle or not.
|
||||||
@@ -26,19 +22,5 @@ namespace Content.Server.Recycling.Components
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("safe")]
|
[DataField("safe")]
|
||||||
public bool Safe { get; set; } = true;
|
public bool Safe { get; set; } = true;
|
||||||
|
|
||||||
public void Recycle(float efficiency = 1f)
|
|
||||||
{
|
|
||||||
if(!string.IsNullOrEmpty(_prototype))
|
|
||||||
{
|
|
||||||
for (var i = 0; i < Math.Max(_amount * efficiency, 1); i++)
|
|
||||||
{
|
|
||||||
_entMan.SpawnEntity(_prototype, _entMan.GetComponent<TransformComponent>(Owner).Coordinates);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
_entMan.QueueDeleteEntity(Owner);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,8 @@ using Content.Server.Popups;
|
|||||||
using Content.Shared.Body.Components;
|
using Content.Shared.Body.Components;
|
||||||
using Content.Shared.Popups;
|
using Content.Shared.Popups;
|
||||||
using Content.Shared.Recycling;
|
using Content.Shared.Recycling;
|
||||||
|
using Content.Shared.Sound;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Analyzers;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Localization;
|
|
||||||
using Robust.Shared.Serialization.Manager.Attributes;
|
|
||||||
using Robust.Shared.ViewVariables;
|
|
||||||
|
|
||||||
namespace Content.Server.Recycling.Components
|
namespace Content.Server.Recycling.Components
|
||||||
{
|
{
|
||||||
@@ -23,6 +18,10 @@ namespace Content.Server.Recycling.Components
|
|||||||
{
|
{
|
||||||
[Dependency] private readonly IEntityManager _entMan = default!;
|
[Dependency] private readonly IEntityManager _entMan = default!;
|
||||||
|
|
||||||
|
[ViewVariables]
|
||||||
|
[DataField("enabled")]
|
||||||
|
public bool Enabled = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Whether or not sentient beings will be recycled
|
/// Whether or not sentient beings will be recycled
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -47,13 +46,15 @@ namespace Content.Server.Recycling.Components
|
|||||||
|
|
||||||
SuicideKind ISuicideAct.Suicide(EntityUid victim, IChatManager chat)
|
SuicideKind ISuicideAct.Suicide(EntityUid victim, IChatManager chat)
|
||||||
{
|
{
|
||||||
if (_entMan.TryGetComponent(victim, out ActorComponent? actor) && actor.PlayerSession.ContentData()?.Mind is {} mind)
|
if (_entMan.TryGetComponent(victim, out ActorComponent? actor) &&
|
||||||
|
actor.PlayerSession.ContentData()?.Mind is { } mind)
|
||||||
{
|
{
|
||||||
EntitySystem.Get<GameTicker>().OnGhostAttempt(mind, false);
|
EntitySystem.Get<GameTicker>().OnGhostAttempt(mind, false);
|
||||||
mind.OwnedEntity?.PopupMessage(Loc.GetString("recycler-component-suicide-message"));
|
mind.OwnedEntity?.PopupMessage(Loc.GetString("recycler-component-suicide-message"));
|
||||||
}
|
}
|
||||||
|
|
||||||
victim.PopupMessageOtherClients(Loc.GetString("recycler-component-suicide-message-others", ("victim",victim)));
|
victim.PopupMessageOtherClients(Loc.GetString("recycler-component-suicide-message-others",
|
||||||
|
("victim", victim)));
|
||||||
|
|
||||||
if (_entMan.TryGetComponent<SharedBodyComponent?>(victim, out var body))
|
if (_entMan.TryGetComponent<SharedBodyComponent?>(victim, out var body))
|
||||||
{
|
{
|
||||||
@@ -61,8 +62,16 @@ namespace Content.Server.Recycling.Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
EntitySystem.Get<RecyclerSystem>().Bloodstain(this);
|
EntitySystem.Get<RecyclerSystem>().Bloodstain(this);
|
||||||
|
|
||||||
return SuicideKind.Bloodloss;
|
return SuicideKind.Bloodloss;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default sound to play when recycling
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)] [DataField("sound")]
|
||||||
|
public SoundSpecifier? Sound = new SoundPathSpecifier("/Audio/Effects/saw.ogg");
|
||||||
|
|
||||||
|
// Ratelimit sounds to avoid spam
|
||||||
|
public TimeSpan LastSound;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +1,93 @@
|
|||||||
|
using Content.Server.Audio;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
using Content.Server.Recycling.Components;
|
using Content.Server.Recycling.Components;
|
||||||
|
using Content.Shared.Audio;
|
||||||
using Content.Shared.Body.Components;
|
using Content.Shared.Body.Components;
|
||||||
using Content.Shared.Recycling;
|
|
||||||
using Content.Shared.Emag.Systems;
|
using Content.Shared.Emag.Systems;
|
||||||
using Robust.Shared.GameObjects;
|
using Content.Shared.Recycling;
|
||||||
using Robust.Shared.IoC;
|
using Content.Shared.Tag;
|
||||||
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Physics.Dynamics;
|
using Robust.Shared.Physics.Dynamics;
|
||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Server.Recycling
|
namespace Content.Server.Recycling
|
||||||
{
|
{
|
||||||
internal sealed class RecyclerSystem : EntitySystem
|
public sealed class RecyclerSystem : EntitySystem
|
||||||
{
|
{
|
||||||
|
[Dependency] private readonly IGameTiming _timing = default!;
|
||||||
|
[Dependency] private readonly AmbientSoundSystem _ambience = default!;
|
||||||
|
[Dependency] private readonly TagSystem _tags = default!;
|
||||||
|
|
||||||
|
private const float RecyclerSoundCooldown = 0.8f;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
SubscribeLocalEvent<RecyclerComponent, StartCollideEvent>(OnCollide);
|
||||||
SubscribeLocalEvent<RecyclerComponent, StartCollideEvent>(HandleCollide);
|
|
||||||
SubscribeLocalEvent<RecyclerComponent, GotEmaggedEvent>(OnEmagged);
|
SubscribeLocalEvent<RecyclerComponent, GotEmaggedEvent>(OnEmagged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleCollide(EntityUid uid, RecyclerComponent component, StartCollideEvent args)
|
public void EnableRecycler(RecyclerComponent component)
|
||||||
{
|
{
|
||||||
|
if (component.Enabled) return;
|
||||||
|
|
||||||
|
component.Enabled = true;
|
||||||
|
_ambience.SetAmbience(component.Owner, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DisableRecycler(RecyclerComponent component)
|
||||||
|
{
|
||||||
|
if (!component.Enabled) return;
|
||||||
|
|
||||||
|
component.Enabled = false;
|
||||||
|
_ambience.SetAmbience(component.Owner, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCollide(EntityUid uid, RecyclerComponent component, StartCollideEvent args)
|
||||||
|
{
|
||||||
|
if (component.Enabled && args.OurFixture.ID != "brrt") return;
|
||||||
|
|
||||||
Recycle(component, args.OtherFixture.Body.Owner);
|
Recycle(component, args.OtherFixture.Body.Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Recycle(RecyclerComponent component, EntityUid entity)
|
private void Recycle(RecyclerComponent component, EntityUid entity)
|
||||||
{
|
{
|
||||||
// TODO: Prevent collision with recycled items
|
RecyclableComponent? recyclable = null;
|
||||||
|
|
||||||
// Can only recycle things that are recyclable... And also check the safety of the thing to recycle.
|
// Can only recycle things that are recyclable... And also check the safety of the thing to recycle.
|
||||||
if (!EntityManager.TryGetComponent(entity, out RecyclableComponent? recyclable) || !recyclable.Safe && component.Safe) return;
|
if (!_tags.HasTag(entity, "Recyclable") &&
|
||||||
|
(!TryComp(entity, out recyclable) || !recyclable.Safe && component.Safe))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Prevent collision with recycled items
|
||||||
|
|
||||||
// Mobs are a special case!
|
// Mobs are a special case!
|
||||||
if (CanGib(component, entity))
|
if (CanGib(component, entity))
|
||||||
{
|
{
|
||||||
EntityManager.GetComponent<SharedBodyComponent>(entity).Gib(true);
|
Comp<SharedBodyComponent>(entity).Gib(true);
|
||||||
Bloodstain(component);
|
Bloodstain(component);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
recyclable.Recycle(component.Efficiency);
|
if (recyclable == null)
|
||||||
|
QueueDel(entity);
|
||||||
|
else
|
||||||
|
Recycle(recyclable, component.Efficiency);
|
||||||
|
|
||||||
|
if (component.Sound != null && (_timing.CurTime - component.LastSound).TotalSeconds > RecyclerSoundCooldown)
|
||||||
|
{
|
||||||
|
SoundSystem.Play(Filter.Pvs(component.Owner, entityManager: EntityManager), component.Sound.GetSound(), component.Owner, AudioHelpers.WithVariation(0.01f).WithVolume(-3));
|
||||||
|
component.LastSound = _timing.CurTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CanGib(RecyclerComponent component, EntityUid entity)
|
private bool CanGib(RecyclerComponent component, EntityUid entity)
|
||||||
{
|
{
|
||||||
// We suppose this entity has a Recyclable component.
|
// TODO: Power needs a helper for this jeez
|
||||||
return EntityManager.HasComponent<SharedBodyComponent>(entity) && !component.Safe &&
|
return HasComp<SharedBodyComponent>(entity) && !component.Safe &&
|
||||||
EntityManager.TryGetComponent(component.Owner, out ApcPowerReceiverComponent? receiver) && receiver.Powered;
|
TryComp<ApcPowerReceiverComponent>(component.Owner, out var receiver) && receiver.Powered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Bloodstain(RecyclerComponent component)
|
public void Bloodstain(RecyclerComponent component)
|
||||||
@@ -57,13 +98,26 @@ namespace Content.Server.Recycling
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Recycle(RecyclableComponent component, float efficiency = 1f)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(component.Prototype))
|
||||||
|
{
|
||||||
|
var xform = Transform(component.Owner);
|
||||||
|
|
||||||
|
for (var i = 0; i < Math.Max(component.Amount * efficiency, 1); i++)
|
||||||
|
{
|
||||||
|
Spawn(component.Prototype, xform.Coordinates);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QueueDel(component.Owner);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnEmagged(EntityUid uid, RecyclerComponent component, GotEmaggedEvent args)
|
private void OnEmagged(EntityUid uid, RecyclerComponent component, GotEmaggedEvent args)
|
||||||
{
|
{
|
||||||
if (component.Safe == true)
|
if (!component.Safe) return;
|
||||||
{
|
|
||||||
component.Safe = false;
|
component.Safe = false;
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
Resources/Audio/Ambience/Objects/circular_saw.ogg
Normal file
1
Resources/Audio/Ambience/Objects/license.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
circular_saw.ogg - https://freesound.org/people/derjuli/sounds/448133/ and clipped - CC0-1.0
|
||||||
@@ -1,20 +1,23 @@
|
|||||||
hit_kick.ogg is made by Taira Komori
|
adminhelp.ogg taken from https://github.com/tgstation/tgstation/blob/d775e1ac804eb9d0259573f5f29a18d320c97ef3/sound/effects/adminhelp.ogg
|
||||||
(https://taira-komori.jpn.org/freesounden.html)
|
|
||||||
|
|
||||||
smoke.ogg taken from https://github.com/tgstation/tgstation/blob/a5d362ce84e4f0c61026236d5ec84d3c81553664/sound/effects/smoke.ogg
|
|
||||||
|
|
||||||
adminhelp.ogg taken from https://github.com/tgstation/tgstation/blob/d775e1ac804eb9d0259573f5f29a18d320c97ef3/sound/effects/adminhelp.ogg
|
|
||||||
(available in master, therefore see master license: "All assets including icons and sound are under a Creative Commons 3.0 BY-SA license unless otherwise indicated.")
|
(available in master, therefore see master license: "All assets including icons and sound are under a Creative Commons 3.0 BY-SA license unless otherwise indicated.")
|
||||||
"Changed the adminhelpsound to some creative commons sound I pinched. Until somebody can get a better one. I'm sick of MAAAAAAAAOOOOOOW."
|
"Changed the adminhelpsound to some creative commons sound I pinched. Until somebody can get a better one. I'm sick of MAAAAAAAAOOOOOOW."
|
||||||
Actual source is https://freesound.org/people/martian/sounds/19261/ (CC0)
|
Actual source is https://freesound.org/people/martian/sounds/19261/ (CC0)
|
||||||
The sound had been reversed and the volume altered.
|
The sound had been reversed and the volume altered.
|
||||||
|
|
||||||
voteding.ogg taken from "Bike, Bell Ding, Single, 01-01.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org at https://freesound.org/people/InspectorJ/sounds/484344/ under CC BY 3.0. The volume has been reduced.
|
hit_kick.ogg is made by Taira Komori
|
||||||
|
(https://taira-komori.jpn.org/freesounden.html)
|
||||||
|
|
||||||
|
fire.ogg taken and edited from https://freesound.org/people/raremess/sounds/222557/
|
||||||
|
|
||||||
|
holy.ogg taken from https://freesound.org/people/random_intruder/sounds/392172/ and edited
|
||||||
|
|
||||||
poster_broken.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
poster_broken.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
||||||
|
|
||||||
poster_being_set.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
poster_being_set.ogg taken from https://github.com/tgstation/tgstation/blob/2834383245d2129a106acef3afd17b81e1e64777/sound/items/poster_ripped.ogg
|
||||||
|
|
||||||
fire.ogg taken and edited from https://freesound.org/people/raremess/sounds/222557/
|
saw.ogg taken from https://freesound.org/people/domiscz/sounds/461728/ and clipped - CC0-1.0
|
||||||
|
*It's actually an angle grinder
|
||||||
|
|
||||||
holy.ogg taken from https://freesound.org/people/random_intruder/sounds/392172/ and edited
|
smoke.ogg taken from https://github.com/tgstation/tgstation/blob/a5d362ce84e4f0c61026236d5ec84d3c81553664/sound/effects/smoke.ogg
|
||||||
|
|
||||||
|
voteding.ogg taken from "Bike, Bell Ding, Single, 01-01.wav" by InspectorJ (www.jshaw.co.uk) of Freesound.org at https://freesound.org/people/InspectorJ/sounds/484344/ under CC BY 3.0. The volume has been reduced.
|
||||||
BIN
Resources/Audio/Effects/saw.ogg
Normal file
@@ -2104,6 +2104,7 @@
|
|||||||
sprite: Objects/Consumable/Drinks/ramen.rsi
|
sprite: Objects/Consumable/Drinks/ramen.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
stateOpen: icon_open
|
stateOpen: icon_open
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: ItemCooldown
|
- type: ItemCooldown
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Cola
|
- Cola
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Consumable/Drinks/cola.rsi
|
sprite: Objects/Consumable/Drinks/cola.rsi
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,7 @@
|
|||||||
netsync: false
|
netsync: false
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
abstract: true
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Food
|
- type: Food
|
||||||
|
- type: Recyclable
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
netsync: false
|
netsync: false
|
||||||
|
|
||||||
|
|||||||
@@ -195,6 +195,7 @@
|
|||||||
- SmallImpassable
|
- SmallImpassable
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
solutions:
|
solutions:
|
||||||
|
|||||||
@@ -208,6 +208,7 @@
|
|||||||
HeldPrefix: packet
|
HeldPrefix: packet
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
openIcon: open
|
openIcon: open
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Cigarette
|
- Cigarette
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Cigarette
|
- Cigarette
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
@@ -42,6 +43,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Cigarette
|
- Cigarette
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- CigPack
|
- CigPack
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Storage
|
- type: Storage
|
||||||
|
|||||||
@@ -57,6 +57,7 @@
|
|||||||
size: 2
|
size: 2
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- RollingPaper
|
- RollingPaper
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
@@ -80,5 +81,6 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- CigFilter
|
- CigFilter
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
- type: BurnStateVisualizer
|
- type: BurnStateVisualizer
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
tags:
|
tags:
|
||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonWhite
|
- CrayonWhite
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -60,6 +62,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonWhite
|
- CrayonWhite
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -82,6 +85,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonBlack
|
- CrayonBlack
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -104,6 +108,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonRed
|
- CrayonRed
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -126,6 +131,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonOrange
|
- CrayonOrange
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -148,6 +154,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonYellow
|
- CrayonYellow
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -170,6 +177,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonGreen
|
- CrayonGreen
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -192,6 +200,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonBlue
|
- CrayonBlue
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -214,6 +223,7 @@
|
|||||||
- Write
|
- Write
|
||||||
- Crayon
|
- Crayon
|
||||||
- CrayonPurple
|
- CrayonPurple
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
Slash: 2
|
Slash: 2
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
Slash: 2
|
Slash: 2
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
sprite: Objects/Misc/utensils.rsi
|
sprite: Objects/Misc/utensils.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
- type: LightBulbVisualizer
|
- type: LightBulbVisualizer
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
emptySpriteName: medipen_empty
|
emptySpriteName: medipen_empty
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Bottle
|
- Bottle
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Flare
|
- Flare
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: ExpendableLight
|
- type: ExpendableLight
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: ExpendableLight
|
- type: ExpendableLight
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Matchstick
|
- Matchstick
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
@@ -80,5 +81,6 @@
|
|||||||
- matchbox3
|
- matchbox3
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
- Recyclable
|
||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Cartridge
|
- Cartridge
|
||||||
|
- Recyclable
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: 1
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
|
|||||||
@@ -4,22 +4,40 @@
|
|||||||
name: recycler
|
name: recycler
|
||||||
description: A large crushing machine used to recycle small items inefficiently. There are lights on the side.
|
description: A large crushing machine used to recycle small items inefficiently. There are lights on the side.
|
||||||
components:
|
components:
|
||||||
|
- type: AmbientSound
|
||||||
|
enabled: false
|
||||||
|
volume: -8
|
||||||
|
range: 5
|
||||||
|
sound:
|
||||||
|
# TODO: https://freesound.org/people/derjuli/sounds/448133/ CC-NC-
|
||||||
|
path: /Audio/Ambience/Objects/circular_saw.ogg
|
||||||
- type: Physics
|
- type: Physics
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
fixtures:
|
fixtures:
|
||||||
- shape:
|
- shape:
|
||||||
!type:PhysShapeAabb
|
!type:PhysShapeAabb
|
||||||
bounds: "-0.49,-0.49,0.49,0.49"
|
bounds: "-0.2,-0.2,0.2,0.2"
|
||||||
|
id: brrt
|
||||||
hard: false
|
hard: false
|
||||||
layer:
|
layer:
|
||||||
- Opaque
|
- Opaque
|
||||||
- Impassable
|
- Impassable
|
||||||
- MobImpassable
|
- MobImpassable
|
||||||
- VaultImpassable
|
- VaultImpassable
|
||||||
|
- shape:
|
||||||
|
!type:PhysShapeAabb
|
||||||
|
bounds: "-0.49,-0.49,0.49,0.49"
|
||||||
|
id: collision
|
||||||
|
hard: true
|
||||||
|
mask:
|
||||||
|
- Impassable
|
||||||
|
layer:
|
||||||
|
- Opaque
|
||||||
- type: Transform
|
- type: Transform
|
||||||
anchored: true
|
anchored: true
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
netsync: false
|
netsync: false
|
||||||
|
drawdepth: Doors
|
||||||
sprite: Structures/Machines/recycling.rsi
|
sprite: Structures/Machines/recycling.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: grinder-o0
|
- state: grinder-o0
|
||||||
|
|||||||
@@ -240,6 +240,10 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
id: Powerdrill
|
id: Powerdrill
|
||||||
|
|
||||||
|
# Give this to something that doesn't need any special recycler behavior and just needs deleting.
|
||||||
|
- type: Tag
|
||||||
|
id: Recyclable
|
||||||
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
id: RCDDeconstructWhitelist
|
id: RCDDeconstructWhitelist
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 16 KiB |