]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
More artifact content (#22574)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Mon, 1 Jan 2024 02:19:03 +0000 (05:19 +0300)
committerGitHub <noreply@github.com>
Mon, 1 Jan 2024 02:19:03 +0000 (21:19 -0500)
* 3 new effect

* new trigger

* swap portal to Cak

* cake

* portals

* finish

* pupupu

* limitations (same maps)

* its broken now

* a

* portal fix, thx deltanedas

Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/PortalArtifactComponent.cs [new file with mode: 0644]
Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs [new file with mode: 0644]
Resources/Locale/en-US/xenoarchaeology/artifact-hints.ftl
Resources/Prototypes/Entities/Effects/portal.yml
Resources/Prototypes/XenoArch/Effects/normal_effects.yml
Resources/Prototypes/XenoArch/Effects/utility_effects.yml
Resources/Prototypes/XenoArch/artifact_triggers.yml
Resources/Textures/Effects/portal.rsi/meta.json
Resources/Textures/Effects/portal.rsi/portal-artifact.png [new file with mode: 0644]

diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/PortalArtifactComponent.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Components/PortalArtifactComponent.cs
new file mode 100644 (file)
index 0000000..f64b95d
--- /dev/null
@@ -0,0 +1,14 @@
+using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
+
+/// <summary>
+///     When activated artifact will spawn an pair portals. First - right in artifact, Second - at random point of station.
+/// </summary>
+[RegisterComponent, Access(typeof(PortalArtifactSystem))]
+public sealed partial class PortalArtifactComponent : Component
+{
+    [DataField]
+    public EntProtoId PortalProto = "PortalArtifact";
+}
diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs
new file mode 100644 (file)
index 0000000..e2d2172
--- /dev/null
@@ -0,0 +1,43 @@
+using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
+using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
+using Content.Shared.Mind.Components;
+using Content.Shared.Teleportation.Systems;
+using Robust.Shared.Random;
+
+namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
+
+public sealed class PortalArtifactSystem : EntitySystem
+{
+    [Dependency] private readonly IRobustRandom _random = default!;
+    [Dependency] private readonly LinkedEntitySystem _link = default!;
+    [Dependency] private readonly SharedTransformSystem _transform = default!;
+
+    public override void Initialize()
+    {
+        base.Initialize();
+        SubscribeLocalEvent<PortalArtifactComponent, ArtifactActivatedEvent>(OnActivate);
+    }
+
+    private void OnActivate(Entity<PortalArtifactComponent> artifact, ref ArtifactActivatedEvent args)
+    {
+        var map = Transform(artifact).MapID;
+        var firstPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(artifact));
+
+        var minds = new List<EntityUid>();
+        var mindQuery = EntityQueryEnumerator<MindContainerComponent, TransformComponent>();
+        while (mindQuery.MoveNext(out var uid, out var mc, out var xform))
+        {
+            if (mc.HasMind && xform.MapID == map)
+                minds.Add(uid);
+        }
+
+        var target = _random.Pick(minds);
+        var secondPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(target));
+
+        //Manual position swapping, because the portal that opens doesn't trigger a collision, and doesn't teleport targets the first time.
+        _transform.SetCoordinates(artifact, Transform(secondPortal).Coordinates);
+        _transform.SetCoordinates(target, Transform(firstPortal).Coordinates);
+
+        _link.TryLink(firstPortal, secondPortal, true);
+    }
+}
index 960a84e746a3e4eb9d719dfa281340f01eb98443..84d832a0824f245839370833a16590b72adfacd1 100644 (file)
@@ -20,6 +20,7 @@ artifact-effect-hint-phasing = Structural phasing
 artifact-effect-hint-sentience = Neurological activity
 artifact-effect-hint-polymorph = Transmogrificational activity
 artifact-effect-hint-magnet = Magnetic waves
+artifact-effect-hint-visual = Visual distortions
 
 # the triggers should be more obvious than the effects
 # gives people an idea of what to do: don't be too specific (i.e. no "welders")
@@ -30,6 +31,7 @@ artifact-trigger-hint-physical = Physical trauma
 artifact-trigger-hint-tool = Tool usage
 artifact-trigger-hint-music = Sonic vibrations
 artifact-trigger-hint-water = Hydro-reactive
+artifact-trigger-hint-blood = Reaction with hemoglobin
 artifact-trigger-hint-magnet = Magnetic waves
 artifact-trigger-hint-death = Life essence
 artifact-trigger-hint-radiation = Radiation
index 92ead90dbfc85762978010e45086e7aabae924cd..653d3f608dde75a6df5ffab1f77d8b1de9ae17df 100644 (file)
     radius: 3
     energy: 1
     netsync: false
