From 4c560761cc68fe3a1a3317668fb1980fa2084d14 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 12 Feb 2025 13:51:09 -0500 Subject: [PATCH 01/45] Derotate Unmaintained Maps. (#1772) # Description We have a very large number of maps that outright have not received any meaningful updates in over a year. All of them being maps that we inherited from DeltaV during the initial forking. I've spent the entire past year trying to find people willing to maintain them, but to no avail. The rot is incredibly noticeable, and is particularly egregious when they get compared to maps being maintained by SiN Mapping Team and Estacao Pirata. We can't guarantee the quality of these maps, and the original maintainers from DeltaV have expressed zero desire to offer any assistance with maintaining them. I put it to a vote last night on the EE Discord, in order to find out which of the DeltaV maps were actually worth keeping, and the vote was overwhelmingly in favor of Shoko, Glacier, and Lighthouse. I'm willing to work with my existing map maintainers to focus on getting these three maps the care and attention they need in order to be on par with the quality expectation that maps like Gax and Lambda managed to set. If we want more maps, we need people willing to maintain the maps. These maps aren't being removed from the game, just set aside and essentially marked as "Unsupported". If in the future someone wishes to step forward and claim responsibility for one of the maps, they can submit a PR to re-rotate the map in question, assuming it is paired with *some* amount of work done to refurbish the map. It doesn't need to be a full rework, just enough work to prove the map is being taken care of. ![image](https://github.com/user-attachments/assets/a5704df5-b7a1-4019-bab7-4b5b4a7e3542) # Changelog :cl: - tweak: Removed the following maps from rotation: Pebble, Edge, Tortuga, Arena, Asterisk, Hive, Hammurabi, and Submarine. These maps aren't permanently gone, they just won't appear in the map vote list. If you want to see them return in an official capacity, and have any talent/desire for mapping, feel free to submit a PR to give one of these maps the attention and care it deserves. None of them have received any updates in over a year. --- .../Tests/PostMapInitTest.cs | 42 +++++++-------- Resources/Prototypes/Maps/Pools/default.yml | 54 +++++++++++-------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 22b746d2c92..32d4a81b809 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -52,27 +52,27 @@ public sealed class PostMapInitTest "CentCommHarmony", "MeteorArena", "NukieOutpost", - "Core", - "Pebble", //DeltaV - "Edge", //DeltaV - "Saltern", - "Shoukou", //DeltaV - "Tortuga", //DeltaV - "Arena", //DeltaV - "Asterisk", //DeltaV - "Glacier", //DeltaV - "TheHive", //DeltaV - "Hammurabi", //DeltaV - "Lighthouse", //DeltaV - "Submarine", //DeltaV - "Gax", - "Rad", - "Europa", - "Meta", - "Box", - "Lambda", - "Bagel", - "Northway" + "Core", // No current maintainer. In need of a rework... + // "Pebble", // De-rotated, no current maintainer. + // "Edge", // De-rotated, no current maintainer. + "Saltern", // Maintained by the Sin Mapping Team, ODJ, and TCJ. + "Shoukou", // Maintained by Violet + // "Tortuga", // De-rotated, no current maintainer. + // "Arena", // De-rotated, no current maintainer. + // "Asterisk", // De-rotated, no current maintainer. + "Glacier", // Maintained by Violet + // "TheHive", // De-rotated, no current maintainer. + // "Hammurabi", // De-rotated, no current maintainer. + "Lighthouse", // Maintained by Violet + // "Submarine", // De-rotated, no current maintainer. + "Gax", // Maintained by Estacao Pirata + "Rad", // Maintained by Estacao Pirata + // "Europa", // De-rotated, has significant issues. + "Meta", // Maintained by Estacao Pirata + "Box", // Maintained by Estacao Pirata + "Lambda", // Maintained by Estacao Pirata + "Bagel", // Maintained by Estacao Pirata + "Northway" // Maintained by Violet }; /// diff --git a/Resources/Prototypes/Maps/Pools/default.yml b/Resources/Prototypes/Maps/Pools/default.yml index 43135e20283..9d8b8ac1963 100644 --- a/Resources/Prototypes/Maps/Pools/default.yml +++ b/Resources/Prototypes/Maps/Pools/default.yml @@ -1,24 +1,36 @@ - type: gameMapPool id: DefaultMapPool maps: - - Arena - - Asterisk - - Core - - Edge - - Glacier - - Hammurabi - - Lighthouse - - Pebble - - Saltern - - Shoukou - - Submarine - - Tortuga - - TheHive - - Gax - - Rad - - Meta - - Box - - Lambda - - Bagel - - Northway -# - Europa + # - Arena # De-rotated, no current maintainer. + # - Asterisk # De-rotated, no current maintainer. + - Core # No current Maintainer. In need of a rework... + # - Edge # De-rotated, no current maintainer. + - Glacier # Maintained by Violet, pending update. + # - Hammurabi # De-rotated, no current maintainer. + - Lighthouse # Maintained by the SiN Mapping Team, ODJ, and TCJ. + # - Pebble # De-rotated, no current maintainer. + - Saltern # Maintained by the SiN Mapping Team + - Shoukou # Maintained by Violet, pending update. + # - Submarine # De-rotated, no current maintainer. + # - Tortuga # De-rotated, no current maintainer. + # - TheHive # De-rotated, no current maintainer. + - Gax # Maintained by Estacao Pirata + - Rad # Maintained by Estacao Pirata + - Meta # Maintained by Estacao Pirata + - Box # Maintained by Estacao Pirata + - Lambda # Maintained by Estacao Pirata + - Bagel # Maintained by Estacao Pirata + - Northway # Maintained by Violet, pending update. +# - Europa # De-rotated. Has significant issues. + +# All maps marked as De-rotated are currently receiving no update support due to a shortage of map maintainers. +# If you want to see these maps return to official rotation, and have any talent with mapping, please feel free to get in contact with Old Dance Jacket. +# We have a mapping server where we can support arbitrarily any number of people wishing to cooperatively map together. Alternatively, you can +# choose to support a map solo. + +# We do this because these maps have not received any updates in over a year, and our efforts to find people willing to maintain these maps have gone +# largely unanswered. As a result, we can't guarantee their quality at all. + +# In order to make re-rotate a map, please submit a PR providing at least some amount of work to refurbish the map you wish to reintroduce. It doesn't even +# need to be a full comprehensive rework. Maybe like... Rework a department. Add an AI Satellite. Add decorative details. Do *something* cool. +# Show us that someone actually cares about the map enough to make it something people actually want to play on. From e0b1159fc9cf2ecb4919ce06c23b77c55a98370a Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 12 Feb 2025 18:51:56 +0000 Subject: [PATCH 02/45] Automatic Changelog Update (#1772) --- Resources/Changelog/Changelog.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b454a680ab7..8cb03748346 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11623,3 +11623,17 @@ Entries: id: 6840 time: '2025-02-12T17:33:25.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1771 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Removed the following maps from rotation: Pebble, Edge, Tortuga, Arena, + Asterisk, Hive, Hammurabi, and Submarine. These maps aren't permanently + gone, they just won't appear in the map vote list. If you want to see + them return in an official capacity, and have any talent/desire for + mapping, feel free to submit a PR to give one of these maps the + attention and care it deserves. None of them have received any updates + in over a year. + id: 6841 + time: '2025-02-12T18:51:09.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1772 From f8696b57ee0b7d303367ec808b57e13bf0ab0b3b Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 13 Feb 2025 04:16:04 +0800 Subject: [PATCH 03/45] Revert Rouny Sprite (#1770) --- .../Mobs/Aliens/Xenos/rouny.rsi/crit.png | Bin 5308 -> 1357 bytes .../Mobs/Aliens/Xenos/rouny.rsi/dead.png | Bin 5646 -> 2373 bytes .../Mobs/Aliens/Xenos/rouny.rsi/meta.json | 42 +++++++++--------- .../Mobs/Aliens/Xenos/rouny.rsi/running.png | Bin 14050 -> 3810 bytes .../Mobs/Aliens/Xenos/rouny.rsi/sleeping.png | Bin 2685 -> 600 bytes 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/crit.png index 72f56385f584a743197460d5597a09e4342f127f..0be8b9b1ddb6724ea152355e6589b13075437b12 100644 GIT binary patch delta 1330 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 O00006~aFxk!Y2Y#k57}IzQ zmUEmc6{Jjn^}zXHd_EXv)5k&ICEQ#{nt+R)`}u_n=YLUBewFLI3-7#s5XA)?Cz}`! ze(Fc*O-8}E2sqXLBc9`2h$Ur>Y;kctJ9X)4-ZgX#>u)>HLJl!t_M0I zJr^$(_J4YY@ppLKWAzcRLZN6+1rZ4e__(!%uU!0Fh9r@z&LK67qfQth=S$C*^w*el zA`%ktNaa;q$5SLlqD(Cl%O^Bu60^j#i=jw^MZ1r3f-P!ETGtGdXOkZs zaw(kiAQZU>k5+ait;|@YO+aKum}u7jQ+(Nh1?lX|HbO`saXV58vax$yw zKoBqelPbmQfE7kps~S$^cJLnGF<8b6NR(=*B@({zc#yYzz|&Ge>eV2vf7x2IF%YS6 z4S(`b88f4Q{I`rJ@7D43MhP|b4h-~#jx#c0?K%hY=K??9rUT8RW6J*r_h7%Qi9UiT z=PbZMH*U}Z8L1&st_H`N@g-2uL=^%&h$5l$D#y`w#WcLTGkT2Q2lM#$9Wq*)qt9J) zbCi@aC<<_u+P`{05BnV#k(~}QvINA8mwzn>Hay61;I)uapMOEZp524!^#pOhI?p_I z{%jC;-Y%K4w*?LD=>lFhIv|tG^Gb=p4NSZBR>@S!<#vuYAJS8bGVzc$0mAr(S0z00 zJqLzp(i<8kSsx`dUXuT|U4IT3PL7`6=irGoUhMls#=K$%Lk~&&m33##fLHzg?pr*n*HL0*Lcqk6>!tki?q>i>Wj%Sfe zbIft##4sKvbqE4PG^o0V!etYM&6-|Hk%zHLY_5%LDs8F?gwtO^!hfKdHFEfM19cTh z+jxPb2?!VgC=O-Z{e|n?-Vq-2^nCzs?+)&?UUjnNqg6=!yto>=pHn-sji*DxKK1(81#6amBD z&^kA41QwEhz;wdMFp_tIEPz`|6zu$oj@3uz+irNic2UvnvVXb0ZlIQ`K+91IGmaw;3#_Jp0;T@%(2KtQjpXhgo zX}=n?HZZM+UxGaCr&|W&$~8dFU=F3W2cCp`4e~YDjsdr8N9cvB-L_if{$SL7GlaB@ zA!~OyTpOr`sPYWPec8Erb)+f=!W%2Cl-Ktoeu$l@*MI35*$|1`BL9mg;cupF5xae6 zhlwB|W1FJp15Ltyex{d1Mt>wVk%q_mhfMvrB5Qvr8T*FGGWcE;X+>%-!spWbamADq zVCVUxep5&W#*$Et+$bfaL&B625F0__^|2)(W;vuv!jvl@-b>c8kVz7zoB#pw(A5AR z>wKgN1b>QSKc|u>WDNn41};-e(QYGW zJAV*+on%SK8Uiew@pPg>EynCPFJA4ILoAZX5wePa(2V&mSCH`!s0(mCj#G=wIxW~1 zQR8rmSw(AM>KAn&rYa4$6OfQ~1PE9Tu`4KvG4aatM94}4>?EGlSb-5gkw^vq Y2T4l%rHv@+#sB~S07*qoM6N<$f|%iCJOBUy literal 5646 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 diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json index f238edbb198..ce2209e72dd 100644 --- a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json +++ b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/meta.json @@ -1,24 +1,24 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Created by Fenndragon, discord ID: 190763499276861440", - "size": { - "x": 64, - "y": 64 + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/tgstation/TerraGov-Marine-Corps/blob/a2034543920664ddf0c0f3c681bf1d8003dc2ade/icons/Xeno/2x2_Xenos.dmi", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "running", + "directions": 4 }, - "states": [ - { - "name": "running", - "directions": 4 - }, - { - "name": "sleeping" - }, - { - "name": "dead" - }, - { - "name": "crit" - } - ] + { + "name": "sleeping" + }, + { + "name": "dead" + }, + { + "name": "crit" + } + ] } diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/running.png index 556dc97d7e95a0fc88cb2e0342a5500dffcfd105..2bbe1c603ebd34666782723ceaa52f655f4d388e 100644 GIT binary patch literal 3810 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 G@c#i~XE{s& diff --git a/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png b/Resources/Textures/Mobs/Aliens/Xenos/rouny.rsi/sleeping.png index 3bb814f467e329e83081a9769752ab8d19bc6757..06ff2250d0e740a42eceae131faba24c48988378 100644 GIT binary patch delta 567 zcmew>a)V`pPW=%E2EHSVQ?>b|85o$jJY5_^D(1YMX&ZFdK)`K(ljI9ylLNXt+`Rfc zPns5WI~?B8-gjbyWaZlVQ*}>gl*LbW=~H??dCR1!(i+EE94yrsP8l)=^l>&6`7lgL zW?CR4%Rq^Z*o>lx%NJcfwj)Y#`cUJ-}BW|=Je>X?s(AL_}_5n zw22p&HVEzD(Oam^crsBxVa;)s64e76O@4UR`a6{~-D~@NJc?6)$Nnq-WmJI@cMCFZ zYCnBlP<@hp|NGrS8(3qxRv7Yj#Iowhp40mgB{YlsL$e-l1ABd}vr{nRPT3ePxi!`G z<~5H^6%^HvT~(gN5wW|m^WmnSf}dYH1gnH@ziF4S`a$iVhLy5as+Rvsd_CSq`CJu3RSGXx~u=nhxxWV7vHUN)h|riJ5Bjpt(O1aYnc}QcKyK# zTZ$?jZa6nNZ(4Uf>UV5}IV zt&4guEJ@#UIjr!mN8Ze-tbF>a`-Pji*A=Nne0uJzx$v-epNjmB>-AsvH_VSQkoErD wm7?Nhz2awOLy43pbA+`}xvk)>A}Pzopr0ADToJpcdz delta 2668 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 Date: Wed, 12 Feb 2025 20:16:31 +0000 Subject: [PATCH 04/45] Automatic Changelog Update (#1770) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8cb03748346..d10ec7c91f9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11637,3 +11637,10 @@ Entries: id: 6841 time: '2025-02-12T18:51:09.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1772 +- author: Skubman + changes: + - type: Tweak + message: The Rouny sprite has been changed back into the old iconic sprite! + id: 6842 + time: '2025-02-12T20:16:04.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1770 From fb4ca1af6a48eda92f15b5a70273e27c2c352f22 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 12 Feb 2025 21:40:00 -0500 Subject: [PATCH 05/45] Planet Maps Prep For Glacier Rework (#1774) # Description Goddamn do I love Adderall. This PR lays the entire groundwork needed for the "Glacier Rework", and it does so by fixing every problem I could think of between FTL and StationBiome that was preventing it from being a reality. Essentially, I'm hitting several birds with one stone by refactoring both systems to be a LOT more flexible. You can technically say that this basically is also partly enabling Lavaland maps, since I conveniently included options in the StationBiomeComponent to generate dungeons. Technically a planet map should probably also have a RestrictedRangeComponent added to it so that players can't wander so far from the station that they generate a truly excessive number of entities. Yes, this does infact mean you can now run Nukie gamemodes on planet maps.

Media

https://github.com/user-attachments/assets/7a3730af-c521-42d4-8abd-5aa5989c369c

--- # Changelog :cl: - add: Shuttles can now take off and land from planet surfaces. They however will still respect exclusion zone beacons set by stations. Maybe in the future there might be a special shuttle (drop pod) that is set to ignore these exclusion zones. --------- Signed-off-by: VMSolidus Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- .../Shuttles/Components/ShuttleComponent.cs | 12 ++++++ .../Components/ShuttleConsoleComponent.cs | 30 +++++++++++++ .../Systems/ShuttleConsoleSystem.FTL.cs | 10 ++++- .../Systems/ShuttleSystem.FasterThanLight.cs | 10 +++-- .../Components/StationBiomeComponent.cs | 20 +++++++++ .../Station/Systems/StationBiomeSystem.cs | 39 ++++++++++++++--- .../Parallax/Biomes/BiomeComponent.cs | 4 +- .../Shuttles/Systems/SharedShuttleSystem.cs | 27 ++++++++---- .../Machines/Computers/computers.yml | 42 +++++++++++++++++++ 9 files changed, 174 insertions(+), 20 deletions(-) diff --git a/Content.Server/Shuttles/Components/ShuttleComponent.cs b/Content.Server/Shuttles/Components/ShuttleComponent.cs index 949d8ea5bb2..23cbaa42ef9 100644 --- a/Content.Server/Shuttles/Components/ShuttleComponent.cs +++ b/Content.Server/Shuttles/Components/ShuttleComponent.cs @@ -64,5 +64,17 @@ public sealed partial class ShuttleComponent : Component [DataField("angularDamping"), ViewVariables(VVAccess.ReadWrite)] public float AngularDamping = 0.05f; + + /// + /// How far from the shuttle's bounding box will it crush and destroy things? + /// + [DataField] + public float SmimshDistance = 0.2f; + + /// + /// Whether or not the shuttle calls the DoTheDinosaur function upon FTL'ing. I'm not explaining this, you owe it to yourself to do a code search for it. + /// + [DataField] + public bool DoTheDinosaur = true; } } diff --git a/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs index 03e262cef50..2cdbaabdd88 100644 --- a/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs +++ b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs @@ -20,5 +20,35 @@ public sealed partial class ShuttleConsoleComponent : SharedShuttleConsoleCompon ///
[ViewVariables(VVAccess.ReadWrite), DataField("whitelistSpecific")] public List FTLWhitelist = new List(); + + /// + /// How far the shuttle is allowed to jump(in meters). + /// TODO: This technically won't work until this component is migrated to Shared. The client console screen will only ever know the hardcoded 512 meter constant otherwise. Fix it in ShuttleMapControl.xaml.cs when that's done. + /// + [DataField] + public float FTLRange = 512f; + + /// + /// If the shuttle is allowed to "Forcibly" land on planet surfaces, destroying anything it lands on. Used for SSTO capable shuttles. + /// + [DataField] + public bool FtlToPlanets; + + /// + /// If the shuttle is allowed to forcibly land on stations, smimshing everything it lands on. This is where the hypothetical "Nukie drop pod" comes into play. + /// + [DataField] + public bool IgnoreExclusionZones; + + /// + /// If the shuttle is only ever allowed to FTL once. Also used for the hypothetical "Nukie drop pod." + /// + [DataField] + public bool OneWayTrip; + + /// + /// Tracks whether or not the above "One way trip" has been taken. + /// + public bool OneWayTripTaken; } } diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs index e2bb5887aa8..85260d2967b 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs @@ -114,6 +114,12 @@ private void GetExclusions(ref List? exclusions) /// private void ConsoleFTL(Entity ent, EntityCoordinates targetCoordinates, Angle targetAngle, MapId targetMap) { + if (ent.Comp.OneWayTrip && ent.Comp.OneWayTripTaken) + { + // TODO: Play a popup and a message in chat explaining you've already taken the one way trip. + return; + } + var consoleUid = GetDroneConsole(ent.Owner); if (consoleUid == null) @@ -143,7 +149,7 @@ private void ConsoleFTL(Entity ent, EntityCoordinates t List? exclusions = null; GetExclusions(ref exclusions); - if (!_shuttle.FTLFree(shuttleUid.Value, targetCoordinates, targetAngle, exclusions)) + if (!_shuttle.FTLFree(shuttleUid.Value, targetCoordinates, targetAngle, exclusions, ent.Comp.FtlToPlanets, ent.Comp.IgnoreExclusionZones, ent.Comp.FTLRange)) { return; } @@ -163,5 +169,7 @@ private void ConsoleFTL(Entity ent, EntityCoordinates t RaiseLocalEvent(ref ev); _shuttle.FTLToCoordinates(shuttleUid.Value, shuttleComp, adjustedCoordinates, targetAngle); + if (ent.Comp.OneWayTrip) + ent.Comp.OneWayTripTaken = true; } } diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index dfeb8aaa3ef..1ba185fa9f8 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -381,7 +381,9 @@ private void UpdateFTLStarting(Entity entity) var uid = entity.Owner; var comp = entity.Comp1; var xform = _xformQuery.GetComponent(entity); - DoTheDinosaur(xform); + + if (entity.Comp2.DoTheDinosaur) + DoTheDinosaur(xform); comp.State = FTLState.Travelling; var fromMapUid = xform.MapUid; @@ -558,7 +560,7 @@ private void UpdateFTLArriving(Entity entity) comp.StateTime = StartEndTime.FromCurTime(_gameTiming, FTLCooldown); _console.RefreshShuttleConsoles(uid); _mapManager.SetMapPaused(mapId, false); - Smimsh(uid, xform: xform); + Smimsh(uid, xform: xform, smimshDistance: entity.Comp2.SmimshDistance); var ftlEvent = new FTLCompletedEvent(uid, _mapSystem.GetMap(mapId)); RaiseLocalEvent(uid, ref ftlEvent, true); @@ -959,7 +961,7 @@ public bool TryFTLProximity(Entity shuttle, EntityCoordinat /// /// Flattens / deletes everything under the grid upon FTL. /// - private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridComponent? grid = null, TransformComponent? xform = null) + private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridComponent? grid = null, TransformComponent? xform = null, float smimshDistance = 0.2f) { if (!Resolve(uid, ref manager, ref grid, ref xform) || xform.MapUid == null) return; @@ -981,7 +983,7 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom // Shift it slightly // Create a small border around it. - aabb = aabb.Enlarged(0.2f); + aabb = aabb.Enlarged(smimshDistance); aabbs.Add(aabb); // Handle clearing biome stuff as relevant. diff --git a/Content.Server/Station/Components/StationBiomeComponent.cs b/Content.Server/Station/Components/StationBiomeComponent.cs index 0eb64aaff80..de3e5db226e 100644 --- a/Content.Server/Station/Components/StationBiomeComponent.cs +++ b/Content.Server/Station/Components/StationBiomeComponent.cs @@ -1,5 +1,7 @@ using Content.Server.Station.Systems; using Content.Shared.Parallax.Biomes; +using Content.Shared.Parallax.Biomes.Markers; +using Content.Shared.Procedural; using Robust.Shared.Prototypes; namespace Content.Server.Station.Components; @@ -13,6 +15,24 @@ public sealed partial class StationBiomeComponent : Component [DataField(required: true)] public ProtoId Biome = "Grasslands"; + /// + /// Adds a list of biome marker layers after creating the planet. Useful if you wish to make your planet station also have ores to mine. + /// + [DataField] + public List> BiomeLayers; + + /// + /// Whether your station comes with one or more complimentary dungeons somewhere in the world. + /// + [DataField] + public List Dungeons; + + [DataField] + public float DungeonMinDistance = 100f; + + [DataField] + public float DungeonMaxDistance = 500f; + // If null, its random [DataField] public int? Seed = null; diff --git a/Content.Server/Station/Systems/StationBiomeSystem.cs b/Content.Server/Station/Systems/StationBiomeSystem.cs index 8c80806ccf5..cecf5153cbc 100644 --- a/Content.Server/Station/Systems/StationBiomeSystem.cs +++ b/Content.Server/Station/Systems/StationBiomeSystem.cs @@ -1,17 +1,22 @@ using Content.Server.Parallax; +using Content.Server.Procedural; using Content.Server.Station.Components; using Content.Server.Station.Events; -using Content.Server.Station.Systems; -using Robust.Shared.Map; +using Content.Shared.Parallax.Biomes; +using Robust.Server.GameObjects; +using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Server.Station.Systems; public sealed partial class StationBiomeSystem : EntitySystem { [Dependency] private readonly BiomeSystem _biome = default!; - [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly DungeonSystem _dungeon = default!; + [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { @@ -28,8 +33,32 @@ private void OnStationPostInit(Entity map, ref StationPos if (station == null) return; var mapId = Transform(station.Value).MapID; - var mapUid = _mapManager.GetMapEntityId(mapId); + if (!_mapSystem.TryGetMap(mapId, out var mapUid) + || mapUid is null) // WHAT, IT'S LITERALLY CALLED TRYGET. WHY DO I NEED TO CHECK NULL? + return; + + _biome.EnsurePlanet(mapUid!.Value, _proto.Index(map.Comp.Biome), map.Comp.Seed, mapLight: map.Comp.MapLightColor); + + if (!TryComp(mapUid, out var biomeComp)) + return; // Yea we JUST made a biome component one line above this trycomp. It turns out I need an engine PR to retrieve the component just added. + // Imagine my frustration. On the other hand AddComps like above aren't guaranteed to return a component anyway. + + foreach (var layer in map.Comp.BiomeLayers) + { + if (biomeComp.MarkerLayers.Contains(layer)) + continue; + + biomeComp.MarkerLayers.Add(layer); + biomeComp.ForcedMarkerLayers.Add(layer); + } + if (!TryComp(mapUid, out MapGridComponent? mapGrid)) + return; - _biome.EnsurePlanet(mapUid, _proto.Index(map.Comp.Biome), map.Comp.Seed, mapLight: map.Comp.MapLightColor); + foreach (var dungeonProto in map.Comp.Dungeons) + { + // TODO: Pester TCJ about adding a _random.NextVector2i to Supermatter Engine, as well as adding methods for "officially" casting vector 2s as integer vectors. + var distVector = (Vector2i) _random.NextVector2(map.Comp.DungeonMinDistance, map.Comp.DungeonMaxDistance).Rounded(); + _dungeon.GenerateDungeon(dungeonProto, mapUid!.Value, mapGrid, distVector, _random.Next()); + } } } diff --git a/Content.Shared/Parallax/Biomes/BiomeComponent.cs b/Content.Shared/Parallax/Biomes/BiomeComponent.cs index 8446febfb25..ea981e682df 100644 --- a/Content.Shared/Parallax/Biomes/BiomeComponent.cs +++ b/Content.Shared/Parallax/Biomes/BiomeComponent.cs @@ -1,15 +1,13 @@ using Content.Shared.Parallax.Biomes.Layers; using Content.Shared.Parallax.Biomes.Markers; using Robust.Shared.GameStates; -using Robust.Shared.Noise; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; namespace Content.Shared.Parallax.Biomes; -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(SharedBiomeSystem))] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] public sealed partial class BiomeComponent : Component { /// diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs index f6929278ed7..c03a186be89 100644 --- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs +++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs @@ -1,5 +1,4 @@ using Content.Shared.Containers.ItemSlots; -using Content.Shared.Shuttles.BUIStates; using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.UI.MapObjects; using Content.Shared.Whitelist; @@ -41,8 +40,10 @@ public override void Initialize() /// public bool CanFTLTo(EntityUid shuttleUid, MapId targetMap, EntityUid consoleUid) { - var mapUid = _mapManager.GetMapEntityId(targetMap); - var shuttleMap = _xformQuery.GetComponent(shuttleUid).MapID; + if (Maps.TryGetMap(targetMap, out var mapUid)) + return false; + + var shuttleMap = Transform(shuttleUid).MapID; if (shuttleMap == targetMap) return true; @@ -171,7 +172,13 @@ public float GetFTLBufferRange(EntityUid shuttleUid, MapGridComponent? grid = nu /// /// Returns true if the spot is free to be FTLd to (not close to any objects and in range). /// - public bool FTLFree(EntityUid shuttleUid, EntityCoordinates coordinates, Angle angle, List? exclusionZones) + public bool FTLFree(EntityUid shuttleUid, + EntityCoordinates coordinates, + Angle angle, + List? exclusionZones, + bool travelToPlanets = false, + bool ignoreExclusionZones = false, + float ftlRange = 512f) { if (!_physicsQuery.TryGetComponent(shuttleUid, out var shuttlePhysics) || !_xformQuery.TryGetComponent(shuttleUid, out var shuttleXform)) @@ -179,9 +186,12 @@ public bool FTLFree(EntityUid shuttleUid, EntityCoordinates coordinates, Angle a return false; } + if (travelToPlanets && ignoreExclusionZones) + return true; // We're skipping both checks anyways so uhhh. Have fun with that. + // Just checks if any grids inside of a buffer range at the target position. _grids.Clear(); - var mapCoordinates = coordinates.ToMap(EntityManager, XformSystem); + var mapCoordinates = XformSystem.ToMapCoordinates(coordinates); var ourPos = Maps.GetGridPosition((shuttleUid, shuttlePhysics, shuttleXform)); @@ -189,14 +199,14 @@ public bool FTLFree(EntityUid shuttleUid, EntityCoordinates coordinates, Angle a var targetPosition = mapCoordinates.Position; // Check range even if it's cross-map. - if ((targetPosition - ourPos).Length() > FTLRange) + if ((targetPosition - ourPos).Length() > ftlRange) { return false; } // Check exclusion zones. // This needs to be passed in manually due to PVS. - if (exclusionZones != null) + if (!ignoreExclusionZones && exclusionZones != null) { foreach (var exclusion in exclusionZones) { @@ -210,6 +220,9 @@ public bool FTLFree(EntityUid shuttleUid, EntityCoordinates coordinates, Angle a } } + if (travelToPlanets) + return true; + var ourFTLBuffer = GetFTLBufferRange(shuttleUid); var circle = new PhysShapeCircle(ourFTLBuffer + FTLBufferRange, targetPosition); diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 191f7dba941..76f4f9e3064 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -201,6 +201,44 @@ color: "#c94242" - type: Computer board: SyndicateShuttleConsoleCircuitboard + - type: ShuttleConsole + ftlToPlanets: true + +- type: entity + parent: BaseComputerShuttle + id: ComputerShuttleSyndieDropPod + name: syndicate drop pod console + description: "Used to launch a drop pod. It's a one way trip, make sure you've packed your lunch." + components: + - type: Sprite + layers: + - map: ["computerLayerBody"] + state: computer + - map: ["computerLayerKeyboard"] + state: generic_keyboard + - map: ["computerLayerScreen"] + state: syndishuttle + - map: ["computerLayerKeys"] + state: syndie_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open + - type: Tag + tags: + - Syndicate + - type: RadarConsole + maxRange: 384 + - type: WorldLoader + radius: 1536 + - type: PointLight + radius: 1.5 + energy: 1.6 + color: "#c94242" + - type: Computer + board: SyndicateShuttleConsoleCircuitboard + - type: ShuttleConsole + ftlToPlanets: true + ignoreExclusionZones: true # It can intentionally be crashed into the station, crushing whatever's underneath the target location. + oneWayTrip: true - type: entity parent: BaseComputerShuttle @@ -233,6 +271,8 @@ board: CargoShuttleConsoleCircuitboard - type: StealTarget stealGroup: CargoShuttleConsoleCircuitboard + - type: ShuttleConsole + ftlToPlanets: true - type: entity parent: BaseComputerShuttle @@ -263,6 +303,8 @@ board: SalvageShuttleConsoleCircuitboard - type: StealTarget stealGroup: SalvageShuttleConsoleCircuitboard + - type: ShuttleConsole + ftlToPlanets: true - type: entity parent: BaseComputerAiAccess From 5dce2977b57835591ff00946190cef1af3b236b2 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 13 Feb 2025 02:40:26 +0000 Subject: [PATCH 06/45] Automatic Changelog Update (#1774) --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d10ec7c91f9..336348600cc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11644,3 +11644,14 @@ Entries: id: 6842 time: '2025-02-12T20:16:04.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1770 +- author: VMSolidus + changes: + - type: Add + message: >- + Shuttles can now take off and land from planet surfaces. They however + will still respect exclusion zone beacons set by stations. Maybe in the + future there might be a special shuttle (drop pod) that is set to ignore + these exclusion zones. + id: 6843 + time: '2025-02-13T02:40:00.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1774 From f6289bf223a570e68bf85f2ffd92c01b9e20f200 Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 13 Feb 2025 11:21:10 +0800 Subject: [PATCH 07/45] Plasmaman Damage Resist and Density Changes (#1769) # Description Plasmamen receive these changes: - Density reduced by 13.5% (185 to 160) - Reference: Human density = 185, Felinid density = 140, Skeleton density = 130. - Slash resist increased from 15% to 20%, Piercing resist increased from 25% to 40% - Reference: Skeletons take 10% more Blunt, 20% less Slash, 40% less Piercing damage. - Upon being gibbed or ashed, spew out plasma everywhere - Not in changelog to catch players by surprise :trollface: - Reduce price of extinguisher refill in Loadouts to 5 points to 4 points. ## Why / Balance Plasmamen are "just" skeletons, so it makes sense that they'd be lighter than average. But not Felinid-levels of light, because that's not really the selling point of Plasmamen and would increase their difficulty in an unintended direction. Why they'd be heavier than Felinids and Skeletons can be explained by the plasma in their body having a lot of weight. To compensate, they will get 20% Slash and 40% Piercing resist. For comparison, Slime People have a 40% resistance to Blunt, a more common damage type than Piercing. This will give Plasmamen a niche of being excellent against spears and ballistic weapons especially with additional armor, while still being vulnerable to Space Wind throwing Blunt weapons and opponents closing in on them with a Blunt weapon. ## Media **Plasmaman Gibbing** https://github.com/user-attachments/assets/bd7c0edc-37dc-4ab4-ab1e-170f78306b24 **New Guidebook Description** ## Changelog :cl: Skubman - tweak: Plasmamen now have a slightly lower density and thus lower weight than the average species (this is a nerf). - tweak: Plasmamen have their Slash resist increased from 15% to 20%, and their Piercing resist increased from 25% to 40% (this is a buff). - tweak: The cost of the envirosuit extinguisher refill in Loadouts has been reduced from 5 points to 4 points. --- .../SpawnGasOnGib/SpawnGasOnGibComponent.cs | 16 ++++++ .../_EE/SpawnGasOnGib/SpawnGasOnGibSystem.cs | 24 +++++++++ Resources/Prototypes/Damage/modifier_sets.yml | 4 +- .../Entities/Mobs/Species/plasmaman.yml | 49 +++++++++++++++++++ .../Prototypes/Loadouts/Generic/plasmaman.yml | 2 +- .../ServerInfo/Guidebook/Mobs/Plasmaman.xml | 4 +- 6 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibComponent.cs create mode 100644 Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibSystem.cs diff --git a/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibComponent.cs b/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibComponent.cs new file mode 100644 index 00000000000..6f35f7714cc --- /dev/null +++ b/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Atmos; + +namespace Content.Server._EE.SpawnGasOnGib; + +// +// Spawns a gas mixture upon being gibbed. +// +[RegisterComponent] +public sealed partial class SpawnGasOnGibComponent : Component +{ + // + // The gas mixture to spawn. + // + [DataField("gasMixture", required: true)] + public GasMixture Gas = new(); +} diff --git a/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibSystem.cs b/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibSystem.cs new file mode 100644 index 00000000000..8dd88308da5 --- /dev/null +++ b/Content.Server/_EE/SpawnGasOnGib/SpawnGasOnGibSystem.cs @@ -0,0 +1,24 @@ +using Content.Server.Atmos.EntitySystems; +using Content.Server.Body.Components; + +namespace Content.Server._EE.SpawnGasOnGib; + +public sealed partial class SpawnGasOnGibSystem : EntitySystem +{ + [Dependency] private readonly AtmosphereSystem _atmos = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBeingGibbed); + } + + private void OnBeingGibbed(EntityUid uid, SpawnGasOnGibComponent comp, BeingGibbedEvent args) + { + if (_atmos.GetContainingMixture(uid, false, true) is not { } air) + return; + + _atmos.Merge(air, comp.Gas); + } +} diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index cea34d04eaf..f576b51cefa 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -371,8 +371,8 @@ id: Plasmaman coefficients: Blunt: 1.5 - Slash: 0.85 - Piercing: 0.75 + Slash: 0.8 + Piercing: 0.6 Cold: 0 Heat: 1.5 Poison: 0.8 diff --git a/Resources/Prototypes/Entities/Mobs/Species/plasmaman.yml b/Resources/Prototypes/Entities/Mobs/Species/plasmaman.yml index 347579a18c8..02733684916 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/plasmaman.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/plasmaman.yml @@ -65,6 +65,25 @@ prototype: Plasmaman requiredLegs: 2 gibSound: /Audio/Effects/bone_rattle.ogg + - type: SpawnGasOnGib + gasMixture: + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 100 # plasma + - type: Fixtures + fixtures: # TODO: This needs a second fixture just for mob collisions. + fix1: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 160 + restitution: 0.0 + mask: + - MobMask + layer: + - MobLayer - type: Bloodstream bloodlossThreshold: 0 bleedReductionAmount: 0 @@ -81,6 +100,36 @@ bloodMaxVolume: 0 - type: Damageable damageModifierSet: Plasmaman + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Blunt + damage: 400 + behaviors: + - !type:GibBehavior { } + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 1500 + behaviors: + - !type:SpawnEntitiesBehavior + spawnInContainer: true + spawn: + Ash: + min: 1 + max: 1 + - !type:BurnBodyBehavior { } + - !type:PlaySoundBehavior + sound: + collection: MeatLaserImpact + - !type:SpawnGasBehavior + gasMixture: + moles: + - 0 # oxygen + - 0 # nitrogen + - 0 # CO2 + - 80 # plasma, lower than gas on gibbing - type: DamageVisuals damageOverlayGroups: Brute: diff --git a/Resources/Prototypes/Loadouts/Generic/plasmaman.yml b/Resources/Prototypes/Loadouts/Generic/plasmaman.yml index a3dbd169f8a..8d28e2c2bea 100644 --- a/Resources/Prototypes/Loadouts/Generic/plasmaman.yml +++ b/Resources/Prototypes/Loadouts/Generic/plasmaman.yml @@ -3,7 +3,7 @@ - type: loadout id: LoadoutSpeciesEnvirosuitExtinguisherRefill category: Species - cost: 5 + cost: 4 requirements: - !type:CharacterSpeciesRequirement species: diff --git a/Resources/ServerInfo/Guidebook/Mobs/Plasmaman.xml b/Resources/ServerInfo/Guidebook/Mobs/Plasmaman.xml index d0c41a3100c..49ece244dff 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Plasmaman.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Plasmaman.xml @@ -26,12 +26,14 @@ Plasmamen with the traits [bold]Claws[/bold], [bold]Talons[/bold] or [bold]Natural Weapons Removal[/bold] have less unarmed damage but don't take self-damage from unarmed attacks. - They take [color=#1e90ff]25% less Piercing, 20% less Poison, and 15% less Slash damage[/color], + They take [color=#1e90ff]40% less Piercing, 20% less Slash, and 20% less Poison damage[/color], and are [color=#8658fc]immune to Radiation and Cold damage[/color], but take [color=#ffa500]50% more Blunt and 50% more Heat damage[/color]. Due to their [color=#8658fc]Cold immunity[/color], they can live in cold environments such as Glacier Station without the need of a winter coat. + They have a slightly lower density than the average species. This results in weaknesses such as but not limited to: being slightly more vulnerable to being shoved, picked up, and thrown by Space Wind, and having a harder time pulling heavy objects. + ## Equipment From 972a9360e16f6c595e150e5e1d0b930c9ff785a9 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 13 Feb 2025 03:21:36 +0000 Subject: [PATCH 08/45] Automatic Changelog Update (#1769) --- Resources/Changelog/Changelog.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 336348600cc..793caad225a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11655,3 +11655,20 @@ Entries: id: 6843 time: '2025-02-13T02:40:00.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1774 +- author: Skubman + changes: + - type: Tweak + message: >- + Plasmamen now have a slightly lower density and thus lower weight than + the average species (this is a nerf). + - type: Tweak + message: >- + Plasmamen have their Slash resist increased from 15% to 20%, and their + Piercing resist increased from 25% to 40% (this is a buff). + - type: Tweak + message: >- + The cost of the envirosuit extinguisher refill in Loadouts has been + reduced from 5 points to 4 points. + id: 6844 + time: '2025-02-13T03:21:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1769 From 19ea863353222d210c1b646fe7333dc98ed0cf3b Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 13 Feb 2025 11:23:29 +0800 Subject: [PATCH 09/45] Den Downstream Merge 02-13-25 (#1773) # Description ## **!!! DO NOT "Squash and commit", ONLY "Create a merge commit" !!!** Merges some PRs from The Den, YML changes only: - https://github.com/TheDenSS14/TheDen/pull/168 - Change: Added the new Loadout items to the appropriate CharacterItemGroup prototypes. - https://github.com/TheDenSS14/TheDen/pull/202 - Change: Converted owl hooting from stereo to mono to fix console errors. - https://github.com/TheDenSS14/TheDen/pull/203 - https://github.com/TheDenSS14/TheDen/pull/205 - https://github.com/TheDenSS14/TheDen/pull/220 - https://github.com/TheDenSS14/TheDen/pull/224 - https://github.com/TheDenSS14/TheDen/pull/236 - https://github.com/TheDenSS14/TheDen/pull/246 Mapper-only PRs: - https://github.com/TheDenSS14/TheDen/pull/247 - https://github.com/TheDenSS14/TheDen/pull/250 ## Changelog :cl: The Den Contributors - add: Added a Trooper Uniform and Hat for Security use. (by Rosycup) - add: Harpies have gained the ability to hoot. (by KyuPolaris) - add: Added ability for Arachne to produce silk. (by KyuPolaris) - tweak: Tweaked tool belts to take more tools and mantis belts to be able to fit certain epistemics tools. (by Rosycup) - add: Hopping, that's it. *hop and *hops now triggers the jump emote. (by KyuPolaris) - fix: Shadowkin are now able to select Psionic Power traits without taking the Latent Psychic trait. (by Rosycup) --------- Co-authored-by: Rosycup <178287475+Rosycup@users.noreply.github.com> Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: Tabitha <64847293+KyuPolaris@users.noreply.github.com> Co-authored-by: KyuPolaris --- .../Components/IdCardConsoleComponent.cs | 1 + .../Audio/Effects/Emotes/attributions.yml | 8 + Resources/Audio/Effects/Emotes/harpyHoot1.ogg | Bin 0 -> 13779 bytes Resources/Audio/Effects/Emotes/harpyHoot2.ogg | Bin 0 -> 10086 bytes Resources/Audio/Effects/Emotes/harpyHoot3.ogg | Bin 0 -> 7498 bytes Resources/Audio/Effects/Emotes/harpyHoot4.ogg | Bin 0 -> 7408 bytes Resources/Locale/en-US/chat/emotes.ftl | 1 + .../Locale/en-US/deltav/holopad/holopad.ftl | 61 ++ .../deltav/navmap-beacons/station-beacons.ftl | 1 + .../deltav/prototypes/access/accesses.ftl | 1 + Resources/Prototypes/Access/misc.yml | 1 + Resources/Prototypes/Actions/emotes.yml | 2 + .../VendingMachines/Inventories/lawdrobe.yml | 2 +- .../Jobs/Security/uncategorized.yml | 4 + .../Prototypes/DeltaV/Access/justice.yml | 5 + Resources/Prototypes/DeltaV/Access/misc.yml | 1 + .../Entities/Clothing/Ears/headsets.yml | 2 - .../Objects/Devices/station_beacon.yml | 8 + .../Structures/Doors/Airlocks/access.yml | 68 ++ .../Structures/Doors/Airlocks/airlocks.yml | 15 + .../Structures/Doors/Airlocks/assembly.yml | 18 + .../Structures/Doors/Windoors/windoor.yml | 9 + .../Entities/Structures/Machines/holopad.yml | 227 ++++++ .../Storage/Closets/Lockers/lockers.yml | 2 +- .../Roles/Jobs/Justice/chief_justice.yml | 3 + .../DeltaV/Roles/Jobs/Justice/clerk.yml | 1 + .../Prototypes/DeltaV/StatusEffects/job.yml | 2 +- .../DeltaV/Voice/speech_emote_sounds.yml | 2 + .../Prototypes/DeltaV/Voice/speech_emotes.yml | 15 + .../Prototypes/DeltaV/radio_channels.yml | 2 +- .../Entities/Clothing/Belt/belts.yml | 6 + .../Entities/Mobs/Species/arachne.yml | 5 + .../Devices/Electronics/door_access.yml | 8 + .../Objects/Tools/access_configurator.yml | 1 + .../Structures/Doors/airlock_groups.yml | 2 + .../Entities/Structures/Machines/holopad.yml | 670 ++++++++++++++++++ .../Structures/Machines/vending_machines.yml | 2 +- .../Entities/Clothing/Belt/belts.yml | 6 + .../Prototypes/Roles/Jobs/Civilian/lawyer.yml | 3 +- .../Prototypes/SoundCollections/harpy.yml | 8 + Resources/Prototypes/Traits/mental.yml | 28 + .../_DEN/Entities/Clothing/Head/hats.yml | 10 + .../Entities/Clothing/Uniforms/jumpsuits.yml | 10 + .../Loadouts/Jobs/Security/uncategorized.yml | 27 + .../Glass/roboticist.rsi/assembly.png | Bin 0 -> 551 bytes .../Glass/roboticist.rsi/bolted_unlit.png | Bin 0 -> 191 bytes .../Airlocks/Glass/roboticist.rsi/closed.png | Bin 0 -> 718 bytes .../Glass/roboticist.rsi/closed_unlit.png | Bin 0 -> 184 bytes .../Airlocks/Glass/roboticist.rsi/closing.png | Bin 0 -> 2001 bytes .../Glass/roboticist.rsi/closing_unlit.png | Bin 0 -> 530 bytes .../Glass/roboticist.rsi/deny_unlit.png | Bin 0 -> 350 bytes .../Glass/roboticist.rsi/emergency_unlit.png | Bin 0 -> 588 bytes .../Airlocks/Glass/roboticist.rsi/meta.json | 195 +++++ .../Airlocks/Glass/roboticist.rsi/open.png | Bin 0 -> 375 bytes .../Airlocks/Glass/roboticist.rsi/opening.png | Bin 0 -> 2060 bytes .../Glass/roboticist.rsi/opening_unlit.png | Bin 0 -> 523 bytes .../Glass/roboticist.rsi/panel_closing.png | Bin 0 -> 590 bytes .../Glass/roboticist.rsi/panel_open.png | Bin 0 -> 341 bytes .../Glass/roboticist.rsi/panel_opening.png | Bin 0 -> 603 bytes .../Airlocks/Glass/roboticist.rsi/sparks.png | Bin 0 -> 697 bytes .../Glass/roboticist.rsi/sparks_broken.png | Bin 0 -> 183 bytes .../Glass/roboticist.rsi/sparks_damaged.png | Bin 0 -> 184 bytes .../Glass/roboticist.rsi/sparks_open.png | Bin 0 -> 175 bytes .../Airlocks/Glass/roboticist.rsi/welded.png | Bin 0 -> 719 bytes .../Standard/roboticist.rsi/assembly.png | Bin 0 -> 603 bytes .../Standard/roboticist.rsi/bolted_unlit.png | Bin 0 -> 191 bytes .../Standard/roboticist.rsi/closed.png | Bin 0 -> 751 bytes .../Standard/roboticist.rsi/closed_unlit.png | Bin 0 -> 184 bytes .../Standard/roboticist.rsi/closing.png | Bin 0 -> 2134 bytes .../Standard/roboticist.rsi/closing_unlit.png | Bin 0 -> 530 bytes .../Standard/roboticist.rsi/deny_unlit.png | Bin 0 -> 350 bytes .../roboticist.rsi/emergency_unlit.png | Bin 0 -> 588 bytes .../Standard/roboticist.rsi/meta.json | 195 +++++ .../Airlocks/Standard/roboticist.rsi/open.png | Bin 0 -> 366 bytes .../Standard/roboticist.rsi/opening.png | Bin 0 -> 2164 bytes .../Standard/roboticist.rsi/opening_unlit.png | Bin 0 -> 523 bytes .../Standard/roboticist.rsi/panel_closing.png | Bin 0 -> 590 bytes .../Standard/roboticist.rsi/panel_open.png | Bin 0 -> 341 bytes .../Standard/roboticist.rsi/panel_opening.png | Bin 0 -> 603 bytes .../Standard/roboticist.rsi/sparks.png | Bin 0 -> 697 bytes .../Standard/roboticist.rsi/sparks_broken.png | Bin 0 -> 183 bytes .../roboticist.rsi/sparks_damaged.png | Bin 0 -> 184 bytes .../Standard/roboticist.rsi/sparks_open.png | Bin 0 -> 175 bytes .../Standard/roboticist.rsi/welded.png | Bin 0 -> 719 bytes .../seniortrooperhat.rsi/equipped-HELMET.png | Bin 0 -> 325 bytes .../Head/Hats/seniortrooperhat.rsi/icon.png | Bin 0 -> 249 bytes .../Hats/seniortrooperhat.rsi/inhand-left.png | Bin 0 -> 361 bytes .../seniortrooperhat.rsi/inhand-right.png | Bin 0 -> 372 bytes .../Head/Hats/seniortrooperhat.rsi/meta.json | 26 + .../equipped-INNERCLOTHING.png | Bin 0 -> 1978 bytes .../Jumpsuit/seniortrooper.rsi/icon.png | Bin 0 -> 491 bytes .../seniortrooper.rsi/inhand-left.png | Bin 0 -> 674 bytes .../seniortrooper.rsi/inhand-right.png | Bin 0 -> 651 bytes .../Jumpsuit/seniortrooper.rsi/meta.json | 26 + 94 files changed, 1682 insertions(+), 8 deletions(-) create mode 100644 Resources/Audio/Effects/Emotes/harpyHoot1.ogg create mode 100644 Resources/Audio/Effects/Emotes/harpyHoot2.ogg create mode 100644 Resources/Audio/Effects/Emotes/harpyHoot3.ogg create mode 100644 Resources/Audio/Effects/Emotes/harpyHoot4.ogg create mode 100644 Resources/Locale/en-US/deltav/holopad/holopad.ftl create mode 100644 Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml create mode 100644 Resources/Prototypes/DeltaV/Entities/Structures/Machines/holopad.yml create mode 100644 Resources/Prototypes/_DEN/Entities/Clothing/Head/hats.yml create mode 100644 Resources/Prototypes/_DEN/Entities/Clothing/Uniforms/jumpsuits.yml create mode 100644 Resources/Prototypes/_DEN/Loadouts/Jobs/Security/uncategorized.yml create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/welded.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening_unlit.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png create mode 100644 Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/welded.png create mode 100644 Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/icon.png create mode 100644 Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/inhand-left.png create mode 100644 Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/inhand-right.png create mode 100644 Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/meta.json create mode 100644 Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/icon.png create mode 100644 Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/inhand-left.png create mode 100644 Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/inhand-right.png create mode 100644 Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/meta.json diff --git a/Content.Shared/Access/Components/IdCardConsoleComponent.cs b/Content.Shared/Access/Components/IdCardConsoleComponent.cs index a34709807b1..e13540eb6f3 100644 --- a/Content.Shared/Access/Components/IdCardConsoleComponent.cs +++ b/Content.Shared/Access/Components/IdCardConsoleComponent.cs @@ -90,6 +90,7 @@ public WriteToTargetIdMessage(string fullName, string jobTitle, List5XW_EV=(th+vAE1GMlgpB052{F`c$)-95A$+yvvP1p z0bmMcs6POZqOj}#Mwm9L=YJEbC#vR?xo8mKy{rF~0@43LgAdheJoK`=E5IkhC&15- zYRv%sY@MxLY;4`6pgL=)PCyJ*$@s*<>Yr{fjDP-b$;lhSfD8aE?vz|g1@1RPh^Xas zsMcuZzBukt$!QP=(F$sq4Y0b$GUeyUMVN5}j>IAWszbP}4_Qd0EH+aJtCVqkFuN2~ ziV%Zf4k#Fr+4N_k*v?ne`v7Cs>B9k%Jx!* zD9J)2z!YmF3mK3trVil}!)6F!6tW=)u>j<}<%oRCflEYPjSG4KAd=A~`|L{F7f0Jy zMT>_`V1fZH1HgvbsYK?h#H_2tvzWxQUgwRMr91=G*IDqoy9xk0y7-E&WLVezYyiN{ z5sfS`jx4Z`+>D694hbtm14sbi5E&tPeM#j6g<%84biLF3|H@`bwp7>MAs!NqIoOq8 zM)0FkVP3BTGz=thB!3t3KTJkasu8}$DHmJLSj#aXOjD~8qsvgKdlsJ_*(A1^;r^v> zBSYW|RC=3Xf}aMp+sx?7F~R+(#9sAmB#jFNbN#YynL*qGmDtLk#im8qK_!fGhnO_= zDyXE=^h_^Z9R+hop}KzTbZ^sUkfL6TTbq*7N4lYscF*=w2GM_;T(`SsGBjTqqOj

@W$gG}Y%?vm*3i_k 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�O4FI0 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 QwRs`Rlip&DMtTPRA2}KEfB*mh literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/Emotes/harpyHoot2.ogg b/Resources/Audio/Effects/Emotes/harpyHoot2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ccdff1d1c58a204aed49ff7fc13262e0225a8046 GIT binary patch literal 10086 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/Emotes/harpyHoot3.ogg b/Resources/Audio/Effects/Emotes/harpyHoot3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d1b4a899948e50363666c5ac08425d8ecbb8c1cb GIT binary patch literal 7498 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 E02cyfs{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/Emotes/harpyHoot4.ogg b/Resources/Audio/Effects/Emotes/harpyHoot4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..33aae2aa69306827a15e580bc99d3052f0744cc4 GIT binary patch literal 7408 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 LO + components: + - type: Label + currentLabel: holopad-command-lo # DeltaV - QM > LO + +- type: entity + parent: Holopad + id: HolopadCommandCe + suffix: CE + components: + - type: Label + currentLabel: holopad-command-ce + +- type: entity + parent: Holopad + id: HolopadCommandRd + suffix: Mysta # DeltaV - RD > Mysta + components: + - type: Label + currentLabel: holopad-command-mysta # DeltaV - RD > Mysta + +- type: entity + parent: Holopad + id: HolopadCommandHos + suffix: HoS + components: + - type: Label + currentLabel: holopad-command-hos + +# Science +- type: entity + parent: Holopad + id: HolopadScienceAnomaly + suffix: Anomaly + components: + - type: Label + currentLabel: holopad-epistemics-anomaly # DeltaV - Science > Epistemics + +- type: entity + parent: Holopad + id: HolopadScienceArtifact + suffix: Artifact + components: + - type: Label + currentLabel: holopad-epistemics-artifact # DeltaV - Science > Epistemics + +- type: entity + parent: Holopad + id: HolopadScienceRobotics + suffix: Robotics + components: + - type: Label + currentLabel: holopad-epistemics-robotics # DeltaV - Science > Epistemics + +- type: entity + parent: Holopad + id: HolopadScienceRnd + suffix: R&D + components: + - type: Label + currentLabel: holopad-epistemics-rnd # DeltaV - Science > Epistemics + +- type: entity + parent: Holopad + id: HolopadScienceFront + suffix: Epi Front # DeltaV - Science > Epistemics + components: + - type: Label + currentLabel: holopad-epistemics-front # DeltaV - Science > Epistemics + +- type: entity + parent: Holopad + id: HolopadScienceBreakroom + suffix: Epi Breakroom # DeltaV - Science > Epistemics + components: + - type: Label + currentLabel: holopad-epistemics-breakroom # DeltaV - Science > Epistemics + +# Medical +- type: entity + parent: Holopad + id: HolopadMedicalMedbay + suffix: Medbay + components: + - type: Label + currentLabel: holopad-medical-medbay + +- type: entity + parent: Holopad + id: HolopadMedicalChemistry + suffix: Chemistry + components: + - type: Label + currentLabel: holopad-medical-chemistry + +- type: entity + parent: Holopad + id: HolopadMedicalCryopods + suffix: Cryopods + components: + - type: Label + currentLabel: holopad-medical-cryopods + +- type: entity + parent: Holopad + id: HolopadMedicalMorgue + suffix: Morgue + components: + - type: Label + currentLabel: holopad-medical-morgue + +- type: entity + parent: Holopad + id: HolopadMedicalSurgery + suffix: Surgery + components: + - type: Label + currentLabel: holopad-medical-surgery + +- type: entity + parent: Holopad + id: HolopadMedicalParamed + suffix: Paramedic + components: + - type: Label + currentLabel: holopad-medical-paramedic + +- type: entity + parent: Holopad + id: HolopadMedicalVirology + suffix: Virology + components: + - type: Label + currentLabel: holopad-medical-virology + +- type: entity + parent: Holopad + id: HolopadMedicalFront + suffix: Med Front + components: + - type: Label + currentLabel: holopad-medical-front + +- type: entity + parent: Holopad + id: HolopadMedicalBreakroom + suffix: Med Breakroom + components: + - type: Label + currentLabel: holopad-medical-breakroom + +# Cargo +- type: entity + parent: Holopad + id: HolopadCargoFront + suffix: Logistics Front # DeltaV - Cargo > Logistics + components: + - type: Label + currentLabel: holopad-logistics-front # DeltaV - Cargo > Logistics + +- type: entity + parent: Holopad + id: HolopadCargoBay + suffix: Cargo Bay + components: + - type: Label + currentLabel: holopad-logistics-cargo-bay # DeltaV - Cargo > Logistics + +- type: entity + parent: Holopad + id: HolopadCargoSalvageBay + suffix: Salvage Bay + components: + - type: Label + currentLabel: holopad-logistics-salvage-bay # DeltaV - Cargo > Logistics + +- type: entity + parent: Holopad + id: HolopadCargoBreakroom + suffix: Logistics Breakroom + components: + - type: Label + currentLabel: holopad-logistics-breakroom # DeltaV - Cargo > Logistics + +# Engineering +- type: entity + parent: Holopad + id: HolopadEngineeringAtmosFront + suffix: Atmos Front + components: + - type: Label + currentLabel: holopad-engineering-atmos-front + +- type: entity + parent: Holopad + id: HolopadEngineeringAtmosMain + suffix: Atmos Main + components: + - type: Label + currentLabel: holopad-engineering-atmos-main + +- type: entity + parent: Holopad + id: HolopadEngineeringAtmosTeg + suffix: TEG + components: + - type: Label + currentLabel: holopad-engineering-atmos-teg + +- type: entity + parent: Holopad + id: HolopadEngineeringStorage + suffix: Engi Storage + components: + - type: Label + currentLabel: holopad-engineering-storage + +- type: entity + parent: Holopad + id: HolopadEngineeringBreakroom + suffix: Engi Breakroom + components: + - type: Label + currentLabel: holopad-engineering-breakroom + +- type: entity + parent: Holopad + id: HolopadEngineeringFront + suffix: Engi Front + components: + - type: Label + currentLabel: holopad-engineering-front + +- type: entity + parent: Holopad + id: HolopadEngineeringTelecoms + suffix: Telecoms + components: + - type: Label + currentLabel: holopad-engineering-telecoms + +- type: entity + parent: Holopad + id: HolopadEngineeringTechVault + suffix: Tech Vault + components: + - type: Label + currentLabel: holopad-engineering-tech-vault + +# Security +- type: entity + parent: Holopad + id: HolopadSecurityFront + suffix: Sec Front + components: + - type: Label + currentLabel: holopad-security-front + +- type: entity + parent: Holopad + id: HolopadSecurityBrig + suffix: Brig + components: + - type: Label + currentLabel: holopad-security-brig + +- type: entity + parent: Holopad + id: HolopadSecurityWarden + suffix: Warden + components: + - type: Label + currentLabel: holopad-security-warden + +- type: entity + parent: Holopad + id: HolopadSecurityInterrogation + suffix: Interrogation + components: + - type: Label + currentLabel: holopad-security-interrogation + +- type: entity + parent: Holopad + id: HolopadSecurityBreakroom + suffix: Breakroom + components: + - type: Label + currentLabel: holopad-security-breakroom + +- type: entity + parent: Holopad + id: HolopadSecurityDetective + suffix: Detective + components: + - type: Label + currentLabel: holopad-security-detective + +- type: entity + parent: Holopad + id: HolopadSecurityPerma + suffix: Perma + components: + - type: Label + currentLabel: holopad-security-perma + +- type: entity + parent: Holopad + id: HolopadSecurityCourtroom + suffix: Courtroom + components: + - type: Label + currentLabel: holopad-security-courtroom + +- type: entity + parent: Holopad + id: HolopadSecurityLawyer + suffix: Attorney # DeltaV - Lawyer > Attorney + components: + - type: Label + currentLabel: holopad-justice-attorney # DeltaV - Lawyer > Attorney + +- type: entity + parent: Holopad + id: HolopadSecurityArmory + suffix: Armory + components: + - type: Label + currentLabel: holopad-security-armory + +# Service +- type: entity + parent: Holopad + id: HolopadServiceJanitor + suffix: Janitor + components: + - type: Label + currentLabel: holopad-service-janitor + +- type: entity + parent: Holopad + id: HolopadServiceBar + suffix: Bar + components: + - type: Label + currentLabel: holopad-service-bar + +- type: entity + parent: Holopad + id: HolopadServiceKitchen + suffix: Kitchen + components: + - type: Label + currentLabel: holopad-service-kitchen + +- type: entity + parent: Holopad + id: HolopadServiceBotany + suffix: Botany + components: + - type: Label + currentLabel: holopad-service-botany + +- type: entity + parent: Holopad + id: HolopadServiceChapel + suffix: Chapel + components: + - type: Label + currentLabel: holopad-service-chapel + +- type: entity + parent: Holopad + id: HolopadServiceLibrary + suffix: Library + components: + - type: Label + currentLabel: holopad-service-library + +- type: entity + parent: Holopad + id: HolopadServiceNewsroom + suffix: Newsroom + components: + - type: Label + currentLabel: holopad-service-newsroom + +- type: entity + parent: Holopad + id: HolopadServiceZookeeper + suffix: Zookeeper + components: + - type: Label + currentLabel: holopad-service-zookeeper + +- type: entity + parent: Holopad + id: HolopadServiceBoxer + suffix: Boxer + components: + - type: Label + currentLabel: holopad-service-boxer + +- type: entity + parent: Holopad + id: HolopadServiceClown + suffix: Clown + components: + - type: Label + currentLabel: holopad-service-clown + +- type: entity + parent: Holopad + id: HolopadServiceMusician + suffix: Musician + components: + - type: Label + currentLabel: holopad-service-musician + +- type: entity + parent: Holopad + id: HolopadServiceMime + suffix: Mime + components: + - type: Label + currentLabel: holopad-service-mime + +# AI +- type: entity + parent: Holopad + id: HolopadAiCore + suffix: AI Core + components: + - type: Label + currentLabel: holopad-ai-core + +- type: entity + parent: Holopad + id: HolopadAiMain + suffix: AI Main + components: + - type: Label + currentLabel: holopad-ai-main + +- type: entity + parent: Holopad + id: HolopadAiUpload + suffix: AI Upload + components: + - type: Label + currentLabel: holopad-ai-upload + +- type: entity + parent: Holopad + id: HolopadAiBackupPower + suffix: AI Backup Power + components: + - type: Label + currentLabel: holopad-ai-backup-power + +- type: entity + parent: Holopad + id: HolopadAiEntrance + suffix: AI Entrance + components: + - type: Label + currentLabel: holopad-ai-entrance + +- type: entity + parent: Holopad + id: HolopadAiChute + suffix: AI Chute + components: + - type: Label + currentLabel: holopad-ai-chute + +# Long Range +- type: entity + parent: HolopadLongRange + id: HolopadCargoAts + suffix: ATS + components: + - type: Label + currentLabel: holopad-cargo-ats + +- type: entity + parent: HolopadLongRange + id: HolopadCommandBridgeLongRange + suffix: Station Bridge + components: + - type: Label + currentLabel: holopad-station-bridge + +- type: entity + parent: HolopadLongRange + id: HolopadCargoBayLongRange + suffix: Station Cargo Bay + components: + - type: Label + currentLabel: holopad-station-cargo-bay + +- type: entity + parent: HolopadLongRange + id: HolopadCargoShuttle + suffix: Cargo Shuttle + components: + - type: Label + currentLabel: holopad-cargo-shuttle + +- type: entity + parent: HolopadLongRange + id: HolopadCentCommEvacShuttle + suffix: Evac Shuttle + components: + - type: Label + currentLabel: holopad-centcomm-evac + + +# Map Specific +# For holopads that only fit specific maps. For example: Bagel has Clown, Mime and Musician merged into one. +- type: entity + parent: Holopad + id: HolopadServiceClownMime + suffix: Clown/Mime + components: + - type: Label + currentLabel: holopad-service-clown-mime diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 76181249b59..70faa605c4d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -1723,7 +1723,7 @@ - state: panel map: ["enum.WiresVisualLayers.MaintenancePanel"] - type: AccessReader - access: [["Lawyer"]] + access: [["Justice"]] - type: entity parent: VendingMachine diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml index df1e61c23da..b60eb57cdca 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml @@ -17,6 +17,12 @@ - HandLabeler - Sidearm - Folder + components: + - AnomalyScanner + - AnomalyLocatorUnpowered + - AnomalyLocatorWideUnpowered + - NodeScanner + - Flash - type: entity parent: ClothingBeltBase diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml index d0933615695..30116d245b9 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml @@ -8,7 +8,8 @@ icon: "JobIconLawyer" supervisors: job-supervisors-cj # Delta V - Change supervisor to chief justice access: - - Service + # - Service - DeltaV, removed from service department + - Justice # DeltaV - Justice dept - Lawyer - Maintenance diff --git a/Resources/Prototypes/SoundCollections/harpy.yml b/Resources/Prototypes/SoundCollections/harpy.yml index 68133faac09..27b6a1f1f66 100644 --- a/Resources/Prototypes/SoundCollections/harpy.yml +++ b/Resources/Prototypes/SoundCollections/harpy.yml @@ -249,3 +249,11 @@ - /Audio/Voice/Talk/pai.ogg - /Audio/Voice/Talk/pai_ask.ogg - /Audio/Voice/Talk/pai_exclaim.ogg + +- type: soundCollection + id: HarpyHoots + files: + - /Audio/Effects/Emotes/harpyHoot1.ogg + - /Audio/Effects/Emotes/harpyHoot2.ogg + - /Audio/Effects/Emotes/harpyHoot3.ogg + - /Audio/Effects/Emotes/harpyHoot4.ogg diff --git a/Resources/Prototypes/Traits/mental.yml b/Resources/Prototypes/Traits/mental.yml index 627aad4b1f7..ed5008cec6b 100644 --- a/Resources/Prototypes/Traits/mental.yml +++ b/Resources/Prototypes/Traits/mental.yml @@ -282,6 +282,9 @@ requirements: - !type:CharacterLogicOrRequirement requirements: + - !type:CharacterSpeciesRequirement + species: + - Shadowkin # Innate Psionics - !type:CharacterTraitRequirement traits: - LatentPsychic @@ -299,6 +302,10 @@ - !type:CharacterTraitRequirement traits: - AnomalousPositronics + - !type:CharacterTraitRequirement + inverted: true + traits: + - ShadowkinBlackeye - !type:CharacterJobRequirement inverted: true jobs: @@ -317,6 +324,9 @@ requirements: - !type:CharacterLogicOrRequirement requirements: + - !type:CharacterSpeciesRequirement + species: + - Shadowkin # Innate Psionics - !type:CharacterTraitRequirement traits: - LatentPsychic @@ -333,6 +343,10 @@ - !type:CharacterTraitRequirement traits: - AnomalousPositronics + - !type:CharacterTraitRequirement + inverted: true + traits: + - ShadowkinBlackeye - !type:CharacterJobRequirement inverted: true jobs: @@ -352,6 +366,9 @@ requirements: - !type:CharacterLogicOrRequirement requirements: + - !type:CharacterSpeciesRequirement + species: + - Shadowkin # Innate Psionics - !type:CharacterTraitRequirement traits: - LatentPsychic @@ -370,6 +387,10 @@ - !type:CharacterTraitRequirement traits: - AnomalousPositronics + - !type:CharacterTraitRequirement + inverted: true + traits: + - ShadowkinBlackeye - !type:CharacterJobRequirement inverted: true jobs: @@ -388,6 +409,9 @@ requirements: - !type:CharacterLogicOrRequirement requirements: + - !type:CharacterSpeciesRequirement + species: + - Shadowkin # Innate Psionics - !type:CharacterTraitRequirement traits: - LatentPsychic @@ -409,6 +433,10 @@ - AnomalousPositronics - !type:CharacterItemGroupRequirement group: TraitsMachine + - !type:CharacterTraitRequirement + inverted: true + traits: + - ShadowkinBlackeye functions: - !type:TraitAddPsionics psionicPowers: diff --git a/Resources/Prototypes/_DEN/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/_DEN/Entities/Clothing/Head/hats.yml new file mode 100644 index 00000000000..43d43300336 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Clothing/Head/hats.yml @@ -0,0 +1,10 @@ +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatSeniorTrooper + name: senior trooper hat + description: A campaign hat for the Nanotrasen Troopers, comes with a case too, but you lost it. + components: + - type: Sprite + sprite: _DEN/Clothing/Head/Hats/seniortrooperhat.rsi + - type: Clothing + sprite: _DEN/Clothing/Head/Hats/seniortrooperhat.rsi diff --git a/Resources/Prototypes/_DEN/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/_DEN/Entities/Clothing/Uniforms/jumpsuits.yml new file mode 100644 index 00000000000..05c613dd6e0 --- /dev/null +++ b/Resources/Prototypes/_DEN/Entities/Clothing/Uniforms/jumpsuits.yml @@ -0,0 +1,10 @@ +- type: entity + parent: ClothingUniformBase + id: ClothingUniformJumpsuitSeniorTrooper + name: senior trooper uniform + description: A formal uniform issued to the Nanotrasen Troopers, usually it comes with a car. + components: + - type: Sprite + sprite: _DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi + - type: Clothing + sprite: _DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi diff --git a/Resources/Prototypes/_DEN/Loadouts/Jobs/Security/uncategorized.yml b/Resources/Prototypes/_DEN/Loadouts/Jobs/Security/uncategorized.yml new file mode 100644 index 00000000000..e7fc18c2d5b --- /dev/null +++ b/Resources/Prototypes/_DEN/Loadouts/Jobs/Security/uncategorized.yml @@ -0,0 +1,27 @@ +- type: loadout + id: LoadoutSecurityHeadHatSeniorTrooper + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSecurityHead + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingHeadHatSeniorTrooper + +- type: loadout + id: LoadoutSecurityUniformJumpsuitSeniorTrooper + category: JobsSecurityAUncategorized + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutSecurityUniforms + - !type:CharacterDepartmentRequirement + departments: + - Security + items: + - ClothingUniformJumpsuitSeniorTrooper diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..4b087e14f6730f86bd4a800882b7d320fc538caa GIT binary patch literal 551 zcmV+?0@(eDP)Px$;Ymb6R9Hu2)YCWq|NYx{26Vv5#fc(x>Ec;N3`Il;fXqi$hHMwe4n~jy4x&H>aYim^FBO;wTM*6sUhfuyxH&+&@ZjcMOybqobp7_PXE& z5iS*!bVxzb3hECE35(-&07wGd9taHZ0V}$C^(vSKRg)kH?)`mN1{e~?N p2jJ?SQ{n(*Z(}nbBoFGI0|1ozaUcEx;|Bl$002ovPDHLkV1gq!>_7kj literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..653846c3022fe943b97fb6a5d9f2b8a86147e70c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D46K! z;usRq`u6%l-UbH&my7i>Ox;$F%oe}iGkG#|7(|>&&1{&k;M||7lh3@{JX@)0+GW$d zdJYW?j7%&X0tyfY!{6u~=QO?A3=apWy-R++svs<4n@2qN|FYoM-~TZFI4EQ7u(DVc VXc>d2tDnm{r-Y`r$KSLd^8sfVKOO)8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..1108755279ed1087a44ca29130349b37563f2934 GIT binary patch literal 718 zcmV;<0x|uGP)Px%h)G02R9HvVmqBY9K@`VdkTz5(AgJi2Q0S!ua`7JU*w0YNN64qh zO$fAyf{+goDDd0J-c)*M6=Sp^w7iLLnH^_#XLLPeE~~RM@BQY@+c*E&%H>P{ zV9{=-H}uo<848D#W4!F}bGHy+cm5or(HNw{uRR@$1A5b+Fc=OXmWx26(ST$!3FUIx z)lRKegYkF_kGG$I1Hjn(VuA>uW5*NV`{)V|-W{K+jQzMgKgmT4>@@*&Ivt2aBCHP` zP{Tg@&%akjfSjj`g@6jcYFyntYPL_j07M`uKy36BLct)*18leX%qck^_N?C`L?V^m zF#(W8V=|dQ{8{2Y2ae)L%m*eE4nXH%RN9Qn073ZBH$MQpA)nN*f*Qs zZ5{v}$&zs606L$d9RXDmuCoPh0GO1HB&146lUB)r!w>JFTCLi3pj0YJ8S3@AT_==v z;6Vbs*?SAke%-Dm?U^Nw0DW1ZHl|~B z*>f!ba?V#lD#bDYbWV=x_sRe!&RK+J7WfXJvvS&a$^qZDKvw_7u=82xdlJe3#BZMm zP^ltRLv%J6)q#xy=#*leBUq>Y)9Q`&fS&-`dH`wZK=KoSBBj&=v&0kvFN(G-qX}Lz zOm_=B0hm}=K!`@&gs7-|cqJ^VVuv6Rlh7tiOqUkL*MGc>$fUTafMk-~RS)QdQg#>6 znMY%mE++Y1xqwg^{nq`;u45R1N~L1rn~g>B;wVITHk-E8tC#FPi2B~N{heRS0qF3^ zX0uB+TdfxBqa#)XFq!KBAWvS`YMw~Ep07IhKb#o)A5N7nC;$Ke07*qoM6N<$f@K#+ A(*OVf literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..cc185dfdb5a6afa911a8f78035710018819aaa1d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>ZPM z;usRqn*8VgfBVA@Ov@Oz)?Q&;%qLNLUK=vN11Qa0#Ha0e~oTm9{hX2w7 z(-R&DJ#Ox{v;S3j3^P6Px+i%CR5RCr$PT;FRQMHJppv`NGyRwOn)m{KB@KvJ6r1)&HcL@=Olg*^J?A0QOL zcftR`w?IL`LW=ZJ3KbC&nnExnNaKUFK~NK7nkc36?d=)Pp3KainVs2d$?nU|z1h3p zH|LvQXXcwbFf%*%_~F6BVrY1%;Md)?m4V6!3Eu#dKMwe~a&wTl#DVZRr&L^AWu@{C z;D-4#^9FnS;FsdT&V%CC_V?KYxIFpJz|3k&A)Uw?DGCfP$Zri%Wplrp^_cTlbEyhPJT~N44<&>EFv1*G2{K)kK;E$n~hE6~Tr{ zEx;;3o5AOOFkcSN!NC^@*DNeo@U2}C0+6HNd|>m{KoTGa2UqZUAW~0*eVBa}K+cD0 zM=G}f5|<}JIr0z);KBqR?TS@)#B$U=*#bHNdJ*ZH0N4kn-6#-gs|85hHd=rSlUGW! z7Sz@l&ZOTQ@)KZs1u+Qpb`ONOG&&ZZQF*dhQ9aiM7IDq6W~gqM34fM!kFL^ zfZPypWDx#|?1H#01c9G?^%YY=Q>=&iHsUGx05rCglRgNiHiiXvL9hn?c<**Ac0^1= z7Z(@H8b=#4WKGP$fd_+dsk%#i-cL8-;=|+^CK00#a~g8FMeodu2t9E|Iu4?ieh*Vor8pQjXnFsG-djn>~@ztPJB z$etbx=&a7{A2ypdS-`nHJvE0qdpIb%?CG&we3(2|D8CWF7sODndtpX z^BU;NJ;Vc9KAk(@X8>#u1op8!K#QzdvhaE0IgVV6({iBuI2SFZ4W9%E#pgV@0Gj7i z1o-FZ@8b2#S4xk*?F#kE`w|g6pJ#%2&*$NHcke`T(P9!lUa11u1PJ9J*SRR!@DK0U=;@Cn)QJ;p&2@=EZQ)V%oYOxfT?|BeV;mF{t$x z;2VTv3Qm=w$sn9l0M{Vgx&XETUQR<(3s5&5bWMX}cxd*3C7;UqfS6|QDqzTRET4wP z6x`PWd;;)Um}?LYiAjh6z|KAhyFBqcDDcOp6hMOsyp@%e64#Xn#8iY(>`ESxV-VI5 z>I7g1wL_YlW)|f0#LKQh<^eHW>TKW~lkmu=FEino7N9LJVejt#RluC=odv~u<$b}B zYw_AHsE$hrW)lHiJX`|E@~Q=B;+1y=gKxa>zw26nhD!)$tN=b9HUVtqRSBReux|z= z$>3fz_ZR^*TzvL(Ul2mNppfAE%BvP2=9GxW3Le@8$)yk!PA)^+1g9Y2)zuAz3Sf&# zEVg$Hh+Y42k>SCxwH#j;w3_H(@lMcpeB^3~M4lC?@c+BNdtl z*aT>T?ac#XTRldX&0AV z0%&<869C>x6kG-@#4E4$!~?_UilD-4xWr%*zO4dqObrj40P+j~FE7U?d~-ekfbt6Q z%GYfP+KABs3ArPsnm`IBGHjWK3{N0Tn7ng_6-F18gw601UVhjR542=is4Ud0Q}S zo_NB*^U0r&&+6{QJ#@cMfRN`97cM}^_oVnFsu~TbW02i?CnYdS;575*;e1{7V jib?mUwx?^#Ys3BzIg`uNT?-?e00000NkvXXu0mjfp9`R! literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..7498990a390fff5bc731e3baf307858de3ba839f GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DY|LVWJZ)g7gayQ33 zC84efpUW1jM3zjpl9GRBGrjV(w^{7`kH3`q%U{Rq-`5M@{OZ~IpC|ve&)L0trt>=A zPcLuPUCx)6GP(UU;|BX9pS;|%U4_qp!OP(3>gTe~DWS>x#=icOSELqHvM#qqt^fe%s?IS0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..8c381d4c61eb53553f4e9ee9184c0bb067df59d0 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^2|(!}C>Tt7pBL_kH(w{qxKbdX5In2Y48a8O|_Z zGB&v0KYDjrl(~P{=aidki*4nKcB(J0-gI|+mFWZX?{!9Qla?D+eJlE(RkwX{B3_fg zW=q#LEc`$JK_gGjm-qu0usILv@}Kn#Hv4a1+`#^>bGptP{_Z|tI5Bv-`njxgN@#*J E0NvYmaR2}S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..f210ecf123ef7c095416ebee9a638fb3f5962b80 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQk(@Ik;M!Q+`=Ht$S`Y;1W>TY z)5S3)qw(#{g}jFocvutvhXyz%gr7*0)ta5!dZ=NM7a#X3FD|uWcPeou7pDTI=K8KzA{C zy85}Sb4qARKO}_AZSOoD*7PCC#DdqUUT4YBha-GG5};EA7)U z%Pl)B#5S^UDv5*yxNw>++VW~igvX`2Gl%UT{8BB_e4^DfF_|$nV?wO`5BWduuATDj zF`wjQxZv~ALc6wx19}1Lt|H(?D1tSL*h@TpUD=;8v2n6nFZwC< z9;nU(9BcR9o?gh?;K0CgP}woj;EO|MyztUm{(J)sp$QTODjI1|V$FW;eD^Y9y3F4> lJeRlT>fX#Yn)dshFEc1Wf#AM1V+lVW(~eWB5g;xs!~xDe=FtEE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..77ba7ca3c62f879f42503d736101858d4eb61e14 GIT binary patch literal 375 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0d28b65b41e952ff138206e67c2eab541e97bb GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^2|(8{u8~v8D4VHsbO6G zfVso|4c8&1BjN!kB0N|OU4!0~Gv5ndX6fx$roOr6aZ- z1}+D8Mh=mwTHm65f$YT+y$l)*tpc|q)?a62$bORjbN!B}<;)J{46?aLPQ2j5WfxWl zzy;Ha9X%(xy#KrYJX>?)=CWs%eGdyFR+UR`zZr2VN9~_N{jt6Gk2?PAnJwY{SLvDM z`@edd-mLt>(7nr7{jpQV;rKa^1@7->YujunH@iZ-boN@t%`<;2o-C68e!BhVkJrvE z3evs1yXSU|;J$sc7FDOMPPG6kvTf?}5?y%p$g^LX$F?7+(_U_op8Rn2BePiMu8SPy zx2>n0vOl+0w0Jfv$HLzJlhS?q=NND39Qr)x=xgtn_fqdn<97>xU2;dom+?U5d+-0+ z7UwOkB{pj1eP))D-aBvhl9%6~Eq>B_!zO+0ZPP-%SJ!?r7*&b8AOaumcP@u#+`hMN Wo}Z+2=^ZeEFnGH9xvX^(3p31-d+H}+6gk7a`|=pK~c0c-aIha zzO!7dxw>&|Uhi41)>Khve*oXHc-WHM{awae3#zDt9bItJzomGD@u;NA^Zfw;RC&(R z+4;}<^cRgc0Ba|_)f=v7Q{dBt)ys2B=hFkG8^@-04#0?r>Gygqk=GUg9M9*bc1{7h nNn&>QP52cDfB+Bx{yo44RP&P*c~z&500000NkvXXu0mjfWXh0Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..899651c30446a8998f9b1fabda944d7360df9810 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1-DY*PN^juO zbNHjE%+V}hzTm-T4o;1<4LdFQi}tCdblowo`Fw9KPk9UnW0QNUY{Jcn3`Rl@ZcHaU z7$i9rlo?Z08hThJfCbZzzG}a0!s|KdkHxg-mcRb)+q_CLxowlq-njFYtJ@2|{)%I0 z`1?ol`^k52icPAbZk#+mVWG}xUygG*tPBm`bydWlTO4?D>b4A@?rGQAiE&~FHn8W^ z)joPy*mC$WPyYMq6%{fISA?uRXj~{9oWXc7E0M--(oM3v-T6o|50rvB z?(X|$_9K~q!b>Jme`5^XKVF&j%`2QtMsN-@c!MQ;uYX{&xPXV-MV4h*a7^*H)mTo% z^duKBlw8QrI7#Az6a!+!k42gRM*{jVXw(2^)BtAG0A@rO5W6r+TTo*dR0c>itn&u= ziYhf*#29dhKzXbye)sb`x`T#9jF|@skRQx^J~1)&r}u;k?=m8#VH_qLszE1c7I|*U z-vi17+kNaSpCz%9yQ#rS&sN2x0`#dRVZ$Zo3 z(YozxD(tDJ*Nd^#9ngM11*`#hZL|qqUX-aA#5S}G^!n=WLLU@GQ4~c{6dSK|xP5Tx z!-H@vnhtn%y49-Lc3NyR!WG{&^FjpmIbAy+o5nPrx)V}}E%fz`bB+BtcI@^)8^rTf zBx((Ky3EXU1aLM2IGxVm^KA+58-UdY;QHA(FXNaPN!aD?zV8}<6&DioA6qwm%&S`B zG(?rf)v;@BC^IYu=$f%ZGhhqXw5SF!qXsa;V!%*uXSl{qZh&O*G5ePMUQntINQ83i z$upoRb}H)fv5TKDu*ZP$-hvmY3!Atq6ENBh(WYFFM67|7l05p#?E1nmayZKasmvEs z4%uF#@2=U$hCc&#<3^>qaoRUjD5t(Q@!@5>eLn%YPa&y@Wk6F&Jf;Amr=S&p`TF~H zKQmyzZBbK@-3j_NfaCqFrZteLVgLD`ViBgsl+FQ!832*%0DhkaTq4i015y-4Q4~c{ f6h%=KHvsSpwHV1KmpgiI00000NkvXXu0mjf++aJ5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5d774588ae44eab5608571cb6aafad7375e158 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DFD66%%n7hj|c25u0=Hbzuz>&Md dbBcZ?)Aw7<0^jOhxdW|Y@O1TaS?83{1ORW&Jrn={ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a028dee5bbe41a7f4e35f686043e8a112ce4e GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0Z<#e`9lQK{p_au_VYZ zn8D%MjWi%9!PCVtL_+fI!HvAl4m=D8Hh=XH6ZQR;XyVo{y01gP^_0k+pXD$8l*-N4 z&iUk!V5<=?maE{?*yyS)-udN6;H*Pi5*L(-Fs)pAdDY$x8SUGCM{GTG-~v& dN}IerjGt7Q1>7HnEC$-e;OXk;vd$@?2>`@EK-2&L literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png new file mode 100644 index 0000000000000000000000000000000000000000..630eabb976ecf11fa59ba29f03502b02bde399aa GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1P8ZNkY>!D5Xf# z6r~g*LKudVwY)h1P1ErG{Y_O>7-LwiR)`353_Ys?Q50dVWxL(toFmV3j4>Ev9Ps-l zJRA;eHXCkkZUA_Cdcya8uCA^oYs~_vstSOYmlptvqL5)2-05^$24J__0pOg&T1%E? zSZlG?E(5S$uW`=d`##P&PNx%L7!t?vWUW~#Fvg&@CP@;4AQ;U@mSvOsz$}0yNe~gr zvZU)ew%aYf@6$BRWUX0O@bK^eKpe+o2Sh2w$H&Jq0Jpcd7-MkGk!2bD&AuCkVVOQq zRTXX9QdJel;}HO*6wbM2W`WlFXVbDQoiPRx!S|=j%`#!vby#aL#<+j-FCvo*Fs}mF z*VkBUT~QQ-VTg#xI1v{CD2f856iw4m*R_me`SbI08GyR3UElW{k4Mrp#q&J0)~wg- zWdO9+#Bq$Zmb0@nHk%D`9JAOk8XJyMilQjo>+7qG#+c^-Y=BO>H^PTRIWSFs4d+uIvimN{b#&(F_dttCm4pMS((2iWa)^nH)#d1G6q zEKBzL{W1VwUta`4Al6#<`1tq(<9X9PE&uy@{s#~QNIZEt|6~9F002ovPDHLkV1nDB BNt*xw literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png new file mode 100644 index 0000000000000000000000000000000000000000..58bde1ae52822a228b5a1577524ae8f77bc55cc4 GIT binary patch literal 603 zcmV-h0;K(kP)Px%6-h)vR9Hvtm(NQAK@`WI3i%^gMGt}@>A?^L3%mqD1W|ZMs9WH%|EIqqPX&4C z&@lod0v8N~SP6v=Df9!3Ty-hq&9cL|j+QyQU7E|n>@e>$-ZAZ&z-_P{z-k4y4mP1sD9}8R$z+HKrK=k~53m4M9Kvq_tiFb; z@inMCmcj22kd@zcYxKww1$c=l8jXUd|u~N~-_>002ovPDHLkV1lRW2E+gW literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..653846c3022fe943b97fb6a5d9f2b8a86147e70c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D46K! z;usRq`u6%l-UbH&my7i>Ox;$F%oe}iGkG#|7(|>&&1{&k;M||7lh3@{JX@)0+GW$d zdJYW?j7%&X0tyfY!{6u~=QO?A3=apWy-R++svs<4n@2qN|FYoM-~TZFI4EQ7u(DVc VXc>d2tDnm{r-Y`r$KSLd^8sfVKOO)8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbcf9e6efb15abaf14f1d8b73f068dedd8f6d40 GIT binary patch literal 751 zcmVPx%sYygZR9Hu~mqBY9K@`Vd4koT8DoKOHB1tGI0l}1b3G^5OUc47P_N!G0B!_~R zet|+SN)r%*5)62Vk_4(Tu0~4B8}}`<+HPWzWL9a|Ev@ai+{ms_SmMM z+N+hYeEaCek>6cGfbHoPq*7_vO}y6zRy*8|Z=l!jLAsEHMxz1QY!=Gpa^N_%S`CK7 zA*`;w0S`dv=*|l&fXO&ofUChT?Kp+hN707>TCEl&lS%Om15m?fbT9w!n*j=LSpoBG z+h78q009rrr+5nU(Uq3L(jG^1@dMsI#8PEah2N2EuR9pPe7#IEERh zR4QR&i@s=HJcS7N=CEyd=bbnYqQ4K@UZ&4H0Bs)me12ifX0s`t(H5%$gn8EkK#_FE hYMDqqp8xN={{XptyC3TST44YH002ovPDHLkV1icFQ@sEH literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..cc185dfdb5a6afa911a8f78035710018819aaa1d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C>ZPM z;usRqn*8VgfBVA@Ov@Oz)?Q&;%qLNLUK=vN11Qa0#Ha0e~oTm9{hX2w7 z(-R&DJ#Ox{v;S3j3^P6Px-5J^NqRCr$PTwQBjMHHR1r1_90p;ba7!33!k0;x1Ff*^t@c`%@FLLU7;{t5$v zf`$0d$0AfjxWN_zB|#Di(!`HyV$4T_R@S-Mhdpy==Iog>bB>aGUT*HqxwF>nHG5|E zo_+4X{OyJ3$4AF%WOPLF>(Rr`fc8PcH^Ai00UuXx4kj*fAbid#6&F`uslNlbVe#5x ziM@UFgWBEORbOx4&nCcIGjBhim>*NyKmJtUa(ukc#es0w*4EV2)Ra0o{o9Jqg{aHL z#9UfhDx3fOi@T~2;MVX>ZG1N^fQb(>IXJiku;Fuq)Zt=c@^&!*3IU#-{#ATFKmL00 zS_e=vQ<)w>__;X{?#9N38XFrcJ%HnL{weHXVxs+ngM$L*%Fqj40WM$qM;#v@w8=DgkmV!j%HFu?>A=_Dyx~>AhkkG`S50 z?!zY?H9kI}9-nM#__?;B91|FXi@(cAczSwT4eyOM76)(vC=kod0Slr{09zoIii?S9 z6=3F-mrLX0h9+`BTmYm3c!zUwkO+V%I3*XC0I%JgRU4aIz1h&FjE`yH$2FTHIzNq;|APJCzgTxT2 zlYu_WRs}G(V{{^wTL2T6N22&UhX5{2;L)j=b|RKz^qC&e7ocmA)&#&gFr7w$NK+nQ z;x^#{E=)cs%Un=XYd~KBZvO57EDz<1P%M`a%wi2_TL8)of=6tpU5eU_0X$qt2jlwigZGQq_4Re_^H?rE%(=O_ zlIoXtzv{*TRGuCS=p4@MAGR`WDgo!^>8UwXm4}0(t2{lHiw~3A3jHqy@EI|*Rz8G) z%K$DuE-q3`YS(P1E)UMvCa7t6df)SWfKLc%t-P-$-du$6-h4hl;!!3SDJHeOy1H8C zqHdhNRGbmdjJ_&?*6tx52)yXI1O5zvtwCV-!~s%dNy@@k6VGwXWSo=(-N(5|F>UxH zKqx-v!3B`CqY2=ukLL}A)XMt;5wyu8LA>Yt@JIXKSMs-Ukzx`)UTFZ>1PJ9}rXDER zJpzo3=+B60b6Q}nd{rcfws|Um1fWjGaFJq41c>3`5&(mZ`s)+`xsbuZLF>qi zsgJn&T%?#b51iP)sz!!~i**1O1PJBf6Ts#ThlhtnTv9B;w)%LkMrf_P z)EJZuBLN<-f2Jm{_-7y&7bzwQfQ8bGgt4IFis2C=K+lO7N)ul^cK|BWu2U;tWenF8 zgpS|2s-n0^F>O6z=UMLqSChwnX8yv$!asXr6R(n1G9$-#Cv9av+fZLkyy-cqwxLqY67T%^05cMf*@lK<@9+On z6epL@2l#@Y&{}z0Z6rOEVCLfa6eJ0NTwFphs|1MQ;S#{?FJX%Wh%MK48G|3Z@V_OI za21yj%sK+Nc-RE6^;axFRfl~Gut}zfE>AX9tN>M9Y{vIt#tI-cz69Ir0cQRO4NB9{ zHscc^yoOFeRa{)g_hH5e;NlV5Uy%pICg5CTxG`*=H&4IwNykZ4+te>=7OXhrympy&HwP}&vzamR=Ook%~a=Bs$Ko&>zrqO$T%y%FD8SRT0#A z36~g5v`Yu&zOonz51RnK{&H+h04#z4G_R0a`Klv98!_`ltaMEwml#Z5r9k-Rd4QCM zcxb!lJRrpnm&PoJF@;&SVl4jTr7h5NedenRs%i&3>P$ge98gsnD5;g_0+@C9 zuFm-C^IhNJTw*Y7fgsY+w{LWRL`iyq2MHkUFK-(^8dW|aBLS_d6b`A0m*DyCAug#f zAprewNC>ys=MI2@YQ$0is*mU3p|$eTns~xM`&6Hg&nQX9>*x8s_?zzc2@ui_wa*0z z`MxPY$aggXB<0i+58wh;wTXMp=L00858vSegksYDsms$P{k38L3*E-H#Ixm0n*aa+ M07*qoM6N<$f}F+L8~^|S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..7498990a390fff5bc731e3baf307858de3ba839f GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DY|LVWJZ)g7gayQ33 zC84efpUW1jM3zjpl9GRBGrjV(w^{7`kH3`q%U{Rq-`5M@{OZ~IpC|ve&)L0trt>=A zPcLuPUCx)6GP(UU;|BX9pS;|%U4_qp!OP(3>gTe~DWS>x#=icOSELqHvM#qqt^fe%s?IS0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..8c381d4c61eb53553f4e9ee9184c0bb067df59d0 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^2|(!}C>Tt7pBL_kH(w{qxKbdX5In2Y48a8O|_Z zGB&v0KYDjrl(~P{=aidki*4nKcB(J0-gI|+mFWZX?{!9Qla?D+eJlE(RkwX{B3_fg zW=q#LEc`$JK_gGjm-qu0usILv@}Kn#Hv4a1+`#^>bGptP{_Z|tI5Bv-`njxgN@#*J E0NvYmaR2}S literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png new file mode 100644 index 0000000000000000000000000000000000000000..f210ecf123ef7c095416ebee9a638fb3f5962b80 GIT binary patch literal 588 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQk(@Ik;M!Q+`=Ht$S`Y;1W>TY z)5S3)qw(#{g}jFocvutvhXyz%gr7*0)ta5!dZ=NM7a#X3FD|uWcPeou7pDTI=K8KzA{C zy85}Sb4qARKO}_AZSOoD*7PCC#DdqUUT4YBha-GG5};EA7)U z%Pl)B#5S^UDv5*yxNw>++VW~igvX`2Gl%UT{8BB_e4^DfF_|$nV?wO`5BWduuATDj zF`wjQxZv~ALc6wx19}1Lt|H(?D1tSL*h@TpUD=;8v2n6nFZwC< z9;nU(9BcR9o?gh?;K0CgP}woj;EO|MyztUm{(J)sp$QTODjI1|V$FW;eD^Y9y3F4> lJeRlT>fX#Yn)dshFEc1Wf#AM1V+lVW(~eWB5g;xs!~xDe=FtEE literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec26cadcca1e0dcbc9bc81e0de76648fa20da73 GIT binary patch literal 366 zcmV-!0g?WRP)Px$C`m*?R9Hu2)YCWq|NYx{22L(c24ryQ;#o!%0V;ApcEXHf1aUlsJmAJZ_;#1! z#mg5AhaMcDnFH(;9R3UF@i9Dj_>=+c01XaR6#voP0l$8J1v@~G-vCV0-2u!@{}{f1 z|32z~(GVC7fsqvguF1{}tJiFRl!OCO4h*;hEEKI7cD&nx2mx7HSq6@mTy!gnQ5>Kk zFAcYxUUdPA1CVP&dQ?Op%P&4Z%kZ52HEMNCPs{oF1sHDpxQ%cCy)6etHQgNm%6dze zE@j~3;{zx5A3y)nHv|UU0ibr^ty{MSE(As$Fd71bHv~XkvlI7^(xp2F%7)R=(cppz z-XMYX%V^mlh4lx|ojb=MBrFc^3W8fi1MUD=_nej?fb3C_hhcUC0DTg`5QgaHVgLXD M07*qoM6N<$f)%}yd;kCd literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe0e327c6241862483d5b68beda9426837ddfb8 GIT binary patch literal 2164 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0d28b65b41e952ff138206e67c2eab541e97bb GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^2|(8{u8~v8D4VHsbO6G zfVso|4c8&1BjN!kB0N|OU4!0~Gv5ndX6fx$roOr6aZ- z1}+D8Mh=mwTHm65f$YT+y$l)*tpc|q)?a62$bORjbN!B}<;)J{46?aLPQ2j5WfxWl zzy;Ha9X%(xy#KrYJX>?)=CWs%eGdyFR+UR`zZr2VN9~_N{jt6Gk2?PAnJwY{SLvDM z`@edd-mLt>(7nr7{jpQV;rKa^1@7->YujunH@iZ-boN@t%`<;2o-C68e!BhVkJrvE z3evs1yXSU|;J$sc7FDOMPPG6kvTf?}5?y%p$g^LX$F?7+(_U_op8Rn2BePiMu8SPy zx2>n0vOl+0w0Jfv$HLzJlhS?q=NND39Qr)x=xgtn_fqdn<97>xU2;dom+?U5d+-0+ z7UwOkB{pj1eP))D-aBvhl9%6~Eq>B_!zO+0ZPP-%SJ!?r7*&b8AOaumcP@u#+`hMN Wo}Z+2=^ZeEFnGH9xvX^(3p31-d+H}+6gk7a`|=pK~c0c-aIha zzO!7dxw>&|Uhi41)>Khve*oXHc-WHM{awae3#zDt9bItJzomGD@u;NA^Zfw;RC&(R z+4;}<^cRgc0Ba|_)f=v7Q{dBt)ys2B=hFkG8^@-04#0?r>Gygqk=GUg9M9*bc1{7h nNn&>QP52cDfB+Bx{yo44RP&P*c~z&500000NkvXXu0mjfWXh0Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png new file mode 100644 index 0000000000000000000000000000000000000000..899651c30446a8998f9b1fabda944d7360df9810 GIT binary patch literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1-DY*PN^juO zbNHjE%+V}hzTm-T4o;1<4LdFQi}tCdblowo`Fw9KPk9UnW0QNUY{Jcn3`Rl@ZcHaU z7$i9rlo?Z08hThJfCbZzzG}a0!s|KdkHxg-mcRb)+q_CLxowlq-njFYtJ@2|{)%I0 z`1?ol`^k52icPAbZk#+mVWG}xUygG*tPBm`bydWlTO4?D>b4A@?rGQAiE&~FHn8W^ z)joPy*mC$WPyYMq6%{fISA?uRXj~{9oWXc7E0M--(oM3v-T6o|50rvB z?(X|$_9K~q!b>Jme`5^XKVF&j%`2QtMsN-@c!MQ;uYX{&xPXV-MV4h*a7^*H)mTo% z^duKBlw8QrI7#Az6a!+!k42gRM*{jVXw(2^)BtAG0A@rO5W6r+TTo*dR0c>itn&u= ziYhf*#29dhKzXbye)sb`x`T#9jF|@skRQx^J~1)&r}u;k?=m8#VH_qLszE1c7I|*U z-vi17+kNaSpCz%9yQ#rS&sN2x0`#dRVZ$Zo3 z(YozxD(tDJ*Nd^#9ngM11*`#hZL|qqUX-aA#5S}G^!n=WLLU@GQ4~c{6dSK|xP5Tx z!-H@vnhtn%y49-Lc3NyR!WG{&^FjpmIbAy+o5nPrx)V}}E%fz`bB+BtcI@^)8^rTf zBx((Ky3EXU1aLM2IGxVm^KA+58-UdY;QHA(FXNaPN!aD?zV8}<6&DioA6qwm%&S`B zG(?rf)v;@BC^IYu=$f%ZGhhqXw5SF!qXsa;V!%*uXSl{qZh&O*G5ePMUQntINQ83i z$upoRb}H)fv5TKDu*ZP$-hvmY3!Atq6ENBh(WYFFM67|7l05p#?E1nmayZKasmvEs z4%uF#@2=U$hCc&#<3^>qaoRUjD5t(Q@!@5>eLn%YPa&y@Wk6F&Jf;Amr=S&p`TF~H zKQmyzZBbK@-3j_NfaCqFrZteLVgLD`ViBgsl+FQ!832*%0DhkaTq4i015y-4Q4~c{ f6h%=KHvsSpwHV1KmpgiI00000NkvXXu0mjf++aJ5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5d774588ae44eab5608571cb6aafad7375e158 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^2|(DFD66%%n7hj|c25u0=Hbzuz>&Md dbBcZ?)Aw7<0^jOhxdW|Y@O1TaS?83{1ORW&Jrn={ literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a028dee5bbe41a7f4e35f686043e8a112ce4e GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(YymzYu0Z<#e`9lQK{p_au_VYZ zn8D%MjWi%9!PCVtL_+fI!HvAl4m=D8Hh=XH6ZQR;XyVo{y01gP^_0k+pXD$8l*-N4 z&iUk!V5<=?maE{?*yyS)-udN6;H*Pi5*L(-Fs)pAdDY$x8SUGCM{GTG-~v& dN}IerjGt7Q1>7HnEC$-e;OXk;vd$@?2>`@EK-2&L literal 0 HcmV?d00001 diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png new file mode 100644 index 0000000000000000000000000000000000000000..630eabb976ecf11fa59ba29f03502b02bde399aa GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^2|(1P8ZNkY>!D5Xf# z6r~g*LKudVwY)h1P1ErG{Y_O>7-LwiR)`353_Ys?Q50dVWxL(toFmV3j4>Ev9Ps-l zJRA;eHXCkkZUA_Cdcya8uCA^oYs~_vstSOYmlptvqL5)2-05^$24J__0pOg&T1%E? zSZlG?E(5S$uW`=d`##P&PNx%L7!t?vWUW~#Fvg&@CP@;4AQ;U@mSvOsz$}0yNe~gr zvZU)ew%aYf@6$BRWUX0O@bK^eKpe+o2Sh2w$H&Jq0Jpcd7-MkGk!2bD&AuCkVVOQq zRTXX9QdJel;}HO*6wbM2W`WlFXVbDQoiPRx!S|=j%`#!vby#aL#<+j-FCvo*Fs}mF z*VkBUT~QQ-VTg#xI1v{CD2f856iw4m*R_me`SbI08GyR3UElW{k4Mrp#q&J0)~wg- zWdO9+#Bq$Zmb0@nHk%D`9JAOk8XJyMilQjo>+7qG#+c^-Y=BO>H^PTRIWSFs4d+uIvimN{b#&(F_dttCm4pMS((2iWa)^nH)#d1G6q zEKBzL{W1VwUta`4Al6#<`1tq(<9X9PE&uy@{s#~QNIZEt|6~9F002ovPDHLkV1nDB BNt*xw literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/equipped-HELMET.png b/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..2924b36b0420fcfd27e68c2fd7ca006d220b7db6 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=pFCY0Ln`LHy=9o!Y#?&%qkf=j z{)Roi|dj8ei`gOeK#|H;Flm3B?$6!)3B1#noc_8k&+E4Nr}^7{ zuAcU%e=qm3!Yc+mpYGj%UUY8O^T^94p}C9F|2g0HOI+-re>NR{PxU8&{XtH(c57 zzQ7wqx%t<_^f55p`pe)FJn6+ziPR3DAYW>PXPU1sgBFm@0abJFVdQ&MBb@ E0KVLXY5)KL literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/icon.png b/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..85f8675aaf6466c047ea2446b1c67f47ed708da1 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJWu7jMArY-_FKy&KWFXM`P`>3! z$nRUKNDcFEjIHjwk?CENssTv(>d`%|bL#Ng3tG1HtF+3*oX3O)5-}hNO zFF3bw)e5c4CU0Mr{!6R4Y;q?3eeF;0hOZx<|NSNQ=sBYkN2(m3!glrpLP{+Gdt1GI z3-5m~iEZzwxwCYN#PNxV604YUep)Qejdn?i{Jf`e>l|Z-RbF155|6L_J0_9bV|k6+ q^RC7!qyMXufG*}sjqptK^<~fkvN?bl1TF= zrtJR5$Al|@WYmS$R4(S`2`yV@r~TM$*t;xcpG{1Uk_d}{0|O%_p`d8sdwJ@Pt2v*I z&5PteY|^=I(f8P zbql;_Z=YkdK8jIJ(d+MO(Fd2G?7OGrWoTW)uN8G_kCcPsyY>4t?sMN&pM4)_mqSIP ZIo}gcImP??76XHj!PC{xWt~$(697ADj>Z50 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/inhand-right.png b/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..e7de9c7fec54744196b213b697fdd02a89656adf GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV6^shaSW+oe0$5AtJy%H;bG>= zrtJR5$Al|@WYh)M(;Ui*TUw7b`aL**NXlF8^UM_Et^ffC21XW4qS2`_QDR=J@BeFW z-kEMAF0ITQik%ZmZ?q&NBV- zu-s9ERp8q23uWE<_C`@Tmh1ok literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/meta.json b/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/meta.json new file mode 100644 index 00000000000..23800aadf7a --- /dev/null +++ b/Resources/Textures/_DEN/Clothing/Head/Hats/seniortrooperhat.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from WizDen at https://github.com/space-wizards/space-station-14/commit/2f7ad782c5cb1544b584d92ecc4ba8614e538e18. Modified by FATFSAAM2 (Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b8c8573f267db2957bd901d1454db7a2fd20ec GIT binary patch literal 1978 zcmV;r2SxaaP)>398?YH?#=$UyQL$RI@*k0Ela14LmNZhur6<%wR9kg+52KFDuIqTWzaM|ReqETJn?w5B zZ}IcjU$gHH4j@SqTrQVDDMc=q>zR{@L;`(%eOOspVY;qkVq&7jW_^7fk|g2c#fw6% zR>SSvx4Fjd>t=A%=fi7mHz=h{mSsqigmJGI({pnS0GpnhW8+>gBuRoS%b=99*W7O0 z^!aQDdX&CGDOOfiEd64!hlrt#v*Qai+(#y{aeYaFlsfnKR(`7qhkULuNTXq5I(+f7oUAG)AD{Ql>z|# z>u)dzy2G*VM)Hl7}lnyAOR@qIs@lI+m6+I z-qMd|GA$+lJmqp3pMLPr(qGNzyXtpc1PLJ+8XCecfq<~Hvja`j+S+NFhMk=q{1ONV zLqkJWxq3XFZW3*&R;x|=+vm@>=r<xW#>U2MO(Q#>;~v=S^}^+HF-ejD0J1DYRaIpCcINaF(iF z#A4CX_jo*5U0t;fkH=%_i^Za?ak;&X4-X^acC+PBs3~YklHl=pFgQ4f%UfH>Rw}~M z{=V%1yOB^;sFbqhPzV65WSCcg0C0J03)?Q2aC>{3dtB}ch`8O>V>5UFRzm@3s z)?+hxQ@`=d&}hfQv6krPMS|HO92^`R92^`R931{Hu>D=&(xpr2@9)RJz<~94X=&*+eCtX) z9!IrW#lgXW_4mPp2e!trbw3~;k7HzH1nG2|ZES3?i6>8(*Xu2|yk0LR zo;+b28yhU0PP5U`Q6v%xTjOviARdq7?A{(SnG6dA0?>6GcSI3yJbJ{!;V@FE6q}r! zv>k|DCMPG6N~Ksh9L5`u9!(h5x#$)ZI()qWf|dc7}ttL zER;(4XD-LY%}wqxx$g>}tyJ)~Vc?VGRRF-#8+Y*!pAY7JdQvDL7K>r_$`zYo@$;X} z4a8zGD2ig~mdjnj5qcLhB4`EaLRTDq^FEBbAlf(u*+mpZd>D6Gdgd;5<54ISU>FAX znA}sqFbv4Dj9@SbSAF;8^41oX>m{%2IzIZ6;N9!3?R33jSd#G3muaiP+UAL`cx zw7xZNCjqurGr!+2A z$d*(#n>})sw;Mcg@&*YDJExxiC9M-DfDi&r(_VN2G)?PCPr^%I0mtiO1(3_-(7WG+ z9G~wF4uBs1I>o`^CF3^$veHdI5~U~r000hUSV?A0O#mtY000O800000007cclK=n! M07*qoM6N<$g5RvnfB*mh literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/icon.png b/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d32f7c944119a7f141bcbe75faa12be3a6698f75 GIT binary patch literal 491 zcmV=j*uJHn5De3$d4kV48tybFF*#zPKg=?=q*xSZ(OR)(A zg0lDq0vQX(LS``BNoGN-+Yc=4%zN|Rci#MhhK7d!ove=YU@-8`Ih=EdNF1xR_DU&~ zQcS1QS}{M>Nv^det(4>!KX%!f%~p~F42Q#&c1XUxvB6=l=Sg6#fUBy?j=%rr?DFehwmi=P z_;daxep^|_?c-x|1(NnaVGO57*GQ)m)_H|*CpQ3y2>aes7z0(65_)|F0Lrq=3S+R= zA|n6v5fQAl6vj}NW%4FW5)eeZr(bOWA4RfSt+fZ}cDtcXzu#v*pT}jf)&i_tQtL>r zKuF@8Biwp>gS+@2j_6x^~gGq{R8v|#b-FLE2=k+dY zlZric{uRy~B zul@I@PdDEyTo|R%@&0R6!W=)(%a>>7TczbQEWWs6LDRA4vZ^->BklM8?~=bi{bcf- zoHG^Pmru{gx*EG>mgwx31$)Cz>mR>W_&ZF8%ip-t)YjL(w=gvOZP&RZT?UQ+$_{&@ z);=-0GVi(M`pHYo<@$R|HznQwtt_DTKsj*Fgg=MB&Ri23ZQ%BrQG(MfQ2)~VHizedeavLt>pOX^FmkbQK{MGxa{fk-W4Bd=_?C}T$CAKeE#yvk5+}Y z(!FbD-1Ns0y5LaXsVE?|KH7e}wttYhVEDdOVKW zTzXR+Y<=&>X6v#|yRUg~I&XOGO5gdr#tJNxGUngD@o}dO^+QCGP+L literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/inhand-right.png b/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..348c2f2b9006851290d4bc833d47fe250f52b58d GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU<&edaSW+od^^k5kI7NyD7$k* zTmOQE3JW(bTVkkk&r!Ns_%LJ6-X`%2N3sb`fk!@b?Hh1Gx67#?PAu(pxmbM8OBbkdJI zIV{h9?n=EV&1f*w$4lza;n&+g?ND9yZO8n5OG2I*o)2e;{4y<8EkW-^Ny^p24@+aj z8jnBAJ?UAMd_IYtVU;z@jrG^Fx0-!(6gYD2Cey#&_g{aV@@`9&^7aF98;&ql9Qcxa^_^x_ z`jz-EK&kk0OcsNck$Lw;x4a1=j<-$iz6LWIC>MV=yYO}i$1U~4+opvultisj{=E02 zftRFE{}aWNUD;E;AEPX34#jFq?(T`2qU}cl9li=6id9iHyP1)z4*} HQ$iB}8tNVx literal 0 HcmV?d00001 diff --git a/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/meta.json b/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/meta.json new file mode 100644 index 00000000000..b8a05e11941 --- /dev/null +++ b/Resources/Textures/_DEN/Clothing/Uniforms/Jumpsuit/seniortrooper.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from WizDen at https://github.com/space-wizards/space-station-14/commit/2f7ad782c5cb1544b584d92ecc4ba8614e538e18. Modified by FATFSAAM2 (Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 493a53a4a2ae95901fb38e8552676d2339b459bc Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 13 Feb 2025 03:23:56 +0000 Subject: [PATCH 10/45] Automatic Changelog Update (#1773) --- Resources/Changelog/Changelog.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 793caad225a..d0e60966838 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11672,3 +11672,26 @@ Entries: id: 6844 time: '2025-02-13T03:21:10.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1769 +- author: The Den Contributors + changes: + - type: Add + message: Added a Trooper Uniform and Hat for Security use. (by Rosycup) + - type: Add + message: Harpies have gained the ability to hoot. (by KyuPolaris) + - type: Add + message: Added ability for Arachne to produce silk. (by KyuPolaris) + - type: Tweak + message: >- + Tweaked tool belts to take more tools and mantis belts to be able to fit + certain epistemics tools. (by Rosycup) + - type: Add + message: >- + Hopping, that's it. *hop and *hops now triggers the jump emote. (by + KyuPolaris) + - type: Fix + message: >- + Shadowkin are now able to select Psionic Power traits without taking the + Latent Psychic trait. (by Rosycup) + id: 6845 + time: '2025-02-13T03:23:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1773 From a2d2a3e642f561ee9a8e2d4bee377f0eba8ba16d Mon Sep 17 00:00:00 2001 From: GNUtopia <93669372+GNUtopia@users.noreply.github.com> Date: Wed, 12 Feb 2025 21:32:25 -0600 Subject: [PATCH 11/45] Add Argenti Ammo, Gun Age Requirements to Bartender Loadout (#1768) # Description Adds a .20 rifle rubber ammo box to the bartender loadout. This brings the Argenti in line with other bartender weapons which can come with extra ammo. Also adds an age requirement to the Argenti, repeater rifle, and .45 magnum rubber ammo box to comply with space law. --- # Changelog :cl: - add: Added .20 rifle rubber ammo box to bartender loadout - add: Added age requirement to Argenti, repeater rifle, .45 magnum rubber ammo box --------- Signed-off-by: GNUtopia <93669372+GNUtopia@users.noreply.github.com> --- .../Jobs/Service/bartender.yml | 4 ++++ .../Loadouts/Jobs/Service/bartender.yml | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml index 27788fa2a51..d390b9364d4 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Service/bartender.yml @@ -22,6 +22,10 @@ id: LoadoutServiceBartenderBoxBeanbags - type: loadout id: LoadoutServiceBartenderBoxLightRifleRubber + - type: loadout + id: LoadoutServiceBartenderBoxRifleRubber + - type: loadout + id: LoadoutServiceBartenderBoxMagnumRubber - type: characterItemGroup id: LoadoutBartenderWeapon diff --git a/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml index c647b02a3a1..362a80c7075 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Service/bartender.yml @@ -38,6 +38,22 @@ items: - MagazineBoxLightRifleRubber +- type: loadout + id: LoadoutServiceBartenderBoxRifleRubber + category: JobsServiceBartender + cost: 0 + exclusive: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutBartenderAmmo + - !type:CharacterJobRequirement + jobs: + - Bartender + - !type:CharacterAgeRequirement + min: 21 + items: + - MagazineBoxRifleRubber + - type: loadout id: LoadoutServiceBartenderShotgunDoubleBarreledRubber category: JobsServiceBartender @@ -81,6 +97,8 @@ - !type:CharacterJobRequirement jobs: - Bartender + - !type:CharacterAgeRequirement + min: 21 items: - MagazineBoxMagnumRubber @@ -95,6 +113,8 @@ - !type:CharacterJobRequirement jobs: - Bartender + - !type:CharacterAgeRequirement + min: 21 items: - WeaponRevolverArgentiNonlethal @@ -109,6 +129,8 @@ - !type:CharacterJobRequirement jobs: - Bartender + - !type:CharacterAgeRequirement + min: 21 items: - WeaponSniperRepeaterNonlethal From accd8d7bcf1e9f6465b64836b52350d7a3b3c471 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Thu, 13 Feb 2025 03:32:52 +0000 Subject: [PATCH 12/45] Automatic Changelog Update (#1768) --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d0e60966838..61f5c5a736e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11695,3 +11695,14 @@ Entries: id: 6845 time: '2025-02-13T03:23:30.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1773 +- author: GNUtopia + changes: + - type: Add + message: Added .20 rifle rubber ammo box to bartender loadout + - type: Add + message: >- + Added age requirement to Argenti, repeater rifle, .45 magnum rubber ammo + box + id: 6846 + time: '2025-02-13T03:32:25.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1768 From c515cc5117f24463db2cf5bc849a239fd08c4975 Mon Sep 17 00:00:00 2001 From: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> Date: Thu, 13 Feb 2025 19:09:58 -0600 Subject: [PATCH 13/45] WAR OPS ARE BACK!!! (#1776) ENABLES WAROPS # Description Turns war ops back on since delta-v turned them off apparently.

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: -tweak: reenabled war ops --------- Signed-off-by: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> --- Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index 31e35077047..28d949935ef 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -116,8 +116,8 @@ pocket1: DoubleEmergencyOxygenTankFilled pocket2: BaseUplinkRadio40TC belt: ClothingBeltMilitaryWebbing - #inhand: # DeltaV - Prevent commander spawning with the declaration of war - # - NukeOpsDeclarationOfWar + inhand: + - NukeOpsDeclarationOfWar innerClothingSkirt: ClothingUniformJumpskirtOperative satchel: ClothingBackpackDuffelSyndicateOperative duffelbag: ClothingBackpackDuffelSyndicateOperative From df97ba599d3f450f3df9e3b1e0db0536a6c3f561 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 01:10:28 +0000 Subject: [PATCH 14/45] Automatic Changelog Update (#1776) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 61f5c5a736e..6644df09ac3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11706,3 +11706,10 @@ Entries: id: 6846 time: '2025-02-13T03:32:25.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1768 +- author: EctoplasmIsGood + changes: + - type: Tweak + message: reenabled war ops + id: 6847 + time: '2025-02-14T01:09:58.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1776 From ed593f070a579a47f2e8800d4a5191741971b3b9 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Fri, 14 Feb 2025 15:00:16 -0400 Subject: [PATCH 15/45] Sedin (#27110) (#1786) # Description Ports https://github.com/space-wizards/space-station-14/pull/27110 --- # Changelog :cl: Erisfiregamer1 - add: New chemical, Sedin. It restores seeds on plants 20% of the time with other adverse effects included. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: Eris Co-authored-by: VMSolidus --- .../PlantMetabolism/PlantAdjustPotency.cs | 28 +++++++++++++ .../PlantMetabolism/PlantDestroySeeds.cs | 42 +++++++++++++++++++ .../PlantMetabolism/PlantRestoreSeeds.cs | 38 +++++++++++++++++ Resources/Locale/en-US/botany/seeds.ftl | 2 + .../en-US/guidebook/chemistry/effects.ftl | 23 ++++++++++ .../guidebook/chemistry/plant-attributes.ftl | 10 +++++ .../Locale/en-US/reagents/meta/botany.ftl | 3 ++ Resources/Prototypes/Reagents/botany.yml | 15 +++++++ .../Prototypes/Recipes/Reactions/botany.yml | 12 ++++++ 9 files changed, 173 insertions(+) create mode 100644 Content.Server/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs create mode 100644 Content.Server/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs create mode 100644 Content.Server/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs create mode 100644 Resources/Locale/en-US/botany/seeds.ftl create mode 100644 Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl diff --git a/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs new file mode 100644 index 00000000000..5776463ce71 --- /dev/null +++ b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantAdjustPotency.cs @@ -0,0 +1,28 @@ +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; + +namespace Content.Server.EntityEffects.Effects.PlantMetabolism; + +/// +/// Handles increase or decrease of plant potency. +/// + +public sealed partial class PlantAdjustPotency : PlantAdjustAttribute +{ + public override string GuidebookAttributeName { get; set; } = "plant-attribute-potency"; + + public override void Effect(EntityEffectBaseArgs args) + { + if (!CanMetabolize(args.TargetEntity, out var plantHolderComp, args.EntityManager)) + return; + + if (plantHolderComp.Seed == null) + return; + + var plantHolder = args.EntityManager.System(); + + plantHolder.EnsureUniqueSeed(args.TargetEntity, plantHolderComp); + + plantHolderComp.Seed.Potency = Math.Max(plantHolderComp.Seed.Potency + Amount, 1); + } +} diff --git a/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs new file mode 100644 index 00000000000..2929bb6ee9e --- /dev/null +++ b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantDestroySeeds.cs @@ -0,0 +1,42 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects.PlantMetabolism; + +/// +/// Handles removal of seeds on a plant. +/// + +public sealed partial class PlantDestroySeeds : EntityEffect +{ + public override void Effect(EntityEffectBaseArgs args) + { + if ( + !args.EntityManager.TryGetComponent(args.TargetEntity, out PlantHolderComponent? plantHolderComp) + || plantHolderComp.Seed == null + || plantHolderComp.Dead + || plantHolderComp.Seed.Immutable + ) + return; + + var plantHolder = args.EntityManager.System(); + var popupSystem = args.EntityManager.System(); + + if (plantHolderComp.Seed.Seedless == false) + { + plantHolder.EnsureUniqueSeed(args.TargetEntity, plantHolderComp); + popupSystem.PopupEntity( + Loc.GetString("botany-plant-seedsdestroyed"), + args.TargetEntity, + PopupType.SmallCaution + ); + plantHolderComp.Seed.Seedless = true; + } + } + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("reagent-effect-guidebook-plant-seeds-remove", ("chance", Probability)); +} diff --git a/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs new file mode 100644 index 00000000000..11af8d511fe --- /dev/null +++ b/Content.Server/EntityEffects/Effects/PlantMetabolism/PlantRestoreSeeds.cs @@ -0,0 +1,38 @@ +using Content.Server.Botany.Components; +using Content.Server.Botany.Systems; +using Content.Shared.EntityEffects; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects.PlantMetabolism; + +/// +/// Handles restoral of seeds on a plant. +/// + +public sealed partial class PlantRestoreSeeds : EntityEffect +{ + public override void Effect(EntityEffectBaseArgs args) + { + if ( + !args.EntityManager.TryGetComponent(args.TargetEntity, out PlantHolderComponent? plantHolderComp) + || plantHolderComp.Seed == null + || plantHolderComp.Dead + || plantHolderComp.Seed.Immutable + ) + return; + + var plantHolder = args.EntityManager.System(); + var popupSystem = args.EntityManager.System(); + + if (plantHolderComp.Seed.Seedless) + { + plantHolder.EnsureUniqueSeed(args.TargetEntity, plantHolderComp); + popupSystem.PopupEntity(Loc.GetString("botany-plant-seedsrestored"), args.TargetEntity); + plantHolderComp.Seed.Seedless = false; + } + } + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => + Loc.GetString("reagent-effect-guidebook-plant-seeds-add", ("chance", Probability)); +} diff --git a/Resources/Locale/en-US/botany/seeds.ftl b/Resources/Locale/en-US/botany/seeds.ftl new file mode 100644 index 00000000000..e2947301974 --- /dev/null +++ b/Resources/Locale/en-US/botany/seeds.ftl @@ -0,0 +1,2 @@ +botany-plant-seedsrestored = A healthy green tint returns to the plant's leaves. +botany-plant-seedsdestroyed = The seeds on the plant start cracking and fall off! diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl index 705473c2eca..23dec750725 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl @@ -377,3 +377,26 @@ reagent-effect-guidebook-add-moodlet = } reagent-effect-guidebook-purify-evil = Purifies evil powers +reagent-effect-guidebook-plant-diethylamine = + { $chance -> + [1] Increases + *[other] increase + } the plant's lifespan and/or base health with 10% chance for each + +reagent-effect-guidebook-plant-robust-harvest = + { $chance -> + [1] Increases + *[other] increase + } the plant's potency by {$increase} up to a maximum of {$limit}. Causes the plant to lose its seeds once the potency reaches {$seedlesstreshold}. Trying to add potency over {$limit} may cause decrease in yield at a 10% chance + +reagent-effect-guidebook-plant-seeds-add = + { $chance -> + [1] Restores the + *[other] restore the + } seeds of the plant + +reagent-effect-guidebook-plant-seeds-remove = + { $chance -> + [1] Removes the + *[other] remove the + } seeds of the plant diff --git a/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl b/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl new file mode 100644 index 00000000000..ee82be04ad7 --- /dev/null +++ b/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl @@ -0,0 +1,10 @@ +plant-attribute-growth = age +plant-attribute-water = water level +plant-attribute-potency = potency +plant-attribute-weeds = weeds level +plant-attribute-toxins = toxins level +plant-attribute-nutrition = nutrition level +plant-attribute-mutation-level = mutation level +plant-attribute-pests = pests level +plant-attribute-mutation-mod = mutation modifier +plant-attribute-health = health diff --git a/Resources/Locale/en-US/reagents/meta/botany.ftl b/Resources/Locale/en-US/reagents/meta/botany.ftl index 912ded5cf29..607763dd3ce 100644 --- a/Resources/Locale/en-US/reagents/meta/botany.ftl +++ b/Resources/Locale/en-US/reagents/meta/botany.ftl @@ -21,3 +21,6 @@ reagent-desc-ammonia = An effective fertilizer, it gives your plants some nutrie reagent-name-diethylamine = diethylamine reagent-desc-diethylamine = A very potent fertilizer, treats plants with nutrients, eliminates pests, and sometimes it can even speed up growth. + +reagent-name-sedin = sedin +reagent-desc-sedin = A modified version of diethylamine that can restore seeds on plants at the cost of potency. diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index 99e9182103d..23d80f0e79b 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -155,6 +155,21 @@ - !type:ReagentThreshold min: 80 +- type: reagent + id: Sedin + name: reagent-name-sedin + group: Botanical + desc: reagent-desc-sedin + flavor: bitter + color: "#3CB371" + physicalDesc: reagent-physical-desc-sickly + plantMetabolism: + - !type:PlantAdjustHealth + amount: -2 + - !type:PlantRestoreSeeds + probability: 0.20 + - !type:PlantAdjustPotency + amount: -3 # Match this with current rate of Robust Harvest potency increase - type: reagent id: WeedKiller diff --git a/Resources/Prototypes/Recipes/Reactions/botany.yml b/Resources/Prototypes/Recipes/Reactions/botany.yml index 0e95bd7ad92..1d96de479a7 100644 --- a/Resources/Prototypes/Recipes/Reactions/botany.yml +++ b/Resources/Prototypes/Recipes/Reactions/botany.yml @@ -21,6 +21,18 @@ products: RobustHarvest: 1 +- type: reaction + id: Sedin + reactants: + Cryoxadone: + amount: 1 + RobustHarvest: + amount: 3 + Diethylamine: + amount: 3 + products: + Sedin: 1 + - type: reaction id: Left4Zed reactants: From 969b5272b99011a2b8574b1d3d8ff723220921cc Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 19:00:43 +0000 Subject: [PATCH 16/45] Automatic Changelog Update (#1786) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6644df09ac3..02ee6b75f97 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11713,3 +11713,12 @@ Entries: id: 6847 time: '2025-02-14T01:09:58.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1776 +- author: Erisfiregamer1 + changes: + - type: Add + message: >- + New chemical, Sedin. It restores seeds on plants 20% of the time with + other adverse effects included. + id: 6848 + time: '2025-02-14T19:00:16.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1786 From 20dc60d2c381f814c5fdc34626bf303197227d08 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Fri, 14 Feb 2025 14:02:10 -0500 Subject: [PATCH 17/45] Remove Nonlethal Ammo Research (#1784) # Description This was actually suggested by Goob MRP, and a lot of my maintainers liked the idea. This PR removes the Nonlethal Ammunition research, and makes all non-lethal ammunition into roundstart static recipes for the Secfab. It turns out part of the reason why Secoffs were always so keen on using lethals was because they simply had no way of getting nonlethal ammo from the warden at roundstart. The other "Nonlethal Weapons" that previously shared the research with rubber boolits were instead moved to their respective weapon researches. # Changelog :cl: - tweak: Nonlethal Ammunition research has been removed. Instead Security Techfabs can manufacture rubber bullets at roundstart. --- .../Locale/en-US/research/technologies.ftl | 1 - .../Entities/Structures/Machines/lathe.yml | 44 ++++++++++--------- Resources/Prototypes/Research/arsenal.yml | 39 +--------------- 3 files changed, 26 insertions(+), 58 deletions(-) diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 6d04cb19fe5..3bb8301b605 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -27,7 +27,6 @@ research-technology-basic-weapons = Basic Weapons research-technology-draconic-munitions = Draconic Munitions research-technology-uranium-munitions = Uranium Munitions research-technology-explosive-technology = Explosive Technology -research-technology-nonlethal-ammunition = Nonlethal Ammunition research-technology-practice-ammunition = Practice Ammunition research-technology-advanced-weapons = Advanced Weapons research-technology-prototype-weapons = Prototype Weapons diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 96139a961c3..5d651a28fd0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -947,9 +947,32 @@ - HoloprojectorSecurity - BolaEnergy - ClothingHeadHelmetBasic + - MagazineShotgunBeanbag + - ShellTranquilizer + - BoxBeanbag + - CartridgePistolRubber + - CartridgeMagnumRubber + - CartridgeLightRifleRubber + - CartridgeRifleRubber + - MagazineRifleRubber + - MagazinePistolRubber + - MagazinePistolSubMachineGunRubber + - MagazineMagnumRubber + - MagazineLightRifleRubber + - SpeedLoaderMagnumRubber + - MagazineBoxPistolRubber + - MagazineBoxMagnumRubber + - MagazineBoxLightRifleRubber + - MagazineBoxRifleRubber + - CartridgeSpecialRubber + - MagazineBoxSpecialRubber + - MagazineBoxLightRifleRubber # Frontier + - MagazineBoxMagnumRubber # Frontier + - MagazineBoxPistolRubber # Frontier + - MagazineBoxRifleRubber # Frontier + - SpeedLoaderRifleHeavyRubber dynamicRecipes: - Truncheon - - BoxBeanbag - BoxShotgunIncendiary - BoxShotgunUranium - EncryptionKeySyndie @@ -961,10 +984,6 @@ - CartridgeMagnumUranium - CartridgePistolUranium - CartridgeRifleUranium - - CartridgeLightRifleRubber - - CartridgeMagnumRubber - - CartridgePistolRubber - - CartridgeRifleRubber - ExplosivePayload - FlashPayload - GrenadeBlast @@ -979,43 +998,30 @@ - MagazineBoxRifleIncendiary - MagazineBoxRifleUranium - ShellSoulbreaker - - MagazineBoxLightRifleRubber - - MagazineBoxMagnumRubber - - MagazineBoxPistolRubber - - MagazineBoxRifleRubber - MagazineGrenadeEmpty - - MagazineLightRifleRubber - MagazineLightRifleIncendiary - MagazineLightRifleUranium - - MagazinePistolRubber - MagazinePistolIncendiary - MagazinePistolUranium - - MagazinePistolSubMachineGunRubber - MagazinePistolSubMachineGunIncendiary - MagazinePistolSubMachineGunUranium - - MagazineMagnumRubber - MagazineMagnumIncendiary - MagazineMagnumUranium - - MagazineRifleRubber - MagazineRifleIncendiary - MagazineRifleUranium - - MagazineShotgunBeanbag - MagazineShotgunIncendiary - PortableRecharger - PowerCageHigh - PowerCageMedium - PowerCageSmall - - ShellTranquilizer - ShuttleGunDusterCircuitboard - ShuttleGunFriendshipCircuitboard - ShuttleGunPerforatorCircuitboard - ShuttleGunSvalinnMachineGunCircuitboard - Signaller - SignalTrigger - - SpeedLoaderMagnumRubber - SpeedLoaderMagnumIncendiary - SpeedLoaderMagnumUranium - - SpeedLoaderRifleHeavyRubber - SpeedLoaderRifleHeavyIncendiary - SpeedLoaderRifleHeavyUranium - TimerTrigger @@ -1034,12 +1040,10 @@ - WeaponEnergyGunMini - WeaponEnergyGunPistol - WeaponGunLaserCarbineAutomatic - - CartridgeSpecialRubber - CartridgeSpecialIncendiary - CartridgeSpecialUranium - CartridgeSpecialHoly - CartridgeSpecialMindbreaker - - MagazineBoxSpecialRubber - MagazineBoxSpecialIncendiary - MagazineBoxSpecialUranium - MagazineBoxSpecialMindbreaker diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index fbeab5d0e1e..5abdc5d9297 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -22,6 +22,8 @@ - WeaponEnergyGunPistol - WeaponDisablerSMG - Truncheon + - WeaponDisabler + - WeaponMechCombatDisabler # Goobstation #- WeaponPistolMk58 #todo: Add a bunch of basic ballistic guns to the list and make lathe recipes for them. - MechEquipmentKineticAccelerator # Goobstation # These are roundstart but not replenishable for salvage @@ -52,43 +54,6 @@ - CartridgeSpecialIncendiary - MagazineBoxSpecialIncendiary -- type: technology - id: NonlethalAmmunition - name: research-technology-nonlethal-ammunition - icon: - sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi - state: beanbag - discipline: Arsenal - tier: 1 - cost: 5000 - recipeUnlocks: - - MagazineShotgunBeanbag - - ShellTranquilizer - - BoxBeanbag - - CartridgePistolRubber - - CartridgeMagnumRubber - - CartridgeLightRifleRubber - - CartridgeRifleRubber - - MagazineRifleRubber - - MagazinePistolRubber - - MagazinePistolSubMachineGunRubber - - MagazineMagnumRubber - - MagazineLightRifleRubber - - SpeedLoaderMagnumRubber - - MagazineBoxPistolRubber - - MagazineBoxMagnumRubber - - MagazineBoxLightRifleRubber - - MagazineBoxRifleRubber - - CartridgeSpecialRubber - - MagazineBoxSpecialRubber - - WeaponDisabler - - MagazineBoxLightRifleRubber # Frontier - - MagazineBoxMagnumRubber # Frontier - - MagazineBoxPistolRubber # Frontier - - MagazineBoxRifleRubber # Frontier - - SpeedLoaderRifleHeavyRubber - - WeaponMechCombatDisabler # Goobstation - - type: technology id: UraniumMunitions name: research-technology-uranium-munitions From ef8e0dd1a6747960920214bebd7a9c41e59f67a6 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 19:02:41 +0000 Subject: [PATCH 18/45] Automatic Changelog Update (#1784) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 02ee6b75f97..01b17ed5ea2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11722,3 +11722,12 @@ Entries: id: 6848 time: '2025-02-14T19:00:16.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1786 +- author: VMSolidus + changes: + - type: Tweak + message: >- + Nonlethal Ammunition research has been removed. Instead Security + Techfabs can manufacture rubber bullets at roundstart. + id: 6849 + time: '2025-02-14T19:02:10.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1784 From 7d8c047e84173b2d8d6de7e003e2e851f4029b1c Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Fri, 14 Feb 2025 14:06:37 -0500 Subject: [PATCH 19/45] Telecrystal Rebalance (#1785) # Description This brings over the "Telecrystal Rebalance". To make the TC costs more granular, nearly all values for TC costs have been multiplied by 5x, including the starting TC amounts for each type of uplink. Additionally, Nukies no longer spawn with any of their tacsuits, and have had the cost of said tacsuits refunded as 50 additional TC. Finally, since the Commander and Medic no longer spawn with their respective tacsuits, they've been put into the uplink as new bundles(which traitors can buy as well). I figure its about time the nukies get some love seeing as on MRP they're facing against Security who can buy an N1984 in their loadouts. Next PR I'm probably going to even further mess with the cost of guns by separating out the guns from their magazines, and adding options for buying more "Special Ammo" types to replace them. Such as for instance, a "Rubber Ammo Bundle" for Nukies, or a more expensive "Incendiary Ammo Bundle". # Changelog :cl: - tweak: Added the "Telecrystal Rebalance" from Goob. --- .../Catalog/Fills/Backpacks/duffelbag.yml | 30 + .../Prototypes/Catalog/uplink_catalog.yml | 526 ++++++++++-------- .../DeltaV/Catalog/uplink_catalog.yml | 10 +- .../Entities/Objects/Specific/syndicate.yml | 8 +- .../Nyanotrasen/Catalog/uplink_catalog.yml | 6 +- Resources/Prototypes/Roles/Antags/nukeops.yml | 3 +- .../Roles/Jobs/Fun/misc_startinggear.yml | 3 - .../_Goobstation/Catalog/uplink_catalog.yml | 7 +- 8 files changed, 345 insertions(+), 248 deletions(-) diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 73801981830..a294ffdc5e8 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -282,6 +282,36 @@ - id: DoubleEmergencyNitrogenTankFilled - id: DoubleEmergencyPlasmaTankFilled +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateHardsuitCommanderBundle + name: syndicate commander hardsuit bundle + description: "Contains the Syndicate's signature blood red hardsuit." + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitSyndieCommander + - id: ClothingMaskGasSyndicate + - id: ClothingHandsGlovesCombat + - id: DoubleEmergencyOxygenTankFilled + - id: DoubleEmergencyNitrogenTankFilled + - id: DoubleEmergencyPlasmaTankFilled + +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateHardsuitMedicBundle + name: syndicate medic hardsuit bundle + description: "Contains the Syndicate's signature blood red hardsuit." + components: + - type: StorageFill + contents: + - id: ClothingOuterHardsuitSyndieMedic + - id: ClothingMaskGasSyndicate + - id: ClothingHandsGlovesCombat + - id: DoubleEmergencyOxygenTankFilled + - id: DoubleEmergencyNitrogenTankFilled + - id: DoubleEmergencyPlasmaTankFilled + - type: entity parent: ClothingBackpackDuffelSyndicateBundle id: ClothingBackpackDuffelSyndicateEliteHardsuitBundle diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index e4c3639ef72..630eee8ccd1 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -8,9 +8,9 @@ productEntity: WeaponPistolViper discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWeaponry @@ -21,9 +21,9 @@ productEntity: WeaponRevolverPythonAP discountCategory: usualDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 8 # Originally was 13 TC but was not used due to high cost + Telecrystal: 40 categories: - UplinkWeaponry @@ -35,9 +35,9 @@ productEntity: WeaponPistolCobra discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkWeaponry @@ -48,7 +48,7 @@ description: uplink-rifle-mosin-desc productEntity: WeaponSniperMosin cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkWeaponry @@ -59,10 +59,10 @@ icon: { sprite: /Textures/Objects/Weapons/Melee/e_sword.rsi, state: icon } discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 productEntity: EnergySword cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkWeaponry @@ -74,9 +74,9 @@ productEntity: EnergyDaggerBox discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkWeaponry @@ -88,9 +88,9 @@ productEntity: ThrowingKnivesKit discountCategory: rareDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkWeaponry @@ -102,9 +102,9 @@ productEntity: ClothingHandsGlovesNorthStar discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkWeaponry @@ -115,9 +115,9 @@ productEntity: ToolboxElectricalTurretFilled discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkWeaponry conditions: @@ -134,9 +134,9 @@ productEntity: EnergyShield discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 16 + Telecrystal: 80 categories: - UplinkWeaponry conditions: @@ -153,9 +153,9 @@ productEntity: BriefcaseSyndieSniperBundleFilled discountCategory: usualDiscounts discountDownTo: - Telecrystal: 6 + Telecrystal: 30 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkWeaponry @@ -167,9 +167,9 @@ productEntity: ClothingBackpackDuffelSyndicateFilledSMG discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 10 + Telecrystal: 50 cost: - Telecrystal: 17 + Telecrystal: 85 categories: - UplinkWeaponry @@ -181,9 +181,9 @@ productEntity: ClothingBackpackDuffelSyndicateFilledShotgun discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 12 + Telecrystal: 60 cost: - Telecrystal: 20 + Telecrystal: 100 categories: - UplinkWeaponry @@ -195,9 +195,9 @@ productEntity: ClothingBackpackDuffelSyndicateFilledGrenadeLauncher discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 20 + Telecrystal: 100 cost: - Telecrystal: 25 + Telecrystal: 125 categories: - UplinkWeaponry @@ -209,9 +209,9 @@ productEntity: ClothingBackpackDuffelSyndicateFilledLMG discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 24 + Telecrystal: 120 cost: - Telecrystal: 30 + Telecrystal: 150 categories: - UplinkWeaponry @@ -224,9 +224,9 @@ productEntity: ExGrenade discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkExplosives @@ -236,7 +236,7 @@ description: uplink-flash-grenade-desc productEntity: GrenadeFlashBang cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkExplosives @@ -246,7 +246,7 @@ description: uplink-smoke-grenade-desc productEntity: SmokeGrenade cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkExplosives @@ -257,9 +257,9 @@ productEntity: SyndieMiniBomb discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkExplosives @@ -270,9 +270,9 @@ productEntity: SupermatterGrenade discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkExplosives @@ -283,9 +283,9 @@ productEntity: WhiteholeGrenade discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkExplosives @@ -296,9 +296,9 @@ productEntity: MobGrenadePenguin discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkExplosives conditions: @@ -314,9 +314,9 @@ productEntity: C4 discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkExplosives @@ -327,9 +327,9 @@ productEntity: ClothingBeltMilitaryWebbingGrenadeFilled discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 6 + Telecrystal: 30 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkExplosives conditions: @@ -345,9 +345,9 @@ productEntity: ClothingBackpackDuffelSyndicateC4tBundle discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 8 + Telecrystal: 40 cost: - Telecrystal: 12 #you're buying bulk so its a 25% discount, so no additional random discount over it + Telecrystal: 60 #you're buying bulk so its a 25% discount, so no additional random discount over it categories: - UplinkExplosives @@ -358,9 +358,9 @@ productEntity: EmpGrenade discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkExplosives @@ -372,9 +372,9 @@ productEntity: PenExplodingBox discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkExplosives @@ -384,7 +384,7 @@ description: uplink-exploding-syndicate-bomb-desc productEntity: SyndicateBomb cost: - Telecrystal: 11 + Telecrystal: 55 categories: - UplinkExplosives restockTime: 1800 @@ -400,7 +400,7 @@ description: uplink-exploding-syndicate-bomb-desc productEntity: SyndicateBomb cost: - Telecrystal: 11 + Telecrystal: 55 categories: - UplinkExplosives conditions: @@ -416,9 +416,9 @@ productEntity: ClusterGrenade discountCategory: usualDiscounts discountDownTo: - Telecrystal: 5 + Telecrystal: 25 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkExplosives @@ -429,9 +429,9 @@ productEntity: GrenadeShrapnel discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkExplosives @@ -442,9 +442,9 @@ productEntity: GrenadeIncendiary discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkExplosives @@ -455,9 +455,9 @@ productEntity: ElectricalDisruptionKit discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkExplosives @@ -470,7 +470,29 @@ icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: red-icon } productEntity: MagazinePistol cost: - Telecrystal: 1 + Telecrystal: 5 + categories: + - UplinkAmmo + +- type: listing + id: UplinkPistol9mmMagazineRubber + name: uplink-pistol-magazine-rubber-name + description: uplink-pistol-magazine-rubber-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: red-icon } + productEntity: MagazinePistolRubber + cost: + Telecrystal: 5 + categories: + - UplinkAmmo + +- type: listing + id: UplinkPistol9mmMagazineIncendiary + name: uplink-pistol-magazine-incendiary-name + description: uplink-pistol-magazine-incendiary-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: red-icon } + productEntity: MagazinePistolIncendiary + cost: + Telecrystal: 8 categories: - UplinkAmmo @@ -482,7 +504,29 @@ icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: red-icon } productEntity: MagazinePistolSubMachineGun cost: - Telecrystal: 2 + Telecrystal: 10 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazinePistolSubMachineGunRubber + name: uplink-pistol-magazine-c20r-rubber-name + description: uplink-pistol-magazine-c20r-rubber-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: red-icon } + productEntity: MagazinePistolSubMachineGunRubber + cost: + Telecrystal: 10 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazinePistolSubMachineGunIncendiary + name: uplink-pistol-magazine-c20r-incendiary-name + description: uplink-pistol-magazine-c20r-incendiary-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: red-icon } + productEntity: MagazinePistolSubMachineGunIncendiary + cost: + Telecrystal: 14 categories: - UplinkAmmo @@ -494,7 +538,7 @@ icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi, state: red-icon } productEntity: MagazinePistolCaselessRifle cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkAmmo @@ -506,7 +550,7 @@ icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/SpeedLoaders/Magnum/magnum_speed_loader.rsi, state: icon } productEntity: SpeedLoaderMagnumAP cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkAmmo @@ -517,7 +561,7 @@ description: uplink-mosin-ammo-desc productEntity: MagazineBoxLightRifle cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkAmmo @@ -528,7 +572,7 @@ description: uplink-sniper-ammo-desc productEntity: MagazineBoxAntiMateriel cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkAmmo @@ -538,7 +582,7 @@ description: uplink-ammo-bundle-desc productEntity: ClothingBackpackDuffelSyndicateAmmoFilled cost: - Telecrystal: 15 + Telecrystal: 75 categories: - UplinkAmmo conditions: @@ -561,9 +605,9 @@ productEntity: HypopenBox discountCategory: rareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkChemicals @@ -575,9 +619,9 @@ productEntity: HypoDartBox discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkChemicals @@ -589,9 +633,9 @@ productEntity: ChemicalSynthesisKit discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkChemicals @@ -602,7 +646,7 @@ icon: { sprite: /Textures/Structures/Wallmounts/signs.rsi, state: bio } productEntity: ClothingBackpackDuffelZombieBundle cost: - Telecrystal: 40 + Telecrystal: 200 categories: - UplinkChemicals conditions: @@ -622,9 +666,9 @@ productEntity: NocturineChemistryBottle discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkChemicals @@ -635,9 +679,9 @@ productEntity: MedkitCombatFilled discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 5 + Telecrystal: 20 categories: - UplinkChemicals @@ -648,9 +692,9 @@ productEntity: CombatMedipen discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 5 cost: - Telecrystal: 4 + Telecrystal: 10 categories: - UplinkChemicals @@ -661,9 +705,9 @@ productEntity: Stimpack discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkChemicals @@ -674,9 +718,9 @@ productEntity: StimkitFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 8 + Telecrystal: 40 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkChemicals @@ -687,9 +731,9 @@ productEntity: CigPackSyndicate discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkChemicals @@ -700,9 +744,9 @@ productEntity: ClothingBackpackDuffelSyndicateMedicalBundleFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 16 + Telecrystal: 80 cost: - Telecrystal: 24 + Telecrystal: 120 categories: - UplinkChemicals conditions: @@ -724,9 +768,9 @@ productEntity: AgentIDCard discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkDeception @@ -737,9 +781,9 @@ productEntity: StealthBox discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkDeception @@ -750,9 +794,9 @@ productEntity: ChameleonProjector discountCategory: rareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 7 + Telecrystal: 35 categories: - UplinkDeception @@ -764,9 +808,9 @@ productEntity: BoxEncryptionKeySyndie # Two for the price of one discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkDeception @@ -777,7 +821,7 @@ icon: { sprite: /Textures/Objects/Devices/encryption_keys.rsi, state: ai_label } productEntity: EncryptionKeyBinarySyndicate cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkDeception @@ -787,7 +831,7 @@ description: uplink-cyberpen-desc productEntity: CyberPen cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkDeception @@ -797,7 +841,7 @@ description: uplink-decoy-disk-desc productEntity: NukeDiskFake cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkDeception @@ -808,9 +852,9 @@ productEntity: LanternFlash discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkDeception @@ -821,9 +865,9 @@ productEntity: BriefcaseSyndieLobbyingBundleFilled discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDeception conditions: @@ -838,9 +882,9 @@ productEntity: BriefcaseSyndieLobbyingBundlePlasmamanFilled discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDeception conditions: @@ -866,7 +910,7 @@ productEntity: ClothingBackpackDuffelSyndicateDecoyKitFilled discountCategory: usualDiscounts cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkDeception @@ -877,9 +921,9 @@ productEntity: SyndicateBombFake discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDeception @@ -892,9 +936,9 @@ productEntity: Emag discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 2 # DV + Telecrystal: 10 cost: - Telecrystal: 4 # DV was 8, can no longer emag doors + Telecrystal: 20 categories: - UplinkDisruption @@ -905,9 +949,9 @@ productEntity: RadioJammer discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDisruption @@ -918,9 +962,9 @@ productEntity: BorgModuleSyndicateWeapon discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkDisruption @@ -932,9 +976,9 @@ icon: { sprite: /Textures/Objects/Specific/Robotics/borgmodule.rsi, state: syndicateborgbomb } discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDisruption @@ -944,7 +988,7 @@ description: uplink-soap-desc productEntity: SoapSyndie cost: - Telecrystal: 1 + Telecrystal: 5 categories: - UplinkDisruption @@ -955,9 +999,9 @@ productEntity: SlipocalypseClusterSoap discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkDisruption @@ -968,9 +1012,9 @@ productEntity: ToolboxSyndicateFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkDisruption @@ -981,9 +1025,9 @@ productEntity: SyndicateJawsOfLife discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkDisruption @@ -994,9 +1038,9 @@ productEntity: ClothingBackpackDuffelSyndicateFilledMedical discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkDisruption @@ -1007,9 +1051,9 @@ productEntity: PowerSink discountCategory: usualDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkDisruption conditions: @@ -1024,7 +1068,7 @@ description: uplink-super-surplus-bundle-desc productEntity: CrateSyndicateSuperSurplusBundle cost: - Telecrystal: 40 + Telecrystal: 200 categories: - UplinkDisruption conditions: @@ -1044,9 +1088,9 @@ productEntity: SingularityBeacon discountCategory: usualDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkDisruption @@ -1060,9 +1104,9 @@ productEntity: BoxHoloparasite discountCategory: usualDiscounts discountDownTo: - Telecrystal: 8 + Telecrystal: 40 cost: - Telecrystal: 14 + Telecrystal: 70 categories: - UplinkAllies conditions: @@ -1079,9 +1123,9 @@ icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-urist } discountCategory: usualDiscounts discountDownTo: - Telecrystal: 7 + Telecrystal: 35 cost: - Telecrystal: 16 + Telecrystal: 80 categories: - UplinkAllies conditions: @@ -1097,7 +1141,7 @@ productEntity: ReinforcementRadioSyndicateNukeops icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-urist } cost: - Telecrystal: 16 + Telecrystal: 80 categories: - UplinkAllies conditions: @@ -1113,7 +1157,7 @@ productEntity: ReinforcementRadioSyndicateCyborgAssault icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-borg-assault } cost: - Telecrystal: 65 + Telecrystal: 325 categories: - UplinkAllies conditions: @@ -1130,9 +1174,9 @@ icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-ancestor } discountCategory: usualDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkAllies conditions: @@ -1149,9 +1193,9 @@ icon: { sprite: Objects/Devices/communication.rsi, state: old-radio-ancestor } discountCategory: usualDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkAllies conditions: @@ -1167,9 +1211,9 @@ productEntity: DehydratedSpaceCarp discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkAllies @@ -1181,9 +1225,9 @@ productEntity: ReinforcementRadioSyndicateSyndiCat discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkAllies @@ -1197,9 +1241,9 @@ productEntity: StorageImplanter discountCategory: rareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkImplants conditions: @@ -1216,9 +1260,9 @@ productEntity: FreedomImplanter discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkImplants @@ -1230,9 +1274,9 @@ productEntity: ScramImplanter discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 6 # it's a gamble that may kill you easily so 6 TC per 2 uses, second one more of a backup + Telecrystal: 30 # it's a gamble that may kill you easily so 6 TC per 2 uses, second one more of a backup categories: - UplinkImplants @@ -1244,9 +1288,9 @@ productEntity: DnaScramblerImplanter discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkImplants @@ -1258,9 +1302,9 @@ productEntity: EmpImplanter discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkImplants @@ -1271,7 +1315,7 @@ icon: { sprite: /Textures/Actions/Implants/implants.rsi, state: explosive } productEntity: MicroBombImplanter cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkImplants conditions: @@ -1291,7 +1335,7 @@ icon: { sprite: /Textures/Actions/Implants/implants.rsi, state: explosive } productEntity: MacroBombImplanter cost: - Telecrystal: 13 + Telecrystal: 65 categories: - UplinkImplants conditions: @@ -1311,7 +1355,7 @@ icon: { sprite: /Textures/Objects/Magic/magicactions.rsi, state: gib } productEntity: DeathAcidifierImplanter cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkImplants conditions: @@ -1328,9 +1372,9 @@ productEntity: UplinkImplanter discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkImplants conditions: @@ -1345,7 +1389,7 @@ description: uplink-deathrattle-implant-desc productEntity: BoxDeathRattleImplants cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkImplants conditions: @@ -1367,9 +1411,9 @@ productEntity: JetpackBlackFilled discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkWearables @@ -1380,9 +1424,9 @@ productEntity: ClothingMaskGasVoiceChameleon discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkWearables @@ -1396,9 +1440,9 @@ icon: { sprite: /Textures/Clothing/Uniforms/Jumpsuit/rainbow.rsi, state: icon } discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkWearables @@ -1409,9 +1453,9 @@ productEntity: ClothingShoesChameleonNoSlips discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkWearables @@ -1422,9 +1466,9 @@ productEntity: ThievingGloves discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkWearables @@ -1435,9 +1479,9 @@ productEntity: ClothingOuterVestWeb discountCategory: usualDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWearables @@ -1448,9 +1492,9 @@ productEntity: ClothingShoesBootsMagSyndie discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkWearables @@ -1462,9 +1506,9 @@ productEntity: ClothingBackpackDuffelSyndicateEVABundle discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkWearables @@ -1476,9 +1520,9 @@ productEntity: ClothingOuterHardsuitCarp discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 8 + Telecrystal: 40 categories: - UplinkWearables @@ -1490,9 +1534,37 @@ productEntity: ClothingBackpackDuffelSyndicateHardsuitBundle discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 cost: - Telecrystal: 10 + Telecrystal: 50 + categories: + - UplinkWearables + +- type: listing + id: UplinkHardsuitSyndieMedic + name: uplink-hardsuit-syndie-medic-name + description: uplink-hardsuit-syndie-medic-desc + icon: { sprite: /Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi, state: icon } + productEntity: ClothingBackpackDuffelSyndicateHardsuitMedicBundle + discountCategory: veryRareDiscounts + discountDownTo: + Telecrystal: 20 + cost: + Telecrystal: 50 + categories: + - UplinkWearables + +- type: listing + id: UplinkHardsuitSyndieCommander + name: uplink-hardsuit-syndie-commander-name + description: uplink-hardsuit-syndie-commander-desc + icon: { sprite: /Textures/Clothing/OuterClothing/Hardsuits/syndicate.rsi, state: icon } + productEntity: ClothingBackpackDuffelSyndicateHardsuitCommanderBundle + discountCategory: veryRareDiscounts + discountDownTo: + Telecrystal: 25 + cost: + Telecrystal: 55 categories: - UplinkWearables @@ -1502,7 +1574,7 @@ description: uplink-clothing-conducting-gloves-desc productEntity: ClothingHandsGlovesConducting cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkWearables conditions: @@ -1523,9 +1595,9 @@ productEntity: ClothingBackpackDuffelSyndicateEliteHardsuitBundle discountCategory: rareDiscounts discountDownTo: - Telecrystal: 7 + Telecrystal: 35 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkWearables @@ -1537,9 +1609,9 @@ productEntity: CrateCybersunJuggernautBundle discountCategory: veryRareDiscounts discountDownTo: - Telecrystal: 8 + Telecrystal: 40 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkWearables @@ -1549,7 +1621,7 @@ description: uplink-clothing-eyes-hud-syndicate-desc productEntity: ClothingEyesHudSyndicate cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkWearables conditions: @@ -1569,9 +1641,9 @@ productEntity: ClothingEyesNightVisionGogglesSyndie discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWearables conditions: @@ -1587,9 +1659,9 @@ productEntity: ClothingEyesNightVisionGogglesNukie discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWearables conditions: @@ -1605,9 +1677,9 @@ productEntity: ClothingEyesThermalVisionGogglesSyndie discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWearables conditions: @@ -1623,9 +1695,9 @@ productEntity: ClothingEyesThermalVisionGogglesNukie discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkWearables conditions: @@ -1643,7 +1715,7 @@ productEntity: RubberStampSyndicate discountCategory: rareDiscounts cost: - Telecrystal: 1 + Telecrystal: 3 categories: - UplinkPointless @@ -1656,9 +1728,9 @@ productEntity: GatfruitSeeds discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkJob conditions: @@ -1673,9 +1745,9 @@ productEntity: ClothingHandsGlovesBoxingRigged discountCategory: usualDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkJob conditions: @@ -1690,9 +1762,9 @@ productEntity: ClothingHandsGlovesBoxingRigged discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkJob conditions: @@ -1707,9 +1779,9 @@ productEntity: BibleNecronomicon discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkJob conditions: @@ -1728,9 +1800,9 @@ productEntity: HolyHandGrenade discountCategory: rareDiscounts discountDownTo: - Telecrystal: 14 + Telecrystal: 70 cost: - Telecrystal: 20 + Telecrystal: 100 categories: - UplinkJob conditions: @@ -1745,9 +1817,9 @@ productEntity: RevolverCapGunFake discountCategory: usualDiscounts discountDownTo: - Telecrystal: 5 + Telecrystal: 25 cost: - Telecrystal: 9 + Telecrystal: 45 categories: - UplinkJob conditions: @@ -1764,9 +1836,9 @@ productEntity: TrashBananaPeelExplosiveUnarmed discountCategory: rareDiscounts discountDownTo: - Telecrystal: 1 + Telecrystal: 5 cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkJob conditions: @@ -1781,9 +1853,9 @@ productEntity: ClusterBananaPeel discountCategory: rareDiscounts discountDownTo: - Telecrystal: 3 + Telecrystal: 15 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkJob conditions: @@ -1799,9 +1871,9 @@ productEntity: BoxHoloclown discountCategory: rareDiscounts discountDownTo: - Telecrystal: 6 + Telecrystal: 30 cost: - Telecrystal: 12 + Telecrystal: 60 categories: - UplinkJob conditions: @@ -1815,10 +1887,10 @@ description: uplink-hot-potato-desc discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 productEntity: HotPotato cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkJob conditions: @@ -1836,9 +1908,9 @@ productEntity: WeaponPistolCHIMPUpgradeKit discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 4 + Telecrystal: 20 categories: - UplinkJob conditions: @@ -1853,9 +1925,9 @@ productEntity: WetFloorSignMineExplosive discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 5 # was 4, with my buff made it 5 to be closer to minibomb -panzer + Telecrystal: 25 categories: - UplinkJob conditions: @@ -1874,10 +1946,10 @@ icon: { sprite: Objects/Misc/monkeycube.rsi, state: box} discountCategory: rareDiscounts discountDownTo: - Telecrystal: 4 + Telecrystal: 20 productEntity: SyndicateSpongeBox cost: - Telecrystal: 7 + Telecrystal: 35 categories: - UplinkJob conditions: @@ -1897,9 +1969,9 @@ productEntity: CaneSheathFilled discountCategory: rareDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 5 + Telecrystal: 25 categories: - UplinkJob conditions: @@ -1919,9 +1991,9 @@ productEntity: CombatBakeryKit discountCategory: usualDiscounts discountDownTo: - Telecrystal: 2 + Telecrystal: 10 cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkJob conditions: @@ -1936,7 +2008,7 @@ description: uplink-emp-flashlight-desc productEntity: FlashlightEmp cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkAllies diff --git a/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml b/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml index 6b389cbb25e..d55ab5f2422 100644 --- a/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/DeltaV/Catalog/uplink_catalog.yml @@ -5,7 +5,7 @@ productEntity: ReinforcementRadioSyndicateNukieMouse icon: { sprite: DeltaV/Objects/Devices/communication.rsi, state: cheese-radio } cost: - Telecrystal: 3 + Telecrystal: 15 categories: - UplinkAllies @@ -15,7 +15,7 @@ description: uplink-bionic-syrinx-implanter-desc productEntity: BionicSyrinxImplanter cost: - Telecrystal: 2 + Telecrystal: 10 categories: - UplinkImplants conditions: @@ -33,7 +33,7 @@ description: uplink-doorjack-desc productEntity: Doorjack cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkDisruption @@ -46,8 +46,8 @@ entity: BaseBallBatHomeRun discountCategory: usualDiscounts discountDownTo: - Telecrystal: 6 + Telecrystal: 30 cost: - Telecrystal: 16 + Telecrystal: 80 categories: - UplinkWeaponry diff --git a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml index d3dc41a74a7..479f43ad4b1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml @@ -78,7 +78,7 @@ components: - type: Store balance: - Telecrystal: 20 + Telecrystal: 100 - type: entity parent: BaseUplinkRadio @@ -87,7 +87,7 @@ components: - type: Store balance: - Telecrystal: 25 + Telecrystal: 125 #this uplink MUST be used for nukeops, as it has the tag for filtering the listing. - type: entity @@ -97,7 +97,7 @@ components: - type: Store balance: - Telecrystal: 40 + Telecrystal: 250 # 5x TC, +cost of a tacsuit they no longer spawn with. - type: Tag tags: - NukeOpsUplink @@ -109,7 +109,7 @@ components: - type: Store balance: - Telecrystal: 60 + Telecrystal: 350 # 5x TC, +cost of a tacsuit they no longer spawn with. - type: Tag tags: - NukeOpsUplink diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/uplink_catalog.yml b/Resources/Prototypes/Nyanotrasen/Catalog/uplink_catalog.yml index 77446652bbd..e3b0aef1397 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/uplink_catalog.yml @@ -4,7 +4,7 @@ description: uplink-kanabou-desc productEntity: Kanabou cost: - Telecrystal: 10 + Telecrystal: 50 categories: - UplinkWeaponry conditions: @@ -18,7 +18,7 @@ description: uplink-rickenbacker4001-desc productEntity: Rickenbacker4001Instrument cost: - Telecrystal: 10 + Telecrystal: 50 categories: - UplinkJob conditions: @@ -32,7 +32,7 @@ description: uplink-samurai-crate-desc productEntity: CrateSyndicateSamurai cost: - Telecrystal: 6 + Telecrystal: 30 categories: - UplinkWearables conditions: diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 85bcf248025..4211f715da5 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -31,11 +31,10 @@ eyes: ClothingEyesHudSyndicate ears: ClothingHeadsetAltSyndicate gloves: ClothingHandsGlovesCombat - outerClothing: ClothingOuterHardsuitSyndie shoes: ClothingShoesBootsCombatFilled id: SyndiPDA pocket1: DoubleEmergencyOxygenTankFilled - pocket2: BaseUplinkRadio40TC + pocket2: BaseUplinkRadio60TC belt: ClothingBeltMilitaryWebbing innerClothingSkirt: ClothingUniformJumpskirtOperative satchel: ClothingBackpackDuffelSyndicateOperative diff --git a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml index 28d949935ef..0967158957c 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/misc_startinggear.yml @@ -87,7 +87,6 @@ eyes: ClothingEyesHudSyndicate ears: ClothingHeadsetAltSyndicate gloves: ClothingHandsGlovesCombat - outerClothing: ClothingOuterHardsuitSyndie shoes: ClothingShoesBootsCombatFilled id: SyndiPDA pocket1: DoubleEmergencyOxygenTankFilled @@ -110,7 +109,6 @@ ears: ClothingHeadsetAltSyndicate neck: SyndicateWhistle gloves: ClothingHandsGlovesCombat - outerClothing: ClothingOuterHardsuitSyndieCommander shoes: ClothingShoesBootsCombatFilled id: SyndiPDA pocket1: DoubleEmergencyOxygenTankFilled @@ -134,7 +132,6 @@ eyes: ClothingEyesHudSyndicateAgent ears: ClothingHeadsetAltSyndicate gloves: ClothingHandsGlovesCombat - outerClothing: ClothingOuterHardsuitSyndieMedic shoes: ClothingShoesBootsMagSyndie id: SyndiAgentPDA pocket1: DoubleEmergencyOxygenTankFilled diff --git a/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml index 6e4c723dc5b..6f401d18111 100644 --- a/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml @@ -7,7 +7,7 @@ icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: darkgygax } productEntity: CrateCybersunDarkGygaxBundle cost: - Telecrystal: 80 # Einstein Engines - 1/5th the price due to no telecrystal rework + Telecrystal: 400 categories: - UplinkAllies @@ -18,12 +18,11 @@ icon: { sprite: /Textures/Objects/Specific/Mech/mecha.rsi, state: mauler } productEntity: CrateCybersunMaulerBundle cost: - Telecrystal: 105 # Einstein Engines - lower the price due to no telecrystal rework - # cost reduced such that nukies can still only buy one with all pooled nukies' TC + Telecrystal: 525 categories: - UplinkAllies conditions: - !type:StoreWhitelistCondition whitelist: tags: - - NukeOpsUplink \ No newline at end of file + - NukeOpsUplink From 72d55a70b443c06c3ced84d0994233e3d76e3138 Mon Sep 17 00:00:00 2001 From: Skubman Date: Sat, 15 Feb 2025 03:06:51 +0800 Subject: [PATCH 20/45] Re-Add Missing Recipes To Industrial Ore Processor (#1777) # Description Re-adds the missing recipes to the industrial ore processor which were removed by accident in https://github.com/Simple-Station/Einstein-Engines/pull/1737. Also adds a missing localization string for `materials-raw-diamond`. ## Media **Updated industrial ore processor recipes** **Missing localization** ## Changelog :cl: Skubman - fix: The industrial ore processor can now make plasteel, uranium glass, reinforced uranium glass, and refined diamonds again. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- Resources/Locale/en-US/materials/materials.ftl | 1 + Resources/Prototypes/Entities/Structures/Machines/lathe.yml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/Resources/Locale/en-US/materials/materials.ftl b/Resources/Locale/en-US/materials/materials.ftl index 65e8a46dc1b..6648eb8ae0e 100644 --- a/Resources/Locale/en-US/materials/materials.ftl +++ b/Resources/Locale/en-US/materials/materials.ftl @@ -43,6 +43,7 @@ materials-raw-plasma = raw plasma materials-raw-uranium = raw uranium materials-raw-bananium = raw bananium materials-raw-salt = raw salt +materials-raw-diamond = raw diamond materials-raw-bluespace = raw bluespace materials-raw-normality = raw normality materials-raw-aluminium = raw aluminium diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 5d651a28fd0..925b04311b9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -1498,6 +1498,11 @@ - IngotCopper1 - N14IngotAluminium1 - IngotTungsten1 + # Additional recipes + - SheetPlasteel1 + - SheetUGlass1 + - SheetRUGlass1 + - MaterialDiamond - type: MaterialStorageMagnetPickup # Delta V - Summary: Adds magnet pull from Frontier magnetEnabled: True range: 0.30 # Delta V - End Magnet Pull From 07fb22ba01a7ccca3c94e60c8dbe83f6cdd6058e Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 19:08:25 +0000 Subject: [PATCH 21/45] Automatic Changelog Update (#1785) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 01b17ed5ea2..d158e474514 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11731,3 +11731,10 @@ Entries: id: 6849 time: '2025-02-14T19:02:10.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1784 +- author: VMSolidus + changes: + - type: Tweak + message: 'Added the "Telecrystal Rebalance" from Goob. ' + id: 6850 + time: '2025-02-14T19:06:38.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1785 From a0c062e5df95216102fe4c8bfecbfefe13743c38 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 19:11:15 +0000 Subject: [PATCH 22/45] Automatic Changelog Update (#1777) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d158e474514..d8fc8abd2c9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11738,3 +11738,12 @@ Entries: id: 6850 time: '2025-02-14T19:06:38.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1785 +- author: Skubman + changes: + - type: Fix + message: >- + The industrial ore processor can now make plasteel, uranium glass, + reinforced uranium glass, and refined diamonds again. + id: 6851 + time: '2025-02-14T19:06:51.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1777 From 7ca8b2f5ddddd9587e91582d48f3eac2d1e2a555 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Fri, 14 Feb 2025 15:12:57 -0400 Subject: [PATCH 23/45] Fix Silly Test Fail (#1787) nothin' crazy --- .../Entities/Structures/Machines/Computers/computers.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 76f4f9e3064..efa4e2e7df7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -1376,6 +1376,8 @@ name: AI upload console description: Used to update the laws of the station AI. components: + - type: Computer + board: StationAiUploadCircuitboard - type: Sprite layers: - map: [ "computerLayerBody" ] From 605cb3e832fef6e46e7b8b7ad101339f94560480 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Fri, 14 Feb 2025 14:13:08 -0500 Subject: [PATCH 24/45] Hotfix Shuttles FTL. (#1783) The last update to mapping stuff for Glacier prep was merged before I could push a fix for shuttle FTL. --------- Signed-off-by: VMSolidus Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> --- Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs index c03a186be89..31b8d9c608f 100644 --- a/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs +++ b/Content.Shared/Shuttles/Systems/SharedShuttleSystem.cs @@ -40,10 +40,8 @@ public override void Initialize() /// public bool CanFTLTo(EntityUid shuttleUid, MapId targetMap, EntityUid consoleUid) { - if (Maps.TryGetMap(targetMap, out var mapUid)) - return false; - - var shuttleMap = Transform(shuttleUid).MapID; + var mapUid = _mapManager.GetMapEntityId(targetMap); + var shuttleMap = _xformQuery.GetComponent(shuttleUid).MapID; if (shuttleMap == targetMap) return true; From 411c58ef3398953681c62ad4b63fbb019faff8fc Mon Sep 17 00:00:00 2001 From: Sornarok <199053609+Sornarok@users.noreply.github.com> Date: Fri, 14 Feb 2025 13:14:20 -0600 Subject: [PATCH 25/45] Adds Justice Channel To AI (#1782) # Description Adds the Justice coms channel to AI. --- # Changelog :cl: - tweak: Station AI now has access to the Justice channel --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 05922a94bfb..869950e5b76 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -17,6 +17,7 @@ - Prison - Service - Supply + - Justice - type: ActiveRadio channels: - Binary @@ -29,6 +30,7 @@ - Prison - Service - Supply + - Justice - type: IgnoreUIRange - type: StationAiHeld - type: StationAiOverlay From d749234b32efa9de5c4e059ee4cfc0d6a47ee3b5 Mon Sep 17 00:00:00 2001 From: Sornarok <199053609+Sornarok@users.noreply.github.com> Date: Fri, 14 Feb 2025 13:14:37 -0600 Subject: [PATCH 26/45] Fixes Rejuvenation Rune to Heal Specific Damage Types Instead of Groups (#1778) # Description Rune of rejuvenation was trying to heal the group damage type and not the specific damage types resulting in no healing for any brutes, cold, or shock. Changed to the specific types of damage to actually heal. The healing is probably a bit low especially if you get mag dumped or laser'd but it works and can actually revive people now. --- :cl: - fixed: Rune of Rejuvenation to actually heal brutes, cold, and shock --- .../BloodCult/Runes/Revive/CultRuneReviveComponent.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs index 1cddaef0154..ba703e89ea1 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Revive/CultRuneReviveComponent.cs @@ -1,4 +1,4 @@ -using Content.Shared.Damage; +using Content.Shared.Damage; using Content.Shared.FixedPoint; namespace Content.Server.WhiteDream.BloodCult.Runes.Revive; @@ -14,9 +14,12 @@ public sealed partial class CultRuneReviveComponent : Component { DamageDict = new Dictionary { - ["Brute"] = -100, - ["Burn"] = -100, - ["Heat"] = -100, + ["Blunt"] = -33, + ["Slash"] = -33, + ["Piercing"] = -33, + ["Heat"] = -33, + ["Cold"] = -33, + ["Shock"] = -33, ["Asphyxiation"] = -100, ["Bloodloss"] = -100, ["Poison"] = -50, From 21500f393f638b4eb0c77d920e75c810b057a78f Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Fri, 14 Feb 2025 19:21:33 +0000 Subject: [PATCH 27/45] Automatic Changelog Update (#1778) --- Resources/Changelog/Changelog.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d8fc8abd2c9..2626d4ffe7b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11747,3 +11747,8 @@ Entries: id: 6851 time: '2025-02-14T19:06:51.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1777 +- author: Sornarok + changes: [] + id: 6852 + time: '2025-02-14T19:14:37.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1778 From 5516dda48db268f5685e2c926d3dcbdb74ac7e1d Mon Sep 17 00:00:00 2001 From: Timfa Date: Fri, 14 Feb 2025 23:56:04 +0100 Subject: [PATCH 28/45] Disposable Syringes (#1775) # Description A cheap disposable syringe. It can draw once, inject once, and is then rendered unusable. The point of the syringe is to let Chemists pack specific dosages of specific chemicals into a simple syringe. A doctor can then not accidentally alter a dosage during treatments. These cheap syringes live alongside normal syringes. They use fewer materials to make, and are printed much faster. ---

