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;
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;
}
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)),
[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.
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
--- /dev/null
+- 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
\ No newline at end of file
- 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
--- /dev/null
+- 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
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
\ No newline at end of file
- HoloprojectorField
- SignallerAdvanced
- DeviceQuantumSpinInverter
+ - DeviceDesynchronizer
- type: latheRecipePack
id: ScienceClothing
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
- WeaponParticleDecelerator
- HoloprojectorField
-# Tier 3
-
- type: technology
id: GravityManipulation
name: research-technology-gravity-manipulation
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
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
\ No newline at end of file
--- /dev/null
+{
+ "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
+ ]
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "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
+ }
+ ]
+}