From e559c080ff48107b7fab5751d0674c418dec885a Mon Sep 17 00:00:00 2001 From: Chief-Engineer <119664036+Chief-Engineer@users.noreply.github.com> Date: Fri, 22 Dec 2023 18:27:22 -0600 Subject: [PATCH 01/38] Update WizDen's borg definition of crew (#22873) update borg definition of crew --- Resources/ServerInfo/RP_Rules.txt | 2 +- Resources/ServerInfo/Rules.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/ServerInfo/RP_Rules.txt b/Resources/ServerInfo/RP_Rules.txt index a6d4629631c..e2883922fa5 100644 --- a/Resources/ServerInfo/RP_Rules.txt +++ b/Resources/ServerInfo/RP_Rules.txt @@ -121,7 +121,7 @@ These rules also apply to any individual who is a silicon, including cyborgs and - Each individual silicon must remain consistent in their interpretations of laws through the round. - Any silicon role not following their laws, or having laws that are a danger to the crew or station may be disabled or destroyed. Any silicon role posing a danger or disruption to the crew may be disabled or destroyed if there is no other reasonable and less severe way of dealing with them. - Players who are put into MMIs cannot remember anything leading to their death. With regard to anything that they are allowed to remember, they are still bound to their laws. - - Syndicate Agents and Revolutionaries are considered "crewmembers" for the purpose of laws that refer to crewmembers. Generally speaking, if the person appears on the crew manifest, they can be considered a crewmember. The captain or acting captain may hire or fire crewmembers by making it clear that they are no longer crew. Simply demoting someone to passenger is not sufficient to consider them fired. + - Everyone that the borg's HUD indicates have a job, including passenger, are considered "crewmembers" for the purpose of laws that refer to crewmembers. Borgs may not do anything to remove the indicator from someone, including removing their ID, but someone else removing a crewmember's ID is not crew harm. - "Harm" is at minimum seen as physical violence or damage against someone or something. If the player wishes, they may choose to interpret psychological harm or similar aspects as harm as well. If two actions are likely to cause harm via action or inaction, silicons will be expected to try and pursue the option with the least potential for harm, however silicons instructed to prevent harm are still forbidden from directly causing harm. You can take an action or not act in cases that might result in eventual harm if it minimizes harm, but you cannot do so if it results in immediate harm. Silicons should default to inaction if neither action nor inaction can prevent harm. - When receiving orders or directives from crewmembers and with a law that instructs you must obey, conflicting orders typically defer the choice to the silicon player of which directive you choose to obey if they conflict (taking into account the priorities of your other laws). - Orders to silicons that are clearly unreasonable or obnoxious are a violation of the "Don't be a dick" rule. They can be ignored and can be ahelped. diff --git a/Resources/ServerInfo/Rules.txt b/Resources/ServerInfo/Rules.txt index 01ed62d6ab5..81da0da2398 100644 --- a/Resources/ServerInfo/Rules.txt +++ b/Resources/ServerInfo/Rules.txt @@ -109,7 +109,7 @@ These rules also apply to any individual who is a silicon, including cyborgs and - Each individual silicon must remain consistent in their interpretations of laws through the round. - Any silicon role not following their laws, or having laws that are a danger to the crew or station may be disabled or destroyed. Any silicon role posing a danger or disruption to the crew may be disabled or destroyed if there is no other reasonable and less severe way of dealing with them. - Characters who are turned into cyborgs can remember their former lives, however they are still bound to their laws. - - Syndicate Agents and Revolutionaries are considered "crewmembers" for the purpose of laws that refer to crewmembers. Generally speaking, if the person appears on the crew manifest, they can be considered a crewmember. The captain or acting captain may hire or fire crewmembers by making it clear that they are no longer crew. Simply demoting someone to passenger is not sufficient to consider them fired. + - Everyone that the borg's HUD indicates have a job, including passenger, are considered "crewmembers" for the purpose of laws that refer to crewmembers. Borgs may not do anything to remove the indicator from someone, including removing their ID, but someone else removing a crewmember's ID is not crew harm. - "Harm" is at minimum seen as physical violence or damage against someone or something. If the player wishes, they may choose to interpret psychological harm or similar aspects as harm as well. If two actions are likely to cause harm via action or inaction, silicons will be expected to try and pursue the option with the least potential for harm, however silicons instructed to prevent harm are still forbidden from directly causing harm. You can take an action or not act in cases that might result in eventual harm if it minimizes harm, but you cannot do so if it results in immediate harm. Silicons should default to inaction if neither action nor inaction can prevent harm. - When receiving orders or directives from crewmembers and with a law that instructs you must obey, conflicting orders typically defer the choice to the silicon player of which directive you choose to obey if they conflict (taking into account the priorities of your other laws). - Orders to silicons that are clearly unreasonable or obnoxious are a violation of the "Don't be a dick" rule. They can be ignored and can be ahelped. From 99d6aff7be50084d45c6fac766cddf97b2fb526b Mon Sep 17 00:00:00 2001 From: Kevin Zheng Date: Fri, 22 Dec 2023 17:10:33 -0800 Subject: [PATCH 02/38] Check for divide by near zero (#22876) --- Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs | 4 ++-- .../Atmos/EntitySystems/GenericGasReactionSystem.cs | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs index 909ec5ec9cf..8506b4cd32c 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs @@ -123,7 +123,7 @@ public void Merge(GasMixture receiver, GasMixture giver) var receiverHeatCapacity = GetHeatCapacity(receiver); var giverHeatCapacity = GetHeatCapacity(giver); var combinedHeatCapacity = receiverHeatCapacity + giverHeatCapacity; - if (combinedHeatCapacity > 0f) + if (combinedHeatCapacity > Atmospherics.MinimumHeatCapacity) { receiver.Temperature = (GetThermalEnergy(giver, giverHeatCapacity) + GetThermalEnergy(receiver, receiverHeatCapacity)) / combinedHeatCapacity; } @@ -167,7 +167,7 @@ public void DivideInto(GasMixture source, List receivers) sourceHeatCapacity ??= GetHeatCapacity(source); var receiverHeatCapacity = GetHeatCapacity(receiver); var combinedHeatCapacity = receiverHeatCapacity + sourceHeatCapacity.Value * fraction; - if (combinedHeatCapacity > 0f) + if (combinedHeatCapacity > Atmospherics.MinimumHeatCapacity) receiver.Temperature = (GetThermalEnergy(source, sourceHeatCapacity.Value * fraction) + GetThermalEnergy(receiver, receiverHeatCapacity)) / combinedHeatCapacity; } } diff --git a/Content.Server/Atmos/EntitySystems/GenericGasReactionSystem.cs b/Content.Server/Atmos/EntitySystems/GenericGasReactionSystem.cs index a21f85ae954..15c4a33aaea 100644 --- a/Content.Server/Atmos/EntitySystems/GenericGasReactionSystem.cs +++ b/Content.Server/Atmos/EntitySystems/GenericGasReactionSystem.cs @@ -113,7 +113,10 @@ public ReactionResult ReactAll(IEnumerable reactions, GasM } float newHeatCapacity = _atmosphere.GetHeatCapacity(mix, true); - mix.Temperature = (initialE + reactionE)/newHeatCapacity; + if (newHeatCapacity > Atmospherics.MinimumHeatCapacity) + { + mix.Temperature = (initialE + reactionE)/newHeatCapacity; + } if (reactionE > 0) { var location = holder as TileAtmosphere; From def4e0f60e5adeeb869ac2b7233531c9daadc95e Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 23 Dec 2023 06:20:08 +0300 Subject: [PATCH 03/38] Doggy Ears (#22832) * add content * sprite update * goodbuy nose --- .../Catalog/Fills/Crates/salvage.yml | 2 ++ .../Entities/Clothing/Head/misc.yml | 17 ++++++++++ .../Entities/Objects/Decoration/present.yml | 2 ++ .../Head/Hats/dogears.rsi/equipped-HELMET.png | Bin 0 -> 963 bytes .../Clothing/Head/Hats/dogears.rsi/icon.png | Bin 0 -> 374 bytes .../Head/Hats/dogears.rsi/inhand-left.png | Bin 0 -> 417 bytes .../Head/Hats/dogears.rsi/inhand-right.png | Bin 0 -> 434 bytes .../Clothing/Head/Hats/dogears.rsi/meta.json | 32 ++++++++++++++++++ 8 files changed, 53 insertions(+) create mode 100644 Resources/Textures/Clothing/Head/Hats/dogears.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Head/Hats/dogears.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Head/Hats/dogears.rsi/meta.json diff --git a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml index feae7a8942f..74b61d910f4 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml @@ -79,6 +79,8 @@ prob: 0.001 - id: ClothingHeadHatCatEars prob: 0.01 + - id: ClothingHeadHatDogEars + prob: 0.01 # TRAITOR EQUIPMENT (0.01%) - id: Telecrystal10 prob: 0.0001 diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 39e751b17d3..645c47f9bf0 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -183,6 +183,23 @@ sprite: Clothing/Head/Hats/catears.rsi - type: AddAccentClothing accent: OwOAccent + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatDogEars + name: doggy ears + description: Only for good boys. + suffix: DO NOT MAP + components: + - type: Tag + tags: + - DroneUsable + - type: Sprite + sprite: Clothing/Head/Hats/dogears.rsi + - type: Clothing + sprite: Clothing/Head/Hats/dogears.rsi + - type: AddAccentClothing + accent: BarkAccent - type: entity parent: ClothingHeadBase diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index eb5b5d14d5b..2afbb86b03e 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -324,6 +324,8 @@ orGroup: GiftPool - id: ClothingHeadHatCatEars orGroup: GiftPool + - id: ClothingHeadHatDogEars + orGroup: GiftPool - id: ToySword orGroup: GiftPool - id: RevolverCapGun diff --git a/Resources/Textures/Clothing/Head/Hats/dogears.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/dogears.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..b02a7784f47308c6d26dc261fc2f3726050e6bde GIT binary patch literal 963 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>V6OFaaSW-L z^Y-pWzgGn!$3I@4ZEX-T%V@>U<_Rk{%S!xaIC5~N`2*1!miU9_1!V?y42zj}X9mg4 zdce?FQt(=K&)N#*fLs5nIcn^)FW&!uWdE!W|K~SzG#pON{rsr$y}FXp=O4~;Zu&Q` zf7_e)=mxK#;7)nI?Z4(ddHwAFEwwwjrmikWHcDUG{Y6M{;=QHQTX(Nb+je5r#C$dT z?`#FpzJ)Q-cfx{?O^%os?>?>L#OK#1r2HS{pZ8U`?^E}Vcfu@R@yLo-KTA{2F6++S zAF8JZS0(v zPR~9b??3g2?@4Z-Ie^4$3$` zGxFKY|H;5U?|e-I^Z9f;2iKox*c0p+J~PhXKTrcz|3-T9`|X?Cer?)r$K%!PE5B<) zTh*pwc{bhM)is+geV@y|Z~lxuEE`Yd?D}D&^0QnlZaXm09^T%4;`ZbFS6Aec9LRZfrSI@>iO_`H(`;d`D@viMRL_d6WbNulgoz`qwM1U|Vw`$5qZh zNzy-Q?T;MZSvQw`x}MkY`{9L4vkq+B)Ap_N-hPJOm+JqYXJ3PRk1yu_Yqh=I+FK_( zeLDSgx|I0+@4GyozlpfD+&!!I)063^^{>dxDtgnl;@&mI{UvoT`FlJvznrgD$VqUooUyNV7?)!D^^|GC9wI}qpG6ECn zHJg7EZk8-G({L*0ZJ)&p@obHI{Qq~?<8LNj@HeS`{eAEH`pJ8~O5bJx2K174(NgIj z`=ZKb>3=efc2Ks@-!_qV!a1P}R!c6-Q{TY7ndj5GgKzdT>|S^+{=VJD@Px$FiAu~R9J=WlOa#TKp2Lf5t4SdHI!sztKvuCz#(vRBzOcCjX)u=!y@qLIRp|% zaQuZqAYn^)cWov*0e30gT2dfEaF1&4`}%(G`&|wk4u`|>-)U48&->e%5I#|_%Q&8* zr3B#hZG!MTPKI|4)2Gsu&iWbv%~p#rXft|xMybU1)iQ8-*w4bC%{ZO{d>S6VXo8I< z!t(%7X==~%CIF1a(baJ2tkp6DCP5V@+3DU^R;(GrT1ui`w^U=LYJf=rpi}~2Q=i@3 z+eGHuZseo4s8P#6{?3(35W=^@gNMh3b(*tcua?qYV=V((O6xu^D1=`sW@^R+yl=n+ zSw`h6xH#C&@+;I*a(sRJ>;E{u&HiST?R3J0Cs>EdXZRH(shP}XKap@a9FD(d4%b_V UuI6y6!vFvP07*qoM6N<$f{Om9XaE2J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..eee155b5e1e5e936fffd8e709e6e538e288192bf GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zqdi?5Ln`LH zy|vKqaDWKggL;;Wck?`Bw=eMz2=6}P|5z|0tFkF_1BXr3ypY5~8^)7i*Hg01!&x#J z-7TK4*?IH-&wqQZ_kLgUlFz{f3QB_9#1`_0Pk(E{!^mLnzq_alc&5a$d{zFiInq+RW78aN z0d>J?C&Saq_n6Fl!|pN%na{CpF zG}_{r7!Iqw;1)}G!73mK1s4M=|E`Tq<~w-1e^FF1huUYx*|tkQ=<&-PjCT-IfJLGpUXO@ GgeCxI60w#5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hats/dogears.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..5f6a850199aef5b184e6d30aeaa8bf1ee8943c24 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zb39!fLn`LH zy``9c$U%bb!SvKcF^Vg-RsOPCyit+soj*giY(InbnQ>I0ds{z(snmCY?mA)b z&CiV1on5>5@1fr}cAMne?UVC-&)fk6dS2(Z{3x+L%nbZ7q_sqbYcs|-*7UdPR_ zqxzmiar{iNy$=~8CowRDeV)B%WyAlKCuXX0?s>SN=>OKt!rk2ymK|?fG}nJ(=dWrZ>n}By|UDXYN_w z5XATAz+tT)b`f3QUTyl6xOPhL&igkQA5Y|8Iwy+%)g-0Q6;Hz7nTjdglMnba-|NTM z#`$w-@h#>Fg!f zTIP@*%h0)*xpz`k?z+u(%qr*krbKRk5A^Bj^oA+7ljoMQd(4%+5Gn5P=naG5#CP1! XgbICTg_S-9MgoJUtDnm{r-UW|*T2A8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Head/Hats/dogears.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/dogears.rsi/meta.json new file mode 100644 index 00000000000..1656c0a56d7 --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/dogears.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by TheShuEd for Space Station 14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4, + "delays": [ + [0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2], + [0.2, 0.2, 0.2, 0.2] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} From ffe4569854c5ac54f77b56f73a9617659443053a Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sat, 23 Dec 2023 03:22:12 +0000 Subject: [PATCH 04/38] jaws cant pry bolted doors (#22860) * jaws cant pry bolted doors valid jaws can * no valid jaw --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 31d852354bb..2a35e4dc07e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -25,10 +25,7 @@ speed: 1.5 useSound: /Audio/Items/jaws_pry.ogg - type: Prying - pryPowered: !type:Bool - true - force: !type:Bool - true + pryPowered: true useSound: /Audio/Items/jaws_pry.ogg - type: ToolForcePowered - type: MultipleTool From 8604efc520934e1de5c67f96ebb1df9d1da600d1 Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Sat, 23 Dec 2023 04:26:01 +0100 Subject: [PATCH 05/38] add saturation to TC inhand sprites (#22870) change --- .../Syndicate/telecrystal.rsi/inhand-left.png | Bin 283 -> 321 bytes .../Syndicate/telecrystal.rsi/inhand-right.png | Bin 294 -> 324 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/Objects/Specific/Syndicate/telecrystal.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Syndicate/telecrystal.rsi/inhand-left.png index a7ef2bbf4d7a09a0ea25170de7ab784575a56b71..a982d74257036cc437d037f0bb4d9542440a7e44 100644 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0px|du z7srr_xVN`9@-`cYv^<Id2#&L z4dc?gU7Dh`obQ=7eEIw9)M*Q^-+EV-bCuL(`s@B=y%N;BI@y?6l10FQfe|0^pn&O= z|BcHJmz}(E;quN6SGGppzLhI6DeczNI)`ICK~K`(3wi|aZ{6u0;5A7OWKg5Ma0TNR XH=~kR#tr*{-e>T1^>bP0l+XkK*<5CUpyeqKqX$ ze!&b5&u*jvIr&u~5hX6E#mPmP1tppJc?=8{bArPPib}tK2`>2f^@*0ZuGYCT=Yuzd z8eBAf@JQ#pkLF2+qMqIz7REuwmyNv?<~*8oWKxJieeg;P`;7~B80o7Thjw-wt8QK) zv1D?$@mdW-bI~JaPlCb-U<6w$uWs!NHrSgCwT#=DodCdd{28Xvy(>smQqJZWw Oc)I$rx~y|bXaWFgFklM+ diff --git a/Resources/Textures/Objects/Specific/Syndicate/telecrystal.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Syndicate/telecrystal.rsi/inhand-right.png index 0c1ae48d02ae2450298e01176fd51f8c38a6b494..5212c001fbbd249516aa5667494c42e383d0433a 100644 GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GGLLkg|>2BR0px`%8 z7srr_xVN`9@-`a?v_ACa`laLGnA$l>cESvW;vFZY&P-%IBr;{ongbkuKC?tRpHAK& z<8A-7@cWN9?*tw?GBC0TIA9?vxNTOQI(u!`><;atN7ApQ*tU21UhdH8j#+#4%bBRx z#^-DI%g6XkP&i=5Q{8{sene`{QOIj854&>0|Or7kAOyI zpj2_k@)?WH&$=qH{pwba+g|2jFCb@ zMq@Mf00001bW%=J06^y0W&i*HZ+cW%bVOxyV{&P5bZKvH004NLQ&w=GA|`F zRf&r;C9|j)q?3y?ttc@!6~s2=QdV&Fa{-$T0OP3~P1P-E4FCWDL`g(JR7iF6X zURBU2@uSuh_V0&K$HbI dz=$sk0AR@jkPw5K6{G+F002ovPDHLkV1h;AW^@1m From 3f8ad3a13d62ac1a6a401026e02a92f2f8471c19 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 23 Dec 2023 07:46:51 +0300 Subject: [PATCH 06/38] Anomaly synchronizer buff (#22771) * Update production.yml * Update electronics.yml * Wat * Update anomaly_sync.yml * Update anomaly_sync.yml --- .../Objects/Devices/Circuitboards/Machine/production.yml | 3 ++- Resources/Prototypes/Recipes/Lathes/electronics.yml | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index e7fdde93971..8612f84197e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -280,7 +280,8 @@ Manipulator: 2 Capacitor: 5 materialRequirements: - PlasmaGlass: 25 + PlasmaGlass: 5 + Cable: 5 - type: entity parent: BaseMachineCircuitboard diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 7a92402428f..b4b05a8a01e 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -279,9 +279,8 @@ result: AnomalySynchronizerCircuitboard completetime: 4 materials: - Steel: 500 + Steel: 100 Glass: 700 - Gold: 200 Silver: 100 - type: latheRecipe From c64c98ec1d48ace10443100aa2e6a84974751b5a Mon Sep 17 00:00:00 2001 From: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Date: Fri, 22 Dec 2023 21:34:19 -0800 Subject: [PATCH 07/38] New sprites for books on bookshelves in order to look less sad. (#22874) Changed sprites for books on bookshelves, added one missing sprite --- .../Entities/Structures/Furniture/bookshelf.yml | 2 +- .../Furniture/bookshelf.rsi/book-1.png | Bin 211 -> 150 bytes .../Furniture/bookshelf.rsi/book-10.png | Bin 518 -> 426 bytes .../Furniture/bookshelf.rsi/book-11.png | Bin 512 -> 446 bytes .../Furniture/bookshelf.rsi/book-12.png | Bin 505 -> 455 bytes .../Furniture/bookshelf.rsi/book-13.png | Bin 504 -> 473 bytes .../Furniture/bookshelf.rsi/book-14.png | Bin 673 -> 491 bytes .../Furniture/bookshelf.rsi/book-15.png | Bin 676 -> 503 bytes .../Furniture/bookshelf.rsi/book-16.png | Bin 677 -> 511 bytes .../Furniture/bookshelf.rsi/book-17.png | Bin 665 -> 507 bytes .../Furniture/bookshelf.rsi/book-18.png | Bin 659 -> 517 bytes .../Furniture/bookshelf.rsi/book-19.png | Bin 643 -> 533 bytes .../Furniture/bookshelf.rsi/book-2.png | Bin 242 -> 216 bytes .../Furniture/bookshelf.rsi/book-20.png | Bin 0 -> 597 bytes .../Furniture/bookshelf.rsi/book-3.png | Bin 266 -> 257 bytes .../Furniture/bookshelf.rsi/book-4.png | Bin 301 -> 302 bytes .../Furniture/bookshelf.rsi/book-5.png | Bin 304 -> 312 bytes .../Furniture/bookshelf.rsi/book-6.png | Bin 348 -> 348 bytes .../Furniture/bookshelf.rsi/book-7.png | Bin 537 -> 358 bytes .../Furniture/bookshelf.rsi/book-8.png | Bin 532 -> 372 bytes .../Furniture/bookshelf.rsi/book-9.png | Bin 524 -> 417 bytes .../Furniture/bookshelf.rsi/meta.json | 3 +++ 22 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Structures/Furniture/bookshelf.rsi/book-20.png diff --git a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml index c638fac2075..b2c53beaff9 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml @@ -13,7 +13,7 @@ - map: ["enum.StorageFillLayers.Fill"] - type: Appearance - type: StorageFillVisualizer - maxFillLevels: 20 + maxFillLevels: 21 fillBaseName: book - type: Damageable damageModifierSet: Wood diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-1.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-1.png index 070eb14ca8935e9a691e40d11678edbeee724038..19dc08d236a70528433e983b1cefeab9b6bc4aee 100644 GIT binary patch delta 121 zcmV-<0EYk50hR%fBywFzL_t(o!|l$o34kyd1>uKNgn)a9OE`>sWC&NV%@6@=2M|GP zMe^G_Kw@!Ud(BAz000F9@65)*f_L_9O^JcD?V9FA>v^ckfF!kDuj|S622zZ=v(*~_ b0Q}YqE@&2xUCx;Z00000NkvXXu0mjfPwF%0 delta 183 zcmbQnc$sm6Np7!uK%{OA9F`@;@Q%NV!TUSV9! zCsE2^#$I8i{V#uB*r)otw=)0R&K1p!^VqO}dr!sBSqtA?tzv6?zh8nUZr}2)f13@s zB!ECH>wfZ$q#rGMd%77StUK=vN1 dgaxt;44pq@_kVul@CN8222WQ%mvv4FO#qo&Mj-$I diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-10.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-10.png index c2e5cbab0d701bea1a28d3fcbce7b0fadb31b464..12dbff0c47c1c6c6ba81741f001e534f9920cf81 100644 GIT binary patch delta 401 zcmV;C0dD?=1gZm&BYy#LNkldm4u7iy7HZ#P*kbqu&j0%A zHboA2`uZ78ITmb!@mG}?7#J8B3>aRHW{OcjG|-65`(Lqq-+ztBJdCoVPfFtd|6>3D zeNqztiAsdzfV)qgFl^bqhvDv%Ck$sFenKfbF1&oruxRsThP&_Ikyj273%Hf_ah4sj z7FG;D|NNt^1AmYKdf9Pd&mM+f|Nhg~0Uxg%9nB2G1R&>Q4g&+^`T56|6)mwUcvAcSC=nwjd`bpRbe2Y*lkaJy{eAQ2?TM+xF~ z*+|qiN09RfYu_JuF{_0j=n+;?e&G8YVfY+jauvBDK1Wz_;27mM>Ku>##tHD&fs<>Z z^x8)4`V^(g$lra4z{xd1bMH7jyG6D6EXfc28dC%SWHPg$``167fRaoLtE%4m9)pi= z@7ug}eo@s^1b;}bF-UK+!+pDPFZGv4ULkHqr$PWm%-pv#7ExXpWb3oo0&2WU`={;%2b(b&i*0N|jcBcC>^{{~4MA z0Kl}eF}#*{U9H#RjC^)1ZEcSSAXXu6mh8p7mUn(2`Rt&x+3^5g?k=^kNjk4JBi7$+ jfexSp=m0vvzXJFK@^a@uN@b;Z00000NkvXXu0mjf48`T# diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-11.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-11.png index 9cdbc861f6efc25f3246fb06daada27c41423e07..6d809a18f4729154815cdf803f462f8284852add 100644 GIT binary patch delta 421 zcmV;W0b2fm1ik~1BYy#fNklF-rnr7{~vpo8VT6QAiOAA=whqc$1q$lL+M} zaB*o$XsAi2`~bSN6cIX^MN5Ok#f3HH9Yt4o9wZeKS@<+rm%T^F=_K!eyXWCvp7*%l zj|br4;o<2^MDWvQE=Bu$If@8=$_O5!<0xeW57{{{9!S&q)_*0%18L^_uKq$p)3MP! z0Ny$XYb}VcZQNfRLaf`nkfc;mE_)y;Rc7B|_A_2V$5gSV-Ap?Q&3t^zn|O9 zn}G&+&>u~EE>>~vdKv%_hQ^`b`PUgeUj$=GTHigPU@ZB^9a*23C>5ow&r6nmLaS+L zI#zDC5!PCeKYvt|jw+B<72@5?FLy|qjzX~px%Fhv16JdnnKyOE;3MKDiw6PH2eX2&H#Ytt1}M9h{VXTk?&QflPDE6W!lb8!1RDv|KZrk_acBou?7H4 zrtRzm4l6r=k?&AKK`5axnYObNn3~XR2RPmF0suN)eI6(~fh7-czDGJ=^MT5BnO49f P00000NkvXXu0mjf5RJvb delta 487 zcmVgf^N0O7R3-z988-I43S&@JrX}UeleYGf~D2WW9(oW&l9U zW(7iC?Eqz-N9rttGS7n*L`m0KE{}9N1D4AVI$sq;NnoZ>YV>ADqnqhHLo)yXm=;$D z*Yd8b^_tGeXUF{d#%KVva&e1fPxo5h`M%_{gUw_{19-W+)WRm|yw(h@zu5vEKnKtP dbbx;a@Ch86>OF*8*LnZ|002ovPDHLkV1kSA-sJ!Q diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-12.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-12.png index 93adcaf1e37f305d0bbcade9a9dda27ee6f6aaae..9a7d4725f846bb81f0b140828bb3600ed3266362 100644 GIT binary patch delta 430 zcmV;f0a5<>1IGi9BYy#oNklu}cDB7{(veO>is3D5MC5kZg%)yvfa>Nrdt* zaB*o$XsAi2`~z}nDI#<-i{CT;$wEE z18mPoD9*{>*X`zYe?KArYJhw7f!VptZmwKS0sz8L!0K6@o&VwohS*H6eBy%QQAGKz;~G-Mgo+m}9fh>D7Qp@v55$(jdv-{sxAFWn*b(&34fpk5b(Rmb~;85_R}Qb zcaa_c1i@)gTqR%jl1>LfEGVv2UiQPDIKrMdxk}uSuqUoLaIESZHD170{SbI-!^byJ zd~Kn6eS~7U@2@{3;Nu%$_;>6c-=flZR^(;B$`$|sx!gDy>H5bL(2{LxUe{aPVDZuE zew%krPV0J_0DqYU7TIO4w{O+&mHuqsJ5Sls?h;)e03L;>!2lv9H`XrPx}iu(-!tOV zvJC5I6tRk*Q>N1yC^zyN4($YfE6o$|hN5J1?~Hgu(Jx)6drfzq&ZuWc(&+$VLE``w zjzjh&j|#_u;RQw48Mc62E)Rw+^g3VT1x2Pu}cDB7{(veO>is3D5MC5kZg%)yvfa>Nrdt* zaB*o$XsAi2`~z}nDI#<-in~ibBP=(W4kU;blu8~5V#UyRux#QUp8V0Rjtu!s zJ;Mezr$iKIq_6K*ym`xei?PC|7+JWq5jsb;jf>1*dfRY@`Wnu%?EZ4 zxF@CuzBz4;o*koe^LTylSOZZ%nK41n4xwB|yF=^^Jf0sjHJ~zMkQ!TmU)mgN^S$VF z5~ZT1nYJ<$7;=EGb#tuE_bh;Xq58=RgG^hQ2^=glfH^kbp@fJ~LNv^@m6^b0R-n(Z qs-q1r0HEDbeq|LfG>Z6erz;NsE}LW5f^;%-w*MdV~s5;O=IN99y^6kgFOBo$Jb z_%-Nx-<@}QhG5XW<@>&Syt~Jb@4Yh-LNG`S4fN}V0mFb{K!44E*JCG}@i5unixaQM zPPROw1Sh`6+T=xU+crTE_BB>YFY*Cr1OaD+Ttu%(z!_039JBJlvrxiD@c{U!!Y!1M zd#|8yd5GMd#IN2*;TFnZgiq`oU4t#Z$n+v#;IaUKRB8lFbKi9WYOsvYYI5^y9KLGx zj(XeJq$a0oAb&B(A-Tx6&XwY=oS&AsOw5XEooMm^@K}24%|I~kz{;6JQxwc=b9#6h zrhfg5g676`O4MpS=>{IdzD?k_P@RCwA0q3!r^MwCwPl^oHJy1{qwEf~z7WyY0|3DC zJd($0usjb&D9N(UaM@O_hs{#v*>6dcdw7#|hw>d=Cs+UgmYIdtUYT{RT+GR7U>GnA7zX~8fgjVl V^`Oa&Jx~Au002ovPDHLkV1oS<;jRDx diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-14.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-14.png index 266cd0658e120ff43fcbb9c7c4fea29d4ad2fd96..87c2698758b0d111a35b5e5b9c5e95b868f71578 100644 GIT binary patch delta 466 zcmV;@0WJQa1?vNlBYy$1Nklu}cDB7{(veO>is3D5MC5kZg%)baHcO5~2JH zTwIzG8fwxh|A1UtiU^&|qNPFN;=-EJqv(oGA*qnc!nYyJ&*Q%Hj+T&nw)>uYkN5lT z-rqfdB}dFFYy@tkw5{w>E-G6T)i?cjpHXsy%<{W)nfB2~l}RE?+^d`NZ9jD3wtx zx*$qrP2XnZRGg#JTrUup@bT5rtsfila6Qciwr3<1=H%b&R{gr)pXhlfTW+*Fq}#xK zdrCwqX`IcER=0MPCHWob)Eppcp*1Tq-n zqUL9cWm=;CD29l(gtm(Db#P8PNq3GM0xs0=qMw)V?&CwxtA86JgrJ|g*4Nz!4GbC> zG{9>hBae~i3kCA(YfHSz5DHSo*9lx3s#^Atz#-=J3a{F#qMOj$N`>o=BG_F&j2zIy5(HL3uBwYBTe z&+jjs08jCocYlT6gV_fDwAx+kQ#Wo2J#GVw_ZnDzXu8j*$A^CZj^}O8kHTpap$`C` zn_qfsAa^j1>8){LQSLzOMe$h;UDeMh7wddZi>+2qb$!S1$|i7GaVL<@=E>ah21#f0 zA=X*0S?1ZAV0Q5Gf+~~)0AQFVR^L@%m?m_q>0@1QRDWHrhhrY|#+g@B`}D(?9l+vBOu^HUVF17j=gfU~e1CD=5hcsFH@A;x1H43+=_tfm+?;nC1HsfTfi^0DxhixOo8}lo@v2 zao70pwJJOlh;xA9IG71+F2pA$eLl-OyM`z`xDx=v98=LuaN13-&+^W$AvzNX8(`Iq k@5`{y>ffZ`ziQww&i!s`MGyQ!00000NkvXXt^-0~f@h~W#sB~S diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-15.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-15.png index 53b6506f91c55e15629c6e2244ec4c1a71c6f55e..5a2ef1a6c48cd95216ddc4b00fa626ab6548ec0e 100644 GIT binary patch delta 478 zcmV<40U`dR1@{AxBYy$DNklu}cDB7{(vWO>is3D8vYbkZg%)baDtBnnXzd zf)o}_@gzv=c~MrowgkP?s_|m}b*&d2lZGZlH4Su-}L4Lz#ri4oUu_Lee z03e734*++y`+wdBh?d=$J9cwJ(Xw0j#NB*T{V#8Lk(Ra&$s1mzZp=_R&t}x@(BcJ` z0{~EwBxLvVs7R9Tpls(WAMH%>=DC9%f?WH>i>@57jZOCa=Gcsy9V0Wdn!K?5^>e8^ z&tr#>&;R0u?f_30Cx!-KJ8v{&s{h6InCS!PkK9nCI^aF?H;rJo(8a) zDSfj-qtiU;?F1GhI{@2nUraQ#0~p;2th|7_$L#+f0Gh2@PXq9F0z)7&`~9!=1y(r` Ut0VOLd;kCd07*qoM6N<$f}^|cPyhe` delta 653 zcmV;80&@NL1Ed9zBYyx1a7bBm000XU000XU0RWnu7ytkQR!KxbR9J=WmOp3{VHn1r z%C$?tOqIr<(3ZjlmDWY1>rDZN1GjJx7w0TlvdDo$wqz+?oZ2aiinJiq&=kQT(8$?8 zlewVu{BsTTP$}v)x?z_A1OE0Amp?Q}3^YDJ(%ggC#|4jh{lu$jeE#Xnj^G++ zP5=O6v-9qKkaZr{bWJcjZropF=0&8BaBFGG_e^sgWZqFQJG5#wlox#)__6mcN^d^q zqt?)hOu^%caR9(G`^0^Bdm;@0*t1^`ys@KE4lpM`b4>G{6$BtJ19=(cWCE#74uwh$ zg-Q*nOn(mLWWx1IQXJTnQIg_NL>1e`9Vnt2+KZV3ji$#j&G$V3t82Re0Npxr^8!F9 zGpwfVuJPepoqHzW=K#fVFcauph|SLXe42N94PJIICjf*wcI0G&-EA{{ns<5)-kE^g n0Ihy}pND-~|0e~Ps)2uG5picrANsxk0000 z;Vuv0!Gi}6CX5L^w2)5H#(J8@gdSQJ{6u>(S{D3d@CKI(27ic>F-ipk#Oe(m021MO zI$kVLB0Nu4&ucZ`xYcyb-E9IdRYbK4#HVLmo@_xZ*ZGO_B}BCfB<&TM?IPsLeS_ZM z0YFmn$Y%YJl)UAEeQw@LTSp(48<i6~Y-B}~wUFQx~ z0;txA%LBlbet+GZfvHjm3wSn`1WLlPxVo$zK>Z)4UmWJAq{nh~;{Y*?bQJ z$ZQwCy22vUycvZX{!ZX?vjedC9+*~K?EvN(yq%zxCpPDp{r>|%wWd27U}x}l0#`-k c<@;ab6V{d@9mJB7b^rhX07*qoM6N<$f)E|(kpKVy delta 654 zcmV;90&)HS1EmF!BYyx1a7bBm000XU000XU0RWnu7ytkQS4l)cR9J=WmOp3{VHn1r z%C$?tOqIr<(3ZjlmDWY1>rDZN1GjJx7w0TlvdDo$wqz+?oZ2aiinJiq&=kQT(8$?8 zlewVu{BsTTP$}v)x?z_A1OE0Amp?Q}3^YDJ(%ggC#|4jh{lu$jeE#Xnj^G++ zP5=O6v-9qKkaZr{bWJcjZropF=0&8BaBFGG_e^sgWZqFQJG5#wlox#)__6mcN^d^q zqt?)hOu^%caR9(G`^0^Bdm;@0*t1^`ys@KE4lpM`b4>G{6$FC3>@uCoze@sf7{(veEpRKuD8z_@h-!&wbZQ73nk1uf{hrq*anGg?&+B`K zpNAK)Wy_W=PE!FNEyp9Yy%ndafRADUH_>5`VgWZ9zTvHTJ%2=zAgy^l#O4hj0A>fG zbheVE*?}mDe$T~!@u=xoD(wJoRg7w7WL_({J>NyP>QF*2Xx$DX}-JDEA@m6Yz!5#H>Uo6u9Pkt{ocBl zUiY9{BdHGncYpf*-xiq9`!Rj&mxku^e$yvz<=bk14Ti$BxOqf_p|Fs35%X+@?+&vW zF3|!7RmI*x3I$b#qUlYni|#b%&BlHT8w*0?!vGmi{j+^Hwvq+FvZkEZ=iZCtFb@C}mnU!|Wyy_CV&U&N0jP zIDkYl_tO;ure!m-5AvJ9VdVzkJHc`L@q zO4{YXo0Qf=p)Ep+O6wxxn(3fJz^w$%#ktEZE)sCK?YfjMPVMBPA}ti!qn3ihL9e9$ zCNGE5_$NJRP$_D9+~;sj@+SGdYpxVd=sipRJiOoc@{-?^uYZp*hHmOgS9k9<&}*RA z0Iz|pGR$7g<=LCpb1bV2v!aq_SW{cqQ{VGuGD8e`wRI)+p0CL|G+Aexg&n5JIyZ2n z=!@@m9nTNn0>52M*bXYcj&ZQ{4wY))KmJs}gzdnv|6pNp7p8L*s`vbZS{VSavT_y1 z>HV1#;3;+ewtvvO_oRlujb_{W%(WXrkK4ffof?+zTmJL$;m5FlEAZB52jMoE&6lK5187xgpBNv+RmzR~EYuIm_H*aXfi?gYlBrrEPs@7dVY zbc}V%HD#XGM6-jJ7oK7{005?CVQIAl)3RXL^$_but$*xu-7f{qnU68XfoVqpXX#rZv&*xcTrAH!l)>gzK||p=Zi@Z5DSYEVk;K$yFB)x^0 zPg+Bjn1ZJR{Q!WM?uq~I?m!j*u;(s!ys@WV4sa(xIi`H)B#9xf`b>Ks$qXQ`VkR?$ zqLK#IRC*MZG&EVqW?=`KtjG4^=0K$ya7_7r0AOKp7XV;7M}A%ah-HRTb^SHAzmze@sP9L68iCc&)`qYxtsBC;i-(a9ljXc8g& z3tC*73L0wCN&kRcT8fCA%tC?&3FE|?%A@G|aSBO=R2F_4!tV9;Ub{Ald$zlW=X>uR z_j&jNrc9YK#mVn;(`q6@+gl0p``i@uIfxDd6!kf%={LQY%YR7}2~f=CBsSml0U$K8 zLMLkl3XQCg-t%nyjR&=Yip4%=h=Ygr4pJHpXP6CY7J-TKS^YAJn{T z+=+UFggyY=R)6mPc7X7?2eU^WVJLj=>G;OK`KG#GqrpX5+B~Gu;9?u=EY~daY=-X+ zy}l6k005K}1*!cEN{RwWt+cSta@}Lom@j>3nf�OLy=y4E2D0XhO)kh-)^(cgMi= zjBZ~TDxz%MDdd`GUep~@Cezjz9S`tyc5LW>VVO6YF=f^LVmW5{p0`?wA^{=Oq8Xib z0^J_SUuqn)d`|&L?iIhgLWgP5jKaNmC$JdV0r*ZZvIFolMBQN%g?WzoPN+93zaD^{ iA=(KH6_LsJzt$I^Y(#WOYN%oW00000)+jA1d|1jBYyx1a7bBm000XU000XU0RWnu7ytkQMM*?KR9J=WmOp3{VHn1r z%C$?tOiFE0Xp3+~rF9W;y(!Qk;8qUe;@l;RiySy)i%aR^)J`s1q=iBawGQ&NpF{fHy?6J0>7^7Rm}j{^5AXNAyxi}(uYZp*hHmOoS9k9<&}*RA zfT)3tHo~6G<=N|3b1b8cu%eb`Sj)Dqr#|Ues%2>kLe>A0x;JjTJ+8&s-+|L|i0la341`Hh98U0Ci>sGj==wK4!;b@ejL z)B7_gAX4h;O@FC(=TQxR8qK!#!&io+p0I)WTQw}-wf*Pg!w+HqM&PZ_4#I0PsSg03 z>t8x+Ah$n?sf|%-QEp%ECGn~HF6w8LQ(B+Xe527(UDq+ZunC-3!U>E|&#)&i-?8!O znHcMoYsx&WiDri=FSuek005S4WBF|fmTkjy>LJ$6T7TK+x?c&Hw@!kZ%BLTp?1-*$ z<^%vBH8$bjM_HF~O>3grasB=SVO}Kq2-jx^L(i1!DDzy=>@Z8ESYEVk;QQYDB)x^0 zPg+Bjn1aUx{Q!U$-iiP2_CN*zu;;CGyfIfV2ZR%#98@W4XkBR z)Y8yZ19Y2(9q6hN+e?@Om1@8-<@+9hg{55pfaMy4n8E)0{*Vz7AmYxaZIY2m$ zW&+KH)YwGGr@YfOWZ5B{01)Sxi)Vt@tP6e0J6%I|CXhBj)sFA;uut`GQt)3j@E55J Vd|aD$)BXSe002ovPDHLkV1mARIwAl7 diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-19.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-19.png index 13095397948172b1a8aa5550aab7a66c741f3ff2..a77135f91f8115d0bbd52c92e9f5dac6c87fe58c 100644 GIT binary patch delta 508 zcmVze@sP9L68aCc&)`qYxzuBCI8%(WxPDXo?{F z3tU{93L0vvss4amT8apr%p!t@2;;<>QYpHAoPtsjm4)AiIPbmJd(Ue#xMw>bzOV27 z_7 zyTiyALJt5yL6(s`NTVRjkd(5Hb(ZT+r^bBYOPk5uzUbV+uVKjpu0T-8x`=CbhIdEr z_=KS^EQ#oN!z1LHXI|tEDV=Weh3N*KFHbFfFD&y`XLanfe^`!LzUMkRh+^Re(`u*o zqBYFU1cn~S6S-ekR4WZ%sO}K0k$n`O2^?0=0K5}eFSr6hT`yWg{!F}QOVr^0000TBYyx1a7bBm000XU000XU0RWnu7ytkQHAzH4R9J=WmOn@vVHn0A z%jptmr;0VSpi+pmMO~!0W(sr&xJe)`&MsNHlz@YqUBso6PA)2vKp_n(1&4r<^WW55 zXz{8&10J^@6G(!#(| zyf1zj6}&rJ1Abc=HcS+MUE+9m9mSI4kAI!Tuwg=5MzmoEnZK+|<(Kjoq6I#i?LVqGm4Y=5ph6^D84%Bd-SyKrTPca0k- z005zZA^YCTx{PaDvQ8^LqdQ002ovPDHLk FV1oP_BuM}O diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-2.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-2.png index e1988246b1c8ff27da051b9e3cb170e90a002ea8..5d7b1e91bf8f17a33247371d8f88e3445e63a660 100644 GIT binary patch delta 172 zcmeywc!P0*it2n%7srr@!^sH}tcw#wdYDWeJY4c&e`eOl|68+{{rg@J^us^<_ryZs zn#*?%`!LHsijdt9@LTS%*kSdOLI!TLgFjY#@qhpukG{L{QH=#$FD6g=@qhn~|Ml~y z9Qn_9vQ0d0Us}YLpGJr8et*xlPG-W^4M{(KKEHp!^1-2bwmkd){gtm#eW(Gky@`>X YVf|}8fp)F;Cm4Xh)78&qol`;+0P{joQ~&?~ delta 214 zcmcb?_=$0XNxEt{dwje_!%F6ciBv4gGCLE zjg5-`RtYf!K{MlF?^%&N%sq>zUR=TKCTsAjA&|YtDgok-0}j><3`M-UUe*m4rvM$y N;OXk;vd$@?2>=tVSL6Ty diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-20.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-20.png new file mode 100644 index 0000000000000000000000000000000000000000..56193015d5723a69b608898ca95b239dcbd70976 GIT binary patch literal 597 zcmV-b0;>IqP) zu}d3a7{;HPbZApDRXHLRi4=t*+NG3^nH&lkI*FkE1uj`S)wV-B>7;)^?a-w~N*#(u z5z#?Pxm`0RJ(sWECF>m_-Fw#3oUtVQtq<50so)?yH zeCH;fmFIz94Gi)sGW8Rbwmu?r(DI)YUt^G0q4VFE`?P~Xwc^OzJ^<)!6N`&c=xo#V zz-@lsN~Ghi((4~*u>LeX^PTN6rRTc9n|llk_l@)GlXBkaceT9L84ZmlDSZGqGQa)X z0%N;zJYI_{Lu0#f&l6wf2fF&|8=j!2?^dX9c;W)qO9=!0^0|Li#Cy2ce=^1eNBJbi1Rd<9{3&_0)YaMB!9?BL_t(o!((6=1*2dTi~=;^;iT}tX=?HRwQHvS_i$49-|NKp z|Nmb9|GiFp|7l?#3%bCIm#-P>Uae*#Cc@ zl*E6svLU75!pqkTi#A_oxcmMc!+RB!V9){pATmCZPcp`#00000NkvXXu0mjfDk^gB delta 238 zcmZo<>SCIpQqNi75n0T@z%2~Ij105pNH8!k?D2GQ42ft>{`3F8{b2{DWsF;EuP`p= zlPF~{W3RB%{+B;5>{I>STbciD=ZgOSZu$9t`VDc0g$q9!SY}x?u*N<(dipv~>H2HN z1~vbWCVcp0d-&%0cuBeWw@(y&<8!k6;b`4_@bvd98|LrONPi#}ytFIT#X4c(H`_Md zHvb2I*00Z7eCo8V<8>#q1076kY;0{mR(tV)02`0~#;mUWt6GBlLJn9&N%mSLK%8}8 l1+$y1!K;QqcAhQF3}1rmlqOz~DhGOm!PC{xWt~$(69D(oWJv%3 diff --git a/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-4.png b/Resources/Textures/Structures/Furniture/bookshelf.rsi/book-4.png index 4000078010afdfbadb403b2fd612df94907f7863..bad2758b34e25a53fb43542215ba58b10645f6e1 100644 GIT binary patch delta 275 zcmV+u0qp**0UaepbF@dlKB6>*#Cc@ zl*E6svLU75!pqkTi#A_oxcmMc!+1=6BY-0<8j&B!3BTNLh0L01FcU01FcV0GgZ_0002rNkluaI-P&pYJ)IT*_c`nAN-)5!GGZ8dxi@ye=scCe3{|y z`*-BpPh1pmi>cz2(@nU?@bk|<>N;Sd_C1CzhEL%9udi;S%F7|-4os0?`1Ozc;v6Fi z7#J8B;;$+(FfcGM7%;rVsww`e5>7c%0pn<8H0pp+2aGyk)B&Ro7UaeAPbEM_)k1e*XDKKL?~z4tOG{DpcVxHUO!)#5tx-Z00000NkvXXu0mjfrY4PH delta 277 zcmV+w0qXv^0uaI-P&pYJ)IT*_c`cz2(@nU?@bk|En>0_T5ybsJS)4k347 ziUh;2fB$jHljVT;t4a($hm>$?ioc3mju?4lz&KhNjXGe|0izBWb-<_tMjbHffKdkw bv;zQya$Rzp9VEF!v!Qkb4hO?i)GCV%Fk>Tte+IX0W7)9J- zsx%96tPWVHeUD*_;S)Ij>#N%|a{voA!T7663=9km3}Cr=o*?B2t0_sJ86vkyO^lpPmdzGhgo`7*=Z z_wUFn2Z#mS%KA9V4p|E;hM#}_(bfUT0KM$EuxAg$uYdn(>wu3}j*e!AQGgXhtJnWO z-FESRw0b@5$~ysk;KIF=47+ymF4Pp26+1V*}ytr6bxDb0Ky1x Uu=QVxsQ>@~07*qoM6N<$g508_82|tP delta 322 zcmV-I0log*0^9@*|Mxlb|7X}20HLAsFu8td$^Q%`0T3EV zKTJMGqk$ntqv8LV_Dla`G#aoLI4tM_FJ8W8sC%`Zf#Lfv27iN>?-|a1{>t$9+(w48 zcM$Ty584?FUcP6z@bU-4qRp2X?!JGAq8}#z_})nd1_lO(UAy=gEVSpX_ZYSqK7sSUzPgPnFNcsjFhzpl*T4TbRzp9VEF!v!Qkb4hO?i)GCV%Fk>Tte+IX0W7)9J- zsx%96tPWVHeUD*_;S)Ij>#N%|a{voA!T7663=9km3}Cr=o*?B2t0_sJ86vkyO^lpPmdzGhgo`7*=Z z_wUFn2Z#mS%KA9V4p|E;hM#}_(bfUT0KM$EuxAg$uYdn(>wu3}j*e!AVFIY#28dR# z|9`se;{Ry%dPU;OfwOl$QMCL?9 zqnnVYB9j7*U=mT?qU%mVhe0UZ*YEKlhOTHz9s z45>u?I?UNNwwe(bwD${HK#+id_Fz<&lX0tnDvvXhFC!-EtF z&|VU!T?AQ1Ui-SDB|L6|2qUj5zoN4g2bSVUF;*rl#TgEqas7k3)WG)R5%Ai&uO>Y9m+TI82(xZep-ed@CU;rx}PKdV3;I4ZXm)S;c){1Sc*e2Rt8IP z2+&>}9;6VUz3>Oai0%#%4E1#U!oYlG3XI?4& z?BFw*;Q*emFRZX>GH=zRuD_WA8^8vz0c?PO1@Hlo{N71mP&<790000Rzp9VEF!v!Qkb4hO?i)GCV%Fk>Tte+IX0W7)9J- zsx%96tPWVHeUD*_;S)Ij>#N%|a{voA!T7663=9km3}Cr=o*?B2t0_sJ86vkyO^lpPmdzGhgo`7*=Z z_wUFn2Z#mS%KA9V4p|E;hM#}_(bfUT0KM$EuxAg$uYdn(>wu3}j*e!AVFHlzF>?MU z*Su);`v0ffE>r%GR<9?n95{Oik&o~GM&xgD!G(J#8FuaBW4LhdB=NZbIUghEZ*qaO ss1#`p5^A>rp1yuYev4={e-CQ_0NZAgLwH5*E&u=k07*qoM6N<$g7mtqvj6}9 delta 507 zcmVwGu zqMJ~s!jb}wU?U>CMc18#4nj8>*nhB#mo72r;LR@L-A-OKB2Ok2K?gx&^y5^HpcT$R zQW5FFwzirP7_{f|?%l()eR$dP-2fp3{nTJz-|hmq0Dmrk6+npblZ{l2Scg=EEmqvf8>m4S&cyAF~9{_HZyWRkz7Xd6E1#Cmn3wzIr zuh+nD{fweR>gSYhHhaqTy@tPb0zZ}I3D6OatYr=e9pOH8ouzn`=VKP=p|sI-Re{ ziXl_Edemmeqngp4;TQk_Jk#@?YjfA_dacixXUF8?Qf~ly9VWeoy}sAx&bMWr9YV3# x8^FW)u@g2!=bdKs`kO6q0bBqVzyRzp9VEF!v!Qkb4hO?i)GCV%Fk>Tte+IX0W7)9J- zsx%96tPWVHeUD*_;S)Ij>#N%|a{voA!T7663=9km3}Cr=o*?B2t0_sJ86vkyO^lpPmdzGhgo`7*=Z z_wUFn2Z#mS%KA9V4p|E;hM#}_(bfUT0KM$EuxAg$uYdn(>wu3}j*e!AVFHlzF>?Nn zV`l#Uzt|sVo`1##qSfpFpKiPOKU%$>xN_j^9Yj99`x}wJ%@`OM7Hz%^$@f_DG%j%A z-bsdCyZ9I`+&f8pEgfTX9xz}v%L4-!*loH<(}{92qBoI=4SeK4L}3X0Dt5FoRoze#r!0dj1ebg zAz^BPAm`%Ofj{&jW)p$m#jk?=(D&Ga@YsUnDs)3UwxI05(MxaCxh4)9C%{`54z7jL zYX`OKQp3iaxyHfD|(v;3_g1O zZ}aBGWkpXGAb-BWAid3w_MOJP*k2ucg{TqTK2h`m;Ia8M8GyHJ#omQgG2|^Pdun{4 zbkq77dG-9~6z}yW%FVonQ#*m*O7;ZoZXXFG^2F};ed)Te*G|fUR5Au9Wr5x8Lm-id z-R(n|S^#n`egzOQn*hH{JwTOZkv`9&%Cexjrl{*QQ*1;glLgHbN1d;8O;M&)X%A*c zo6iiMp&9@H3~O7XYiZY&dM(UIXUEFU?qmQ$6{1GbUf64C=ZBKc4mz8i4B+MNQVpA^ p^J+6f{mm9=02+V>paJ|VfKQ}- Date: Sat, 23 Dec 2023 00:35:46 -0500 Subject: [PATCH 08/38] Drug overlay shader rework - a little more motion-sickness friendly, a little less shonky (#22872) * reworks the drug overlay effect to be less motion-sickness inducing and a bit less shonky * UNAUTHORIZED fucking THING. DESTROY it immediately * further tweaks - adds another gradient to control the color effect too --- Resources/Textures/Shaders/rainbow.swsl | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Resources/Textures/Shaders/rainbow.swsl b/Resources/Textures/Shaders/rainbow.swsl index 67b2b78686a..a96d2fdb31b 100644 --- a/Resources/Textures/Shaders/rainbow.swsl +++ b/Resources/Textures/Shaders/rainbow.swsl @@ -5,6 +5,14 @@ const highp float TimeScale = 0.15; const highp float DistortionScale = 0.02; // how strongly to warp the screen const highp float NoiseScale = 4.0; // scale of the random noise const highp float MaxColorMix = 0.05; // rainbow effect strength. at 1.0, you wont be able to see the screen anymore +const highp float BaseColorMult = 8; // multiplier of the underlying screen texture for the rainbow effect +const highp float BaseColorPow = 0.8; // exponent for the rainbow effect's +const highp float CenterRadius = 200; // radius of the gradient used to tone down the distortion effect +const highp float CenterMinDist = 0.4; // minimum distance from the center of the screen for the distortion to appear at all +const highp float CenterPow = 3; // the exponent used for the distortion center +const highp float CenterColorRadius = 250; // radius of the gradient used to tone down the color effect +const highp float CenterColorMinDist = 0.2; // minimum distance from the center of the screen for the color to appear at all +const highp float CenterColorPow = 1.25; // the exponent used for the color's center // hash(), noise(), and hsv2rgb_smooth() were converted from shadertoy examples, which were released under the MIT License: // The MIT License @@ -48,15 +56,20 @@ highp float mixNoise(highp vec2 point, highp float phase) { void fragment() { highp vec2 coord = FRAGCOORD.xy * SCREEN_PIXEL_SIZE.xy; + highp vec2 aspect = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); + highp vec2 center = aspect * 0.5; // warp the screen. highp vec2 offset = vec2(mixNoise(coord, 0.), mixNoise(coord, 5.)); - COLOR = zTextureSpec(SCREEN_TEXTURE, coord + effectScale * DistortionScale * offset); + highp float centergradient = pow(clamp((length(center - FRAGCOORD.xy) / CenterRadius) - CenterMinDist, 0.0, 1.0), CenterPow); + COLOR = zTextureSpec(SCREEN_TEXTURE, coord + effectScale * (DistortionScale * centergradient) * offset); // apply rainbow effect. highp float hue = 1. + mixNoise(coord, 10.); highp vec3 color = hsv2rgb_smooth(vec3(hue,1.0,1.0)); - COLOR.xyz = mix(COLOR.xyz, color, MaxColorMix * effectScale * effectScale); + highp float centercolor = pow(clamp((length(center - FRAGCOORD.xy) / CenterColorRadius) - CenterColorMinDist, 0.0, 1.0), CenterColorPow); + highp float coloration = pow((COLOR.x + COLOR.y + COLOR.z) * BaseColorMult, BaseColorPow) * centercolor; + COLOR.xyz = mix(COLOR.xyz, color, MaxColorMix * effectScale * effectScale * coloration); } From 6baf564fa089ebd90f5938ae53aca90b8fcfac17 Mon Sep 17 00:00:00 2001 From: lapatison <100279397+lapatison@users.noreply.github.com> Date: Sat, 23 Dec 2023 08:42:19 +0300 Subject: [PATCH 09/38] Cargo request plasma canister locale (#22858) * name and desc removal * locale * shouldnt have touch that for now --- .../en-US/prototypes/catalog/cargo/cargo-atmospherics.ftl | 3 +++ Resources/Prototypes/Catalog/Cargo/cargo_atmospherics.yml | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/prototypes/catalog/cargo/cargo-atmospherics.ftl b/Resources/Locale/en-US/prototypes/catalog/cargo/cargo-atmospherics.ftl index a8ea5cfb0fd..f22755c9318 100644 --- a/Resources/Locale/en-US/prototypes/catalog/cargo/cargo-atmospherics.ftl +++ b/Resources/Locale/en-US/prototypes/catalog/cargo/cargo-atmospherics.ftl @@ -18,3 +18,6 @@ ent-AtmosphericsLiquidNitrogen = { ent-LiquidNitrogenCanister } ent-AtmosphericsLiquidCarbonDioxide = { ent-LiquidCarbonDioxideCanister } .desc = { ent-LiquidCarbonDioxideCanister.desc } + +ent-AtmosphericsPlasma = { ent-PlasmaCanister } + .desc = { ent-PlasmaCanister.desc } diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_atmospherics.yml b/Resources/Prototypes/Catalog/Cargo/cargo_atmospherics.yml index a8446659b9b..6d51c790fc7 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_atmospherics.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_atmospherics.yml @@ -91,9 +91,7 @@ # group: market - type: cargoProduct - name: "plasma canister" id: AtmosphericsPlasma - description: "Plasma canister" icon: sprite: Structures/Storage/canister.rsi state: orange From 33399db6c2c9621ad6d2865f9d197a2062e99ecc Mon Sep 17 00:00:00 2001 From: liltenhead <104418166+liltenhead@users.noreply.github.com> Date: Fri, 22 Dec 2023 22:32:13 -0800 Subject: [PATCH 10/38] Vial Drinking (#22886) vial drink --- .../Prototypes/Entities/Objects/Specific/chemistry-vials.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml index 1091fadaa40..1397c93614e 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml @@ -26,6 +26,7 @@ - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: vial-1- + - type: Drink - type: SolutionContainerManager solutions: drink: From 9b18357a882d6a9e3dfb3b4fccaa42f65238c9f0 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Sat, 23 Dec 2023 01:32:23 -0500 Subject: [PATCH 11/38] Corner Clothing UI (#22883) * Corner clothing (save point) * IT WORKS. YIPPEE * the last of it * template rejigs --- .../Screens/DefaultGameScreen.xaml | 2 + .../Screens/DefaultGameScreen.xaml.cs | 1 + .../Screens/SeparatedChatGameScreen.xaml | 4 +- .../Screens/SeparatedChatGameScreen.xaml.cs | 1 + .../Systems/Hotbar/HotbarUIController.cs | 28 ++-- .../Systems/Hotbar/Widgets/HotbarGui.xaml | 44 +++---- .../Systems/Hotbar/Widgets/HotbarGui.xaml.cs | 2 +- .../Inventory/Controls/ItemSlotUIContainer.cs | 10 +- .../Inventory/InventoryUIController.cs | 124 +++++++++++++----- .../Inventory/Widgets/InventoryGui.xaml | 30 +++++ .../Inventory/Widgets/InventoryGui.xaml.cs | 19 +++ .../MenuBar/GameTopMenuBarUIController.cs | 4 - .../MenuBar/Widgets/GameTopMenuBar.xaml | 10 -- .../arachnid_inventory_template.yml | 18 +-- .../Prototypes/InventoryTemplates/borg.yml | 9 +- .../corpse_inventory_template.yml | 16 +-- .../diona_inventory_template.yml | 16 +-- .../drone_inventory_template.yml | 3 +- .../hamster_inventory_template.yml | 8 +- .../head_inventory_template.yml | 3 +- .../human_inventory_template.yml | 18 +-- .../kangaroo_inventory_template.yml | 4 +- .../monkey_inventory_template.yml | 10 +- .../pet_inventory_template.yml | 2 +- .../Interface/Clockwork/Slots/toggle.png | Bin 0 -> 1041 bytes .../Interface/Default/Slots/toggle.png | Bin 0 -> 1140 bytes .../Eris/Slots/{inventory.png => toggle.png} | Bin .../Interface/Minimalist/Slots/inventory.png | Bin 685 -> 0 bytes .../Slots/toggle.png} | Bin .../Interface/Plasmafire/Slots/toggle.png | Bin 0 -> 1305 bytes .../Textures/Interface/Retro/Slots/toggle.png | Bin 0 -> 645 bytes .../Interface/Slimecore/Slots/toggle.png | Bin 0 -> 1154 bytes 32 files changed, 240 insertions(+), 146 deletions(-) create mode 100644 Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml create mode 100644 Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml.cs create mode 100644 Resources/Textures/Interface/Clockwork/Slots/toggle.png create mode 100644 Resources/Textures/Interface/Default/Slots/toggle.png rename Resources/Textures/Interface/Eris/Slots/{inventory.png => toggle.png} (100%) delete mode 100644 Resources/Textures/Interface/Minimalist/Slots/inventory.png rename Resources/Textures/Interface/{Default/Slots/inventory.png => Minimalist/Slots/toggle.png} (100%) create mode 100644 Resources/Textures/Interface/Plasmafire/Slots/toggle.png create mode 100644 Resources/Textures/Interface/Retro/Slots/toggle.png create mode 100644 Resources/Textures/Interface/Slimecore/Slots/toggle.png diff --git a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml index 5c09574005b..54aeffe72c9 100644 --- a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml +++ b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml @@ -8,6 +8,7 @@ xmlns:widgets="clr-namespace:Content.Client.UserInterface.Systems.Ghost.Widgets" xmlns:hotbar="clr-namespace:Content.Client.UserInterface.Systems.Hotbar.Widgets" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" + xmlns:inventory="clr-namespace:Content.Client.UserInterface.Systems.Inventory.Widgets" Name="DefaultHud" VerticalExpand="False" VerticalAlignment="Bottom" @@ -25,6 +26,7 @@ + diff --git a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs index a8a53e83c78..0fb1b7d507f 100644 --- a/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/DefaultGameScreen.xaml.cs @@ -18,6 +18,7 @@ public DefaultGameScreen() SetAnchorPreset(ViewportContainer, LayoutPreset.Wide); SetAnchorAndMarginPreset(TopLeft, LayoutPreset.TopLeft, margin: 10); SetAnchorAndMarginPreset(Ghost, LayoutPreset.BottomWide, margin: 80); + SetAnchorAndMarginPreset(Inventory, LayoutPreset.BottomLeft, margin: 5); SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5); SetAnchorAndMarginPreset(Chat, LayoutPreset.TopRight, margin: 10); SetAnchorAndMarginPreset(Alerts, LayoutPreset.TopRight, margin: 10); diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml index d62ad33dfc1..7f1d1bcd5b1 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml @@ -9,6 +9,7 @@ xmlns:widgets="clr-namespace:Content.Client.UserInterface.Systems.Ghost.Widgets" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" xmlns:graphics="clr-namespace:Robust.Client.Graphics;assembly=Robust.Client" + xmlns:inventory="clr-namespace:Content.Client.UserInterface.Systems.Inventory.Widgets" Name="SeparatedChatHud" VerticalExpand="False" VerticalAlignment="Bottom" @@ -17,7 +18,8 @@ - + + diff --git a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs index 7816cf1be19..45a29e03f1d 100644 --- a/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs +++ b/Content.Client/UserInterface/Screens/SeparatedChatGameScreen.xaml.cs @@ -18,6 +18,7 @@ public SeparatedChatGameScreen() SetAnchorPreset(ScreenContainer, LayoutPreset.Wide); SetAnchorPreset(ViewportContainer, LayoutPreset.Wide); SetAnchorPreset(MainViewport, LayoutPreset.Wide); + SetAnchorAndMarginPreset(Inventory, LayoutPreset.BottomLeft, margin: 5); SetAnchorAndMarginPreset(TopLeftContainer, LayoutPreset.TopLeft, margin: 10); SetAnchorAndMarginPreset(Ghost, LayoutPreset.BottomWide, margin: 80); SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5); diff --git a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs index 397da978d8a..daececcd35a 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs +++ b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs @@ -4,6 +4,7 @@ using Content.Client.UserInterface.Systems.Hotbar.Widgets; using Content.Client.UserInterface.Systems.Inventory; using Content.Client.UserInterface.Systems.Inventory.Controls; +using Content.Client.UserInterface.Systems.Inventory.Widgets; using Content.Client.UserInterface.Systems.Storage; using Content.Client.UserInterface.Systems.Storage.Controls; using Robust.Client.UserInterface; @@ -30,13 +31,12 @@ private void OnScreenLoad() ReloadHotbar(); } - public void Setup(HandsContainer handsContainer, ItemSlotButtonContainer inventoryBar, ItemStatusPanel handStatus, StorageContainer storageContainer) + public void Setup(HandsContainer handsContainer, ItemStatusPanel handStatus, StorageContainer storageContainer) { _inventory = UIManager.GetUIController(); _hands = UIManager.GetUIController(); _storage = UIManager.GetUIController(); _hands.RegisterHandContainer(handsContainer); - _inventory.RegisterInventoryBarContainer(inventoryBar); _storage.RegisterStorageContainer(storageContainer); } @@ -47,25 +47,35 @@ public void ReloadHotbar() return; } - var hotbar = UIManager.ActiveScreen.GetWidget(); + if (UIManager.ActiveScreen.GetWidget() is { } hotbar) + { + foreach (var container in GetAllItemSlotContainers(hotbar)) + { + // Yes, this is dirty. + container.SlotGroup = container.SlotGroup; + } + } - if (hotbar == null) + _hands?.ReloadHands(); + _inventory?.ReloadSlots(); + + //todo move this over to its own hellhole + var inventory = UIManager.ActiveScreen.GetWidget(); + if (inventory == null) { return; } - foreach (var container in GetAllItemSlotContainers(hotbar)) + foreach (var container in GetAllItemSlotContainers(inventory)) { // Yes, this is dirty. container.SlotGroup = container.SlotGroup; } - _hands?.ReloadHands(); - _inventory?.ReloadSlots(); - _inventory?.RegisterInventoryBarContainer(hotbar.InventoryHotbar); + _inventory?.RegisterInventoryBarContainer(inventory.InventoryHotbar); } - private IEnumerable GetAllItemSlotContainers(Control gui) + private static IEnumerable GetAllItemSlotContainers(Control gui) { var result = new List(); diff --git a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml index 04b606de080..0e9f0c77f97 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml +++ b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml @@ -5,38 +5,26 @@ xmlns:hands="clr-namespace:Content.Client.UserInterface.Systems.Hands.Controls" xmlns:widgets="clr-namespace:Content.Client.UserInterface.Systems.Hotbar.Widgets" Name="HotbarInterface" - VerticalExpand="False" + VerticalExpand="True" VerticalAlignment="Bottom" Orientation="Vertical" HorizontalAlignment="Center"> - - - - - - - + + + + + + (); - hotbarController.Setup(HandContainer, InventoryHotbar, StatusPanel, StoragePanel); + hotbarController.Setup(HandContainer, StatusPanel, StoragePanel); LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin); } diff --git a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs index d44a4a2d765..df45ceabf62 100644 --- a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs +++ b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs @@ -16,6 +16,14 @@ public abstract class ItemSlotUIContainer : GridContainer, IItemslotUIContain { protected readonly Dictionary Buttons = new(); + private int? _maxColumns; + + public int? MaxColumns + { + get => _maxColumns; + set => _maxColumns = value; + } + public virtual bool TryAddButton(T newButton, out T button) { var tempButton = AddButton(newButton); @@ -68,7 +76,7 @@ public bool TryAddButton(SlotControl control) { if (!Children.Contains(newButton) && newButton.Parent == null && newButton.SlotName != "") AddChild(newButton); - Columns = ChildCount; + Columns = _maxColumns ?? ChildCount; return AddButtonToDict(newButton); } diff --git a/Content.Client/UserInterface/Systems/Inventory/InventoryUIController.cs b/Content.Client/UserInterface/Systems/Inventory/InventoryUIController.cs index 59beaa5a029..8af68282f30 100644 --- a/Content.Client/UserInterface/Systems/Inventory/InventoryUIController.cs +++ b/Content.Client/UserInterface/Systems/Inventory/InventoryUIController.cs @@ -1,8 +1,12 @@ +using System.Linq; +using System.Numerics; using Content.Client.Gameplay; using Content.Client.Hands.Systems; using Content.Client.Inventory; using Content.Client.UserInterface.Controls; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.UserInterface.Systems.Inventory.Controls; +using Content.Client.UserInterface.Systems.Inventory.Widgets; using Content.Client.UserInterface.Systems.Inventory.Windows; using Content.Shared.Hands.Components; using Content.Shared.Input; @@ -16,7 +20,6 @@ using Robust.Shared.Map; using Robust.Shared.Utility; using static Content.Client.Inventory.ClientInventorySystem; -using static Robust.Client.UserInterface.Controls.BaseButton; namespace Content.Client.UserInterface.Systems.Inventory; @@ -35,9 +38,26 @@ public sealed class InventoryUIController : UIController, IOnStateEntered UIManager.ActiveScreen?.GetWidget()?.InventoryButton; + private SlotButton? _inventoryButton; - private SlotControl? _lastHovered = null; + private SlotControl? _lastHovered; + + public override void Initialize() + { + base.Initialize(); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + } + + private void OnScreenLoad() + { + if (UIManager.ActiveScreen == null) + return; + + var inventoryGui = UIManager.GetActiveUIWidget(); + RegisterInventoryButton(inventoryGui.InventoryButton); + } public void OnStateEntered(GameplayState state) { @@ -67,26 +87,6 @@ public void OnStateExited(GameplayState state) CommandBinds.Unregister(); } - public void UnloadButton() - { - if (InventoryButton == null) - { - return; - } - - InventoryButton.OnPressed -= InventoryButtonPressed; - } - - public void LoadButton() - { - if (InventoryButton == null) - { - return; - } - - InventoryButton.OnPressed += InventoryButtonPressed; - } - private SlotButton CreateSlotButton(SlotData data) { var button = new SlotButton(data); @@ -102,8 +102,25 @@ public void RegisterInventoryBarContainer(ItemSlotButtonContainer inventoryHotba _inventoryHotbar = inventoryHotbar; } - private void InventoryButtonPressed(ButtonEventArgs args) + public void RegisterInventoryButton(SlotButton? button) + { + if (_inventoryButton != null) + { + _inventoryButton.Pressed -= InventoryButtonPressed; + } + + if (button != null) + { + _inventoryButton = button; + _inventoryButton.Pressed += InventoryButtonPressed; + } + } + + private void InventoryButtonPressed(GUIBoundKeyEventArgs args, SlotControl control) { + if (args.Function != EngineKeyFunctions.UIClick) + return; + ToggleInventoryBar(); } @@ -130,6 +147,52 @@ private void UpdateInventoryHotbar(InventorySlotsComponent? clientInv) var update = new SlotSpriteUpdate(data.HeldEntity, data.SlotGroup, data.SlotName, showStorage); SpriteUpdated(update); } + + if (_inventoryHotbar == null) + return; + + var clothing = clientInv.SlotData.Where(p => !p.Value.HasSlotGroup).ToList(); + + if (_inventoryButton != null) + _inventoryButton.Visible = clothing.Count != 0; + if (clothing.Count == 0) + return; + + foreach (var child in new List(_inventoryHotbar.Children)) + { + if (child is not SlotControl) + _inventoryHotbar.RemoveChild(child); + } + + var maxWidth = clothing.Max(p => p.Value.ButtonOffset.X) + 1; + var maxIndex = clothing.Select(p => GetIndex(p.Value.ButtonOffset)).Max(); + + _inventoryHotbar.MaxColumns = maxWidth; + _inventoryHotbar.Columns = maxWidth; + + for (var i = 0; i <= maxIndex; i++) + { + var index = i; + if (clothing.FirstOrNull(p => GetIndex(p.Value.ButtonOffset) == index) is { } pair) + { + if (_inventoryHotbar.TryGetButton(pair.Key, out var slot)) + slot.SetPositionLast(); + } + else + { + _inventoryHotbar.AddChild(new Control + { + MinSize = new Vector2(64, 64) + }); + } + } + + return; + + int GetIndex(Vector2i position) + { + return position.Y * maxWidth + position.X; + } } private void UpdateStrippingWindow(InventorySlotsComponent? clientInv) @@ -178,18 +241,7 @@ public void ToggleInventoryBar() } UpdateInventoryHotbar(_playerInventory); - if (_inventoryHotbar.Visible) - { - _inventoryHotbar.Visible = false; - if (InventoryButton != null) - InventoryButton.Pressed = false; - } - else - { - _inventoryHotbar.Visible = true; - if (InventoryButton != null) - InventoryButton.Pressed = true; - } + _inventoryHotbar.Visible = !_inventoryHotbar.Visible; } // Neuron Activation diff --git a/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml b/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml new file mode 100644 index 00000000000..576d06d8161 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml @@ -0,0 +1,30 @@ + + + + + + diff --git a/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml.cs b/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml.cs new file mode 100644 index 00000000000..90154c5a9fa --- /dev/null +++ b/Content.Client/UserInterface/Systems/Inventory/Widgets/InventoryGui.xaml.cs @@ -0,0 +1,19 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.UserInterface.Systems.Inventory.Widgets; + +[GenerateTypedNameReferences] +public sealed partial class InventoryGui : UIWidget +{ + public InventoryGui() + { + RobustXamlLoader.Load(this); + + var inventoryUIController = UserInterfaceManager.GetUIController(); + inventoryUIController.RegisterInventoryBarContainer(InventoryHotbar); + + LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin); + } +} diff --git a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs index b399e83fc61..1505db48a79 100644 --- a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs +++ b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs @@ -6,7 +6,6 @@ using Content.Client.UserInterface.Systems.EscapeMenu; using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.UserInterface.Systems.Guidebook; -using Content.Client.UserInterface.Systems.Inventory; using Content.Client.UserInterface.Systems.MenuBar.Widgets; using Content.Client.UserInterface.Systems.Sandbox; using Robust.Client.UserInterface.Controllers; @@ -16,7 +15,6 @@ namespace Content.Client.UserInterface.Systems.MenuBar; public sealed class GameTopMenuBarUIController : UIController { [Dependency] private readonly EscapeUIController _escape = default!; - [Dependency] private readonly InventoryUIController _inventory = default!; [Dependency] private readonly AdminUIController _admin = default!; [Dependency] private readonly CharacterUIController _character = default!; [Dependency] private readonly CraftingUIController _crafting = default!; @@ -40,7 +38,6 @@ public void UnloadButtons() { _escape.UnloadButton(); _guidebook.UnloadButton(); - _inventory.UnloadButton(); _admin.UnloadButton(); _character.UnloadButton(); _crafting.UnloadButton(); @@ -53,7 +50,6 @@ public void LoadButtons() { _escape.LoadButton(); _guidebook.LoadButton(); - _inventory.LoadButton(); _admin.LoadButton(); _character.LoadButton(); _crafting.LoadButton(); diff --git a/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml b/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml index 6765699531b..3c8cd1d164f 100644 --- a/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml +++ b/Content.Client/UserInterface/Systems/MenuBar/Widgets/GameTopMenuBar.xaml @@ -43,16 +43,6 @@ HorizontalExpand="True" AppendStyleClass="{x:Static style:StyleBase.ButtonSquare}" /> - Px&%Sl8*R9J=OS3zqVM-={SYb7fyFCJ9wdW!_MQNWlbmmDH6&Luw}KOxZmfwact zVxQuhaY+w3w)D_La%dsPo_YudU0h1KHH9vA!J^Y$*_ohfoJu37J&b3)yV{l2#-z}G zAa=yQdGC8~-h1;F_`hR9E#{`t{Oyl$4Yj^XMD?Dp8xzX-M<3dttv>8(K73v!lDcWD zk0;-pAO}cR>cy8&sjW5z95D5_H=fjUXQfP;FHk8#5&#ey4>+*8aEP z?`*6((f40`w&#BO^w?m&K)Z{JBT#2vyrTLU26QNU%CL`1g{3JiiBVT ztZy`&?X9M}zR_?hwg#(+(8#zK=2t?%!GKGgbE6(;-)2%NSczv3d zrj7@XseP|u(2)d)r2&7Y8(+RT+!FTpc#NEigh8f2h%{kW^D*P!c^&+4j7Dk_M*Dy| z_o(5e`BM0cdZ*-7G&<}I%omx)fvhSpwOeUkjzZe|`a;1G`H5J_qQ-%gBhZc9ExVSF zC7kjutskgJoHwBu>{=cy5YDg1!p$N+L?D?=S%$M@l0=B9CDSQ})FZg8+{VQ?deW0{ zM7jMPjH4%&z`Ml1PGIOde(|E~-ndb6fM^JZGdv6Qs2?^WVruXXd+zG(8EzF}j3hu? zeV95>n=A0()xZT1w&VRho?0DAL=7t)^~D0;-{Y|>c!VgC zM5H_h0Cfj2U&ubv?0{Gr+TW)TP*X7gJU=|OKmNd`wAIIQHO~QHR3k}Z_4Z8I64j*r z$>(y?R+Dh_nPx(E=fc|R9J=WmqBb3M-+y?_jbLGZM>U;o015j7Fr5D6p0|gfqT^(y|xmZQH9iF zZ&hzSR*I^egT%R9TB-L|B^9WbN`_JhDj|drlGu)8?09B+SbJl89h+WqX@6(^ME zo5%0HxHvaY7>1NeQ+>hKTA;_TAsF;eRmrv|hQ^lv{v$c}2M05mER{;7kJR&og2|;w z22uAK7~_(-h&-3BT~(=w1k@r?gr-4lig;6Y_33U^~G=johmdNbu!r;L6E0Wt5EkESU2k79U@>d3<*pQeg6z1 zf{5UpO9({L6FTR}<_kFIl6wm0FOs`orsXwoJ@-6%^cNSdU)x_mwN{D!7opkQBYaig zMnpLL_OW;!xHxMBUM@Z1Red{|qxq^%CX;2Y{u~vDb;8S+arL_7i*xg=t*yv_IS>{j za>WQy4;&PykD#iQP8^TLSnvsw0}CQT>BRAPu}vR|9Z`>|!dryJh$xDNk^`g!n5`D} zw{Fo1&Df`%r%)X zA?_Ys^qdEh2VqZ$D1spBrMh1)QWl5^_2&aOxPjk6>@!|ptB}cLlP>sL0(?K9-EMUn z$`F$MFfiVo2l#gt0Fvjv52O3Z(0J!!Rii49S_9TvoHg;$5n{!nPREL{v=id)9M;;A z6-WtaKKz}Dch6yr!J0PJm36|I(s&C11gb0RIBPJ*5M=Y%`(?bzps)Xr6i}^IFn4YP zP&j`PQIE><^SCjMfwP8S;tN~$an_A%VURm}-Gklz9!V0l5)hdrY9k;rNf6O=0%)vTr3pNGxlKwbYkFCh z(b?y7D+N(00?&F+$y@ixaUE*{Nt|%9$Ac5AEo3DCXGxflZfPE!P1@0HkEDx8R3@Ob zqS57unww32E>f0eY$rBlYRXCg^X@bpO5>EB`z^oFS@195f7loKn@!A4KoKL2ql6ls zdmE%kQ5ch(IplcG@&qvdG@$^zGzpNm8c-id5O&gDR0ov^VD#cJ97jCAYn#nEyX%V~ zx10U6tF06k5|Co@9(X(j2t2$T@jIDk4i?=cx!zvmcGw430r$_VgHi;ZyzX$}nYbmm znVhMqcBS~&?rzcP$Dh>*Y(0NS{)SKSIOZfE!S4F*yc6H0R%e6aAf9@UdVrtKtH<=` z`$c&I7~O24#L zkbtcFWhMJUB?4)3GioylcC_FeFzsfa;ja>b^Dn=77lZ?J#+pVomlf>MSErh{WbB5O z2tab4V><=H@!xT20$2^$nt!}Mw%S`yL)pu>U$pt(b{wPq*Qc{We{`4c0qEqzX<^$k zk_7trN|jIZRev3u1HI)b*R#6r2e=y?9S)S17n7Sxe{yN4O>-4>pBL5oMMVDr4WDP- T#*Ir100000NkvXXu0mjf(qS}G diff --git a/Resources/Textures/Interface/Default/Slots/inventory.png b/Resources/Textures/Interface/Minimalist/Slots/toggle.png similarity index 100% rename from Resources/Textures/Interface/Default/Slots/inventory.png rename to Resources/Textures/Interface/Minimalist/Slots/toggle.png diff --git a/Resources/Textures/Interface/Plasmafire/Slots/toggle.png b/Resources/Textures/Interface/Plasmafire/Slots/toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..0af8cb9fd19924ab75665e865e58047de85f7949 GIT binary patch literal 1305 zcmV+!1?KvRP)Px((@8`@R9J=Om(On#M-<0DGrQ}=4)Ko|L^g$nCPax)L_yFCb6a;bjl{irdtR2Tc;@#OEX4kQkP0~uG z7oIfQ^?PsT``(-HoAJV%E+TvxN)Fulzrp9qizh?~ZpZt&t}f4xHeWNS6+FK4Q49DmGx+p1$ADp&{nwXgM?Xpq%$V(l_cMd^^z1*JPG|G~6Yi5h2DP4^%G>R(Q`aVoOKo@^ z6)+5Q1E5rLFa^X+h*|LUvAk`VAmz@PDg~YkKi``umYeXxg?-61XD?3_0si<#2eMM@ zoM(0}qJk=<>5`C)!B>ZJ_S<97-3Lh8`ld~MKtcT_d{5rKa7%+aC5MszG}GsD_SCh> z;`F(keIO3Swy7OC$sol_$)R3xINzVMoeCHRxHWJa;BG{WhPE39I2E{ZB5$W+kg#C- zT+Tjwd7`+ms<{w8cdbAwlO}0_A$8mQbsLVI2CH{#$l*kAU%|cG+TW1Smr3*c=Q{JZ zvf6Fx+GMfX+$Dgp0&9+g(FO7l?2AF83HNWp&{)Ja1m!Q>2kAjPrpdcrcKGD#WP7y% z$o8dqzOcG`1+tkmnQpz%S_9UqkV!z{ZUDYDfFOuhRp?DXDi)Bf)|qXTL{^}>=J4I& zyln`LrahozaxWso;09daadn-@M{iH;IM_$N-2_NbNs^FdAqR@ z96W{|GxIFmDfJ(};MwRo!;*NDh3OxnT_t!}4=YLL?j? z*U!|@CP>JG)G&N-1WJWqOFSJwy#d2R@R^shuRNV78ao`L9Rc`CA%#MU09K;t@c*$rgJe4(s*66mUR9tg(#)LP~w(wqLtG(bq7$`1tyYR{p=J zfKm$AQ@Bb`^a4`34&d%RnvVAOg88n}?_mY}h$Oag;Md2enm>%(py5K(gTg$#1BexN z-v%Fi59a5=^`PNGss}DTm?(mS5dWYHlu|Uz-q|1LCmBeNo!4bTNcnbP@ zq1l9A7AA`|4@5j%dyg&m|JEdh#A3fUP^xM+*OJyfXrXU%izx8OPg%KG5!1Wh%u`~OJxm}n$ z*{*N3_+G6DEuyva&GX#YjaN^I`sQc_a3*#5=JnFE_x@a+i@Bn0AwK{PZn|yyAh57? zqnK`?{{{b)9iieiHlmV?{4_ItUv@hC_z|tJlin3VZPf*zV|$${Z;<>AQOWzozZOX| P00000NkvXXu0mjfPx%KS@MER9J=Wm%(b=Fc`=GvJ-mHhKoyBArJ@za@Yy2pk+I>hd>}O2nkB84@P9`$|Xk-JzJe}CP_;?61nKcT7!u-?c{hD8#XSWSy@`=p{Bfs!j zZ!Uwv3abFX8)bz0)Y_2+tYpXl+?GM=02K3gJqL~#8$;ubgRcvpmLUcse|U2l%yba- z0Mw`5l>_vWqvuzI7|(etqLvyky9#;;jKXTaMkDpn1eIlPc}j1RZcJJyTX208QoZ))VT1f2$vLMsa{0$kvs17>4~wlX53P2~FaaBwi#3bz}kl+4KbhiK^uO40jh`b1$EjK=BlE`C{ zU4!4FtN?6(M7D9V)FNa7TekBq$mSdr1o&ZBTx^~%`?4J?`vWsT3Xvp8K)Q4LH_JMp z!MGlv0>ny|#?=59=eNqfkOhy)`6v|u(yg+*Yke|RoH=p;GMRyohkHGokTb}KG2m|; f&7>dEe*wS)T$|z}^65~n00000NkvXXu0mjfMI$A4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Slimecore/Slots/toggle.png b/Resources/Textures/Interface/Slimecore/Slots/toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..995926db1384344c483cc5884676698ab55ddb4b GIT binary patch literal 1154 zcmV-|1bzF7P)Px(JV``BR9J=Wmpg16MHt6_-|W-AyFL4yI8hX1M1zDxlPV^H(gg(~G*na+sZ*pz z)D*5MQqh2fK%zhbi7Hr5Lqi%M0pY}0(ZxRJ9$w$=V?K)Yo$q{)IE@?lq?Kl8X6OH( z|9p>G_^+Gv8_QR(=y`+JcXq|?gGW)sn;$Qp8~B5}2XGa2`yGAo&5iAIA#mgNDw`WE z+~Lm6jcuYR;=-lnk;&HDq9M-o6*V7uHOA0$suQRF^V=_jwtITe3j>vVQ0K$ebTPyFcklQW-n{7b>8pgB!Tm)Y96GnO{Ddsz6*XfoE&O^X*LJDPdi5gz;3&Xh_JLW zhgC&I5LJu_dyiwf?e1WWq|?O<1G)<4T4TDcSf@s}RsR>7i z1}he;mW7o$0Q_k2Bn(wRlptE*;u}iRDiVxUMZ{oJOQi;^TlCiz*qiLZV+3#uC&Dq1 zT2y2lxNrTofM2bFo)A%^U<|l+Ec*@H*b#^bamPE|ISxK-10tj2M{O4`37Oa$D( zC+j76;iV z6-2zXB06Rj7O_RmNPj*izf|0c&@#rDK`MSBfj|Fv$c0PG$G4&;0PSN%&SJj%1b}$x z{@8f7H?fF~5h$+8+Y{K%sKaM45gDm~BV%xWKPC_E9?)vFMry&i|C$Yh|8D^Q0;{h7 Uq$Fs8{Qv*}07*qoM6N<$f={p Date: Sat, 23 Dec 2023 01:32:56 -0500 Subject: [PATCH 12/38] Move HUD options to general options tab (#22884) --- .../Options/UI/Tabs/GraphicsTab.xaml | 10 --- .../Options/UI/Tabs/GraphicsTab.xaml.cs | 60 +---------------- Content.Client/Options/UI/Tabs/MiscTab.xaml | 13 ++++ .../Options/UI/Tabs/MiscTab.xaml.cs | 67 +++++++++++++++++-- Content.Shared/HUD/HudThemePrototype.cs | 13 +++- .../en-US/escape-menu/ui/options-menu.ftl | 7 +- Resources/Prototypes/hud.yml | 9 ++- 7 files changed, 101 insertions(+), 78 deletions(-) diff --git a/Content.Client/Options/UI/Tabs/GraphicsTab.xaml b/Content.Client/Options/UI/Tabs/GraphicsTab.xaml index 74a0c78c526..118b85b87ba 100644 --- a/Content.Client/Options/UI/Tabs/GraphicsTab.xaml +++ b/Content.Client/Options/UI/Tabs/GraphicsTab.xaml @@ -15,11 +15,6 @@ - - @@ -38,11 +33,6 @@ Rounded="True" MinWidth="200" /> - - diff --git a/Content.Client/Options/UI/Tabs/GraphicsTab.xaml.cs b/Content.Client/Options/UI/Tabs/GraphicsTab.xaml.cs index 1773b2abe5d..3113e644bac 100644 --- a/Content.Client/Options/UI/Tabs/GraphicsTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/GraphicsTab.xaml.cs @@ -1,6 +1,4 @@ -using Content.Client.UserInterface.Screens; using Content.Shared.CCVar; -using Content.Shared.HUD; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface; @@ -8,7 +6,6 @@ using Robust.Client.UserInterface.XAML; using Robust.Shared; using Robust.Shared.Configuration; -using Robust.Shared.Prototypes; namespace Content.Client.Options.UI.Tabs { @@ -26,10 +23,7 @@ public sealed partial class GraphicsTab : Control 2f }; - private Dictionary hudThemeIdToIndex = new(); - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public GraphicsTab() { @@ -55,34 +49,6 @@ public GraphicsTab() UIScaleOption.AddItem(Loc.GetString("ui-options-scale-200")); UIScaleOption.OnItemSelected += OnUIScaleChanged; - foreach (var gear in _prototypeManager.EnumeratePrototypes()) - { - HudThemeOption.AddItem(Loc.GetString(gear.Name)); - hudThemeIdToIndex.Add(gear.ID, HudThemeOption.GetItemId(HudThemeOption.ItemCount - 1)); - } - HudThemeOption.OnItemSelected += OnHudThemeChanged; - - var hudLayout = _cfg.GetCVar(CCVars.UILayout); - var id = 0; - foreach (var layout in Enum.GetValues(typeof(ScreenType))) - { - var name = layout.ToString()!; - HudLayoutOption.AddItem(name, id); - if (name == hudLayout) - { - HudLayoutOption.SelectId(id); - } - HudLayoutOption.SetItemMetadata(id, name); - - id++; - } - - HudLayoutOption.OnItemSelected += args => - { - HudLayoutOption.SelectId(args.Id); - UpdateApplyButton(); - }; - ViewportStretchCheckBox.OnToggled += _ => { UpdateViewportScale(); @@ -110,7 +76,6 @@ public GraphicsTab() FullscreenCheckBox.Pressed = ConfigIsFullscreen; LightingPresetOption.SelectId(GetConfigLightingQuality()); UIScaleOption.SelectId(GetConfigUIScalePreset(ConfigUIScale)); - HudThemeOption.SelectId(hudThemeIdToIndex.GetValueOrDefault(_cfg.GetCVar(CVars.InterfaceTheme), 0)); ViewportScaleSlider.Value = _cfg.GetCVar(CCVars.ViewportFixedScaleFactor); ViewportStretchCheckBox.Pressed = _cfg.GetCVar(CCVars.ViewportStretch); IntegerScalingCheckBox.Pressed = _cfg.GetCVar(CCVars.ViewportSnapToleranceMargin) != 0; @@ -134,25 +99,11 @@ private void OnUIScaleChanged(OptionButton.ItemSelectedEventArgs args) UpdateApplyButton(); } - private void OnHudThemeChanged(OptionButton.ItemSelectedEventArgs args) - { - HudThemeOption.SelectId(args.Id); - UpdateApplyButton(); - } - private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) { _cfg.SetCVar(CVars.DisplayVSync, VSyncCheckBox.Pressed); SetConfigLightingQuality(LightingPresetOption.SelectedId); - foreach (var theme in _prototypeManager.EnumeratePrototypes()) - { - if (hudThemeIdToIndex[theme.ID] != HudThemeOption.SelectedId) - continue; - _cfg.SetCVar(CVars.InterfaceTheme, theme.ID); - break; - } - _cfg.SetCVar(CVars.DisplayWindowMode, (int) (FullscreenCheckBox.Pressed ? WindowMode.Fullscreen : WindowMode.Windowed)); _cfg.SetCVar(CVars.DisplayUIScale, UIScaleOptions[UIScaleOption.SelectedId]); @@ -165,11 +116,6 @@ private void OnApplyButtonPressed(BaseButton.ButtonEventArgs args) _cfg.SetCVar(CCVars.HudFpsCounterVisible, FpsCounterCheckBox.Pressed); _cfg.SetCVar(CCVars.ViewportWidth, (int) ViewportWidthSlider.Value); - if (HudLayoutOption.SelectedMetadata is string opt) - { - _cfg.SetCVar(CCVars.UILayout, opt); - } - _cfg.SaveToFile(); UpdateApplyButton(); } @@ -190,7 +136,6 @@ private void UpdateApplyButton() var isVSyncSame = VSyncCheckBox.Pressed == _cfg.GetCVar(CVars.DisplayVSync); var isFullscreenSame = FullscreenCheckBox.Pressed == ConfigIsFullscreen; var isLightingQualitySame = LightingPresetOption.SelectedId == GetConfigLightingQuality(); - var isHudThemeSame = HudThemeOption.SelectedId == hudThemeIdToIndex.GetValueOrDefault(_cfg.GetCVar(CVars.InterfaceTheme), 0); var isUIScaleSame = MathHelper.CloseToPercent(UIScaleOptions[UIScaleOption.SelectedId], ConfigUIScale); var isVPStretchSame = ViewportStretchCheckBox.Pressed == _cfg.GetCVar(CCVars.ViewportStretch); var isVPScaleSame = (int) ViewportScaleSlider.Value == _cfg.GetCVar(CCVars.ViewportFixedScaleFactor); @@ -199,7 +144,6 @@ private void UpdateApplyButton() var isPLQSame = ParallaxLowQualityCheckBox.Pressed == _cfg.GetCVar(CCVars.ParallaxLowQuality); var isFpsCounterVisibleSame = FpsCounterCheckBox.Pressed == _cfg.GetCVar(CCVars.HudFpsCounterVisible); var isWidthSame = (int) ViewportWidthSlider.Value == _cfg.GetCVar(CCVars.ViewportWidth); - var isLayoutSame = HudLayoutOption.SelectedMetadata is string opt && opt == _cfg.GetCVar(CCVars.UILayout); ApplyButton.Disabled = isVSyncSame && isFullscreenSame && @@ -210,10 +154,8 @@ private void UpdateApplyButton() isIntegerScalingSame && isVPResSame && isPLQSame && - isHudThemeSame && isFpsCounterVisibleSame && - isWidthSame && - isLayoutSame; + isWidthSame; } private bool ConfigIsFullscreen => diff --git a/Content.Client/Options/UI/Tabs/MiscTab.xaml b/Content.Client/Options/UI/Tabs/MiscTab.xaml index 8097578d8e8..34712e5e2f2 100644 --- a/Content.Client/Options/UI/Tabs/MiscTab.xaml +++ b/Content.Client/Options/UI/Tabs/MiscTab.xaml @@ -5,6 +5,19 @@ xmlns:s="clr-namespace:Content.Client.Stylesheets"> +