diff --git a/Content.Client/NetworkConfigurator/Systems/NetworkConfiguratorSystem.cs b/Content.Client/NetworkConfigurator/Systems/NetworkConfiguratorSystem.cs index 2d561ba5f21..374a2d7aa48 100644 --- a/Content.Client/NetworkConfigurator/Systems/NetworkConfiguratorSystem.cs +++ b/Content.Client/NetworkConfigurator/Systems/NetworkConfiguratorSystem.cs @@ -114,7 +114,8 @@ public StatusControl(NetworkConfiguratorComponent configurator, string keyBindin _configurator = configurator; _keyBindingName = keyBindingName; _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; - AddChild(_label); + if (_configurator.ShowLabel) // Shitmed - Starlight Abductors: Allow hiding the label on multitools that dont need List mode. + AddChild(_label); } protected override void FrameUpdate(FrameEventArgs args) @@ -126,6 +127,9 @@ protected override void FrameUpdate(FrameEventArgs args) _linkModeActive = _configurator.LinkModeActive; + if (!_configurator.ShowLabel) // Shitmed - Starlight Abductors: Allow hiding the label on multitools that dont need List mode. + return; + var modeLocString = _linkModeActive??false ? "network-configurator-examine-mode-link" : "network-configurator-examine-mode-list"; diff --git a/Content.Client/Silicons/StationAi/StationAiOverlay.cs b/Content.Client/Silicons/StationAi/StationAiOverlay.cs index 15a8a3a63fe..641ffe7e988 100644 --- a/Content.Client/Silicons/StationAi/StationAiOverlay.cs +++ b/Content.Client/Silicons/StationAi/StationAiOverlay.cs @@ -7,6 +7,7 @@ using Robust.Shared.Physics; using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using Content.Shared.Movement.Components; // Shitmed - Starlight Abductors Change namespace Content.Client.Silicons.StationAi; @@ -50,6 +51,14 @@ protected override void Draw(in OverlayDrawArgs args) var worldBounds = args.WorldBounds; var playerEnt = _player.LocalEntity; + + // Shitmed - Starlight Abductors Change Start + if (_entManager.TryGetComponent(playerEnt, out StationAiOverlayComponent? stationAiOverlay) + && stationAiOverlay.AllowCrossGrid + && _entManager.TryGetComponent(playerEnt, out RelayInputMoverComponent? relay)) + playerEnt = relay.RelayEntity; + // Shitmed Change End + _entManager.TryGetComponent(playerEnt, out TransformComponent? playerXform); var gridUid = playerXform?.GridUid ?? EntityUid.Invalid; _entManager.TryGetComponent(gridUid, out MapGridComponent? grid); diff --git a/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleBui.cs b/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleBui.cs new file mode 100644 index 00000000000..d47b2a4fea1 --- /dev/null +++ b/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleBui.cs @@ -0,0 +1,130 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Client._Shitmed.Choice.UI; +using JetBrains.Annotations; +using static Content.Shared.Pinpointer.SharedNavMapSystem; + +namespace Content.Client._Shitmed.Antags.Abductor; + +[UsedImplicitly] +public sealed class AbductorCameraConsoleBui : BoundUserInterface +{ + [ViewVariables] + private AbductorCameraConsoleWindow? _window; + private int? _station; + public AbductorCameraConsoleBui(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + protected override void Open() => UpdateState(State); + protected override void UpdateState(BoundUserInterfaceState? state) + { + if (state is AbductorCameraConsoleBuiState s) + Update(s); + } + + private void Update(AbductorCameraConsoleBuiState state) + { + TryInitWindow(); + + View(ViewType.Stations); + + RefreshUI(); + + if (!_window!.IsOpen) + _window.OpenCentered(); + } + + private void TryInitWindow() + { + if (_window != null) return; + _window = new AbductorCameraConsoleWindow(); + _window.OnClose += Close; + _window.Title = "Intercepted cameras."; + + _window.StationsButton.OnPressed += _ => + { + _station = null; + View(ViewType.Stations); + }; + } + + private void OnStationPressed(int station, List beacons) + { + if (_window == null) + return; + + _station = station; + + foreach (var beacon in beacons) + { + var beaconButton = new ChoiceControl(); + + beaconButton.Set(beacon.Text, null); + beaconButton.Button.Modulate = beacon.Color; + beaconButton.Button.OnPressed += _ => + { + SendMessage(new AbductorBeaconChosenBuiMsg() + { + Beacon = beacon, + }); + Close(); + }; + _window.Beacons.AddChild(beaconButton); + } + View(ViewType.Beacons); + } + + private void RefreshUI() + { + if (_window == null || State is not AbductorCameraConsoleBuiState state) + return; + + _window!.Stations.DisposeAllChildren(); + _window.Beacons.DisposeAllChildren(); + + foreach (var station in state.Stations) + { + var stationButton = new ChoiceControl(); + + stationButton.Set(station.Value.Name, null); + stationButton.Button.OnPressed += _ => OnStationPressed(station.Key, station.Value.Beacons); + + _window.Stations.AddChild(stationButton); + + if (station.Key == _station) OnStationPressed(station.Key, station.Value.Beacons); + } + } + + private void View(ViewType type) + { + if (_window == null) + return; + + _window.StationsButton.Parent!.Margin = new Thickness(0, 0, 0, 10); + + _window.Stations.Visible = type == ViewType.Stations; + _window.StationsButton.Visible = true; + + _window.Beacons.Visible = type == ViewType.Beacons; + _window.BeaconsButton.Disabled = type != ViewType.Beacons; + + _window.Title = State is not AbductorCameraConsoleBuiState state + || _station == null + || !state.Stations.TryGetValue(_station.Value, out var station) + ? "Stations" + : $"Station - {station.Name}"; + } + + private enum ViewType + { + Stations, + Beacons, + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + _window?.Dispose(); + } +} diff --git a/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleWindow.xaml b/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleWindow.xaml new file mode 100644 index 00000000000..1ddad42ccc6 --- /dev/null +++ b/Content.Client/_Shitmed/Antags/Abductor/AbductorCameraConsoleWindow.xaml @@ -0,0 +1,19 @@ + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/Content.Client/_Shitmed/Xenonids/UI/XenoChoiceControl.xaml.cs b/Content.Client/_Shitmed/Choice/UI/ChoiceControl.xaml.cs similarity index 75% rename from Content.Client/_Shitmed/Xenonids/UI/XenoChoiceControl.xaml.cs rename to Content.Client/_Shitmed/Choice/UI/ChoiceControl.xaml.cs index 459a1e4bd73..ac2a8385ac0 100644 --- a/Content.Client/_Shitmed/Xenonids/UI/XenoChoiceControl.xaml.cs +++ b/Content.Client/_Shitmed/Choice/UI/ChoiceControl.xaml.cs @@ -4,13 +4,13 @@ using Robust.Client.UserInterface.XAML; using Robust.Shared.Utility; -namespace Content.Client._Shitmed.Xenonids.UI; +namespace Content.Client._Shitmed.Choice.UI; [GenerateTypedNameReferences] [Virtual] -public partial class XenoChoiceControl : Control +public partial class ChoiceControl : Control { - public XenoChoiceControl() => RobustXamlLoader.Load(this); + public ChoiceControl() => RobustXamlLoader.Load(this); public void Set(string name, Texture? texture) { diff --git a/Content.Client/_Shitmed/ItemSwitch/ItemSwitchStatusControl.cs b/Content.Client/_Shitmed/ItemSwitch/ItemSwitchStatusControl.cs new file mode 100644 index 00000000000..51525e182d4 --- /dev/null +++ b/Content.Client/_Shitmed/ItemSwitch/ItemSwitchStatusControl.cs @@ -0,0 +1,36 @@ +using Content.Client.Items.UI; +using Content.Client.Message; +using Content.Client.Stylesheets; +using Robust.Client.UserInterface.Controls; +using Content.Shared._Shitmed.ItemSwitch.Components; + +namespace Content.Client._Shitmed.ItemSwitch.UI; + +public sealed class ItemSwitchStatusControl : PollingItemStatusControl +{ + private readonly Entity _parent; + private readonly RichTextLabel _label; + + public ItemSwitchStatusControl(Entity parent) + { + _parent = parent; + _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; + if (parent.Comp.ShowLabel) + AddChild(_label); + + UpdateDraw(); + } + + protected override Data PollData() + { + return new Data(_parent.Comp.State); + } + + protected override void Update(in Data data) + { + _label.SetMarkup(Loc.GetString("itemswitch-component-on-examine-detailed-message", + ("state", data.State))); + } + + public record struct Data(string State); +} diff --git a/Content.Client/_Shitmed/ItemSwitch/ItemSwitchSystem.cs b/Content.Client/_Shitmed/ItemSwitch/ItemSwitchSystem.cs new file mode 100644 index 00000000000..0a428233677 --- /dev/null +++ b/Content.Client/_Shitmed/ItemSwitch/ItemSwitchSystem.cs @@ -0,0 +1,28 @@ +using Content.Client.Items; +using Content.Shared._Shitmed.ItemSwitch; +using Content.Shared._Shitmed.ItemSwitch.Components; +using Content.Client._Shitmed.ItemSwitch.UI; +using Robust.Client.GameObjects; + +namespace Content.Client._Shitmed.ItemSwitch; + +public sealed class ItemSwitchSystem : SharedItemSwitchSystem +{ + public override void Initialize() + { + base.Initialize(); + + Subs.ItemStatus(ent => new ItemSwitchStatusControl(ent)); + SubscribeLocalEvent(OnChanged); + } + + private void OnChanged(Entity ent, ref AfterAutoHandleStateEvent args) => UpdateVisuals(ent, ent.Comp.State); + + protected override void UpdateVisuals(Entity ent, string key) + { + base.UpdateVisuals(ent, key); + if (TryComp(ent, out SpriteComponent? sprite) && ent.Comp.States.TryGetValue(key, out var state)) + if (state.Sprite != null) + sprite.LayerSetSprite(0, state.Sprite); + } +} diff --git a/Content.Client/_Shitmed/Medical/Surgery/SurgeryBui.cs b/Content.Client/_Shitmed/Medical/Surgery/SurgeryBui.cs index 0aa7f7b589e..7b53603e2b2 100644 --- a/Content.Client/_Shitmed/Medical/Surgery/SurgeryBui.cs +++ b/Content.Client/_Shitmed/Medical/Surgery/SurgeryBui.cs @@ -1,4 +1,4 @@ -using Content.Client._Shitmed.Xenonids.UI; +using Content.Client._Shitmed.Choice.UI; using Content.Client.Administration.UI.CustomControls; using Content.Shared._Shitmed.Medical.Surgery; using Content.Shared.Body.Components; @@ -146,7 +146,7 @@ int GetScore(BodyPartType? partType) { //var netPart = _entities.GetNetEntity(part.Owner); var surgeries = state.Choices[netEntity]; - var partButton = new XenoChoiceControl(); + var partButton = new ChoiceControl(); partButton.Set(partName, null); partButton.Button.OnPressed += _ => OnPartPressed(netEntity, surgeries); @@ -200,7 +200,7 @@ private void OnSurgeryPressed(Entity surgery, NetEntity netPar // This apparently does not consider if theres multiple surgery requirements in one surgery. Maybe thats fine. if (surgery.Comp.Requirement is { } requirementId && _system.GetSingleton(requirementId) is { } requirement) { - var label = new XenoChoiceControl(); + var label = new ChoiceControl(); label.Button.OnPressed += _ => { _previousSurgeries.Add(surgeryId); @@ -257,7 +257,7 @@ private void OnPartPressed(NetEntity netPart, List surgeryIds) foreach (var surgery in surgeries) { - var surgeryButton = new XenoChoiceControl(); + var surgeryButton = new ChoiceControl(); surgeryButton.Set(surgery.Name, null); surgeryButton.Button.OnPressed += _ => OnSurgeryPressed(surgery.Ent, netPart, surgery.Id); diff --git a/Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml.cs b/Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml.cs index 5c39db09b61..78e25688500 100644 --- a/Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml.cs +++ b/Content.Client/_Shitmed/Medical/Surgery/SurgeryStepButton.xaml.cs @@ -1,11 +1,11 @@ -using Content.Client._Shitmed.Xenonids.UI; +using Content.Client._Shitmed.Choice.UI; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; namespace Content.Client._Shitmed.Medical.Surgery; [GenerateTypedNameReferences] -public sealed partial class SurgeryStepButton : XenoChoiceControl +public sealed partial class SurgeryStepButton : ChoiceControl { public EntityUid Step { get; set; } diff --git a/Content.Server/Charges/Systems/ChargesSystem.cs b/Content.Server/Charges/Systems/ChargesSystem.cs index d60d524a8dc..1d8520adda1 100644 --- a/Content.Server/Charges/Systems/ChargesSystem.cs +++ b/Content.Server/Charges/Systems/ChargesSystem.cs @@ -11,6 +11,17 @@ public sealed class ChargesSystem : SharedChargesSystem { [Dependency] private readonly IGameTiming _timing = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, AutoRechargeComponent comp, ComponentInit args) + { + comp.NextChargeTime = _timing.CurTime + comp.RechargeDuration; + } + public override void Update(float frameTime) { base.Update(frameTime); diff --git a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs index 536c4239cb0..e3568dd4909 100644 --- a/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/AntagLoadProfileRuleSystem.cs @@ -43,6 +43,9 @@ private void OnSelectEntity(Entity ent, ref Antag species = _proto.Index(ent.Comp.SpeciesOverride.Value); } + if (ent.Comp.SpeciesHardOverride is not null) // Shitmed - Starlight Abductors + species = _proto.Index(ent.Comp.SpeciesHardOverride.Value); // Shitmed - Starlight Abductors + args.Entity = Spawn(species.Prototype); _humanoid.LoadProfile(args.Entity.Value, profile?.WithSpecies(species.ID)); } diff --git a/Content.Server/GameTicking/Rules/Components/AntagLoadProfileRuleCOmponent.cs b/Content.Server/GameTicking/Rules/Components/AntagLoadProfileRuleCOmponent.cs index 8ac23891ede..98002c4970b 100644 --- a/Content.Server/GameTicking/Rules/Components/AntagLoadProfileRuleCOmponent.cs +++ b/Content.Server/GameTicking/Rules/Components/AntagLoadProfileRuleCOmponent.cs @@ -27,4 +27,10 @@ public sealed partial class AntagLoadProfileRuleComponent : Component /// [DataField] public bool AlwaysUseSpeciesOverride; + + /// + /// Shitmed - Starlight Abductors: Species valid for the rule. + /// + [DataField] + public ProtoId? SpeciesHardOverride; } diff --git a/Content.Server/Spawners/EntitySystems/SpawnerSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnerSystem.cs index c601fdd2875..e796a7822d0 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnerSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnerSystem.cs @@ -1,6 +1,8 @@ using System.Threading; using Content.Server.Spawners.Components; using Robust.Shared.Random; +using Content.Shared.Friends.Components; // Shitmed Change +using Content.Shared._Shitmed.Spawners.EntitySystems; // Shitmed Change namespace Content.Server.Spawners.EntitySystems; @@ -33,7 +35,11 @@ private void OnTimerFired(EntityUid uid, TimedSpawnerComponent component) for (var i = 0; i < number; i++) { var entity = _random.Pick(component.Prototypes); - SpawnAtPosition(entity, coordinates); + // Shitmed Change Start + var spawnedEnt = SpawnAtPosition(entity, coordinates); + var ev = new SpawnerSpawnedEvent(spawnedEnt, HasComp(spawnedEnt)); + RaiseLocalEvent(uid, ev); + // Shitmed Change End } } diff --git a/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Actions.cs b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Actions.cs new file mode 100644 index 00000000000..f460a3c898e --- /dev/null +++ b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Actions.cs @@ -0,0 +1,146 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Content.Shared.Effects; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Spawners; +using Robust.Shared.Audio.Systems; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Movement.Pulling.Components; + +namespace Content.Server._Shitmed.Antags.Abductor; + +public sealed partial class AbductorSystem : SharedAbductorSystem +{ + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; + [Dependency] private readonly PullingSystem _pullingSystem = default!; + + private static readonly EntProtoId SendYourself = "ActionSendYourself"; + private static readonly EntProtoId ExitAction = "ActionExitConsole"; + private static readonly EntProtoId TeleportationEffect = "EffectTeleportation"; + private static readonly EntProtoId TeleportationEffectEntity = "EffectTeleportationEntity"; + + public void InitializeActions() + { + SubscribeLocalEvent(AbductorScientistComponentStartup); + + SubscribeLocalEvent(OnExit); + + SubscribeLocalEvent(OnReturn); + SubscribeLocalEvent(OnDoAfterAbductorReturn); + + SubscribeLocalEvent(OnSendYourself); + SubscribeLocalEvent(OnDoAfterSendYourself); + } + + private void AbductorScientistComponentStartup(Entity ent, ref ComponentStartup args) + => ent.Comp.SpawnPosition = EnsureComp(ent).Coordinates; + + private void OnReturn(AbductorReturnToShipEvent ev) + { + EnsureComp(ev.Performer, out var abductorScientistComponent); + AddTeleportationEffect(ev.Performer, 3.0f, TeleportationEffectEntity, out var effectEnt, true, true); + + if (abductorScientistComponent.SpawnPosition.HasValue) + { + var effect = _entityManager.SpawnEntity(TeleportationEffect, abductorScientistComponent.SpawnPosition.Value); + EnsureComp(effect, out var despawnComp); + despawnComp.Lifetime = 3.0f; + _audioSystem.PlayPvs("/Audio/_Shitmed/Misc/alien_teleport.ogg", effect); + } + + var doAfter = new DoAfterArgs(EntityManager, ev.Performer, TimeSpan.FromSeconds(3), new AbductorReturnDoAfterEvent(), ev.Performer) + { + MultiplyDelay = false, + }; + _doAfter.TryStartDoAfter(doAfter); + ev.Handled = true; + } + private void OnDoAfterAbductorReturn(Entity ent, ref AbductorReturnDoAfterEvent args) + { + if (args.Handled || args.Cancelled) + return; + + _color.RaiseEffect(Color.FromHex("#BA0099"), new List(1) { ent }, Filter.Pvs(ent, entityManager: EntityManager)); + StopPulls(ent); + if (ent.Comp.SpawnPosition is not null) + _xformSys.SetCoordinates(ent, ent.Comp.SpawnPosition.Value); + OnCameraExit(ent); + } + + private void OnSendYourself(SendYourselfEvent ev) + { + Logger.Debug($"{ToPrettyString(ev.Performer)}"); + AddTeleportationEffect(ev.Performer, 5.0f, TeleportationEffectEntity, out var effectEnt, true, false); + var effect = _entityManager.SpawnEntity(TeleportationEffect, ev.Target); + EnsureComp(effect, out var _); + + var @event = new AbductorSendYourselfDoAfterEvent(GetNetCoordinates(ev.Target)); + var doAfter = new DoAfterArgs(EntityManager, ev.Performer, TimeSpan.FromSeconds(5), @event, ev.Performer); + _doAfter.TryStartDoAfter(doAfter); + ev.Handled = true; + } + private void OnDoAfterSendYourself(Entity ent, ref AbductorSendYourselfDoAfterEvent args) + { + _color.RaiseEffect(Color.FromHex("#BA0099"), new List(1) { ent }, Filter.Pvs(ent, entityManager: EntityManager)); + StopPulls(ent); + _xformSys.SetCoordinates(ent, GetCoordinates(args.TargetCoordinates)); + OnCameraExit(ent); + } + + private void OnExit(ExitConsoleEvent ev) => OnCameraExit(ev.Performer); + + private void AddActions(AbductorBeaconChosenBuiMsg args) + { + EnsureComp(args.Actor, out var comp); + comp.HiddenActions = _actions.HideActions(args.Actor); + _actions.AddAction(args.Actor, ref comp.ExitConsole, ExitAction); + _actions.AddAction(args.Actor, ref comp.SendYourself, SendYourself); + } + private void RemoveActions(EntityUid actor) + { + EnsureComp(actor, out var comp); + _actions.RemoveAction(actor, comp.ExitConsole); + _actions.RemoveAction(actor, comp.SendYourself); + _actions.UnHideActions(actor, comp.HiddenActions); + } + + private void StopPulls(EntityUid ent) + { + if (_pullingSystem.IsPulling(ent)) + { + if (!TryComp(ent, out var pullerComp) + || pullerComp.Pulling == null + || !TryComp(pullerComp.Pulling.Value, out var pullableComp) + || !_pullingSystem.TryStopPull(pullerComp.Pulling.Value, pullableComp)) return; + } + + if (_pullingSystem.IsPulled(ent)) + { + if (!TryComp(ent, out var pullableComp) + || !_pullingSystem.TryStopPull(ent, pullableComp)) return; + } + } + + private void AddTeleportationEffect(EntityUid performer, + float lifetime, + EntProtoId effectEntity, + out EntityUid effectEnt, + bool applyColor = true, + bool playAudio = true) + { + if (applyColor) + _color.RaiseEffect(Color.FromHex("#BA0099"), new List(1) { performer }, Filter.Pvs(performer, entityManager: EntityManager)); + + EnsureComp(performer, out var xform); + effectEnt = SpawnAttachedTo(effectEntity, xform.Coordinates); + _xformSys.SetParent(effectEnt, performer); + EnsureComp(effectEnt, out var despawnComp); + despawnComp.Lifetime = lifetime; + + if (playAudio) + _audioSystem.PlayPvs("/Audio/_Shitmed/Misc/alien_teleport.ogg", effectEnt); + } +} diff --git a/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Console.cs b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Console.cs new file mode 100644 index 00000000000..10239e846b6 --- /dev/null +++ b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Console.cs @@ -0,0 +1,159 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared.UserInterface; +using System.Linq; +using Content.Shared.DoAfter; +using Content.Shared._Shitmed.Medical.Surgery; +using Robust.Shared.Spawners; +using Content.Shared.Objectives.Components; +using Content.Server.Objectives.Systems; +using Content.Shared.Mind.Components; +using Content.Shared.Mind; +using Content.Shared.Movement.Pulling.Components; + +namespace Content.Server._Shitmed.Antags.Abductor; + +public sealed partial class AbductorSystem : SharedAbductorSystem +{ + [Dependency] private readonly NumberObjectiveSystem _number = default!; + + public void InitializeConsole() + { + SubscribeLocalEvent(OnBeforeActivatableUIOpen); + SubscribeLocalEvent(OnAbductGetProgress); + + Subs.BuiEvents(AbductorConsoleUIKey.Key, subs => subs.Event(OnAttractBuiMsg)); + Subs.BuiEvents(AbductorConsoleUIKey.Key, subs => subs.Event(OnCompleteExperimentBuiMsg)); + SubscribeLocalEvent(OnDoAfterAttract); + } + private void OnAbductGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) + => args.Progress = AbductProgress(ent.Comp, _number.GetTarget(ent.Owner)); + + private float AbductProgress(AbductConditionComponent comp, int target) + => target == 0 ? 1f : MathF.Min(comp.Abducted / (float) target, 1f); + + private void OnCompleteExperimentBuiMsg(EntityUid uid, AbductorConsoleComponent component, AbductorCompleteExperimentBuiMsg args) + { + if (component.Experimentator != null + && GetEntity(component.Experimentator) is EntityUid experimentatorId + && TryComp(experimentatorId, out var experimentatorComp)) + { + var container = _container.GetContainer(experimentatorId, experimentatorComp.ContainerId); + var victim = container.ContainedEntities.FirstOrDefault(HasComp); + if (victim != default && TryComp(victim, out AbductorVictimComponent? victimComp)) + { + if (victimComp.Implanted + && TryComp(args.Actor, out var mindContainer) + && mindContainer.Mind.HasValue + && TryComp(mindContainer.Mind.Value, out var mind) + && mind.Objectives.FirstOrDefault(HasComp) is EntityUid objId + && TryComp(objId, out var condition) + && !condition.AbductedHashs.Contains(GetNetEntity(victim))) + { + condition.AbductedHashs.Add(GetNetEntity(victim)); + condition.Abducted++; + } + _audioSystem.PlayPvs("/Audio/Voice/Human/wilhelm_scream.ogg", experimentatorId); + + if (victimComp.Position is not null) + _xformSys.SetCoordinates(victim, victimComp.Position.Value); + } + } + } + + private void OnAttractBuiMsg(Entity ent, ref AbductorAttractBuiMsg args) + { + if (ent.Comp.Target == null || ent.Comp.AlienPod == null) return; + var target = GetEntity(ent.Comp.Target.Value); + EnsureComp(target, out var xform); + var effectEnt = SpawnAttachedTo(TeleportationEffectEntity, xform.Coordinates); + _xformSys.SetParent(effectEnt, target); + EnsureComp(effectEnt, out var despawnEffectEntComp); + despawnEffectEntComp.Lifetime = 3.0f; + _audioSystem.PlayPvs("/Audio/_Shitmed/Misc/alien_teleport.ogg", effectEnt); + + var telepad = GetEntity(ent.Comp.AlienPod.Value); + var telepadXform = EnsureComp(telepad); + var effect = _entityManager.SpawnEntity(TeleportationEffect, telepadXform.Coordinates); + EnsureComp(effect, out var despawnComp); + despawnComp.Lifetime = 3.0f; + _audioSystem.PlayPvs("/Audio/_Shitmed/Misc/alien_teleport.ogg", effect); + + var @event = new AbductorAttractDoAfterEvent(GetNetCoordinates(telepadXform.Coordinates), GetNetEntity(target)); + ent.Comp.Target = null; + var doAfter = new DoAfterArgs(EntityManager, args.Actor, TimeSpan.FromSeconds(3), @event, args.Actor) + { + BreakOnDamage = false, + BreakOnDropItem = false, + BreakOnHandChange = false, + BreakOnMove = false, + BreakOnWeightlessMove = false, + }; + _doAfter.TryStartDoAfter(doAfter); + } + private void OnDoAfterAttract(Entity ent, ref AbductorAttractDoAfterEvent args) + { + if (args.Handled || args.Cancelled) + return; + + var victim = GetEntity(args.Victim); + if (_pullingSystem.IsPulling(victim)) + { + if (!TryComp(victim, out var pullerComp) + || pullerComp.Pulling == null + || !TryComp(pullerComp.Pulling.Value, out var pullableComp) + || !_pullingSystem.TryStopPull(pullerComp.Pulling.Value, pullableComp)) return; + } + if (_pullingSystem.IsPulled(victim)) + { + if (!TryComp(victim, out var pullableComp) + || !_pullingSystem.TryStopPull(victim, pullableComp)) return; + } + _xformSys.SetCoordinates(victim, GetCoordinates(args.TargetCoordinates)); + } + private void OnBeforeActivatableUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args) => UpdateGui(ent.Comp.Target, ent); + + protected override void UpdateGui(NetEntity? target, Entity computer) + { + string? targetName = null; + string? victimName = null; + if (target.HasValue && TryComp(GetEntity(target.Value), out MetaDataComponent? metadata)) + targetName = metadata?.EntityName; + + if (computer.Comp.AlienPod == null) + { + var xform = EnsureComp(computer.Owner); + var alienpad = _entityLookup.GetEntitiesInRange(xform.Coordinates, 4, LookupFlags.Approximate | LookupFlags.Dynamic) + .FirstOrDefault().Owner; + if (alienpad != default) + computer.Comp.AlienPod = GetNetEntity(alienpad); + } + + if (computer.Comp.Experimentator == null) + { + var xform = EnsureComp(computer.Owner); + var experimentator = _entityLookup.GetEntitiesInRange(xform.Coordinates, 4, LookupFlags.Approximate | LookupFlags.Dynamic) + .FirstOrDefault().Owner; + if (experimentator != default) + computer.Comp.Experimentator = GetNetEntity(experimentator); + } + + if (computer.Comp.Experimentator != null + && GetEntity(computer.Comp.Experimentator) is EntityUid experimentatorId + && TryComp(experimentatorId, out var experimentatorComp)) + { + var container = _container.GetContainer(experimentatorId, experimentatorComp.ContainerId); + var victim = container.ContainedEntities.FirstOrDefault(e => HasComp(e)); + if (victim != default && TryComp(victim, out MetaDataComponent? victimMetadata)) + victimName = victimMetadata?.EntityName; + } + + _uiSystem.SetUiState(computer.Owner, AbductorConsoleUIKey.Key, new AbductorConsoleBuiState() + { + Target = target, + TargetName = targetName, + VictimName = victimName, + AlienPadFound = computer.Comp.AlienPod != default, + ExperimentatorFound = computer.Comp.Experimentator != default + }); + } +} diff --git a/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Gizmo.cs b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Gizmo.cs new file mode 100644 index 00000000000..aa7d93f274a --- /dev/null +++ b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Gizmo.cs @@ -0,0 +1,79 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared._Shitmed.Medical.Surgery; +using Content.Shared.ActionBlocker; +using Content.Shared.DoAfter; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Server._Shitmed.Antags.Abductor; + +public sealed partial class AbductorSystem : SharedAbductorSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; + [Dependency] private readonly IGameTiming _time = default!; + private static readonly ProtoId Abductor = "Abductor"; + public void InitializeGizmo() + { + SubscribeLocalEvent(OnGizmoInteract); + SubscribeLocalEvent(OnGizmoHitInteract); + + SubscribeLocalEvent(OnGizmoDoAfter); + } + + private void OnGizmoHitInteract(Entity ent, ref MeleeHitEvent args) + { + if (args.HitEntities.Count != 1) return; + var target = args.HitEntities[0]; + if (!HasComp(target)) return; + GizmoUse(ent, target, args.User); + } + + private void OnGizmoInteract(Entity ent, ref AfterInteractEvent args) + { + if (!_actionBlockerSystem.CanInstrumentInteract(args.User, args.Used, args.Target)) return; + if (!args.Target.HasValue) return; + + if (TryComp(args.Target, out var console)) + { + console.Target = ent.Comp.Target; + _popup.PopupClient(Loc.GetString("abductors-ui-gizmo-transferred"), args.User); + _color.RaiseEffect(Color.FromHex("#00BA00"), new List(2) { ent.Owner, args.Target.Value }, Filter.Pvs(args.User, entityManager: EntityManager)); + UpdateGui(console.Target, (args.Target.Value, console)); + return; + } + + if (HasComp(args.Target)) + GizmoUse(ent, args.Target.Value, args.User); + } + + private void GizmoUse(Entity ent, EntityUid target, EntityUid user) + { + var time = TimeSpan.FromSeconds(6); + if (_tags.HasTag(target, Abductor)) + time = TimeSpan.FromSeconds(0.5); + + var doAfter = new DoAfterArgs(EntityManager, user, time, new AbductorGizmoMarkDoAfterEvent(), ent, target, ent.Owner) + { + BreakOnMove = true, + BreakOnDamage = true, + DistanceThreshold = 1f + }; + _doAfter.TryStartDoAfter(doAfter); + } + + private void OnGizmoDoAfter(Entity ent, ref AbductorGizmoMarkDoAfterEvent args) + { + if (args.Target is null) return; + ent.Comp.Target = GetNetEntity(args.Target); + EnsureComp(args.Target.Value, out var victimComponent); + victimComponent.LastActivation = _time.CurTime + TimeSpan.FromMinutes(5); + + victimComponent.Position ??= EnsureComp(args.Target.Value).Coordinates; + } +} diff --git a/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Victim.cs b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Victim.cs new file mode 100644 index 00000000000..925f5ee4968 --- /dev/null +++ b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.Victim.cs @@ -0,0 +1,51 @@ +using Content.Server._Shitmed.GameTicking.Rules.Components; +using Content.Server.Administration.Logs; +using Content.Server.Antag; +using Content.Server.Mind; +using Content.Server.Roles; +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared._Shitmed.Medical.Surgery; +using Content.Shared._Shitmed.Medical.Surgery.Steps; +using Content.Shared.Database; +using Content.Shared.Humanoid; +using Robust.Shared.Player; +namespace Content.Server._Shitmed.Antags.Abductor; + +public sealed partial class AbductorSystem : SharedAbductorSystem +{ + [Dependency] private readonly IAdminLogManager _adminLogManager = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly RoleSystem _role = default!; + [Dependency] private readonly AntagSelectionSystem _antag = default!; + + private static readonly string DefaultAbductorVictimRule = "AbductorVictim"; + public void InitializeVictim() + { + SubscribeLocalEvent(OnSurgeryStepComplete); + } + private void OnSurgeryStepComplete(EntityUid uid, AbductorComponent comp, ref SurgeryStepEvent args) + { + if (!HasComp(args.Step) + || !args.Complete + || !TryComp(args.Body, out var victimComp) + || victimComp.Implanted + || !HasComp(args.Body) + || !_mind.TryGetMind(args.Body, out var mindId, out var mind) + || !TryComp(args.Body, out var actor)) + return; + + if (mindId == default + || !_role.MindHasRole(mindId, out _, out var role)) + { + _role.MindAddRole(mindId, "MindRoleAbductorVictim"); + victimComp.Implanted = true; + _antag.ForceMakeAntag(actor.PlayerSession, DefaultAbductorVictimRule); + + _adminLogManager.Add(LogType.Mind, + LogImpact.Medium, + $"{ToPrettyString(args.User)} has given {ToPrettyString(args.Body)} an abductee objective."); + + } + + } +} diff --git a/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.cs b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.cs new file mode 100644 index 00000000000..c78cd460982 --- /dev/null +++ b/Content.Server/_Shitmed/Antags/Abductor/AbductorSystem.cs @@ -0,0 +1,166 @@ +using Content.Server.Actions; +using Content.Server.DoAfter; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared.Eye; +using Content.Shared.Movement.Components; +using Content.Shared.Movement.Systems; +using Content.Shared.Pinpointer; +using Content.Shared.Inventory.VirtualItem; +using Content.Shared.Interaction.Components; +using Content.Shared.Silicons.StationAi; +using Content.Shared.UserInterface; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Robust.Server.GameObjects; +using Content.Shared.Tag; +using Robust.Server.Containers; + +namespace Content.Server._Shitmed.Antags.Abductor; + +public sealed partial class AbductorSystem : SharedAbductorSystem +{ + [Dependency] private readonly StationSystem _stationSystem = default!; + [Dependency] private readonly EntityManager _entityManager = default!; + [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedEyeSystem _eye = default!; + [Dependency] private readonly SharedMoverController _mover = default!; + [Dependency] private readonly ActionsSystem _actions = default!; + [Dependency] private readonly DoAfterSystem _doAfter = default!; + [Dependency] private readonly TransformSystem _xformSys = default!; + [Dependency] private readonly TagSystem _tags = default!; + [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedVirtualItemSystem _virtualItem = default!; + + private EntityUid? console = null; + + public override void Initialize() + { + SubscribeLocalEvent(OnBeforeActivatableUIOpen); + + Subs.BuiEvents(AbductorCameraConsoleUIKey.Key, subs => subs.Event(OnAbductorBeaconChosenBuiMsg)); + InitializeActions(); + InitializeGizmo(); + InitializeConsole(); + InitializeVictim(); + base.Initialize(); + } + + private void OnAbductorBeaconChosenBuiMsg(Entity ent, ref AbductorBeaconChosenBuiMsg args) + { + OnCameraExit(ent.Owner); + if (ent.Comp.RemoteEntityProto != null) + { + var beacon = _entityManager.GetEntity(args.Beacon.NetEnt); + var eye = SpawnAtPosition(ent.Comp.RemoteEntityProto, Transform(beacon).Coordinates); + ent.Comp.RemoteEntity = GetNetEntity(eye); + + console = ent.Owner; + + if (TryComp(args.Actor, out var handsComponent)) + { + foreach (var hand in _hands.EnumerateHands(args.Actor, handsComponent)) + { + if (hand.HeldEntity == null) + continue; + + if (HasComp(hand.HeldEntity)) + continue; + + _hands.DoDrop(args.Actor, hand, true, handsComponent); + } + + if (_virtualItem.TrySpawnVirtualItemInHand(ent.Owner, args.Actor, out var virtItem1)) + { + EnsureComp(virtItem1.Value); + } + + if (_virtualItem.TrySpawnVirtualItemInHand(ent.Owner, args.Actor, out var virtItem2)) + { + EnsureComp(virtItem2.Value); + } + } + + var visibility = EnsureComp(eye); + + Dirty(ent); + + if (TryComp(args.Actor, out EyeComponent? eyeComp)) + { + _eye.SetVisibilityMask(args.Actor, eyeComp.VisibilityMask | (int) VisibilityFlags.Abductor, eyeComp); + _eye.SetTarget(args.Actor, eye, eyeComp); + _eye.SetDrawFov(args.Actor, false); + _eye.SetRotation(args.Actor, Angle.Zero, eyeComp); + if (!HasComp(args.Actor)) + AddComp(args.Actor, new StationAiOverlayComponent { AllowCrossGrid = true }); + if (!TryComp(eye, out RemoteEyeSourceContainerComponent? remoteEyeSourceContainerComponent)) + { + remoteEyeSourceContainerComponent = new RemoteEyeSourceContainerComponent { Actor = args.Actor }; + AddComp(eye, remoteEyeSourceContainerComponent); + } + else + remoteEyeSourceContainerComponent.Actor = args.Actor; + Dirty(eye, remoteEyeSourceContainerComponent); + Dirty(args.Actor, eyeComp); + } + + AddActions(args); + + _mover.SetRelay(args.Actor, eye); + } + } + + private void OnCameraExit(EntityUid actor) + { + if (TryComp(actor, out var comp)) + { + var relay = comp.RelayEntity; + RemComp(actor, comp); + + if (console != null) + _virtualItem.DeleteInHandsMatching(actor, console.Value); + + if (TryComp(actor, out EyeComponent? eyeComp)) + { + if (HasComp(actor)) + RemComp(actor); + + _eye.SetVisibilityMask(actor, eyeComp.VisibilityMask ^ (int) VisibilityFlags.Abductor, eyeComp); + _eye.SetDrawFov(actor, true); + _eye.SetTarget(actor, null, eyeComp); + } + RemoveActions(actor); + QueueDel(relay); + } + } + + private void OnBeforeActivatableUIOpen(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + var stations = _stationSystem.GetStations(); + var result = new Dictionary(); + + foreach (var station in stations) + { + if (_stationSystem.GetLargestGrid(Comp(station)) is not { } grid + || !TryComp(station, out MetaDataComponent? stationMetaData)) + return; + + var mapId = Transform(grid).MapID; + + if (!_entityManager.TryGetComponent(grid, out var navMap)) + return; + + result.Add(station.Id, new StationBeacons + { + Name = stationMetaData.EntityName, + StationId = station.Id, + Beacons = [.. navMap.Beacons.Values], + }); + } + + _uiSystem.SetUiState(ent.Owner, AbductorCameraConsoleUIKey.Key, new AbductorCameraConsoleBuiState() { Stations = result }); + } +} diff --git a/Content.Server/_Shitmed/Body/BodyEffects/Subsystems/RandomStatusActivationSystem.cs b/Content.Server/_Shitmed/Body/BodyEffects/Subsystems/RandomStatusActivationSystem.cs new file mode 100644 index 00000000000..5ff6018e14b --- /dev/null +++ b/Content.Server/_Shitmed/Body/BodyEffects/Subsystems/RandomStatusActivationSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared._Shitmed.BodyEffects.Subsystems; +using Content.Shared.Body.Organ; +using Content.Shared.StatusEffect; +using Robust.Shared.Timing; +using Robust.Shared.Random; + +namespace Content.Server._Shitmed.BodyEffects.Subsystems; + +public sealed class RandomStatusActivationSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly StatusEffectsSystem _effects = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, RandomStatusActivationComponent component, ComponentInit args) => GetRandomTime(component); + private void GetRandomTime(RandomStatusActivationComponent component) + { + var minTime = component.MinActivationTime; + var maxTime = component.MaxActivationTime; + var randomSeconds = _random.NextDouble() * (maxTime - minTime).TotalSeconds; + var randomSpan = TimeSpan.FromSeconds(randomSeconds); + component.NextUpdate = _timing.CurTime + minTime + randomSpan; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + var now = _timing.CurTime; + while (query.MoveNext(out var uid, out var comp)) + { + if (now < comp.NextUpdate) + continue; + + if (!TryComp(uid, out var effects)) + continue; + + foreach (var (key, component) in comp.StatusEffects) + _effects.TryAddStatusEffect(uid, key, comp.Duration ?? TimeSpan.FromSeconds(1), refresh: true, component, effects); + + GetRandomTime(comp); + } + } +} diff --git a/Content.Server/_Shitmed/GameTicking/Rules/Components/AbductorVictimRuleComponent.cs b/Content.Server/_Shitmed/GameTicking/Rules/Components/AbductorVictimRuleComponent.cs new file mode 100644 index 00000000000..f9d7c0406e2 --- /dev/null +++ b/Content.Server/_Shitmed/GameTicking/Rules/Components/AbductorVictimRuleComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Random; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server._Shitmed.GameTicking.Rules.Components; + +[RegisterComponent] +public sealed partial class AbductorVictimRuleComponent : Component; diff --git a/Content.Server/_Shitmed/ItemSwitch/ItemSwitchSystem.cs b/Content.Server/_Shitmed/ItemSwitch/ItemSwitchSystem.cs new file mode 100644 index 00000000000..fe1f1a6888b --- /dev/null +++ b/Content.Server/_Shitmed/ItemSwitch/ItemSwitchSystem.cs @@ -0,0 +1,7 @@ +using Content.Shared._Shitmed.ItemSwitch; + +namespace Content.Server._Shitmed.ItemSwitch; + +public sealed class ItemSwitchSystem : SharedItemSwitchSystem +{ +} diff --git a/Content.Server/_Shitmed/Objectives/Components/ForceHereticObjectiveComponent.cs b/Content.Server/_Shitmed/Objectives/Components/ForceHereticObjectiveComponent.cs new file mode 100644 index 00000000000..763fad401cc --- /dev/null +++ b/Content.Server/_Shitmed/Objectives/Components/ForceHereticObjectiveComponent.cs @@ -0,0 +1,9 @@ +using Content.Server.Objectives.Systems; + +namespace Content.Server._Shitmed.Objectives.Components; + +/// +/// I had a really bad idea and im shitcoding this! +/// +[RegisterComponent] +public sealed partial class ForceHereticObjectiveComponent : Component; diff --git a/Content.Server/_Shitmed/Objectives/Components/RoleplayObjectiveComponent.cs b/Content.Server/_Shitmed/Objectives/Components/RoleplayObjectiveComponent.cs new file mode 100644 index 00000000000..8f9dbbc20b9 --- /dev/null +++ b/Content.Server/_Shitmed/Objectives/Components/RoleplayObjectiveComponent.cs @@ -0,0 +1,9 @@ +using Content.Server.Objectives.Systems; + +namespace Content.Server._Shitmed.Objectives.Components; + +/// +/// Objective doesn't have a completion objective. Purely exists as a fancier roleplay prompt. Greentext by default. +/// +[RegisterComponent] +public sealed partial class RoleplayObjectiveComponent : Component; diff --git a/Content.Server/_Shitmed/Objectives/Systems/ForceHereticObjectiveSystem.cs b/Content.Server/_Shitmed/Objectives/Systems/ForceHereticObjectiveSystem.cs new file mode 100644 index 00000000000..fcb19d2f71f --- /dev/null +++ b/Content.Server/_Shitmed/Objectives/Systems/ForceHereticObjectiveSystem.cs @@ -0,0 +1,37 @@ +using Content.Server._Shitmed.Objectives.Components; +using Content.Server.Administration.Logs; +using Content.Server.Antag; +using Content.Server.GameTicking.Rules.Components; +using Content.Shared.Database; +using Content.Shared.Mind; +using Robust.Shared.Player; +namespace Content.Server._Shitmed.Objectives.Systems; + +public sealed class ForceHereticObjectiveSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly IAdminLogManager _adminLogManager = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnObjectiveAdded); + } + + private void OnObjectiveAdded(EntityUid uid, MindComponent comp, ref ObjectiveAddedEvent args) + { + if (!TryComp(comp.CurrentEntity, out var actor)) + return; + + if (HasComp(args.Objective)) + { + _antag.ForceMakeAntag(actor.PlayerSession, "Heretic"); + + _adminLogManager.Add(LogType.Mind, + LogImpact.Medium, + $"{ToPrettyString(uid)} has been given heretic status by an antag objective."); + } + } +} diff --git a/Content.Server/_Shitmed/Objectives/Systems/RoleplayObjectiveSystem.cs b/Content.Server/_Shitmed/Objectives/Systems/RoleplayObjectiveSystem.cs new file mode 100644 index 00000000000..f80eb55eebc --- /dev/null +++ b/Content.Server/_Shitmed/Objectives/Systems/RoleplayObjectiveSystem.cs @@ -0,0 +1,22 @@ +using Content.Server._Shitmed.Objectives.Components; +using Content.Shared.Mind; +using Content.Shared.Objectives.Components; + +namespace Content.Server._Shitmed.Objectives.Systems; + +public sealed class RoleplayObjectiveSystem : EntitySystem +{ + [Dependency] private readonly SharedMindSystem _mind = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRoleplayGetProgress); + } + + private void OnRoleplayGetProgress(EntityUid uid, RoleplayObjectiveComponent comp, ref ObjectiveGetProgressEvent args) + { + args.Progress = 1f; + } +} diff --git a/Content.Server/_Shitmed/OnHit/OnHitSystem.cs b/Content.Server/_Shitmed/OnHit/OnHitSystem.cs new file mode 100644 index 00000000000..292d0bafe1b --- /dev/null +++ b/Content.Server/_Shitmed/OnHit/OnHitSystem.cs @@ -0,0 +1,37 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared._Shitmed.Medical.Surgery; +using Content.Shared._Shitmed.OnHit; +using Content.Shared.Actions; +using Content.Shared.DoAfter; +using Robust.Shared.Prototypes; +using Content.Shared.Cuffs.Components; +using Content.Shared.Damage.Components; +using Content.Shared.Weapons.Melee.Events; + +namespace Content.Server._Shitmed.OnHit; + +public sealed partial class OnHitSystem : SharedOnHitSystem +{ + public override void Initialize() + { + SubscribeLocalEvent(OnCuffsOnHitDoAfter); + base.Initialize(); + } + private void OnCuffsOnHitDoAfter(Entity ent, ref CuffsOnHitDoAfter args) + { + if (!args.Args.Target.HasValue || args.Handled || args.Cancelled) return; + + var user = args.Args.User; + var target = args.Args.Target.Value; + + if (!TryComp(target, out var cuffable) || cuffable.Container.Count != 0) + return; + + args.Handled = true; + + var handcuffs = SpawnNextToOrDrop(ent.Comp.HandcuffProtorype, args.User); + + if (!_cuffs.TryAddNewCuffs(target, user, handcuffs, cuffable)) + QueueDel(handcuffs); + } +} diff --git a/Content.Server/_Shitmed/Roles/AbductorVictimRoleComponent.cs b/Content.Server/_Shitmed/Roles/AbductorVictimRoleComponent.cs new file mode 100644 index 00000000000..b13e6bda46e --- /dev/null +++ b/Content.Server/_Shitmed/Roles/AbductorVictimRoleComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared.Roles; + +namespace Content.Server.Roles; + +/// +/// Added to mind role entities to tag that they are an Abductor Victim. +/// +[RegisterComponent] +public sealed partial class AbductorVictimRoleComponent : BaseMindRoleComponent; diff --git a/Content.Server/_Shitmed/StatusEffects/ActivateArtifactEffectSystem.cs b/Content.Server/_Shitmed/StatusEffects/ActivateArtifactEffectSystem.cs new file mode 100644 index 00000000000..dae8c7b537b --- /dev/null +++ b/Content.Server/_Shitmed/StatusEffects/ActivateArtifactEffectSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared._Shitmed.StatusEffects; +using Content.Server.Xenoarchaeology.XenoArtifacts; + +namespace Content.Server._Shitmed.StatusEffects; + +public sealed class ActivateArtifactEffectSystem : EntitySystem +{ + [Dependency] private readonly ArtifactSystem _artifact = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + } + private void OnInit(EntityUid uid, ActivateArtifactEffectComponent component, ComponentInit args) + { + if (!TryComp(uid, out var artifact)) + return; + + _artifact.TryActivateArtifact(uid, logMissing: false); + } + + +} + diff --git a/Content.Server/_Shitmed/StatusEffects/ExpelGasSystem.cs b/Content.Server/_Shitmed/StatusEffects/ExpelGasSystem.cs new file mode 100644 index 00000000000..deae1f35c04 --- /dev/null +++ b/Content.Server/_Shitmed/StatusEffects/ExpelGasSystem.cs @@ -0,0 +1,28 @@ +using Content.Shared._Shitmed.StatusEffects; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Chat.Systems; +using Robust.Shared.Random; + +namespace Content.Server._Shitmed.StatusEffects; + +public sealed class ExpelGasEffectSystem : EntitySystem +{ + [Dependency] private readonly AtmosphereSystem _atmos = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + } + private void OnInit(EntityUid uid, ExpelGasComponent component, ComponentInit args) + { + var mix = _atmos.GetContainingMixture((uid, Transform(uid)), true, true) ?? new(); + var gas = _random.Pick(component.PossibleGases); + mix.AdjustMoles(gas, 60); + _chat.TryEmoteWithChat(uid, "Fart"); + } + + +} + diff --git a/Content.Server/_Shitmed/StatusEffects/ScramEffectSystem.cs b/Content.Server/_Shitmed/StatusEffects/ScramEffectSystem.cs new file mode 100644 index 00000000000..ea1b9d597af --- /dev/null +++ b/Content.Server/_Shitmed/StatusEffects/ScramEffectSystem.cs @@ -0,0 +1,21 @@ +using Content.Shared._Shitmed.StatusEffects; +using Content.Server.Teleportation; + +namespace Content.Server._Shitmed.StatusEffects; + +public sealed class ScrambleLocationEffectSystem : EntitySystem +{ + [Dependency] private readonly TeleportSystem _teleportSys = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + } + private void OnInit(EntityUid uid, ScrambleLocationEffectComponent component, ComponentInit args) + { + // TODO: Add the teleport component via onAdd: + var teleport = EnsureComp(uid); + _teleportSys.RandomTeleport(uid, teleport); + } + + +} \ No newline at end of file diff --git a/Content.Server/_Shitmed/StatusEffects/ScrambleDnaEffectSystem.cs b/Content.Server/_Shitmed/StatusEffects/ScrambleDnaEffectSystem.cs new file mode 100644 index 00000000000..f2cb398aa58 --- /dev/null +++ b/Content.Server/_Shitmed/StatusEffects/ScrambleDnaEffectSystem.cs @@ -0,0 +1,45 @@ +using Content.Server.Forensics; +using Content.Server.Humanoid; +using Content.Shared._Shitmed.StatusEffects; +using Content.Shared.Forensics; +using Content.Shared.Humanoid; +using Content.Shared.Preferences; +using Content.Shared.Popups; + +namespace Content.Server._Shitmed.StatusEffects; + +public sealed class ScrambleDnaEffectSystem : EntitySystem +{ + [Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearance = default!; + [Dependency] private readonly ForensicsSystem _forensicsSystem = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, ScrambleDnaEffectComponent component, ComponentInit args) + { + if (TryComp(uid, out var humanoid)) + { + var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species); + _humanoidAppearance.LoadProfile(uid, newProfile, humanoid); + _metaData.SetEntityName(uid, newProfile.Name); + if (TryComp(uid, out var dna)) + { + dna.DNA = _forensicsSystem.GenerateDNA(); + + var ev = new GenerateDnaEvent { Owner = uid, DNA = dna.DNA }; + RaiseLocalEvent(uid, ref ev); + } + if (TryComp(uid, out var fingerprint)) + { + fingerprint.Fingerprint = _forensicsSystem.GenerateFingerprint(); + } + _popup.PopupEntity(Loc.GetString("scramble-implant-activated-popup"), uid, uid); + } + } + + +} \ No newline at end of file diff --git a/Content.Server/_Shitmed/StatusEffects/SpawnEntityEffectSystem.cs b/Content.Server/_Shitmed/StatusEffects/SpawnEntityEffectSystem.cs new file mode 100644 index 00000000000..0418e732a35 --- /dev/null +++ b/Content.Server/_Shitmed/StatusEffects/SpawnEntityEffectSystem.cs @@ -0,0 +1,47 @@ +using Content.Shared.NPC.Components; +using Content.Shared.NPC.Systems; +using Content.Shared._Shitmed.StatusEffects; + +namespace Content.Server._Shitmed.StatusEffects; + +public sealed class SpawnEntityEffectSystem : EntitySystem +{ + [Dependency] private readonly SharedTransformSystem _xformSys = default!; + [Dependency] private readonly NpcFactionSystem _factionException = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, SpawnEntityEffectComponent component, ComponentInit args) + { + EntityUid entity; + + if (component.AttachToParent) + { + entity = SpawnAttachedTo(component.EntityPrototype, Transform(uid).Coordinates); + _xformSys.SetParent(entity, uid); + } + else + { + entity = Spawn(component.EntityPrototype, Transform(uid).Coordinates); + } + + if (component.IsFriendly) + { + if (EnsureComp(entity, out var comp)) + return; + + _factionException.IgnoreEntities(entity, new[] { uid }); + } + + } + + +} \ No newline at end of file diff --git a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs index 2b56a2bc093..4f99ae5916c 100644 --- a/Content.Shared/ActionBlocker/ActionBlockerSystem.cs +++ b/Content.Shared/ActionBlocker/ActionBlockerSystem.cs @@ -241,5 +241,15 @@ public bool CanSweat(EntityUid uid) return !ev.Cancelled; } + + // Shitmed Change Start - Starlight Abductors + public bool CanInstrumentInteract(EntityUid user, EntityUid used, EntityUid? target) + { + var ev = new InteractionAttemptEvent(user, target); + RaiseLocalEvent(used, ref ev); + + return !ev.Cancelled; + } + // Shitmed Change End - Starlight Abductors } } diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index f3ae5fcb558..a0b6b4b1ce6 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -1165,4 +1165,27 @@ protected bool ShouldResetCharges(BaseActionComponent action) { return action is { Charges: < 1, RenewCharges: true }; } + + // Shitmed Change Start - Starlight Abductors + public EntityUid[] HideActions(EntityUid performer, ActionsComponent? comp = null) + { + if (!Resolve(performer, ref comp, false)) + return []; + + var actions = comp.Actions.ToArray(); + comp.Actions.Clear(); + Dirty(performer, comp); + return actions; + } + + public void UnHideActions(EntityUid performer, EntityUid[] actions, ActionsComponent? comp = null) + { + if (!Resolve(performer, ref comp, false)) + return; + + foreach (var action in actions) + comp.Actions.Add(action); + Dirty(performer, comp); + } + // Shitmed Change End } diff --git a/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs b/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs index 27c74a9640a..05567c71dcd 100644 --- a/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs +++ b/Content.Shared/DeviceNetwork/Components/NetworkConfiguratorComponent.cs @@ -56,4 +56,7 @@ public sealed partial class NetworkConfiguratorComponent : Component [DataField] public SoundSpecifier SoundSwitchMode = new SoundPathSpecifier("/Audio/Machines/quickbeep.ogg"); + + [DataField] + public bool ShowLabel = true; // Shitmed - Starlight Abductors Change } diff --git a/Content.Shared/Emag/Components/EmagComponent.cs b/Content.Shared/Emag/Components/EmagComponent.cs index a271945242e..fa59686bbac 100644 --- a/Content.Shared/Emag/Components/EmagComponent.cs +++ b/Content.Shared/Emag/Components/EmagComponent.cs @@ -2,6 +2,8 @@ using Content.Shared.Tag; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Serialization; +using Content.Shared.Whitelist; // Shitmed - Starlight Abductors namespace Content.Shared.Emag.Components; @@ -16,4 +18,10 @@ public sealed partial class EmagComponent : Component [DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer)), ViewVariables(VVAccess.ReadWrite)] [AutoNetworkedField] public string EmagImmuneTag = "EmagImmune"; + + /// + /// Shitmed - Starlight Abductors: Entities that this EMAG works on. + /// + [DataField, AutoNetworkedField] + public EntityWhitelist? ValidTargets; } diff --git a/Content.Shared/Emag/Systems/EmagSystem.cs b/Content.Shared/Emag/Systems/EmagSystem.cs index 9319e145854..99175393a2b 100644 --- a/Content.Shared/Emag/Systems/EmagSystem.cs +++ b/Content.Shared/Emag/Systems/EmagSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Tag; +using Content.Shared.Whitelist; // Shitmed - Starlight Abductors namespace Content.Shared.Emag.Systems; @@ -22,6 +23,7 @@ public sealed class EmagSystem : EntitySystem [Dependency] private readonly SharedChargesSystem _charges = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; // DeltaV - Add a whitelist/blacklist to the Emag public override void Initialize() { @@ -56,6 +58,13 @@ public bool TryUseEmag(EntityUid uid, EntityUid user, EntityUid target, EmagComp return false; } + // Shitmed - Starlight Abductors: Check if the target has a whitelist, and check if it passes + if (_whitelist.IsWhitelistFail(comp.ValidTargets, target)) + { + _popup.PopupClient(Loc.GetString("emag-attempt-failed", ("tool", uid)), user, user); + return false; + } + var handled = DoEmagEffect(user, target, uid); // Goob edit if (!handled) return false; diff --git a/Content.Shared/Eye/VisibilityFlags.cs b/Content.Shared/Eye/VisibilityFlags.cs index a4037f2bd74..96229bdd4fc 100644 --- a/Content.Shared/Eye/VisibilityFlags.cs +++ b/Content.Shared/Eye/VisibilityFlags.cs @@ -9,5 +9,6 @@ public enum VisibilityFlags : int None = 0, Normal = 1 << 0, Ghost = 1 << 1, + Abductor = 1 << 2, // Shitmed Change - Starlight Abductors } } diff --git a/Content.Shared/Friends/Systems/PettableFriendSystem.cs b/Content.Shared/Friends/Systems/PettableFriendSystem.cs index 6e41f4bdea9..dc101818dd6 100644 --- a/Content.Shared/Friends/Systems/PettableFriendSystem.cs +++ b/Content.Shared/Friends/Systems/PettableFriendSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.NPC.Systems; using Content.Shared.Popups; using Content.Shared.Timing; +using Content.Shared._Shitmed.Spawners.EntitySystems; // Shitmed Change namespace Content.Shared.Friends.Systems; @@ -26,6 +27,7 @@ public override void Initialize() SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnRehydrated); + SubscribeLocalEvent(OnSpawned); // Shitmed Change } private void OnUseInHand(Entity ent, ref UseInHandEvent args) @@ -59,4 +61,13 @@ private void OnRehydrated(Entity ent, ref GotRehydrated _factionException.IgnoreEntities(args.Target, comp.Ignored); } + + // Shitmed Change + private void OnSpawned(Entity ent, ref SpawnerSpawnedEvent args) + { + if (!TryComp(ent, out var comp)) + return; + + _factionException.IgnoreEntities(args.Entity, comp.Ignored); + } } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index d19ad6b5fd4..02b30340544 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -159,7 +159,7 @@ private void OnBoundInterfaceInteractAttempt(BoundUserInterfaceMessageAttempt ev if (!_actionBlockerSystem.CanInteract(ev.Actor, ev.Target)) { // We permit ghosts to open uis unless explicitly blocked - if (ev.Message is not OpenBoundInterfaceMessage || !HasComp(ev.Actor) || uiComp?.BlockSpectators == true) + if (ev.Message is not OpenBoundInterfaceMessage || !HasComp(ev.Actor) || uiComp?.BlockSpectators == true || _tagSystem.HasTag(ev.Actor, "CantInteract")) // Shitmed Change { ev.Cancel(); return; diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index b0d5e8caf0e..8942c7b6743 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -349,6 +349,9 @@ public void AddObjective(EntityUid mindId, MindComponent mind, EntityUid objecti var title = Name(objective); _adminLogger.Add(LogType.Mind, LogImpact.Low, $"Objective {objective} ({title}) added to mind of {MindOwnerLoggingString(mind)}"); mind.Objectives.Add(objective); + // Shitmed Change - Raise an event on the mind ent with the objective. + var ev = new ObjectiveAddedEvent(objective); + RaiseLocalEvent(mindId, ev); } /// @@ -563,3 +566,9 @@ public HashSet> GetAliveHumans(EntityUid? exclude = null, /// [ByRefEvent] public record struct GetCharactedDeadIcEvent(bool? Dead); + +/// +/// Shitmed Change: Raised on an entity to notify that an objective has been added to the mind. +/// +/// +public record struct ObjectiveAddedEvent(EntityUid Objective); diff --git a/Content.Shared/Movement/Events/MoveInputEvent.cs b/Content.Shared/Movement/Events/MoveInputEvent.cs index 9c49da722cb..08cb6a4b9f1 100644 --- a/Content.Shared/Movement/Events/MoveInputEvent.cs +++ b/Content.Shared/Movement/Events/MoveInputEvent.cs @@ -11,12 +11,17 @@ public readonly struct MoveInputEvent { public readonly Entity Entity; public readonly MoveButtons OldMovement; + public readonly Direction Dir; // Shitmed Change + public readonly bool State; // Shitmed Change public bool HasDirectionalMovement => (Entity.Comp.HeldMoveButtons & MoveButtons.AnyDirection) != MoveButtons.None; - public MoveInputEvent(Entity entity, MoveButtons oldMovement) + public MoveInputEvent(Entity entity, MoveButtons oldMovement, Direction dir, bool state) // Shitmed Change { Entity = entity; OldMovement = oldMovement; + // Shitmed Change + Dir = dir; + State = state; } } diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index 6f508d9038c..5e107b086ba 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -13,6 +13,7 @@ using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.Utility; +using Robust.Shared.Maths; // Shitmed Change namespace Content.Shared.Movement.Systems { @@ -92,7 +93,12 @@ protected void SetMoveInput(Entity entity, MoveButtons butt // Relay the fact we had any movement event. // TODO: Ideally we'd do these in a tick instead of out of sim. - var moveEvent = new MoveInputEvent(entity, entity.Comp.HeldMoveButtons); + // Shitmed Change Start + Vector2 vector2 = DirVecForButtons(buttons); + Vector2i vector2i = new Vector2i((int) vector2.X, (int) vector2.Y); + Direction dir = (vector2i == Vector2i.Zero) ? Direction.Invalid : vector2i.AsDirection(); + var moveEvent = new MoveInputEvent(entity, buttons, dir, buttons != 0); + // Shitmed Change End entity.Comp.HeldMoveButtons = buttons; RaiseLocalEvent(entity, ref moveEvent); Dirty(entity, entity.Comp); @@ -116,10 +122,14 @@ private void OnMoverHandleState(Entity entity, ref Componen // Reset entity.Comp.LastInputTick = GameTick.Zero; entity.Comp.LastInputSubTick = 0; - + // Shitmed Change Start + Vector2 vector2 = DirVecForButtons(entity.Comp.HeldMoveButtons); + Vector2i vector2i = new Vector2i((int) vector2.X, (int) vector2.Y); + Direction dir = (vector2i == Vector2i.Zero) ? Direction.Invalid : vector2i.AsDirection(); + // Shitmed Change End if (entity.Comp.HeldMoveButtons != state.HeldMoveButtons) { - var moveEvent = new MoveInputEvent(entity, entity.Comp.HeldMoveButtons); + var moveEvent = new MoveInputEvent(entity, entity.Comp.HeldMoveButtons, dir, state.HeldMoveButtons != 0); // Shitmed Change entity.Comp.HeldMoveButtons = state.HeldMoveButtons; RaiseLocalEvent(entity.Owner, ref moveEvent); @@ -167,9 +177,17 @@ public void ResetCamera(EntityUid uid) return; } + // Shitmed Change Start + var xform = XformQuery.GetComponent(uid); + if (TryComp(uid, out RelayInputMoverComponent? relay) + && TryComp(relay.RelayEntity, out TransformComponent? relayXform) + && MoverQuery.TryGetComponent(relay.RelayEntity, out var relayMover)) + xform = relayXform; + // If we updated parent then cancel the accumulator and force it now. - if (!TryUpdateRelative(mover, XformQuery.GetComponent(uid)) && mover.TargetRelativeRotation.Equals(Angle.Zero)) + if (!TryUpdateRelative(mover, xform) && mover.TargetRelativeRotation.Equals(Angle.Zero)) return; + // Shitmed Change End mover.LerpTarget = TimeSpan.Zero; mover.TargetRelativeRotation = Angle.Zero; @@ -313,6 +331,12 @@ private void HandleDirChange(EntityUid entity, Direction dir, ushort subTick, bo if (!MoverQuery.TryGetComponent(entity, out var moverComp)) return; + // Shitmed Change Start + var moverEntity = new Entity(entity, moverComp); + var moveEvent = new MoveInputEvent(moverEntity, moverComp.HeldMoveButtons, dir, state); + RaiseLocalEvent(entity, ref moveEvent); + // Shitmed Change End + // For stuff like "Moving out of locker" or the likes // We'll relay a movement input to the parent. if (_container.IsEntityInContainer(entity) && diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index 472d56b1d69..3dc8e4a19de 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -124,28 +124,44 @@ protected void HandleMobMovement( { if (_mobState.IsIncapacitated(relayTarget.Source) || TryComp(relayTarget.Source, out _) || - !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover)) + // Shitmed Change + !PhysicsQuery.TryGetComponent(relayTarget.Source, out var relayedPhysicsComponent) || + !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover) || + !XformQuery.TryGetComponent(relayTarget.Source, out var relayedXform)) { canMove = false; } else { + mover.LerpTarget = relayedMover.LerpTarget; mover.RelativeEntity = relayedMover.RelativeEntity; mover.RelativeRotation = relayedMover.RelativeRotation; mover.TargetRelativeRotation = relayedMover.TargetRelativeRotation; + HandleMobMovement(relayTarget.Source, relayedMover, relayTarget.Source, relayedPhysicsComponent, relayedXform, frameTime); } } // Update relative movement - if (mover.LerpTarget < Timing.CurTime) + // Shitmed Change Start + else { - if (TryUpdateRelative(mover, xform)) + if (mover.LerpTarget < Timing.CurTime) { - Dirty(uid, mover); + if (TryComp(uid, out RelayInputMoverComponent? relay) + && TryComp(relay.RelayEntity, out TransformComponent? relayXform)) + { + if (TryUpdateRelative(mover, relayXform)) + Dirty(uid, mover); + } + else + { + if (TryUpdateRelative(mover, xform)) + Dirty(uid, mover); + } } + LerpRotation(uid, mover, frameTime); } - - LerpRotation(uid, mover, frameTime); + // Shitmed Change End if (!canMove || physicsComponent.BodyStatus != BodyStatus.OnGround && !CanMoveInAirQuery.HasComponent(uid) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index dd4b920f8cf..a51503d6c70 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -186,10 +186,17 @@ private void OnAiBuiCheck(Entity ent, ref BoundUser private void OnAiInRange(Entity ent, ref InRangeOverrideEvent args) { args.Handled = true; - var targetXform = Transform(args.Target); + + // Shitmed - Starlight Abductors Change Start + var target = args.Target; + if (ent.Comp.AllowCrossGrid && TryComp(ent, out RelayInputMoverComponent? relay)) + target = relay.RelayEntity; + // Shitmed Change End + + var targetXform = Transform(target); // No cross-grid - if (targetXform.GridUid != Transform(args.User).GridUid) + if (targetXform.GridUid != Transform(args.User).GridUid && !ent.Comp.AllowCrossGrid) // Shitmed Change { return; } diff --git a/Content.Shared/Silicons/StationAi/StationAiOverlayComponent.cs b/Content.Shared/Silicons/StationAi/StationAiOverlayComponent.cs index 8416d44d5a1..a375ae9886b 100644 --- a/Content.Shared/Silicons/StationAi/StationAiOverlayComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiOverlayComponent.cs @@ -5,5 +5,12 @@ namespace Content.Shared.Silicons.StationAi; /// /// Handles the static overlay for station AI. /// -[RegisterComponent, NetworkedComponent] -public sealed partial class StationAiOverlayComponent : Component; +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] // Shitmed Change - Starlight Abductors +public sealed partial class StationAiOverlayComponent : Component +{ + /// + /// Shitmed Change - Starlight Abductors: Whether the station AI overlay should be allowed to cross grids. + /// + [DataField, AutoNetworkedField] + public bool AllowCrossGrid; +} diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 9b9197249a9..a5106bb84bd 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -85,5 +85,8 @@ public VerbCategory(string text, string? icon, bool iconsOnly = false) public static readonly VerbCategory SelectType = new("verb-categories-select-type", null); public static readonly VerbCategory PowerLevel = new("verb-categories-power-level", null); + + // Shitmed - Starlight Abductors + public static readonly VerbCategory Switch = new("verb-categories-switch", "/Textures/Interface/VerbIcons/group.svg.192dpi.png"); } } diff --git a/Content.Shared/_Shitmed/Antags/Abductor/AbductorCameraConsoleUI.cs b/Content.Shared/_Shitmed/Antags/Abductor/AbductorCameraConsoleUI.cs new file mode 100644 index 00000000000..d229df88c10 --- /dev/null +++ b/Content.Shared/_Shitmed/Antags/Abductor/AbductorCameraConsoleUI.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using static Content.Shared.Pinpointer.SharedNavMapSystem; + +namespace Content.Shared._Shitmed.Antags.Abductor; + +[Serializable, NetSerializable] +public sealed class AbductorCameraConsoleBuiState : BoundUserInterfaceState +{ + public required Dictionary Stations { get; init; } +} + +[Serializable, NetSerializable] +public sealed class AbductorConsoleBuiState : BoundUserInterfaceState +{ + public NetEntity? Target { get; init; } + public string? TargetName { get; init; } + public string? VictimName { get; init; } + public bool AlienPadFound { get; init; } + public bool ExperimentatorFound { get; init; } +} + +[Serializable, NetSerializable] +public sealed class StationBeacons +{ + public required int StationId { get; init; } + public required string Name { get; init; } + public required List Beacons { get; init; } +} +[Serializable, NetSerializable] +public sealed class AbductorBeaconChosenBuiMsg : BoundUserInterfaceMessage +{ + public required NavMapBeacon Beacon { get; init; } +} +[Serializable, NetSerializable] +public sealed class AbductorAttractBuiMsg : BoundUserInterfaceMessage +{ +} +[Serializable, NetSerializable] +public sealed class AbductorCompleteExperimentBuiMsg : BoundUserInterfaceMessage +{ +} diff --git a/Content.Shared/_Shitmed/Antags/Abductor/AbductorEnums.cs b/Content.Shared/_Shitmed/Antags/Abductor/AbductorEnums.cs new file mode 100644 index 00000000000..fac99ab00bb --- /dev/null +++ b/Content.Shared/_Shitmed/Antags/Abductor/AbductorEnums.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._Shitmed.Antags.Abductor; + +[Serializable, NetSerializable] +public enum AbductorExperimentatorVisuals : byte +{ + Full +} + +[Serializable, NetSerializable] +public enum AbductorCameraConsoleUIKey +{ + Key +} + +[Serializable, NetSerializable] +public enum AbductorConsoleUIKey +{ + Key +} diff --git a/Content.Shared/_Shitmed/Antags/Abductor/AbductorReturnDoAfterEvent.cs b/Content.Shared/_Shitmed/Antags/Abductor/AbductorReturnDoAfterEvent.cs new file mode 100644 index 00000000000..89841c26355 --- /dev/null +++ b/Content.Shared/_Shitmed/Antags/Abductor/AbductorReturnDoAfterEvent.cs @@ -0,0 +1,49 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Map; +using Robust.Shared.Serialization; + +namespace Content.Shared._Shitmed.Antags.Abductor; + +[Serializable, NetSerializable] +public sealed partial class AbductorReturnDoAfterEvent : SimpleDoAfterEvent +{ +} + +[Serializable, NetSerializable] +public sealed partial class AbductorGizmoMarkDoAfterEvent : SimpleDoAfterEvent +{ +} + +[Serializable, NetSerializable] +public sealed partial class AbductorSendYourselfDoAfterEvent : SimpleDoAfterEvent +{ + [DataField("coordinates", required: true)] + public NetCoordinates TargetCoordinates; + + private AbductorSendYourselfDoAfterEvent() + { + } + + public AbductorSendYourselfDoAfterEvent(NetCoordinates coords) => TargetCoordinates = coords; + public override DoAfterEvent Clone() => this; +} +[Serializable, NetSerializable] +public sealed partial class AbductorAttractDoAfterEvent : SimpleDoAfterEvent +{ + [DataField("coordinates", required: true)] + public NetCoordinates TargetCoordinates; + + [DataField("victim", required: true)] + public NetEntity Victim; + private AbductorAttractDoAfterEvent() + { + } + + public AbductorAttractDoAfterEvent(NetCoordinates coords, NetEntity target) + { + TargetCoordinates = coords; + Victim = target; + } + + public override DoAfterEvent Clone() => this; +} diff --git a/Content.Shared/_Shitmed/Antags/Abductor/AbductorsComponents.cs b/Content.Shared/_Shitmed/Antags/Abductor/AbductorsComponents.cs new file mode 100644 index 00000000000..ea1f3718b6d --- /dev/null +++ b/Content.Shared/_Shitmed/Antags/Abductor/AbductorsComponents.cs @@ -0,0 +1,119 @@ +using Content.Shared.Actions; +using Robust.Shared.GameStates; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; +using Robust.Shared.Audio; + +namespace Content.Shared._Shitmed.Antags.Abductor; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorHumanObservationConsoleComponent : Component +{ + [DataField(readOnly: true)] + public EntProtoId? RemoteEntityProto = "AbductorHumanObservationConsoleEye"; + + [DataField, AutoNetworkedField] + public NetEntity? RemoteEntity; +} +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorConsoleComponent : Component +{ + [DataField, AutoNetworkedField] + public NetEntity? Target; + + [DataField, AutoNetworkedField] + public NetEntity? AlienPod; + + [DataField, AutoNetworkedField] + public NetEntity? Experimentator; +} +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem))] +public sealed partial class AbductorAlienPadComponent : Component +{ +} +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorExperimentatorComponent : Component +{ + [DataField, AutoNetworkedField] + public NetEntity? Console; + + [DataField, ViewVariables(VVAccess.ReadWrite)] + public string ContainerId = "storage"; +} + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorGizmoComponent : Component +{ + [DataField, AutoNetworkedField] + public NetEntity? Target; +} + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem))] +public sealed partial class AbductorComponent : Component +{ +} + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class AbductorVictimComponent : Component +{ + [DataField("position"), AutoNetworkedField] + public EntityCoordinates? Position; + + [DataField, AutoNetworkedField] + public bool Implanted; + + [DataField, AutoNetworkedField] + public TimeSpan? LastActivation; +} + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem))] +public sealed partial class AbductorOrganComponent : Component; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorScientistComponent : Component +{ + [DataField("position"), AutoNetworkedField] + public EntityCoordinates? SpawnPosition; +} + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class RemoteEyeSourceContainerComponent : Component +{ + [DataField, AutoNetworkedField] + public EntityUid? Actor; +} + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class AbductorsAbilitiesComponent : Component +{ + [DataField, AutoNetworkedField] + public EntityUid? ExitConsole; + + [DataField, AutoNetworkedField] + public EntityUid? SendYourself; + + [DataField] + public EntityUid[] HiddenActions = []; +} + +[RegisterComponent, Access(typeof(SharedAbductorSystem))] +public sealed partial class AbductConditionComponent : Component +{ + [DataField("abducted"), ViewVariables(VVAccess.ReadWrite)] + public int Abducted; + [DataField("hashset"), ViewVariables(VVAccess.ReadWrite)] + public HashSet AbductedHashs = []; +} + +public sealed partial class ExitConsoleEvent : InstantActionEvent +{ + +} +public sealed partial class SendYourselfEvent : WorldTargetActionEvent +{ + +} +public sealed partial class AbductorReturnToShipEvent : InstantActionEvent +{ + +} diff --git a/Content.Shared/_Shitmed/Antags/Abductor/SharedAbductorSystem.cs b/Content.Shared/_Shitmed/Antags/Abductor/SharedAbductorSystem.cs new file mode 100644 index 00000000000..a75c802d81a --- /dev/null +++ b/Content.Shared/_Shitmed/Antags/Abductor/SharedAbductorSystem.cs @@ -0,0 +1,64 @@ +using System.Linq; +using Robust.Shared.Containers; +using Robust.Shared.Timing; + +namespace Content.Shared._Shitmed.Antags.Abductor; + +public abstract class SharedAbductorSystem : EntitySystem +{ + [Dependency] private readonly EntityLookupSystem _entityLookup = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] protected readonly IGameTiming Timing = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnInsertedContainer); + SubscribeLocalEvent(OnRemovedContainer); + base.Initialize(); + } + + private void OnRemovedContainer(Entity ent, ref EntRemovedFromContainerMessage args) + { + if (args.Container.ID != ent.Comp.ContainerId) + return; + + if (ent.Comp.Console == null) + { + var xform = EnsureComp(ent.Owner); + var console = _entityLookup.GetEntitiesInRange(xform.Coordinates, 5, LookupFlags.Approximate | LookupFlags.Dynamic) + .FirstOrDefault().Owner; + if (console != default) + ent.Comp.Console = GetNetEntity(console); + } + if (ent.Comp.Console != null && GetEntity(ent.Comp.Console.Value) is var consoleid && TryComp(consoleid, out var consoleComp)) + UpdateGui(consoleComp.Target, (consoleid, consoleComp)); + + _appearance.SetData(ent, AbductorExperimentatorVisuals.Full, args.Container.ContainedEntities.Count > 0); + Dirty(ent); + } + + private void OnInsertedContainer(Entity ent, ref EntInsertedIntoContainerMessage args) + { + if (args.Container.ID != ent.Comp.ContainerId) + return; + if (!Timing.IsFirstTimePredicted) + return; + if (ent.Comp.Console == null) + { + var xform = EnsureComp(ent.Owner); + var console = _entityLookup.GetEntitiesInRange(xform.Coordinates, 5, LookupFlags.Approximate | LookupFlags.Dynamic) + .FirstOrDefault().Owner; + if (console != default) + ent.Comp.Console = GetNetEntity(console); + } + if (ent.Comp.Console != null && GetEntity(ent.Comp.Console.Value) is var consoleid && TryComp(consoleid, out var consoleComp)) + UpdateGui(consoleComp.Target, (consoleid, consoleComp)); + + _appearance.SetData(ent, AbductorExperimentatorVisuals.Full, args.Container.ContainedEntities.Count > 0); + Dirty(ent); + } + protected virtual void UpdateGui(NetEntity? target, Entity computer) + { + + } +} + diff --git a/Content.Shared/_Shitmed/BodyEffects/OrganEffectSystem.cs b/Content.Shared/_Shitmed/BodyEffects/OrganEffectSystem.cs index 6b290f1955b..389e87d7001 100644 --- a/Content.Shared/_Shitmed/BodyEffects/OrganEffectSystem.cs +++ b/Content.Shared/_Shitmed/BodyEffects/OrganEffectSystem.cs @@ -10,7 +10,7 @@ namespace Content.Shared._Shitmed.BodyEffects; -public partial class OrganEffectSystem : EntitySystem +public sealed partial class OrganEffectSystem : EntitySystem { [Dependency] private readonly IComponentFactory _compFactory = default!; [Dependency] private readonly ISerializationManager _serManager = default!; @@ -28,28 +28,24 @@ public override void Initialize() public override void Update(float frameTime) { base.Update(frameTime); - - if (!_net.IsServer) // TODO: Kill this once I figure out whats breaking the Diagnostic Cybernetics. - return; - var query = EntityQueryEnumerator(); var now = _gameTiming.CurTime; while (query.MoveNext(out var uid, out var comp, out var part)) { - if (now < comp.NextUpdate || !comp.Active.Any() || part.Body is not { } body) + if (now < comp.NextUpdate + || !comp.Active.Any() + || part.Body is not { } body + || !part.Enabled) continue; comp.NextUpdate = now + comp.Delay; - AddComponents(body, uid, comp.Active); + AddComponents(body, uid, comp.Active, comp, false); } } private void OnOrganComponentsModify(Entity organEnt, ref OrganComponentsModifyEvent ev) { - if (!_net.IsServer) // TODO: Kill this once I figure out whats breaking the Diagnostic Cybernetics. - return; - if (organEnt.Comp.OnAdd != null) { if (ev.Add) @@ -70,26 +66,16 @@ private void OnOrganComponentsModify(Entity organEnt, private void AddComponents(EntityUid body, EntityUid part, ComponentRegistry reg, - OrganEffectComponent? effectComp = null) + OrganEffectComponent? effectComp = null, + bool? removeExisting = true) { if (!Resolve(part, ref effectComp, logMissing: false)) return; + EntityManager.AddComponents(body, reg, removeExisting ?? true); foreach (var (key, comp) in reg) { - var compType = comp.Component.GetType(); - if (HasComp(body, compType)) - continue; - - var newComp = (Component) _serManager.CreateCopy(comp.Component, notNullableOverride: true); - newComp.Owner = body; - EntityManager.AddComponent(body, newComp, true); effectComp.Active[key] = comp; - if (newComp.NetSyncEnabled) - { - Dirty(body, newComp); - Dirty(part, effectComp); - } } } @@ -101,10 +87,10 @@ private void RemoveComponents(EntityUid body, if (!Resolve(part, ref effectComp, logMissing: false)) return; - foreach (var (key, comp) in reg) + EntityManager.RemoveComponents(body, reg); + foreach (var key in reg.Keys) { - RemComp(body, comp.Component.GetType()); effectComp.Active.Remove(key); } } -} \ No newline at end of file +} diff --git a/Content.Shared/_Shitmed/BodyEffects/Subsystems/RandomStatusActivationComponent.cs b/Content.Shared/_Shitmed/BodyEffects/Subsystems/RandomStatusActivationComponent.cs new file mode 100644 index 00000000000..ad849e3ebb1 --- /dev/null +++ b/Content.Shared/_Shitmed/BodyEffects/Subsystems/RandomStatusActivationComponent.cs @@ -0,0 +1,41 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Content.Shared.StatusEffect; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared._Shitmed.BodyEffects.Subsystems; + +[RegisterComponent] +[AutoGenerateComponentPause] +public sealed partial class RandomStatusActivationComponent : Component +{ + /// + /// List of status effects to roll while the organ is installed. + /// + [DataField(required: true)] + public Dictionary, string> StatusEffects = new(); + + /// + /// How long the status effect should last for. + /// + [DataField] + public TimeSpan? Duration; + + /// + /// What is the minimum time between activations? + /// + [DataField] + public TimeSpan MinActivationTime = TimeSpan.FromSeconds(60); + + /// + /// What is the maximum time between activations? + /// + [DataField] + public TimeSpan MaxActivationTime = TimeSpan.FromSeconds(300); + + /// + /// The next time the organ will activate. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate; +} diff --git a/Content.Shared/_Shitmed/ItemSwitch/Components/ItemSwitchComponent.cs b/Content.Shared/_Shitmed/ItemSwitch/Components/ItemSwitchComponent.cs new file mode 100644 index 00000000000..8c9a648c75f --- /dev/null +++ b/Content.Shared/_Shitmed/ItemSwitch/Components/ItemSwitchComponent.cs @@ -0,0 +1,95 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; + +namespace Content.Shared._Shitmed.ItemSwitch.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +public sealed partial class ItemSwitchComponent : Component +{ + /// + /// The item's toggle state. + /// + [DataField, AutoNetworkedField] + public string State; + + [DataField(readOnly: true)] + public Dictionary States = []; + + /// + /// Can the entity be activated in the world. + /// + [DataField] + public bool OnActivate = true; + + /// + /// If this is set to false then the item can't be toggled by pressing Z. + /// Use another system to do it then. + /// + [DataField] + public bool OnUse = true; + + /// + /// Whether the item's toggle can be predicted by the client. + /// + /// /// + /// If server-side systems affect the item's toggle, like charge/fuel systems, then the item is not predictable. + /// + [DataField] + public bool Predictable = true; + + /// + /// Whether the item's currently toggled state should be shown in the UI. + /// + [DataField] + public bool ShowLabel = false; +} +[DataDefinition] +public sealed partial class ItemSwitchState : BoundUserInterfaceMessage +{ + [DataField] + public string Verb; + + [DataField] + public SoundSpecifier? SoundStateActivate; + + [DataField] + public SoundSpecifier? SoundFailToActivate; + + [DataField] + public ComponentRegistry? Components; + + [DataField] + public bool RemoveComponents = true; + + [DataField] + public SpriteSpecifier? Sprite; +} + +/// +/// Raised directed on an entity when its ItemToggle is attempted to be activated. +/// +[ByRefEvent] +public record struct ItemSwitchAttemptEvent() +{ + public bool Cancelled = false; + public required readonly EntityUid? User { get; init; } + public required readonly string State { get; init; } + /// + /// Pop-up that gets shown to users explaining why the attempt was cancelled. + /// + public string? Popup { get; set; } +} + +/// +/// Raised directed on an entity any sort of toggle is complete. +/// +[ByRefEvent] +public readonly record struct ItemSwitchedEvent() +{ + public required readonly bool Predicted { get; init; } + public required readonly string State { get; init; } + public required readonly EntityUid? User { get; init; } +} diff --git a/Content.Shared/_Shitmed/ItemSwitch/SharedItemSwitchSystem.cs b/Content.Shared/_Shitmed/ItemSwitch/SharedItemSwitchSystem.cs new file mode 100644 index 00000000000..d5da5e4764e --- /dev/null +++ b/Content.Shared/_Shitmed/ItemSwitch/SharedItemSwitchSystem.cs @@ -0,0 +1,186 @@ +using System.Linq; +using Content.Shared.Clothing.Components; +using Content.Shared.Clothing.EntitySystems; +using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Item; +using Content.Shared._Shitmed.ItemSwitch.Components; +using Content.Shared._Shitmed.Switchable; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Network; + +namespace Content.Shared._Shitmed.ItemSwitch; +public abstract class SharedItemSwitchSystem : EntitySystem +{ + [Dependency] private readonly INetManager _netManager = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedItemSystem _item = default!; + [Dependency] private readonly ClothingSystem _clothing = default!; + + private EntityQuery _query; + + public override void Initialize() + { + base.Initialize(); + + _query = GetEntityQuery(); + + //SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent>(OnActivateVerb); + SubscribeLocalEvent(OnActivate); + + SubscribeLocalEvent(UpdateClothingLayer); + } + + + /*private void OnStartup(Entity ent, ref ComponentStartup args) + { + var state = ent.Comp.State; + state ??= ent.Comp.States.Keys.FirstOrDefault(); + if (state != null) + Switch((ent, ent.Comp), state, predicted: ent.Comp.Predictable); + }*/ + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + var state = ent.Comp.State; + state ??= ent.Comp.States.Keys.FirstOrDefault(); + if (state != null) + Switch((ent, ent.Comp), state, predicted: ent.Comp.Predictable); + } + + private void OnUseInHand(Entity ent, ref UseInHandEvent args) + { + if (args.Handled || !ent.Comp.OnUse || ent.Comp.States.Count == 0) return; + args.Handled = true; + + Switch((ent, ent.Comp), Next(ent), args.User, predicted: ent.Comp.Predictable); + } + + private void OnActivateVerb(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || !ent.Comp.OnActivate || ent.Comp.States.Count == 0) return; + + var user = args.User; + args.ExtraCategories.Add(VerbCategory.Switch); + + foreach (var state in ent.Comp.States) + args.Verbs.Add(new ActivationVerb() + { + Text = Loc.TryGetString(state.Value.Verb, out var title) ? title : state.Value.Verb, + Category = VerbCategory.Switch, + Act = () => Switch((ent.Owner, ent.Comp), state.Key, user, ent.Comp.Predictable) + }); + } + + private void OnActivate(Entity ent, ref ActivateInWorldEvent args) + { + if (args.Handled || !ent.Comp.OnActivate) + return; + + args.Handled = true; + Switch((ent.Owner, ent.Comp), Next(ent), args.User, predicted: ent.Comp.Predictable); + } + + private static string Next(Entity ent) + { + var foundCurrent = false; + string firstState = null!; + + foreach (var state in ent.Comp.States.Keys) + { + firstState ??= state; + + if (foundCurrent) + return state; + + if (state == ent.Comp.State) + foundCurrent = true; + } + return firstState; + } + + /// + /// Used when an item is attempted to be toggled. + /// Sets its state to the opposite of what it is. + /// + /// Same as + public bool Switch(Entity ent, string key, EntityUid? user = null, bool predicted = true) + { + if (!_query.Resolve(ent, ref ent.Comp, false) || !ent.Comp.States.TryGetValue(key, out var state)) + return false; + + var uid = ent.Owner; + var comp = ent.Comp; + + if (!comp.Predictable && _netManager.IsClient) + return true; + + var attempt = new ItemSwitchAttemptEvent + { + User = user, + State = key + }; + RaiseLocalEvent(uid, ref attempt); + + if (ent.Comp.States.TryGetValue(ent.Comp.State, out var prevState) + && prevState.RemoveComponents + && prevState.Components is not null) + EntityManager.RemoveComponents(ent, prevState.Components); + + if (state.Components is not null) + EntityManager.AddComponents(ent, state.Components); + + if (!comp.Predictable) predicted = false; + + if (attempt.Cancelled) + { + if (predicted) + _audio.PlayPredicted(state.SoundFailToActivate, uid, user); + else + _audio.PlayPvs(state.SoundFailToActivate, uid); + + if (attempt.Popup != null && user != null) + if (predicted) + _popup.PopupClient(attempt.Popup, uid, user.Value); + else + _popup.PopupEntity(attempt.Popup, uid, user.Value); + + return false; + } + + if (predicted) + _audio.PlayPredicted(state.SoundStateActivate, uid, user); + else + _audio.PlayPvs(state.SoundStateActivate, uid); + + comp.State = key; + UpdateVisuals((uid, comp), key); + Dirty(uid, comp); + + var switched = new ItemSwitchedEvent { Predicted = predicted, State = key, User = user }; + RaiseLocalEvent(uid, ref switched); + + return true; + } + public virtual void VisualsChanged(Entity ent, string key) + { + + } + protected virtual void UpdateVisuals(Entity ent, string key) + { + if (TryComp(ent, out AppearanceComponent? appearance)) + _appearance.SetData(ent, SwitchableVisuals.Switched, key, appearance); + _item.SetHeldPrefix(ent, key); + + VisualsChanged(ent, key); + } + private void UpdateClothingLayer(Entity ent, ref ItemSwitchedEvent args) + => _clothing.SetEquippedPrefix(ent, args.State, ent.Comp); +} diff --git a/Content.Shared/_Shitmed/OnHit/CuffsOnHitComponent.cs b/Content.Shared/_Shitmed/OnHit/CuffsOnHitComponent.cs new file mode 100644 index 00000000000..b877d3c3df3 --- /dev/null +++ b/Content.Shared/_Shitmed/OnHit/CuffsOnHitComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._Shitmed.OnHit; + +[RegisterComponent] +public sealed partial class CuffsOnHitComponent : Component +{ + [DataField("proto")] + public ProtoId? HandcuffProtorype; + + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(1); + + [DataField("sound")] + public SoundSpecifier? Sound; +} + +[ByRefEvent] +public record struct CuffsOnHitAttemptEvent(bool Cancelled); + +[Serializable, NetSerializable] +public sealed partial class CuffsOnHitDoAfter : SimpleDoAfterEvent { } diff --git a/Content.Shared/_Shitmed/OnHit/InjectOnHitComponent.cs b/Content.Shared/_Shitmed/OnHit/InjectOnHitComponent.cs new file mode 100644 index 00000000000..ce46f79d431 --- /dev/null +++ b/Content.Shared/_Shitmed/OnHit/InjectOnHitComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Chemistry.Reagent; +using Robust.Shared.Audio; + +namespace Content.Shared._Shitmed.OnHit; + +[RegisterComponent] +public sealed partial class InjectOnHitComponent : Component +{ + [DataField("reagents")] + public List Reagents; + + [DataField("sound")] + public SoundSpecifier? Sound; +} +[ByRefEvent] +public record struct InjectOnHitAttemptEvent(bool Cancelled); diff --git a/Content.Shared/_Shitmed/OnHit/SharedOnHitSystem.cs b/Content.Shared/_Shitmed/OnHit/SharedOnHitSystem.cs new file mode 100644 index 00000000000..7e63b5b524d --- /dev/null +++ b/Content.Shared/_Shitmed/OnHit/SharedOnHitSystem.cs @@ -0,0 +1,92 @@ +using System.Linq; +using Content.Shared.Chemistry; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Cuffs; +using Content.Shared.Cuffs.Components; +using Content.Shared.DoAfter; +using Content.Shared.Effects; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Network; +using Robust.Shared.Player; + +namespace Content.Shared._Shitmed.OnHit; + +public abstract class SharedOnHitSystem : EntitySystem +{ + [Dependency] protected readonly INetManager _net = default!; + [Dependency] protected readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] protected readonly SharedAudioSystem _audio = default!; + [Dependency] protected readonly ReactiveSystem _reactiveSystem = default!; + [Dependency] protected readonly SharedSolutionContainerSystem _solutionContainers = default!; + [Dependency] protected readonly SharedColorFlashEffectSystem _color = default!; + [Dependency] protected readonly SharedCuffableSystem _cuffs = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnInjectOnMeleeHit); + SubscribeLocalEvent(OnCuffsOnMeleeHit); + + base.Initialize(); + } + + private void OnCuffsOnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (!args.IsHit + || !args.HitEntities.Any()) + return; + + var ev = new InjectOnHitAttemptEvent(); + RaiseLocalEvent(ent, ref ev); + if (ev.Cancelled) + return; + + foreach (var target in args.HitEntities) + { + if (!TryComp(target, out var cuffable) || cuffable.Container.Count != 0) + continue; + var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, ent.Comp.Duration, new CuffsOnHitDoAfter(), ent, target) + { + BreakOnMove = true, + BreakOnWeightlessMove = false, + BreakOnDamage = true, + NeedHand = true, + DistanceThreshold = 1f + }; + + if (!_doAfter.TryStartDoAfter(doAfterEventArgs)) + continue; + _color.RaiseEffect(Color.FromHex("#601653"), new List(1) { target }, Filter.Pvs(target, entityManager: EntityManager)); + } + } + + private void OnInjectOnMeleeHit(Entity ent, ref MeleeHitEvent args) + { + if (!args.IsHit + || !args.HitEntities.Any()) + return; + + var ev = new InjectOnHitAttemptEvent(); + RaiseLocalEvent(ent, ref ev); + if (ev.Cancelled) + return; + + foreach (var target in args.HitEntities) + { + if (_solutionContainers.TryGetInjectableSolution(target, out var targetSoln, out var targetSolution)) + { + var solution = new Solution(ent.Comp.Reagents); + _reactiveSystem.DoEntityReaction(target, solution, ReactionMethod.Injection); + _solutionContainers.TryAddSolution(targetSoln.Value, solution); + _color.RaiseEffect(Color.FromHex("#0000FF"), new List(1) { target }, Filter.Pvs(target, entityManager: EntityManager)); + } + if (ent.Comp.Sound is not null && _net.IsServer) + _audio.PlayPvs(ent.Comp.Sound, target); + } + } + + public override void Update(float frameTime) + { + } +} + diff --git a/Content.Shared/_Shitmed/Restrict/RestrictByUserTagComponent.cs b/Content.Shared/_Shitmed/Restrict/RestrictByUserTagComponent.cs new file mode 100644 index 00000000000..f974e299645 --- /dev/null +++ b/Content.Shared/_Shitmed/Restrict/RestrictByUserTagComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared._Shitmed.Antags.Abductor; +using Content.Shared.Tag; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Shitmed.Restrict; +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAbductorSystem)), AutoGenerateComponentState] +public sealed partial class RestrictByUserTagComponent : Component +{ + [DataField, AutoNetworkedField] + public List> Contains = []; + + [DataField, AutoNetworkedField] + public List> DoesntContain = []; + + [DataField, AutoNetworkedField] + public List Messages = []; +} diff --git a/Content.Shared/_Shitmed/Restrict/SharedRestrictSystem.cs b/Content.Shared/_Shitmed/Restrict/SharedRestrictSystem.cs new file mode 100644 index 00000000000..b20dd331b19 --- /dev/null +++ b/Content.Shared/_Shitmed/Restrict/SharedRestrictSystem.cs @@ -0,0 +1,38 @@ +using Content.Shared.Interaction.Events; +using Content.Shared.Popups; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Random; + +namespace Content.Shared._Shitmed.Restrict; +public abstract partial class SharedRestrictSystem : EntitySystem +{ + [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + public override void Initialize() + { + SubscribeLocalEvent(OnAttemptMelee); + SubscribeLocalEvent(OnAttemptInteract); + } + + private void OnAttemptInteract(Entity ent, ref InteractionAttemptEvent args) + { + if (!_tagSystem.HasAllTags(args.Uid, ent.Comp.Contains) || _tagSystem.HasAnyTag(args.Uid, ent.Comp.DoesntContain)) + { + args.Cancelled = true; + if (ent.Comp.Messages.Count != 0) + _popup.PopupClient(Loc.GetString(_random.Pick(ent.Comp.Messages)), args.Uid); + } + } + + private void OnAttemptMelee(Entity ent, ref AttemptMeleeEvent args) + { + if(!_tagSystem.HasAllTags(args.User, ent.Comp.Contains) || _tagSystem.HasAnyTag(args.User, ent.Comp.DoesntContain)) + { + args.Cancelled = true; + if(ent.Comp.Messages.Count != 0) + args.Message = Loc.GetString(_random.Pick(ent.Comp.Messages)); + } + } +} diff --git a/Content.Shared/_Shitmed/Spawners/EntitySystems/Events.cs b/Content.Shared/_Shitmed/Spawners/EntitySystems/Events.cs new file mode 100644 index 00000000000..3da82783b11 --- /dev/null +++ b/Content.Shared/_Shitmed/Spawners/EntitySystems/Events.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameObjects; + +namespace Content.Shared._Shitmed.Spawners.EntitySystems; + +public sealed class SpawnerSpawnedEvent : EntityEventArgs +{ + public EntityUid Entity { get; } + + public bool IsFriendly { get; } + public SpawnerSpawnedEvent(EntityUid entity, bool isFriendly) + { + Entity = entity; + IsFriendly = isFriendly; + } +} \ No newline at end of file diff --git a/Content.Shared/_Shitmed/StatusEffects/ActivateArtifactEffectComponent.cs b/Content.Shared/_Shitmed/StatusEffects/ActivateArtifactEffectComponent.cs new file mode 100644 index 00000000000..851df05d027 --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/ActivateArtifactEffectComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared.Atmos; +using Robust.Shared.GameStates; +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// Activates an entity that is also an artifact. +/// +[RegisterComponent] +public sealed partial class ActivateArtifactEffectComponent : Component; diff --git a/Content.Shared/_Shitmed/StatusEffects/ExpelGasComponent.cs b/Content.Shared/_Shitmed/StatusEffects/ExpelGasComponent.cs new file mode 100644 index 00000000000..f8339ca3eef --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/ExpelGasComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.Atmos; +using Robust.Shared.GameStates; +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// Randomly spawns gas of a given type. +/// +[RegisterComponent] +public sealed partial class ExpelGasComponent : Component +{ + public List PossibleGases = new() + { + Gas.Oxygen, + Gas.Plasma, + Gas.Nitrogen, + Gas.CarbonDioxide, + Gas.Tritium, + Gas.Ammonia, + Gas.NitrousOxide, + Gas.Frezon, + Gas.BZ, ///tg/ gases + Gas.Healium, ///tg/ gases + Gas.Nitrium, ///tg/ gases + }; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/ScramEffectComponent.cs b/Content.Shared/_Shitmed/StatusEffects/ScramEffectComponent.cs new file mode 100644 index 00000000000..07658757acb --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/ScramEffectComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// Randomly teleports the entity to a random location. +/// +[RegisterComponent] +public sealed partial class ScrambleLocationEffectComponent : Component; diff --git a/Content.Shared/_Shitmed/StatusEffects/ScrambleDnaEffectComponent.cs b/Content.Shared/_Shitmed/StatusEffects/ScrambleDnaEffectComponent.cs new file mode 100644 index 00000000000..54cc67d220f --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/ScrambleDnaEffectComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// Randomly changes the entity's DNA. +/// +[RegisterComponent] +public sealed partial class ScrambleDnaEffectComponent : Component; diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnEmpComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnEmpComponent.cs new file mode 100644 index 00000000000..05c152162ee --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnEmpComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns EMPs. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnEmpComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "AdminInstantEffectEMP7"; + public override bool AttachToParent { get; set; } = true; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnEntityEffectComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnEntityEffectComponent.cs new file mode 100644 index 00000000000..4d00e879cab --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnEntityEffectComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns a given entity prototype. +/// +public abstract partial class SpawnEntityEffectComponent : Component +{ + public virtual string EntityPrototype { get; set; } + + public virtual bool IsFriendly { get; set; } + + public virtual bool AttachToParent { get; set; } +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnFlashComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnFlashComponent.cs new file mode 100644 index 00000000000..3868badfe33 --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnFlashComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Creates the same effect as a flash grenade. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnFlashComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "AdminInstantEffectFlash"; + public override bool AttachToParent { get; set; } = true; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnGravityWellComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnGravityWellComponent.cs new file mode 100644 index 00000000000..4984b9a6b44 --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnGravityWellComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns a gravity well. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnGravityWellComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "AdminInstantEffectGravityWell"; + public override bool AttachToParent { get; set; } = true; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnSlimesComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnSlimesComponent.cs new file mode 100644 index 00000000000..fd8667a474a --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnSlimesComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns slimes. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnSlimesComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "MobAdultSlimesBlueAngry"; + + public override bool IsFriendly { get; set; } = true; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnSmokeComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnSmokeComponent.cs new file mode 100644 index 00000000000..3ece21f58b1 --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnSmokeComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns a smoke cloud. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnSmokeComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "AdminInstantEffectSmoke10"; + public override bool AttachToParent { get; set; } = true; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SpawnSpiderEggsComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SpawnSpiderEggsComponent.cs new file mode 100644 index 00000000000..ade561b01b9 --- /dev/null +++ b/Content.Shared/_Shitmed/StatusEffects/SpawnSpiderEggsComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.StatusEffects; + +/// +/// For use as a status effect. Spawns spider eggs that will hatch into spiders. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpawnSpiderEggsComponent : SpawnEntityEffectComponent +{ + public override string EntityPrototype { get; set; } = "EggSpiderFertilized"; +} diff --git a/Content.Shared/_Shitmed/StatusEffects/SplashChemicalsComponent.cs b/Content.Shared/_Shitmed/StatusEffects/SplashChemicalsComponent.cs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs index 32fa7447c14..f66e349d844 100644 --- a/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs +++ b/Content.Shared/_Shitmed/Surgery/SharedSurgerySystem.Steps.cs @@ -275,6 +275,9 @@ private void OnToolCanPerform(Entity ent, ref SurgeryCanPe if (_inventory.TryGetContainerSlotEnumerator(args.Body, out var containerSlotEnumerator, args.TargetSlots)) { + if (HasComp(args.User)) + return; + while (containerSlotEnumerator.MoveNext(out var containerSlot)) { if (!containerSlot.ContainedEntity.HasValue) @@ -522,6 +525,7 @@ private void OnAddOrganStep(Entity ent, ref Surger { var ev = new SurgeryStepDamageChangeEvent(args.User, args.Body, args.Part, ent); RaiseLocalEvent(ent, ref ev); + args.Complete = true; } break; } diff --git a/Content.Shared/_Shitmed/Surgery/SurgeryIgnoreClothingComponent.cs b/Content.Shared/_Shitmed/Surgery/SurgeryIgnoreClothingComponent.cs new file mode 100644 index 00000000000..3ca414a41b7 --- /dev/null +++ b/Content.Shared/_Shitmed/Surgery/SurgeryIgnoreClothingComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._Shitmed.Medical.Surgery; + +/// +/// Allows the entity to do surgery without having to remove clothing. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SurgeryIgnoreClothingComponent : Component { } diff --git a/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolExamineSystem.cs b/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolExamineSystem.cs index 5d4b7a9fdfa..9338a85a9b0 100644 --- a/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolExamineSystem.cs +++ b/Content.Shared/_Shitmed/Surgery/Tools/SurgeryToolExamineSystem.cs @@ -26,7 +26,7 @@ public override void Initialize() SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); - + SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnExamined); } diff --git a/Content.Shared/_Shitmed/Switchable/SwitchableVisuals.cs b/Content.Shared/_Shitmed/Switchable/SwitchableVisuals.cs new file mode 100644 index 00000000000..e0fa09d2013 --- /dev/null +++ b/Content.Shared/_Shitmed/Switchable/SwitchableVisuals.cs @@ -0,0 +1,16 @@ +using Content.Shared.Actions; +using Robust.Shared.Serialization; + +namespace Content.Shared._Shitmed.Switchable; + +public sealed partial class SwitchableActionEvent : InstantActionEvent; + +/// +/// Generic enum keys for toggle-visualizer appearance data & sprite layers. +/// +[Serializable, NetSerializable] +public enum SwitchableVisuals : byte +{ + Switched, + Layer +} \ No newline at end of file diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml b/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml index c88a3e0b70f..8c3bd7f3720 100644 --- a/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml +++ b/Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml @@ -46,4 +46,14 @@ - files: ["scalpel2.ogg"] license: "CC-BY-SA-3.0" copyright: "Taken from cmss13" - source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel2.ogg" \ No newline at end of file + source: "https://github.com/cmss13-devs/cmss13/blob/fae73dfa5aedb0a253de04b60085ed8a178d3bf7/sound/surgery/scalpel2.ogg" + +- files: ["bone_setter.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Darkrell" + source: "https://github.com/ss14Starlight/space-station-14" + +- files: ["bone_saw.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Darkrell" + source: "https://github.com/ss14Starlight/space-station-14" \ No newline at end of file diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/bone_saw.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/bone_saw.ogg new file mode 100644 index 00000000000..8a9af325abd Binary files /dev/null and b/Resources/Audio/_Shitmed/Medical/Surgery/bone_saw.ogg differ diff --git a/Resources/Audio/_Shitmed/Medical/Surgery/bone_setter.ogg b/Resources/Audio/_Shitmed/Medical/Surgery/bone_setter.ogg new file mode 100644 index 00000000000..23c03deeac1 Binary files /dev/null and b/Resources/Audio/_Shitmed/Medical/Surgery/bone_setter.ogg differ diff --git a/Resources/Audio/_Shitmed/Misc/abducted.ogg b/Resources/Audio/_Shitmed/Misc/abducted.ogg new file mode 100644 index 00000000000..1fe7ead0895 Binary files /dev/null and b/Resources/Audio/_Shitmed/Misc/abducted.ogg differ diff --git a/Resources/Audio/_Shitmed/Misc/abductor.ogg b/Resources/Audio/_Shitmed/Misc/abductor.ogg new file mode 100644 index 00000000000..93f0a0e1cc2 Binary files /dev/null and b/Resources/Audio/_Shitmed/Misc/abductor.ogg differ diff --git a/Resources/Audio/_Shitmed/Misc/alien_teleport.ogg b/Resources/Audio/_Shitmed/Misc/alien_teleport.ogg new file mode 100644 index 00000000000..f2a44984936 Binary files /dev/null and b/Resources/Audio/_Shitmed/Misc/alien_teleport.ogg differ diff --git a/Resources/Audio/_Shitmed/Misc/attributions.yml b/Resources/Audio/_Shitmed/Misc/attributions.yml new file mode 100644 index 00000000000..b9fcbd08533 --- /dev/null +++ b/Resources/Audio/_Shitmed/Misc/attributions.yml @@ -0,0 +1,9 @@ +- files: ["abductor","alien_teleport"] + license: "CC-BY-4.0" + copyright: 'Darkrell' + source: "https://github.com/ss14Starlight/space-station-14" + +- files: ["abducted"] + license: "CC-BY-SA-3.0" + copyright: 'Paradise Station' + source: "https://github.com/ParadiseSS13/Paradise" \ No newline at end of file diff --git a/Resources/Locale/en-US/_Shitmed/abductor/abductor-ui.ftl b/Resources/Locale/en-US/_Shitmed/abductor/abductor-ui.ftl new file mode 100644 index 00000000000..588bbe58adf --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/abductor/abductor-ui.ftl @@ -0,0 +1,39 @@ +abductors-ui-beacons = Beacons +abductors-ui-teleport = Teleport +abductors-ui-attract = Attract + +abductors-ui-experiment = Experiment +abductors-ui-complete-experiment = Complete the experiment + +abductors-ui-gizmo-transferred = Target information transferred + +abductors-title = Abductors +abductors-description = Abductors have targeted the station. Avoid getting kidnapped by them! + +abductors-ghost-role-name = Lone Abductor +abductors-ghost-role-desc = Kidnap people, and stuff them with experimental organs of dubious origin. +abductors-ghost-role-rules = You are a [color=red][bold]Solo Abductor[/bold][/color]. + Your intentions are to abduct people from the station and replace their organs with various experimental devices, + after which you return them back. You are not allowed to destroy the station or intentionally kill people. + It is in your interest to return the test subjects alive and healthy for the purity of the experiment. + + You don't remember any of your previous life, and you don't remember anything you learned as a ghost. + You are allowed to remember knowledge about the game in general, such as how to cook, how to use objects, etc. + You are absolutely [color=red]NOT[/color] allowed to remember, say, the name, appearance, etc. of your previous character. + +abductor-round-end-agent-name = abductor + +objective-issuer-abductors = [color=#FD0098]Mothership[/color] + +objective-condition-abduct-title = Abduct {$count} person. +objective-condition-abduct-description = (use the Gizmo on a subdued victim, then use the Gizmo on the abductor console and select the attract action), then replace their heart with one of the glands, put them in the experimenter, and press complete experiment. + +abductor-role-greeting = I am a professional combat scientist of a high-tech race. My task is to abduct humans, conduct experiments on them, and return them intact for the purity of the experiment. It is not in my interest to destroy the station, kill, or assist the crew. + +roles-antag-abductor-objective = Kidnap station crew and perform your experiments on them! + +abductor-victim-role-greeting = You have seen things you shouldn't have. The world must know the truth. +abductor-victim-role-name = Abductee +abductor-victim-role-desc = You have seen things you shouldn't have. The world must know the truth. + +objective-issuer-voices = [color=#FD0098]The Voices[/color] diff --git a/Resources/Locale/en-US/_Shitmed/abductor/abductor.ftl b/Resources/Locale/en-US/_Shitmed/abductor/abductor.ftl new file mode 100644 index 00000000000..2dca32116a7 --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/abductor/abductor.ftl @@ -0,0 +1,9 @@ +species-name-abductor = alien +abductors-weapon-restricted-1 = Presses the balloon. +abductors-weapon-restricted-2 = Seems like they've grabbed the blade. +abductors-weapon-restricted-3 = Strokes the stick, but nothing happens. +abductors-weapon-restricted-4 = Sniffs the alien weapon. + +abductors-gizmo-restricted = Spins gizmo in their hand. + +abductor-gun-restricted-1 = They try to press the trigger guard, but the finger doesn't fit. diff --git a/Resources/Locale/en-US/_Shitmed/emag/emag.ftl b/Resources/Locale/en-US/_Shitmed/emag/emag.ftl new file mode 100644 index 00000000000..f2372988a6b --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/emag/emag.ftl @@ -0,0 +1 @@ +emag-attempt-failed = { THE($tool) } didn't seem to do anything... \ No newline at end of file diff --git a/Resources/Locale/en-US/_Shitmed/guidebook/guides.ftl b/Resources/Locale/en-US/_Shitmed/guidebook/guides.ftl index 753810c8be9..5b297d135a8 100644 --- a/Resources/Locale/en-US/_Shitmed/guidebook/guides.ftl +++ b/Resources/Locale/en-US/_Shitmed/guidebook/guides.ftl @@ -3,3 +3,4 @@ guide-entry-partmanipulation = Part Manipulation guide-entry-organmanipulation = Organ Manipulation guide-entry-utilitysurgeries = Utility Surgeries guide-entry-autodoc = Autodoc +guide-entry-abductors = Abductors diff --git a/Resources/Locale/en-US/_Shitmed/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/_Shitmed/interaction/interaction-popup-component.ftl new file mode 100644 index 00000000000..b9e4775aa03 --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/interaction/interaction-popup-component.ftl @@ -0,0 +1,2 @@ +petting-success-spider-egg = You pet {THE($target)} gently... It moved? +petting-failure-spider-egg = You pet {THE($target)} gently... Nothing happened. diff --git a/Resources/Locale/en-US/_Shitmed/itemswitch/item-switch.ftl b/Resources/Locale/en-US/_Shitmed/itemswitch/item-switch.ftl new file mode 100644 index 00000000000..bc564d79da8 --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/itemswitch/item-switch.ftl @@ -0,0 +1 @@ +itemswitch-component-on-examine-detailed-message = Current mode: {$state} diff --git a/Resources/Locale/en-US/_Shitmed/verbs/verb-system.ftl b/Resources/Locale/en-US/_Shitmed/verbs/verb-system.ftl new file mode 100644 index 00000000000..256e9dddf6e --- /dev/null +++ b/Resources/Locale/en-US/_Shitmed/verbs/verb-system.ftl @@ -0,0 +1 @@ +verb-categories-switch = Switch Mode \ No newline at end of file diff --git a/Resources/Maps/_Shitmed/Shuttles/ShuttleEvent/abductor_shuttle.yml b/Resources/Maps/_Shitmed/Shuttles/ShuttleEvent/abductor_shuttle.yml new file mode 100644 index 00000000000..c2ace062da2 --- /dev/null +++ b/Resources/Maps/_Shitmed/Shuttles/ShuttleEvent/abductor_shuttle.yml @@ -0,0 +1,1571 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 1: FloorAbductor +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: grid + - type: Transform + pos: -0.5520833,-0.5416667 + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: AQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAA + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: [] + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 53239 + 0,-1: + 0: 30479 + -1,0: + 0: 14796 + 0,1: + 0: 1599 + -1,1: + 0: 3226 + 1,0: + 0: 5444 + 1,1: + 0: 18 + 1,-1: + 0: 21778 + -2,0: + 0: 1092 + -2,-1: + 0: 17416 + -2,1: + 0: 8 + -1,-1: + 0: 56606 + 0,-2: + 0: 1792 + -1,-2: + 0: 7168 + 1,-2: + 0: 4096 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: AbductorAlienPad + entities: + - uid: 181 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 +- proto: AbductorConsole + entities: + - uid: 182 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 +- proto: AbductorExperimentator + entities: + - uid: 2 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 +- proto: AbductorGizmo + entities: + - uid: 207 + components: + - type: Transform + pos: -1.4933486,0.52918124 + parent: 1 +- proto: AbductorHandcuffs + entities: + - uid: 196 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 197 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 198 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 199 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 200 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 201 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 202 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 203 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 204 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 + - uid: 205 + components: + - type: Transform + pos: 4.4806957,2.7953928 + parent: 1 +- proto: AbductorHumanObservationConsole + entities: + - uid: 4 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 +- proto: AbductorOperatingTable + entities: + - uid: 3 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: AirAlarm + entities: + - uid: 248 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - type: DeviceList + devices: + - 240 +- proto: APCHyperCapacity + entities: + - uid: 85 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,0.5 + parent: 1 + - uid: 86 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,0.5 + parent: 1 +- proto: BasicCyberneticEyes + entities: + - uid: 225 + components: + - type: Transform + pos: 2.4815433,0.0026143193 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: 2.4815433,0.0026143193 + parent: 1 + - uid: 227 + components: + - type: Transform + pos: 2.4815433,0.0026143193 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 5 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 + - uid: 6 + components: + - type: Transform + pos: -3.5,4.5 + parent: 1 + - uid: 7 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 8 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 13 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 15 + components: + - type: Transform + pos: -3.5,5.5 + parent: 1 + - uid: 16 + components: + - type: Transform + pos: 3.5,5.5 + parent: 1 + - uid: 19 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - uid: 28 + components: + - type: Transform + pos: 4.5,5.5 + parent: 1 + - uid: 32 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 49 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 88 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 114 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 117 + components: + - type: Transform + pos: 4.5,4.5 + parent: 1 + - uid: 118 + components: + - type: Transform + pos: -2.5,5.5 + parent: 1 + - uid: 119 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 122 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 123 + components: + - type: Transform + pos: 3.5,0.5 + parent: 1 + - uid: 124 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 125 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 126 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 127 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 128 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 129 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 130 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 131 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 132 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 133 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 134 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 135 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 136 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 137 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 138 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - uid: 139 + components: + - type: Transform + pos: -1.5,3.5 + parent: 1 + - uid: 140 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 + - uid: 141 + components: + - type: Transform + pos: 1.5,6.5 + parent: 1 + - uid: 142 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 144 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 149 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 186 + components: + - type: Transform + pos: 5.5,3.5 + parent: 1 + - uid: 187 + components: + - type: Transform + pos: 5.5,2.5 + parent: 1 + - uid: 188 + components: + - type: Transform + pos: 5.5,1.5 + parent: 1 + - uid: 189 + components: + - type: Transform + pos: -4.5,3.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -4.5,2.5 + parent: 1 + - uid: 191 + components: + - type: Transform + pos: -4.5,1.5 + parent: 1 +- proto: CableHV + entities: + - uid: 39 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 + - uid: 98 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 99 + components: + - type: Transform + pos: -2.5,-1.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 101 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 102 + components: + - type: Transform + pos: -1.5,-3.5 + parent: 1 + - uid: 103 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 104 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 105 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 106 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 107 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 108 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 109 + components: + - type: Transform + pos: 3.5,-1.5 + parent: 1 + - uid: 110 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 + - uid: 111 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 + - uid: 112 + components: + - type: Transform + pos: -0.5,-2.5 + parent: 1 + - uid: 176 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 + - uid: 177 + components: + - type: Transform + pos: 4.5,-2.5 + parent: 1 +- proto: CableMV + entities: + - uid: 21 + components: + - type: Transform + pos: -3.5,0.5 + parent: 1 + - uid: 22 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 23 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 24 + components: + - type: Transform + pos: 4.5,0.5 + parent: 1 + - uid: 25 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 91 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 +- proto: CableTerminal + entities: + - uid: 38 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-3.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 1 +- proto: ClockworkGrille + entities: + - uid: 45 + components: + - type: Transform + pos: 0.5,6.5 + parent: 1 +- proto: ClothingBackpackDuffelAbductor + entities: + - uid: 208 + components: + - type: Transform + pos: -1.5044186,0.16459793 + parent: 1 +- proto: ClothingHeadHelmetAbductor + entities: + - uid: 206 + components: + - type: Transform + pos: 4.4633284,3.5539389 + parent: 1 +- proto: ComputerIFF + entities: + - uid: 183 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 +- proto: ComputerShuttle + entities: + - uid: 14 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 +- proto: Defibrillator + entities: + - uid: 231 + components: + - type: Transform + pos: 1.167351,-1.4260883 + parent: 1 +- proto: DubiousOrganSpawner + entities: + - uid: 209 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 210 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 211 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 212 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 213 + components: + - type: Transform + pos: -0.5,-1.5 + parent: 1 + - uid: 214 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 +- proto: GasMinerNitrogen + entities: + - uid: 241 + components: + - type: Transform + pos: -3.5,3.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 +- proto: GasMinerOxygen + entities: + - uid: 89 + components: + - type: Transform + pos: -3.5,2.5 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 58 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-5.5 + parent: 1 + - uid: 244 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,4.5 + parent: 1 + - uid: 245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,4.5 + parent: 1 +- proto: GasPipeStraight + entities: + - uid: 246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - uid: 247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,4.5 + parent: 1 + - uid: 249 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 + - uid: 250 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: 0.5,-4.5 + parent: 1 +- proto: GasVentScrubber + entities: + - uid: 240 + components: + - type: Transform + pos: 0.5,-1.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 248 +- proto: GeneratorBasic15kW + entities: + - uid: 41 + components: + - type: Transform + pos: -0.5,-3.5 + parent: 1 + - uid: 42 + components: + - type: Transform + pos: 2.5,-3.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: 1.5,-3.5 + parent: 1 + - uid: 96 + components: + - type: Transform + pos: 0.5,-3.5 + parent: 1 + - uid: 175 + components: + - type: Transform + pos: 3.5,-3.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 148 + components: + - type: Transform + pos: -3.5,-2.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 47 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-0.5 + parent: 1 + - uid: 92 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-0.5 + parent: 1 + - uid: 173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-2.5 + parent: 1 +- proto: HandheldHealthAnalyzer + entities: + - uid: 232 + components: + - type: Transform + pos: 1.136101,-1.4417133 + parent: 1 +- proto: MedicalCyberneticEyes + entities: + - uid: 219 + components: + - type: Transform + pos: 2.4815433,0.5442808 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 2.4815433,0.5442808 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 2.4815433,0.5442808 + parent: 1 +- proto: MedkitAdvancedFilled + entities: + - uid: 228 + components: + - type: Transform + pos: 1.5938609,-1.179152 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: 1.6042776,-1.3458188 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: 1.6355276,-1.5437355 + parent: 1 +- proto: Poweredlight + entities: + - uid: 237 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,0.5 + parent: 1 + - uid: 238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 + - uid: 239 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,4.5 + parent: 1 +- proto: ReinforcedPlasmaWindow + entities: + - uid: 26 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,6.5 + parent: 1 +- proto: SecurityCyberneticEyes + entities: + - uid: 222 + components: + - type: Transform + pos: 2.4815433,-0.49738568 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: 2.4815433,-0.49738568 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: 2.4815433,-0.49738568 + parent: 1 +- proto: SMESBasic + entities: + - uid: 174 + components: + - type: Transform + pos: -2.5,-3.5 + parent: 1 +- proto: SpawnPointLoneAbductor + entities: + - uid: 255 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 93 + components: + - type: Transform + pos: -3.5,-1.5 + parent: 1 + - uid: 94 + components: + - type: Transform + pos: 4.5,-1.5 + parent: 1 +- proto: TableAbductor + entities: + - uid: 9 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - uid: 10 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + - uid: 11 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-0.5 + parent: 1 + - uid: 18 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,0.5 + parent: 1 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,3.5 + parent: 1 + - uid: 83 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-1.5 + parent: 1 + - uid: 192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,0.5 + parent: 1 + - uid: 193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + - uid: 194 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 +- proto: Thruster + entities: + - uid: 37 + components: + - type: Transform + pos: -1.5,6.5 + parent: 1 + - uid: 40 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 79 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,1.5 + parent: 1 + - uid: 80 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,0.5 + parent: 1 + - uid: 81 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-0.5 + parent: 1 + - uid: 82 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-1.5 + parent: 1 + - uid: 87 + components: + - type: Transform + pos: 2.5,6.5 + parent: 1 + - uid: 156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,1.5 + parent: 1 + - uid: 157 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-0.5 + parent: 1 + - uid: 158 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 + - uid: 159 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,0.5 + parent: 1 + - uid: 160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-5.5 + parent: 1 + - uid: 161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-5.5 + parent: 1 + - uid: 163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-5.5 + parent: 1 + - uid: 164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 1 + - uid: 178 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 252 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-5.5 + parent: 1 +- proto: TurboItemRecharger + entities: + - uid: 233 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 +- proto: WallAbductor + entities: + - uid: 20 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,2.5 + parent: 1 + - uid: 29 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,2.5 + parent: 1 + - uid: 30 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + - uid: 35 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,5.5 + parent: 1 + - uid: 36 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,5.5 + parent: 1 + - uid: 43 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 44 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-3.5 + parent: 1 + - uid: 46 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + - uid: 48 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + - uid: 50 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,5.5 + parent: 1 + - uid: 52 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + - uid: 53 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + - uid: 54 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,0.5 + parent: 1 + - uid: 55 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 1 + - uid: 56 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 + - uid: 59 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,3.5 + parent: 1 + - uid: 60 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-4.5 + parent: 1 + - uid: 61 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 + - uid: 62 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-2.5 + parent: 1 + - uid: 63 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 0.5,-2.5 + parent: 1 + - uid: 64 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 65 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-2.5 + parent: 1 + - uid: 66 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - uid: 67 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 68 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - uid: 69 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + - uid: 70 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 71 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - uid: 72 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + - uid: 73 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + - uid: 76 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + - uid: 77 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,2.5 + parent: 1 + - uid: 78 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - uid: 84 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-4.5 + parent: 1 + - uid: 145 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-2.5 + parent: 1 + - uid: 147 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,3.5 + parent: 1 + - uid: 150 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + - uid: 151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,1.5 + parent: 1 + - uid: 152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 1 + - uid: 153 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - uid: 154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-0.5 + parent: 1 + - uid: 155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - uid: 169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,3.5 + parent: 1 + - uid: 170 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,5.5 + parent: 1 + - uid: 179 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,4.5 + parent: 1 + - uid: 180 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,4.5 + parent: 1 + - uid: 184 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 1 + - uid: 185 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 + - uid: 243 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,4.5 + parent: 1 +- proto: WallAbductorDiagonal + entities: + - uid: 17 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,4.5 + parent: 1 + - uid: 27 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,6.5 + parent: 1 + - uid: 31 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,5.5 + parent: 1 + - uid: 33 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,5.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -0.5,6.5 + parent: 1 + - uid: 57 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-2.5 + parent: 1 + - uid: 74 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 75 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - uid: 90 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-2.5 + parent: 1 + - uid: 97 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,5.5 + parent: 1 + - uid: 113 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + - uid: 115 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,4.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,2.5 + parent: 1 + - uid: 120 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-3.5 + parent: 1 + - uid: 166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-4.5 + parent: 1 + - uid: 167 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-4.5 + parent: 1 + - uid: 168 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-3.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: -3.5,5.5 + parent: 1 + - uid: 172 + components: + - type: Transform + pos: -4.5,4.5 + parent: 1 +- proto: Wonderprod + entities: + - uid: 195 + components: + - type: Transform + pos: 4.5119457,3.4933095 + parent: 1 + - type: Item + heldPrefix: stun + - type: Clothing + equippedPrefix: stun + - type: StaminaDamageOnHit + sound: !type:SoundPathSpecifier + path: /Audio/Weapons/Guns/Hits/taser_hit.ogg + damage: 225 + - type: MeleeWeapon + attackRate: 0.5 + damage: + types: + Shock: 0 + soundNoDamage: !type:SoundCollectionSpecifier + collection: WeakHit + animation: WeaponArcThrust + wideAnimationRotation: -2.356194490192345 rad + soundSwing: !type:SoundPathSpecifier + params: + variation: 0.025 + volume: -3 + path: /Audio/Weapons/punchmiss.ogg +... diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index 6fc31fb215e..ec344b05808 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -2,11 +2,12 @@ - type: randomHumanoidSettings id: EventHumanoid - # start-backmen: species + # Shitmed Change Start speciesBlacklist: - Monkey - Kobold - # end-backmen: species + - Abductor + # Shitmed Change End - Yowie # Goobstation components: - type: RandomHumanoidAppearance diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index fba6fa23aa5..69a7a07185c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -1,5 +1,3 @@ -# Im not even gonna bother marking this file with Shitmed Change(s), I'm fucking with almost everything. - # Base - type: entity @@ -224,6 +222,9 @@ - type: Item sprite: _Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi - type: BoneSetter + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/bone_setter.ogg # Bone Gel - Shitmed Change - type: entity @@ -263,7 +264,7 @@ - type: BoneSaw - type: SurgeryTool startSound: - path: /Audio/_Shitmed/Medical/Surgery/saw.ogg + path: /Audio/_Shitmed/Medical/Surgery/bone_saw.ogg # No melee for regular saw because have you ever seen someone use a band saw as a weapon? It's dumb. - type: entity @@ -310,6 +311,9 @@ speedModifier: 1.5 - type: BoneSaw # Shitmed speed: 1.5 + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/saw.ogg - type: entity name: advanced circular saw @@ -345,11 +349,6 @@ state: e-cautery-on - type: Item sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi - inhandVisuals: - left: - - state: inhand-left-on - right: - - state: inhand-right-on - type: SurgeryTool startSound: path: /Audio/_Shitmed/Medical/Surgery/cautery1.ogg @@ -360,15 +359,42 @@ types: Piercing: 10 Heat: 1 - - type: Cautery - speed: 1.5 - - type: Drill - speed: 1.5 - type: PhysicalComposition #Goobstation - Recycle update materialComposition: Steel: 150 Glass: 37 Plasma: 37 + - type: ItemSwitch + showLabel: true + state: cautery + states: + cautery: !type:ItemSwitchState + verb: cautery + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi + state: e-cautery + components: + - type: Cautery + speed: 1.5 + soundStateActivate: + collection: WelderOn + params: + variation: 0.125 + volume: -5 + + drill: !type:ItemSwitchState + verb: drill + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi + state: e-cautery-on + components: + - type: Drill + speed: 1.5 + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 - type: entity name: energy scalpel @@ -381,11 +407,6 @@ state: e-scalpel-on - type: Item sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi - inhandVisuals: - left: - - state: inhand-left-on - right: - - state: inhand-right-on - type: SurgeryTool startSound: path: /Audio/_Shitmed/Medical/Surgery/scalpel1.ogg @@ -396,15 +417,42 @@ types: Slash: 10 Heat: 1 - - type: Scalpel - speed: 1.5 - - type: BoneSaw - speed: 1.5 - type: PhysicalComposition #Goobstation - Recycle update materialComposition: Steel: 150 - Glass: 37 + Glass: 37 Gold: 37 + - type: ItemSwitch + showLabel: true + state: scalpel + states: + scalpel: !type:ItemSwitchState + verb: scalpel + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + state: e-scalpel + components: + - type: Scalpel + speed: 1.5 + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 + + saw: !type:ItemSwitchState + verb: saw + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi + state: e-scalpel-on + components: + - type: BoneSaw + speed: 1.5 + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 - type: entity name: mechanical pinches @@ -417,11 +465,6 @@ state: adv-retractor-on - type: Item sprite: _Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi - inhandVisuals: - left: - - state: inhand-left-on - right: - - state: inhand-right-on - type: SurgeryTool startSound: path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg @@ -432,19 +475,46 @@ types: Slash: 6.5 Heat: 1 - - type: Hemostat - speed: 1.5 - - type: Retractor - speed: 1.5 - - type: Tweezers - speed: 1.5 - - type: Tending - speed: 1.5 - type: PhysicalComposition #Goobstation - Recycle update materialComposition: Steel: 150 Glass: 37 Silver: 37 + - type: ItemSwitch + showLabel: true + state: retractor + states: + retractor: !type:ItemSwitchState + verb: retractor + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi + state: adv-retractor + components: + - type: Retractor + speed: 1.5 + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 + + hemostat: !type:ItemSwitchState + verb: hemostat + sprite: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi + state: adv-retractor-on + components: + - type: Hemostat + speed: 1.5 + - type: Tweezers + speed: 1.5 + - type: Tending + speed: 1.5 + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 - type: entity name: medical multitool diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index dc694eeb4c7..e2e54bb5e99 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -39,6 +39,7 @@ - id: LoneOpsSpawn - id: DerelictCyborgSpawn - id: BlobSpawn # Goobstation - Blob + - id: LoneAbductorSpawn # Shitmed - Starlight Abductors - type: entity id: BaseStationEvent diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index 662c95a496a..caad6c90b36 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -13,6 +13,7 @@ - MinorAntagonists - SpaceNinja - Thieves + - Abductors # Shitmed - Abductors - type: guideEntry id: Traitors diff --git a/Resources/Prototypes/_Goobstation/game_presets.yml b/Resources/Prototypes/_Goobstation/game_presets.yml index a67f5565e64..cad9950955f 100644 --- a/Resources/Prototypes/_Goobstation/game_presets.yml +++ b/Resources/Prototypes/_Goobstation/game_presets.yml @@ -119,3 +119,17 @@ # - MeteorSwarmScheduler Goobstation - nuh uh - SpaceTrafficControlEventScheduler - BasicRoundstartVariation + +- type: gamePreset + id: Abductor + alias: + - abductor + name: abductor-title + description: abductor-description + showInVote: false + rules: + - LoneAbductorSpawn + - SubGamemodesRule + - BasicStationEventScheduler + - SpaceTrafficControlEventScheduler + - BasicRoundstartVariation \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Actions/abductor.yml b/Resources/Prototypes/_Shitmed/Actions/abductor.yml new file mode 100644 index 00000000000..b2097afc10b --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Actions/abductor.yml @@ -0,0 +1,43 @@ +# Actions +- type: entity + id: ActionExitConsole + name: Exit console + description: Exit console. + components: + - type: InstantAction + priority: -20 + itemIconStyle: BigAction + icon: + sprite: _Shitmed/Interface/Actions/actions_abductor.rsi + state: exit + event: !type:ExitConsoleEvent + +- type: entity + id: ActionSendYourself + name: Send yourself + description: You need to FTL to the same map as the station to use this ability! + components: + - type: WorldTargetAction + useDelay: 10 + priority: -19 + range: -1 + checkCanAccess: false + itemIconStyle: BigAction + icon: + sprite: _Shitmed/Interface/Actions/actions_abductor.rsi + state: send-yourself + event: !type:SendYourselfEvent + +- type: entity + id: ActionReturnToShip + name: return + description: return to the ship. + components: + - type: InstantAction + useDelay: 30 + icon: + sprite: _Shitmed/Interface/Actions/actions_abductor.rsi + state: take + priority: -12 + event: !type:AbductorReturnToShipEvent + diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/abductor.yml b/Resources/Prototypes/_Shitmed/Body/Organs/abductor.yml new file mode 100644 index 00000000000..ceccb17faeb --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/abductor.yml @@ -0,0 +1,73 @@ +- type: entity + id: OrganAbductorBrain + parent: OrganHumanBrain + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: brain + +- type: entity + id: OrganAbductorEyes + parent: OrganHumanEyes + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: eyeballs + layers: + - state: eyeballs + +- type: entity + id: OrganAbductorEars + parent: OrganHumanEars + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: ears + +- type: entity + id: OrganAbductorLungs + parent: OrganHumanLungs + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + layers: + - state: lung-l + - state: lung-r + - type: Lung + alert: LowNitrogen + - type: Organ + slotId: lungs + +- type: entity + id: OrganAbductorHeart + parent: OrganHumanHeart + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: heart-on + +- type: entity + id: OrganAbductorStomach + parent: OrganHumanStomach + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: stomach + +- type: entity + id: OrganAbductorLiver + parent: OrganHumanLiver + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + state: liver + +- type: entity + id: OrganAbductorKidneys + parent: OrganHumanKidneys + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/organs.rsi + layers: + - state: kidney-l + - state: kidney-r diff --git a/Resources/Prototypes/_Shitmed/Body/Organs/dubious.yml b/Resources/Prototypes/_Shitmed/Body/Organs/dubious.yml new file mode 100644 index 00000000000..74271d9ec27 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Organs/dubious.yml @@ -0,0 +1,226 @@ +- type: entity + id: OrganDubiousBase + parent: OrganHumanHeart + name: mysterious gland + categories: [ HideSpawnMenu ] + abstract: true + description: Suspicious alien gland, replaces the heart. + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Misc/Dubious/organs.rsi + state: gland + - type: AbductorOrgan + +- type: entity + id: OrganDubiousHealth + parent: OrganDubiousBase + components: + - type: Sprite + state: health + - type: Organ + onAdd: + - type: PassiveDamage + allowedStates: + - Alive + - Critical + damageCap: 150 + damage: + groups: + Brute: -0.14 + Burn: -0.14 + Airloss: -0.14 + Toxin: -0.14 + Genetic: -0.14 + +- type: entity + id: OrganDubiousAA + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: Access + enabled: true + groups: + - AllAccess + - type: AccessReader + access: [["Command"], ["Research"]] + +- type: entity + id: OrganDubiousShock + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: Insulated + - type: LightningArcShooter + arcDepth: 1 + maxLightningArc: 3 + shootMinInterval: 90 + shootMaxInterval: 300 + shootRange: 5 + lightningPrototype: Lightning + +- type: entity + id: OrganDubiousInvisible + parent: OrganDubiousBase + components: + - type: Sprite + state: species + - type: Organ + onAdd: + - type: Stealth + enabledOnDeath: false + maxVisibility: 1.2 + - type: StealthOnMove + passiveVisibilityRate: -0.25 + movementVisibilityRate: 0.25 + +- type: entity + id: OrganDubiousGoliath + parent: OrganDubiousBase + components: + - type: Sprite + state: species + - type: Organ + onAdd: + - type: GoliathTentacle + +- type: entity + id: OrganDubiousSpaceAdaptation + parent: OrganDubiousBase + components: + - type: Sprite + state: species + - type: Organ + onAdd: + - type: PressureImmunity + - type: BreathingImmunity + +- type: entity + id: OrganDubiousArtifact + parent: OrganDubiousBase + components: + - type: Sprite + state: mindshock + - type: Organ + onAdd: + - type: Artifact + - type: RandomStatusActivation + statusEffects: + ActivateArtifactEffect: ActivateArtifactEffect + +- type: entity + id: OrganDubiousScrambleDna + parent: OrganDubiousBase + components: + - type: Sprite + state: species + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + ScrambleDnaEffect: ScrambleDnaEffect + +- type: entity + id: OrganDubiousScrambleLocation + parent: OrganDubiousBase + components: + - type: Sprite + state: vent + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + ScrambleLocationEffect: ScrambleLocationEffect + +- type: entity + id: OrganDubiousSpiderEggs + parent: OrganDubiousBase + components: + - type: Sprite + state: spider + - type: Organ + onAdd: + - type: RandomStatusActivation + minActivationTime: 120 + maxActivationTime: 360 + statusEffects: + SpawnSpiderEggs: SpawnSpiderEggs + +- type: entity + id: OrganDubiousSlimeEggs + parent: OrganDubiousBase + components: + - type: Sprite + state: slime + - type: Organ + onAdd: + - type: RandomStatusActivation + minActivationTime: 120 + maxActivationTime: 360 + statusEffects: + SpawnSlimes: SpawnSlimes + +- type: entity + id: OrganDubiousEMP + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + SpawnEmp: SpawnEmp + +- type: entity + id: OrganDubiousGravityWell + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + SpawnGravityWell: SpawnGravityWell + +- type: entity + id: OrganDubiousFlash + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + SpawnFlash: SpawnFlash + +- type: entity + id: OrganDubiousSmoke + parent: OrganDubiousBase + components: + - type: Sprite + state: emp + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + SpawnSmoke: SpawnSmoke + +- type: entity + id: OrganDubiousGas + parent: OrganDubiousBase + components: + - type: Sprite + state: viral + - type: Organ + onAdd: + - type: RandomStatusActivation + statusEffects: + ExpelGas: ExpelGas diff --git a/Resources/Prototypes/_Shitmed/Body/Parts/abductor.yml b/Resources/Prototypes/_Shitmed/Body/Parts/abductor.yml new file mode 100644 index 00000000000..caefc68a9c3 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Parts/abductor.yml @@ -0,0 +1,96 @@ +- type: entity + id: TorsoAbductor + name: "abductor torso" + parent: BaseTorso + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "torso" + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Sugar + Quantity: 20 + +- type: entity + id: HeadAbductor + name: "abductor head" + parent: BaseHead + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "head" + +- type: entity + id: LeftArmAbductor + name: "left abductor arm" + parent: BaseLeftArm + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "l_arm" + +- type: entity + id: RightArmAbductor + name: "right abductor arm" + parent: BaseRightArm + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "r_arm" + +- type: entity + id: LeftHandAbductor + name: "left abductor hand" + parent: BaseLeftHand + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "l_hand" + +- type: entity + id: RightHandAbductor + name: "right abductor hand" + parent: BaseRightHand + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "r_hand" + +- type: entity + id: LeftLegAbductor + name: "left abductor leg" + parent: BaseLeftLeg + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "l_leg" + +- type: entity + id: RightLegAbductor + name: "right abductor leg" + parent: BaseRightLeg + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "r_leg" + +- type: entity + id: LeftFootAbductor + name: "left abductor foot" + parent: BaseLeftFoot + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "l_foot" + +- type: entity + id: RightFootAbductor + name: "right abductor foot" + parent: BaseRightFoot + components: + - type: Sprite + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: "r_foot" diff --git a/Resources/Prototypes/_Shitmed/Body/Parts/cybernetic.yml b/Resources/Prototypes/_Shitmed/Body/Parts/cybernetic.yml index fee3b9f0de0..41390bd49a3 100644 --- a/Resources/Prototypes/_Shitmed/Body/Parts/cybernetic.yml +++ b/Resources/Prototypes/_Shitmed/Body/Parts/cybernetic.yml @@ -1,6 +1,6 @@ - type: entity id: LeftArmCybernetic - parent: LeftArmHuman + parent: [PartIPC, BaseLeftArm] abstract: true components: - type: Damageable @@ -16,7 +16,7 @@ - type: entity id: RightArmCybernetic - parent: RightArmHuman + parent: [PartIPC, BaseRightArm] abstract: true components: - type: Damageable @@ -32,7 +32,7 @@ - type: entity id: LeftLegCybernetic - parent: LeftLegHuman + parent: [PartIPC, BaseLeftLeg] abstract: true components: - type: Damageable @@ -48,7 +48,7 @@ - type: entity id: RightLegCybernetic - parent: RightLegHuman + parent: [PartIPC, BaseRightLeg] abstract: true components: - type: Damageable @@ -64,7 +64,7 @@ - type: entity id: LeftHandCybernetic - parent: [PartHuman, BaseLeftHand] + parent: [PartIPC, BaseLeftHand] name: cybernetic left hand components: - type: Damageable @@ -92,7 +92,7 @@ - type: entity id: LeftFootCybernetic - parent: LeftFootHuman + parent: [PartIPC, BaseLeftFoot] name: cybernetic left foot components: - type: Damageable @@ -106,7 +106,7 @@ - type: entity id: RightFootCybernetic - parent: RightFootHuman + parent: [PartIPC, BaseRightFoot] name: cybernetic right foot components: - type: Damageable diff --git a/Resources/Prototypes/_Shitmed/Body/Prototypes/abductor.yml b/Resources/Prototypes/_Shitmed/Body/Prototypes/abductor.yml new file mode 100644 index 00000000000..4551e4fc110 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Body/Prototypes/abductor.yml @@ -0,0 +1,49 @@ +- type: body + id: Abductor + name: Abductor + root: torso + slots: + head: + part: HeadAbductor + connections: + - torso + organs: + brain: OrganAbductorBrain + eyes: OrganAbductorEyes + torso: + part: TorsoAbductor + connections: + - right arm + - left arm + - right leg + - left leg + organs: + heart: OrganAbductorHeart + lungs: OrganAbductorLungs + stomach: OrganAbductorStomach + liver: OrganAbductorLiver + kidneys: OrganAbductorKidneys + right arm: + part: RightArmAbductor + connections: + - right hand + left arm: + part: LeftArmAbductor + connections: + - left hand + right hand: + part: RightHandAbductor + left hand: + part: LeftHandAbductor + right leg: + part: RightLegAbductor + connections: + - right foot + left leg: + part: LeftLegAbductor + connections: + - left foot + right foot: + part: RightFootAbductor + left foot: + part: LeftFootAbductor \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/_Shitmed/Catalog/Fills/Backpacks/duffelbag.yml new file mode 100644 index 00000000000..a8b16472540 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Catalog/Fills/Backpacks/duffelbag.yml @@ -0,0 +1,15 @@ +#- type: entity +# parent: ClothingBackpackDuffelAbductorBundle +# id: ClothingBackpackDuffelAbductorFilled +# suffix: Filled +# components: +# - type: StorageFill +# contents: +# - id: HemostatAbductor +# - id: SawAbductor +# - id: DrillAbductor +# - id: CauteryAbductor +# - id: RetractorAbductor +# - id: ScalpelAbductor +# - id: BoneGelAbductor +# - id: BoneSetterAbductor \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/_Shitmed/Catalog/Fills/Items/belt.yml new file mode 100644 index 00000000000..817427dcc69 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Catalog/Fills/Items/belt.yml @@ -0,0 +1,17 @@ +- type: entity + id: ClothingAbductorBeltFilled + parent: ClothingAbductorBelt + suffix: Filled + components: + - type: StorageFill + contents: + - id: CrowbarAbductor + - id: WrenchAbductor + - id: ScrewdriverAbductor + - id: WirecutterAbductor + - id: WelderAbductor + - id: MultitoolAbductor + - id: EnergyScalpelAbductor + - id: SearingToolAbductor + - id: MechanicalPinchesAbductor + - id: BoneManipulatorAbductor diff --git a/Resources/Prototypes/_Shitmed/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/_Shitmed/Clothing/Uniforms/jumpsuits.yml new file mode 100644 index 00000000000..25515ab8765 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Clothing/Uniforms/jumpsuits.yml @@ -0,0 +1,9 @@ +- type: entity + parent: UnsensoredClothingUniformBase + id: ClothingUniformJumpsuitAbductor + name: abductor uniform + components: + - type: Sprite + sprite: _Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi + - type: Clothing + sprite: _Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi diff --git a/Resources/Prototypes/_Shitmed/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/_Shitmed/Entities/Clothing/Back/duffel.yml new file mode 100644 index 00000000000..ca680b72fba --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Clothing/Back/duffel.yml @@ -0,0 +1,21 @@ +- type: entity + parent: ClothingBackpackDuffel + id: ClothingBackpackDuffelAbductor + name: abductor's surgery duffel bag + description: A large duffel bag for holding various surgery goods. + components: + - type: Sprite + sprite: _Shitmed/Clothing/Back/Duffels/abductor.rsi + - type: ExplosionResistance + damageCoefficient: 0.1 + - type: Storage + grid: + - 0,0,8,4 + +- type: entity + parent: ClothingBackpackDuffelAbductor + id: ClothingBackpackDuffelAbductorBundle + abstract: true + components: + - type: Tag + tags: [] diff --git a/Resources/Prototypes/_Shitmed/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/_Shitmed/Entities/Clothing/Belt/belts.yml new file mode 100644 index 00000000000..e333fbb02a4 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Clothing/Belt/belts.yml @@ -0,0 +1,53 @@ +- type: entity + parent: ClothingBeltStorageBase + id: ClothingAbductorBelt + name: abductor belt + description: Can hold various OUR things. + components: + - type: Sprite + sprite: _Shitmed/Clothing/Belt/abductor.rsi + - type: Clothing + sprite: _Shitmed/Clothing/Belt/abductor.rsi + - type: Storage + maxItemSize: Normal + grid: + - 0,0,9,1 + whitelist: + tags: + - Powerdrill + - Wirecutter + - Crowbar + - Screwdriver + - Flashlight + - Wrench + - GeigerCounter + - Flare + - CableCoil + - CigPack + - Radio + - Knife + - Multitool + - AppraisalTool + - JawsOfLife + - GPS + - WeldingMask + components: + - SurgeryTool + - SprayPainter + - NetworkConfigurator + - Welder + - PowerCell + - Geiger + - TrayScanner + - GasAnalyzer + - HandLabeler + - Stunbaton + - FlashOnTrigger + - SmokeOnTrigger + - Flash + - Handcuff + - BallisticAmmoProvider + - Ammo + - type: Appearance + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/_Shitmed/Entities/Clothing/Ears/headsets_alt.yml b/Resources/Prototypes/_Shitmed/Entities/Clothing/Ears/headsets_alt.yml new file mode 100644 index 00000000000..72994f84b48 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Clothing/Ears/headsets_alt.yml @@ -0,0 +1,13 @@ +- type: entity + parent: ClothingHeadsetAlt + id: ClothingHeadsetAltAbductor + name: abductor over-ear headset + components: + - type: ContainerFill + containers: + key_slots: + - EncryptionKeyStationMaster + - type: Sprite + sprite: _Shitmed/Clothing/Ears/Headsets/abductor.rsi + - type: Clothing + sprite: _Shitmed/Clothing/Ears/Headsets/abductor.rsi \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/_Shitmed/Entities/Clothing/Head/helmets.yml new file mode 100644 index 00000000000..eab54abbd73 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Clothing/Head/helmets.yml @@ -0,0 +1,25 @@ +#Basic Helmet (Security Helmet) +- type: entity + parent: ClothingHeadHelmetBase + id: ClothingHeadHelmetAbductor + name: helmet + components: + - type: Armor + modifiers: + coefficients: + Blunt: 0.80 + Slash: 0.80 + Piercing: 0.80 + Heat: 0.80 + Radiation: 0.80 + Caustic: 0.95 + - type: ExplosionResistance + damageCoefficient: 0.75 + - type: Sprite + sprite: _Shitmed/Clothing/Head/Helmets/abductor.rsi + - type: Clothing + sprite: _Shitmed/Clothing/Head/Helmets/abductor.rsi + - type: Tag + tags: + - WhitelistChameleon + - SecurityHelmet diff --git a/Resources/Prototypes/_Shitmed/Entities/Effects/teleportation.yml b/Resources/Prototypes/_Shitmed/Entities/Effects/teleportation.yml new file mode 100644 index 00000000000..e30dcd7057d --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Effects/teleportation.yml @@ -0,0 +1,33 @@ +- type: entity + id: EffectTeleportation + categories: [ HideSpawnMenu ] + name: teleportation + components: + - type: Transform + anchored: True + - type: Physics + bodyType: Static + canCollide: false + - type: Sprite + sprite: _Shitmed/Effects/teleportation.rsi + state: teleportation + scale: 0.65, 0.65 + color: "#FD009899" + - type: TimedDespawn + lifetime: 5.0 + +- type: entity + id: EffectTeleportationEntity + categories: [ HideSpawnMenu ] + name: teleportation + components: + - type: Physics + bodyType: Static + canCollide: false + - type: Sprite + sprite: _Shitmed/Effects/teleportation.rsi + state: teleportation-entity + scale: 0.65, 0.65 + color: "#FD009899" + - type: TimedDespawn + lifetime: 5.0 \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Entities/Markers/Spawners/Random/dubious.yml b/Resources/Prototypes/_Shitmed/Entities/Markers/Spawners/Random/dubious.yml new file mode 100644 index 00000000000..451aa71689e --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Markers/Spawners/Random/dubious.yml @@ -0,0 +1,46 @@ +- type: entityTable + id: DubiousOrgansTable + table: !type:GroupSelector + children: + # Not-so Annoying Organs Group - 50% chance + - !type:GroupSelector + weight: 50 + children: + - id: OrganDubiousHealth + - id: OrganDubiousInvisible + - id: OrganDubiousSpaceAdaptation + - id: OrganDubiousScrambleDna + - id: OrganDubiousScrambleLocation + - id: OrganDubiousArtifact + # Annoying/Disruptive Organs Group - 35% chance + - !type:GroupSelector + weight: 35 + children: + - id: OrganDubiousShock + - id: OrganDubiousGoliath + - id: OrganDubiousEMP + - id: OrganDubiousGravityWell + - id: OrganDubiousFlash + - id: OrganDubiousSmoke + - id: OrganDubiousGas + # Very Disruptive Organs Group - 15% chance + - !type:GroupSelector + weight: 15 + children: + - id: OrganDubiousAA + - id: OrganDubiousSpiderEggs + - id: OrganDubiousSlimeEggs + +- type: entity + name: Dubious Organ Spawner + id: DubiousOrganSpawner + parent: MarkerBase + components: + - type: Sprite + layers: + - state: red + - sprite: _Shitmed/Mobs/Species/Misc/Dubious/organs.rsi + state: gland + - type: EntityTableSpawner + table: !type:NestedSelector + tableId: DubiousOrgansTable diff --git a/Resources/Prototypes/_Shitmed/Entities/Mobs/Player/abductor.yml b/Resources/Prototypes/_Shitmed/Entities/Mobs/Player/abductor.yml new file mode 100644 index 00000000000..b5903606cc6 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Mobs/Player/abductor.yml @@ -0,0 +1,76 @@ +- type: entity + name: lone abductor + parent: BaseMobAbductor + id: MobAbductor + components: + - type: Abductor + - type: Tag + tags: + - Abductor + - AbductorScientist + - CanPilot + - FootstepSound + - DoorBumpOpener + +- type: entity + name: lone abductor + parent: MobAbductor + id: MobLoneAbductor + components: + - type: AntagObjectives + objectives: + - StealResearchObjective + - type: GhostRole + name: abductors-ghost-role-name + description: abductors-ghost-role-desc + rules: abductors-ghost-role-rules + raffle: + settings: default + - type: AbductorScientist + - type: ActionGrant + actions: + - ActionReturnToShip + - type: Loadout + prototypes: + - LoneAbductorGear + +- type: startingGear + id: LoneAbductorGear + equipment: + head: ClothingHeadHelmetAbductor + ears: ClothingHeadsetAltAbductor + jumpsuit: ClothingUniformJumpsuitAbductor + gloves: ClothingHandsGlovesCombat + shoes: ClothingShoesBootsCombat + pocket1: AbductorGizmo + belt: ClothingAbductorBeltFilled + back: Wonderprod + +- type: entity + name: lone abductor spawner + id: SpawnPointLoneAbductor + parent: MarkerBase + components: + - type: SpawnPoint + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: Structures/Wallmounts/signs.rsi + state: radiation + +- type: entity + categories: [ HideSpawnMenu, Spawner ] + parent: BaseAntagSpawner + id: LoneAbductorSpawner + components: + - type: GhostRole + name: abductors-ghost-role-name + description: abductors-ghost-role-desc + rules: abductors-ghost-role-rules + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: Structures/Wallmounts/signs.rsi + state: radiation diff --git a/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/abductor.yml b/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/abductor.yml new file mode 100644 index 00000000000..1e80aae4a2d --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Mobs/Species/abductor.yml @@ -0,0 +1,57 @@ +- type: entity + save: false + name: Urist McAbductor + parent: + - MobBloodstream + - MobFlammable + - BaseMobSpecies + id: BaseMobAbductor + abstract: true + components: + - type: Absorbable # BLOOD FOR THE BLOOD GOD + - type: Muted + - type: HumanoidAppearance + species: Abductor + - type: Icon + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: full + - type: Fingerprint + - type: Blindable + - type: Body + prototype: Abductor + requiredLegs: 2 + - type: FireVisuals + alternateState: Standing + - type: Damageable + damageContainer: Biological + - type: Tag + tags: + - CanPilot + - FootstepSound + - DoorBumpOpener + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#878787" + Burn: + sprite: Mobs/Effects/burn_damage.rsi + - type: PassiveDamage + allowedStates: + - Alive + damageCap: 40 + damage: + types: + Heat: -0.14 + groups: + Brute: -0.14 + - type: Targeting + - type: SurgeryTarget + +- type: entity + parent: BaseSpeciesDummy + id: MobAbductorDummy + categories: [ HideSpawnMenu ] + components: + - type: HumanoidAppearance + species: Abductor diff --git a/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/eggspider.yml b/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/eggspider.yml new file mode 100644 index 00000000000..b0cff6cd6db --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/eggspider.yml @@ -0,0 +1,19 @@ +- type: entity + parent: EggSpider + id: EggSpiderFertilized + name: spider egg + description: Is it a gemstone? Is it an egg? It looks expensive. + components: + - type: Timer + - type: TimedSpawner + prototypes: + - MobGiantSpider + intervalSeconds: 60 + minimumEntitiesSpawned: 1 + maximumEntitiesSpawned: 1 + - type: TimedDespawn + lifetime: 61 + - type: FactionException + - type: PettableFriend + successString: petting-success-spider-egg + failureString: petting-failure-spider-egg \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/handcuffs.yml new file mode 100644 index 00000000000..526ce1161c7 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Objects/Misc/handcuffs.yml @@ -0,0 +1,21 @@ +- type: entity + name: handcuffs + description: Used to detain criminals and other assholes. + id: AbductorHandcuffs + parent: [Handcuffs, BaseRestrictedContraband] + components: + - type: Handcuff + cuffTime: 1.5 + uncuffTime: 4.5 + breakoutTime: 30 + stunBonus: 1.0 + cuffedRSI: _Shitmed/Objects/Misc/handcuffs.rsi + bodyIconState: body-overlay + - type: Sprite + sprite: _Shitmed/Objects/Misc/handcuffs.rsi + state: handcuff + - type: GuideHelp + guides: + - Abductors + - type: UseDelay + delay: 1.5 diff --git a/Resources/Prototypes/_Shitmed/Entities/Objects/Weapons/Melee/wonderprod.yml b/Resources/Prototypes/_Shitmed/Entities/Objects/Weapons/Melee/wonderprod.yml new file mode 100644 index 00000000000..5303b7b1eb4 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Objects/Weapons/Melee/wonderprod.yml @@ -0,0 +1,106 @@ +- type: entity + name: wonderprod + parent: [BaseItem, BaseRestrictedContraband] + id: Wonderprod + description: Universal tool of the abductor agent. + components: + - type: Item + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + size: Huge + storedRotation: -90 + - type: Clothing + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + quickEquip: false + slots: + - Back + - suitStorage + - type: Sprite + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + state: icon + - type: GuideHelp + guides: + - Abductors + - type: RestrictByUserTag + contains: + - Abductor + messages: + - abductors-weapon-restricted-1 + - abductors-weapon-restricted-2 + - abductors-weapon-restricted-3 + - abductors-weapon-restricted-4 + - type: ItemSwitch + state: stun + showLabel: true + states: + stun: !type:ItemSwitchState + verb: stun + sprite: + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + state: stun-icon + components: + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.5 + damage: + types: + Shock: 0 + angle: 60 + animation: WeaponArcThrust + - type: StaminaDamageOnHit + damage: 50 + sound: /Audio/Weapons/Guns/Hits/taser_hit.ogg + soundStateActivate: + collection: sparks + params: + variation: 0.250 + + cuffs: !type:ItemSwitchState + verb: cuffs + sprite: + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + state: cuffs-icon + components: + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.5 + damage: + types: + Shock: 0 + angle: 60 + animation: WeaponArcThrust + - type: CuffsOnHit + proto: Cablecuffs + + sleep: !type:ItemSwitchState + verb: sleep + sprite: + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + state: sleep-icon + components: + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 1 + damage: + types: + Shock: 0 + angle: 60 + animation: WeaponArcThrust + - type: InjectOnHit + reagents: + - ReagentId: Nocturine + Quantity: 5 + + damage: !type:ItemSwitchState + verb: damage + sprite: + sprite: _Shitmed/Objects/Weapons/Melee/wonderprod.rsi + state: damage-icon + components: + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.75 + angle: 60 + animation: WeaponArcThrust + damage: + types: + Heat: 30 diff --git a/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/gizmo.yml b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/gizmo.yml new file mode 100644 index 00000000000..ee78dddf595 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/gizmo.yml @@ -0,0 +1,28 @@ +- type: entity + id: AbductorGizmo + parent: [BaseItem, BaseRestrictedContraband] + name: gizmo + description: A device that inserts a nano tracker, which can be used to target a teleportation beam. + components: + - type: Sprite + sprite: _Shitmed/Objects/Misc/gizmo.rsi + state: icon + - type: Item + sprite: _Shitmed/Objects/Misc/gizmo.rsi + - type: RestrictByUserTag + contains: + - AbductorScientist + messages: + - abductors-gizmo-restricted + - type: MeleeWeapon + wideAnimationRotation: -135 + attackRate: 0.5 + damage: + types: + Shock: 0 + angle: 60 + animation: WeaponArcThrust + - type: AbductorGizmo + - type: GuideHelp + guides: + - Abductors diff --git a/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/surgery.yml b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/surgery.yml new file mode 100644 index 00000000000..dbb4acdea50 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/surgery.yml @@ -0,0 +1,134 @@ +- type: entity + name: abductor's mechanical pinches + id: MechanicalPinchesAbductor + description: A highly advanced set of mechanical pinches, they seem to work like a hemostat and retractor. + parent: [BaseToolSurgery, BaseMedicalScienceContraband] + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi + state: abductor + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi + heldPrefix: abductor + storedRotation: 90 + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor2.ogg + - type: MeleeWeapon + damage: + types: + Slash: 6.5 + Heat: 1 + - type: PhysicalComposition #Goobstation - Recycle update + materialComposition: + Steel: 150 + Glass: 37 + Silver: 37 + - type: Hemostat + speed: 2 + - type: Retractor + speed: 2 + - type: Tweezers + speed: 2 + - type: Tending + speed: 2 + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's searing tool + description: A highly advanced cautery with an energy tip, it seems to also work as a drill. + id: SearingToolAbductor + parent: [BaseToolSurgery, BaseMedicalScienceContraband] + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi + state: abductor + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/drill.rsi + heldPrefix: abductor + storedRotation: 90 + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/cautery1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/cautery2.ogg + - type: MeleeWeapon + damage: + types: + Piercing: 10 + Heat: 1 + - type: PhysicalComposition #Goobstation - Recycle update + materialComposition: + Steel: 150 + Glass: 37 + Plasma: 37 + - type: Drill + speed: 2 + - type: Cautery + speed: 2 + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's energy scalpel + description: A scalpel which uses an energy blade, it seems to also work as a saw. + id: EnergyScalpelAbductor + parent: [BaseToolSurgery, BaseMedicalScienceContraband] + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi + state: abductor + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi + heldPrefix: abductor + storedRotation: 90 + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel1.ogg + endSound: + path: /Audio/_Shitmed/Medical/Surgery/scalpel2.ogg + - type: MeleeWeapon + damage: + types: + Slash: 10 + Heat: 1 + - type: PhysicalComposition #Goobstation - Recycle update + materialComposition: + Steel: 150 + Glass: 37 + Gold: 37 + - type: Scalpel + speed: 2 + - type: BoneSaw + speed: 2 + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's bone manipulator + id: BoneManipulatorAbductor + parent: [BaseToolSurgery, BaseMedicalScienceContraband] + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi + state: abductor + - type: Item + sprite: _Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi + heldPrefix: abductor + storedRotation: 90 + - type: SurgeryTool + startSound: + path: /Audio/_Shitmed/Medical/Surgery/bone_setter.ogg + - type: BoneSetter + speed: 2 + - type: BoneGel + speed: 2 + - type: GuideHelp + guides: + - Abductors diff --git a/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/tools.yml b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/tools.yml new file mode 100644 index 00000000000..5d18cde7e07 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Specific/Abductor/tools.yml @@ -0,0 +1,263 @@ +# Abductor's Crowbar +- type: entity + parent: BaseCrowbar + id: CrowbarAbductor + name: abductor's crowbar + description: A multipurpose tool to pry open doors and fight interdimensional invaders. + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/crowbar.rsi + state: abductor + - type: Tool + speedModifier: 2 + qualities: + - Prying + useSound: + path: /Audio/Items/crowbar.ogg + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's wirecutter + parent: BaseItem + id: WirecutterAbductor + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/wirecutters.rsi + state: abductor + - type: EmitSoundOnLand + sound: + path: /Audio/Items/wirecutter_drop.ogg + - type: Tag + tags: + - PlantSampleTaker + - Wirecutter + - type: MeleeWeapon + wideAnimationRotation: -90 + damage: + types: + Piercing: 2 + attackRate: 2 + soundHit: + path: "/Audio/Items/wirecutter.ogg" + - type: Tool + qualities: + - Cutting + useSound: + path: /Audio/Items/wirecutter.ogg + - type: Item + sprite: _Shitmed/Objects/Specific/Abductor/wirecutters.rsi + storedRotation: -90 + - type: ToolTileCompatible + - type: PhysicalComposition + materialComposition: + Steel: 100 + - type: StaticPrice + price: 30 + - type: Retractor + speed: 0.35 + - type: Hemostat + speed: 0.6 + - type: SurgeryTool + startSound: + path: /Audio/Items/wirecutter.ogg + params: + variation: 0.125 + endSound: + path: /Audio/Items/wirecutter.ogg + params: + variation: 0.125 + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's screwdriver + parent: BaseItem + id: ScrewdriverAbductor + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/screwdriver.rsi + state: abductor + - type: EmitSoundOnLand + sound: + path: /Audio/Items/screwdriver_drop.ogg + - type: Tag + tags: + - Screwdriver + - type: Item + sprite: _Shitmed/Objects/Specific/Abductor/screwdriver.rsi + storedRotation: -90 + - type: MeleeWeapon + wideAnimationRotation: -90 + attackRate: 1 + damage: + types: + Piercing: 6 + soundHit: + path: "/Audio/Weapons/bladeslice.ogg" + - type: Tool + qualities: + - Screwing + useSound: + collection: Screwdriver + - type: PhysicalComposition + materialComposition: + Steel: 100 + - type: StaticPrice + price: 30 + - type: Retractor + speed: 0.45 + - type: Tending + speed: 0.65 + - type: SurgeryTool + startSound: + collection: Screwdriver + endSound: + path: /Audio/_Shitmed/Medical/Surgery/retractor2.ogg + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's wrench + parent: Wrench + id: WrenchAbductor + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/wrench.rsi + state: abductor + - type: Item + sprite: _Shitmed/Objects/Specific/Abductor/wrench.rsi + storedRotation: 45 + heldPrefix: abductor + storedSprite: + sprite: _Shitmed/Objects/Specific/Abductor/wrench.rsi + state: abductor + - type: Tool + speedModifier: 2 + qualities: + - Anchoring + useSound: + path: /Audio/Items/ratchet.ogg + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's welding tool + parent: Welder + id: WelderAbductor + description: "An experimental welder capable of self-fuel generation and less harmful to the eyes." + components: + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/welder.rsi + state: abductor + - type: SolutionContainerManager + solutions: + Welder: + reagents: + - ReagentId: WeldingFuel + Quantity: 1000 + maxVol: 1000 + - type: PointLight + enabled: false + radius: 1.5 + color: lightblue + - type: SolutionRegeneration + solution: Welder + generated: + reagents: + - ReagentId: WeldingFuel + Quantity: 10 + - type: Tool + speedModifier: 2.0 + useSound: + collection: Welder + qualities: Welding + - type: GuideHelp + guides: + - Abductors + +- type: entity + name: abductor's multitool + parent: [BaseItem, BaseRestrictedContraband] + id: MultitoolAbductor + description: An advanced tool to copy, store, and send electrical pulses and signals through wires and machines. + components: + - type: EmitSoundOnLand + sound: + path: /Audio/Items/multitool_drop.ogg + - type: Item + size: Small + - type: PhysicalComposition + materialComposition: + Steel: 100 + Plastic: 100 + - type: StaticPrice + price: 56 + - type: Sprite + sprite: _Shitmed/Objects/Specific/Abductor/multitool.rsi + state: abductor + layers: + - state: abductor + - type: Clothing + sprite: _Shitmed/Objects/Specific/Abductor/multitool.rsi + quickEquip: false + slots: + - Belt + - type: GuideHelp + guides: + - Abductors + - type: UserInterface + interfaces: + enum.NetworkConfiguratorUiKey.List: + type: NetworkConfiguratorBoundUserInterface + enum.NetworkConfiguratorUiKey.Configure: + type: NetworkConfiguratorBoundUserInterface + enum.NetworkConfiguratorUiKey.Link: + type: NetworkConfiguratorBoundUserInterface + - type: Tag + tags: + - Multitool + - DoorElectronicsConfigurator + - type: ItemSwitch + state: link + states: + link: !type:ItemSwitchState + verb: link + sprite: + sprite: _Shitmed/Objects/Specific/Abductor/multitool.rsi + state: abductor + components: + - type: Tool + qualities: + - Pulsing + - type: NetworkConfigurator + showLabel: false + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 + + hijack: !type:ItemSwitchState + verb: hijack + sprite: + sprite: _Shitmed/Objects/Specific/Abductor/multitool.rsi + state: override-abductor + components: + - type: LimitedCharges + charges: 0 + - type: AutoRecharge + rechargeDuration: 15 + - type: Emag + validTargets: + components: + - Airlock + soundStateActivate: + collection: sparks + params: + variation: 0.125 + volume: -5 diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Computers/computers.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Computers/computers.yml new file mode 100644 index 00000000000..271c04f3892 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Computers/computers.yml @@ -0,0 +1,85 @@ +- type: entity + parent: BaseComputer + id: AbductorConsole + name: abductor console + description: A computer that is used for spying on the station. + components: + - type: AbductorConsole + - type: Sprite + sprite: _Shitmed/Structures/Machines/abductor_console.rsi + layers: + - map: ["console"] + state: console + - type: ActivatableUI + key: enum.AbductorConsoleUIKey.Key + - type: UserInterface + interfaces: + enum.AbductorConsoleUIKey.Key: + type: AbductorConsoleBui + - type: PointLight + enabled: true + radius: 1.5 + energy: 1.6 + color: "#FC0097" + +- type: entity + parent: ComputerComms + id: CentCommSectoralConsole + name: centcomm sectoral console + description: Use this to annoy captains of all stations at once. + components: + - type: AccessReader + access: [[ "Command" ]] + - type: CommunicationsConsole + title: comms-console-announcement-title-centcom + global: true + +- type: entity + parent: BaseComputer + id: AbductorHumanObservationConsole + name: human observation console + description: Use this to set teleporter destination or retrieve people marked by scientist tools. Also used for buying replacement gear and linking the agent's vest. + components: + - type: Sprite + sprite: _Shitmed/Structures/Machines/abductor_camera_console.rsi + layers: + - map: ["console"] + state: console + - type: AbductorHumanObservationConsole + - type: ActivatableUI + key: enum.AbductorCameraConsoleUIKey.Key + - type: UserInterface + interfaces: + enum.AbductorCameraConsoleUIKey.Key: + type: AbductorCameraConsoleBui + - type: PointLight + enabled: true + radius: 1.5 + energy: 1.6 + color: "#FC0097" + +- type: entity + parent: + - Incorporeal + - BaseMob + id: AbductorHumanObservationConsoleEye + name: abductor eye + description: The abductor's viewer. + categories: [ HideSpawnMenu ] + suffix: DO NOT MAP + components: + - type: NoFTL + - type: WarpPoint + follow: true + - type: Eye + pvsScale: 1.5 + - type: Visibility + layer: 4 + - type: Sprite + sprite: _Shitmed/Structures/Machines/abductor_camera_console.rsi + layers: + - state: eye + shader: unshaded + - type: Tag + tags: + - CantInteract diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Furniture/Tables/tables.yml new file mode 100644 index 00000000000..e8b102c3926 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Furniture/Tables/tables.yml @@ -0,0 +1,12 @@ +- type: entity + id: AbductorOperatingTable + parent: OperatingTable + name: abductor operating table + components: + - type: Sprite + sprite: _Shitmed/Structures/Furniture/Tables/abductor_optable.rsi + state: operating_table + noRot: true + - type: Icon + sprite: _Shitmed/Structures/Furniture/Tables/abductor_optable.rsi + state: operating_table diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/abductor_experimentator.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/abductor_experimentator.yml new file mode 100644 index 00000000000..c325992ab56 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/abductor_experimentator.yml @@ -0,0 +1,30 @@ +- type: entity + parent: BaseStructure + id: AbductorExperimentator + name: experimentator + description: A device that analyzes the result of the experiment and resets the subject to the place from where they were taken. + components: + - type: AbductorExperimentator + - type: Sprite + noRot: true + sprite: _Shitmed/Structures/abductor_experimentator.rsi + layers: + - state: experimentator_0 + map: ["base"] + - type: InteractionOutline + - type: Physics + canCollide: false + - type: DragInsertContainer + containerId: storage + - type: ExitContainerOnMove + containerId: storage + - type: ContainerContainer + containers: + storage: !type:ContainerSlot + - type: Appearance + - type: GenericVisualizer + visuals: + enum.AbductorExperimentatorVisuals.Full: + base: + True: { state: experimentator_1 } + False: { state: experimentator_0 } diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/alien_pad.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/alien_pad.yml new file mode 100644 index 00000000000..50e3e19d532 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Specific/alien_pad.yml @@ -0,0 +1,35 @@ +- type: entity + id: AbductorAlienPad + parent: [ BaseMachinePowered, ConstructibleMachine ] + name: alien pad + description: Beam in the pizzas and dig in. + components: + - type: AbductorAlienPad + - type: InteractionOutline + - type: Physics + bodyType: Static + canCollide: false + - type: Transform + anchored: true + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.00" + density: 190 + mask: + - MachineMask + - type: Sprite + sprite: _Shitmed/Structures/abductor_alien_pad.rsi + drawdepth: FloorObjects + layers: + - state: offline + map: [ "enum.CargoTelepadLayers.Base" ] + - state: idle + map: [ "enum.CargoTelepadLayers.Beam" ] + - type: WirelessNetworkConnection + range: 200 + - type: Appearance + - type: CollideOnAnchor diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Tables/tables.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Tables/tables.yml new file mode 100644 index 00000000000..2916fa37753 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Tables/tables.yml @@ -0,0 +1,13 @@ +- type: entity + id: TableAbductor + parent: TableBase + name: alien table + description: Literally the sturdiest thing you have ever seen. + components: + - type: Sprite + sprite: _Shitmed/Structures/Tables/abductor_table.rsi + - type: Icon + sprite: _Shitmed/Structures/Tables/abductor_table.rsi + - type: FootstepModifier + footstepSoundCollection: + collection: FootstepFloor diff --git a/Resources/Prototypes/_Shitmed/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/_Shitmed/Entities/Structures/Walls/walls.yml new file mode 100644 index 00000000000..43c1ce150e3 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Entities/Structures/Walls/walls.yml @@ -0,0 +1,85 @@ +#shuttle walls +- type: entity + id: WallAbductorDiagonal + name: shuttle wall + suffix: Diagonal + description: Keeps the air in and the greytide out. + placement: + mode: SnapgridCenter + snap: + - Wall + components: + - type: Transform + anchored: true + - type: Clickable + - type: Tag + tags: + - Wall + - type: Sprite + drawdepth: Walls + sprite: _Shitmed/Structures/Walls/abductor_diagonal.rsi + state: state0 + - type: IconSmooth + mode: Diagonal + key: walls + base: state + - type: Icon + sprite: _Shitmed/Structures/Walls/abductor_diagonal.rsi + state: state0 + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: StructuralMetallic + - type: Physics + bodyType: Static + - type: Reflect + reflectProb: 1 + - type: Pullable + - type: Airtight + noAirWhenFullyAirBlocked: false + airBlockedDirection: + - South + - East + - type: Fixtures + fixtures: + fix1: + shape: + !type:PolygonShape + vertices: + - "-0.5,-0.5" + - "0.5,0.5" + - "0.5,-0.5" + mask: + - FullTileMask + layer: + - WallLayer + - type: Construction + graph: Girder + node: diagonalshuttleWall + +- type: entity + parent: BaseWall + id: WallAbductor + name: shuttle wall + suffix: Reinforced, Exterior + components: + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: StructuralMetallicStrong + - type: StaticPrice + price: 250 + - type: RadiationBlocker + resistance: 5 + - type: Sprite + sprite: _Shitmed/Structures/Walls/abductor.rsi + - type: Icon + sprite: _Shitmed/Structures/Walls/abductor.rsi + state: full + - type: Construction + graph: Girder + node: shuttleWall + - type: IconSmooth + key: walls + base: state + - type: Appearance + - type: Reflect + reflectProb: 1 diff --git a/Resources/Prototypes/_Shitmed/GameRules/events.yml b/Resources/Prototypes/_Shitmed/GameRules/events.yml new file mode 100644 index 00000000000..255566be4e4 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/GameRules/events.yml @@ -0,0 +1,69 @@ +- type: entity + parent: BaseGameRule + id: LoneAbductorSpawn + components: + - type: StationEvent + earliestStart: 15 + weight: 7.5 + minimumPlayers: 10 + duration: 1 + - type: RuleGrids + - type: LoadMapRule + mapPath: /Maps/_Shitmed/Shuttles/ShuttleEvent/abductor_shuttle.yml + - type: AntagObjectives + objectives: + - AbductObjective + - type: AntagLoadProfileRule + speciesHardOverride: Abductor + - type: AntagSelection + definitions: + - spawnerPrototype: LoneAbductorSpawner + min: 1 + max: 1 + pickPlayer: false + startingGear: LoneAbductorGear + briefing: + text: abductor-role-greeting + color: Green + sound: /Audio/_Shitmed/Misc/abductor.ogg + components: + - type: Abductor + - type: Muted + - type: AbductorScientist + - type: SurgeryIgnoreClothing + - type: SurgerySpeedModifier + speedModifier: 1.5 + - type: ActionGrant + actions: + - ActionReturnToShip + - type: Tag + tags: + - Abductor + - AbductorScientist + - CanPilot + - FootstepSound + - DoorBumpOpener + - type: NpcFactionMember + factions: + - SimpleHostile + mindRoles: + - MindRoleLoneAbductor + +- type: entity + parent: BaseGameRule + id: AbductorVictim + components: + - type: AbductorVictimRule + - type: AntagSelection + definitions: + - mindRoles: + - MindRoleAbductorVictim + briefing: + text: abductor-victim-role-greeting + color: Red + sound: /Audio/_Shitmed/Misc/abducted.ogg + - type: AntagRandomObjectives + maxDifficulty: 1 + sets: + - maxPicks: 1 + groups: AbductorVictimObjectiveGroups diff --git a/Resources/Prototypes/_Shitmed/Guidebook/antagonist.yml b/Resources/Prototypes/_Shitmed/Guidebook/antagonist.yml new file mode 100644 index 00000000000..3fc93637ea9 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Guidebook/antagonist.yml @@ -0,0 +1,4 @@ +- type: guideEntry + id: Abductors + name: guide-entry-abductors + text: "/ServerInfo/_Shitmed/Guidebook/Antagonist/Abductors.xml" diff --git a/Resources/Prototypes/_Shitmed/Objectives/ObjectiveGroups/abductor-victims.yml b/Resources/Prototypes/_Shitmed/Objectives/ObjectiveGroups/abductor-victims.yml new file mode 100644 index 00000000000..c772c0fb75a --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Objectives/ObjectiveGroups/abductor-victims.yml @@ -0,0 +1,57 @@ +- type: weightedRandom + id: AbductorVictimObjectiveGroups + weights: + AbductorVictimObjectiveGroupHarmless: 0.75 + AbductorVictimObjectiveGroupAnnoy: 0.20 + AbductorVictimObjectiveGroupHarmful: 0.05 + +- type: weightedRandom + id: AbductorVictimObjectiveGroupHarmless + weights: + AbductorVictimPaintObjective: 1 + AbductorVictimPristine: 1 + AbductorVictimCorpseCollector: 1 + AbductorVictimBlingFloor: 1 + AbductorVictimParaplegic: 1 + AbductorVictimHungry: 1 + AbductorVictimBlazeIt: 1 + AbductorVictimVirtualInsanity: 1 + AbductorVictimSocialExperiment: 1 + AbductorVictimGame: 1 + AbductorVictimSaveAnimals: 1 + AbductorVictimMusic: 1 + AbductorVictimNarrator: 1 + AbductorVictimStalker: 1 + AbductorVictimConspiracy: 1 + AbductorVictimSixthsense: 1 + AbductorVictimParty: 1 + AbductorVictimDeadStationTheory: 1 + AbductorVictimWeaknessOfMyFlesh: 1 + AbductorVictimInstructor: 1 + AbductorVictimActor: 1 + +- type: weightedRandom + id: AbductorVictimObjectiveGroupAnnoy + weights: + AbductorVictimNations: 1 + AbductorVictimPowerUnlimited: 1 + AbductorVictimBuild: 1 + AbductorVictimDefect: 1 + AbductorVictimMonkeyTakeover: 1 + AbductorVictimAverageFrontierPirate: 1 + AbductorVictimNoClown: 1 + AbductorVictimReplacePets: 1 + AbductorVictimBald: 1 + +- type: weightedRandom + id: AbductorVictimObjectiveGroupHarmful + weights: + AbductorVictimNoWalls: 1 + AbductorVictimAbductception: 1 + AbductorVictimNoOxygen: 1 + AbductorVictimEscapeStation: 1 + AbductorVictimNoCloning: 1 + AbductorVictimStealWeapons: 1 + AbductorVictimDismantleComputers: 1 + AbductorVictimFinality: 1 + AbductorVictimHeretic: 0.01 diff --git a/Resources/Prototypes/_Shitmed/Objectives/abductors.yml b/Resources/Prototypes/_Shitmed/Objectives/abductors.yml new file mode 100644 index 00000000000..c7439daecb4 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Objectives/abductors.yml @@ -0,0 +1,481 @@ +- type: entity + abstract: true + parent: BaseObjective + id: BaseAbductorObjective + components: + - type: Objective + difficulty: 1.5 + issuer: objective-issuer-abductors + - type: RoleRequirement + roles: + mindRoles: + - Abductor + +- type: entity + parent: BaseAbductorObjective + id: AbductObjective + components: + - type: Objective + icon: + sprite: _Shitmed/Mobs/Species/Misc/Dubious/organs.rsi + state: gland + - type: NumberObjective + min: 6 + max: 9 + title: objective-condition-abduct-title + description: objective-condition-abduct-description + - type: AbductCondition + +- type: entity + parent: BaseObjective + id: BaseAbductorVictimObjective + abstract: true + components: + - type: Objective + difficulty: 1 + issuer: objective-issuer-voices + - type: RoleplayObjective + - type: RoleRequirement + roles: + mindRoles: + - AbductorVictim + +# Harmless Objectives + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimPaintObjective + name: Paint the station. + description: The station is hideous. You must color it all! + components: + - type: Objective + icon: + sprite: Objects/Fun/crayons.rsi + state: rainbow + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimPristine + name: Ensure the station is pristine. + description: The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition. + components: + - type: Objective + icon: + sprite: Clothing/Head/Hats/comcap.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimBlingFloor + name: Replace the floor. + description: Replace all the floor tiles with wood, carpeting, grass or bling. + components: + - type: Objective + icon: + sprite: Objects/Tiles/tile.rsi + state: carpet-blue + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimCorpseCollector + name: Collect dead corpses. + description: Start a collection of corpses. Don't kill people to get these corpses. + components: + - type: Objective + icon: + sprite: Objects/Specific/Medical/Morgue/bodybags.rsi + state: bag + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimParaplegic + name: Paraplegic. + description: Convince the crew that you are paraplegic. + components: + - type: Objective + icon: + sprite: Objects/Specific/Medical/Morgue/bodybags.rsi + state: bag + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimHungry + name: Sate your hunger. + description: You are hungry. Eat as much food as you can find. + components: + - type: Objective + icon: + sprite: Objects/Consumable/Food/meat.rsi + state: plain-cooked + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimBlazeIt + name: Chemically improve your body. + description: Your body must be improved. Ingest as many drugs as you can. + components: + - type: Objective + icon: + sprite: Objects/Specific/Hydroponics/cannabis.rsi + state: produce + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimSocialExperiment + name: It's all a lie. + description: This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth. + components: + - type: Objective + icon: + sprite: Structures/Wallmounts/camera.rsi + state: cameracase + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimVirtualInsanity + name: NOTHING IS REAL. + description: It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR. + components: + - type: Objective + icon: + sprite: Structures/Machines/computers.rsi + state: avionics-systems + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimGame + name: Chat is this real? + description: Convince the crew that we are in a game, without explicitly telling them we are in a game. + components: + - type: Objective + icon: + sprite: Structures/Machines/arcade.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimSaveAnimals + name: Save the animals. + description: Nanotrasen is abusing the animals! Save as many as you can! + components: + - type: Objective + icon: + sprite: Mobs/Animals/monkey.rsi + state: full + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimMusic + name: Share your music. + description: You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument! + components: + - type: Objective + icon: + sprite: Objects/Fun/Instruments/guitar.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimStalker + name: Stalk the crew. + description: Someone hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it. + components: + - type: Objective + icon: + sprite: Objects/Misc/bureaucracy.rsi + state: folder-colormap + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimConspiracy + name: The conspiracy. + description: The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people! + components: + - type: Objective + icon: + sprite: Structures/Wallmounts/camera.rsi + state: cameracase + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNarrator + name: Narrate the story. + description: You're the narrator of this tale. Follow around the protagonists to tell their story. + components: + - type: Objective + icon: + sprite: Objects/Misc/books.rsi + state: book_icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimSixthsense + name: Are you really alive? + description: You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo. + components: + - type: Objective + icon: + sprite: Structures/Storage/Crates/coffin.rsi + state: base + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimParty + name: PARTY! + description: You NEED to throw a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE! + components: + - type: Objective + icon: + sprite: Objects/Consumable/Drinks/beer.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimDeadStationTheory + name: Only one other person exists. + description: There is only one other person in existence, they are just really good at pretending to be multiple people. + components: + - type: Objective + icon: + sprite: Mobs/Species/Human/parts.rsi + state: full + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimWeaknessOfMyFlesh + name: The flesh is rotting. + description: Your flesh is rotting from your body. Fight the inevitable, and replace your tainted limbs with entirely new ones. + components: + - type: Objective + icon: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi + state: scalpel + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimInstructor + name: Military instructor. + description: You are a military instructor. You must make sure the crew is in top shape for the war against the syndicate! + components: + - type: Objective + icon: + sprite: _Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi + state: scalpel + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimActor + name: Action movie. + description: You are in an action movie. You must say as many cheesy one-liners as possible. + components: + - type: Objective + icon: + sprite: Clothing/Eyes/Glasses/sunglasses.rsi + state: icon + +# Annoying Objectives + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNations + name: Make your department prosper. + description: Ensure your department prospers over all else. + components: + - type: Objective + icon: + sprite: Clothing/Neck/Medals/gold.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimPowerUnlimited + name: Unlimited power. + description: Flood the station's powernet with as much electricity as you can. + components: + - type: Objective + icon: + sprite: Objects/Power/power_cells.rsi + state: antique + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimBuild + name: Expand the station. + description: The station is too tiny, and you're going to fix that. + components: + - type: Objective + icon: + sprite: Objects/Tools/rcd.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimDefect + name: Defect from the station. + description: Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can. + components: + - type: Objective + icon: + sprite: Structures/Shuttles/gyroscope.rsi + state: base + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimMonkeyTakeover + name: Raise an army of monkeys. + description: OOK OOK AAH!!! + components: + - type: Objective + icon: + sprite: Mobs/Animals/monkey.rsi + state: full + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimAverageFrontierPirate + name: Steal shoes. + description: Steal as many shoes as you can. + components: + - type: Objective + icon: + sprite: Clothing/Shoes/color.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNoClown + name: The clown is not funny. + description: The clown is not funny. You can do better! Take over their role and make the crew laugh! + components: + - type: Objective + icon: + sprite: Clothing/Mask/clown.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimReplacePets + name: Replace the pets. + description: All the pets around here suck. You need to make them cooler. Replace them with exotic beasts! + components: + - type: Objective + icon: + sprite: Mobs/Animals/snake.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimBald + name: Save people from the hair invasion. + description: There are alien parasites masquerading as people's hair. Save people from this invasion. + components: + - type: Objective + icon: + sprite: Objects/Tools/scissors.rsi + state: icon + +# Harmful Objectives + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNoWalls + name: Break down the walls. + description: The crew must get to know one another better. Break down the walls inside the station! + components: + - type: Objective + icon: + sprite: Structures/Walls/solid.rsi + state: rgeneric + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimAbductception + name: Take revenge. + description: You have been changed forever. Find the aliens that did this to you and give them a taste of their own medicine. + components: + - type: Objective + icon: + sprite: Objects/Weapons/Melee/baseball_bat.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNoOxygen + name: OXYGEN IS KILLING EVERYONE. + description: The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station. + components: + - type: NotJobRequirement + job: AtmosphericTechnician # It would be too free for atmos techs :) CE is fair game though. + - type: Objective + icon: + sprite: Objects/Tanks/oxygen.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimEscapeStation + name: Escape the station. + description: You must escape the station! Get the shuttle called! + components: + - type: Objective + icon: + sprite: Structures/Furniture/chairs.rsi + state: shuttle + - type: EscapeShuttleCondition + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimNoCloning + name: No cloning. + description: Don't allow anyone to be cloned. + components: + - type: Objective + icon: + sprite: Structures/Machines/cloning.rsi + state: pod_g + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimStealWeapons + name: Steal weapons. + description: Steal as many weapons as you can fit on your person. + components: + - type: Objective + icon: + sprite: Objects/Weapons/Melee/baseball_bat.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimDismantleComputers + name: Steal computers. + description: The 7G waves coming off from the computers are killing the crew and they dont know it! Dismantle them! + components: + - type: Objective + icon: + sprite: Structures/Machines/computers.rsi + state: avionics-systems + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimFinality + name: No revival. + description: Death should be final and modern medicine disrupts the natural order. Don't allow anyone to be revived. + components: + - type: Objective + icon: + sprite: Objects/Specific/Medical/defib.rsi + state: icon + +- type: entity + parent: BaseAbductorVictimObjective + id: AbductorVictimHeretic + name: THE GATES HAVE OPENED MY MIND IS OPEN MY MIND IS OPEN MY MIND IS OPEN + description: You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL. + components: + - type: ForceHereticObjective + - type: Objective + icon: + sprite: _Goobstation/Heretic/mansus_grasp.rsi + state: icon + diff --git a/Resources/Prototypes/_Shitmed/Roles/Antags/MindRoles/mind_roles.yml b/Resources/Prototypes/_Shitmed/Roles/Antags/MindRoles/mind_roles.yml new file mode 100644 index 00000000000..57dca436a81 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Roles/Antags/MindRoles/mind_roles.yml @@ -0,0 +1,18 @@ +- type: entity + parent: BaseMindRoleAntag + id: MindRoleLoneAbductor + name: Lone Abductor Role + components: + - type: MindRole + exclusiveAntag: true + antagPrototype: LoneAbductorAntag + - type: Abductor + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleAbductorVictim + name: Abductee Role + components: + - type: MindRole + antagPrototype: AbductorVictimAntag + - type: AbductorVictim diff --git a/Resources/Prototypes/_Shitmed/Roles/Antags/abductor.yml b/Resources/Prototypes/_Shitmed/Roles/Antags/abductor.yml new file mode 100644 index 00000000000..9bd1c839f31 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Roles/Antags/abductor.yml @@ -0,0 +1,11 @@ +- type: antag + id: LoneAbductorAntag + name: abductors-ghost-role-name + antagonist: true + objective: roles-antag-abductor-objective + +- type: antag + id: AbductorVictimAntag + name: abductor-victim-role-name + antagonist: true + objective: roles-antag-abductor-victim \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/Species/abductor.yml b/Resources/Prototypes/_Shitmed/Species/abductor.yml new file mode 100644 index 00000000000..59f531c3f66 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Species/abductor.yml @@ -0,0 +1,117 @@ +- type: species + id: Abductor + name: species-name-abductor + roundStart: false + prototype: MobAbductor + sprites: MobAbductorSprites + markingLimits: MobHumanMarkingLimits + dollPrototype: MobAbductorDummy + skinColoration: HumanToned + defaultSkinTone: "#BFC2C7" + +- type: speciesBaseSprites + id: MobAbductorSprites + sprites: + Head: MobAbductorHead + HeadTop: MobHumanoidAnyMarking + HeadSide: MobHumanoidAnyMarking + Chest: MobAbductorTorso + Eyes: MobAbductorEyes + LArm: MobAbductorLArm + RArm: MobAbductorRArm + LHand: MobAbductorLHand + RHand: MobAbductorRHand + LLeg: MobAbductorLLeg + RLeg: MobAbductorRLeg + LFoot: MobAbductorLFoot + RFoot: MobAbductorRFoot + +- type: humanoidBaseSprite + id: MobAbductorEyes + baseSprite: + sprite: Mobs/Customization/eyes.rsi + state: no_eyes + +- type: humanoidBaseSprite + id: MobAbductorHeadFemale + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobAbductorHeadMale + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobAbductorHead + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: head + +- type: humanoidBaseSprite + id: MobAbductorTorsoMale + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobAbductorTorsoFemale + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobAbductorTorso + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: torso + +- type: humanoidBaseSprite + id: MobAbductorLLeg + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobAbductorLHand + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobAbductorLArm + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobAbductorLFoot + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobAbductorRLeg + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobAbductorRHand + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobAbductorRArm + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobAbductorRFoot + baseSprite: + sprite: _Shitmed/Mobs/Species/Abductor/parts.rsi + state: r_foot diff --git a/Resources/Prototypes/_Shitmed/Tiles/abductor.yml b/Resources/Prototypes/_Shitmed/Tiles/abductor.yml new file mode 100644 index 00000000000..852cd771ea7 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/Tiles/abductor.yml @@ -0,0 +1,10 @@ +- type: tile + id: FloorAbductor + name: tiles-abductor-floor + sprite: /Textures/_Shitmed/Tiles/abductor_tile.png + isSubfloor: true + footstepSounds: + collection: FootstepAsteroid + heatCapacity: 10000 + weather: true + indestructible: true diff --git a/Resources/Prototypes/_Shitmed/status_effects.yml b/Resources/Prototypes/_Shitmed/status_effects.yml index 7ffdb3e907c..4cea663e8c8 100644 --- a/Resources/Prototypes/_Shitmed/status_effects.yml +++ b/Resources/Prototypes/_Shitmed/status_effects.yml @@ -1,3 +1,43 @@ - type: statusEffect id: BreathingImmunity - alwaysAllowed: true # Used by space animal lungs to work on anything \ No newline at end of file + alwaysAllowed: true # Used by space animal lungs to work on anything + +- type: statusEffect + id: SpawnSpiderEggs + alwaysAllowed: true + +- type: statusEffect + id: SpawnSlimes + alwaysAllowed: true + +- type: statusEffect + id: SpawnEmp + alwaysAllowed: true + +- type: statusEffect + id: SpawnSmoke + alwaysAllowed: true + +- type: statusEffect + id: SpawnGravityWell + alwaysAllowed: true + +- type: statusEffect + id: SpawnFlash + alwaysAllowed: true + +- type: statusEffect + id: ExpelGas + alwaysAllowed: true + +- type: statusEffect + id: ScrambleDnaEffect + alwaysAllowed: true + +- type: statusEffect + id: ScrambleLocationEffect + alwaysAllowed: true + +- type: statusEffect + id: ActivateArtifactEffect + alwaysAllowed: true \ No newline at end of file diff --git a/Resources/Prototypes/_Shitmed/tags.yml b/Resources/Prototypes/_Shitmed/tags.yml new file mode 100644 index 00000000000..d1619d7de82 --- /dev/null +++ b/Resources/Prototypes/_Shitmed/tags.yml @@ -0,0 +1,9 @@ +- type: Tag + id: Abductor + +- type: Tag + id: AbductorScientist + +- type: Tag + id: CantInteract + diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index 9713fea939e..b203788443e 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -4,17 +4,18 @@ weights: Traitor: 0.47 Changeling: 0.14 - Traitorling: 0.05 # 2 antags but less of each type applies for all hybrid modes, they all need 30 pop. Also makes lower pops roll more traitor games. + Traitorling: 0.04 # 2 antags but less of each type applies for all hybrid modes, they all need 30 pop. Also makes lower pops roll more traitor games. Nukeops: 0.09 Honkops: 0.01 NukeTraitor: 0.01 NukeLing: 0.01 Revolutionary: 0.05 # Maybe 0.04 after wiz/cult? RevTraitor: 0.02 - RevLing: 0.04 + RevLing: 0.01 Zombie: 0.04 # Maybe 0.03 after wiz/cult? Survival: 0.03 # Maybe 0.03 after wiz/cult? Blob: 0.04 + Abductor: 0.04 # KesslerSyndrome: 0.01 # Goobstation - remove kessler # Wizard: 0.05 # Cult: 0.05 diff --git a/Resources/ServerInfo/_Shitmed/Guidebook/Antagonist/Abductors.xml b/Resources/ServerInfo/_Shitmed/Guidebook/Antagonist/Abductors.xml new file mode 100644 index 00000000000..0206cc6a4f6 --- /dev/null +++ b/Resources/ServerInfo/_Shitmed/Guidebook/Antagonist/Abductors.xml @@ -0,0 +1,43 @@ + + # Abductors + + + + + Abductors are an alien society set on cataloging and experimenting on the sectors personnel. + Its important to note: Abductors, unlike most antagonists are [color=red]NOT set on killing people[/color] and are rather purely interested in completing their experiments. + + Abductors do not possess the ability to speak and therefore communicate through more... mime-like methods. + + ##Abduction + Abductors begin on their ship somewhere near the station. Using the [color=#a149bf]"Human Observation Console"[/color] you can seek out victims who are alone and [color=lightblue]warp[/color] near them to begin abduction. + + The wonderprod is the primary tool of an Abductor. It has four modes you will use for abduction: + - [color=yellow]{Stun}[/color] Stuns the victim for roughly 5 seconds. + - [color=pink]{Restrain}[/color] binds the victims hands in weak cables. + - [color=blue]{Sleep}[/color] Induces a sleep-like state in the victim. + - [color=red]{Harm}[/color] Burns the target, dealing damage. [bold]ONLY USE IF YOU MUST.[/bold] + + Once a target is immobilized you can use the [italic]gizmo[/italic] to implant them with a nano tracker, return to your ship using the [color=lightblue]return action[/color], then use the gizmo on your [color=#a149bf]Abductor Console[/color]. + + ##Experimentation + Once you have linked the most recent nano tracker to the console, select [bold]{ATTRACT}[/bold] to warp your victim to your ship. + + Now that you have your victim aboard, its recommended you: + - Buckle them to your surgical table. + - Change out their cuffs for a higher grade of handcuffs provided on the ship. + - Remove any of their belongings that could damage you or the secrecy of the experiment. + - Use your vast surgical knowledge to replace their heart with a gland. You don't need to remove their clothes to do surgery, unlike normal surgeons. + - Optionally: Give them back their primitive technology. + + Finally, drag the victim whom you have completed your experiment on into the [color=#a149bf]Experimentator[/color] to confirm the results of the experiment on the [color=#a149bf]Abductor Console[/color] and send them back where you found them. + + ## Abductor Tools + + Abductors have access to more advanced tools than normal surgeons or engineers. Their surgical tools are faster than advanced surgical tools, and from their normal tools, the multitool's alternative mode is able to be used to hijack doors. + + ##Getting rid of an Abductor + Like [textlink="Changelings" link="Changelings"], Abductors are not protected by [textlink="space law" link="SpaceLaw"] and are able to be executed freely. + + Also, an abductor's ship is a physical object in the world, anyone with access to a space-faring ship such as [textlink="salvage" link="Salvage"] can bump into them in space and dismantle their ship. + diff --git a/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/equipped-BACKPACK.png b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/equipped-BACKPACK.png new file mode 100644 index 00000000000..f581c4466f1 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/icon.png b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/icon.png new file mode 100644 index 00000000000..d0624cb256c Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-left.png new file mode 100644 index 00000000000..ceeab5463d5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-right.png new file mode 100644 index 00000000000..1d9a614b165 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/meta.json new file mode 100644 index 00000000000..fce8c90ce86 --- /dev/null +++ b/Resources/Textures/_Shitmed/Clothing/Back/Duffels/abductor.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/547852588166c8e091b441e4e67169e156bb09c1", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/equipped-BELT.png b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/equipped-BELT.png new file mode 100644 index 00000000000..11943a5f1ec Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/icon.png b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/icon.png new file mode 100644 index 00000000000..6ff630277a9 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-left.png new file mode 100644 index 00000000000..680ef7b80d6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-right.png new file mode 100644 index 00000000000..93d18816407 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/meta.json new file mode 100644 index 00000000000..4b328a42419 --- /dev/null +++ b/Resources/Textures/_Shitmed/Clothing/Belt/abductor.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Paradise Station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/alt-equipped-EARS.png b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/alt-equipped-EARS.png new file mode 100644 index 00000000000..a910737357f Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/alt-equipped-EARS.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/icon_alt.png b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/icon_alt.png new file mode 100644 index 00000000000..cfef3f9aa73 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/icon_alt.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/meta.json new file mode 100644 index 00000000000..a36cd58203e --- /dev/null +++ b/Resources/Textures/_Shitmed/Clothing/Ears/Headsets/abductor.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/f8f4aeda930fcd0805ca4cc76d9bc9412a5b3428", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon_alt" + }, + { + "name": "alt-equipped-EARS", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/equipped-HELMET.png b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..86c8a825611 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/icon.png b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/icon.png new file mode 100644 index 00000000000..d9231368fa8 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-left.png new file mode 100644 index 00000000000..7f65cf04ce4 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-right.png new file mode 100644 index 00000000000..09ad234b0d7 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/meta.json new file mode 100644 index 00000000000..c854d626bb0 --- /dev/null +++ b/Resources/Textures/_Shitmed/Clothing/Head/Helmets/abductor.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..0574cccf7f0 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/icon.png b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/icon.png new file mode 100644 index 00000000000..0f7c2076e3e Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-left.png new file mode 100644 index 00000000000..92524a42e76 Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-right.png new file mode 100644 index 00000000000..49919599a1f Binary files /dev/null and b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/meta.json new file mode 100644 index 00000000000..dc799daf87e --- /dev/null +++ b/Resources/Textures/_Shitmed/Clothing/Uniforms/Jumpsuit/abductor.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Effects/teleportation.rsi/meta.json b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/meta.json new file mode 100644 index 00000000000..81b13694c6e --- /dev/null +++ b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "BDragon1727; from https://bdragon1727.itch.io/free-smoke-fx-pixel-2", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "teleportation", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "teleportation-entity", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation-entity.png b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation-entity.png new file mode 100644 index 00000000000..4556c21f63b Binary files /dev/null and b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation-entity.png differ diff --git a/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation.png b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation.png new file mode 100644 index 00000000000..d22f4dd84ba Binary files /dev/null and b/Resources/Textures/_Shitmed/Effects/teleportation.rsi/teleportation.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/empty.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/empty.png new file mode 100644 index 00000000000..e48d9d4a403 Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/empty.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/exit.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/exit.png new file mode 100644 index 00000000000..9e5dbd58567 Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/exit.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/implant.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/implant.png new file mode 100644 index 00000000000..8d94cd1740c Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/implant.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/meta.json new file mode 100644 index 00000000000..45b91eef359 --- /dev/null +++ b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation, redrawn by darkrell", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "empty" + }, + { + "name": "exit" + }, + { + "name": "send" + }, + { + "name": "take" + }, + { + "name": "implant" + }, + { + "name": "send-yourself" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send-yourself.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send-yourself.png new file mode 100644 index 00000000000..254b17a2f2f Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send-yourself.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send.png new file mode 100644 index 00000000000..bdf278665e2 Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/send.png differ diff --git a/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/take.png b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/take.png new file mode 100644 index 00000000000..dfd123e030a Binary files /dev/null and b/Resources/Textures/_Shitmed/Interface/Actions/actions_abductor.rsi/take.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-left.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-left.png new file mode 100644 index 00000000000..1afdd259fa2 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-right.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-right.png new file mode 100644 index 00000000000..166e898468c Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain.png new file mode 100644 index 00000000000..3fd5c73551f Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/brain.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/ears.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/ears.png new file mode 100644 index 00000000000..090a6bb132e Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/ears.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/eyeballs.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/eyeballs.png new file mode 100644 index 00000000000..0938381ab20 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/eyeballs.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-off.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-off.png new file mode 100644 index 00000000000..d3255454541 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-off.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-on.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-on.png new file mode 100644 index 00000000000..218bffa9374 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/heart-on.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-l.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-l.png new file mode 100644 index 00000000000..8b3ca6a8150 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-l.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-r.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-r.png new file mode 100644 index 00000000000..eb7d0c2ec89 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/kidney-r.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/liver.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/liver.png new file mode 100644 index 00000000000..c733759604b Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/liver.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-l.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-l.png new file mode 100644 index 00000000000..01583e96d83 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-l.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-r.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-r.png new file mode 100644 index 00000000000..45c1dd001b6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/lung-r.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/meta.json new file mode 100644 index 00000000000..aa9781c5d33 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/meta.json @@ -0,0 +1,69 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Darkrell - 🌟Starlight🌟", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "brain" + }, + { + "name": "brain-inhand-left", + "directions": 4 + }, + { + "name": "brain-inhand-right", + "directions": 4 + }, + { + "name": "ears" + }, + { + "name": "eyeballs" + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "kidney-l" + }, + { + "name": "kidney-r" + }, + { + "name": "liver" + }, + { + "name": "lung-l" + }, + { + "name": "lung-r" + }, + { + "name": "stomach" + }, + { + "name": "muscle" + }, + { + "name": "nerve" + }, + { + "name": "vessel" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/muscle.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/muscle.png new file mode 100644 index 00000000000..8482dc7fe3b Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/muscle.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/nerve.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/nerve.png new file mode 100644 index 00000000000..c723e8db51d Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/nerve.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/stomach.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/stomach.png new file mode 100644 index 00000000000..b2ef803febb Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/stomach.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/vessel.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/vessel.png new file mode 100644 index 00000000000..93ed2263e71 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/organs.rsi/vessel.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/full.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/full.png new file mode 100644 index 00000000000..f600e1c301d Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/full.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/head.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/head.png new file mode 100644 index 00000000000..dd234ddc192 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/head.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_arm.png new file mode 100644 index 00000000000..a90b02ff719 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_arm.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_foot.png new file mode 100644 index 00000000000..482b172b291 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_foot.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_hand.png new file mode 100644 index 00000000000..4e029eb15e1 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_hand.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_leg.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_leg.png new file mode 100644 index 00000000000..53c91e5d124 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/l_leg.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/meta.json new file mode 100644 index 00000000000..37b45bc6c74 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/meta.json @@ -0,0 +1,54 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From Paradise Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "full" + }, + { + "name": "head", + "directions": 4 + }, + { + "name": "l_arm", + "directions": 4 + }, + { + "name": "l_foot", + "directions": 4 + }, + { + "name": "l_hand", + "directions": 4 + }, + { + "name": "l_leg", + "directions": 4 + }, + { + "name": "r_arm", + "directions": 4 + }, + { + "name": "r_foot", + "directions": 4 + }, + { + "name": "r_hand", + "directions": 4 + }, + { + "name": "r_leg", + "directions": 4 + }, + { + "name": "torso", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_arm.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_arm.png new file mode 100644 index 00000000000..58e9c3115e5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_arm.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_foot.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_foot.png new file mode 100644 index 00000000000..3499e91fe40 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_foot.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_hand.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_hand.png new file mode 100644 index 00000000000..193f7e1a33a Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_hand.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_leg.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_leg.png new file mode 100644 index 00000000000..3d6926e290a Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/r_leg.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/torso.png b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/torso.png new file mode 100644 index 00000000000..61954018b28 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Abductor/parts.rsi/torso.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/egg.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/egg.png new file mode 100644 index 00000000000..280f418b63b Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/egg.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/emp.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/emp.png new file mode 100644 index 00000000000..c157a533a23 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/emp.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/gland.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/gland.png new file mode 100644 index 00000000000..091b27a5800 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/gland.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/health.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/health.png new file mode 100644 index 00000000000..091b27a5800 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/health.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/meta.json b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/meta.json new file mode 100644 index 00000000000..3013d7e3189 --- /dev/null +++ b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise Station at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "egg" + }, + { + "name": "emp" + }, + { + "name": "gland" + }, + { + "name": "health" + }, + { + "name": "mindshock" + }, + { + "name": "slime" + }, + { + "name": "spider" + }, + { + "name": "vent" + }, + { + "name": "viral" + }, + { + "name": "species" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/mindshock.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/mindshock.png new file mode 100644 index 00000000000..e04bb29967b Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/mindshock.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/slime.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/slime.png new file mode 100644 index 00000000000..a766f7a452d Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/slime.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/species.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/species.png new file mode 100644 index 00000000000..5803b3840e7 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/species.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/spider.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/spider.png new file mode 100644 index 00000000000..4feb39496d5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/spider.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/vent.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/vent.png new file mode 100644 index 00000000000..cccaf14e0cf Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/vent.png differ diff --git a/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/viral.png b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/viral.png new file mode 100644 index 00000000000..1266110afc5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Mobs/Species/Misc/Dubious/organs.rsi/viral.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/icon.png b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/icon.png new file mode 100644 index 00000000000..e085dfa617b Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-left.png new file mode 100644 index 00000000000..03cb7baaf79 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-right.png new file mode 100644 index 00000000000..677f3fba372 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/meta.json new file mode 100644 index 00000000000..2a1676a5bc2 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Misc/gizmo.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "copyright": "Taked From tg station, animated by darkrell", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "directions": 1, + "delays": [ + [ + 1.3, + 0.1, + 0.2, + 0.1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-2.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-2.png new file mode 100644 index 00000000000..340478f3db1 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-2.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-4.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-4.png new file mode 100644 index 00000000000..d540a663b83 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/body-overlay-4.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/equipped-BELT.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/equipped-BELT.png new file mode 100644 index 00000000000..773e6c31e19 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/handcuff.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/handcuff.png new file mode 100644 index 00000000000..0c903fb1add Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/handcuff.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-left.png new file mode 100644 index 00000000000..87e32514032 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-right.png new file mode 100644 index 00000000000..5398f722edd Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/meta.json new file mode 100644 index 00000000000..d74cd96093e --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Misc/handcuffs.rsi/meta.json @@ -0,0 +1,61 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "darkrell", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "handcuff", + "directions": 1, + "delays": [ + [ + 0.4, + 0.4, + 0.4, + 0.4 + ] + ] + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "body-overlay-2", + "directions": 4, + "delays": [ + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ] + ] + }, + { + "name": "body-overlay-4", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/abductor.png new file mode 100644 index 00000000000..fd1dc741c40 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/meta.json new file mode 100644 index 00000000000..827f937ffc6 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/crowbar.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "abductor", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/abductor.png new file mode 100644 index 00000000000..17b4068ac85 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/meta.json new file mode 100644 index 00000000000..dc1069cabec --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "abductor" + }, + { + "name": "override-abductor" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/override-abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/override-abductor.png new file mode 100644 index 00000000000..ab0b32d1522 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/multitool.rsi/override-abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/abductor.png new file mode 100644 index 00000000000..194e737d73a Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/meta.json new file mode 100644 index 00000000000..70709ceecfa --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/screwdriver.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "abductor", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/icon.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/icon.png new file mode 100644 index 00000000000..f52d7758625 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-left-flame.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-left-flame.png new file mode 100644 index 00000000000..2975c479be7 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-left-flame.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-right-flame.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-right-flame.png new file mode 100644 index 00000000000..2975c479be7 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/inhand-right-flame.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/meta.json new file mode 100644 index 00000000000..1e04e76c506 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "welder_flame", + "delays": [ + [ + 0.2, + 0.1 + ] + ] + }, + { + "name": "inhand-left-flame", + "directions": 4 + }, + { + "name": "inhand-right-flame", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/welder_flame.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/welder_flame.png new file mode 100644 index 00000000000..de3b96a5df3 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/welder.rsi/welder_flame.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/abductor.png new file mode 100644 index 00000000000..40f2e50b173 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/meta.json new file mode 100644 index 00000000000..70b8e98ccac --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wirecutters.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "abductor" + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-equipped-BELT.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-equipped-BELT.png new file mode 100644 index 00000000000..1098786fe96 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-equipped-BELT.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-left.png new file mode 100644 index 00000000000..de88d4cb2ae Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-right.png new file mode 100644 index 00000000000..a9c34665f69 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor.png new file mode 100644 index 00000000000..ffcfa99b3b5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/meta.json new file mode 100644 index 00000000000..74db73ac8fc --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Specific/Abductor/wrench.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/199fffd989d6f7fd6ea9c5188c875137df4f34b8", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "abductor", + "delays": [ + [ + 0.2, + 0.2 + ] + ] + }, + { + "name": "abductor-inhand-left", + "directions": 4 + }, + { + "name": "abductor-inhand-right", + "directions": 4 + }, + { + "name": "abductor-equipped-BELT", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png deleted file mode 100644 index 3c2e8972821..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png deleted file mode 100644 index f91961a9df3..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json index 592796b3e08..ef5ff42d00c 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/meta.json @@ -14,19 +14,19 @@ "name": "adv-retractor-on" }, { - "name": "inhand-left", + "name": "off-inhand-left", "directions": 4 }, { - "name": "inhand-left-on", + "name": "on-inhand-left", "directions": 4 }, { - "name": "inhand-right", + "name": "off-inhand-right", "directions": 4 }, { - "name": "inhand-right-on", + "name": "on-inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/off-inhand-left.png similarity index 100% rename from Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-left.png rename to Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/off-inhand-left.png diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/off-inhand-right.png similarity index 100% rename from Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/inhand-right.png rename to Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/off-inhand-right.png diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-left.png new file mode 100644 index 00000000000..4b706b9a7b7 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-right.png new file mode 100644 index 00000000000..15edb16a789 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/adv-retractor.rsi/on-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/abductor.png new file mode 100644 index 00000000000..8409c74669e Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json index 48775ff522a..8518d33c574 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bone-gel.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprite taken from Paradise Station at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "bone-gel" }, + { + "name": "abductor" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-left.png new file mode 100644 index 00000000000..df08791434a Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-right.png new file mode 100644 index 00000000000..5f3265a1bcd Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor.png new file mode 100644 index 00000000000..64a1b5cb912 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json index bffe3ee7306..a8f8cf01edf 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/bonesetter.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,17 @@ { "name": "bonesetter" }, + { + "name": "abductor" + }, + { + "name": "abductor-inhand-left", + "directions": 4 + }, + { + "name": "abductor-inhand-right", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-left.png new file mode 100644 index 00000000000..cd9a4a32c38 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-right.png new file mode 100644 index 00000000000..16465a51fe9 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor.png new file mode 100644 index 00000000000..b46375b3750 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/meta.json index 4b08c30b53e..82f481838ed 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/cautery.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,29 @@ { "name": "cautery" }, + { + "name": "abductor", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "abductor-inhand-left", + "directions": 4 + }, + { + "name": "abductor-inhand-right", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/abductor.png new file mode 100644 index 00000000000..306f2e9bc61 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/meta.json index 42163ea24d7..3b5a4099bf4 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/circular-saw.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "circular-saw" }, + { + "name": "abductor" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-left.png new file mode 100644 index 00000000000..1d6acaade9d Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-right.png new file mode 100644 index 00000000000..5d1dab26dc5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor.png new file mode 100644 index 00000000000..04ef4fe562a Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/meta.json index a9c84b52f01..c61ef0d2b3b 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/drill.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,24 @@ { "name": "drill" }, + { + "name": "abductor", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "abductor-inhand-left", + "directions": 4 + }, + { + "name": "abductor-inhand-right", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-left-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-left-on.png deleted file mode 100644 index 46e8c431e91..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-left-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png deleted file mode 100644 index 1bbb5332060..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/inhand-right-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json index 4a4c2c11d67..849c63e8fa9 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/meta.json @@ -18,7 +18,7 @@ "directions": 4 }, { - "name": "inhand-left-on", + "name": "on-inhand-left", "directions": 4 }, { @@ -26,7 +26,7 @@ "directions": 4 }, { - "name": "inhand-right-on", + "name": "on-inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-left.png new file mode 100644 index 00000000000..93324740250 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-right.png new file mode 100644 index 00000000000..398a9b81b78 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-cautery.rsi/on-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left-on.png deleted file mode 100644 index 72cbd3608f6..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png deleted file mode 100644 index 358f397c5e5..00000000000 Binary files a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right-on.png and /dev/null differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json index 701445e8ab8..3bc01a1fd63 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Modified on state taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -20,19 +20,19 @@ ] }, { - "name": "inhand-left", + "name": "off-inhand-left", "directions": 4 }, { - "name": "inhand-left-on", + "name": "on-inhand-left", "directions": 4 }, { - "name": "inhand-right", + "name": "off-inhand-right", "directions": 4 }, { - "name": "inhand-right-on", + "name": "on-inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/off-inhand-left.png similarity index 100% rename from Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-left.png rename to Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/off-inhand-left.png diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/off-inhand-right.png similarity index 100% rename from Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/inhand-right.png rename to Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/off-inhand-right.png diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-left.png new file mode 100644 index 00000000000..df0208dfb74 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-right.png new file mode 100644 index 00000000000..432693ff19d Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/e-scalpel.rsi/on-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/abductor.png new file mode 100644 index 00000000000..ae396931a44 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json index afbaa9cd516..ec1d8d35d2c 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/hemostat.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "hemostat" }, + { + "name": "abductor" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/abductor.png new file mode 100644 index 00000000000..c844178868b Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json index a38e04dcfd2..4d7fe1fad24 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/retractor.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "retractor" }, + { + "name": "abductor" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-left.png new file mode 100644 index 00000000000..4bfa3b7e2a6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-right.png new file mode 100644 index 00000000000..6950a919e4f Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor.png b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor.png new file mode 100644 index 00000000000..000cb518d40 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/abductor.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json index 7cbc1208942..16abf33cd29 100644 --- a/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json +++ b/Resources/Textures/_Shitmed/Objects/Specific/Medical/Surgery/scalpel.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5", + "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/67d7577947b5079408dce1b7646fdd6c3df13bb5. Abductor sprites taken from Paradise at https://github.com/ParadiseSS13/Paradise/commit/b55bef2ed28b8bde30883fb14311b221ab0dc977", "size": { "x": 32, "y": 32 @@ -10,6 +10,28 @@ { "name": "scalpel" }, + { + "name": "abductor", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "abductor-inhand-left", + "directions": 4 + }, + { + "name": "abductor-inhand-right", + "directions": 4 + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-BACKPACK.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-BACKPACK.png new file mode 100644 index 00000000000..ea688dff751 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-SUITSTORAGE.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..ea688dff751 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-icon.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-icon.png new file mode 100644 index 00000000000..2d71f6bd07c Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-left.png new file mode 100644 index 00000000000..823d7cc1824 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-right.png new file mode 100644 index 00000000000..42aecdec0e6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/cuffs-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-BACKPACK.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-BACKPACK.png new file mode 100644 index 00000000000..3e69640577d Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-SUITSTORAGE.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..3e69640577d Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-icon.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-icon.png new file mode 100644 index 00000000000..d83aecbdd9e Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-left.png new file mode 100644 index 00000000000..f652ce377a3 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-right.png new file mode 100644 index 00000000000..1cb5cc73ba0 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/damage-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/icon.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/icon.png new file mode 100644 index 00000000000..95c353ebea2 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/meta.json b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/meta.json new file mode 100644 index 00000000000..8890d2a4723 --- /dev/null +++ b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/meta.json @@ -0,0 +1,139 @@ +{ + "version": 1, + "copyright": "Taked From Paradise Station, animated by darkrell", + "license": "CC-BY-SA-3.0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "sleep-icon", + "delays": [ + [ + 1, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15 + ] + ] + }, + { + "name": "stun-icon", + "delays": [ + [ + 1, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 1 + ] + ] + }, + { + "name": "damage-icon", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "cuffs-icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sleep-inhand-left", + "directions": 4 + }, + { + "name": "sleep-inhand-right", + "directions": 4 + }, + { + "name": "sleep-equipped-SUITSTORAGE", + "directions": 4 + }, + { + "name": "sleep-equipped-BACKPACK", + "directions": 4 + }, + { + "name": "stun-inhand-left", + "directions": 4 + }, + { + "name": "stun-inhand-right", + "directions": 4 + }, + { + "name": "stun-equipped-SUITSTORAGE", + "directions": 4 + }, + { + "name": "stun-equipped-BACKPACK", + "directions": 4 + }, + { + "name": "damage-inhand-left", + "directions": 4 + }, + { + "name": "damage-inhand-right", + "directions": 4 + }, + { + "name": "damage-equipped-SUITSTORAGE", + "directions": 4 + }, + { + "name": "damage-equipped-BACKPACK", + "directions": 4 + }, + { + "name": "cuffs-inhand-left", + "directions": 4 + }, + { + "name": "cuffs-inhand-right", + "directions": 4 + }, + { + "name": "cuffs-equipped-SUITSTORAGE", + "directions": 4 + }, + { + "name": "cuffs-equipped-BACKPACK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-BACKPACK.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-BACKPACK.png new file mode 100644 index 00000000000..04e11837df3 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-SUITSTORAGE.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..04e11837df3 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-icon.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-icon.png new file mode 100644 index 00000000000..f77989069fb Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-left.png new file mode 100644 index 00000000000..0948e80b1d6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-right.png new file mode 100644 index 00000000000..9a2937e2a72 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/sleep-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-BACKPACK.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-BACKPACK.png new file mode 100644 index 00000000000..77780768165 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-BACKPACK.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-SUITSTORAGE.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..77780768165 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-icon.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-icon.png new file mode 100644 index 00000000000..ce5cecd1668 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-icon.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-left.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-left.png new file mode 100644 index 00000000000..e81100cdca9 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-left.png differ diff --git a/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-right.png b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-right.png new file mode 100644 index 00000000000..6464e445736 Binary files /dev/null and b/Resources/Textures/_Shitmed/Objects/Weapons/Melee/wonderprod.rsi/stun-inhand-right.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/meta.json new file mode 100644 index 00000000000..1155dc6ab37 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From Paradise Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "operating_table", + "directions": 1, + "delays": [ + [ + 1.2, + 0.2, + 0.6, + 0.2 + ] + ] + } + ] + } \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/operating_table.png b/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/operating_table.png new file mode 100644 index 00000000000..1cb97c0d01a Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Furniture/Tables/abductor_optable.rsi/operating_table.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/console.png b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/console.png new file mode 100644 index 00000000000..4bbe0aebb1c Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/console.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/eye.png b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/eye.png new file mode 100644 index 00000000000..aeb2ea48798 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/eye.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/meta.json new file mode 100644 index 00000000000..8cded395ac5 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Machines/abductor_camera_console.rsi/meta.json @@ -0,0 +1,66 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From TG Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "console", + "directions": 1, + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + }, + { + "name": "eye", + "directions": 1, + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/console.png b/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/console.png new file mode 100644 index 00000000000..077774ed790 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/console.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/meta.json new file mode 100644 index 00000000000..b6ca9ed8143 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Machines/abductor_console.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From Paradise Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "console", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/full.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/full.png new file mode 100644 index 00000000000..d2b58d8316c Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/full.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/meta.json new file mode 100644 index 00000000000..09f516e549f --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/meta.json @@ -0,0 +1,163 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tg station", + "states": [ + { + "name": "full", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "state_0", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_1", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_2", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_3", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_4", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_5", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_6", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_7", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_0.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_0.png new file mode 100644 index 00000000000..f9d627cfeff Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_0.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_1.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_1.png new file mode 100644 index 00000000000..9ac57ea4a09 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_1.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_2.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_2.png new file mode 100644 index 00000000000..f9d627cfeff Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_2.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_3.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_3.png new file mode 100644 index 00000000000..9ac57ea4a09 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_3.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_4.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_4.png new file mode 100644 index 00000000000..cad43b52010 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_4.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_5.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_5.png new file mode 100644 index 00000000000..504808cb548 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_5.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_6.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_6.png new file mode 100644 index 00000000000..cad43b52010 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_6.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_7.png b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_7.png new file mode 100644 index 00000000000..504ff0a056c Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Tables/abductor_table.rsi/state_7.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/full.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/full.png new file mode 100644 index 00000000000..db7ad030136 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/full.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/meta.json new file mode 100644 index 00000000000..c1c5406df84 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From TG Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "full" + }, + { + "name": "state0", + "directions": 4 + }, + { + "name": "state1", + "directions": 4 + }, + { + "name": "state2", + "directions": 4 + }, + { + "name": "state3", + "directions": 4 + }, + { + "name": "state4", + "directions": 4 + }, + { + "name": "state5", + "directions": 4 + }, + { + "name": "state6", + "directions": 4 + }, + { + "name": "state7", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state0.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state0.png new file mode 100644 index 00000000000..d682fb258b6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state0.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state1.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state1.png new file mode 100644 index 00000000000..0c401f7f2af Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state1.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state2.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state2.png new file mode 100644 index 00000000000..d682fb258b6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state2.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state3.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state3.png new file mode 100644 index 00000000000..0c401f7f2af Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state3.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state4.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state4.png new file mode 100644 index 00000000000..a535ff7bd85 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state4.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state5.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state5.png new file mode 100644 index 00000000000..deba050657d Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state5.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state6.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state6.png new file mode 100644 index 00000000000..a535ff7bd85 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state6.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state7.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state7.png new file mode 100644 index 00000000000..cdddc213742 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor.rsi/state7.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/meta.json new file mode 100644 index 00000000000..25bd1eecb2b --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From TG Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "state0" + }, + { + "name": "state1" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state0.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state0.png new file mode 100644 index 00000000000..3424d2d9f6d Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state0.png differ diff --git a/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state1.png b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state1.png new file mode 100644 index 00000000000..cccb0de590e Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/Walls/abductor_diagonal.rsi/state1.png differ diff --git a/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/idle.png b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/idle.png new file mode 100644 index 00000000000..719af89e73f Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/idle.png differ diff --git a/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/meta.json new file mode 100644 index 00000000000..46d30b6a838 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taked From Paradise Station", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "idle", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "offline", + "directions": 1 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/offline.png b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/offline.png new file mode 100644 index 00000000000..a32a2a350b5 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/abductor_alien_pad.rsi/offline.png differ diff --git a/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_0.png b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_0.png new file mode 100644 index 00000000000..ecb162cd2b6 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_0.png differ diff --git a/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_1.png b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_1.png new file mode 100644 index 00000000000..3b098701855 Binary files /dev/null and b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/experimentator_1.png differ diff --git a/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/meta.json b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/meta.json new file mode 100644 index 00000000000..aacdf0a0829 --- /dev/null +++ b/Resources/Textures/_Shitmed/Structures/abductor_experimentator.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tg", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "experimentator_0", + "directions": 1 + }, + { + "name": "experimentator_1", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_Shitmed/Tiles/abductor_tile.png b/Resources/Textures/_Shitmed/Tiles/abductor_tile.png new file mode 100644 index 00000000000..ddd944e8849 Binary files /dev/null and b/Resources/Textures/_Shitmed/Tiles/abductor_tile.png differ