From 75a995a7300ee77bfffcb01fec013dd7fa776706 Mon Sep 17 00:00:00 2001 From: William Lemon Date: Sun, 7 Sep 2025 18:11:07 +1000 Subject: [PATCH] Skia Tweaks + Removes Nightvision form Lathes (#4308) * Adds Direction Requests * Fix * Fixed EntryPoint, added back Sec Lathe, and added as a Salvage Points item * Moved SpecOpsGoggles to appease gods * Give Skia Thermal Vision * Removed thermals from research. * Removed thermal vision, added comment --- Content.Client/Entry/EntryPoint.cs | 2 + .../Overlays/ThermalVisionOverlay.cs | 1 + .../_RMC14/Effect/RMCEffectSystem.cs | 43 ++++++++++ .../Screech/RMCXenoScreechShockWaveOverlay.cs | 77 ++++++++++++++++++ .../PsychokineticScreamPowerSystem.cs | 4 + .../Abilities/ShatterLightsAbilitySystem.cs | 3 + .../_RMC14/Effect/RMCEffectSystem.cs | 5 ++ .../PsychokineticScreamPowerComponent.cs | 6 ++ .../ShatterLightsAbilityComponent.cs | 6 ++ .../Effect/EffectAlphaAnimationComponent.cs | 14 ++++ .../_RMC14/Effect/RMCEffectComponent.cs | 9 ++ .../_RMC14/Effect/SharedRMCEffectSystem.cs | 19 +++++ .../RMCXenoScreechShockWaveComponent.cs | 27 ++++++ .../en-US/_DV/store/uplink/wearables.ftl | 6 ++ .../Entities/Structures/Machines/lathe.yml | 3 +- Resources/Prototypes/Roles/Antags/nukeops.yml | 4 +- .../_DV/Catalog/Uplink/wearables.yml | 22 +++++ .../Inventories/salvage_points.yml | 2 + .../_DV/Entities/Mobs/NPCs/skia.yml | 23 ++++-- .../Entities/Structures/Machines/lathe.yml | 3 - .../Recipes/Lathes/Packs/misc.yml | 1 - Resources/Prototypes/_RMC14/Effects/base.yml | 5 ++ .../Prototypes/_RMC14/Effects/screech.yml | 18 ++++ .../Prototypes/_RMC14/Shaders/shaders.yml | 4 + .../_White/Entities/Clothing/Eyes/goggles.yml | 4 +- .../_White/Research/experimental.yml | 14 ---- .../_RMC14/Effects/xeno_screech.rsi/meta.json | 26 ++++++ .../Effects/xeno_screech.rsi/screech.png | Bin 0 -> 2426 bytes .../_RMC14/Shaders/screech_shock_wave.swsl | 28 +++++++ 29 files changed, 346 insertions(+), 33 deletions(-) create mode 100644 Content.Client/_RMC14/Effect/RMCEffectSystem.cs create mode 100644 Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs create mode 100644 Content.Server/_RMC14/Effect/RMCEffectSystem.cs create mode 100644 Content.Shared/_RMC14/Effect/EffectAlphaAnimationComponent.cs create mode 100644 Content.Shared/_RMC14/Effect/RMCEffectComponent.cs create mode 100644 Content.Shared/_RMC14/Effect/SharedRMCEffectSystem.cs create mode 100644 Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs create mode 100644 Resources/Prototypes/_RMC14/Effects/base.yml create mode 100644 Resources/Prototypes/_RMC14/Effects/screech.yml create mode 100644 Resources/Prototypes/_RMC14/Shaders/shaders.yml create mode 100644 Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json create mode 100644 Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png create mode 100644 Resources/Textures/_RMC14/Shaders/screech_shock_wave.swsl diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 0f7266f700..0b42c6d266 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -39,6 +39,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Replays; using Robust.Shared.Timing; using Content.Client._NF.Emp.Overlays; // Frontier +using Content.Client._RMC14.Xenonids.Screech; // RMC14 namespace Content.Client.Entry { @@ -173,6 +174,7 @@ namespace Content.Client.Entry _overlayManager.AddOverlay(new SingularityOverlay()); _overlayManager.AddOverlay(new RadiationPulseOverlay()); + _overlayManager.AddOverlay(new RMCXenoScreechShockWaveOverlay()); // RMC14 _overlayManager.AddOverlay(new EmpBlastOverlay()); // Frontier _chatManager.Initialize(); _clientPreferencesManager.Initialize(); diff --git a/Content.Client/_Goobstation/Overlays/ThermalVisionOverlay.cs b/Content.Client/_Goobstation/Overlays/ThermalVisionOverlay.cs index d99741bd55..239ec3dc2c 100644 --- a/Content.Client/_Goobstation/Overlays/ThermalVisionOverlay.cs +++ b/Content.Client/_Goobstation/Overlays/ThermalVisionOverlay.cs @@ -80,6 +80,7 @@ public sealed class ThermalVisionOverlay : Overlay _lightEntity ??= _entity.SpawnAttachedTo(null, playerXform.Coordinates); _transform.SetParent(_lightEntity.Value, player.Value); var light = _entity.EnsureComponent(_lightEntity.Value); + light.NetSyncEnabled = false; // DeltaV - Desync this component _light.SetRadius(_lightEntity.Value, LightRadius, light); _light.SetEnergy(_lightEntity.Value, alpha, light); _light.SetColor(_lightEntity.Value, Comp.Color, light); diff --git a/Content.Client/_RMC14/Effect/RMCEffectSystem.cs b/Content.Client/_RMC14/Effect/RMCEffectSystem.cs new file mode 100644 index 0000000000..8e3de8dd63 --- /dev/null +++ b/Content.Client/_RMC14/Effect/RMCEffectSystem.cs @@ -0,0 +1,43 @@ +using Content.Shared._RMC14.Effect; +using Robust.Client.GameObjects; +using Robust.Shared.Timing; + +namespace Content.Client._RMC14.Effect; + +public sealed class RMCEffectSystem : SharedRMCEffectSystem +{ + // Most effects are pretty large and flashy so we're dividing the opacity of the parent by 3 before applying it to the effect. + private const int OpacityDivider = 3; + + [Dependency] private readonly IGameTiming _timing = default!; + + public override void FrameUpdate(float frameTime) + { + var time = _timing.CurTime; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var effect, out var sprite)) + { + if (effect.SpawnedAt is not { } spawned) + continue; + + var alpha = MathHelper.Lerp((spawned + effect.Delay).TotalSeconds, spawned.TotalSeconds, time.TotalSeconds); + sprite.Color = sprite.Color.WithAlpha((float) alpha); + } + + var query2 = EntityQueryEnumerator(); + while (query2.MoveNext(out var uid, out var effect)) + { + var parent = Transform(uid).ParentUid; + + if (!TryComp(parent, out SpriteComponent? parentSprite)) + return; + + if (!TryComp(uid, out SpriteComponent? sprite)) + return; + + // Only apply the reduced opacity to the effect if the parent's opacity is < 1. + if (sprite.Color.A < 1) + sprite.Color = sprite.Color.WithAlpha(parentSprite.Color.A / OpacityDivider); + } + } +} diff --git a/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs b/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs new file mode 100644 index 0000000000..daaa8fe312 --- /dev/null +++ b/Content.Client/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveOverlay.cs @@ -0,0 +1,77 @@ +using System.Numerics; +using Content.Shared._RMC14.Xenonids.Screech; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Client._RMC14.Xenonids.Screech; + +public sealed class RMCXenoScreechShockWaveOverlay : Overlay, IEntityEventSubscriber +{ + [Dependency] private readonly IEntityManager _entMan = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private SharedTransformSystem? _xformSystem; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + public override bool RequestScreenTexture => true; + + private readonly ShaderInstance _shader; + + public RMCXenoScreechShockWaveOverlay() + { + IoCManager.InjectDependencies(this); + _shader = _prototypeManager.Index("RMCXenoScreechShockWave").Instance().Duplicate(); + } + + private Vector2 _position; + private float _waveStrength; + private float _waveSpeed; + private float _downScale; + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (args.Viewport.Eye == null || _xformSystem is null && !_entMan.TrySystem(out _xformSystem)) + return false; + + var query = _entMan.EntityQueryEnumerator(); + + if (query.MoveNext(out var uid, out var distortion, out var xform)) + { + if (xform.MapID != args.MapId) + return false; + + var mapPos = _xformSystem.GetWorldPosition(uid); + var tempCoords = args.Viewport.WorldToLocal(mapPos); + + // normalized coords, 0 - 1 plane. This is pure hell, we subtract 1 because fragment calculates from the bottom and local goes from the top of the viewport + tempCoords.Y = 1 - (tempCoords.Y / args.Viewport.Size.Y); + tempCoords.X /= args.Viewport.Size.X; + + _position = tempCoords; + _waveStrength = distortion.WaveStrength; + _waveSpeed = distortion.WaveSpeed; + _downScale = distortion.DownScale; + + return true; + } + + return false; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null || args.Viewport.Eye == null) + return; + + _shader?.SetParameter("position", _position); + _shader?.SetParameter("waveSpeed", _waveSpeed); + _shader?.SetParameter("downScale", _downScale); + _shader?.SetParameter("waveStrength", _waveStrength); + _shader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + worldHandle.UseShader(_shader); + worldHandle.DrawRect(args.WorldBounds, Color.White); + worldHandle.UseShader(null); + } +} diff --git a/Content.Server/_DV/Abilities/Psionics/PsychokineticScreamPowerSystem.cs b/Content.Server/_DV/Abilities/Psionics/PsychokineticScreamPowerSystem.cs index 134aa1fb26..aae1c70381 100644 --- a/Content.Server/_DV/Abilities/Psionics/PsychokineticScreamPowerSystem.cs +++ b/Content.Server/_DV/Abilities/Psionics/PsychokineticScreamPowerSystem.cs @@ -1,6 +1,7 @@ using Content.Shared._DV.Abilities; using Content.Shared.Abilities.Psionics; using Content.Shared.Actions; +using Content.Shared.Coordinates; using Robust.Server.Audio; namespace Content.Server._DV.Abilities; @@ -50,6 +51,9 @@ public sealed partial class PsychokineticScreamPowerSystem : EntitySystem _audio.PlayPvs(entity.Comp.AbilitySound, entity); _shatterLights.ShatterLightsAround(entity.Owner, entity.Comp.Radius, entity.Comp.LineOfSight); + + SpawnAttachedTo(entity.Comp.Effect, entity.Owner.ToCoordinates()); + args.Handled = true; } diff --git a/Content.Server/_DV/Abilities/ShatterLightsAbilitySystem.cs b/Content.Server/_DV/Abilities/ShatterLightsAbilitySystem.cs index 1e3b310af1..0bd53072d1 100644 --- a/Content.Server/_DV/Abilities/ShatterLightsAbilitySystem.cs +++ b/Content.Server/_DV/Abilities/ShatterLightsAbilitySystem.cs @@ -2,6 +2,7 @@ using Content.Server.Light.Components; using Content.Server.Light.EntitySystems; using Content.Shared._DV.Abilities; using Content.Shared.Actions; +using Content.Shared.Coordinates; using Content.Shared.Physics; using Robust.Server.Audio; using Robust.Shared.Map; @@ -52,6 +53,8 @@ public sealed partial class ShatterLightsAbilitySystem : EntitySystem _audio.PlayPvs(entity.Comp.AbilitySound, entity); ShatterLightsAround(entity.Owner, entity.Comp.Radius, entity.Comp.LineOfSight); + + SpawnAttachedTo(entity.Comp.Effect, entity.Owner.ToCoordinates()); args.Handled = true; } diff --git a/Content.Server/_RMC14/Effect/RMCEffectSystem.cs b/Content.Server/_RMC14/Effect/RMCEffectSystem.cs new file mode 100644 index 0000000000..eef80c4143 --- /dev/null +++ b/Content.Server/_RMC14/Effect/RMCEffectSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared._RMC14.Effect; + +namespace Content.Server._RMC14.Effect; + +public sealed class RMCEffectSystem : SharedRMCEffectSystem; diff --git a/Content.Shared/_DV/Abilities/Psionics/PsychokineticScreamPowerComponent.cs b/Content.Shared/_DV/Abilities/Psionics/PsychokineticScreamPowerComponent.cs index 48f7ebc07c..6def2b2a86 100644 --- a/Content.Shared/_DV/Abilities/Psionics/PsychokineticScreamPowerComponent.cs +++ b/Content.Shared/_DV/Abilities/Psionics/PsychokineticScreamPowerComponent.cs @@ -37,6 +37,12 @@ public sealed partial class PsychokineticScreamPowerComponent : Component /// [DataField] public SoundSpecifier AbilitySound = new SoundPathSpecifier("/Audio/_DV/Effects/creepyshriek.ogg"); + + /// + /// The effect to spawn when the ability is used. + /// + [DataField] + public EntProtoId Effect = "CMEffectScreech"; } public sealed partial class ShatterLightsActionEvent : InstantActionEvent; diff --git a/Content.Shared/_DV/Abilities/ShatterLightsAbilityComponent.cs b/Content.Shared/_DV/Abilities/ShatterLightsAbilityComponent.cs index fb5412ef52..2ad28cf382 100644 --- a/Content.Shared/_DV/Abilities/ShatterLightsAbilityComponent.cs +++ b/Content.Shared/_DV/Abilities/ShatterLightsAbilityComponent.cs @@ -37,6 +37,12 @@ public sealed partial class ShatterLightsAbilityComponent : Component /// [DataField] public SoundSpecifier AbilitySound = new SoundPathSpecifier("/Audio/_DV/Effects/creepyshriek.ogg"); + + /// + /// The effect to spawn when the ability is used. + /// + [DataField] + public EntProtoId Effect = "CMEffectScreech"; } public sealed partial class ShatterLightsActionEvent : InstantActionEvent; diff --git a/Content.Shared/_RMC14/Effect/EffectAlphaAnimationComponent.cs b/Content.Shared/_RMC14/Effect/EffectAlphaAnimationComponent.cs new file mode 100644 index 0000000000..f21982806b --- /dev/null +++ b/Content.Shared/_RMC14/Effect/EffectAlphaAnimationComponent.cs @@ -0,0 +1,14 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._RMC14.Effect; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedRMCEffectSystem))] +public sealed partial class EffectAlphaAnimationComponent : Component +{ + [DataField, AutoNetworkedField] + public TimeSpan? SpawnedAt; + + [DataField, AutoNetworkedField] + public TimeSpan Delay = TimeSpan.FromSeconds(1); +} diff --git a/Content.Shared/_RMC14/Effect/RMCEffectComponent.cs b/Content.Shared/_RMC14/Effect/RMCEffectComponent.cs new file mode 100644 index 0000000000..935abc71af --- /dev/null +++ b/Content.Shared/_RMC14/Effect/RMCEffectComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._RMC14.Effect; + +[RegisterComponent, NetworkedComponent] +public sealed partial class RMCEffectComponent : Component +{ + +} diff --git a/Content.Shared/_RMC14/Effect/SharedRMCEffectSystem.cs b/Content.Shared/_RMC14/Effect/SharedRMCEffectSystem.cs new file mode 100644 index 0000000000..e547426b0b --- /dev/null +++ b/Content.Shared/_RMC14/Effect/SharedRMCEffectSystem.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Timing; + +namespace Content.Shared._RMC14.Effect; + +public abstract class SharedRMCEffectSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnAlphaAnimationMapInit); + } + + private void OnAlphaAnimationMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.SpawnedAt = _timing.CurTime; + Dirty(ent); + } +} diff --git a/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs b/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs new file mode 100644 index 0000000000..0ea4e199b5 --- /dev/null +++ b/Content.Shared/_RMC14/Xenonids/Screech/RMCXenoScreechShockWaveComponent.cs @@ -0,0 +1,27 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._RMC14.Xenonids.Screech; + +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState] +public sealed partial class RMCXenoScreechShockWaveComponent : Component +{ + /// + /// The speed of each individual wave from the center axis. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float WaveSpeed = 15.3f; + + /// + /// The size of each wave in its width and distortion effect + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float WaveStrength = 1.0f; + + /// + /// The scale of the effect, lower number means a larger total area while smaller numbers downscale it and reduce the effected area. + /// + [DataField, AutoNetworkedField, ViewVariables(VVAccess.ReadWrite)] + public float DownScale = 1.5f; +} + diff --git a/Resources/Locale/en-US/_DV/store/uplink/wearables.ftl b/Resources/Locale/en-US/_DV/store/uplink/wearables.ftl index 00a75b5334..352753e3ef 100644 --- a/Resources/Locale/en-US/_DV/store/uplink/wearables.ftl +++ b/Resources/Locale/en-US/_DV/store/uplink/wearables.ftl @@ -12,3 +12,9 @@ uplink-hardsuit-syndieelite-desc-deltav = An alternate version of the blood-red uplink-cwpgorlex-name = Gorlex Cold Weather Poncho uplink-cwpgorlex-desc = A warm poncho for extreme weather. Made of cut-proof fabric, and protects against freezing weapons as well. + +uplink-night-vision-goggles-name = Night Vision Goggles +uplink-night-vision-goggles-desc = High-tech goggles that allow you to see in the dark. + +uplink-thermal-goggles-name = Thermal Goggles +uplink-thermal-goggles-desc = High-tech goggles that allow you to see heat signatures. These ones look like Night Vision Goggles to avoid detection. diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 0b6cb2199f..02d1968bce 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -228,7 +228,6 @@ - Equipment - FauxTiles - Botany # DeltaV - - SpecOpsGoogles # DeltaV - Surgery # Shitmed change - type: EmagLatheRecipes emagDynamicPacks: @@ -443,7 +442,6 @@ - SecurityRubberAmmoStatic - PrisonerSoftsuits - EVASuit - - SpecOpsGoogles # End DeltaV Additions dynamicPacks: - SalvageSecurityBoards @@ -453,6 +451,7 @@ - SecurityExplosives - SecurityAmmo - SecurityWeapons + - SpecOpsGoogles # DeltaV #- SecurityDisablers # DeltaV - made roundstart - type: MaterialStorage whitelist: diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 61cf08f141..7a3f8c1958 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -57,7 +57,7 @@ jumpsuit: ClothingUniformJumpsuitOperative back: ClothingBackpackDuffelSyndicate mask: ClothingMaskGasSyndicate - eyes: ClothingEyesNightVisionGogglesNukie # Goobstation + eyes: ClothingEyesHudSyndicate ears: ClothingHeadsetAltSyndicate gloves: ClothingHandsGlovesCombat outerClothing: ClothingOuterHardsuitSyndie @@ -115,7 +115,7 @@ parent: SyndicateOperativeGearFull equipment: pocket2: AgentUplinkRadio45TC # DeltaV - allows them to buy Agent armor - eyes: ClothingEyesNightVisionGogglesNukie # Goobstation + eyes: ClothingEyesHudSyndicateAgent outerClothing: ClothingOuterCoatCybersunWindbreaker # DeltaV - removal of armor # shoes: ClothingShoesBootsMagSyndie # DeltaV - removal of armor id: SyndiAgentPDA diff --git a/Resources/Prototypes/_DV/Catalog/Uplink/wearables.yml b/Resources/Prototypes/_DV/Catalog/Uplink/wearables.yml index 36071dba85..43596ade1e 100644 --- a/Resources/Prototypes/_DV/Catalog/Uplink/wearables.yml +++ b/Resources/Prototypes/_DV/Catalog/Uplink/wearables.yml @@ -63,3 +63,25 @@ Telecrystal: 2 categories: - UplinkWearables + +- type: listing + id: UplinkNightVisionGoggles + name: uplink-night-vision-goggles-name + description: uplink-night-vision-goggles-desc + icon: { sprite: _White/Clothing/Eyes/Goggles/nightvision.rsi, state: icon } + productEntity: ClothingEyesNightVisionGoggles + cost: + Telecrystal: 3 + categories: + - UplinkWearables + +- type: listing + id: UplinkThermalGoggles + name: uplink-thermal-goggles-name + description: uplink-thermal-goggles-desc + icon: { sprite: _White/Clothing/Eyes/Goggles/thermal.rsi, state: icon } + productEntity: ClothingEyesThermalVisionGogglesSyndie + cost: + Telecrystal: 5 + categories: + - UplinkWearables diff --git a/Resources/Prototypes/_DV/Catalog/VendingMachines/Inventories/salvage_points.yml b/Resources/Prototypes/_DV/Catalog/VendingMachines/Inventories/salvage_points.yml index cbae1bb38c..0b29fec94f 100644 --- a/Resources/Prototypes/_DV/Catalog/VendingMachines/Inventories/salvage_points.yml +++ b/Resources/Prototypes/_DV/Catalog/VendingMachines/Inventories/salvage_points.yml @@ -20,6 +20,8 @@ cost: 400 - id: ClothingEyesGlassesGarMeson cost: 500 + - id: ClothingEyesNightVisionGoggles + cost: 2000 - id: ClothingBeltSalvageWebbing cost: 500 - id: PlasteelArmingSword diff --git a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/skia.yml b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/skia.yml index b5e35b1054..f1989010d0 100644 --- a/Resources/Prototypes/_DV/Entities/Mobs/NPCs/skia.yml +++ b/Resources/Prototypes/_DV/Entities/Mobs/NPCs/skia.yml @@ -16,6 +16,9 @@ Base: skia Dead: Base: dead + - type: SlowOnDamage + speedModifierThresholds: + 100: 0.9 - type: MobState allowedStates: - Alive @@ -27,15 +30,17 @@ - type: Damageable damageModifierSet: ManifestedSpirit damageContainer: BiologicalMetaphysical - - type: Armor - modifiers: - coefficients: - Blunt: 0.4 - Slash: 0.4 - Piercing: 0.4 - Heat: 0.8 - Radiation: 0.2 - Caustic: 0.2 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 160 + mask: + - SmallMobMask + layer: + - SmallMobLayer - type: MovementSpeedModifier baseWalkSpeed: 2.25 baseSprintSpeed: 3.75 diff --git a/Resources/Prototypes/_DV/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/_DV/Entities/Structures/Machines/lathe.yml index 721aa65fe6..93bcc9b58f 100644 --- a/Resources/Prototypes/_DV/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/_DV/Entities/Structures/Machines/lathe.yml @@ -89,7 +89,6 @@ - EngineeringWeapons - FauxTiles - Equipment - - SpecOpsGoogles - UpgradeKits - UpgradeKits_Goob - EngineeringHardsuits @@ -131,7 +130,6 @@ dynamicPacks: - Equipment - Mining - - SpecOpsGoogles - SalvageWeapons - SalvageHardsuits - type: Machine @@ -218,7 +216,6 @@ - ScienceEquipment - ScienceClothing - ScienceWeapons - - SpecOpsGoogles - Chemistry - PowerCells - type: Machine diff --git a/Resources/Prototypes/_Goobstation/Recipes/Lathes/Packs/misc.yml b/Resources/Prototypes/_Goobstation/Recipes/Lathes/Packs/misc.yml index 5e308ff40e..1c79bd0be8 100644 --- a/Resources/Prototypes/_Goobstation/Recipes/Lathes/Packs/misc.yml +++ b/Resources/Prototypes/_Goobstation/Recipes/Lathes/Packs/misc.yml @@ -12,4 +12,3 @@ id: SpecOpsGoogles recipes: - ClothingEyesNightVisionGoggles - - ClothingEyesGlassesThermal \ No newline at end of file diff --git a/Resources/Prototypes/_RMC14/Effects/base.yml b/Resources/Prototypes/_RMC14/Effects/base.yml new file mode 100644 index 0000000000..53b6294b9f --- /dev/null +++ b/Resources/Prototypes/_RMC14/Effects/base.yml @@ -0,0 +1,5 @@ +- type: entity + id: RMCBaseEffect + abstract: true + components: + - type: RMCEffect diff --git a/Resources/Prototypes/_RMC14/Effects/screech.yml b/Resources/Prototypes/_RMC14/Effects/screech.yml new file mode 100644 index 0000000000..4b65cd8edb --- /dev/null +++ b/Resources/Prototypes/_RMC14/Effects/screech.yml @@ -0,0 +1,18 @@ +- type: entity + # Just fades out with no movement animation + parent: RMCBaseEffect + id: CMEffectScreech + categories: [ HideSpawnMenu ] + components: + - type: TimedDespawn + lifetime: 3.2 + - type: RMCXenoScreechShockWave + - type: Sprite + sprite: _RMC14/Effects/xeno_screech.rsi + noRot: true + state: screech + drawdepth: Effects + - type: EffectVisuals + - type: Tag + tags: + - HideContextMenu \ No newline at end of file diff --git a/Resources/Prototypes/_RMC14/Shaders/shaders.yml b/Resources/Prototypes/_RMC14/Shaders/shaders.yml new file mode 100644 index 0000000000..9ff98d6ef2 --- /dev/null +++ b/Resources/Prototypes/_RMC14/Shaders/shaders.yml @@ -0,0 +1,4 @@ +- type: shader + id: RMCXenoScreechShockWave + kind: source + path: "/Textures/_RMC14/Shaders/screech_shock_wave.swsl" diff --git a/Resources/Prototypes/_White/Entities/Clothing/Eyes/goggles.yml b/Resources/Prototypes/_White/Entities/Clothing/Eyes/goggles.yml index 964cf293d0..038790f08e 100644 --- a/Resources/Prototypes/_White/Entities/Clothing/Eyes/goggles.yml +++ b/Resources/Prototypes/_White/Entities/Clothing/Eyes/goggles.yml @@ -74,9 +74,9 @@ description: A high-tech pair of thermal goggles. components: - type: Sprite - sprite: _White/Clothing/Eyes/Goggles/sthermals.rsi + sprite: _White/Clothing/Eyes/Goggles/nightvision.rsi # Look like standard NVs to avoid gank. - type: Clothing - sprite: _White/Clothing/Eyes/Goggles/sthermals.rsi + sprite: _White/Clothing/Eyes/Goggles/nightvision.rsi - type: ThermalVision flashDurationMultiplier: 2 isEquipment: true diff --git a/Resources/Prototypes/_White/Research/experimental.yml b/Resources/Prototypes/_White/Research/experimental.yml index 34b80578da..bc4a8cf78f 100644 --- a/Resources/Prototypes/_White/Research/experimental.yml +++ b/Resources/Prototypes/_White/Research/experimental.yml @@ -23,17 +23,3 @@ - ClothingEyesNightVisionGoggles technologyPrerequisites: - MagnetsTech - -- type: technology - id: ThermalVisionTech - name: research-technology-thermal-vision - icon: - sprite: _White/Clothing/Eyes/Goggles/thermal.rsi - state: icon - discipline: Experimental - tier: 2 - cost: 10000 - recipeUnlocks: - - ClothingEyesGlassesThermal - technologyPrerequisites: - - MagnetsTech diff --git a/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json new file mode 100644 index 0000000000..0d9e8d5bad --- /dev/null +++ b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/d5b119380250ea512db2a5319e36592c7f604250/icons/effects/xeno_screech.dmi", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "screech", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png b/Resources/Textures/_RMC14/Effects/xeno_screech.rsi/screech.png new file mode 100644 index 0000000000000000000000000000000000000000..e93bed0eab975c891358228d87ff9f817bf6b4c6 GIT binary patch literal 2426 zcmajhdoC47Z9}JOOMgB4ALG5; z!z{_#@+FjmOp~>ZWQ3@lgl(ir*4N^r=KM-USBP``3k^icl`oYoNQ8REO84R^?y?hV zd_x#{fLGNe{W=6_y&dX_@L-jQpH4>3r;F@pABen9>*^+=b=SFOkk-3az+5kL<$1+Z z8wGMjVBaE)v@199j62S2=9-@ArPRD_J{M+B*>;fRl7eQ+;LZ zQ)rY_bsoD~?5p@j1sKwIn1phVC!0xDR;X_ouX;slODkuG8$I&abz&ZGoqL>x#L>-p z1;a)fJ6RQmKUt~tGHDz2PsFDB=6!2z-9t_^%Y>oGA3#AFpLwQc0tqGvI!26E8V_q#@?l4Y_j2}%*cvUKYW>a{Pv8x&guEx z>Jq1k?TZUOwAQr-b#x1QXEK&Ok&<^%k*8Y9=JDb|K6+`3{m%OMv-*e6h_X802n1tq~J z@C*XjDuaB~vS-Yw)z-{K(kQ4?qx-BXE@NeW!Lt|2f+@tXGTiGDah9kgHk{@GF^5Xp zf&Ismz+2uBG$k|xupKP}qC?C99eE7_)NyF=XOpE$(@G4Uk&ZQv6ij+)Q+EB>A{-or zYUjHj5+qcCBEo-SQ8^;_enh?U$a88tVgd#21@!$6F0p5`&_!Hetk&tYikE?B#{Qr_ zMiClJ8~hrXx@xMb^L(xfhrJutkqNo49KWu2Jggh?a5-QGSse-GLmzcOt2bG$sGyW8 zzxeojxYYJZA$y8ae2*TX>t@*!twGAe>tSGHfyj+9O+04?QF2}m2yazNwYZQwQ)G(r z?PyCK)<~G>t1XBMru7}tOmCYSyM8_Jaj4@ne*F#FjGq4fH1t7#8lOy#xt7`mSq+uO z?&EOz*EycFrRsSh#3P=TiME{Zz$R{N-}}m~*GBcGu9qo#u@wIyuk9sxQq1lL2GTnm z_XyM`4R_`~SX?R#*42CTyOe;%*4NRI!s=sS#{j%4t75mKq^rQ9PC37nx|m5m-6ATd znd-bf1d2&WM~fgeRae9f4gBX9BVN2uc1{k|=HCTD9XF2LUL6$kv`iSee0Bi1U{_62Ifql^4$-K!x`dQp|&&Nr23EA#b4dJqJ7HM-P0{wWY>I!x$;$ zf7euq!Ao1*lwtkmxOtoRTP}mX2euXR{{im52zhyLLq%gBNlViu34g~D0=^~)4w&Qq z?g_tDhD@N~o60DMVRal51f)!#54k705`~J{ZlO;{&^_^?!|_5KfWcTm|2uqPjx1^-k}-bW5ev%|SB{e%#~S&*8t6mW>JZ zfFm!A>FK*dn3>9WuNDl!Lg};8rb2QGRzi{aYp$}xih~Ed>-E#`;o{OJzl!>-^W2iQ zJ=N!vAN@{?-jGkRtEqN{t!!V+rH=*8?LVnNuUS=+FXCrECVIdFi#`^Lqnpk>SO{b% zBaDw}xsS&k1)ERuS86?q5W1#&DDn>yhO5vVz^;pnmWT9)SYcsfH^q0qkgY){ht#pl z7vafCr$)d^Qix3!3U~Z=rBZ4B1rA>C9XkhH#=TmcaM|LGKORyS<1C_E8_SsABoX?NN;Ph?o1m1qXJw{ZJfGUwhWitqAM zj!OMevai*o9nlq-mGnZ1|FvCA38#HLvD2r7qviepv>GIM>{k~zefa1>J zu&=_N%JKG^_h@RW;jP!V%{KBh#YN2QkpmXeK5#=xQ9H)Mc7Bk|?Cm6w*lLdZ;ri~1 z!TAD8nMzYnve`k@XS)`(t~-xxkY-sSo|h=bk)& zNWGm|_(Ya-Pn?^aj3Q)P3gkjz@||Z?6l_O(J3_p)8KhrvnZj7LxIWoH8IhciLA9Sb zOIF{aesSZ?Cgpjr_-Ntkmb%`ky}K=}CMbi!iV6ydrqh=fZmK21VdT!Kg7%g2pV6nb z1Lq8)h*(Vem)k|TbFR?fzzr;du+KN1KPA-YxM5rYk~XQFJ&bxsFT5F^kalCDz(&zc zQW4L`7kqDg?IZxVjdSR;)&2tn^R0mMrpkg7KY8bXGDkJ83XSr1f7ZW$1N+86^-hIs pD*(rL%p;CO%{~3@pC29j<=uA{oX?jF