From c821ca71aa73c6621f2c9857f92539542f788039 Mon Sep 17 00:00:00 2001 From: Kara Date: Mon, 2 Jan 2023 19:58:25 -0600 Subject: [PATCH] Portals & hand teleporter (#13266) * basic system with portals & linked ents * hand tele sprites, no impl * hand tele and teleportation works * fancy it up * oog * special case projectiles * predict portal-to-portal teleportation * this stuff * check nullspace * sloth * give to rd instead * i guess this can probably happen * docs --- .../Teleportation/HandTeleporterSystem.cs | 57 +++++++ .../Components/HandTeleporterComponent.cs | 36 +++++ .../Components/LinkedEntityComponent.cs | 42 +++++ .../Components/PortalComponent.cs | 31 ++++ .../Components/PortalTimeoutComponent.cs | 29 ++++ .../Systems/LinkedEntitySystem.cs | 115 ++++++++++++++ .../Teleportation/Systems/PortalSystem.cs | 146 ++++++++++++++++++ Resources/Audio/Effects/attributions.yml | 4 + Resources/Audio/Effects/teleport_arrival.ogg | Bin 12904 -> 27074 bytes .../Audio/Effects/teleport_departure.ogg | Bin 12904 -> 25640 bytes .../Catalog/Fills/Lockers/heads.yml | 1 + .../Prototypes/Entities/Effects/portal.yml | 51 ++++++ .../Objects/Devices/hand_teleporter.yml | 11 ++ .../Prototypes/Objectives/objectiveGroups.yml | 1 + .../Objectives/traitorObjectives.yml | 16 ++ .../Textures/Effects/portal.rsi/meta.json | 25 ++- .../{portal-pending.png => portal-blue.png} | Bin ...{portal-unconnected.png => portal-red.png} | Bin .../Textures/Effects/portal.rsi/portal.png | Bin 0 -> 2080 bytes .../Devices/hand_teleporter.rsi/icon.png | Bin 0 -> 710 bytes .../hand_teleporter.rsi/inhand-left.png | Bin 0 -> 306 bytes .../hand_teleporter.rsi/inhand-right.png | Bin 0 -> 316 bytes .../Devices/hand_teleporter.rsi/meta.json | 30 ++++ 23 files changed, 592 insertions(+), 3 deletions(-) create mode 100644 Content.Server/Teleportation/HandTeleporterSystem.cs create mode 100644 Content.Shared/Teleportation/Components/HandTeleporterComponent.cs create mode 100644 Content.Shared/Teleportation/Components/LinkedEntityComponent.cs create mode 100644 Content.Shared/Teleportation/Components/PortalComponent.cs create mode 100644 Content.Shared/Teleportation/Components/PortalTimeoutComponent.cs create mode 100644 Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs create mode 100644 Content.Shared/Teleportation/Systems/PortalSystem.cs create mode 100644 Resources/Prototypes/Entities/Effects/portal.yml create mode 100644 Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml rename Resources/Textures/Effects/portal.rsi/{portal-pending.png => portal-blue.png} (100%) rename Resources/Textures/Effects/portal.rsi/{portal-unconnected.png => portal-red.png} (100%) create mode 100644 Resources/Textures/Effects/portal.rsi/portal.png create mode 100644 Resources/Textures/Objects/Devices/hand_teleporter.rsi/icon.png create mode 100644 Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Devices/hand_teleporter.rsi/meta.json diff --git a/Content.Server/Teleportation/HandTeleporterSystem.cs b/Content.Server/Teleportation/HandTeleporterSystem.cs new file mode 100644 index 0000000000..8efb99e07b --- /dev/null +++ b/Content.Server/Teleportation/HandTeleporterSystem.cs @@ -0,0 +1,57 @@ +using Content.Shared.Interaction.Events; +using Content.Shared.Teleportation.Components; +using Content.Shared.Teleportation.Systems; +using Robust.Server.GameObjects; + +namespace Content.Server.Teleportation; + +/// +/// This handles creating portals from a hand teleporter. +/// +public sealed class HandTeleporterSystem : EntitySystem +{ + [Dependency] private readonly LinkedEntitySystem _link = default!; + [Dependency] private readonly AudioSystem _audio = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnUseInHand); + } + + private void OnUseInHand(EntityUid uid, HandTeleporterComponent component, UseInHandEvent args) + { + if (Deleted(component.FirstPortal)) + component.FirstPortal = null; + + if (Deleted(component.SecondPortal)) + component.SecondPortal = null; + + // Create the first portal. + if (component.FirstPortal == null && component.SecondPortal == null) + { + var timeout = EnsureComp(args.User); + timeout.EnteredPortal = null; + component.FirstPortal = Spawn(component.FirstPortalPrototype, Transform(args.User).Coordinates); + _audio.PlayPvs(component.NewPortalSound, uid); + } + else if (component.SecondPortal == null) + { + var timeout = EnsureComp(args.User); + timeout.EnteredPortal = null; + component.SecondPortal = Spawn(component.SecondPortalPrototype, Transform(args.User).Coordinates); + _link.TryLink(component.FirstPortal!.Value, component.SecondPortal.Value, true); + _audio.PlayPvs(component.NewPortalSound, uid); + } + else + { + // Clear both portals + QueueDel(component.FirstPortal!.Value); + QueueDel(component.SecondPortal!.Value); + + component.FirstPortal = null; + component.SecondPortal = null; + _audio.PlayPvs(component.ClearPortalsSound, uid); + } + } +} diff --git a/Content.Shared/Teleportation/Components/HandTeleporterComponent.cs b/Content.Shared/Teleportation/Components/HandTeleporterComponent.cs new file mode 100644 index 0000000000..24ca40d6bb --- /dev/null +++ b/Content.Shared/Teleportation/Components/HandTeleporterComponent.cs @@ -0,0 +1,36 @@ +using Content.Shared.Audio; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Teleportation.Components; + +/// +/// Creates portals. If two are created, both are linked together--otherwise the first teleports randomly. +/// Using it with both portals active deactivates both. +/// +[RegisterComponent, NetworkedComponent] +public sealed class HandTeleporterComponent : Component +{ + [ViewVariables, DataField("firstPortal")] + public EntityUid? FirstPortal = null; + + [ViewVariables, DataField("secondPortal")] + public EntityUid? SecondPortal = null; + + [DataField("firstPortalPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string FirstPortalPrototype = "PortalRed"; + + [DataField("secondPortalPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string SecondPortalPrototype = "PortalBlue"; + + [DataField("newPortalSound")] + public SoundSpecifier NewPortalSound = new SoundPathSpecifier("/Audio/Machines/high_tech_confirm.ogg") + { + Params = AudioParams.Default.WithVolume(-2f) + }; + + [DataField("clearPortalsSound")] + public SoundSpecifier ClearPortalsSound = new SoundPathSpecifier("/Audio/Machines/button.ogg"); +} diff --git a/Content.Shared/Teleportation/Components/LinkedEntityComponent.cs b/Content.Shared/Teleportation/Components/LinkedEntityComponent.cs new file mode 100644 index 0000000000..40850ae6df --- /dev/null +++ b/Content.Shared/Teleportation/Components/LinkedEntityComponent.cs @@ -0,0 +1,42 @@ +using Content.Shared.Teleportation.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Teleportation.Components; + +/// +/// Represents an entity which is linked to other entities (perhaps portals), and which can be walked through/ +/// thrown into to teleport an entity. +/// +[RegisterComponent, Access(typeof(LinkedEntitySystem)), NetworkedComponent] +public sealed class LinkedEntityComponent : Component +{ + /// + /// The entities that this entity is linked to. + /// + [DataField("linkedEntities")] + public HashSet LinkedEntities = new(); + + /// + /// Should this entity be deleted if all of its links are removed? + /// + [DataField("deleteOnEmptyLinks")] + public bool DeleteOnEmptyLinks = false; +} + +[Serializable, NetSerializable] +public sealed class LinkedEntityComponentState : ComponentState +{ + public HashSet LinkedEntities; + + public LinkedEntityComponentState(HashSet linkedEntities) + { + LinkedEntities = linkedEntities; + } +} + +[Serializable, NetSerializable] +public enum LinkedEntityVisuals : byte +{ + HasAnyLinks +} diff --git a/Content.Shared/Teleportation/Components/PortalComponent.cs b/Content.Shared/Teleportation/Components/PortalComponent.cs new file mode 100644 index 0000000000..4fbeb1b6d8 --- /dev/null +++ b/Content.Shared/Teleportation/Components/PortalComponent.cs @@ -0,0 +1,31 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; + +namespace Content.Shared.Teleportation.Components; + +/// +/// Marks an entity as being a 'portal' which teleports entities sent through it to linked entities. +/// Relies on being set up. +/// +[RegisterComponent, NetworkedComponent] +public sealed class PortalComponent : Component +{ + /// + /// Sound played on arriving to this portal, centered on the destination. + /// The arrival sound of the entered portal will play if the destination is not a portal. + /// + [DataField("arrivalSound")] + public SoundSpecifier ArrivalSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); + + /// + /// Sound played on departing from this portal, centered on the original portal. + /// + [DataField("departureSound")] + public SoundSpecifier DepartureSound = new SoundPathSpecifier("/Audio/Effects/teleport_departure.ogg"); + + /// + /// If no portals are linked, the subject will be teleported a random distance at maximum this far away. + /// + [DataField("maxRandomRadius")] + public float MaxRandomRadius = 10.0f; +} diff --git a/Content.Shared/Teleportation/Components/PortalTimeoutComponent.cs b/Content.Shared/Teleportation/Components/PortalTimeoutComponent.cs new file mode 100644 index 0000000000..96306198a6 --- /dev/null +++ b/Content.Shared/Teleportation/Components/PortalTimeoutComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Teleportation.Components; + +/// +/// Attached to an entity after portal transit to mark that they should not immediately be portaled back +/// at the end destination. +/// +[RegisterComponent, NetworkedComponent] +public sealed class PortalTimeoutComponent : Component +{ + /// + /// The portal that was entered. Null if coming from a hand teleporter, etc. + /// + [ViewVariables, DataField("enteredPortal")] + public EntityUid? EnteredPortal = null; +} + +[Serializable, NetSerializable] +public sealed class PortalTimeoutComponentState : ComponentState +{ + public EntityUid? EnteredPortal; + + public PortalTimeoutComponentState(EntityUid? enteredPortal) + { + EnteredPortal = enteredPortal; + } +} diff --git a/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs b/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs new file mode 100644 index 0000000000..3c8e4a7413 --- /dev/null +++ b/Content.Shared/Teleportation/Systems/LinkedEntitySystem.cs @@ -0,0 +1,115 @@ +using System.Linq; +using Content.Shared.Teleportation.Components; +using Robust.Shared.GameStates; + +namespace Content.Shared.Teleportation.Systems; + +/// +/// Handles symmetrically linking two entities together, and removing links properly. +/// This does not do anything on its own (outside of deleting entities that have 0 links, if that option is true) +/// Systems can do whatever they please with the linked entities, such as . +/// +public sealed class LinkedEntitySystem : EntitySystem +{ + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnLinkShutdown); + + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(EntityUid uid, LinkedEntityComponent component, ref ComponentGetState args) + { + args.State = new LinkedEntityComponentState(component.LinkedEntities); + } + + private void OnHandleState(EntityUid uid, LinkedEntityComponent component, ref ComponentHandleState args) + { + if (args.Current is LinkedEntityComponentState state) + component.LinkedEntities = state.LinkedEntities; + } + + private void OnLinkShutdown(EntityUid uid, LinkedEntityComponent component, ComponentShutdown args) + { + // Remove any links to this entity when deleted. + foreach (var ent in component.LinkedEntities.ToArray()) + { + if (LifeStage(ent) < EntityLifeStage.Terminating && TryComp(ent, out var link)) + { + TryUnlink(uid, ent, component, link); + } + } + } + + #region Public API + + /// + /// Links two entities together. Does not require the existence of on either + /// already. Linking is symmetrical, so order doesn't matter. + /// + /// The first entity to link + /// The second entity to link + /// Whether both entities should now delete once their links are removed + /// Whether linking was successful (e.g. they weren't already linked) + public bool TryLink(EntityUid first, EntityUid second, bool deleteOnEmptyLinks=false) + { + var firstLink = EnsureComp(first); + var secondLink = EnsureComp(second); + + firstLink.DeleteOnEmptyLinks = deleteOnEmptyLinks; + secondLink.DeleteOnEmptyLinks = deleteOnEmptyLinks; + + _appearance.SetData(first, LinkedEntityVisuals.HasAnyLinks, true); + _appearance.SetData(second, LinkedEntityVisuals.HasAnyLinks, true); + + Dirty(firstLink); + Dirty(secondLink); + + return firstLink.LinkedEntities.Add(second) + && secondLink.LinkedEntities.Add(first); + } + + /// + /// Unlinks two entities. Deletes either entity if + /// was true and its links are now empty. Symmetrical, so order doesn't matter. + /// + /// The first entity to unlink + /// The second entity to unlink + /// Resolve comp + /// Resolve comp + /// Whether unlinking was successful (e.g. they both were actually linked to one another) + public bool TryUnlink(EntityUid first, EntityUid second, + LinkedEntityComponent? firstLink=null, LinkedEntityComponent? secondLink=null) + { + if (!Resolve(first, ref firstLink)) + return false; + + if (!Resolve(second, ref secondLink)) + return false; + + var success = firstLink.LinkedEntities.Remove(second) + && secondLink.LinkedEntities.Remove(first); + + _appearance.SetData(first, LinkedEntityVisuals.HasAnyLinks, firstLink.LinkedEntities.Any()); + _appearance.SetData(second, LinkedEntityVisuals.HasAnyLinks, secondLink.LinkedEntities.Any()); + + Dirty(firstLink); + Dirty(secondLink); + + if (firstLink.LinkedEntities.Count == 0 && firstLink.DeleteOnEmptyLinks) + QueueDel(first); + + if (secondLink.LinkedEntities.Count == 0 && secondLink.DeleteOnEmptyLinks) + QueueDel(second); + + return success; + } + + #endregion +} diff --git a/Content.Shared/Teleportation/Systems/PortalSystem.cs b/Content.Shared/Teleportation/Systems/PortalSystem.cs new file mode 100644 index 0000000000..841c3411a5 --- /dev/null +++ b/Content.Shared/Teleportation/Systems/PortalSystem.cs @@ -0,0 +1,146 @@ +using System.Linq; +using Content.Shared.Projectiles; +using Content.Shared.Teleportation.Components; +using Robust.Shared.GameStates; +using Robust.Shared.Map; +using Robust.Shared.Network; +using Robust.Shared.Physics.Dynamics; +using Robust.Shared.Physics.Events; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Shared.Teleportation.Systems; + +/// +/// This handles teleporting entities through portals, and creating new linked portals. +/// +public sealed class PortalSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly INetManager _netMan = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + private const string PortalFixture = "portalFixture"; + private const string ProjectileFixture = "projectile"; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnCollide); + SubscribeLocalEvent(OnEndCollide); + + SubscribeLocalEvent(OnGetState); + SubscribeLocalEvent(OnHandleState); + } + + private void OnGetState(EntityUid uid, PortalTimeoutComponent component, ref ComponentGetState args) + { + args.State = new PortalTimeoutComponentState(component.EnteredPortal); + } + + private void OnHandleState(EntityUid uid, PortalTimeoutComponent component, ref ComponentHandleState args) + { + if (args.Current is PortalTimeoutComponentState state) + component.EnteredPortal = state.EnteredPortal; + } + + private bool ShouldCollide(Fixture our, Fixture other) + { + // most non-hard fixtures shouldn't pass through portals, but projectiles are non-hard as well + // and they should still pass through + return our.ID == PortalFixture && (other.Hard || other.ID == ProjectileFixture); + } + + private void OnCollide(EntityUid uid, PortalComponent component, ref StartCollideEvent args) + { + if (!ShouldCollide(args.OurFixture, args.OtherFixture)) + return; + + var subject = args.OtherFixture.Body.Owner; + + // best not. + if (Transform(subject).Anchored) + return; + + // if they came from another portal, just return and wait for them to exit the portal + if (HasComp(subject)) + { + return; + } + + if (TryComp(uid, out var link)) + { + if (!link.LinkedEntities.Any()) + return; + + // client can't predict outside of simple portal-to-portal interactions due to randomness involved + // --also can't predict if the target doesn't exist on the client / is outside of PVS + if (_netMan.IsClient) + { + var first = link.LinkedEntities.First(); + var exists = Exists(first); + if (link.LinkedEntities.Count != 1 || !exists || (exists && Transform(first).MapID == MapId.Nullspace)) + return; + } + + // pick a target and teleport there + var target = _random.Pick(link.LinkedEntities); + + if (HasComp(target)) + { + // if target is a portal, signal that they shouldn't be immediately portaled back + var timeout = EnsureComp(subject); + timeout.EnteredPortal = uid; + Dirty(timeout); + } + + TeleportEntity(uid, subject, Transform(target).Coordinates, target); + return; + } + + if (_netMan.IsClient) + return; + + // no linked entity--teleport randomly + var randVector = _random.NextVector2(component.MaxRandomRadius); + var newCoords = Transform(uid).Coordinates.Offset(randVector); + TeleportEntity(uid, subject, newCoords); + } + + private void OnEndCollide(EntityUid uid, PortalComponent component, ref EndCollideEvent args) + { + if (!ShouldCollide(args.OurFixture, args.OtherFixture)) + return; + + var subject = args.OtherFixture.Body.Owner; + + // if they came from (not us), remove the timeout + if (TryComp(subject, out var timeout) && timeout.EnteredPortal != uid) + { + RemComp(subject); + } + } + + private void TeleportEntity(EntityUid portal, EntityUid subject, EntityCoordinates target, EntityUid? targetEntity=null, + PortalComponent? portalComponent = null) + { + if (!Resolve(portal, ref portalComponent)) + return; + + var arrivalSound = CompOrNull(targetEntity)?.ArrivalSound ?? portalComponent.ArrivalSound; + var departureSound = portalComponent.DepartureSound; + + // Some special cased stuff: projectiles should stop ignoring shooter when they enter a portal, to avoid + // stacking 500 bullets in between 2 portals and instakilling people--you'll just hit yourself instead + // (as expected) + if (TryComp(subject, out var projectile)) + { + projectile.IgnoreShooter = false; + } + + Transform(subject).Coordinates = target; + + _audio.PlayPredicted(departureSound, portal, subject); + _audio.PlayPredicted(arrivalSound, subject, subject); + } +} diff --git a/Resources/Audio/Effects/attributions.yml b/Resources/Audio/Effects/attributions.yml index efa74489b3..66b0c39ac9 100644 --- a/Resources/Audio/Effects/attributions.yml +++ b/Resources/Audio/Effects/attributions.yml @@ -2,3 +2,7 @@ license: "CC-BY-NC-SA-3.0" copyright: "Amateur foley and audio editing by Bright0." source: "https://github.com/Bright0" +- files: ["teleport_arrival.ogg", "teleport_departure.ogg"] + license: "CC-BY-SA-3.0" + copyright: "tgstation" + source: "https://github.com/tgstation/tgstation/commit/906fb0682bab6a0975b45036001c54f021f58ae7" diff --git a/Resources/Audio/Effects/teleport_arrival.ogg b/Resources/Audio/Effects/teleport_arrival.ogg index 650867782b7455435ea183596678c7ba27a81774..9dc97c802b45190b4e3778f8de3d6fbb810d8c63 100644 GIT binary patch delta 23450 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 diff --git a/Resources/Audio/Effects/teleport_departure.ogg b/Resources/Audio/Effects/teleport_departure.ogg index 650867782b7455435ea183596678c7ba27a81774..163ca45f393c8ccf4848a18750f34f5dc31dacf8 100644 GIT binary patch delta 22004 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 DsNDGA delta 9168 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 Qh%B6>hCv|vB~-xw0HZFo8UO$Q diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 6d3fd7468b..dadcd41da2 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -152,6 +152,7 @@ - id: ClothingNeckCloakRd - id: ClothingHeadsetMedicalScience - id: ClothingOuterHardsuitRd + - id: HandTeleporter - id: PlushieSlime prob: 0.1 - id: DoorRemoteResearch diff --git a/Resources/Prototypes/Entities/Effects/portal.yml b/Resources/Prototypes/Entities/Effects/portal.yml new file mode 100644 index 0000000000..af21e6bd96 --- /dev/null +++ b/Resources/Prototypes/Entities/Effects/portal.yml @@ -0,0 +1,51 @@ +- type: entity + id: BasePortal + abstract: true + name: bluespace portal + description: Transports you to a linked destination! + components: + - type: InteractionOutline + - type: Clickable + - type: Physics + bodyType: Static + - type: Sprite + sprite: /Textures/Effects/portal.rsi + - type: Fixtures + fixtures: + - id: portalFixture + shape: + !type:PhysShapeAabb + bounds: "-0.25,-0.48,0.25,0.48" + mask: + - FullTileMask + layer: + - WallLayer + hard: false + - type: Portal + +- type: entity + id: PortalRed + parent: BasePortal + description: This one looks more like a redspace portal. + components: + - type: Sprite + layers: + - state: portal-red + - type: PointLight + netsync: false + color: OrangeRed + radius: 3 + energy: 3 + +- type: entity + id: PortalBlue + parent: BasePortal + components: + - type: Sprite + layers: + - state: portal-blue + - type: PointLight + netsync: false + color: SkyBlue + radius: 3 + energy: 3 diff --git a/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml b/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml new file mode 100644 index 0000000000..55839ada54 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml @@ -0,0 +1,11 @@ +- type: entity + id: HandTeleporter + parent: BaseItem + name: hand teleporter + description: "A Nanotrasen signature item--only the finest bluespace tech. Instructions: Use once to create a portal which teleports at random. Use again to link it to a portal at your current location. Use again to clear all portals." + components: + - type: Sprite + sprite: /Textures/Objects/Devices/hand_teleporter.rsi + layers: + - state: icon + - type: HandTeleporter diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index e4a6b0907d..5130a51c90 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -20,6 +20,7 @@ CorgiMeatStealObjective: 1 CaptainGunStealObjective: 0.5 CaptainJetpackStealObjective: 0.5 + HandTeleporterStealObjective: 0.5 - type: weightedRandom id: TraitorObjectiveGroupKill diff --git a/Resources/Prototypes/Objectives/traitorObjectives.yml b/Resources/Prototypes/Objectives/traitorObjectives.yml index 9946a2e2ac..c2bcb936e6 100644 --- a/Resources/Prototypes/Objectives/traitorObjectives.yml +++ b/Resources/Prototypes/Objectives/traitorObjectives.yml @@ -82,6 +82,22 @@ prototype: ClothingOuterHardsuitRd owner: job-name-rd +- type: objective + id: HandTeleporterStealObjective + issuer: syndicate + difficultyOverride: 2.75 + requirements: + - !type:TraitorRequirement {} + - !type:IncompatibleConditionsRequirement + conditions: + - DieCondition + - !type:NotRoleRequirement + roleId: ResearchDirector + conditions: + - !type:StealCondition + prototype: HandTeleporter + owner: job-name-rd + - type: objective id: NukeDiskStealObjective issuer: syndicate diff --git a/Resources/Textures/Effects/portal.rsi/meta.json b/Resources/Textures/Effects/portal.rsi/meta.json index c3d19f1ce6..74d208234b 100644 --- a/Resources/Textures/Effects/portal.rsi/meta.json +++ b/Resources/Textures/Effects/portal.rsi/meta.json @@ -8,7 +8,7 @@ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/237d8f7894617007d75c71d5d9feb4354c78debd/icons/obj/stationobjs.dmi", "states": [ { - "name": "portal-pending", + "name": "portal-blue", "delays": [[ 0.1, 0.1, @@ -27,7 +27,26 @@ ]] }, { - "name": "portal-unconnected", + "name": "portal-red", + "delays": [[ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ]] + }, + { + "name": "portal", "delays": [[ 0.1, 0.1, @@ -46,4 +65,4 @@ ]] } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Effects/portal.rsi/portal-pending.png b/Resources/Textures/Effects/portal.rsi/portal-blue.png similarity index 100% rename from Resources/Textures/Effects/portal.rsi/portal-pending.png rename to Resources/Textures/Effects/portal.rsi/portal-blue.png diff --git a/Resources/Textures/Effects/portal.rsi/portal-unconnected.png b/Resources/Textures/Effects/portal.rsi/portal-red.png similarity index 100% rename from Resources/Textures/Effects/portal.rsi/portal-unconnected.png rename to Resources/Textures/Effects/portal.rsi/portal-red.png diff --git a/Resources/Textures/Effects/portal.rsi/portal.png b/Resources/Textures/Effects/portal.rsi/portal.png new file mode 100644 index 0000000000000000000000000000000000000000..e6d6fc96f5ffc4d1930cdd83de013bf51247bdec GIT binary patch literal 2080 zcmaJ?YgCfy7XAoBFi|`?m1ZH1NzQ33GjFMY=Cu?IE44DP95pR3S?bIPf@tQ+(k3fM zF*G$~#&n$Wl2_D}(kubZtTCx<6s^Si8VLmE>on)bIcJ^oWAArAYwdTf{qE=4`^^g` z`=JfY4FCW@2l#tap_BE=kO;{45+Vno1C~Pd^8)G~SjZuu7vmY^2>=ZRE0!XcLl~9h zAD#jLM!la5CQ7V{0s#HS0B_Gd>4)BMI}(0#G0kagBUw1ZBrZ9tKPF46l1=o&(*k~E zut#h){&s($-sv4RbeX7KvAPa@2X(mR)&(1)PrJ*(vWSxFRl6>X+-Y5epApCUrdUt( z?n3*_Ug_xQh&FU{b32Hzgu`I>RQ;Z_AX|IYpmfU zZck}xX~H^JclVR^k1y=UcY}j-XVIjEU>7|%>PzcvmGOG_r1~k1dhzWjC(rRQn&f#{-mW8)Wd>-WWn7nEcMz$jI)C z+ES{n|J>Ru17R9ZIIHN1u_EG_v~%dR%0(EaKm`Sd@Vbo`f`SiVVfttLdcKgATKdqU zfS1!8w!ZenS6v-UO>0EE0TnrMWuVM0t)!mTrR{8MQ%_6z6kS{>{`p+*IHQrruPIF$L4?1Oo8C7@yCy26P~q)2VosORw*bvg5%=bi4-1x<^Ur2ycx;0EQmx_;a!J> z#UN$pHn>2}D~dxbtmw#p0CEh)^1JiHob0RC;LJH(3_ZKPVExzN z>55#+vhR&{%~r;sJu+tGb1&~*#Ou%xHr^;$PXNIR(dPa~kM_NX+G))g1P1Kk8~JJO zB(g){MeW_<=yGorUNA%wfD~#8+g^?hL$qACl-;3`eWCyt)cGI078?_9RuH)7%%Ay$ zsh^IHD^)d-HF8|TlSyV#P)$LJ5hfi$+^3$gqLy1muUKS*99sCLFi)cET;RWo5{+q0!O3p@Et0oyw0ury6%gc+nV3*aq3j zLFK{i_Q_`m3=8Gc=ETy<%F5p%nGf~#5v%5Wk11Bt+W@Lw^ZTApYdLTO~s*Yt6-AVzt>XP=*8R#QlGA^(p<|0Caa) zntkIFSE2bY#e|$eZ1dYVCkfMIW{28fV!Rqg{!*JxG&W!PlkMF*rGQjpo59QLw zl)VgarXt4JBZKbGTSsg``yX7!L9Wb-}s?06h z;Uo+@M!`R=|A50Qxjl2%5WsiuPI9s^;=_<3?!Pk^Jz;@58iQs2tQz}>xfspzglF5{ zA)=ViyVX-w#KRB)92><7&it3+<~*Di(@A4T{ct=k4C0lt6%dkTm)yK8^T+nff61UC37J~eAFxHUU3D!U5V#1_K8teiN#t)(=|g(YXMBOZmZEwMG$FqQ{qke31XsePGI$9-zf=J9ph{$L(%6k7(%|CWvjCi7v3<@i8d_R*Fohv7@wC6H1>`_*hlq93T!8>}v66BshS zmK!bH`ace%c3>LpARh~=Pa-+gn zQ6veT%sgQ$s5XAq{;kw5;?N%#{=BHzq zZxCY;=)x4MU3!t@suaH>SXE=eFRLIP!<)2R6Ek7)<_-kO;LXpBhgUsPHX!076Ab31 zG#V{!gD;AK{%fa}AquN>>c#msYNc7>^~`w0yZ<|9Tr!;QjrM(%RI~T4R?AGu$armV z`N&khk-3EE>Uw+6;Suw)ZTL;_jnIH{yFDv*IDgZ+@e(tB?rC}O4o53E7?Iyce-l3$ zee;;c)ghL}H9hoV_WRG}Cs|cD7B<#T-J?PEHwYq~9PiuY#@Rsok8K&k|Bb3@MGtS& Z0Sz_}Epx*?#-Lvv2=F0$*Ll&i{sj4YCmx z1P>j&cnShD@Z_aVb@8Gg)TImxBnS_pphEu+DH@U&la)9^pzS=7;3=w^lLbU8GWS&Bp0XQBxdxf1I!4O`uyxEpYs<&b!V=TLAAb+ z0qGsp#}5nwsN4lwp)cG4R_yJa)X%Dagv>w&Ky%0dXbu?w%^?GzIb;AdhYWz`P(A=z z1my!LA3*s4;bW)+%m`6Fz`=Y#d36m7HMS_zKX>_nM~|N<)tAl(Z2GpjHJ-3rk9@~07*qoM6N<$f~NdO%>V!Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-left.png b/Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2d3863145b951a7743066a59157c1cc7e562a50d GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1FST zi(^Q|oVT|QavnAiaJeXd!mxBHL-@lzyJI3eW&X_#`)JO=0C5^IGT8Tx_t4~ zX@6Nl{8v5ulh<%-62mLgwUz6yO>>#Rwqw3njO^a1`qCRp_ZvjpV=T? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-right.png b/Resources/Textures/Objects/Devices/hand_teleporter.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1704b9c3c112fc423e9466328df5e2bac1f15c87 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1G3n zi(^Q|oVT|&@*Xk}alP2>ax#YJfu_-<Qq+r@Tz=cdWe;su{G zbQCijv1E88!%)cAV8QM%hgsnqqky@H!qP3Z{1Ny;?i_Y=X7}c^aI?Gd2{7O|KF>S%~kcJoh@js0_;4V~` bf53TkzSA$a-26*GpEG#6`njxgN@xNATZDFx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/hand_teleporter.rsi/meta.json b/Resources/Textures/Objects/Devices/hand_teleporter.rsi/meta.json new file mode 100644 index 0000000000..6243286e77 --- /dev/null +++ b/Resources/Textures/Objects/Devices/hand_teleporter.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "tgstation at 43d3fb991641d0dc73b6ce81cdf4f3f09d6b70a0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +}