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:
@@ -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)),
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -29,6 +29,7 @@
|
||||
- HoloprojectorField
|
||||
- SignallerAdvanced
|
||||
- DeviceQuantumSpinInverter
|
||||
- DeviceDesynchronizer
|
||||
|
||||
- type: latheRecipePack
|
||||
id: ScienceClothing
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
BIN
Resources/Textures/Effects/chronofield.rsi/chronofield.png
Normal file
BIN
Resources/Textures/Effects/chronofield.rsi/chronofield.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
21
Resources/Textures/Effects/chronofield.rsi/meta.json
Normal file
21
Resources/Textures/Effects/chronofield.rsi/meta.json
Normal 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 |
BIN
Resources/Textures/Objects/Devices/desynchronizer.rsi/icon.png
Normal file
BIN
Resources/Textures/Objects/Devices/desynchronizer.rsi/icon.png
Normal file
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 |
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user