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.Server.Polymorph.Components;
|
||||||
using Content.Shared.Actions;
|
using Content.Shared.Actions;
|
||||||
using Content.Shared.Buckle;
|
using Content.Shared.Buckle;
|
||||||
|
using Content.Shared.Coordinates;
|
||||||
using Content.Shared.Damage;
|
using Content.Shared.Damage;
|
||||||
using Content.Shared.Destructible;
|
using Content.Shared.Destructible;
|
||||||
using Content.Shared.Hands.EntitySystems;
|
using Content.Shared.Hands.EntitySystems;
|
||||||
@@ -277,6 +278,10 @@ public sealed partial class PolymorphSystem : EntitySystem
|
|||||||
var ev = new PolymorphedEvent(uid, child, false);
|
var ev = new PolymorphedEvent(uid, child, false);
|
||||||
RaiseLocalEvent(uid, ref ev);
|
RaiseLocalEvent(uid, ref ev);
|
||||||
|
|
||||||
|
// visual effect spawn
|
||||||
|
if (configuration.EffectProto != null)
|
||||||
|
SpawnAttachedTo(configuration.EffectProto, child.ToCoordinates());
|
||||||
|
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,6 +358,10 @@ public sealed partial class PolymorphSystem : EntitySystem
|
|||||||
var ev = new PolymorphedEvent(uid, parent, true);
|
var ev = new PolymorphedEvent(uid, parent, true);
|
||||||
RaiseLocalEvent(uid, ref ev);
|
RaiseLocalEvent(uid, ref ev);
|
||||||
|
|
||||||
|
// visual effect spawn
|
||||||
|
if (component.Configuration.EffectProto != null)
|
||||||
|
SpawnAttachedTo(component.Configuration.EffectProto, parent.ToCoordinates());
|
||||||
|
|
||||||
if (component.Configuration.ExitPolymorphPopup != null)
|
if (component.Configuration.ExitPolymorphPopup != null)
|
||||||
_popup.PopupEntity(Loc.GetString(component.Configuration.ExitPolymorphPopup,
|
_popup.PopupEntity(Loc.GetString(component.Configuration.ExitPolymorphPopup,
|
||||||
("parent", Identity.Entity(uid, EntityManager)),
|
("parent", Identity.Entity(uid, EntityManager)),
|
||||||
|
|||||||
@@ -40,6 +40,14 @@ public sealed partial record PolymorphConfiguration
|
|||||||
[DataField(required: true, serverOnly: true)]
|
[DataField(required: true, serverOnly: true)]
|
||||||
public EntProtoId Entity;
|
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>
|
/// <summary>
|
||||||
/// The delay between the polymorph's uses in seconds
|
/// The delay between the polymorph's uses in seconds
|
||||||
/// Slightly weird as of right now.
|
/// 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-abnormal-artifact-manipulation = Artifact Recycling
|
||||||
research-technology-gravity-manipulation = Gravity Manipulation
|
research-technology-gravity-manipulation = Gravity Manipulation
|
||||||
research-technology-quantum-leaping = Quantum Leaping
|
research-technology-quantum-leaping = Quantum Leaping
|
||||||
|
research-technology-bluespace-time-manipulation = Bluespace Time Manipulation
|
||||||
research-technology-advanced-anomaly-research = Advanced Anomaly Research
|
research-technology-advanced-anomaly-research = Advanced Anomaly Research
|
||||||
research-technology-rped = Rapid Part Exchange
|
research-technology-rped = Rapid Part Exchange
|
||||||
research-technology-super-parts = Super Parts
|
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
|
- type: MovementSpeedModifier
|
||||||
baseSprintSpeed: 6
|
baseSprintSpeed: 6
|
||||||
baseWalkSpeed: 4
|
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
|
polymorphSound: /Audio/Magic/ethereal_enter.ogg
|
||||||
exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg
|
exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg
|
||||||
duration: 3
|
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
|
- HoloprojectorField
|
||||||
- SignallerAdvanced
|
- SignallerAdvanced
|
||||||
- DeviceQuantumSpinInverter
|
- DeviceQuantumSpinInverter
|
||||||
|
- DeviceDesynchronizer
|
||||||
|
|
||||||
- type: latheRecipePack
|
- type: latheRecipePack
|
||||||
id: ScienceClothing
|
id: ScienceClothing
|
||||||
|
|||||||
@@ -175,6 +175,15 @@
|
|||||||
Glass: 100
|
Glass: 100
|
||||||
Uranium: 100
|
Uranium: 100
|
||||||
|
|
||||||
|
- type: latheRecipe
|
||||||
|
id: DeviceDesynchronizer
|
||||||
|
result: DeviceDesynchronizer
|
||||||
|
completetime: 5
|
||||||
|
materials:
|
||||||
|
Steel: 700
|
||||||
|
Glass: 100
|
||||||
|
Uranium: 200
|
||||||
|
|
||||||
- type: latheRecipe
|
- type: latheRecipe
|
||||||
id: WeaponProtoKineticAccelerator
|
id: WeaponProtoKineticAccelerator
|
||||||
result: WeaponProtoKineticAccelerator
|
result: WeaponProtoKineticAccelerator
|
||||||
|
|||||||
@@ -124,8 +124,6 @@
|
|||||||
- WeaponParticleDecelerator
|
- WeaponParticleDecelerator
|
||||||
- HoloprojectorField
|
- HoloprojectorField
|
||||||
|
|
||||||
# Tier 3
|
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
id: GravityManipulation
|
id: GravityManipulation
|
||||||
name: research-technology-gravity-manipulation
|
name: research-technology-gravity-manipulation
|
||||||
@@ -133,12 +131,14 @@
|
|||||||
sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi
|
sprite: Objects/Weapons/Guns/Launchers/tether_gun.rsi
|
||||||
state: base
|
state: base
|
||||||
discipline: Experimental
|
discipline: Experimental
|
||||||
tier: 3
|
tier: 2
|
||||||
cost: 10000
|
cost: 10000
|
||||||
recipeUnlocks:
|
recipeUnlocks:
|
||||||
- WeaponForceGun
|
- WeaponForceGun
|
||||||
- WeaponTetherGun
|
- WeaponTetherGun
|
||||||
|
|
||||||
|
# Tier 3
|
||||||
|
|
||||||
- type: technology
|
- type: technology
|
||||||
id: QuantumLeaping
|
id: QuantumLeaping
|
||||||
name: research-technology-quantum-leaping
|
name: research-technology-quantum-leaping
|
||||||
@@ -150,3 +150,15 @@
|
|||||||
cost: 10000
|
cost: 10000
|
||||||
recipeUnlocks:
|
recipeUnlocks:
|
||||||
- DeviceQuantumSpinInverter
|
- 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