New Experimental Science T3: Desynchronizer (#35752)

* desynchronizer real

* yaml stuff from slarti branch

* C# stuff

* oops

* review

* improve

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
Flareguy
2025-04-16 01:33:39 +00:00
committed by GitHub
parent 68cfd1c798
commit 92b0f62500
17 changed files with 163 additions and 3 deletions

View File

@@ -5,6 +5,7 @@ using Content.Server.Mind.Commands;
using Content.Server.Polymorph.Components;
using Content.Shared.Actions;
using Content.Shared.Buckle;
using Content.Shared.Coordinates;
using Content.Shared.Damage;
using Content.Shared.Destructible;
using Content.Shared.Hands.EntitySystems;
@@ -277,6 +278,10 @@ public sealed partial class PolymorphSystem : EntitySystem
var ev = new PolymorphedEvent(uid, child, false);
RaiseLocalEvent(uid, ref ev);
// visual effect spawn
if (configuration.EffectProto != null)
SpawnAttachedTo(configuration.EffectProto, child.ToCoordinates());
return child;
}
@@ -353,6 +358,10 @@ public sealed partial class PolymorphSystem : EntitySystem
var ev = new PolymorphedEvent(uid, parent, true);
RaiseLocalEvent(uid, ref ev);
// visual effect spawn
if (component.Configuration.EffectProto != null)
SpawnAttachedTo(component.Configuration.EffectProto, parent.ToCoordinates());
if (component.Configuration.ExitPolymorphPopup != null)
_popup.PopupEntity(Loc.GetString(component.Configuration.ExitPolymorphPopup,
("parent", Identity.Entity(uid, EntityManager)),

View File

@@ -40,6 +40,14 @@ public sealed partial record PolymorphConfiguration
[DataField(required: true, serverOnly: true)]
public EntProtoId Entity;
/// <summary>
/// Additional entity to spawn when polymorphing/reverting.
/// Gets parented to the entity polymorphed into.
/// Useful for visual effects.
/// </summary>
[DataField(serverOnly: true)]
public EntProtoId? EffectProto;
/// <summary>
/// The delay between the polymorph's uses in seconds
/// Slightly weird as of right now.

View File

@@ -48,6 +48,7 @@ research-technology-anomaly-harnessing = Anomaly Core Harnessing
research-technology-abnormal-artifact-manipulation = Artifact Recycling
research-technology-gravity-manipulation = Gravity Manipulation
research-technology-quantum-leaping = Quantum Leaping
research-technology-bluespace-time-manipulation = Bluespace Time Manipulation
research-technology-advanced-anomaly-research = Advanced Anomaly Research
research-technology-rped = Rapid Part Exchange
research-technology-super-parts = Super Parts

View File

@@ -0,0 +1,19 @@
- type: entity
id: EffectDesynchronizer
categories: [ HideSpawnMenu ]
components:
- type: Sprite
drawdepth: Effects
noRot: true
layers:
- shader: unshaded
map: ["enum.EffectLayers.Unshaded"]
sprite: Effects/chronofield.rsi
state: chronofield
- type: AnimationPlayer
- type: EffectVisuals
- type: TimedDespawn
lifetime: 0.8
- type: Tag
tags:
- HideContextMenu

View File

@@ -38,3 +38,14 @@
- type: MovementSpeedModifier
baseSprintSpeed: 6
baseWalkSpeed: 4
- type: entity
parent: [Incorporeal, BaseMob]
id: DesynchronizedPocket
name: desynchronized pocket
description: A pocket in spacetime, keeping the user a fraction of a second in the future.
components:
- type: Spectral
- type: MovementSpeedModifier
baseSprintSpeed: 0
baseWalkSpeed: 0

View File

@@ -0,0 +1,14 @@
- type: entity
id: DeviceDesynchronizer
parent: BaseItem
name: desynchronizer
description: An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active.
components:
- type: Sprite
sprite: Objects/Devices/desynchronizer.rsi
state: icon
- type: TriggerOnUse
- type: PolymorphOnTrigger
polymorph: VoidPocket
- type: UseDelay
delay: 220 # long delay to ensure it can't be spammed, use it wisely

View File

@@ -222,3 +222,18 @@
polymorphSound: /Audio/Magic/ethereal_enter.ogg
exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg
duration: 3
# Desynchronized / Void Pocket status
- type: polymorph
id: VoidPocket
configuration:
entity: DesynchronizedPocket
transferName: false
inventory: None
forced: false
revertOnDeath: true
allowRepeatedMorphs: false
polymorphSound: /Audio/Magic/ethereal_enter.ogg
exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg
duration: 120
effectProto: EffectDesynchronizer

View File

@@ -29,6 +29,7 @@
- HoloprojectorField
- SignallerAdvanced
- DeviceQuantumSpinInverter
- DeviceDesynchronizer
- type: latheRecipePack
id: ScienceClothing

View File

@@ -175,6 +175,15 @@
Glass: 100
Uranium: 100
- type: latheRecipe
id: DeviceDesynchronizer
result: DeviceDesynchronizer
completetime: 5
materials:
Steel: 700
Glass: 100
Uranium: 200
- type: latheRecipe
id: WeaponProtoKineticAccelerator
result: WeaponProtoKineticAccelerator

View File

@@ -124,8 +124,6 @@
- WeaponParticleDecelerator
- HoloprojectorField
# Tier 3
- type: technology
id: GravityManipulation
name: research-technology-gravity-manipulation
@@ -133,12 +131,14 @@
sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi
state: base
discipline: Experimental
tier: 3
tier: 2
cost: 10000
recipeUnlocks:
- WeaponForceGun
- WeaponTetherGun
# Tier 3
- type: technology
id: QuantumLeaping
name: research-technology-quantum-leaping
@@ -150,3 +150,15 @@
cost: 10000
recipeUnlocks:
- DeviceQuantumSpinInverter
- type: technology
id: BluespaceTimeManipulation
name: research-technology-bluespace-time-manipulation
icon:
sprite: Objects/Devices/desynchronizer.rsi
state: icon
discipline: Experimental
tier: 3
cost: 10000
recipeUnlocks:
- DeviceDesynchronizer

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,21 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from https://github.com/tgstation/tgstation at commit 6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "chronofield",
"delays": [
[
0.1,
0.1,
0.1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1,40 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/2712e62ee56d46e6ae11fcb3b16d401a01179ec1/icons/obj/device.dmi, inhands sprited by Flareguy for Space Station 14",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon-on",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "icon",
"delays": [
[
0.5,
0.5
]
]
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}