+    
+- type: entity
+  id: PortalArtifact
+  parent: BasePortal
+  components:
+  - type: Sprite
+    layers:
+    - state: portal-artifact
+  - type: PointLight
+    color: "#ed85c2"
+    radius: 3
+    energy: 1
+    netsync: false
+  - type: TimedDespawn
+    lifetime: 120
+  - type: Portal
+    canTeleportToOtherMaps: true
index 40fb951b5d253a5fbc405eec3a4bca3404ba70c1..cf6bdd4fc5518b8ca87c65e0dc5da51e74e8c003 100644 (file)
   components:
     - type: KnockArtifact
 
+- type: artifactEffect
+  id: EffectMagnet
+  targetDepth: 1
+  effectHint: artifact-effect-hint-magnet
+  components:
+  - type: GravityWell
+    maxRange: 3
+    baseRadialAcceleration: 1
+    baseTangentialAcceleration: 3
+  
+- type: artifactEffect
+  id: EffectAntiMagnet
+  targetDepth: 1
+  effectHint: artifact-effect-hint-magnet
+  components:
+  - type: GravityWell
+    maxRange: 3
+    baseRadialAcceleration: -1
+    baseTangentialAcceleration: -3
+
+- type: artifactEffect
+  id: EffectInvisibility
+  targetDepth: 2
+  effectHint: artifact-effect-hint-visual
+  components:
+  - type: Stealth
+    hadOutline: true
+  - type: StealthOnMove
+    passiveVisibilityRate: -0.10
+    movementVisibilityRate: 0.10
+
 - type: artifactEffect
   id: EffectExplosionScary
   targetDepth: 2
     maxIntensity: 50
 
 - type: artifactEffect
-  id: EffectMagnet
-  targetDepth: 1
-  effectHint: artifact-effect-hint-magnet
-  components:
-  - type: GravityWell
-    maxRange: 3
-    baseRadialAcceleration: 1
-    baseTangentialAcceleration: 3
-
-- type: artifactEffect
-  id: EffectAntiMagnet
-  targetDepth: 1
-  effectHint: artifact-effect-hint-magnet
+  id: EffectPortal
+  targetDepth: 3
+  effectHint: artifact-effect-hint-displacement
   components:
-  - type: GravityWell
-    maxRange: 3
-    baseRadialAcceleration: -1
-    baseTangentialAcceleration: -3
+  - type: PortalArtifact
 
 - type: artifactEffect
   id: EffectSingulo
index fdf28fe9a0112475198690f644733866812e9662..edfd64b06cf1e356c2206c01f7704fe41744ec41 100644 (file)
     isOpen: true
     solution: beaker
 
+- type: artifactEffect
+  id: EffectSpeedUp
+  targetDepth: 2
+  effectHint: artifact-effect-hint-displacement
+  whitelist:
+    components:
+    - Item
+  permanentComponents:
+  - type: HeldSpeedModifier
+    walkModifier: 1.2
+    sprintModifier: 1.3
+
 - type: artifactEffect
   id: EffectDrill
   targetDepth: 3
       path: /Audio/Weapons/bladeslice.ogg
   - type: Sharp
 
-
 - type: artifactEffect
   id: EffectPowerGen20K
   targetDepth: 3
index 6e128cef1ce1cc26817e50b8bf9d0938facb0c94..57d1173fe3eff1124d9536c50ae0cd9d88c2e22b 100644 (file)
       effects:
       - !type:ActivateArtifact
 
+- type: artifactTrigger
+  id: TriggerBlood
+  targetDepth: 1
+  triggerHint: artifact-trigger-hint-blood
+  components:
+  - type: Reactive
+    groups:
+      Acidic: [ Touch ]
+    reactions:
+    - reagents: [ Blood ]
+      methods: [ Touch ]
+      effects:
+      - !type:ActivateArtifact
+
 - type: artifactTrigger
   id: TriggerGas
   targetDepth: 2
index ff4d8c51ee7db816532ccbd3b6001c5fab7b2ae7..62796d8236d98188ab37cdd9017feebbd2cd9ccf 100644 (file)
@@ -5,7 +5,7 @@
         "y": 32
     },
     "license": "CC-BY-SA-3.0",
-    "copyright": "Taken from tgStation at commit https://github.com/tgstation/tgstation/blob/4a367160a204db4c5b51c1f811a3b899f0bde3ea/icons/obj/stationobjs.dmi and repaletted using old tg sprites by mirrorcult",
+    "copyright": "Taken from tgStation at commit https://github.com/tgstation/tgstation/blob/4a367160a204db4c5b51c1f811a3b899f0bde3ea/icons/obj/stationobjs.dmi and repaletted using old tg sprites by mirrorcult, portal-artifact recolored by TheShuEd",
     "states": [
         {
             "name": "portal-blue",
                     0.1, 0.1
                 ]
             ]
+        },
+        {
+            "name": "portal-artifact",
+            "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
+                ]
+            ]
         }
     ]
 }
diff --git a/Resources/Textures/Effects/portal.rsi/portal-artifact.png b/Resources/Textures/Effects/portal.rsi/portal-artifact.png
new file mode 100644 (file)
index 0000000..26f29f7
Binary files /dev/null and b/Resources/Textures/Effects/portal.rsi/portal-artifact.png differ