Media

https://github.com/user-attachments/assets/eb439050-b86d-49ba-b95e-22ab271f2358 https://github.com/user-attachments/assets/9e8954ec-11c9-4569-820e-08b91e09f52b

--- # Changelog :cl: - add: Added disposable syringes! These cheaper, quicker-to-produce syringes let Chemists pick dosages while preparing medicine so that doctors can inject without worrying about volume, but the syringes cannot be used more than once. --- .../FillableOneTimeInjectorSystem.cs | 16 + .../FillableOneTimeInjectorStatusControl.cs | 84 ++++ .../FillableOneTimeInjectorSystem.cs | 438 ++++++++++++++++++ .../FillableOneTimeInjectorComponent.cs | 85 ++++ .../SharedFillableOneTimeInjectorSystem.cs | 111 +++++ .../Fluids/SharedPuddleSystem.Spillable.cs | 5 + .../components/injector-component.ftl | 5 + .../Entities/Objects/Specific/chemistry.yml | 40 ++ .../Entities/Structures/Machines/lathe.yml | 3 + .../Prototypes/Recipes/Lathes/chemistry.yml | 8 + .../inhand-left-fill-1.png | Bin 0 -> 121 bytes .../inhand-left-fill-2.png | Bin 0 -> 132 bytes .../inhand-left-fill-3.png | Bin 0 -> 137 bytes .../disposablesyringe.rsi/inhand-left.png | Bin 0 -> 177 bytes .../inhand-right-fill-1.png | Bin 0 -> 126 bytes .../inhand-right-fill-2.png | Bin 0 -> 135 bytes .../inhand-right-fill-3.png | Bin 0 -> 143 bytes .../disposablesyringe.rsi/inhand-right.png | Bin 0 -> 182 bytes .../Chemistry/disposablesyringe.rsi/meta.json | 67 +++ .../disposablesyringe.rsi/syringe1.png | Bin 0 -> 131 bytes .../disposablesyringe.rsi/syringe2.png | Bin 0 -> 153 bytes .../disposablesyringe.rsi/syringe_base0.png | Bin 0 -> 629 bytes .../disposablesyringe.rsi/syringe_base1.png | Bin 0 -> 637 bytes .../disposablesyringe.rsi/syringe_base2.png | Bin 0 -> 620 bytes .../disposablesyringe.rsi/syringe_base3.png | Bin 0 -> 607 bytes .../disposablesyringe.rsi/syringe_base4.png | Bin 0 -> 523 bytes .../disposablesyringe.rsi/syringeproj.png | Bin 0 -> 494 bytes 27 files changed, 862 insertions(+) create mode 100644 Content.Client/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs create mode 100644 Content.Client/Chemistry/UI/FillableOneTimeInjectorStatusControl.cs create mode 100644 Content.Server/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs create mode 100644 Content.Shared/Chemistry/Components/FillableOneTimeInjectorComponent.cs create mode 100644 Content.Shared/Chemistry/EntitySystems/SharedFillableOneTimeInjectorSystem.cs create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-3.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-3.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/meta.json create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base0.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base3.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base4.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringeproj.png diff --git a/Content.Client/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs b/Content.Client/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs new file mode 100644 index 00000000000..6a34621b6eb --- /dev/null +++ b/Content.Client/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs @@ -0,0 +1,16 @@ +using Content.Client.Chemistry.UI; +using Content.Client.Items; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Robust.Shared.GameStates; + +namespace Content.Client.Chemistry.EntitySystems; + +public sealed class FillableOneTimeInjectorSystem : SharedFillableOneTimeInjectorSystem +{ + public override void Initialize() + { + base.Initialize(); + Subs.ItemStatus(ent => new FillableOneTimeInjectorStatusControl(ent, SolutionContainers)); + } +} diff --git a/Content.Client/Chemistry/UI/FillableOneTimeInjectorStatusControl.cs b/Content.Client/Chemistry/UI/FillableOneTimeInjectorStatusControl.cs new file mode 100644 index 00000000000..2c9e28138f3 --- /dev/null +++ b/Content.Client/Chemistry/UI/FillableOneTimeInjectorStatusControl.cs @@ -0,0 +1,84 @@ +using Content.Client.Message; +using Content.Client.Stylesheets; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.FixedPoint; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Timing; + +namespace Content.Client.Chemistry.UI; + +public sealed class FillableOneTimeInjectorStatusControl : Control +{ + private readonly Entity _parent; + private readonly SharedSolutionContainerSystem _solutionContainers; + private readonly RichTextLabel _label; + + private FixedPoint2 PrevVolume; + private FixedPoint2 PrevMaxVolume; + private FixedPoint2 PrevTransferAmount; + private FillableOneTimeInjectorToggleMode PrevToggleStateIndex; + + public FillableOneTimeInjectorStatusControl(Entity parent, SharedSolutionContainerSystem solutionContainers) + { + _parent = parent; + _solutionContainers = solutionContainers; + _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } }; + AddChild(_label); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + if (!_solutionContainers.TryGetSolution(_parent.Owner, _parent.Comp.SolutionName, out _, out var solution)) + return; + + // only updates the UI if any of the details are different than they previously were + if (PrevVolume == solution.Volume + && PrevMaxVolume == solution.MaxVolume + && PrevTransferAmount == _parent.Comp.TransferAmount) + return; + + PrevVolume = solution.Volume; + PrevMaxVolume = solution.MaxVolume; + PrevTransferAmount = _parent.Comp.TransferAmount; + var modeStringLocalized = ""; + + // only updates the UI if any of the details are different than they previously were + if(PrevToggleStateIndex == _parent.Comp.ToggleState) + return; + + PrevToggleStateIndex = _parent.Comp.ToggleState; + + // Update current volume and injector state + modeStringLocalized = Loc.GetString( + _parent.Comp.ToggleState switch + { + FillableOneTimeInjectorToggleMode.Draw => "injector-draw-text", + FillableOneTimeInjectorToggleMode.Inject => "injector-inject-text", + FillableOneTimeInjectorToggleMode.Spent => "injector-spent-text", + _ => "injector-invalid-injector-toggle-mode" + }); + + if (_parent.Comp.ToggleState != FillableOneTimeInjectorToggleMode.Draw) + { + _label.SetMarkup( + Loc.GetString( + "onetime-injector-simple-volume-label", + ("currentVolume", solution.Volume), + ("modeString", modeStringLocalized))); + } + else + { + _label.SetMarkup( + Loc.GetString( + "injector-volume-label", + ("currentVolume", solution.Volume), + ("totalVolume", solution.MaxVolume), + ("modeString", modeStringLocalized), + ("transferVolume", _parent.Comp.TransferAmount))); + } + } +} diff --git a/Content.Server/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs b/Content.Server/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs new file mode 100644 index 00000000000..7c0f29efa6e --- /dev/null +++ b/Content.Server/Chemistry/EntitySystems/FillableOneTimeInjectorSystem.cs @@ -0,0 +1,438 @@ +using Content.Server.Abilities.Chitinid; +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Chat.Managers; +using Content.Shared.Chat; +using Content.Shared.Chemistry; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.Components.SolutionManager; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Database; +using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; +using Content.Shared.Forensics; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Mobs.Components; +using Content.Shared.Stacks; +using Robust.Server.Player; + +namespace Content.Server.Chemistry.EntitySystems; + +public sealed class FillableOneTimeInjectorSystem : SharedFillableOneTimeInjectorSystem +{ + [Dependency] private readonly BloodstreamSystem _blood = default!; + [Dependency] private readonly ReactiveSystem _reactiveSystem = default!; + [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + + private const ChatChannel BlockInjectionDenyChannel = ChatChannel.Emotes; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInjectDoAfter); + SubscribeLocalEvent(OnInjectorAfterInteract); + } + + private void UseInjector(Entity injector, EntityUid target, EntityUid user) + { + bool isDrawing = injector.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Draw; + + // Is the one-time use fillable injector already spent? + if (injector.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Spent) + return; + + // Handle injecting/drawing for solutions + if (!isDrawing) + { + if (SolutionContainers.TryGetInjectableSolution(target, out var injectableSolution, out _)) + { + TryInject(injector, target, injectableSolution.Value, user, false); + } + else if (SolutionContainers.TryGetRefillableSolution(target, out var refillableSolution, out _)) + { + TryInject(injector, target, refillableSolution.Value, user, true); + } + else if (TryComp(target, out var bloodstream)) + { + TryInjectIntoBloodstream(injector, (target, bloodstream), user); + } + else + { + Popup.PopupEntity(Loc.GetString("injector-component-cannot-transfer-message", + ("target", Identity.Entity(target, EntityManager))), injector, user); + } + } + else if (isDrawing) + { + // Draw from a bloodstream, if the target has that + if (TryComp(target, out var stream) && + SolutionContainers.ResolveSolution(target, stream.BloodSolutionName, ref stream.BloodSolution)) + { + TryDraw(injector, (target, stream), stream.BloodSolution.Value, user); + return; + } + + // Draw from an object (food, beaker, etc) + if (SolutionContainers.TryGetDrawableSolution(target, out var drawableSolution, out _)) + { + TryDraw(injector, target, drawableSolution.Value, user); + } + else + { + Popup.PopupEntity(Loc.GetString("injector-component-cannot-draw-message", + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + } + } + } + + private void OnInjectDoAfter(Entity entity, ref InjectorDoAfterEvent args) + { + if (args.Cancelled || args.Handled || args.Args.Target == null || entity.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Spent) + return; + + UseInjector(entity, args.Args.Target.Value, args.Args.User); + args.Handled = true; + } + + private void OnInjectorAfterInteract(Entity entity, ref AfterInteractEvent args) + { + if (args.Handled || !args.CanReach || entity.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Spent) + return; + + //Make sure we have the attacking entity + if (args.Target is not { Valid: true } target || !HasComp(entity)) + return; + + // Is the target a mob? If yes, use a do-after to give them time to respond. + if (HasComp(target) || HasComp(target)) + { + InjectDoAfter(entity, target, args.User); + args.Handled = true; + return; + } + + UseInjector(entity, target, args.User); + args.Handled = true; + } + + /// + /// Send informative pop-up messages and wait for a do-after to complete. + /// + private void InjectDoAfter(Entity injector, EntityUid target, EntityUid user) + { + if (injector.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Spent) + return; + + if (TryComp(target, out var blockComponent)) // DeltaV + { + var msg = Loc.GetString($"injector-component-deny-{blockComponent.BlockReason}"); + Popup.PopupEntity(msg, target, user); + + if (!_playerManager.TryGetSessionByEntity(target, out var session)) + return; + + _chat.ChatMessageToOne( + BlockInjectionDenyChannel, + msg, + msg, + EntityUid.Invalid, + false, + session.Channel); + return; + } + + bool isDrawing = injector.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Draw; + + // Create a pop-up for the user + if (isDrawing) + { + Popup.PopupEntity(Loc.GetString("injector-component-drawing-user"), target, user); + } + else + { + Popup.PopupEntity(Loc.GetString("injector-component-injecting-user"), target, user); + } + + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out _, out var solution)) + return; + + var actualDelay = MathHelper.Max(injector.Comp.Delay, TimeSpan.FromSeconds(1)); + float amountToInject; + if (isDrawing) + { + // additional delay is based on actual volume left to draw in syringe when smaller than transfer amount + amountToInject = Math.Min(injector.Comp.TransferAmount.Float(), (solution.MaxVolume - solution.Volume).Float()); + } + else + { + // additional delay is based on actual volume left to inject in syringe when smaller than transfer amount + amountToInject = Math.Min(injector.Comp.TransferAmount.Float(), solution.Volume.Float()); + } + + // Injections take 0.5 seconds longer per 5u of possible space/content + actualDelay += TimeSpan.FromSeconds(amountToInject / 10); + + var isTarget = user != target; + + if (isTarget) + { + // Create a pop-up for the target + var userName = Identity.Entity(user, EntityManager); + if (isDrawing) + { + Popup.PopupEntity(Loc.GetString("injector-component-drawing-target", + ("user", userName)), user, target); + } + else + { + Popup.PopupEntity(Loc.GetString("injector-component-injecting-target", + ("user", userName)), user, target); + } + + // Check if the target is incapacitated or in combat mode and modify time accordingly. + if (MobState.IsIncapacitated(target)) + { + actualDelay /= 2.5f; + } + else if (Combat.IsInCombatMode(target)) + { + // Slightly increase the delay when the target is in combat mode. Helps prevents cheese injections in + // combat with fast syringes & lag. + actualDelay += TimeSpan.FromSeconds(1); + } + + // Add an admin log, using the "force feed" log type. It's not quite feeding, but the effect is the same. + if (!isDrawing) + { + AdminLogger.Add(LogType.ForceFeed, + $"{EntityManager.ToPrettyString(user):user} is attempting to inject {EntityManager.ToPrettyString(target):target} with a solution {SharedSolutionContainerSystem.ToPrettyString(solution):solution}"); + } + else + { + AdminLogger.Add(LogType.ForceFeed, + $"{EntityManager.ToPrettyString(user):user} is attempting to draw {injector.Comp.TransferAmount.ToString()} units from {EntityManager.ToPrettyString(target):target}"); + } + } + else + { + // Self-injections take half as long. + actualDelay /= 2; + + if (!isDrawing) + { + AdminLogger.Add(LogType.Ingestion, + $"{EntityManager.ToPrettyString(user):user} is attempting to inject themselves with a solution {SharedSolutionContainerSystem.ToPrettyString(solution):solution}."); + } + else + { + AdminLogger.Add(LogType.ForceFeed, + $"{EntityManager.ToPrettyString(user):user} is attempting to draw {injector.Comp.TransferAmount.ToString()} units from themselves."); + } + } + + DoAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, actualDelay, new InjectorDoAfterEvent(), injector.Owner, target: target, used: injector.Owner) + { + BreakOnMove = true, + BreakOnWeightlessMove = false, + BreakOnDamage = true, + NeedHand = true, + BreakOnHandChange = true, + MovementThreshold = 0.1f, + }); + } + + private void TryInjectIntoBloodstream(Entity injector, Entity target, + EntityUid user) + { + // Get transfer amount. May be smaller than _transferAmount if not enough room + if (!SolutionContainers.ResolveSolution(target.Owner, target.Comp.ChemicalSolutionName, + ref target.Comp.ChemicalSolution, out var chemSolution) || injector.Comp.ToggleState != FillableOneTimeInjectorToggleMode.Inject) + { + Popup.PopupEntity( + Loc.GetString("injector-component-cannot-inject-message", + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + return; + } + + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var soln, + out var solution) || solution.Volume == 0) + return; + + var realTransferAmount = FixedPoint2.Min(injector.Comp.TransferAmount, chemSolution.AvailableVolume); + if (realTransferAmount <= 0) + { + Popup.PopupEntity( + Loc.GetString("injector-component-cannot-inject-message", + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + return; + } + + // Move units from attackSolution to targetSolution + var removedSolution = SolutionContainers.SplitSolution(target.Comp.ChemicalSolution.Value, realTransferAmount); + + _blood.TryAddToChemicals(target, removedSolution, target.Comp); + + _reactiveSystem.DoEntityReaction(target, removedSolution, ReactionMethod.Injection); + + Popup.PopupEntity(Loc.GetString("injector-component-inject-success-message", + ("amount", removedSolution.Volume), + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + + Dirty(injector); + AfterInject(injector, target); + } + + private void TryInject(Entity injector, EntityUid targetEntity, + Entity targetSolution, EntityUid user, bool asRefill) + { + if (HasComp(targetEntity)) // DeltaV + return; + + if (injector.Comp.ToggleState == FillableOneTimeInjectorToggleMode.Spent) + return; + + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var soln, + out var solution) || solution.Volume == 0) + return; + + // Get transfer amount. May be smaller than _transferAmount if not enough room + var realTransferAmount = + FixedPoint2.Min(injector.Comp.TransferAmount, targetSolution.Comp.Solution.AvailableVolume); + + if (realTransferAmount <= 0) + { + Popup.PopupEntity( + Loc.GetString("injector-component-target-already-full-message", + ("target", Identity.Entity(targetEntity, EntityManager))), + injector.Owner, user); + return; + } + + // Move units from attackSolution to targetSolution + Solution removedSolution; + if (TryComp(targetEntity, out var stack)) + removedSolution = SolutionContainers.SplitStackSolution(soln.Value, realTransferAmount, stack.Count); + else + removedSolution = SolutionContainers.SplitSolution(soln.Value, realTransferAmount); + + _reactiveSystem.DoEntityReaction(targetEntity, removedSolution, ReactionMethod.Injection); + + if (!asRefill) + SolutionContainers.Inject(targetEntity, targetSolution, removedSolution); + else + SolutionContainers.Refill(targetEntity, targetSolution, removedSolution); + + Popup.PopupEntity(Loc.GetString("injector-component-transfer-success-message", + ("amount", removedSolution.Volume), + ("target", Identity.Entity(targetEntity, EntityManager))), injector.Owner, user); + + Dirty(injector); + AfterInject(injector, targetEntity); + } + + private void AfterInject(Entity injector, EntityUid target) + { + // Automatically set syringe to draw after draining it. + if (SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var user, + out var solution) && solution.Volume == 0) + { + SetMode(injector, FillableOneTimeInjectorToggleMode.Spent); + Popup.PopupClient(Loc.GetString("injector-spent-text"), injector, user); + } + // Leave some DNA from the injectee on it + var ev = new TransferDnaEvent { Donor = target, Recipient = injector }; + RaiseLocalEvent(target, ref ev); + } + + private void AfterDraw(Entity injector, EntityUid target) + { + // Automatically set syringe to inject after filling it completely. + if (SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var user, + out var solution) && solution.AvailableVolume == 0) + { + SetMode(injector, FillableOneTimeInjectorToggleMode.Inject); + Popup.PopupClient(Loc.GetString("injector-component-injecting-locked-text"), injector, user); + } + + // Leave some DNA from the drawee on it + var ev = new TransferDnaEvent { Donor = target, Recipient = injector }; + RaiseLocalEvent(target, ref ev); + } + + private void TryDraw(Entity injector, Entity target, + Entity targetSolution, EntityUid user) + { + if (!SolutionContainers.TryGetSolution(injector.Owner, injector.Comp.SolutionName, out var soln, + out var solution) || solution.AvailableVolume == 0) + { + return; + } + + // Get transfer amount. May be smaller than _transferAmount if not enough room, also make sure there's room in the injector + var realTransferAmount = FixedPoint2.Min(injector.Comp.TransferAmount, targetSolution.Comp.Solution.Volume, + solution.AvailableVolume); + + if (realTransferAmount <= 0) + { + Popup.PopupEntity( + Loc.GetString("injector-component-target-is-empty-message", + ("target", Identity.Entity(target, EntityManager))), + injector.Owner, user); + return; + } + + // We have some snowflaked behavior for streams. + if (target.Comp != null) + { + DrawFromBlood(injector, (target.Owner, target.Comp), soln.Value, realTransferAmount, user); + return; + } + + // Move units from attackSolution to targetSolution + var removedSolution = SolutionContainers.Draw(target.Owner, targetSolution, realTransferAmount); + + if (!SolutionContainers.TryAddSolution(soln.Value, removedSolution)) + { + return; + } + + Popup.PopupEntity(Loc.GetString("injector-component-draw-success-message", + ("amount", removedSolution.Volume), + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + + Dirty(injector); + AfterDraw(injector, target); + } + + private void DrawFromBlood(Entity injector, Entity target, + Entity injectorSolution, FixedPoint2 transferAmount, EntityUid user) + { + var drawAmount = (float) transferAmount; + + if (SolutionContainers.ResolveSolution(target.Owner, target.Comp.ChemicalSolutionName, + ref target.Comp.ChemicalSolution)) + { + var chemTemp = SolutionContainers.SplitSolution(target.Comp.ChemicalSolution.Value, drawAmount * 0.15f); + SolutionContainers.TryAddSolution(injectorSolution, chemTemp); + drawAmount -= (float) chemTemp.Volume; + } + + if (SolutionContainers.ResolveSolution(target.Owner, target.Comp.BloodSolutionName, + ref target.Comp.BloodSolution)) + { + var bloodTemp = SolutionContainers.SplitSolution(target.Comp.BloodSolution.Value, drawAmount); + SolutionContainers.TryAddSolution(injectorSolution, bloodTemp); + } + + Popup.PopupEntity(Loc.GetString("injector-component-draw-success-message", + ("amount", transferAmount), + ("target", Identity.Entity(target, EntityManager))), injector.Owner, user); + + Dirty(injector); + AfterDraw(injector, target); + } +} diff --git a/Content.Shared/Chemistry/Components/FillableOneTimeInjectorComponent.cs b/Content.Shared/Chemistry/Components/FillableOneTimeInjectorComponent.cs new file mode 100644 index 00000000000..e74563c531f --- /dev/null +++ b/Content.Shared/Chemistry/Components/FillableOneTimeInjectorComponent.cs @@ -0,0 +1,85 @@ +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Chemistry.Components; + +/// +/// Implements draw/inject behavior for syringes that can be filled once and then injected once. +/// +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class FillableOneTimeInjectorComponent : Component +{ + [DataField] + public string SolutionName = "injector"; + + /// + /// The minimum amount of solution that can be transferred at once from this solution. + /// + [DataField("minTransferAmount")] + public FixedPoint2 MinimumTransferAmount = FixedPoint2.New(1); + + /// + /// The maximum amount of solution that can be transferred at once from this solution. + /// + [DataField("maxTransferAmount")] + public FixedPoint2 MaximumTransferAmount = FixedPoint2.New(15); + + /// + /// Amount to inject or draw on each usage. If the injector is inject only, it will + /// attempt to inject it's entire contents upon use. + /// + [DataField] + [AutoNetworkedField] + public FixedPoint2 TransferAmount = FixedPoint2.New(1); + + /// + /// Injection delay (seconds) when the target is a mob. + /// + /// + /// The base delay has a minimum of 1 second, but this will still be modified if the target is incapacitated or + /// in combat mode. + /// + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(5); + + /// + /// The state of the injector. Determines it's attack behavior. Containers must have the + /// right SolutionCaps to support injection/drawing. + /// + [AutoNetworkedField] + [DataField] + public FillableOneTimeInjectorToggleMode ToggleState = FillableOneTimeInjectorToggleMode.Draw; + + [AutoNetworkedField] + [DataField] + public bool HasDrawn = false; + + [AutoNetworkedField] + [DataField] + public bool HasInjected = false; +} + +/// +/// Possible modes for an . +/// +public enum FillableOneTimeInjectorToggleMode : byte +{ + /// + /// The injector will try to inject reagent into things. + /// + Inject, + + /// + /// The injector will try to draw reagent from things. + /// + Draw, + + /// + /// The injector can no longer be used. + /// + Spent, +} diff --git a/Content.Shared/Chemistry/EntitySystems/SharedFillableOneTimeInjectorSystem.cs b/Content.Shared/Chemistry/EntitySystems/SharedFillableOneTimeInjectorSystem.cs new file mode 100644 index 00000000000..6e7f2287097 --- /dev/null +++ b/Content.Shared/Chemistry/EntitySystems/SharedFillableOneTimeInjectorSystem.cs @@ -0,0 +1,111 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Chemistry.Components; +using Content.Shared.CombatMode; +using Content.Shared.DoAfter; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction.Events; +using Content.Shared.Mobs.Systems; +using Content.Shared.Popups; +using Content.Shared.Verbs; +using Robust.Shared.Player; + +namespace Content.Shared.Chemistry.EntitySystems; + +public abstract class SharedFillableOneTimeInjectorSystem : EntitySystem +{ + [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainers = default!; + [Dependency] protected readonly MobStateSystem MobState = default!; + [Dependency] protected readonly SharedCombatModeSystem Combat = default!; + [Dependency] protected readonly SharedDoAfterSystem DoAfter = default!; + [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; + + public override void Initialize() + { + SubscribeLocalEvent>(AddSetTransferVerbs); + SubscribeLocalEvent(OnInjectorStartup); + SubscribeLocalEvent(OnInjectorUse); + } + + private void AddSetTransferVerbs(Entity entity, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || args.Hands == null || entity.Comp.ToggleState != FillableOneTimeInjectorToggleMode.Draw) + return; + + var user = args.User; + var (_, component) = entity; + + var min = component.MinimumTransferAmount; + var max = component.MaximumTransferAmount; + var cur = component.TransferAmount; + + var toggleAmount = cur == max ? min : max; + + var priority = 0; + AlternativeVerb toggleVerb = new() + { + Text = Loc.GetString("comp-solution-transfer-verb-toggle", ("amount", toggleAmount)), + Category = VerbCategory.SetTransferAmount, + Act = () => + { + component.TransferAmount = toggleAmount; + Popup.PopupClient(Loc.GetString("comp-solution-transfer-set-amount", ("amount", toggleAmount)), user, user); + Dirty(entity); + }, + + Priority = priority + }; + args.Verbs.Add(toggleVerb); + + priority -= 1; + + // Add specific transfer verbs according to the container's size + for (var amount = entity.Comp.MinimumTransferAmount; amount <= entity.Comp.MaximumTransferAmount; amount += 1) + { + var transferAmount = amount; + AlternativeVerb verb = new() + { + Text = Loc.GetString("comp-solution-transfer-verb-amount", ("amount", amount)), + Category = VerbCategory.SetTransferAmount, + Act = () => + { + component.TransferAmount = transferAmount; + Popup.PopupClient(Loc.GetString("comp-solution-transfer-set-amount", ("amount", transferAmount)), user, user); + Dirty(entity); + }, + + // we want to sort by size, not alphabetically by the verb text. + Priority = priority + }; + + priority -= 1; + + args.Verbs.Add(verb); + } + } + + private void OnInjectorUse(Entity entity, ref UseInHandEvent args) + { + if (args.Handled || entity.Comp.ToggleState != FillableOneTimeInjectorToggleMode.Draw) + return; + + SetMode(entity, FillableOneTimeInjectorToggleMode.Inject); + args.Handled = true; + } + + private void OnInjectorStartup(Entity entity, ref ComponentStartup args) + { + // ???? why ????? + Dirty(entity); + } + + public void SetMode(Entity injector, FillableOneTimeInjectorToggleMode mode) + { + injector.Comp.ToggleState = mode; + + if (mode == FillableOneTimeInjectorToggleMode.Inject) + injector.Comp.TransferAmount = injector.Comp.MaximumTransferAmount; + + Dirty(injector); + } +} diff --git a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs index 2ce008da262..2f8fabae5a4 100644 --- a/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs +++ b/Content.Shared/Fluids/SharedPuddleSystem.Spillable.cs @@ -65,6 +65,11 @@ private void AddSpillVerb(Entity entity, ref GetVerbsEvent(entity, out var fillableOneTimeInjectorComponent)) + { + fillableOneTimeInjectorComponent.ToggleState = FillableOneTimeInjectorToggleMode.Spent; + Dirty(entity, fillableOneTimeInjectorComponent); + } }; } else diff --git a/Resources/Locale/en-US/chemistry/components/injector-component.ftl b/Resources/Locale/en-US/chemistry/components/injector-component.ftl index 0b7d485daf5..fc537de8aa1 100644 --- a/Resources/Locale/en-US/chemistry/components/injector-component.ftl +++ b/Resources/Locale/en-US/chemistry/components/injector-component.ftl @@ -2,14 +2,19 @@ injector-draw-text = Draw injector-inject-text = Inject +injector-spent-text = Spent injector-invalid-injector-toggle-mode = Invalid injector-volume-label = Volume: [color=white]{$currentVolume}/{$totalVolume}[/color] Mode: [color=white]{$modeString}[/color] ([color=white]{$transferVolume}u[/color]) +onetime-injector-simple-volume-label = Volume: [color=white]{$currentVolume}[/color] + Mode: [color=white]{$modeString}[/color] + ## Entity injector-component-drawing-text = Now drawing injector-component-injecting-text = Now injecting +injector-component-injecting-locked-text = Locked to inject injector-component-cannot-transfer-message = You aren't able to transfer to {$target}! injector-component-cannot-draw-message = You aren't able to draw from {$target}! injector-component-cannot-inject-message = You aren't able to inject to {$target}! diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 2f86604711a..40cc1e4b00f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -327,6 +327,46 @@ - type: Item sprite: Objects/Specific/Chemistry/dropper.rsi +- type: entity + name: disposable syringe + parent: BaseItem + description: Used to inject mobs with controlled dosages of specific reagents. One-time use. + id: DisposableSyringe + components: + - type: Sprite + sprite: Objects/Specific/Chemistry/disposablesyringe.rsi + layers: + - state: syringe1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - state: syringe_base0 + map: ["enum.SolutionContainerLayers.Base"] + - type: Icon + sprite: Objects/Specific/Chemistry/disposablesyringe.rsi + state: "syringe_base0" + - type: Item + size: Tiny + sprite: Objects/Specific/Chemistry/disposablesyringe.rsi + - type: SolutionContainerManager + solutions: + injector: + maxVol: 15 + - type: FillableOneTimeInjector + transferAmount: 15 + toggleState: Draw + - type: ExaminableSolution + solution: injector + - type: Spillable + solution: injector + - type: TrashOnSolutionEmpty + solution: injector + - type: Appearance + - type: SolutionContainerVisuals + maxFillLevels: 2 + fillBaseName: syringe + inHandsMaxFillLevels: 3 + inHandsFillBaseName: -fill- + - type: entity name: syringe parent: BaseItem diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 925b04311b9..8cef542c034 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -148,6 +148,7 @@ - SheetRGlass - Beaker - Syringe + - DisposableSyringe - HandLabeler - LightTube - LedLightTube @@ -317,6 +318,7 @@ - CryostasisBeaker - SyringeCryostasis - Syringe + - DisposableSyringe - Implanter - PillCanister - ChemistryEmptyBottle01 @@ -1178,6 +1180,7 @@ - Dropper - Jug - Syringe + - DisposableSyringe - Implanter - PillCanister - BodyBag diff --git a/Resources/Prototypes/Recipes/Lathes/chemistry.yml b/Resources/Prototypes/Recipes/Lathes/chemistry.yml index 7ee8f1ed499..c17e42e346c 100644 --- a/Resources/Prototypes/Recipes/Lathes/chemistry.yml +++ b/Resources/Prototypes/Recipes/Lathes/chemistry.yml @@ -44,6 +44,14 @@ Plastic: 100 Steel: 25 +- type: latheRecipe + id: DisposableSyringe + result: DisposableSyringe + completetime: 0.1 + materials: + Plastic: 10 + Steel: 2 + - type: latheRecipe id: BluespaceBeaker result: BluespaceBeaker diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-1.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..93ff582233b78320bc09e9299ba7b136aed58467 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|j6Gc(Ln`LH zy>*b2fq~z$T4)m$)e8UK0F)%dT-^0wnaK@zeE%(>hhI9Wx NVxF#kF6*2UngB|{BXR%$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-2.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8271c771cdcda9aa7693f780088bf6096d4643f GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|>^xl@Ln`LH zy?KzA!GMFw;d}fnzQD=XD$E%g%|n6mKyxNNSw2TS?{vQ$KbX(JU>kP-`Re1$3>O|S XtO*i-`AXyN6_AXltDnm{r-UW|sIVrd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-3.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left-fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ce5e2519db1c89e1aa95b048ca703162dceba6 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|oIPC}Ln`LH zy?KzAL4kwC@mIc7yqUrgk2#tRclLDx6#%sv8OQG{cfI~%;>YOHKQAi4f(#5&wSOJO c_!$_Ei=EC_zU#&Gwg4pI>FVdQ&MBb@0LKt0#Q*>R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7b05b437d7a498c3bbef74224f5e44739d3c65 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|vOQfKLn`LH zy|q!a!GOcT@!R~fb2n^Ua8<>trkwf14^M9vpdto?S0~PNobY`7Y1a0sbG~qFepZw8 z<9S)%`gv?Q@^N>2e}>wCQ~}kkdHeQ&wD;D%vK6T-*L}Qt>S5immvv4FO#mQHMV0^n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-1.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9f489d4e645a778ed95973482171f7400f052ade GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|EIeHtLn`LH zy}6N>!GMFs@LT+^U;`#r$4%-x{;dMaGcaU$Zn|qwxK|#`VPL3xbeNf;;5@UBHTPG~ REq*#6VNX{-mvv4FO#re2B4q#o literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-2.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4dc38dda63a8ddc35a2125d55d9a15357f6664 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|96eneLn`LH zy?Kz6L4k+m;FtSfehSre3osjt=DeG&1ysS%;5@0s{7%Is+pj-ztL#A{Kyd#~%m0Ev3K`njxgN@xNAw?8Qs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-3.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right-fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb2bd374c539ac85039dd78a231248e54cf2743 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|JUv|;Ln`LH zy=lnBpuod&@b~}a$y1N{378msZaTZw6R3irAvW~t>o(!=>gBTc*OmC&?(==m4iaZz l_|g16yJx}?4h9CFEeunCD&Ku>m}m%+@O1TaS?83{1OR53E(QPq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe1bcafb532259a082a64c1b4d109a969cc14c6 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|3OrpLLn`LH zz2(T)puof8@bACb{}BC25_wt*s>b{ZyM6Pwhyax_ED&^e`6K(NQ#*h9nTww{cK&+e z7q#!#o}H21+vC38SX#3+S{|f~fnkQ$&-aDm#_!pu$$nYGJ?ZK8+>{+lyYKgM%vxr{ aFyS<3jg!Uio)ePnAhn*ZelF{r5}E*-r$P1r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/meta.json b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/meta.json new file mode 100644 index 00000000000..bfdd295b00c --- /dev/null +++ b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/meta.json @@ -0,0 +1,67 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Base taken from cev-eris https://github.com/discordia-space/CEV-Eris/commit/989b7b343045f30120c198ee100c9fee7ff8a989, and edited by Timfa", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "syringe_base0" + }, + { + "name": "syringe_base1" + }, + { + "name": "syringe_base2" + }, + { + "name": "syringe_base3" + }, + { + "name": "syringe_base4" + }, + { + "name": "syringeproj" + }, + { + "name": "syringe1" + }, + { + "name": "syringe2" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-left-fill-1", + "directions": 4 + }, + { + "name": "inhand-right-fill-1", + "directions": 4 + }, + { + "name": "inhand-left-fill-2", + "directions": 4 + }, + { + "name": "inhand-right-fill-2", + "directions": 4 + }, + { + "name": "inhand-left-fill-3", + "directions": 4 + }, + { + "name": "inhand-right-fill-3", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe1.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe1.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa237b1364439229cd4fc3efad57fa474e9e433 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzFHaZ8kcv5PFKpyJV8Fxd*n2Xv z-g1}G0v!cKw)KTSr>s^|QhL?nuNm|X=T83g%r6~iDubu1pUXO@geCwUv@Q?; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe2.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe2.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b7e8a701b086365b192639d62dc4ce25b167f9 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1Wy;okcv5PuN>q(puofIuzGhY z`}tWs)Ay|inCI%d!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zp3(0;%-eu!wxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#hHL?Lq;YB0U#X( z#F_0ZVDT&<8w3)77^ELYqgl$p%)l^#oq+|Y!obMbfN=rDRFDqV1rU>_0NEhG1T=>U ztTM>b0?2~uGBhv%$-cb$&EnLpoGPGgDxNNmArbD$60D08L@sdU*#7!rKc!RLz%g@G zbAG(N@KcU1nTGRBdU|l7eq1$F`t}kx3B-j1O@IXrhdQoS6%P@e?qL`hJxV) znGg>BgqBMw%oALfP4i3m_INeBM9Nm#19tCMomV=Q(-k z9#v2u*Q`;$-ak4iTTq-a z@6*PgGM&6^H;ULp84Rag=23_|=Td%JJ1Xtp``7asw@tY!6*f??q79dAj!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zp3(0;%-eu!wxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#hHL?Lq;YB0U#X( z#F_0ZVDT&<8w3)77^ELYqgl$p%)l^#oq+|Y!obMbfN=rDRFDqV1rU>_0NEhG1T=>U ztTM>b0?2~uGBhv%$-cb$&EnLpoGPGgI-V|$ArbD$60D08L@sdU*#7!rKc!RLz%g@G zbAG(N@KcU1nTGRBdU|l7eq1$F`t}kx3B-j1O@IXrhdQoS6%P@e?qL`hJxV) znGg>BgqBMw%oALfP4i3m_INeBM9Nm#19tCMomV=Q(-k z9#v2j;H*~u*T z#KiySjT%0o_Du&FqTemxI*@4D;~UMeY0vt4wi`hzrz2k^Rl1(`*`TW69&r2lgCEK) z_x4tDE_3Ac5A_x}I>+8Is1r_DO(H-+D!@c%1qWeb%Smm`u^ xS(jcuE*4net#p{xO;=vPV8OKhCP5Af35M$VdxP42++smt=;`X`vd$@?2>@< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base2.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base2.png new file mode 100644 index 0000000000000000000000000000000000000000..20a2cb370070a69b02876329207b15e0b0562891 GIT binary patch literal 620 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zp3(0;%-eu!wxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#hHL?Lq;YB0U#X( z#F_0ZVDT&<8w3)77^ELYqgl$p%)l^#oq+|Y!obMbfN=rDRFDqV1rU>_0NEhG1T=>U ztTM>b0?2~uGBhv%$-cb$&EnLpoGPGg(w;7kArbD$60D08L@sdU*#7!rKc!RLz%g@G zbAG(N@KcU1nTGRBdU|l7eq1$F`t}kx3B-j1O@IXrhdQoS6%P@e?qL`hJxV) znGg>BgqBMw%oALfP4i3m_INeBM9Nm#19tCMomV=Q(-k z9#v2?N?pSLur z@pQkCdb7JroyefdT6r9;Cy$6h`+U3me6 h1=ISQ1UV!m7$zxhe$ioi<_0LpJYD@<);T3K0RYU}wWR<6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base3.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringe_base3.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac30eaf55e82a6dbbd16dc582060a9b5fe7d8f6 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!phSslL`iUdT1k0gQ7S_~VrE{6o}X)of~lUN zp3(0;%-eu!wxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#hHL?Lq;YB0U#X( z#F_0ZVDT&<8w3)77^ELYqgl$p%)l^#oq+|Y!obMbfN=rDRFDqV1rU>_0NEhG1T=>U ztTM>b0?2~uGBhv%$-cb$&EnLpoGPGge4Z|jArbD$60D08L@sdU*#7!rKc!RLz%g@G zbAG(N@KcU1nTGRBdU|l7eq1$F`t}kx3B-j1O@IXrhdQoS6%P@e?qL`hJxV) znGg>BgqBMw%oALfP4i3m_INeBM9Nm#19tCMomV=Q(-k z9#v2wyk^TXZQ(*v$CG~RXZ|L?Dz zvB*1Gb&nUrWG{pK6+f=+yf{-%R?y|NO6_~`33)n z0)}A!3L%hSfk$L90|Vb-5N14{zaj-FC{f}XQ4*Y=R#Ki=l*$m0n3-3i=jR%tV5(=R zXY_jy^ERNGZK)BSX`Y^13>-iXD}xjxD+42tkOkFcXkY-6eR=hp#i?64RX}E)r;B5Vh5yy_jzSFz9IOGJy6@{B83; zN@4iHEg_!qka?>3f(s^s0hzNnZqzC&On-Iv(1Qh;#*SC~1-`L7s%w}XCnx!|_`)qt XmbG$c*WQ?`26C0BtDnm{r-UW|jQEc& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringeproj.png b/Resources/Textures/Objects/Specific/Chemistry/disposablesyringe.rsi/syringeproj.png new file mode 100644 index 0000000000000000000000000000000000000000..e67453c0cef764d82491b3e79bfdebdfc8636ec3 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*$m0n3-3i=jR%tV5(=R zXY_jy^ERNGZK)BSX`Y^13>-iXD}xjxD+42tvp@3Xlx~Oh9v) zz$$|*Er2YjE<*zYkZhmz!SKuCd;EaRxt=bLArbD$60D08M0%Kt4qjXA|9}0x(#Q3Y zkGK2}Q2fQ56>*MbsVCb40fVh2i*5*>37C~~;N*{u5C8X1=kb@1Nwui|SEC# Date: Fri, 14 Feb 2025 22:56:34 +0000 Subject: [PATCH 29/45] Automatic Changelog Update (#1775) --- Resources/Changelog/Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2626d4ffe7b..9fb13bf1046 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11752,3 +11752,14 @@ Entries: id: 6852 time: '2025-02-14T19:14:37.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1778 +- author: Timfa2112 + changes: + - type: Add + message: >- + Added disposable syringes! These cheaper, quicker-to-produce syringes + let Chemists pick dosages while preparing medicine so that doctors can + inject without worrying about volume, but the syringes cannot be used + more than once. + id: 6853 + time: '2025-02-14T22:56:04.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1775 From 76c53afe6cb9cc29640ee1ef32648682205ba89b Mon Sep 17 00:00:00 2001 From: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:21:58 -0600 Subject: [PATCH 30/45] IPCs Can Take High Capacity Batteries with Loadout (#1793) Gives IPCs access to a high capacity power cell on spawn # Description Allows IPCs to choose a high capacity power cell as a loadout item. --- # TODO - [ ] Have the power cell spawn in the IPCs battery slot if selected in loadout ---

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: - add: High Cap Battery as a loadout item for IPCs Signed-off-by: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> --- Resources/Prototypes/Loadouts/Generic/species.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Prototypes/Loadouts/Generic/species.yml b/Resources/Prototypes/Loadouts/Generic/species.yml index e7455a00fbe..2a1d10e38fc 100644 --- a/Resources/Prototypes/Loadouts/Generic/species.yml +++ b/Resources/Prototypes/Loadouts/Generic/species.yml @@ -39,3 +39,14 @@ group: LoadoutAirTank items: - DoubleEmergencyNitrogenTankFilled + +- type: loadout + id: LoadoutSpeciesPowerCellHigh + category: Species + cost: 6 + requirements: + - !type:CharacterSpeciesRequirement + species: + - IPC + items: + - PowerCellHigh From 4109f0b9fab303bc5e3a273527666dadd4cf3619 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 15 Feb 2025 03:22:31 +0000 Subject: [PATCH 31/45] Automatic Changelog Update (#1793) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9fb13bf1046..74ba552b25f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11763,3 +11763,10 @@ Entries: id: 6853 time: '2025-02-14T22:56:04.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1775 +- author: EctoplasmIsGood + changes: + - type: Add + message: High Cap Battery as a loadout item for IPCs + id: 6854 + time: '2025-02-15T03:21:59.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1793 From b0d278bb616c67ea4c93fcc9e1779de27b4e7eae Mon Sep 17 00:00:00 2001 From: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:56:25 -0600 Subject: [PATCH 32/45] BSO Paramed Gaming (#1795) # Description BSO as of now is treated as a purely combatant role, and while it is for the most part, I see it being closer to Corpsman. This PR adds new medical options to the BSOs loadout so that they can keep their charges in good health. It can be debated that this is overturned/power creep, and you're right to an extent. BSO is currently in a weird spot, as a lot of people disagree on how it should function, however, I believe that giving them access to medical items will lock in their position as the guardian/caretaker of command, and will overall be good for their kit and performing their jobs duties. BSO is the Corpsman of command, and them having access to high-tier equipment to match that makes sense. The crew monitor is a very good item, yes, but due to the fact that BSO will ONLY be using these items on command, I believe that them having it won't disrupt balance too much. (Crew monitor makes it possible for BSO to actually keep track of the entirety of command, rather then sitting on one all game and praying they respond to comms)

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: -add: Gave BSO access to a filled combat medkit, a portafib, and a handheld crew monitor --------- Signed-off-by: EctoplasmIsGood <109397347+EctoplasmIsGood@users.noreply.github.com> --- .../Jobs/Command/blueshield_officer.yml | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Resources/Prototypes/Loadouts/Jobs/Command/blueshield_officer.yml b/Resources/Prototypes/Loadouts/Jobs/Command/blueshield_officer.yml index 7e0dba01c26..e8a3fd233ce 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Command/blueshield_officer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Command/blueshield_officer.yml @@ -82,6 +82,39 @@ items: - WeaponLeverChester +- type: loadout + id: LoadoutBSOMedkitCombatFilled + category: JobsCommandBlueshieldOfficer + cost: 2 + requirements: + - !type:CharacterJobRequirement + jobs: + - BlueshieldOfficer + items: + - MedkitCombatFilled + +- type: loadout + id: LoadoutBSOPortafib + category: JobsCommandBlueshieldOfficer + cost: 2 + requirements: + - !type:CharacterJobRequirement + jobs: + - BlueshieldOfficer + items: + - Portafib + +- type: loadout + id: LoadoutBSOCrewMonitor + category: JobsCommandBlueshieldOfficer + cost: 6 + requirements: + - !type:CharacterJobRequirement + jobs: + - BlueshieldOfficer + items: + - HandheldCrewMonitor + # Eyes # Gloves From bc8d2ba651078ccdad6a27f2f93abbd11ee98734 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 15 Feb 2025 03:56:51 +0000 Subject: [PATCH 33/45] Automatic Changelog Update (#1795) --- Resources/Changelog/Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 74ba552b25f..8d7dabfe706 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11770,3 +11770,12 @@ Entries: id: 6854 time: '2025-02-15T03:21:59.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1793 +- author: EctoplasmIsGood + changes: + - type: Add + message: >- + Gave BSO access to a filled combat medkit, a portafib, and a handheld + crew monitor + id: 6855 + time: '2025-02-15T03:56:25.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1795 From 13331f55f021aad337d0bbb31a622ee2c8a8e45d Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 15 Feb 2025 01:20:35 -0500 Subject: [PATCH 34/45] Remove Antag Advantage (#1796) It's kind of cringe. --- .../DeltaV/Roles/Jobs/Justice/clerk.yml | 1 - .../Roles/Jobs/Epistemics/forensicmantis.yml | 1 - .../Roles/Jobs/Cargo/cargo_technician.yml | 1 - .../Roles/Jobs/Cargo/quartermaster.yml | 1 - .../Roles/Jobs/Cargo/salvage_specialist.yml | 1 - .../Prototypes/Roles/Jobs/Civilian/lawyer.yml | 1 - .../Roles/Jobs/Civilian/service_worker.yml | 1 - .../Roles/Jobs/Command/head_of_personnel.yml | 1 - .../Engineering/atmospheric_technician.yml | 76 +++++++++---------- .../Jobs/Engineering/station_engineer.yml | 1 - .../Jobs/Engineering/technical_assistant.yml | 1 - .../Jobs/Medical/chief_medical_officer.yml | 1 - .../Roles/Jobs/Medical/paramedic.yml | 1 - .../Roles/Jobs/Science/research_director.yml | 1 - 14 files changed, 38 insertions(+), 51 deletions(-) diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/Justice/clerk.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Justice/clerk.yml index 9101fef643b..a41907c21ed 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/Justice/clerk.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Justice/clerk.yml @@ -3,7 +3,6 @@ name: job-name-clerk description: job-description-clerk playTimeTracker: JobClerk - antagAdvantage: 2 requirements: - !type:CharacterDepartmentTimeRequirement department: Security diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml index 37690174697..fba2031f521 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml @@ -29,7 +29,6 @@ startingGear: ForensicMantisGear icon: "JobIconForensicMantis" supervisors: job-supervisors-rd - antagAdvantage: 5 # DeltaV - From 4 to 5 canBeAntag: true # DeltaV - Mantis is no longer a Detective # whitelistRequired: true access: diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml index 7b5c19bcf81..e06c3ebd270 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/cargo_technician.yml @@ -3,7 +3,6 @@ name: job-name-cargotech description: job-description-cargotech playTimeTracker: JobCargoTechnician - antagAdvantage: 2 # DeltaV - Reduced TC: External Access startingGear: CargoTechGear icon: "JobIconCargoTechnician" supervisors: job-supervisors-qm diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 3643a255b3f..ba23041b51f 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -3,7 +3,6 @@ name: job-name-qm description: job-description-qm playTimeTracker: JobQuartermaster - antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff requirements: - !type:CharacterTraitRequirement inverted: true diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml index 4d55f6183ba..5f9692740b7 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/salvage_specialist.yml @@ -3,7 +3,6 @@ name: job-name-salvagespec description: job-description-salvagespec playTimeTracker: JobSalvageSpecialist - antagAdvantage: 3 # DeltaV - Reduced TC: External Access + Free hardsuit and weapons requirements: - !type:CharacterDepartmentTimeRequirement department: Logistics # DeltaV - Logistics Department replacing Cargo diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml index 30116d245b9..0ad962e967c 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml @@ -3,7 +3,6 @@ name: job-name-lawyer description: job-description-lawyer playTimeTracker: JobLawyer - antagAdvantage: 2 # DeltaV - Reduced TC: Security Radio and Access startingGear: LawyerGear icon: "JobIconLawyer" supervisors: job-supervisors-cj # Delta V - Change supervisor to chief justice diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml index ca7c796283d..69fdaa4e12d 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/service_worker.yml @@ -7,7 +7,6 @@ icon: "JobIconServiceWorker" supervisors: job-supervisors-service canBeAntag: true # DeltaV - Can be antagonist - antagAdvantage: 1 # DeltaV - Reduced TC: Accesses access: - Service - Maintenance diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index d21d6b3d42f..5752dff5f96 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -9,7 +9,6 @@ traits: - Foreigner - ForeignerLight - antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff weight: 10 # DeltaV - Changed HoP weight from 20 to 10 due to them not being more important than other Heads startingGear: HoPGear icon: "JobIconHeadOfPersonnel" diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml index b271a3d9358..740b99d7601 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/atmospheric_technician.yml @@ -1,40 +1,40 @@ -- type: job - id: AtmosphericTechnician - name: job-name-atmostech - description: job-description-atmostech - playTimeTracker: JobAtmosphericTechnician - antagAdvantage: 10 # DeltaV - Reduced TC: External Access + Fireaxe + Free Hardsuit - requirements: - - !type:CharacterDepartmentTimeRequirement - department: Engineering - min: 36000 # DeltaV - 10 hours - startingGear: AtmosphericTechnicianGear - icon: "JobIconAtmosphericTechnician" - supervisors: job-supervisors-ce - access: - - Maintenance - - Engineering - - External - - Atmospherics - -- type: startingGear +- type: job + id: AtmosphericTechnician + name: job-name-atmostech + description: job-description-atmostech + playTimeTracker: JobAtmosphericTechnician + requirements: + - !type:CharacterDepartmentTimeRequirement + department: Engineering + min: 36000 # DeltaV - 10 hours + startingGear: AtmosphericTechnicianGear + icon: "JobIconAtmosphericTechnician" + supervisors: job-supervisors-ce + access: + - Maintenance + - Engineering + - External + - Atmospherics + +- type: startingGear id: AtmosphericTechnicianGear subGear: - - AtmosphericTechnicianPlasmamanGear - equipment: - jumpsuit: ClothingUniformJumpsuitAtmos - back: ClothingBackpackAtmospherics - shoes: ClothingShoesColorWhite - id: AtmosPDA - ears: ClothingHeadsetEngineering - innerClothingSkirt: ClothingUniformJumpskirtAtmos - satchel: ClothingBackpackSatchelEngineeringFilled - duffelbag: ClothingBackpackDuffelEngineeringFilled - -- type: startingGear - id: AtmosphericTechnicianPlasmamanGear - parent: BasePlasmamanGear - equipment: - jumpsuit: ClothingUniformEnvirosuitAtmos - head: ClothingHeadEnvirohelmAtmos - gloves: ClothingHandsGlovesEnviroglovesAtmos + - AtmosphericTechnicianPlasmamanGear + + equipment: + jumpsuit: ClothingUniformJumpsuitAtmos + back: ClothingBackpackAtmospherics + shoes: ClothingShoesColorWhite + id: AtmosPDA + ears: ClothingHeadsetEngineering + innerClothingSkirt: ClothingUniformJumpskirtAtmos + satchel: ClothingBackpackSatchelEngineeringFilled + duffelbag: ClothingBackpackDuffelEngineeringFilled + +- type: startingGear + id: AtmosphericTechnicianPlasmamanGear + parent: BasePlasmamanGear + equipment: + jumpsuit: ClothingUniformEnvirosuitAtmos + head: ClothingHeadEnvirohelmAtmos + gloves: ClothingHandsGlovesEnviroglovesAtmos diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml index 8169ff0e9c6..878c6be350c 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/station_engineer.yml @@ -3,7 +3,6 @@ name: job-name-engineer description: job-description-engineer playTimeTracker: JobStationEngineer - antagAdvantage: 3 # DeltaV - Reduced TC: External Access + Engineering requirements: - !type:CharacterDepartmentTimeRequirement department: Engineering diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml index 93bc35c5e01..1b933122235 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml @@ -3,7 +3,6 @@ name: job-name-technical-assistant description: job-description-technical-assistant playTimeTracker: JobTechnicalAssistant - antagAdvantage: 3 # DeltaV - Reduced TC: External Access + Engineering startingGear: TechnicalAssistantGear icon: "JobIconTechnicalAssistant" supervisors: job-supervisors-engineering diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index ad1c5f8dfd1..71ae6622258 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -5,7 +5,6 @@ name: job-name-cmo description: job-description-cmo playTimeTracker: JobChiefMedicalOfficer - antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff requirements: - !type:CharacterTraitRequirement inverted: true diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index 454322a92cb..63f264ade75 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -3,7 +3,6 @@ name: job-name-paramedic description: job-description-paramedic playTimeTracker: JobParamedic - antagAdvantage: 2 # DeltaV - Reduced TC: External Access requirements: # - !type:RoleTimeRequirement # DeltaV - No Medical Doctor time requirement # role: JobMedicalDoctor diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 5d6b7e12610..58078d3bc27 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -3,7 +3,6 @@ name: job-name-rd description: job-description-rd playTimeTracker: JobResearchDirector - antagAdvantage: 6 # DeltaV - Reduced TC: Head of Staff requirements: - !type:CharacterLogicOrRequirement requirements: From f6d0296d45568c1006b2dea7fc927f588e9db0f1 Mon Sep 17 00:00:00 2001 From: BloodfiendishOperator <141253729+Diggy0@users.noreply.github.com> Date: Sat, 15 Feb 2025 08:55:12 +0100 Subject: [PATCH 35/45] Two New Traits. (#1792) Plateled Factories but for IPCs, at the cost of 10 trait points, heals 0,8. Bionic legs roundstart, at the cost of 6 points, since they are not as useful as the arms. # Description Plateled Factories but for IPCs, at the cost of 10 trait points, heals 0,8. Bionic legs roundstart, at the cost of 6 points, since they are not as useful as the arms. Platelet Factories for IPC feel good since it made, in my opinion, and in the opinion of many others, no sense that IPCs had nothing for regen, as for bionic legs, consider it my personal mald PR for not having bionic legs from the start. --- # TODO - [ ] Task - [x] Completed Task ---

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: Diggy - add: A trait for IPCs, which is essentially a platelet factories, at the same trait cost, etc, as the normal platelet factories, and bionic legs, which are just speed legs roundstart. --- Resources/Locale/en-US/traits/misc.ftl | 6 +-- Resources/Locale/en-US/traits/traits.ftl | 9 +++++ Resources/Prototypes/Traits/physical.yml | 51 ++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/en-US/traits/misc.ftl b/Resources/Locale/en-US/traits/misc.ftl index 13eae985129..3a4b98278f6 100644 --- a/Resources/Locale/en-US/traits/misc.ftl +++ b/Resources/Locale/en-US/traits/misc.ftl @@ -1,5 +1,5 @@ examine-cybereyes-message = {CAPITALIZE(POSS-ADJ($entity))} eyes shine with a faint inner light. examine-dermal-armor-message = {CAPITALIZE(POSS-ADJ($entity))} skin seems to be made of a sturdy, yet flexible plastic. -examine-bionic-arm-message = {CAPITALIZE(POSS-ADJ($entity))} limbs emit an ever present faint chirp of servomotors. -examine-thermal-vision-message = {CAPITALIZE(POSS-ADJ($entity))} eyes periodically pulse with a menacing red glare. - +examine-bionic-arm-message = {CAPITALIZE(POSS-ADJ($entity))} arms emit an ever present faint chirp of servomotors. +examine-bionic-leg-message = {CAPITALIZE(POSS-ADJ($entity))} legs emit an ever present faint chirp of servomotors. +examine-thermal-vision-message = {CAPITALIZE(POSS-ADJ($entity))} eyes periodically pulse with a menacing red glare. \ No newline at end of file diff --git a/Resources/Locale/en-US/traits/traits.ftl b/Resources/Locale/en-US/traits/traits.ftl index e02e273c08a..617e860729f 100644 --- a/Resources/Locale/en-US/traits/traits.ftl +++ b/Resources/Locale/en-US/traits/traits.ftl @@ -547,3 +547,12 @@ trait-name-LyreBird = Lyre Bird trait-description-LyreBird = Your natural talent for mimicry vastly exceeds that of other Harpies. You have the ability to perfectly imitate songs in their entirety. Be your own full symphony orchestra, jazz group, or metal band. + +trait-name-NaniteAutoRepairBots = Nanite Auto-Repair Bots +trait-description-NaniteAutoRepairBots = + Your chassis has been outfitted with Nanite Repair Drones. Whenever your sensors detect that you've recieved structural damage, the NRDs will activate to bring you back to operational standards. + +trait-name-BionicLeg = Bionic Leg +trait-description-BionicLeg = + One or more of your limbs have been replaced with an expensive, state of the art bionic. It could be either one made of highly realistic synthflesh, + or a more obvious metal limb. This limb provides enhanced speed to it's user, allowing you to run away from situations faster or get to a place faster. diff --git a/Resources/Prototypes/Traits/physical.yml b/Resources/Prototypes/Traits/physical.yml index a5864a8c569..fbe8db36b08 100644 --- a/Resources/Prototypes/Traits/physical.yml +++ b/Resources/Prototypes/Traits/physical.yml @@ -862,3 +862,54 @@ - description: examine-thermal-vision-message fontSize: 12 requireDetailRange: true + +- type: trait + id: NaniteAutoRepairBots + category: Physical + points: -10 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterSpeciesRequirement + species: + - IPC + - !type:CharacterItemGroupRequirement + group: TraitsMind + functions: # TODO: Code Platelet factories as an actual obtainable implant, and replace this with TraitAddImplant + - !type:TraitReplaceComponent + components: + - type: PassiveDamage + allowedStates: + - Alive + - Critical + - Dead + damageCap: 200 + damage: + groups: + Brute: -0.9 + Burn: -0.9 + +- type: trait + id: BionicLeg + category: Physical + points: -6 + requirements: + - !type:CharacterJobRequirement + inverted: true + jobs: + - Prisoner # Bionics should be "Confiscated" from long term prisoners. + - !type:CharacterItemGroupRequirement + group: TraitsMind + functions: + - !type:TraitAddComponent + components: + - type: MovementBodyPart + walkSpeed: 3.125 + sprintSpeed: 5.625 + - !type:TraitPushDescription + descriptionExtensions: + - description: examine-bionic-leg-message + fontSize: 12 + requireDetailRange: true \ No newline at end of file From 6b9917ead2b0b9c1a0cbe1450e5f43f1f1593a13 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 15 Feb 2025 07:55:41 +0000 Subject: [PATCH 36/45] Automatic Changelog Update (#1792) --- Resources/Changelog/Changelog.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8d7dabfe706..fb579d1218f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11779,3 +11779,13 @@ Entries: id: 6855 time: '2025-02-15T03:56:25.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1795 +- author: Diggy + changes: + - type: Add + message: >- + A trait for IPCs, which is essentially a platelet factories, at the same + trait cost, etc, as the normal platelet factories, and bionic legs, + which are just speed legs roundstart. + id: 6856 + time: '2025-02-15T07:55:12.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1792 From 6647eca1041b550ab4569b434e80cd0b7c20099a Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Sat, 15 Feb 2025 15:06:52 -0500 Subject: [PATCH 37/45] Two New .25 Caseless Guns (#1794) # Description This PR adds a new integrally suppressed submachine gun to the game, which is called the FPA-90. It is notably the first automatic weapon to fire the .25 caseless ammo type, which it does so in extremely quick 3 round bursts with a moderate cooldown between bursts. This item can be either obtained from the Syndicate Uplink where it's intended primarily for "Stealth Ops" nukies, or it can be manufactured after researching Advanced Weapons in Arsenal T3, for a fairly sizeable amount of aluminium and steel. Since Security could not previously print .25 caseless, this PR also adds the ability to print caseless rifle magazines. Also included for the uplink are a variety of magazines for the FPA-90(and other weapons). For the crew side of things, there is also the bullpup caseless integrally supressed assault rifle, called the BRDI-R25. Unlike the FPA-90, it requires wielding to be used effectively. It's currently obtained via Prototype Weapons in arsenal t3, and then manufactured at a security techfab. The BRDI has two radically different firing modes, a 5 round burst with extreme rate of fire and poor accuracy, and an auto mode that has much lower firing rate and more manageable recoil. Essentially, we have a "Fuller-Auto" gun. There is also a unique antique BRDI-R25 available to the Head of Security via his special weapon loadout picks.

Media

Available in research ![image](https://github.com/user-attachments/assets/5b28f1f8-f954-4eea-895f-c18f0905a2ac) And in the uplink catalog ![image](https://github.com/user-attachments/assets/b5e1cd96-5592-462f-85a4-436ecd5744d2) ![image](https://github.com/user-attachments/assets/a92691b7-f1f4-44b7-9782-462d284d0932) In the techfab(after researching it) ![image](https://github.com/user-attachments/assets/a6d56942-2987-4a59-8e04-b069edbb31b1) Firing it: https://github.com/user-attachments/assets/fd82df27-bf26-4351-be9d-c4da71d8a0e2

# Changelog :cl: - add: Added the FPA-90, an integrally supressed submachine gun. It can be found either in the syndicate uplink, or manufactured at a security techfab after Epistemics unlocks Advanced Weapons. - add: Added the BRDI-R25, an integrally supressed bullpup rifle chambered in .25 Caseless. It has an "Extremely fast" burst fire mode, and a "More controllable" full-auto/semi mode. Unlike the FPA-90, it is not available to syndicate agents. It can be manufactured after researching Prototype Weapons. - add: Antique variant of the BRDI-R25, which can be taken by the Head of Security as his personal weapon. - add: Added a variety of different ammunition options to Syndicate uplinks. - add: Security Techfabs can now manufacture .25 caseless rifle ammo and magazines. --- .../Systems/SharedGunSystem.Interactions.cs | 12 +- .../Weapons/Guns/Gunshots/attributions.yml | 4 + .../Gunshots/fpa-90-suppressed-gunshot.ogg | Bin 0 -> 18630 bytes .../Locale/en-US/store/uplink-catalog.ftl | 36 ++++- .../extenddescriptions/descriptions.ftl | 1 + Resources/Locale/en-US/weapons/ranged/gun.ftl | 4 +- .../Catalog/Fills/Backpacks/duffelbag.yml | 12 ++ .../Prototypes/Catalog/uplink_catalog.yml | 57 ++++++- .../Jobs/Security/headOfSecurity.yml | 2 + .../Entities/Structures/Machines/lathe.yml | 52 ++++++- .../Loadouts/Jobs/Security/headOfSecurity.yml | 18 ++- .../Prototypes/Recipes/Lathes/security.yml | 98 ++++++++++++ Resources/Prototypes/Research/arsenal.yml | 2 + .../Objects/Weapons/Guns/SMGs/smgs.yml | 146 ++++++++++++++++++ .../Weapons/Guns/SMGs/BRDI_R25.rsi/base.png | Bin 0 -> 750 bytes .../Guns/SMGs/BRDI_R25.rsi/bolt-open.png | Bin 0 -> 750 bytes .../Weapons/Guns/SMGs/BRDI_R25.rsi/icon.png | Bin 0 -> 774 bytes .../Guns/SMGs/BRDI_R25.rsi/inhand-left.png | Bin 0 -> 672 bytes .../Guns/SMGs/BRDI_R25.rsi/inhand-right.png | Bin 0 -> 679 bytes .../Weapons/Guns/SMGs/BRDI_R25.rsi/mag-0.png | Bin 0 -> 238 bytes .../Weapons/Guns/SMGs/BRDI_R25.rsi/meta.json | 39 +++++ .../SMGs/BRDI_R25.rsi/wielded-inhand-left.png | Bin 0 -> 722 bytes .../BRDI_R25.rsi/wielded-inhand-right.png | Bin 0 -> 716 bytes .../Guns/SMGs/BRDI_R25_antique.rsi/base.png | Bin 0 -> 831 bytes .../SMGs/BRDI_R25_antique.rsi/bolt-open.png | Bin 0 -> 831 bytes .../Guns/SMGs/BRDI_R25_antique.rsi/icon.png | Bin 0 -> 853 bytes .../SMGs/BRDI_R25_antique.rsi/inhand-left.png | Bin 0 -> 1270 bytes .../BRDI_R25_antique.rsi/inhand-right.png | Bin 0 -> 1193 bytes .../Guns/SMGs/BRDI_R25_antique.rsi/mag-0.png | Bin 0 -> 238 bytes .../Guns/SMGs/BRDI_R25_antique.rsi/meta.json | 39 +++++ .../wielded-inhand-left.png | Bin 0 -> 1387 bytes .../wielded-inhand-right.png | Bin 0 -> 1379 bytes .../Weapons/Guns/SMGs/FPA90.rsi/base.png | Bin 0 -> 496 bytes .../Weapons/Guns/SMGs/FPA90.rsi/bolt-open.png | Bin 0 -> 292 bytes .../Weapons/Guns/SMGs/FPA90.rsi/icon.png | Bin 0 -> 496 bytes .../Guns/SMGs/FPA90.rsi/inhand-left.png | Bin 0 -> 522 bytes .../Guns/SMGs/FPA90.rsi/inhand-right.png | Bin 0 -> 529 bytes .../Weapons/Guns/SMGs/FPA90.rsi/mag-0.png | Bin 0 -> 442 bytes .../Weapons/Guns/SMGs/FPA90.rsi/meta.json | 31 ++++ 39 files changed, 540 insertions(+), 13 deletions(-) create mode 100644 Resources/Audio/_EE/Weapons/Guns/Gunshots/attributions.yml create mode 100644 Resources/Audio/_EE/Weapons/Guns/Gunshots/fpa-90-suppressed-gunshot.ogg create mode 100644 Resources/Prototypes/_EE/Entities/Objects/Weapons/Guns/SMGs/smgs.yml create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/base.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/bolt-open.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/icon.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/inhand-left.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/inhand-right.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/mag-0.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/meta.json create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/base.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/bolt-open.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/icon.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-left.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-right.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/mag-0.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/meta.json create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/base.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/bolt-open.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/icon.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/inhand-left.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/inhand-right.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/mag-0.png create mode 100644 Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/meta.json diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs index 274828a2086..05daa7060c8 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs @@ -19,7 +19,17 @@ private void OnExamine(EntityUid uid, GunComponent component, ExaminedEvent args args.PushMarkup(Loc.GetString("gun-selected-mode-examine", ("color", ModeExamineColor), ("mode", GetLocSelector(component.SelectedMode)))); args.PushMarkup(Loc.GetString("gun-fire-rate-examine", ("color", FireRateExamineColor), - ("fireRate", $"{component.FireRateModified:0.0}"))); + ("fireRate", $"{(int) (component.FireRate * 60)}"))); + + if (!component.AvailableModes.HasFlag(SelectiveFire.Burst)) + return; + + if (component.FireRate != component.BurstFireRate) + args.PushMarkup(Loc.GetString("gun-burst-fire-rate-examine", ("color", FireRateExamineColor), + ("fireRate", $"{(int) (component.BurstFireRate * 60)}"))); + + args.PushMarkup(Loc.GetString("gun-burst-fire-burst-count", ("color", FireRateExamineColor), + ("burstcount", $"{component.ShotsPerBurst}"))); } } diff --git a/Resources/Audio/_EE/Weapons/Guns/Gunshots/attributions.yml b/Resources/Audio/_EE/Weapons/Guns/Gunshots/attributions.yml new file mode 100644 index 00000000000..521396aec56 --- /dev/null +++ b/Resources/Audio/_EE/Weapons/Guns/Gunshots/attributions.yml @@ -0,0 +1,4 @@ +- files: ["fpa-90-suppressed-gunshot"] + license: "CC-BY-4.0" + copyright: "Taken from https://freesound.org/people/Astronaut77890/sounds/714332/ and modified by VMSolidus" + source: "https://freesound.org/people/Astronaut77890/sounds/714332/" diff --git a/Resources/Audio/_EE/Weapons/Guns/Gunshots/fpa-90-suppressed-gunshot.ogg b/Resources/Audio/_EE/Weapons/Guns/Gunshots/fpa-90-suppressed-gunshot.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f373456e5abf7eee75fcf11e9c5d9475dabad8f1 GIT binary patch literal 18630 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

Z*pO2UGe&@o7!ke;x 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 CH93(0 literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 1c5272da076..601a24fbacd 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -85,12 +85,33 @@ uplink-shrapnel-grenade-desc = Launches a spray of sharp fragments dealing great uplink-pistol-magazine-name = Pistol Magazine (.35 auto) uplink-pistol-magazine-desc = Pistol magazine with 10 catridges. Compatible with the Viper. +uplink-pistol-magazine-rubber-name = Pistol Magazine (.35 auto, rubber) +uplink-pistol-magazine-rubber-desc = Pistol magazine with 10 cartridges. For when you need to take someone alive. + +uplink-pistol-magazine-incendiary-name = Pistol Magazine (.35 auto, incendiary) +uplink-pistol-magazine-incendiary-desc = A premium magazine for putting burning holes in both your wallet, and your victims. + uplink-pistol-magazine-c20r-name = SMG magazine (.35 auto) uplink-pistol-magazine-c20r-desc = Rifle magazine with 30 catridges. Compatible with C-20r. +uplink-pistol-magazine-c20r-rubber-name = SMG magazine (.35 auto, rubber) +uplink-pistol-magazine-c20r-rubber-desc = Rifle magazine with 30 catridges. For when you need to take many hostages. + +uplink-pistol-magazine-c20r-incendiary-name = SMG magazine (.35 auto, incendiary) +uplink-pistol-magazine-c20r-incendiary-desc = WAKE THE FUCK UP SAMURAI, WE GOT A STATION TO BURN! + uplink-pistol-magazine-caseless-name = Pistol Magazine (.25 caseless) uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 catridges. Compatible with the Cobra. +uplink-pistol-magazine-caseless-rubber-name = Pistol Magazine (.25 caseless, rubber) +uplink-pistol-magazine-caseless-rubber-desc = Pistol magazine with 10 catridges. For when you need to (quietly) take someone alive. + +uplink-magazine-caseless-name = SMG magazine (.25 caseless) +uplink-magazine-caseless-desc = Rifle magazine with 30 cartridges. Compatible with the FPA-90. + +uplink-magazine-caseless-rubber-name = SMG magazine (.25 caseless, rubber) +uplink-magazine-caseless-rubber-desc = Rifle magazine with 30 cartridges. For when you need to (quietly) take many hostages. + uplink-speedloader-magnum-name = Speedloader (.45 magnum AP) uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing catridges, capable of ignoring armor entirely. Compatible with the Python. @@ -116,7 +137,7 @@ uplink-chest-rig-name = Chest Rig uplink-chest-rig-desc = Explosion-resistant tactical webbing used for holding traitor goods. # DeltaV - Correct Emag name, Emag no longer breaks doors -uplink-emag-name = Cryptographic Sequencer +uplink-emag-name = Cryptographic Sequencer uplink-emag-desc = The business card of the Syndicate, this sequencer is able to tamper with a variety of station devices. Rendered obsolete against airlocks. uplink-agent-id-card-name = Agent ID Card @@ -244,6 +265,9 @@ uplink-surplus-bundle-desc = Contains 50 telecrystals worth of completely random uplink-super-surplus-bundle-name = Super Surplus Crate uplink-super-surplus-bundle-desc = Contains 125 telecrystals worth of completely random Syndicate items. +uplink-fpa-90-bundle-name = FPA-90 Bundle +uplink-fpa-90-bundle-desc = A cheap integrally suppressed SMG. Comes bundled with three .25 caseless magazines. + # Tools uplink-toolbox-name = Toolbox uplink-toolbox-desc = A full compliment of tools for the mechanically inclined traitor. Includes a pair of insulated combat gloves, syndicate gas mask and a utility belt. @@ -321,8 +345,14 @@ uplink-eva-syndie-desc = A simple EVA suit that offers no protection other than uplink-hardsuit-carp-name = Carp Hardsuit uplink-hardsuit-carp-desc = Looks like an ordinary carp suit, except fully spaceproof and tricks space carp into thinking you are one of them. -uplink-hardsuit-syndie-name = Syndicate Hardsuit -uplink-hardsuit-syndie-desc = The Syndicate's well known armored blood red hardsuit, capable of space walks and bullet resistant. +uplink-hardsuit-syndie-name = Blood-red Tacsuit +uplink-hardsuit-syndie-desc = The calling card of pirates, outlaws, mercenaries, and deserters. The "Blood Red" Shanlin Tacsuit is an iconic piece of equipment employed by the Syndicate. + +uplink-hardsuit-syndie-medic-name = Blood-red Medic Tacsuit +uplink-hardsuit-syndie-medic-desc = A variant of the "Blood-red" tacsuit that includes medical markings. + +uplink-hardsuit-syndie-commander-name = Blood-red "Commander" Tacsuit +uplink-hardsuit-syndie-commander-desc = An up-armored variant of the iconic "Blood-red" tacsuit. uplink-hardsuit-syndieelite-name = Syndicate Elite Hardsuit uplink-hardsuit-syndieelite-desc = An elite version of the blood-red hardsuit, with improved mobility and fireproofing. Property of Gorlex Marauders. diff --git a/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl b/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl index 4a4aaf9f3d2..6eb72d7fe1c 100644 --- a/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl +++ b/Resources/Locale/en-US/weapons/extenddescriptions/descriptions.ftl @@ -1 +1,2 @@ gun-legality-salvage = This weapon is licensed for use in planetary expeditions. It is unlawful to brandish this weapon aboard NanoTrasen stations, and may be confiscated by Security if removed from the station's Salvage Department. +gun-suppressed = This weapon comes with a built-in suppressor. It will be impossible to hear at a distance. diff --git a/Resources/Locale/en-US/weapons/ranged/gun.ftl b/Resources/Locale/en-US/weapons/ranged/gun.ftl index fe60f3eed1d..ec9b1951340 100644 --- a/Resources/Locale/en-US/weapons/ranged/gun.ftl +++ b/Resources/Locale/en-US/weapons/ranged/gun.ftl @@ -1,6 +1,8 @@ gun-selected-mode-examine = Current selected fire mode is [color={$color}]{$mode}[/color]. -gun-fire-rate-examine = Fire rate is [color={$color}]{$fireRate}[/color] per second. +gun-fire-rate-examine = Fire rate is [color={$color}]{$fireRate}[/color] rounds per minute. +gun-burst-fire-rate-examine = Burst fire rate is [color={$color}]{$fireRate}[/color] rounds per minute. +gun-burst-fire-burst-count = It can be set to fire in [color={$color}]{$burstcount}[/color] round bursts. gun-selector-verb = Change to {$mode} gun-selected-mode = Selected {$mode} gun-disabled = You can't use guns! diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index a294ffdc5e8..1ad57136963 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -429,3 +429,15 @@ amount: 2 - id: SyndieTrickyBomb amount: 2 + +- type: entity + parent: ClothingBackpackDuffelSyndicateBundle + id: ClothingBackpackDuffelSyndicateFilledFPA90 + name: FPA-90 bundle + description: "A cheap integrally suppressed SMG. Comes bundled with three magazines." + components: + - type: StorageFill + contents: + - id: WeaponSubMachineGunFPA90 + - id: MagazineCaselessRifle + amount: 2 diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 630eee8ccd1..9421da3e330 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -215,6 +215,20 @@ categories: - UplinkWeaponry +- type: listing + id: UplinkFPA90Bundle + name: uplink-fpa-90-bundle-name + description: uplink-fpa-90-bundle-desc + icon: { sprite: /Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi, state: icon } + productEntity: ClothingBackpackDuffelSyndicateFilledFPA90 + discountCategory: veryRareDiscounts + discountDownTo: + Telecrystal: 40 + cost: + Telecrystal: 80 + categories: + - UplinkWeaponry + # Explosives - type: listing @@ -478,7 +492,7 @@ id: UplinkPistol9mmMagazineRubber name: uplink-pistol-magazine-rubber-name description: uplink-pistol-magazine-rubber-desc - icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: red-icon } + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: rubber } productEntity: MagazinePistolRubber cost: Telecrystal: 5 @@ -489,7 +503,7 @@ id: UplinkPistol9mmMagazineIncendiary name: uplink-pistol-magazine-incendiary-name description: uplink-pistol-magazine-incendiary-desc - icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: red-icon } + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/pistol_mag.rsi, state: practice } productEntity: MagazinePistolIncendiary cost: Telecrystal: 8 @@ -512,7 +526,7 @@ id: UplinkMagazinePistolSubMachineGunRubber name: uplink-pistol-magazine-c20r-rubber-name description: uplink-pistol-magazine-c20r-rubber-desc - icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: red-icon } + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: rubber } productEntity: MagazinePistolSubMachineGunRubber cost: Telecrystal: 10 @@ -523,14 +537,14 @@ id: UplinkMagazinePistolSubMachineGunIncendiary name: uplink-pistol-magazine-c20r-incendiary-name description: uplink-pistol-magazine-c20r-incendiary-desc - icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: red-icon } + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/Pistol/smg_mag.rsi, state: practice } productEntity: MagazinePistolSubMachineGunIncendiary cost: Telecrystal: 14 categories: - UplinkAmmo -# For the Cobra +# .25 Caseless Rifle, for the Cobra and FPA-90 - type: listing id: UplinkMagazinePistolCaselessRifle name: uplink-pistol-magazine-caseless-name @@ -542,6 +556,39 @@ categories: - UplinkAmmo +- type: listing + id: UplinkMagazinePistolCaselessRifleRubber + name: uplink-pistol-magazine-caseless-rubber-name + description: uplink-pistol-magazine-caseless-rubber-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi, state: rubber } + productEntity: MagazinePistolCaselessRifleRubber + cost: + Telecrystal: 5 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazineCaselessRifle + name: uplink-magazine-caseless-name + description: uplink-magazine-caseless-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi, state: red } + productEntity: MagazineCaselessRifle + cost: + Telecrystal: 10 + categories: + - UplinkAmmo + +- type: listing + id: UplinkMagazineCaselessRifleRubber + name: uplink-magazine-caseless-rubber-name + description: uplink-magazine-caseless-rubber-desc + icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag.rsi, state: rubber } + productEntity: MagazineCaselessRifleRubber + cost: + Telecrystal: 10 + categories: + - UplinkAmmo + # For the Python - type: listing id: UplinkSpeedLoaderMagnumAP diff --git a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml index 54dfc599bdf..10028438fd5 100644 --- a/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml +++ b/Resources/Prototypes/CharacterItemGroups/Jobs/Security/headOfSecurity.yml @@ -37,6 +37,8 @@ id: LoadoutCommandHoSEnergySword - type: loadout id: LoadoutCommandHoSEnergyGun + - type: loadout + id: LoadoutCommandHoSBRDIR25 #- type: characterItemGroup # id: LoadoutHeadOfSecurityEyes diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 8cef542c034..f5e7678fe02 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -242,8 +242,22 @@ - RiotShield - SpeedLoaderMagnum - SpeedLoaderMagnumEmpty - - MagazinePistolCaselessRifle # Goobstation - - MagazineBoxCaselessRifle # Goobstation + # .35 Caseless Pistol + - MagazinePistolCaselessRiflePractice # EE + - MagazinePistolCaselessRifle # EE + - MagazinePistolCaselessRifleRubber # EE + # .35 Caseless (Civilian) Rifle + - MagazineCaselessRifleShortPractice # EE + - MagazineCaselessRifleShort # EE + - MagazineCaselessRifleShortRubber # EE + # .35 Caseless (Military) Rifle + - MagazineCaselessRiflePractice # EE + - MagazineCaselessRifle # EE + - MagazineCaselessRifleRubber # EE + # .35 Caseless (Box Mag) Rifle + - MagazineBoxCaselessRiflePractice # EE + - MagazineBoxCaselessRifle # EE + - MagazineBoxCaselessRifleRubber # EE - MagazineMagnumEmpty # Goobstation - MagazineMagnum # Goobstation - MagazineMagnumLeverRifleEmpty # Goobstation @@ -906,6 +920,22 @@ - MagazinePistolSubMachineGunEmpty - MagazinePistolSubMachineGunTopMounted - MagazinePistolSubMachineGunTopMountedEmpty + # .35 Caseless Pistol + - MagazinePistolCaselessRiflePractice # EE + - MagazinePistolCaselessRifle # EE + - MagazinePistolCaselessRifleRubber # EE + # .35 Caseless (Civilian) Rifle + - MagazineCaselessRifleShortPractice # EE + - MagazineCaselessRifleShort # EE + - MagazineCaselessRifleShortRubber # EE + # .35 Caseless (Military) Rifle + - MagazineCaselessRiflePractice # EE + - MagazineCaselessRifle # EE + - MagazineCaselessRifleRubber # EE + # .35 Caseless (Box Mag) Rifle + - MagazineBoxCaselessRiflePractice # EE + - MagazineBoxCaselessRifle # EE + - MagazineBoxCaselessRifleRubber # EE - MagazineMagnum - MagazineMagnumEmpty - MagazineRifle @@ -1070,6 +1100,8 @@ - EnergySword - EnergySwordDouble - EnergyCutlass + - WeaponSubMachineGunFPA90 + - WeaponSubMachineGunBRDIR25 - type: MaterialStorage whitelist: tags: @@ -1131,6 +1163,22 @@ - SpeedLoaderRifleHeavyEmpty - CartridgeSpecial - MagazineBoxSpecial + # .35 Caseless Pistol + - MagazinePistolCaselessRiflePractice # EE + - MagazinePistolCaselessRifle # EE + - MagazinePistolCaselessRifleRubber # EE + # .35 Caseless (Civilian) Rifle + - MagazineCaselessRifleShortPractice # EE + - MagazineCaselessRifleShort # EE + - MagazineCaselessRifleShortRubber # EE + # .35 Caseless (Military) Rifle + - MagazineCaselessRiflePractice # EE + - MagazineCaselessRifle # EE + - MagazineCaselessRifleRubber # EE + # .35 Caseless (Box Mag) Rifle + - MagazineBoxCaselessRiflePractice # EE + - MagazineBoxCaselessRifle # EE + - MagazineBoxCaselessRifleRubber # EE - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml index 593c9f10aba..71e8bbdf006 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/headOfSecurity.yml @@ -118,6 +118,22 @@ items: - WeaponEnergyGunMultiphase +- type: loadout + id: LoadoutCommandHoSBRDIR25 + category: JobsSecurityHeadOfSecurity + cost: 0 + canBeHeirloom: true + requirements: + - !type:CharacterItemGroupRequirement + group: LoadoutHeadOfSecurityWeapon + - !type:CharacterJobRequirement + jobs: + - HeadOfSecurity + - !type:CharacterAgeRequirement + min: 21 + items: + - WeaponSubMachineGunBRDIR25HoS + # Eyes # Gloves @@ -406,4 +422,4 @@ jobs: - HeadOfSecurity items: - - CigarRobustCase \ No newline at end of file + - CigarRobustCase diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index a7359f185e8..016eb904fd5 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -234,6 +234,14 @@ materials: Steel: 500 +# .25 Caseless Pistol Magazines +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazinePistolCaselessRiflePractice + result: MagazinePistolCaselessRiflePractice + materials: + Steel: 85 + - type: latheRecipe parent: BaseAmmoRecipe id: MagazinePistolCaselessRifle @@ -241,6 +249,65 @@ materials: Steel: 145 +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazinePistolCaselessRifleRubber + result: MagazinePistolCaselessRifleRubber + materials: + Plastic: 145 + +# .25 Caseless (Civilian) Rifle Magazines +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRifleShortPractice + result: MagazineCaselessRifleShortPractice + materials: + Steel: 150 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRifleShort + result: MagazineCaselessRifleShort + materials: + Steel: 250 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRifleShortRubber + result: MagazineCaselessRifleShortRubber + materials: + Plastic: 250 + +# .25 Caseless (Military) Rifle Magazines +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRiflePractice + result: MagazineCaselessRiflePractice + materials: + Steel: 250 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRifle + result: MagazineCaselessRifle + materials: + Steel: 350 + +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineCaselessRifleRubber + result: MagazineCaselessRifleRubber + materials: + Plastic: 350 + +# .25 Caseless (Box Mag) Rifle Magazines +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineBoxCaselessRiflePractice + result: MagazineBoxCaselessRiflePractice + materials: + Steel: 500 + - type: latheRecipe parent: BaseAmmoRecipe id: MagazineBoxCaselessRifle @@ -248,6 +315,14 @@ materials: Steel: 720 +- type: latheRecipe + parent: BaseAmmoRecipe + id: MagazineBoxCaselessRifleRubber + result: MagazineBoxCaselessRifleRubber + materials: + Steel: 720 + +# .35 Pistol Magazines - type: latheRecipe id: MagazinePistolEmpty result: MagazinePistolEmpty @@ -1061,3 +1136,26 @@ Bluespace: 600 Plasma: 600 Diamond: 200 + +- type: latheRecipe + id: WeaponSubMachineGunFPA90 + result: WeaponSubMachineGunFPA90 + category: Weapons + completetime: 6 + materials: + Aluminum: 2000 + Steel: 500 + Plastic: 750 + +- type: latheRecipe + id: WeaponSubMachineGunBRDIR25 + result: WeaponSubMachineGunBRDIR25 + category: Weapons + completetime: 6 + materials: + Aluminum: 2500 + Plastic: 2000 + Plasteel: 1500 + Steel: 500 + Circuitry: 500 + Tungsten: 200 diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 5abdc5d9297..dba39448b58 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -138,6 +138,7 @@ - WeaponGunLaserCarbineAutomatic - WeaponLaserCannon - WeaponMechCombatSolarisLaser # Goobstation + - WeaponSubMachineGunFPA90 technologyPrerequisites: - BasicWeapons @@ -180,4 +181,5 @@ - EnergySword # TODO: Add a bunch of stupidly exotic energy weapons to act as a reaaaaaally nice incentive for research to consider this. - EnergySwordDouble - EnergyCutlass + - WeaponSubMachineGunBRDIR25 softCapContribution: 1.5 diff --git a/Resources/Prototypes/_EE/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/_EE/Entities/Objects/Weapons/Guns/SMGs/smgs.yml new file mode 100644 index 00000000000..564c4bf9906 --- /dev/null +++ b/Resources/Prototypes/_EE/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -0,0 +1,146 @@ +- type: entity + name: FPA-90 sub machine gun + parent: BaseWeaponPistol + id: WeaponSubMachineGunFPA90 + description: It's a cheap piece of shit made by a company well known for cheap guns, but at least you don't need hearing protection while using it. It fires .25 caseless. + components: + - type: Sprite + sprite: _EE/Objects/Weapons/Guns/SMGs/FPA90.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-0 + map: ["enum.GunVisualLayers.Mag"] + - type: Gun + minAngle: 10 + maxAngle: 15 + fireRate: 20 + burstFireRate: 20 + shotsPerBurst: 3 + burstCooldown: 1.1 + selectedMode: Burst + soundGunshot: + path: /Audio/_EE/Weapons/Guns/Gunshots/fpa-90-suppressed-gunshot.ogg + params: + volume: -3 + maxDistance: 8 + rolloffFactor: 1.2 + availableModes: + - Burst + fireOnDropChance: 1 + - type: MagazineVisuals + magState: mag + steps: 1 + zeroVisible: true + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: MagazineCaselessRifle + insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg + priority: 2 + whitelist: + tags: + - MagazineCaselessRifle + gun_chamber: + name: Chamber + startingItem: CartridgeCaselessRifle + priority: 1 + whitelist: + tags: + - CartridgeCaselessRifle + - type: Appearance + - type: StaticPrice + price: 200 + - type: Item + size: Large + shape: null + - type: ExtendDescription + descriptionList: + - description: "gun-suppressed" + fontSize: 10 + color: "#ff4f00" + requireDetailRange: false + +- type: entity + name: BRDI R-25 + parent: [BaseWeaponSubMachineGun, BaseGunWieldable] + id: WeaponSubMachineGunBRDIR25 + description: An iconic weapon used by members of the Biesel Republic Foreign Legion. As a pride and joy of the colonies, it represents freedom from the tyranny of the Sol Alliance. It is chambered in .25 Caseless Rifle. + components: + - type: Sprite + sprite: _EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-0 + map: ["enum.GunVisualLayers.Mag"] + - type: Wieldable + - type: GunWieldBonus + minAngle: -19 + maxAngle: -16 + - type: Gun + minAngle: 21 + maxAngle: 32 + fireRate: 5 # 300rpm in Semi & Full Auto + burstFireRate: 20 # 1200rpm in Burst mode. + shotsPerBurst: 5 + burstCooldown: 0.8 + cameraRecoilScalar: 0.5 + selectedMode: Burst + soundGunshot: + path: /Audio/_EE/Weapons/Guns/Gunshots/fpa-90-suppressed-gunshot.ogg + params: + volume: -3 + maxDistance: 8 + rolloffFactor: 1.2 + availableModes: + - SemiAuto + - Burst + - FullAuto + fireOnDropChance: 0.3 + - type: ChamberMagazineAmmoProvider + autoEject: true + - type: MagazineVisuals + magState: mag + steps: 1 + zeroVisible: true + - type: Appearance + - type: StaticPrice + price: 1500 + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: MagazineCaselessRifle + insertSound: /Audio/Weapons/Guns/MagIn/smg_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg + priority: 2 + whitelist: + tags: + - MagazineCaselessRifle + gun_chamber: + name: Chamber + startingItem: CartridgeCaselessRifle + priority: 1 + whitelist: + tags: + - CartridgeCaselessRifle + - type: ExtendDescription + descriptionList: + - description: "gun-suppressed" + fontSize: 10 + color: "#ff4f00" + requireDetailRange: false + +- type: entity + name: antique BRDI R-25 + parent: WeaponSubMachineGunBRDIR25 + id: WeaponSubMachineGunBRDIR25HoS + description: Once wielded by an unknown member of the Biesel Foreign Legion, this beloved rifle has seen battle with Sol on every world in the colonies. + components: + - type: StealTarget + stealGroup: HoSAntiqueWeapon + - type: Sprite + sprite: _EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/base.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..6a9578bdce202647def345c038cb5f78b65aa836 GIT binary patch literal 750 zcmV=#f7_e-6K^ z2mSy8i3>ME4p0uXimEQ5ptPk@3QD$q&c4O@Bt(c_*3xEd&zonD*RzwL(P#)|@a@FZ z^2WBdix2&Qprr4rGosMycasuYJHR%>Dn6Chw3r}=O{fE45q z><}Y;-O?@T{_0D(v1yP{ZRuSahWEhP*(sLj{ZO$HKS&^nqR1SpH&*OoF(duqB?Hsz z9s~Wwr(?T#$OT^<$3pwy;1Dh(lvSbKZc71xTCIjjIehif#-~qyX9$P4slR^TF+WG* zp6|Vr-Q8!#gCBB3M-o~Es|swDpnxnXv6fKudc{s5zTx1*yJr=M@gsCxwXIgm)_ZOQ z#~jMfssL2ry$l2T!>#*JO*}aq=mR9dW*nl1uZBAL_}#lOa~(WSw&9)L4MPzW*x00aoe$0mo36YO7{+tEU& z+Yx)PjcE`DC;frop$$GhF7Qb3YPD*oAkd7hG18rnfWU}=`-4TqUX3>)B#77m{c;o9yVB>$62O6ecir8YLGzD(u{}o0kqa9%ya?4jj1M zYOjc}cN}IZb;L_@(Nsg1+D=#f7_e-6K^ z2mSy8i3>ME4p0uXimEQ5ptPk@3QD$q&c4O@Bt(c_*3xEd&zonD*RzwL(P#)|@a@FZ z^2WBdix2&Qprr4rGosMycasuYJHR%>Dn6Chw3r}=O{fE45q z><}Y;-O?@T{_0D(v1yP{ZRuSahWEhP*(sLj{ZO$HKS&^nqR1SpH&*OoF(duqB?Hsz z9s~Wwr(?T#$OT^<$3pwy;1Dh(lvSbKZc71xTCIjjIehif#-~qyX9$P4slR^TF+WG* zp6|Vr-Q8!#gCBB3M-o~Es|swDpnxnXv6fKudc{s5zTx1*yJr=M@gsCxwXIgm)_ZOQ z#~jMfssL2ry$l2T!>#*JO*}aq=mR9dW*nl1uZBAL_}#lOa~(WSw&9)L4MPzW*x00aoe$0mo36YO7{+tEU& z+Yx)PjcE`DC;frop$$GhF7Qb3YPD*oAkd7hG18rnfWU}=`-4TqUX3>)B#77m{c;o9yVB>$62O6ecir8YLGzD(u{}o0kqa9%ya?4jj1M zYOjc}cN}IZb;L_@(Nsg1+DQ+bj+P_O(WGoPo3AKn8eC&!rL?}wW9cp(9oB#9bUZ>;FWqDubaB?HyU z)(7(IuLpYZ5DT_6O@;dI?jB4?D6r7&cBKS|Mx%j2*?ap&`{z&pW(b4TDZl&FQ#*V5 zy?pgiwzpp>4qn8Dj3hh@$_jMfq7t%XOFf0+uUD)T%@!PN*n6@-AKOF5Rom%wbiTz# zaEyU|vI3_P?`0^EA8$N_sLg`IfI2`DEXK?$+ZxKmbp@#SKbA`pv( zw!E5`4mh1xNPzUh!5kk3ip*+#tz_&>gDsk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yI;m?K$jgPBn^yR{XlZGCd3kNCi83-WDl03Kk&ywa60pjf2Bf%4 zg8YL2!vTYrKjSB$FlT{BWHAE+-w_aIoT|+y4HT3pag8Vm&QB{TPb^Ah2uRG#E79|F z4N)-FGt@Kg*=?)<2Pm{_pRqaCaN;k^k}4U^_;BvXZMT5J2UJ!qjR~K8b-j9(Z#KybZ289U Xdc~}}d_VGQK|$o{>gTe~DWM4fzCF)n literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/inhand-right.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8ed48eee9131b7354ddf61abb7803489f1f75b GIT binary patch literal 679 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yR`|Pwo0}TQ%Q>lQYH4YEd3kNCi83-WDl03Kk&ywaI+?`(5J+*C z1o;L3hXV#Lf5uNhVa@`N$YKTtz9S&aI8~cZ8Yn1H;u=vBoS#-wo>-L15RjOeSEA?V z8lqsTXQ*e~v)fn!sAgMgglC$krxpVTki*I##mLIQ2xNHyu{4wo@{tB3GgzDn$TnnT zVh{k*Q9zv8&H@(C0O#8qHD$pwt9*1{R=710!Pt#sv^lK{m23fS5D| z$OZu>pt($7l|hykKo(S&p@9KNmUHPD=M8t?cL9S|$kW9!B*Ojew1Z_w6gXTN1F!u5 z|G+6pXqjrS?d7X7?@t*X7QOpn!Tys%I*l7y{;M-A*|J_PQLcM#Y{OpRv!;hFH``~g zZgSyVkR$Eyv9{@40#nkpPm6MW5@Z+rUd{ulRqn#=8%-Sa6a0cc->6#f^V8bq>%IGv@;``qZ(unFwoYEhqvc||a@&TOU>y;L zmka(_zCACYWI4YrAYpTy^6?*~1xF`LdwRxlA%m{o2ELf{g3ep`cfLw)lnuF~DecY^ zxYqB-I93OZL!__+fqL=!AGyW1WNS b9993BBAaII`{2&F9TZZYu6{1-oD!M<$xqE} literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/mag-0.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25.rsi/mag-0.png new file mode 100644 index 0000000000000000000000000000000000000000..7c06c519f36265f3d46d7b4b82a9eb0bf440a84e GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DA?xd z;usRa`F5Hu*8v5d)@05rC)e@q{D1R^_ZAn8mI+Hk3M*&UbUt}5tmx@-B3e`YX-&}k zyY0(fCs!To=e)?k(Evj^>IV)o6a_>wc11;M&p?*JhRK zTe|x@Ec+1j$13p3flrIXo_>pOU~^z#*(O}U@L>+uovUe_@<12yrABzB`T8k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yI;m?`_`8Ign|gV98OY0NX=xi78Og}Vl$DijtBC@t651an2&A}6 zg8YL2!vTYrKjSB$FlT{BWHAE+-w_aIoT|+y4HT3pag8Vm&QB{TPb^Ah2uRG#E79|F z4N)-FGt@Kg*=?)b$b#xJG%x_kaxOjNyy5QqE@05wdb&7@#z# z-^UbKI^?bWe&}J!I_9aXrU+=cbh??c+`wlX)q$eNUS$iZn z^sV$-QEylGbWy>JS^UqwOBGyYEr{J*?GReA&CG=0Y8KMYJerayEl R-kAUjR8Lnwmvv4FO#ro(k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O_~u2Ka=yR`|O(scVLtn;OW=d3kwhX=xi78Og}VY^#YXD=P!4`Zl@H3rKO7 z1o;L3hXV#Lf5uNhVa@`N$YKTtz9S&aI8~cZ8Yn1H;u=vBoS#-wo>-L15RjOeSEA?V z8lqsTXQ*e~v)fn!sAgMgglC$krxpVTki*I##mLIQ2xNh*l7_NDKGI-h28%NR*@lcv z3<5wp3Wzh?S-|31KsE^Qlru8C0D2roqgl!Tl$yZKzyefhU}S8-xBy}*$VS!$5R;|= z*&x6KG?xjiGRV>b$b#xJG%x_kaxOjNyy5QqE@04_d%8G=M7Y15dU{c_0uQUOg3X`* z{O>#uG5qJ;)bvlqTSu5*AXL+k;E!Z!EZ|FZ-ioLG09;ru?^rmN4t#7SQd zVmx#&c~N>=XW$X5^Dpmb#U+x9)*mno6*e*nU2*6 zn$D{^w=`q{yb`#H6YcO>OrmAw5r z!T5koy=l#cf01ks<$tbzV0!(zL|oRu;$KdM=Y*X*PM4XoA9(j;^23i>O9h^W$zNi; z`%(OGwy1Eu<&k$kIv-watdA-@!SJGQzC_&aW#8oZpT+mxH)fJcWfXJxtekK=j(Pv| UGvAHH=7NIL)78&qol`;+0KaqS9{>OV literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/base.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..57e348642a9eca504656013f8028031dacaf0c13 GIT binary patch literal 831 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-left.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..44503db231fbeb0bd613addd5871838d2b3ce789 GIT binary patch literal 1270 zcmV-dab7Irv zotjzX*>c)VwRJgtQRjAFN<>zoRVhh_Kv)A1f<;tvK}UcRd?66l5fFk!RB}N_fD(Km z5Y`b8f<;tvK}UcRd?6674#)>$(`(rJDqW`A7o9=80tC0hnSw^*!;EHhFE#2Q7e;yj zA8dP3VwX{lfb(afcAZwAo(qtL#46xkpPn6{!CqI5v@{-p_UJAg?@Q0u{{E9Sk4i%s zfM>6k^5(yFu`7o*u@r~XkwutFubL19bkMEfflPcZX|nN$Gj4K)#+3p1zVRzh|GN)q zBUyCZyJ5g0U9qu&?1_?HXmZ6)$?fAj^~Li7Vj z#s&ZeAH*RVjRMlK&Nz{`f^Hz-1Q-Q=mLPr&qGQZC*0yQ{fg8{9r9cGmd`uTl^V|*s z05@Y8IBt9;8UG&ul*BRFNi+bmNQIS8M?hFtR@N^a0kTMil}|^2>dH2zeyggm0YC?{t{wrBuEs8kY7M?fX5w#Zi<0U}f?iB|CuAp55SE#r9-H;HeM`0 zlk;2$4S;9EN+qZPC>7G>I**Qka$T8H*`*_(R7jWWJpTaW7;f#fh%O2M000hUSV?A0 gO#mtY000O800000007cclK=n!07*qoM6N<$g4onOL;wH) literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-right.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/BRDI_R25_antique.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e065b519ac84fe5ffc27fedbd073e8a2d2b012 GIT binary patch literal 1193 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 lWmrjOO-%qQ00008000000002eQb z$b#xJ1P25|W{CpNQnp}FSY~^=IEGmGzwLJvYEa-{aJ=;2-jajoO4qxseZ~v8mA16R z2ZV6kiuo93(Qj+iC-W|mQE(xP#X`TrMB!Zz*2s3OXpfAo#`S-1 x2kn(|6bO3wX(HpAuaOTtbzYn~bV$ABTG{WJBCSoE+?IhH=;`X`vd$@?2>|D+c{~6B literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/bolt-open.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/bolt-open.png new file mode 100644 index 0000000000000000000000000000000000000000..d83d72e3fd2bec9b512598026643e91fbd2b5c1f GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJi=HlyArYK!gB1B#6nUOZ60V4I zIK)3;kNipL2^uze`W=cbtbNbUs7CvE&)jx-q0@&%)(FP12GNRLO!{36*KTqD5IAJ= zouygos$cgPh9Bp4uAZW_WC};F?uL86bNj!q>oQ#C8&eqdTK3PkX+gV=9y>7Y0LQUd zP1fx<=M;a|JZIRbrFm|9nyr|n_U^y)?Kn@D?qWXiHq{5_|U2vg*Lq7H-%dyP#SdA7B7C)7_f{!G$4{&W@s$YA6{kyZtZMCoo jen8LhrABzB`T8^4>a zs@awr;hE;?sl~tnIesvJDxT7zBWH6cA^&vw+33 zfNT&*0Ai4S7>#Br127CGursg#RTvl<8!#?_mK@UGoWL)z#@`0z$i!+A~skdA!`#n>nwP};vGLQp3UHx3vIVCg!0KU?9k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwT3cI(goLQ5r~n00^Nyu})RhGJ1^@s5pTR+E%FBlnrvV1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*K_CH$LHc1d znxzate@|d%U;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KUvY@&Q4GciCe6z%p z_ndD21Y}P1ba4!caDO|^k*~pkgJt2L|L42RHi~%NesS{69FrV23(-l_9T*y!4)(K3 z-!ky>IrR0n+yAnvm5CEABHr-Kc_R|W72n3biF+%L+J@*9Y1OHhgESw9C`GU^afomz z1Sm8({EWFE&nEkCZke!;+pOnj6E75gD>u#enfGbMi_4vgTC5MB8NBFt*OItB6sXwc Z3Byt`{q%_;3DZCh^>p=fS?83{1OVWigRlSq literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/inhand-right.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..704ad8a77c19aefab448f32058eb071d858bd583 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwT3cI(goLQ5r~n00^Nyu})RhGJ1^@s5pTR+E%FBlnrvV1|u_AoC(M_WMpCx0Mb!FoY~F-7S95*K_CH$LHc1d znxzate@|d%U;(NyFfuk^TmUf@q=R(<#H1-eHV7~Q&0zwo46?KUvY@&Q4GciCe6z%p z_ndD21Z2+eba4!caDO|^o9}=E2W#lN`sZAWItA@-tea)tJ~YVyA!s{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/mag-0.png b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/mag-0.png new file mode 100644 index 0000000000000000000000000000000000000000..dce5b1c63edf2ddf7eb55ff628fe5625eb836670 GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=G`DAk4@xYmNj^P@=>&q9iy!t)x7$D3u`~F*C13&(AeP!Bo#s z&$wr|u>w%dw$upEG*3@01`Z&Hl|hP;m4Ok+@&aOMC>!J&4Mt|LI1`X<$jHPX0HmXU zIJ2DvES?2qgMg~40o;PcX0W_=+!S)Zpb5^0W!nW)z4*}Q$iB}iH~H_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/meta.json b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/meta.json new file mode 100644 index 00000000000..a9f955a31b6 --- /dev/null +++ b/Resources/Textures/_EE/Objects/Weapons/Guns/SMGs/FPA90.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by plyushsune (Discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From 21567ac74e53e9c7c2580fbafaeb022b2bbae0a2 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Sat, 15 Feb 2025 20:07:18 +0000 Subject: [PATCH 38/45] Automatic Changelog Update (#1794) --- Resources/Changelog/Changelog.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fb579d1218f..9ba807979ae 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -11789,3 +11789,30 @@ Entries: id: 6856 time: '2025-02-15T07:55:12.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1792 +- author: VMSolidus + changes: + - type: Add + message: >- + Added the FPA-90, an integrally supressed submachine gun. It can be + found either in the syndicate uplink, or manufactured at a security + techfab after Epistemics unlocks Advanced Weapons. + - type: Add + message: >- + Added the BRDI-R25, an integrally supressed bullpup rifle chambered in + .25 Caseless. It has an "Extremely fast" burst fire mode, and a "More + controllable" full-auto/semi mode. Unlike the FPA-90, it is not + available to syndicate agents. It can be manufactured after researching + Prototype Weapons. + - type: Add + message: >- + Antique variant of the BRDI-R25, which can be taken by the Head of + Security as his personal weapon. + - type: Add + message: Added a variety of different ammunition options to Syndicate uplinks. + - type: Add + message: >- + Security Techfabs can now manufacture .25 caseless rifle ammo and + magazines. + id: 6857 + time: '2025-02-15T20:06:52.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1794 From 3c37ff1c48637d1cdf8bc3c6b1412dad338ea205 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Sat, 15 Feb 2025 18:21:57 -0400 Subject: [PATCH 39/45] v245.0.0 (and Storage UI V2) (#1799) Contains: - Storage UI v2, required for removing DeferredClose. - Stock market refactor (mostly some basic changes to stock market, didn't want to make a whole other PR for it) - Make guidebook remember where you left off - Any other PRs are purely for fixing issues related to the above PRs or the engine update. :cl: - add: Ported Storage UI v2. - tweak: The guidebook will now remember where you left off. --------- Co-authored-by: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: 12rabbits <53499656+12rabbits@users.noreply.github.com> Co-authored-by: Pieter-Jan Briers Co-authored-by: gluesniffler <159397573+gluesniffler@users.noreply.github.com> Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com> --- .../Cartridges/StockTradingUi.cs | 2 +- .../Cartridges/StockTradingUiFragment.xaml.cs | 14 +- .../Guidebook/Controls/GuidebookWindow.xaml | 8 +- .../Controls/GuidebookWindow.xaml.cs | 16 + Content.Client/Guidebook/GuideEntry.cs | 2 + .../Storage/StorageBoundUserInterface.cs | 64 +++- .../Storage/Systems/StorageSystem.cs | 136 ++++---- .../Guidebook/GuidebookUIController.cs | 21 ++ .../Systems/Hotbar/HotbarUIController.cs | 3 +- .../Systems/Hotbar/Widgets/HotbarGui.xaml | 5 +- .../Systems/Hotbar/Widgets/HotbarGui.xaml.cs | 2 +- .../Systems/Storage/Controls/ItemGridPiece.cs | 7 +- .../{StorageContainer.cs => StorageWindow.cs} | 318 +++++++++++++---- .../Systems/Storage/StorageUIController.cs | 328 +++++++++--------- Content.Client/Viewport/ScalingViewport.cs | 4 +- .../Components/StationStockMarketComponent.cs | 21 +- .../Cargo/Systems/StockMarketSystem.cs | 164 ++++----- .../Cartridges/StockTradingCartridgeSystem.cs | 14 +- Content.Shared/Body/Organ/OrganComponent.cs | 8 +- Content.Shared/Body/Part/BodyPartComponent.cs | 14 +- Content.Shared/CCVar/CCVars.Interactions.cs | 19 + .../Cartridges/StockTradingUiMessageEvent.cs | 4 +- .../Cartridges/StockTradingUiState.cs | 8 +- .../EntitySystems/SharedStorageSystem.cs | 255 ++++++++++---- Content.Shared/Storage/StorageComponent.cs | 23 +- .../Steps/SurgeryAddMarkingStepComponent.cs | 2 +- .../SurgeryRemoveMarkingStepComponent.cs | 3 +- .../Entities/Structures/Machines/lathe.yml | 54 +-- Resources/Prototypes/Guidebook/rules.yml | 4 +- Resources/Prototypes/Guidebook/security.yml | 1 + Resources/Prototypes/Guidebook/ss14.yml | 1 - .../Entities/Clothing/Belt/belts.yml | 2 - .../Entities/Structures/Machines/lathe.yml | 46 +++ RobustToolbox | 2 +- 34 files changed, 960 insertions(+), 615 deletions(-) rename Content.Client/UserInterface/Systems/Storage/Controls/{StorageContainer.cs => StorageWindow.cs} (64%) create mode 100644 Resources/Prototypes/_Shitmed/Entities/Structures/Machines/lathe.yml diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs index 45704ee2349..7468d96b7a4 100644 --- a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs @@ -36,7 +36,7 @@ public override void UpdateState(BoundUserInterfaceState state) } } - private static void SendStockTradingUiMessage(StockTradingUiAction action, int company, float amount, BoundUserInterface userInterface) + private static void SendStockTradingUiMessage(StockTradingUiAction action, int company, int amount, BoundUserInterface userInterface) { var newsMessage = new StockTradingUiMessageEvent(action, company, amount); var message = new CartridgeUiMessage(newsMessage); diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs index b44e8f44c70..7aaed6e49df 100644 --- a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs @@ -14,8 +14,8 @@ public sealed partial class StockTradingUiFragment : BoxContainer private readonly Dictionary _companyEntries = new(); // Event handlers for the parent UI - public event Action? OnBuyButtonPressed; - public event Action? OnSellButtonPressed; + public event Action? OnBuyButtonPressed; + public event Action? OnSellButtonPressed; // Define colors public static readonly Color PositiveColor = Color.FromHex("#00ff00"); // Green @@ -70,8 +70,8 @@ private sealed class CompanyEntry public CompanyEntry(int companyIndex, string displayName, - Action? onBuyPressed, - Action? onSellPressed) + Action? onBuyPressed, + Action? onSellPressed) { Container = new BoxContainer { @@ -216,13 +216,13 @@ public CompanyEntry(int companyIndex, // Button click events _buyButton.OnPressed += _ => { - if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + if (int.TryParse(_amountEdit.Text, out var amount) && amount > 0) onBuyPressed?.Invoke(companyIndex, amount); }; _sellButton.OnPressed += _ => { - if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + if (int.TryParse(_amountEdit.Text, out var amount) && amount > 0) onSellPressed?.Invoke(companyIndex, amount); }; @@ -235,7 +235,7 @@ public CompanyEntry(int companyIndex, }; } - public void Update(StockCompanyStruct company, int ownedStocks) + public void Update(StockCompany company, int ownedStocks) { _nameLabel.Text = company.LocalizedDisplayName; _priceLabel.Text = $"${company.CurrentPrice:F2}"; diff --git a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml index cc6cc6e82b0..b52eacfa722 100644 --- a/Content.Client/Guidebook/Controls/GuidebookWindow.xaml +++ b/Content.Client/Guidebook/Controls/GuidebookWindow.xaml @@ -2,7 +2,7 @@ xmlns:cc="clr-namespace:Content.Client.Administration.UI.CustomControls" xmlns:fancyTree="clr-namespace:Content.Client.UserInterface.Controls.FancyTree" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" - SetSize="750 700" + SetSize="850 700" MinSize="100 200" Resizable="True" Title="{Loc 'guidebook-window-title'}"> @@ -21,9 +21,13 @@ Margin="0 5 10 5"> + +