From efdb28c42a9bc99f1bf6c142e8af3ce17b8f1b1b Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 19 Feb 2025 22:41:28 -0500 Subject: [PATCH] Port And Update Cybersun Stealth Hardsuit (#866) (#1807) # Description Ports the Cybersun Stealthsuit by popular demand. I've made a few changes to it for this codebase to better accomodate for some of our MRP standards, including making sure that it correctly modifies the sound emitter that all hardsuits share. Rather than deleting the sound effects, it modifies them to be significantly quieter, with harsher falloff such that it can only be heard to a maximum distance of 5 tiles. Its stats and costs are rebalanced around being weaker for fighting, but it by extension a lot cheaper than it is on LRP. I spent more time trying to figure out how to fix the stealth movement balance to something I was satisfied with, than I did porting the suit. It also got a new name to match the naming scheme of the other Cybersun suits. For EE's code, it's balanced a lot differently than it is on Goob LRP. It's cheaper here than it is there, and more strongly favors the "Stealth" side of balance than it does combat. If you move sufficiently slowly, you can remain in stealth. It makes noise like a "Light" hardsuit, but is significantly muffled. It offers less protection than the Security tacsuits. It's really not for direct combat, and is *strongly* meant to play to the metal gear 4 fantasy.

Media

![image](https://github.com/user-attachments/assets/db30c1a5-af8e-4748-bc52-4dcc61833eaf)

# Changelog :cl: - add: Ported the Cybersun Stealthsuit from Goobstation, with some updates for the EE Codebase. --------- Co-authored-by: starch (cherry picked from commit 93eba0855fad629981732005e0c3b4bb2973b8ff) --- .../BreakStealthOnAttackComponent.cs | 6 ++ Content.Shared/Stealth/SharedStealthSystem.cs | 19 +++++ .../_Goobstation/store/uplink-catalog.ftl | 3 + .../clothing/head/hardsuit-helmets.ftl | 2 + .../clothing/outerClothing/hardsuits.ftl | 3 + .../Catalog/Fills/Backpacks/duffelbag.yml | 13 ++++ .../_Goobstation/Catalog/uplink_catalog.yml | 14 ++++ .../Clothing/Head/hardsuit-helmets.yml | 29 ++++++++ .../Clothing/OuterClothing/hardsuits.yml | 64 ++++++++++++++++ .../Entities/Debugging/nukiestealth.yml | 70 ++++++++++++++++++ .../cybersunstealth.rsi/icon-flash.png | Bin 0 -> 4599 bytes .../Hardsuits/cybersunstealth.rsi/icon.png | Bin 0 -> 444 bytes .../Hardsuits/cybersunstealth.rsi/meta.json | 25 +++++++ .../off-equipped-HELMET.png | Bin 0 -> 706 bytes .../on-equipped-HELMET.png | Bin 0 -> 4877 bytes .../equipped-OUTERCLOTHING.png | Bin 0 -> 1443 bytes .../Hardsuits/cybersunstealth.rsi/icon.png | Bin 0 -> 510 bytes .../cybersunstealth.rsi/inhand-left.png | Bin 0 -> 551 bytes .../cybersunstealth.rsi/inhand-right.png | Bin 0 -> 557 bytes .../Hardsuits/cybersunstealth.rsi/meta.json | 26 +++++++ 20 files changed, 274 insertions(+) create mode 100644 Content.Shared/Stealth/Components/BreakStealthOnAttackComponent.cs create mode 100644 Resources/Prototypes/_Goobstation/Catalog/Fills/Backpacks/duffelbag.yml create mode 100644 Resources/Prototypes/_Goobstation/Entities/Debugging/nukiestealth.yml create mode 100644 Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon-flash.png create mode 100644 Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon.png create mode 100644 Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/meta.json create mode 100644 Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/off-equipped-HELMET.png create mode 100644 Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/on-equipped-HELMET.png create mode 100644 Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/icon.png create mode 100644 Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-left.png create mode 100644 Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-right.png create mode 100644 Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/meta.json diff --git a/Content.Shared/Stealth/Components/BreakStealthOnAttackComponent.cs b/Content.Shared/Stealth/Components/BreakStealthOnAttackComponent.cs new file mode 100644 index 0000000000..ce92ee92c1 --- /dev/null +++ b/Content.Shared/Stealth/Components/BreakStealthOnAttackComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Stealth.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class BreakStealthOnAttackComponent : Component { } diff --git a/Content.Shared/Stealth/SharedStealthSystem.cs b/Content.Shared/Stealth/SharedStealthSystem.cs index cdb1ef87ca..e66a36f741 100644 --- a/Content.Shared/Stealth/SharedStealthSystem.cs +++ b/Content.Shared/Stealth/SharedStealthSystem.cs @@ -1,7 +1,10 @@ using Content.Shared.Examine; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs; using Content.Shared.Mobs.Systems; using Content.Shared.Stealth.Components; +using Content.Shared.Throwing; +using Content.Shared.Weapons.Ranged.Events; using Robust.Shared.GameStates; using Robust.Shared.Timing; @@ -25,6 +28,9 @@ public abstract class SharedStealthSystem : EntitySystem SubscribeLocalEvent(OnExamineAttempt); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnMobStateChanged); + SubscribeLocalEvent(OnThrow); + SubscribeLocalEvent(OnAttack); + SubscribeLocalEvent(OnShoot); } private void OnExamineAttempt(EntityUid uid, StealthComponent component, ExamineAttemptEvent args) @@ -188,6 +194,19 @@ public abstract class SharedStealthSystem : EntitySystem return Math.Clamp(component.LastVisibility + ev.FlatModifier, component.MinVisibility, component.MaxVisibility); } + private void OnThrow(EntityUid uid, BreakStealthOnAttackComponent stealth, BeforeThrowEvent args) => BreakStealth(uid); + private void OnAttack(EntityUid uid, BreakStealthOnAttackComponent stealth, AttackAttemptEvent args) => BreakStealth(uid); + private void OnShoot(EntityUid uid, BreakStealthOnAttackComponent stealth, ShotAttemptedEvent args) => BreakStealth(uid); + + public void BreakStealth(EntityUid uid) + { + if (!TryComp(uid, out StealthComponent? stealth)) + return; + + BreakStealth(uid, stealth); + } + public void BreakStealth(EntityUid uid, StealthComponent stealth) => ModifyVisibility(uid, stealth.MaxVisibility, stealth); + /// /// Used to run through any stealth effecting components on the entity. /// diff --git a/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl b/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl index f94d63469d..938fc5e82a 100644 --- a/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/_Goobstation/store/uplink-catalog.ftl @@ -5,3 +5,6 @@ uplink-mech-teleporter-heavy-desc = Contains a heavily armored Cybersun mech wit uplink-mech-teleporter-assault-name = Assault Mech teleporter uplink-mech-teleporter-assault-desc = Contains a lightly armored Cybersun mech with an integrated chainsword, LBX AC 10 "Scattershot", SRM-8 Light Missile Rack and P-X Tesla Cannon. + +uplink-hardsuit-cybersun-stealth-name = CSA-91x "Èguǐ" tacsuit +uplink-hardsuit-cybersun-stealth-desc = A rare prototype tacsuit that features metamaterial plating which warps light around it to produce an "Invisibility cloak" effect. diff --git a/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl b/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl index 17b41b7001..2918cabb4d 100644 --- a/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl +++ b/Resources/Locale/en-US/prototypes/entities/clothing/head/hardsuit-helmets.ftl @@ -75,6 +75,8 @@ ent-ClothingHeadHelmetHardsuitCybersun = CSA-80UA helmet .desc = An incredibly sturdy looking helmet designed for the Guan Yu tacsuit. ent-ClothingHeadHelmetHardsuitJuggernautReverseEngineered = CSA-80UA helmet .desc = An incredibly sturdy looking helmet designed for the Guan Yu tacsuit. This one has been painted blue. +ent-ClothingHeadHelmetHardsuitCybersunStealth = CSA-91x helmet + .desc = A moderately protective sealed helmet designed for the èguǐ tacsuit. It features "Cloaking" metamaterials. ent-ClothingHeadHelmetHardsuitWizard = WZD-84 helmet .desc = A bizarre, gem-encrusted helmet from unknown origins. It provides some protection to its wearer without restricting their movements. ent-ClothingHeadHelmetHardsuitLing = organic space helmet diff --git a/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl b/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl index 5d7b55c163..224774322e 100644 --- a/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl +++ b/Resources/Locale/en-US/prototypes/entities/clothing/outerClothing/hardsuits.ftl @@ -102,6 +102,9 @@ ent-ClothingOuterHardsuitJuggernaut = CSA-80UA - "Guan Yu" tacsuit ent-ClothingOuterHardsuitJuggernautReverseEngineered = CSA-80UA - "Guan Yu" tacsuit .desc = The pride and joy of the Cybersun-Armaments Corporation, named after an ancient Sol' War God. Commonly known throughout the galaxy as a "Juggernaut". Matching its bulky appearance, it protects against all forms of damage. It feels VERY heavy. +ent-ClothingOuterHardsuitCybersunStealth = CSA-91x "Èguǐ" tacsuit + .desc = A rare prototype tacsuit that features metamaterial plating which warps light around it to produce an "Invisibility cloak" effect. + Unfortunately, it accomplishes this by trading a lot of protections that one would normally expect from a typical tacsuit. ent-ClothingOuterHardsuitWizard = WZD-84 - "Mana" tacsuit .desc = A bizarre gem-encrusted hardsuit. Famously used by members of the Wizard Federation in their operations. Contrary to it's appearance, it can protect its wearer from space and considerable amounts of physical trauma, it feels somewhat light. diff --git a/Resources/Prototypes/_Goobstation/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/_Goobstation/Catalog/Fills/Backpacks/duffelbag.yml new file mode 100644 index 0000000000..edd0d70040 --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Catalog/Fills/Backpacks/duffelbag.yml @@ -0,0 +1,13 @@ +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateStealthHardsuitBundle + name: cybersun stealthsuit bundle + description: "An advanced cybersun stealth tacsuit bundle." + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitCybersunStealth + - id: ClothingMaskGasSyndicate + - id: ClothingHandsGlovesCombat + - id: DoubleEmergencyOxygenTankFilled + - id: DoubleEmergencyNitrogenTankFilled diff --git a/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml index 60b6420371..b090c7eedf 100644 --- a/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml @@ -36,3 +36,17 @@ whitelist: tags: - NukeOpsUplink + +- type: listing + id: UplinkHardsuitCybersunStealth + name: uplink-hardsuit-cybersun-stealth-name + description: uplink-hardsuit-cybersun-stealth-desc + icon: { sprite: /Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi, state: icon } + productEntity: ClothingBackpackDuffelSyndicateStealthHardsuitBundle + discountCategory: rareDiscounts + discountDownTo: + Telecrystal: 35 + cost: + Telecrystal: 55 + categories: + - UplinkWearables diff --git a/Resources/Prototypes/_Goobstation/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/_Goobstation/Entities/Clothing/Head/hardsuit-helmets.yml index 50c93e1ce4..0a88d8171a 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Clothing/Head/hardsuit-helmets.yml @@ -21,3 +21,32 @@ Slash: 0.9 Piercing: 0.9 Heat: 0.9 + +# cybersun stealth + +- type: entity + parent: ClothingHeadHardsuitWithLightBase + id: ClothingHeadHelmetHardsuitCybersunStealth + suffix: stealth + name: cybersun stealth hardsuit helmet + description: A helmet with plating for stealth operations. + components: + - type: Sprite + sprite: _Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi + - type: Clothing + sprite: _Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi + - type: PointLight + color: green + - type: PressureProtection + highPressureMultiplier: 0.08 + lowPressureMultiplier: 1000 + - type: Armor + modifiers: + coefficients: + Blunt: 0.95 + Slash: 0.95 + Piercing: 0.95 + Heat: 0.95 + - type: ClothingGrantComponent + component: + - type: Stealth diff --git a/Resources/Prototypes/_Goobstation/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/_Goobstation/Entities/Clothing/OuterClothing/hardsuits.yml index 23812c039b..28bd09d920 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Clothing/OuterClothing/hardsuits.yml @@ -29,3 +29,67 @@ clothingPrototype: ClothingHeadHelmetHardsuitBlueshield - type: StaminaDamageResistance coefficient: 0.5 # 50% + + +# cybersun stealth + +- type: entity + parent: ClothingOuterHardsuitBase + id: ClothingOuterHardsuitCybersunStealth + suffix: stealth + name: cybersun stealth hardsuit + description: A hardsuit with stealth plating for operations, the shielding doesn't work while you're moving though! Needs the helmet on to finish the stealth field. + components: + - type: Sprite + sprite: _Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi + - type: Item + size: Huge + - type: Clothing + sprite: _Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi + onEquipFunctions: + - !type:TraitAddComponent + components: + - type: BreakStealthOnAttack + onUnequipFunctions: + - !type:TraitRemoveComponent + components: + - type: BreakStealthOnAttack + - type: PressureProtection + highPressureMultiplier: 0.05 + lowPressureMultiplier: 1000 + - type: ExplosionResistance + damageCoefficient: 0.75 + - type: Armor + modifiers: + coefficients: + Blunt: 0.85 # Metamaterials are quite brittle + Slash: 0.75 + Piercing: 0.70 # But at least it can have steel plates underneath. + Heat: 0.75 + Radiation: 0.85 + Caustic: 0.85 + - type: ClothingSpeedModifier + walkModifier: 0.8 + sprintModifier: 0.85 + - type: HeldSpeedModifier + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetHardsuitCybersunStealth + - type: Tag + tags: + - Hardsuit + - WhitelistChameleon + - type: ClothingGrantComponent + component: + - type: StealthOnMove + passiveVisibilityRate: -0.65 + movementVisibilityRate: 0.575 + - type: EmitsSoundOnMove + soundCollection: + collection: FootstepHardsuitLight + params: + volume: -12 + maxDistance: 5 + rolloffFactor: 1.2 + # SIGNIFICANTLY Quieter than a normal hardsuit, but not perfectly stealthy. If you move while people are close enough, they can still hear it. + - type: StaminaDamageResistance + coefficient: 0.85 # 15%. Substantially lower than a normal hardsuit. diff --git a/Resources/Prototypes/_Goobstation/Entities/Debugging/nukiestealth.yml b/Resources/Prototypes/_Goobstation/Entities/Debugging/nukiestealth.yml new file mode 100644 index 0000000000..eb76b17a1c --- /dev/null +++ b/Resources/Prototypes/_Goobstation/Entities/Debugging/nukiestealth.yml @@ -0,0 +1,70 @@ +- type: entity + parent: ClothingOuterHardsuitBase + id: ClothingOuterHardsuitSyndieStealthDebug + suffix: DEBUG, DO NOT MAP, stealth + name: syndicate stealth hardsuit + description: A hardsuit with stealth plating for operations, the shielding doesn't work while you're moving though! Needs the helmet on to finish the stealth field. + components: + - type: Sprite + sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi + - type: Item + size: Huge + - type: Clothing + sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi + - type: PressureProtection + highPressureMultiplier: 0.05 + lowPressureMultiplier: 1000 + - type: ExplosionResistance + damageCoefficient: 0.5 + - type: Armor + modifiers: + coefficients: + Blunt: 0.65 + Slash: 0.65 + Piercing: 0.65 + Heat: 0.7 + Radiation: 0.55 + Caustic: 0.7 + - type: ClothingSpeedModifier + walkModifier: 0.95 + sprintModifier: 0.95 + - type: HeldSpeedModifier + - type: ToggleableClothing + clothingPrototype: ClothingHeadHelmetHardsuitSyndieStealthDebug + - type: Tag + tags: + - Hardsuit + - WhitelistChameleon + - type: ClothingGrantComponent + component: + - type: StealthOnMove + passiveVisibilityRate: -0.5 + movementVisibilityRate: 0.4 + + +- type: entity + parent: ClothingHeadHardsuitWithLightBase + id: ClothingHeadHelmetHardsuitSyndieStealthDebug + suffix: DEBUG, DO NOT MAP, stealth + name: syndicate stealth hardsuit helmet + description: A helmet with plating for stealth operations. + components: + - type: Sprite + sprite: Clothing/Head/Hardsuits/syndicate.rsi + - type: Clothing + sprite: Clothing/Head/Hardsuits/syndicate.rsi + - type: PointLight + color: green + - type: PressureProtection + highPressureMultiplier: 0.08 + lowPressureMultiplier: 1000 + - type: Armor + modifiers: + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 + Heat: 0.9 + - type: ClothingGrantComponent # this is horrible shitcode i have to do because clothinggrantcomponent only works with 1 comp per clothing item + component: + - type: Stealth diff --git a/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon-flash.png b/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon-flash.png new file mode 100644 index 0000000000000000000000000000000000000000..902c847556bf6305011f103e830f2b27086f2329 GIT binary patch literal 4599 zcmeHLdsGu=77r@&#@d3qtd?=Cin^1`gvo0pDiD+ik>@HDEly@8VSqeL1`^P!r3z?- zRz;~=Ulmm9whCQ~$oj-Z6d!A~=z^<2l>^n4HOcbH96k z_uk*V-*@t5MeM8@KAr)d0)fCs9jS^3Pl&(W2ZL{GZtg>Yz$K3j506!cheKwINyla~ z0zuIEb*rO-RBa_rcO{9!<4ficT*{*wxuF`Sw%d_T+7&%8-^lBL=mcs=08X@a?S| zzTLB>qI_tP@vcu}n$puZmh2E#wkOB#^cwPRvTXccpsPnVHcq@g z)Hfw+de~2i2QIGj@@$=S?M$cRM&i+pr@d<{+dnoZCB^txCZA|pli~Hmqk3%Sj0gMe zTi#lE*{|h}f5+`Dcb9LE(C5y)BTo4pv&v)K1uU7|fGZBtS*m{(o?cwG?8w-E#;k1g zyDVNW&p$Pv8npOQ;In&8QI8+rS{pWW_o4^StFw1E=k3+Bz6g2veD9c`CCj{awVfY% z^k{ASCf6?vfdNhb_@Qdsh8FW-m$O5X>m&mz=I&e{eY|7EqKn@6yzsMg4_9w}zxX~h zZeCI9v3qZGW$!FJe4=)bW8u@z=)VQ7Hf@ix)UGz%vpRvm-fW0%@u@@IpFQy#^+Bn}s+)MlB_CpOrRKA;yXq<4 z1?N7gT5^5wgLbF{&cd?(=w9eZa5#>se!mL(&@HIE!Su-D={L5xAy{(u=N-knj(H=- zM_T&4UsG+{nx7w2B|{c$-5pa|zIxZti+-q2^Rr>QTP)9yAFLZCjk$BHCC&BWr{9k+ z9s70lxAuY++0*mq>oyNGPmMpYeCdahfQ6L{imv?or}RJEYTe>nA{xFed4;WP_Q#+Z zvssW)k|vsuIo3xD3ZZLyX1%i;Nb~8z3FdU?1^sG?{->*FaLoBU?=SVcD#vIP1 zv5~nJCLwoLB9)s#DQI}=6weSl0RRjPM?!W(rqN2+m9P_+0ApS(f+430m!X7{G_g>) z$-+Rm5Er6Igq_V6!&5w=5DTp%;#JeTA;6mwPUAQ;ArjeaHlZz8XtL-sug&}UU4}?t%>ci;3?3v2D8%&ko}4#$Le~?dL=e~#+gpvK!AAqtwhEkxCEDBT7^WXkkfr2Vk|7^N;0!= zR6G>TL&>E&39iKvnT*5{97p8{DMMw5RElXa9gifJI-zKam~OHdNKj7JK6kvyN6EEtoCCAdU}2TR4$KK8R2 zixu=DkBXtf;I1I}!Vn-GKrP94Dgbc8f^3Lz3qx`yOQOk?sf78UAl|ZPS_2joO>(4) zoig5zN2uzxYiU|oyNF0<} zb-iY?&cy^l&SgQ6R96aCGMnit7r^S8qS8pCo&ozucf-Dvv%k^|lvo=qV<;U$DR2_O zF_K2KI3`BqGE5HYiQ{7WKhUiv9cLpgOsF342)F_b>f{Ov>Mqp;Cu=>?*wPrj4uCQQ z!;oIeWU#0^SrNZuyv#O4^k000I2HPAF~F`%2DUD+6N-Aa!fw8R@89z3uETHX0)qOT zycWOxboJBqS`56Fa({RA)Ad>myq0o*cm3b!^6WiKF-GtU$Oeu|m)`p#9UQX;YolhU z1l9cK+`jF{fW(bcYa-m*z1|ogR&0AZuL=A&P^eagCMM1JaqZceb<_Noo6=()QzPTO z_pi(@Pa5DlJnzeSO>S?@Is8#ns;X2tw`M^~^XA=YFUma1C$3D>o~H*>>Qml>uAXtL zySky~OpVnT7Em;Oy`j+~=aZE)jm76*5>X7>|Zswed1JUa6 z?{2;oIe8zN>V0|Vz;S=Ro3!YOC`P&U-Oc*kXJ;-nW{gj9gM{eifzm-YJM6}Qc-N!N z*X|B;boxs%i1@1WuXB#*8`c>LN;Gc%vSmNMcWnIqx|_A9u6!l^`}>alH>=`e4y7J+ zJ+5`dnt@Osf$rh0)g3 zh$AVFu9SsNiXC=24G(}n3tV@7&B^V)6E1=>`7%jrokk;=2*&Q<=C5xO*76T^#4Od9 IVe|8T0n)msJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon.png b/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e08dc20a8c5a83811ab35c4bc0415f73c68c855 GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xC!Q9iuF(ktM?UapP%#H$W$3?`mM5RGuP?g zvfQ-#$nOhc4}X97B-8ueu0`d?uG34dum3A!m-B4H-WehnCZB(o?0KdAVv%Sp7f=2y zqg{V{D@*rl*|nP1*Z`%qIb;leMYHXFZ@*V;+gGhwA_@YG6Q@0SQ&Rl=#+i+6{m*3$ zEHyPQ+OB_F+aY&f?AenCS`1q{jP{&77|RggVzB*#n!kz=r{F}>|Gpip9v3r}f#J%R f8sVAd>&u`8WOD#92wV!D45B<;{an^LB{Ts5(6O}x literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/meta.json b/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/meta.json new file mode 100644 index 0000000000..c7fa1cabe6 --- /dev/null +++ b/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprites made by InfinityPandaRed for Goobstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "icon-flash" + }, + { + "name": "off-equipped-HELMET", + "directions": 4 + }, + { + "name": "on-equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/off-equipped-HELMET.png b/Resources/Textures/_Goobstation/Clothing/Head/Hardsuits/cybersunstealth.rsi/off-equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..53c9cabfcf4ee84171e969574835e41c7dfc0a2e GIT binary patch literal 706 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 SAEGyqH)+rU@wWlVpZ^yXNhdM@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..311aab9ba8272cc4f740ed4a38a76ca07284c07a GIT binary patch literal 1443 zcmV;U1zh@xP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&1s+L6K~#8N?V8_< z4pA7#XE)o1sNJwOM3S&6yEiVB4Q-KocP?DWAEn&5bLB=UNiN->aY z&d&GsIOd%_XJ*a_^QqIBIdk6gea>^9bI#1XlXY}-baZrdbo{Rj<@sO7f$@o6ewaO4 zTCCiUs2|Qv9qhe&{U%%f@F|=Byxjlo_R)>KjqBHD+a|YUHy%Dn=G57t4ZXKx>)bI~ z0-Ip-yN}uJ-uo#1;XGfJbH`_0=Mko}jDV6l&vokMKWP-4Z##c$W;{E3^_$D(46akp zodgo(06I0lxa3A&PB?sMUq7kyE;4@9YuX96Q)q3U7|(W`e3xB3G3s*8p(j=*Vlh}eJneF^Rvq>)T4f=e()3kLS0c{(dctM zC1}t=oPPFImOa0)$>p3=&h=PI9Y826v=+`x_d6*=lx#WmfZx@f3cfy|gTrkEaxUk` z>X$lz#>Lmmx83S0FC#c|X;)uZ<*Env_f;s;2Rg^RSCW$;R=;%1&^)4ZY-$Lg0x0Kz1oQ9BLb>FIqgSLeAdBkgaSK>9#u=Z;MG6X)1q z^+PFj0G=fQ0$Z=#>vtCRUVGwlIYrmO{~b}VfD%w{>otWs1LWF)igH^o)P_~(C-aa_EiAtNWo}8timBe#iOJshmv6P^zfefq zHNfiH+^@&6D=Z<(K)Wb`6_yj4==310evuO(RzGM82;KG~W`#+Vb3G+i-%>|E$^jNS zPl%EK37XQ6asVr?78`9z+8QYjx$&q&3jL`0;_tC`!4V+~PgPRrSDFHv_x^EPG^rou z0NvaWawO1k6E{AqLHl&JNT2d5`oRuhZ_f{Z^SC{?^_oOmAe8CbdLaZkfKHv7+UuUY z>>ZcjoN}&HuW2XHDYiIi7wO9e>cu!AI09Hnj*gCw zj*gChj;KdR{XH&pOPcZ#xC}iC+dD(v48{CKA6!xQ%J+d5Y_Ym} z6(-xTE7X>tXMr_mSN@};VIK_OF*Noeq$(N+JsSI9Ber65UQ|ku1N0xfz|(g0nHH2G zoYD!jjRsnpir9cHlnHFb<`9A$p#R_zLztw_lVg-!8&ZQ7n$`y2F8{lMK?FJA*xi*8 z2ZRYh!cQS6gW7O{uO&OMiE_YJYz`s#eSk&bhPM$X*LMOb7ed;$TG9qP1!4$t0NaXI zT7Q&f0LJjWKx&G`UF?pTEhJ9G)%I*L6DWGlpO@eaDwE%J+vmQh*f)WPn zeacDtR3!yk{K{;IC2GDBf_Phtjc*9&shHN=hmST!UnmOL?lj+HM_xp)0f4xFKhRd^!Pml;s*za9Xr8pR8bh0- zFBAoW?a_WD8A>Ii5zi0%{0Rr-hkaU|0#!pU1$FGH6#-fZnS*V;4H9}c0J`^REds#z zcu`2E!q=)3jg=jseV1)e?+4m&0vc$ci8eOqzN8AZ)&RHq|JaACK8x2uy4WCl;>oh_ xdq-g*E literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/icon.png b/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..474bca0f87d0f7fef76f71b8d4f068ef39ffd3d6 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=BdgAk26#O}+xCq0-aEF(ktM?NnQDW=DZG^&|nopd|(!jJi6D zlrmB^Il{hu`T+xS9fM^ ziqXt7`yXXgFTayje(Igm>Yil`wQqXdC(m}v$$lv>HzoXf`KDc)bo|e+zxb>9*7x%2 zqO!u5eXomLY7BIqe0vxe<=ySL=62@sK*3`I^1b&{i<5PGDkrZfP0G&XdWw< zaduLKbiLj-J&qoauN)yUt-&*9GDNRmU2A!BcE^PxnO_msbq8#owV&fjQ#)`|YyR{5 z>0KNOH*8|(uZep5ioNWgNlbaegXaFg=Az3}R~cmNfAw9xyg`BG>0LSIJM!P1RzKSH z_eb@SgHM-Klq<}NRS9p5^E&c{@r{|Lz9*-G+sTy^ayN>fT~g5aM6&E^*R5ywk6nCp zyf!X``F`bt`3aK~*x$_f&g687FW~yNZEssw_f>k@G5tOp{vzD|eB7kd2K)X+{WYmp xo4nHf33rJ3mp7U#pFal13}0%5XPU1sgBFm@0mLA1DR?r7@^tlcS?83{1OPXd*wg?3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-left.png b/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2eadf95d78c9e939b885852f871d743597ebf789 GIT binary patch literal 551 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTON!y-=?$B>G+x3_%#4mpUhe>gbTG3Md%Q!J+# zRSvdxvVUNjch-3YyFpH`v@O%rweo9R9tr(5pBpvH;rFw%Gkkvh=a}htn)^vCG9@3~UbCum7*DU@u9}V7yi99N5oz zcW>Foj#pZ*SRVY3-(9V8i)F$6WckLj_YPll7wl0FJU2sr`@hp?_qrd>0!ATUYJ_K+ buP=iZkj(+aAaE&oGKlhY^>bP0l+XkKv9s@6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-right.png b/Resources/Textures/_Goobstation/Clothing/OuterClothing/Hardsuits/cybersunstealth.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..b3d23c6752c18891da37992600c1e0eb5db6c139 GIT binary patch literal 557 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o30K$!7fntTON!wOFq$B>G+x3_kCF*}N|JqXlMQVaXo)G;B4 z%bPh{@y2WJCpX{ZF5WvSEJx%EV^5~eo+U7s%#aIt>Vg4+={a(urvJG|X8`_-Q{%P+Lgu8Y5GXZOVJ{p?L2^ATMS zv6l0|ru;Q)-6fs1eL=j2gSWF+O-;K8WS*F}L(e7`>_^m3^9wWRv8etluR`X`1zf;Rb=EiFXi^Na0R0!!9}FK6{QIY+o* zxn4l&-MhEM_HqF^v#j&lR!!}iH}Rw;;|{??Tnsz6mM`7M@Rj-WmBetP1;B{pOO5bM b^YvxW0