From 366e35e39acbd29fa82c3899098cd920f0671452 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sun, 20 Oct 2024 17:30:04 +0000 Subject: [PATCH 001/173] remove salt from salvage (#2027) remove salt Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml | 4 ++-- Resources/Prototypes/Procedural/salvage_loot.yml | 2 +- Resources/Prototypes/ore.yml | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml index 661350f6de6..de70e2d5ecd 100644 --- a/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml +++ b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml @@ -3,8 +3,8 @@ weights: OreIron: 1.0 OreQuartz: 1.0 - OreCoal: 0.33 - OreSalt: 0.25 + OreCoal: 0.58 # DeltaV: was 0.33, added 0.25 from salt + #OreSalt: 0.25 # DeltaV: removed salt, added weight to coal OreGold: 0.25 OreSilver: 0.25 OrePlasma: 0.20 diff --git a/Resources/Prototypes/Procedural/salvage_loot.yml b/Resources/Prototypes/Procedural/salvage_loot.yml index 68bfcd89573..c29cc2ef158 100644 --- a/Resources/Prototypes/Procedural/salvage_loot.yml +++ b/Resources/Prototypes/Procedural/salvage_loot.yml @@ -139,7 +139,7 @@ guaranteed: true loots: - !type:BiomeMarkerLoot - proto: OreSalt + proto: OreCoal # DeltaV: replace salt with coal # - Medium value - type: salvageLoot diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml index 5beda7a2098..3fa2507392c 100644 --- a/Resources/Prototypes/ore.yml +++ b/Resources/Prototypes/ore.yml @@ -90,7 +90,7 @@ id: RandomOreDistributionStandard weights: OreSteel: 10 - OreCoal: 10 + OreCoal: 12 # DeltaV: increased slightly from 10 so there is a surplus to give to chem OreSpaceQuartz: 8 OreGold: 2 OrePlasma: 4 @@ -98,7 +98,6 @@ OreUranium: 1 OreBananium: 0.5 OreArtifactFragment: 0.5 - OreSalt: 5 #Delta V - Adds so our rocks can spawn salt - type: weightedRandomOre id: OreCrab From 8261f82c1aab11212fed80773b11169379257dee Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Sun, 20 Oct 2024 19:30:23 +0200 Subject: [PATCH 002/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 436d1247939..da51e7964ed 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: leonardo-dabepis - changes: - - message: Switched logos around - type: Tweak - id: 116 - time: '2023-11-01T22:45:55.0000000+00:00' - author: TJohnson changes: - message: Security has received new models of hardsuit! @@ -3679,3 +3673,10 @@ id: 615 time: '2024-10-20T16:02:51.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2026 +- author: deltanedas + changes: + - message: Removed salt ore in favour of coal. Give the chemists carbon! + type: Remove + id: 616 + time: '2024-10-20T17:30:04.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2027 From 7da26af70e4d99c2d63682386e1f1d3c9b8a2696 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sun, 20 Oct 2024 17:47:16 +0000 Subject: [PATCH 003/173] replace mantis bag prototypes with starting gear (#2030) Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../en-US/deltav/preferences/loadout-groups.ftl | 1 - .../Fills/Backpacks/StarterGear/backpack.yml | 13 ------------- .../Fills/Backpacks/StarterGear/duffelbag.yml | 13 ------------- .../Fills/Backpacks/StarterGear/satchel.yml | 13 ------------- .../Loadouts/Jobs/Epistemics/forensicmantis.yml | 16 ---------------- .../Nyanotrasen/Loadouts/loadout_groups.yml | 8 -------- .../Nyanotrasen/Loadouts/role_loadouts.yml | 2 +- .../Roles/Jobs/Epistemics/forensicmantis.yml | 6 ++++++ 8 files changed, 7 insertions(+), 65 deletions(-) delete mode 100644 Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml delete mode 100644 Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml delete mode 100644 Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml diff --git a/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl b/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl index a81350ed0f0..e2833be68f9 100644 --- a/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl +++ b/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl @@ -67,7 +67,6 @@ loadout-group-scarfs = Scarf # Epistemics loadout-group-mantis-head = Mantis head loadout-group-mantis-jumpsuit = Mantis jumpsuit -loadout-group-mantis-backpack = Mantis backpack loadout-group-mantis-outerclothing = Mantis outer clothing loadout-group-mantis-shoes = Mantis shoes loadout-group-mantis-gloves = Mantis gloves diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml deleted file mode 100644 index 66b1854dafb..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackScience - id: ClothingBackpackMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml deleted file mode 100644 index 49ca0460aa5..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackDuffelScience - id: ClothingBackpackDuffelMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml deleted file mode 100644 index 9a33ad34685..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackSatchelScience - id: ClothingBackpackSatchelMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml index c6df3e71ca3..33224a158a2 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml @@ -15,22 +15,6 @@ equipment: jumpsuit: ClothingUniformSkirtMantis -# Back -- type: loadout - id: MantisBackpack - equipment: - back: ClothingBackpackMantisFilled - -- type: loadout - id: MantisSatchel - equipment: - back: ClothingBackpackSatchelMantisFilled - -- type: loadout - id: MantisDuffel - equipment: - back: ClothingBackpackDuffelMantisFilled - # OuterClothing - type: loadout id: MantisCoat diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml index 2ffcbd25368..740d034967f 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml @@ -37,14 +37,6 @@ - MantisJumpsuit - MantisJumpskirt -- type: loadoutGroup - id: MantisBackpack - name: loadout-group-mantis-backpack - loadouts: - - MantisBackpack - - MantisSatchel - - MantisDuffel - - type: loadoutGroup id: MantisOuterClothing name: loadout-group-mantis-outerclothing diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml index 0ef279f75cc..5a7f6576a80 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml @@ -18,7 +18,7 @@ - GroupTankHarness - MantisHead - MantisJumpsuit - - MantisBackpack + - ScientistBackpack - MantisOuterClothing - MantisShoes - MantisGloves diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml index f4d511f6a87..b31b6ec1b0b 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml @@ -32,3 +32,9 @@ eyes: ClothingEyesGlassesSunglasses ears: ClothingHeadsetScience # DeltaV - Mantis is part of Epistemics belt: ClothingBeltMantis + storage: + back: + - HandLabeler + - PillMindbreakerToxin + - BoxFolderGrey + - RubberStampMantis From 9c00983cad0335b859a88448e5b590921e286e54 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Mon, 21 Oct 2024 04:15:58 +0000 Subject: [PATCH 004/173] give xenos speech sounds from rmc14 (#2031) * import the sounds * give xenos speech sound --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Audio/_RMC14/Voice/Xeno/alien_talk1.ogg | Bin 0 -> 14732 bytes .../Audio/_RMC14/Voice/Xeno/alien_talk2.ogg | Bin 0 -> 18514 bytes .../Audio/_RMC14/Voice/Xeno/alien_talk3.ogg | Bin 0 -> 15117 bytes .../Audio/_RMC14/Voice/Xeno/attributions.yml | 14 ++++++++++++++ .../Prototypes/Entities/Mobs/NPCs/xeno.yml | 1 + .../_RMC14/SoundCollections/xeno_speech.yml | 6 ++++++ .../Prototypes/_RMC14/Voice/speech_sounds.yml | 8 ++++++++ 7 files changed, 29 insertions(+) create mode 100644 Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg create mode 100644 Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg create mode 100644 Resources/Audio/_RMC14/Voice/Xeno/alien_talk3.ogg create mode 100644 Resources/Audio/_RMC14/Voice/Xeno/attributions.yml create mode 100644 Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml create mode 100644 Resources/Prototypes/_RMC14/Voice/speech_sounds.yml diff --git a/Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a6cd1d901b6df6a50ddd98585e5f6a85550f745e GIT binary patch literal 14732 zcmajFWmp_d&?vgNhCpz4cXxN!#U;U=z~Y|Z5Foe{f;+)of_nl47F*mkxWirYp6{G< zf86Kx)6-L3*45S3Q$4$*ZeybjfCc=og2q9v`wC8G%Zb8}!Fam3ncIP05il~9uQveT zBNoiRdkc*EtK|PKuad76h^pT-hQ!PNRj}axQ}YH&Rr%m)&CAcm%g4sa!STvY4!x|L zEnF~oFvo& zM8OuE&@stUqEIG5Wb#l79!p%nR{$U{pCLM*0Tq*|4izvA0ANaJ;taWxj3khZ)RLef zzcE07t^)uW%BK)rs1UcMkVs>YNc*quM3u9Q)%~kn|HKsl01ZuaSyvpSe{z-p0CJu{ zbdi2^k!|#DWE^s6cqJ?#7yy8W4#Oj@Eh3*R^GgQ^ZgN`szp7EH72!W|s1Grx?X1fX zBRSv*5&x|N)Qn)PXpa8i|8a6Kff7bON|oSh_GX>|My67&AZfNjqfcU1bgSTQHfVBW zC!2E;3gu@Tpl3q)cC-8Q3{d}r=xcp`XEMFwTqpP6XJZXQA-XD`ubHupPza&QE-q8K z778h}`e<_0|1{>2 zl;H$!ql_hapOu)(O7p*Pjj_~^|7(PfD(f+X(K-7urJ1YxwX~gh=ky&;1a~t-8gvaE zsv5PF7>km%Q2+Ul0_uAyL_*82ny;G8BN(T%K>gOa=Sfu}_o{{{* zqSbr{t*kR#yffOeKo2W$s)s>yfYE%I$xQ$RT5ml*=%-p4{J-jdQ-^MH3TUwZHxb4` z0?@eN9!)al|4b9Qpn#7!^8eyZv5rQ0nr32}Mg4+D9a~frM|Oq>IE8DX$?v4eXEnoX zqRnRl)OFHJbuw!5SW2^6x(QhQzp4q+zbU>00E7~$855}(6E_9oXcQ%EhnWBph_5>` zdV?WuQy`H>F_G3T(Z(mWG$V6ABbTZC9}58UmF2ZW7kfvSc}JIe$L&QX+GeDdmSr-J z79X`$AO8PUw0{9k0|2O0z5Emoj5>#UaStTyofuc*%OsA5AMi}Jc*dq_ejSxdhv zqOhh%GxXE!X-Oh6?oD!h&bxUh7?M4NBPjKCFjX-${dHf#12m!gigTE=pTuoa^MFQn zQjm$XXi!kTtl*EPQf)B-w-RlWj>Bd)w0po%M5G);T7+W}T?-WgAVDv*@4vs|!bso% z0G}|mP#MFL%_kXmziN$g?vQ9j3zlSSPYN>RB##QxXqt<0l_*zBR=446R)Pbi6+p>0IJ#33fu(LoAXe`F#&6Rksc%mtXtd3+#v)eN5X0D5|u%{i^6d6?+a{j3x3rs3rsPA%C4qZ{j>R%s_o%n(&S{3?qr0o2DKSV{g7e;N%L4Da5lM# zo#1g=ayK#IH_-z-nec}jfCJ2QfM$AD3;enU*U)`f>#<582b}fL_6#%gurh1$Ff(vA z+3jeGb$l4*JnZ6rlyf%|NS$qBtZ_!`t315zJz;78%Pcz6;4uUAfasW*r8yZ9I-AJ< zQ)+Ols&^e`1diRD3$P(HNvj^MW3Q~ML~lMN?mKztty^qz9dC+rI2^5gP_nv7vGR6W z(z7<9A8&IaX|Lf9`~b}bJ;87QiC`3~yno@54FH6E1w}FR1{@_j#^h;3M%pF~rI@NlLv4rJa4kc$q6U2>JI+R3 z3x}$~NKTXtkQUc&VX~GXb5TR8pnMVNs}>SvQKD81Z4m+UZlUFG&3%eO9j&OcLL3VQ z+QCGvFSJEOM$xRz1RxBkDy^tmC?SS%2+v{?%R&RH3OYDrQG>3MeU+P<5>(Z=q#{(6 zvLd7Pq~ZZZ;U7u)S5=CPP^%oFs+1Kun+QP8j7>yJc2HFgij0F$Rjf_RLdaENI_Bs_ z{qyGIt&O@4{|2w5Em}0MY=jQ}rl?p9wp^71AppIk=hy{)?1 z=pUx7y5ca`?jMHbunQ_xUS7>S*5y)O4t>%>j}?Ej$`9J0n7U)Mio?-5mZc_V;=Y46 z=!v7r>2TB)%Jk4xOCsM?{m{noIQS9z+!gr=11RkYpT$y(9)v}EeH2K;7^AzV85;Ue@B%|11D{lBgh^bGp%tor+Zom#)YGQXZ*VF1Ah7|>M1 zR~h$Fiw95tHI!b@iJuqUSU9;A1b0~Y;3*MWfeMTR4c2mm+buv;%0eDXHBQUIenU_h zbOivPq2iP<07PU|Ye4W%nBHBAJ$U3eJ^(;6avU=%JZ$Z6-a87aV%Xq*_%LHY>5mqL z_Lg8aIOE>~&}5G+h51>ZL;?myKwv$be&uf{adw`z&H)8fFEoP!)?ff@EdVO2%)a5@ z^J{y5ZviOK#0V_}fLj1SKqfdca)*P9hfhFAL`*^o8WaDO;NakYfCRJ+4*u_LL!#;* z3h?^2@yZCvH4!i-Z|`VtYiw(%>*#44Z0i{88z(2FrDG;1r=epQ7;o+QNl8gTPDRH^ zOHN5aMo0g%mx7gnft;L_jFg_PtC4|`o|Ke~jDexIsk5$$ijD!=r6gmdZ76JMXl-ej z?mb=Y3KWut@rpR5Bx-^bzXQ@^->sj@j zH#!S$`hSs$8Xs`mzd8BAyiBWqzwrI|fGblPSLl% zm2a^|kDbF2ZP;D(r0d4NM?WQ$F|MaNXp(1Zen?f#2##t{nXdEz!j;;01%JD6%3V2@<{bT|LzD$T|1zHPhJGo@ulxSn&~j*q;3+EyTLQr^GH z43-);2PGClB=z6T*xGS- z`1i)zd2>LsT(l9NcB=Y31?uFwY$!0;j5oxYNXing3l+_CBV{53e#`vvN{TNRM+n(a zyMSx*kN+mOzRwh(Ue;z`1TLOG>Xtm&RxVG2jrWg#r#uGqspiHP(<<9ck;d80e7ITE z4?5xp6Y-7)aq=EzR*FCSm%@bE`o0OoPx;C15gM|%u6tX@+eWk_w2S=%C7sWSK5F;@ zx!>E@%3g-`Y`$UI1cOVs1oNUZF9Z{D=+XVLujiXW*O*wf}_-54(dtuRec(&V}8 zbSr-ZPJA_{spBq+?d}4Z{*f-6Ir6u;>vkAl+s;ZQDKT}v2g$7MtrCQzEjl3~%3hmn zj%NQL*&3@d?rOt)OIW3oRosg6L*#=b=Ewfr2J8S};ArN-p$<@pXFcx|ft!lPj=bm( z7_wWO1KxY&q$r7v_4-d}-X|ge!aSmHiK>d)Y1XZNPv7G%GQAQ1EU7Ox>cn%77mN~Z z44*u`gXwDSJEk$GbddFm$CA|PT!5_pVn-V3j1JyvRdY%^px%O4J^m`M z%g7^lRBh3f`8iqVJ9;x%tz_k>=woHAY)-PgeQfaPk-CofVxx>_Ht;Mrfv6VYXnTub z))uY=Jst9Bz~2$-GddK8H^n*iRmO>_DjPBI)^ZDX(TA|Y#qg?fw+rmt>mJqC%tWgw zbHJyD0Ks!lHSPwR;X0cPDNe)+m&Y-=F>7ik3HY|GkjG!mwBFZYxOi!&PqNWXM;AVv zmMnIaQcifMQIlUR%jd$=ktDr5WeFNxNxp0cuJT-U+80dTeO@XO_!gdPHQJ5_V7wczcZF+x zWNl&aWGGf25q99E!&f}ew{lw4n(h;6P%e(>hiwr2bpl8q%G|PDI=_^fMv|$U+#RY; z7n$EF@hGUZ4(;=`^e#H)N)_ww6O)F^sljsGHG3_ZQ)ZcWYujpq0sxXm#KlXI^ zR0VT|MSwUlkD3a%(aaTjBe5X@J0uykE5nV87Knn|5NtdUj?R1b7ld-n=sL)^#DZe2 zn3#?gUrU4Yz|cD)+M986=#=?hs7PtViXpCaFx-Ma@cU!hVoN%J=*6YCJo_+hq@#Gt zzn1D@cuV1f4@>)tG`iVH`@;h{BIMCD4yWtviUDJcR(eSv=7s3-Q0|2!_UJ`98rVK{ z?ZaZGZ`Xnq`0(uVf*3Ghj+eS9~JoBR8Z-Er0EAb7k50*l+!4;6p zq+0uV{|)AMy2lOE{=C%_sRJ%xL-_@zSH?Z9rpnq4^1P5 zv4|#?6t8Ies^IJUInOk(Evx$etn_gRD)k8l{7IF05lJk~jey%0{J;okU{c3zlj7!_ zymB2_Z#lg`Z(hC8=*)lAA#C{jbZ1K~?EF`jo8ECj3~j+IIIu=MXec>T${{WoRj7Y8 z0cGfj1>vMd&xwN)0OGfQ$|^RS?3NpTvY_#M7!yu`bM8ICcUurw#ZSqAbj}aVIS`KZBTye^f4E!?C%zGLK?La|p97@dw zd58WEPu64c*pAmvkBvIJpxnta%h;}PY_u!4k07~r^B*2g2Upfzvv@zh?B^L-Vh@44 zRt!H8gE;+0p1PkkPfQEA?SLH`-l-vHWw9QOwrvoESMTI$n5PMuY&G-wsRQ&Dq>@t+Ua zbAf_P$F3=UGUVk3QHv-ePFC*bb_3g5hS71^AIBjX@fZaieC5XdLG$~}DgrX#sp>5H z@jn#;sAjXFR5vMOseCeWaEj@-fr3WAveeyeF4B8abcY$lr`5w8wIE`et9Q?;*Po83 zS&IF&(HPO6nRitbMzIT@4VaqO9TMqS5>+pbirbNAEy@sAmU6VhV#Ry*1e#Z8d2QJ; zCHR&}HFOyj-+k*$T=65IHi_eJZc^&f{O){2R9>c+X8p4M*2xa7kXn5SPS{LI{dBjl z0Wo%2=7llrn*(U3iGHZ>XB!A7Al} zz>zzt(|c+mv$otgqR6kVee}Rf9n)mTJ-u?QVv!tp9b(gn@0}$ zPKseGdLGt-feI(*lhF}@c3zDsfxc5=l~Roj>W6D%sYUlF;7)|y>4N4nWwRzse%(xF zY{c0m$B+6(Wo|^FH`Mk=Whj}nsOA{Scp=4XAscLAnENNE>R<`Ct3V!%h=mbv_d$1? zZc8nZWvd+$nSP5lCei(sG%u{4%2I7be|P^+<{Em$X3Y*b0b7>QY@nWS2SA|1)wF~V z0^qnCF`<&A&Tn3y^^=t{qoUTz#GyWhfhC>rMC(`86$pvAy}fLy#qCU?7j3fbXT z>YIarhU;mx7mttH8F##5jk8yanpKbVhu#Rc?}c?7cBX`HsFfT(4xNbQi2syHO5zfr z)lW!(b2a4KJY`3USycde9$zII`rY)B)wwUjb8O#st&M*p#a>0~_Rq=8?Gk>%x?~Ijv50elxH6U#3b*9d4zLXp#^POG z*rBFivCSM$rrAG!96Y|vCJCa7ar`xue^Dd*$NtBn_`52-=}D5lNlz1eUcK2`@B7Vm ztL%Zs64CG*Lhjv2)9;Eos$2!uFWr`DO)jc-#5EMh1O9K^@6FGRy1wN(y}OuUFV{(R zu-xZfZwVKo4|B=5^yM?gz<;n#i|KumL4WBmj^k2mIo;-1;5WJctS1-y2i7%5VzBEd z{%hv%%bTh>HzS^;yE+N6p@L;#=K59|JYE|QEH&R7z#2TDl$8f|FN0Pw@u*78{NC2GSSeQyS2R&*NFu+0aSq2NDDwGR>_tfkM`f<;YFhe6{6eMGB0>(_2!7s zU%e>ao6jV*NdnHnX(6fC1{rCp&c{(4eV2Md*zOA(RBLHZU-=Y2m@Y_P?8lT8%=1gZ zn>2seWD+)j~?wf3t58T(sp#l*p`YttnGABWUgTGJKYqho~Gi>eR%moByzSln%`^ed3}$CV5}#Ott2kHjq=fUVv(=9v&qLRFa`OnA0Aj8 z{UiW4pyYXZXDPA*D|DYM@vcmeqW8Jv@Wpk3d1mFp7&73^1~H$Km>V}u)PGqS`nGb% zKN}rj@Id6LbNWKEO;&mFcnPN0HYc)>J=hTUw&uHhgw1MHX-K(ibf;6naO=>EpFhHa zje2uzOb1D$9#XE8@Vl5v z%#6%b#Js&J)}QgMh^>i95&6L=Kc7`%d;YWHATXaPj;lfl4#hTNT;nvu_8z~gmfFV3 zpHJ*j)Ewpj28Q~1wI!X~#@`t!2Ml;$J-)(RW%;&#t~vky&S{ZDuncpP|1*!BsiCOa zj)U{htNqLm?5XSi=MpMMo?l9ud-tL56SNZk8_jqbWCNeY0349^C@!2$1%2 zGC5Qg_mO7fa`ldES%~Z(IpBDPya#B9^H~OwpNtq-Oarqib@+REuH(TI;ttmhu6^YT zQGcI~yehvbpCUN5S^KA1Rtl7px*BJ6tL3(zb=n5Ths!MqG72jl)dgI1breaJ@57CM z)sA^9bhg(<(V15su#$Mu#wRytepxM?v9!L!zu^?_lkVIZ9mA-De+*;a*k$#oPjA$D zc~?rTthx_Yy*i&HSpPtedrCq2N5|7FAl(Y4YmD>`%cUbfjfaLdrmIHP260&)k-iz` zw~m$XJEN`cIF9_3z}4=!7lHV6r>SeSR@Pe5rDP5D$2GLHWSMvZLXY^dg2k92O>-7D zmphY9x?Tc{iV|G&BI$2evW>S7Jfv?+PT+r5h@=257EXAa*&RlL=D5ARE~tYDsKFLY zehm#1(%?K0JCP=5G%r08kYu}%6*gb%#QLtilnii{?yO3oJ!t~Uw9+}0DpC?2&&pT) zZn&~ra(V1Mubqt2M7-j<#G_Exra;;CB0JlCmmtPXX9gCGs3ZoIk1&n2NG+YOX7g+f zLmbrQ5)UY8t-knD5U=KbA6;KQw`HS4J#jzTE^K(Y#Q0%)|8Zh+d1U^L8D~kSdL-{p zzrJ_j+KM$NE8=*0yhsMpW=Yc4T+$9*8YWUB5>*+1GdlEk+hi+C6%S57C(pZk6|+mB zNzy;VCiJK=0TCWUu-EC750Nhlc5goytt4$W8Z4)LgN9g)ET=-2r8yYOC0Ob!`BvL^{hZy#;UCFBI3;sW zC|d#Yu2Vg+3;G$bI|Ttlkkf5CNXk95h&m(e22d8}YNJ>n58hlbG7~+MHQP&G zh`kBeVC|y4=$Lg;xUb;%^aF(%iHGbu3*#%6q7tz1-sl?aD3sap?cxYDO{13UJR{e! zI+TzL3`dBaa+Z)LsmGhPI0?(6%@@7qI)5T=EsE^b>cduhU^Y9;YWR!et}tH4GWi)b z%k4+D`z+eC&8vkgy|XghgTlJ^aFG_jexdRTPUU*TI4-%G4j-ADzZDV^?Q?FC?_Stq z76Dh#E*TKD4q^KTn!7d`(;7o6kNsZWz2n%UMj>6Dy)h;K`?FTy`@YH*$qeT>oC>7h zq7(*M9Z()r^DWP60a!;yoE~`W4W7NAf(Bj_oXTurY-U=#2;5fvj@6%`gU&sCGw(6> z$B`9faT~$UZ!Bk{kIj>qVAt$Inx|xs%gvYMN2oB%AYafryi-_p%(~B&=xWk)%Zj%3 z!S2Q98S+i5`qHbpJlqDB zeb2atx5X6CN4B$L`{qfzF$(1r^PP`Sjh8@^9A%n--jB6io$y+t?{v}--%)JuKp-a; zeoBMtaRlO*T7vVmD;g>OTZnFKV7O`To-M)XXW7pZq#k6JRMfZS5of-`&#mEq z`H#Gt$382z8cfMpem+JaVaQNjucgX9FCPpOV{U5LV9EH{OxxK)t=q%m-X7^zCtZZlWjXGaV5)MMmR6OKo^lwgZlWLc#SjW;hH;)EVALsN^bEVfCr4X|{fXY(oX$8!C7P|NBW&6G6 zB{IzZ+btSA-v{;4*}Sg-?yE`R{lyi;$lWe7Mts3&n^q1ZakmHT7N(CG8Wb?bOQoA_ zB2@V>_!oLM!wGr$*}m58zGa;}(toKibe2lN!9Z6=Nx)uK>)OdspljjZU++CF_X#WC*{?-Tre}x?#zp|gP2u9osWE7jOsRvA0hbptv9l|(e-W! z-G!^l^c*g1+JD>q{*toet)}bd^FU+r8yR|h9tl)e8F!JioQh8zYTtayxojAyM_3mc zrt!6p3`L@qz*T#e&14ZDA1h-Dtca+n$ph=>3MXc{3^~taa?bc35+aJ&QWk10v)v|W zwY79ee*@X%hn>*@#_KsdpWOjl=CESYeu}(aQO(5s<(qcO__5fNKOfj@Fu!|5y-A=# zbzcYSj=W6CDg^6#uu;y-s8v+l$Km@ZW(X~a^~y6Lm5+5a0Nf!VNK@*$D{To~ zhbroa?fQEg6P#k#zd$`1)f6}GQK@eOc{yca+?RTHD?~nGp%GYQ>S2Fn;NO|FsfoL- zb7Rhsfwf$%>H|Mtn@R+qU)Pk?E38ePbjYx(m-^9`paLux5_p?W5@z0T99^=mjPXDJ zO!k+d*Nf4qjhkBpIIg<#J#8o86Jr8$VP+#u=k@|FM6C5YD^kDbGa@){mgKV-SCH^> zWN}M!&3H~?{qm4qX>ORCd9ZCP`c5=EThlI|W(MoHZIpoWFlKfnb#FAG6KkgU;*o1i z9&nYBc(BV4j^~y|f{1^}fB<}jt8b^}U4F>qvK^m^2R+otW0<`7o5qs~sRC@viJ}zV zoepGfp}o|0->j%M1}43Y|5<;`e_0NUf^1%jC%&82#G~|DUe8gVb%d#ms%ksO7nIFq z$o;c8`i@;5f!G#O5aD0t(-CjFy2A3*kYDF|vdfNJr^&*kNRNaHYw^n-QB^)pFg^HK%p^ zPORCDD4nkGs7>ny^}8UE=jsK~@>YkZd~Q3n7Y%U5Go{f6&UkjvD*g%G@b zL_$j8mjaryDufx!BEpg_L8*;OnKu3m{g1+dPo=pF?WDicnobglh`&Pqv+p;fxd80R z%TR?35=o}wX=p?>yPq^Hr_Wsb(F%ALSgmfB?z<4kx(>c%d}`V8?;HP8;oUXQ~p@;Y?L>&zNmLMFUB@IdN?XZ}yX#uK4sV?)PJ&`X9(_aM@W@M5|s# zAg4`!7EF6I4}GTA*KMcTB@h#Gpw02x*u!ag*=U6uRqaloFZB<=7{& zySN8eHywvKh5FKbw(>6Cw#(M-(hP#C;^GCYw5+<8C_;7kAL?*!k_tG^hmEeFL6W9{ zPZ&RIK0h;Ned z-xnT50c3ZP9(XN9S`V-*m>jpcBmAxktO~;sB!`9W>!XA?C0hC-&OYd5)g;Vll3S@w z^rzARESG%61wHQ=@Q?#k=?#=Lt7U*OignT}rx<}4`o`-a)O&nINiYJxH>Bao-~_9$ z8QZ0;*Y#`h6v0 z(7RK*I&3TsrQcW-G-+XpnoYK&NB90w?gQI;Z{68tfcvc7l#Yl;TfoHqvV&{u@eSMm z!_I|sjPl3w26bfQFO0u6<=`1eP0>t$Q(wZ9;(7ZR-tqnVLaem`jk$x30aD&Sm z^KEIUj_x$Yb}vQDHo}k)2aw4A{K=`5m-`MLW+ggjME+MVEos8j*s3OCA)Q4sazCJ) zOZy!bKQG@L#%T;0Z8t5uO?09-z=@R@BNTsXq^De~!2V!^!0BKd#emdECgr2b(CKrY z6d5==)JHmVDCb9H>jIXGI&n$lkgWYJq0SJ8&xLM-N1L8|-tv!@D1`@uZ2k{=u9b?W z7FWxr8=0y6OoDZzB1~ZnW$;F5-}O&(jB{M!Us&sjDf16=bpM9X?}b2) zCo0pIQF7Zw2fX-IHD&!7);wk2$P6x&W*Q_Ca8|CEqN`3Dd7gZoT`es;HTa-oRUulv zq5qcH(2^)n^&D<1Yl4=0whSe-aD*7WuDw)OSA7`lEN5kNS!v#p$}gj&!N$Jp!YeKq zyK*Emy|ftru=U}O-lLL2l7NA1tnCF#6Eq=$Kf_MJj_u_a?FBO=Lgy?A!tt;l*M)*W)uO0X@wn!N!dzgI^H2Q%02( zr`uN&$^57U=l?vj78b9Y+2%A|Yi#ESiD`nzF8iyGkL=G-Yqak3Xz%G`eevls8M?Cg z7N6FpZ^veQuIaC(tFU)SsvWFa#l|O}ug<;VtH+qsz!o&TYk~RfN?YfYZzxS)oH}>W zh=Ww9OTxW8ew4+YaeXoB7tZuWpl7bBwo)=D=!g*NarRVpk_C}n+Y55@Ldss6-b{CU zMmiZLo4p~+3dqyLw~xlx=~)^D?6(}lo!|05X^7XXc9z&@b>FVk#_o*Yd-9T~w=KW>_dyK2#PMXl|&iZ>o=djtvLHU^jIm*)dpr(bBTL%3*a+-C>adM<{}uCNKGQsiz5u^z1g1TEQ@+3b`VBkd=a|7Vf?0dB&TsUg z{`qR&m1Z7w(WFfP@woQFgv+O_`V_!F_YE7bhVvVS{3w&G)MqOH=#M6vV4NpipWK9H0GWM( z0Y&jE3x?_ffk{D5;ScUAWGJ4BCXQQ_ser0#)EJRX7vtxw93w-NEm z`rbPWQelW%WCG_Lv@o(`psC@CG3w;^aL>1n%d}aOV}0hs+i$~*)^les^tIe6&1?nHVT zchKxL)^oa45t-E+geyG^VFjxa`elTqiHVF@t5|IOe$HDQ55-t8lNIEo8-`||_dH)# zn6_DFu9y0h$JPp3$lG{=zr@$_w+5SDv^S6Z{e{JNuHQ{jP{`cv{XOOR@h?%p6HJRj z=6f?ZV~~n#;zSmV_mkM284rg%kSFATT zWO6zzV=m&?KX+;4)bUgDi&Y1CZ>Zi`&IUxD20twSDRLTA zpsv`~wo)$d_zkC`S@~4FXo{xCNZmhpA$V-qU>lFFjy)7C!s1Q`ao4XKNOZ1WR_3T` zVY*8e0C$7T9o>05YxO|p6ztTuJzsc4Q6Shw|Lj+aON<+@1l!^yf zM;38d1rn)HJFV)==hesw{d#p~&2{7Eq|SG|^Fagrm?mBZA;pgSA~zSuWzH=o_$zmX zTCfGS>o&W^Z$kL9miM%Ww@0O%ceS^_f#p zmmV5>?ivPcDp5FGZ^+_zZu?3I2I>`Q&h;M8q;qBbJQU?0gAbmV;Kphm-o+-v!WuIe zriY6W%0m(;;9?Fu4om{V6fFi2tq|#lI8h2jRtN)r_>p=c0!~&?D%1B-9f2(Bg?n_I z%S$w!Bi{Gj?OsF$JNv8Wnd1Q!T;&=kmU!^VF0&-2fnKkgBaw12K4 z3`$XA%OBjEQ5=r*>%E(2N-|`!m&cuu= z7T-$2k`Z>k11ET50oJ@oVA_tHsVI81Jay<|6g*4JGN0xM&4iv$RnoqOJ6w2lD}!!+ z^>~HEU?Q5EPhAVO!m{QN#j@cQ*l$HsPP(BZEX?jN98ue9%c0j@2XEEW0O37SRq2gu z)lo%E5szz=v}0R(dLmZv7Wi6ozK`E|&MI=B%Y((&Y;jDi65^PI_nRyfpFdgX5E)Ce zijMZtY!xxF)pui*X~|fRq54>1fgfKwUjH#1(<#SpE~jD!GMXRasT7MWyhO z91U1Y+NDO`{fAWE39>4_OyYV`?wtsZ0oN7;UPNIBl>A{Kvk)Dyj$x+i*gE>~3%AM^ z%X;!ANlwN`;y#fHbcImvKazK}fXqHwZD1A)tWUM;ovPa#))j$3p%AW7!&;f~>rL6m_X_c4?{OKjdRk zIpurr^VUT@{)%1?Ehr+eWWd((SUjyavD|5SCqqpqw(W;tCVy3hk?5eVUC_^ylqk6V zY@G$HDR`q9nIIgnxm%eyLpMKgp}p`@ve7HF2%Ugbf)h2 zcG2$0rOHbvl7j1@K`WfU6du}Qcu6Xh*;BQb(8Zq=7C+b~51A&u0jw}Q!P;gwQ!h}>^+{WB?kaoz8wb81tK+1{W5Oyi8Z$Q`;8apR+}&~K#% zX)#dtAa0miV}e&1AmFwq;2X?VfoKxJNrY^fO5ng5V^dIrMJr{;OUfRd%G?L8)RID` z)%Y%E)3?v#CRGobSjExdL?f3&1|*a4ru0t;gCKN-0Y3OsncdtzLC*7RklH+;RF0GS9i{GxT_Q&}ds0^I zt=O~6Q=eEIwS2F#;qB_u+vd3UxTD=K+MW>fYJs_ggGRD1Z=2;8_h?qA@MZ)7XgP;V z2TZWu)0u8%DsMs7YZFwkfXXUZku~(+gd}t?*0t%mbNC3DJq=>&hg$&nyp}h?2>%a) Cjqi>C literal 0 HcmV?d00001 diff --git a/Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8766ef4c8876f92b6996a1f7cd2c9a51e6a3b648 GIT binary patch literal 18514 zcmag^by!?K&@c=yEl}LOxG(N5#obxl-F?yGP~6=q?i6<^?k>eC?i47{qTkZreLvsx z{_$RKu58XEBS|Kc%$&_pvb0nKyaW7CN>k3lcmtCoI%A-Sq1+u^Osrks8lc3h-W~ve z6FSttXDgJ_8|VK?Z=7$KTj5`2D4$;cuY~^oKQYJD2?m_`r+h4Vt% ztl!$uME|#t;I)EaMc{}+c3F6kg7p(44f%o@0RYfGsbCE|6OJYjj@A(( z!XazJK-K{O2ceUWERv4hlTM`6PNe#m40D!Uzl7utXhktx#003M* zPh_!HWU*D`VR$TD$d{^jfB*mh8qy7in3{l8viP(*Xt~*b?f=TUspk0q*daPZo3pkk zhYe?Wj}QBA9U#L9K#yb@2>4$m2jIz~6u?*WZe{Q0Yolb!*6|W$OE-BXW<|E~9%j2v zjUHsPPC=l8Y;B}W2;E`!K)yD@e-KTb*GwkeTbuLLu~9bq5Co#G_KMGpX@Wp7)z-0@ za&-_$y3I>9OYW`B^-a{j;$-lcFdOr&TGrK;nl&>Bfs}@hH?z_H56M5ee@ceT_Y>Ne z7~^#y+}xoRsU*4y0o$?2{Sga1L2$O{$?TC;Q8FJKRf@B!EX{uke+T#kM;3~uD*eBO zNjTXTJeM(GX?~C_U3pnSG}|~s!^FRW@2si;g&&D^08Na(dO%gpo^wgd_Ja2?Gq_Ph z$F{mjRTfyBtcvhYf20uIi^AfY#jCtYHVFroX1gHJmHnqq(zm4n0F zfIu`=1Yl^g$rSJ~UUiK1fKWA(w=`RAikCJgd5o7jCkX>soNWrhW+zX{>}My<$L6_#g~b#q z1$G4mERY(e1PB|XmZ|_sF`wqJUr`5b;DA6a=DK$fI{|O8E3Dvv7MB!2O<+iMBgK9r z?f-}ZEvticxj>7}oGNbmDj;)hh-7#3uXW}8p;4M5!&>~pPJ=73vZrBPo)OOH6 z>}-y)dmLju?Ph&VCeWoFF4-_o(F+9)b$P1>~--S^rij@ z)&8TPc^9g?9J9ORYl*L)Rx?)5TvcC%)N=W;|KhQ)ezn?+U;=S|z)&>RNW9>9UK%P> zMOh$Kld`N0x+xmnaFN-R4194TmaH`}c}@pN)vPQVRo$ecW?T0~RR^)SQA^gEwMoO& zwt6U>6+XjNmF=)7SyhL=xG|Mis@OGN^#fUPqG}XXF&_P4k=cyOF=>&yYD9SvmMJaO zP@-xyRWX5XBx4JnD+)xEYD66b5d|E^F`Ys;RfdRybPgWjxbKV6&cD6lV*bPYq*>fh&qolZI;~ za2dz+g0+RzcB;z*4KniqJlTl4K@Hm|)!nUu);fh;7M?T|DiUiFYLBvI!yJ6KuPwm3OiC#o(vQPq|e2jc6uAs*T& zxMW}l5c;JG8lVaVK#Dch&b7>}uo;h~^2(*HD5*SYrqIr%iL9uoXtwvt1wx+fH8r~b zTH0$WPjjvRwJ@A^L%1p`YUszi9V;pzCoLqb_?1<0(hg~l^V~{0apKfI)${8m_8X zCshs{tv6G8ixY!ZT^Lx|rFjn+xS+{k+Cb94!A1*7{QXuC0$CA5kR_ zruTX?gAivACyExNMfeE{o`>h>7n;pqAs@5z)znW&A#x!e6tE2i*lq=olV|pi%>39s z`t=6@4{?l;ga`No0Pu(hgohunuyJtl@CgWg5{1~re<>g!;2-b_QU(P4_qOrrf8Ijg z-ZtI{rEe~>S;#v(TN`_t8rzCWimPgerusYky6QSxT6=q2ItE5aX@FGU%d4xJDywTt zzqj_bHLuTkeHL>A^yxskbqT0d@fV=!M?YFBxs47)<3~0jya)qyXu618>z%kT^TB`s zI^7yoT7hFs^g42*{rw&(xj6Gmk{aeb%GJuG9&I)urB`N>zt0a|zW$j`N2BE}9};-e zuUjJ6bts^Pg~GlY!>-?(76PSDg@;~vnaf{YRyv*PKqW0-DDv%;YdtJnQX-|^J5y(K z<40(A-){(=UET!uC9@7LIjz#M=OL}`mv54_kiEA#b4Pmo#C)Y)F{rZVQpvl&td<<{ z&MLIOpEwkAG3Q_>yj&LM%ix_#H;ulW>`*<_FA&rkIBy|KA9FJEc*asz5?H|QtmOSd zPZrG{t3fu&%xc?SbT~=O{#bZjF<#A+d+iH%GR&WrQtwWkWPQ2WriamGu8BZsfWr~u z=_MgFKrxHi^WM>B=~pIcPvs^bzpKA+IN^lbo}Z*ktu-@a8%5W9(MA9ZVV>+ORgDeOHA1{`hQ^*1S7#=>*#T zy0!k}|M(I6xrKUBZN= zo2qaMpFU)U!~=M~_FK2onqT&q1MsVTuE3<>sUBCzbO_Gh{gRNMP}kWHTDIDW`m@)u zpZwwE>)cjZTHYnWvkeTGv1!Z7=IQ0okhvT0ujZ~lIdJJtSoZ}Vzm16ff^nl#xbUYF z4U=}ETqjSYq{q<&b=eiYu3TNRq*K{??U?_NrCl&L^NFQ#$T z@cK>mS8S`sq*uzXVQH0m=X;)-JCaXLhFEoU054&Su5@3x`m0<@KE+0 zx&EKmQN+FX;nQVTceB$fp03iZwAtT-yPdV+mn58rBeJ6Cr;K$%D=GGfWBk95 zdEZ~{*LuNUd3Ra!Z8y4Q|!R z>sbJ8pNKK3h)BDl(s`Ig#y(!b=D_I$TDQf$|17#*3^ftF+!0~n2=U1fcb>pCG+CYG55(khr8K$!?M>Gg|1p8XQ{gLS37 zTC&$Jd;1=`UNaM0#G0Cmyyr?3Xsza?otUSV@-7$#G?!M4=sUelzd5krD^e9R_x;xG zfu@dd6eY#OGDEa3O=)B|Ezx|$EAC#X^}ZH!ENWqKmOi2i819&3d+_{raTg)F z+91F2ccLT|c~S>1Z7XHL7p)}R>3Z2UF{nCn3>QTH zs@+ysO_w=b_D(tynZfuq&B7A7iL=6{gALT|{%;Zk_VT_yI?T8;c47zNaSb*?_8M)x zF!H0&*qS_NW50w15zIP>1|F$d&=x>Q?=0gC3czEEMnMD|10vS*XhnG7 zroqoNuY(cQswsHr7&0=qkz*Zc!BYUcetI=8*0jyFoWdw<;h~DJ%c$RXbI@>9N{*V4 z6YwW8Oki@+!7_=ivu$0q9#w+NbNwq61l@H+&@~m)32G!^KiNv82}^qvJE`yPXKGm5iXYN+1?pm*+_ zhI5cX=cRp$uf0o1S} zwAM`3520-;S?s3(oLr)ah zus6Zmz_!>AfmNih&+T@^U~;8fE$IZ#eo)-|F%?*AMzU`)@yKd0PE11xvKKsDjQq2i zJ)#(>RQi!uB9`Y1W(BS`_==t zV*#CC6kM`3)1~-)wL|<-YH2Sl7#ODUZK>kAa<}5X18*L#cuV1%+U^q~xKQEj_EzRf zi&``A6Dz9-*deQme}JsvI;5PPl?Nb%WKfc-Cty;G?M+uUqL+JRkc=4Fk+TPIwa|Jl zJE4c&jS$P-%t*l3w%|bY9Fb6FWcY^kCOCFTL)C90P(hWbzxz)VA z)7iZl$zZ^Ecuf>5AXnaC2P=t4vSEvZ(UYDzP~(G)&2NiBZT5?KX^e44yO(7g#g7Jb z^>=ehM>3wDH|(z-TrwDm@+i75F62WmtP(VNZOL1Rx=4s)t-5l2o^SoOP%WBjmC^?9 zM(1}6sLlv-c9->%yDs%pU+KqMocOpjYUt`h!{`70+&j2)zUpwYzj4XnpWh4+FK%Z# z75%=OH;D?5KHp}hW4fB=PmOQA7gx654&-B9x4)M&CAcv$`<647l!}PLtVQ=s`4x#+ zsf366olne`d4VA(b$p z{^a((mUA`I=WK~@^6?)P!y~_BgfvZ+n^Zfs`3tWIB=8wZCqC9KITz*bHg(jkh|Q^w=V@DSLbONr)wA<4`lxGgng>S~edsnMg5BL&gTAvbPlHmg^Dk=jWT zvd{I7lL=eO3KLE2>}plx@{Zj^hthE@Jg7?4Qu)vWl=EG?74P2gLuKMLXfencNvT1m z-5L2_X-#dKyZ>4^F*zlN9XIEFGB*4!pg`Aa*G7iQ??9uHr$c3@JJ08`*yKQ*V>fJ7 zdf(|<`9b7dMU#nG@EJd!@8dU$Nau%AT0h-p7Ny+y;A6LqcR}VI%d=3s?<8@EQXVFL z8&E4iQ^Awxew(+u=0ds@^<#~m7{f%vFk>oTrTd}^*!;-VJ@~B%(a6)aXNQvU^qT^# z8+WGm<`M@&G?Q1&Ik#n%gUh~{2Z^(W&}-V=QR>HH%PH~Y>V`f6(UC_%*7Gl$*R;`w ziiv-@$r_|JIbeqE=Yf&PR37m97X7j0s*S(of65P%97j*)$XUyB%zs@iku2EhUByng zC!~L-*15ypiP;=-wMdaF;_LePqmn1GV)6OPCAM|EU^4if*mTzS&2b*fZQG=4v8;46%pBIfO!rY;?;Fk0OESjq^# zi^yaqN3yV1O8f&xxUtcgXy_0Ncz$<0osH}1f&7^BF;;I#GolhEtJ$aH(>w}Ja21yw zJCwoMxjicFk4vL+Hi;k{%>q8%IPfxb- z^K=0F&1ZBkkRAe`xgoXoO?d5i6_>l!{lPPBu5wNXdpG$g_>kn&gjFz2i61^$<)_c< z)B%{rUuP&|S&gsqvL)Wp6oxL zX*237gPUdUzBS3P)Jn~2UWy&(ms)b#DLgb==^=S8Zqe-$s^lg&_s>1K;&p0^_0H8Jf7qbxAV!rUao@^C0I>H_v|$Si%Xx38n9dqsjry5*(%b95oG z%$6OyDrvc>MLt+yvew|bJSR@BX1Su2m6#>5g_t{GC{vdpt>^8%PH{{zWB0kivBfee z`)ugOCFcHq0b63%F?qE`GuLKXwPrD{PpCt$n>IQd>BrB|)Kn&5qmyt2E*d-zndp9~ zgGkK>`@Su{!d1VqiaUJ3?C$_&zC79N;_&~XcrL(iD?8D8|M*H35*^z=uy>P9e15IS2r`$(@akh}(~xwyX%Dyp!#3ewommwfLV zfFO_~+goBe|Mk1yPk!Tv42dI)_1!2yZfW#v`ytu#^-Qljw{~(B$byJ=PO3eybR~=o zTlh+g8J!70e0F{mV!`(wZ^#BU8RPeCKiZV4)}CL25e@r8JA;o(1$uPN_NjBvJiXt% zrh3j>Z#A1?>~eJ+?LQL>M`pw#0)Qk&d`CCYlTz%2TA0eu$&Jjy$5iKgu)pVm1&RNt z-(+-pSH~te`sg?pJt)t**gm1o1gsW+H0m##RwT31vM}~0;wS!X;L-kvOAF2W(FOmn zA|br0eO}$8bE(PY6i(w;b_WD(iso%UY==J7F@rOrG^#e~Ur$*Ys)=0eoo!C*ZJ)ZJ zQYp)@{~!j`&9dxA)Ye_qp4004=Fzxhj}LXxR8JqMgxN`as#wnRsJTaO3Lo&G%jY%w?&kT)|2BZ{SSd&Zac`sQqIUv)b(a#yj8NIU&}X4Xm3EC=y|_ zJ!nFGNV!p*=c)#>bH99BR&z2`+s<%9V?pmt`8D4q%z{=>xnwmysx9sO)r--XTW#@9@3#F;BDx72cI(Yry1tuDQB(E`0F%yAXrldnq+xwAuH)gR||v0y#eFM0{<& zg-ZzzD$CGGU4L`(v3dTQqQmyp=ggl6Gob4Y67dOqD%Smj}Im>)q84S zQ1;i0L~PP&Bkg$E_usaB+1o`A(yVT7rRSbx2t;%Be-L#Y12!$0;Oj;ha>vIWR%Ta|A(Ld8h`Jm~UE1LN zevTL9o&u9voPzRKu%51QT0S6a4N)L z<|)`cgJgRAbI&i9S3XD1wG-#`ADx6}f8=B$xJvv$Ie(XMc~ad@;LK}rUDP%;PxLS{ z{_I(=s-HQhHZQwXsUDiM&XeKk78_@}VFZC~D}yFw!hTjkd1oK(VUe-!aVd$Hp)AFOfnidzNSY`>aojjp%OD~%O|@Z} z*#ove=fBmmJ3deaTIFMyEHyHG2mHDViG59i)lSJGby?8dFTc3tLpvqL1+m*=u0`+5 zq}iaqE=to}I)f2Nklc-f0KL(YA_>IfaH?#1bXNxH5t-}1=d4iAMDj;PiCHne@@ZJV zRJ*A;IJ}D)=4*JtGM&|pNgCtuA5>a(@}LIzAyCa>H#Fs$Ts=iZB566E?H>@i#w<*A zsG7`%IMYRvn`DoAy{yc0hTZB!*d~5a6Zm!)DOg=t4ZjtiM$+-sELmNb_uAO_BPU(b zYbC~}X*TySYcaVPl8)5tnJIBLk$$bGm|Q&+o`4N-JFaH$?0a;74zydn{ekz&1|=hg znVSZPrc z@7aAyG78)}sxU4R3=IlYxWam!dl=NU_IxH&=9$^MQy4bywE=5A zL&4zY_>s&~aFM1H1+59D-)Ci>~w#YWIrL zxSD(=ZUyX0uQ?i)I)E)*@hu@T8Ki4y^w(3{Q1oPs#BhZ z`08o$b?s(;OF&V{@-Jvw+d}K=;&Xd!z?IifQ+n>T6t;ol>_!iFMa$a#R798Nevo8V zPYr(niFU)5oMnnXW*pR%+vcQtq@5!N1 zy2OK`(SjP$NYO?c5DlTodaCax>;x5t#>e@0t++mPJBk+5WNCe7WI(tXj%QzYHpw~D zTC}=q&kQG;I`*cp0Gi zy4J|^Y_Pf_`+d?XDb$Bq#jzP!5)xd)3^V=^l`#>Wc4+1@_>zb5@hS_DjixMG^7yC8 zW^~(me+)E6dg?*PT0y#oyzJ5q9;3*t7j5Eqsg4y0t(+E6ZHP};)`-x!(XCaIh9ejF zyP;ar*kd?`@7_mdxR#~p!mhVSRo0$x=8V*e6>Bl|boIvaw^Pp#!JeE&a)$77?Ya_^ z`;g&h<#$+JF$^&jrB&3lNjLNxWRK#4skx+tRZrZL(UDBGkD*4>zn)TW?w55~?7)jB zw_4Oj9bIO)A%Ds_0?Yc!{_YJ#)*}A$qsBS{`USuEEK;Tu_K5UvPwjgO%b10L5G*j% zH=TQT6A56s537EE#z@a@yIMJaAAjL*ozENoQSV66$NcByrl4->bPHw8?4_KufDbSdm;?8JBf0%zQ2x zQ;WzFgm@?s9y=1lItAs&*EDEB_eGK`w}YmE0n?Z1NSE|l?*l279mwKqN*W!_)8Xoq?$EV#U)l;gYj+$MC8S1y~?>JN2tlvQ8((UiinEcwB zN^9nyCx7mukyK!Isifer4s4Wbu-wuu7qD=Bk>N`-GUE@ck9KqrocEMh`Qdn@pLVOe z=xykn-U{cX8eYyi$ol%c`dK`DcnnYJ%EVIJSwX_<7@ik@pOD+$yEd^H0ruk+b(QCE zw4Q!_hty)>9yR^O)~nXcNC8N7gXD;lZBU?6j2f`PlCjpEw)bEnUiLukDACAE;fh*wx}T&hjlvY6rdwIni*UHGnv z$4V&y(i9RSGLJ0>n(cxkuxE8l$6I&_PR%)eO(!L))+zF5Bo{hXi~s5v$jMN7$Jc32 zv1F7SAoM`FgUCRFbAN=dIql&{nuWsa&7F>GS8*I{R#$X)+wwHy zCEu=O3d+pN`Ad!FM_UZ?_YDe+hNCuipt*0T`yoH(7y=m-lB^3DQ`&W&smK>aGJ>N@ zPUW()oeQ@Py=)ULTl46syNTTw9M8HT7dx11y#@UzUs5a0-nD{ls( zE?x}l4QM<7g{$e=u?0n4C6Ql`KN8a+Z&=i5j*$w`hq*mm)1ito`tTDaX2P@|+t+Cs zoR9HH>rU2KPy+oLuZmu)FTaK8V`)EGxew1$DN3p@f2d>sz}F%*3KgB}t^VbLqEmol zv?k${cGeX4ekrY1=W0K{Uo17|pxV!Qm`&;ny8xUEA}ByHVM zhck%si@83MhgP8rAWV&OCk9XKnH1-hxnu{g`E1T#U%jP=7~D5XaFSLpy!v)KKNA*r zx4wIU2klsTVO#aF2lMuH%{d>~DT^~`X%Q_?r0@SoU(3wY?QX0gYqF#m{@Hae@eq5U z|NVhuX|JR0q0P{82wUldElBgdm>f+#TLB^!W4R_shH9#x)#B2m%2q(Nyu}vZ_~b$x zi*Wz+y9!@v=FwMXt{~G}+KG?7cT-K+KHn*jC4!~Gp9IkEYv-0n*-)JeafKYVC(ASNvyHCX`LIciR>~EV7VX$oc6^s0)>tKlq_9yAH9H_Ik0;@+H549+GzfZA) z;R0$%nJCDWC|MO!`NXbKbeRvtmN~emxCgQL%;bsEDt5XqH>{Qi%;lBTYo7YfUtF4L z7?ij*>=2nI*~PPa0iU#OJ#RiK^@dSvBYMLm^Rby2a_9hg<=ZhmNyhihC_SQTN2EEI zeNO|tkvb77%Yc2R(vK}^e(;Ja@Ocy&4sm>v#em!VcQ=DJBZD#{Awed44uNlhiw_5cNvd_O_+|2)JVRJd1(tgy^ z*|YvDd4Ylxo-4BI+Hv%Xhoa`WUT-dDMFo~kosH0 zJDXLDN>S!!!zIiiOPsOKu%Hmc>r;6)E-lFAa$i*%)3ovzUCdYgIi??^4y(k#{v)1F zOvVN`a3i%E2iJgw9u9hfBYZ3^5!v!C+$sz0Wa$TSuPE=XwI*5BAK#%W1UO6JWkdg5 zp~HH}2iG6=^`KruP+6dP^wM;Zt^JnY^pRj}WvwsWtNkr#qR;Q5vd4@6LaoM9 zjUNS}bbiLzb5CICbTyYoUoahPnejDpNqtfkMx}9<^&RzD>AWQ83*tR)(BNvPj_q_Y!{4Yji{j^Q~%(Ohca9&&Lj?5#%G>2*R z@1RJda1E@Ky6Z_Y(L{qgYPC?A6j_+x3Y3};B+8c3`xzrVq3@j}Org6xFY$|hLv3bE zely%%Wq>(fSY5IIm6L$x>?8?zdXI1p|(POQm{z8aHJdMSX25bDFYbMlvSVZ5~q@2<1 zOnTDTCLUrcLt?OerWFz~jxt5!WARjN&JE{W^Sp(H&k*A>Jn2|hxDuFShEQ4O4HpL% zOE$~fRz#~vn%FIRJ->Pfypv;aQfxYt?|0RRg-H-3W*->6?YIh@fhB z)|Lhhmb4JrWeF~L1Na0TkCnr9<<9ozvEF|-50Taun#J;F=f|@h<$XFu&i`_UePTH1 zs$q@@7i|XvJExHZ3zPeIZ{Ne2bre0_R%9sr_e(gfJ=0O7*)0@D!%lB~%I%YFj5Fo2 zy0ATujz`Y-d1279Q;&aTUB%~-b=qT;O ze_gBKagEzUB}?+=;wqO#6)CXuf?4>pz|;_xOxc#Ev7YOwA6?+Mri8rt7wO32zB4N1 zT90ncR6C!(Moz~vvYQ7~Bg4fe9%WxXU6FR=_zHe@dbnvnP%+>lVe~r}UTz8_dhCEd z_Wqz2C;+{d=Ne9$r=o-FHN4kScpCAE^0hKX`KJL_|DmMmK2=3Qa;XzXE3r$g+Zf}~ z=3&7^%4El?x_13~5CRFJD(5J|rjBQ8kBIMSgaC%g_+!R$_Rk5uECIRkhD>qGl|cLA zjJETx`g+eMGd95H-^NMd3R7IM(lezfd{qL-ooxEgHoVHwR!a(cuBL9aOqtxss*DG@ zohjcue?L4^i=XW*eKKY>!z<@gHk#=vXQqZpf<80-(a9O8x^T9z?o1VWS`0_eKgd1s&A8_$#tZXpkPBDxorc#_Qe<>#}P1G#2B%cucLv^)+P7f<{VHX-cp?)Yr=3@wK zH$K&Rt%;fg`9>7u?4LU{vtICwX@b$d`ruL5z-Zc!n^#z=BQor-54R`Fl&I-4v)#kb z)Z@3=7JX7F`p?WHU+ZVRj)h})GR!;?mBHgc^{Vas3VuaXmn(OdE)=Zr(SqGG&_r?; z-yJHc5@x-PuXxQi^lMT%Y}Vg%pqN$~Ls6kl5_w3m&5iY8+5%Q(Lr zdUFeP!zkm;q#9vkBB{pT+I6{ZV8lT2b6{pA4ogn6Vn+1w_dbv;VPa`4KE*smUVRpJ zy!?VrR4`xTHy0HNvE`nxpYE+h`6Zv@Y$*Q@(ATi7t6ia;H1|z4aRUtCC&yoNC`YR2 zbMta*h)^z(vpisz2GjsDY~t0%NoeMLB{{A%J(jaPU7_)Q{#m|)X^SJJ)-L#d#KSi( z;)5N&`DHwI>H>%Z>gzs_VqZ=ljQ6|cV?S^mqEo_?l<150n=CS!_c`41Fau3D6h_+0IORDjwE*vkJ zIqD4mNuP)~e@32iUjCl0xIcI)zpl#r3BES*4~ar|_KET%A&ZrlRX^W-e*JL;+X% zM;Gm)lC6G*5cODUK@9t&0{N6H>KWdT(nTd}3 z`O-}^58DX))WpcS^d_-{?FKQWlP+0leqx8{WW5XhRp8q6EzqSh=g}&?MbQeasG~c4 zbng36QSjkFvBcaJ1+sbqf>eBZ#_AUI-)!9TbYZu`OOu#PCEP%?fG#Ko;w_b38i zAc6n>_-o2IH9<7$V@A>+3Tjo9j=FJN_dq!1d5*-Z_}ufkB`bq^Z^M$iWX>388sq1< z{Jm_<0ukd~-O;C;-&SZ+{dN15jL%kvJ+vP(W7SiQ#8Yb9qUZZoL|g1XG@yv_scnk=HqLbQMyL3YtVc2-y+ZI`qI; zGVpo~cfktgk&8a~ZpGc(A;!b3Tk^A>T>pF4x-jvGtwz@Kw9}wo) zzX}k?TSlC#rrkYj>2^qVi&L>fO690^mu~Ku#TfV3*Y{xDJ2&QfI?osU$Nn5AJVZF{ zl||~0`4r==sL|py`_%m`&__u7%R32HDeYj)ouc` zkI^f(=f9kW(mtmJPcIPEF>s*-_$Tb%vSnvbYSpHncmS{@mQ3wBbFs_ z4Waw)A`a+>8NtT>Br&y)3loPlEuQlYZ?B@`PTNk6Q{DzP5U&4bmZk1%H8C*s*x#kP zyp6%7L)H}`168va87E7kfSuAL!`T8MLPFJ=>)wd}YZx!bea52)19dxL2dVw{()P@K zs2F&>0@ZQ~zp_=RgYu9ClUi4o5`d-mINb}dy+)0#pj$B{6uN5ULR<(@ZjxDtIaCis z&k2ijBf&yk&v_O{${mhet(W6zdb>9mD#I?tpUD_~Tfz`+e$YZ^a#{HOj4je~-zrRb zkg+t=k}r^jE*^>)IB0!iGC#3^DCLDnVu?xU{aB?B*Q=*WzKWF=)8p&&@>p{m@4jFh zXT46pUFj{!>3wli8q?d9L$zUUoF4ai;(AJ)@A5&`tE_R?OJBF;8k;#YB9p}&_H6z>)vee+i7kpTC5`bTPU}$3N(};-3IjRfY?+z)RwdI%h*j4NiP9b!YH{>8;D4P~Ve2OI(@~VPL zb=uTJYcCBC#}2(F&m999wiu2`IJ0w6J_*WJo*&xD8Iu(TE0+RNBi%x$2BO`H&^VVW z`yVxb2_vL(S#R8{mtwsyq`aB?$>f&6y-B-&@~Y-#uZc;0Y6C5Ftr(P|d)b^0SpCu( zz!kvDL6zK3(I#c*z0N5!#}}*n_pe@TdCT-`@pfdwM@PB~s+IDbP??b#B?ls?$M!Y^ zw*Z0BC7O?9-F{xg;IoBqBaIV@W!$sItA0P}39fL|Ut)O)-I!uF6)}#_N)BR(!gLRU z=D$%G=wpqrubWWeweF>!Q!wIhT<@`-)G>fkL!6x@w!ftd)&Ix}!WhkI0}>rV8_-hi zzGAIytjjUS?#cX#G@T;q`msB(#Qte%Ar$~HOf?^TQsNJzF~l%T^k7@=cgVT8NoQ48 zt^lB6i6{IzILW`$<`8M8Z0TcU6KFpPJz*P?BW>&y$*SB^PiG7Jiyly*@(o^FO|3Y= zWm)0d6P9TE>0yAx;G@Yt3O}VixF1O&v|ciy09UjDo&-pYAhvka>rgiWug%q}84b+L zOh)t{GOI!Jk$wF$im_PQeQ7akBOpAx99>=3 zK$SlYe@ytQ&D}MLlzsJ!zno%^1mJ|e8G~d%18obU*hTe26-oPo%}~~`l3Kwse~o45#;tAS<-cw?D8gRtwa)tP zLYaqBImGpT6mG6Et`Y{}%xS;bubd569{wlg>OaeC%iM@#nj#QiMJK1W(r$#93G715 zm4RHbkbB)cRm_gbIg^`siuGSYn#`H5ZiDhYnU7z7R5pyQ?#Boz=-u)<^I`%17kxhz zPi7r@j{sbr*@6n_U12B7yemq5r^v-d^{Fb&Yg%7%lZ)eL$G^9HW~)?5jyJ|}ouvJ} zigBlJs(S35X|fm5WkYFKy(7gR^Wsomvu}`=Dz0n+fJbDN_{j_a|8Y- zCENclw!4~oVaRHp4#|8K-Jw&8+|9wsrX?NB<%5(#f_xgW>2J)qArOsO&LJoA$`oIh z+=1NBlar%|iy_e``-IZwIgUqn5tid^WBHs)lWBD=J6E&rwfMQN3SFK1Bd@3Swny8? z`R`wO0^uIwqA1M;6p?7Zh^1f?8KDZ4uDR)UdeuZ@wUk*+l6Yy*7?OIWap+{bHrO5R!k>dltCk66v&5k>{mySwDQ{k&(I%u(hQKTLXnqW@ZUIY=< zbGGgyA7X30rcCnRmx$H+nmu9=sBvFYvhzVY7_|jfOHk*|`xhdxHec-BbZ(ecVTgkr z5hMVf=Sjv7%Xe+yR6%=F%||atBH~r&=j>`djx~;0()ys+BKsQ@Dfs%@q4pqMEb0+u z>sv8M`I%Z6!EZeTq0un_|FactWhMFva4W&F2Gnlt2g3vTXo>85@^Lj z#w;a>CfEad0WE+A@YYKb!KdcSE#@_{J!!{rP20I{nwD2SjSEN>Q(Y@4wwH4XtvLul zRUZnTC~0!?7%kuwewP{U0aOs8+O zM&E@jZ>j;FCx!7(vDwX!Mcc!o$O!d|xU%_c;?j^oP6rd9@P=3!Z6P`nM;tK&$V6qOOUz&s_lc&TgBZ05D<#mh!p z4Aae|o{E}+?fPbMouk~PC^1N!f2PV>C{A7F&Li(0Irv~)I*)ON6o{L=6(Ax=27S)S zZJ@Mksa#?ERUr|J@UTXWfh8%4RNMf*CuPgudiklRRT|U21piHq)!UuU;k2~i1b2Ds zy+jBm@%A`Pjd;)G-Vjp%x0zGg*FKv%vGuN|aYQ`Bv^R;_G3ND$Vu0A*>)goeJkAC> z7w88cTOh^pdWNsgpI?fY4y&VhRI2x1&PNG*O^`R7?n}QaQjpSj8ZUAY*Vb_1`iZvk z3wZ<(vEE+r&?CeJR2lYw(`Nv?sdtkerPEvBaStA~In1OUUMKz8j$gS8<+9x-XnFwv z00000`;Ji^m?SQ@kCW@ijoUxo>V8yp8)IYKUy3Im9_2N6J7;e0@&m|xm65D>0INe3UZ{w3>m*n#eo2?453n=@PZ?xkg0;{#Pkw^7{s7Z zm=JW#_H_(P`hOc)AsZ-G3Yjc;i&GFiXh-mtG+0(h4+}cBPZ|71x;Z1LLI_Gs%cr0b zgebI68r;Lm7!laV*-Q`&&&L=QxXn5AGYCyOEF(yf@0KLkTIv(Qe{;}EDZ~XKN(~VO z%Sk~sKon}m3m%m!Aqi#{LZ%3&5m>EhnLSzty2Csz7h!&we zi0j1gE`)0W3gtoc(KDcQdyu{yeboOTh8nM_4CdD{=ZS;&5bOacL|^F@ml53ng%B!j zV=|O$ppZg~7cf)#bW4z=0|)C6tp7vukM5t5q3e~z z3W+vdWkR0Wv!Rs3HY4FakhlTKrk{r~G3 z=_EFtCJwZ+&2sb2YRQ7!Ef-SU^_zSR7r%mUeAl4$*4WGNBs^_=qR}&)*blX_aSa$7fj8FL>2)#We9`XL&)>_+U)|M@@dq zSw659KNzIrsGH(w*yz5JYPoXbyYYWjFw(yz;s5}`2{cRz)JzFmf-$s;k~Txk07=Bx z6B)6|7_%jqK&zNQXPaQ{l~R(Pagd(PT=tIyfb~l9S|W-*MU;MuDESn#AC_Q~o>Eep z!7@_xr?u+n|Er??b8uP!z>QYkg;pL&D+`1I|EwE;{%T#)UM^Z$7uL}k-v8D(jVlH< zsIJ?84~_rX0001e_&eU{G^r{M-5ih&q{TJ|l%3N8{eKnJSzc9Ks9{lF4{SGS@B~{) zoFWQaS_ESs?LJTniD`d=Gce}{M<@s~h$kc+H;|$joc4OI-~pP@bHz2p)ko?wp?OFv zJ0ZkORyZIeUz-0@Q>mtih)0R8QQLkC0_`3$7Lq7Ok`>~aN7O)>07%daEq5voA4U=n z0QiChL}mJ#WH!OH7Y7{S+9d@>2o*!LCWIKXl17B+vl4Nb3L)lDEF@_{aR-t(qsR#L zk8T*~CC$idAq&7_0Q~w$I-ba@ibto4E31wNp2L-$OXeNt<aNCaY-ArMgRgeSsGqL{ltBPM|Ft+G&ipbYH){k*ODFA zQvZ)A(1JF|kRLSH$fxNB)&yDVLnV7yE;NF4=iOEDzzbTcOZXsA3TSE05|rX@;syfi zf)^G*y4Su-^Sadp-AK0lr}HaT%iSH^=xCniXh^6A)ftL4O$M)}x~~v9fp4P6 zc^y~Wz+eHe?t&v&AVhz`*F+m+qHDP%prd~cJ%=^!8$@!TId?6OuO{x6Ce7|9`cB}z z_Qq(3hY_x$PM$|OHxt2>xkjdHC$!#*quZVn*0#SaVzc$`vmp01ZLmqIqam>qSpJ_- z{aaPt>#v3j(OdJr*2Lh{s*zfbirNbFrqj2*Cl5Wf%Z<)sjWPB|BQ+07mN&_kpBz_o zt-uUpt&XH^)jWQt&{)tN00)o^K(WmE=N=FMASli?j0rj33>y5HzG49*h=SsT80gH^ zl$humG?eVH&9RsV3oIrSQ3~tvlx&%jW(=6<8a0$6D;o^7>}x`R255!#dP=rj4Laub zl>=d1DCw?1?!AH}paDx^eTtBLp=%rviK;LG7)e)1#IjdlF{ODxS)dIJFD<|`XQUfQ z07lUjk{Cv?H4(XDLPY_?YoLfora=Pp32bu>s3_> zzM+xGM~!XX$n~USfHcUiau+I!sS#pd)v>S|$O-_w|99kqxixHtlmL{d003tQ*B&J= zDm02EAwo}QVuBD7Rd5pb9%XPGaE~-N!QcoIq@iSAn3QA?S(B6iwC5s##`<5-2>m{& zsBaVSHKYO_0E7Xc$C&G9TW6HnjmFSl{Hgay|}xgg$pgf4~4rx#D{z0PRX4=e}ZJBl0Wu zH4zFBg+GXX3r$T4}DKPcdTgegcG=os73V1ElxGW0#3|vd0I{*lT zvQxnT5Rp->00BQ>diE&y;gMtb0RXA6F|6>AufP80;80Q*!3Olfe>DP>d~a50YYt$C zGn(p$276>_tUx_dNf;DC!QUYa>wkmaLUOdU4=JH?p%E1D3kLA389+^)(K|G?_-p^~ zEdT`?7@>s-a0>tk$^?Xk?Q(MS@(T)!ic3mEed50o5D@SWkc74Y0sp;ibpOv=$m`q2 zD1vw=>0|Pk)H4POd6HD(9EjcSg`{eleP*3k* z*N@Joc1kJ=a%yTyW(Imn3UUetCdU3QY6@mXW*RDL3VLSxt}Y5nas~zlDk^#=`sR8l z4JjRcWq$tHOe!)BM!+Jmq%&pjF*D;AFU8A`Sj)n#tH~$+4Uq-R!VKV|Ej%YD-hi&v z`cJ}FO_Q$egtmKQfB;*#57EF9Pf?-j8!pw_afw-v;#HTHWIJ6yEg26gIo7#dwfr9` z&jg>HvHTqi{rug?ng!`}fTeIMeVMNE@t@**=M)CpU!PmssFCB7>OB%0{^D+I1jdo_+2)>Fls0U+>gz9SXQ3@2yhG#6Y5Xn zDir&Z_f}3m`J7}ODQnYcQF<>=zH;+XOTf;99D8}<=NwE9LY>1ex|-|buGB1ga=Cfd zgH`!H1m0s)TKVb2l|vGqG;zA=yvHX65QyyhU||*$eEiFiH}&=*+|r|HP_%Z62<{!2 zis3l7suq#BQpPqwjvdzHmL(2|CE83IJxI{?^}bkk0VrwThHrt;W73M3BOXBfGmrv%23`Sb4v9 z2skMA3(WpuOAo8ZSzL3_QL|}|hcCT>!UYbYd(OpQ(?2gOXz0ivA@CXbaxEfqiaMWK z|Bm)XObIP(rXan1EN!7cDy>=Tyz`saDg6PvjZo3=8{4?B*~sXAQo=-Wz|S$#ALp@DoKL|;p8qs){xU)5LLdiR5N|DS!%@1& zP*4_lrmIglB3$EozTq_s*W_{2Q0xBN@AOYU3dX;Cz*v`}kBPM)~ggH+2B$o{MiWe7XY;)f=#x?XcJK~L$ z&8g!Vd!rMDXU<^Ts)HC}Y;^0D6SXyFw>#~S%A^%wQcG28VT_TlzRT<7`;_E|BWCT! z_RQ3KnWTdO!ln~tNl{m#Ec9X?v8Ucq%Vjay?3QzPa+FLQuzJU(n$8}Ag^)B6_(%-7LZpa8jsChoIZ)V z?rFR^)Ktx&TxWbBT2O#rP}8b6t-GaTRDw|_3M zy9;F-Tzp_J?N9A*i5#_jfX|3vJpA03Txcfy*79pCeG?k;y`(;8#596kyGr33g_JGK zY$3kKw83zvvnY+u4fU3QS`W=_qaYFud=)xuY=7VP>i3R5q`wtr|CWDBlo**IX?$20 z!d*g!Z2!4q{iwPgBJyb&i;X%}Cc(>u-q`lGF%_LD9Ub?JNaW@n+!Dy`aP5%*%k!gv z{4XzLwsg;~9 zi7S>=-KG`w@raXB z4-5OHQaiiS_Z0R%yM0CW#-CBsp=>!p-B$BgLWosyp34g|ezZ@NwqfZAuAsQ3u<3g^ za)Y@?2v(S~bkWw6iX2iSb+kY(4Zy09dx!38+TvCV%|UwnQlm`rBS%+ixLIxTgmbVj zPVM{YuhtD6BG1edX7Y;HEyDF z@fk=bbvt($Y?Ax?rN2-_Ld`*n&x+%1ZRjd*a(7Ob6^g4ByJSS$=9_IL)=RcV7kDaC zpZVJc0d7k?>~F4qiI`~JpjiX7ru!&YwsT@ka10a%^F zknONfnT_@d-o`khiu3lmJSkP7Y?aydN&4O+DFpj*G>xO4@XwxWGB{`0j=Qo7*Gk7* zKR1G9{cnOlG?QeF@5jQ*1&OD6yhV1yaH|tN6HgkP=4es}o_yReQTWIZtVq{8n(x01 zqaPWaAb8{7h(%NxC|5G&6kB$}u70pM$J;M9gKsZKu%^Dm=w+fW+952Ze(q);olhoM zdQXI|4SE=6^{}Oe!TeduFq{nOM7l;~9fT`&63AGRMsfg?O&&fyh4Sbelt8n}J0g4a zhx!fi+3fXTE-ip+b&HQNd^}_(6Ww8NZ1eXO;GMkmTkHvx4y2(^rD@^~j~~@9I%+e> zWo^kQ>a8};_`Z&~n;_$~sq(sGl(4;#rZg-%rci&3cy`Idt2)JApqYl(D+^?$R*thK z!@$@D@jEVmz=^HG8BD~Hchi0NxpBN^$0@>^Iv(i|lhD9B2w7Con9)Nk#!bG1_Y3TZ za7=J_PReDUPx_&0#DF_sd?(y38cmujBp#oN|3N)wFL{tLVhu9Z<6)F;vXPcV*fnD_ zX&B{fD|ft7PSazc%~Ju7Ug)b`B>nx}na4p(BCrXMtiOUiK;LA0f^!+hXzft#wriRg zM*4DejlaErz{%%t=atoH(Y|Bd^K~?g+lGg1H;2To0@h3uc_dSeF1vib)8Lx?vn{LJU5C_@OpmYmMh2y<-I-?ySZRiYLfd5VoNSj>nT=VxaMAw*8c z7YJ71ZlQ_QvU3Gk?X^C&`^cpsXzt8`fbhXZg#E^P84}P|;Dxi&lCHt{aE2 zO(!uVU;3fDIMF%oAKu0~f);a|IsRQn)-=hfNfN4+>3*%6uB(5e)QW|B7KZzsI|-1d z3$UDEEEWp#+QN}Yu$umW*RnS5A7woZJgXtfC(g>XvoI>U8y}@kxN)&5A3J9vdn;Uf zyb2@%++jCEQY!0|Fb-e|YMln=8kjYAKwj1FcV|s8^^v+QDk^gy^TgdOU8w;^OZ979 zKTpM)WCU~m!m73OA}7n0Pb1uOX@3MwWb5jKuu!z;>Z38*s$*)f7AwZ;3q+;9hYqw0 z4=i=7U#aW+_H4shtUXDwt^@v*b0B7q@ z-uY7D4G2Y1Udoy!rTk(UT4#t!RI=BWc;3CYEuTxEQtx`%qhRuO`PRvC-98&2 z4r4Q4e{O}9lKtq|z7f1tI3tlzxZ%}R-!X5H*bSZ@cQjip8z*if_VK^z+sm5RogfbI z^7rT7TQfPy9&4FJwLQ)rtH$CFrVVST1v`CYJKOunnBVOjln6^L8zxQRt8pY z`773D(&%nWx-^MtdRUT#7QH{@NGyh zGLcqBitCzJ9tWhL8L#O%Abc5o@7R3>4`4*Fm(r^H0K3FAY>p}dLvtBzfYM@?Pa<$* zZu7>UQRIV7thks5v0FBR$@4>1j1G?WmD`_=#Y&1nPI6LEa1=EIQTd*t>H@hr z0zDl?--g0xbnW&g3$^lciZf%uT9-?#ekEx&5GIOiT#I7rlWw8LMSiPHYMEtYR|M;o zpqi?qi1Z|drdze3a#@KQO>DFpapD0M{~x%W;I&8wx=Jdo8!h4Hq{OnM`Og-%>%W>& z-D&whTP7YWy^#d`Mxi`njK`~XasUM2w_FaU4&e0vGS~zd8L|;hAyQ6py$?!o zF=Q3!FogskP*VeaXTYkR3~rVyx@YD7jQrE?WNl#?Z2Nn89PVvz%B`nAl#31VdVlll z{8&C>F6w!u3~)1f=qSJXu&Ww2iBJb~uKXxJWO14|H+EISLu4mD9(|`C;QeP^J>v*0 zOQB0(b`SDV4_)jqJPV~i;^wImKP9z%$CX>7q?p*hPJ`sL?01NE^_K zO>h$bH12lzO77Vf^(I9{C4d|B-lN_7z5qiMVEpL2-$JAzeb!?~OR}z0Oma_pLOYd? zmO+1@eRYUGsdc4aU`3)%z-xfmNy3vS4{lLN*9Seu3Eq@gK}12}UiW)vWfsJKpH}0| zM~@mvx!QQH%`hq@7?EX#nzWvM7CB3qVXGfE>dZfuE>mMdmWtjq%zhLhu^2PaEWWKf zvP)omz6&fNyB4;>6?v+rnq!{s7JXcpy*c;ebSErN9E+;__S@y{X>wrxqQx_I%ffaG zn>$zZXh@O|2D0m;wzX3P+EJ4hfk?!KW4!^a@t-vdu>}>zwoiS=R_V5+>!Ra5RvsP7 zoN}-R&_7gElSc++4!tM_>+!egdsi(+{UP3l32oAms_(S&0ZR#sJ;#^`EoI<23z)|7Z#;heLowCqKhC0(<;GmTDdqb|3CRXVl18I@;BhSv`42TvU@ zcn1|WxSp9iRiEqOgi1cQt7Cgl3*2pbzv;{bAMkrICit~L+~HlDVpR5py#LtJJA#xH zFSh&}&0bt0hchHRE@-a{P8RO0*GP2--4ag&mi63Ra;Ag^xysi;=YxY}T(K&({U`Zu zHf7CWf#-yK8y?;*7tp*xZO>B2i#z6UR~O$13v$pEU^k$nQn)iAyLaLFu|;4>zU^mW z84!|;lb9N-`(^F(QVnL_9tgjGT6(R_b?n=V&y2}>a*8`j$WSA-_xcw344n&WI+X2B|tn#k%>+z8p^bHY>eDjbDh*AShg8s}W}V-eb3q zT9kV4yyxZFQCCezKk`mj%dEK4H{&)f)2?rVi=1wT#LZb}t?EUW9s%`1;)nF}RdC$s zQ&FT372bT>l@SY?u1qDNw;f-$P_UGq%PB$ChZXWjb3z&pxxIaj;iwzu4lbSgv%E(< z{d7}8m7n)^d5H(?h>iQMxn{C=7^%}I6PllmuNDu8+4-}BI*N#30+KzVh53F;Gc^mi zv*<=DIx^8Gqw|mH(`C{4W%}kY*+x<)Wl+OaPa?p0x)s2~!#6mXJJ8qORvaHp8UJqX zQfOeJ8rGe05d@0`5=E)y0O4~Z|j2WcE9GoO9J{}4Q{qXX_ zHmo{n83*e^jmeE#NYOX;B<_?ndR*q(w{O`*3%^lJo}+a7bZTOVDaCgPOf_&Q-ak#9 zO*7II!$s)MeB?7@$})i?XV)baq$W&2$mZ?5EW6KQ1lEWuao^IphV1ijZ%cwrUd3vK|?3nJiK77%6Nfxwvp3$_78Pe zd$08d_Q}TDP6zoyNjDPa7AfzhIQHPQZq2^*a3a{rl7xORBJc~5=ri}bJ@rUDrXJNc zZ+j~8rOV-4Ck2TB>#_Z$q;Rqylh|hLw$(T!jgMf`^ zDmPUzhXWI30yG4C04q*qjM2nDH&ZJP$2EEs4?m|+l8&-kd3W?btlyqK$|a3I%-)QG zJdPtOH;Lv>xXNhC*N;a(Jdz!H$oKhwbFdrUnI-D4k z5*mHk-snw_;@3qZMCea{7ncpq3c|(kmcn$k&uAq9ko&Ba$ultIUMhuicgk|D*{cIi z9ky3_O;t#0`pyL3HIg);=sefcD(TWwHCQzj}V{@|gy z$;9TCv~X=phOlHvxN+9(Ku|kMmh#z;H8(;@CfP$k<{bhrd|ijQ*{bl~=~|K}@jxGK z0}~q|@sdaE(HLLm{=vPu_*X{|eIc{OPqeG2#gXwZr#;_86CRQU)2FTkcl!G}=CKif zs@8;W8Xw@>d9cbxbi&E-t_ycy$)95c#%a>GS0B$tRvK1=WbKQ9W?bjvw)W(eryb8b z1srpQmkp2GWwGA1?SdPz%)8vN>`or!XN$gl<^vPeyE`WyW)V!^!vcC=&T_U)K{GbA z7M-TapFEIIeZ%O;+*rG@_E#5g(4{Z+bo-;5WDAR!B`n8WE?SRwZb?y*9j=D9!sm$`VqpbI%ynaiJz99Cj7cTi?8krt@mJSy;JQxR|`lY`Q+zzxa_7 zY7l??MhA-%X&u+X!}x%vS}j5#yTh?O<_&O|8^7yvm?b%Z4ZH7F3py~u;RTo}nCoN}UnBrTH z4RQuaJKlH5F5?WOoXe)WawjRi$*W(w`9j0xy{kGdYG@X*uC$h{{HGfok#TbJW6ud# z-mVm722xL-DIP7uId|dmXnt~$6UfmZaj|z24(>cw|1Q}`<|trM>z-;=?6IvV$#>Q1 zHTA|@qYdB1`U`b`QrzZPW4EU8(8(AU_8>N$=eKO(q3&DT#BU+~Uxz&WSX5|@3>8e% z@oH!)!qHalRUlESf4)+FbA7MQXs@8Zu0B%x9Oig-C|xmguw1$HFfMq8x+VN+EY~Ur zA>v)Rn8(?fSxhhn0h8)T_9~GubAx_b*Zt;#giw{Sgo*gc(I>c-B^unH4oO_5rdG3l z4+rtAz8;5VNoV#a94P9>h0Y$sx0^rmNs2^xgYlctRJPYYLqO)I>QQ|^7Kl$sY5T{g zqSD@a49c^&EVz(ohkTzxWV*d*%vz*j?p+l^+@ew@ZU6emTmQ$q)Ktc&_)p?90$TRf z&rRWuR*K6t!`p}N_w5YS9a&0qXA*V#sv1JJ?hm}`?cWi^h>cC!iexh9!pcl5`Xp7} zNy4FF-S3bSADB57#uNOutfdf-DT?76ft8uWOuY4P05T}xj@=aQh?q>CH)Bz&aiG>f z=3^Y~au8&uTV_ZW)8i!RpG?AtEFCz%HjJ4L%r17Fw|=*7g5jP1l7)D!orSWEKG$mY zQW<+cqQz^KV4|*ut`!PESFYwJy)Anz`jR86n#p!~ITkj$b~xkCC|oo*L^F;53@bXW zD3bIficKu}`3XQSF)@a%qC{W4kq)HGkr=%Ww5%m z9dnpW`2#%fv`_Gt^PxM|wA?)};3^()0S`g=H!7WdIevOZ3xf7sB0>I!Nfj@$^*63S z(v3?8|2z*sWe4LGhKC6}o^mXaA6Rr97E5^-MOE#69m%(NDh7rp9J(F*Ut#z%lRP0I z&zA7t`4pcE!@e$TIS)4}2d@9_%$?IJl2{ubIrK93uS3w@*mEyT{1z!p`Du`seW77{ zf+FjA&R5Rj>du(`@O?*n^Id(WKy(DG%3LKy&DfC^_S=sD{QR!kX2;S!aVzUxHWYq} zQ*w~=gzoQ;zK<#dt+$uy_Txy>)knj(*7vRDpQfI8yvWtxY+%?r!R!63RkAO_%d!_4 zN{+@*tUdHo=G;#Dn8AVlX1MZFp>N|ZlCVs0Iw2lSJ7LN7@Vx!`-GO_9`T}Tbu*b5C zx_q^3sZxsYgV@+k;3{r~=~-ZsHCxPJ)-Pl4+5K^4N-CoZ8SoH>6}XjdM5_Y~Kl-ke zIKnXI_T)jRP-WWLWG6HQSK3{Ydg0_G#^t%=K&ETwUx;tq`|;? zSenLLNKc2c1927-@*4_5|LWz`H#fa=mtx#Sy?j#UnMHy0hv9m{T{M@=C!~=#*VVg; zyoL{Ir+!cKFqN=@pt+2(qfa_uG0i{h9odpD?BYwSig+(P!$03pX&;ou?}JWdJBg)v z-pmGRe^#&=s!v!e>^bJm|~D~%w|xa>7WX`)&a>Q+pn z-d&Xd)E~@O_f?N9mH4}?kSpjfq^2?_!7ED5JPsVC7dnUGFnDusbqYxWzF#B$_0jQ+nB39gH%^36q;*7~iiN4Y z!l7kxlwKbnhlb;z+oX|kde5e6H7tKam)hEY`DdznX6QZPp8VMlSd}$He)pSC6Cq5c*f!HWUG7}r>fVn*MB*zP>11Vb%(K5HKl00;aq49T z&!HB?{GMvb>dj5i#zSLq8i01Pl3~PYMi%~;r2DRf@g}#F>R_?;jg*bjDRZ`WN>DQJ={?ZD zea=5KDaTN#&_*<1bYC*uK$j}Qg$E}1$$sX#t_8=2CVsmKfs6Bz9)IrvRDu|D2_S;6 zy=;6pupiC){75&Q2RuDoe$&ittp$G97AT{EK9wXiN%1jLxJ z*@Sygknagtu8W(7gXufl5elPSb>YV35i~@V^n7ZRQULkeHHMYsb&yn@U0pNGEy=IN zsL94iV||{B9=;pYQa>oJtIdGC;S8nIoA<~rK(@Z?;#em-Ufe1|IlA<-X=oXsC zR_JW6-^TSRZ`o;vep;jD8a(=mxwNZ@9~>>eP2<{BGq3F_%yN$4Ri<`D$q`;}H`R(@ z5kJ~_7f;>pejg?1J6431&-YQEe>ThOlkZVCr#!pmc8#XS9l<^eGfoAGLtCg*BwT6R znvg^lfpqd-;2pb1iuU&;99tYvy$!56{YuMUVW`uHe7$xZqa=N)ftOz|ASw0wz@wX% z*eW*n+~fctoiwB?i}!Wg1AIvp)%`mE_#HLob2sdlIZt&yPf-va?KFtLfwA}yV`xX1 zIqCEX(sY4VQMw-MExT|W43Jq9Iom4orVQ{>Q+Pbz_101~=-H!Ew0OC$R+@)=SNV|V z5;=CesInD$OOt6gG7r;+!RyS@Qd-2b#1?H9{P2)?H%iPu_;WeR~je-Hq8!fAnG_!^Rj1gth+qfE=Go0$`m^C9pbF zn*fj$sGi4U*hP7hg!zfe`EE$ex9f(Peg`$h`spCZY=pWXLA_hJ8v+w9V2!i3zg4+J zzg8~zD*M}Q_vyNtsXRY2-3UV_2m%U}_zUs2yc7MixMFBN@3uR) z?9Dl>t;S8z$sa|8rjuAbq&8k<1o;Sf$A8wJ)<61U)LJS1VV|A#M-sE?=bu*{tL1RO z>ce^`e2~*>t|u1`T?qVdK_3t|!qwQR4owCom>^(X@ZgT}!CUV{wwP|7y6j$1z)#A- zS>ZcuEaq1sE`-aD02|vz{i&|JEePyI-S3jYWBgq5eY|;r{@yNfpaRh-FLz?MF4tf` zVh?R( z%b~t1S(r(bVO1XaDVGuGpp#;nr*_%tbGLDRk!vf$TIYLGt=S!Fkx=n_OW6%$+9u); zEAiRx?D3SO%1uR_>qj6zr~F~7lP``ICZ1*vZR#~&`LSbMv%WT4>sqk>g(S6EqP5nE zk1pJ)!NKy*rdDLPd)px)A7u-DLfa~lAM~h;t^gc(toeYQIbcX9_xR*zj^3DmQJE*i zI(@j@lnIuQMS3S~yQ4;`i$Xf>!g? z`44#gFbeur7|{)pol57*t1b9@1eB5#-zHt#pKX^F{ag}{8)EO9MmBCc`n7EC8T#QU z3`fw~F9uX_{D~7qTyLK2*6pbW<7`OGLdvLdXxKN@EX9^2gJ~rz&lJlgX+{9tzBf?6GoLHPNbvrWXh{^p93sCKwPk}m)~R?^Td11Dxn3RnpGuEQx^o0=Aw3azpChT-@hYz*fBJ? z_xZ^uJ%3F6v~YVa;^!}HGX?q@!%OWBRoZ?uuhzUbm1mxFICLHb#xxw?NA|>Us0_5x z_s0r?Jfim(+4r9N9RRUUDu&T|Jnk2};mjW&GG;!Xh9}AF{$&?rmaLic{@o^O#-b^q z>B+Ykd~S>v``K%uQq9C>Y6_+sZk{1IsEfh{u1+FpvCpLFTMpYuioyy-OL%n64w3PCjQZGum=tbibbP!kdTql z(bAAoQqa>DkPe8KlSE!wWWX^+W{OdGihIpnVa zz|X!tDlj~bID|oFyDL)MkAf@xLy@JFp^#SL1kXB~>Wp;g*@HfulDHEB(T?35P3!;D zasOR_bL?~WA~;fjNfJSHX<H!{*awMMS}-pN&aZI@a>vj>;*OfiuSvMgK1I%|8bJH;gcV|G!diqbash_>LRgYl=vR@dXDyXecq*{-J^ELc^1 z=QFJaIhdudB3|pgnUEN&^bHsHmg-XReNFM@vEL!Z9t1P%1qXk~-BdH13*zd^*7=^> zHD$+kLHbOP5Ye*QNIyJ>+-O@e)+E6omK(aP1}7RD>Lyd}wQUFRPIFZ&ZvCGQu}rTN z4ZM97KsLiwZzn%jTG)z;g2lxw$t^4QZW1CTVeK#_^N+BpILHrWr}M!p6&2hOcAtrN z7JNrFkN0(FGSrXdSnMhAO=~ooZ@5#o|1{hgG{2!4tLddnB2OQ+`NAwyc9~?6EAWYg z4=}%YdT&FP3|oew?!|0^X)sxzHHzTi{v63$rk5o{*H~sPJUg@=pm5cxvbn9W8}Lw7 z@*5v+PtG7G?Jq!_fe&sY=tsAJ1Nx9Iz`M#_Zp_^()n=unP%eQe*V(o*!OIFbgB|-f zQ?z8#@2NQ(-LdHMyzM6E1Iw?o_!sRa*;etC{2;~yYU5BJk=Es&tFXLhLvb3&gH@)N z_1rZB3jq$?Wesp*vG~Qq&_0APKO8NY@J$U@TtkVVQr3vws4m?}5O}Lx!Y%R!mC^H_47Vix!a2^zH#n~AazwE ziOOuYsZnB!AY@RcKwX8vK|ZQLnK(K_*sa*!xBox4j=7 zSMnONziMPmfOS}bpH&}uk$&%-d|A%F_Ou=6?djXX8$B-CwIzgGp;_AKlI+;XaANSY zFx#x;(ff02y|?!3B%Vr|5ZPZ1GYjiY##bc($uF2}2FLX3HWldu-$8Ukei&DpfV3)^ zU59%d)1WZ(X3xL0X*{FlU1v>a&7jGJi_E#}+v%2}Jxz>J!F|1`^rBg>>YPxzu`02c z9yCWD-QvJM7?95qB{@+p{zhB9#b9zk(x(sbSHBlXS^5fQ8U2iv;}*vrbBlWGJf+C& z8krTXtX8T~V{Oir&-P3=5o_E6|{DL88I8MJ2+78@rDUN_?#+Mv* z2@6}YsNl`UPP2eF<)7oFvK?G-E?zjlkNnVo*J79rMkzMYB*WG2eCR+z`k+o{pGz#j zL*j%F6gjBb(6uY@l6e>ZjJY`sh{({jjBc=KCFXi>?7!SR%8AxED$g>VXcP7KsYxC^ zmnWWtPV`7?p(14^+k~p&bA$@T(l|>my2$|{(U@|98$!AOEV2o_O#qTOLso4ySvgL& z53c521i*+;{+P)D?hEPPiF@?S9B@Zt<$?#V=zZXb1O z91~f9+PK>G{B$2qZfVhl40l)#wQTIp@4_APaa)nM*Xy2_%rz4>Yz%=p;NPEz^WbW# zYL?R!O~+J1HVw0=JUv~<4u{qwoyjqNcZz5v?GiS6ROs!;UwveccuQfceFoIg%^%^o z&8>;h<}JKd)U>0dK8ez7e0$vO!ftbvE;Y&AI8J2X@)l+u)7;k z5Z5V3gukj6@>mDfsaO^+1d0|aX=$r6Il|TzRzEFiKa}PgdawaVpvv{G1ZlqA@F|v# zuSWe96<(j=m-Nba+-K4gXtW z-R2CBryNBy>#$DbPz*Y4gJ;c>IYP{KSyH`xzewvT@EYScdKMVHDF8XcT1aX@;LVbZ z)rmYzc2$^VCMy>ln(8&rVGjVV4YtmEgI+9ylFS!A9{DwYB)*y{6$(#JgQ@^f> z-cKHIh1lg_0pOvD<6gUbfv-JV)7@OBew~D$(9zKw3K2iiZ%Rfe7y7a0KGBG>L=((C b$zOIQrQF}vN#OZIh+4YIoM6*f0hs?kDn?$; literal 0 HcmV?d00001 diff --git a/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml b/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml new file mode 100644 index 00000000000..b98d9d09eb5 --- /dev/null +++ b/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml @@ -0,0 +1,14 @@ +- files: ["alien_talk1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk.ogg" + +- files: ["alien_talk2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk2.ogg" + +- files: ["alien_talk3.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk3.ogg" diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index 503089a0c24..dc2011b804b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -119,6 +119,7 @@ molsPerSecondPerUnitMass: 0.0005 - type: Speech speechVerb: LargeMob + speechSounds: Xenonid # DeltaV: Use RMC's speech sounds for sentient xenos - type: PotentialPsionic #Nyano - Summary: makes potentially psionic. chance: -2 - type: Psionic #Nyano - Summary: makes psionic by default. diff --git a/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml b/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml new file mode 100644 index 00000000000..82e03453ce8 --- /dev/null +++ b/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml @@ -0,0 +1,6 @@ +- type: soundCollection + id: XenonidSpeech + files: + - /Audio/_RMC14/Voice/Xeno/alien_talk1.ogg + - /Audio/_RMC14/Voice/Xeno/alien_talk2.ogg + - /Audio/_RMC14/Voice/Xeno/alien_talk3.ogg diff --git a/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml b/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml new file mode 100644 index 00000000000..98c4f643e8c --- /dev/null +++ b/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml @@ -0,0 +1,8 @@ +- type: speechSounds + id: Xenonid + saySound: + collection: XenonidSpeech + askSound: + collection: XenonidSpeech + exclaimSound: + collection: XenonidSpeech From 1f21b4601ac3eaf000381cea99cecb731367bc7b Mon Sep 17 00:00:00 2001 From: Milon Date: Tue, 22 Oct 2024 09:07:26 +0200 Subject: [PATCH 005/173] disable the stupid fucking rate limit popup (#2033) I DON'T CARE --- Content.Server/Chat/Managers/ChatManager.RateLimit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Chat/Managers/ChatManager.RateLimit.cs b/Content.Server/Chat/Managers/ChatManager.RateLimit.cs index ccb38166a6d..86bd3619e5e 100644 --- a/Content.Server/Chat/Managers/ChatManager.RateLimit.cs +++ b/Content.Server/Chat/Managers/ChatManager.RateLimit.cs @@ -28,7 +28,7 @@ private void RateLimitPlayerLimited(ICommonSession player) private void RateLimitAlertAdmins(ICommonSession player) { - SendAdminAlert(Loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name))); + // SendAdminAlert(Loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name))); // DeltaV - I DON'T CARE } public RateLimitStatus HandleRateLimit(ICommonSession player) From c2b056facaca7fb22f4a1965db13f10a45231edf Mon Sep 17 00:00:00 2001 From: PPooch <42394661+PPooch@users.noreply.github.com> Date: Wed, 23 Oct 2024 03:04:53 -0400 Subject: [PATCH 006/173] Adding clerk access to evidence lockers and brig timers. (#2034) --- .../Entities/Structures/Storage/Closets/Lockers/lockers.yml | 2 +- Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 47bfcceedb0..53c2c4f4141 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -384,7 +384,7 @@ description: To store bags of bullet casings and detainee belongings. components: - type: AccessReader - access: [["Security"], ["Prosecutor"]] # DeltaV - allow Pros access to Evidence + access: [["Security"], ["Prosecutor"], ["Clerk"]] # DeltaV - allow Pros and Clerk access to Evidence # Syndicate - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index dabd93a339b..cd81687ec1e 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -89,7 +89,7 @@ description: It's a timer for brig cells. components: - type: AccessReader - access: [["Security"], ["Prosecutor"]] # DeltaV - Added justice dept + access: [["Security"], ["Prosecutor"], ["Clerk"]] # DeltaV - Added justice dept - type: Construction graph: Timer node: brig From 03c7849a87565f3f79a3900fad403e4545efa812 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Wed, 23 Oct 2024 09:05:13 +0200 Subject: [PATCH 007/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index da51e7964ed..6afd3f2ff3a 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: TJohnson - changes: - - message: Security has received new models of hardsuit! - type: Tweak - id: 117 - time: '2023-11-02T00:31:53.0000000+00:00' - author: ps3moira changes: - message: Added Two New Round-End Sounds @@ -3680,3 +3674,11 @@ id: 616 time: '2024-10-20T17:30:04.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2027 +- author: PPooch + changes: + - message: Clerks now have brig timer and evidence locker access. Don't steal the + Prosecutor's job from them! + type: Tweak + id: 617 + time: '2024-10-23T07:04:54.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2034 From a770b7ee547b04b56703a55544da9c1e294a532f Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:50:54 +0200 Subject: [PATCH 008/173] Fix cryo locale again (#32654) * Fix cryo locale again * yeep --- Content.Server/Bed/Cryostorage/CryostorageSystem.cs | 2 +- Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index cd4aa4a0981..345f51783ca 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -239,7 +239,7 @@ public void HandleEnterCryostorage(Entity ent, Ne Loc.GetString( "earlyleave-cryo-announcement", ("character", name), - ("entity", ent.Owner), + ("entity", ent.Owner), // gender things for supporting downstreams with other languages ("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName)) ), Loc.GetString("earlyleave-cryo-sender"), playDefaultSound: false diff --git a/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl b/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl index 7d1c0794435..f966f30e2d4 100644 --- a/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl +++ b/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl @@ -2,5 +2,6 @@ ### Announcement earlyleave-cryo-job-unknown = Unknown -earlyleave-cryo-announcement = {$character} ({$job}) { CONJUGATE-HAVE($entity) } entered cryogenic storage! +# {$entity} available for GENDER function purposes +earlyleave-cryo-announcement = {$character} ({$job}) has entered cryogenic storage! earlyleave-cryo-sender = Station From 71922a7aede4a62c004efca8474cadc9408d2497 Mon Sep 17 00:00:00 2001 From: shamp <140359015+shampunj@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:51:23 +0300 Subject: [PATCH 009/173] Fix cloth dupe (#32685) Update curtains.yml --- .../Prototypes/Entities/Structures/Decoration/curtains.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml b/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml index 1d5069c7da8..fc7fe23bb87 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml @@ -49,7 +49,7 @@ spawn: MaterialCloth1: min: 1 - max: 2 + max: 1 - type: WallMount arc: 360 From a941cc183001a7214b705ad4529a788b14c99195 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 8 Oct 2024 09:52:31 +0000 Subject: [PATCH 010/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d51092849de..1c3fd699c52 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Moved VGRoid from 1,000m away to ~500m. - type: Tweak - id: 6993 - time: '2024-07-28T03:14:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29943 - author: lzk228 changes: - message: Fixed pancakes stacks. Before it, splitting not default pancakes stacks @@ -3911,3 +3904,10 @@ id: 7492 time: '2024-10-07T22:42:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32429 +- author: shampunj + changes: + - message: When curtains are destroyed, only 1 cloth drops out + type: Tweak + id: 7493 + time: '2024-10-08T09:51:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32685 From f23335ea4e420474ff78c439867e2ebe2c6a7835 Mon Sep 17 00:00:00 2001 From: averystarbit Date: Tue, 8 Oct 2024 09:52:46 +0000 Subject: [PATCH 011/173] Added proper capitalisation for supervisors when entering the game (#32683) changed punctuation for jobs, added proper capitalization and comma usa --- .../en-US/deltav/job/job-supervisors.ftl | 2 +- .../Locale/en-US/job/job-supervisors.ftl | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Resources/Locale/en-US/deltav/job/job-supervisors.ftl b/Resources/Locale/en-US/deltav/job/job-supervisors.ftl index 3cf44813098..c5765d9d199 100644 --- a/Resources/Locale/en-US/deltav/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/deltav/job/job-supervisors.ftl @@ -1 +1 @@ -job-supervisors-cj = the chief justice +job-supervisors-cj = the Chief Justice diff --git a/Resources/Locale/en-US/job/job-supervisors.ftl b/Resources/Locale/en-US/job/job-supervisors.ftl index 46321f40dd0..2f7e0f06a50 100644 --- a/Resources/Locale/en-US/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/job/job-supervisors.ftl @@ -1,15 +1,15 @@ job-supervisors-centcom = Central Command -job-supervisors-captain = the captain -job-supervisors-hop = the head of personnel -job-supervisors-hos = the head of security -job-supervisors-ce = the chief engineer -job-supervisors-cmo = the chief medical officer -job-supervisors-rd = the mystagogue -job-supervisors-qm = the logistics officer -job-supervisors-service = chefs, botanists, the bartender, and the head of personnel -job-supervisors-engineering = station engineers, atmospheric technicians, and the chief engineer -job-supervisors-medicine = medical doctors, chemists, and the chief medical officer -job-supervisors-security = security officers, the warden, and the head of security -job-supervisors-science = scientists, and the mystagogue +job-supervisors-captain = the Captain +job-supervisors-hop = the Head of Personnel +job-supervisors-hos = the Head of Security +job-supervisors-ce = the Chief Engineer +job-supervisors-cmo = the Chief Medical Officer +job-supervisors-rd = the Mystagogue +job-supervisors-qm = the Logistics Officer +job-supervisors-service = Chefs, Botanists, the Bartender, and the Head of Personnel +job-supervisors-engineering = Station Engineers, Atmospheric Technicians, and the Chief Engineer +job-supervisors-medicine = Medical Doctors, Paramedics, Chemists, and the Chief Medical Officer +job-supervisors-security = Security Officers, the Warden, and the Head of Security +job-supervisors-science = Scientists and the Mystagogue job-supervisors-hire = whoever hires you job-supervisors-everyone = absolutely everyone From ac64152617bb70afb134bc2346d3f37d0d5e08bb Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Tue, 8 Oct 2024 02:53:50 -0700 Subject: [PATCH 012/173] Replace the Librarian's round-start D10 with a D20 (#32648) Replace D10 with a D20 --- Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml index a0d73320faf..4d6d8e019e6 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml @@ -20,7 +20,7 @@ shoes: ClothingShoesBootsLaceup id: LibrarianPDA ears: ClothingHeadsetService - pocket1: d10Dice + pocket1: d20Dice pocket2: HandLabeler # for making named bestsellers storage: back: From 8487cfc7fd57d951dfa818fcca050880c0c6f740 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 8 Oct 2024 09:54:56 +0000 Subject: [PATCH 013/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1c3fd699c52..572e3a19431 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Fixed pancakes stacks. Before it, splitting not default pancakes stacks - would give you default pancakes. - type: Fix - id: 6994 - time: '2024-07-28T03:49:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30270 - author: Plykiya changes: - message: Fixed the client mispredicting people slipping with their magboots turned @@ -3911,3 +3903,10 @@ id: 7493 time: '2024-10-08T09:51:23.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32685 +- author: Plykiya + changes: + - message: Librarians now start with a D20. + type: Tweak + id: 7494 + time: '2024-10-08T09:53:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32648 From aec6d3af45002c2d75009424af02087940ef0314 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Wed, 9 Oct 2024 06:29:37 +1200 Subject: [PATCH 014/173] CHIMP and APE particle speed increase (#32690) * swap omega and delta particle colours * remove upgrade doafter * explicit syndicate chip description * Syndicate CHIMP stealth * fast projectile speed * 10 to 12 shots * buff heat dmg * upgrade chip mentions omega particle * Revert "remove upgrade doafter" This reverts commit 8a321980b7a384daca06215656494e0c116e7333. * Revert "explicit syndicate chip description" This reverts commit c803c773739a61fc5b3a6cb90810622a6d5846c9. * Revert "Syndicate CHIMP stealth" This reverts commit 698a108580892addabf8d51494a72e1ee651b8e6. * Revert "10 to 12 shots" This reverts commit 858ac0392be0549eb0a288648413d1020cabae1a. * Revert "swap omega and delta particle colours" This reverts commit 4c000b2f110a5d35f317cb61cb5b03ea32841ad5. * Revert "buff heat dmg" This reverts commit 02a8690dafbd41631b098e51ef9afba5b6ee6ac4. --- .../Entities/Objects/Weapons/Guns/Battery/battery_guns.yml | 2 +- .../Entities/Structures/Machines/anomaly_equipment.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 62eaf20f783..d6269efcc0d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -652,7 +652,7 @@ - type: Clothing sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi - type: Gun - projectileSpeed: 4 + projectileSpeed: 10 fireRate: 1.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser2.ogg diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 4d4eff1f702..1761f176da7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -184,7 +184,7 @@ guides: - APE - type: Gun - projectileSpeed: 4 + projectileSpeed: 10 fireRate: 10 #just has to be fast enough to keep up with upgrades showExamineText: false selectedMode: SemiAuto From 5cadc7419ac384aae235fe63666ab9f2785c14a6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 8 Oct 2024 18:30:44 +0000 Subject: [PATCH 015/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 572e3a19431..b2a93b99b17 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Fixed the client mispredicting people slipping with their magboots turned - on - type: Fix - id: 6995 - time: '2024-07-28T06:17:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30425 - author: Katzenminer changes: - message: Pun and similar pets are no longer firemune @@ -3910,3 +3902,10 @@ id: 7494 time: '2024-10-08T09:53:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32648 +- author: K-Dynamic + changes: + - message: CHIMP and APE particles should be almost as fast as before + type: Tweak + id: 7495 + time: '2024-10-08T18:29:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32690 From f9a12e4c1a5a7bcb62c7f6da91895ff184bcdf88 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:29:41 -0700 Subject: [PATCH 016/173] Add pumpkin pie! (#32623) * first commit * Licence fix * rosysyntax licence change (permission granted!) * simplify * Better wording --- .../Objects/Consumable/Food/Baked/pie.yml | 39 +++++++++++++++++- .../Recipes/Cooking/meal_recipes.yml | 12 +++++- .../Consumable/Food/Baked/pie.rsi/meta.json | 8 +++- .../Food/Baked/pie.rsi/pumpkin-slice.png | Bin 0 -> 499 bytes .../Consumable/Food/Baked/pie.rsi/pumpkin.png | Bin 0 -> 600 bytes 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml index c9ac4833431..b86a4201e8b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml @@ -23,7 +23,7 @@ - ReagentId: Vitamin Quantity: 5 - type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie! - trash: + trash: - FoodPlateTin - type: SliceableFood count: 4 @@ -317,6 +317,43 @@ - Slice # Tastes like pie, meat. +- type: entity + name: pumpkin pie + parent: FoodPieBase + id: FoodPiePumpkin + description: Someone should turn this into a latte! + components: + - type: FlavorProfile + flavors: + - sweet + - pumpkin + - type: Sprite + layers: + - state: tin + - state: pumpkin + - type: SliceableFood + slice: FoodPiePumpkinSlice + - type: Tag + tags: + - Pie + +- type: entity + name: slice of pumpkin pie + parent: FoodPieSliceBase + id: FoodPiePumpkinSlice + components: + - type: FlavorProfile + flavors: + - sweet + - pumpkin + - type: Sprite + layers: + - state: pumpkin-slice + - type: Tag + tags: + - Pie + - Slice + - type: entity name: xeno pie parent: FoodPieBase diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 8dc25c1c725..fa2b6573915 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1062,6 +1062,16 @@ FoodMeat: 3 FoodPlateTin: 1 +- type: microwaveMealRecipe + id: RecipePumpkinPie + name: pumpkin pie recipe + result: FoodPiePumpkin + time: 15 + solids: + FoodDoughPie: 1 + FoodPumpkin: 1 + FoodPlateTin: 1 + #- type: microwaveMealRecipe # id: RecipePlumpPie # name: plump pie recipe @@ -1978,4 +1988,4 @@ solids: FoodCroissantRaw: 1 FoodButterSlice: 1 - ShardGlass: 1 \ No newline at end of file + ShardGlass: 1 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json index ced8d583736..644424690db 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, mime tart slice and banana cream pie slice from rosysyntax under under CC BY-SA 4.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, the pumpkin and pumpkin slice are made by ss14nekow (Mute Maid), the mime tart slice and banana cream pie slice are made by rosysyntax.", "size": { "x": 32, "y": 32 @@ -95,6 +95,12 @@ { "name": "plump" }, + { + "name": "pumpkin" + }, + { + "name": "pumpkin-slice" + }, { "name": "tin" }, diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png new file mode 100644 index 0000000000000000000000000000000000000000..e462de6b654c318147b680e25f1059c62f28de44 GIT binary patch literal 499 zcmVtLEM_DRCyT3p|q;m_xz4EJ|^V$f+k4_5M|NfoA);n`O zj10ejd}h#{{1vYqEO4C!7>q&;3_=1t3@vVfgmr z7uaGc?k^17Tx<+qzkO!lWs?M&dIzt`L`A`^w*p{8-hKGOAgsj0ux8#=utRK$Yr#GS zSq_Q%13-#FX#o@!AiyVS$8h@4B?gK2?-*e54GMB%d<`)HLXzYFkQU^SczEtPgTNng zumd!@Uyy7T$UL$%!5ktg@sZ*63x0;s*6U=O12StAjE2By2#kin$PNJj&Z~-Q6TnoW p0000EWmrjOO-%qQ00008000000002eQ_Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f18879448f8ef498b1765d6515bd676932c3bf GIT binary patch literal 600 zcmV-e0;m0nP)rD(u{f{TJ#^gopNCls<0x(U=j(NO#YuF4246e@HP zQ1Am$D6KjJ)e<2SDrz#$xfpR_Cdt}&A@9A+JNKS*&&&l>C1NZ#9R$S&uI zCwCXRCs+z*ZYvR?0@z;vxFH2kt3IB@xfZCvjd&g5*~h75UK-<}w_| zk^P~isXf_jRx?dgThNL%^UWNtc1uFS?im!(8+6T}Fb2sfL@+N#;r{%NPkv5!T^F`( zKlm*)6~KZNk;!C`bqm*l2yu%-NJuj7_k{@g#4Dzf{M0t{gQZfbDLHYW0tlc8;?n7~ zZx{x0&wtb#W605Ca3mXJSo|}q)AF#cCFyo)DWCzq6~e!KHS*Z9ET3elR0`#CnWU^I zR@1pwBPhkBQU?piDzNpAh^c(Pfxt*WT5pH613Cp&4k!nd1CPLg8&)pjkcyO^p8x;= m4rN$LW=%~1DgXcg2mk;800000(o>TF0000 Date: Tue, 8 Oct 2024 23:30:49 +0000 Subject: [PATCH 017/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b2a93b99b17..be6f0e65732 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Katzenminer - changes: - - message: Pun and similar pets are no longer firemune - type: Fix - id: 6996 - time: '2024-07-28T08:32:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30424 - author: lzk228 changes: - message: Fixed permanent absence of the approver string in cargo invoice. @@ -3909,3 +3902,11 @@ id: 7495 time: '2024-10-08T18:29:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32690 +- author: ss14nekow + changes: + - message: Added pumpkin pie! Can be made in the microwave with 1 pie tin, 1 pie + dough, and 1 pumpkin. + type: Add + id: 7496 + time: '2024-10-08T23:29:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32623 From a1edff8457d6137e33d2e53309570601f30a9bd6 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 9 Oct 2024 13:41:03 +0200 Subject: [PATCH 018/173] Update submodule to v236.1.0 (#32704) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 1c3ea968e4a..d1d43f834b8 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 1c3ea968e4ab66d57ffe014f6ee207e4d0d2c403 +Subproject commit d1d43f834b8845da698ef1898e8191ab159ee367 From 8c2f2cfe2b748bba17a9219e9552306294b68442 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:55:48 +0200 Subject: [PATCH 019/173] Add admin log for codewords (#32531) * initial commit * Delta review --- Content.Server/GameTicking/Rules/TraitorRuleSystem.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 4e4191a51bf..56b652ed9a0 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Administration.Logs; using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; using Content.Server.Mind; @@ -5,6 +6,7 @@ using Content.Server.PDA.Ringer; using Content.Server.Roles; using Content.Server.Traitor.Uplink; +using Content.Shared.Database; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; using Content.Shared.NPC.Systems; @@ -25,6 +27,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem { private static readonly Color TraitorCodewordColor = Color.FromHex("#cc3b3b"); + [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly NpcFactionSystem _npcFaction = default!; @@ -47,7 +50,7 @@ public override void Initialize() protected override void Added(EntityUid uid, TraitorRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) { base.Added(uid, component, gameRule, args); - SetCodewords(component); + SetCodewords(component, args.RuleEntity); } private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) @@ -55,9 +58,10 @@ private void AfterEntitySelected(Entity ent, ref AfterAnta MakeTraitor(args.EntityUid, ent); } - private void SetCodewords(TraitorRuleComponent component) + private void SetCodewords(TraitorRuleComponent component, EntityUid ruleEntity) { component.Codewords = GenerateTraitorCodewords(component); + _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for game rule {ToPrettyString(ruleEntity)}: {string.Join(", ", component.Codewords)}"); } public string[] GenerateTraitorCodewords(TraitorRuleComponent component) From 9bdc63654b64b17aaf1b953f50150f90483295ad Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 9 Oct 2024 11:56:57 +0000 Subject: [PATCH 020/173] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 0137c7b3403..a111689626a 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -552,5 +552,12 @@ Entries: id: 68 time: '2024-09-23T07:28:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32395 +- author: SlamBamActionman + changes: + - message: Added admin logging for generated codewords. + type: Add + id: 69 + time: '2024-10-09T11:55:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32531 Name: Admin Order: 3 From 18992f504c10975e4c15ec23e56edd190feb7fbd Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:41:07 +0200 Subject: [PATCH 021/173] fix typo (#32712) --- .../Prototypes/Entities/Objects/Misc/fire_extinguisher.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index b306da64421..b0c586fc753 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -97,7 +97,7 @@ name: pocket fire extinguisher parent: FireExtinguisher id: FireExtinguisherMini - description: A light and compact fibreglass-framed model fire extinguisher. It holds less water then its bigger brother. + description: A light and compact fibreglass-framed model fire extinguisher. It holds less water than its bigger brother. components: - type: Sprite sprite: Objects/Misc/fire_extinguisher_mini.rsi From 11e1e0ba464294eaaa9d7cfb3f4a0652976fca69 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Wed, 9 Oct 2024 05:44:38 -0700 Subject: [PATCH 022/173] Decrease price of radio jammer from 4 tc -> 3 tc (#32472) * First commit * increase price by one tc --- Resources/Prototypes/Catalog/uplink_catalog.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 5dced91b93f..93c6998469d 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -885,7 +885,7 @@ discountDownTo: Telecrystal: 2 cost: - Telecrystal: 4 + Telecrystal: 3 categories: - UplinkDisruption From 7bf5f25901dc7d4846ce2e5097eb7570b9054784 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 9 Oct 2024 12:45:45 +0000 Subject: [PATCH 023/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index be6f0e65732..60841caa60a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Fixed permanent absence of the approver string in cargo invoice. - type: Fix - id: 6997 - time: '2024-07-29T06:19:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29690 - author: JIPDawg changes: - message: F9 is correctly bound to the Round End Summary window by default now. @@ -3910,3 +3903,10 @@ id: 7496 time: '2024-10-08T23:29:41.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32623 +- author: Beck Thompson + changes: + - message: The radio jammers price has been decreased from 4 -> 3 TC. + type: Tweak + id: 7497 + time: '2024-10-09T12:44:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32472 From a24c85a1dd9974ae147dea8923eb56fdbb71f647 Mon Sep 17 00:00:00 2001 From: chavonadelal <156101927+chavonadelal@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:05:36 +0300 Subject: [PATCH 024/173] Job title localization (#32338) * Job title localization * Correcting fields --- Content.Server/Access/Systems/AgentIDCardSystem.cs | 2 +- Content.Server/Access/Systems/IdCardConsoleSystem.cs | 2 +- Content.Server/IdentityManagement/IdentitySystem.cs | 2 +- Content.Server/Medical/SuitSensors/SuitSensorSystem.cs | 4 ++-- Content.Server/PDA/PdaSystem.cs | 2 +- Content.Shared/Access/Components/IdCardComponent.cs | 7 ++++++- Content.Shared/Access/Systems/IdExaminableSystem.cs | 2 +- Content.Shared/Access/Systems/SharedIdCardSystem.cs | 9 +++++---- Resources/Locale/en-US/job/job-names.ftl | 5 +++++ .../Entities/Objects/Misc/identification_cards.yml | 6 +++--- 10 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Content.Server/Access/Systems/AgentIDCardSystem.cs b/Content.Server/Access/Systems/AgentIDCardSystem.cs index 4de908bc301..a38aefce935 100644 --- a/Content.Server/Access/Systems/AgentIDCardSystem.cs +++ b/Content.Server/Access/Systems/AgentIDCardSystem.cs @@ -67,7 +67,7 @@ private void AfterUIOpen(EntityUid uid, AgentIDCardComponent component, AfterAct if (!TryComp(uid, out var idCard)) return; - var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.JobTitle ?? "", idCard.JobIcon); + var state = new AgentIDCardBoundUserInterfaceState(idCard.FullName ?? "", idCard.LocalizedJobTitle ?? "", idCard.JobIcon); _uiSystem.SetUiState(uid, AgentIDCardUiKey.Key, state); } diff --git a/Content.Server/Access/Systems/IdCardConsoleSystem.cs b/Content.Server/Access/Systems/IdCardConsoleSystem.cs index e02664f2bbd..a9e5d9a6d3e 100644 --- a/Content.Server/Access/Systems/IdCardConsoleSystem.cs +++ b/Content.Server/Access/Systems/IdCardConsoleSystem.cs @@ -96,7 +96,7 @@ private void UpdateUserInterface(EntityUid uid, IdCardConsoleComponent component PrivilegedIdIsAuthorized(uid, component), true, targetIdComponent.FullName, - targetIdComponent.JobTitle, + targetIdComponent.LocalizedJobTitle, targetAccessComponent.Tags.ToList(), possibleAccess, jobProto, diff --git a/Content.Server/IdentityManagement/IdentitySystem.cs b/Content.Server/IdentityManagement/IdentitySystem.cs index e110a424834..ff6901f5a92 100644 --- a/Content.Server/IdentityManagement/IdentitySystem.cs +++ b/Content.Server/IdentityManagement/IdentitySystem.cs @@ -166,7 +166,7 @@ private IdentityRepresentation GetIdentityRepresentation(EntityUid target, if (_idCard.TryFindIdCard(target, out var id)) { presumedName = string.IsNullOrWhiteSpace(id.Comp.FullName) ? null : id.Comp.FullName; - presumedJob = id.Comp.JobTitle?.ToLowerInvariant(); + presumedJob = id.Comp.LocalizedJobTitle?.ToLowerInvariant(); } // If it didn't find a job, that's fine. diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index b1b87ae981d..f56b16432e1 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -363,8 +363,8 @@ public void SetSensor(Entity sensors, SuitSensorMode mode, { if (card.Comp.FullName != null) userName = card.Comp.FullName; - if (card.Comp.JobTitle != null) - userJob = card.Comp.JobTitle; + if (card.Comp.LocalizedJobTitle != null) + userJob = card.Comp.LocalizedJobTitle; userJobIcon = card.Comp.JobIcon; foreach (var department in card.Comp.JobDepartments) diff --git a/Content.Server/PDA/PdaSystem.cs b/Content.Server/PDA/PdaSystem.cs index cdcdbc02e5f..7f17b97d0ad 100644 --- a/Content.Server/PDA/PdaSystem.cs +++ b/Content.Server/PDA/PdaSystem.cs @@ -192,7 +192,7 @@ public void UpdatePdaUi(EntityUid uid, PdaComponent? pda = null) { ActualOwnerName = pda.OwnerName, IdOwner = id?.FullName, - JobTitle = id?.JobTitle, + JobTitle = id?.LocalizedJobTitle, StationAlertLevel = pda.StationAlertLevel, StationAlertColor = pda.StationAlertColor }, diff --git a/Content.Shared/Access/Components/IdCardComponent.cs b/Content.Shared/Access/Components/IdCardComponent.cs index ccd4cccbe7b..e80ced64643 100644 --- a/Content.Shared/Access/Components/IdCardComponent.cs +++ b/Content.Shared/Access/Components/IdCardComponent.cs @@ -20,7 +20,12 @@ public sealed partial class IdCardComponent : Component [DataField] [AutoNetworkedField] [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite)] - public string? JobTitle; + public LocId? JobTitle; + + private string? _jobTitle; + + [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWriteExecute)] + public string? LocalizedJobTitle { set => _jobTitle = value; get => _jobTitle ?? Loc.GetString(JobTitle ?? string.Empty); } /// /// The state of the job icon rsi. diff --git a/Content.Shared/Access/Systems/IdExaminableSystem.cs b/Content.Shared/Access/Systems/IdExaminableSystem.cs index 13359adcba2..807ccc6616d 100644 --- a/Content.Shared/Access/Systems/IdExaminableSystem.cs +++ b/Content.Shared/Access/Systems/IdExaminableSystem.cs @@ -67,7 +67,7 @@ public string GetMessage(EntityUid uid) private string GetNameAndJob(IdCardComponent id) { - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})"; var val = string.IsNullOrWhiteSpace(id.FullName) ? Loc.GetString(id.NameLocId, diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 8bdc548e353..a5a37eecbd0 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -116,6 +116,7 @@ public bool TryGetIdCard(EntityUid uid, out Entity idCard) /// /// /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// Actually works with the LocalizedJobTitle DataField and not with JobTitle. /// public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) { @@ -134,9 +135,9 @@ public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? jobTitle = null; } - if (id.JobTitle == jobTitle) + if (id.LocalizedJobTitle == jobTitle) return true; - id.JobTitle = jobTitle; + id.LocalizedJobTitle = jobTitle; Dirty(uid, id); UpdateEntityName(uid, id); @@ -238,7 +239,7 @@ private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) if (!Resolve(uid, ref id)) return; - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})"; var val = string.IsNullOrWhiteSpace(id.FullName) ? Loc.GetString(id.NameLocId, @@ -251,7 +252,7 @@ private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) private static string ExtractFullTitle(IdCardComponent idCardComponent) { - return $"{idCardComponent.FullName} ({CultureInfo.CurrentCulture.TextInfo.ToTitleCase(idCardComponent.JobTitle ?? string.Empty)})" + return $"{idCardComponent.FullName} ({CultureInfo.CurrentCulture.TextInfo.ToTitleCase(idCardComponent.LocalizedJobTitle ?? string.Empty)})" .Trim(); } } diff --git a/Resources/Locale/en-US/job/job-names.ftl b/Resources/Locale/en-US/job/job-names.ftl index db6c9e46808..62c109545c0 100644 --- a/Resources/Locale/en-US/job/job-names.ftl +++ b/Resources/Locale/en-US/job/job-names.ftl @@ -64,6 +64,11 @@ job-name-unknown = Unknown job-name-virologist = Virologist job-name-zombie = Zombie +# Job titles +job-title-visitor = Visitor +job-title-cluwne = Cluwne +job-title-universal = Universal + # Role timers - Make these alphabetical or I cut you JobAtmosphericTechnician = Atmospheric Technician JobBartender = Bartender diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 73693a9e068..34fc96af2a7 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -445,7 +445,7 @@ - state: default - state: idvisitor - type: IdCard - jobTitle: Visitor + jobTitle: job-title-visitor jobIcon: JobIconVisitor - type: PresetIdCard job: Visitor @@ -745,7 +745,7 @@ - state: default - state: idcluwne - type: IdCard - jobTitle: Cluwne + jobTitle: job-title-cluwne - type: Unremoveable - type: entity @@ -817,7 +817,7 @@ - type: Item heldPrefix: green - type: IdCard - jobTitle: Universal + jobTitle: job-title-universal jobIcon: JobIconAdmin - type: Access groups: From f194cc45c952d19d3456b254eba8533151904607 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:01:32 -0700 Subject: [PATCH 025/173] Plushies can now have pAIs stuffed into them (v2)! (#30805) * First commit * I forgot silly me * Actually added comments * spellin * fixes * more blacklists * Minor fixes * Speech Verb also changes now * Simple name stuff * Other fixes * remove one line of whitespace --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../EntitySystems/ReagentGrinderSystem.cs | 4 +++ .../Nutrition/EntitySystems/FoodSystem.cs | 4 +++ .../ChangeNameInContainerComponent.cs | 18 +++++++++++ .../ChangeNameInContainerSystem.cs | 30 +++++++++++++++++++ .../Components/SecretStashComponent.cs | 7 +++++ .../EntitySystems/SecretStashSystem.cs | 8 +++-- .../components/secret-stash-component.ftl | 1 + .../Prototypes/Entities/Objects/Fun/pai.yml | 4 +++ .../Prototypes/Entities/Objects/Fun/toys.yml | 20 +++++++++++++ .../Entities/Objects/Misc/dat_fukken_disk.yml | 3 ++ .../Structures/Furniture/potted_plants.yml | 2 ++ Resources/Prototypes/tags.yml | 5 +++- 12 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs create mode 100644 Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index 12c5a30a4b2..de848b34c2c 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Destructible; using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Kitchen; @@ -122,6 +123,9 @@ public override void Update(float frameTime) if (solution.Volume > containerSolution.AvailableVolume) continue; + var dev = new DestructionEventArgs(); + RaiseLocalEvent(item, dev); + QueueDel(item); } diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 3a7c249c2b3..d7daf632d66 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -33,6 +33,7 @@ using Content.Shared.Containers.ItemSlots; using Robust.Server.GameObjects; using Content.Shared.Whitelist; +using Content.Shared.Destructible; namespace Content.Server.Nutrition.EntitySystems; @@ -335,6 +336,9 @@ public void DeleteAndSpawnTrash(FoodComponent component, EntityUid food, EntityU if (ev.Cancelled) return; + var dev = new DestructionEventArgs(); + RaiseLocalEvent(food, dev); + if (component.Trash.Count == 0) { QueueDel(food); diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs new file mode 100644 index 00000000000..dca8f5b29b4 --- /dev/null +++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.ChangeNameInContainer; + +/// +/// An entity with this component will get its name and verb chaned to the container it's inside of. E.g, if your a +/// pAI that has this component and are inside a lizard plushie, your name when talking will be "lizard plushie". +/// +[RegisterComponent, NetworkedComponent, Access(typeof(ChangeNameInContainerSystem))] +public sealed partial class ChangeVoiceInContainerComponent : Component +{ + /// + /// A whitelist of containers that will change the name. + /// + [DataField] + public EntityWhitelist? Whitelist; +} diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs new file mode 100644 index 00000000000..f9abda3ec23 --- /dev/null +++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Chat; +using Robust.Shared.Containers; +using Content.Shared.Whitelist; +using Content.Shared.Speech; + +namespace Content.Shared.ChangeNameInContainer; + +public sealed partial class ChangeNameInContainerSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnTransformSpeakerName); + } + + private void OnTransformSpeakerName(Entity ent, ref TransformSpeakerNameEvent args) + { + if (!_container.TryGetContainingContainer((ent, null, null), out var container) + || _whitelist.IsWhitelistFail(ent.Comp.Whitelist, container.Owner)) + return; + + args.VoiceName = Name(container.Owner); + if (TryComp(container.Owner, out var speechComp)) + args.SpeechVerb = speechComp.SpeechVerb; + } + +} diff --git a/Content.Shared/Storage/Components/SecretStashComponent.cs b/Content.Shared/Storage/Components/SecretStashComponent.cs index 3bf8e2e871b..f8fff4c1949 100644 --- a/Content.Shared/Storage/Components/SecretStashComponent.cs +++ b/Content.Shared/Storage/Components/SecretStashComponent.cs @@ -8,6 +8,7 @@ using Content.Shared.DoAfter; using Robust.Shared.Serialization; using Robust.Shared.Audio; +using Content.Shared.Whitelist; namespace Content.Shared.Storage.Components { @@ -26,6 +27,12 @@ public sealed partial class SecretStashComponent : Component [DataField("maxItemSize")] public ProtoId MaxItemSize = "Small"; + /// + /// Entity blacklist for secret stashes. + /// + [DataField] + public EntityWhitelist? Blacklist; + /// /// This sound will be played when you try to insert an item in the stash. /// The sound will be played whether or not the item is actually inserted. diff --git a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs index 901d744df5f..08a69c345f0 100644 --- a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs @@ -13,6 +13,7 @@ using Content.Shared.Verbs; using Content.Shared.IdentityManagement; using Content.Shared.Tools.EntitySystems; +using Content.Shared.Whitelist; namespace Content.Shared.Storage.EntitySystems; @@ -27,7 +28,7 @@ public sealed class SecretStashSystem : EntitySystem [Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ToolOpenableSystem _toolOpenableSystem = default!; - + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { @@ -90,8 +91,9 @@ private bool TryStashItem(Entity entity, EntityUid userUid return false; } - // check if item is too big to fit into secret stash - if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize)) + // check if item is too big to fit into secret stash or is in the blacklist + if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize) || + _whitelistSystem.IsBlacklistPass(entity.Comp.Blacklist, itemToHideUid)) { var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big", ("item", itemToHideUid), ("stashname", GetStashName(entity))); diff --git a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl index 36892428070..16e575c0f13 100644 --- a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl +++ b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl @@ -22,3 +22,4 @@ comp-secret-stash-verb-open = Open ### Stash names secret-stash-plant = plant secret-stash-toilet = toilet cistern +secret-stash-plushie = plushie diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index ff662c2186a..b4af7f010e0 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -69,6 +69,10 @@ Searching: { state: pai-searching-overlay } On: { state: pai-on-overlay } - type: StationMap + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash - type: entity parent: [ PersonalAI, BaseSyndicateContraband] diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 65ba53fcccf..0da9aaec588 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -52,6 +52,24 @@ reagents: - ReagentId: Fiber Quantity: 10 + - type: ContainerContainer + containers: + stash: !type:ContainerSlot {} + - type: Speech + speechVerb: Default # for pais (In the secret stash) + - type: SecretStash + secretStashName: secret-stash-plushie + blacklist: + components: + - SecretStash # Prevents being able to insert plushies inside each other (infinite plush)! + - NukeDisk # Could confuse the nukies if they don't know that plushies have a stash. + tags: + - QuantumSpinInverter # It will cause issues with the grinder... + - FakeNukeDisk # So you can't tell if the nuke disk is real or fake depending on if it can be inserted or not. + - type: ToolOpenable + openToolQualityNeeded: Slicing + closeToolQualityNeeded: Slicing # Should probably be stitching or something if that gets added + name: secret-stash-plushie - type: entity parent: BasePlushie @@ -323,6 +341,8 @@ equippedPrefix: lizard slots: - HEAD + - type: Speech + speechVerb: Reptilian # for pais (In the secret stash) - type: entity parent: PlushieLizard diff --git a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml index 90e975b93ef..e1fc3fa5b6f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml @@ -35,3 +35,6 @@ state: icon - type: StaticPrice price: 1 # it's worth even less than normal items. Perfection. + - type: Tag + tags: + - FakeNukeDisk diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml index 61edb22d220..e47a63ab730 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml @@ -25,6 +25,8 @@ offset: "0.0,0.3" sprite: Structures/Furniture/potted_plants.rsi noRot: true + - type: Speech + speechVerb: Plant # for pais (In the secret stash) - type: SecretStash tryInsertItemSound: /Audio/Effects/plant_rustle.ogg tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index de10389797d..1928318593f 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -993,6 +993,9 @@ - type: Tag id: Nugget # for chicken nuggets +- type: Tag + id: FakeNukeDisk + - type: Tag id: NukeOpsUplink @@ -1180,7 +1183,7 @@ - type: Tag id: SecureWindoor -- type: Tag +- type: Tag id: SecurityHelmet - type: Tag From daa5fa194e9c6d4472d4410cb9c38e281a9d876d Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 9 Oct 2024 18:02:38 +0000 Subject: [PATCH 026/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 60841caa60a..9605db2901c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: JIPDawg - changes: - - message: F9 is correctly bound to the Round End Summary window by default now. - type: Fix - id: 6998 - time: '2024-07-29T06:49:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30438 - author: githubuser508 changes: - message: Candles crate and the ability for Cargo to order it. @@ -3910,3 +3903,16 @@ id: 7497 time: '2024-10-09T12:44:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32472 +- author: beck-thompson, Moomoobeef + changes: + - message: Plushies now can have small items stuffed inside of them! To open, click + on the plush with a sharp item. You can then insert a small item into the plush. + To close, just click on it again with any sharp item! + type: Add + - message: When pAIs are inserted into plushies, their names will be updated to + the plushies name. E.g when inside a lizard plushie the pAI's name will appear + as "lizard plushie" when speaking. + type: Add + id: 7498 + time: '2024-10-09T18:01:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30805 From e475512e7b7922335dd9ac12837dde7162f12ec5 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Thu, 10 Oct 2024 03:29:26 +0200 Subject: [PATCH 027/173] Fix error log when recycling something with small material counts. (#32723) * Fix error log when recycling something with small material counts. MaterialStorageSystem.SpawnMultipleFromMaterial now doesn't call StackSystem.SpawnMultiple if it tries to spawn zero. This happens because the recycler calls SpawnMultipleFromMaterial for everything recycled, even if the amount it has stored is < the amount for one sheet. * Update Content.Server/Materials/MaterialStorageSystem.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Server/Materials/MaterialStorageSystem.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Content.Server/Materials/MaterialStorageSystem.cs b/Content.Server/Materials/MaterialStorageSystem.cs index 25e409fd010..9f43a220493 100644 --- a/Content.Server/Materials/MaterialStorageSystem.cs +++ b/Content.Server/Materials/MaterialStorageSystem.cs @@ -175,6 +175,10 @@ public List SpawnMultipleFromMaterial(int amount, MaterialPrototype m var materialPerStack = composition.MaterialComposition[materialProto.ID]; var amountToSpawn = amount / materialPerStack; overflowMaterial = amount - amountToSpawn * materialPerStack; + + if (amountToSpawn == 0) + return new List(); + return _stackSystem.SpawnMultiple(materialProto.StackEntity, amountToSpawn, coordinates); } From ab5d439272ea4f8c7d60b01e221719bd7efd1096 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:48:56 +0200 Subject: [PATCH 028/173] Mind Role Entities (#31318) * Mind Role Entities wip * headrev count fix * silicon stuff, cleanup * exclusive antag config, cleanup * jobroleadd overwerite * logging stuff * MindHasRole cleanup, admin log stuff * last second cleanup * ocd * minor cleanup * remove createdTime datafield * now actually using the event replacement I made for role time tracking * weh --- .../Tests/GameRules/NukeOpsTest.cs | 21 +- .../Tests/Internals/AutoInternalsTests.cs | 6 +- .../Tests/Minds/MindTests.cs | 21 +- .../Tests/Preferences/LoadoutTests.cs | 6 +- Content.Server/Antag/AntagSelectionSystem.cs | 27 +- .../Components/AntagSelectionComponent.cs | 8 +- Content.Server/Cloning/CloningSystem.cs | 2 +- .../EffectConditions/JobCondition.cs | 44 +- .../GameTicking/GameTicker.RoundFlow.cs | 6 +- .../GameTicking/GameTicker.Spawning.cs | 13 +- .../GameTicking/Rules/NukeopsRuleSystem.cs | 37 +- .../Rules/RevolutionaryRuleSystem.cs | 37 +- .../GameTicking/Rules/ThiefRuleSystem.cs | 35 +- .../GameTicking/Rules/TraitorRuleSystem.cs | 31 +- .../GameTicking/Rules/ZombieRuleSystem.cs | 29 +- .../Roles/GhostRoleMarkerRoleComponent.cs | 6 +- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 17 +- .../Mind/Commands/MindInfoCommand.cs | 2 +- .../Systems/KillPersonConditionSystem.cs | 2 +- .../Systems/NinjaConditionsSystem.cs | 8 +- .../Systems/NotCommandRequirementSystem.cs | 2 +- .../Systems/NotJobRequirementSystem.cs | 9 +- .../Systems/RoleRequirementSystem.cs | 2 - .../PlayTimeTrackingSystem.cs | 14 +- .../Components/CommandStaffComponent.cs | 2 + Content.Server/Roles/DragonRoleComponent.cs | 6 +- .../Roles/InitialInfectedRoleComponent.cs | 7 +- Content.Server/Roles/Jobs/JobSystem.cs | 4 +- Content.Server/Roles/NinjaRoleComponent.cs | 7 +- Content.Server/Roles/NukeopsRoleComponent.cs | 6 +- Content.Server/Roles/RemoveRoleCommand.cs | 2 +- .../Roles/RevolutionaryRoleComponent.cs | 6 +- Content.Server/Roles/RoleSystem.cs | 50 +- .../Roles/SubvertedSiliconRoleComponent.cs | 5 +- Content.Server/Roles/ThiefRoleComponent.cs | 5 +- Content.Server/Roles/TraitorRoleComponent.cs | 7 +- Content.Server/Roles/ZombieRoleComponent.cs | 7 +- .../Silicons/Laws/SiliconLawSystem.cs | 12 +- .../ContainerSpawnPointSystem.cs | 10 +- .../EntitySystems/SpawnPointSystem.cs | 2 +- .../Station/Systems/StationSpawningSystem.cs | 30 +- .../Store/Conditions/BuyerAntagCondition.cs | 11 +- .../Conditions/BuyerDepartmentCondition.cs | 10 +- .../Store/Conditions/BuyerJobCondition.cs | 6 +- .../Zombies/ZombieSystem.Transform.cs | 17 +- .../Mind/Components/MindContainerComponent.cs | 2 - Content.Shared/Mind/MindComponent.cs | 13 +- .../Roles/AntagonistRoleComponent.cs | 20 - Content.Shared/Roles/Jobs/JobComponent.cs | 15 - Content.Shared/Roles/Jobs/JobRoleComponent.cs | 12 + Content.Shared/Roles/Jobs/SharedJobSystem.cs | 46 +- ...lesEvent.cs => MindGetAllRoleInfoEvent.cs} | 4 +- Content.Shared/Roles/MindRoleComponent.cs | 48 ++ Content.Shared/Roles/SharedRoleSystem.cs | 482 +++++++++++++----- Content.Shared/Whitelist/EntityWhitelist.cs | 6 + .../Whitelist/EntityWhitelistSystem.cs | 46 +- .../game-presets/preset-nukeops.ftl | 1 + Resources/Prototypes/GameRules/events.yml | 26 +- Resources/Prototypes/GameRules/midround.yml | 5 +- Resources/Prototypes/GameRules/roundstart.yml | 30 +- Resources/Prototypes/Objectives/dragon.yml | 2 +- Resources/Prototypes/Objectives/ninja.yml | 2 +- Resources/Prototypes/Objectives/thief.yml | 2 +- Resources/Prototypes/Objectives/traitor.yml | 2 +- .../Prototypes/Roles/MindRoles/mind_roles.yml | 180 +++++++ 65 files changed, 1033 insertions(+), 508 deletions(-) delete mode 100644 Content.Shared/Roles/AntagonistRoleComponent.cs delete mode 100644 Content.Shared/Roles/Jobs/JobComponent.cs create mode 100644 Content.Shared/Roles/Jobs/JobRoleComponent.cs rename Content.Shared/Roles/{MindGetAllRolesEvent.cs => MindGetAllRoleInfoEvent.cs} (79%) create mode 100644 Content.Shared/Roles/MindRoleComponent.cs create mode 100644 Resources/Prototypes/Roles/MindRoles/mind_roles.yml diff --git a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs index a4563aa37e6..039c0c7b184 100644 --- a/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs +++ b/Content.IntegrationTests/Tests/GameRules/NukeOpsTest.cs @@ -1,4 +1,5 @@ #nullable enable +using System.Collections.Generic; using System.Linq; using Content.Server.Body.Components; using Content.Server.GameTicking; @@ -120,8 +121,8 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(roleSys.MindHasRole(mind)); Assert.That(factionSys.IsMember(player, "Syndicate"), Is.True); Assert.That(factionSys.IsMember(player, "NanoTrasen"), Is.False); - var roles = roleSys.MindGetAllRoles(mind); - var cmdRoles = roles.Where(x => x.Prototype == "NukeopsCommander" && x.Component is NukeopsRoleComponent); + var roles = roleSys.MindGetAllRoleInfo(mind); + var cmdRoles = roles.Where(x => x.Prototype == "NukeopsCommander"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); // The second dummy player should be a medic @@ -131,8 +132,8 @@ public async Task TryStopNukeOpsFromConstantlyFailing() Assert.That(roleSys.MindHasRole(dummyMind)); Assert.That(factionSys.IsMember(dummyEnts[1], "Syndicate"), Is.True); Assert.That(factionSys.IsMember(dummyEnts[1], "NanoTrasen"), Is.False); - roles = roleSys.MindGetAllRoles(dummyMind); - cmdRoles = roles.Where(x => x.Prototype == "NukeopsMedic" && x.Component is NukeopsRoleComponent); + roles = roleSys.MindGetAllRoleInfo(dummyMind); + cmdRoles = roles.Where(x => x.Prototype == "NukeopsMedic"); Assert.That(cmdRoles.Count(), Is.EqualTo(1)); // The other two players should have just spawned in as normal. @@ -141,13 +142,14 @@ public async Task TryStopNukeOpsFromConstantlyFailing() void CheckDummy(int i) { var ent = dummyEnts[i]; - var mind = mindSys.GetMind(ent)!.Value; + var mindCrew = mindSys.GetMind(ent)!.Value; Assert.That(entMan.HasComponent(ent), Is.False); - Assert.That(roleSys.MindIsAntagonist(mind), Is.False); - Assert.That(roleSys.MindHasRole(mind), Is.False); + Assert.That(roleSys.MindIsAntagonist(mindCrew), Is.False); + Assert.That(roleSys.MindHasRole(mindCrew), Is.False); Assert.That(factionSys.IsMember(ent, "Syndicate"), Is.False); Assert.That(factionSys.IsMember(ent, "NanoTrasen"), Is.True); - Assert.That(roleSys.MindGetAllRoles(mind).Any(x => x.Component is NukeopsRoleComponent), Is.False); + var nukeroles = new List() { "Nukeops", "NukeopsMedic", "NukeopsCommander" }; + Assert.That(roleSys.MindGetAllRoleInfo(mindCrew).Any(x => nukeroles.Contains(x.Prototype)), Is.False); } // The game rule exists, and all the stations/shuttles/maps are properly initialized @@ -238,7 +240,8 @@ await server.WaitAssertion(() => for (var i = 0; i < nukies.Length - 1; i++) { entMan.DeleteEntity(nukies[i]); - Assert.That(roundEndSys.IsRoundEndRequested, Is.False, + Assert.That(roundEndSys.IsRoundEndRequested, + Is.False, $"The round ended, but {nukies.Length - i - 1} nukies are still alive!"); } // Delete the last nukie and make sure the round ends. diff --git a/Content.IntegrationTests/Tests/Internals/AutoInternalsTests.cs b/Content.IntegrationTests/Tests/Internals/AutoInternalsTests.cs index dbd612c7101..d1535368736 100644 --- a/Content.IntegrationTests/Tests/Internals/AutoInternalsTests.cs +++ b/Content.IntegrationTests/Tests/Internals/AutoInternalsTests.cs @@ -2,7 +2,6 @@ using Content.Server.Body.Systems; using Content.Server.Station.Systems; using Content.Shared.Preferences; -using Content.Shared.Roles.Jobs; namespace Content.IntegrationTests.Tests.Internals; @@ -25,10 +24,7 @@ public async Task TestInternalsAutoActivateInSpaceForStationSpawn() await server.WaitAssertion(() => { var profile = new HumanoidCharacterProfile(); - var dummy = stationSpawning.SpawnPlayerMob(testMap.GridCoords, new JobComponent() - { - Prototype = "TestInternalsDummy" - }, profile, station: null); + var dummy = stationSpawning.SpawnPlayerMob(testMap.GridCoords, "TestInternalsDummy", profile, station: null); Assert.That(atmos.HasAtmosphere(testMap.Grid), Is.False, "Test map has atmosphere - test needs adjustment!"); Assert.That(internals.AreInternalsWorking(dummy), "Internals did not automatically connect!"); diff --git a/Content.IntegrationTests/Tests/Minds/MindTests.cs b/Content.IntegrationTests/Tests/Minds/MindTests.cs index 3b7ecf0135f..d4d551f4e0a 100644 --- a/Content.IntegrationTests/Tests/Minds/MindTests.cs +++ b/Content.IntegrationTests/Tests/Minds/MindTests.cs @@ -1,10 +1,8 @@ #nullable enable using System.Linq; -using Content.Server.Ghost; using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles.Components; using Content.Server.Mind.Commands; -using Content.Server.Players; using Content.Server.Roles; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; @@ -18,7 +16,6 @@ using Robust.Server.GameObjects; using Robust.Server.Player; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Prototypes; @@ -287,27 +284,27 @@ await server.WaitAssertion(() => Assert.Multiple(() => { Assert.That(roleSystem.MindHasRole(mindId), Is.False); - Assert.That(roleSystem.MindHasRole(mindId), Is.False); + Assert.That(roleSystem.MindHasRole(mindId), Is.False); }); - var traitorRole = new TraitorRoleComponent(); + var traitorRole = "MindRoleTraitor"; roleSystem.MindAddRole(mindId, traitorRole); Assert.Multiple(() => { Assert.That(roleSystem.MindHasRole(mindId)); - Assert.That(roleSystem.MindHasRole(mindId), Is.False); + Assert.That(roleSystem.MindHasRole(mindId), Is.False); }); - var jobRole = new JobComponent(); + var jobRole = ""; - roleSystem.MindAddRole(mindId, jobRole); + roleSystem.MindAddJobRole(mindId, jobPrototype:jobRole); Assert.Multiple(() => { Assert.That(roleSystem.MindHasRole(mindId)); - Assert.That(roleSystem.MindHasRole(mindId)); + Assert.That(roleSystem.MindHasRole(mindId)); }); roleSystem.MindRemoveRole(mindId); @@ -315,15 +312,15 @@ await server.WaitAssertion(() => Assert.Multiple(() => { Assert.That(roleSystem.MindHasRole(mindId), Is.False); - Assert.That(roleSystem.MindHasRole(mindId)); + Assert.That(roleSystem.MindHasRole(mindId)); }); - roleSystem.MindRemoveRole(mindId); + roleSystem.MindRemoveRole(mindId); Assert.Multiple(() => { Assert.That(roleSystem.MindHasRole(mindId), Is.False); - Assert.That(roleSystem.MindHasRole(mindId), Is.False); + Assert.That(roleSystem.MindHasRole(mindId), Is.False); }); }); diff --git a/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs b/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs index 6746d6d5a94..267b3637e0a 100644 --- a/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs +++ b/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs @@ -3,7 +3,6 @@ using Content.Shared.Inventory; using Content.Shared.Preferences; using Content.Shared.Preferences.Loadouts; -using Content.Shared.Roles.Jobs; using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; @@ -68,10 +67,7 @@ await server.WaitAssertion(() => profile.SetLoadout(new RoleLoadout("LoadoutTester")); - var tester = stationSystem.SpawnPlayerMob(testMap.GridCoords, job: new JobComponent() - { - Prototype = "LoadoutTester" - }, profile, station: null); + var tester = stationSystem.SpawnPlayerMob(testMap.GridCoords, job: "LoadoutTester", profile, station: null); var slotQuery = inventorySystem.GetSlotEnumerator(tester); var checkedCount = 0; diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index 3f33d01116d..224629ff2e5 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -11,7 +11,6 @@ using Content.Server.Roles; using Content.Server.Roles.Jobs; using Content.Server.Shuttles.Components; -using Content.Server.Station.Systems; using Content.Shared.Antag; using Content.Shared.Clothing; using Content.Shared.GameTicking; @@ -20,7 +19,6 @@ using Content.Shared.Humanoid; using Content.Shared.Mind; using Content.Shared.Players; -using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; using Content.Shared.Whitelist; using Robust.Server.Audio; @@ -37,14 +35,14 @@ namespace Content.Server.Antag; public sealed partial class AntagSelectionSystem : GameRuleSystem { - [Dependency] private readonly IChatManager _chat = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly IServerPreferencesManager _pref = default!; [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly GhostRoleSystem _ghostRole = default!; [Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly LoadoutSystem _loadout = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IServerPreferencesManager _pref = default!; [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; @@ -193,6 +191,9 @@ protected override void Started(EntityUid uid, AntagSelectionComponent component /// /// Chooses antagonists from the given selection of players /// + /// The antagonist rule entity + /// The players to choose from + /// Disable picking players for pre-spawn antags in the middle of a round public void ChooseAntags(Entity ent, IList pool, bool midround = false) { if (ent.Comp.SelectionsComplete) @@ -209,8 +210,14 @@ public void ChooseAntags(Entity ent, IList /// Chooses antagonists from the given selection of players for the given antag definition. /// + /// The antagonist rule entity + /// The players to choose from + /// The antagonist selection parameters and criteria /// Disable picking players for pre-spawn antags in the middle of a round - public void ChooseAntags(Entity ent, IList pool, AntagSelectionDefinition def, bool midround = false) + public void ChooseAntags(Entity ent, + IList pool, + AntagSelectionDefinition def, + bool midround = false) { var playerPool = GetPlayerPool(ent, pool, def); var count = GetTargetAntagCount(ent, GetTotalPlayerCount(pool), def); @@ -331,7 +338,7 @@ public void MakeAntag(Entity ent, ICommonSession? sessi EntityManager.AddComponents(player, def.Components); // Equip the entity's RoleLoadout and LoadoutGroup - List>? gear = new(); + List> gear = new(); if (def.StartingGear is not null) gear.Add(def.StartingGear.Value); @@ -340,8 +347,8 @@ public void MakeAntag(Entity ent, ICommonSession? sessi if (session != null) { var curMind = session.GetMind(); - - if (curMind == null || + + if (curMind == null || !TryComp(curMind.Value, out var mindComp) || mindComp.OwnedEntity != antagEnt) { @@ -350,7 +357,7 @@ public void MakeAntag(Entity ent, ICommonSession? sessi } _mind.TransferTo(curMind.Value, antagEnt, ghostCheckOverride: true); - _role.MindAddRoles(curMind.Value, def.MindComponents, null, true); + _role.MindAddRoles(curMind.Value, def.MindRoles, null, true); ent.Comp.SelectedMinds.Add((curMind.Value, Name(player))); SendBriefing(session, def.Briefing); } diff --git a/Content.Server/Antag/Components/AntagSelectionComponent.cs b/Content.Server/Antag/Components/AntagSelectionComponent.cs index 0e5a0afc9bc..502fb8eda2c 100644 --- a/Content.Server/Antag/Components/AntagSelectionComponent.cs +++ b/Content.Server/Antag/Components/AntagSelectionComponent.cs @@ -3,7 +3,6 @@ using Content.Shared.Destructible.Thresholds; using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; -using Content.Shared.Storage; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Player; @@ -145,10 +144,17 @@ public partial struct AntagSelectionDefinition() /// /// Components added to the player's mind. + /// Do NOT use this to add role-type components. Add those as MindRoles instead /// [DataField] public ComponentRegistry MindComponents = new(); + /// + /// List of Mind Role Prototypes to be added to the player's mind. + /// + [DataField] + public List>? MindRoles; + /// /// A set of starting gear that's equipped to the player. /// diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index ac33250474a..0eafad35862 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -271,7 +271,7 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity> Job; - + public override bool Condition(EntityEffectBaseArgs args) - { + { args.EntityManager.TryGetComponent(args.TargetEntity, out var mindContainer); - if (mindContainer != null && mindContainer.Mind != null) + + if ( mindContainer is null + || !args.EntityManager.TryGetComponent(mindContainer.Mind, out var mind)) + return false; + + foreach (var roleId in mind.MindRoles) { - var prototypeManager = IoCManager.Resolve(); - if (args.EntityManager.TryGetComponent(mindContainer?.Mind, out var comp) && prototypeManager.TryIndex(comp.Prototype, out var prototype)) - { - foreach (var jobId in Job) - { - if (prototype.ID == jobId) - { - return true; - } - } - } + if(!args.EntityManager.HasComponent(roleId)) + continue; + + if(!args.EntityManager.TryGetComponent(roleId, out var mindRole) + || mindRole.JobPrototype is null) + continue; + + if (Job.Contains(mindRole.JobPrototype.Value)) + return true; } - + return false; } - + public override string GuidebookExplanation(IPrototypeManager prototype) { var localizedNames = Job.Select(jobId => prototype.Index(jobId).LocalizedName).ToList(); return Loc.GetString("reagent-effect-condition-guidebook-job-condition", ("job", ContentLocalizationManager.FormatListToOr(localizedNames))); } } - - diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 0c7668d354d..683061d8edc 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -4,6 +4,7 @@ using Content.Server.GameTicking.Events; using Content.Server.Ghost; using Content.Server.Maps; +using Content.Server.Roles; using Content.Shared.CCVar; using Content.Shared.Database; using Content.Shared.GameTicking; @@ -26,6 +27,7 @@ namespace Content.Server.GameTicking public sealed partial class GameTicker { [Dependency] private readonly DiscordWebhook _discord = default!; + [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly ITaskManager _taskManager = default!; private static readonly Counter RoundNumberMetric = Metrics.CreateCounter( @@ -373,7 +375,7 @@ public void ShowRoundEndScoreboard(string text = "") var userId = mind.UserId ?? mind.OriginalOwnerUserId; var connected = false; - var observer = HasComp(mindId); + var observer = _role.MindHasRole(mindId); // Continuing if (userId != null && _playerManager.ValidSessionId(userId.Value)) { @@ -400,7 +402,7 @@ public void ShowRoundEndScoreboard(string text = "") _pvsOverride.AddGlobalOverride(GetNetEntity(entity.Value), recursive: true); } - var roles = _roles.MindGetAllRoles(mindId); + var roles = _roles.MindGetAllRoleInfo(mindId); var playerEndRoundInfo = new RoundEndMessageEvent.RoundEndPlayerInfo() { diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index c20c18af129..8bec89747d9 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -3,8 +3,6 @@ using System.Numerics; using Content.Server.Administration.Managers; using Content.Server.GameTicking.Events; -using Content.Server.Ghost; -using Content.Server.Shuttles.Components; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; @@ -224,8 +222,7 @@ private void SpawnPlayer(ICommonSession player, _mind.SetUserId(newMind, data.UserId); var jobPrototype = _prototypeManager.Index(jobId); - var job = new JobComponent {Prototype = jobId}; - _roles.MindAddRole(newMind, job, silent: silent); + _roles.MindAddJobRole(newMind, silent: silent, jobPrototype:jobId); var jobName = _jobs.MindTryGetJobName(newMind); _playTimeTrackings.PlayerRolesChanged(player); @@ -238,7 +235,7 @@ private void SpawnPlayer(ICommonSession player, spawnPointType = SpawnPointType.Job; } - var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, job, character, spawnPointType: spawnPointType); // DeltaV: pass in spawn point type + var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character, spawnPointType: spawnPointType); // DeltaV: pass in spawn point type DebugTools.AssertNotNull(mobMaybe); var mob = mobMaybe!.Value; @@ -277,13 +274,17 @@ private void SpawnPlayer(ICommonSession player, _stationJobs.TryAssignJob(station, jobPrototype, player.UserId); if (lateJoin) + { _adminLogger.Add(LogType.LateJoin, LogImpact.Medium, $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + } else + { _adminLogger.Add(LogType.RoundStartJoin, LogImpact.Medium, $"Player {player.Name} joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + } // Make sure they're aware of extended access. if (Comp(station).ExtendedAccess @@ -369,7 +370,7 @@ public void SpawnObserver(ICommonSession player) var (mindId, mindComp) = _mind.CreateMind(player.UserId, name); mind = (mindId, mindComp); _mind.SetUserId(mind.Value, player.UserId); - _roles.MindAddRole(mind.Value, new ObserverRoleComponent()); + _roles.MindAddRole(mind.Value, "MindRoleObserver"); } var ghost = _ghost.SpawnGhost(mind.Value); diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index 57239ee8c15..ca6548301a7 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -9,7 +9,6 @@ using Content.Server.Shuttles.Events; using Content.Server.Shuttles.Systems; using Content.Server.Station.Components; -using Content.Server.Store.Components; using Content.Server.Store.Systems; using Content.Shared.GameTicking.Components; using Content.Shared.Mobs; @@ -31,9 +30,9 @@ namespace Content.Server.GameTicking.Rules; public sealed class NukeopsRuleSystem : GameRuleSystem { + [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly EmergencyShuttleSystem _emergency = default!; [Dependency] private readonly NpcFactionSystem _npcFaction = default!; - [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; [Dependency] private readonly StoreSystem _store = default!; @@ -57,6 +56,8 @@ public override void Initialize() SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnOperativeZombified); + SubscribeLocalEvent(OnGetBriefing); + SubscribeLocalEvent(OnShuttleFTLAttempt); SubscribeLocalEvent(OnWarDeclared); SubscribeLocalEvent(OnShuttleCallAttempt); @@ -65,7 +66,9 @@ public override void Initialize() SubscribeLocalEvent(OnRuleLoadedGrids); } - protected override void Started(EntityUid uid, NukeopsRuleComponent component, GameRuleComponent gameRule, + protected override void Started(EntityUid uid, + NukeopsRuleComponent component, + GameRuleComponent gameRule, GameRuleStartedEvent args) { var eligible = new List>(); @@ -85,7 +88,9 @@ protected override void Started(EntityUid uid, NukeopsRuleComponent component, G } #region Event Handlers - protected override void AppendRoundEndText(EntityUid uid, NukeopsRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + NukeopsRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { var winText = Loc.GetString($"nukeops-{component.WinType.ToString().ToLower()}"); @@ -227,7 +232,8 @@ private void OnRoundEnd(Entity ent) // If the disk is currently at Central Command, the crew wins - just slightly. // This also implies that some nuclear operatives have died. - SetWinType(ent, diskAtCentCom + SetWinType(ent, + diskAtCentCom ? WinType.CrewMinor : WinType.OpsMinor); ent.Comp.WinConditions.Add(diskAtCentCom @@ -456,8 +462,11 @@ private void CheckRoundShouldEnd(Entity ent) : WinCondition.AllNukiesDead); SetWinType(ent, WinType.CrewMajor, false); - _roundEndSystem.DoRoundEndBehavior( - nukeops.RoundEndBehavior, nukeops.EvacShuttleTime, nukeops.RoundEndTextSender, nukeops.RoundEndTextShuttleCall, nukeops.RoundEndTextAnnouncement); + _roundEndSystem.DoRoundEndBehavior(nukeops.RoundEndBehavior, + nukeops.EvacShuttleTime, + nukeops.RoundEndTextSender, + nukeops.RoundEndTextShuttleCall, + nukeops.RoundEndTextAnnouncement); // prevent it called multiple times nukeops.RoundEndBehavior = RoundEndBehavior.Nothing; @@ -465,16 +474,22 @@ private void CheckRoundShouldEnd(Entity ent) private void OnAfterAntagEntSelected(Entity ent, ref AfterAntagEntitySelectedEvent args) { - if (ent.Comp.TargetStation is not { } station) - return; + var target = (ent.Comp.TargetStation is not null) ? Name(ent.Comp.TargetStation.Value) : "the target"; - _antag.SendBriefing(args.Session, Loc.GetString("nukeops-welcome", - ("station", station), + _antag.SendBriefing(args.Session, + Loc.GetString("nukeops-welcome", + ("station", target), ("name", Name(ent))), Color.Red, ent.Comp.GreetSoundNotification); } + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) + { + // TODO Different character screen briefing for the 3 nukie types + args.Append(Loc.GetString("nukeops-briefing")); + } + /// /// Is this method the shitty glue holding together the last of my sanity? yes. /// Do i have a better solution? not presently. diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index c5f88ab6cf1..939ab871153 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -15,7 +15,6 @@ using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.IdentityManagement; -using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs; @@ -38,8 +37,8 @@ namespace Content.Server.GameTicking.Rules; public sealed class RevolutionaryRuleSystem : GameRuleSystem { [Dependency] private readonly IAdminLogManager _adminLogManager = default!; - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private readonly EuiManager _euiMan = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -49,7 +48,7 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem RevolutionaryNpcFaction = "Revolutionary"; @@ -59,9 +58,12 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnCommandMobStateChanged); + + SubscribeLocalEvent(OnPostFlash); SubscribeLocalEvent(OnHeadRevMobStateChanged); + SubscribeLocalEvent(OnGetBriefing); - SubscribeLocalEvent(OnPostFlash); + } protected override void Started(EntityUid uid, RevolutionaryRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) @@ -85,7 +87,9 @@ protected override void ActiveTick(EntityUid uid, RevolutionaryRuleComponent com } } - protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + RevolutionaryRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { base.AppendRoundEndText(uid, component, gameRule, ref args); @@ -101,7 +105,9 @@ protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleCompo args.AddLine(Loc.GetString("rev-headrev-count", ("initialCount", sessionData.Count))); foreach (var (mind, data, name) in sessionData) { - var count = CompOrNull(mind)?.ConvertedCount ?? 0; + _role.MindHasRole(mind, out var role); + var count = CompOrNull(role)?.ConvertedCount ?? 0; + args.AddLine(Loc.GetString("rev-headrev-name-user", ("name", name), ("username", data.UserName), @@ -113,10 +119,8 @@ protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleCompo private void OnGetBriefing(EntityUid uid, RevolutionaryRoleComponent comp, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; - - var head = HasComp(mind.OwnedEntity); + var ent = args.Mind.Comp.OwnedEntity; + var head = HasComp(ent); args.Append(Loc.GetString(head ? "head-rev-briefing" : "rev-briefing")); } @@ -145,15 +149,20 @@ private void OnPostFlash(EntityUid uid, HeadRevolutionaryComponent comp, ref Aft if (ev.User != null) { - _adminLogManager.Add(LogType.Mind, LogImpact.Medium, $"{ToPrettyString(ev.User.Value)} converted {ToPrettyString(ev.Target)} into a Revolutionary"); + _adminLogManager.Add(LogType.Mind, + LogImpact.Medium, + $"{ToPrettyString(ev.User.Value)} converted {ToPrettyString(ev.Target)} into a Revolutionary"); - if (_mind.TryGetRole(ev.User.Value, out var headrev)) - headrev.ConvertedCount++; + if (_mind.TryGetMind(ev.User.Value, out var revMindId, out _)) + { + if (_role.MindHasRole(revMindId, out _, out var role)) + role.Value.Comp.ConvertedCount++; + } } if (mindId == default || !_role.MindHasRole(mindId)) { - _role.MindAddRole(mindId, new RevolutionaryRoleComponent { PrototypeId = RevPrototypeId }); + _role.MindAddRole(mindId, "MindRoleRevolutionary"); } if (mind?.Session != null) diff --git a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs index 074b4c0df7a..b00ed386363 100644 --- a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs @@ -1,18 +1,12 @@ using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; -using Content.Server.Mind; -using Content.Server.Objectives; using Content.Server.Roles; using Content.Shared.Humanoid; -using Content.Shared.Mind; -using Content.Shared.Objectives.Components; -using Robust.Shared.Random; namespace Content.Server.GameTicking.Rules; public sealed class ThiefRuleSystem : GameRuleSystem { - [Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; public override void Initialize() @@ -24,32 +18,33 @@ public override void Initialize() SubscribeLocalEvent(OnGetBriefing); } - private void AfterAntagSelected(Entity ent, ref AfterAntagEntitySelectedEvent args) + // Greeting upon thief activation + private void AfterAntagSelected(Entity mindId, ref AfterAntagEntitySelectedEvent args) { - if (!_mindSystem.TryGetMind(args.EntityUid, out var mindId, out var mind)) - return; - - //Generate objectives - _antag.SendBriefing(args.EntityUid, MakeBriefing(args.EntityUid), null, null); + var ent = args.EntityUid; + _antag.SendBriefing(ent, MakeBriefing(ent), null, null); } - //Add mind briefing - private void OnGetBriefing(Entity thief, ref GetBriefingEvent args) + // Character screen briefing + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(thief.Owner, out var mind) || mind.OwnedEntity == null) - return; + var ent = args.Mind.Comp.OwnedEntity; - args.Append(MakeBriefing(mind.OwnedEntity.Value)); + if (ent is null) + return; + args.Append(MakeBriefing(ent.Value)); } - private string MakeBriefing(EntityUid thief) + private string MakeBriefing(EntityUid ent) { - var isHuman = HasComp(thief); + var isHuman = HasComp(ent); var briefing = isHuman ? Loc.GetString("thief-role-greeting-human") : Loc.GetString("thief-role-greeting-animal"); - briefing += "\n \n" + Loc.GetString("thief-role-greeting-equipment") + "\n"; + if (isHuman) + briefing += "\n \n" + Loc.GetString("thief-role-greeting-equipment") + "\n"; + return briefing; } } diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 56b652ed9a0..44ad00ae170 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -10,9 +10,7 @@ using Content.Shared.GameTicking.Components; using Content.Shared.Mind; using Content.Shared.NPC.Systems; -using Content.Shared.Objectives.Components; using Content.Shared.PDA; -using Content.Shared.Radio; using Content.Shared.Roles; using Content.Shared.Roles.Jobs; using Content.Shared.Roles.RoleCodeword; @@ -28,22 +26,21 @@ public sealed class TraitorRuleSystem : GameRuleSystem private static readonly Color TraitorCodewordColor = Color.FromHex("#cc3b3b"); [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly NpcFactionSystem _npcFaction = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; - [Dependency] private readonly UplinkSystem _uplink = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedRoleCodewordSystem _roleCodewordSystem = default!; + [Dependency] private readonly SharedRoleSystem _roleSystem = default!; + [Dependency] private readonly UplinkSystem _uplink = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(AfterEntitySelected); - SubscribeLocalEvent(OnObjectivesTextPrepend); } @@ -80,7 +77,7 @@ public string[] GenerateTraitorCodewords(TraitorRuleComponent component) public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool giveUplink = true) { - //Grab the mind if it wasnt provided + //Grab the mind if it wasn't provided if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) return false; @@ -92,7 +89,7 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool { // Calculate the amount of currency on the uplink. var startingBalance = component.StartingBalance; - if (_jobs.MindTryGetJob(mindId, out _, out var prototype)) + if (_jobs.MindTryGetJob(mindId, out var prototype)) startingBalance = Math.Max(startingBalance - prototype.AntagAdvantage, 0); // creadth: we need to create uplink for the antag. @@ -111,14 +108,18 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool _antag.SendBriefing(traitor, GenerateBriefing(component.Codewords, code, issuer), null, component.GreetSoundNotification); - component.TraitorMinds.Add(mindId); // Assign briefing - _roleSystem.MindAddRole(mindId, new RoleBriefingComponent + //Since this provides neither an antag/job prototype, nor antag status/roletype, + //and is intrinsically related to the traitor role + //it does not need to be a separate Mind Role Entity + _roleSystem.MindHasRole(mindId, out var traitorRole); + if (traitorRole is not null) { - Briefing = briefing - }, mind, true); + AddComp(traitorRole.Value.Owner); + Comp(traitorRole.Value.Owner).Briefing = briefing; + } // Send codewords to only the traitor client var color = TraitorCodewordColor; // Fall back to a dark red Syndicate color if a prototype is not found diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index e91931300e2..bb76721340d 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -13,6 +13,7 @@ using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; +using Content.Shared.Roles; using Content.Shared.Zombies; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -22,15 +23,16 @@ namespace Content.Server.GameTicking.Rules; public sealed class ZombieRuleSystem : GameRuleSystem { + [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly RoundEndSystem _roundEnd = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly ZombieSystem _zombie = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ZombieSystem _zombie = default!; public override void Initialize() { @@ -41,23 +43,20 @@ public override void Initialize() SubscribeLocalEvent(OnZombifySelf); } - private void OnGetBriefing(EntityUid uid, InitialInfectedRoleComponent component, ref GetBriefingEvent args) + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; - if (HasComp(uid)) // don't show both briefings - return; - args.Append(Loc.GetString("zombie-patientzero-role-greeting")); + if (!_roles.MindHasRole(args.Mind.Owner)) + args.Append(Loc.GetString("zombie-patientzero-role-greeting")); } - private void OnGetBriefing(EntityUid uid, ZombieRoleComponent component, ref GetBriefingEvent args) + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; args.Append(Loc.GetString("zombie-infection-greeting")); } - protected override void AppendRoundEndText(EntityUid uid, ZombieRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + ZombieRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { base.AppendRoundEndText(uid, component, gameRule, ref args); diff --git a/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs b/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs index bd276e6df70..3dfa37a6b13 100644 --- a/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs +++ b/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs @@ -1,11 +1,13 @@ -namespace Content.Server.Ghost.Roles; +using Content.Shared.Roles; + +namespace Content.Server.Ghost.Roles; /// /// This is used for round end display of ghost roles. /// It may also be used to ensure some ghost roles count as antagonists in future. /// [RegisterComponent] -public sealed partial class GhostRoleMarkerRoleComponent : Component +public sealed partial class GhostRoleMarkerRoleComponent : BaseMindRoleComponent { [DataField("name")] public string? Name; } diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 1b7f25122d5..34347dc7e04 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -71,18 +71,22 @@ public override void Initialize() SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnMindAdded); SubscribeLocalEvent(OnMindRemoved); SubscribeLocalEvent(OnMobStateChanged); + SubscribeLocalEvent(OnTakeoverTakeRole); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnRoleStartup); SubscribeLocalEvent(OnRoleShutdown); SubscribeLocalEvent(OnPaused); SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnRaffleInit); SubscribeLocalEvent(OnRaffleShutdown); + SubscribeLocalEvent(OnSpawnerTakeRole); - SubscribeLocalEvent(OnTakeoverTakeRole); SubscribeLocalEvent(OnSpawnerTakeCharacter); // DeltaV - Character ghost roles, see Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs SubscribeLocalEvent>(OnVerb); SubscribeLocalEvent(OnGhostRoleRadioMessage); @@ -510,7 +514,11 @@ public void GhostRoleInternalCreateMindAndTransfer(ICommonSession player, Entity var newMind = _mindSystem.CreateMind(player.UserId, EntityManager.GetComponent(mob).EntityName); - _roleSystem.MindAddRole(newMind, new GhostRoleMarkerRoleComponent { Name = role.RoleName }); + + _roleSystem.MindAddRole(newMind, "MindRoleGhostMarker"); + + if(_roleSystem.MindHasRole(newMind, out _, out var markerRole)) + markerRole.Value.Comp.Name = role.RoleName; _mindSystem.SetUserId(newMind, player.UserId); _mindSystem.TransferTo(newMind, mob); @@ -603,10 +611,7 @@ private void OnMindAdded(EntityUid uid, GhostTakeoverAvailableComponent componen if (ghostRole.JobProto != null) { - if (HasComp(args.Mind)) - _roleSystem.MindRemoveRole(args.Mind); - - _roleSystem.MindAddRole(args.Mind, new JobComponent { Prototype = ghostRole.JobProto }); + _roleSystem.MindAddJobRole(args.Mind, args.Mind, silent:false,ghostRole.JobProto); } ghostRole.Taken = true; diff --git a/Content.Server/Mind/Commands/MindInfoCommand.cs b/Content.Server/Mind/Commands/MindInfoCommand.cs index d4961b82dbb..c365702a314 100644 --- a/Content.Server/Mind/Commands/MindInfoCommand.cs +++ b/Content.Server/Mind/Commands/MindInfoCommand.cs @@ -43,7 +43,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) builder.AppendFormat("player: {0}, mob: {1}\nroles: ", mind.UserId, mind.OwnedEntity); var roles = _entities.System(); - foreach (var role in roles.MindGetAllRoles(mindId)) + foreach (var role in roles.MindGetAllRoleInfo(mindId)) { builder.AppendFormat("{0} ", role.Name); } diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index c1caa819e44..b4de15f2b9a 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -89,7 +89,7 @@ private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref Obj foreach (var mind in allHumans) { // RequireAdminNotify used as a cheap way to check for command department - if (_job.MindTryGetJob(mind, out _, out var prototype) && prototype.RequireAdminNotify) + if (_job.MindTryGetJob(mind, out var prototype) && prototype.RequireAdminNotify) allHeads.Add(mind); } diff --git a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs index 47c54b937a0..ee99658f66e 100644 --- a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs +++ b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs @@ -1,9 +1,10 @@ using Content.Server.Objectives.Components; +using Content.Server.Roles; using Content.Server.Warps; using Content.Shared.Objectives.Components; using Content.Shared.Ninja.Components; +using Content.Shared.Roles; using Robust.Shared.Random; -using Content.Server.Roles; namespace Content.Server.Objectives.Systems; @@ -16,6 +17,7 @@ public sealed class NinjaConditionsSystem : EntitySystem [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly NumberObjectiveSystem _number = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; public override void Initialize() { @@ -46,10 +48,8 @@ private float DoorjackProgress(DoorjackConditionComponent comp, int target) // spider charge private void OnSpiderChargeRequirementCheck(EntityUid uid, SpiderChargeConditionComponent comp, ref RequirementCheckEvent args) { - if (args.Cancelled || !HasComp(args.MindId)) - { + if (args.Cancelled || !_roles.MindHasRole(args.MindId)) return; - } // choose spider charge detonation point var warps = new List(); diff --git a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs index e63492bb5ed..50d747c1a2a 100644 --- a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs @@ -21,7 +21,7 @@ private void OnCheck(EntityUid uid, NotCommandRequirementComponent comp, ref Req return; // cheap equivalent to checking that job department is command, since all command members require admin notification when leaving - if (_job.MindTryGetJob(args.MindId, out _, out var prototype) && prototype.RequireAdminNotify) + if (_job.MindTryGetJob(args.MindId, out var prototype) && prototype.RequireAdminNotify) args.Cancelled = true; } } diff --git a/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs b/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs index 5c2b0404634..ac7e579c380 100644 --- a/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs @@ -8,6 +8,8 @@ namespace Content.Server.Objectives.Systems; /// public sealed class NotJobRequirementSystem : EntitySystem { + [Dependency] private readonly SharedJobSystem _jobs = default!; + public override void Initialize() { base.Initialize(); @@ -20,11 +22,10 @@ private void OnCheck(EntityUid uid, NotJobRequirementComponent comp, ref Require if (args.Cancelled) return; - // if player has no job then don't care - if (!TryComp(args.MindId, out var job)) - return; + _jobs.MindTryGetJob(args.MindId, out var proto); - if (job.Prototype == comp.Job) + // if player has no job then don't care + if (proto is not null && proto.ID == comp.Job) args.Cancelled = true; } } diff --git a/Content.Server/Objectives/Systems/RoleRequirementSystem.cs b/Content.Server/Objectives/Systems/RoleRequirementSystem.cs index 8421987bae9..83d4c2ea4c5 100644 --- a/Content.Server/Objectives/Systems/RoleRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/RoleRequirementSystem.cs @@ -22,8 +22,6 @@ private void OnCheck(EntityUid uid, RoleRequirementComponent comp, ref Requireme if (args.Cancelled) return; - // this whitelist trick only works because roles are components on the mind and not entities - // if that gets reworked then this will need changing if (_whitelistSystem.IsWhitelistFail(comp.Roles, args.MindId)) args.Cancelled = true; } diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index e9bd5140ae1..c897020d17f 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -30,14 +30,15 @@ namespace Content.Server.Players.PlayTimeTracking; /// public sealed class PlayTimeTrackingSystem : EntitySystem { + [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAfkManager _afk = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly MindSystem _minds = default!; - [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; - [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IServerPreferencesManager _preferencesManager = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; public override void Initialize() { @@ -101,10 +102,7 @@ private bool IsPlayerAlive(ICommonSession session) public IEnumerable GetTimedRoles(EntityUid mindId) { - var ev = new MindGetAllRolesEvent(new List()); - RaiseLocalEvent(mindId, ref ev); - - foreach (var role in ev.Roles) + foreach (var role in _roles.MindGetAllRoleInfo(mindId)) { if (string.IsNullOrWhiteSpace(role.PlayTimeTrackerId)) continue; diff --git a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs index 8e42f41cb3d..dc16b87300e 100644 --- a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs +++ b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs @@ -10,3 +10,5 @@ public sealed partial class CommandStaffComponent : Component { } + +//TODO this should probably be on a mind role, not the mob diff --git a/Content.Server/Roles/DragonRoleComponent.cs b/Content.Server/Roles/DragonRoleComponent.cs index b85fd53eb0c..c47455d8f6f 100644 --- a/Content.Server/Roles/DragonRoleComponent.cs +++ b/Content.Server/Roles/DragonRoleComponent.cs @@ -4,9 +4,9 @@ namespace Content.Server.Roles; /// -/// Role used to keep track of space dragons for antag purposes. +/// Added to mind role entities to tag that they are a space dragon. /// -[RegisterComponent, Access(typeof(DragonSystem)), ExclusiveAntagonist] -public sealed partial class DragonRoleComponent : AntagonistRoleComponent +[RegisterComponent, Access(typeof(DragonSystem))] +public sealed partial class DragonRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/InitialInfectedRoleComponent.cs b/Content.Server/Roles/InitialInfectedRoleComponent.cs index 52d3db41643..475cd3ba603 100644 --- a/Content.Server/Roles/InitialInfectedRoleComponent.cs +++ b/Content.Server/Roles/InitialInfectedRoleComponent.cs @@ -2,8 +2,11 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class InitialInfectedRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are an initial infected. +/// +[RegisterComponent] +public sealed partial class InitialInfectedRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/Jobs/JobSystem.cs b/Content.Server/Roles/Jobs/JobSystem.cs index 9f0dd7ae32b..7e69d9d92bc 100644 --- a/Content.Server/Roles/Jobs/JobSystem.cs +++ b/Content.Server/Roles/Jobs/JobSystem.cs @@ -30,7 +30,7 @@ private void MindOnDoGreeting(EntityUid mindId, MindComponent component, ref Min if (!_mind.TryGetSession(mindId, out var session)) return; - if (!MindTryGetJob(mindId, out _, out var prototype)) + if (!MindTryGetJob(mindId, out var prototype)) return; _chat.DispatchServerMessage(session, Loc.GetString("job-greet-introduce-job-name", @@ -47,6 +47,6 @@ public void MindAddJob(EntityUid mindId, string jobPrototypeId) if (MindHasJobWithId(mindId, jobPrototypeId)) return; - _roles.MindAddRole(mindId, new JobComponent { Prototype = jobPrototypeId }); + _roles.MindAddJobRole(mindId, null, false, jobPrototypeId); } } diff --git a/Content.Server/Roles/NinjaRoleComponent.cs b/Content.Server/Roles/NinjaRoleComponent.cs index cb60e5bdf03..7bdffe67a31 100644 --- a/Content.Server/Roles/NinjaRoleComponent.cs +++ b/Content.Server/Roles/NinjaRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class NinjaRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a space ninja. +/// +[RegisterComponent] +public sealed partial class NinjaRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/NukeopsRoleComponent.cs b/Content.Server/Roles/NukeopsRoleComponent.cs index a6ff0b71b06..41561088ea8 100644 --- a/Content.Server/Roles/NukeopsRoleComponent.cs +++ b/Content.Server/Roles/NukeopsRoleComponent.cs @@ -3,9 +3,9 @@ namespace Content.Server.Roles; /// -/// Added to mind entities to tag that they are a nuke operative. +/// Added to mind role entities to tag that they are a nuke operative. /// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class NukeopsRoleComponent : AntagonistRoleComponent +[RegisterComponent] +public sealed partial class NukeopsRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/RemoveRoleCommand.cs b/Content.Server/Roles/RemoveRoleCommand.cs index feba63a253f..fd4bb09317a 100644 --- a/Content.Server/Roles/RemoveRoleCommand.cs +++ b/Content.Server/Roles/RemoveRoleCommand.cs @@ -45,7 +45,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) var roles = _entityManager.System(); var jobs = _entityManager.System(); if (jobs.MindHasJobWithId(mind, args[1])) - roles.MindRemoveRole(mind.Value); + roles.MindTryRemoveRole(mind.Value); } } } diff --git a/Content.Server/Roles/RevolutionaryRoleComponent.cs b/Content.Server/Roles/RevolutionaryRoleComponent.cs index bf56b960084..dcdb131b9d0 100644 --- a/Content.Server/Roles/RevolutionaryRoleComponent.cs +++ b/Content.Server/Roles/RevolutionaryRoleComponent.cs @@ -3,10 +3,10 @@ namespace Content.Server.Roles; /// -/// Added to mind entities to tag that they are a Revolutionary. +/// Added to mind role entities to tag that they are a Revolutionary. /// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class RevolutionaryRoleComponent : AntagonistRoleComponent +[RegisterComponent] +public sealed partial class RevolutionaryRoleComponent : BaseMindRoleComponent { /// /// For headrevs, how many people you have converted. diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs index c53fa1cf9eb..333f4f9b606 100644 --- a/Content.Server/Roles/RoleSystem.cs +++ b/Content.Server/Roles/RoleSystem.cs @@ -1,32 +1,40 @@ +using Content.Shared.Mind; using Content.Shared.Roles; namespace Content.Server.Roles; public sealed class RoleSystem : SharedRoleSystem { - public override void Initialize() - { - // TODO make roles entities - base.Initialize(); - - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - } - public string? MindGetBriefing(EntityUid? mindId) { if (mindId == null) + { + Log.Error($"MingGetBriefing failed for mind {mindId}"); + return null; + } + + TryComp(mindId.Value, out var mindComp); + + if (mindComp is null) + { + Log.Error($"MingGetBriefing failed for mind {mindId}"); return null; + } var ev = new GetBriefingEvent(); - RaiseLocalEvent(mindId.Value, ref ev); + + // This is on the event because while this Entity is also present on every Mind Role Entity's MindRoleComp + // getting to there from a GetBriefing event subscription can be somewhat boilerplate + // and this needs to be looked up for the event anyway so why calculate it again later + ev.Mind = (mindId.Value, mindComp); + + // Briefing is no longer raised on the mind entity itself + // because all the components that briefings subscribe to should be on Mind Role Entities + foreach(var role in mindComp.MindRoles) + { + RaiseLocalEvent(role, ref ev); + } + return ev.Briefing; } } @@ -38,8 +46,16 @@ public override void Initialize() [ByRefEvent] public sealed class GetBriefingEvent { + /// + /// The text that will be shown on the Character Screen + /// public string? Briefing; + /// + /// The Mind to whose Mind Role Entities the briefing is sent to + /// + public Entity Mind; + public GetBriefingEvent(string? briefing = null) { Briefing = briefing; diff --git a/Content.Server/Roles/SubvertedSiliconRoleComponent.cs b/Content.Server/Roles/SubvertedSiliconRoleComponent.cs index 70056fbec9e..55727573b9d 100644 --- a/Content.Server/Roles/SubvertedSiliconRoleComponent.cs +++ b/Content.Server/Roles/SubvertedSiliconRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; +/// +/// Added to mind role entities to tag that they are a hacked borg. +/// [RegisterComponent] -public sealed partial class SubvertedSiliconRoleComponent : AntagonistRoleComponent +public sealed partial class SubvertedSiliconRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/ThiefRoleComponent.cs b/Content.Server/Roles/ThiefRoleComponent.cs index 82e350ef630..c0ddee71a49 100644 --- a/Content.Server/Roles/ThiefRoleComponent.cs +++ b/Content.Server/Roles/ThiefRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; +/// +/// Added to mind role entities to tag that they are a thief. +/// [RegisterComponent] -public sealed partial class ThiefRoleComponent : AntagonistRoleComponent +public sealed partial class ThiefRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/TraitorRoleComponent.cs b/Content.Server/Roles/TraitorRoleComponent.cs index 96bfe8dd801..a8a11a8f1bd 100644 --- a/Content.Server/Roles/TraitorRoleComponent.cs +++ b/Content.Server/Roles/TraitorRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class TraitorRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a syndicate traitor. +/// +[RegisterComponent] +public sealed partial class TraitorRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/ZombieRoleComponent.cs b/Content.Server/Roles/ZombieRoleComponent.cs index 2f9948022b3..cff25e53e80 100644 --- a/Content.Server/Roles/ZombieRoleComponent.cs +++ b/Content.Server/Roles/ZombieRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ZombieRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a zombie. +/// +[RegisterComponent] +public sealed partial class ZombieRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 6b7df52a6eb..07674352ec0 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -28,12 +28,12 @@ namespace Content.Server.Silicons.Laws; public sealed class SiliconLawSystem : SharedSiliconLawSystem { [Dependency] private readonly IChatManager _chatManager = default!; - [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly UserInterfaceSystem _userInterface = default!; [Dependency] private readonly SharedStunSystem _stunSystem = default!; - [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly UserInterfaceSystem _userInterface = default!; /// public override void Initialize() @@ -178,10 +178,8 @@ private void EnsureEmaggedRole(EntityUid uid, EmagSiliconLawComponent component) if (component.AntagonistRole == null || !_mind.TryGetMind(uid, out var mindId, out _)) return; - if (_roles.MindHasRole(mindId)) - return; - - _roles.MindAddRole(mindId, new SubvertedSiliconRoleComponent { PrototypeId = component.AntagonistRole }); + if (!_roles.MindHasRole(mindId)) + _roles.MindAddRole(mindId, "MindRoleSubvertedSilicon"); } public SiliconLawset GetLaws(EntityUid uid, SiliconLawBoundComponent? component = null) diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 91314570f5b..da7ecd9d34b 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -12,10 +12,10 @@ namespace Content.Server.Spawners.EntitySystems; public sealed class ContainerSpawnPointSystem : EntitySystem { + [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly GameTicker _gameTicker = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; @@ -36,7 +36,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.TryIndex(args.Job?.Prototype, out var jobProto) || jobProto.JobEntity == null)) + (!_proto.TryIndex(args.Job, out var jobProto) || jobProto.JobEntity == null)) { return; } @@ -63,7 +63,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (spawnPoint.SpawnType == SpawnPointType.Unset) { // make sure we also check the job here for various reasons. - if (spawnPoint.Job == null || spawnPoint.Job == args.Job?.Prototype) + if (spawnPoint.Job == null || spawnPoint.Job == args.Job) possibleContainers.Add((uid, spawnPoint, container, xform)); continue; } @@ -75,7 +75,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job == args.Job.Prototype)) + (args.Job == null || spawnPoint.Job == args.Job)) { possibleContainers.Add((uid, spawnPoint, container, xform)); } diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs index ca41f5ce4e9..72ce433858b 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs @@ -57,7 +57,7 @@ private void OnPlayerSpawning(PlayerSpawningEvent args) if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job == args.Job.Prototype)) + (args.Job == null || spawnPoint.Job == args.Job)) { possiblePositions.Add(xform.Coordinates); } diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 47340d9ff1e..2ccd4c2af70 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -1,4 +1,3 @@ -using System.Linq; using Content.Server.Access.Systems; using Content.Server.DetailExaminable; using Content.Server.Humanoid; @@ -18,13 +17,10 @@ using Content.Shared.PDA; using Content.Shared.Preferences; using Content.Shared.Preferences.Loadouts; -using Content.Shared.Preferences.Loadouts.Effects; using Content.Shared.Random; using Content.Shared.Random.Helpers; using Content.Shared.Roles; -using Content.Shared.Roles.Jobs; using Content.Shared.Station; -using Content.Shared.StatusIcon; using JetBrains.Annotations; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -42,16 +38,18 @@ namespace Content.Server.Station.Systems; [PublicAPI] public sealed class StationSpawningSystem : SharedStationSpawningSystem { - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAccessSystem _accessSystem = default!; [Dependency] private readonly ActorSystem _actors = default!; - [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; + [Dependency] private readonly ArrivalsSystem _arrivalsSystem = default!; [Dependency] private readonly IdCardSystem _cardSystem = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly ContainerSpawnPointSystem _containerSpawnPointSystem = default!; + [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; [Dependency] private readonly PdaSystem _pdaSystem = default!; - [Dependency] private readonly SharedAccessSystem _accessSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; private bool _randomizeCharacters; @@ -75,7 +73,7 @@ public override void Initialize() /// /// This only spawns the character, and does none of the mind-related setup you'd need for it to be playable. /// - public EntityUid? SpawnPlayerCharacterOnStation(EntityUid? station, JobComponent? job, HumanoidCharacterProfile? profile, StationSpawningComponent? stationSpawning = null, SpawnPointType spawnPointType = SpawnPointType.Unset) + public EntityUid? SpawnPlayerCharacterOnStation(EntityUid? station, ProtoId? job, HumanoidCharacterProfile? profile, StationSpawningComponent? stationSpawning = null, SpawnPointType spawnPointType = SpawnPointType.Unset) { if (station != null && !Resolve(station.Value, ref stationSpawning)) throw new ArgumentException("Tried to use a non-station entity as a station!", nameof(station)); @@ -104,12 +102,12 @@ public override void Initialize() /// The spawned entity public EntityUid SpawnPlayerMob( EntityCoordinates coordinates, - JobComponent? job, + ProtoId? job, HumanoidCharacterProfile? profile, EntityUid? station, EntityUid? entity = null) { - _prototypeManager.TryIndex(job?.Prototype ?? string.Empty, out var prototype); + _prototypeManager.TryIndex(job ?? string.Empty, out var prototype); RoleLoadout? loadout = null; // Need to get the loadout up-front to handle names if we use an entity spawn override. @@ -203,9 +201,9 @@ public EntityUid SpawnPlayerMob( return entity.Value; } - private void DoJobSpecials(JobComponent? job, EntityUid entity) + private void DoJobSpecials(ProtoId? job, EntityUid entity) { - if (!_prototypeManager.TryIndex(job?.Prototype ?? string.Empty, out JobPrototype? prototype)) + if (!_prototypeManager.TryIndex(job ?? string.Empty, out JobPrototype? prototype)) return; foreach (var jobSpecial in prototype.Special) @@ -277,7 +275,7 @@ public sealed class PlayerSpawningEvent : EntityEventArgs /// /// The job to use, if any. /// - public readonly JobComponent? Job; + public readonly ProtoId? Job; /// /// The profile to use, if any. /// @@ -291,7 +289,7 @@ public sealed class PlayerSpawningEvent : EntityEventArgs /// public readonly SpawnPointType DesiredSpawnPointType; - public PlayerSpawningEvent(JobComponent? job, HumanoidCharacterProfile? humanoidCharacterProfile, EntityUid? station, SpawnPointType spawnPointType = SpawnPointType.Unset) + public PlayerSpawningEvent(ProtoId? job, HumanoidCharacterProfile? humanoidCharacterProfile, EntityUid? station, SpawnPointType spawnPointType = SpawnPointType.Unset) { Job = job; HumanoidCharacterProfile = humanoidCharacterProfile; diff --git a/Content.Server/Store/Conditions/BuyerAntagCondition.cs b/Content.Server/Store/Conditions/BuyerAntagCondition.cs index 1edc4a33657..4b1b6013eb8 100644 --- a/Content.Server/Store/Conditions/BuyerAntagCondition.cs +++ b/Content.Server/Store/Conditions/BuyerAntagCondition.cs @@ -33,16 +33,16 @@ public override bool Condition(ListingConditionArgs args) return true; var roleSystem = ent.System(); - var roles = roleSystem.MindGetAllRoles(mindId); + var roles = roleSystem.MindGetAllRoleInfo(mindId); if (Blacklist != null) { foreach (var role in roles) { - if (role.Component is not AntagonistRoleComponent blacklistantag) + if (!role.Antagonist || string.IsNullOrEmpty(role.Prototype)) continue; - if (blacklistantag.PrototypeId != null && Blacklist.Contains(blacklistantag.PrototypeId)) + if (Blacklist.Contains(role.Prototype)) return false; } } @@ -52,10 +52,11 @@ public override bool Condition(ListingConditionArgs args) var found = false; foreach (var role in roles) { - if (role.Component is not AntagonistRoleComponent antag) + + if (!role.Antagonist || string.IsNullOrEmpty(role.Prototype)) continue; - if (antag.PrototypeId != null && Whitelist.Contains(antag.PrototypeId)) + if (Whitelist.Contains(role.Prototype)) found = true; } if (!found) diff --git a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs index ea8de4a9ccd..43c06efad3c 100644 --- a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs +++ b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs @@ -37,13 +37,13 @@ public override bool Condition(ListingConditionArgs args) return true; var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job, out _); + jobs.MindTryGetJob(mindId, out var job); - if (Blacklist != null && job?.Prototype != null) + if (Blacklist != null && job != null) { foreach (var department in prototypeManager.EnumeratePrototypes()) { - if (department.Roles.Contains(job.Prototype.Value) && Blacklist.Contains(department.ID)) + if (department.Roles.Contains(job.ID) && Blacklist.Contains(department.ID)) return false; } } @@ -52,11 +52,11 @@ public override bool Condition(ListingConditionArgs args) { var found = false; - if (job?.Prototype != null) + if (job != null) { foreach (var department in prototypeManager.EnumeratePrototypes()) { - if (department.Roles.Contains(job.Prototype.Value) && Whitelist.Contains(department.ID)) + if (department.Roles.Contains(job.ID) && Whitelist.Contains(department.ID)) { found = true; break; diff --git a/Content.Server/Store/Conditions/BuyerJobCondition.cs b/Content.Server/Store/Conditions/BuyerJobCondition.cs index 6a53af188c2..1ff4a97c33c 100644 --- a/Content.Server/Store/Conditions/BuyerJobCondition.cs +++ b/Content.Server/Store/Conditions/BuyerJobCondition.cs @@ -34,17 +34,17 @@ public override bool Condition(ListingConditionArgs args) return true; var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job, out _); + jobs.MindTryGetJob(mindId, out var job); if (Blacklist != null) { - if (job?.Prototype != null && Blacklist.Contains(job.Prototype)) + if (job is not null && Blacklist.Contains(job.ID)) return false; } if (Whitelist != null) { - if (job?.Prototype == null || !Whitelist.Contains(job.Prototype)) + if (job == null || !Whitelist.Contains(job.ID)) return false; } diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 95d63ab938f..852e3182c3c 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -12,7 +12,6 @@ using Content.Server.NPC; using Content.Server.NPC.HTN; using Content.Server.NPC.Systems; -using Content.Server.Roles; using Content.Server.Speech.Components; using Content.Server.Temperature.Components; using Content.Shared.Abilities.Psionics; @@ -49,18 +48,18 @@ namespace Content.Server.Zombies; /// public sealed partial class ZombieSystem { - [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly ServerInventorySystem _inventory = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IChatManager _chatMan = default!; + [Dependency] private readonly SharedCombatModeSystem _combat = default!; [Dependency] private readonly NpcFactionSystem _faction = default!; - [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearance = default!; [Dependency] private readonly IdentitySystem _identity = default!; - [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; - [Dependency] private readonly SharedCombatModeSystem _combat = default!; - [Dependency] private readonly IChatManager _chatMan = default!; + [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; + [Dependency] private readonly NPCSystem _npc = default!; [Dependency] private readonly SharedRoleSystem _roles = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; /// /// Handles an entity turning into a zombie when they die or go into crit @@ -249,7 +248,7 @@ public void ZombifyEntity(EntityUid target, MobStateComponent? mobState = null) if (hasMind && _mind.TryGetSession(mindId, out var session)) { //Zombie role for player manifest - _roles.MindAddRole(mindId, new ZombieRoleComponent { PrototypeId = zombiecomp.ZombieRoleId }); + _roles.MindAddRole(mindId, "MindRoleZombie", mind: null, silent: true); //Greeting message for new bebe zombers _chatMan.DispatchServerMessage(session, Loc.GetString("zombie-infection-greeting")); diff --git a/Content.Shared/Mind/Components/MindContainerComponent.cs b/Content.Shared/Mind/Components/MindContainerComponent.cs index 380d30ca143..760f5026fad 100644 --- a/Content.Shared/Mind/Components/MindContainerComponent.cs +++ b/Content.Shared/Mind/Components/MindContainerComponent.cs @@ -14,7 +14,6 @@ public sealed partial class MindContainerComponent : Component /// The mind controlling this mob. Can be null. /// [DataField, AutoNetworkedField] - [Access(typeof(SharedMindSystem), Other = AccessPermissions.ReadWriteExecute)] // FIXME Friends public EntityUid? Mind { get; set; } /// @@ -35,7 +34,6 @@ public sealed partial class MindContainerComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] [DataField("ghostOnShutdown")] - [Access(typeof(SharedMindSystem), Other = AccessPermissions.ReadWriteExecute)] // FIXME Friends public bool GhostOnShutdown { get; set; } = true; } diff --git a/Content.Shared/Mind/MindComponent.cs b/Content.Shared/Mind/MindComponent.cs index d603102682b..a0812be8f74 100644 --- a/Content.Shared/Mind/MindComponent.cs +++ b/Content.Shared/Mind/MindComponent.cs @@ -1,4 +1,3 @@ -using Content.Shared.Actions; using Content.Shared.GameTicking; using Content.Shared.Mind.Components; using Robust.Shared.GameStates; @@ -87,17 +86,21 @@ public sealed partial class MindComponent : Component /// /// Prevents user from ghosting out /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("preventGhosting")] + [DataField] public bool PreventGhosting { get; set; } /// /// Prevents user from suiciding /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("preventSuicide")] + [DataField] public bool PreventSuicide { get; set; } + /// + /// Mind Role Entities belonging to this Mind + /// + [DataField, AutoNetworkedField] + public List MindRoles = new List(); + /// /// The session of the player owning this mind. /// Can be null, in which case the player is currently not logged in. diff --git a/Content.Shared/Roles/AntagonistRoleComponent.cs b/Content.Shared/Roles/AntagonistRoleComponent.cs deleted file mode 100644 index 748b18255aa..00000000000 --- a/Content.Shared/Roles/AntagonistRoleComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JetBrains.Annotations; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; - -namespace Content.Shared.Roles; - -public abstract partial class AntagonistRoleComponent : Component -{ - [DataField("prototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] - public string? PrototypeId; -} - -/// -/// Mark the antagonist role component as being exclusive -/// IE by default other antagonists should refuse to select the same entity for a different antag role -/// -[AttributeUsage(AttributeTargets.Class, Inherited = false)] -[BaseTypeRequired(typeof(AntagonistRoleComponent))] -public sealed partial class ExclusiveAntagonistAttribute : Attribute -{ -} diff --git a/Content.Shared/Roles/Jobs/JobComponent.cs b/Content.Shared/Roles/Jobs/JobComponent.cs deleted file mode 100644 index b7df34cb9f5..00000000000 --- a/Content.Shared/Roles/Jobs/JobComponent.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Content.Shared.Chat.V2.Repository; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; - -namespace Content.Shared.Roles.Jobs; - -/// -/// Added to mind entities to hold the data for the player's current job. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class JobComponent : Component -{ - [DataField(required: true), AutoNetworkedField] - public ProtoId? Prototype; -} diff --git a/Content.Shared/Roles/Jobs/JobRoleComponent.cs b/Content.Shared/Roles/Jobs/JobRoleComponent.cs new file mode 100644 index 00000000000..dbaf12beec4 --- /dev/null +++ b/Content.Shared/Roles/Jobs/JobRoleComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Roles.Jobs; + +/// +/// Added to mind role entities to mark them as a job role entity. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class JobRoleComponent : BaseMindRoleComponent +{ + +} diff --git a/Content.Shared/Roles/Jobs/SharedJobSystem.cs b/Content.Shared/Roles/Jobs/SharedJobSystem.cs index 939a57baadf..94447a5af46 100644 --- a/Content.Shared/Roles/Jobs/SharedJobSystem.cs +++ b/Content.Shared/Roles/Jobs/SharedJobSystem.cs @@ -13,8 +13,10 @@ namespace Content.Shared.Roles.Jobs; /// public abstract class SharedJobSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly SharedPlayerSystem _playerSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; + private readonly Dictionary _inverseTrackerLookup = new(); public override void Initialize() @@ -100,32 +102,44 @@ public bool TryGetPrimaryDepartment(string jobProto, [NotNullWhen(true)] out Dep public bool MindHasJobWithId(EntityUid? mindId, string prototypeId) { - return CompOrNull(mindId)?.Prototype == prototypeId; + + MindRoleComponent? comp = null; + if (mindId is null) + return false; + + _roles.MindHasRole(mindId.Value, out var role); + + if (role is null) + return false; + + comp = role.Value.Comp; + + return (comp.JobPrototype == prototypeId); } public bool MindTryGetJob( [NotNullWhen(true)] EntityUid? mindId, - [NotNullWhen(true)] out JobComponent? comp, [NotNullWhen(true)] out JobPrototype? prototype) { - comp = null; prototype = null; + MindTryGetJobId(mindId, out var protoId); - return TryComp(mindId, out comp) && - comp.Prototype != null && - _prototypes.TryIndex(comp.Prototype, out prototype); + return (_prototypes.TryIndex(protoId, out prototype) || prototype is not null); } - public bool MindTryGetJobId([NotNullWhen(true)] EntityUid? mindId, out ProtoId? job) + public bool MindTryGetJobId( + [NotNullWhen(true)] EntityUid? mindId, + out ProtoId? job) { - if (!TryComp(mindId, out JobComponent? comp)) - { - job = null; + job = null; + + if (mindId is null) return false; - } - job = comp.Prototype; - return true; + if (_roles.MindHasRole(mindId.Value, out var role)) + job = role.Value.Comp.JobPrototype; + + return (job is not null); } /// @@ -134,7 +148,7 @@ public bool MindTryGetJobId([NotNullWhen(true)] EntityUid? mindId, out ProtoId public bool MindTryGetJobName([NotNullWhen(true)] EntityUid? mindId, out string name) { - if (MindTryGetJob(mindId, out _, out var prototype)) + if (MindTryGetJob(mindId, out var prototype)) { name = prototype.LocalizedName; return true; @@ -161,7 +175,7 @@ public bool CanBeAntag(ICommonSession player) if (_playerSystem.ContentData(player) is not { Mind: { } mindId }) return true; - if (!MindTryGetJob(mindId, out _, out var prototype)) + if (!MindTryGetJob(mindId, out var prototype)) return true; return prototype.CanBeAntag; diff --git a/Content.Shared/Roles/MindGetAllRolesEvent.cs b/Content.Shared/Roles/MindGetAllRoleInfoEvent.cs similarity index 79% rename from Content.Shared/Roles/MindGetAllRolesEvent.cs rename to Content.Shared/Roles/MindGetAllRoleInfoEvent.cs index 69878739084..a2f2820b5c3 100644 --- a/Content.Shared/Roles/MindGetAllRolesEvent.cs +++ b/Content.Shared/Roles/MindGetAllRoleInfoEvent.cs @@ -7,7 +7,7 @@ namespace Content.Shared.Roles; /// /// The list of roles on the player. [ByRefEvent] -public readonly record struct MindGetAllRolesEvent(List Roles); +public readonly record struct MindGetAllRoleInfoEvent(List Roles); /// /// Returned by to give some information about a player's role. @@ -17,4 +17,4 @@ namespace Content.Shared.Roles; /// Whether or not this role makes this player an antagonist. /// The id associated with the role. /// The prototype ID of the role -public readonly record struct RoleInfo(Component Component, string Name, bool Antagonist, string? PlayTimeTrackerId, string Prototype); +public readonly record struct RoleInfo(string Name, bool Antagonist, string? PlayTimeTrackerId, string Prototype); diff --git a/Content.Shared/Roles/MindRoleComponent.cs b/Content.Shared/Roles/MindRoleComponent.cs new file mode 100644 index 00000000000..38b83a8b3f8 --- /dev/null +++ b/Content.Shared/Roles/MindRoleComponent.cs @@ -0,0 +1,48 @@ +using Content.Shared.Mind; +using JetBrains.Annotations; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Roles; + +/// +/// This holds data for, and indicates, a Mind Role entity +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class MindRoleComponent : BaseMindRoleComponent +{ + /// + /// Marks this Mind Role as Antagonist + /// A single antag Mind Role is enough to make the owner mind count as Antagonist. + /// + [DataField] + public bool Antag { get; set; } = false; + + /// + /// True if this mindrole is an exclusive antagonist. Antag setting is not checked if this is True. + /// + [DataField] + public bool ExclusiveAntag { get; set; } = false; + + /// + /// The Mind that this role belongs to + /// + public Entity Mind { get; set; } + + /// + /// The Antagonist prototype of this role + /// + [DataField] + public ProtoId? AntagPrototype { get; set; } + + /// + /// The Job prototype of this role + /// + [DataField] + public ProtoId? JobPrototype { get; set; } +} + +public abstract partial class BaseMindRoleComponent : Component +{ + +} diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 90e2025cb97..0df0abd6d77 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -1,34 +1,31 @@ +using System.Diagnostics.CodeAnalysis; using Content.Shared.Administration.Logs; using Content.Shared.CCVar; using Content.Shared.Database; -using Content.Shared.Ghost.Roles; +using Content.Shared.GameTicking; using Content.Shared.Mind; using Content.Shared.Roles.Jobs; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; +using Robust.Shared.Map; using Robust.Shared.Prototypes; -using Robust.Shared.Utility; namespace Content.Shared.Roles; public abstract partial class SharedRoleSystem : EntitySystem // DeltaV - make it partial { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedMindSystem _minds = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; - - // TODO please lord make role entities - private readonly HashSet _antagTypes = new(); + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly SharedGameTicker _gameTicker = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; private JobRequirementOverridePrototype? _requirementOverride; public override void Initialize() { - // TODO make roles entities - SubscribeLocalEvent(OnJobGetAllRoles); Subs.CVar(_cfg, CCVars.GameRoleTimerOverride, SetRequirementOverride, true); InitializeDeltaV(); // DeltaV } @@ -45,62 +42,118 @@ private void SetRequirementOverride(string value) Log.Error($"Unknown JobRequirementOverridePrototype: {value}"); } - private void OnJobGetAllRoles(EntityUid uid, JobComponent component, ref MindGetAllRolesEvent args) + /// + /// Adds multiple mind roles to a mind + /// + /// The mind entity to add the role to + /// The list of mind roles to add + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + public void MindAddRoles(EntityUid mindId, + List>? roles, + MindComponent? mind = null, + bool silent = false) { - var name = "game-ticker-unknown-role"; - var prototype = ""; - string? playTimeTracker = null; - if (component.Prototype != null && _prototypes.TryIndex(component.Prototype, out JobPrototype? job)) + if (roles is null || roles.Count == 0) + return; + + foreach (var proto in roles) { - name = job.Name; - prototype = job.ID; - playTimeTracker = job.PlayTimeTracker; + MindAddRole(mindId, proto, mind, silent); } + } - name = Loc.GetString(name); - - args.Roles.Add(new RoleInfo(component, name, false, playTimeTracker, prototype)); + /// + /// Adds a mind role to a mind + /// + /// The mind entity to add the role to + /// The mind role to add + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + public void MindAddRole(EntityUid mindId, + ProtoId protoId, + MindComponent? mind = null, + bool silent = false) + { + if (protoId == "MindRoleJob") + MindAddJobRole(mindId, mind, silent, ""); + else + MindAddRoleDo(mindId, protoId, mind, silent); } - protected void SubscribeAntagEvents() where T : AntagonistRoleComponent + /// + /// Adds a Job mind role with the specified job prototype + /// + /// /// The mind entity to add the job role to + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + /// The Job prototype for the new role + public void MindAddJobRole(EntityUid mindId, + MindComponent? mind = null, + bool silent = false, + string? jobPrototype = null) { - SubscribeLocalEvent((EntityUid _, T component, ref MindGetAllRolesEvent args) => + // Can't have someone get paid for two jobs now, can we + if (MindHasRole(mindId, out var jobRole) + && jobRole.Value.Comp.JobPrototype != jobPrototype) { - var name = "game-ticker-unknown-role"; - var prototype = ""; - if (component.PrototypeId != null && _prototypes.TryIndex(component.PrototypeId, out AntagPrototype? antag)) + Resolve(mindId, ref mind); + if (mind is not null) { - name = antag.Name; - prototype = antag.ID; + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"Job Role of {ToPrettyString(mind.OwnedEntity)} changed from '{jobRole.Value.Comp.JobPrototype}' to '{jobPrototype}'"); } - name = Loc.GetString(name); - - args.Roles.Add(new RoleInfo(component, name, true, null, prototype)); - }); - SubscribeLocalEvent((EntityUid _, T _, ref MindIsAntagonistEvent args) => { args.IsAntagonist = true; args.IsExclusiveAntagonist |= typeof(T).TryGetCustomAttribute(out _); }); - _antagTypes.Add(typeof(T)); + jobRole.Value.Comp.JobPrototype = jobPrototype; + } + else + MindAddRoleDo(mindId, "MindRoleJob", mind, silent, jobPrototype); } - public void MindAddRoles(EntityUid mindId, ComponentRegistry components, MindComponent? mind = null, bool silent = false) + /// + /// Creates a Mind Role + /// + private void MindAddRoleDo(EntityUid mindId, + ProtoId protoId, + MindComponent? mind = null, + bool silent = false, + string? jobPrototype = null) { if (!Resolve(mindId, ref mind)) + { + Log.Error($"Failed to add role {protoId} to mind {mindId} : Mind does not match provided mind component"); return; + } - EntityManager.AddComponents(mindId, components); var antagonist = false; - foreach (var compReg in components.Values) + + if (!_prototypes.TryIndex(protoId, out var protoEnt)) { - var compType = compReg.Component.GetType(); + Log.Error($"Failed to add role {protoId} to mind {mindId} : Role prototype does not exist"); + return; + } - var comp = EntityManager.ComponentFactory.GetComponent(compType); - if (IsAntagonistRole(comp.GetType())) - { - antagonist = true; - break; - } + //TODO don't let a prototype being added a second time + //If that was somehow to occur, a second mindrole for that comp would be created + //Meaning any mind role checks could return wrong results, since they just return the first match they find + + var mindRoleId = Spawn(protoId, MapCoordinates.Nullspace); + EnsureComp(mindRoleId); + var mindRoleComp = Comp(mindRoleId); + + mindRoleComp.Mind = (mindId,mind); + if (jobPrototype is not null) + { + mindRoleComp.JobPrototype = jobPrototype; + EnsureComp(mindRoleId); } + if (mindRoleComp.Antag || mindRoleComp.ExclusiveAntag) + antagonist = true; + + mind.MindRoles.Add(mindRoleId); + var mindEv = new MindRoleAddedEvent(silent); RaiseLocalEvent(mindId, ref mindEv); @@ -110,157 +163,330 @@ public void MindAddRoles(EntityUid mindId, ComponentRegistry components, MindCom RaiseLocalEvent(mind.OwnedEntity.Value, message, true); } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"Role components {string.Join(components.Keys.ToString(), ", ")} added to mind of {_minds.MindOwnerLoggingString(mind)}"); + var name = Loc.GetString(protoEnt.Name); + if (mind.OwnedEntity is not null) + { + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"{name} added to mind of {ToPrettyString(mind.OwnedEntity)}"); + } + else + { + //TODO: This is not tied to the player on the Admin Log filters. + //Probably only happens when Job Role is added on initial spawn, before the mind entity is put in a mob + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"{name} added to {ToPrettyString(mindId)}"); + } } - public void MindAddRole(EntityUid mindId, Component component, MindComponent? mind = null, bool silent = false) + /// + /// Removes all instances of a specific role from this mind. + /// + /// The mind to remove the role from. + /// The type of the role to remove. + /// Thrown if the mind does not exist or does not have this role. + /// Returns False if there was something wrong with the mind or the removal. True if successful> + public bool MindRemoveRole(EntityUid mindId) where T : IComponent { - if (!Resolve(mindId, ref mind)) - return; + if (!TryComp(mindId, out var mind) ) + throw new ArgumentException($"{mindId} does not exist or does not have mind component"); - if (HasComp(mindId, component.GetType())) + var found = false; + var antagonist = false; + var delete = new List(); + foreach (var role in mind.MindRoles) { - throw new ArgumentException($"We already have this role: {component}"); + if (!HasComp(role)) + continue; + + var roleComp = Comp(role); + antagonist = roleComp.Antag; + _entityManager.DeleteEntity(role); + + delete.Add(role); + found = true; + } - EntityManager.AddComponent(mindId, component); - var antagonist = IsAntagonistRole(component.GetType()); + foreach (var role in delete) + { + mind.MindRoles.Remove(role); + } - var mindEv = new MindRoleAddedEvent(silent); - RaiseLocalEvent(mindId, ref mindEv); + if (!found) + { + throw new ArgumentException($"{mindId} does not have this role: {typeof(T)}"); + } + + var message = new RoleRemovedEvent(mindId, mind, antagonist); - var message = new RoleAddedEvent(mindId, mind, antagonist, silent); if (mind.OwnedEntity != null) { RaiseLocalEvent(mind.OwnedEntity.Value, message, true); } - - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {component}' added to mind of {_minds.MindOwnerLoggingString(mind)}"); + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"'Role {typeof(T).Name}' removed from mind of {ToPrettyString(mind.OwnedEntity)}"); + return true; } /// - /// Gives this mind a new role. + /// Finds and removes all mind roles of a specific type /// - /// The mind to add the role to. - /// The role instance to add. - /// The role type to add. - /// Whether or not the role should be added silently - /// The instance of the role. - /// - /// Thrown if we already have a role with this type. - /// - public void MindAddRole(EntityUid mindId, T component, MindComponent? mind = null, bool silent = false) where T : IComponent, new() + /// The mind entity + /// The type of the role to remove. + /// True if the role existed and was removed + public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent { - if (!Resolve(mindId, ref mind)) - return; - - if (HasComp(mindId)) + if (!MindHasRole(mindId)) { - throw new ArgumentException($"We already have this role: {typeof(T)}"); + Log.Warning($"Failed to remove role {typeof(T)} from {mindId} : mind does not have role "); + return false; } - AddComp(mindId, component); - var antagonist = IsAntagonistRole(); + if (typeof(T) == typeof(MindRoleComponent)) + return false; - var mindEv = new MindRoleAddedEvent(silent); - RaiseLocalEvent(mindId, ref mindEv); + return MindRemoveRole(mindId); + } - var message = new RoleAddedEvent(mindId, mind, antagonist, silent); - if (mind.OwnedEntity != null) + /// + /// Finds the first mind role of a specific T type on a mind entity. + /// Outputs entity components for the mind role's MindRoleComponent and for T + /// + /// The mind entity + /// The type of the role to find. + /// The Mind Role entity component + /// The Mind Role's entity component for T + /// True if the role is found + public bool MindHasRole(EntityUid mindId, + [NotNullWhen(true)] out Entity? role, + [NotNullWhen(true)] out Entity? roleT) where T : IComponent + { + role = null; + roleT = null; + + if (!TryComp(mindId, out var mind)) + return false; + + var found = false; + + foreach (var roleEnt in mind.MindRoles) { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); + if (!HasComp(roleEnt)) + continue; + + role = (roleEnt,Comp(roleEnt)); + roleT = (roleEnt,Comp(roleEnt)); + found = true; + break; } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {typeof(T).Name}' added to mind of {_minds.MindOwnerLoggingString(mind)}"); + return found; } /// - /// Removes a role from this mind. + /// Finds the first mind role of a specific type on a mind entity. + /// Outputs an entity component for the mind role's MindRoleComponent /// - /// The mind to remove the role from. - /// The type of the role to remove. - /// - /// Thrown if we do not have this role. - /// - public void MindRemoveRole(EntityUid mindId) where T : IComponent + /// The mind entity + /// The Type to look for + /// The output role + /// True if the role is found + public bool MindHasRole(EntityUid mindId, + Type type, + [NotNullWhen(true)] out Entity? role) { - if (!RemComp(mindId)) + role = null; + // All MindRoles have this component, it would just return the first one. + // Order might not be what is expected. + // Better to report null + if (type == Type.GetType("MindRoleComponent")) { - throw new ArgumentException($"We do not have this role: {typeof(T)}"); + Log.Error($"Something attempted to query mind role 'MindRoleComponent' on mind {mindId}. This component is present on every single mind role."); + return false; } - var mind = Comp(mindId); - var antagonist = IsAntagonistRole(); - var message = new RoleRemovedEvent(mindId, mind, antagonist); + if (!TryComp(mindId, out var mind)) + return false; - if (mind.OwnedEntity != null) + var found = false; + + foreach (var roleEnt in mind.MindRoles) { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); + if (!HasComp(roleEnt, type)) + continue; + + role = (roleEnt,Comp(roleEnt)); + found = true; + break; } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {typeof(T).Name}' removed from mind of {_minds.MindOwnerLoggingString(mind)}"); + + return found; } - public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent + /// + /// Finds the first mind role of a specific type on a mind entity. + /// Outputs an entity component for the mind role's MindRoleComponent + /// + /// The mind entity + /// The Mind Role entity component + /// The type of the role to find. + /// True if the role is found + public bool MindHasRole(EntityUid mindId, + [NotNullWhen(true)] out Entity? role) where T : IComponent { - if (!MindHasRole(mindId)) - return false; - - MindRemoveRole(mindId); - return true; + return MindHasRole(mindId, out role, out _); } + /// + /// Finds the first mind role of a specific type on a mind entity. + /// + /// The mind entity + /// The type of the role to find. + /// True if the role is found public bool MindHasRole(EntityUid mindId) where T : IComponent { - DebugTools.Assert(HasComp(mindId)); - return HasComp(mindId); + return MindHasRole(mindId, out _, out _); } - public List MindGetAllRoles(EntityUid mindId) + //TODO: Delete this later + /// + /// Returns the first mind role of a specific type + /// + /// The mind entity + /// Entity Component of the mind role + [Obsolete("Use MindHasRole's output value")] + public Entity? MindGetRole(EntityUid mindId) where T : IComponent { - DebugTools.Assert(HasComp(mindId)); - var ev = new MindGetAllRolesEvent(new List()); - RaiseLocalEvent(mindId, ref ev); - return ev.Roles; + Entity? result = null; + + var mind = Comp(mindId); + + foreach (var uid in mind.MindRoles) + { + if (HasComp(uid) && TryComp(uid, out var comp)) + result = (uid,comp); + } + return result; } + /// + /// Reads all Roles of a mind Entity and returns their data as RoleInfo + /// + /// The mind entity + /// RoleInfo list + public List MindGetAllRoleInfo(EntityUid mindId) + { + var roleInfo = new List(); + + if (!TryComp(mindId, out var mind)) + return roleInfo; + + foreach (var role in mind.MindRoles) + { + var valid = false; + var name = "game-ticker-unknown-role"; + var prototype = ""; + string? playTimeTracker = null; + + var comp = Comp(role); + if (comp.AntagPrototype is not null) + { + prototype = comp.AntagPrototype; + } + + if (comp.JobPrototype is not null && comp.AntagPrototype is null) + { + prototype = comp.JobPrototype; + if (_prototypes.TryIndex(comp.JobPrototype, out var job)) + { + playTimeTracker = job.PlayTimeTracker; + name = job.Name; + valid = true; + } + else + { + Log.Error($" Mind Role Prototype '{role.Id}' contains invalid Job prototype: '{comp.JobPrototype}'"); + } + } + else if (comp.AntagPrototype is not null && comp.JobPrototype is null) + { + prototype = comp.AntagPrototype; + if (_prototypes.TryIndex(comp.AntagPrototype, out var antag)) + { + name = antag.Name; + valid = true; + } + else + { + Log.Error($" Mind Role Prototype '{role.Id}' contains invalid Antagonist prototype: '{comp.AntagPrototype}'"); + } + } + else if (comp.JobPrototype is not null && comp.AntagPrototype is not null) + { + Log.Error($" Mind Role Prototype '{role.Id}' contains both Job and Antagonist prototypes"); + } + + if (valid) + roleInfo.Add(new RoleInfo(name, comp.Antag || comp.ExclusiveAntag , playTimeTracker, prototype)); + } + return roleInfo; + } + + /// + /// Does this mind possess an antagonist role + /// + /// The mind entity + /// True if the mind possesses any antag roles public bool MindIsAntagonist(EntityUid? mindId) { - if (mindId == null) + if (mindId is null) + { + Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind entity not found"); return false; + } - DebugTools.Assert(HasComp(mindId)); - var ev = new MindIsAntagonistEvent(); - RaiseLocalEvent(mindId.Value, ref ev); - return ev.IsAntagonist; + return CheckAntagonistStatus(mindId.Value).Item1; } /// /// Does this mind possess an exclusive antagonist role /// /// The mind entity - /// True if the mind possesses an exclusive antag role + /// True if the mind possesses any exclusive antag roles public bool MindIsExclusiveAntagonist(EntityUid? mindId) { - if (mindId == null) + if (mindId is null) + { + Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind entity not found"); return false; + } - var ev = new MindIsAntagonistEvent(); - RaiseLocalEvent(mindId.Value, ref ev); - return ev.IsExclusiveAntagonist; + return CheckAntagonistStatus(mindId.Value).Item2; } - public bool IsAntagonistRole() - { - return _antagTypes.Contains(typeof(T)); - } + private (bool, bool) CheckAntagonistStatus(EntityUid mindId) + { + if (!TryComp(mindId, out var mind)) + { + Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind component not found"); + return (false, false); + } - public bool IsAntagonistRole(Type component) - { - return _antagTypes.Contains(component); + var antagonist = false; + var exclusiveAntag = false; + foreach (var role in mind.MindRoles) + { + var roleComp = Comp(role); + if (roleComp.Antag || exclusiveAntag) + antagonist = true; + if (roleComp.ExclusiveAntag) + exclusiveAntag = true; + } + + return (antagonist, exclusiveAntag); } /// diff --git a/Content.Shared/Whitelist/EntityWhitelist.cs b/Content.Shared/Whitelist/EntityWhitelist.cs index 3e4e2fecb2e..cbe4633360f 100644 --- a/Content.Shared/Whitelist/EntityWhitelist.cs +++ b/Content.Shared/Whitelist/EntityWhitelist.cs @@ -32,6 +32,12 @@ public sealed partial class EntityWhitelist [DataField] public string[]? Components; // TODO yaml validation + /// + /// Mind Role Prototype names that are allowed in the whitelist. + /// + [DataField] public string[]? MindRoles; + // TODO yaml validation + /// /// Item sizes that are allowed in the whitelist. /// diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index 57fdb523dd4..7c78b410a18 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Item; +using Content.Shared.Roles; using Content.Shared.Tag; namespace Content.Shared.Whitelist; @@ -7,6 +8,7 @@ namespace Content.Shared.Whitelist; public sealed class EntityWhitelistSystem : EntitySystem { [Dependency] private readonly IComponentFactory _factory = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; [Dependency] private readonly TagSystem _tag = default!; private EntityQuery _itemQuery; @@ -46,9 +48,30 @@ public bool CheckBoth([NotNullWhen(true)] EntityUid? uid, EntityWhitelist? black public bool IsValid(EntityWhitelist list, EntityUid uid) { if (list.Components != null) - EnsureRegistrations(list); + { + var regs = StringsToRegs(list.Components); + + list.Registrations ??= new List(); + list.Registrations.AddRange(regs); + } + + if (list.MindRoles != null) + { + var regs = StringsToRegs(list.MindRoles); + + foreach (var role in regs) + { + if ( _roles.MindHasRole(uid, role.Type, out _)) + { + if (!list.RequireAll) + return true; + } + else if (list.RequireAll) + return false; + } + } - if (list.Registrations != null) + if (list.Registrations != null && list.Registrations.Count > 0) { foreach (var reg in list.Registrations) { @@ -153,7 +176,7 @@ public bool IsBlacklistPassOrNull(EntityWhitelist? blacklist, EntityUid uid) return IsWhitelistPassOrNull(blacklist, uid); } - /// + /// /// Helper function to determine if Blacklist is either null or the entity is not on the list /// Duplicate of equivalent Whitelist function /// @@ -162,24 +185,27 @@ public bool IsBlacklistFailOrNull(EntityWhitelist? blacklist, EntityUid uid) return IsWhitelistFailOrNull(blacklist, uid); } - private void EnsureRegistrations(EntityWhitelist list) + private List StringsToRegs(string[]? input) { - if (list.Components == null) - return; + var list = new List(); - list.Registrations = new List(); - foreach (var name in list.Components) + if (input == null || input.Length == 0) + return list; + + foreach (var name in input) { var availability = _factory.GetComponentAvailability(name); if (_factory.TryGetRegistration(name, out var registration) && availability == ComponentAvailability.Available) { - list.Registrations.Add(registration); + list.Add(registration); } else if (availability == ComponentAvailability.Unknown) { - Log.Warning($"Unknown component name {name} passed to EntityWhitelist!"); + Log.Error($"StringsToRegs failed: Unknown component name {name} passed to EntityWhitelist!"); } } + + return list; } } diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl index 1a4fcafbf86..06f8aeb565e 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl @@ -4,6 +4,7 @@ nukeops-description = Nuclear operatives have targeted the station. Try to keep nukeops-welcome = You are a nuclear operative. Your goal is to blow up {$station}, and ensure that it is nothing but a pile of rubble. Your bosses, the Syndicate, have provided you with the tools you'll need for the task. Operation {$name} is a go ! Death to Nanotrasen! +nukeops-briefing = Your objectives are simple. Deliver the payload and make sure it detonates. Begin mission. nukeops-opsmajor = [color=crimson]Syndicate major victory![/color] nukeops-opsminor = [color=crimson]Syndicate minor victory![/color] diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 7b4094cd91a..cd60ecd70e0 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -180,9 +180,8 @@ min: 1 max: 1 pickPlayer: false - mindComponents: - - type: DragonRole - prototype: Dragon + mindRoles: + - MindRoleDragon - type: entity parent: BaseGameRule @@ -230,9 +229,8 @@ nameSegments: - names_ninja_title - names_ninja - mindComponents: - - type: NinjaRole - prototype: SpaceNinja + mindRoles: + - MindRoleNinja - type: entity parent: BaseGameRule @@ -444,9 +442,8 @@ - type: ZombifyOnDeath - type: IncurableZombie - type: InitialInfected - mindComponents: - - type: InitialInfectedRole - prototype: InitialInfected + mindRoles: + - MindRoleInitialInfected - type: entity parent: BaseNukeopsRule @@ -472,7 +469,6 @@ startingGear: SyndicateLoneOperativeGearFull roleLoadout: - RoleSurvivalNukie - components: - type: NukeOperative - type: RandomMetadata @@ -482,9 +478,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: Nukeops + mindRoles: + - MindRoleNukeops - type: entity parent: BaseTraitorRule @@ -511,9 +506,8 @@ blacklist: components: - AntagImmune - mindComponents: - - type: TraitorRole - prototype: TraitorSleeper + mindRoles: + - MindRoleTraitorSleeper - type: entity id: MassHallucinations diff --git a/Resources/Prototypes/GameRules/midround.yml b/Resources/Prototypes/GameRules/midround.yml index 7446995f262..6cc53a3d100 100644 --- a/Resources/Prototypes/GameRules/midround.yml +++ b/Resources/Prototypes/GameRules/midround.yml @@ -26,8 +26,7 @@ startingGear: ThiefGear components: - type: Pacified - mindComponents: - - type: ThiefRole - prototype: Thief + mindRoles: + - MindRoleThief briefing: sound: "/Audio/Misc/thief_greeting.ogg" diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index aa484de19f1..829b73deed7 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -114,9 +114,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: NukeopsCommander + mindRoles: + - MindRoleNukeopsCommander - prefRoles: [ NukeopsMedic ] fallbackRoles: [ Nukeops, NukeopsCommander ] spawnerPrototype: SpawnPointNukeopsMedic @@ -132,9 +131,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: NukeopsMedic + mindRoles: + - MindRoleNukeopsMedic - prefRoles: [ Nukeops ] fallbackRoles: [ NukeopsCommander, NukeopsMedic ] spawnerPrototype: SpawnPointNukeopsOperative @@ -152,9 +150,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: Nukeops + mindRoles: + - MindRoleNukeops - type: entity abstract: true @@ -189,9 +186,8 @@ components: - AntagImmune lateJoinAdditional: true - mindComponents: - - type: TraitorRole - prototype: Traitor + mindRoles: + - MindRoleTraitor - type: entity id: Revolutionary @@ -213,9 +209,8 @@ components: - type: Revolutionary - type: HeadRevolutionary - mindComponents: - - type: RevolutionaryRole - prototype: HeadRev + mindRoles: + - MindRoleHeadRevolutionary - type: entity id: Sandbox @@ -257,9 +252,8 @@ - type: ZombifyOnDeath - type: IncurableZombie - type: InitialInfected - mindComponents: - - type: InitialInfectedRole - prototype: InitialInfected + mindRoles: + - MindRoleInitialInfected # event schedulers diff --git a/Resources/Prototypes/Objectives/dragon.yml b/Resources/Prototypes/Objectives/dragon.yml index bbdac8faa1a..9d81c62ab3f 100644 --- a/Resources/Prototypes/Objectives/dragon.yml +++ b/Resources/Prototypes/Objectives/dragon.yml @@ -9,7 +9,7 @@ issuer: objective-issuer-dragon - type: RoleRequirement roles: - components: + mindRoles: - DragonRole - type: entity diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index 00bf9d705b8..5118e89e26f 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -9,7 +9,7 @@ issuer: objective-issuer-spiderclan - type: RoleRequirement roles: - components: + mindRoles: - NinjaRole - type: entity diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml index f4b2a27fa77..7d0ebbaef0c 100644 --- a/Resources/Prototypes/Objectives/thief.yml +++ b/Resources/Prototypes/Objectives/thief.yml @@ -7,7 +7,7 @@ issuer: objective-issuer-thief - type: RoleRequirement roles: - components: + mindRoles: - ThiefRole - type: entity diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index fc97e1797c7..3acfb04d244 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -7,7 +7,7 @@ issuer: objective-issuer-syndicate - type: RoleRequirement roles: - components: + mindRoles: - TraitorRole - type: entity diff --git a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml new file mode 100644 index 00000000000..eb92fa51ae9 --- /dev/null +++ b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml @@ -0,0 +1,180 @@ +- type: entity + id: BaseMindRole + name: Mind Role + description: Mind Role entity + abstract: true + components: + - type: MindRole + +- type: entity + parent: BaseMindRole + id: BaseMindRoleAntag + abstract: true + components: + - type: MindRole + antag: true + +#Observer +- type: entity + parent: BaseMindRole + id: MindRoleObserver + name: Observer Role + components: + - type: ObserverRole + +#Ghostrole Marker +- type: entity + parent: BaseMindRole + id: MindRoleGhostMarker + name: Ghost Role + components: + - type: GhostRoleMarkerRole + +# The Job MindRole holds the mob's Job prototype +- type: entity + parent: BaseMindRole + id: MindRoleJob + name: Job Role +# description: + # MindRoleComponent.JobPrototype is filled by SharedJobSystem + +# Subverted Silicon +- type: entity + parent: BaseMindRoleAntag + id: MindRoleSubvertedSilicon + name: Subverted Silicon Role + description: + components: + - type: SubvertedSiliconRole + +# Dragon +- type: entity + parent: BaseMindRoleAntag + id: MindRoleDragon + name: Dragon Role +# description: + components: + - type: MindRole + antagPrototype: Dragon + exclusiveAntag: true + - type: DragonRole + - type: RoleBriefing + briefing: dragon-role-briefing + +# Ninja +- type: entity + parent: BaseMindRoleAntag + id: MindRoleNinja + name: Space Ninja Role +# description: mind-role-ninja-description + components: + - type: MindRole + antagPrototype: SpaceNinja + exclusiveAntag: true + - type: NinjaRole + +# Nukies +- type: entity + parent: BaseMindRoleAntag + id: MindRoleNukeops + name: Nukeops Operative Role +# description: mind-role-nukeops-description + components: + - type: MindRole + exclusiveAntag: true + antagPrototype: Nukeops + - type: NukeopsRole + +- type: entity + parent: MindRoleNukeops + id: MindRoleNukeopsMedic + name: Nukeops Medic Role +# description: mind-role-nukeops-medic-description + components: + - type: MindRole + antagPrototype: NukeopsMedic + +- type: entity + parent: MindRoleNukeops + id: MindRoleNukeopsCommander + name: Nukeops Commander Role +# description: mind-role-nukeops-commander-description + components: + - type: MindRole + antagPrototype: NukeopsCommander + +# Revolutionaries +- type: entity + parent: BaseMindRoleAntag + id: MindRoleHeadRevolutionary + name: Head Revolutionary Role +# description: mind-role-head-revolutionary-description + components: + - type: MindRole + antagPrototype: HeadRev + exclusiveAntag: true + - type: RevolutionaryRole + +- type: entity + parent: MindRoleHeadRevolutionary + id: MindRoleRevolutionary + name: Revolutionary Role +# description: mind-role-revolutionary-description + components: + - type: MindRole + antagPrototype: Rev + +# Thief +- type: entity + parent: BaseMindRoleAntag + id: MindRoleThief + name: Thief Role +# description: mind-role-thief-description + components: + - type: MindRole + antagPrototype: Thief + - type: ThiefRole + +# Traitors +- type: entity + parent: BaseMindRoleAntag + id: MindRoleTraitor + name: Traitor Role +# description: mind-role-traitor-description + components: + - type: MindRole + antagPrototype: Traitor + exclusiveAntag: true + - type: TraitorRole + +- type: entity + parent: MindRoleTraitor + id: MindRoleTraitorSleeper + name: Sleeper Agent Role +# description: mind-role-traitor-sleeper-description + components: + - type: MindRole + antagPrototype: TraitorSleeper + +# Zombie Squad +- type: entity + parent: BaseMindRoleAntag + id: MindRoleInitialInfected + name: Initial Infected Role +# description: mind-role-initial-infected-description + components: + - type: MindRole + antagPrototype: InitialInfected + exclusiveAntag: true + - type: InitialInfectedRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleZombie + name: Zombie Role +# description: mind-role-zombie-description + components: + - type: MindRole + antagPrototype: Zombie + exclusiveAntag: true + - type: ZombieRole From de9aa943228c618dabe935dfc9d7cab4bc182fc3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 10 Oct 2024 08:50:05 +0000 Subject: [PATCH 029/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9605db2901c..0ee3e2711dd 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: githubuser508 - changes: - - message: Candles crate and the ability for Cargo to order it. - type: Add - id: 6999 - time: '2024-07-29T08:29:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29736 - author: Blackern5000 changes: - message: Emergency oxygen and fire lockers now generally contain more supplies @@ -3916,3 +3909,13 @@ id: 7498 time: '2024-10-09T18:01:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30805 +- author: Errant + changes: + - message: Nukies now have role briefing on their character screen. + type: Tweak + - message: Animals who are made Thief no longer get told in their briefing about + the thief gear that they don't actually have and couldn't possibly use. + type: Fix + id: 7499 + time: '2024-10-10T08:48:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31318 From 209886836492891159ab670bd81cb563bfd15f54 Mon Sep 17 00:00:00 2001 From: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:35:35 +0300 Subject: [PATCH 030/173] Fix bounties(and potentially other things) running out of ids (#32700) * Make NameIdentifier Ids get refreshed after round restarts Before this commit the existing values would just get shuffled. This means that eventually the server would run out of ids to give to new entities for different groups. As a result everything would get id 0 * Comply with what seemingly is the convention for sawmills * Make it impossible to insert a bounty with a duplicate id * Reduce duplication * Remove unused sawmill * Fix rustbrain and skill issue * Aaaa * Apply suggestions from code review --------- Co-authored-by: Pieter-Jan Briers --- .../Cargo/Systems/CargoSystem.Bounty.cs | 7 +++ .../NameIdentifier/NameIdentifierSystem.cs | 44 +++++++++++++------ 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index 37d7015fd9f..373e8e243ba 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -420,6 +420,13 @@ public bool TryAddBounty(EntityUid uid, CargoBountyPrototype bounty, StationCarg return false; _nameIdentifier.GenerateUniqueName(uid, BountyNameIdentifierGroup, out var randomVal); + var newBounty = new CargoBountyData(bounty, randomVal); + // This bounty id already exists! Probably because NameIdentifierSystem ran out of ids. + if (component.Bounties.Any(b => b.Id == newBounty.Id)) + { + Log.Error("Failed to add bounty {ID} because another one with the same ID already existed!", newBounty.Id); + return false; + } component.Bounties.Add(new CargoBountyData(bounty, randomVal)); _adminLogger.Add(LogType.Action, LogImpact.Low, $"Added bounty \"{bounty.ID}\" (id:{component.TotalBounties}) to station {ToPrettyString(uid)}"); component.TotalBounties++; diff --git a/Content.Server/NameIdentifier/NameIdentifierSystem.cs b/Content.Server/NameIdentifier/NameIdentifierSystem.cs index eefd4357cb3..6db6e0ff565 100644 --- a/Content.Server/NameIdentifier/NameIdentifierSystem.cs +++ b/Content.Server/NameIdentifier/NameIdentifierSystem.cs @@ -14,6 +14,7 @@ public sealed class NameIdentifierSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly ILogManager _logManager = default!; /// /// Free IDs available per . @@ -118,23 +119,39 @@ private void OnMapInit(EntityUid uid, NameIdentifierComponent component, MapInit private void InitialSetupPrototypes() { - foreach (var proto in _prototypeManager.EnumeratePrototypes()) - { - AddGroup(proto); - } + EnsureIds(); } - private void AddGroup(NameIdentifierGroupPrototype proto) + private void FillGroup(NameIdentifierGroupPrototype proto, List values) { - var values = new List(proto.MaxValue - proto.MinValue); - + values.Clear(); for (var i = proto.MinValue; i < proto.MaxValue; i++) { values.Add(i); } _robustRandom.Shuffle(values); - CurrentIds.Add(proto.ID, values); + } + + private List GetOrCreateIdList(NameIdentifierGroupPrototype proto) + { + if (!CurrentIds.TryGetValue(proto.ID, out var ids)) + { + ids = new List(proto.MaxValue - proto.MinValue); + CurrentIds.Add(proto.ID, ids); + } + + return ids; + } + + private void EnsureIds() + { + foreach (var proto in _prototypeManager.EnumeratePrototypes()) + { + var ids = GetOrCreateIdList(proto); + + FillGroup(proto, ids); + } } private void OnReloadPrototypes(PrototypesReloadedEventArgs ev) @@ -159,19 +176,20 @@ private void OnReloadPrototypes(PrototypesReloadedEventArgs ev) foreach (var proto in set.Modified.Values) { + var name_proto = (NameIdentifierGroupPrototype) proto; + // Only bother adding new ones. if (CurrentIds.ContainsKey(proto.ID)) continue; - AddGroup((NameIdentifierGroupPrototype) proto); + var ids = GetOrCreateIdList(name_proto); + FillGroup(name_proto, ids); } } + private void CleanupIds(RoundRestartCleanupEvent ev) { - foreach (var values in CurrentIds.Values) - { - _robustRandom.Shuffle(values); - } + EnsureIds(); } } From cabb3bbae65872efb9bc3004cf861d6f1169680d Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 10 Oct 2024 14:36:43 +0000 Subject: [PATCH 031/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0ee3e2711dd..e4ce19a0c6a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Emergency oxygen and fire lockers now generally contain more supplies - type: Tweak - id: 7000 - time: '2024-07-29T09:57:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29230 - author: Moomoobeef changes: - message: Added the ability to wear lizard plushies on your head! @@ -3919,3 +3912,11 @@ id: 7499 time: '2024-10-10T08:48:57.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31318 +- author: nikthechampiongr + changes: + - message: It is no longer impossible to do bounties other than the first one if + the server has been up for a long period of time. + type: Fix + id: 7500 + time: '2024-10-10T14:35:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32700 From eeb06fac47db9a4cf48ba02d5120a302f28d4284 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 01:55:17 +0100 Subject: [PATCH 032/173] update for mind roles and fix random stuff, localize alt ids --- .../Ghost/Roles/GhostRoleSystem.Character.cs | 3 +- .../Systems/NotJobsRequirementSystem.cs | 22 ++++--- .../StationEvents/Events/ParadoxClonerRule.cs | 15 ++--- .../Abilities/MetapsionicPowerSystem.cs | 2 - .../Psionics/Glimmer/GlimmerReactiveSystem.cs | 2 +- .../Research/Oracle/OracleSystem.cs | 8 +-- Content.Server/Roles/FugitiveRoleComponent.cs | 9 --- .../ContainerSpawnPointSystem.cs | 2 +- .../EntitySystems/SpawnPointSystem.cs | 2 +- .../Station/Systems/StationSpawningSystem.cs | 9 +-- .../DeltaV/Recruiter/RecruiterPenComponent.cs | 6 +- .../Recruiter/SharedRecruiterPenSystem.cs | 19 +++--- .../DeltaV/Roles/FugitiveRoleComponent.cs | 6 ++ .../Roles/ListeningPostRoleComponent.cs | 4 +- .../DeltaV/Roles/ParadoxAnomalyRole.cs | 4 +- Content.Shared/DeltaV/Roles/RecruiterRole.cs | 4 +- .../DeltaV/Roles/SharedRoleSystem.DeltaV.cs | 14 ----- Content.Shared/DeltaV/Roles/SynthesisRole.cs | 4 +- .../NPC/Systems/NpcFactionSystem.cs | 19 +++++- Content.Shared/Roles/SharedRoleSystem.cs | 3 +- .../Locale/en-US/deltav/job/job-names.ftl | 35 +++++++++++ .../en-US/deltav/recruiter/recruiter.ftl | 2 + .../en-US/deltav/synthesis/synthesis.ftl | 2 + .../Objects/Consumable/Food/Baked/pie.yml | 38 ------------ .../Objects/Misc/identification_cards.yml | 48 +++++++-------- .../Entities/Objects/Specific/recruiter.yml | 5 +- .../Prototypes/DeltaV/GameRules/events.yml | 17 ++---- .../DeltaV/GameRules/unknown_shuttles.yml | 14 ++--- .../Prototypes/DeltaV/Objectives/fugitive.yml | 2 +- .../DeltaV/Objectives/paradox_anomaly.yml | 2 +- .../DeltaV/Objectives/recruiter.yml | 2 +- .../Objectives/synthesis_specialist.yml | 2 +- .../DeltaV/Recipes/Cooking/meal_recipes.yml | 10 ---- .../DeltaV/Roles/MindRoles/mind_roles.yml | 55 ++++++++++++++++++ .../Food/Baked/pie.rsi/inhand-left.png | Bin 316 -> 0 bytes .../Food/Baked/pie.rsi/inhand-right.png | Bin 320 -> 0 bytes .../Consumable/Food/Baked/pie.rsi/meta.json | 25 -------- .../Food/Baked/pie.rsi/pumpkin-slice.png | Bin 588 -> 0 bytes .../Consumable/Food/Baked/pie.rsi/pumpkin.png | Bin 296 -> 0 bytes 39 files changed, 215 insertions(+), 201 deletions(-) delete mode 100644 Content.Server/Roles/FugitiveRoleComponent.cs create mode 100644 Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs delete mode 100644 Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs delete mode 100644 Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml create mode 100644 Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-right.png delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/meta.json delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png delete mode 100644 Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png diff --git a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs index ced4ec802d8..e13050add48 100644 --- a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs +++ b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs @@ -14,7 +14,6 @@ public sealed partial class GhostRoleSystem { [Dependency] private readonly IServerPreferencesManager _prefs = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerComponent component, ref TakeGhostRoleEvent args) @@ -33,7 +32,7 @@ private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerCom _transform.AttachToGridOrMap(mob); string? outfit = null; - if (_prototypeManager.TryIndex(component.OutfitPrototype, out var outfitProto)) + if (_prototype.TryIndex(component.OutfitPrototype, out var outfitProto)) outfit = outfitProto.ID; var spawnedEvent = new GhostRoleSpawnerUsedEvent(uid, mob); diff --git a/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs b/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs index 4ba15008371..e6667f3b159 100644 --- a/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs +++ b/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs @@ -1,6 +1,6 @@ using Content.Server.Objectives.Components; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; +using Content.Shared.Roles; namespace Content.Server.Objectives.Systems; @@ -9,23 +9,29 @@ namespace Content.Server.Objectives.Systems; /// public sealed class NotJobsRequirementSystem : EntitySystem { + private EntityQuery _query; + public override void Initialize() { base.Initialize(); + _query = GetEntityQuery(); + SubscribeLocalEvent(OnCheck); } - private void OnCheck(EntityUid uid, NotJobsRequirementComponent comp, ref RequirementCheckEvent args) + private void OnCheck(Entity ent, ref RequirementCheckEvent args) { if (args.Cancelled) return; - // if player has no job then don't care - if (!TryComp(args.MindId, out var job)) - return; - foreach (string forbidJob in comp.Jobs) - if (job.Prototype == forbidJob) - args.Cancelled = true; + foreach (var forbidJob in ent.Comp.Jobs) + { + foreach (var roleId in args.Mind.MindRoles) + { + if (_query.CompOrNull(roleId)?.JobPrototype == forbidJob) + args.Cancelled = true; + } + } } } diff --git a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs index 102563ddcb2..bc05225f3ea 100644 --- a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs +++ b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs @@ -59,16 +59,17 @@ private bool TrySpawnParadoxAnomaly(EntityUid spawner, [NotNullWhen(true)] out E clone = null; // Get a list of potential candidates - var candidates = new List<(EntityUid, Entity, HumanoidCharacterProfile)>(); + var candidates = new List<(EntityUid, EntityUid, ProtoId, HumanoidCharacterProfile)>(); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var mindContainer, out var humanoid)) { if (humanoid.LastProfileLoaded is {} profile && - _mind.GetMind(uid, mindContainer) is {} mindId && - TryComp(mindId, out var job) && - !_role.MindIsAntagonist(mindId)) + mindContainer.Mind is {} mindId && + !_role.MindIsAntagonist(mindId) && + _role.MindHasRole(mindId, out var role) && + role?.Comp.JobPrototype is {} job) { - candidates.Add((uid, (mindId, job), profile)); + candidates.Add((uid, mindId, job, profile)); } } @@ -82,10 +83,10 @@ private bool TrySpawnParadoxAnomaly(EntityUid spawner, [NotNullWhen(true)] out E return true; } - private EntityUid SpawnParadoxAnomaly(EntityUid spawner, List<(EntityUid, Entity, HumanoidCharacterProfile)> candidates) + private EntityUid SpawnParadoxAnomaly(EntityUid spawner, List<(EntityUid, EntityUid, ProtoId, HumanoidCharacterProfile)> candidates) { // Select a candidate. - var (uid, (mindId, job), profile) = _random.Pick(candidates); + var (uid, mindId, job, profile) = _random.Pick(candidates); // Spawn the clone. var coords = Transform(spawner).Coordinates; diff --git a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs index b775117b716..1b7f0361434 100644 --- a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs @@ -18,8 +18,6 @@ public sealed class MetapsionicPowerSystem : EntitySystem [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; - public override void Initialize() { diff --git a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs index 03ebd044a2f..698a54c0aec 100644 --- a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs +++ b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs @@ -400,7 +400,7 @@ public override void Update(float frameTime) /// has the exact /// values corresponding to tiers. /// - public class GlimmerTierChangedEvent : EntityEventArgs + public sealed class GlimmerTierChangedEvent : EntityEventArgs { /// /// What was the last glimmer tier before this event fired? diff --git a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs index 82f2fddbc59..1f7d7314d5b 100644 --- a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs +++ b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs @@ -107,7 +107,7 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU if (HasComp(args.Used)) return; - if (!TryComp(args.Used, out var meta)) + if (!TryComp(args.Used, out MetaDataComponent meta)) return; if (HasComp(args.User)) @@ -139,13 +139,13 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU return; } - EntityManager.QueueDeleteEntity(args.Used); + QueueDel(args.Used); _adminLog.Add(LogType.InteractHand, LogImpact.Medium, $"{ToPrettyString(args.User):player} sold {ToPrettyString(args.Used)} to {ToPrettyString(uid)}."); - EntityManager.SpawnEntity("ResearchDisk5000", Transform(args.User).Coordinates); + Spawn("ResearchDisk5000", Transform(args.User).Coordinates); DispenseLiquidReward(uid, component); @@ -153,7 +153,7 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU while (i != 0) { - EntityManager.SpawnEntity("MaterialBluespace1", Transform(args.User).Coordinates); + Spawn("MaterialBluespace1", Transform(args.User).Coordinates); i--; } diff --git a/Content.Server/Roles/FugitiveRoleComponent.cs b/Content.Server/Roles/FugitiveRoleComponent.cs deleted file mode 100644 index e68984ccf7a..00000000000 --- a/Content.Server/Roles/FugitiveRoleComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.Roles; - -namespace Content.Server.Roles; - -/// -/// DeltaV - fugitive antag role -/// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class FugitiveRoleComponent : AntagonistRoleComponent; diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index da7ecd9d34b..bf694d229a1 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -52,7 +52,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) // DeltaV - Custom override for override spawnpoints, only used for prisoners currently. This shouldn't run for any other jobs if (args.DesiredSpawnPointType == SpawnPointType.Job) { - if (spawnPoint.SpawnType != SpawnPointType.Job || spawnPoint.Job != args.Job?.Prototype) + if (spawnPoint.SpawnType != SpawnPointType.Job || spawnPoint.Job != args.Job) continue; possibleContainers.Add((uid, spawnPoint, container, xform)); diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs index 72ce433858b..2a29b833d88 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs @@ -36,7 +36,7 @@ private void OnPlayerSpawning(PlayerSpawningEvent args) if (args.DesiredSpawnPointType != SpawnPointType.Unset) { var isMatchingJob = spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job?.Id == args.Job.Prototype); + (args.Job == null || spawnPoint.Job?.Id == args.Job); switch (args.DesiredSpawnPointType) { diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 2ccd4c2af70..4a0225c2302 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -185,8 +185,8 @@ public EntityUid SpawnPlayerMob( if (profile != null) { - if (job != null) - SetPdaAndIdCardData(entity.Value, profile.Name, job, station); // DeltaV #1425 - Inherit job data from a VirtualJob if one exists + if (prototype != null) + SetPdaAndIdCardData(entity.Value, profile.Name, prototype, station); _humanoidSystem.LoadProfile(entity.Value, profile); _metaSystem.SetEntityName(entity.Value, profile.Name); @@ -219,11 +219,8 @@ private void DoJobSpecials(ProtoId? job, EntityUid entity) /// Character name to use for the ID. /// Job prototype to use for the PDA and ID. /// The station this player is being spawned on. - public void SetPdaAndIdCardData(EntityUid entity, string characterName, JobComponent job, EntityUid? station) // DeltaV #1425 - Use Job instead of JobId to pass VirtualJobLocalizedName/Icon + public void SetPdaAndIdCardData(EntityUid entity, string characterName, JobPrototype jobPrototype, EntityUid? station) { - if (!_prototypeManager.TryIndex(job.Prototype, out var jobPrototype)) // DeltaV #1425 - Get jobPrototype separately as a result - return; - if (!InventorySystem.TryGetSlotEntity(entity, "id", out var idUid)) return; diff --git a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs index 654e987320e..1b5fd78a6d7 100644 --- a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs +++ b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.FixedPoint; +using Content.Shared.NPC.Prototypes; using Content.Shared.Whitelist; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.DeltaV.Recruiter; @@ -45,8 +47,8 @@ public sealed partial class RecruiterPenComponent : Component public EntityWhitelist? Blacklist; /// - /// If the user's mind matches this blacklist they can't use this pen. + /// If the user is in any of these factions they can't use this pen. /// [DataField] - public EntityWhitelist? MindBlacklist; + public List> FactionBlacklist = new(); } diff --git a/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs b/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs index cdd8a1ddd4f..9ac22df2920 100644 --- a/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs +++ b/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs @@ -6,8 +6,11 @@ using Content.Shared.Interaction.Events; using Content.Shared.Mind; using Content.Shared.Mindshield.Components; +using Content.Shared.NPC.Systems; using Content.Shared.Popups; +using Content.Shared.Roles; using Content.Shared.Whitelist; +using Robust.Shared.Timing; namespace Content.Shared.DeltaV.Recruiter; @@ -17,8 +20,11 @@ namespace Content.Shared.DeltaV.Recruiter; public abstract class SharedRecruiterPenSystem : EntitySystem { [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; [Dependency] protected readonly SharedMindSystem Mind = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; private EntityQuery _shieldQuery; @@ -45,7 +51,7 @@ private void OnHandSelected(Entity ent, ref HandSelectedE if (!Mind.TryGetMind(user, out var mind, out _)) return; - if (!HasComp(mind)) + if (!_role.MindHasRole(mind)) return; Popup.PopupEntity(Loc.GetString("recruiter-pen-bound", ("pen", uid)), user, user); @@ -77,7 +83,7 @@ private void OnPrick(Entity ent, ref UseInHandEvent args) private void OnSignAttempt(Entity ent, ref SignAttemptEvent args) { var (uid, comp) = ent; - if (args.Cancelled) + if (args.Cancelled || !_timing.IsFirstTimePredicted) return; args.Cancelled = true; @@ -88,7 +94,7 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve var user = args.User; if (!comp.Bound) { - Popup.PopupEntity(Loc.GetString("recruiter-pen-locked", ("pen", uid)), user, user); + Popup.PopupClient(Loc.GetString("recruiter-pen-locked", ("pen", uid)), user, user); return; } @@ -97,7 +103,7 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve if (blood.Value.Comp.Solution.AvailableVolume > 0) { - Popup.PopupEntity(Loc.GetString("recruiter-pen-empty", ("pen", uid)), user, user); + Popup.PopupClient(Loc.GetString("recruiter-pen-empty", ("pen", uid)), user, user); return; } @@ -110,11 +116,8 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve private bool CheckBlacklist(Entity ent, EntityUid user, string action) { - if (!Mind.TryGetMind(user, out var mind, out _)) - return false; // mindless nt drone... - var (uid, comp) = ent; - if (_whitelist.IsBlacklistPass(comp.Blacklist, user) || _whitelist.IsBlacklistPass(comp.MindBlacklist, mind)) + if (_whitelist.IsBlacklistPass(comp.Blacklist, user) || _faction.IsMemberOfAny(user, ent.Comp.FactionBlacklist)) { Popup.PopupPredicted(Loc.GetString($"recruiter-pen-{action}-forbidden", ("pen", uid)), user, user); return true; diff --git a/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs b/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs new file mode 100644 index 00000000000..6e081a72b93 --- /dev/null +++ b/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Roles; + +namespace Content.Shared.DeltaV.Roles; + +[RegisterComponent] +public sealed partial class FugitiveRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs b/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs index f244e0176bb..4d94a7c1ed6 100644 --- a/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs +++ b/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ListeningPostRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class ListeningPostRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs b/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs index dfafb7341f7..9f2e4902d3c 100644 --- a/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs +++ b/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ParadoxAnomalyRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class ParadoxAnomalyRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/RecruiterRole.cs b/Content.Shared/DeltaV/Roles/RecruiterRole.cs index 62603885023..d85ff85fa12 100644 --- a/Content.Shared/DeltaV/Roles/RecruiterRole.cs +++ b/Content.Shared/DeltaV/Roles/RecruiterRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class RecruiterRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class RecruiterRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs b/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs deleted file mode 100644 index c4de921543f..00000000000 --- a/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Shared.DeltaV.Roles; - -namespace Content.Shared.Roles; - -public abstract partial class SharedRoleSystem -{ - private void InitializeDeltaV() - { - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - } -} diff --git a/Content.Shared/DeltaV/Roles/SynthesisRole.cs b/Content.Shared/DeltaV/Roles/SynthesisRole.cs index 16a680a3497..b850ac6e44c 100644 --- a/Content.Shared/DeltaV/Roles/SynthesisRole.cs +++ b/Content.Shared/DeltaV/Roles/SynthesisRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class SynthesisRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class SynthesisRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index 5e9dbbbf6d4..0d684de80b9 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -8,7 +8,6 @@ namespace Content.Shared.NPC.Systems; /// /// Outlines faction relationships with each other. -/// part of psionics rework was making this a partial class. Should've already been handled upstream, based on the linter. /// public sealed partial class NpcFactionSystem : EntitySystem { @@ -82,6 +81,24 @@ public bool IsMember(Entity ent, string faction) return ent.Comp.Factions.Contains(faction); } + /// + /// Returns whether an entity is a member of any listed faction. + /// If the list is empty this returns false. + /// + public bool IsMemberOfAny(Entity ent, IEnumerable> factions) + { + if (!Resolve(ent, ref ent.Comp, false)) + return false; + + foreach (var faction in factions) + { + if (ent.Comp.Factions.Contains(faction)) + return true; + } + + return false; + } + /// /// Adds this entity to the particular faction. /// diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 0df0abd6d77..cd3fe141b2b 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -13,7 +13,7 @@ namespace Content.Shared.Roles; -public abstract partial class SharedRoleSystem : EntitySystem // DeltaV - make it partial +public abstract class SharedRoleSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; @@ -27,7 +27,6 @@ public abstract partial class SharedRoleSystem : EntitySystem // DeltaV - make i public override void Initialize() { Subs.CVar(_cfg, CCVars.GameRoleTimerOverride, SetRequirementOverride, true); - InitializeDeltaV(); // DeltaV } private void SetRequirementOverride(string value) diff --git a/Resources/Locale/en-US/deltav/job/job-names.ftl b/Resources/Locale/en-US/deltav/job/job-names.ftl index 0c808bdc972..fd07a977912 100644 --- a/Resources/Locale/en-US/deltav/job/job-names.ftl +++ b/Resources/Locale/en-US/deltav/job/job-names.ftl @@ -12,6 +12,41 @@ job-name-senior-engineer = Senior Engineer job-name-senior-officer = Senior Officer job-name-qm = Logistics Officer +# Alternate titles +job-alt-title-tourist = Tourist +job-alt-title-off-duty-crew = Off-Duty Crew +job-alt-title-student = Student + +job-alt-title-mixologist = Mixologist + +job-alt-title-baker = Baker +job-alt-title-butcher = Butcher +job-alt-title-pizzaiolo = Pizzaiolo + +job-alt-title-practical-nurse = Practical Nurse +job-alt-title-resident = Resident + +job-alt-title-clinician = Clinician + +job-alt-title-life-support = Life Support Technician +job-alt-title-plasma-scientist = Plasma Scientist + +job-alt-title-electrician = Electrician +job-alt-title-mechanic = Mechanic + +job-alt-title-deck-worker = Deck Worker +job-alt-title-inventory-associate = Inventory Associate + +job-alt-title-prospector = Prospector +job-alt-title-excavator = Excavator + +job-alt-title-lab-technician = Lab Technician +job-alt-title-xenoarch = Xenoarchaeologist +job-alt-title-roboticist = Roboticist + +job-alt-title-jester = Jester +job-alt-title-fool = Fool + # Role timers JobMedicalBorg = Medical Cyborg JobCourier = Courier diff --git a/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl b/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl index 64e4136c1f1..6a4cb4a7090 100644 --- a/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl +++ b/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl @@ -1 +1,3 @@ recruiter-round-end-agent-name = Syndicate Recruiter + +recruiter-role-briefing = Find candidates, conduct interviews and seal the deal by having them sign with your special recruiter's pen. diff --git a/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl b/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl index 4214d8ff3fb..43e92f8343a 100644 --- a/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl +++ b/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl @@ -1 +1,3 @@ synthesis-round-end-agent-name = Synthesis Specialist + +synthesis-role-briefing = You are Interdyne's Synthesis Specialist! Prescribe deadly medications, barter your goods, and make a killing. diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml deleted file mode 100644 index ce4ed2aa7e0..00000000000 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml +++ /dev/null @@ -1,38 +0,0 @@ -- type: entity - name: pumpkin pie - parent: FoodPieBase - id: FoodPiePumpkin - description: A seasonal favorite, consisting mostly of pumpkin and a handful of spooky spices. - components: - - type: FlavorProfile - flavors: - - sweet - - pumpkin - - type: Sprite - layers: - - state: tin - - sprite: DeltaV/Objects/Consumable/Food/Baked/pie.rsi - state: pumpkin - - type: SliceableFood - slice: FoodPiePumpkinSlice - - type: Tag - tags: - - Fruit - - Pie - -- type: entity - name: slice of pumpkin pie - parent: FoodPieSliceBase - id: FoodPiePumpkinSlice - components: - - type: FlavorProfile - flavors: - - sweet - - pumpkin - - type: Sprite - sprite: DeltaV/Objects/Consumable/Food/Baked/pie.rsi - state: pumpkin-slice - - type: Tag - tags: - - Fruit -# Tastes like pie, pumpkin. diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml index c65246f3815..1893483909c 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml @@ -60,7 +60,7 @@ name: visitor ID card components: - type: IdCard - jobTitle: Visitor + jobTitle: job-title-visitor - type: entity parent: PassengerIDCard @@ -68,7 +68,7 @@ name: tourist ID card components: - type: IdCard - jobTitle: Tourist + jobTitle: job-alt-title-tourist - type: entity parent: PassengerIDCard @@ -76,7 +76,7 @@ name: off-duty crew ID card components: - type: IdCard - jobTitle: Off-Duty Crew + jobTitle: job-alt-title-off-duty-crew - type: entity parent: PassengerIDCard @@ -84,7 +84,7 @@ name: student ID card components: - type: IdCard - jobTitle: Student + jobTitle: job-alt-title-student # Bartender @@ -94,7 +94,7 @@ name: mixologist ID card components: - type: IdCard - jobTitle: Mixologist + jobTitle: job-alt-title-mixologist # Chef @@ -104,7 +104,7 @@ name: baker ID card components: - type: IdCard - jobTitle: Baker + jobTitle: job-alt-title-baker - type: entity parent: ChefIDCard @@ -112,7 +112,7 @@ name: butcher ID card components: - type: IdCard - jobTitle: Butcher + jobTitle: job-alt-title-butcher - type: entity parent: ChefIDCard @@ -120,7 +120,7 @@ name: pizzaiolo ID card components: - type: IdCard - jobTitle: Pizzaiolo + jobTitle: job-alt-title-pizzaiolo # Medical Intern @@ -130,7 +130,7 @@ name: practical nurse ID card components: - type: IdCard - jobTitle: Practical Nurse + jobTitle: job-alt-title-practical-nurse - type: entity parent: MedicalInternIDCard @@ -138,7 +138,7 @@ name: resident ID card components: - type: IdCard - jobTitle: Resident + jobTitle: job-alt-title-resident # Medical Doctor @@ -148,7 +148,7 @@ name: clinician ID card components: - type: IdCard - jobTitle: Clinician + jobTitle: job-alt-title-clinician # Atmospheric Technician @@ -158,7 +158,7 @@ name: life support technician ID card components: - type: IdCard - jobTitle: Life Support Technician + jobTitle: job-alt-title-life-support - type: entity parent: AtmosIDCard @@ -166,7 +166,7 @@ name: plasma scientist ID card components: - type: IdCard - jobTitle: Plasma Scientist + jobTitle: job-alt-title-plasma-scientist # Station Engineer @@ -176,7 +176,7 @@ name: electrician ID card components: - type: IdCard - jobTitle: Electrician + jobTitle: job-alt-title-electrician - type: entity parent: EngineeringIDCard @@ -184,7 +184,7 @@ name: mechanic ID card components: - type: IdCard - jobTitle: Mechanic + jobTitle: job-alt-title-mechanic # Cargo Technician @@ -194,7 +194,7 @@ name: deck worker ID card components: - type: IdCard - jobTitle: Deck Worker + jobTitle: job-alt-title-deck-worker - type: entity parent: CargoIDCard @@ -202,7 +202,7 @@ name: inventory associate ID card components: - type: IdCard - jobTitle: Inventory Associate + jobTitle: job-alt-title-inventory-associate # Salvage Specialist @@ -212,7 +212,7 @@ name: prospector ID card components: - type: IdCard - jobTitle: Prospector + jobTitle: job-alt-title-prospector - type: entity parent: SalvageIDCard @@ -220,7 +220,7 @@ name: excavator ID card components: - type: IdCard - jobTitle: Excavator + jobTitle: job-alt-title-excavator # Scientist @@ -230,7 +230,7 @@ name: lab technician ID card components: - type: IdCard - jobTitle: Lab Technician + jobTitle: job-alt-title-lab-technician - type: entity parent: ResearchIDCard @@ -238,7 +238,7 @@ name: xenoarchaeologist ID card components: - type: IdCard - jobTitle: Xenoarchaeologist + jobTitle: job-alt-title-xenoarch - type: entity parent: ResearchIDCard @@ -246,7 +246,7 @@ name: roboticist ID card components: - type: IdCard - jobTitle: Roboticist + jobTitle: job-alt-title-roboticist # Clown @@ -256,7 +256,7 @@ name: jester ID card components: - type: IdCard - jobTitle: Jester + jobTitle: job-alt-title-jester - type: entity parent: ClownIDCard @@ -264,4 +264,4 @@ name: fool ID card components: - type: IdCard - jobTitle: Fool + jobTitle: job-alt-title-fool diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml index eba50f59c03..d17abefed8c 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml @@ -16,9 +16,8 @@ blacklist: components: - MindShield - mindBlacklist: - components: - - RecruiterRole # no silly goose + factionBlacklist: + - Syndicate # no silly goose - type: SolutionContainerManager solutions: blood: diff --git a/Resources/Prototypes/DeltaV/GameRules/events.yml b/Resources/Prototypes/DeltaV/GameRules/events.yml index 1a434e85063..ddf95808f88 100644 --- a/Resources/Prototypes/DeltaV/GameRules/events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/events.yml @@ -116,9 +116,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: ListeningPostRole - prototype: ListeningPost + mindRoles: + - MindRoleListeningPost # Mid round antag spawns - type: entity @@ -160,11 +159,8 @@ min: 1 max: 1 pickPlayer: false - mindComponents: - - type: RoleBriefing - briefing: paradox-anomaly-role-briefing - - type: ParadoxAnomalyRole - prototype: ParadoxAnomaly + mindRoles: + - MindRoleParadoxAnomaly - type: entity parent: BaseMidRoundAntag @@ -195,6 +191,5 @@ - fake_human_last - type: EmitSoundOnSpawn # fell out of the ceiling sound: /Audio/Effects/clang.ogg - mindComponents: - - type: FugitiveRole - prototype: Fugitive + mindRoles: + - MindRoleFugitive diff --git a/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml b/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml index 3cf5087c948..2959bebcc0b 100644 --- a/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml +++ b/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml @@ -44,11 +44,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: RecruiterRole - prototype: Recruiter - - type: RoleBriefing - briefing: Find candidates, conduct interviews and seal the deal by having them sign with your special recruiter's pen. + mindRoles: + - MindRoleRecruiter - type: entity parent: BaseUnknownShuttleRule @@ -88,8 +85,5 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: SynthesisRole - prototype: SynthesisSpecialist - - type: RoleBriefing - briefing: You are Interdyne's Synthesis Specialist! Prescribe deadly medications, barter your goods, and make a killing. + mindRoles: + - MindRoleSynthesis diff --git a/Resources/Prototypes/DeltaV/Objectives/fugitive.yml b/Resources/Prototypes/DeltaV/Objectives/fugitive.yml index 7361e44f56d..d2c1ce56729 100644 --- a/Resources/Prototypes/DeltaV/Objectives/fugitive.yml +++ b/Resources/Prototypes/DeltaV/Objectives/fugitive.yml @@ -8,7 +8,7 @@ difficulty: 1 - type: RoleRequirement roles: - components: + mindRoles: - FugitiveRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml index da193ea3b58..b929d5cfda0 100644 --- a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml +++ b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml @@ -8,7 +8,7 @@ issuer: objective-issuer-self - type: RoleRequirement roles: - components: + mindRoles: - ParadoxAnomalyRole # not using base kill/keep alive objectives since these intentionally conflict with eachother diff --git a/Resources/Prototypes/DeltaV/Objectives/recruiter.yml b/Resources/Prototypes/DeltaV/Objectives/recruiter.yml index d8760388c71..4a41862356a 100644 --- a/Resources/Prototypes/DeltaV/Objectives/recruiter.yml +++ b/Resources/Prototypes/DeltaV/Objectives/recruiter.yml @@ -7,7 +7,7 @@ difficulty: 0 # difficulty is unused - type: RoleRequirement roles: - components: + mindRoles: - RecruiterRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml b/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml index 033d268680a..cd00866e343 100644 --- a/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml +++ b/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml @@ -7,7 +7,7 @@ difficulty: 0 # difficulty is unused - type: RoleRequirement roles: - components: + mindRoles: - SynthesisRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml index 01287c1016d..22d19ea2f95 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml @@ -20,16 +20,6 @@ FoodEgg: 3 FoodButter: 1 -- type: microwaveMealRecipe - id: RecipePumpkinPie - name: pumpkin pie - result: FoodPiePumpkin - time: 15 - solids: - FoodDoughPie: 1 - FoodPumpkin: 1 - FoodPlateTin: 1 - - type: microwaveMealRecipe id: RecipeBlueTomatoSoup name: blue tomato soup recipe diff --git a/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml new file mode 100644 index 00000000000..78a30855d08 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml @@ -0,0 +1,55 @@ +- type: entity + parent: BaseMindRoleAntag + id: MindRoleListeningPost + name: Listening Post Role + components: + - type: MindRole + antagPrototype: ListeningPost + exclusiveAntag: true + - type: ListeningPostRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleParadoxAnomaly + name: Paradox Anomaly Role + components: + - type: MindRole + antagPrototype: ParadoxAnomaly + exclusiveAntag: true + - type: ParadoxAnomalyRole + - type: RoleBriefing + briefing: paradox-anomaly-role-briefing + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleFugitive + name: Fugitive Role + components: + - type: MindRole + antagPrototype: Fugitive + exclusiveAntag: true + - type: FugitiveRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleRecruiter + name: Recruiter Role + components: + - type: MindRole + antagPrototype: Recruiter + exclusiveAntag: true + - type: RecruiterRole + - type: RoleBriefing + briefing: recruiter-role-briefing + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleSynthesis + name: Synthesis Specialist Role + components: + - type: MindRole + antagPrototype: SynthesisSpecialist + exclusiveAntag: true + - type: SynthesisRole + - type: RoleBriefing + briefing: synthesis-role-briefing diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png b/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png deleted file mode 100644 index fa40fb334911d4a16915c8df4a64a2f72701033c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwURxA-x=JQKK7LQG*!~0tH#fJ+%1WT*)Z|hnAjMG<k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`031o(uwURxA-x=JQKK7LQG*!~0tH#fJ+%1WT*)Z|hnAjMG<{qLXb>YJs#X8N^v zl|pUoHHSRonHX8vSOg^Q3;MWBnc5mX;4@;pgc2thv+rq2lg0U!VbfUW_TuU?XC`J&c0fJ$5s$wuAo3DFfGn>{BR zrer9V#x^&l+3X(S3CO0(^6RUWqhmeyf~FN>d$&QvmYf<*VSlg5^oIw(-S=~&Ky_Al z!aM=>$Ma0&9$|bgVtv_#{V2_rg&vQyqiI;CiJmw^Gd%8I-?9vL-WDj8Av23-e7ypN z7*`027*B39aD9;hD%zG(-Bz4UA9s ziEVDUvsN=MuNB;4RjSIZHYAgO2vDgxk5bL1zD`sPZoj*Ab= zM{>f~!t?~}%?YitG9xn=lP-d(X`)*do-Zv^`*={UqKZ{IDfb09MDTJ(s#l>9dT5g2 zI79|vFnmy+NI>k4=y*H&{tlF~LX%H#$qQ#~w%S$pTF2)m?}@+n9XJ{7=Bie5Mg=+V ztP5uscJ#P=2AqUcopFTT^Y8u*13&->0RIi(7Xe482Jm7xRsaA14rN$LW=%~1DgXcg a2mk;800000(o>TF0000k&09Zk&A8e?H5mhF_iq4ieJl4?9&$?8Ln+8DD%*EY+-fxF2X8UuuMBny)W|7Ld&W U#2|1fcru9cboFyt=akR{07xoj&;S4c From ef46cf5893c46dca917702a92739fa03a7ca6d41 Mon Sep 17 00:00:00 2001 From: scrivoy <179060466+scrivoy@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:40:41 +0200 Subject: [PATCH 033/173] Fixed capitalization in Interface description (#32739) --- .../Prototypes/Entities/Mobs/Player/admin_ghost.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index b3e8fa97c9a..c16a4c3770d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -102,7 +102,7 @@ - type: entity id: ActionAGhostShowSolar name: Solar Control Interface - description: View a solar control interface. + description: View a Solar Control Interface. components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -114,7 +114,7 @@ - type: entity id: ActionAGhostShowCommunications name: Communications Interface - description: View a communications interface. + description: View a Communications Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console } @@ -126,7 +126,7 @@ - type: entity id: ActionAGhostShowRadar name: Mass Scanner Interface - description: View a mass scanner interface. + description: View a Mass Scanner Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } @@ -138,7 +138,7 @@ - type: entity id: ActionAGhostShowCargo name: Cargo Ordering Interface - description: View a cargo ordering interface. + description: View a Cargo Ordering Interface. components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -150,7 +150,7 @@ - type: entity id: ActionAGhostShowCrewMonitoring name: Crew Monitoring Interface - description: View a crew monitoring interface. + description: View a Crew Monitoring Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } @@ -162,7 +162,7 @@ - type: entity id: ActionAGhostShowStationRecords name: Station Records Interface - description: View a station records Interface. + description: View a Station Records Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } From f2c79abb0a73625efdf2c957e0349880045861d8 Mon Sep 17 00:00:00 2001 From: Saphire Lattice Date: Fri, 11 Oct 2024 16:00:54 +0700 Subject: [PATCH 034/173] Fix Centcom cloning scanner (#32746) * Fix Centcom cloning scanner * Fix uid conflict --- Resources/Maps/DeltaV/centcomm.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Maps/DeltaV/centcomm.yml b/Resources/Maps/DeltaV/centcomm.yml index bb0b3b505f8..0ed4baac959 100644 --- a/Resources/Maps/DeltaV/centcomm.yml +++ b/Resources/Maps/DeltaV/centcomm.yml @@ -19117,6 +19117,8 @@ entities: linkedPorts: 722: - CloningPodSender: CloningPodReceiver + 723: + - MedicalScannerSender: MedicalScannerReceiver - proto: ComputerComms entities: - uid: 652 @@ -28457,6 +28459,13 @@ entities: - type: Transform pos: -17.485325,-31.461966 parent: 1668 +- proto: NetworkConfigurator + entities: + - uid: 1461 + components: + - type: Transform + pos: 13.484868,-12.584605 + parent: 1668 - proto: NitrogenCanister entities: - uid: 5413 From e11d85131caeb16a1d8a93cd26af0a4656004847 Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:17:01 +0200 Subject: [PATCH 035/173] Fix random test fail in DeleteAllThenGhost (#32753) It's simple. We kill the heisentest --- Content.Shared/Roles/SharedRoleSystem.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index cd3fe141b2b..925f61e7c75 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -478,7 +478,13 @@ public bool MindIsExclusiveAntagonist(EntityUid? mindId) var exclusiveAntag = false; foreach (var role in mind.MindRoles) { - var roleComp = Comp(role); + if (!TryComp(role, out var roleComp)) + { + //If this ever shows up outside of an integration test, then we need to look into this further. + Log.Warning($"Mind Role Entity {role} does not have MindRoleComponent!"); + continue; + } + if (roleComp.Antag || exclusiveAntag) antagonist = true; if (roleComp.ExclusiveAntag) From 2c001fb6dcc0c5a6553669149d3cee77602608d5 Mon Sep 17 00:00:00 2001 From: eoineoineoin Date: Sat, 12 Oct 2024 09:21:43 +0100 Subject: [PATCH 036/173] Make APC UI work correctly with multiple users (#32465) * Make APC UI work correctly with multiple users * Check access only on client, when constructing UI * Do TODO (Thanks, Robust 236.1) --------- Co-authored-by: Eoin Mcloughlin --- .../Power/APC/ApcBoundUserInterface.cs | 13 ++++++-- Content.Client/Power/APC/UI/ApcMenu.xaml.cs | 30 +++++++++++-------- .../Power/Components/ApcComponent.cs | 3 -- .../Power/EntitySystems/ApcSystem.cs | 6 +--- Content.Shared/APC/SharedApc.cs | 7 ++--- .../Entities/Structures/Power/apc.yml | 1 - 6 files changed, 31 insertions(+), 29 deletions(-) diff --git a/Content.Client/Power/APC/ApcBoundUserInterface.cs b/Content.Client/Power/APC/ApcBoundUserInterface.cs index a790c5d984a..5c4036a9159 100644 --- a/Content.Client/Power/APC/ApcBoundUserInterface.cs +++ b/Content.Client/Power/APC/ApcBoundUserInterface.cs @@ -1,8 +1,9 @@ -using Content.Client.Power.APC.UI; +using Content.Client.Power.APC.UI; +using Content.Shared.Access.Systems; using Content.Shared.APC; using JetBrains.Annotations; -using Robust.Client.GameObjects; using Robust.Client.UserInterface; +using Robust.Shared.Player; namespace Content.Client.Power.APC { @@ -22,6 +23,14 @@ protected override void Open() _menu = this.CreateWindow(); _menu.SetEntity(Owner); _menu.OnBreaker += BreakerPressed; + + var hasAccess = false; + if (PlayerManager.LocalEntity != null) + { + var accessReader = EntMan.System(); + hasAccess = accessReader.IsAllowed((EntityUid)PlayerManager.LocalEntity, Owner); + } + _menu?.SetAccessEnabled(hasAccess); } protected override void UpdateState(BoundUserInterfaceState state) diff --git a/Content.Client/Power/APC/UI/ApcMenu.xaml.cs b/Content.Client/Power/APC/UI/ApcMenu.xaml.cs index 2f61ea63a86..25e885b3c7a 100644 --- a/Content.Client/Power/APC/UI/ApcMenu.xaml.cs +++ b/Content.Client/Power/APC/UI/ApcMenu.xaml.cs @@ -1,4 +1,4 @@ -using Robust.Client.AutoGenerated; +using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.XAML; using Robust.Client.GameObjects; using Robust.Shared.IoC; @@ -36,19 +36,9 @@ public void UpdateState(BoundUserInterfaceState state) { var castState = (ApcBoundInterfaceState) state; - if (BreakerButton != null) + if (!BreakerButton.Disabled) { - if(castState.HasAccess == false) - { - BreakerButton.Disabled = true; - BreakerButton.ToolTip = Loc.GetString("apc-component-insufficient-access"); - } - else - { - BreakerButton.Disabled = false; - BreakerButton.ToolTip = null; - BreakerButton.Pressed = castState.MainBreaker; - } + BreakerButton.Pressed = castState.MainBreaker; } if (PowerLabel != null) @@ -86,6 +76,20 @@ public void UpdateState(BoundUserInterfaceState state) } } + public void SetAccessEnabled(bool hasAccess) + { + if(hasAccess) + { + BreakerButton.Disabled = false; + BreakerButton.ToolTip = null; + } + else + { + BreakerButton.Disabled = true; + BreakerButton.ToolTip = Loc.GetString("apc-component-insufficient-access"); + } + } + private void UpdateChargeBarColor(float charge) { if (ChargeBar == null) diff --git a/Content.Server/Power/Components/ApcComponent.cs b/Content.Server/Power/Components/ApcComponent.cs index bee8defc43e..0bf9bc18721 100644 --- a/Content.Server/Power/Components/ApcComponent.cs +++ b/Content.Server/Power/Components/ApcComponent.cs @@ -25,9 +25,6 @@ public sealed partial class ApcComponent : BaseApcNetComponent [DataField("enabled")] public bool MainBreakerEnabled = true; - // TODO: remove this since it probably breaks when 2 people use it - [DataField("hasAccess")] - public bool HasAccess = false; /// /// APC state needs to always be updated after first processing tick. diff --git a/Content.Server/Power/EntitySystems/ApcSystem.cs b/Content.Server/Power/EntitySystems/ApcSystem.cs index 52c19c302ce..14dddbb43e3 100644 --- a/Content.Server/Power/EntitySystems/ApcSystem.cs +++ b/Content.Server/Power/EntitySystems/ApcSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Power.Pow3r; -using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.APC; using Content.Shared.Emag.Components; @@ -71,11 +70,8 @@ private static void OnApcStartup(EntityUid uid, ApcComponent component, Componen component.NeedStateUpdate = true; } - //Update the HasAccess var for UI to read private void OnBoundUiOpen(EntityUid uid, ApcComponent component, BoundUIOpenedEvent args) { - // TODO: this should be per-player not stored on the apc - component.HasAccess = _accessReader.IsAllowed(args.Actor, uid); UpdateApcState(uid, component); } @@ -165,7 +161,7 @@ public void UpdateUIState(EntityUid uid, // TODO: Fix ContentHelpers or make a new one coz this is cooked. var charge = ContentHelpers.RoundToNearestLevels(battery.CurrentStorage / battery.Capacity, 1.0, 100 / ChargeAccuracy) / 100f * ChargeAccuracy; - var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, apc.HasAccess, + var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, (int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState, charge); diff --git a/Content.Shared/APC/SharedApc.cs b/Content.Shared/APC/SharedApc.cs index bf9fdc9444b..802c06a6ab6 100644 --- a/Content.Shared/APC/SharedApc.cs +++ b/Content.Shared/APC/SharedApc.cs @@ -178,15 +178,13 @@ public enum ApcChargeState : sbyte public sealed class ApcBoundInterfaceState : BoundUserInterfaceState, IEquatable { public readonly bool MainBreaker; - public readonly bool HasAccess; public readonly int Power; public readonly ApcExternalPowerState ApcExternalPower; public readonly float Charge; - public ApcBoundInterfaceState(bool mainBreaker, bool hasAccess, int power, ApcExternalPowerState apcExternalPower, float charge) + public ApcBoundInterfaceState(bool mainBreaker, int power, ApcExternalPowerState apcExternalPower, float charge) { MainBreaker = mainBreaker; - HasAccess = hasAccess; Power = power; ApcExternalPower = apcExternalPower; Charge = charge; @@ -197,7 +195,6 @@ public bool Equals(ApcBoundInterfaceState? other) if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return MainBreaker == other.MainBreaker && - HasAccess == other.HasAccess && Power == other.Power && ApcExternalPower == other.ApcExternalPower && MathHelper.CloseTo(Charge, other.Charge); @@ -210,7 +207,7 @@ public override bool Equals(object? obj) public override int GetHashCode() { - return HashCode.Combine(MainBreaker, HasAccess, Power, (int) ApcExternalPower, Charge); + return HashCode.Combine(MainBreaker, Power, (int) ApcExternalPower, Charge); } } diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 937908c8ef8..0ab427ef11a 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -91,7 +91,6 @@ type: ApcBoundUserInterface - type: ActivatableUI inHandsOnly: false - singleUser: true key: enum.ApcUiKey.Key - type: Construction graph: APC From bdf4b7cf9d1ed838be6ebcfd34ff1c816f2ccf29 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:52:05 +0200 Subject: [PATCH 037/173] Don't error on missing component in ChangeHeat (#32451) --- Content.Server/Temperature/Systems/TemperatureSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs index ccd981bbbc3..e46b18a2659 100644 --- a/Content.Server/Temperature/Systems/TemperatureSystem.cs +++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs @@ -130,7 +130,7 @@ public void ForceChangeTemperature(EntityUid uid, float temp, TemperatureCompone public void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistance = false, TemperatureComponent? temperature = null) { - if (!Resolve(uid, ref temperature)) + if (!Resolve(uid, ref temperature, false)) return; if (!ignoreHeatResistance) @@ -311,7 +311,7 @@ private void OnTemperatureChangeAttempt(EntityUid uid, TemperatureProtectionComp private void ChangeTemperatureOnCollide(Entity ent, ref ProjectileHitEvent args) { - _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature + _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature } private void OnParentChange(EntityUid uid, TemperatureComponent component, From 26b80c3e00050b7dc8ccc3654b74bc173e40cfbf Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 12 Oct 2024 20:54:48 +0200 Subject: [PATCH 038/173] Fix SpawnAndDeleteAllEntitiesInTheSameSpot heisentest (#32330) What happened was that the new tech anomaly randomly triggered a signal sink on the portable generator, which is currently broken and throws an error if the that sink is activated. The resolve needed logMissing = false because it does not expect the ActiveGeneratorRevvingComponent to exist. --- .../Power/Generator/ActiveGeneratorRevvingComponent.cs | 2 +- .../Power/Generator/ActiveGeneratorRevvingSystem.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs b/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs index 25f97dc15a0..fde0319a37d 100644 --- a/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs +++ b/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Power.Generator; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class ActiveGeneratorRevvingComponent: Component +public sealed partial class ActiveGeneratorRevvingComponent : Component { [DataField, ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] public TimeSpan CurrentTime = TimeSpan.Zero; diff --git a/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs b/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs index 9cd11ae6045..459b2fd78de 100644 --- a/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs +++ b/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs @@ -1,6 +1,6 @@ namespace Content.Shared.Power.Generator; -public sealed class ActiveGeneratorRevvingSystem: EntitySystem +public sealed class ActiveGeneratorRevvingSystem : EntitySystem { public override void Initialize() { @@ -25,7 +25,7 @@ private void OnAnchorStateChanged(EntityUid uid, ActiveGeneratorRevvingComponent /// ActiveGeneratorRevvingComponent of the generator entity. public void StartAutoRevving(EntityUid uid, ActiveGeneratorRevvingComponent? component = null) { - if (Resolve(uid, ref component)) + if (Resolve(uid, ref component, false)) { // reset the revving component.CurrentTime = TimeSpan.FromSeconds(0); From 933d7be2cce791a7b0acae6b1014852c91322955 Mon Sep 17 00:00:00 2001 From: Theodore Lukin <66275205+pheenty@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:55:12 +0700 Subject: [PATCH 039/173] Qm external access (#32631) gave qm external access --- Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 3fd9e173e50..9ce872eb069 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -30,9 +30,9 @@ - Mail # Nyanotrasen - MailCarrier, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Cargo/mail-carrier.yml - Quartermaster - Maintenance + - External - Command - Orders # DeltaV - Orders, see Resources/Prototypes/DeltaV/Access/cargo.yml - - External # DeltaV - for promoting salvage specialists - Cryogenics special: - !type:AddImplantSpecial From 7fba8a02b3c18616618fe0241f68fa2fb55337bc Mon Sep 17 00:00:00 2001 From: Golinth Date: Sat, 12 Oct 2024 23:55:51 -0500 Subject: [PATCH 040/173] Firebot Tweaks (#32629) Removed random sentience and some other minor tweaks --- .../Locale/en-US/advertisements/other/firebot.ftl | 4 ++++ .../Catalog/VendingMachines/advertisements.yml | 6 ++++++ Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml | 6 +++--- Resources/Prototypes/NPCs/firebot.yml | 12 ++++++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 Resources/Locale/en-US/advertisements/other/firebot.ftl diff --git a/Resources/Locale/en-US/advertisements/other/firebot.ftl b/Resources/Locale/en-US/advertisements/other/firebot.ftl new file mode 100644 index 00000000000..c614d5ecd0f --- /dev/null +++ b/Resources/Locale/en-US/advertisements/other/firebot.ftl @@ -0,0 +1,4 @@ +advertisement-firebot-1 = No fires detected. +advertisement-firebot-2 = Only you can prevent station fires. +advertisement-firebot-3 = Temperature nominal. +advertisement-firebot-4 = Keep it cool. \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml index 9314de97914..46edd7bafef 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml @@ -130,6 +130,12 @@ prefix: fat-extractor-fact- count: 6 +- type: localizedDataset + id: FirebotAd + values: + prefix: advertisement-firebot- + count: 4 + - type: localizedDataset id: GoodCleanFunAds values: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index e13ee1c3cbc..03a2cb8bcda 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -120,8 +120,6 @@ - type: Construction graph: FireBot node: bot - - type: SentienceTarget - flavorKind: station-event-random-sentience-flavor-mechanical - type: HTN rootTask: task: FirebotCompound @@ -148,12 +146,14 @@ vaporSpread: 90 sprayVelocity: 3.0 - type: UseDelay - delay: 4 + delay: 2 - type: InteractionPopup interactSuccessString: petting-success-firebot interactFailureString: petting-failure-firebot interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Advertise + pack: FirebotAd - type: entity parent: MobSiliconBase diff --git a/Resources/Prototypes/NPCs/firebot.yml b/Resources/Prototypes/NPCs/firebot.yml index acea6498bdb..2da9da50d25 100644 --- a/Resources/Prototypes/NPCs/firebot.yml +++ b/Resources/Prototypes/NPCs/firebot.yml @@ -29,6 +29,18 @@ pathfindKey: TargetPathfind rangeKey: InteractRange + - !type:HTNPrimitiveTask + operator: !type:SetFloatOperator + targetKey: WaitTime + amount: 1 + + - !type:HTNPrimitiveTask + operator: !type:WaitOperator + key: WaitTime + preconditions: + - !type:KeyExistsPrecondition + key: WaitTime + - !type:HTNPrimitiveTask preconditions: - !type:TargetInRangePrecondition From ca86800f2557614ab8fc5c5f40d88c1190a7f211 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 13 Oct 2024 04:57:00 +0000 Subject: [PATCH 041/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e4ce19a0c6a..81f02f2dbd1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: Moomoobeef - changes: - - message: Added the ability to wear lizard plushies on your head! - type: Add - id: 7001 - time: '2024-07-29T12:52:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30400 -- author: TurboTrackerss14 - changes: - - message: Reduced Kobold ghostrole chance to mirror Monkey - type: Tweak - id: 7002 - time: '2024-07-29T15:16:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30450 - author: Ian321 changes: - message: The Courser now comes with a defibrillator. @@ -3920,3 +3906,17 @@ id: 7500 time: '2024-10-10T14:35:36.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32700 +- author: pheenty + changes: + - message: Quartermaster now has external access + type: Add + id: 7501 + time: '2024-10-13T04:55:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32631 +- author: Golinth + changes: + - message: Firebots can no longer become sentient via the sentience event. + type: Remove + id: 7502 + time: '2024-10-13T04:55:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32629 From 110232dfa924042c6f535e7cc76c530288dbd634 Mon Sep 17 00:00:00 2001 From: John <35928781+sporkyz@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:20:03 -0400 Subject: [PATCH 042/173] Fixing Thief Beacon Role Check Logic (to use new mindrole system) (#32764) --- Content.Server/Thief/Systems/ThiefBeaconSystem.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Server/Thief/Systems/ThiefBeaconSystem.cs b/Content.Server/Thief/Systems/ThiefBeaconSystem.cs index 80471b64279..de1c3d2e6d1 100644 --- a/Content.Server/Thief/Systems/ThiefBeaconSystem.cs +++ b/Content.Server/Thief/Systems/ThiefBeaconSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Foldable; using Content.Shared.Popups; using Content.Shared.Verbs; +using Content.Shared.Roles; using Robust.Shared.Audio.Systems; namespace Content.Server.Thief.Systems; @@ -18,6 +19,7 @@ public sealed class ThiefBeaconSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; public override void Initialize() { @@ -37,7 +39,7 @@ private void OnGetInteractionVerbs(Entity beacon, ref GetV return; var mind = _mind.GetMind(args.User); - if (!HasComp(mind)) + if (mind == null || !_roles.MindHasRole(mind.Value)) return; var user = args.User; From a65d4f8a5310206a46f34941febd5991a62b2237 Mon Sep 17 00:00:00 2001 From: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com> Date: Sun, 13 Oct 2024 08:38:32 +0200 Subject: [PATCH 043/173] Increase AI Playtime Requirements (#32007) * Increase AI Playtime Requirement * Change silicon supervisor message * Slightly lower AI time requirement and change borg supervisor to be just its laws for now. * Leave the supervisor to another PR * Comply with maintainer request * Comply with another maintainer request because they forgor. --- Resources/Locale/en-US/job/job-supervisors.ftl | 2 +- Resources/Prototypes/Roles/Jobs/Science/borg.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Locale/en-US/job/job-supervisors.ftl b/Resources/Locale/en-US/job/job-supervisors.ftl index 2f7e0f06a50..47eb3152be5 100644 --- a/Resources/Locale/en-US/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/job/job-supervisors.ftl @@ -12,4 +12,4 @@ job-supervisors-medicine = Medical Doctors, Paramedics, Chemists, and the Chief job-supervisors-security = Security Officers, the Warden, and the Head of Security job-supervisors-science = Scientists and the Mystagogue job-supervisors-hire = whoever hires you -job-supervisors-everyone = absolutely everyone +job-supervisors-everyone = absolutely everyone \ No newline at end of file diff --git a/Resources/Prototypes/Roles/Jobs/Science/borg.yml b/Resources/Prototypes/Roles/Jobs/Science/borg.yml index a06731e2409..441583c0ca4 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/borg.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/borg.yml @@ -7,7 +7,7 @@ requirements: - !type:RoleTimeRequirement role: JobBorg - time: 18000 # 5 hrs + time: 54000 # 15 hrs canBeAntag: false setPreference: false # DeltaV - disable AI until its fleshed out whitelisted: true # DeltaV - ai must be whitelisted @@ -23,7 +23,7 @@ playTimeTracker: JobBorg requirements: - !type:OverallPlaytimeRequirement - time: 216000 # 60 hrs + time: 144000 # 40 hrs canBeAntag: false icon: JobIconBorg supervisors: job-supervisors-rd From 0a1e6e5e1d684d55c201567b1ed98dd87bedd775 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 13 Oct 2024 06:39:39 +0000 Subject: [PATCH 044/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 81f02f2dbd1..5e3d6e5ea6f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ian321 - changes: - - message: The Courser now comes with a defibrillator. - type: Tweak - id: 7003 - time: '2024-07-30T01:05:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30471 - author: slarticodefast changes: - message: Fixed puppy Ian not counting as a thief steal target. @@ -3920,3 +3913,12 @@ id: 7502 time: '2024-10-13T04:55:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32629 +- author: BramvanZijp + changes: + - message: The playtime requirements for station AI have been increased. + type: Tweak + - message: The playtime requirements to play borg have been slightly decreased. + type: Tweak + id: 7503 + time: '2024-10-13T06:38:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32007 From a08ba13031ed24d554e1c79bd089fbb2ea8e3c17 Mon Sep 17 00:00:00 2001 From: SkaldetSkaeg Date: Sun, 13 Oct 2024 15:22:05 +0700 Subject: [PATCH 045/173] Block emotes for sleeping (#32779) * Block emotes * typing issue * Update Content.Shared/Bed/Sleep/SleepingSystem.cs Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com> --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: MilenVolf <63782763+MilenVolf@users.noreply.github.com> --- Content.Shared/Bed/Sleep/SleepingSystem.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Content.Shared/Bed/Sleep/SleepingSystem.cs b/Content.Shared/Bed/Sleep/SleepingSystem.cs index 0e29fcd98ae..6a04bfe42df 100644 --- a/Content.Shared/Bed/Sleep/SleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SleepingSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Buckle.Components; using Content.Shared.Damage; using Content.Shared.Damage.ForceSay; +using Content.Shared.Emoting; using Content.Shared.Examine; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.IdentityManagement; @@ -61,6 +62,7 @@ public override void Initialize() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnUnbuckleAttempt); + SubscribeLocalEvent(OnEmoteAttempt); } private void OnUnbuckleAttempt(Entity ent, ref UnbuckleAttemptEvent args) @@ -310,6 +312,14 @@ public bool TryWaking(Entity ent, bool force = false, Entity Wake((ent, ent.Comp)); return true; } + + /// + /// Prevents the use of emote actions while sleeping + /// + public void OnEmoteAttempt(Entity ent, ref EmoteAttemptEvent args) + { + args.Cancel(); + } } From cc852130eddf81901f4b154148503969f11b38af Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 13 Oct 2024 08:23:11 +0000 Subject: [PATCH 046/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5e3d6e5ea6f..f69e4260412 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Fixed puppy Ian not counting as a thief steal target. - type: Fix - id: 7004 - time: '2024-07-30T01:22:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30474 - author: themias changes: - message: Added envelopes to the PTech and bureaucracy crate @@ -3922,3 +3915,10 @@ id: 7503 time: '2024-10-13T06:38:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32007 +- author: SkaldetSkaeg + changes: + - message: Sleepers can no longer use emotions + type: Fix + id: 7504 + time: '2024-10-13T08:22:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32779 From 42f03c0ec940f6620823644e66cf6374107761ba Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:25:49 +0200 Subject: [PATCH 047/173] Add poster about the SSD term (#32736) * moff * Attribution --- .../Markers/Spawners/Random/posters.yml | 6 ++++++ .../Structures/Wallmounts/Signs/posters.yml | 10 ++++++++++ .../Structures/Wallmounts/posters.rsi/meta.json | 5 ++++- .../Wallmounts/posters.rsi/poster52_legit.png | Bin 0 -> 15982 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml index f6e27c3d18b..a9852a404b5 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml @@ -154,6 +154,12 @@ - PosterLegitPeriodicTable - PosterLegitRenault - PosterLegitNTTGC + - PosterLegitSafetyMothDelam + - PosterLegitSafetyMothEpi + - PosterLegitSafetyMothPiping + - PosterLegitSafetyMothMeth + - PosterLegitSafetyMothHardhat + - PosterLegitSafetyMothSSD - PosterLegitDejaVu # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml - PosterLegitDontPanic # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml - PosterLegitBarDrinks # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index 95ee429cdce..31d5a9d6c18 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -1060,6 +1060,16 @@ - type: Sprite state: poster51_legit +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothSSD + name: "Safety Moth - Space Sleep Disorder" + description: "This informational poster uses Safety Moth™ to tell the viewer about Space Sleep Disorder (SSD), a condition where the person stops reacting to things. \"Treat SSD crew with care! They might wake up at any time!\"" + components: + - type: Sprite + state: poster52_legit + + #maps - type: entity diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json index 751413ad0c0..a33df81531d 100644 --- a/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from at commit https://github.com/tgstation/tgstation/commit/f01de25493e2bd2706ef9b0303cb0d7b5e3e471b. poster52_contraband, poster53_contraband and poster54_contraband taken from https://github.com/vgstation-coders/vgstation13/blob/435ed5f2a7926e91cc31abac3a0d47d7e9ad7ed4/icons/obj/posters.dmi. originmap, poster55_contraband, poster56_contraband, poster57_contraband and poster39_legit by discord brainfood#7460, poster63_contraband by discord foboscheshir_ poster29_legit modified by TJohnson.", + "copyright": "Taken from at commit https://github.com/tgstation/tgstation/commit/f01de25493e2bd2706ef9b0303cb0d7b5e3e471b. poster52_contraband, poster53_contraband and poster54_contraband taken from https://github.com/vgstation-coders/vgstation13/blob/435ed5f2a7926e91cc31abac3a0d47d7e9ad7ed4/icons/obj/posters.dmi. originmap, poster55_contraband, poster56_contraband, poster57_contraband and poster39_legit by discord brainfood#7460, poster63_contraband by discord foboscheshir_, poster52_legit by SlamBamActionman | poster29_legit modified by TJohnson.", "size": { "x": 32, "y": 32 @@ -381,6 +381,9 @@ { "name": "poster51_legit" }, + { + "name": "poster52_legit" + }, { "name": "random_legit" }, diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png new file mode 100644 index 0000000000000000000000000000000000000000..91954d0edc1dbe13d452fb21f4242018084dd7f0 GIT binary patch literal 15982 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 L% Date: Sun, 13 Oct 2024 11:26:56 +0000 Subject: [PATCH 048/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f69e4260412..06f37487751 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Added envelopes to the PTech and bureaucracy crate - type: Add - id: 7005 - time: '2024-07-30T01:49:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30298 - author: TheKittehJesus changes: - message: The recipe for chow mein, egg-fried rice, and both brownies now use liquid @@ -3922,3 +3915,10 @@ id: 7504 time: '2024-10-13T08:22:05.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32779 +- author: SlamBamActionman + changes: + - message: Added a new Safety MothTM poster about being SSD! + type: Add + id: 7505 + time: '2024-10-13T11:25:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32736 From a926d0810f440ce9c89fc681929789304692c617 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 13 Oct 2024 22:55:15 +0200 Subject: [PATCH 049/173] Fix some rounds failing to end due to mind roles (#32792) * Fix some rounds failing to end due to mind roles Fixes #32791 This is caused by ShowRoundEndScoreboard running into a bug trying to display antags: some player is showing up as antag with MindIsAntagonist(), but has no antag roles listed in MindGetAllRoleInfo(). This was caused by one of the roles of the player having the Antag boolean set, but having no AntagPrototype set. The responsible mind role appeared to be MindRoleSubvertedSilicon which is missing a set for the SubvertedSilicon antag prototype. I also added resilience to the round-end code to make it so that an exception showing the scoreboard (and sending the Discord message) would not cause the round end logic to completely abort from an exception. I am planning to add an integration test to cover this bug (no prototype in mind roles), but I'll leave that for not-the-immediate-hotfix. * At least one maintainer approved this tiny PR without reading it, not naming names. --- .../GameTicking/GameTicker.RoundFlow.cs | 19 +++++++++++++++++-- .../Prototypes/Roles/MindRoles/mind_roles.yml | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 683061d8edc..e544870bd27 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -341,8 +341,23 @@ public void EndRound(string text = "") RunLevel = GameRunLevel.PostRound; - ShowRoundEndScoreboard(text); - SendRoundEndDiscordMessage(); + try + { + ShowRoundEndScoreboard(text); + } + catch (Exception e) + { + Log.Error($"Error while showing round end scoreboard: {e}"); + } + + try + { + SendRoundEndDiscordMessage(); + } + catch (Exception e) + { + Log.Error($"Error while sending round end Discord message: {e}"); + } } public void ShowRoundEndScoreboard(string text = "") diff --git a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml index eb92fa51ae9..926ce512b41 100644 --- a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml +++ b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml @@ -46,6 +46,8 @@ description: components: - type: SubvertedSiliconRole + - type: MindRole + antagPrototype: SubvertedSilicon # Dragon - type: entity From 9dcd14e8d5c55aa6be7ede156047a5f5fc302e59 Mon Sep 17 00:00:00 2001 From: TeaMaki Date: Mon, 14 Oct 2024 00:36:56 +0200 Subject: [PATCH 050/173] Warden Hat Texture Change (#32253) --- .../Head/Hats/warden.rsi/equipped-HELMET.png | Bin 365 -> 600 bytes .../Clothing/Head/Hats/warden.rsi/meta.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png index 10dab5101f7adf819602037b550bd3b9f85abc31..70d2f5adc404acba6072f89f9aedb33b8b08bcdc 100644 GIT binary patch delta 587 zcmV-R0<`_@0@wtQ7=H)`00020X>r~F00JFJL_t(|UhSGONCQC-MJHHTix>$a1m!@Y z78aH^Lcq#8f>ppK1S|wg3roR52x){=f~l>9fQ_Yvg&Kq-5)cVS#M(kmM%ZvhBbjB6 z*~PhfZ~oi=|5Z0B_~%cGdjILk@o3OHkI%25oM<`J@)of2lDy6)hwz3+~>W7 z<}^VK;B?c+S%2C9A5-IG)&_98>EkSIfRCwhGHU}k-SlymHo(W!IGMEpoNoF!OB>*0 zYMjj408Tf3oTUx$F*QzRZ2+g6KF-nx_?Q|evo?U@=3hT1&77ovka9DS8j!^Qc}f6y zmYacOfB{I)uYcng!604e8P(bWdHl7tk8HbBaGS9G-jt|TGFp$(97-WAYE64FKN_958_y?h60_0D?(G zK~zYIV_+Z-2r4NG;NvqH8yg$p;WIEeg#|gF@RgKM_zZ&Lf~ZyqqVgF!XU=TE$7f&< z4ae^KQ7{Td0aq=7ppudxK0br6v9TdOJ_DnYY63E!El3G9`*R8kp$IT43Qj Date: Mon, 14 Oct 2024 10:51:46 +1200 Subject: [PATCH 051/173] rainbow lizard plushie (#32564) * rainbow weh * plushie loot table * arcade loot pool * remove from plushie crate * fuk --- .../Entities/Objects/Decoration/present.yml | 2 ++ .../Prototypes/Entities/Objects/Fun/toys.yml | 17 +++++++++++++++++ .../Structures/Machines/Computers/arcades.yml | 1 + 3 files changed, 20 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index 8dfc79c6279..d68b04e0a1e 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -64,6 +64,8 @@ orGroup: GiftPool - id: PlushieLizard #Weh! orGroup: GiftPool + - id: PlushieRainbowLizard + orGroup: GiftPool - id: PlushieNar orGroup: GiftPool - id: PlushieCarp diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 0da9aaec588..73678920339 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -344,6 +344,23 @@ - type: Speech speechVerb: Reptilian # for pais (In the secret stash) +- type: entity + parent: PlushieLizard + id: PlushieRainbowLizard #Weh but gay + description: An adorable stuffed toy that resembles a lizardperson of every color. You just might trip while staring at it... + name: rainbow lizard plushie + components: + - type: PointLight + radius: 1.5 + energy: 2 + - type: RgbLightController + layers: [ 0 ] + - type: Clothing + clothingVisuals: + head: + - state: lizard-equipped-HELMET + shader: unshaded + - type: entity parent: PlushieLizard id: PlushieLizardMirrored diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 7c22e70ef95..b412714ba02 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -97,6 +97,7 @@ - PlushieLizard - PlushieAtmosian - PlushieSpaceLizard + - PlushieRainbowLizard - PlushieNuke - PlushieCarp - PlushieMagicarp From 22ebbf7960e793af1eb3265c7c1ca3c148973a6d Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 13 Oct 2024 22:52:54 +0000 Subject: [PATCH 052/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 06f37487751..173a0ffaae1 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: TheKittehJesus - changes: - - message: The recipe for chow mein, egg-fried rice, and both brownies now use liquid - egg instead of a whole egg. - type: Tweak - - message: Cake batter now also requires 5u of milk - type: Tweak - id: 7006 - time: '2024-07-30T02:14:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30262 - author: Plykiya changes: - message: Wearing something that covers your head will prevent your hair from being @@ -3922,3 +3912,10 @@ id: 7505 time: '2024-10-13T11:25:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32736 +- author: K-Dynamic + changes: + - message: Added rainbow lizard plushies, which can be found in arcade machines. + type: Add + id: 7506 + time: '2024-10-13T22:51:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32564 From 8057cee55ab2d98600294af70b40341e2b42033d Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:05:25 +1300 Subject: [PATCH 053/173] Add role prototype validation tests (#32801) * Add role prototype validation test * Rejig GetPrototypesWithComponent * More tests n stuff --- .../Pair/TestPair.Helpers.cs | 32 ++- .../Tests/Minds/RoleTests.cs | 95 +++++++++ .../Tests/Sprite/ItemSpriteTest.cs | 2 +- Content.IntegrationTests/Tests/StorageTest.cs | 7 +- .../EffectConditions/JobCondition.cs | 12 +- .../Rules/RevolutionaryRuleSystem.cs | 4 +- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 4 +- Content.Shared/Roles/Jobs/SharedJobSystem.cs | 11 +- Content.Shared/Roles/SharedRoleSystem.cs | 193 +++++++++--------- 9 files changed, 238 insertions(+), 122 deletions(-) create mode 100644 Content.IntegrationTests/Tests/Minds/RoleTests.cs diff --git a/Content.IntegrationTests/Pair/TestPair.Helpers.cs b/Content.IntegrationTests/Pair/TestPair.Helpers.cs index 4604cd82966..1b4825cc9c7 100644 --- a/Content.IntegrationTests/Pair/TestPair.Helpers.cs +++ b/Content.IntegrationTests/Pair/TestPair.Helpers.cs @@ -107,13 +107,41 @@ public async Task WaitClientCommand(string cmd, int numTicks = 10) /// /// Retrieve all entity prototypes that have some component. /// - public List GetPrototypesWithComponent( + public List<(EntityPrototype, T)> GetPrototypesWithComponent( HashSet? ignored = null, bool ignoreAbstract = true, bool ignoreTestPrototypes = true) where T : IComponent { var id = Server.ResolveDependency().GetComponentName(typeof(T)); + var list = new List<(EntityPrototype, T)>(); + foreach (var proto in Server.ProtoMan.EnumeratePrototypes()) + { + if (ignored != null && ignored.Contains(proto.ID)) + continue; + + if (ignoreAbstract && proto.Abstract) + continue; + + if (ignoreTestPrototypes && IsTestPrototype(proto)) + continue; + + if (proto.Components.TryGetComponent(id, out var cmp)) + list.Add((proto, (T)cmp)); + } + + return list; + } + + /// + /// Retrieve all entity prototypes that have some component. + /// + public List GetPrototypesWithComponent(Type type, + HashSet? ignored = null, + bool ignoreAbstract = true, + bool ignoreTestPrototypes = true) + { + var id = Server.ResolveDependency().GetComponentName(type); var list = new List(); foreach (var proto in Server.ProtoMan.EnumeratePrototypes()) { @@ -127,7 +155,7 @@ public List GetPrototypesWithComponent( continue; if (proto.Components.ContainsKey(id)) - list.Add(proto); + list.Add((proto)); } return list; diff --git a/Content.IntegrationTests/Tests/Minds/RoleTests.cs b/Content.IntegrationTests/Tests/Minds/RoleTests.cs new file mode 100644 index 00000000000..fcfe1236cfc --- /dev/null +++ b/Content.IntegrationTests/Tests/Minds/RoleTests.cs @@ -0,0 +1,95 @@ +using System.Linq; +using Content.Server.Roles; +using Content.Shared.Roles; +using Content.Shared.Roles.Jobs; +using Robust.Shared.GameObjects; +using Robust.Shared.Reflection; + +namespace Content.IntegrationTests.Tests.Minds; + +[TestFixture] +public sealed class RoleTests +{ + /// + /// Check that any prototype with a is properly configured + /// + [Test] + public async Task ValidateRolePrototypes() + { + await using var pair = await PoolManager.GetServerClient(); + + var jobComp = pair.Server.ResolveDependency().GetComponentName(typeof(JobRoleComponent)); + + Assert.Multiple(() => + { + foreach (var (proto, comp) in pair.GetPrototypesWithComponent()) + { + Assert.That(comp.AntagPrototype == null || comp.JobPrototype == null, $"Role {proto.ID} has both a job and antag prototype."); + Assert.That(!comp.ExclusiveAntag || comp.Antag, $"Role {proto.ID} is marked as an exclusive antag, despite not being an antag."); + Assert.That(comp.Antag || comp.AntagPrototype == null, $"Role {proto.ID} has an antag prototype, despite not being an antag."); + + if (comp.JobPrototype != null) + Assert.That(proto.Components.ContainsKey(jobComp), $"Role {proto.ID} is a job, despite not having a job prototype."); + + // It is possible that this is meant to be supported? Though I would assume that it would be for + // admin / prototype uploads, and that pre-defined roles should still check this. + Assert.That(!comp.Antag || comp.AntagPrototype != null , $"Role {proto.ID} is an antag, despite not having a antag prototype."); + } + }); + + await pair.CleanReturnAsync(); + } + + /// + /// Check that any prototype with a also has a properly configured + /// + /// + [Test] + public async Task ValidateJobPrototypes() + { + await using var pair = await PoolManager.GetServerClient(); + + var mindCompId = pair.Server.ResolveDependency().GetComponentName(typeof(MindRoleComponent)); + + Assert.Multiple(() => + { + foreach (var (proto, comp) in pair.GetPrototypesWithComponent()) + { + if (proto.Components.TryGetComponent(mindCompId, out var mindComp)) + Assert.That(((MindRoleComponent)mindComp).JobPrototype, Is.Not.Null); + } + }); + + await pair.CleanReturnAsync(); + } + + /// + /// Check that any prototype with a component that inherits from also has a + /// + /// + [Test] + public async Task ValidateRolesHaveMindRoleComp() + { + await using var pair = await PoolManager.GetServerClient(); + + var refMan = pair.Server.ResolveDependency(); + var mindCompId = pair.Server.ResolveDependency().GetComponentName(typeof(MindRoleComponent)); + + var compTypes = refMan.GetAllChildren(typeof(BaseMindRoleComponent)) + .Append(typeof(RoleBriefingComponent)) + .Where(x => !x.IsAbstract); + + Assert.Multiple(() => + { + foreach (var comp in compTypes) + { + foreach (var proto in pair.GetPrototypesWithComponent(comp)) + { + Assert.That(proto.Components.ContainsKey(mindCompId), $"Role {proto.ID} does not have a {nameof(MindRoleComponent)} despite having a {comp.Name}"); + } + } + }); + + await pair.CleanReturnAsync(); + } +} diff --git a/Content.IntegrationTests/Tests/Sprite/ItemSpriteTest.cs b/Content.IntegrationTests/Tests/Sprite/ItemSpriteTest.cs index bf75188f029..da7e1e8e9b0 100644 --- a/Content.IntegrationTests/Tests/Sprite/ItemSpriteTest.cs +++ b/Content.IntegrationTests/Tests/Sprite/ItemSpriteTest.cs @@ -40,7 +40,7 @@ public async Task AllItemsHaveSpritesTest() await pair.Client.WaitPost(() => { - foreach (var proto in pair.GetPrototypesWithComponent(Ignored)) + foreach (var (proto, _) in pair.GetPrototypesWithComponent(Ignored)) { var dummy = pair.Client.EntMan.Spawn(proto.ID); pair.Client.EntMan.RunMapInit(dummy, pair.Client.MetaData(dummy)); diff --git a/Content.IntegrationTests/Tests/StorageTest.cs b/Content.IntegrationTests/Tests/StorageTest.cs index 2d28534347d..983ec709362 100644 --- a/Content.IntegrationTests/Tests/StorageTest.cs +++ b/Content.IntegrationTests/Tests/StorageTest.cs @@ -94,14 +94,13 @@ public async Task TestSufficientSpaceForFill() await Assert.MultipleAsync(async () => { - foreach (var proto in pair.GetPrototypesWithComponent()) + foreach (var (proto, fill) in pair.GetPrototypesWithComponent()) { if (proto.HasComponent(compFact)) continue; StorageComponent? storage = null; ItemComponent? item = null; - StorageFillComponent fill = default!; var size = 0; await server.WaitAssertion(() => { @@ -112,7 +111,6 @@ await server.WaitAssertion(() => } proto.TryGetComponent("Item", out item); - fill = (StorageFillComponent) proto.Components[id].Component; size = GetFillSize(fill, false, protoMan, itemSys); }); @@ -179,7 +177,7 @@ public async Task TestSufficientSpaceForEntityStorageFill() var itemSys = entMan.System(); - foreach (var proto in pair.GetPrototypesWithComponent()) + foreach (var (proto, fill) in pair.GetPrototypesWithComponent()) { if (proto.HasComponent(compFact)) continue; @@ -192,7 +190,6 @@ await server.WaitAssertion(() => if (entStorage == null) return; - var fill = (StorageFillComponent) proto.Components[id].Component; var size = GetFillSize(fill, true, protoMan, itemSys); Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity), $"{proto.ID} storage fill is too large."); diff --git a/Content.Server/EntityEffects/EffectConditions/JobCondition.cs b/Content.Server/EntityEffects/EffectConditions/JobCondition.cs index 9c7bda839e4..9621d6945f6 100644 --- a/Content.Server/EntityEffects/EffectConditions/JobCondition.cs +++ b/Content.Server/EntityEffects/EffectConditions/JobCondition.cs @@ -26,9 +26,17 @@ public override bool Condition(EntityEffectBaseArgs args) if(!args.EntityManager.HasComponent(roleId)) continue; - if(!args.EntityManager.TryGetComponent(roleId, out var mindRole) - || mindRole.JobPrototype is null) + if (!args.EntityManager.TryGetComponent(roleId, out var mindRole)) + { + Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(MindRoleComponent)}"); continue; + } + + if (mindRole.JobPrototype == null) + { + Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(JobPrototype)}"); + continue; + } if (Job.Contains(mindRole.JobPrototype.Value)) return true; diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index 939ab871153..a313b78eaf1 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -155,8 +155,8 @@ private void OnPostFlash(EntityUid uid, HeadRevolutionaryComponent comp, ref Aft if (_mind.TryGetMind(ev.User.Value, out var revMindId, out _)) { - if (_role.MindHasRole(revMindId, out _, out var role)) - role.Value.Comp.ConvertedCount++; + if (_role.MindHasRole(revMindId, out var role)) + role.Value.Comp2.ConvertedCount++; } } diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 34347dc7e04..998116994e8 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -517,8 +517,8 @@ public void GhostRoleInternalCreateMindAndTransfer(ICommonSession player, Entity _roleSystem.MindAddRole(newMind, "MindRoleGhostMarker"); - if(_roleSystem.MindHasRole(newMind, out _, out var markerRole)) - markerRole.Value.Comp.Name = role.RoleName; + if(_roleSystem.MindHasRole(newMind!, out var markerRole)) + markerRole.Value.Comp2.Name = role.RoleName; _mindSystem.SetUserId(newMind, player.UserId); _mindSystem.TransferTo(newMind, mob); diff --git a/Content.Shared/Roles/Jobs/SharedJobSystem.cs b/Content.Shared/Roles/Jobs/SharedJobSystem.cs index 94447a5af46..8a4733c8340 100644 --- a/Content.Shared/Roles/Jobs/SharedJobSystem.cs +++ b/Content.Shared/Roles/Jobs/SharedJobSystem.cs @@ -103,7 +103,6 @@ public bool TryGetPrimaryDepartment(string jobProto, [NotNullWhen(true)] out Dep public bool MindHasJobWithId(EntityUid? mindId, string prototypeId) { - MindRoleComponent? comp = null; if (mindId is null) return false; @@ -112,9 +111,7 @@ public bool MindHasJobWithId(EntityUid? mindId, string prototypeId) if (role is null) return false; - comp = role.Value.Comp; - - return (comp.JobPrototype == prototypeId); + return role.Value.Comp1.JobPrototype == prototypeId; } public bool MindTryGetJob( @@ -124,7 +121,7 @@ public bool MindTryGetJob( prototype = null; MindTryGetJobId(mindId, out var protoId); - return (_prototypes.TryIndex(protoId, out prototype) || prototype is not null); + return _prototypes.TryIndex(protoId, out prototype) || prototype is not null; } public bool MindTryGetJobId( @@ -137,9 +134,9 @@ public bool MindTryGetJobId( return false; if (_roles.MindHasRole(mindId.Value, out var role)) - job = role.Value.Comp.JobPrototype; + job = role.Value.Comp1.JobPrototype; - return (job is not null); + return job is not null; } /// diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 925f61e7c75..00271693abe 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -10,6 +10,7 @@ using Robust.Shared.Configuration; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using Robust.Shared.Utility; namespace Content.Shared.Roles; @@ -92,19 +93,18 @@ public void MindAddJobRole(EntityUid mindId, bool silent = false, string? jobPrototype = null) { + if (!Resolve(mindId, ref mind)) + return; + // Can't have someone get paid for two jobs now, can we - if (MindHasRole(mindId, out var jobRole) - && jobRole.Value.Comp.JobPrototype != jobPrototype) + if (MindHasRole((mindId, mind), out var jobRole) + && jobRole.Value.Comp1.JobPrototype != jobPrototype) { - Resolve(mindId, ref mind); - if (mind is not null) - { - _adminLogger.Add(LogType.Mind, - LogImpact.Low, - $"Job Role of {ToPrettyString(mind.OwnedEntity)} changed from '{jobRole.Value.Comp.JobPrototype}' to '{jobPrototype}'"); - } + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"Job Role of {ToPrettyString(mind.OwnedEntity)} changed from '{jobRole.Value.Comp1.JobPrototype}' to '{jobPrototype}'"); - jobRole.Value.Comp.JobPrototype = jobPrototype; + jobRole.Value.Comp1.JobPrototype = jobPrototype; } else MindAddRoleDo(mindId, "MindRoleJob", mind, silent, jobPrototype); @@ -146,11 +146,12 @@ private void MindAddRoleDo(EntityUid mindId, { mindRoleComp.JobPrototype = jobPrototype; EnsureComp(mindRoleId); + DebugTools.AssertNull(mindRoleComp.AntagPrototype); + DebugTools.Assert(!mindRoleComp.Antag); + DebugTools.Assert(!mindRoleComp.ExclusiveAntag); } - if (mindRoleComp.Antag || mindRoleComp.ExclusiveAntag) - antagonist = true; - + antagonist |= mindRoleComp.Antag; mind.MindRoles.Add(mindRoleId); var mindEv = new MindRoleAddedEvent(silent); @@ -182,51 +183,55 @@ private void MindAddRoleDo(EntityUid mindId, /// /// Removes all instances of a specific role from this mind. /// - /// The mind to remove the role from. + /// The mind to remove the role from. /// The type of the role to remove. - /// Thrown if the mind does not exist or does not have this role. - /// Returns False if there was something wrong with the mind or the removal. True if successful> - public bool MindRemoveRole(EntityUid mindId) where T : IComponent + /// Returns false if the role did not exist. True if successful> + public bool MindRemoveRole(Entity mind) where T : IComponent { - if (!TryComp(mindId, out var mind) ) - throw new ArgumentException($"{mindId} does not exist or does not have mind component"); + if (typeof(T) == typeof(MindRoleComponent)) + throw new InvalidOperationException(); + + if (!Resolve(mind.Owner, ref mind.Comp)) + return false; var found = false; var antagonist = false; var delete = new List(); - foreach (var role in mind.MindRoles) + foreach (var role in mind.Comp.MindRoles) { if (!HasComp(role)) continue; - var roleComp = Comp(role); - antagonist = roleComp.Antag; - _entityManager.DeleteEntity(role); + if (!TryComp(role, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(role)} without a {nameof(MindRoleComponent)}"); + continue; + } + antagonist |= roleComp.Antag | roleComp.ExclusiveAntag; + _entityManager.DeleteEntity(role); delete.Add(role); found = true; - } + if (!found) + return false; + foreach (var role in delete) { - mind.MindRoles.Remove(role); + mind.Comp.MindRoles.Remove(role); } - if (!found) + if (mind.Comp.OwnedEntity != null) { - throw new ArgumentException($"{mindId} does not have this role: {typeof(T)}"); + var message = new RoleRemovedEvent(mind.Owner, mind.Comp, antagonist); + RaiseLocalEvent(mind.Comp.OwnedEntity.Value, message, true); } - var message = new RoleRemovedEvent(mindId, mind, antagonist); - - if (mind.OwnedEntity != null) - { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); - } _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {typeof(T).Name}' removed from mind of {ToPrettyString(mind.OwnedEntity)}"); + $"All roles of type '{typeof(T).Name}' removed from mind of {ToPrettyString(mind.Comp.OwnedEntity)}"); + return true; } @@ -238,16 +243,14 @@ public bool MindRemoveRole(EntityUid mindId) where T : IComponent /// True if the role existed and was removed public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent { - if (!MindHasRole(mindId)) - { - Log.Warning($"Failed to remove role {typeof(T)} from {mindId} : mind does not have role "); - return false; - } - if (typeof(T) == typeof(MindRoleComponent)) return false; - return MindRemoveRole(mindId); + if (MindRemoveRole(mindId)) + return true; + + Log.Warning($"Failed to remove role {typeof(T)} from {ToPrettyString(mindId)} : mind does not have role "); + return false; } /// @@ -259,30 +262,29 @@ public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent /// The Mind Role entity component /// The Mind Role's entity component for T /// True if the role is found - public bool MindHasRole(EntityUid mindId, - [NotNullWhen(true)] out Entity? role, - [NotNullWhen(true)] out Entity? roleT) where T : IComponent + public bool MindHasRole(Entity mind, + [NotNullWhen(true)] out Entity? role) where T : IComponent { role = null; - roleT = null; - - if (!TryComp(mindId, out var mind)) + if (!Resolve(mind.Owner, ref mind.Comp)) return false; - var found = false; - - foreach (var roleEnt in mind.MindRoles) + foreach (var roleEnt in mind.Comp.MindRoles) { - if (!HasComp(roleEnt)) + if (!TryComp(roleEnt, out T? tcomp)) continue; - role = (roleEnt,Comp(roleEnt)); - roleT = (roleEnt,Comp(roleEnt)); - found = true; - break; + if (!TryComp(roleEnt, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(roleEnt)} without a {nameof(MindRoleComponent)}"); + continue; + } + + role = (roleEnt, roleComp, tcomp); + return true; } - return found; + return false; } /// @@ -317,7 +319,13 @@ public bool MindHasRole(EntityUid mindId, if (!HasComp(roleEnt, type)) continue; - role = (roleEnt,Comp(roleEnt)); + if (!TryComp(roleEnt, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(roleEnt)} without a {nameof(MindRoleComponent)}"); + continue; + } + + role = (roleEnt, roleComp); found = true; break; } @@ -325,20 +333,6 @@ public bool MindHasRole(EntityUid mindId, return found; } - /// - /// Finds the first mind role of a specific type on a mind entity. - /// Outputs an entity component for the mind role's MindRoleComponent - /// - /// The mind entity - /// The Mind Role entity component - /// The type of the role to find. - /// True if the role is found - public bool MindHasRole(EntityUid mindId, - [NotNullWhen(true)] out Entity? role) where T : IComponent - { - return MindHasRole(mindId, out role, out _); - } - /// /// Finds the first mind role of a specific type on a mind entity. /// @@ -347,7 +341,7 @@ public bool MindHasRole(EntityUid mindId, /// True if the role is found public bool MindHasRole(EntityUid mindId) where T : IComponent { - return MindHasRole(mindId, out _, out _); + return MindHasRole(mindId, out _); } //TODO: Delete this later @@ -374,28 +368,31 @@ public bool MindHasRole(EntityUid mindId) where T : IComponent /// /// Reads all Roles of a mind Entity and returns their data as RoleInfo /// - /// The mind entity + /// The mind entity /// RoleInfo list - public List MindGetAllRoleInfo(EntityUid mindId) + public List MindGetAllRoleInfo(Entity mind) { var roleInfo = new List(); - if (!TryComp(mindId, out var mind)) + if (!Resolve(mind.Owner, ref mind.Comp)) return roleInfo; - foreach (var role in mind.MindRoles) + foreach (var role in mind.Comp.MindRoles) { var valid = false; var name = "game-ticker-unknown-role"; var prototype = ""; - string? playTimeTracker = null; + string? playTimeTracker = null; - var comp = Comp(role); - if (comp.AntagPrototype is not null) + if (!TryComp(role, out MindRoleComponent? comp)) { - prototype = comp.AntagPrototype; + Log.Error($"Encountered mind role entity {ToPrettyString(role)} without a {nameof(MindRoleComponent)}"); + continue; } + if (comp.AntagPrototype is not null) + prototype = comp.AntagPrototype; + if (comp.JobPrototype is not null && comp.AntagPrototype is null) { prototype = comp.JobPrototype; @@ -429,7 +426,7 @@ public List MindGetAllRoleInfo(EntityUid mindId) } if (valid) - roleInfo.Add(new RoleInfo(name, comp.Antag || comp.ExclusiveAntag , playTimeTracker, prototype)); + roleInfo.Add(new RoleInfo(name, comp.Antag, playTimeTracker, prototype)); } return roleInfo; } @@ -442,12 +439,9 @@ public List MindGetAllRoleInfo(EntityUid mindId) public bool MindIsAntagonist(EntityUid? mindId) { if (mindId is null) - { - Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind entity not found"); return false; - } - return CheckAntagonistStatus(mindId.Value).Item1; + return CheckAntagonistStatus(mindId.Value).Antag; } /// @@ -458,37 +452,28 @@ public bool MindIsAntagonist(EntityUid? mindId) public bool MindIsExclusiveAntagonist(EntityUid? mindId) { if (mindId is null) - { - Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind entity not found"); return false; - } - return CheckAntagonistStatus(mindId.Value).Item2; + return CheckAntagonistStatus(mindId.Value).ExclusiveAntag; } - private (bool, bool) CheckAntagonistStatus(EntityUid mindId) + public (bool Antag, bool ExclusiveAntag) CheckAntagonistStatus(Entity mind) { - if (!TryComp(mindId, out var mind)) - { - Log.Warning($"Antagonist status of mind entity {mindId} could not be determined - mind component not found"); + if (!Resolve(mind.Owner, ref mind.Comp)) return (false, false); - } var antagonist = false; var exclusiveAntag = false; - foreach (var role in mind.MindRoles) + foreach (var role in mind.Comp.MindRoles) { if (!TryComp(role, out var roleComp)) { - //If this ever shows up outside of an integration test, then we need to look into this further. - Log.Warning($"Mind Role Entity {role} does not have MindRoleComponent!"); + Log.Error($"Mind Role Entity {ToPrettyString(role)} does not have a MindRoleComponent, despite being listed as a role belonging to {ToPrettyString(mind)}|"); continue; } - if (roleComp.Antag || exclusiveAntag) - antagonist = true; - if (roleComp.ExclusiveAntag) - exclusiveAntag = true; + antagonist |= roleComp.Antag; + exclusiveAntag |= roleComp.ExclusiveAntag; } return (antagonist, exclusiveAntag); @@ -504,6 +489,9 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent _audio.PlayGlobal(sound, mind.Session); } + // TODO ROLES Change to readonly. + // Passing around a reference to a prototype's hashset makes me uncomfortable because it might be accidentally + // mutated. public HashSet? GetJobRequirement(JobPrototype job) { if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job.ID, out var req)) @@ -512,6 +500,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return job.Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetJobRequirement(ProtoId job) { if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job, out var req)) @@ -520,6 +509,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return _prototypes.Index(job).Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetAntagRequirement(ProtoId antag) { if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag, out var req)) @@ -528,6 +518,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return _prototypes.Index(antag).Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetAntagRequirement(AntagPrototype antag) { if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag.ID, out var req)) From a7c6acd402ceb56fecf864aba88c15659279f907 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:05:49 +1300 Subject: [PATCH 054/173] Hide role entities in the spawn menu (#32798) --- .../Atmos/Components/AtmosFixMarkerComponent.cs | 4 +++- Content.Shared/Roles/MindRoleComponent.cs | 2 ++ Resources/Locale/en-US/entity-categories.ftl | 4 +++- Resources/Prototypes/Entities/categories.yml | 14 ++++++++++++-- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs index 5123500239e..a60d042fb57 100644 --- a/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs +++ b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs @@ -1,9 +1,11 @@ +using Robust.Shared.Prototypes; + namespace Content.Server.Atmos.Components { /// /// Used by FixGridAtmos. Entities with this may get magically auto-deleted on map initialization in future. /// - [RegisterComponent] + [RegisterComponent, EntityCategory("Mapping")] public sealed partial class AtmosFixMarkerComponent : Component { // See FixGridAtmos for more details diff --git a/Content.Shared/Roles/MindRoleComponent.cs b/Content.Shared/Roles/MindRoleComponent.cs index 38b83a8b3f8..a3dd0b3bc6d 100644 --- a/Content.Shared/Roles/MindRoleComponent.cs +++ b/Content.Shared/Roles/MindRoleComponent.cs @@ -42,6 +42,8 @@ public sealed partial class MindRoleComponent : BaseMindRoleComponent public ProtoId? JobPrototype { get; set; } } +// Why does this base component actually exist? It does make auto-categorization easy, but before that it was useless? +[EntityCategory("Roles")] public abstract partial class BaseMindRoleComponent : Component { diff --git a/Resources/Locale/en-US/entity-categories.ftl b/Resources/Locale/en-US/entity-categories.ftl index f17f65fde21..4b6cf87942f 100644 --- a/Resources/Locale/en-US/entity-categories.ftl +++ b/Resources/Locale/en-US/entity-categories.ftl @@ -1,3 +1,5 @@ entity-category-name-actions = Actions -entity-category-name-objectives = Objectives entity-category-name-game-rules = Game Rules +entity-category-name-objectives = Objectives +entity-category-name-roles = Mind Roles +entity-category-name-mapping = Mapping diff --git a/Resources/Prototypes/Entities/categories.yml b/Resources/Prototypes/Entities/categories.yml index 0815c693eb6..dffc6b6aaf9 100644 --- a/Resources/Prototypes/Entities/categories.yml +++ b/Resources/Prototypes/Entities/categories.yml @@ -3,12 +3,22 @@ name: entity-category-name-actions hideSpawnMenu: true +- type: entityCategory + id: GameRules + name: entity-category-name-game-rules + hideSpawnMenu: true + - type: entityCategory id: Objectives name: entity-category-name-objectives hideSpawnMenu: true - type: entityCategory - id: GameRules - name: entity-category-name-game-rules + id: Roles + name: entity-category-name-roles hideSpawnMenu: true + +# markers, atmos fixing, etc +- type: entityCategory + id: Mapping + name: entity-category-name-mapping From a75c5b7eaec9f5ffe73d8140fe17418ff0941ae3 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Mon, 14 Oct 2024 05:30:31 +0200 Subject: [PATCH 055/173] Fix role ban loading bugs (#32725) This code was a mess. Now it's less of a mess and user UserDbDataManager now. Fixes the following bugs: * If you connect to a server, restart your client, connect again in the same round, you role bans would not be visible in the client. * If you role ban somebody who is not connected to the server, then they connect within the round, they will only have the recently-applied ban. Likely fixes #24781, #27282 --- .../JobRequirementsManager.cs | 5 +- .../Administration/Managers/BanManager.cs | 95 ++++++++----------- .../Administration/Managers/IBanManager.cs | 6 -- .../GameTicking/GameTicker.RoundFlow.cs | 9 +- 4 files changed, 43 insertions(+), 72 deletions(-) diff --git a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs index 7056a15e0e4..faf8aa28d57 100644 --- a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs +++ b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs @@ -52,6 +52,8 @@ private void ClientOnRunLevelChanged(object? sender, RunLevelChangedEventArgs e) { // Reset on disconnect, just in case. _roles.Clear(); + _jobWhitelists.Clear(); + _roleBans.Clear(); } } @@ -59,9 +61,6 @@ private void RxRoleBans(MsgRoleBans message) { _sawmill.Debug($"Received roleban info containing {message.Bans.Count} entries."); - if (_roleBans.Equals(message.Bans)) - return; - _roleBans.Clear(); _roleBans.AddRange(message.Bans); Updated?.Invoke(); diff --git a/Content.Server/Administration/Managers/BanManager.cs b/Content.Server/Administration/Managers/BanManager.cs index 946770d6aaf..1cdfb822242 100644 --- a/Content.Server/Administration/Managers/BanManager.cs +++ b/Content.Server/Administration/Managers/BanManager.cs @@ -14,13 +14,13 @@ using Content.Shared.Roles; using Robust.Server.Player; using Robust.Shared.Asynchronous; +using Robust.Shared.Collections; using Robust.Shared.Configuration; using Robust.Shared.Enums; using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Server.Administration.Managers; @@ -45,14 +45,12 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit public const string SawmillId = "admin.bans"; public const string JobPrefix = "Job:"; - private readonly Dictionary> _cachedRoleBans = new(); + private readonly Dictionary> _cachedRoleBans = new(); // Cached ban exemption flags are used to handle private readonly Dictionary _cachedBanExemptions = new(); public void Initialize() { - _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; - _netManager.RegisterNetMessage(); _db.SubscribeToNotifications(OnDatabaseNotification); @@ -63,12 +61,23 @@ public void Initialize() private async Task CachePlayerData(ICommonSession player, CancellationToken cancel) { - // Yeah so role ban loading code isn't integrated with exempt flag loading code. - // Have you seen how garbage role ban code code is? I don't feel like refactoring it right now. - var flags = await _db.GetBanExemption(player.UserId, cancel); + + var netChannel = player.Channel; + ImmutableArray? hwId = netChannel.UserData.HWId.Length == 0 ? null : netChannel.UserData.HWId; + var roleBans = await _db.GetServerRoleBansAsync(netChannel.RemoteEndPoint.Address, player.UserId, hwId, false); + + var userRoleBans = new List(); + foreach (var ban in roleBans) + { + userRoleBans.Add(ban); + } + cancel.ThrowIfCancellationRequested(); _cachedBanExemptions[player] = flags; + _cachedRoleBans[player] = userRoleBans; + + SendRoleBans(player); } private void ClearPlayerData(ICommonSession player) @@ -76,25 +85,15 @@ private void ClearPlayerData(ICommonSession player) _cachedBanExemptions.Remove(player); } - private async void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e) - { - if (e.NewStatus != SessionStatus.Connected || _cachedRoleBans.ContainsKey(e.Session.UserId)) - return; - - var netChannel = e.Session.Channel; - ImmutableArray? hwId = netChannel.UserData.HWId.Length == 0 ? null : netChannel.UserData.HWId; - await CacheDbRoleBans(e.Session.UserId, netChannel.RemoteEndPoint.Address, hwId); - - SendRoleBans(e.Session); - } - private async Task AddRoleBan(ServerRoleBanDef banDef) { banDef = await _db.AddServerRoleBanAsync(banDef); - if (banDef.UserId != null) + if (banDef.UserId != null + && _playerManager.TryGetSessionById(banDef.UserId, out var player) + && _cachedRoleBans.TryGetValue(player, out var cachedBans)) { - _cachedRoleBans.GetOrNew(banDef.UserId.Value).Add(banDef); + cachedBans.Add(banDef); } return true; @@ -102,31 +101,21 @@ private async Task AddRoleBan(ServerRoleBanDef banDef) public HashSet? GetRoleBans(NetUserId playerUserId) { - return _cachedRoleBans.TryGetValue(playerUserId, out var roleBans) + if (!_playerManager.TryGetSessionById(playerUserId, out var session)) + return null; + + return _cachedRoleBans.TryGetValue(session, out var roleBans) ? roleBans.Select(banDef => banDef.Role).ToHashSet() : null; } - private async Task CacheDbRoleBans(NetUserId userId, IPAddress? address = null, ImmutableArray? hwId = null) - { - var roleBans = await _db.GetServerRoleBansAsync(address, userId, hwId, false); - - var userRoleBans = new HashSet(); - foreach (var ban in roleBans) - { - userRoleBans.Add(ban); - } - - _cachedRoleBans[userId] = userRoleBans; - } - public void Restart() { // Clear out players that have disconnected. - var toRemove = new List(); + var toRemove = new ValueList(); foreach (var player in _cachedRoleBans.Keys) { - if (!_playerManager.TryGetSessionById(player, out _)) + if (player.Status == SessionStatus.Disconnected) toRemove.Add(player); } @@ -138,7 +127,7 @@ public void Restart() // Check for expired bans foreach (var roleBans in _cachedRoleBans.Values) { - roleBans.RemoveWhere(ban => DateTimeOffset.Now > ban.ExpirationTime); + roleBans.RemoveAll(ban => DateTimeOffset.Now > ban.ExpirationTime); } } @@ -281,9 +270,9 @@ public async void CreateRoleBan(NetUserId? target, string? targetUsername, NetUs var length = expires == null ? Loc.GetString("cmd-roleban-inf") : Loc.GetString("cmd-roleban-until", ("expires", expires)); _chat.SendAdminAlert(Loc.GetString("cmd-roleban-success", ("target", targetUsername ?? "null"), ("role", role), ("reason", reason), ("length", length))); - if (target != null) + if (target != null && _playerManager.TryGetSessionById(target.Value, out var session)) { - SendRoleBans(target.Value); + SendRoleBans(session); } } @@ -311,10 +300,12 @@ public async Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, Da await _db.AddServerRoleUnbanAsync(new ServerRoleUnbanDef(banId, unbanningAdmin, DateTimeOffset.Now)); - if (ban.UserId is { } player && _cachedRoleBans.TryGetValue(player, out var roleBans)) + if (ban.UserId is { } player + && _playerManager.TryGetSessionById(player, out var session) + && _cachedRoleBans.TryGetValue(session, out var roleBans)) { - roleBans.RemoveWhere(roleBan => roleBan.Id == ban.Id); - SendRoleBans(player); + roleBans.RemoveAll(roleBan => roleBan.Id == ban.Id); + SendRoleBans(session); } return $"Pardoned ban with id {banId}"; @@ -322,8 +313,12 @@ public async Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, Da public HashSet>? GetJobBans(NetUserId playerUserId) { - if (!_cachedRoleBans.TryGetValue(playerUserId, out var roleBans)) + if (!_playerManager.TryGetSessionById(playerUserId, out var session)) + return null; + + if (!_cachedRoleBans.TryGetValue(session, out var roleBans)) return null; + return roleBans .Where(ban => ban.Role.StartsWith(JobPrefix, StringComparison.Ordinal)) .Select(ban => new ProtoId(ban.Role[JobPrefix.Length..])) @@ -331,19 +326,9 @@ public async Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, Da } #endregion - public void SendRoleBans(NetUserId userId) - { - if (!_playerManager.TryGetSessionById(userId, out var player)) - { - return; - } - - SendRoleBans(player); - } - public void SendRoleBans(ICommonSession pSession) { - var roleBans = _cachedRoleBans.GetValueOrDefault(pSession.UserId) ?? new HashSet(); + var roleBans = _cachedRoleBans.GetValueOrDefault(pSession) ?? new List(); var bans = new MsgRoleBans() { Bans = roleBans.Select(o => o.Role).ToList() diff --git a/Content.Server/Administration/Managers/IBanManager.cs b/Content.Server/Administration/Managers/IBanManager.cs index b60e0a25351..c11e310a825 100644 --- a/Content.Server/Administration/Managers/IBanManager.cs +++ b/Content.Server/Administration/Managers/IBanManager.cs @@ -47,12 +47,6 @@ public interface IBanManager /// The time at which this role ban was pardoned. public Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, DateTimeOffset unbanTime); - /// - /// Sends role bans to the target - /// - /// Player's user ID - public void SendRoleBans(NetUserId userId); - /// /// Sends role bans to the target /// diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index e544870bd27..a7dd5d6ab62 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -192,9 +192,6 @@ public int ReadyPlayerCount() if (!_playerManager.TryGetSessionById(userId, out _)) continue; - if (_banManager.GetRoleBans(userId) == null) - continue; - total++; } @@ -238,11 +235,7 @@ public void StartRound(bool force = false) #if DEBUG DebugTools.Assert(_userDb.IsLoadComplete(session), $"Player was readied up but didn't have user DB data loaded yet??"); #endif - if (_banManager.GetRoleBans(userId) == null) - { - Logger.ErrorS("RoleBans", $"Role bans for player {session} {userId} have not been loaded yet."); - continue; - } + readyPlayers.Add(session); HumanoidCharacterProfile profile; if (_prefsManager.TryGetCachedPreferences(userId, out var preferences)) From efcd2a09fd251afd3ccd8dd850524d4e78f56e8c Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 14 Oct 2024 03:31:38 +0000 Subject: [PATCH 056/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 173a0ffaae1..cfc05370856 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,16 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Wearing something that covers your head will prevent your hair from being - cut. - type: Add - - message: You now see a popup when your hair is being altered. - type: Add - - message: The doafter for altering other people's hair now takes seven seconds. - type: Tweak - id: 7007 - time: '2024-07-30T02:17:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30366 - author: Cojoke-dot changes: - message: Hamlet and other ghost rolls can now spin when they enter combat mode @@ -3919,3 +3907,10 @@ id: 7506 time: '2024-10-13T22:51:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32564 +- author: PJB3005 + changes: + - message: Fixes the client sometimes not being aware of active role bans. + type: Fix + id: 7507 + time: '2024-10-14T03:30:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32725 From 616bb7b634601cd58110eaecb2656a7b6bb4d66f Mon Sep 17 00:00:00 2001 From: OnyxTheBrave <131422822+OnyxTheBrave@users.noreply.github.com> Date: Sun, 13 Oct 2024 22:53:56 -0500 Subject: [PATCH 057/173] Fix Industrial Reagent Grinder sprite (#32758) Updated to reflect the RecyclerVisualLayers no longer having a forward reverse or off visual effect. --- .../Prototypes/Entities/Structures/Machines/reagent_grinder.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml index 39ab6a3276b..72d6b28efa0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml @@ -86,7 +86,7 @@ - type: GenericVisualizer visuals: enum.ConveyorVisuals.State: - enum.RecyclerVisualLayers.Main: + enum.ConveyorState.Off: Forward: { state: grinder-b1 } Reverse: { state: grinder-b1 } Off: { state: grinder-b0 } From c66df62b98529b73c553bb08493e41ecb3b3285b Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:54:31 +1100 Subject: [PATCH 058/173] Jobreq format (#32806) * Format job requirements as hours and minutes * Use TimeSpan.ToString for playtime instead of custom method * wehflicts --------- Co-authored-by: jmcb --- .../Info/PlaytimeStats/PlaytimeStatsWindow.cs | 11 +---------- .../Roles/JobRequirement/AgeRequirement.cs | 4 ++-- .../JobRequirement/DepartmentTimeRequirement.cs | 10 ++++++---- .../OverallPlaytimeRequirement.cs | 8 +++++--- .../Roles/JobRequirement/RoleTimeRequirement.cs | 10 ++++++---- Resources/Locale/en-US/info/playtime-stats.ftl | 2 +- .../Locale/en-US/job/role-requirements.ftl | 17 +++++++++-------- 7 files changed, 30 insertions(+), 32 deletions(-) diff --git a/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs b/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs index 3b54bf82daf..1a530d950f9 100644 --- a/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs +++ b/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs @@ -104,7 +104,7 @@ private void PopulatePlaytimeData() { var overallPlaytime = _jobRequirementsManager.FetchOverallPlaytime(); - var formattedPlaytime = ConvertTimeSpanToHoursMinutes(overallPlaytime); + var formattedPlaytime = overallPlaytime.ToString(Loc.GetString("ui-playtime-time-format")); OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", formattedPlaytime)); var rolePlaytimes = _jobRequirementsManager.FetchPlaytimeByRoles(); @@ -134,13 +134,4 @@ private void AddRolePlaytimeEntryToTable(string role, string playtimeString) _sawmill.Error($"The provided playtime string '{playtimeString}' is not in the correct format."); } } - - private static string ConvertTimeSpanToHoursMinutes(TimeSpan timeSpan) - { - var hours = (int) timeSpan.TotalHours; - var minutes = timeSpan.Minutes; - - var formattedTimeLoc = Loc.GetString("ui-playtime-time-format", ("hours", hours), ("minutes", minutes)); - return formattedTimeLoc; - } } diff --git a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs index 3ef36c89791..bbc377de048 100644 --- a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs @@ -31,7 +31,7 @@ public override bool Check(IEntityManager entManager, if (!Inverted) { - reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-to-young", + reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-too-young", ("age", RequiredAge))); if (profile.Age < RequiredAge) @@ -39,7 +39,7 @@ public override bool Check(IEntityManager entManager, } else { - reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-to-old", + reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-too-old", ("age", RequiredAge))); if (profile.Age > RequiredAge) diff --git a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs index 6d045d80344..34fb5259d6d 100644 --- a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs @@ -15,7 +15,7 @@ public sealed partial class DepartmentTimeRequirement : JobRequirement /// Which department needs the required amount of time. /// [DataField(required: true)] - public ProtoId Department = default!; + public ProtoId Department; /// /// How long (in seconds) this requirement is. @@ -48,7 +48,9 @@ public override bool Check(IEntityManager entManager, playtime += otherTime; } - var deptDiff = Time.TotalMinutes - playtime.TotalMinutes; + var deptDiffSpan = Time - playtime; + var deptDiff = deptDiffSpan.TotalMinutes; + var formattedDeptDiff = deptDiffSpan.ToString(Loc.GetString("role-timer-time-format")); var nameDepartment = "role-timer-department-unknown"; if (protoManager.TryIndex(Department, out var departmentIndexed)) @@ -63,7 +65,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-department-insufficient", - ("time", Math.Ceiling(deptDiff)), + ("time", formattedDeptDiff), ("department", Loc.GetString(nameDepartment)), ("departmentColor", department.Color.ToHex()))); return false; @@ -73,7 +75,7 @@ public override bool Check(IEntityManager entManager, { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-department-too-high", - ("time", -deptDiff), + ("time", formattedDeptDiff), ("department", Loc.GetString(nameDepartment)), ("departmentColor", department.Color.ToHex()))); return false; diff --git a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs index 62b3ecd1244..baeabab0f1a 100644 --- a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs @@ -26,7 +26,9 @@ public override bool Check(IEntityManager entManager, reason = new FormattedMessage(); var overallTime = playTimes.GetValueOrDefault(PlayTimeTrackingShared.TrackerOverall); - var overallDiff = Time.TotalMinutes - overallTime.TotalMinutes; + var overallDiffSpan = Time - overallTime; + var overallDiff = overallDiffSpan.TotalMinutes; + var formattedOverallDiff = overallDiffSpan.ToString(Loc.GetString("role-timer-time-format")); if (!Inverted) { @@ -35,14 +37,14 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-overall-insufficient", - ("time", Math.Ceiling(overallDiff)))); + ("time", formattedOverallDiff))); return false; } if (overallDiff <= 0 || overallTime >= Time) { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-overall-too-high", - ("time", -overallDiff))); + ("time", formattedOverallDiff))); return false; } diff --git a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs index 4529f93bee8..98c560e1383 100644 --- a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs @@ -17,7 +17,7 @@ public sealed partial class RoleTimeRequirement : JobRequirement /// What particular role they need the time requirement with. /// [DataField(required: true)] - public ProtoId Role = default!; + public ProtoId Role; /// [DataField(required: true)] @@ -35,7 +35,9 @@ public override bool Check(IEntityManager entManager, string proto = Role; playTimes.TryGetValue(proto, out var roleTime); - var roleDiff = Time.TotalMinutes - roleTime.TotalMinutes; + var roleDiffSpan = Time - roleTime; + var roleDiff = roleDiffSpan.TotalMinutes; + var formattedRoleDiff = roleDiffSpan.ToString(Loc.GetString("role-timer-time-format")); var departmentColor = Color.Yellow; if (entManager.EntitySysManager.TryGetEntitySystem(out SharedJobSystem? jobSystem)) @@ -53,7 +55,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-insufficient", - ("time", Math.Ceiling(roleDiff)), + ("time", formattedRoleDiff), ("job", Loc.GetString(proto)), ("departmentColor", departmentColor.ToHex()))); return false; @@ -63,7 +65,7 @@ public override bool Check(IEntityManager entManager, { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-too-high", - ("time", -roleDiff), + ("time", formattedRoleDiff), ("job", Loc.GetString(proto)), ("departmentColor", departmentColor.ToHex()))); return false; diff --git a/Resources/Locale/en-US/info/playtime-stats.ftl b/Resources/Locale/en-US/info/playtime-stats.ftl index 44ba39c25e9..85508c1d09c 100644 --- a/Resources/Locale/en-US/info/playtime-stats.ftl +++ b/Resources/Locale/en-US/info/playtime-stats.ftl @@ -5,6 +5,6 @@ ui-playtime-overall-base = Overall Playtime: ui-playtime-overall = Overall Playtime: {$time} ui-playtime-first-time = First Time Playing ui-playtime-roles = Playtime per Role -ui-playtime-time-format = {$hours}H {$minutes}M +ui-playtime-time-format = %h\H\ %m\M ui-playtime-header-role-type = Role ui-playtime-header-role-time = Time diff --git a/Resources/Locale/en-US/job/role-requirements.ftl b/Resources/Locale/en-US/job/role-requirements.ftl index f0fff98c09f..767aa614f9d 100644 --- a/Resources/Locale/en-US/job/role-requirements.ftl +++ b/Resources/Locale/en-US/job/role-requirements.ftl @@ -1,11 +1,12 @@ -role-timer-department-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes of [color={$departmentColor}]{$department}[/color] department playtime to play this role. -role-timer-department-too-high = You require [color=yellow]{TOSTRING($time, "0")}[/color] fewer minutes in [color={$departmentColor}]{$department}[/color] department to play this role. (Are you trying to play a trainee role?) -role-timer-overall-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes of playtime to play this role. -role-timer-overall-too-high = You require [color=yellow]{TOSTRING($time, "0")}[/color] fewer minutes of playtime to play this role. (Are you trying to play a trainee role?) -role-timer-role-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes with [color={$departmentColor}]{$job}[/color] to play this role. -role-timer-role-too-high = You require[color=yellow] {TOSTRING($time, "0")}[/color] fewer minutes with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) -role-timer-age-to-old = Your character's age must be at most [color=yellow]{$age}[/color] to play this role. -role-timer-age-to-young = Your character's age must be at least [color=yellow]{$age}[/color] to play this role. +role-timer-department-insufficient = You require [color=yellow]{$time}[/color] more playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. +role-timer-department-too-high = You require [color=yellow]{$time}[/color] less playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. (Are you trying to play a trainee role?) +role-timer-overall-insufficient = You require [color=yellow]{$time}[/color] more overall playtime to play this role. +role-timer-overall-too-high = You require [color=yellow]{$time}[/color] less overall playtime to play this role. (Are you trying to play a trainee role?) +role-timer-role-insufficient = You require [color=yellow]{$time}[/color] more playtime with [color={$departmentColor}]{$job}[/color] to play this role. +role-timer-role-too-high = You require[color=yellow] {$time}[/color] less playtime with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) +role-timer-time-format = %h\H\ %m\M +role-timer-age-too-old = Your character must be under the age of [color=yellow]{$age}[/color] to play this role. +role-timer-age-too-young = Your character must be over the age of [color=yellow]{$age}[/color] to play this role. role-timer-whitelisted-species = Your character must be one of the following species to play this role: role-timer-blacklisted-species = Your character must not be one of the following species to play this role: From 69ecc72361515bc11dcde639a13f8db6304ef418 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 14 Oct 2024 03:55:38 +0000 Subject: [PATCH 059/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index cfc05370856..9214f6e43d6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: Hamlet and other ghost rolls can now spin when they enter combat mode - type: Fix - id: 7008 - time: '2024-07-30T02:48:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30478 -- author: themias - changes: - - message: Fixed the ACC wire not appearing in vending machine wire layouts - type: Fix - id: 7009 - time: '2024-07-30T03:04:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30453 - author: Blackern5000 changes: - message: The defibrillator has been recolored slightly @@ -3914,3 +3900,17 @@ id: 7507 time: '2024-10-14T03:30:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32725 +- author: OnyxTheBrave + changes: + - message: Fixed the Industrial Reagent Grinder's visuals + type: Fix + id: 7508 + time: '2024-10-14T03:53:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32758 +- author: irismessage + changes: + - message: Made role requirements display in a more understandable format. + type: Tweak + id: 7509 + time: '2024-10-14T03:54:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32806 From 59d5a3cbffa6b3a2818d3c41ce0a7e51a034a15e Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:05:40 +1300 Subject: [PATCH 060/173] Remove inaccurate admin log when moving a held item (#32525) Remove inaccurate admin log when switching held item --- Content.Client/Hands/Systems/HandsSystem.cs | 4 ++-- .../Hands/EntitySystems/SharedHandsSystem.Drop.cs | 10 +++++++--- .../EntitySystems/SharedHandsSystem.Interactions.cs | 4 ++-- .../Hands/EntitySystems/SharedHandsSystem.Pickup.cs | 5 +++-- Content.Shared/Interaction/SharedInteractionSystem.cs | 2 -- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Content.Client/Hands/Systems/HandsSystem.cs b/Content.Client/Hands/Systems/HandsSystem.cs index ffa6dfd29d6..68800a2afe5 100644 --- a/Content.Client/Hands/Systems/HandsSystem.cs +++ b/Content.Client/Hands/Systems/HandsSystem.cs @@ -130,9 +130,9 @@ public void ReloadHandButtons() OnPlayerHandsAdded?.Invoke(hands); } - public override void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? hands = null) + public override void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? hands = null, bool log = true) { - base.DoDrop(uid, hand, doDropInteraction, hands); + base.DoDrop(uid, hand, doDropInteraction, hands, log); if (TryComp(hand.HeldEntity, out SpriteComponent? sprite)) sprite.RenderOrder = EntityManager.CurrentTick.Value; diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index 76575df2fd8..223c2d4a378 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; @@ -130,7 +131,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat TransformSystem.DropNextTo((entity, itemXform), (uid, userXform)); return true; } - + // drop the item with heavy calculations from their hands and place it at the calculated interaction range position // The DoDrop is handle if there's no drop target DoDrop(uid, hand, doDropInteraction: doDropInteraction, handsComp); @@ -138,7 +139,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat // if there's no drop location stop here if (targetDropLocation == null) return true; - + // otherwise, also move dropped item and rotate it properly according to grid/map var (itemPos, itemRot) = TransformSystem.GetWorldPositionRotation(entity); var origin = new MapCoordinates(itemPos, itemXform.MapID); @@ -197,7 +198,7 @@ private Vector2 GetFinalDropCoordinates(EntityUid user, MapCoordinates origin, M /// /// Removes the contents of a hand from its container. Assumes that the removal is allowed. In general, you should not be calling this directly. /// - public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? handsComp = null) + public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? handsComp = null, bool log = true) { if (!Resolve(uid, ref handsComp)) return; @@ -221,6 +222,9 @@ public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = tr if (doDropInteraction) _interactionSystem.DroppedInteraction(uid, entity); + if (log) + _adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(uid):user} dropped {ToPrettyString(entity):entity}"); + if (hand == handsComp.ActiveHand) RaiseLocalEvent(entity, new HandDeselectedEvent(uid)); } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs index ae22efcd6a5..fc5adfaf15a 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs @@ -178,8 +178,8 @@ public bool TryMoveHeldEntityToActiveHand(EntityUid uid, string handName, bool c if (!CanPickupToHand(uid, entity, handsComp.ActiveHand, checkActionBlocker, handsComp)) return false; - DoDrop(uid, hand, false, handsComp); - DoPickup(uid, handsComp.ActiveHand, entity, handsComp); + DoDrop(uid, hand, false, handsComp, log:false); + DoPickup(uid, handsComp.ActiveHand, entity, handsComp, log: false); return true; } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs index 6d619460f4f..7bc0a8025fe 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs @@ -220,7 +220,7 @@ public void PickupOrDrop( /// /// Puts an entity into the player's hand, assumes that the insertion is allowed. In general, you should not be calling this function directly. /// - public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsComponent? hands = null) + public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsComponent? hands = null, bool log = true) { if (!Resolve(uid, ref hands)) return; @@ -235,7 +235,8 @@ public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsCo return; } - _adminLogger.Add(LogType.Pickup, LogImpact.Low, $"{ToPrettyString(uid):user} picked up {ToPrettyString(entity):entity}"); + if (log) + _adminLogger.Add(LogType.Pickup, LogImpact.Low, $"{ToPrettyString(uid):user} picked up {ToPrettyString(entity):entity}"); Dirty(uid, hands); diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 43dd97762c5..ddbf3ee5729 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -1166,8 +1166,6 @@ public void DroppedInteraction(EntityUid user, EntityUid item) { var dropMsg = new DroppedEvent(user); RaiseLocalEvent(item, dropMsg, true); - if (dropMsg.Handled) - _adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}"); // If the dropper is rotated then use their targetrelativerotation as the drop rotation var rotation = Angle.Zero; From 64ef8dd18c05008074c76cf678e1020db4216505 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Mon, 14 Oct 2024 17:13:35 +1300 Subject: [PATCH 061/173] Add `IsQueuedForDeletion` checks to interaction system (#32526) --- .../Events/ContactInteractionEvent.cs | 2 +- .../Events/InteractionFailureEvent.cs | 2 + .../Events/InteractionSuccessEvent.cs | 2 + .../Interaction/SharedInteractionSystem.cs | 115 ++++++++++++++---- 4 files changed, 95 insertions(+), 26 deletions(-) diff --git a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs index c9d5fba2ed0..7be1c01c4ad 100644 --- a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs +++ b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs @@ -8,7 +8,7 @@ namespace Content.Shared.Interaction.Events; /// public sealed class ContactInteractionEvent : HandledEntityEventArgs { - public readonly EntityUid Other; + public EntityUid Other; public ContactInteractionEvent(EntityUid other) { diff --git a/Content.Shared/Interaction/Events/InteractionFailureEvent.cs b/Content.Shared/Interaction/Events/InteractionFailureEvent.cs index a820048104d..86701642939 100644 --- a/Content.Shared/Interaction/Events/InteractionFailureEvent.cs +++ b/Content.Shared/Interaction/Events/InteractionFailureEvent.cs @@ -3,5 +3,7 @@ namespace Content.Shared.Interaction.Events; /// /// Raised on the target when failing to pet/hug something. /// +// TODO INTERACTION +// Rename this, or move it to another namespace to make it clearer that this is specific to "petting/hugging" (InteractionPopupSystem) [ByRefEvent] public readonly record struct InteractionFailureEvent(EntityUid User); diff --git a/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs b/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs index da4f9e43d7d..9395ddc910c 100644 --- a/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs +++ b/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs @@ -3,5 +3,7 @@ namespace Content.Shared.Interaction.Events; /// /// Raised on the target when successfully petting/hugging something. /// +// TODO INTERACTION +// Rename this, or move it to another namespace to make it clearer that this is specific to "petting/hugging" (InteractionPopupSystem) [ByRefEvent] public readonly record struct InteractionSuccessEvent(EntityUid User); diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index ddbf3ee5729..6f44d3089d1 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -456,8 +456,22 @@ public void UserInteraction( inRangeUnobstructed); } + private bool IsDeleted(EntityUid uid) + { + return TerminatingOrDeleted(uid) || EntityManager.IsQueuedForDeletion(uid); + } + + private bool IsDeleted(EntityUid? uid) + { + //optional / null entities can pass this validation check. I.e., is-deleted returns false for null uids + return uid != null && IsDeleted(uid.Value); + } + public void InteractHand(EntityUid user, EntityUid target) { + if (IsDeleted(user) || IsDeleted(target)) + return; + var complexInteractions = _actionBlockerSystem.CanComplexInteract(user); if (!complexInteractions) { @@ -466,7 +480,8 @@ public void InteractHand(EntityUid user, EntityUid target) checkCanInteract: false, checkUseDelay: true, checkAccess: false, - complexInteractions: complexInteractions); + complexInteractions: complexInteractions, + checkDeletion: false); return; } @@ -479,6 +494,7 @@ public void InteractHand(EntityUid user, EntityUid target) return; } + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); // all interactions should only happen when in range / unobstructed, so no range check is needed var message = new InteractHandEvent(user, target); RaiseLocalEvent(target, message, true); @@ -487,18 +503,23 @@ public void InteractHand(EntityUid user, EntityUid target) if (message.Handled) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); // Else we run Activate. InteractionActivate(user, target, checkCanInteract: false, checkUseDelay: true, checkAccess: false, - complexInteractions: complexInteractions); + complexInteractions: complexInteractions, + checkDeletion: false); } public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool inRangeUnobstructed) { + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return; + if (target != null) { _adminLogger.Add( @@ -514,9 +535,10 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe $"{ToPrettyString(user):user} interacted with *nothing* using {ToPrettyString(used):used}"); } - if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed)) + if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false)) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); if (target != null) { var rangedMsg = new RangedInteractEvent(user, used, target.Value, clickLocation); @@ -524,12 +546,12 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe // We contact the USED entity, but not the target. DoContactInteraction(user, used, rangedMsg); - if (rangedMsg.Handled) return; } - InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed); + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); + InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false); } protected bool ValidateInteractAndFace(EntityUid user, EntityCoordinates coordinates) @@ -933,11 +955,18 @@ public bool RangedInteractDoBefore( EntityUid used, EntityUid? target, EntityCoordinates clickLocation, - bool canReach) + bool canReach, + bool checkDeletion = true) { + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return false; + var ev = new BeforeRangedInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, ev); + if (!ev.Handled) + return false; + // We contact the USED entity, but not the target. DoContactInteraction(user, used, ev); return ev.Handled; @@ -966,6 +995,9 @@ public bool InteractUsing( bool checkCanInteract = true, bool checkCanUse = true) { + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return false; + if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, target)) return false; @@ -977,9 +1009,10 @@ public bool InteractUsing( LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}"); - if (RangedInteractDoBefore(user, used, target, clickLocation, true)) + if (RangedInteractDoBefore(user, used, target, clickLocation, canReach: true, checkDeletion: false)) return true; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); // all interactions should only happen when in range / unobstructed, so no range check is needed var interactUsingEvent = new InteractUsingEvent(user, used, target, clickLocation); RaiseLocalEvent(target, interactUsingEvent, true); @@ -989,8 +1022,10 @@ public bool InteractUsing( if (interactUsingEvent.Handled) return true; - if (InteractDoAfter(user, used, target, clickLocation, canReach: true)) + if (InteractDoAfter(user, used, target, clickLocation, canReach: true, checkDeletion: false)) return true; + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); return false; } @@ -1004,11 +1039,14 @@ public bool InteractUsing( /// Whether the is in range of the . /// /// True if the interaction was handled. Otherwise, false. - public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach) + public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach, bool checkDeletion = true) { if (target is { Valid: false }) target = null; + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return false; + var afterInteractEvent = new AfterInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, afterInteractEvent); DoContactInteraction(user, used, afterInteractEvent); @@ -1024,6 +1062,7 @@ public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, E if (target == null) return false; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); var afterInteractUsingEvent = new AfterInteractUsingEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(target.Value, afterInteractUsingEvent); @@ -1034,9 +1073,7 @@ public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, E // Contact interactions are currently only used for forensics, so we don't raise used -> target } - if (afterInteractUsingEvent.Handled) - return true; - return false; + return afterInteractUsingEvent.Handled; } #region ActivateItemInWorld @@ -1068,8 +1105,13 @@ public bool InteractionActivate( bool checkCanInteract = true, bool checkUseDelay = true, bool checkAccess = true, - bool? complexInteractions = null) + bool? complexInteractions = null, + bool checkDeletion = true) { + if (checkDeletion && (IsDeleted(user) || IsDeleted(used))) + return false; + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return false; @@ -1085,21 +1127,32 @@ public bool InteractionActivate( if (checkAccess && !IsAccessible(user, used)) return false; - complexInteractions ??= SupportsComplexInteractions(user); + complexInteractions ??= _actionBlockerSystem.CanComplexInteract(user); var activateMsg = new ActivateInWorldEvent(user, used, complexInteractions.Value); RaiseLocalEvent(used, activateMsg, true); + if (activateMsg.Handled) + { + DoContactInteraction(user, used); + if (!activateMsg.WasLogged) + _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); + + if (delayComponent != null) + _useDelay.TryResetDelay(used, component: delayComponent); + return true; + } + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); var userEv = new UserActivateInWorldEvent(user, used, complexInteractions.Value); RaiseLocalEvent(user, userEv, true); - if (!activateMsg.Handled && !userEv.Handled) + if (!userEv.Handled) return false; - DoContactInteraction(user, used, activateMsg); + DoContactInteraction(user, used); // Still need to call this even without checkUseDelay in case this gets relayed from Activate. if (delayComponent != null) _useDelay.TryResetDelay(used, component: delayComponent); - if (!activateMsg.WasLogged) - _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); + _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); return true; } #endregion @@ -1118,6 +1171,9 @@ public bool UseInHandInteraction( bool checkCanInteract = true, bool checkUseDelay = true) { + if (IsDeleted(user) || IsDeleted(used)) + return false; + _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return true; // if the item is on cooldown, we consider this handled. @@ -1138,8 +1194,9 @@ public bool UseInHandInteraction( return true; } + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); // else, default to activating the item - return InteractionActivate(user, used, false, false, false); + return InteractionActivate(user, used, false, false, false, checkDeletion: false); } /// @@ -1164,6 +1221,9 @@ public bool AltInteract(EntityUid user, EntityUid target) public void DroppedInteraction(EntityUid user, EntityUid item) { + if (IsDeleted(user) || IsDeleted(item)) + return; + var dropMsg = new DroppedEvent(user); RaiseLocalEvent(item, dropMsg, true); @@ -1312,15 +1372,20 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE if (uidB == null || args?.Handled == false) return; - // Entities may no longer exist (banana was eaten, or human was exploded)? - if (!Exists(uidA) || !Exists(uidB)) - return; + DebugTools.AssertNotEqual(uidA, uidB.Value); - if (Paused(uidA) || Paused(uidB.Value)) + if (!TryComp(uidA, out MetaDataComponent? metaA) || metaA.EntityPaused) return; - RaiseLocalEvent(uidA, new ContactInteractionEvent(uidB.Value)); - RaiseLocalEvent(uidB.Value, new ContactInteractionEvent(uidA)); + if (!TryComp(uidB, out MetaDataComponent? metaB) || metaB.EntityPaused) + return ; + + // TODO Struct event + var ev = new ContactInteractionEvent(uidB.Value); + RaiseLocalEvent(uidA, ev); + + ev.Other = uidA; + RaiseLocalEvent(uidB.Value, ev); } From 53e4abf42882e7c637d039abd25c8b42c4c2271e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B6=D0=B5=D0=BA=D1=81=D0=BE=D0=BD=20=D0=9C=D0=B8?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D1=81=D1=81=D0=B8=D0=BF=D0=BF=D0=B8?= Date: Mon, 14 Oct 2024 00:40:59 -0500 Subject: [PATCH 062/173] cleanup melee (#32486) * it removes warns ig * Quick fix --------- Co-authored-by: metalgearsloth --- .../Weapons/Melee/MeleeWeaponSystem.cs | 5 +- .../Weapons/Melee/MeleeWeaponSystem.cs | 10 +++- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 57 +++++++++++++------ 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 7604d5f8808..26ec75f9957 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -28,6 +28,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem [Dependency] private readonly AnimationPlayerSystem _animation = default!; [Dependency] private readonly InputSystem _inputSystem = default!; [Dependency] private readonly SharedColorFlashEffectSystem _color = default!; + [Dependency] private readonly MapSystem _map = default!; private EntityQuery _xformQuery; @@ -109,11 +110,11 @@ public override void Update(float frameTime) if (MapManager.TryFindGridAt(mousePos, out var gridUid, out _)) { - coordinates = EntityCoordinates.FromMap(gridUid, mousePos, TransformSystem, EntityManager); + coordinates = TransformSystem.ToCoordinates(gridUid, mousePos); } else { - coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, TransformSystem, EntityManager); + coordinates = TransformSystem.ToCoordinates(_map.GetMap(mousePos.MapId), mousePos); } // Heavy attack. diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index 190a2d0263e..ec462ae23e8 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -56,8 +56,14 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); } - protected override bool ArcRaySuccessful(EntityUid targetUid, Vector2 position, Angle angle, Angle arcWidth, float range, MapId mapId, - EntityUid ignore, ICommonSession? session) + protected override bool ArcRaySuccessful(EntityUid targetUid, + Vector2 position, + Angle angle, + Angle arcWidth, + float range, + MapId mapId, + EntityUid ignore, + ICommonSession? session) { // Originally the client didn't predict damage effects so you'd intuit some level of how far // in the future you'd need to predict, but then there was a lot of complaining like "why would you add artifical delay" as if ping is a choice. diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index bc19235cd39..9b15e5f8a08 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -435,7 +435,7 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo throw new NotImplementedException(); } - DoLungeAnimation(user, weaponUid, weapon.Angle, GetCoordinates(attack.Coordinates).ToMap(EntityManager, TransformSystem), weapon.Range, animation); + DoLungeAnimation(user, weaponUid, weapon.Angle, TransformSystem.ToMapCoordinates(GetCoordinates(attack.Coordinates)), weapon.Range, animation); } var attackEv = new MeleeAttackEvent(weaponUid); @@ -467,12 +467,14 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity // TODO: This needs fixing if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (light) using their hands and missed"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (light) using {ToPrettyString(meleeUid):tool} and missed"); } var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, null); @@ -521,12 +523,14 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (light) {ToPrettyString(target.Value):subject} using their hands and dealt {damageResult.GetTotal():damage} damage"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (light) {ToPrettyString(target.Value):subject} using {ToPrettyString(meleeUid):tool} and dealt {damageResult.GetTotal():damage} damage"); } @@ -548,7 +552,7 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (!TryComp(user, out TransformComponent? userXform)) return false; - var targetMap = GetCoordinates(ev.Coordinates).ToMap(EntityManager, TransformSystem); + var targetMap = TransformSystem.ToMapCoordinates(GetCoordinates(ev.Coordinates)); if (targetMap.MapId != userXform.MapID) return false; @@ -564,12 +568,14 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU { if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (heavy) using their hands and missed"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (heavy) using {ToPrettyString(meleeUid):tool} and missed"); } var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, direction); @@ -590,8 +596,14 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU // Validate client for (var i = entities.Count - 1; i >= 0; i--) { - if (ArcRaySuccessful(entities[i], userPos, direction.ToWorldAngle(), component.Angle, distance, - userXform.MapID, user, session)) + if (ArcRaySuccessful(entities[i], + userPos, + direction.ToWorldAngle(), + component.Angle, + distance, + userXform.MapID, + user, + session)) { continue; } @@ -662,12 +674,14 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (heavy) {ToPrettyString(entity):subject} using their hands and dealt {damageResult.GetTotal():damage} damage"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (heavy) {ToPrettyString(entity):subject} using {ToPrettyString(meleeUid):tool} and dealt {damageResult.GetTotal():damage} damage"); } } @@ -701,8 +715,13 @@ protected HashSet ArcRayCast(Vector2 position, Angle angle, Angle arc { var castAngle = new Angle(baseAngle + increment * i); var res = _physics.IntersectRay(mapId, - new CollisionRay(position, castAngle.ToWorldVec(), - AttackMask), range, ignore, false).ToList(); + new CollisionRay(position, + castAngle.ToWorldVec(), + AttackMask), + range, + ignore, + false) + .ToList(); if (res.Count != 0) { @@ -713,8 +732,14 @@ protected HashSet ArcRayCast(Vector2 position, Angle angle, Angle arc return resSet; } - protected virtual bool ArcRaySuccessful(EntityUid targetUid, Vector2 position, Angle angle, Angle arcWidth, float range, - MapId mapId, EntityUid ignore, ICommonSession? session) + protected virtual bool ArcRaySuccessful(EntityUid targetUid, + Vector2 position, + Angle angle, + Angle arcWidth, + float range, + MapId mapId, + EntityUid ignore, + ICommonSession? session) { // Only matters for server. return true; From 5af96d54299e471ee37ad77cb12cf15d0706e9f2 Mon Sep 17 00:00:00 2001 From: Kevin Matuschzik <92296572+Gamer3107@users.noreply.github.com> Date: Mon, 14 Oct 2024 07:55:46 +0200 Subject: [PATCH 063/173] Fixed portal artifacts targeting the Ai (#32677) * Added checks to not target AIs and people in containers * made the change to use IsEntityInContainer. Much Better! * returned old Mindquerry and removed wrong use of admin logger * guard statment * removed unnecessery refs and fixed position swap * Minor change --------- Co-authored-by: metalgearsloth --- .../Effects/Systems/PortalArtifactSystem.cs | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs index e44ee6baa12..b1a08fb5056 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs @@ -2,6 +2,8 @@ using Content.Server.Xenoarchaeology.XenoArtifacts.Events; using Content.Shared.Mind.Components; using Content.Shared.Teleportation.Systems; +using Robust.Shared.Collections; +using Robust.Shared.Containers; using Robust.Shared.Random; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; @@ -11,6 +13,7 @@ public sealed class PortalArtifactSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly LinkedEntitySystem _link = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() { @@ -21,21 +24,28 @@ public override void Initialize() private void OnActivate(Entity artifact, ref ArtifactActivatedEvent args) { var map = Transform(artifact).MapID; - var firstPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(artifact)); - - var minds = new List(); - var mindQuery = EntityQueryEnumerator(); - while (mindQuery.MoveNext(out var uid, out var mc, out var xform)) + var validMinds = new ValueList(); + var mindQuery = EntityQueryEnumerator(); + while (mindQuery.MoveNext(out var uid, out var mc, out var xform, out var meta)) { - if (mc.HasMind && xform.MapID == map) - minds.Add(uid); + // check if the MindContainer has a Mind and if the entity is not in a container (this also auto excludes AI) and if they are on the same map + if (mc.HasMind && !_container.IsEntityOrParentInContainer(uid, meta: meta, xform: xform) && xform.MapID == map) + { + validMinds.Add(uid); + } } + //this would only be 0 if there were a station full of AIs and no one else, in that case just stop this function + if (validMinds.Count == 0) + return; + + var firstPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(artifact)); + + var target = _random.Pick(validMinds); - var target = _random.Pick(minds); var secondPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(target)); //Manual position swapping, because the portal that opens doesn't trigger a collision, and doesn't teleport targets the first time. - _transform.SwapPositions(target, secondPortal); + _transform.SwapPositions(target, artifact.Owner); _link.TryLink(firstPortal, secondPortal, true); } From 932438b1b3250bd3bcf8f589f5c16d1b847f89dc Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 14 Oct 2024 05:56:54 +0000 Subject: [PATCH 064/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9214f6e43d6..66dc9a07d61 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: The defibrillator has been recolored slightly - type: Tweak - id: 7010 - time: '2024-07-30T04:41:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29964 - author: themias changes: - message: Fixed victim's fingerprints transferring onto an attacker's weapon @@ -3914,3 +3907,10 @@ id: 7509 time: '2024-10-14T03:54:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32806 +- author: Gamer3107 + changes: + - message: Portal artifacts no longer target the AI or people within containers + type: Fix + id: 7510 + time: '2024-10-14T05:55:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32677 From 21c600d4caf6edd77724a16ebbdee4e270b8960c Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:05:40 +0200 Subject: [PATCH 065/173] Cyborg module action icons (#32505) * Init * added jani and medical * + sci and service modules * + syndi modules * fixing up * geiger counter stuff --- .../Silicons/Borgs/BorgSystem.Modules.cs | 4 + .../Components/BorgModuleIconComponent.cs | 20 ++++ .../Specific/Robotics/borg_modules.yml | 64 +++++++++++- .../actions_borg.rsi/adv-cleaning-module.png | Bin 0 -> 745 bytes .../actions_borg.rsi/adv-diagnosis-module.png | Bin 0 -> 620 bytes .../actions_borg.rsi/adv-tools-module.png | Bin 0 -> 1022 bytes .../actions_borg.rsi/anomaly-module.png | Bin 0 -> 794 bytes .../actions_borg.rsi/appraisal-module.png | Bin 0 -> 811 bytes .../actions_borg.rsi/cleaning-module.png | Bin 0 -> 567 bytes .../actions_borg.rsi/clowning-module.png | Bin 0 -> 990 bytes .../actions_borg.rsi/construction-module.png | Bin 0 -> 538 bytes .../Actions/actions_borg.rsi/defib-module.png | Bin 0 -> 862 bytes .../actions_borg.rsi/diagnosis-module.png | Bin 0 -> 736 bytes .../actions_borg.rsi/extinguisher-module.png | Bin 0 -> 625 bytes .../actions_borg.rsi/gardening-module.png | Bin 0 -> 840 bytes .../actions_borg.rsi/geiger-module.png | Bin 0 -> 760 bytes .../Actions/actions_borg.rsi/gps-module.png | Bin 0 -> 713 bytes .../actions_borg.rsi/grappling-module.png | Bin 0 -> 736 bytes .../actions_borg.rsi/harvesting-module.png | Bin 0 -> 849 bytes .../light-replacer-module.png | Bin 0 -> 632 bytes .../Actions/actions_borg.rsi/meta.json | 93 ++++++++++++++++++ .../actions_borg.rsi/mining-module.png | Bin 0 -> 648 bytes .../actions_borg.rsi/musical-module.png | Bin 0 -> 493 bytes .../Actions/actions_borg.rsi/no-action.png | Bin 0 -> 196 bytes .../actions_borg.rsi/node-scanner-module.png | Bin 0 -> 813 bytes .../Actions/actions_borg.rsi/rcd-module.png | Bin 0 -> 781 bytes .../actions_borg.rsi/service-module.png | Bin 0 -> 796 bytes .../syndicate-esword-module.png | Bin 0 -> 782 bytes .../actions_borg.rsi/syndicate-l6c-module.png | Bin 0 -> 638 bytes .../syndicate-martyr-module.png | Bin 0 -> 743 bytes .../syndicate-operative-module.png | Bin 0 -> 624 bytes .../syndicate-weapon-module.png | Bin 0 -> 593 bytes .../Actions/actions_borg.rsi/tool-module.png | Bin 0 -> 886 bytes .../actions_borg.rsi/treatment-module.png | Bin 0 -> 721 bytes .../Actions/actions_borg.rsi/wire-module.png | Bin 0 -> 830 bytes 35 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/adv-tools-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/anomaly-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/cleaning-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/clowning-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/extinguisher-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/geiger-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/gps-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/harvesting-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/mining-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/musical-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-esword-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-martyr-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-operative-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/treatment-module.png create mode 100644 Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs index f289752b7cf..d5a429db030 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs @@ -60,6 +60,10 @@ private void OnSelectableInstalled(EntityUid uid, SelectableBorgModuleComponent if (_actions.AddAction(chassis, ref component.ModuleSwapActionEntity, out var action, component.ModuleSwapActionId, uid)) { + if(TryComp(uid, out var moduleIconComp)) + { + action.Icon = moduleIconComp.Icon; + }; action.EntityIcon = uid; Dirty(component.ModuleSwapActionEntity.Value, action); } diff --git a/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs b/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs new file mode 100644 index 00000000000..ff38a40f487 --- /dev/null +++ b/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs @@ -0,0 +1,20 @@ +//using Robust.Shared.GameObjects; +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.Silicons.Borgs.Components; + +/// +/// This is used to override the action icon for cyborg actions. +/// Without this component the no-action state will be used. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class BorgModuleIconComponent : Component +{ + /// + /// The action icon for this module + /// + [DataField] + public SpriteSpecifier.Rsi Icon = default!; + +} \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 9eb75d04f96..722e9d0a1ee 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -10,6 +10,8 @@ - type: Sprite sprite: Objects/Specific/Robotics/borgmodule.rsi - type: BorgModule + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: no-action } - type: StaticPrice price: 100 - type: Tag @@ -35,7 +37,7 @@ description: Select this module, enabling you to use the tools it provides. components: - type: InstantAction - itemIconStyle: BigItem + itemIconStyle: BigAction useDelay: 0.5 event: !type:BorgModuleActionSelectedEvent @@ -119,6 +121,8 @@ - CableHVStackLingering10 - Wirecutter - trayScanner + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: wire-module } - type: entity id: BorgModuleFireExtinguisher @@ -132,6 +136,8 @@ - type: ItemBorgModule items: - FireExtinguisher + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: extinguisher-module } - type: entity id: BorgModuleGPS @@ -147,6 +153,8 @@ - HandheldGPSBasic - HandHeldMassScannerBorg - HandheldStationMapUnpowered + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: gps-module } - type: entity id: BorgModuleRadiationDetection @@ -160,6 +168,8 @@ - type: ItemBorgModule items: - GeigerCounter + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: geiger-module } - type: entity id: BorgModuleTool @@ -178,6 +188,8 @@ - Wirecutter - Multitool - WelderIndustrial + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: tool-module } # cargo modules - type: entity @@ -192,6 +204,8 @@ - type: ItemBorgModule items: - AppraisalTool + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: appraisal-module } - type: entity id: BorgModuleMining @@ -210,6 +224,8 @@ - OreBag - Crowbar - RadioHandheld + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: mining-module } - type: entity id: BorgModuleGrapplingGun @@ -224,6 +240,8 @@ items: - WeaponGrapplingGun - HandheldGPSBasic + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: grappling-module } # engineering modules - type: entity @@ -244,6 +262,8 @@ - RemoteSignaller - GasAnalyzer - GeigerCounter + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-tools-module } - type: entity id: BorgModuleConstruction @@ -260,6 +280,8 @@ - SheetGlassLingering0 - PartRodMetalLingering0 - FloorTileItemSteelLingering0 + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: construction-module } - type: entity id: BorgModuleRCD @@ -273,6 +295,8 @@ - type: ItemBorgModule items: - RCDRecharging + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: rcd-module } # janitorial modules (this gets its own unique things because janis are epic) - type: entity @@ -289,6 +313,8 @@ - LightReplacer - Crowbar - Screwdriver + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: light-replacer-module } - type: entity id: BorgModuleCleaning @@ -304,6 +330,8 @@ - MopItem - Bucket - TrashBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: cleaning-module } - type: entity id: BorgModuleAdvancedCleaning @@ -321,6 +349,8 @@ - SprayBottleSpaceCleaner - Dropper - TrashBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-cleaning-module } # medical modules - type: entity @@ -336,6 +366,8 @@ items: - HandheldHealthAnalyzerUnpowered - ClothingNeckStethoscope + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: diagnosis-module } - type: entity id: BorgModuleTreatment @@ -354,6 +386,8 @@ - Gauze10Lingering - Bloodpack10Lingering - Syringe + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: treatment-module } - type: entity id: BorgModuleDefibrillator @@ -367,6 +401,8 @@ - type: ItemBorgModule items: - DefibrillatorOneHandedUnpowered + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: defib-module } - type: entity id: BorgModuleAdvancedTreatment @@ -384,6 +420,8 @@ - Beaker - BorgDropper - BorgHypo + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-diagnosis-module } # science modules # todo: if science ever gets their own custom robot, add more "sci" modules. @@ -399,6 +437,8 @@ - type: ItemBorgModule items: - NodeScanner + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: node-scanner-module } - type: entity id: BorgModuleAnomaly @@ -416,6 +456,8 @@ - AnomalyLocatorWideUnpowered - RemoteSignaller - Multitool + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: anomaly-module } # service modules - type: entity @@ -435,6 +477,8 @@ - Lighter - DrinkShaker - BorgDropper + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: service-module } - type: entity id: BorgModuleMusique @@ -450,6 +494,8 @@ - SynthesizerInstrument - ElectricGuitarInstrument - SaxophoneInstrument + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: musical-module } - type: entity id: BorgModuleGardening @@ -466,6 +512,8 @@ - HydroponicsToolSpade - HydroponicsToolClippers - Bucket + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: gardening-module } - type: entity id: BorgModuleHarvesting @@ -481,6 +529,8 @@ - HydroponicsToolScythe - HydroponicsToolHatchet - PlantBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: harvesting-module } - type: entity id: BorgModuleClowning @@ -496,6 +546,8 @@ - BikeHorn - ClownRecorder - BikeHornInstrument + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: clowning-module } #syndicate modules - type: entity @@ -511,6 +563,8 @@ items: - WeaponPistolEchis - EnergyDaggerLoud + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-weapon-module } - type: entity id: BorgModuleOperative @@ -528,6 +582,8 @@ - Emag - Doorjack #Delta-V add doorjack, emag no longer opens doors. - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-operative-module } - type: entity id: BorgModuleEsword @@ -543,6 +599,8 @@ items: - CyborgEnergySwordDouble - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-esword-module } - type: entity id: BorgModuleL6C @@ -558,6 +616,8 @@ items: - WeaponLightMachineGunL6C - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-l6c-module } - type: entity id: BorgModuleMartyr @@ -572,3 +632,5 @@ - type: ItemBorgModule items: - SelfDestructSeq + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-martyr-module } diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png new file mode 100644 index 0000000000000000000000000000000000000000..f608aaa0bc8bd9f3ddd415366478e9c9f0e4be91 GIT binary patch literal 745 zcmVqPD)tZU#rd-n-1gwfBPr^*A36zXA%M`LdOwZb8rFd)7wbHW&4(%9kRDGL<_k>}pR(L!B zwT3~>|C>O&oYcUy@(RYCDz06a#MHASw^wRLeIZ-_Os)_h5e3R-q!Na{y@%JP!s|hI z2#_d?q1M94^orvzyiY^eKI*4bFqCEQ3GIjOKGW#7I-Pv(0slKVN z*FDgl1V}`|t7>AL^La#09bxUyFWw_C781rQo%WyPlmLnLlFkD&(0KGHyRj1yl&cli z-*Gkar0TN}zo_{nl z&OCoBj1!UU!goGb_Oz5DK%zSEmA0{MSpKRbbYQnIPBtPy_-*%}v>5_RSsloBURQRV zjglrnb#SH>!r|eAc(?QsDSuuVw~o0?fRsWGsobaLJo&M1k|yAqx)GrN>;3vLY3Z+j bn*G-=FvnUW-)(Z200000NkvXXu0mjfLf>6t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png new file mode 100644 index 0000000000000000000000000000000000000000..df4d53633be116e1182c27ad2f283f3e15757942 GIT binary patch literal 620 zcmV-y0+aoTP)0n{^4@Z+_~3t&X04(8G!#T zPI?gt1j;|*G!~1AenmrY&Td-jocWOj;ZQ^d(B-i-0Q4aQp$dT1(PL=<@OUq~R0r^! zu{HpO3=tR@UV*#I&F}GOhCul#X&D(q1US1(Tt^y^y8>_zsb)izOc8kJX}y1Z4MxZO z&>i$ZHrlJ2%kRsOO03roLYkal;B$c5uy0(pfiiATGBW7|wV~#7fFvOxWQZgW?@Y_ za4($^2xxSeJ^_rJbwH8NQ705Jo6;Lh`Mh-hAQGYZEuVuDUmzM%?d>EgXLJbEtO3v< zfLRkhmLE(XV3C*d>59#0l=4F`Ik%*liIxV~!1H?lCAtJs*IU397Ax7X8aR)K4Lg@A z^$<2k0CjhWhM<{-xgps9*myYw81}g$iIhF_O;!0000AN^Q+zQMYwnw{zyq%+5GF zdr_)~`dIe-XU^sS{_o5={~6$4M~u8;Hkl?&6eMC-FhfIy za=^9jO{z(%N+yF&-u_YDcO|F~k%Wo>McvKwin{SqGiu)yN%iVn3-;$SyY#3@(bv$( zq19f5kZ>uV|L%ylZRb%dO@(%zFT*g~PaPXBL)oEINYvdTj!$ zR)DT4MWUD4w4`e;VyuTlf$)BDU$rMT=&?El7TmGO$c%w&#*efeaabVF?zeJMyPk|V zcsvK*4Wc-u59yKI!@Dir9klNs&GXT!32iZg*Y+X#|~Dn>hpa@h`Odded2 z93yXkvWCZS3e-Liy?-lxlYHbD;9&hsPPTDnd!&(T5(v6(atDqyoYY$cJIFrQid;mb z=RhcQT1Ay2k5mg$E3gtYHxy<>-v7ega0DVyK%Nb0Zm76it?uM~r9r?JhCm1fXtWeG z8`4ZT@Q7{Ccuz-I(pm_qz{>~A~%Y(y}MnxGt0YL#8?YRSF zU+*&EaR-Nt6c#nLDT)(xaLlqHiOY-t&5qQTm(ddt6mYpo7R=AVd@slE`=8`U{y}UV z@#Xe0+asKUF5&c}eW)##W&7gP9@`cpQ-JPw!*z@FcxZ}6NR!OEc(xQqVRWKTrhv~c zmCxRKSFZp?V81hXee9jc-v~Za>V!MAbD9|BXU>X+bIQ+`u310!=Eh=bHZVRtmHsP} zM^w9jszO0e!r^X`n$y|y35WVNU$Tvr1!a2NYGJYu2FadlIteQUMRa<0K{#=ot@)tM z1go&r+ehvEyJ9D|r`+|C5QyR=6cy=mu=?pkgK&TMV|aK}>XTRK=ie2YC5>utN&@u0 szLpP@)GEKbm*^F@q4JJ#B z8c#boFCO&n*`4%gJb3e>7h|$S6Xl}O#c0$;l3|QHsFC?6a|{?+hTtgBI{RLQ0NoH- ziYD%xG_Q}o@B96JA6{Qu;D48{wBz&nRvQsC6bcpN7EcPn<%^mIm*bQr!Bk`hv~_5j z0EtmZLX`j&$7`AZzAcn>)d{2%+9pt;h7h=P;5aT!1(Z&s35*{egV*X=cV0~ikje)g zd&}o-6aoK^UVKe1U|Wj|?M4oMp2y_pcdBvg5;$Yque!9;ZBzaBF&rWoAYYW%RoSFKFU;H5{B<17k zivXU@2aEkmmF2)roe_f@FFb)~&3{Sc{4)zf_SKx)H6p6BY<8*`ioV zM&XeLu!U!pRa}S02S;%6@y)7Z)?5RkD8ghkfz`7xGAx?eW?XrG?T><=KX{IMRd-b_ zcY$PSg(!*0NjYRiAd}0$Wpl#)eE_`KQZ;a5Wf|d?H`J3AbHBZ-)+C^B(u2`6l)&`d zYYcY|!XU5a&Nc_e&hA2NE`pg?t?=$k!QSPhw#j=b+L~ffe9^t7)QGn(0*s9>5+E(9 zCNJh8tO^L+j^WTz3%dIj5DaqY%g$2UN}i*wAPUIq^3+4TbrGlt_sN=q z6K$8r5>MR($_B_)-1>C4=HR7z6i?JoprHF7w0%R`d?)<32>g0XY8t=vn}F!Af0}LT YCoN|{eh~i2b^rhX07*qoM6N<$f`4#rzW@LL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png new file mode 100644 index 0000000000000000000000000000000000000000..9f327af06300d39d15166f021ac40aefc3827507 GIT binary patch literal 811 zcmV+`1JwM9P)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1%s34rOa9Yy6fUL%zPw@BR3O9f{nuY0 zhm~Pv97H&L>N8-3L1JuW7A%yIRUl1HUxbCB?%5C5cv6q7_5_^E(v%=l~@bfD@sVF4!070Ol*0FUgjF zb{U)qk+UM)0YK_MFc-jaSAy1m23`p;dsCe$oDIf6c5}1_oWHWd2t_XlW0eQmfn46; z%>@h$f8lWt2FPq6U}yacSI^1DjHVZdJh{2Rum3S5F8}{$SeY#aRg5G*;R)ObY`Fkg z9=`*CuEduMKp=e4Z%lb4-{X}hCIn!hY#mldQ%xSb1JL4;>VT9GAO!X`*)TZO9ihlQ zI70vwf65ACcr|lzurjPIQpYOC`tK{lZzgUyKX}$#2!q%V0F`30(yCy#n1&Nv`qhnn z3`@2gVu(4)NhAhqy0OetBpby2h-56e8 z-36BhiOC2ugXw>NSyA{PwVB4=VD%t22wdMkgMstcADp>>32O)d@z3A?7{31a&2aDR zRt9bbTQCOkLHNo0zhL?s5+5WFQaio30?r0uS+jVC??3;-%_TVmK;Y|x!(dto>N{*9 z08#^zhlK!$4G#f!X41<6P#OUF4mtioJ^}&c5MW|Pga}9;mIh#Izy17!2mverZwUPS z^qArCsf8FyLhTg6a$MX(U>e2;0S6-mI2#1G*jezV0lXn_;M@bOu7&|?Q(lIn1k@nR z{fJcsFBaSp%%D5?vbx^9qOci;;F pXj6$a14#tPeF6{|@UGb?003&_rRwONCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1_?xUg4vY# z9Jd3Ie3AB9157)q*)iOEexKpN=f_~aDxV^ly>Z(nh!`&k>4w-40Qp#wR~*dVd2=6_ zhK0cGPxry>pZ|X`{Qm!kqOt>P2!MR9z$c61V;BI5!T1RF9pY^yCIl>%%^4oNd;sE%6Ya}ZRR^+hO-a#Wl)I-QA8wUnFPHN zdO#Z0x22^~2HT|%m1RK|2ogbJFG6|{^i7IJVjt`|(88=)Yu+B-fz<5|D zc9z;mFZc!9z@hIbJT@+gBf0Ln@4P{p7k>faRqE3@xa~$NTNo}}2`BN3Z39kOoM*MU|_pjMq4E1^E5t3h%K=myDMpc*)7727f3S1k$37>bA#?44iNoXI$-2?r0a=xQsq}p6A7mMws zsPS$?yWIe**NP$I5cFJy@~%d@4v2@ zAHnZ1K(KqmQEaJSj^?Th*xp>b#x!NgRn+8%K>@<->@)xyULPswEY^ zeej0oT;L~-B_H1PBjpiv>mEW~7> zwrCwPb26#yDe~a9`EFbW4xiW+&3Wg+k<_cwKp6vn{lnz1f13TrFKgnssI2pHi~s-t M07*qoM6N<$g6Rp^l>h($ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png new file mode 100644 index 0000000000000000000000000000000000000000..c77c02f207d2b293bc92c97583078df2af8df16d GIT binary patch literal 538 zcmV+#0_FXQP)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1cHw-h+Ndm>5 zgF^)dj@&_&2hrpL3>LOiJ??oc+5RsP7r79->M@P(BBx3vPB8AGfCNMDI cU9(XD0J<;`8#7Psz5oCK07*qoM6N<$f{4k=o&W#< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png new file mode 100644 index 0000000000000000000000000000000000000000..4d22bb55d7919e27ca7e9211fe1327ccb93d1310 GIT binary patch literal 862 zcmV-k1EKthP)HxdntRs^J2TBwrNCy5b|6qvEzdz*WiwlmX* zsVwv?I`^D;-0%C{Gt(L1Uk{Ty@p`?Uuh(LA2RWXi5Zt2zxqgVoV*8rNE93oFD7lF0+ z*)6^KQ=nBvvKwY}pTGMK6?H%N|1JmQr;OaWBs*zhu8q}vz41uJQfV{DW;7pL^ zEk|3#z6<@m7#Vq(s&}44munw7oE}o^0jx)I(#T1GyPuwVi}=fHsP+xRY_YO^-R}Ju z8or0N?p~Ht8ndrc=b832p{`11G-wDSg%IHDPTf-qY8o`w6Bd$hh`ia;!?u)EZRILV z)@C?Ji^$8ftUt797!oi^70fMjAHB=m^IphwuMT?N4x3ZtlFbX#QYdxpdo^EMPeJA8{FPUXX<*7cAf6TzN{&9dR%Eqmp&eZYJ0V4qU5eR<{!s$GPP<&F*ph1bK&yma(ICk8} z#*_YW!-@3;=)4bb3Zc+*G&cAUj=ab^hORphVeV^c4&p;JR)heZHzKuj^;jK_#s)+e z7E!jd7ShUh)(3?P&>^69u0?_7ikuM72uh>2t~%>FF@G)r2JeJw=e#e3K++#oLuV3m;e9( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png new file mode 100644 index 0000000000000000000000000000000000000000..80686c3ce4d90b3c8dd32fcb4eb6ff6cd2977d3d GIT binary patch literal 736 zcmV<60w4W}P)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1-cV$D#KbuaEAm4a zTq70{Wfl{L2q*+d#IduM!PzUSE5P*bEkz8TaceNuqXCLT0OZrfX;E0^{`~qz&^(IM z0L-V@;v1_REz$r!pArfMf@uI0zsPZn4daY&Y;tG-ZwP==^uEcLAneu-VCqhxdMMxw z0g$hc%zwh5W8%W#l&c43;|mFVp}@k%MS2MQ{{D^O|KA@Bf(8#5o*fhgvq56`;&b~V zX#NL+-7Dh2G>8up#|3ca0#JUA?VH4~vt=0rn~(`O6c!id5zHl^kN^QtXq-K;0O5NW zK+6Rvl@YeOKvc#ZOuv4z6R*YCfV6G}n0|V>1H}QLx&Uis1O{k6eEs1pgP4#7gN#7~ z!;?ExFqFf}eHcK_^H1;30qaF63&<%4SQT{`e!e-5AqVo|nSHZS#9V#);PDRv{{?=N zmkW?F$R~_Utl&_9iGkR^KVD&A7qJ9~5(tCX7muw%$qgWV_;LZJ13)gtf?4??p&+f8 z0_KC*|Ns4Fcygfut_H*giNSmfQVZgPa{el^lj&@6LdI528W2gW&^e z3kuoCun0{IlZ}%01Am;@6R(B*hIs{E*x3Pz$R#jn(xs8spSAJ0162ZxPHSD zoE|^`6f)ql0-qVwZV#ZOgGXCP(u>^zRA?3B1^7Y$8aFhxAGuEe0t4PP8wCI?>}*mV S!Ah6_0000NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1sncRy%`FS|yl$V%=;oZ4s1;U(=`OC|pbje0f8( z1AL-V8CK7o#2_pz%<%2oHwLGGXrlGvb^r+>0P^+X#fup{Jv|{IL5yB%gg{|(1ei`t zOk|ikbt;&>Z^=Y3O=>8R90KLBUJP5dY+<<-G(b`a?Ao=9fr*KU!AeJwK}}5!EG8~4 z&Y-BM$RHyl1LiX`A4Y@*Hh>laOc)A4A%F!JhPyEQ`}dFG>f?7n-~MIz{rfi<|N8Zd z;pWYo43d(PU^Yk&ml@bXm*@~+V`BsR9wg7q%*?>b$_n;945+B6Fg$<$94v=79gv#_ zK)wTo0K*qh2ynrD4+G!7e@6`gA^}Aq01|@%P+|n}M?+xvhk&-M5Y`ZQ`}QrJLI4P0 zX4q8Q|QEEwc_7@jzBB0L0O7#0E` zIb3F73mLLPAU{8!p}oBwLk*~c0?E-N4KOkNgR?>LylBxPl)3;^Bi_G%pLS{B>K7yq zv_`ys{W@Iez<~o`nx^dmWN`BFH|!FWw1`0Mb$WG7U|_(zW}^TAb&Xg>O`+|v00000 LNkvXXu0mjf&lUYM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png new file mode 100644 index 0000000000000000000000000000000000000000..d400ba2b999d14f3958f213bc1cf18d8808f7bee GIT binary patch literal 840 zcmV-O1GoH%P)Hti zkriPOKxS{MsQ^gZx~@?`e7Cj&3aqLGJg*cqc3z>j@3~|iRBZwS?_A^$*A5UIXGISo zzII^XZ6g+*Ml9!7L||yrk+)I-L+?ANADUn^j?n(ZhV@Sk`bpI!;Cs9a*Q0uBM?R#e z&xo*sLZ5>e#Mqy}@H&Un;f$U1zo-mSaNcqvn%+P>XgAGcE}6E@4UU=_3R8Mrv%JNARnnA#~X90AHooG_D z0~kI2p&P#@Xo4g;MzJluEr`xr-yK;JmIBz5@Y*UhyFDVf22M8|Pb9Ds4CP`)hlr?s zyD*EXF%p&nhWqcTH;PttcIvBXqLzDYjbGg_`zo1OdK%Gr{+&$?E!wX&fY#mV$*CdevSnU@Y z0Inef!398a{pPuow;#nh-_H9_>LM6^6PbJfKYyG%cjwIk=i5p?Wcu#@2X(>72B1Jd zPIeEEnZEsWlX^ue%Md{M`0lmHUVr?I=>j37vM3GJ1lFIw6xm0IZ>f(ZUoan1K^n3o zmL(vS*v1p;k<2WO$z-z7yH+?45}4CY2YuEAACe&&e{6vQH(w%}2)!Fu-| zqcKZj5eiFZf%SffNa*gYl5H}X*gK3yBmX|h9pH}uBbI3oZmqB;eTGDaUrVGDg}qm# zV^(Z!tck~KA>hAl0GG=}t<&j%UayDG->0H67K??=RivPnz~NW)CrlrY$4qDUKnsCnECBI%9J1Lg?YdkpQ=iM_Ae~Nw!C-*>qu*aoybD?gC}zQQ zI)zLo1I1#I8x{_S!Rz(P?nie(4{gF*25eB7{5 zCZpCkVcDe93uMHSc#SvqF9K9 z7!XB>r6MV;{5z~{+r}o_sg>Ta)kdm^Sg`U}r?nUeNn@Z>iJi(Cx=Bu5SQ2_$DkH zV0ikR{C+=`%Vladn{@N}yKZ`#`j|^`F;&s=qS)=Gz8|?p@bkng$zg+f95O$cDVs|o`00000NkvXXu0mjf-~d%{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png new file mode 100644 index 0000000000000000000000000000000000000000..68209e0adaf9b4eea3077fced53949eb25bdb86d GIT binary patch literal 736 zcmV<60w4W}P)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1TvhH^KS;qlYk4CM(PK=v-|AwkO!n0p))3Xd4R|NP64 z9^yz;NKic&EV>Q~iRTQQ?9A9hf*!d5lomjtaQ@n5Ap0L)Gcg>HY{^ZL6Y{Bf7d56I?v3wBt{pS)m-eIBe^~Z0#p@89lvUptvB?T!s8w7~u zg8(bb6^6A%>To_c2PJyqW@ch!*nZ*-PWsM+PhcOy ze2(mULoHoY-(v{@3m|Nen}I<3+RFFp78S4b)c;yBH(K;KI;$V#h% zeUB`MEhk_^!OQpG8Jds%1hZT0zc6e&#mI2&?o9?!K2Dr8!%so5dQfc$%KIA1S`2+l zc0of0tz03L3uc`L6&Mhg{`?I|6IF{IF^IGM!bvlH`3s3YVBUxM9ACWSbpR}$TI}C4 zth>a=z`(`8@Zcva5JRM~(mW70s5YFrWL@qb=_7NuCsuQKS3ah&IB9`2uh+vPYN+1 z(SsgMycsVBFG$NfTMC(1xPj0 zA`}ATC@I@j0f>Fe+EogOvxbi6x#G%fk3R|-*0U`F-itP{2^Pg2_RW23wfygUmed}! zQv{m&%E5CysOBOtb-zT{0qn;JJQpb4Gzubc{Ja^d{VAlDQz)6WBT8+GCN5DR+l!GL zSd(d}lGrW**}0vEDPqF==aKBrTfmWiCx|{9;%fxu5O=ZfYGB zt(91$!b%c_63FX3C#FRbLcbuB;J$Do2~v}UE&_U-=SG@@aGQelj_LOpqXdjN&kc!$ z`&{Sw60|3<%Hqq0g1#` zktX5)96-xK4}wi$bl*FG;j15X2-u;gVrfoDE9KbyI6CLLuy|%gCNb2LJqPyu#bnQ4 b&Hl$v@55#6VK{iP00000NkvXXu0mjfrks4O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png new file mode 100644 index 0000000000000000000000000000000000000000..7f70d15f248332ae8fdea141f337a06701c02cca GIT binary patch literal 632 zcmV-;0*C#HP)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1hLlGG3Y`DW+MeGK!NP5|YIvY%lV;}M46H~%oq zSBWPW5_m%Z=JWY{cYr+7(#Cv-I}EIMSujI_lo0s-_b0>e|9^0%3qk;-7i0!L{dhwF z6qnCg-ZHH5YGE+p*ComFGaoNA%-OaOYz9i&AteMrKKS$hFT?lWKN!CL{zj4mKzcxW z356iu5Mcex!l3j|ih+}rgW>wOyCgXPqz9xIT-NeX5CR}DW9vMUEQbNv|6&+sq62~< z00K_j=43hG!RN;qW|ABNa=g+EKmY$C%K?%+;tY>IKP5i|KzW$~j2RfxK5H;2@XCVO zQT`EF4O_Nx1(*i;d=~Ewh#((`ATtDz0jPAV{~yc{<{iS&xVRmwnv#fohE-eFfYlOP zYLZkNvNNzTaIVxZ8<@NRT=@SCCKi$VFPnQtbxNQ?deQYIGc~CB(c?f{O{0)n6TL1#I3V}w3gK##e zTtEi!d{4j(ib4Px!0HK7^`Qf@TgCICB_sk6*NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1N|)PP1}#+yh7wms20LvY2ERE!uq&o!2p|JcXyiHmWiZncV~~*5U|1P&& z$n*baxOV#mxQyu84a}xM3=;qT^DkaADGq@W%Rdb2BL5lQ|72!(@a7jVM|^;rG3hi= zp5+a=tO%a<7NUWgAprCFi!V$Jw_p5VSakY3Q1mN`nx5SZ49y(CQvM6}@`3CSK==8g z>)b%S+*sAJv;IY-1!{x{U zDap$i;zWl4xjsh*&z`>}!U0%9fD)f011U)rA{>Ag0@Uz148$z_K!gL3LV#L6#|LnR z05yG%0*EOG=;3pm4k&RIppDOAfKUj4YO**}PB5F6KF8?*P#Rct9mb}j&tU*x2!Pt_ i^y-+vz<_tnMgaf{|1u4p2{kDI0000NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1~mO1xc3{991@g= z08nga;Tr~<3N@^12my*i044?t4N`LoRYCyd`<;d7NwOFQs1gE4ro1D&jG#&gPy(oy z21o_keax8VQY!?67h|{dZ7hTam43gT|3NaB$|1lk|AFC^mjH^G*fyXgJPeTz?w5WpG&pga!?1zaT`C~BX#U@4yASndiW+FlXoCA2Ui{S;7wh3R^!B}tbiV+J2SF0G* jUZ+>b1O^7YYc>i1kHOv3G(`H$00000NkvXXu0mjfpDVW8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png new file mode 100644 index 0000000000000000000000000000000000000000..4196b8b9f4ecb47b115eb2e34e156dfdda04bf05 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?5OL=a|NVZS^RC|Ks{ z;usRqnw%iCa)@ETiEWe7f=50*fZrv#C5hHIqzA8BXxc zP&SZZV6#yIat<$lt`XzIUQ_8D&Ay=VqJRW1R^p&2(}HhSd#%(A3?9U84rE|x>2kT< UxcuLLpbHp0UHx3vIVCg!0EeqQ&Hw-a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa2554eadfae0c72a5c9d2eb1d4123cec37e3e7 GIT binary patch literal 813 zcmV+|1JeA7P)NCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1V$c)QB+3CbM!y(Z4lN@}Ep7)Og#gIs<}yYMjR$%O8dUF4%)rjV#*n0h8d~#S zoj_GcN(lV?^NZp8ukQ?hKmI1@0FXM6dM+L=20m_nxOnV8V}`{KcH-2>gdqY70VoFf zh?9+zftiV!p~=4jFAY)$QqRWB2Bg{Hn3ahY#Y}WSTnPO8%TTwmgQ3zhA1jR<0>A$L z0n$I=X8iv58*k3S8v-}p-GPSy2zTwAf|Z7a07yM31b+PZ4#&T~{UkpG{`{4LgaG${ z22XQWoW9t8ayMArAE56azPOJfxAx6Zocgdk0Lhgs%q(D^H93{xHN?`%kYU!jB@AL< zUqZy*egD9)=D|HoUz3sx)?9f5_7yQekdvQ5j8lX`TSJTC*4w)b(m=T8$|-{S2$qB! z9zSB}@Cjki5K&>ceC-MYs~88v&!;R5?9zW2Dz>a)2vJaC5aJYIkmZ#EtG{#S4me?5 ze02?by@D13n28V+0%*8m#SCB^{{W|Q5F3=rK{QAX;NC>?D55^%nW|(FXbO1J2 z198BV60q-TjNHI{a9&4}2c?zYe}5AW1vEfXdmwVz1cnU>6%5V5kkHjqXJ}-}VW>a9 z0%8y_$FMT9f-6fFz`%fa%|-zLO0t0Xfy4im00000NkvXXu0mjf_X}HE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png new file mode 100644 index 0000000000000000000000000000000000000000..388c0c6e8fb25fbeffcf7550607f153486be99fc GIT binary patch literal 781 zcmV+o1M>WdP)L{0Yn!gxSv{!OgCYxA>0z_B*117%Uc87X zf|oJy(xYDXSLi=b#6dmQiwD8Wz+Z^Y(Ynz?=|VtJj0c4=?c5eu_x@;_yiL>8t(}5< zE=k_x&GUUed7kHe1N`qcV82MEQor}YX|Y&r`fZ+=&dJTbIwyVv5rGzEKqT5%0n~>n z!Xbd!(9ymMz^X1>ItBdr+Ft=J_U{tNU9ld_q+{&(a-oXsqu%C-D}j)tWE;vF62rHV+*i-55OoFgxhMoDF-@7{}ZO)5Up<02OntiDn4Yo&@ynYcxw zn;giMEVa23uZXb?6;eVLNIYM5Mox)Q`|?6%;wh=XdYw~g(_`9JL3Tt;vSvP1ED|&y zBtLL_hDRDXuHfyWie;UXF!P5|(ne^u)0%%lAAH}gr*@}o6ArWj4xc69NLo|12 zgkisq2lFJ5jK-*hLq7Igv%`83uz!DROze!NCCT?rU6%2EK_k!b2ooxwZ*1w9np7Ey zTi0SR3S~yflYrY=kezEko|nove^tSJP{sIttKKC-;$V=H^NAFCy&AIoAbnzOQ=Cgl zwx#e{oWJYUkdpZ$3N6-?{eYdq(DbyQ-nedz6Ee@d1ngixV5iW@XuoK+p6!UH zA4W;fcRH{eUk|*Ja2Goww@R_zjr~1gX99G;zE?jcrv3F_vwhnJQQ#z#zSdpz00000 LNkvXXu0mjf=rVJJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png new file mode 100644 index 0000000000000000000000000000000000000000..1c114ef314ed419bdf33273f3982ceedf1396589 GIT binary patch literal 796 zcmV+%1LOROP)?AM!2CiCMkk`{|aJ+FR2ldHk5CRg(qitw2#1BjmNY5|yo z7GWuXD4g*0#e-Q1)^h=8zp-hETMH0so(fP}0p?uvC$IIvQtmBt-d`iY^-9dS=pW~N z2eG3d@ciK_OlC)z6l@9LvonkD=i%LybqcBz0rZz1Z)tHi1Ww%yKz8^#Gtr~jJiNcv z(C=|9N@;@9saR=sd^MnLa3Jryc-~1pL=&^hvCjv@Kf$7B= zxN**gKs~Qrs9oXnRU}29M?1CiS+W$s^>T#3-IaUH2^gFEI8VCT$YZx6@i+1z)eE(+ z**=jQ0bow^40E{W}L09V!XryTvXXl&6B;XJFJ5J*Koaghx6@i8F0>t~{2EYEf zPP|AWVj%FRViNHAeZU8JsC}wIVnFLOnM#t+o?uUR37ohRgVK{#I4h5kj(4S9J%-&s zEj@$iMRkh_U%VAylBIywwq&4yq9kbdIOhDD0TO#LZapzO%83A9oTLwwm~Ad!4vF z7n}$bwhA!%brjZ;YX%=Z6!pD!Y?h?}?5IK>zHtXs^ab&o9h=pO0RCP-tUo4HNB-CB azkUMoe@m^j_+f?s0000j|#J@k-6=^-?Kp!6gq zmqN%7=qV>pp@;r}(4z#8{RJg~7D@s=h%Ho>7&$y$zv#!n>Y!2-U zgF5qmJJGoi;z!nei@%O}n~1s>QT!n-&b5If%N{o2 zYXFv7wCCEuwUXY~K+PU7@M3kvGykdH2vsOJ-rGSS1BpnVQn3+NFVji-+^B06f4;KH zv7^*A%Npj@W}w}VP@Ko^Mppd(P^r?BWO^zSKpv0AD4!k0A(zanG7wP{pi>Mm@PLQ0 zv_!_~DZS4b^f(?BOh_MfU=2R-MGRt*L$K-isOD<`onm~vY0-~vkKUF|GB-ELJUnDn z8;mY4n2>&QU=C~WfiGeZiyX)${iZhHMs(h~p>D5BrD}zYy}dvte8|}sF^EMDcTUwj zLKLI}*w-~akm5WPi|o83_V%YWP_3Y~ap&cl20AcSh$I850R>JrP!$**fr+gxDqU8^ zdOpL&kB^CXt{{+G98>39zEt|RKsD?mn83d7^8NztQ$`Cj(G<@OkoOpQi)VurRZ|DX znPlQyvq5=>37{rEbS0h}?D=@)(q?8r8t(M(+XXT^9f4Zzdza_D_dUq&z<^Y^H`xr) z!2!|!K9R$O!Aw*-zoshY%nY~{4)+|WzciZSC_i(U$U8S+vSQA_fJ9y}49{t=IoA-# z-M6D)mIIkk83cck?S&n zoZ1Y)-kqIkBcH|ua=CN6&36sAmlL#{PE)(tq*o^=^mVA|;og?P1nlDSN_-;cwr$h* zc6)LI$@O(QFPF)5>ZRyzZ^@?fnJ`Uyl*_S}dmFg-KPLD7*X+Oj0ro&Zmmk?jD*ylh M07*qoM6N<$f=dZ+YybcN literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png new file mode 100644 index 0000000000000000000000000000000000000000..c06ce963580a01d6a770759d7033d47256e352f4 GIT binary patch literal 638 zcmV-^0)hRBP)vsi_rv@Z&CbFS)zldoM2m z`0o<2U+ly{??uwXdNZ$O$mH32xXHI;&LW2FK}wziHPiyKbzv3ZDS%{L6`>YTaXsEs zKvjgx0D!ZC0R#QXz^0>@pOF9t)^R{tBMpXLW=+@ch~hV9XiZlPeHzg$UmydM zHv1Ye%=RnWGotAmQxtg7w3a#n8r`UG=Lw39r~ z`x166ZL|4+T|f+spiUspudXbA0kOzkWpIAakm3~|eSw;G%d#yI*>d*;?gHwLy8Hl> zYTAB9#69~cR?>B2J@{$KP~Ls23XkDmfL!IoK%5gVAfDJqu@tgYZliB#<%9nlHIRWE zR-VC|B?D7n?u43+fdlR?XWiq}Epqz?eb0iZFkeCh+JeLY?S?oP(#?6%(OJ;IDk%}o z<&iBWechdy9WX#Ez9zguVx-;tb|M{r59HhdDP5n|f8l!|T9=zG0aKPFOs{nu?P)`eA&(p~FT zL?1lneKV7J?|t)Tb^`qCGT;Rl2GQ9Kr;l2$->#vYFSOEietys&M8-SF&i6x0HGqYd z-3=lX082r$Qw?A(uzV36s$hlSo4xcK21bc!3FauuA$|%iT zuB$gjM@1j+acO2oP|kXl?5wnh;MRawgA$7YE-I$=RX*=@b~>VuGyJf=E;2qbJuU2{ z48%GGJn72T7QpKHA!nG=G@Pc)UoS7CI5qYAPl00KGwA_Ot1=uI8Nth?C4t#aje*0Y zpFHhBnPHQht9#%n*?cdg!T`&dTwJwLRiDZ!m?eEqXa5kjWoggCz4^RVpUNrVj5erM z8S>q)z5^`x=u-Ms2DYt%{Mk8is|_2gn5a~c*L8s(Se6*yM|j?FojjZy7vo=Oe1h7> zW7D@@;u_dA3|yjYtCZ!6Sr2{f7*{>`zF~J6Vcgv2YZ$8r_$%0JkAv7C=kpX++#2vb zO8dPDS8)vEcpEvEWd0hQH(}(XR51`Grzo>RZ1=tA|NU>mol0K@cyD&=kBO2${@3ik Z`~*6)H0=(DTYmrm002ovPDHLkV1nI+Rv_ft~eA3U`*UHcmk22pmN|+potGWn%2*|B%bFa5W~@wm=YWc zI5B2Ox0c0mluW`?p`fiz1Ol*}NF3S{%QXuYrGoRPu_An`}dr<}Y-O0OEMOYnJrU2Pa zE(hD85bPs~74&pXCbZt%wX6oKgKsMk$6$6ItcAm{fuLKeXSQ4w;Gm12lYnbGt5bAXH#D1*`ubZtn?3g|7`BLT8+)xhl+06(%asP6$8oTCOF z=!S)D0iCF0Dlm6HkhKoqwCUf{5!q*htN{H#`}JYM?8iUN{_P#>Ngq=Nn6#?^0000< KMNUMnLSTZRl@S*J literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1f115e8bbbde1e9e398318c83ba1f642f98bd2 GIT binary patch literal 593 zcmV-X00JM-S|S3(AKSXr&9wou3T(hd#+M2HH?U+F38s&S6u?sK;16A*)N7*k0xQBen%;S2vsPOkU2{j7lvS0ohg1Lq|ft=IH?RmG0mf z_mTP~@Nc|Y>v&@UR}r*v!ek&Xe3XQY(9;)`#`I`7!Z?TCd{Ez6!TS|uF|dyt-$4{T z2_Y}yCKqyjQEuq4(33D2XyKZ&W>e^?#3~RyXU~rpJ(+OMV(*mS{34?F`n3L- fDEaZfW;6K!a^BMEHjX~-00000NkvXXu0mjfe8>(R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png new file mode 100644 index 0000000000000000000000000000000000000000..c465804976042619d15413a6682df19649685334 GIT binary patch literal 886 zcmV-+1Bv{JP)MDF=^-A$(v**Z=4s4?V`Q# znET#K-o59%bMGWX|GHf(pY-guVhtBa!1D9z5!TI-qJAIdTBHu>q( zeongQ$w20WD5UF@OeRUwGztcT)Y#Za+Qxw6Tcb*?YHX9;6;?#Y>wL6 z+Ne+{P#_SXgM$P1ooqP`=fvYr&ER}iC2LX!H0_ka;V^{`4{3XQo0n^9YM6n|%}t)e zce3R~J~=r_6B83A@_^sma4?|B7yvq;1X}o=ot>1==h<&*X<!zvRnP$A=;ogGHo)6+w`p#jW+8cb}guhZ1j6m{HgFj*)YSi@c-ktia!?|Uau z%v2x;6WMH*(&;p>!9P1YqxY+;j1p*-kXOS1Mmci$u~>{52!%paTU*PcoC#0lE)3XO zu}UX|ve6grG?zYiudk1$r>8kV&;DSD5S>ukiY*2%F!Tk@(1y?FqgF$ZFfcJQGsBAa z`hL}&&}m>`Ffv4MmY3=L{M=$fXrff}YE~5ksO?81BXqyNpEZzNTB=|IIsg-{T~ehF zxYhPxBtqftZbpkrz&w>oQFd#K=Wf+;sVZ>R_T$k}dN?q^D1jb6o}xSM?(Ipd!>bBB zH6ZR>AcsNq@S%guH=WlCg_Kki`6w^H4lf4Wki&nwvSQYI!%ZIWWlYS?&Dojo zOyGh$7yiQHqO{Xt%}o=n+IMvgC?R+0bWSGleDZ9*#Dv478o;k0kv+_I=Un5*()$#a z)=Qdr_3k6D;r$>pDFaZpxJOmwZcN06A24#9309RDUNCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1TN=JsNgaOUkHHO>-6fFz`%fa%|-zLiaTd>DY`?^00000NkvXXu0mjf Dfv_^G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png new file mode 100644 index 0000000000000000000000000000000000000000..00361aa00fa63da57f5686fcc1044b808f51f389 GIT binary patch literal 830 zcmV-E1Ht@>P)^4V4!<5c6d|U0|tWuMxzm!OeV@^vsrLD z`4|ZV0@McM@pvVH^Yde9p33_u0);|BbpceJZ;#;Md5Ao}dRr6Q-ENmyyWOt%Zl-(; z`_Tu`Y&K>6vNXJE7VPbYVK^KTPg$*2u-RgwmrkcuJ*9@`H@fUlJs9ch zfIZQlhDx9aV3eH@;=_wxiwB@F@!9zf+B$3Z9*BFd%81QgjbqB0hXL9JFJeIAcT9B;SVio!HK zfXdx&H*`83qMoQy@e+;+b8<(0NJ>0#_*pq^S9$=IyId}4G#aEDVvwOH)Z&EW2a0S*^AG~O7rXjegFUf07*qo IM6N<$f@>Ut5C8xG literal 0 HcmV?d00001 From 81873aa3ab09f7efd75981f80d16ed0d69b70b1d Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:06:18 +1100 Subject: [PATCH 066/173] Fix tech anomaly nexttimer (#32805) --- Content.Server/Anomaly/Effects/TechAnomalySystem.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs index 3e4d101f4fd..9f81c64dbc1 100644 --- a/Content.Server/Anomaly/Effects/TechAnomalySystem.cs +++ b/Content.Server/Anomaly/Effects/TechAnomalySystem.cs @@ -22,11 +22,17 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnTechMapInit); SubscribeLocalEvent(OnPulse); SubscribeLocalEvent(OnSupercritical); SubscribeLocalEvent(OnStabilityChanged); } + private void OnTechMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextTimer = _timing.CurTime; + } + public override void Update(float frameTime) { base.Update(frameTime); From 3865842acc3c35c3e7af50d26970b3d9d05d032b Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 14 Oct 2024 07:07:25 +0000 Subject: [PATCH 067/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 66dc9a07d61..6477b9081cb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,18 +1,4 @@ Entries: -- author: themias - changes: - - message: Fixed victim's fingerprints transferring onto an attacker's weapon - type: Fix - id: 7011 - time: '2024-07-30T08:35:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30257 -- author: to4no_fix - changes: - - message: Now engineering access is needed to interact with the particle accelerator - type: Tweak - id: 7012 - time: '2024-07-30T11:29:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30394 - author: Cojoke-dot changes: - message: You can no longer get out of a disposal chute or container while knocked @@ -3914,3 +3900,17 @@ id: 7510 time: '2024-10-14T05:55:46.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32677 +- author: ScarKy0 + changes: + - message: Cyborg modules now have icons instead of using the module sprite. + type: Add + id: 7511 + time: '2024-10-14T07:05:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32505 +- author: metalgearsloth + changes: + - message: Fix tech anomalies firing every tick. + type: Fix + id: 7512 + time: '2024-10-14T07:06:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32805 From 8d68fed57f5d8f8d0e216c05aac33ce2ca8715c7 Mon Sep 17 00:00:00 2001 From: mubururu_ <139181059+muburu@users.noreply.github.com> Date: Mon, 14 Oct 2024 06:32:32 -0500 Subject: [PATCH 068/173] organ sprite touch-ups (#32762) * does work? * fix * shrunk organs to normal size of small * made brains and liver look better * made stomach slightly less bright * unique sprite for diona lungs + inhands * unique sprite for vox lungs + inhands --- .../Prototypes/Body/Organs/Animal/animal.yml | 18 ++ Resources/Prototypes/Body/Organs/arachnid.yml | 15 ++ Resources/Prototypes/Body/Organs/diona.yml | 20 +- Resources/Prototypes/Body/Organs/human.yml | 21 ++ Resources/Prototypes/Body/Organs/slime.yml | 6 + Resources/Prototypes/Body/Organs/vox.yml | 6 + .../organs.rsi/eyeballs-inhand-left.png | Bin 0 -> 222 bytes .../organs.rsi/eyeballs-inhand-right.png | Bin 0 -> 213 bytes .../Arachnid/organs.rsi/heart-inhand-left.png | Bin 0 -> 210 bytes .../organs.rsi/heart-inhand-right.png | Bin 0 -> 219 bytes .../Species/Arachnid/organs.rsi/meta.json | 28 ++- .../organs.rsi/stomach-inhand-left.png | Bin 0 -> 356 bytes .../organs.rsi/stomach-inhand-right.png | Bin 0 -> 360 bytes .../Diona/organs.rsi/brain-inhand-left.png | Bin 0 -> 455 bytes .../Diona/organs.rsi/brain-inhand-right.png | Bin 0 -> 440 bytes .../Diona/organs.rsi/lungs-inhand-left.png | Bin 0 -> 669 bytes .../Diona/organs.rsi/lungs-inhand-right.png | Bin 0 -> 677 bytes .../Mobs/Species/Diona/organs.rsi/lungs.png | Bin 0 -> 603 bytes .../Mobs/Species/Diona/organs.rsi/meta.json | 29 ++- .../Diona/organs.rsi/stomach-inhand-left.png | Bin 0 -> 313 bytes .../Diona/organs.rsi/stomach-inhand-right.png | Bin 0 -> 330 bytes .../Human/organs.rsi/brain-inhand-left.png | Bin 300 -> 472 bytes .../Human/organs.rsi/brain-inhand-right.png | Bin 312 -> 469 bytes .../Human/organs.rsi/eyeballs-inhand-left.png | Bin 0 -> 175 bytes .../organs.rsi/eyeballs-inhand-right.png | Bin 0 -> 174 bytes .../Human/organs.rsi/heart-inhand-left.png | Bin 0 -> 221 bytes .../Human/organs.rsi/heart-inhand-right.png | Bin 0 -> 237 bytes .../Human/organs.rsi/kidneys-inhand-left.png | Bin 0 -> 312 bytes .../Human/organs.rsi/kidneys-inhand-right.png | Bin 0 -> 333 bytes .../Human/organs.rsi/liver-inhand-left.png | Bin 0 -> 306 bytes .../Human/organs.rsi/liver-inhand-right.png | Bin 0 -> 301 bytes .../Human/organs.rsi/lungs-inhand-left.png | Bin 0 -> 386 bytes .../Human/organs.rsi/lungs-inhand-right.png | Bin 0 -> 390 bytes .../Mobs/Species/Human/organs.rsi/meta.json | 192 +++++++++++------- .../Human/organs.rsi/stomach-inhand-left.png | Bin 0 -> 356 bytes .../Human/organs.rsi/stomach-inhand-right.png | Bin 0 -> 360 bytes .../Slime/organs.rsi/brain-inhand-left.png | Bin 228 -> 425 bytes .../Slime/organs.rsi/brain-inhand-right.png | Bin 220 -> 417 bytes .../Slime/organs.rsi/lungs-inhand-left.png | Bin 0 -> 417 bytes .../Slime/organs.rsi/lungs-inhand-right.png | Bin 0 -> 417 bytes .../Mobs/Species/Slime/organs.rsi/meta.json | 14 +- .../Mobs/Species/Vox/organs.rsi/lung-l.png | Bin 0 -> 408 bytes .../Mobs/Species/Vox/organs.rsi/lung-r.png | Bin 0 -> 404 bytes .../Vox/organs.rsi/lungs-inhand-left.png | Bin 0 -> 478 bytes .../Vox/organs.rsi/lungs-inhand-right.png | Bin 0 -> 463 bytes .../Mobs/Species/Vox/organs.rsi/meta.json | 25 +++ 46 files changed, 289 insertions(+), 85 deletions(-) create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png create mode 100644 Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-r.png create mode 100644 Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-left.png create mode 100644 Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-right.png create mode 100644 Resources/Textures/Mobs/Species/Vox/organs.rsi/meta.json diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 8384e006df7..e59aad9da3f 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -60,6 +60,9 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Item + size: Small + heldPrefix: lungs - type: entity id: OrganAnimalStomach @@ -86,6 +89,9 @@ groups: - id: Food - id: Drink + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganMouseStomach @@ -97,6 +103,9 @@ solutions: stomach: maxVol: 30 + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganAnimalLiver @@ -113,6 +122,9 @@ groups: - id: Alcohol rateModifier: 0.1 + - type: Item + size: Small + heldPrefix: liver - type: entity id: OrganAnimalHeart @@ -130,6 +142,9 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Item + size: Small + heldPrefix: heart - type: entity id: OrganAnimalKidneys @@ -146,3 +161,6 @@ maxReagents: 5 metabolizerTypes: [ Animal ] removeEmpty: true + - type: Item + size: Small + heldPrefix: kidneys diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 29ca393d137..c7542ae1118 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -34,6 +34,9 @@ - type: Sprite sprite: Mobs/Species/Arachnid/organs.rsi state: stomach + - type: Item + size: Small + heldPrefix: stomach - type: Stomach updateInterval: 1.5 - type: SolutionContainerManager @@ -91,6 +94,9 @@ components: - type: Sprite state: heart-on + - type: Item + size: Small + heldPrefix: heart - type: Metabolizer updateInterval: 1.5 maxReagents: 2 @@ -107,6 +113,9 @@ description: "Pairing suggestion: chianti and fava beans." categories: [ HideSpawnMenu ] components: + - type: Item + size: Small + heldPrefix: liver - type: Sprite state: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. @@ -129,6 +138,9 @@ - state: kidney-l - state: kidney-r # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap. + - type: Item + size: Small + heldPrefix: kidneys - type: Metabolizer updateInterval: 1.5 maxReagents: 5 @@ -145,6 +157,9 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Item + size: Small + heldPrefix: eyeballs - type: entity id: OrganArachnidTongue diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index e248355df2c..bf865a07fd9 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -29,8 +29,11 @@ id: OrganDionaBrain parent: [BaseDionaOrgan, OrganHumanBrain] name: brain - description: "The source of incredible, unending intelligence. Honk." + description: "The central hub of a diona's pseudo-neurological activity, its root-like tendrils search for its former body." components: + - type: Item + size: Small + heldPrefix: brain - type: Sprite state: brain - type: SolutionContainerManager @@ -64,7 +67,7 @@ id: OrganDionaStomach parent: BaseDionaOrgan name: stomach - description: "Gross. This is hard to stomach." + description: "The diona's equivalent of a stomach, it reeks of asparagus and vinegar." components: - type: Sprite state: stomach @@ -90,18 +93,21 @@ - id: Narcotic - id: Alcohol rateModifier: 0.1 + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganDionaLungs parent: BaseDionaOrgan name: lungs - description: "Filters oxygen from an atmosphere, which is then sent into the bloodstream to be used as an electron carrier." + description: "A spongy mess of slimy, leaf-like structures. Capable of breathing both carbon dioxide and oxygen." components: - type: Sprite - sprite: Mobs/Species/Human/organs.rsi - layers: - - state: lung-l - - state: lung-r + state: lungs + - type: Item + size: Small + heldPrefix: lungs - type: Lung - type: Metabolizer removeEmpty: true diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index c67f4f6cd16..cb1492b8a6a 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -71,6 +71,9 @@ entries: Burger: Brain Taco: Brain + - type: Item + size: Small + heldPrefix: brain - type: entity id: OrganHumanEyes @@ -82,6 +85,9 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Item + size: Small + heldPrefix: eyeballs - type: entity id: OrganHumanTongue @@ -122,6 +128,9 @@ layers: - state: lung-l - state: lung-r + - type: Item + size: Small + heldPrefix: lungs - type: Lung - type: Metabolizer removeEmpty: true @@ -164,6 +173,9 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Item + size: Small + heldPrefix: heart - type: entity id: OrganHumanStomach @@ -173,6 +185,9 @@ components: - type: Sprite state: stomach + - type: Item + size: Small + heldPrefix: stomach - type: SolutionContainerManager solutions: stomach: @@ -202,6 +217,9 @@ components: - type: Sprite state: liver + - type: Item + size: Small + heldPrefix: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. maxReagents: 1 metabolizerTypes: [Human] @@ -219,6 +237,9 @@ layers: - state: kidney-l - state: kidney-r + - type: Item + size: Small + heldPrefix: kidneys # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap. - type: Metabolizer maxReagents: 5 diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml index 3da76c5d4aa..ca22d25423c 100644 --- a/Resources/Prototypes/Body/Organs/slime.yml +++ b/Resources/Prototypes/Body/Organs/slime.yml @@ -33,6 +33,9 @@ reagents: - ReagentId: Slime Quantity: 10 + - type: Item + size: Small + heldPrefix: brain - type: entity @@ -70,3 +73,6 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Item + size: Small + heldPrefix: lungs diff --git a/Resources/Prototypes/Body/Organs/vox.yml b/Resources/Prototypes/Body/Organs/vox.yml index 1b4d12116f8..70e07832712 100644 --- a/Resources/Prototypes/Body/Organs/vox.yml +++ b/Resources/Prototypes/Body/Organs/vox.yml @@ -1,9 +1,15 @@ - type: entity id: OrganVoxLungs parent: OrganHumanLungs + description: "The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in." suffix: "vox" components: + - type: Sprite + sprite: Mobs/Species/Vox/organs.rsi - type: Metabolizer metabolizerTypes: [ Vox ] - type: Lung alert: LowNitrogen + - type: Item + size: Small + heldPrefix: lungs diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a623e75a285d8b1079cf4685e3cf429c69f8be98 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|W_Y?dhE&XX zdut6WX1 zya~L_4${uRP#526`faV*an)@*UK`ctajZM{cj*%@Yx9L6|Dr8^t1&YCJHWl*sNYi6 Se>|r^>OEckT-G@yGywqBpIIUR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..45649b9261812b2e8e2ddadbb5c1d4018d1feb64 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|`aNA7Ln`LH zy|t0I#ej!3;MqcD-Ny#Z)j38JShm2sY z40_Ms+n>7leQv(k(?5SZulx`_`9An?dcXd{t<{VS3tlj9F!x)!?VRoekZMm?KbLh* G2~7auGgp-W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..56698f87e2956230d62a2831a1c462e7894b1959 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|dOTemLn`LH zy|t0|kbwYez+sk^D>k{fo#4tj%raA1cq6N9P}i3#ZKa?tGyLa<%#hz6RdWXLjRP$s{{}^=p90P-oEu*xY!k!j|ZG9k3 Mp00i_>zopr00MMT)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json index 6141fd5de86..62d1f04bf0c 100644 --- a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by PixelTheKermit (github) for SS14", + "copyright": "Made by PixelTheKermit (github) for SS14, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -14,7 +14,23 @@ "name": "eyeball-r" }, { - "name": "tongue" + "name": "eyeballs-inhand-left", + "directions": 4 + }, + { + "name": "eyeballs-inhand-right", + "directions": 4 + }, + { + "name": "tongue" + }, + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 }, { "name": "heart-on", @@ -42,6 +58,14 @@ { "name": "stomach" }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 + }, { "name": "web-gland" } diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a346078b4a8b75a6ac493c6a8214809c98c5928c GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zjSu0j0as|T)AuAFo&2;wf|>Ik|r zy=_OCfbPl4!Vmv%7tj0fEZMT31!y=3WW0M;vb%4hwauNbNwaq{U*8mJJAeKa|Lxyz z?bzdY>lyE_y;kujr|RCw4-INz<_Mh-cmK}DS#2wAgC_-*Cs=BUu3AuXQu^<|pNVI? zS6STHQn&u-I`jN#e|aY?+48#A_tUlgLJ)g^6`yV0@U?q&$|s}1U3Usy&#AsG3+eMZZRVAI xG;WXF|KmG#zX`5!t=sg&od4k7eg=mB$Hapbycbt#OKE{D^mO%eS?83{1OVPHoaO)k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..001203bdc380b63e245562f33da55a0483e54ba6 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zl{{S>Ln`LH zy|v%#h=aiKk0EE<<@9z3tyNmHl{@(DtUzx8go0NCg(>lM| znfK+>pQitoZvK3@{^Ec6wDfnCbE6!5=bZZ2larHM3$Y7G9$2Qy{rPU?itY2)`7hp= zd6)l(&iYqtG`WrM&OY_1P|&zr`2NT3z8|g_Ki${xUhIT_lbr%ke(v@~YKtQ*=dAeX z@g?Z=!Lzx)KIX5Q%Q*k${_Y229$SqMypd;6s$ze#-G36trFQ}#+dN(UT-G@yGywqS C=%hga literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0cd40340397a8f957b023750417ccc5f19185 GIT binary patch literal 455 zcmV;&0XY7NP)Px$fk{L`RCt{2+PzN0Fc1gu3u4X&6I)@ir>c2@jNTFA71;AGeQ&J7=k9A^-pY000000AboF8}qqI`FMYs|0KpLi`**+ zzR%t2E=DJ?ByRH3Mp@1SLz5c+t}JrfZA*HrL1?4w+vls*Mp=H3Z%u~$oHojCs`W)% zljp9SJMp1Ga3|`vHJbqVO!}H`FvheMO?T2#$6%-ch#iA{NlF`K>!!_o+N+y3n@!?l zy!z6sHJj}Z00000000000L$Z6byANdiL%I}m$4=p?3h8A+(nEO|Ks}xA;<-Z?}sNM zT3|tAQ?37%vqJ`f%jf*vXBXT{4(PN$6A{tl&ylz$__rGllHFWbJ+Fu=vZwu-w!4E@ z9a2P!Qa0Zo;2n4CZ4~jrbU%mA&fNZ(I|*V*&@F@4O`DZPZnwLyAX{>B$KEv|w_^7- xlf0SYE!Ml&*H7{zH}wEg_n%bXtu%mPegVO0vFOudp+Nuu002ovPDHLkV1iRT&dmS- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..df6dded7441277d0d579c0d5141342df258627ef GIT binary patch literal 440 zcmV;p0Z0CcP)Px$a!Eu%RCt{2+A&hXP!NFO7Y~q5D?6ltiXj(BN$)sZfu6hI5x7Mzkd}(pO1o50 z#RAt^G0{o#Ufz4m|5d;YWOox5CcDM}000000DPIRX0`7aY#5ZsW<9-$BJ`4H=}jd6 zUmka31%g;e)7Y%1wQeA>G{x(feiaueJUR7G;$*eeYxG1;$)rEy^kx{6SL1Sg!&A z00000004+euL+N9W8WUnvox&f)R?!(gG$^OKl1@sMF@UDLK1(!fAk&7g+BXw1nq(( zuSed??ZWEuI$r_1{V|bXCQlQavHT)uy(p{X;p5Gm4rg;ZoSh!CmEIhYGcxAhfVHvr z5Ka36t{bA>R*~0i7Qk8)bXADm{+Q%h`eV#(W#rw}U)v%sFUcVH5tHWF>gTt)_ejC9J3Zahw4@U0000Px%S4l)cRCt{2+P`btP!I?3uS#hO#U7G2#gL(e{3vmVv86$1)0nArC}c9~787Ul zpOLMF77T62PWcy{E~>yk(v*0Ry9NRd$&f6Sm+KIoQBoHgy_4#|eHO{f`Q7Dzz?v!S0j$(zZV|CDdos( zR#V#vECuN99vFcij6Vl{0Nb(gs~>5_jlvO@>#xx3_E0e^y33r%;0jdSSS0{>SezLr zK7V?QR_7w|cQ~aSoy`_7v+@7{@Z-Y~+j^DzT!H3Kj{yL~{=)cPCwTzy4=)X;1j0Aq zY__1k$TX?r&b9KS&VSvPBBzw2N%x#so&m0vC-rN;SbU22Uw*P|)x~FzC*Dt;_#2;k z7O1PP6?d89*Qv#ounnoEY?P_)?VvMgU)u#qTJmhoQ2?lz74*72&X9lA8MMc3cr-w^V`IPh_11CN zc7WHclIr7UQG|H1YA_=SwjB^pItoV!TLbo9zS7-2FkCB7!~OyS1lQ&f`nQb5w#fCZ zHHyL!0ATL?1peV=Y6VbSD^J5Gdh-Zue}O0*Veb4Sv*dxRgyYF4IRe=VkY(aZZF7lq zr%+gr!7LRwR_W#-MyqpS{I@oJe1IX#VFsB?5PE(CU!wGQpksCQ00000NkvXXu0mjf Dyj3*- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4830b1e0a6806c6344f30dea9e594235a72f4283 GIT binary patch literal 677 zcmV;W0$TlvP)Px%Ur9tkRCt{2+P_O1VHgMSZ;I4HF+)==f`bK3iV-Eb4A*QoI+YHBbO_hYVBGR& zbgN(?&~|jvv7_x00_LtYBn2Zl2?3=U?2>bNI>=j&aNdvfz4KC^&vFMj?w;p)-@6?5 zJ^*8kF~%5Uj4{R-bEXxNbk{NXQQlaT7pK&djT@&CSE{+OD@f_pb9pg;YJVi9nxkK{e`HwIz>+Vw{d+22)lcyi5Cmc0NjjzoQtq9|I~4RWZAVPvTuQS zzaeI{G}*V(*$crKV~jDz7-Nhv#u#J&y*Pgn4&7b$3Ejg06S2>Uu=6~NcZkexkQ zrJAE=_XrhzJJgx5vbjw9`djF=63H%vXMe!3LC3<@ewjqSfPLvaOs%tHn1+eGl1B?| zY3B_*0|5MOmJq(yzDWz{HX?b`Frn8<(q=*6LfeMgaTcY6+-`zV++}kDdC=<6gJcQQ#!0w?xp5F5;8weFJ00000 LNkvXXu0mjf@Wncs literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png new file mode 100644 index 0000000000000000000000000000000000000000..77b61c344f77ab48198cc1a2ca0de87434850f15 GIT binary patch literal 603 zcmV-h0;K(kP)Px%6-h)vR9J=WS3O9>KotHO1;rtPpi>>=&`e^KPy{Vb-RjoS#i3BaL3iD|wcy}V zoSeEi=w@9)(26c`P&+kX(M=rM=^W&R%MbRY+7`hNN_*GjzVChS<=qAN$6tn?O^J~c z7xJ3;iI7CUHx}}mM|yPn)b~0pP=pyn6@|PeWOAC5uNw$5h8kL&h%<&N=rb?@K@o+# z79u1!;yA&|9W6MiPk3``y@|`lyLbQ6-l712755`nO^kEMiP%h=003iQ87K8!A8~PO z2LMp1mZ4`;!a09niC{YrC8AO-dt-SH06I<=91%S)AaWwIE!+FgOq6wFew~gd{61j~{ zFY?-14Q|VY+j5~yDadVXLYY$Ve9>f)1B?^|(RjS^IY2qDRLilfC$Jot(`FA=bE~i| z+ZS!^tcL6R>rnKQ`UGCA_916&cEixKDY3r2=F2rXAm^S6_O^7#T3g`?Ajp+(Teg=H z;Hw$ckFVI|K+Nr!o(9{pLw!LW2ix?o2*?a`DB9K9&Gk$m?v&MC002ovPDHLkV1kyx66*i} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json index 1c1697efc71..de4f8f8dc39 100644 --- a/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/commit/38051f45d3b26bd31f6e292239f43adb36ff01fe", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/commit/38051f45d3b26bd31f6e292239f43adb36ff01fe lungs and inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -10,6 +10,14 @@ { "name": "brain" }, + { + "name": "brain-inhand-left", + "directions": 4 + }, + { + "name": "brain-inhand-right", + "directions": 4 + }, { "name": "ears" }, @@ -19,8 +27,27 @@ { "name": "eyeball-r" }, + { + "name": "lungs" + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 + }, { "name": "stomach" + }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d5a7c86c438f54c62f8e7ccb6f063729ccb912 GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|K6|=2hE&XX zd&`io$w8p?;l+sCRSc$v0fKLGwme~rYrIjU7oDH5gW=erzEjiKT2rncJ9Nb9Xyn8v z|Euo#h;6It0Ga^?v!c(oZ}Z++`}RPR<+QVA+v=XI)Oq7Rk9YC`vF?p-cZ9z(8?;U= zng6Qon$j|pT{FvHu?IZeI>V_vGFWQmrzq3QD=Tb6_pV>}ZhuF!zJtq?3ai~6tT3|~ z{<+Rz$=dp3x7>5nnYICUmn~&7_hG6&xo*;1zPQDH-m5;CTDcqK= z$}Rm78fRYh`&G=hAM2i3{j`5@J#BK}ZEXez^ScaH89tJ8SvTr{jQ4c)b6Mw<&;$Tp CIfPgM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..257c0af83a37a8709c0cc141087876f6ac801a2c GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zSv*}FLn`LH zy=9wq*g>G};Y3c0skdbg7_zK1@|&)vS=t!7JvU?Ve{VCP+)%aY-@hISS=s9q{{7yVr>>dC2 zud8JDQBSD1__dr7Vm^?}yIk-lN7k|Z&E8u&&EHIVkGG#%Bug?d(*mp1d!OM?|DSQkLJof*L VyjA?29vFk{@O1TaS?83{1OTYPkpBPx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png index cf6e4684e9c4c97a7ab764f319a7cd6440eb1919..b4d4d86dd562790d26fab9178584d68f56e0a63c 100644 GIT binary patch delta 446 zcmV;v0YUz(0@wqPB!2;OQb$4nuFf3k0004!NklYU6bA6G+L)mV6$*-j zpcXBP;-X+ET|$;leFPuC(aqT{;F4MT0)jYnDP0RbfZ*U%sMt{2w9+IZc%53>Lh(;d zJLvbDk|7@_hkNgGEkP@A5J#={3|)(%R(BBwy-2z3mWz)6ica@UsM1klTcF)? zky=g;-f!+60Dl0Nk57@efFA@=BPJ3(R4y{AOd=v8A|fIpA|fIpBBF?F z!-zBu{)u8CuZHg<{D#)O z)5FQtb) literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1G6o zi(^Q|oVT|Q@*Xk}aJeYoY4@VREJH~*fLHedOYQ|nEkmPAaXXBrMV$Q;?6>-dY8c-~ z&d*E@m5c}WFeJn=80a(15N9~U&G3ws;WN_$xr#U21Ft_nUi*7{<$X`aXJ`9Pe=Xj- zciyI*rk`&}X0@nBJM8>1E1cui6Nar7S0~RZel~ll+u9`z+TUKB+PS%g71cN#wm3W% zNoT*swBnr77SYU6bA4w+L)obITR70 zT5M6QA}AP2myo4XAHfH3bnEO^aOo_41Sc2KN%{&pI29^3lr;U9#OXTJN|!XzCK~bk zO@Vv391h_u_XCKCh=_=Yi0HqO{0i#jl9+s-Uf=lE|F)W@i+{7b+rWJ;%sQ->OQLv` zLpGhl!S)(znl5J5$HCra5>-_V+^6RNYML(eLLTjog_UImtycq?jb!YHu&Bt`-C7Mi z1kVAu&Irwx0Y#S3Y`#EQN?>GLaGgJwfE=Z%I`F%1C#hx_Yr zTwpL9qH9_qwSO9o!Ds;6aRS!|S{9XD=JR*DczTZYBAoOZ_dbb;h=_=Yh=_=Yh=}M< zsh3M)IzJG#uRMDPH8UUJC!0>8c$C9W456y3qIjGM{oc6-aB_JiwL2E{LO#;mKvh+R zR@i}UyP@Ab*8l*F^8+m-(%eATG|;p9kQF)fyFK#(K{VYzJOUW!3Fhv`!^cy1{E{hA lEG0kFSp^~@A|j&idj~1}evdjCB?SNg002ovPDHLkV1n??&2Inz literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fAQ1F$f zi(^Q|oVT|Q@-`VrxPNqiB$x9*O79_;-(xPlhf;YDRA#7sTNd;{;q34KesT*m&-WL+ zWZcQ(pvO4Do8gHN0}6A-?gy3oe7=6K*v+M>$M;J7 zgBvzQ#O`2U%O8J+P2+!s=I)e>^{am8%)PRVQ^LC9d$;NDGvTO)Vz(-yIywJ2+rFD7 zjC&MAJUo&{R L`njxgN@xNAKc#tm diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d0187579a309c3c40145ad7acac3c3c34b8072ab GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|GCf@!Ln`LH zy|t0E!9alZ!kOgdYad%QS4VN=B`Hg+=2@^)q47K0kAnSwrwaj?SPcUMOUBpw54Ym^xdS&>o9?z{xUic&GF(yE S*8ZUrNQI}XpUXO@geCxj06vib literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfafd118d094ee7d309079fcfd50b503d69629f GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|GCW-zLn`LH zy|t0E!9jrK!207p!KXK}{WcMJbHwFCuiZtLCl76BtW3ziymtyvIRit*tlx&)&wV&{ zg}1bL+Trub{DB9y=~*uAa&@u%vrdE&tcJnC!WOa{-k~D`(@6+5D?=Ss3=^W RWw{Wfz|+;wWt~$(69BYSKK1|r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1d73edaf033b05339656cf7bd225803c121b0231 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|rhB?LhE&XX zdvhW0p#Txq3+zm-8f=ccT-;ZOx*xsmC) zt2I{z-eL#qVp!0>ZO!H7)9)zopr020$%(AYu`VmZQ*-n7k^l@!0WSxz5k)I5}wt6-(~(?Kh;w#{jrM4ax;GE{-b6Mw<&;$Upc3cMl literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d889b5defdd19d8f0712a74ed15cd4bd2aecd7 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|K6$!0hE&XX zdrOy#$x-6i$8bYQ7m?;jk(Si%i#yhA|G;+7@f%;Y@Zt)V?in#IJar8mU7L;>O7bi^ zw@2&H|8TXlhd=O5o+ro%GztW6bl05!6P)K~ti$JYIZMRV#b^25DIeb`?7e94cv85Q zjOxtgLF=Eos#T@$J(x9#-qtD#k%@56GhZU5}?q1`?Hq1To-AAS+{_V$@YUis}d*V)KAKSYGsAYk41bbMQ_{8t5Mo-ZBN>i{_0%xEZo-aKRW|M*}C)-eitYEd7J~8>*?y}vd$@?2>@<6 Bg8u*j literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2e3131504dcebfff771e27edc28bc3310de4e9 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z**#qxLn`LH zy=9xl4|K<6Wj1U_b7#bGsF5}hfO?q5){?5OKJqo?c?azv(dL~b=T*GvK zvfI0Bo4>KY+59VZr*~mX&Rosjr1bRGF|+kk-u~Lr6@B%=%D>DE acWyE$b_VdwTJBj7vcS{T&t;ucLK6T{Gmx7A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d63f9e1ef43763e5f8e956252ef54b74c539dd84 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|-gvq=hE&XX zd&`jPkb^+$!_J7PPK6hoEdmD*sqMW{wP=I*2bODc?gmSQy;&V|goJi)-QekUIA_{} z|FRE!C5&#L=>Qr60&8b#Y*FJ{`~LlpqXF6{To%UaE;o|wb#=*^l-3xw&71k{f%K1) zeD_S)_lGl!*W;3o#awx%Pq|Io4qx+izUsC>PrqoZj&N(4o$$(gSrd6*DNhjJ8MAI_ z#$HCxS*+W4y9K$&oUMz$CjzkyNdB3+?plOY>6Ph=>vQGH>y?7nUthLu^6!RqvgO&g v%T(8!G1*+X})oOk#b7%rS*kNNMZyjXqRF_0miu6{1-oD!MtiyH6Ww)2kh!WP44iNe86JPt}<=m?* zB1hxb@jql=cs+BG{oMYqYFAbuZ4NYjSSJ3~|5Zd? zUGhmzhy@G`4HsW#i(b8I8Fo8y%9Q;s_q#pTF0p)j+qO9FJF7j1?b;=g>&2A1Hk)m> sxcGxBW#{fk>>HWNMUw=MGBX(P%Fki*Qj-n3;tVp))78&qol`;+0Qy;YuK)l5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..62b30a5ad5c06013f4f67e7b5d2625496e8c5c94 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zZ9H8ZLn`LH zy|v$)DN*M5$Nof-kS#MWUAl1L-HSUy*NZM(x%TG5EqQ@2>|0zMFR%5>ee^=ZvDwkn zw53ZW>0y6RwbU)GBVV%FKi1`%-}znn&T;3SM2m7fl4}#`tIV@%~1Ze=-r<=p6|6M^G;au=aW-O?{?pIFO$CT@|$k4a%TB0;l2504Pm>N|31DfG%scP(NFW| db29wUw_`Z`JI#GNKi@x)`JS$RF6*2UngB+tv~&Of literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5e3a70582f10ec3adbef8a065d497bd2de4ed9 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z9XwqeLn`LH zy|vftZ~#Nw!}UP{0&|yaneD;;y>Bmbr}qKP9TlwW;u^#iJN#~{1RpqiGSV@_I^@E_ zTTwb%x8!@iR~qtfj@`JWsTpqt^62!yoT*~+BJ8JqVj)N zrpuLFE|(3~c{25MN@-c0=H;rejT5HpAFptnA*EYtbFFH<)yJ~4$Fi2RFXum6s&~ZJ zVEV~b_i{WYy*k@gG&9F(<>QOdQCHG_#p*|Gvy!)V*claA5jaV_W#xxOONzD{6+N-2 zbeyqk)z+>1KBbo0)ivC{cHniSss3Dun}Fm2n;rId=D+yQwD0wd+0A=h?u-8}ED7+L zq-Mj|{C4e;WAarDp07%*Jxe2Ae|xj<_id@nhS#5xgJiG0%gWCx hU(~r@oZ*A~Uxqs$(mr0k?7bgkg{P~Z%Q~loCII(ZuuuR1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json index 354132ea110..a9112535f82 100644 --- a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json @@ -1,80 +1,128 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af", + "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "appendix" - }, - { - "name": "appendix-inflamed" - }, - { - "name": "brain" - }, - { - "name": "brain-inhand-left", - "directions": 4 - }, - { - "name": "brain-inhand-right", - "directions": 4 - }, - { - "name": "ears" - }, - { - "name": "eyeball-l" - }, - { - "name": "eyeball-r" - }, - { - "name": "heart-off" - }, - { - "name": "heart-on", - "delays": [ - [ - 0.6, - 0.1, - 0.1 - ] - ] - }, - { - "name": "kidney-l" - }, - { - "name": "kidney-r" - }, - { - "name": "liver" - }, - { - "name": "lung-l" - }, - { - "name": "lung-r" - }, - { - "name": "stomach" - }, - { - "name": "tongue" - }, - { - "name": "muscle" - }, - { - "name": "nerve" - }, - { - "name": "vessel" - } - ] + "states": [ + { + "name": "appendix" + }, + { + "name": "appendix-inflamed" + }, + { + "name": "brain" + }, + { + "name": "brain-inhand-left", + "directions": 4 + }, + { + "name": "brain-inhand-right", + "directions": 4 + }, + { + "name": "ears" + }, + { + "name": "eyeballs-inhand-left", + "directions": 4 + }, + { + "name": "eyeballs-inhand-right", + "directions": 4 + }, + { + "name": "eyeball-l" + }, + { + "name": "eyeball-r" + }, + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + }, + { + "name": "kidneys-inhand-left", + "directions": 4 + }, + { + "name": "kidneys-inhand-right", + "directions": 4 + }, + { + "name": "kidney-l" + }, + { + "name": "kidney-r" + }, + { + "name": "liver" + }, + { + "name": "liver-inhand-left", + "directions": 4 + }, + { + "name": "liver-inhand-right", + "directions": 4 + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 + }, + { + "name": "lung-l" + }, + { + "name": "lung-r" + }, + { + "name": "stomach" + }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 + }, + { + "name": "tongue" + }, + { + "name": "muscle" + }, + { + "name": "nerve" + }, + { + "name": "vessel" + } + ] } diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a346078b4a8b75a6ac493c6a8214809c98c5928c GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zjSu0j0as|T)AuAFo&2;wf|>Ik|r zy=_OCfbPl4!Vmv%7tj0fEZMT31!y=3WW0M;vb%4hwauNbNwaq{U*8mJJAeKa|Lxyz z?bzdY>lyE_y;kujr|RCw4-INz<_Mh-cmK}DS#2wAgC_-*Cs=BUu3AuXQu^<|pNVI? zS6STHQn&u-I`jN#e|aY?+48#A_tUlgLJ)g^6`yV0@U?q&$|s}1U3Usy&#AsG3+eMZZRVAI xG;WXF|KmG#zX`5!t=sg&od4k7eg=mB$Hapbycbt#OKE{D^mO%eS?83{1OVPHoaO)k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..001203bdc380b63e245562f33da55a0483e54ba6 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zl{{S>Ln`LH zy|v%#h=aiKk0EE<<@9z3tyNmHl{@(DtUzx8go0NCg(>lM| znfK+>pQitoZvK3@{^Ec6wDfnCbE6!5=bZZ2larHM3$Y7G9$2Qy{rPU?itY2)`7hp= zd6)l(&iYqtG`WrM&OY_1P|&zr`2NT3z8|g_Ki${xUhIT_lbr%ke(v@~YKtQ*=dAeX z@g?Z=!Lzx)KIX5Q%Q*k${_Y229$SqMypd;6s$ze#-G36trFQ}#+dN(UT-G@yGywqS C=%hga literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png index a536818eee96f7113aee27ab26ae8fe27c4670ce..c0c260afced206acf2ce79c0dd41f0543a693176 100644 GIT binary patch delta 386 zcmaFDxRQB-K|N!#r;B4q#hkad6#Wl7NU%L9HxF_=CM0BZ`HYXQFo%#E)1T&r>sN3# zt-8@abB4=JLU zQQVxJ?pEPO=WkBp>8>hV7NslmE^Nc}T856ziS+@KPSo?hHf`j(uDNo-3h{Jz_1rfh ztA9QH$@$pi!rX8BzE3aK&p+HYZI!A28bAj;*=f;-ouPg5qFTZ0p z$-=(_3aY_$i%4nz|I1PPUU$azF*!u6&t1ZqC$_M-=D}3udkoTMB^P~9oL4G2ufJE% z=cx39XUt2A_s?E4#V+*yJ!9rY%0>(Zv(GiYydzRM)%Fd)m*9lEVp|X7=YC@NbK0~M dX#NZPA1sc_RjLxTbu%de0001RE|=)QF86bJKl{8o|Ms}g^*Dv)eY-}6b-ACbrcG7T zhGo{{luG8Z+$f<16z}2n(|Jqb1(acCn-^tvBlj5Q>n+!KqWRlCFYqMHJdNXqIBy#3pG9?+1a9gu9ow-X9<$A|fIp zA|hJhcy1V7yUvnC+MHt3Vpg|}PS1pBHd8OY3r4+`Dral~j(_Kdmf6B+soTNp3y!N* zyVEmEUxG3kcA64m3z#c~kvOs|vx!tj!>-IGa=Z}sT&e8R<{-+O^!vlO7k4+e+652- z!1>9kd=@%B{Rf#v$UMCX9j$|<^b>v`TLAD=!tZVP$FoxUmuy!R)#bHT#N0si^J$K~liI2P z05}t0a=Z|k2U``*C}h3v+T-yg?jN53K<0TIJ?sxO2MFKu+Tg!-F)mZ~5gj5TA|l!s Y-&gT<=$HUKg8%>k07*qoM6N<$f^|!-RR910 delta 180 zcmZ3;e1~y@K|RAXPZ!6KiaBp@ZRBk>5MT{ZH@$sfgRpaiT+`f3DYL&UDRN{q>k~bYmD*Y7NmSZ>gB`Prv<6QKB-t*f{y zY~{}`Tvwo$zp>$u^w%J#b2kqcvw}1;Fzj1i*>L0by#w=fSAG03FYX&#UrmUEzVc_~ gv#ejXnFAF>=l>Vc;y>ov=L1si>FVdQ&MBb@0I2>^JaYEYRxF&^+)w}nyI)CDoxfWEQ zaL2RWZSZ90RaQ$!&_!`#~sdZUFy`9X_~xp z%Y2)Szk<#detxCr>EbrKzHW!T%(^vsa&za|zJ2p<>z=-~x3+qzWn6!KW0n1sh?gc4 zg)giNHHteP7Au;Y+5G+bx-PbRe=5wUdHtRxc56b!Yn6$N63ec>IV!yGoz<&%n}jaL zx_^DdY5&4J@yb`LZM)WnPE);R<@tu?#k$4E=D%F0T*Rcd8{#w&DW)I3&aCge{FVdQ I&MBb@00|klB>(^b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c6ba485ed83a6745148e0164e423579f6642d7 GIT binary patch literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zqdi?5Ln`LH zy=Callqhrj-Ip3Mpb6~r|xpnsneD^ZA#y1r#So`jq7|%)DBT-y@ zEti%2XL&KL*X+>P`^L)uN8PdA?d|tJKi>KBpA*m$5IDfUY1hTba<=`hd-Se&9W$AD z&LUCYQCsrz{WalYd(XUbQwNIpe=k?(FE$tJ*O>gb`S81p3)A;5oB2EVQvIT-J((eb z*E>s&eVkPMkoSe@**icO>jil?ZAGSsWIfR*8Jx)0lnCpFS z-t54u+n!j=bG-8#vZ6nIHom&esg~I;$IB1mKp>eQEb^+iY=XU4 z_taU@E6i`zy?a^d@JRdZmos0DPwZL~(;(o)Vyk^&)wHQ|PbS|x|0!Hg;g{KNo~p0~ z5i56wPkh_G_{O~a>UA*($~QARTFl%3B>L*7Ll@;381_`M|5tCe*4TN<5oDRCtDnm{ Hr-UW|zX-d# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json index cacfcdc40bb..451ab138dfa 100644 --- a/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprited by Nimfar11 (Github) for Space Station 14", + "copyright": "Sprited by Nimfar11 (Github) for Space Station 14, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -15,8 +15,16 @@ "directions": 4 }, { - "name": "brain-inhand-right", - "directions": 4 + "name": "brain-inhand-right", + "directions": 4 + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 }, { "name": "lung-l-slime" diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae28e9594565f346a2e79c80d4e0a135f00e7a1 GIT binary patch literal 408 zcmV;J0cZY+P)Px$Qb|NXR9J=Wl)X*@K@>*M@U!lM1cjhRC5B$KvM0t66ADR4OlW-vo`Raz)`Y~u z#uzH%E7(J$^nkmwE-Pz6B+@O65{o(Y%zS6=y}6*#Xfz5`E3H8FjfhJ4PWDt;Vkv=Y zr4`g`?RlW*dn(xg#KImdmzu%eZi&p+Hs2CP%)l~pN&=xPkVq!jw6YlS4Ni_PfZwS= zXaUR2AtKbA*^(8IJq- z6UlJgR}u&{gw;wb$mh@SCq7aFL;)Dv1EuiL0*>u48aWv8DUd`;aO`&;o^FJyKPk-G=D(9v37;RPs4>5K*a;&r&@smzwk6 z?jIC!rGsfD7`(mE={8oHhn0uur_8G18jVKtFZcqB@_9O7FLdqz0000Px$PDw;TR9J=WlQB!fKp2MKOF~GZrC^PU3MISM!POy%6v06u5XcYlS9ErD4Fs|} zIEjD3NsxB3dx^=VY1(s;1iSU_KpgIw4vxIj{{jd5K8F5?OTv&5XeMxaa)o)xuxDaNdZcisOuW;?m5?LN^L=$hNQ^9+VZN-Q7uXod9iVZ zltA;+-{l&!xiW+WZm%C%Z)X4iYvn6K|3-l56w6fsqSLkV@%RbPFZUa70@unk4E+&1 yJQ|>+1uWaa^z*H~<0%&wXe2~S6$*voU-1nFW{8h!S=VI%0000Obp& zK3cc_R&cF<3DchgQ+s|-OxtaIHB>-bVXDrGivl-#ZSg&lQbAbAGYU=~C!;*Y_ymlemm4i>}2^(IYn< zHTk-lFMM$-Dq8u)qC_}nvRN)W%8=1*F*^+EZYu))mUJy?^?3>n+x? zQ@TPGo^h^_wee)A_@D7;S)s+YbDhx+J8Ea_4Gcazk0tEaLJ>>j{1Q?d>%e=4>E6#ldsF_=j5Cf792V-Rm(+;I#Do&zt*tj2NdD#mZfu=UjXL z3dpV7tnV6Re?0opWySf~yBH4%eTYe@T`O}_EaGhL<7$C-Wiwv#e3*0bjYCLVf#HWk zZ%Y>_uDoxzUy4EC Date: Mon, 14 Oct 2024 14:59:07 -0700 Subject: [PATCH 069/173] Arcade Prize Additions (#32309) * rearranged existing arcade rewards for clarity and added more * removed tesla toy * removed plushie throngler * removed singularity toy, readded tesla toy * removed tesla toy again :( * Readded accidentally removed PlushieRainbowLizard --- .../Structures/Machines/Computers/arcades.yml | 96 +++++++++++-------- 1 file changed, 58 insertions(+), 38 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index b412714ba02..dda0b40fff7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -72,6 +72,59 @@ rewardMinAmount: 0 rewardMaxAmount: 0 possibleRewards: + - Basketball + - BalloonNT + - BalloonCorgi + - BoxDonkSoftBox + - BoxCartridgeCap + - BeachBall + - CandyBucket + - CrayonBox + - ClothingHeadHatCowboyRed + - FoamCrossbow + - FoamBlade + - FoamCutlass + - Football + - GlowstickBase #green + - GlowstickBlue + - GlowstickYellow + - GlowstickPurple + - GlowstickRed + - HarmonicaInstrument + - OcarinaInstrument + - RecorderInstrument + - GunpetInstrument + - BirdToyInstrument + - MysteryFigureBox + - PlushieHampter + - PlushieLizard + - PlushieRainbowLizard + - PlushieAtmosian + - PlushieSpaceLizard + - PlushieNuke + - PlushieCarp + - PlushieMagicarp + - PlushieHolocarp + - PlushieRainbowCarp + - PlushieRatvar + - PlushieNar + - PlushieSnake + - PlushieArachind + - PlushieMoth + - PlushieHampter + - PlushiePenguin + - PlushieHuman + - PlushieRouny + - PlushieBee + - PlushieSlime + - PlushieGhost + - PlushieDiona + - PlushieSharkBlue + - PlushieVox + - PlushieXeno + - PlasticBanana + - RevolverCapGun + - SnapPopBox - ToyMouse - ToyAi - ToyNuke @@ -91,47 +144,14 @@ - ToySeraph - ToyDurand - ToySkeleton - - FoamCrossbow - - RevolverCapGun - - PlushieHampter - - PlushieLizard - - PlushieAtmosian - - PlushieSpaceLizard - - PlushieRainbowLizard - - PlushieNuke - - PlushieCarp - - PlushieMagicarp - - PlushieHolocarp - - PlushieRainbowCarp - - PlushieRatvar - - PlushieNar - - PlushieSnake - - PlushieArachind - - Basketball - - Football - - PlushieRouny - - PlushieBee - - PlushieSlime - - BalloonNT - - BalloonCorgi - ToySword - - CrayonBox - - BoxDonkSoftBox - - BoxCartridgeCap - - HarmonicaInstrument - - OcarinaInstrument - - RecorderInstrument - - GunpetInstrument - - BirdToyInstrument - - PlushieXeno - - BeachBall - - PlushieMoth - - PlushieHampter + - ToyAmongPequeno + - ToyRubberDuck + - ToyHammer - ToyRenault # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml - ToySiobhan # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml - - PlushiePenguin - - PlushieHuman - - ClothingHeadHatCowboyRed + - WeaponWaterPistol + - WhoopieCushion - Whistle - type: WiresPanel - type: Wires From 08b0b0da4ab79bae4080984a617ef60bbe69c2d8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 14 Oct 2024 22:00:15 +0000 Subject: [PATCH 070/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6477b9081cb..c20c50294fb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: You can no longer get out of a disposal chute or container while knocked - over by trying to walk - type: Fix - id: 7013 - time: '2024-07-30T13:53:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30391 - author: Cojoke-dot changes: - message: QSI now swaps the top most valid container instead of QSI when placed @@ -3914,3 +3906,10 @@ id: 7512 time: '2024-10-14T07:06:18.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32805 +- author: ada-please + changes: + - message: Added more prizes to the Space Villain arcade machine + type: Add + id: 7513 + time: '2024-10-14T21:59:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32309 From 3bd6e3ba2a9f6d9c78c60efaf621c829a94d7890 Mon Sep 17 00:00:00 2001 From: K-Dynamic <20566341+K-Dynamic@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:28:28 +1200 Subject: [PATCH 071/173] Adds nitrogen to engi tank dispenser (#32565) nitrogen to engi tank dispenser --- .../Catalog/VendingMachines/Inventories/tankdispenser.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml index fce18024a7e..188aaf7641a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml @@ -8,4 +8,5 @@ id: TankDispenserEngineeringInventory startingInventory: PlasmaTankFilled: 10 + NitrogenTankFilled: 10 OxygenTankFilled: 10 From fc00011130f5686212778d43f9c1a57399d078af Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 15 Oct 2024 08:29:36 +0000 Subject: [PATCH 072/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c20c50294fb..75dbee7a7f9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: QSI now swaps the top most valid container instead of QSI when placed - in an anchored container - type: Fix - id: 7014 - time: '2024-07-30T14:07:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30241 - author: TheShuEd changes: - message: industrial ore processor can now process diamonds @@ -3913,3 +3905,10 @@ id: 7513 time: '2024-10-14T21:59:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32309 +- author: K-Dynamic + changes: + - message: Added nitrogen tanks to engineering tank dispensers. + type: Add + id: 7514 + time: '2024-10-15T08:28:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32565 From 827b65ffdfe15882f164a18f95bbbae598ba6eb2 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Wed, 16 Oct 2024 05:57:30 +0200 Subject: [PATCH 073/173] Fix plant holder double solution transfer (#32813) --- .../Botany/Systems/PlantHolderSystem.cs | 31 ------------------- .../components/plant-holder-component.ftl | 2 -- 2 files changed, 33 deletions(-) diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 0fdca029b79..fa032656921 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -228,37 +228,6 @@ private void OnInteractUsing(Entity entity, ref InteractUs return; } - if (_solutionContainerSystem.TryGetDrainableSolution(args.Used, out var solution, out _) - && _solutionContainerSystem.ResolveSolution(uid, component.SoilSolutionName, ref component.SoilSolution) - && TryComp(args.Used, out SprayComponent? spray)) - { - var amount = FixedPoint2.New(1); - - var targetEntity = uid; - var solutionEntity = args.Used; - - _audio.PlayPvs(spray.SpraySound, args.Used, AudioParams.Default.WithVariation(0.125f)); - - var split = _solutionContainerSystem.Drain(solutionEntity, solution.Value, amount); - - if (split.Volume == 0) - { - _popup.PopupCursor(Loc.GetString("plant-holder-component-no-plant-message", - ("owner", args.Used)), args.User); - return; - } - - _popup.PopupCursor(Loc.GetString("plant-holder-component-spray-message", - ("owner", uid), - ("amount", split.Volume)), args.User, PopupType.Medium); - - _solutionContainerSystem.TryAddSolution(component.SoilSolution.Value, split); - - ForceUpdateByExternalCause(uid, component); - - return; - } - if (_tagSystem.HasTag(args.Used, "PlantSampleTaker")) { if (component.Seed == null) diff --git a/Resources/Locale/en-US/botany/components/plant-holder-component.ftl b/Resources/Locale/en-US/botany/components/plant-holder-component.ftl index 0e8c4137f4e..ca20c277f53 100644 --- a/Resources/Locale/en-US/botany/components/plant-holder-component.ftl +++ b/Resources/Locale/en-US/botany/components/plant-holder-component.ftl @@ -8,8 +8,6 @@ plant-holder-component-no-weeds-message = This plot is devoid of weeds! It doesn plant-holder-component-remove-plant-message = You remove the plant from the {$name}. plant-holder-component-remove-plant-others-message = {$name} removes the plant. plant-holder-component-no-plant-message = There is no plant to remove. -plant-holder-component-empty-message = {$owner} is empty! -plant-holder-component-spray-message = You spray {$owner}. plant-holder-component-transfer-message = You transfer {$amount}u to {$owner}. plant-holder-component-nothing-to-sample-message = There is nothing to take a sample of! plant-holder-component-already-sampled-message = This plant has already been sampled. From 6548c98533c32457727c04ab6d4b262d5f795d68 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 16 Oct 2024 03:58:37 +0000 Subject: [PATCH 074/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 75dbee7a7f9..7ef28fdab9e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: industrial ore processor can now process diamonds - type: Fix - id: 7015 - time: '2024-07-30T14:41:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30499 - author: PJB3005 changes: - message: CLF3 is now called "chlorine trifluoride" @@ -3912,3 +3905,11 @@ id: 7514 time: '2024-10-15T08:28:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32565 +- author: slarticodefast + changes: + - message: Fixed inconsistent solution transfer amounts from spray bottles to plant + holders. + type: Fix + id: 7515 + time: '2024-10-16T03:57:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32813 From 03a54bee7e4921283d2a758912a425ac3681eaf6 Mon Sep 17 00:00:00 2001 From: Minemoder5000 Date: Wed, 16 Oct 2024 03:04:55 -0700 Subject: [PATCH 075/173] New reptile sounds (#32064) * Adds emotes to the Reptilian species: Tailthump, Hiss Todo: Huff * Adds emotes to the Reptilian species: Tailthump, Hiss Todo: Huff * Added ReptilianBodyEmotes to speech_emote_sounds.yml, yada yada yada * added sound and changed volume * fix thingies * fixed bug with reptilians not being able to do default emotes * lowered the volume of the hiss and huff * reformat the yml * Add sigh keywords to the huff * Undo changes to BuildChecker.csproj * Add icons to the emotes * Remove sigh triggers from the huff emote since it breaks normal sighing. * Remove the Huff and Hiss since i cant find good audio for it * i forgor * Changed attribution * Credit Sarahon for the tailslap --------- Co-authored-by: nicho --- .../Audio/Voice/Reptilian/attritbutions.yml | 5 ++++ .../Voice/Reptilian/reptilian_tailthump.ogg | Bin 0 -> 31956 bytes Resources/Locale/en-US/chat/emotes.ftl | 2 ++ .../Prototypes/Entities/Mobs/NPCs/animals.yml | 3 +++ .../Entities/Mobs/Species/reptilian.yml | 3 +++ .../Prototypes/Voice/speech_emote_sounds.yml | 16 +++++++++++ Resources/Prototypes/Voice/speech_emotes.yml | 25 ++++++++++++++++++ .../Interface/Emotes/attributions.yml | 5 ++++ .../Textures/Interface/Emotes/tailslap.png | Bin 0 -> 370 bytes 9 files changed, 59 insertions(+) create mode 100644 Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg create mode 100644 Resources/Textures/Interface/Emotes/tailslap.png diff --git a/Resources/Audio/Voice/Reptilian/attritbutions.yml b/Resources/Audio/Voice/Reptilian/attritbutions.yml index 7e8b2a0ce39..7fa86b2ebfc 100644 --- a/Resources/Audio/Voice/Reptilian/attritbutions.yml +++ b/Resources/Audio/Voice/Reptilian/attritbutions.yml @@ -2,3 +2,8 @@ copyright: '"scream_lizard.ogg" by Skyrat-SS13' license: source: https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 + +- files: [reptilian_tailthump.ogg] + copyright: "Taken from https://freesound.org/" + license: "CC0-1.0" + source: https://freesound.org/people/TylerAM/sounds/389665/ \ No newline at end of file diff --git a/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg b/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e4bf25f7b8d1e743e34826b343f33e41e9298e16 GIT binary patch literal 31956 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 Date: Wed, 16 Oct 2024 10:06:03 +0000 Subject: [PATCH 076/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7ef28fdab9e..eb148384472 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: PJB3005 - changes: - - message: CLF3 is now called "chlorine trifluoride" - type: Tweak - id: 7016 - time: '2024-07-31T00:14:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30510 - author: slarticodefast changes: - message: Fixed the mouse position when it is over a singularity distortion effect @@ -3913,3 +3906,10 @@ id: 7515 time: '2024-10-16T03:57:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32813 +- author: Minemoder, ArtisticRoomba, Sarahon + changes: + - message: Reptiles and Kobolds can now thump their tail. + type: Add + id: 7516 + time: '2024-10-16T10:04:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32064 From a5bcbcf9f4dc3237d97dd6826d2f73c47848ec2d Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:23:25 +0200 Subject: [PATCH 077/173] Fix uplink name (#32846) --- Resources/Locale/en-US/store/uplink-catalog.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 06ab5564c9e..df0222e4651 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -450,7 +450,7 @@ uplink-cameraBug-desc = A portable device that allows you to view the station's uplink-combat-bakery-name = Combat Bakery Kit uplink-combat-bakery-desc = A kit of clandestine baked weapons. Contains a baguette sword, a pair of throwing croissants, and a syndicate microwave board for making more. Once the job is done, eat the evidence. -uplink-business-card-name = Syndicate business card. +uplink-business-card-name = Syndicate Business Card uplink-business-card-desc = A business card that you can give to someone to demonstrate your involvement in the syndicate or leave at the crime scene in order to make fun of the detective. You can buy no more than three of them. # Objectives # DeltaV, reverted upstream From b9b3b0dfd2a368fbf661ffcb14faacabffa52247 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:24:31 -0400 Subject: [PATCH 078/173] Fix omega cursed smite code. (#32844) * le fixo smotes * CURSE OF BLINDNESS * Guh --- .../Systems/AdminVerbSystem.Smites.cs | 188 +++++++++++------- .../Locale/en-US/administration/smites.ftl | 66 +++--- 2 files changed, 148 insertions(+), 106 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index d108c29975a..78362390811 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -98,9 +98,10 @@ private void AddSmiteVerbs(GetVerbsEvent args) if (HasComp(args.Target) || HasComp(args.Target)) return; + var explodeName = Loc.GetString("admin-smite-explode-name").ToLowerInvariant(); Verb explode = new() { - Text = "admin-smite-explode-name", + Text = explodeName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/smite.svg.192dpi.png")), Act = () => @@ -114,13 +115,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _bodySystem.GibBody(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-explode-description") + Message = string.Join(": ", explodeName, Loc.GetString("admin-smite-explode-description")) // we do this so the description tells admins the Text to run it via console. }; args.Verbs.Add(explode); + var chessName = Loc.GetString("admin-smite-chess-dimension-name").ToLowerInvariant(); Verb chess = new() { - Text = "admin-smite-chess-dimension-name", + Text = chessName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Tabletop/chessboard.rsi"), "chessboard"), Act = () => @@ -140,12 +142,13 @@ private void AddSmiteVerbs(GetVerbsEvent args) xform.WorldRotation = Angle.Zero; }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-chess-dimension-description") + Message = string.Join(": ", chessName, Loc.GetString("admin-smite-chess-dimension-description")) }; args.Verbs.Add(chess); if (TryComp(args.Target, out var flammable)) { + var flamesName = Loc.GetString("admin-smite-set-alight-name").ToLowerInvariant(); Verb flames = new() { Text = "admin-smite-set-alight-name", @@ -163,14 +166,15 @@ private void AddSmiteVerbs(GetVerbsEvent args) Filter.PvsExcept(args.Target), true, PopupType.MediumCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-set-alight-description") + Message = string.Join(": ", flamesName, Loc.GetString("admin-smite-set-alight-description")) }; args.Verbs.Add(flames); } + var monkeyName = Loc.GetString("admin-smite-monkeyify-name").ToLowerInvariant(); Verb monkey = new() { - Text = "admin-smite-monkeyify-name", + Text = monkeyName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Animals/monkey.rsi"), "monkey"), Act = () => @@ -178,13 +182,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminMonkeySmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-monkeyify-description") + Message = string.Join(": ", monkeyName, Loc.GetString("admin-smite-monkeyify-description")) }; args.Verbs.Add(monkey); + var disposalBinName = Loc.GetString("admin-smite-garbage-can-name").ToLowerInvariant(); Verb disposalBin = new() { - Text = "admin-smite-electrocute-name", + Text = disposalBinName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Structures/Piping/disposal.rsi"), "disposal"), Act = () => @@ -192,16 +197,17 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminDisposalsSmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-garbage-can-description") + Message = string.Join(": ", disposalBinName, Loc.GetString("admin-smite-garbage-can-description")) }; args.Verbs.Add(disposalBin); if (TryComp(args.Target, out var damageable) && HasComp(args.Target)) { + var hardElectrocuteName = Loc.GetString("admin-smite-electrocute-name").ToLowerInvariant(); Verb hardElectrocute = new() { - Text = "admin-smite-creampie-name", + Text = hardElectrocuteName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Hands/Gloves/Color/yellow.rsi"), "icon"), Act = () => @@ -237,16 +243,17 @@ private void AddSmiteVerbs(GetVerbsEvent args) TimeSpan.FromSeconds(30), refresh: true, ignoreInsulation: true); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-electrocute-description") + Message = string.Join(": ", hardElectrocuteName, Loc.GetString("admin-smite-electrocute-description")) }; args.Verbs.Add(hardElectrocute); } if (TryComp(args.Target, out var creamPied)) { + var creamPieName = Loc.GetString("admin-smite-creampie-name").ToLowerInvariant(); Verb creamPie = new() { - Text = "admin-smite-remove-blood-name", + Text = creamPieName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Consumable/Food/Baked/pie.rsi"), "plain-slice"), Act = () => @@ -254,16 +261,17 @@ private void AddSmiteVerbs(GetVerbsEvent args) _creamPieSystem.SetCreamPied(args.Target, creamPied, true); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-creampie-description") + Message = string.Join(": ", creamPieName, Loc.GetString("admin-smite-creampie-description")) }; args.Verbs.Add(creamPie); } if (TryComp(args.Target, out var bloodstream)) { + var bloodRemovalName = Loc.GetString("admin-smite-remove-blood-name").ToLowerInvariant(); Verb bloodRemoval = new() { - Text = "admin-smite-vomit-organs-name", + Text = bloodRemovalName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Fluids/tomato_splat.rsi"), "puddle-1"), Act = () => @@ -276,7 +284,7 @@ private void AddSmiteVerbs(GetVerbsEvent args) Filter.PvsExcept(args.Target), true, PopupType.MediumCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-remove-blood-description") + Message = string.Join(": ", bloodRemovalName, Loc.GetString("admin-smite-remove-blood-description")) }; args.Verbs.Add(bloodRemoval); } @@ -284,9 +292,10 @@ private void AddSmiteVerbs(GetVerbsEvent args) // bobby... if (TryComp(args.Target, out var body)) { + var vomitOrgansName = Loc.GetString("admin-smite-vomit-organs-name").ToLowerInvariant(); Verb vomitOrgans = new() { - Text = "admin-smite-remove-hands-name", + Text = vomitOrgansName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new("/Textures/Fluids/vomit_toxin.rsi"), "vomit_toxin-1"), Act = () => @@ -308,13 +317,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) Filter.PvsExcept(args.Target), true, PopupType.MediumCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-vomit-organs-description") + Message = string.Join(": ", vomitOrgansName, Loc.GetString("admin-smite-vomit-organs-description")) }; args.Verbs.Add(vomitOrgans); + var handsRemovalName = Loc.GetString("admin-smite-remove-hands-name").ToLowerInvariant(); Verb handsRemoval = new() { - Text = "admin-smite-remove-hand-name", + Text = handsRemovalName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/remove-hands.png")), Act = () => @@ -330,13 +340,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) Filter.PvsExcept(args.Target), true, PopupType.Medium); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-remove-hands-description") + Message = string.Join(": ", handsRemovalName, Loc.GetString("admin-smite-remove-hands-description")) }; args.Verbs.Add(handsRemoval); + var handRemovalName = Loc.GetString("admin-smite-remove-hand-name").ToLowerInvariant(); Verb handRemoval = new() { - Text = "admin-smite-pinball-name", + Text = handRemovalName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/remove-hand.png")), Act = () => @@ -353,13 +364,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) Filter.PvsExcept(args.Target), true, PopupType.Medium); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-remove-hand-description") + Message = string.Join(": ", handRemovalName, Loc.GetString("admin-smite-remove-hand-description")) }; args.Verbs.Add(handRemoval); + var stomachRemovalName = Loc.GetString("admin-smite-stomach-removal-name").ToLowerInvariant(); Verb stomachRemoval = new() { - Text = "admin-smite-yeet-name", + Text = stomachRemovalName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Species/Human/organs.rsi"), "stomach"), Act = () => @@ -373,13 +385,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) args.Target, PopupType.LargeCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-stomach-removal-description"), + Message = string.Join(": ", stomachRemovalName, Loc.GetString("admin-smite-stomach-removal-description")) }; args.Verbs.Add(stomachRemoval); + var lungRemovalName = Loc.GetString("admin-smite-lung-removal-name").ToLowerInvariant(); Verb lungRemoval = new() { - Text = "admin-smite-become-bread-name", + Text = lungRemovalName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Species/Human/organs.rsi"), "lung-r"), Act = () => @@ -393,16 +406,17 @@ private void AddSmiteVerbs(GetVerbsEvent args) args.Target, PopupType.LargeCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-lung-removal-description"), + Message = string.Join(": ", lungRemovalName, Loc.GetString("admin-smite-lung-removal-description")) }; args.Verbs.Add(lungRemoval); } if (TryComp(args.Target, out var physics)) { + var pinballName = Loc.GetString("admin-smite-pinball-name").ToLowerInvariant(); Verb pinball = new() { - Text = "admin-smite-ghostkick-name", + Text = pinballName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/toys.rsi"), "basketball"), Act = () => @@ -430,13 +444,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _physics.SetAngularDamping(args.Target, physics, 0f); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-pinball-description") + Message = string.Join(": ", pinballName, Loc.GetString("admin-smite-pinball-description")) }; args.Verbs.Add(pinball); + var yeetName = Loc.GetString("admin-smite-yeet-name").ToLowerInvariant(); Verb yeet = new() { - Text = "admin-smite-nyanify-name", + Text = yeetName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")), Act = () => @@ -460,11 +475,12 @@ private void AddSmiteVerbs(GetVerbsEvent args) _physics.SetAngularDamping(args.Target, physics, 0f); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-yeet-description") + Message = string.Join(": ", yeetName, Loc.GetString("admin-smite-yeet-description")) }; args.Verbs.Add(yeet); } + var breadName = Loc.GetString("admin-smite-become-bread-name").ToLowerInvariant(); // Will I get cancelled for breadName-ing you? Verb bread = new() { Text = "admin-smite-kill-sign-name", @@ -475,10 +491,11 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminBreadSmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-become-bread-description") + Message = string.Join(": ", breadName, Loc.GetString("admin-smite-become-bread-description")) }; args.Verbs.Add(bread); + var mouseName = Loc.GetString("admin-smite-become-mouse-name").ToLowerInvariant(); Verb mouse = new() { Text = "admin-smite-cluwne-name", @@ -489,15 +506,16 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminMouseSmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-become-mouse-description") + Message = string.Join(": ", mouseName, Loc.GetString("admin-smite-become-mouse-description")) }; args.Verbs.Add(mouse); if (TryComp(args.Target, out var actorComponent)) { + var ghostKickName = Loc.GetString("admin-smite-ghostkick-name").ToLowerInvariant(); Verb ghostKick = new() { - Text = "admin-smite-anger-pointing-arrows-name", + Text = ghostKickName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/gavel.svg.192dpi.png")), Act = () => @@ -505,15 +523,18 @@ private void AddSmiteVerbs(GetVerbsEvent args) _ghostKickManager.DoDisconnect(actorComponent.PlayerSession.Channel, "Smitten."); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-ghostkick-description") + Message = string.Join(": ", ghostKickName, Loc.GetString("admin-smite-ghostkick-description")) + }; args.Verbs.Add(ghostKick); } - if (TryComp(args.Target, out var inventory)) { + if (TryComp(args.Target, out var inventory)) + { + var nyanifyName = Loc.GetString("admin-smite-nyanify-name").ToLowerInvariant(); Verb nyanify = new() { - Text = "admin-smite-dust-name", + Text = nyanifyName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Head/Hats/catears.rsi"), "icon"), Act = () => @@ -524,13 +545,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _inventorySystem.TryEquip(args.Target, ears, "head", true, true, false, inventory); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-nyanify-description") + Message = string.Join(": ", nyanifyName, Loc.GetString("admin-smite-nyanify-description")) }; args.Verbs.Add(nyanify); + var killSignName = Loc.GetString("admin-smite-kill-sign-name").ToLowerInvariant(); Verb killSign = new() { - Text = "admin-smite-buffering-name", + Text = killSignName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Misc/killsign.rsi"), "icon"), Act = () => @@ -538,13 +560,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-kill-sign-description") + Message = string.Join(": ", killSignName, Loc.GetString("admin-smite-kill-sign-description")) }; args.Verbs.Add(killSign); + var cluwneName = Loc.GetString("admin-smite-cluwne-name").ToLowerInvariant(); Verb cluwne = new() { - Text = "admin-smite-become-instrument-name", + Text = cluwneName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Mask/cluwne.rsi"), "icon"), @@ -554,13 +577,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-cluwne-description") + Message = string.Join(": ", cluwneName, Loc.GetString("admin-smite-cluwne-description")) }; args.Verbs.Add(cluwne); + var maidenName = Loc.GetString("admin-smite-maid-name").ToLowerInvariant(); Verb maiden = new() { - Text = "admin-smite-remove-gravity-name", + Text = maidenName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Uniforms/Jumpskirt/janimaid.rsi"), "icon"), Act = () => @@ -573,14 +597,15 @@ private void AddSmiteVerbs(GetVerbsEvent args) }); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-maid-description") + Message = string.Join(": ", maidenName, Loc.GetString("admin-smite-maid-description")) }; args.Verbs.Add(maiden); } + var angerPointingArrowsName = Loc.GetString("admin-smite-anger-pointing-arrows-name").ToLowerInvariant(); Verb angerPointingArrows = new() { - Text = "admin-smite-reptilian-species-swap-name", + Text = angerPointingArrowsName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Interface/Misc/pointing.rsi"), "pointing"), Act = () => @@ -588,13 +613,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-anger-pointing-arrows-description") + Message = string.Join(": ", angerPointingArrowsName, Loc.GetString("admin-smite-anger-pointing-arrows-description")) }; args.Verbs.Add(angerPointingArrows); + var dustName = Loc.GetString("admin-smite-dust-name").ToLowerInvariant(); Verb dust = new() { - Text = "admin-smite-locker-stuff-name", + Text = dustName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Materials/materials.rsi"), "ash"), Act = () => @@ -604,13 +630,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _popupSystem.PopupEntity(Loc.GetString("admin-smite-turned-ash-other", ("name", args.Target)), args.Target, PopupType.LargeCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-dust-description"), + Message = string.Join(": ", dustName, Loc.GetString("admin-smite-dust-description")) }; args.Verbs.Add(dust); + var youtubeVideoSimulationName = Loc.GetString("admin-smite-buffering-name").ToLowerInvariant(); Verb youtubeVideoSimulation = new() { - Text = "admin-smite-headstand-name", + Text = youtubeVideoSimulationName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/Misc/buffering_smite_icon.png")), Act = () => @@ -618,10 +645,11 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-buffering-description"), + Message = string.Join(": ", youtubeVideoSimulationName, Loc.GetString("admin-smite-buffering-description")) }; args.Verbs.Add(youtubeVideoSimulation); + var instrumentationName = Loc.GetString("admin-smite-become-instrument-name").ToLowerInvariant(); Verb instrumentation = new() { Text = "admin-smite-become-mouse-name", @@ -632,13 +660,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminInstrumentSmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-become-instrument-description"), + Message = string.Join(": ", instrumentationName, Loc.GetString("admin-smite-become-instrument-description")) }; args.Verbs.Add(instrumentation); + var noGravityName = Loc.GetString("admin-smite-remove-gravity-name").ToLowerInvariant(); Verb noGravity = new() { - Text = "admin-smite-maid-name", + Text = noGravityName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new("/Textures/Structures/Machines/gravity_generator.rsi"), "off"), Act = () => @@ -649,13 +678,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) Dirty(args.Target, grav); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-remove-gravity-description"), + Message = string.Join(": ", noGravityName, Loc.GetString("admin-smite-remove-gravity-description")) }; args.Verbs.Add(noGravity); + var reptilianName = Loc.GetString("admin-smite-reptilian-species-swap-name").ToLowerInvariant(); Verb reptilian = new() { - Text = "admin-smite-zoom-in-name", + Text = reptilianName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/toys.rsi"), "plushie_lizard"), Act = () => @@ -663,13 +693,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _polymorphSystem.PolymorphEntity(args.Target, "AdminLizardSmite"); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-reptilian-species-swap-description"), + Message = string.Join(": ", reptilianName, Loc.GetString("admin-smite-reptilian-species-swap-description")) }; args.Verbs.Add(reptilian); + var lockerName = Loc.GetString("admin-smite-locker-stuff-name").ToLowerInvariant(); Verb locker = new() { - Text = "admin-smite-flip-eye-name", + Text = lockerName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new ("/Textures/Structures/Storage/closet.rsi"), "generic"), Act = () => @@ -685,10 +716,11 @@ private void AddSmiteVerbs(GetVerbsEvent args) _weldableSystem.SetWeldedState(locker, true); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-locker-stuff-description"), + Message = string.Join(": ", lockerName, Loc.GetString("admin-smite-locker-stuff-description")) }; args.Verbs.Add(locker); + var headstandName = Loc.GetString("admin-smite-headstand-name").ToLowerInvariant(); Verb headstand = new() { Text = "admin-smite-run-walk-swap-name", @@ -699,13 +731,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-headstand-description"), + Message = string.Join(": ", headstandName, Loc.GetString("admin-smite-headstand-description")) }; args.Verbs.Add(headstand); + var zoomInName = Loc.GetString("admin-smite-zoom-in-name").ToLowerInvariant(); Verb zoomIn = new() { - Text = "admin-smite-super-speed-name", + Text = zoomInName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/zoom.png")), Act = () => @@ -714,13 +747,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _eyeSystem.SetZoom(args.Target, eye.TargetZoom * 0.2f, ignoreLimits: true); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-zoom-in-description"), + Message = string.Join(": ", zoomInName, Loc.GetString("admin-smite-zoom-in-description")) }; args.Verbs.Add(zoomIn); + var flipEyeName = Loc.GetString("admin-smite-flip-eye-name").ToLowerInvariant(); Verb flipEye = new() { - Text = "admin-smite-stomach-removal-name", + Text = flipEyeName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/flip.png")), Act = () => @@ -729,13 +763,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) _eyeSystem.SetZoom(args.Target, eye.TargetZoom * -1, ignoreLimits: true); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-flip-eye-description"), + Message = string.Join(": ", flipEyeName, Loc.GetString("admin-smite-flip-eye-description")) }; args.Verbs.Add(flipEye); + var runWalkSwapName = Loc.GetString("admin-smite-run-walk-swap-name").ToLowerInvariant(); Verb runWalkSwap = new() { - Text = "admin-smite-speak-backwards-name", + Text = runWalkSwapName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/run-walk-swap.png")), Act = () => @@ -749,13 +784,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) args.Target, PopupType.LargeCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-run-walk-swap-description"), + Message = string.Join(": ", runWalkSwapName, Loc.GetString("admin-smite-run-walk-swap-description")) }; args.Verbs.Add(runWalkSwap); + var backwardsAccentName = Loc.GetString("admin-smite-speak-backwards-name").ToLowerInvariant(); Verb backwardsAccent = new() { - Text = "admin-smite-lung-removal-name", + Text = backwardsAccentName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/help-backwards.png")), Act = () => @@ -763,13 +799,14 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-speak-backwards-description"), + Message = string.Join(": ", backwardsAccentName, Loc.GetString("admin-smite-speak-backwards-description")) }; args.Verbs.Add(backwardsAccent); + var disarmProneName = Loc.GetString("admin-smite-disarm-prone-name").ToLowerInvariant(); Verb disarmProne = new() { - Text = "admin-smite-disarm-prone-name", + Text = disarmProneName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/Actions/disarm.png")), Act = () => @@ -777,10 +814,11 @@ private void AddSmiteVerbs(GetVerbsEvent args) EnsureComp(args.Target); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-disarm-prone-description"), + Message = string.Join(": ", disarmProneName, Loc.GetString("admin-smite-disarm-prone-description")) }; args.Verbs.Add(disarmProne); + var superSpeedName = Loc.GetString("admin-smite-super-speed-name").ToLowerInvariant(); Verb superSpeed = new() { Text = "admin-smite-garbage-can-name", @@ -795,41 +833,45 @@ private void AddSmiteVerbs(GetVerbsEvent args) args.Target, PopupType.LargeCaution); }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-super-speed-description"), + Message = string.Join(": ", superSpeedName, Loc.GetString("admin-smite-super-speed-description")) }; args.Verbs.Add(superSpeed); //Bonk + var superBonkLiteName = Loc.GetString("admin-smite-super-bonk-lite-name").ToLowerInvariant(); Verb superBonkLite = new() { - Text = "admin-smite-super-bonk-name", + Text = superBonkLiteName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new("Structures/Furniture/Tables/glass.rsi"), "full"), Act = () => { _superBonkSystem.StartSuperBonk(args.Target, stopWhenDead: true); }, - Message = Loc.GetString("admin-smite-super-bonk-lite-description"), Impact = LogImpact.Extreme, + Message = string.Join(": ", superBonkLiteName, Loc.GetString("admin-smite-super-bonk-lite-description")) }; args.Verbs.Add(superBonkLite); + + var superBonkName = Loc.GetString("admin-smite-super-bonk-name").ToLowerInvariant(); Verb superBonk= new() { - Text = "admin-smite-super-bonk-lite-name", + Text = superBonkName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new("Structures/Furniture/Tables/generic.rsi"), "full"), Act = () => { _superBonkSystem.StartSuperBonk(args.Target); }, - Message = Loc.GetString("admin-smite-super-bonk-description"), Impact = LogImpact.Extreme, + Message = string.Join(": ", superBonkName, Loc.GetString("admin-smite-super-bonk-description")) }; args.Verbs.Add(superBonk); + var superslipName = Loc.GetString("admin-smite-super-slip-name").ToLowerInvariant(); Verb superslip = new() { - Text = "admin-smite-super-slip-name", + Text = superslipName, Category = VerbCategory.Smite, Icon = new SpriteSpecifier.Rsi(new("Objects/Specific/Janitorial/soap.rsi"), "omega-4"), Act = () => @@ -849,7 +891,7 @@ private void AddSmiteVerbs(GetVerbsEvent args) } }, Impact = LogImpact.Extreme, - Message = Loc.GetString("admin-smite-super-slip-description") + Message = string.Join(": ", superslipName, Loc.GetString("admin-smite-super-slip-description")) }; args.Verbs.Add(superslip); } diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index 467a1577e7a..de02129917e 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -21,42 +21,42 @@ admin-smite-explode-name = Explode admin-smite-chess-dimension-name = Chess Dimension admin-smite-set-alight-name = Set Alight admin-smite-monkeyify-name = Monkeyify -admin-smite-electrocute-name = Garbage Can -admin-smite-creampie-name = Electrocute -admin-smite-remove-blood-name = Creampie -admin-smite-vomit-organs-name = Remove blood -admin-smite-remove-hands-name = Vomit organs -admin-smite-remove-hand-name = Remove hands -admin-smite-pinball-name = Remove hand -admin-smite-yeet-name = Stomach Removal -admin-smite-become-bread-name = Lungs Removal -admin-smite-ghostkick-name = Pinball -admin-smite-nyanify-name = Yeet -admin-smite-kill-sign-name = Become Bread -admin-smite-cluwne-name = Become Mouse -admin-smite-anger-pointing-arrows-name = Ghostkick -admin-smite-dust-name = Nyanify -admin-smite-buffering-name = Kill sign -admin-smite-become-instrument-name = Cluwne -admin-smite-remove-gravity-name = Maid -admin-smite-reptilian-species-swap-name = Anger Pointing Arrows -admin-smite-locker-stuff-name = Dust -admin-smite-headstand-name = Buffering -admin-smite-become-mouse-name = Become Instrument -admin-smite-maid-name = Remove gravity -admin-smite-zoom-in-name = Reptilian Species Swap -admin-smite-flip-eye-name = Locker stuff -admin-smite-run-walk-swap-name = Headstand -admin-smite-super-speed-name = Zoom in -admin-smite-stomach-removal-name = Flip eye -admin-smite-speak-backwards-name = Run Walk Swap -admin-smite-lung-removal-name = Speak Backwards +admin-smite-garbage-can-name = Garbage Can +admin-smite-electrocute-name = Electrocute +admin-smite-remove-blood-name = Remove blood +admin-smite-remove-hands-name = Remove hands +admin-smite-remove-hand-name = Remove hand +admin-smite-pinball-name = Pinball +admin-smite-yeet-name = Yeet +admin-smite-become-bread-name = Become Bread +admin-smite-cluwne-name = Cluwne +admin-smite-anger-pointing-arrows-name = Anger Pointing Arrows +admin-smite-dust-name = Dust +admin-smite-buffering-name = Buffering +admin-smite-become-instrument-name = Become Instrument +admin-smite-remove-gravity-name = Remove Gravity +admin-smite-reptilian-species-swap-name = Become Reptilian +admin-smite-locker-stuff-name = Locker Stuff +admin-smite-headstand-name = Headstand +admin-smite-become-mouse-name = Become Mouse +admin-smite-maid-name = Cat Maid +admin-smite-zoom-in-name = Zoom In +admin-smite-flip-eye-name = Flip Eye +admin-smite-run-walk-swap-name = Run Walk Swap +admin-smite-super-speed-name = Run Up +admin-smite-stomach-removal-name = Stomach Removal +admin-smite-speak-backwards-name = Speak Backwards +admin-smite-lung-removal-name = Lungs Removal admin-smite-disarm-prone-name = Disarm Prone -admin-smite-garbage-can-name = Super speed -admin-smite-super-bonk-name = Super Bonk Lite -admin-smite-super-bonk-lite-name = Super Bonk +admin-smite-super-bonk-name = Super Bonk +admin-smite-super-bonk-lite-name = Super Bonk Lite admin-smite-terminate-name = Terminate admin-smite-super-slip-name = Super Slip +admin-smite-creampie-name = Cream +admin-smite-vomit-organs-name = Vomit Organs +admin-smite-ghostkick-name = Ghost Kick +admin-smite-nyanify-name = Cat Ears +admin-smite-kill-sign-name = Kill Sign ## Smite descriptions From e077a3f41c673985ed0d3dee515d23e75ed44fb3 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 16 Oct 2024 22:25:38 +0000 Subject: [PATCH 079/173] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index a111689626a..f78eec801ea 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -559,5 +559,13 @@ Entries: id: 69 time: '2024-10-09T11:55:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32531 +- author: IProduceWidgets + changes: + - message: invokeverb should work with smite names now. Find the names in the smite + tab on mouse hover. + type: Fix + id: 70 + time: '2024-10-16T22:24:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32844 Name: Admin Order: 3 From 49b18586fa37a140b3e39657783e43b2eee00a55 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:32:32 +0000 Subject: [PATCH 080/173] fix grappling hooks getting bricked (#32738) Co-authored-by: deltanedas <@deltanedas:kde.org> --- Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs index d2f0333b833..e790973538f 100644 --- a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs @@ -114,19 +114,14 @@ private void OnWeightlessMove(ref CanWeightlessMoveEvent ev) private void OnGunActivate(EntityUid uid, GrapplingGunComponent component, ActivateInWorldEvent args) { - if (!Timing.IsFirstTimePredicted || args.Handled || !args.Complex) - return; - - if (Deleted(component.Projectile)) + if (!Timing.IsFirstTimePredicted || args.Handled || !args.Complex || component.Projectile is not {} projectile) return; _audio.PlayPredicted(component.CycleSound, uid, args.User); _appearance.SetData(uid, SharedTetherGunSystem.TetherVisualsStatus.Key, true); if (_netManager.IsServer) - { - QueueDel(component.Projectile.Value); - } + QueueDel(projectile); component.Projectile = null; SetReeling(uid, component, false, args.User); From 7629eedbe75e5dfc0af1e5a468e4c10289ffa9d9 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:33:08 -0400 Subject: [PATCH 081/173] FTL coordinate disk command for admins: ftldisk (#28075) * Add robo control comp, also de-reinforce a lot of walls. * Revert "Add robo control comp, also de-reinforce a lot of walls." This reverts commit b6be6b616aa9732b81e02bed76e3c9ae103cf7cb. * FTLdiskburner command to make FTL disks. * Elegant failure on mistyped ID. * even more more eleganter failures. * foo * bar * I have reached completion * prevent id confusion * I'm givin' her all she's got captain! * a bit more hug boxing for safe destinations. * comments for foo * extra thoughts. * cleanup * continuen't * Improve feedback strings * reviewer QOL * Reviewer QOL 2 * handle easy reviews * Add comments to clarify reviews * howdoicode to the rescue. * ftldisk in hand * ftl.ftl * funny disk case * loc * unusing --- .../Shuttles/Commands/FTLDiskCommand.cs | 183 ++++++++++++++++++ Resources/Locale/en-US/shuttles/commands.ftl | 14 ++ 2 files changed, 197 insertions(+) create mode 100644 Content.Server/Shuttles/Commands/FTLDiskCommand.cs create mode 100644 Resources/Locale/en-US/shuttles/commands.ftl diff --git a/Content.Server/Shuttles/Commands/FTLDiskCommand.cs b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs new file mode 100644 index 00000000000..b17c7c11a71 --- /dev/null +++ b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs @@ -0,0 +1,183 @@ +using Content.Server.Administration; +using Content.Server.Labels; +using Content.Shared.Administration; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Shuttles.Components; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Console; +using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.Shuttles.Commands; + +/// +/// Creates FTL disks, to maps, grids, or entities. +/// +[AdminCommand(AdminFlags.Fun)] + +public sealed class FTLDiskCommand : LocalizedCommands +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IEntitySystemManager _entSystemManager = default!; + + public override string Command => "ftldisk"; + + [ValidatePrototypeId] + public const string CoordinatesDisk = "CoordinatesDisk"; + + [ValidatePrototypeId] + public const string DiskCase = "DiskCase"; + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + return; + } + + var player = shell.Player; + + if (player == null) + { + shell.WriteLine(Loc.GetString("shell-only-players-can-run-this-command")); + return; + } + + if (player.AttachedEntity == null) + { + shell.WriteLine(Loc.GetString("shell-must-be-attached-to-entity")); + return; + } + + EntityUid entity = player.AttachedEntity.Value; + var coords = _entManager.GetComponent(entity).Coordinates; + + var handsSystem = _entSystemManager.GetEntitySystem(); + var labelSystem = _entSystemManager.GetEntitySystem(); + var mapSystem = _entSystemManager.GetEntitySystem(); + var storageSystem = _entSystemManager.GetEntitySystem(); + + foreach (var destinations in args) + { + DebugTools.AssertNotNull(destinations); + + // make sure destination is an id. + EntityUid dest; + + if (_entManager.TryParseNetEntity(destinations, out var nullableDest)) + { + DebugTools.AssertNotNull(nullableDest); + + dest = (EntityUid) nullableDest; + + // we need to go to a map, so check if the EntID is something else then try for its map + if (!_entManager.HasComponent(dest)) + { + if (!_entManager.TryGetComponent(dest, out var entTransform)) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-transform", ("destination", destinations))); + continue; + } + + if (!mapSystem.TryGetMap(entTransform.MapID, out var mapDest)) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-map", ("destination", destinations))); + continue; + } + + DebugTools.AssertNotNull(mapDest); + dest = mapDest!.Value; // explicit cast here should be fine since the previous if should catch it. + } + + // find and verify the map is not somehow unusable. + if (!_entManager.TryGetComponent(dest, out var mapComp)) // We have to check for a MapComponent here and above since we could have changed our dest entity. + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-map-comp", ("destination", destinations), ("map", dest))); + continue; + } + if (mapComp.MapInitialized == false) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-map-not-init", ("destination", destinations), ("map", dest))); + continue; + } + if (mapComp.MapPaused == true) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-map-paused", ("destination", destinations), ("map", dest))); + continue; + } + + // check if our destination works already, if not, make it. + if (!_entManager.TryGetComponent(dest, out var ftlDestComp)) + { + FTLDestinationComponent ftlDest = _entManager.AddComponent(dest); + ftlDest.RequireCoordinateDisk = true; + + if (_entManager.HasComponent(dest)) + { + ftlDest.BeaconsOnly = true; + + shell.WriteLine(Loc.GetString("cmd-ftldisk-planet", ("destination", destinations), ("map", dest))); + } + } + else + { + // we don't do these automatically, since it isn't clear what the correct resolution is. Instead we provide feedback to the user and carry on like they know what theyre doing. + if (ftlDestComp.Enabled == false) + shell.WriteLine(Loc.GetString("cmd-ftldisk-already-dest-not-enabled", ("destination", destinations), ("map", dest))); + + if (ftlDestComp.BeaconsOnly == true) + shell.WriteLine(Loc.GetString("cmd-ftldisk-requires-ftl-point", ("destination", destinations), ("map", dest))); + } + + // create the FTL disk + EntityUid cdUid = _entManager.SpawnEntity(CoordinatesDisk, coords); + var cd = _entManager.EnsureComponent(cdUid); + cd.Destination = dest; + _entManager.Dirty(cdUid, cd); + + // create disk case + EntityUid cdCaseUid = _entManager.SpawnEntity(DiskCase, coords); + + // apply labels + if (_entManager.TryGetComponent(dest, out var meta) && meta != null && meta.EntityName != null) + { + labelSystem.Label(cdUid, meta.EntityName); + labelSystem.Label(cdCaseUid, meta.EntityName); + } + + // if the case has a storage, try to place the disk in there and then the case inhand + + if (_entManager.TryGetComponent(cdCaseUid, out var storage) && storageSystem.Insert(cdCaseUid, cdUid, out _, storageComp: storage, playSound: false)) + { + if (_entManager.TryGetComponent(entity, out var handsComponent) && handsSystem.TryGetEmptyHand(entity, out var emptyHand, handsComponent)) + { + handsSystem.TryPickup(entity, cdCaseUid, emptyHand, checkActionBlocker: false, handsComp: handsComponent); + } + } + else // the case was messed up, put disk inhand + { + _entManager.DeleteEntity(cdCaseUid); // something went wrong so just yeet the chaf + + if (_entManager.TryGetComponent(entity, out var handsComponent) && handsSystem.TryGetEmptyHand(entity, out var emptyHand, handsComponent)) + { + handsSystem.TryPickup(entity, cdUid, emptyHand, checkActionBlocker: false, handsComp: handsComponent); + } + } + } + else + { + shell.WriteLine(Loc.GetString("shell-invalid-entity-uid", ("uid", destinations))); + } + } + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length >= 1) + return CompletionResult.FromHintOptions(CompletionHelper.MapUids(_entManager), Loc.GetString("cmd-ftldisk-hint")); + return CompletionResult.Empty; + } +} diff --git a/Resources/Locale/en-US/shuttles/commands.ftl b/Resources/Locale/en-US/shuttles/commands.ftl new file mode 100644 index 00000000000..37583568e7c --- /dev/null +++ b/Resources/Locale/en-US/shuttles/commands.ftl @@ -0,0 +1,14 @@ +# FTLdiskburner +cmd-ftldisk-desc = Creates an FTL coordinates disk to sail to the map the given EntityID is/on +cmd-ftldisk-help = ftldisk [EntityID] + +cmd-ftldisk-no-transform = Entity {$destination} has no Transform Component! +cmd-ftldisk-no-map = Entity {$destination} has no map! +cmd-ftldisk-no-map-comp = Entity {$destination} is somehow on map {$map} with no map component. +cmd-ftldisk-map-not-init = Entity {$destination} is on map {$map} which is not initialized! Check it's safe to initialize, then initialize the map first or the players will be stuck in place! +cmd-ftldisk-map-paused = Entity {$desintation} is on map {$map} which is paused! Please unpause the map first or the players will be stuck in place. +cmd-ftldisk-planet = Entity {$desintation} is on planet map {$map} and will require an FTL point. It may already exist. +cmd-ftldisk-already-dest-not-enabled = Entity {$destination} is on map {$map} that already has an FTLDestinationComponent, but it is not Enabled! Set this manually for safety. +cmd-ftldisk-requires-ftl-point = Entity {$destination} is on map {$map} that requires a FTL point to travel to! It may already exist. + +cmd-ftldisk-hint = Map netID From 95c3e9c53fb34c47abbe649ce88b20b8214517dc Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 16 Oct 2024 22:33:38 +0000 Subject: [PATCH 082/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index eb148384472..a6c919cdee0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Fixed the mouse position when it is over a singularity distortion effect - while zoomed in or out. - type: Fix - id: 7017 - time: '2024-07-31T00:14:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30509 - author: metalgearsloth changes: - message: Add a button to the lobby so you can export a .png of your characters @@ -3913,3 +3905,10 @@ id: 7516 time: '2024-10-16T10:04:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32064 +- author: deltanedas + changes: + - message: Fixed grappling hooks sometimes getting bricked. + type: Fix + id: 7517 + time: '2024-10-16T22:32:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32738 From 23063684922604b4a9d15ce620c98ec223b74e37 Mon Sep 17 00:00:00 2001 From: LittleNyanCat Date: Thu, 17 Oct 2024 02:38:02 +0100 Subject: [PATCH 083/173] Several small SFX tweaks (#28897) * Several small sfx tweaks * fix small yml oopsie * Redo the basin code to use events * now uses an event for when the transfer is successful, not when there's just an attempt * forgot to remove this * Update Content.Server/Botany/Components/PlantHolderComponent.cs Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> * Update Content.Server/Botany/Systems/PlantHolderSystem.cs Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> * adds sound variations to shoes as well * variations on honkbots and the H.O.N.K mech * Update Content.Server/Botany/Systems/PlantHolderSystem.cs * Update Content.Server/Botany/Systems/PlantHolderSystem.cs * fix compile issue * oops forgot to delete this * cleanup --------- Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Botany/Components/PlantHolderComponent.cs | 4 ++++ .../Botany/Systems/PlantHolderSystem.cs | 7 ++++++- .../Nutrition/EntitySystems/DrinkSystem.cs | 2 +- .../Nutrition/EntitySystems/FoodSystem.cs | 2 +- .../VendingMachineComponent.cs | 5 +++-- Resources/Audio/Machines/attributions.yml | 1 + Resources/Audio/Machines/machine_vend.ogg | Bin 17353 -> 13777 bytes .../Entities/Clothing/Shoes/boots.yml | 2 ++ .../Entities/Clothing/Shoes/specific.yml | 10 ++++++++++ .../Prototypes/Entities/Mobs/NPCs/silicon.yml | 8 ++++++++ .../Entities/Objects/Specific/Mech/mechs.yml | 2 ++ .../Computers/base_structurecomputers.yml | 2 ++ .../Entities/Structures/hydro_tray.yml | 5 +++++ 13 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Content.Server/Botany/Components/PlantHolderComponent.cs b/Content.Server/Botany/Components/PlantHolderComponent.cs index 8218bead72c..f0661e4a301 100644 --- a/Content.Server/Botany/Components/PlantHolderComponent.cs +++ b/Content.Server/Botany/Components/PlantHolderComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Chemistry.Components; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Audio; namespace Content.Server.Botany.Components; @@ -23,6 +24,9 @@ public sealed partial class PlantHolderComponent : Component [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan LastCycle = TimeSpan.Zero; + [DataField] + public SoundSpecifier? WateringSound; + [DataField] public bool UpdateSpriteAfterUpdate; diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index fa032656921..b17c2613710 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Coordinates.Helpers; using Content.Shared.Examine; using Content.Shared.FixedPoint; +using Content.Shared.Fluids.Components; using Content.Shared.Hands.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; @@ -37,7 +38,6 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly RandomHelperSystem _randomHelper = default!; @@ -53,6 +53,7 @@ public override void Initialize() SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent(OnSolutionTransferred); } public override void Update(float frameTime) @@ -320,6 +321,10 @@ private void OnInteractUsing(Entity entity, ref InteractUs } } + private void OnSolutionTransferred(Entity ent, ref SolutionTransferredEvent args) + { + _audio.PlayPvs(ent.Comp.WateringSound, ent.Owner); + } private void OnInteractHand(Entity entity, ref InteractHandEvent args) { DoHarvest(entity, args.User, entity.Comp); diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index f04d79b47da..90a925e39f1 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -317,7 +317,7 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent ar _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} drank {ToPrettyString(entity.Owner):drink}"); } - _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-2f)); + _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-2f).WithVariation(0.25f)); _reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion); _stomach.TryTransferSolution(firstStomach.Value.Owner, drained, firstStomach.Value.Comp1); diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index d7daf632d66..158c7f4955c 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -296,7 +296,7 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(entity.Owner):food}"); } - _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-1f)); + _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-1f).WithVariation(0.20f)); // Try to break all used utensils foreach (var utensil in utensils) diff --git a/Content.Shared/VendingMachines/VendingMachineComponent.cs b/Content.Shared/VendingMachines/VendingMachineComponent.cs index 50023a023ab..f3fe3a1ecdb 100644 --- a/Content.Shared/VendingMachines/VendingMachineComponent.cs +++ b/Content.Shared/VendingMachines/VendingMachineComponent.cs @@ -87,12 +87,13 @@ public sealed partial class VendingMachineComponent : Component /// Sound that plays when ejecting an item /// [DataField("soundVend")] - // Grabbed from: https://github.com/discordia-space/CEV-Eris/blob/f702afa271136d093ddeb415423240a2ceb212f0/sound/machines/vending_drop.ogg + // Grabbed from: https://github.com/tgstation/tgstation/blob/d34047a5ae911735e35cd44a210953c9563caa22/sound/machines/machine_vend.ogg public SoundSpecifier SoundVend = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg") { Params = new AudioParams { - Volume = -2f + Volume = -4f, + Variation = 0.15f } }; diff --git a/Resources/Audio/Machines/attributions.yml b/Resources/Audio/Machines/attributions.yml index 1b4ea747416..7675162a04d 100644 --- a/Resources/Audio/Machines/attributions.yml +++ b/Resources/Audio/Machines/attributions.yml @@ -163,6 +163,7 @@ - chime.ogg - buzz-sigh.ogg - buzztwo.ogg + - machine_vend.gg license: "CC-BY-SA-3.0" copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/tree/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0" diff --git a/Resources/Audio/Machines/machine_vend.ogg b/Resources/Audio/Machines/machine_vend.ogg index 8f7c187d0c37c130b4a2094e13755fd7430106dd..92867a1f3d3bd6b5b9a22e766ebeca6590420770 100644 GIT binary patch delta 12964 zcmb7qbzBus^ypr?yF@^c?h*t9L`u1UNL-NaF5%L3K|;E_mF@;F$zx7ybU; z=e_^l+t2KL&Yqf?Gw00Ap55LrpixVhf~l!8fB^h=QT+$yroIpcQGuLn?G4PKk2H{E z@jsR$1<+sMJLs?EKP0?lT z=1^)GY920b9xfg(UTP)c`{chRau0ljR*T<`xCPe3p@Zf;a`%2X4odyPh!_Bn0B>frWcwBI zo#sobCmZ;RRaX6&kiWG5|M>7#fWqkZvSXFN>{A-hgJ#r4=;50yYCk-2 zxRU>={tkp1-WfR32oLs1dQ|;S;lF`V1Ky8gmx&_kub>zlr5HS>7{;epB%mMVVINoG zQ|1+cs7Ot!K-3`G+RoOKPS%t0*3+tg0aa`DTI>1$yZjwIH3-P06^y23j(*M@y($om z>Jle!H-ZUsVKPh>uARXf`4}4mY9=ijqxCC#ygqylX z|E-hr%#(BfUyGPo4+|g$w`R8;#lP~_o(>gmV;C~f1Hk81Oo^`Bp6xC4MK@IVt%GE@ zgIsT{N^gx8=KstCeCpws7$KXKvT%2d@Gv3Y@c4^CLV3j(^5g#xMVZLwug}0oLX&0^ zZ{dx`8>tUBOw}C%3nC2eN!UVHyNS?nx53coJ$8F|yn(KmakNOT zVM&sKc5oRf01xgOWWE#<12mhd+3%IsQnSVsEmEPeLSV`qBFny-EENOU8vY?c_+zM2 zUrqI#BDf}(91}j!Pw=}O4+C2rACLqAcxW^^kxK7i%p0lpILtYzhC?*DvCuxj^;F+6 znSxa4m>_eM(&MB3kj!?f%8(#)njbvQ5Gdd`n;+bhkN`Ub0H^y{SY}*OaqNZSncS$O z$f$$1%($E~p%i3NQV}ArR%1P?Vyrp#VtfMr$fu|RQRK6pRe{W3$c@L#PfuDa!XS>C zwbuGB*7KJl9Dtdb*aI1Im)X|S}QwRYZFRM6GPPEr6%Ky z)#4p>Rzt{Ywzv*MQV3MN{zEKtJafl;<2qgZ3!ISlt1l zu4+7csjYtDs0i`Yj5B_uURp1c2Fy-*{&LXPepIche&IPk9k)K^`0Gk;ycRx0$8kr` zMgx$NSl?~*=U8}{qMv(IW*`k6<@$v{Kc{!N$t4NPd$Ieh2{ z3mxuNj}F516^n?x@;MMl2C}F|Zi5whpFuoxk&t|sKfDC$0HVIgU-2h8` zBQbVBkojwDyf`zvKY<2jP6r9tyrf3e(t>>o4{Z50mP~?~J$K4Nu4Iy&8-)h?9=wqX zU!vfIDW1)I2OOmx7&Uy&vZ%-=GF(rM#S&tn^os?vaL2_OU=?(zDh1bMs~B2VtdkfH zeT^lNWvPG@thv|83)5fvXbQVuDM^v3HVy zgG%74m9{3!JUav zJaAvC?*}kA2@c6H$3}y}CH_iaa6t_`dNCfO*J>p8BSq#&WE>#I0>Hd~*s=AWN-FXh z&sNY46H1N4qtodTGx`EDSeIzH32(%GW0Nxl@ zA1Qxjo3WMu?H39F=wpea(D-AC!?(X!@psJh0HD_f0;t>kcs`i*fB|awo=V-JVOdf$ zrD0G2ui#JsIA#=!3I>PZKE|B$|6LISTWY_6l?T0_J7|njhCcoQ#YjLq{A6JWcSoUZ zy6g$AbuvFCC7GN!Y3@zx*k~ni31mp-T~5xFMo5MId$_r4NHk%gaL3cIVDBO`+=F|h zh9x%~V#>)OGc4ww(vXlTs39{9<(t+}g0sMTU4I#^6vEx5WqDAaFlA6&vyloN5~(3E zEaBT+fF3LdTdeT`M(`G=#A{QwWhM?N?X-20F3(QK3s|KXT(9%Ub? z%sKF51k-;;g;W272>v&u^dBEACtC^pp9owIo#wCbWA)YVf2QTJ;lC5al0yUlpH|=p zDm|n$BNcVOFa|9b;IEUz_kQXj4J&5pM_UK1fZg!D*O9cbo|7G}l%zQkf zx?{OCK6~EM($P!DOiM>c&&oE~-!nKnG~3@d@MEB%mzI{3orw912Rpv_vbrJ#0U90< z=}stq*qkN(>r$Ly8cST&Kn@TJI19PW6*vpQ`z9iz3IM3y@<`T722Yz~>5yH*anW5a z9>%!_lLHoEHo-<6xwEgYE_>x5GInXR;-j?AJR>M$PflC5GZfe5B-+T3bmh5;_q;AN zhKwUpZA0D2jN*{cAm$A(oaZlFA}WdOCs<}mX0xe6^pi29X4SB#F7W`oTstBw20d=! zytfPy*4;?sBSCJowTqS*!dYtdPY{wb%c?ESN&9_Z?XUKJs>!jVXBzl^TsLj_M zTG#gPzjx$H`h07|w)5)t5JZt?XEy&t@51z{3R$2f)k=kWm7}Fqr{nV6zE|uQDSH1O zI{U)0*RV<)GN}^{7fgBGg{&90rj$2|jHSa#eukVSOY1Y<7KnjT&kKzh6PGsoicPsK z^6Pk}lfc++Yoou?-N)mPprmh5CBCxi1N(jyg?^!AIL4lMaX$envong)ullZpPyLpT zb?$CsOVyq_dg~BKTS4(UsP!d$Y@1uh$EHgZOJJ!&_A04)=#-zs?o@&Y^)fu4EHnoH z)WLajZwpZ&5EN&6(3X$GHdM-oSeo)f2^uy8ny1Qf?bVS3GFK995v2MN^xUfRGFsop zu(Gsen2h!g3g3Enh-<_*r;%2*tg7~NO<_)l7UA_`V2&`qM_$_6aM3 zs~fB&oK>eS3-OPlxSdUiuQ_BybW>K}w0kHd8E49*gGD|jfF*ZG8S!|&;eH!>ztx{_ z4@+{cayhFkHC7GgtC0Do*)>rXb2eV*5Ka=FB7Yh`Zt}Vg;eM2q`Kd6&*CDG=iD~T* z%T&Dnt|6VANtgo&B?NsQ217*h?q`-&DBduiUL2DPd#4bBhw^xg7Sk#L(}1}691})G_c=^Gp6mb8cJ6{b!U&zfuB_ygp;Wi(!gHZ23J&q82) z+jD2%g#AxH03Fw4LHRm@x;`0QNyv(TH(R>j*3aRYLcgCD+4`*Yu013JPXbbRA&5

MP3ybjk8AYhUEX$R&{!f;s;`A2v=z~ORRCHPY3J|@nA^>k@^P^fcEUHB zM}RwF7`WV>R4A%?fN!3y3AsSL5xao9C?yJP5bFNT}J%3iF3wu53D+XVaYSKJMmej zne&8EkM(+^{NUtaCs&MY!7=RV)9KdMQ15w{%&>X}ILg=ZF`usyV~2*Q+kGC(&$*2FGaL3mFn5OH({vtCrfA6eOXv6}b9YO) z&oG{3uzqPF)E6ED-o*Zkt<*Wxz}-`Hc#pTV&?HdmgW+djY`r zS6wjH=Em&i{>J9c;nwEr+REJM@R7) zzBJQZHdXY!OMKFjj)a1a5wLB%CWaraHrYaenX-$Nbf2O> zn_HQBKl>l4|E#w=4C4~jxjzm0wpB+&Ka=?>n~vcb@KtlK*Ngb}kMn)*sb=AN0SvUN z+2cB>HlKjCqb@gz(Mv=EkuH8i`r9ALV<;6^_kZbHBT>HXxayXOBVleT#OAd?8?5=> zO@PMP7f8Gnt-~_lX2DIUqgfvYWfWuhhm2=vl;b6FWx9I$Gj(f*se~V9*=LLC>Jsn6 z-*d*U+P&OR=Ir)jxr|Bwu4kMnnQ=0uy12KUJ*%6Ff?49IPCvh0dC4hMhPNNM-evyo zP4lNzo;Ofcz*Hc(E<^67O0OZZJD%Xn@5bdZta+I{eW~{)sY&2|elPLS8~EfL67(S6 zW#b#)D1_G>wQ8mD@l3=4dhc6{J^?K>b$SqP)8{4B$vWgW9q`T7ZSz`VJ=~qCYYB7y zru+7jexaAy9fIZi2%Z}(r#d~$2a{ub4>Fj8(0U~y9HLiIOjzm5E!ucSa_UwDp{BTa z62*HQ7>74$`(O~fsC$8Xb+eE+G|&2k<1uVJ7lJu@`_Pa~FLHa(i2Ed3*Ml2=IL>7D zEO#LjH=#!z7LTr$eovfKYR`b=N?u*LF++@j z?ceEn-+pUTSdR(3=B0GwoDh8|8DzA!lHc-IB`W=Q_azP-_S_` zhptJoOjm~bm+1FRzN%1M?Ac*xuRw=t=4S|S>HUWt-8+_%{Wg@;`eVMb3wa&>iPh-L!GJon1*l>kT4z zS1rdIvbj*1v6>e5@@^G{>n<+ufU5l^m4Z;PD%b6ZTY3I{Ta=qRxq@fU=uryx38!`0 zp({v^xX>6AggO~tw?G!!aKC1ssgoDEb8O5vTEOFE#W^Rdb6#Z>-)CQ*xs8S)_|y1t zrqCBTEvuxG+@4#O$eRX5r#(?AF7{j*e^USV7qyu`$7ewg{P7Ve&NgZY(Z!fb)Wl@q zhB>C)laYGF+0M?NMyy4ASA${3B(YgY6lzX&$yC8XmL}Ug!c|4;`}uwq~>8a*d@26TR2~BA%DJ$s6`U?tCd=1xQh|8eNM$2 zwN23ZS24hn+xW7YQe_5}IrunocZO3WPC8NgCu(T8l&tGqv&8$f{oOjrJ1I$y?@i=o z5~jp56NzCDZLV`TG?GtTH+%`bgb7qKsw#`e=CVfH3(rGYn*bn0^Eg=tW=vTH3Z?#( zqVi2pA5T28QHYyaLc`#T*SK>E(sX|zS>bX$`+CbUFJ=ID*~Ge3_BKr9_;Ox1Ygsqz zuP}{GhS&7LU;kVW*N)L+14-N~amnLaOky}~VPqmtT4AmoexjUMBB;pc!7JC#5=Fmi ziK>DnYo*zbYPw89{m&Vb!Oa;yH-)R8-Zl9#bZ#;@y2HWrVwb2BJIZ-h5uPpuw~uCi znf#L8nu$><+G^samwU-^j}d+SZC=Kn>e{P^WFhyCC~ZfN9j5z>xr!lwQSR6`KFjdK z#6m+qSWe1a$i@KPW6AbG0U0K49zuU<;rnd%Ak8_?tmRF*UZBVIEBJd;>E}HK>$`ib zRaA3O^z_YYwC!h;81K^w;SzKC**`z6K?2ibH~9?&*}|Dls|Kn?2L2-76IOU)m#ALs zoZ#NNJ-WyQzr)L)?pccb6nLJO{D``jwrGv%o90xtvUJV|P_AmxvkUL7QCw%$fEltd zci9ctPQTz1c<0yXK{@)MS@%dd3dV9R2LIXK9M!3h zP?>!qyUlj%n+pA4ziUiYUy1ZCD>y`s;FFdbT-C8%23jBu6d)ueu%$f%0ya8d-qe}_ zr55G;ZXSi@;_zgRb;+~+FCFv`?%GD}9EbZ>9#hO~@?akBVsP_rPk0bmMYz$*s$Z|7 zhUF&cuKKxTO}JjWE%yytH@?lrK4R~@Lg1nA=!v9S=h@J}Emuy9#1o4(BVF_Ryi#AhRQN6luZ=}A zADNFIfi+2=rYehFc|agtv0L7{xvJouYcSON7+>`lEUw( zzBnV9&lmy~rsUf^PISj>y`;_l7tHQbI<>9>rz&zt3skZbZ_7Nt+*HUXpABJBis2;5 zF*Nc8T!007#f>M$n=eURg2#J*1x-MH2;g36>7C_BH5IEI5V$@YQ+Qj;nxp7NX(t<+ zpNsud|8kw{PJW2w!%(Jazg;{3Bx@d01M0Xj=b^>Xq#Cw6i{7{pZPh9&)sT!gfzq$X zt2rF$gLVUSYFDD@6zUFI)DjX7cUvQBM_pex%NekTBHX09=WWsMy0e4j7-IV1XEb89 zq5F#oJ7|{+c944!I$_!b^ll8)E=>jMFuIdO=uGXf`o{!WABl<~Dr;A%2X#87+rLg| zc(Ick+&r`sA=oBWC~nSAZ78NzjMNdrE}-&kez{CH1VpbIIHT#vU*IelbM0v?TQ zpD@90P}ll@Feo-6{TcLSZRxfPZxO8N#Ga*I(?adRM>$`p73_~A>8_W%P;Q(hNJiU91T3Mu`N5J51}IuFu{DC>t65tu|jHRaBqXu z@!h3?XGx!g)}&@XJ7?DJZoe!!a}$Iu(ah@*M6);0aE1t&UE>IOCPi-X+uge-7advP z#Np`T#>Kg|L9fvO%x#9wsAz4wSl39Ozdner&fACf?CfPZ-+BH}ayx;M(B{nue`M_N zn`@__rA2OOSC}o+%?_HSolJeQ{&Iumsl4bP^+_nfH<0~r0Cs2@=2ITstPXg}oWE&l z|MN;(!j~yGauwV{iBBvvY3g#MzDYKRVB`~++uX^okr7U76jlj2(%!lE zZk^c|r8Y+Y#7XX8w7K`eW+2Pby}Fny8{>zzCURYXIyzDicgTBE^?o*0)&oxx@ZC2N zinTQ1M-mPt^U*iHJjfUg?6vH%UUJmI;xe4R6Or{8q2GHczSRiRx1!86=74oKPetY* zimcVV-~$4)v~2!lDr1h6g$&J!ql&=Pu3O^Pw&oq~vVZ0YFpYZS#KjsJU#&Td;Q51n zUTrSgvL)&5XN(9k&(Eptb&~530Jt1JOpo9-DmD6ZO@NLMkFG?SG6ya{-cyLt%_ji< zO&>joJjU#>spXwtR*1_(e6=r=zxt%9t$OuZ7ajzl*Wz72b)FaD|KxfsAm+C84+%CBcaPP4!9&eEZjeN!==uJmBoJl^X$BmgymeP^}yXafUSk0!! z>x1N|KG_E_564(Lk08;?=1$KQ%*$JwoU)0>G4@zilO74&X>@Wq^TL7*28~nDmcL#I zj%`us^j#%+b6LWbb7E3`5N$O*wl~8C^tm7FSdNU<~BwPZ;~{FqUpJulR>6MLq)19W*uifEJssmY)+{=`E<s0><}4Uz)TV7$ z)Y8a_OmU^Qul1r#>|73gbow(=S>RQ5xD+;^&(#v`YptKu2Y}H0xT%mD?It_Vm}u%@ zzfh(^`)}Kf(==1;GVwk%o?^B%VVgXznDM5T8)2m##~V`>;G|v3_dfENWHz?Cu#(s! zQA^@ASgK<2#l2?%$JmUrVZ~I=h3E>of7bzHmyUE8>$}bhOIhnvmzh|!>rcb6wbZ~V ziEA_T%A-H7e&8_PzxaEj!9kMfYx2OvT|e5*LWBHwaI`I!=0&?s$TT1T+l*$Ox& zA)fQvzZ}-E77xTB{vaIK%5Z5Y4ft_Cy3&0ou;rzFkGUZVj)F_AEn>>1dQ0XLKM^OZ z3P_(4cSE` zbm#7Z=0xPRmLo$49YWwqJQ=1%Cynj<_ak>@x1GE^!*@+dtSv#a`I5V-n`ea<?GkO{UU}q`U11O< zXX^~q+NJ2U;JaSa!P1LMg#s!#f3AZkfA5tnL`+-hNwN|Ci1kpt-hOYH)HQUwdvn&v z-`HKo={T}6ZZ)=~R!c0W1WlOMBTq)>x$1AdD#h5veKls}Ee|r-kIg`IwXttk*WKh0 zzsblXPhkyF{z+&o)bSUNuWZ(LOLAOHTn^SZNgtntNpIm=RbYgfDtO{xoC(jQ!C1wbh8ZaA^X_yT4zSxi8g!Da%4vpLgB!(d&s5R@fd2tp-RT4X diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml index cee5b039130..d31b3cba176 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml @@ -204,6 +204,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSpurs + params: + variation: 0.09 - type: entity parent: ClothingShoesBootsCowboyBrown diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index 0838ecd914e..c61cab1294f 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -41,6 +41,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 # for H.O.N.K. construction - type: Tag tags: @@ -60,6 +62,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSlip + params: + variation: 0.10 - type: Construction graph: BananaClownShoes node: shoes @@ -80,6 +84,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 - type: PointLight enabled: true radius: 3 @@ -216,6 +222,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepJester + params: + variation: 0.07 - type: entity parent: ClothingShoesClown @@ -275,3 +283,5 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSkates + params: + variation: 0.08 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 03a2cb8bcda..12a84a178c5 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -166,6 +166,8 @@ maxInterval: 12 sound: collection: BikeHorn + params: + variation: 0.125 - type: Sprite sprite: Mobs/Silicon/Bots/honkbot.rsi state: honkbot @@ -210,6 +212,8 @@ interactFailureString: petting-failure-honkbot interactSuccessSound: path: /Audio/Items/bikehorn.ogg + params: + variation: 0.125 - type: entity parent: MobHonkBot @@ -220,6 +224,8 @@ - type: SpamEmitSound sound: collection: CluwneHorn + params: + variation: 0.125 - type: Sprite state: jonkbot - type: Construction @@ -235,6 +241,8 @@ - type: InteractionPopup interactSuccessSound: path: /Audio/Items/brokenbikehorn.ogg + params: + variation: 0.125 - type: Vocal sounds: Unsexed: Cluwne diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 1fbde27e71b..4c4e44c28cd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -167,6 +167,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 - type: Mech baseState: honker openState: honker-open diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index 9baca8b4b6b..e961cf94d3c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -60,6 +60,8 @@ collection: Keyboard params: volume: -1 + variation: 0.10 + pitch: 1.10 # low pitch keyboard sounds feel kinda weird - type: ContainerContainer containers: board: !type:Container diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 7224c154f9a..b1cbcc8b863 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -67,6 +67,11 @@ False: { visible: false } - type: PlantHolder drawWarnings: true + wateringSound: + path: /Audio/Effects/Fluids/slosh.ogg + params: + volume: -6 + variation: 0.20 - type: Destructible thresholds: - trigger: From 8ed2595fb0787335097d14881b68c8bf118e8780 Mon Sep 17 00:00:00 2001 From: scrivoy <179060466+scrivoy@users.noreply.github.com> Date: Thu, 17 Oct 2024 03:45:36 +0200 Subject: [PATCH 084/173] Fix Reagent Description for Bananium (#32810) * changed bananium desc * removed bananium name and desc ftl string --- Resources/Locale/en-US/reagents/meta/elements.ftl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Resources/Locale/en-US/reagents/meta/elements.ftl b/Resources/Locale/en-US/reagents/meta/elements.ftl index 6d6439565ba..b5ef028bed9 100644 --- a/Resources/Locale/en-US/reagents/meta/elements.ftl +++ b/Resources/Locale/en-US/reagents/meta/elements.ftl @@ -61,8 +61,5 @@ reagent-desc-sodium = A silvery-white alkali metal. Highly reactive in its pure reagent-name-uranium = uranium reagent-desc-uranium = A grey metallic chemical element in the actinide series, weakly radioactive. -reagent-name-bananium = bananium -reagent-desc-bananium = A yellow radioactive organic solid. - reagent-name-zinc = zinc -reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. \ No newline at end of file +reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. From acb9eed6a27a7ffe9bfba6f3c562fa68fd8bf547 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 17 Oct 2024 03:57:42 +0200 Subject: [PATCH 085/173] Added new Microphone instrument style "Kweh" (#32848) * Initial commit * Attribution --- .../Audio/MidiCustom/space-station-14.sf2 | Bin 1043712 -> 1466112 bytes .../Instruments/instruments_percussion.yml | 1 + 2 files changed, 1 insertion(+) diff --git a/Resources/Audio/MidiCustom/space-station-14.sf2 b/Resources/Audio/MidiCustom/space-station-14.sf2 index 8dcfce94729b68ff3c11583d461784a9414462f8..54c6eb619633b5df214a0c4d2556b022c2c29aef 100644 GIT binary patch delta 452149 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

    pw_Zxgnk~ZNvWF)7SdykXY-F;6^TJ?T6L0 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�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 diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml index a6eaa128d60..7ad65e52b24 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml @@ -54,6 +54,7 @@ instrumentList: "Aah": {52: 0} "Ooh": {53: 0} + "Kweh": {4: 1} - type: Sprite sprite: Objects/Fun/Instruments/microphone.rsi state: icon From b24e7b4b93722fc8df546b1ac1bd41f1591ce420 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 01:58:49 +0000 Subject: [PATCH 086/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a6c919cdee0..24a9d14f6d8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Add a button to the lobby so you can export a .png of your characters - type: Add - id: 7018 - time: '2024-07-31T15:14:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29874 - author: slarticodefast changes: - message: Skeletons no longer have fingerprints. @@ -3912,3 +3905,10 @@ id: 7517 time: '2024-10-16T22:32:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32738 +- author: SlamBamActionman + changes: + - message: The Microphone instrument has a new vocal style "Kweh". + type: Add + id: 7518 + time: '2024-10-17T01:57:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32848 From ef54e175c30700f90525e95ce8ba8d2f81311b5d Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Thu, 17 Oct 2024 03:12:30 +0000 Subject: [PATCH 087/173] enable ejecting in biogenerator UI (#32854) * enable ejecting in biogenerator UI * allow inserting too --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- Resources/Prototypes/Entities/Structures/Machines/lathe.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 395f52ad5bd..084f4840a7a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -1324,8 +1324,6 @@ - type: Machine board: BiogeneratorMachineCircuitboard - type: MaterialStorage - insertOnInteract: false - canEjectStoredMaterials: false - type: ProduceMaterialExtractor - type: ItemSlots slots: From 192f1d7b91ea7dafbb8cb1e00b6e9e70f2daf515 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 03:13:36 +0000 Subject: [PATCH 088/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 24a9d14f6d8..debba4fa3cb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Skeletons no longer have fingerprints. - type: Tweak - id: 7019 - time: '2024-07-31T16:08:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30530 - author: themias changes: - message: Pens can be clicked cathartically @@ -3912,3 +3905,11 @@ id: 7518 time: '2024-10-17T01:57:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32848 +- author: deltanedas + changes: + - message: You can now eject biomass from a biogenerator without having to deconstruct + it. + type: Tweak + id: 7519 + time: '2024-10-17T03:12:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32854 From caab01d01e66a38438fad41686e38355ad09db0b Mon Sep 17 00:00:00 2001 From: lzk <124214523+lzk228@users.noreply.github.com> Date: Thu, 17 Oct 2024 05:21:04 +0200 Subject: [PATCH 089/173] Fix holosignsystem popup (#32808) --- Content.Server/Holosign/HolosignSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Holosign/HolosignSystem.cs b/Content.Server/Holosign/HolosignSystem.cs index a36603b01dd..b63a5459898 100644 --- a/Content.Server/Holosign/HolosignSystem.cs +++ b/Content.Server/Holosign/HolosignSystem.cs @@ -45,7 +45,7 @@ private void OnBeforeInteract(EntityUid uid, HolosignProjectorComponent componen if (args.Handled || !args.CanReach // prevent placing out of range || HasComp(args.Target) // if it's a storage component like a bag, we ignore usage so it can be stored - || !_powerCell.TryUseCharge(uid, component.ChargeUse) // if no battery or no charge, doesn't work + || !_powerCell.TryUseCharge(uid, component.ChargeUse, user: args.User) // if no battery or no charge, doesn't work ) return; From 33f0a08b06456819f409ea44e8203da6ba01b77e Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 03:22:10 +0000 Subject: [PATCH 090/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index debba4fa3cb..0269f58ee5c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: themias - changes: - - message: Pens can be clicked cathartically - type: Tweak - id: 7020 - time: '2024-07-31T17:57:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30531 - author: Plykiya changes: - message: Meteors now leave behind asteroid rocks on impact. @@ -3913,3 +3906,10 @@ id: 7519 time: '2024-10-17T03:12:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32854 +- author: lzk228 + changes: + - message: Fixed holosign projectors power cell popups. + type: Fix + id: 7520 + time: '2024-10-17T03:21:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32808 From 27f5d6d817a06d1c448d8bbc7c14ee3f47fe1c0b Mon Sep 17 00:00:00 2001 From: Zachary Higgs Date: Thu, 17 Oct 2024 00:41:06 -0300 Subject: [PATCH 091/173] Give AI a Sound Cue when an Antimov board is inserted (#32625) * Subversion Board Insertion Audio Notification Add Subversion flag and SubversionSound to SiliconLawProviderComponent Add new Method (OnSubversionInserted) to SiliconLawSystem to handle a Subversive SiliconLawProviderComponent and play it's SubversionSound Add Check for Subversive law provider to OnUpdaterInsert that calls OnSubversionInserted if the SiliconLawProviderComponent is Subversive * Fix subversion Sound - Change out Weh sound used to test that subversion sounds can be changed by prototype for a a not yet present Antimov subversion sound * Make it not just subversive - Remove OnSubversionInserted and move the MindPlaySound in the OnUpdaterInsert so long as LawUploadSound exists - Modify SubversionSound into LawUploadSound - Remove the Subversion flag - Just use emagged_borg.ogg until the better one is made * Remove errant spaces and a errant namespace * CR Fixes - Add generic Lawboard insert cue - Combine the If statements per /pull/32625#discussion_r1786926400 inside OnUpdaterInsert - Remove the ViewVariables(VVAccess.ReadWrite) per pull/32625#discussion_r1786924433 - Add Cryo_warning.ogg from TGStation, the sound utilized for Law Upload cue, Attribution. * CR Add a placeholder Antimov notification sound - Add a new sound kitbashed from the cryo_sound used for uploading and the emagged noise * Add self referential source attribution - also fix an errant space * Add more bespoke Sound by ps3moira + attributions --- .../Silicons/Laws/SiliconLawSystem.cs | 2 ++ .../Components/SiliconLawProviderComponent.cs | 9 +++++++++ .../Audio/Ambience/Antag/attributions.yml | 4 ++++ .../Antag/silicon_lawboard_antimov.ogg | Bin 0 -> 294307 bytes Resources/Audio/Misc/attributions.yml | 5 +++++ Resources/Audio/Misc/cryo_warning.ogg | Bin 0 -> 22347 bytes .../Entities/Mobs/Player/silicon.yml | 1 + 7 files changed, 21 insertions(+) create mode 100644 Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg create mode 100644 Resources/Audio/Misc/cryo_warning.ogg diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 07674352ec0..0070beb6ef9 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -293,6 +293,8 @@ protected override void OnUpdaterInsert(Entity ent, while (query.MoveNext(out var update)) { SetLaws(lawset, update); + if (provider.LawUploadSound != null && _mind.TryGetMind(update, out var mindId, out _)) + _roles.MindPlaySound(mindId, provider.LawUploadSound); } } } diff --git a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs index 4800aa0c59d..1c54938b8a4 100644 --- a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs +++ b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Audio; namespace Content.Shared.Silicons.Laws.Components; @@ -20,4 +21,12 @@ public sealed partial class SiliconLawProviderComponent : Component ///

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 UY}ezAu81yMdKff3|I`flUlW=CT>t<8 delta 16489 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

[DataField, ViewVariables(VVAccess.ReadWrite)] public SiliconLawset? Lawset; + + /// + /// The sound that plays for the Silicon player + /// when the particular lawboard has been inserted. + /// + [DataField] + public SoundSpecifier? LawUploadSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); + } diff --git a/Resources/Audio/Ambience/Antag/attributions.yml b/Resources/Audio/Ambience/Antag/attributions.yml index 25917a5da2b..0d3d278a627 100644 --- a/Resources/Audio/Ambience/Antag/attributions.yml +++ b/Resources/Audio/Ambience/Antag/attributions.yml @@ -18,3 +18,7 @@ license: "CC-BY-SA-3.0" copyright: "Made by @ps3moira on github" source: https://www.youtube.com/watch?v=4-R-_DiqiLo +- files: ["silicon_lawboard_antimov.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Made by @ps3moira on Discord for SS14" + source: "https://www.youtube.com/watch?v=jf1sYGYVLsw" diff --git a/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg b/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg new file mode 100644 index 0000000000000000000000000000000000000000..911a34532d60c357c57015edf02cd1ce0e731ac3 GIT binary patch literal 294307 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∾%Qw(Ce*hDm9I2q2;b(4*Ryj&Cx{V zEnSFZTSl@q1r!Ink<8d*Sm_!DDzXd)@bbudex9F^!-*_yjKOj!!n_0qQ{+jo%jb+% zR<`uk#ny0xXT1}gNqnofuQ!3gmHgbWx)L8xB8=_a%Q7ebosE)}oH1!VZ*1kvdO zD}RZH9wL^OlFM8szD&V~)a@}T^0?9Y;jmHDKr>=A|7szSRdyNn|Zk2&_5 zgyaCc9N_^iKCqCWZyZy|-vcP&>2hzqnv|p@Juq}NKVMBMDt!+JIz^xZoev;}2S&2h zmrChdDkY{rZ?#;qWUF>(V}_z**7WNLRYa+FMO-3TnVb2A7 zqRSO)j7@?S6-N>Y(QiAWKfRFOoW$VR#>!!9qojH=2d>@|2OAZi8G3zC-?LCgrX)Pv zebDE8W948VHvnfrB|;5>Ju+X;sESrXs&OJ`L%6RNmeQ`!C~$Jd6NJQXMIbS~zixEi zvGPXA9&{GfJLRi|)c*(t!aa*JT10o)Xa|d}d5WE9R`PUpvcrKr!3Vs6gnQ_^N_b_# zR|yRCz?1o^RwI?gsD~UvgwgPcHKvX#9_;FrU4LtLUUXqS!l|TQ{>bO?_CC|m%rX+n zbG+CQcc^=H&e6Xp9y8{ykM2ppbXJ1h*`bz7i`r#^>70lf;+R!D`l8wALjfqzSls0i zaVBH+X1iYXH<-|Dkn8L03+jGW@0G>7WwFZ_0g%0BO+-TBRC%SlWqn~n6zORTR+@|% zi^tbh2CUZ+Mrrw{5gm3lHH4zc8v{vUX04XZodx{mpQJW|1AQpBf)xndmm%g7Xq@}@ zY|^7{7BqX}+9dPsLGD0K7+Q`zGwUV6(GaT%)+nD z7CAeCoSGw|)wM>`00;n-U51+dfJ0!O`TA`qi#z(%76j&@|$oR!^P*Ag@V0oI95=B+-+3OC& z;@0~khK{}5Aqi`8<FYbY3nFUorNvwk+3ogK zocsXa&9C%)sO%ewvx5^oiby)u^>A)9Mf}bAmJFxdv@FIdk+h;EfT_8q%L@rfFs+?p zS$X3a7qi7^nCzoUu7Q4MILR;j*L1wy*mN-_lbu7SzEBX~B=#Z1=4Hc0i+Knib-X(} zuBhQFvTd!WVfrnHbp=x?_v3C+s)}W6ol4nK?qwz*-#eMc;FFh@Xh!Al&PXk0O=d7I{VcDh?J(R9OYH2anei{jM} zHr~T;XKSAP9uG{8NG~KUDa2R7I56?eL0qV+G;;=yL^Qkfj>*G&JOa50TGt*9po6=H z(1qJ33A|vqGv9T+j#HE|Xq4c4t*dS%LKn?%{M*PpaYj(^O1o%U4Nm^j#* zFSY#kSIW|NEbc>YOyf6f3*UOX&Decr;(8+?)HaN9>2Xu!Ba~mt80fh`$O0I&ftzd;q{regen{Qx*^b zR3BmOG+F@WzgOlz^rC}+ub(yNFJn*#6(@?^^#~Rgj~M7r&NkBoPyPEf)x+l z;1XTMquB&s=^lwzq%j;1(m=srx&38{cLg(!y0_Ew_@2&Pm(W58Gcx|8;^(J=*4gAe zu5^%=H7Z6lQvY4c{dXA)dhDp7>7dexjg>HT=B{oQqP$Q)YBjmn-#lDh@iEskr@lBk zo1h5*ukOCmY!mVCQx8~N?mbUDN@k#bVTAX|`9aq%?K2W{+O)#M^X~P}!^mp~7aAIW zvwAC6f3SZV;Y+;ljc&#my~{~UEkE&vJu`er=w_Ld8f58MfUr;@ioxQBiaQ7iXbeIj z-HI%o02@$e({IjKi6-&B>-}oN?Stx~PXyCSc6i81$hV*+n(Qq`6Y3dEbPBjX>%_ZB zDA}`5Z3I~uJ8=9^YhZG}Nzj(eI}29wov7q+3|+eI{H3UY>qwC2VjD!}p#^o^-b;hF zNz2YT=_wy$d4ZFaYXagG7IOU5^aUM>T8KVwebRy>M_U}vkH<5CITB2_nZzOi%J>Vi zd;TBPba79fTJZCKvd)uPle+>QPww;YIS3v+@nM6EQ|mi*_ZG`&8A&^2eh%(mNtXFt zO=$sPgIN5aGU2`_TyAJ!TccQy77suSD0G5LtedoZsbkh(@igVs7%Pb zD|bDb@aYe*R;)nZArf_Ke6xpZ)`J8xLHim*n_h|Bt}KJBvlMY`waLvaU~<_98o7zKK4KUtVn94%xmsJDFU!i|Pk7q_JF`p+5fyU<9JRI=QR^oOh*WnvL--*e zS=~BiAG&g0LM~B<+?FW zefAnSHu(17W?RtFV4T==4Jg47Edh3LTK|>lbMX_HQ=Hel=^jhh#z`fHg`ziL3h`yenpR)E zmp>SHESom=Q`EA`q({c&y}fJ3_yu@HG<6i(KEs&0o$xW~4pIO^#mv3|w(Cv6>sWY6 zkmA|NL3GSjwQYUY{RyBv2@-KKQOZu4jm{CQd2=lPTI|XD;n}_!_mY^`pZ-N=7j*vt z;N2Z^N>OE^a=*pU4Wd|iXE|i7MSQ5h&+F}f27X1qoBt@bs8GWND1kKb$B56BVNVZFX%W91&CF`% ziot-Coe#{a{bDk`7E(|Q+1P(lv@&^xXgMA2md5`D;-nN)H2C7xo`suQWS+|a?K89H z08?olB&ZT^Vlo}ntQq6;V6U!L5-tbSW0e^MI|HX*^p*NANq%9?^m5r4? z&KhfFfFsyCV$IQbyn}^_F~%B?x3k2c2-f!3O$_ucapo4fXg!py!IJ->tdC;r;v6q_6-ZmYEL#;kv#s=l!YfV!=Rwucwx#YXHa(ZDa|ji zB;aaXP)VQiJdtnl&UIr;+Z5g)jzf^|SQw}QgLl8X4_sl1M=jr(HjGJ*mhucC`LKx8 z-As5`UVyGEWVhIeqb*cUFt&t0D~EbnjD6RYdG?#p3)R65C@Fv>L66^-6@6ZpX&%QK zOZL+#(<2`1PL;_;S7$x8M z6oh+Ra2=yQ7x(4km?_NLv*^xN#$i>KMp&Zx$91RGpvv-{#d~BpQoJ}u7PKoW{Zst1 zxP}-0X4f<=bDx(nh<$VFa;k&NzY#@|ztboV0+Mzg4WlcK*zsL-m7LV2F7}--dZ=2^`g5ad>+n6p1ADynz>Y$>N5U2ID`*nO)dYipA~Z(ZNwG89E< z4U;9!so6iOQF=}-cuXzjrA^T|1J(w3G)kw2VB^@Kki{$Tpb*kS07hx28@Q2mwO|K~ zbVa28fD>cigt81*Igj-(oYJ46=NAEk6A~S?-KE7br%a+T#n~*N;)uA-1kxk}gw|#C zi6Z!bjPQJiGxp&h3X+}u@Iq^?JWuT>#@?^@viJJ=Ea<) zN!R>49J1se&W0ZtWZ+MJn%u}YrQnTeRXTRmI}|VRRX5+0NkmrWBw#3i1kYZ^B7O>4 zrZ6fViCP4%Szx4XqXRkPob4$(B&$A%(RHd&Pl!qhlgL_swqbPTX8@OM)wyW!McDWw zYg@(}fKES)Xc>cMAV|)~N1SC^_U@3jjNW?cyc~gSS)G_rSQsx6$s`?y=+U$3%)ARy`jzIae3jCe z@dNZKqF(gA=6(JS>Q4*OibE`wo^;Bl4UIY6!5r9RLq|z9QUbk8#AO$pNKpF=SLYv6 z^i>@u0I$;-M)OU=-&zw6;nrI)yTrUd`wwqS-H;S+Rfq)rm+B?R_b+b)bjw%j-EG#9 zWwV7g(=>{q+O0?NbLA@FUPS=>(G){;m2h@LIkLkpNOcqpGR1g!CBF-|Q4W=rljLqc zP`Go6u`gx|)-N~H%-yl`+6E!GScMG=B(FHAY4C~sw7lCknfPeL-zt*_;;t}P1S89= z7MK8p8#dEzDu5EH*?ap&%k>nMhzFLA*ej2J3|0&;(8&czPe+%D)-5CsGhF}B^)TD0 zFq>_Y@kY!t+PI0~9vUqsAy_$>;0JB-h1G%CROnbNj%OC^*RKSHNc|*d-KnH|viBRL zM8cbsd9LJNt!3v+b$ZcBJ+oOxXI0)d;kn9)9+Nb)wFC?i=t{kscnq_@`y+R8uo01; zrAVW-)Xg&Y1s{$gU8g>anZv-ii7Z{0BAS>fTBnxeEFUuRNJy^5i!1 z9VkB1)hW7LaZ!9eOX4t8)I&$m9=2u@++$)|J7I zzurA*HBD}4xXB@346SZ;htiXx&k&?`lX8)+fVq{>G$%@uE|V zxkjhR^j~niU~!KpM*Zjs1o(~oere&sE#L!_LUx?hV2*EYW4{jkHZ2T{!q!jsas#N< zx`Y%493Z8O_TAFUoxiewlcip8=1Sh-dme1VDL5YXI*b0__UmYxh`qVF-j0qgbwMP^ z>!%j8Rv)PY)Wpr)Aw%uVfv~Rg(2oH|i$8YIVs&X$KC}jZtMY=pS}J|Wl_)%od3di$S-0ew#_0~%4^GX^m+Xh@po~?A+H=TO)_s(w$^GxQq2u4@DL$XpjU`6A={>(S_SRFbTa|7n^XOq4Kr; zQejR$VXA<+XMc`9g;P-67#HY!n1#@l=pa$xGUguQ*G{>Xwx~{4apnh@%^NL|3pD#f z8t>JEo{!G+chhfqbk6=<@XnZ^Pb=r|FyyXR2#ZunM7V5Lt4nj>Ab17@ZbPMs1_uGC zEa}6vys!*}6D3`bTJ4u^{}phAzi<$=7F%y;nW?-|9{BmsOps_4#^@!iA$H1?bv9g& zX*lWq7_u{FWrGFHhBc`Ub$q|Q<@{ZC#*Hr-E|V;+U>`=%1IiOjME*=mA>2VyG9E&G zPCvdJTvD>s5(TyPA-88bEh+QnBBg9M?Quho$`$Q0=_V)|BOd#7lH46l78Z&YVWv?komN(rnu6eUHln1N2@F z=~nrsl^{$&4*%vTN zX@fA0GOzbQv^{BYD4tCHR@?B*X~U4@I=%@?L=F+AtD6$Z?rbPF5!A0q&nyJUn5!2T z=*hsbh_HVm147U>RN|D3(MFmt2JbdAcD>tGZzSLz@J~eA(OU#U!QDz$S6SOMkKf zPlDqoPm8u(rlLakqAB&in|a0{0ENd^)G`CKyt=)`+Zx9gcH<6%#|vXu*6(G0$62~6 z9-Lg^H_foy{R}!sOw9iMU5peU<@TkPU7}GPL(m~dK zGwB2v>4OdGMQ;UvF6r$aL%OkzZH!9>tf|s>%kiqwQ-EHD%sThCmAM!gXGViJN5B5p zmuP~%M78PX$e=HAkmVis&rzY)t*gIG7OZowZ9AjVONSVe<36fmWzz^Jen;stP`N4T zCHF_gq%|jCEK&8I)dV`ulIi@$sW4{VNnRi4qzC;>-h*#v6KVNt8ljrT9x-LLFXp{8 zw~IL#{@J#k{Jf>!&V(>ab)aj%3lty>9u)9nUrKwjH$_p1Y!y|7IQl{tV4{n>Hu*h( zg@dkQs-$9fsv1{Ih&lwV7#XFufX=$_9*Wi%tg{u~>m81KcZp~VWCiZt`UVN=lVN+5 z@oxL9)iO(fE4CSu$uY+D99vyJ+W_uuqFV4I#4^5>@{EFAn#+qJh>C)xoZJF2(>D^+ zzpP3-{Wnfsen_^S3{QZ%%w4-{jqtA z0CP>WaD7MA)6Dx11XHj-7GS zcyePbZEz|akRr=-9Yv(X4hN~q>9!kr*nq)oR;y9Scqs>7F5s=Y@KswntHMWoyei^i zv(ir4msBz5%4mb(d+*&O{E{@wUi|t)iCa|Dd^sC$E_s-wVljcWsr1xmPEMz5sq|z3 z{EH|BSAs|9?Z4j}iPe*0q^oCDT+99mgy_3v?6>yAM0@&NJgB128DEoQFWQ6eAs>G+ z{!2}K`59WeobMIHZCp}aPTPQVSC-&FD54)@TDxT0c%r4NP-lazT{Rgj ztPqs+-(Sx^erz|*B*Zb>H@ek$@26cs`K_di8Bi_0HdzFG8SY~)7}(j$kyW+zcKMK? znQcdk)ErOX+AQRR@AXAqv^>wtW`YzUQ8#8=!(0H- znT5x8u(0t|Lnss^j8~956xc^M8*94>HZ)b_eHCU?ifBdP#seukBp4^c_b(!lxc%YN zWe&r9>)uI^Otstev-KQ04isch)JU!xc<1vr0EwTj`>YH4KcxXx@c)$t3iBSQ_8%Wb z8t9o?S?U_;8=xsv2P?d_0UC`V;0PB+7or#R7l;esg7NeMaskq`a$LL~)9nwkdDAWJ z(Njw}321L;;_u4!8VAn1wK^aXveyferhg^~*v@&m!s+T$dNSIJpy^UrVOtN>xaTm4 zpZFgwz^0ytG7x_mlVZHrguQ9ono#)%Z6NIt9FlYOy1p)_Xki_~{fAhQ75f(sfjXg% zi^=go+hmh)xFq&z-ceN<_I_BU$Av- zG?SOXK`oo@z6Ek5i?UR*pe@-{<$ik9Clp$;q3YUpz8lh8vN>|UCDDB0ODq}Qp1Su6 zhG^Gzi%K7N+7jDjH-z6H>+704k3I)X83o>32h*;?B~%LHY9NyMsffX_BzFh9u zsz6m!l5@$LOPvo8nL;WRMCXJka|`(fd==Mx#D|BRamjJ2c@67uh~G*x(LQ9nBvCMgp?pT3xlEf-oUvlvGr7so}oli zC^+Dcb~T0Uzz|s9T%;D&H@;1jLSjfF-FI9(LKHYMP5{=}sdUD6AG6*4RVH_bd}LAP zBp}EQdO*;BKr1ZGjmV2$8IO;T$I!toBsq(?C|$;$I!as8XH}gr9qu=BRX+raaw>?R zD?oSbch^PPc523jmYA2(zm90BgF`$?u}xo0WM_hcN{$aa_NOInprE}jH!7&MhhE5b zTUM3wlV`=oVz+JgyZv7=jV5%BLhnV;dDoSs&mSg)g?s5>>8lHHC!8*43-60~O4aKK z3T}OhT1o!|)a^iPl1fhhfyX~2GQPUz@=IvorwBmin%rk9foYlGdHzw24Rb=h`x{L4kkL5y?ngo^01#>BBFyRjt^AGu6m; zrnMA(_*WBXw=Ra`Yo{BQ zh%_!x%xkWsVXkxS7nTs^ckhgX9L~j?_a|Onuy@l0g1@gWNhH=Su%H&*P7d$>BE2{+r z2urLBD~pK-!4AEz5(+~EmF~!v;BX-!5?HsO zq+0Y#vP2@00SWe;Y75%P((2b{!liEA+5C`X37CpT34h27nzBg9$~kwx$d0}tR)p`1HZ=gceRB13)1Ew=>c_%LyND=}$I8O)=%3Zh&bE4BC{jHzAD)Cu zPR9Fz{+YLEHwXbrG6LO21C5E#PQI_|XyNB+w8a8)Pdom~5QQ!Y^ZlE-Dz|68Am+8w zoD|d>Ci8%2LEQ?^T9UuU$z1ITtLu-Rmbq52D!bq=AFuO4AE7Ev(S;GRMhTCVLBGtXBw1s7lG?8o#Dz zwg5aQvlLH(Jz6o-EdEp}r?1n(zfKFW%6lS&gq%}9<8$~roST_!xd8PAIbuHzRF)}Hl<8wMCz$_ zy9qiM3bo9}=*+8jG3b$T=xr-0`KUf|EPy)ei82Pq$A8h>P_DHr2Ps*(rRV3qq4#NxtB<{f0^->^h9+~oKU*ai&s;R zzse_!;V2!7VUE2z&mCyFmIza|dlo*W0B-8XlVanXriB&&Cml`NB&GpSOf&y*J;^u5 z{^xp3SWG_d{L9U0m+klDnly%g*Z2s2hXs#B3>+uk9Nu#8Nkl(k>@8xGp-v7qL2D(n0O;S^s2 z%A0Q*#|E6hGb^4H)?{CEpYn`avwMUold4I*ll)I0Ys9m2KzZT{(6KU9`|dr3L9>7Q zCBmm&@rMF$ZgF9DsTG{JCv&iq($u?f@8~|;LXBp9h**mDa$XY^?smWePia(Q_kd#V zH2&6Sot-vPsbXYg#9^z@@4su}128!N>jwCgV>^nzjv z#k=l)bw6JaUq$hQljs58L0=1=w7j$$O1*I>c=udW2?VGHZn9Fm&kgwr1?3DXx};vK zBJ>o2p3DrVL^dS>a|lp7M=@cayq%Pf&fotMLlFccwwIX)bu`e+PF_N{WwjrLxLl2> zZkBrg`}gajjlym@m&q#D-x;s(l>?v&Qvg_elce7?=4l~z`M5M@bZPFk2M-B8q%pkvB_L2 zIrSD_^qL+wn3OcgsNj)Hs)h9Hah$Xk44eYUg_Ot9Qjksw4%b^zqm9>n%+NW^9&}@w z1~5be9KK5K+MXp=fqQC1=nw(Wky|t7sp(>`wOpr%U&ka18H6k^tKi@&eAsuCcBJ8u4A=$HfFZ=fe-cHIJX0MCED zJ=9W-QGNeI>XYvh@(*%;k+v(`Ui;1c9sib#@n`I6Im)r=rnk2nYp&Ypk8S3J-n>bX ztV=gacjo?UUR~Rn?jATDI6oSBfB53X%P)^EcAbZ}%Qn7s`it#tcwgNNPZIvsaGZ^79%-^_`nt|wb5j5>Zc%3tBNwChp?rd-|M(S%*^VI@)IgY%BN&1K z*9Wx7@BNS#vW}f}vs>&#!2?s8>joKAQE*dQpoRpN;wf08*|n=D6TJ{U{Q;}zU}%ac z#P30Yh`oTI)gFCynh^l@j^BTC-%wY5D}4)wBE)o!CasbOjEQ=E1=(%bxBg%@B^7r( z=(Gs9%)KxqQXA_Odd=tdmR!^8AOm$>hySklZuQ@F`1<0a?oMmX^HA=0WC2AUN$lUg z-K||NlEQyzGi8L1Rfd}_6|GwI*+d`&Q2Dd;ytlfq-@MtmZ+D-i*x#L19Jua5@+y5h zMlaAKo}bwdPK&O+%N6rzJe6P9Lf>G%sx%#$ijjEgoiCT-4bXF%8ZIJO05WF>r7J)v znh01)18;3)zWZQeYlbWOtM~;{QAOmEU585oxJ(alu_C)R6nM+ciEx$kwHgxFU&`>0 zr?!anNBj{Ncq<4Z&#+TCu4f`p(5c7S{1a!1{j8St=(>RC|NgoiF#u%m3)`Koc<0(W zQ}n~Kr$(xjb^FGDROGnBv};duKMl+-PvIgoe7TNbjZRjk*0vR_5jDdW%KvIEb|-x* zO$H{at$ja+bRIu7=eotny38H<(3aoUL|&A!O);NtZcL&fJC&>dZ+_alz_Q=EN~Joo zD*Q2Bn_zGfRFW_X?*`{d6-YC9u!XUM6`BV@iKL263#t#0SPub67Ld(Y!r!NY2&DmZ zKa8pvxWC+WORrJQY=%gU;H5qY^yD&dC*XWyO+tvB}8l*hmR zcue&%OblF@3Jz5lU8js>k;65;NWzd}2KScTV5iQuv}35dW7EAZI{@^{X7lTXn22Tj+z?h#-LT ze>h{U2})_}L53Rj44Xz#StM|xH(?)IDSnTVyX!gs`wu1;k*8$BY{dM4gOd6IdQP~2 zbf)3s`GMu05dov&oyXa&-=APU41V@)<<&UAzlr#5x?Ap;p2U~RmV9zPPM;TfTF(-W zUtUG~xLVHyB`G+(trC~Uy=NVB9hdrwQ-v92dUB-r4~5zgdcSl$9UNq1jP)}B3&D*L zs0XIbprsfNJrs0=$SttUU&p=#-RGn?r32tD!n5!~_Id*INR<~g`FbbVlsyDu$FZyf z^JipnXXwE*OAC_LM$7&flGD=Qx@i`=)xlT;=i3=T&fIH|Jh6@w6*Y9T6CnTZIr_v) zmp>~kL8|tqX^{4Wv zWrJzQs?b^}J5T{jlwW%i`rj;w>?o`Q>PlnI*XLlf!uQBQ;KKCd{|BK&egFS51vBM5 z`wA+2=lOSbbbdj1dck(VN)aVsln=`V&jpn78}eLS>my|Gf%?iz@i=YS-_H>UN4{2H zuQ-b7ZZ7k#_)8|x$Ce;#I1`AG0ZG|h?(bd!(2FYvmBnXUD(~fjL#Ds|ATChhf6nz9 zws|(iOVreBU7b)vs`)p6ko+0evU2y2^|khn$yaYGpxbce*1J=AQJO)$dC%IS3&dv? zrJ+3ohEvaqI0vv$*XE~sG9S@_09fVK1 zC^4a@pVZ9R5((8XpcTpv{i{pek_;op!}tNWs=ERM_GB%zDt%xo#!uHyjEUD?sL2tU7_~5`k!*|VgGzD^! zCxOw8l7&}l^ zGrxNE={~1+RqfgvrD}%sCof(td)z>UI=ZgkQAr(o79-CiF{nf$JQ2k}qtZWCCRDSX zG0U^sAo6{=CRIGLQ#BDhcn4$09^;am4Gt4xhVtEXO_!W#!U!Ij&w&($maL;l3Xwpf zOlG43mlBr9kwEn!zSQhFMe=pfA%GAHm$NFo2~HGiB71wXj3--s|2JYv(QxJU!D0B` z|KZR8>m$!cLuZ3cRKIUUKw)!~2Fh`T9X2xT<)V7(iu+vnIjQHCZ%stlJxlMw@oaOi5P%`Ux3sAMSTD9NQjHI>=?`{k{V=SHc z06bRd-*$gcd5Xj35 z1L5H~IGMU}Ba)%Y5dvS_#G#-*cX(eAb*%PjwZwcuOy#n0SPGQ-4ZsbfNj7XSkC!V3%1GX*PusmMB=Dqcckyb$$=_XFz_%VaeoYU_S zh;H@A${D&XnUU4-sA0pL-#py^jriHU%nZau{JLoFIqHzy?D2YR?5H-O`<4|#?-}&c z#8(p}(o-lWV0`Bz>PN7cNr74KwB*dmKvHtO29}l|XEq;m0+QuvqB%Gv(1xkdwTDI- z%ff8?Ezx-=I;NJqvI4$*fN!w)kqF|d%$SK#&bD7rXrPS)NwNAjkHSMW>Lpg*FrcFm zX}tx=;zRr3*a-^B+2J4~1WB6}YOTf&;XD5TcKi=|Xb3xz@IdK3CTkrLD;gCC>KZD5 z4#4^*6dhelHmVUNM`=fy<|Tg;UDE%B&ArSo#ld){2tBJd)OW;Qdy#VGJW7btNwEDc z3_zc+%7FNiFNOe%)RnI#-jPLSg|dyH<`lOn{q_a)3?{|BjdlHSn$lo1Nj^9 zz89lJF%!bBjMmAO6}4E}Ag6=LFr4)^@`ZP61jQTgtYha#{tpd&J>9_!?G;dr{^NTt<3f<&^JCtgFjSY^hLcQ=^im)XUw|`bF27^O9vOBk08|oEsyZo+2-CceP^>(3c1VE0UsF&G z%H=~)P(uMKw;5Exdjb!bt6_^q;D;hidthN=_K}Z>A~Eydo^ZnQ-?$@eOl>>C(d-j6+yWY9{T7wIySQL>w=XE$cK96f^R}$d5nh?w|y} z0{9;miQlC$sL=5YkV%9qp!r`iaD>9-_?6L3^>*OT5Vc@QIgA6{G=rxohv00gRE0>w zIK~5(1cPY+RLIzRLXlSV94ZQ8GynpSN6Nq&3fLT@2#FTJ4l#e16)3Pi5{|>d*c*lS zy?bar6$lLUw0E_s^u17>ha9z7Zv-0OzWwvZ%n;Wq}L>TgZ<`nh%0I$@&RlUpKO zogVfia9hCuO2Uil>zsRV&S?MI&=JqYq6?PUF%Po?iS^?r68g^C5Lb(c*Heyt6tvDk z{-%*v)V-spq|*gA-qD}_8h{-o#No8@hD(_E2 zB<4dDgCvM=(BR9IFTVXXdGq0 z0|dYj*l-t)I&-CrL4u$~hT0UswRnq31a|63P$CQ4(24|yavGL_DTHCWdq@z*qGx4Q zg^+k%BdEFO{fLVk{w;^c4~q{OhI1}`A?#NnN31$r-U_XkqzZwi!mqknT_Z2gAsdA8 z5-SE`H5KYw$J1aL>7;ZAZ8WWzH}L;?^}1d?RXPUG8#D)JeSZ0QH1g?(=Yx*f>!qhv za_^`uX}4?0i~p14`_e?K^BgvlWMsEs@-l%`KPJL5JGC){^dX5QM&`sKRv)DK>Vkd2 z=}lLi*_4zyRUkSgt$0ZdZ2C11-IdN-`#+%2jM3y&7i)&F8ZXh-|l}S6jRQ;G-h>W zjsL#5@gn$O-|}ajW|K0g2UJ-7-VARBCtraHHj*(j5@$tbJmC^@^UqkrLDw+5TaLQ> zs?%l9W>*lSxz?fUc=d91+v5JPs2M^_Uc_GJTp6qH$Qiyt=K7iU> zmuMlQ0R+s2nThyvND-=P?W*up>?>eyNF?+drwk{{N=me)VmyFBAoaFo?zDjj1;POy zg7unB;Ld^2qd%Q14l{zZ%V829V#-z7ZQ z0Q{I=VV_>;A@5TvFQPm(4hJn2qPViHI#FL5G95e~Dh>hwECI&4xE`5J~V7oR{i@&~T)cU1u(bW*H7 zNjIt&sRRO*#L`hoypP`2QEIA$?ef8sCd*dMCU)tz78E@MoKy=XNf}S(8%ePZ+-n-L zDr!)P8vsm}71L^CczN(&vI9H5d5F4ZfEKIDj8YVsXs6Gdy!ULI)-1g&7SVJB^w)y| zeaG+!wDe2o^5WX}lKizVG)&H|=-_J@SQWyJ1>0Z%R?dU)zDu9U&P(InLR-7=CYDl= zxZtbrEeY(MI8T|bT-lP9jhy6Jg)M`)1T2OGfq)zH8}?~!mgOx^_wMNjf($Ql+wDw^ zfB;mFuz|*rz_XU=o}UB*gq7Q;u~+_!OC~HicfT1Z3|vKj8>PIP!+a{9<{7pA=Xhy{ zZw4k(y=C8b{)rQdE&(@R;}k2?GzS-t$C|3kZ`Ei?Ko2fcW2dSwEoWDC+|Q7cbmPX^ zGxYo6z>HQd=qu9K!3yklysI=_0|N$-uW@_u`n--{0yJ0WP&YYLSeLvB4uHAU(xD@; zB84X;CudE{fVNh*`j@7aNPD@sF7>?09fRVxk={~y2M7=(#zlaBW)tK^6{|rT-@tNm zSVB4(0;&)93|8ta`HRwBEH-nV5P45%A9HoIctyF@e2}f16w4J9sNVj$B_Y#XP(q6d zR+;JRBsXjJc|uDdANc24(8a4MDZBjQl3lTy_7`Jfq(3fh+bD>3+@SOGL+7Y7bV2$y z{G9_ztYyK=TVewu4KF?}CCD8e{3bX)`JFTi030It%`%e2cSXnnL~>@11b}1QBpj;@ z!}oVX3VAJ*+CqL987&cCB%gr5E(HLFLqj28ZZJRK>YHv1FtQgL z3j+vH-Az3})e=^F?v7+4;MeWb3H%4-u3|Nbv&4C&y5MUX>`i_diL_G+PG(VAwi*qBpGwH3jZX8eCAW+ItKtX|E5 zw?6CMslqekZgT2!|7`C5>FF@}*16t0UV`J>&Csl;G@Aj3mk$5t@z0{@UHn&t&e!zs zp55e^yUK-f|=Vle0lleq|d3RGzUK2tM%?ZPJVFb6ndY{-fX)DjkW`MYSk5!s|fZnrS&S>+jmrQDgPOB~Z;>;_FvGU@geVPkZ# zlf%*l0or^EHkBjb%9>J1pv)$r4A2i0^qW#e@9I?y6j*j~5lZ|OuSW{!Jo!bw-N-K^ z;BJMIeok@PCQQdTE3!)=vHgp`1l=YMeVG269oEgmQM{|6V$%8!DtcrGc?Qp7j2(q~ zc;q3aQY$^Vc{uS1-LEoHGuR(1CHczTrmFIznL+{opY9Mf3J?Y&TG%XaUmPs3X+{9H zYr@xX6T`eFOGw;MYLG3`9i;!6Gog2PG9xtV5PG;P@JfWWF*Fb?AyTDywc?X2OrypQ z`5zex2sw!+tZr(!YwnGEkrf zeKpznorimDKxtb;EckW(@B4HA{Wrt&zn9}&EP{4&KH>~(sjWTv6;_h^)4PkQ;L>*-% zZ?52ZuK&vpgKEc3N|D{(OIpjuxiIQ2fe>FHJ7A%NI4Y4`gkpgXH5dlzG(pt$K$6XR z*7jk<7NpkmNiZ32RRE6;y5tL-PPQXETAH$R|5M&$_BARZT?pw&JZ~jrYTx(X^ z7yq8fRL(gs6lx7^5O08xfVnZi0D@>oS8K28FDQTT1j4~Go?_wW7J-SC&<6&zWxVaR zi}%Zq46@vRy3sJ*?(~Lv^>0o!V_`=!9BjwInvq1W!QIc!7q83Du-*9u@ z#fT3_#967App0|Cz?F$H!2SFs@k&FhFxT%*$MnHyc;ix#IU;h@SL%KvcLW`n9cYLt zwkdytKN+Zx{_BL2z{Ky7b+>n$l>7GW_bZ+`L!~!&U2joj^#Z@3CIYSi6sZTLyQmis zl6!PAc8E!xoPUmF7m~YQhQXL^qlHe%yP6-tD<-lh#_Nt}v`SoBS~2plNX2Qf@PQ{_ zt<&PQ{WsEju`*@%>F$*CPJmkMs_w?W!8_4fm-q|5EH(OQRS&{2TM{V^G>D`7)*UB{-9<4bq+Uy6m;3X6oD#VVh8vL?@)g^Q8ytn?r#buX8sOA z*ES{6&Ih$!H*BDC?p#9~8|z5P&TslqoCgwG(f+ZXD?R&iL9)NY=k2O8LV>N5uEj~} z195`8b*2D^VYTDVmndhf!=dM+CA{r_i?1R-3-m0iMUoYKrjJNDXt}gBxYA(tuDbPg zP4>BGMV4>fhr9et)8(5wg_2(3&MWU&MFXdwp3>A-#guusg+o5zSk@ZTPoehy6TkQL z_8K<&MN&m42c1CXO@C*4Jzi}-Z2A5E znqN1>W%Z_kPnI0od==_9pNp88QwgLqFgkWjf^}AIm<*F_=e)Xd z1MlU1l>HrPWlp?llb9V6D9BI%(T>2lEJ-);to3s-xyyq~ zSZsgQMCG%J*mIZO_kSN1UDKWeUqu3g)7_|>4FYs4DwDD?80gy$ASG`NDyfmEXlgpt z^cwJF+(XW)J0`3FU#I0}~i4r9MM$-mn+jmPR5?t)EyZh67 zQ~NvE@k7f39kCOMZab$wB_chxRDP}mw&~&8{TtYAKpazr(5?8CKHtK>>I5K-|g=H zvD^PyW)raOeLvRb(7?;YttTjUSj}kW?`A+3UZx7ySLPuOH{)6Dgac&ufA7l~U0Lu% zAxiSp=ZX!0EG)jmE^+%J2^W#lN3{eKxgcX5(QCjpHeO@@)Ez6pI*i3S<;7(75|Zkqz22*NHIpAk1$ZWMAl_xM`#i2^K^m_-IkBLb zst$Ws_y?RU0=I9|@BEi9onoB4Gxojyb@}CPz7<_hPwKWln)wsxv5Kikdo^|f-n#m^ zOT?<`i*;e27+A>=I$>|cEi0^BQ$#egv;!4CA!@BEXA+>(`kB7R0*=mKn2qU&Y7yk| z2;&-M6!%B(meZu-Llk*0>?WX#e-WsfbZ1u(fj+=Dho|(U-0+q=W8AfIcwu?+IitXX zDt0R8XIm-9)Pu?~Fs^v#^wMo)gNg7#%4!SgCQaheH>>Scn9%SYUw<3V1;3B?qYisX zu#tN`f@0fm7O9d!2Z}eca1(X~*myagx)vtI(~;WvYI&&K=? zw|Vc5qr~SWcjLhJ(&a-X$%T@ehK-(uV9X0Lxa{9b*wQy&R=K2DEmXO5blC-*TtUsF zY;k1v#OT=O0_nya4IlU*KjFyMd5KT}s;UF~0qr5X@|sD{`8P+F1w?ZFFamKWS`DG$ zPAaFjFn-?ez`x;<#3Nb6*<8+TAflZNAFi7jU=uPq{>PW3;zR34OjMcqWBM+>HnE(_ z`yX5rszBd${Q&3khvI>?$_lqBH;`B)g<~$NLNicp;zt$-|IwXzFPA<@$-1@quu$&gsa~@Vyx$V zmStmxt)9SxysZ9LtB@1xjqtEkW}_4T80st(1{=0^p^l%LgNtGKNy6l3aBpU#A+h4z zzNskU^yk>{@kv$y!|iv5G*s0rbvmyP;`#6AaS(dmRD_zNPKinqrebh5Ffx+J4X?Pu zio^u>h7Vl(QSd~0yX36_>3zSR9>iRap}TVpPnfxT6!UhX{kub}{3boYQtdV1I&V3GOMi^R1{bqu@_j3!$TO}8n<}<1OYZw1` z-pdu%En6e~wRe#+8>7{aLa=0xC~1$js=1bhqxm zbUT0W*k@fH_KE#vi@E*nUYOU}Nppv0{gKUKh?$U=&NwW$d~SxgA65rEjyICofy&K+ zGt>K#2Z0EJD`kRe_(Rh^xtOS{uAooYJC`%2h89{M6%IHMzQ57^1dQ`ts2I8-&oQLt z+uPOk5iNu`UmzulqEHw7V~!EMncR!A$3|P^5)f6oI@zLUt}iIB$edUe_^!LctlWADe%(Xb^8jmlgi!CyE_ak|LlGN9Rgx5WyIUh z3VuA(&K9K;6Wu9S#lrVYeQPl;wBK15Qcz&fc%!pICgg?X=I*ZYBds3)t+3#xz=odA zSog-7b!$FXD^jd`%w6q1=ljtCO8IZ&AALuy9B^hu4@lnB#$@H-p+DE06cv_(v~|1+ z$cXHmvZSHxRB$L=L`16)Wg{76V_$-9{Vf?6LeUJDi-4ylUo-R5gy9gZhlIdqmPbE4mXFyNciyu%e&{C;MjoWA zJ+Jr@s~~zo`(bG2o#Tu>p14pYc;}LaW!w$Jz;`!QVvhob zIj7WoV7{h-^UwZrKN2?lKBRrtJna)tqXS(pD?Za;_Wan$3^B*<)ML--%H+WN#~6}i zbk4ALgTgZu;4h0%FMjJ+;gn!qKxB_YqL2(rPa*FwMONEFO19tLxAe}thj4=*_M%dC z>}z>(yZ*9!uO|z1Jt$l95%>lC>M@RaJ!li{jQQK3A2hi@m^9%fU7%hVvrA!$aIVvUrje;m3BLn=fR$@6ci!T^JYTW{YAJ zVo?gf%9){L+u7W%9*m&`s&%5p0XS4JA%LwQxYeb|`12#jFdN|(N~7pLS*ah^Onkn`h7cCll;MKd$lcW9 zw-HDpU<@mIL<8_WIWk9^C6>DezU9^7tYbHl) z%9nWJ!w0Z1L1B>s3ODu#u6L6x{MG~5P=6>U>FEOll!?MB>)tRQGqDY^L`-`)0!1K5Xs=h~Lz zIIIzp<-q{BJ%wR>$GRJ(+Jn*5hes-rKol$IXQ|Z_tIr3_(u|(?Jmp&thYo~xfuo$@ zp)6Vtpn-%xM$m5SN7ZGKzv|K=H<(OWWV_R6^0)5_>WcDcMCfjhO6mbaIxC{gLOmPi z8GN1xH0ryObc1(Z1v{eaR=eTmE65z_DA|B3SoF%v!?qqqSZwmGV%qXKqou0OZG8M` zYd)Z)#goDW3zK*Jm!&?;yeurA&A-(e>20vPdnR{w3kNmx=k9;({atSD(YTkDKX4bQ zrc2z5p|mRWkQeT!)>=OBMxiAet##vrq>m%_pzqwb=~T_D2?P`cOB$n4QWa$x8N-HR zm8+sG9RZ;$OFdCi3%tJ0$@#5m=G^WC^Or&;dlh))gw;gYU%6f-UU6P!Us+(ICUmfW#IIaiKQ^9UL2H=b zyYj7{l(xoA()}$CA0zaCx!vc!`32?R3kl$jt98`SyctlcHp5{ShYj3N9@o|y3FUqg zOP^Tmdt&s!QKW8J0m?LAyZg=HpDi=k~MyyWh(fSKqYa?!N4N+sMUxx!xdb78HR{mbA(7 zHt-@Q<>R3G^Z(ph?JQzVOYvuzQrjh%KJ#v6No!^(9H59KGAF`P>WoxiX8?!3jm^PK zGOvnRl6k)ZQ&gxSCT}$(s+~F;ss5T0o!7BwFIENm%~A7ou&wZ`5htf#S8XXFy5kSA z-*lfy9|Pb4N4d-CA-Mf`3Oee3X-*{D0%{w1AVv2unhskP48t12&#yo*^yXkOCTm>r zAC~`l-tz|XV%+_08#9dUbv1ve-$z#M;$V+suh0jJ5;vbrmQQ=J?nzuWr`D2Z&zk&Q znvFtMORpC9>>sW_4LK%s$ka1^_{FJ@mrZY0*=M@qb9S1!F^{$$P7vdh4xB`#7=8al ziwbso zhP@+k{n;*IZsyM^orjcGHKi&mOs;KFB8Mmi0i3RYu0=olhKG!rq*0BUE+tqv`^C*8G!)duC@i{a6S2DVq_JAB45eN}Nqb*Q8)757#kfvLf z$}_>PXrn}!OfwZ}MQu}^W7e=;Lc}VL&5BH0i`Kb9p}l{DHSu5$aNO0OgI%mMKGolr zyx{%qZoXZ}`ru&m;A6A6-V1uAzVpOTrK9APR{!Sn0gI4Fx?Mxp78Nm`E4weF_gf>l z&=*7(hBZWeG6@#^x6elcR(^p(0djUoH0TXHOjf(-zvb$JEmxr9!o474oQ>qq29~U1U#RVLcWDj}kSEb%g6)!#J z=;er2FK1b7WYo^)YL?5nRX56Dbk`bPm#yz{s%s1>)0+SF%?_ksa1V<}Nc;h>-jF$i z@D9UkQ)orJ|AuE7 z>*P+nE&i&(Z`MR(ecs2R_|ze|zuU9%C~|bECfsUG)L5E;Rr0*>_~#DD-XWa#Ii~3g z>a$^u436r=8|VUWo>-$#X^LoY1Bu@bh6nnUckhG?C-ztPaEa}tj2a? zE5*ZO*=4eCg_4*^3yDTn7B6Uy*bpT$ephvHNT{Sm95A;gb2_?9iUciLtD_^9Y$;Ux41Mx;|oTyk`6w5}TSd z?tOL>Ydl2b#M}V^ax1CR<&PFqc;pTjK|@;C8d)MvsM)(wVk66odb1smS-h7IAsEyR zq*mc11gij5z6>9U%bRX(SYuN)1*xyV5XP_XE)}D)Ksr2*FDv0c5gs?`^V!)ZwU2QL z`KMIhv+?{^z>{Y?8? znIYgJh_!&IOR9E*kTJn&({dGzXV;K2&U+aCTcG#MkCp{>FQ;n`clDqRH)5P>MACbQBSmw$w5C0bhR!$@N0hCCeh_DeogXe8TY4G3v&g zAIPc16hFn-2tdw@Rr1PH*o5-ARd+~+9FDHpJJrPe}bix!4ODr^t7X5FI%JcgL)96K#6tX*tx zodtxLxF;-h)yoOoQ>z5nfFcJ)2>c-Att_o85=Ksls6X#VEA2;V2Ef;ZwObQ0F@ zJyI?`C2Vm0I?C{2&GW+QDJdYNW&7dd z34LJ9Phi7#W)7WBEN{L>QtCs2AvVNNCRpd_7=J=tG*k*A_5CABQkLQ7hQ}Jo4!XwSUt7jF{s<=8qW+x`C`(V zFTVWMT8Q7v4E2l{oEOLe!BPsd#(Osv7x^#o)@t{isWycdJeCq^6c^=@L;A&dZ15vj z&bOBX3)~4-@8#NHH;dL%Q#7m7Bu^Az?^IR4@Xay&3bikc$&S*UAqKgC(M)k_n0Og{ zS_C|ur4EnN%P_VHL-wi<*Kmn`Ub}H?9wRvR+*ViUmm$Jna^A5`fShPec}<4de)FS< zohz>}ZteTPmU1@HjMH!bhK!qb?HdJ@KNDh%S@~5aPYynFTFWKB6G@AjwsRY^K@ySA z$iP5D6A3nmjsEC#L^Bi<@Lh^;s3?LqxdE)Q$-r$LBd%MS4J2(u#O$IFTL_1VP!y{V?GU`EVAj0 z*|oo4Tn(bOfr8o*4SD=)2E43xWrT$CQ;Fs-E#Pr|^LZr{6uQ2T$lP0BzQMs-B0*~q z9HVFt*jBELDz}$Pgkgvm-mj1LLazsSeq6YV14|zW)^VS|_1^h3-5e_2Q9ikzBy<0X zwG%ETo*S5*hg&?(=k#64C=wFiG8Q&eALab`f#p-^*B^wI6H+4t?&M(z;Xiae6W!1- zIDibsUjXinFJu(3ev=l~pNIa55?aP4=i^Qz5-!$&1Q>CCc1Wu!*u(qa=Ks_D&^mgV zx?F1iD^ptgJKrZI==Pdk8`Ha=MX_B-0jE(Yh}9z!Z{?Z%?ZM~GH@o#%f!Wn9)62<6 z8)~f|O?tPvf}Km*w^mj!`<_;9Ag-vkf~4LeFVv_2)L@C#B!bt<_YG)xMz=T=4708I z+Kaq~`TMy=RijI3Yt!VXf8l;mo_1h-JtUR_4lDIsTo{8TN8^Is<)iaLgAgs*i5!XFHGhzYr>4 za$7TnaPvsrpI|C;Ho75mfvrm`{hTfDT9{6ABKClf!0_jBp;!wv$3A($hv^Ja@JGiN zPb~?qW~(imr_0r5yQ-IjehinA%u8tRlqRVp%uU|Xu@IG8QXE!$Wd(wngHpwIoMfl( zF?fb1j~buEX}rO~TQKDH`EHQV=bo$pt$VwrL#I35Y?n=AUR9&~zXA{o(#W@wqT2DN z7gyh4cel>>ANlTrjd{3^G`>+7Y-EX&F| zej?=Vv*kpjIwZp82

D*W`}M^ofFOANd{PEw8Q8%vcyo+2!Zj4aA(wh~im5Jyr%| z9T~eGo}h>*Pfl5gKQg7V!8T^DA`xe&<^1@l(?l!|hrxPmVLUoC)=6mTySs)4BJgF1 zy{*}smDOWX?n~IDr90t(O9L^?Vpu3I7&rFU_=3ycDjy>AJDnsTbwMmV{{#bN!sDu(+WO_)AzmT#82xxv zjj?nZ7#0W@0I?UjUhuRzao^=$FI^s)+@)R$#hDB>T1@<;R_nd_XPT&m_&DHgXZY-{ zdnoa6kYFGNdhNeq>pfP!o&81gP!mYkj&u--z*v{AE-XoJgr#BLxeiUqNCV8bEa67a zt4PpN@QL97=17%05_&Tp=0{V+R;6+Uw#9l$e`_SO)4!F}f*IXeSD}p5_owX5ImC|b zKtYVqCv?r^!HoF|Nzm9QP#@n>a%e`?B#Q_KiV`juNC?qKFGMRLhvR8NPDuGP;pTWa ziZK(Q6LNOQ-aiC~o0PnoLOLwC^*|cjL3OQB8;ErTGXQaiWTIIBw5*?u#ot8ZNRt=+ zZvn&i{|XqeNCrrbnRC5^6)T8eA;JQ(s_Nn*O7g0r5+796RTWj#l@wLg)fClKG?X;d zBve$j)s!?}m0@74xR>e(Gq6`x!_m@s42!52=b>k@y^1&l1`GVBWLn&VgodZO?`APw z{%ZpiQ^E3bze{RBteNd`ZCvEcdAsWIL;K4?3R&jYKhgw!)&pZgouBfK(QkhJa^V(@ z(llLp^|f6o+8e4HIkpnSk0%kz|4C1pE(9s%EChv?T(SB{s*Yo1mRi#;K8(dwN+@U>hH?c$}IHX?nGs59oM|LxlIFG zM$}{kf02Awc<=h7Vyqm^I6!@W{0&|_@D$(9&JXL?d>qIB3LKtff`ssS7DuX?<0unw3%$X5DlM1yxZ*wArc^ z+`=N2cN4K@*bqa2+7o>T5JQg!S=QG&D_KX-SRJr}tpXW9mIHLhNP2Y{?(3`So1u~E zBviPJ+K1A-S{Y>Ft8`hcV6SaWt2E*rfqaX&W*F1zEn+$a>#4=ZUL+w_0GWUoohSm4 zhzPhV+qmUhd9Ziw&DSO~R6Zgd3=|hs!EJ^u%#Odq=4N%yzP*P@jj&^*wpx>!HOAWs zSYK{<(yvs=ZA!o{_JrR|@T>9F8@?}#t!HAzPmR`w{f>*WxnKVNdGPD4GZY|idv0U- zEK)OAeKHa1!65{u1}bXf%olHRjdkooWjWcdZm z$)*zAWT$WoxieHGc_}M42@IZ9`^E$sD?vS@XeP;lG;Iy900#ZinEKG+FfA)r!?#N8GDijw<+`O=nD}ZIo5KV6@{p<5^6Yt14O``qYi*r>3L54dVy*KL?FD~Taely zE*v6rwKx_$i=pvnn?4@QuV1J=rd%5p%_qYj<*}gjl0erGV3ku_rSv5CWxTd_mTS;l z^c? zFpw#Ye$mX4Bun=PHY65cLS@uu?IttULduwp?M2c2jw)FA&F36T6(*r>3KjbU1O{5* zDr(8}&uXMqrs7~|yW^B8aYgJ zY)k~7--lBXxlXzI-tGifSmBtsZ$GL9Cv{`ok*4gGe=RT&st29ec@cnoqnbZ+h$1++ zt&%WNIeTU_cyGb;esQlZLIx)SUxB|xnG%Or{BgP=9>CP8tpuUdS!*GRuf?*zkN7h9 z&o9tO@?|1ZHw@?Omz5h7b~Rz9ao$hb``^6O&*ZvLe=q?A@x*x6Hx<-v zzDefHJEn6O1k014E3hsTI@0T6Ie0q!Pw&TS&nW&XMcGI43k5^?8dGGHSE7M11DO*9w&vaRoFW zsT6ybkjwX>SnvuWT>Bwf-h6f0MKt3%ld8Y8tFh|lc*UWtk$fudaaLlq3uFBA zrhb!H#YyLOEH?*~EiX~`cSJDbS6R$RaXw8RWZgxVo`k|l~7Fp2&Q5adEusxui6Z7CX0u8D|@i0HuAWY{p%Y z+#q2T1WkPhAZ`00^7_los&j5bDxBP{SQeFZE7R~vi)>LU6r!od;w!&D z?r745HqA{t5JgpDz{JxY>hL=gcLc*?6*y{&0|}c89sU7+nJ^z84X!>@KDqJtQ`igo z@m?%4TF+r=_%x@qh4HE8kn(1P7-n<)`8sY^#{|&3>VmScAs;jKJQXf%l8ljk zVp2?_3#2?&v%aw0PCmx{<_X$;!H#UIwO95}&CD_Cc{L2EVN^daT`>l*b;F?Sh99uu z`|l#x*S}B3M^sm|=qL%|$i|3;jQt@WlV^@Ada0}RG&&_TUE-eX8vsQtJyi90R}G(< zs%3oTO{(}@I>b6hK;BZt-T)R?GUdR~itQg}6Gtzw^|D1b<$$@d=fv1ZnHwREH;pW> zjHTKhf;DwAduE!Aq0#7-2$P_$s=-br7TH?YLfUaP0r93_vdH32t>UF`qnx45f^lJ} zZ8Wh790kAzVtfTh3{zx`IW8$o**GgAgYi9gKbodKW=T9s79kZ4{aYjxxb$(_@Y7`7 zQkg%t$4l!}FR%Yh)To3P94f+>*exB0oM#y!ZfPR#KE8v#8fS6e&@*9l5u;T6gXWU;pkzlRYAIv};(1|QqXH$bNf3T#iY@yW|mD~wdfQnlf= zTD6Td)xfR&@#he~V^lP%g6L-aMWBF~vz7{#m0`$s$J|}ENl=87sno50%gpzEub`TO zHo|&e-KC9^W^9F;POPcdWJXQ3xmSFJE_}Uld@5#Am0p=0MEpnKJ_LWUz@D{Q53ZzM z`{NiKpk%yj`2DK`|DR*z>{9}B^0C48Q$1)ZfyMQ!bNCT{&w4MVffSeCcW8>9=Bp+X z**!KQg03?>LY$13+2p}Gq!dL;{f8+rG~$tEA*?1N-UxH~5$0tp9rcn-nD=7fZCm(7 zKnZ93xUxBQ#-Xj|tfIpH@H``qh7HZkwzleT4+!-?h2u~>>7<$9Ba;Uekf&f$UXi@M zysdYpBkGd2pdEtMdB{bhmSvsrR!h%G8FR%_48C}|9J3%=2bzwPTHeg5cBraqa~O|5 zD}S_>Cbk7D{CY|UHxZ=XS{jEGKgBvVJp1TUS()~Aehi~|{@IgW{_P_rWS{D-DGy>_ ztg%FsCXN;lKD&{!?ba<=`3{a;5N0$mVnF?f9HVW!TtSb_n<1@VLEvXD5$8}HCQ~`9 zj}4@lzeV5qJ^JWkWR0sK*O4(}@d$QgIO}`-1~SmC9T{s%7%iwKk#@Qb>`|gPv%fqx z)~%FM)ir8_>f#nBhSwY6F(z(XirKB1!i7i1sX+is(MSLf)Gpcn_m3d$82_O0DArCY z6}l?JOi~86zIx1GEgb1tdi*dRbTUM81xy{%*-Al41e{sM0yR}Fh(0;?DLqTL8uu5o z6B-^z>vGEptzwQa&t|A(W*rH3>S^f!2P~wKrj_hA(ir{?tt2#-534 zV!s9hZNd(%oQirHxCN}!)bd@r%t%N`_22ICkbW`e=ut(EA|T8J9dsWzDzH!5H2E#l z;b$%4znwDf60DGBv$MoocY8UvKgwpEj$EC~r57a4w142G`iUn!7|mD#hW`RVZCWd5 zhAYs5ug8Cw(kwo@*n2X?uNT+Ej#o2Ekh>aemQN64WBEc>C>X5AluRBCQN7VSOeaee z2nZWJ3d{p|GieC4*`zTzwCa9jnx~iKN0)&#;rcZ-7X;Jn!_y0v*zh!l0CoUP7p+D5 z<(#7OIH~gS-`5MA_!t~a4iJ<*9wYUPj#)_F^@pWj5D#kv6*}jaq_A7N4eSs*@la?9 zfu0(^Rkc3262F3xH~oVZvwcVI2Ih zKFj~OkmmniZ2{IH0B$`qQdwYQB2q9q1i>rKE3LSgq`0)Os*aYTl8TDDj+&;ns*3uD z4^pZss;bHw$~_O3eOgeM1NoGv`hn|T9#ym8W0&4w9`md4LDukWZ+zIM~GT#xw8}(B9@w3T9ymbrka|gVP$1%d+#6L=RCjj z@E13S!ylaMy6^Y(9A!OQ}Ye~Y}T~Fp;6J1ia~yv0|xdWOah;! zz^_%STN&r$#L9?SnU#Q2ci&OUrC=zi_K-_|E`CTfGps*waU4t`1=K|QptCKDQe!J# zF_INX+#-HH&HFiHHar8OIblTJ5W2p+W;VtOqeL+b#w9ITEMI!AWY;}75hL+s9#ZFl+okqzad2bCvE_dbul z4E1YV+2e(}G2y??05ltfvMzH#eOppegzvd>C~nKxrEtsh*JhqAD-rU18?lcpXWWP> z`P-kt@A@N$9wRZu$O?h-bK@A zM$YNFoB>7#fV3lWmHS(*S?+Fcg3MVY6wpESmC+cKq1rU6m9>HEDKx+bNlV@FNX0eK zYB9guuDsL{l#nl_TlQ~{H3I%Rm^I$GP?7udQ^lwxRWnUUzaDG1^6gaXXAHnv^|A}z zc&cCC`oqgqql)?nz+(41StSF0-F!Fo-l8U{31Q&DSEt^(|r*K~^ zriUaw%9C{C_Dd@-1#%z-A)$Z{e6}UOvWTw5W7`ZSxl#b%1rOo~H(EnB00WHa-9%!h z+WN(5Ljo+ARasL?;4$t;>I3SD_1nr@E08MSXnm0M^xy$;YN+WADA5C<`GDSoWl0Z( z(Li}=%>n`eP*=JgqKGD($XCi)yMRCEG}SoS^w^*)d&5zUGZ)+H`2_WJUfOUcK}#72 zW@99?tPBR9?u(|NipT?l8M$iLjJ-mYf?gStVqol0oDw+O6;VnhR(<28f&W&7uLz+Q znJ=&NHOD+0Jniy!V&r1Se`{Fi&(#UueLwk1Pt9<-!_Iz# z%#DE3g5CVb-?XK27r6Na^}{yTq?&R~W&h2LehhRnymEN`yxCgF>b%C(ztXf`Ocv=q zVV6mEI!rZyZz$zP`-iEPQKh2Ry#Rp-)5Gp&@Bg&>@EepX3Pz{f0L{NuP`9+&JY(+` zR?~yOaHihJm+W5h`<|JWSaNyP`Bs}82{q*HYTCbRxwy=VHQ2`aqIXO1Rv;Ug4XiFu@DJK zA^_Q#QVXPD+2-3iNr}T@zyEWxQ%HPwzJ9W&H#iQ5*7~O{yM9o81OhDmIg@+$>r-7j z_J`rKsWsl7a^K7C-rBu&Nj0kMD#d9ZobQ_`>p%_LKVo*`2JazY}>3g210%>Gen}u2H9LIke znG6#(=tJ#GM@-hLGnyTC>ZUe+~?} zy)r08m9a+xdNzRPMvMN8$_Q|KULK@BqEAgb5B{1NGcaMRSFsJOWh4I^e!SOM7vMQE zdoFzE{?B87zWly>)Zt+Gq20flQ;i-+%;A0tFq)r0iQdbOU_oMjiqxRwK_r#F$xn+a`HPSuqo(E?5Bo9-p!DPyM06G~0g z&xZ{fDxc3F=jl$fu1zMT6p;w zY*JykU5EA20ETA2fs64*3oRG!%5Q8_!s~>-U!i@3d%;+Pz;6NMduT;flJ?`KY!8PX zEFM1)G7x=({pJB;Phm?wrglfdsQhQ|N0KGpZ|mI^7w*lOTCP!df7;e9$I6TX-dgql zeV`qEarvQLbHLx*fp|fPWsMYvMHTQ6+%My>$eG6(8w?zS<@8?M+vTzVZb+VNJ@r8y z1G24q1EGP{Rr>36)toE0e0etL`j&h}n;l`hKKFbzK^xcodEOmhb2h;R zWUyWHBZy#W2EUHg{r>jEez({0nsb7biPDQAX6uZYe#171G|RCSJT=BBgX3(&s99YJ z59Yx{^)0?2zo6&x+s?M4Dl(QF_fV4WuTOdRW173vTeyMrDY#V-Iz}_qRC9FA<#I955McWMb2kZN2TARiS%){wWNY{ioSI@sDO&FNU zzqnDZKZ6^|V9ay&#fos>EpiY(bzRCjj(yw2cG<6{BZ?6xLor&4Z_Veu2O`utyKl>6 z>3(?w4?N}W{uz0qVK#LM|200hU7D9xh_ry7?ln`+3xOds>3t@)z+lAmbr{)sK(p(S zy1^^;@5*8OKkI(H>@2boOXab+D{POI(x@vj|>8(QkhTiAVS?V2+N z>%?SXrJ z0o>tyduvr|UzG}WXrWDAwQx?btWIQxezQ?v?|pHq>TL%ZX|3o-H+CgUY1+_KpU9M_ zSa{dp9-~_RzAp1O!Mgs>w`?N$)(=7+EI@s8R42PEedHoevQKcZBPj>f_x1=rM;<;9 zvyeBxncN|*#P+mv-=swhz<+ri51KX>;8~jpOdv5{TBAS9eVtT1{F+}>v1;K{>*CF1qB{qMkEl=#-yH`GXHWIGsTnw9xbAq z;>#2>P@)I*#wB-w2=%pOyWZpn_>Sj=8)`xZ3o}n{*~r>(S}2YXiKu|>2q!yn(WOUJ*q?d ze!EDVBUVlx+{rBnSIj%M@(B9h`h+rn^?1_f@M4Q252Csn&v~qOVTRT_pP4yNv|$_% zCa3-PAp2WPfhZ6&qM1oNq~T)%&|~+1hy8_RzrIrLDaocSycAuH~869-h||5}EB{OxwNn7bj}7rUb3Qq_&b< zmZApRKwUT}bR)Y}#nKC*&~@?Rc{>O(=!?73abwI+i+=)X$;snhmFS;=o49I~^8Gr$ z+kM|JX-8Z#t*9qzddjHL&^-6^_H7{uNqjrzgQseH=fGg4@W~0(mocM!_it{v`1WhF z@_qqQkmOm;`F@xapD5}lJYH4^58MPC#DgFypE(fU2W8Bfs?w6_bQzuO_Q%G@ud48I z6I#H0AA#9UDN^73WGi)ElB}J2lxQUej(DV*`zJI@B+~+0I9(pyiZx|SuOJ~DI+8t>WX@ z%7#IG?~dW$miH(%Mn?KW{frdlN(R0&_M|p7lhu`yt3MaiIotf0tL0c^^{ z6q}Pq3jCg=7M71706Ynln1s|uM>|hMs<>@16E;|EJn8n_e>p0i?A!kKzinsvB%=p@ z$d@&e{7`V7hn$cg;Clp8T#12GIghD6Teaik9*K>$&RtAho&hY%)=i~!&j0`XimU%G z0iiBSK;&JzUv5neq6GxH2U2AThF~g{P7jf#8YtWR0{nu4gQ(l+f!qB80;$^qed!e6 zK-u?#1OBb^bL&$iwG=SJjTO&PF6Ko_qyJvDyoRCu4 zfx0vC>Nkwxix}knotF#y*;wL!mF63(E{KECsJ46pKR}t26e*8WC-7%@HB?LiV|x0g zFUPj~>2CSu@Hs~yJpQ$Lw}#1f_9J4rdbI3}1n<%K0*)?kYQujQDhh0-eVvemnA7hVrarw`-`PSh-{cXuwga|g5uTHfUNO_2wR)in>=*2DO*C@yB zV(L3;Zasghy*04$4=@;A896$zZ8@_eR%hX3ZfT7#OfdzIGQTxviBglc#Ud(e2G|MF z3cLaV5bh=|P;WlCnktoR>}YPi>V4<<+4JA~&z$;aJqLFE2uji^>C+imqA5zGqCnK^{3g zzQ6GR$YaM~p=!oo1k#e|F)z~?UD>JY{>;nB&{Bfu1t6!z*jDzJYw7=;i$B@I*hqKN zyQCkD%G!n3$%AFtxf(3oIvt+ZJ=q)+_r1I{;qs*?E|(NSNuP3fI$3MU)C;b*0;S;b z71E55P~$G4l3>;?UHaE=71rjHKXoeC40JDXrsZ6dIwmYYv>iPy{R46u(>}j04_}3f zx;%%wNPR#>crZ!jSm(wAKQhZoU}hr5rD839&iT+g%_-Yx<;Agc^QObC8cI$H3SsGR zUjZ0ZT{C-t7F1{#wzyxH1mr=!zQ2;% z8FFFQ))|`xi(ws<9#gjyGa6|>qks=F|M~6=dnXJc4pgWg`G*W>W?fn6BjQMxckW?gMQq z3XZmwWVKAUW_9Cj(Du>F6CohK6xWS6eB=zjuEe@|zr1o&&iz5lAMjFKNMWXnCNBJM zbljLaxizjK=_T*{fyX29xM!uITv(?u0bU>w#ZALO{)30eMOqGk&QnbL&UHB^e(W?w zcRZ!G+h4o+OQJyzN`1cZ7f{5&kH0$tFMJ8Kmfec!QZPs7tkq*VM=u}xwEKePaC zcF5UuY9>QVKPq=VM5@)IAjVVMYuxD+iA<{G?13UC##NXV|H0|;A>jq`dsp2QcfAM_6+0a9Y_(~>4mcDk#J)dbwRmCoy0PVrC%ha(gdR2Bf^LGl zu*Z8=TmqtEZe*M;s%R)O8rHK293hvLs@8%L4bBuRNoFnC`L$$S_UXZ?SL|_7XgXG} zVfm}oH9+k=qHQNwvhUtN_9I3GwqwWc&BudUPm5P#LZ_&~HfrPy#L(ikS}#fy|3DiU zH2YM6o`>MMUu8E-g<+RKHh9I;6OZ9arB9zu+*`XD1K6*^7@=78t6|{lTe}$jP*6L$ z*x=K&uPEqs2}81dYcLf`(eFErIUb31Lvcc7hEBKEL1swDKYb=Wya*g_g%WnI9m*o= z^z9qNImuEsC-$B@;iJg`%g<#bZR%nY9KV>g5W79t8}gjw%LO^i{jcrN2in_2S{N8+ zZc+O2)3sO|j1u`&yN9WQ(s~nby9cQ8_G4E+avQ~Kn(B@noBBhTsNXylqWSaA4^4+` z)K_!Mm<;~2DXkVh(WD8v7r?Rh?*93r4sQ?{36d4zbPp%H(08J<8$AaDjTnFM8ou06@Yvs9oI^Yo#aVQ1 z_l|uJN3|mG0&JpH541YZ_iU5>FZq~|QVq=RTi@kl7N%G}u zV{1vpC-=I8pjLk_f;JzrR(E~C!NeNL*DYx0)%*h)8GG5iUy>g-LNgx5fw5GytA5^&s zrj)M;h8q?8b#Cvykz+RF!?+ld50^}N&~$MDQns?G2YDk`ECV&m&w25k6$~N%drcYj znynDBv-B;$>gB=I4W1hkS4`~(Hy*mZ{}6~U6mE)$hhy6&N;=N~D{8vrq==o6s7+mV zW5!A`u2EE^ZQHGAn86{*TxNGCkIR{YE&jAom;MX_YVtq!yP_K1b|tJj&2)Jgc%BQ~sS_ z+Ol?->G9#HOqEr@fcb@L4Sq`Ht$tk6^gV4Uf8K+4A$Q$4J2%5+%jVg3&zI<5v2 zGS3)cgAla95GQ`T6;p7ide@_YG3w2vKaK|PJ8rs)fSIyq`7!OZ zRK2C3JT}RKMjh%suMk3$ndbdt62~vUh1-(W#UG3b9>4r#(WrbKQZLY=|J^6})zcLX zIYxnX>RZbs99Aw^YD9zS#vq|H^OGEzT!l}20#)c|%3P}}0_=5^(VOOH`cmfkWu>Rf92>PW|ii~BD%2?K3{yz07S z1<`@!z(A+n#k1*&hr5y%=dAU$A{^1OL*-U~eS4J~agsyD9_scv&-;Lbym|Ov-}QUm zU)p&CW*j*U#$54Ze>mf_%{(^waKxq-t-P{vM4MK_)LyzNkBfDkB5as%$>pAp*u+f+ zg@-&v;)&Exn`oX{@pq!15qyhCPIoj|uEi?hv0Qn-12^Wi95l*P17<5LmOe?F&PMzf z-Kl`estJ`m5XOIPJ)^(t-vK+E0&dyS)Wb?hV1kD8Jm{!I-afeNnHL!s(hIh!rW#ex zLC*bCM5-aVplikQ0gmtIkC~OOY$cq8NIJ}|RUQ-ub#WF7mpKDJnI>(A!}oG{l+6?Y zqf@o<-4XdMLCt>3IOp))#Xget@~KyEd;_^zKv@Hie0lyM?0}6{_c}^?^iyAt8|Mda z>@+4iZdcSZk4KX~ql`0I(BcTH8#@L2dXtm;VbU&`woO1rbK{07Z zKp$D=X8;$IenpjDlKM4SDZygzt%*#xEw6{>@zIN3;#RoNVVKX9qE`5(fTZmi ze2DVZP5nd`<9%(_;>Eo;91qh6TXNUV9P~ShCWJ(_hzcIAYlTONwm?^}<18OhVh$E6bhWW=tN2*r62xu#jE7 zA&xy|A8WN-FX4$h2JmK4x#n>z@ex6D_-%fzo8sPbj&jYI;NKsV_WZT+&3cd~Ipi!p zP!P~g%nix((#Q+xG4_#7@m`lYVqlwaE!iRKSRm2}2bqsG`4U1K%ZAaCUqoA>bg$T5 zDhaneZaG&{l`d;fykiJ=`M0HiMgHOU4`ZJsVf98LR0`S^u1mPWci*^zDQJriOVfA}$uzKEKrkyNh#%8?OugA0T*ui`E4?QtDmtaeODS8tBTNXpWETf<;IHoMTEHYc zI8L|Q|A5Wf%WW?H~%UAnRwha?hC>6h5n1Zh#B zk34)JenDedXJ5SE?0)Y+wr`|YL`=+1(zdJLtX=%_k@#WQ`0rioLMcA&Dg}ENak*a% zO2otgtOEjbKLM7T4eQR%HAe6mokCY4t}!M%kWnx5aSkXD_IYm(-j)oh9aZT4%+680 zd=vneo(TsYJ_LTGW!`!*Z|Qif$aIILglWkjcwMOO`Wg@yI>6g@3T$`w$g;`!%b2Jroas!kMVkGd3mZeQKBDv%X3IdN zx0kEI$lm3N!FX~f#Biv@jsTu9CoEy|922ZA-PzEY|F-3)`Xsz$azm%mf*gOi6ZE%o zYsR~CJ%?@Nf&xl9d%M%JI3;e81rnNe0b9S4-HH+4P31RsnQ%evVoti|09OcZjfnwm z2?#B9EB_q&Z=#CvfN1eTm{9%`#=zUaE}wu_zo{^cU~Sg+k0GNIdhFBqoQ>6@N=LB= zQ2pqwn~DLxlM$GN4jfx@G`rO%OI2Y(^TvjE%wk{ys$zv`Lv8dGBci)yyq?+@S$lVM z=e@%hUv2nuu=diuP5onjd%a40{I;m6IYq{@jVe+>tS1r2Z1#dVa!%LYs@R?%_!aUl zq|UTH?zEhKKw47c-SbXKxflM0J$JuVVC28|xnAe4X3tGsXs?wWN31YVY+?TJ!(kmB zT@fBOE#`Z)w2n{G0ugk z_G-W06Lrr$JgTuDKuQM=gax4Yq#~Ue!GRh5saX7i-7_zzyg#i+Z`CJnJ^1gV`u&a# z_LG90BRc=yZbyE!=`u^cwA9BACVb@g&e*dblZeJ`UbV|UG7JR5l4gDfdCce@yn>WV{u zIZ^NWAO2V9<@a@smsYyaJR1%aoO}BIt)LuyT^uziFh6MmQgT)CRna5|LnVVUb>#N| ziVDck@mQg_sGoes{o92N#)Z9ZH;X~I5gcAV5J^F{xAK?0276h|8bKT`c2M=vXyZDU zmG5Nd3{YE*?W}`K>1|v5z7v1%>?}^yDhe;qSCK>IwFH?T@y^3=_!Y z%xg&Cd9QI{^zreI$4Bo3xc$-S7!tw)CxGtiG?8%JzPNzb|A7tl%5denrjl^cS#GvL zvv|!5Cb@oz3xNz2tRQHZkH^jdgFBRuCl(5gKJozywvWrAxRbUb5BYhC_Ha0!OG`z2 zna^^h{@tQwniOuvzBOE0sLUl%(GV5DzL1$~er{p>m;IH;$Cd9k9bt5lou{9@=ycDv z;jSC~Yqgso#-S_0)K+)UF^3mNeGfi0oZ9($Eavnkv-7!Sr~jL{ErYzB;WVfCmOLxW zy>MWo&a zO%UWqPwdlJmzR&%u`wEP7#R^Kk@fkkj~jc>3oK>bi*%*-r)eL~xV$dEIh7fnDdxtt zURLi|n+p1q`aDzbaJ$}_^KRz0d+*iI$BOg!=-7b0CYE+g9Ji~$>3J*E8}kcc@OfM{ zMhnpKD(>&@>m~4v^8v+G2&`Vd%|fpO0;z3N6XLb5&}xtxq%$@3vNF5Fpwt1jsh zwi7~HDZn+Re?Zeg>;KA9?%gw{Y3qJl`rWuxa`M*-189wFPaGOJym#d_dM~s-==QM; zef)ma{sTXMFFIKkGpQR)Ka^-{(3LIg+TVCvw-!u3t@&s>Iyo6cXdktu(HWUS;XIGW zN)-@{`M40os8*y~wpzG{+qGR_?F9JMdiVk_C-7bU>cES9G}lt*^#hOaz^1gx^(IRG zYtG;PeEs}6^(zKK>o7SJ^2OS1#7>h8D!MiCTEItOhs+Tf$XOB^$AQX>L|j36u_IgP zrO*9*6q!aV=|IYmadZ^FKV(~+0hDg#*qXcpU_$N$Qgcrya9t47l43#Gj&tE z*6RJ#>uJ9CEru0x6js(FA60q_17*T%AVG%Y$Fx_*c4&}fvxJFs05#NqH$JvBRxCsA z=aZVkTGd3RJ+Gdk2nVW5C2zeV#d>mlqYF>S8?U_{5at1<|{ciCtT;A%w*1XHLDAQ={7;A z7(cVGL74)N@n!+Py^VTOmp?0rjt^nhrJ@LUM*SP;l3NxctY}hLPf*x3;RQ342)KL! z#7$_Nj?k3M7uR_@VdADdm1Z8zvR<8gQG<(TGrU`w0^12c12%JBvtEIusjmRQ z8wD9A9_j_CG&;Zt4D1w#)N%4_5+OQtjmAeJ`r(Bci&m!PR4?5$hk_j$wSp`5n>BW+ z-Ie~gwnEe#ZZ304{~an5o-|*FU}>lU=un%EWou;h3`i`jVR8?5SUpGl@1a26O{2I@ zH_J4gvX`r0Vje5AOR3_*|E`X`wwY?OI&V4dGTJ&Ab^0mxUT1pUe}&t}HURy}4{MHT z_Eq;?T4x#T|18om&WAW=%#O`KZ_KJF1pNMl0ZJ~>J;$Pdu3oEGIlHsxUX)UqQ_HAw zU58(J-rM_}iI(Q52d#Ns8)^P@-&&!!X)C_FMz#sqd5oT0c}4)Afo_E%sno!US+?R2 z*pti6s|_Dj?yzAPRK7@MjTE_ypYK;eiScU!8?s?4kZcvlm4}6*eVR;KK5LjsX(tE; zY*P*jsdVzlUu}c@hb*4$R|wGm{QZZx+))V9;WUzO(UvqlIcTodZRWp_(=e}Y22-bk z$Vxzd&UJ?v0BimVyz>~N-$7&PKq6x?*x37KXa>cV^1wdSE^Z|zd zsnThYs;O*^;ty+FY)E-FI*@UI&wo^Hq1p&}{jwQR_rx1``C|)c&jxz%{F${4TWva5 z>9nrj)B}&5%07`7USTiDImG;(w0EDJ?g>?o-^gg56814M7$Sp8CHhdv3qqm&i;XWf zfe?_oK*l-3z*P8o)d#7eWO}}AprC{DwO9X2%2L|tB;Z$ky7<-cGhkhuCAozkG9e*P z@VaA_J=}1api22%Ob9OX#X}-$VLGq$c!jM$YwLxvwVzp>m2KmAUh4Rn#0rz z57q?wS;Go5g&heRa~ndh`_#)|yhJ!anUPgKu*xCWDAu$E(M-t~V!aS#E2hv%5P?)3 zIIz53=B6v$4vg1GnUYr7>>IUDZC8RJ7!PSF;e50pz zWJ8M?Y0c=lrriM0IWixs>kuEDi^!}}^N5X=GnzvI<&WinwN1i;yMI}C(tReG)=A5U zet^smR=9+92X&>}q(cGGQTQXKe*34>By(PV#pp`vS^^qDILssuFR z!H6)UoZIb4`xFxwyx3P+D+(xdIBqV*aa}E$?W5yv09UV{al#E0QV#Z0ka_mni6dD! ztzi|qt3}Mn)HbePf%n8sW?q_CBwYzu%PI^6p=KFN6@v=0Is$tl-nMjRs^3GR&ET_5 zG}1tOgtwSw$6{24kJ2s-!(^w1N|wTWFlDCa7~QV>LZZbsFn5Rk8#Iu%ydzTu6;)6( zF%LX8sg4*6YF?k;>!^*6sm`qN}zPx^uXQYAb6%kx)^^cA;P_sq1G$EIkFJ?=V` zpAgEXwCG>8aA>fKnOQC!MB@(GD*BkDc$HXy-Gl1%81hOcN?aH+FkeU)m-gnytFj;& zW>QdTxS@+y=2gHA7j!EkEt}rsb92o`pb?#23~zy@9C^025 z40$Z57DOecB8OCmQj{1g9N!KYigL(+)n&o8Fg`=Yn|1*G0eJWB@glQOEE0KrOFdMk z@ig%`K~b{rz+~*n0x2Puz_jzgPAfo1wwxG>VkV|_xvfQ{)hSR(z<_{m`-1Zn^2DFX zpPcB;yKTuD)s`jvSjrEj#q?-p-A0zklRE zc3=PZntH{CedsxZqFc!>9aWC?_^3y0(o}MIU>3$~>U8J%&xo4*QPk!!z~3)$Z>@^q zl94qI#L%RVOQPFVK`2EA5Ge=b@`yTF-U`;EP|8UnwEwQca{CoN#6s1`48fQ3`L*Kv zcso9GI?i>^M^#0cGSL;ezc|A$9K^K;W#yaot7Z*Tb+WwPSY4E-aJyqGJ#g8o3RGAY z5C`gr?&8c5V8GO2>b^nQO^n;g-Ry+t;gk=kC%m(1B- z{skm~qap9swGC|gsribzGQmmv6+)p}UpEVbwlL{r3Q{+FK#K}`TtFxKML#j{Zuv#l z=S9>^V}Wqy*v0#k>+%F5dt=6{B4fWIU;+KthYeMhv*zaT8)Kntmv=l84ty74cOOnm2Fwify?e^S?LCI)nJ?5a7`4?fxXZ{%8N5 zIVMdzN}v#R3WgJy5{E|Od)9X^WXjW z7&ELwDoj0d_@3^a4bR(Mj-|ZV1^ais^@gVIN83!si&m^#siSe8H1q6V7zY%C?KU3N>gxGLt1QkZ!X#? z7Q`KGvdj2vp%s`GkD^2!cGzZ{v&Sp5@b#>sj_uTSmpg}CZ|Ph;(Y5ALlXykbec#z*OeTtO{n`LE!Ym4vnClDD8@8k95Wq1)y!`o*mB=-|DPYxEx zPi#G&m7^nZkr5IAV8I~Wz)qJB4k8F)ox|#T2y9FBchUOJvT^JDKR6J{UzLOoRz?lY z#EbQ~0#=k*RLz=SsEog$-fWEl>=J#>JUEQ>6}*bM4)^g4Kzz2?j%JEi8KM(;{Gxkz z+p5K(EgXHdW_mN(jjqzntYbCo?u(ByWrWMh+pQ=xM#+Dt_AgYAe;U6|o0SJ9@JALu zQ{@jnIQY_5qUHTYdHCz^pZ3mFC^n?`lsX_eOnxU`|TuIopn2I;kF|Z z#eib7`UKoW`^Ah%D_)4gB!Xy`fDZt4(S}BE8pBsJL4QLHm+YV$+{=yno>iBFP_S8=;x1ql%QAg&P8Y~8Tb6Nx z9$x!XvhTZhFOJQdMs`t^Y=NOpk)YfNl&j+OuiF~_d8Bk~LPxT_E;5#;-+nVWwk4(A zNObygv(V0~HX7(Kn8PU%sa37qY<@YiE2S-$ONd7>RH(TElZLv~GNjw2XPSq4$4 zaXdmay5N061)wB^$<@Hz`+K<jm zCEiF|v%J1B<&RE`|6;dw*vd-c4LHWqpNbyhNt*H9hb-lNBe4R81_?>s0sYTk>EWh1 zE<3QDqoi{1HAjE$aYP0%BH&u;8Kug9>@VWv<{XkX1GGz zc&sLFliLng7*ISh6zWSwj84oMt5aQ@W;w{7>cYd%E_}OgFAN&FYPX)v36T?9c?~z{Knwhhxyq>gj0C&M~*PR}>)v>#3 zyZ0K$p86U;HTS@isi7IldL8*hzdm_aYfu_i)k`3sRHgqU#y33XVS4aL4GR@TCtcLu zaM08@-i|RKq$4Sq`Ax6pJY?`0FwU;VHSqfLuPqJdi{0yOphdo{UpZ4trY8e*nIM!t z6GgYOi^PImtI+EqfVfR85G8bSY`SEz=|@L;Xx;rbK85Oe_w^>CEc*1wqS)DU`?=Ce zSEQ2cU?q`RGF4ln3On|P`*-p&NNqZDHmReLI}V?0k~x*ZKyA1-u9OHA5;HLbE7#w9 z)yHkf)^jXH5tou$7rLOeN`{i5&OWWe`jc+Gw_my271w{BOZD4Oky>%DEYV=>){D7+ zD(&DN{Ql#oPoFL*FXx~ZErNr}b7A4&9cn;-#_o5YruSbgh!RP8d`hu8iLQEa-_XmV z9r6jGo%d$ipCrWD68i^lM@OoZb;wbsk?n1+Qm&6*K+E;P9IQ;=1HT{ISEfc(mskp! zTVCI@8^;L&0(Sn-4JANIp032^Wbg=_BuqPEbtyH}8F4*N$5dtGW?g@8|AU{6y3bu? z%w0W?CLeGA-{t~v96AZQfDodNf58B*Bne%ry{ooX{=NINEPjmsy!V~|W^A|4I9mX4 zXsdmGdrYLf#qYnHgWsS0uDMl}K4jxp0T5&gV=#kK;?u^P*ASJ5_`D$jJe0+ zXb~3Flmc)M|5%tidc90}=ht4tL~OpURcw^%`y6W3P^Vf~8a%U)JVmrdlqpuxyBW?t0#Jn_Hf9p%n z06(!qwA~lSM+2K&3$J4iSI~@w8dq02t3#@!e@@xl31C+4t(-HZu?xmQY~E zTqpQFBMx0PF*yTT?`VdjT*}IOb#u=BkeB-XeH;hy>-hA7q zA7B{V@C@y#Vqy}oO?pBnR|fe9`cF3g(EYX8(*h`{9)~Q z=BzO%AtaX zw`rxN0Gxnz$MGnbgv8F+xEia8 za%R9Sf42DA4r|jz+)KWya)N?%3nAp$YXpG3|NTb({m=Gh>vAJw9cS-+UlM}!dkZwgcsjh7Mg^y_>o_HcYpV3xWWyo6aB*Eqn(TLp=GLaxakttDu(o(C*VvSwV zq*@v}G&e{E0)+!;c!KPBBYPUtaR;)eZsT%ZPH{F~T6dDKPUcwMH0s9zJSn?NOm9on zWVl5WuVRT122K%*ZQcK9W&eSSXxYDolLZxg5aY&9*^R!2gF;*IK&}8PKlwxqh=_?0 z2ccvF>7Q%Y$_g8Iv|R6e8H?-!$^zdV_P1*AyzpWt^V4aHzf5)l@TxD~Z3Q;Y)dy$q zXOP+gL*z~UdEe<$%^%?F6~Navf3ZCkGH4cYzo_lSdbVtvqiwvOZ4ov@d^ zr`uP4s?KkTJ2RTsIv*lNsOuRhJ+OZbM7=i|FOR3vm4v7PT6-iJ!ISkMD`*XLQ>eq( zasG>{mx(}>MJq`%0`A5+GRfJ@U#8O)6pLJ?C|30WG%m22WGY~+T3Jmt|iWS+Ks(Q`Z*{G|^lHXKh0zJ=Iz?O8Opi08y<=et; z0)=z&ea}_yO_y&dsr`F?pq-&rxTVv|N3|S*Ttv8fg6x%)QM3J~NP1>ITPw$qK|#xs zWtd|oIo`{RkZDEdTE{!KJ2|WMF?*R&J63;O`uF{K*A?_=@aXz{`qfOv%g;35`UUPA zr9?+|EME5o0IcqCdhz9)eBEXYK~l;*dOJWlK`6G!&kPAeDYf9lJfM-J3`q;j?;AUE z>&My=r<=~7R^wW}MxD$YftKnGv#aq*bWpvR$B?XK<7=sI@ybucDf>3+64+E*JAD5wFDGADOF!wP08{1P)<5xmQN0b0)OAEr z{cM@bG{3Q=PFJdwd*ZY<(9g9Jhh~OES_~JDbfUYgN-GT6RHX!UMUiaseFmrj1NA|T zvy3R31^kDiQu48*r&9D_bJu>3^xRD+x|&I1AJb53{hH}r5}d#zRe{gMmbjUs;TlXu z)_k zs$M4B)xVvdcD=qB<7)L1g zC-K&%V(d!IV4*>A43cRSE4kW|uUu zG)uvt@^WbB3}pZfv?)~8zQA1+C+*a>}hp`VF)HEjVfUPM=o!RHv`mPe|~Xx zMkg!Aa@|+pzNhHiJ6HpJu%jG)82Bs)j32xF{c7C#*t?#4Lr#3P8*EAus;Jxs2jv%H zt>2JjQ-aq2eMs9siGWm7f9BPVO{ZJ5ztY~`SM~RkdGBme^?x^R6a+te!d%$WGka?6 z>@M%#VxD-vBs#=7{r5YC!sfz(Q(C2GWRN%Zx37<7_ zwnUGDxOut2uJG;SzarzHy$v>_ycl(m2mzpDUnm?YlAgz3eA&itetGVvL;nbt>vFw{ z_40n>dY7PtG(4D1tiV?`<0O$*vWa><1UTo%-<|Ky$Pg5>sMiOrbY&Ql$k#k9}N7$5%ON zV&_q=Aukp6`|5i8nSfhNnLCSa;$dSYl%TiEI>g!(LTm-Nx7Q8uN{N@UZ3p=c^k27g zs{!L~SpIq{>SGOk_qb%MZs^(?D)wBr`Ls)^d~(?{>kPge%l_?;AJp6 zY8l->;czRpy)+abhU^+|S*zAL>F{?o)E<*?0bqOv!b2v=koNUSe7%_#OWOd0fIkEL zeGw@+yrPzOp(|^y%X;YHW84r*De$C&cYf3FWE??)MYS3;<1tq*t_>@#*tX8|cc5q! z#9^xD)!5F2VK$6_d$dQOW^C(Ge;-Iq3GIlSPWOJw`@Q_|BgZeNOk3fj!+$-J5L}N} zaV%T;cE|}VrNJn9_iC)qBt%Xi@`g*zt<~BX*9Nt8W(7>h_{w+&k10E*;TU3YUH~9r zN5G3`&4Wmf{F;si|dY(=wZ8JKyvD{jT?V`G*4+7kVDfbDrmOf9^4- z{3C7RlrytOinFy-*46uA)RHeqh%zy!87m6)$hN&AWZvHOpVBrQJ{T|Cypq9HnLeG` zTOqdovmoSj%aXm2g#^X(5w~J5T-1aX7*FE!bIpd*8=ChW1)7-7hh-NSG9yOh_~NgG=7S6PmYy8sFA}+epE#eu_uj0TVXj&k~mZey|rCH z@2~8?ifqp`VLoEZ7|F9b3V|6cP@PbqpoIQ0&aHv_o$GYX~63Y zZz(_FSTQ-pgkw@-dL1bw!ID|zc0l>(5758~u*X6ukW9R57;xBkzG4NJ{gmc4m&Kkp zy`0;tk5T&}8|2jVSk*Z{Hz=ov@m=});!WbOj-9}${5IiJc0j=&=qMMZ@JAgU&dwXn zRedpQz->ui6QhK%wRo!9G9~R^Qy*zrz;gufJ(PG4DkHR#M(!M%IC4o}V3&j8+P@da7cZLQePcoE13HFU z<=haN?sCk#hWz`Wo$LvLmJi zBl5gA#-RqQ?j>gO!)%IwyS#`Sea||#W?jPsJ8^7doe0}PxVF~6o`@8leTg+h_F{ok zN&ddP`3!!1>v(J{LUD`Hl%Wa)YNrr`Q22lpW44-=>e(;02SfsS^2`QmPl-B@ISQFl zmuHD3wrRNwed=0`_)-yYyOVhl8qO{lw5_@3?Q5ZR)cEwqyOgIpY2m*dFCNrYl`}(Z zJ+XK5Szh#?ENxpezIp3Cs0k`rthyo-tEm3?7?`)ngMZiwN#_29fXRABtv}BBc0zRH zg;6c+yRy71C0+^&A^Ja#tf;+A{4^3n)$tJgF;N;X;ZaY^ik`oJQnf zUvK!QdD_SLs%N&mnkB-s>7zUwXEW_5IhptWS(J60u7O1yh-xHGA6E-Y!j6E+yY?i) z6sQArK0L#BHRYt#I8Rxum9pXCTzXhWM|tY6g5c2uNh@)$!+!&TE=2%qN*YkvScX@w zF_;vJhyu|)di*H80vhsmoUJDS_$9#yPwAW-796n)8|g@?&hCq;yLPA+%RVbkZ5 zB8ok17P`nuknXiE7U|4k1DWcCSAf6!Q5W?7nm{MA(cA4t(2q_ptqb}}NEz@qgoE%2!a*!L zmeesN&$1>OF|i{;5&I$^64xjKY=n}OMVm6HJU-f)P6f_#BjEfv1>xLkS--za{t_7- zzVE0&RE|1Zq3#RFwC!@n#6tQ{4>%&uAt?2HYHZKcC&ef;*LF}jtV>;=9AYfjxAEmT zm|z3+HSGN#T=S=tM&QlCrv&e4Zad07AYnMny7!vM_%iGY1d1-t3yvm;wl zFH#we2ourGr`u?~x2^(b6W$^%r;k4ARX8W~(JlR%r1DWFj!#uS4|%0o{ZCNiydV-r zk!tv2dj=imKWc=imw<$F|9;8s#CipaS}CQ&rw{5{|LJ1#q(){^O;}s#m7HT=2XBli zoP!L1d49OnVBH)n{jS=0kYrOQs_ zWNr?#8(|#JG9T9*&}fuD#hyo4eq|K23>@CxxL>C1fMkFbena+8a*eM#&slk^jH0>i z)(14wP-nkQ@Mg~)!MlBHBNB3%$FQ`zSHtc6hkd7r(_bz3_Lv7=C2g(pTp75l)b>|) zp>QkS?I2>KDyLLj`P#!XGk=**3l`?NZYm*4V(!t*8*|)uN>060(8^=st$Jzxn}I-+ zicTwN9G9xFT&@zd^Wu&~@})h!-@x4l>@j(_?0#u!9&8g&`X9%iFe#!_a)mK@0hDT? z!1sIF5!?uo?c9RyqbUJAR$zvp!Wo{MR`by982abaH0$9!SJl_sZ*;8!TDgYE4TQO- za%#{vWEH4>>*y38v=%J@l!@qu7&Igg+*%V&cAk2m+%OZRL$QVeQWb767r46VUSv>Y z_YV%{Ro(4UTYuBj6C0dx)B{ZxU{_~I?ZETphk7Ps(E(GwcDA-dYiu;+Mpq{JRSYio z1g!6G{?=P)fXh{t{wmml+tLEbXWXfLGQ7$CTVoz4ER57Ai7DlCoY6UgsS2(nJ#;sh z^&ar^I`Hd!-<59Gt|u2u{w!Y~i1Ai^u)?Yh-(`+mTw7}_q4wGEIk9jmTt{6Cnggw-e|JlTLdR5+?iQ=)UX6z~L>LXkL^Pe>ora2}wtPBEFq`eiNg~9-G zR6FamD8}9W91h^rK3o3NHd#JNfV*d&GpSMRepu{m$z@1gWtJT_@p(LvXq3G^J5+A6 zp*%Y@9Rdi1L{!-qKCpOT3lk6( z$!1}ST>T$o>!a6aU$3@F;abohy{M$dyG!LT3`vY%Ea*u zGgv*&SSUP>>l8`UOyqe;*EySxsItP}ZdaFke|{o0#2ogn5|a25k(i}dv^{(fC*^Y+ zQ;11p55R`-W3a<9m`)GSR8x+OlLB}fSLYX7cJai|Rvf9rg1_cKkAyeM>z`y}a(OWY zP=J;fg_^+g@{q{P%Og7!I~Z~P3d3Fqa7^$>){e&|HUYSBX?rup%$j}ygt6okO#zWC znIQx2xqG{O006ZNCF+7$3IH`wX}Hr$tud3t^UsNiFw>;h5s(sR)F#b( zyTu*031$e?9)-0m(k)CHc1hzCl~-QFmWn;UzAi{sr5WG&}6UbtK!stAF}k`k#;w5 zkObqC5|Ko+F-Pg|^V>HR13cFji-QbDaF{kgK$xyS z=w5I2^^xOC9y(>=E|8sHZdV4MGJVlKnY()x)Cv5x+y&De7<6jOc|aUGf!B3hcHV#4 zPr7kRTLz+5>j#;O(E7O89#N(zrc7MVv(%omV zASPahYIu*#`>?_n0Z#gRk$U;A!d6`2@2v1U^ZES;aw zyz!~7!TKKPdj?=WyBjd=Fs$BRel;z|a;vRcviokl?$hH{AgW{}mXs;UcQaw(6G->(#qjvqNjdWyo}| zfr>pY?`nQtQ5SJWMaBNbn$$n<8s@VaR2#NRGjZlo(T_`-UsPD|1bG6_ZGx%EW2o&H z#VCTaS;-xv*sCHK5X7UM5+=A}8=rH9AkVZGGB9+Np!(lc1W<6`4Q-0`hoDee&C2Ke+f=J#V7dE)S~)zbDgv+u|Cj*BlL07{TyS{yUvYo| zAsRJjFYVO6E!#T9i0Snf!<@G341q5~VtPTo+u!Jj);v1B^FzDL=H`8phdSxzD7DQ9 z;MOj{Ehg^vo`G~Vt@sn(6Ujq&tanE^{P>`L$H=7WeMRW{$KN9ZuZKsbgpOucs9~5A ziBT*i)+7qZ;Pd($3dy%rT>*G|RG+|>fe#d#*)cM829%qzC_NWhh^}#!vR)k}7|N-X zUiFSWC7$B%cQ=CYNF65?HO%f@o-l15<~NF=i+92EsW9RQJ-D@#_gYapgP2+*tyD=`{xIbF7j(?w%C2XgMuhCQ}z0pPym{U%b#Q&gW7Mk7D^`g;P<#S z3E9KUWO*P#Hfocmw-Z1dwKrf5PXV&b$9m1ecU6*6!2 zrn2GJSY0ji&wp5doX=TXLelx;_vTQhwvr6od}dG2W~fyW@M-1T$-^(PWQyUq0Ej%B zanR1fb}nDpD{8<;_AF=D@x6L+lxxN5Cxb?}KikciQk%NmZ0WxKFl3`ik8gV1$&lMG zfOU#3DMNSnGH@1g^=wJz3Vnf`!)#w9 znh^PLe`_({1Y9D@os~8}s7@6wbP`0qjsd8FNxnBPzCn`= z1hmrwT_m^J%>up=4)2^+*f#z4(!no3Hbdqvs{Ah#0#s}K_xLYGR1`CgExb|YWjOsX?3Fu#nsKz$JZ+}DX^Bi zYdY}ucb}CDPs}qEda{Zsp_* zy=>HWru_a6q5j13tK_9uLDEG4lne%qPio1{PI+_T#vdkiWP;mP0Z)B?@~36M=~`Ey zM~(EMCN=Kg{a3uEoJre{RB~d&SBujxB(qBDo;2_53P%kOh#dk{xOD1 zCdHb0xcalVkig-P;I;tL`*)QUp+=J_TA@?KZ@vHSUs?kh78wFQ-MIqN!AHZDl5&@p znT6K3q-%{LQA4j@Zy#JHFdnZq$*wAO|!`#1b&kKU5t_!yTp*79jP zRml2t;Yf#zu-V&3^7gP615~w<=whHjV4y)Vq@{v`5QT8L1NOUsO8@TtKVTTR6 zU-L-+{#@4?qq!^i(<=F%`52hf!DY^++d1cCl(<*Vnj(Fjn~}cZUOkI6I1G^$NkpN} zL3cKM07Z(^oVJ$EGgWh1KHPcEN$WdW7w67=0Wvd-LO)IDrth8iB`DSx?5Hl6mbh;; zrqxh9D)D2#uly!s1^Vr}kHdk(U|%-UIf=-(Y1JaS?XWtVBXs}_tE$PGf9``zo0i2P zSDL2JcrerY_B(?Xm!1jzq(|xci$05%fC&&38GQP4J*s`-(w}nornElY_8)10%MMMv zQo;>+x2H$g+c1iC6o`WEN}-?Szz}Z%lcW2b(gHlllWBMq4CSo>;tu-xcK;lI;HvQZ zxxZc6a@{8D&yGNLZwxS3=k#gt*ivDcU&t480x}%^d|RubO^*s(q4U%xl)nO=U~gf{ z?WcI%_~`O|^?C7$q^_eoTs}@8;l-;%pIr}j&J^xG@)>ZgQWT0FxdjHB*<=Yxt}^y$ zXGVQ3Hm_ES0OIxRp_yKuWbNB~a56xU%>kIJ!NX_o31zmBu$iGN_)q^{(K^-Q9}+6M z{=N2J7K*NJ=xw-Ps_&?(mUTnDAtq0t7hXWkz*NaVQ0;8$?yR8zX2}I;CN}`)Te`;W ze8~f1F8SRGv~bt8n?W02S4X?X=*~52h>bVPb(B%z5T$h^fet`6hP%nBc zjA;25aUB4z01V$^-yrjqxQ_hJ`?1VwO~Q3wSNG2DRj0qIZn?I=@`~TkjAlgWXk%|= z4S!}hxN6dX6+^8vs-s_Bo)x0a2$Gg4Mm)IR%Jpq~2r=}$#ka1UT^pgesjLdWR)y^5 z39PjwAGz~j&AtZisZs-@dT)GRGo=PjL4Rp)qyc#MOar?CILynY1v=4wVHsXrI1*W^?kVqdemxsPs}8Z+i3eKG{2sjNsyzZ?O%|h7Nzd zj;ot)!WQ}LH~=65ATdYaUd&?umYwCQhJ}7w*NMRIh|_y#4*=Tc*1)Gj4l1AW5ozz_ zsxyn-`*j;`d4H2vcFSAidztd_mQCMf)J^@XD3nGZAo}{Um{Jf5~vIQk_5dww9+m!+aC!5^zGpa zFBcVW@WqC8Pk1XGi0|Be4{DE7*_YiQA<11&T|65Fu9pO^wG^|769I2|EP2^u8SIv; z;$+^qSSE7^x}9|m%5jki_oy_uxTKlvenatZB}@HB;cEHYp}C_so$S%+$!(~SJ*ur} zc#7OP`PWexjojldvgy@EnhX;c@b#fw@alkh2@tef;2XkFAKVd|p)P z?Vr;^1VBSj8MWn)>!TReFnwmFU(|=?qD6%buiLbWN_%&U?k;>e3V6BJ!sp)VhL$Ad z5xa4tF(M0%Ebg9A7s6)g<$B#4f687StidDYtrOrU_PxLG?aY%US6^e%{ovKMf92y( zuc??jHzHvFtnEkAa`u%Jhmjat9+s2jbC_N4k|qi({I?ZvktGOS^(G~V-u2{*R|SN2 zcqTV5N%VJ}Yvift-OHAqlVf&k19lQV%1*)D*Fc}$u$n*o$nmget75CA33^d7eun7k zrx2Aa=R48EBS^TIMv;s{RHG4BXx4E277+mb(oaTxyS_MG`SJUXnd{U@C%Xp;C;nM< z-CuKOx6*U`Bban{R{hiGBh}3}M*5ticHuL=Sd??9u_%99ijhL=5bCYzOk62xydu21j&v*Dsejy>yD|48kMEHo30nx5Ncr*`AYTjfa8Z-t(zTgf~ey}=Bi z!Z>2b&y-8MEg=+k{L9euPUo5){Pm1eK3scxs`lg8uKF-jj4qkfdOfD}qwET2r7yoF{G9Kwk-yWmu^$v{(YG)t z51uR?w^Z&tq1$@*p|#H4ca}(P88?uo@@m_J~w1i!0sgFaNH%;L&GHf7OYkep5f+B=3^n2hU0?lBgl z(scOC>lamqvA{6rz@F>lF|kJPg7G@kc(BFBz%F8N$$%k{5oOuJ4JgqYwrswVvN#F8560xi;}ltYQ1To#;NRP8 zKO7BU#VAZ@SEALyUnEa+8e+-}UV8>K2k%vT zRNp;vNTs`uP;_B0^9dYLo5APwo)5w2F%>u@X`OQ^09SXe>ifVmBufxB*TL8QgqGfv75%-QoF zH+@R-d{(y`TX8^X>b=KMS=X~&Zd-$RKSbcvvP3NHh(&9*6ZBceo96%#f z^fAA&{95qb{TjJCdeZ$bKjfSDnYYVCWx?j(mE77xlpu5))phrq>q?O?3^oe#t<9{= zF%RuAA53^)31S_y#BEMB`+&upU**e0wPzFLv|s=fXameuJuKOjk)7!-gRS||s151L zMIJ7Xa3o{jZ99ayOEdxmQfb^W!|lEHAq%fz%i%@K$K8_NmpPl^UIAzTsXuZ*s1A|$ zFK6F8XgGuX_V4^tc>9jsKPKA7z`0`j=H8#_-4C7(slB=Wzd4kCUDHJBHR_VD0CcXW<9#8qx2Lk8JKnciUZ8cbC-8(RUT(!({lyITUpH*u z%(S`eV4odxYfW0+A6i?w9Xb}I5FUzP4Y}z#KS6^17(F2YI4iq=hW4(Tn<-pitLPss==p~P*=pAQ z8~g`p#wx;YEJg5p%=~H}*1jaHuV#Ef1x~`EYxVAA76Mr@rs?gxRHrqUOZGu9mh-ZA zR8Q_|ZTjK0>SLS+=q;TOHF0{l3g}U9@iI1kO#kcg$I1TnqlGA?9Lfu9AKt$OjlR-| zL?3IowdaVn7H%6zEO?buTpqRA2d*6cY(0E?{+S7z`|u6n-vQPcm`ujAD+YI?Um2W~ z%(q!vhhd&e<1xF8pczqSBR=G9DitjO$Md&tbXHK@khSHPV(R`4R0VB?Zg=A9oh_D| zo!pb)omc+KpsHi$aSl)7QJC2M)6X4I5e0;;Pt;;)QB;cPLP&5k%=Mgn4w&!Cvo`k% znO!p-dgpfGpA#|fukK9NjMpw5yS^mjwS6A>r`W2ef6YdmUY;z|J+@spjEc!4ocfR& z(I<>)oU~Qog(}couAElROT<l_6rw-2S)+D}|)o&Js&sl)ms+rc7O-rHQdu1ZGX3R-Yy=PPPJ8^d5*y>l4Wn$19? zr4nx&g=XGbJPrOhs+p^!IA(ff>Cylqh&{V{U};1*7&;jLx=L01U+m!gF2tt%Cl7wP$Jr*x28}4B-akhCX=A{aSz5Mmh;y+bfaEi+GDm~noEBVIt?{2Lz zqD>UXKO2_mEhou{(h<&-(Fwl4M1Ds)2@rXdHQ+K3 zd;gf)&u1Hx5T;fNYPKluQizz!ZU z_U=1UvXRJNK35rtQ)}?6{nf>fBF*J3ehRe?8FkleV9r$TPoF(Ex^oFpU+jq4cv%JS z=Ci@!(;Wb`hwzTAc+*PX0%;`8rtGWdEnFW)3=x1iQ^%Ek3(J5HP(1N-D)VcJ***+@AW9&_>PWIb zKDmhCk^HJ4Ra5&ovo2IBBhH$dZkxl2eX`9?Gg@c)W+#$5unM$%t*F&AWNu2l`MeVO za~(c)?RawEI)J=VDe*NJZXH;8?RG6AL#9QKD~o#Lvn%pe{^oPMC!nb7^Qz_T65i^@ z&y5%SZrrb1EY;E3=yY>6&G?Qc>D_F}J5<493*%4*mQFvZPJc^n{(y4MI?~{L!%g-?Pvtf&!*HYNzs^B_ky~tIhpYbT zon2@;b+k?(!3i2ji%v=Ayt6-D-FvH3L)2PW)~;3Z^6FR$)&hbBTH2*oNgdWSH5pIO z7Q&eITL%?86-C~yrOEf(5ugxynI|wZ5*Z0yDdX*wMwVKANjBE&p^)9xV{PUIVaz2) zNdMk@vx#MhmzUE}w0Q5W^3Ny{(VO(K*%s^gL1Kpqz#Rw|1StOITGCl|pqLdpZMy z!T?a6hPcqRZh$1)D7!A(zhf|Rt5QolSF;4cuYpgF`&!}Dxjadop|TQ4DsiSrCnW^U znx|?|p3DCCU{4Up7mX(m0G&wx@%HN0>^BR!FFBrW=UO^icy(oMF;x}WS<#v$tSD@~rb(R;UPTm$p_&*4vJtddwr)=pdff;U*9|Ao)JaJS<8zAKR38`{>~s&uJjg61S*F`=Xw{5e!q39Qf1huv z6v6X*&*pkrnQvc{yZ_>ta_*|n^F4jBVl&{b+8#r0|1bVnuFp&;1BJn;;d-J}+i z-dQvN`6}ac!&cYr>z&KbGYD7T`}EclE_QWY*U=CI&OrB zZIA)NJ(R+b4|ne`yTZt~o><;m%~}2Nqdq2G|CpUdwq3sMsT~#+TiC@dyUx!Zs?4>4 zRAofvRn@r-4rfAvWDkR_hnp|D?&* zWwUVgQNqyfjLx~yIzWWm56OQ}KbVaS7zF@^Plvo=e)F$!!nreY7#kI`3o6X{Qz&f8 z;BVef#n5RvjGHARsQY-cJU|%+**0L_DlOtV$ZENud?U| zAb$b#8IF{HNm)+!#MR#X%D#yjPUEMe{);dzGcuWi)!|t4&@dgu<(5lnA@-0sAd_1q zQ+aaB0&z=+F5mply5w^qyy*5Q!~xl-+n_XB+?xv>rNc2uuj9H82;9jSkd4PSBP^iM z=ux%|*v5G<4T-6ef#!>7RUMbV@nXwj$%umXzy86^6(Ma|uP}8;_giu_#OY_o+g)0t&^NeHu#eBM^!To0BY1O zo)?v40|M{0gIfHLbL6wcVm-*k%}ITC`%Y-1uW+CXPG7#h+9oS^`E!GK63bBf^yt!> z*+XyW#;125d2#b+YmhOg65$%-XujmoWqphqgKh|8IC2?i6MlyazZ8D`;$wiaUh}b# zTmLH`@g5Ttd(VyLS_$C~qFhe;2&PqLp7vhN77Tj`$uwxwtov4KJf^H)UjNbZ&d zKC`(|AV{x%26a6WcyUV#)NT5zT6Jc*z@ zX7*}yzpy67gxL_t!eYV21?Uq<#6~lcejzhV$^{Kv+_OYAL#($BikPXhzB5b{tC0i6 zvhs&zfC2o{6cGfUy>sO)>X)Syf>(2!;ej9j+gVvSGnIB#wm`6uF8 zOGbvpHqwih{eBgz9KRE1Z|b#itj(I7n+z&jk;Dkln~5wk2hrhf+#DWl|NHD<*3_JsSOxboE6agx%AZkUpm25%YlvcI?8WSeq_cJZLc^L{J7ubaEkG|=} z#7pmKuFfQhM{F=sG*?k5ilH|9s?8ebKI?wxjITCUnt@@JDo4*+{%N_rj;u6n(0;Vh zwfK%>dJ#eUaWY6lM2xVUsnpWsSHCb`hh?Bq^D(7v zcf#A8^IZa-du{`o(dURFH=YO9 z_ZDR6J@=18RTn}{Z*%*&;M~}I_&k98n}K{``kA>H9&w?ec&K@=m)Nsk|PG+A{bAaTh3$_!*TlR%k@ zM(FrpJ$vuk^h=LX>RZ@ENd+4fkrm$pw_wxJV`{ya zhvlFphMyvE^GV5-7Z4YxcVcD_2cuUJWxV&4!pW6t-LCW+mtVh^%ZjR}0Fz1pP!<@^ zN-flLDm%HO?`SQewovD0$UB7wEXF?|58HV8Aw=bfdyeYkOi=4?I@K!K=6VuM_oKoA z-sQrBGQiVKT4pvwP<8aML^2tZVt|7LP>jw44gWFh;O$%s!$pp`0@Tc8G)xR|bd7`Z zWypXDgQAXxw77P_5FC(&^G}16_Q31-yK`x6`(q1}UGuhBwvoSi-3++aK?YX=fvDEa za#-L{#0gif^F1ynu#($nUyzZ=Jw07>P9Au24g!3Rkj?%QYLDL$)99bzcKvNX<3j0^ z#MdWQ2-97`x?l8f54kg%J82YHJrHJXBrxOqx-B5xtm?YM`1zSR zipciM@l01m0Rdk@_mcGGIa_lTj4BAxl+V3$5A~z&HLO`-hTt{n9rleALPE0%Grb{x-4dwuRI|^bO-f}|XdaQy4 z2fcq%A_qOv=Nz5R{(P#L?@@>HjP%g|`1$SK?>3+}V^r5v$MJp72Xu?|eRHF9ou_!- zx;~-YNKp3sTp2j{`!OJWtIRqxado;+u&&_(0*&1qm@~x!JrV$#srr>KZQI_=B>E}L z_|urix6i~&I(ilkdyUmbhnDSY#3q%|QO=ErEEgiOAW8Ta_{g}>^o&k(mXlj$H!CkF zT&o3v!ZPR{=5(9Z%-1#ww~>?LkrK-UEdz>2a?$ZK9XlR<|E`FN)vF~nTaPo0*Fzcx zoFK=CK3KDr)M1buk2FYZ1*y8eK58Te25UBRl6Om7y!*amY?8itZQ0ISXWUTU70tS) z4Njvqel3yC5E{B4PL!UUy9KaE<@q|yzLM0^Z0P^0E*}0L^6;N45Zx$q-e^^0v$Nyo zE$;4gPj8y9w=d0~Mgw68)m2A|m!}&DKp3rVUNv9UU>cjHY`p5eKKa9*`GjA%lp~i0 z#y@GVd0P7n0InA`ZUD<}r+0y0xqYW_ITluGRu*!=8@*>&eunDVpqV>MH@WUUp={c< za^d67?`N(phn`txZ(0eC_@}<7@qW|AywDt*ZPxYd)Rs_jzxn&{*q_cQjXgX_4vo$* zC!-Oem-xmgz$FI?%{Sd)q$f3WCqmm?$GHl+okVsXs|OkyimBy>hj+=jgaaBH^LNb& z7*wGlfW~%oj&J}|9xh96U;uzrwD2=oroxP-w5dfr>G#m(rd^lU%S4sg9?>B!uV~=a z5|;i1b$j3zAlHb?^J%XN&zqL6*LwZ%@U=4vt=nxXq$AqD2bzCP_eTTc-SV0L!mFSl zKIjck!DK4m7;5YeV0{d!tojbgwJ?M`96;<}3VM@iMP`B7eN|!Y|zXiY!9{HHLmj9{G-60llj*IAOI|6I>$@bga3O8)QjVtU0(j$BE`6d z&)u|7x4Neo{o(z|!fwH_$zhappnooR_1ED*;Ebn2x>_G><&Wk&}3aCp&;k3p1#$MD-_ zHnHt<%%tDva>(^c-j_E@U98NYM}tq(@&o!1&+ji%8X^MuP0Y!nHs1hY-33>St<<$0 z%6l9oF%~BV89kR5n92mPf9K^yUQ#bmethI$*O_S7&8J6hcdD2t1*6iBt(l8>qd4wf zVW4Te!+slWqy%)>6Iap#u=U>qNH`qre1)h^~l{b-nmi@IWZ({|5`S~9VGZ4N^jyoC z+#tWd-YJa&57y!}hC5P;5YQ+`;~cvU8b%N*_t&^e5LQrz@2vaFb3IP#?5QTTCkeOK zA*@`S9h{^tES_SJ;isP$%a9v)DXCTM0I3M{2`r(`-;<6pE*!_lT5AH`iMSYc>@Euo zED5*i>uP;m+UzW)b#Qq!W#t$>vE0|Pk+l476&Nm8RlVlafS)_BdBcYLPV-r05(i;mipnjB&aWiJ! z_Noq4b!PQl~ z|DNsgtbJ?8s`41zn)_|j%vJgfr{>MiVD?*u?XyPl&0}8=gVH9JO<@m5R+jp2Ff1A$>)!^6EZ+{%6Sfw9`Ovn`SK)j6Y_|TZ*0<6y8B`7nEmkX zn?LnkE!!NCV7>8aWR~Tfpu<(J6X;m9;r2=}h6jWep|FuxO*>x)Y)nv=~&4nQr|%ktiN`p>}b7aedyZ_ zn2U3p1)t(?1*Q1+i(+!YXjA|5SFdkY-^b2DA{2S}9q{`W?v9I}U(c-yi`9FWeMX(P zC&fk~Va6VL%&M3nZP&X)T_iS7HYybW&IgbZnyT<}X0O=&C*&`Tm)2fIzjyWQsGg$F zgR*-4hpl$wJp~}p%-!Z=pjhV?nVK7LR}PG`+cKoYi*9prjJmmdxgj#e>+JVS-hVg! zu}%57VcDf=I-~dDU{q1#ip>n}d`0c`00i3%3|#Ap5d_}|>KGf_u{?0XgS!W{YkkWK z)RhykZ)hia%pjlW{P)#TKOkcx#3Vx4Kd)I@Vu?Q#3=*&~{pCdfK+}du&hp4)^DG44@9n zUB>NtTGL3tlGl{psI~V2^`-e-;`>fdOQ>C>w>;2chU$8TJ_aRF&fy<9mH7%>$&f!kYXxgaPM-xU~ohC*7QVVdrzFg_~%!)jGe4onBu-Q&c zrd5;aYx?v;!sIu#mrP;*qd}&Ni6u|RR(`_#e#HIxBaLa6BmjZTKxq*)2V2MY^{2c9 zlhzCwxW3j~P4XSgkVCe~ss@BTne7Mc);*0ohevW1ghCR#1*&e!>lc9@rD8!$W#!(D zL9b%2`z0#_K<};Qg#JEIq*E6Km*H3p-0nz74$1dajje&5h`E+!ILc9zetoyTa3LJ~ zp>4k`SfrWQI*YZHn*l+8Me)#%HA-J~&yZ6KET%Y(LaB!yaG2?Q=%+@Rx5E1ujM(}Q zE}h2de}UsAbm-xIvJ3QmY2I75Av)lBS~QY`a99JBchW8J?2ITc03ot5y0+9I&$Up= zOo~n2bAgfKyE*UP?xEJp8}4t21|vBtV4J;^ZyZv+8{u;yt2XzGxx9Z%wo!a+hvc3| zR2Q^HfX@UV(IS#(Z(eJSJ*XNbi{PSkX{#gwrje8hH{lwt*HZ z{iHy8ORZ8fVfJ&+0l$!0oVyzeUs3<^*x4RNGA|BNqC>{FH*3v-sQUu-_UrPP*3u07 zq(s!dTSCI+`#h6*Rf)WNALbnkAcGWC)4t5I7E?rGk^HYjmK5% z=c^jl0A%lDq5ZVQ5~gB(t@otaIHqq5RnHu^ZV;!`OLpm!JD~ZhVWEu`QZi<=)vXPu zh!?8&*Qc4j$S90&j>2B`to*I>8>{PZtxjS7>zOBa_8pQ}R7a!ymq8E8V2&9tVp%&l*6`(THPhx*P0zE440K+}U-1J3@`y(>@+>Pt>s#X@024 z?jPI!_2`d=l=QVyR)8cVtUQtT=!6^=7s?K+6!KWkfL}IM0bzmjmKjLjY_18=z35)p z#cW-6qk67@&z0g(&=JvE{9wG^%LnnzJ=*auL?Ivl90@C9)7zL>4GZ92((~=nNt;^F z!e}-e6UP2iH8!uCZlD{%z!)G5qMZiIKU_dI9zB2FGw$URZkddvLWHnPovycoNs&^r zB7g^?;?c7b-yVPfD29y0{$P(joKG!@fAceMAW5W%5);oDaYdoRmUvJ2e zeS=)SlJ2v|@8>3^ZcyB{fOszY7Zyv1(c`m7I4Pd1wig>jpsjJM`MsSU>gf^{p!?)%eJ|)7CYFj2OuENoJ!nrk;zjI7Q}dt)pIE_6f=1ahn0LjTVc*5+iX# zs3*y(0ZS#~Ju7X~w}eEbKn^(|mcrZ;luSuhd*hx>rgOK8N*HqunQ9ZV>bQs7*oS_vZZqeM2vxdEE^~DBkXz8aH@1 z{wZtwLO2)a8QkIN-aZ)+^SnHdxpj%5R8NJ`SgVIG1nd3XM|e<&CxsnMt&^(eNF~jJ za!>}G7i0}V&;`aBP#J=#Nr#SBPzM;sr0ngxlu}OkE;e~cLx0EGg_sm(pf9I(o!(-8 z$i=FAa2qxVa$5iZu*+0V=GnvlORX_3IW)L+&il@)MF*#q=d-#ckTgy4nQQro(Kex#ynM1RICV8 zgTbX`i&6;>DIu|`z*^1V;ZtSs{TH74or@7LT>{Vg2JpVWb^ITq&O0orKYsfM1VtQy zg5t;!(Qt+{(=JM}|0ZmYLeLa7H*%b7!SEawfP^GgEVqa_4B+&a$1h^Euz& z^Lws`i|aZE{^RhO@6Ua|?*8hOVNm|0q&w#M*+r+-@@OMh+ogYu=$s1Sigpo!=#p=y z9j%k*CKt8z6-I9sp4~b6KHAsK#{GzS(RZfWT(z6xqY7EiSlaPiPjxTPce4o$ut-96 zn;5_`bV)p!gaiaGl|l-aPpS-eisxcF?$C1dQ8=-5faarAJ*p-xI)-z)srF6a(B}Liw>O-os}i=&!BvJDkOqS*k29iu;|9Wl_`q zd)CWF|1Y6*6Ih@EU;oK5HiOsVx7Q(R8=4^hQVLXFsBLI$Yz6NPz$;iP0l$H6DEyPu zUl}@#oP5$QJ;0bAt7a*Pey!44jMShE`B_7-Y(t&4O8pOE~G5F8 z)A3<1rk`%YxYxT0QbK|lu zm@p5y5GIqW3?~=-A_nvcRfw*_nR@gQeTeEI$91=v?@j9oKYh zB&$HsF{hTA7PvpAI5kt=ey*Kbj&b8-L?r@@(GZ?>QPPXy+7D)bJVO^%y-)%s)ow*N zRzxnf!qElvHg*x=!er5l%{HCH^SCWPa~SVQ-u=nxRfMOZJgMyo0S(Ym(AN3f@T!qv zZ+@)F<)pO0)G_a-d%^P4t|P^U`!n`903W>jt2mzDsw}2B5bpMZx$uyBCpW{%x%zfz zt{8&b?GyD+h>xTjP@%&N&WQvB{O)lXuzMJ;?jXHp07RgN3`&PD;D zPS&OQKheZQ0yX{3At!|=R-=hro9wvjn0>ddzShJyG$?MRPc=JA7#qur0cY0Q&;OYI zK9%+$?ZHRWfyduB?KeE+Qy*$pWfqjMT`xheh0~#`I2Ur?rbVrXh(MH;Ccv;#2tdjs z&k*XFTow)+z*8N>poz>hJaa}|8fauv0cqI1qA4MVli)^j5K&4cgR|l#U>6@3Uw)33 zMmWtwml+ikyf_)GKEa(-EmuZ4eg}Qs6y9y5A%$2x5)&($>(++Fi>3AfY)+QBRh$OQ zT&QyzP6j)Zp#}`EG6*VAk6rvN?Y;Ys^|^mzuja-d*0;Y7=7yKy4s)RB(@&o?I~)?7Wne#9-%U;Xe7u5;Bq%%P$jmpbVL5^7(a5a$N?bTIc{ zPVewD>*^Y7`B&Oyq$OM^EY`g3i><92#^3C}vE;J;A?JYd-67ZK?Mh2d(VH|RPj}{; z8%Rp4jnp_G@qi|R3Xd1Ngofuys&*Vq%IZt7F_-EVPbFBOF8#W5qa>?4L`AyLNxB@4 zki^O?oB9muNUH0?xDY7(%fwyOXU%%{6azGC{{^H8M0;ES0BncK`*mwc$2VhB2!kKy zB#Tj71D=ImRkz5ZI#Vc#$lxylh80vVb4_Mh-5#k!nkf|0Vdl|1ZxIQAC=x|}N z!mI88y|44kdKvezgjlQ6F%F<#6|BjKW^Rs>s}Gh zg}3GH1IO=4)8LvMr@vCnwWxOL&u~Xi;O+Eo(1{Sq-7XTq?+?;Irt6^5)A6&xvB#EA zs$5g7)R#BEUejkkU76%|ZSeKB?G_;_+XgLr$law*7+>vr6XaOR) zsA#>=$-@>ld{18w5QRqc$Gd{COa}&)hsIoKF-YaZQ3{`-phTS~ko!BLL!0YEn@@?B2YPL)8(Alz^7HnY{wHVO(}BGM zl3Kej5CZxy07eRJm(;i+Qex=J)hNtG2eA~Fz4GF^&(PkJ?Lmtzi%57u4xH>SGlZ08 z1?Wi&%XQOHMt;KefYsCcYz$jng%d_7qy{P|4Z!I0Y77fb?s~uTI@6gM{c#3>YNG6opsiuhyWBn3ooS|ld$?=<-7w61X2L5 z!2x#(z~hzGkb5^W`bnwkZ;6r93sc1h#A+uMY-jd7+XVW#TW*b+81sxs_LrrIkV4gvb(3Xt{>B>a~0B|yR=Z2CYSL95++VDQAVS( z0QQfDogQ5(x_SCUv3i#jj~}3F8=WXXi$%TP$u8j`bd+e$ryoncuT;D~V}Iko2td8; zQR9imzm=(yJaIAV;4YQI_M3rz&fdjM@N&5em)e_RP-y$D?r9-fL7&xtpo`*74ejp( zt_TlK4?S3t!HJ&sPPi({98t+#FDKL`j0+ zvwOHQ+%;BR&H$-v;i31Yx8j`l4q0J1jVm6jo1ZFkKDgG1X@R@6tKNSs3@;x6A*NDN z!4;_U^4W6!7V2rx>b_t(?)l$W03P$v_n?iijrX;dI}VNM03^9B4gE^T@Q2SETs-&X zY*@5Pmw&&Bi%S#Nxv@aK_CPN-NwY1vPM*}r2Tn1GK$0vox^ zaY(NuYHUgtAV*>{GZWzDfK+Z7c^PPX;MgJ@ojV*DCM_qnUl|^U1fN?&foXF$0zn~D zAPmvT@K96bBP{NAE|3t@4)mZ>273l$8D-V}c)8bwC6GoJK z$6s0B>oG^fXbS4ozhvB*`!^{ex}}D)bBs{Q=wlu=3kprBERZ*R26sVd0P`Cz^WTp$ zKg8#yXbs#By#KU6ePizKv8|$T8jQ-vZXQpW@ z4kj`@a}|DY%lW?nysrZhM=t%VJBl{}8WD4RHqCBwzRF7s_%z#>BrX8pNpFA4!h9Tb zfeU@cF{<7O@En$b*QrAA7-4z1u84$u?#uDSc@5W_I(cRb!SP6-JmH8uKm@nQ0!pyX zka*W{XTGu_(ZVmE4yTz>v_;6zK$9j&+IzQHBl&6_$^1t|ds zf({AITCLO!ka-I%rJVlR$uvpP4Gfs2MbfF@_cUT~C~;^HpIS<@=?3se(JnD*&ZW6f z5n%8`e{|lcpudVRA57Qv!pN6sNp|OGW@;p2r81LWsw>mn2w3(xlP1%V`uj(L(~sN; zRTkkr&=Q008@ghx;(g$r3i!MI9tVry`#nP4HKF%N)_oVB7>oCIVa2*OFf}E@V$u~~ zXTyP^dwGTmHI#=STV!SDqOZYmN&VTGD)|Yg*NbybnTP3 z6;l6%S#|rc)e)K!HfGIKH;0$&2A2t@HRRFE;=oC>rH&FGNz$0((6CZ4lIx>vNpn^8 zJt;tn%T$4jY#Nsbl!VIEqq0ux8w9L9ZbOk($>5YhUWQL-%yT2s7-9r34Z_;q4U6AU zNiS_Hj%!T|k4u;$06-#8QS{SOdnaTFcoe+gXAWJw5mkI%xl0pF2Y(vj@&nU`_AL& zGbCytck>SW?lDbBcl#;auc_b@;Zf%rmLBf7alat{%b{Cd2mhcNIcg|tBaT;{oMX-D zqx9dz`ZF{oRnapzLLMY}jt-fCp0+ z8@o5$K~V=D{Iqq$_Fr}918*dRt1P%O=6D)&d!B+W5&w2&%eH^jYZLy1fSzuvVP}Su zvZ1~LvEL~*eh)COmEIb6`QJOvNW+^@qoQ{KoE%rP_s>)j`>fcPFR$1*&Hjx=wtAGk z7Lp_!G)iyV%Ux-qJG^#)Q)P{0WWwAkWY~JVbQ=J5aTT`}HB|;fWm7jn)3)vn=wk}3 zE>w@vy##tf_O}{WH%VJTRU@UEqEOJs4@5Ny7Ze~EALWwGL*fG{jm*G>n8uz1lmN<{ zc&77W>SQ3`05&&4wUGsJ#LW?%Rg9t6*E4*v=qBEy{5d+u$}S5O7pMB<=oxpzmIqP3iQ{G z(Z(F9D4h_X7aQ|$>(EPBRzukjh_EO}cQ<<4X zavI#48herwbn{8w3l1eyX~aSC^`GCqh(7YRFvJmfvHaXc18mMF{ga5Q4>6W&LAlJ2 z1d?Z>L5U0ih~ee&HdjzCJ2^{_a-S)CJ4J4~esbI0n4+BXqGS8hn|Rf(ZcY1r(+E~lotDR z1y@o$*~BZ4RZB`$m(IH)oSJ1K)^!vM(euqmYF!ypM`O^3O{`!+(xqu>76eS_U+m9{jJ*I`p+G{N_MQ#y|XoD0$7gMvo6z2qP`s9 z`=Fg531Hll*$?qM)zmdPitfq5^LwaYrFy0ecTv_N4t8^QoVYHDm~reJo~ks5=M4Ji z)P$OhAfqdTw52*p(lTtChFp0f7b_%q^}XI$a@){yW;Z9lfSOpZuw5^_3R%s+tH%3g zo|qg?u=@Fud={`7|0Ol$kmt*tZ=F%`C_rt$0iN_t3s1Lu9KR%a#625vA)*@17o<>h|O!X?S zTv1Q^x_qsn{b&7cXD9Ed{512!WmgJV?9xInC(x)9|8{~;5_m;VY1TiS3-Du^2w37R z_Vk>^qK*@DRQroG2nl3nnpTD0`Wo&xS!Hi$*Ka>|S8h)E`=6EpH1*P;G4Rx7zb#C+ z)ugWWLTM$oM^IwhJV&aL8O~RLx~g8ALwfnsA*gg6LP|w4;~l?9fyFtG(_E(5qv5km zX=O432cRdAe&+1j-ErrA?o1&0{CXDJguRk+Y{$z)z6L)5tQRSd3^dPW{_Xs`{`JWd z?;Y|<8CTcmJ^F%lKD(%@Iy~D^FWYCE)@PGIgnUyQRC{#i`yTbA&v>)un0@CC%|+d4 zx+pFzh~=1WMyq(IYNr%%OmE^DN)e=j_GCYb{U|v2!{y-+5syW=rT_1~72&kj*GoGl zlxZlv`2@5c5?{iA(I=Ht^@HhQU(_2rfZl1YEg4aE!<-91rDe;j;DJU{p|3`~M$*na zl2<#flfdr1J9&USk!Io7>mf~Qh1LYSwIFMtyvKMQW;8#+%}pD!ghefxaP1VbwbIaB z=yq14Eo34cg+ij`5z|CshpKTmeR7b;#pcP$aCtZ>z%E>yh&cd{7r&&-74QWB`wColqYcul0r_ZDvJh)mvD~6Uob=k^WXSeL7HtS?Tkl94x;yTVC~=WJ5@&xWpF|sM%eyszInNzCCo^`;$_v=RK(PVa_U1Ly@?bHvSWnP z!4zM3bJbGpbxnAd)A8C01xC0uCw1mTjZ$ct_W*~2)nJxmC^+-Ny$sg;x^ zN%b;P;NCWq6{2b(O2ZTl9dX0C6;VEXf1_hY^zl8zWfyZ!8dYD6t zKFa%=te|E=y+2g|?vQiSg@!G2?TzhJ*B+;0zT`0r@$P5|2Xb-XRuB0aH{)@0mo0aK z$KUCTsti5E{Kn0(#*O=Wz+5TmI&b9~i#pMjRIDKfvw_;>#u0^6+u;C2&T+eIokO)q zzq^}&5r?3duC#AF8Wu~pqVbN}84_;Tu(+FF>9pS5=7HikWg1grG)>q{3l?JR&Fyk0 zL-?Nb%=q%u+Lh(8r@un5AAX1O)2$b61bU>|}yj4ly#AElE+} zrVn@h)le^T|3!LBITrp=3|R9s;wE=yvN~E$1ZV~4TzVaXzdih@pN;X=ci#dA@Z)Nl$c1o7i z42-@BYdn&e%ii<&uS(dpzmq(bMmHNfH-APSvX$3?t3l3TZ4CjpQG1<1pbTM;zL1rK zDQOOt)(Ye(RoEYz|D4-d}=bVO;yY5@{Idz`rALj^1IJK$;p5adh_)B0W>xy{ zNXI_~#y(`SvYZp~hO0uMGF-4_;MS00KoWZSjfOxEPp9XyB< zI^f533XBGNLtIgmc`IyXIN}YRokS_Eks?%P0hQf3LW`0F5(i4|t-Pyd0^{+O@h)%3 z097*B8CxqbJRk|FgET95lK`lIX|#!b08-n|_1X?#wc0+RbJ%REG^8F8Y|}BG`aM_)7tfJW zR;NHfzGs+Ji5}M-<~o;)!NBJ{z_Jhc#)HvvwNO^AVh^9KusL`#l&n$Hu3NXe?iRMq_B6(<^S^~}1pVEuM=`mm}8OoNzUP!>G)>tpI z+MQb0JwPfiANF&(8JSDf)O0mkh9PE~oB6a^#9=WZ5DYL=04OhA9G3_JSIKprgYJD$ zy9g#A28OzFnb+;HwC>RLb1JiMK()G|8BQbViM}7^$6|#TP_^cm9UlAOC#>?x!s3Z< z2`1TR6U}bXDcjQET!NTFZ=QN9#dC?f`|wsW>iPaN)bC$5`wPjt4>26k<7WC8-<2dI z&5zKO$JXK0Lfzq8+{&AqKK=`QckbX~9YsMnresz!NL1JsWwKzCR!~^buj(AH3e?Fb zezqK#4W4{5>ol&_cx`f~`73m0Poxt$t}0wrxP68!&4k;C9_d$zpK2O-B!y|#X;e5LBkH)%-d zy%zh>yvW_~k)*rNyE+tG6!x3%d1~;cNV=~9;PY*OXdDGw1}&L2TG$HItCtO6sV*+#l5|+LKt6&ZhNYib97dwwC*Bj z@ldm(k>;B%AKqO%H<&=i%u`3)y3X|n$AI)>HX5oYpF@QPO!c9j!6Qdxu}M_EjW0wD zH)<8LleLHjHggnJxqd@O`5c?rxO0Kg6pQKsBMH+TYV+;YXT=sJ zj9$IBLS;@R5o%r|xz8nUX;mQrqjAqJ42iNnV_I0d2 zByhFeE=al|J}&0fyLNfxU!1Sl?=1b=>$ht4C8ewHugJO_xh20naN@!!Ct63M(hB(V zMEQ`_F^l>lM&8KM46&=n>tJ~Kd477;thAXnM_wSPDR7tCf7>HFKMvJ*B8F3vVv02c zy3y%pl5%Ag6DfUwds4k2m*h-(I)w9f5Tab}>!sJS^eOXXISA-n#(g2le94+r(82kW zWsU)+aEFxqeL4++Xp%s z7Ey7>?)`;@#=eCl22Sj)!jik85PT}%4O_;e%P9P4j=WF|Ieg_pBs-nmx`1S^7~}}TFr)dDNfrQGDPpO zE1oCJYqKuyWCfSA?-qxB49GwIueKSTuFF8z*F@{;QYJ0xconLsNos(Jpal-Xaj{rC z^v)-D6kzj6yxm=HWHl7cC6|)LEn!muP?^#Q#H=8biWta2QesIL$amAeXm7K4D5@)( zn3#vsg)|5qjUm8F;I0-;_2g$;oBnl5L@posDx=J5X??8nKEOS=mr~ga*ddD0$A&}ss)(n$PrkM&Ox)Ap_-7qt2+21H5HcFhA8B5{D^Kd$R zJpe2f0nZT-d)$r;SJWVWSQgt)(lRPdriw%YuEPJyIe=sE|AzekDS~VPuhn4LSeIf) zv37TLvb1*e*r0-WB3c`gKh`#6Y5QE9U7c-r?Xqxnb8)q?-nGlh!NfYGn$A6Z=AE2w zVY7G?BlX}pz{5yd?93A6Y?o#aCGSYzVXG5XzLSDk+ek*t!Q{30`0v+`^ITR>=`Q{m z-4tL=yT0gH;I!Xo4c?NwDPx8_6C}(`B8aR`#q%$@>m)E zXfX>$5;PTS7hNX&xfb2H1X1@dQq$GZBNo?#T?MUd4 zB;h`x{(8W~4($i%+Jla}L=z?oABLi~IR7}+=qpAftYuXgwFssa3cV(5^36|dI)~1O&bl^!DHKrA23LR8Bo-+Ki`(BTo5y zymvNEchbl13!8%ThcC_8gPQsVbsU8a{YaWfKnao3dswVoG3oH*_!Ja=ml zng<_^NR4fye0*I~eJ>5H^qsl(+rh#JNZacSJN!{;QEQ2avDfHzu|+nIf8?G!uw7j9 zDKW~3^{JwIP4SDq-5_3ZO1+>aK+S8lB{+c^f6#=Y3mz`GYloK=-&fwZk)2vW-EmEE z=auj+6ro%|@A8ry?sIB9?(IvFLb`w#ckYRIS%>0LFtxotbs{Naa}CqZ>-n4Akq>`c zQP}4l4Ilyb)g>~ekMc1qCmX~1-ZmbMetA~YO)}+gJP?+PnAj!xq4>nJGhQbnQ`oeTt0; z*D1bm%t7%9G5y#9qd!N%e&t}xo$u*!44kU)=~AT27}fV@#}1-Lid#^2A;RBuN063tDXf$fFDQNg1A zB%FV|p+Z8)s%*&nnX)UN-Sqd>l2HkfV$gU|I9&D?{SsIh>qb#wFckEt5}=%rK%<1& zn5Np0?BG2`$6O6o$M;@yHY-37kT2jC2TTs zC1A`h$~^ZYDy#&Q>6hfj#nT*=wi;3Td7BmV=BIZks222_dPGPS5SK9k`QQK&*nZ>w z!UKyP1K%VWu|4>OSFwFGtZ1Icl4&s(a*+$eia)kHT0dFLe{*Hk&ZM#;S8vvO_@0JP zIKgcJGg7d~c3YGg61{0M((ZS9N58GdgB>Fi8HmlS0rBE-6X$7hGPVw{!#F|F*Xt`{ zw9uud0XPN25YfGP$wi@M&NvRV1j=Q(qTJvU;=~v4rnkG>KdbHxEL5^QS;tQ>FP7OS zqySP*qKYchNgWF~4J`#W2?Z6q^Q2&SI@}-PfMQk>6ck8v$>CBgP=(aW=Vj_Aj8}r% z%tw#7^7xa>&hH*Jx2a>CRa^TVs{*XE?^Z8r7ipb8 z<^Bf(6xRiqmSL1Yyn;lAyU|uD_sTX^RTiFRQJzU`k^ZvbMfM-Be_BGnufah-`qx+<56~;w20G;35`_qTM5iG+)g82Kd;}*%`kJp zu*bb6O~!!EGde;{qi86p;?#$L&(i(P!seh0$u;pqMNV5wW_e7BIhaMa3#6N?!*}U_ zBdifK0p-wHInS~aRc3l?Wb!zrp(Wiq|K3R*pxLy=J}m(J{6dX?-@Ef9GpVHqs39mY zG+OO-1v;%zpcsUbl}c@QHDk^{CD4*hVpzZ=s0IC0{!?65x_jcqnDte&c{bXdC*~P1 zMh2|keiMmXu@&ZK{6#Y>9x`XU5BC(E(&;+g`CG6}JJ1ehTo^um!IuA{vPRy}kBvGk)W24-YcV2J@zwp7d|DJ+18K&u6e^yhB^!U=@rr_c?@$0MykPGf zj9JDx@=;(rKvcreamTWXLYk;sbq84QIS(X!GpW*ZP7y9Sp3y5q5 ze}LEWp|$Jg5#eH8i*g>UEGcCnAhD%%W>qMtVnn-#xy{fd<}kJB+FplR2j7#&n-51| z&qJXl{IwwmDyx<1Z(-v4!r)~QuKj902aTQdqBBf%M#>~l@9H`-E$2}b8SBjH*bldl z#sP>wFSnU$Yd*|yR+#&K8cT#w(a45 zPo?GRwSSfVbowh=1^0brV8wXxl#%ntRY{cv=H7%?_jh=lA_^})5oWGPN}f)3zt#RM}atzp`0Y@QzSKBf|^wK$?Bc+ zXbGx2YdT7@pD#jbN=FYm5rIh^9YO_*F2XUIV1n3I?pLcC_aNyP#oH1e!u*zDzz*_% z(WM(6FrLEZbDzVlcD5hJ4mm{1Epmt=8oFm1%O!Kp8&O*m~~Z%r~SB!)||R z^kPWvtk)Brv?T(}ZL%su4sc=yHV=~Pc5iKUS-T*?B;ISB93zvfFUOJFj zwIQ<8V5 zZ}Q~^kfd-)w)>p*_7gWJ%v-4OMXi>ZQ&IRguF*(bTChlQSJeA>EsnD@@W=Egtj?m- zy$W&a($bl>%R7}t7@L2PA|;Fj5va$d2h8j> zwl=#NH#F?M-VYDaO3EfHW1Xu5C^0_D}`}p!1X)^-yL>^StT3d;yb$N@+@zw*U zP70@^@*f3X-jHC`Eia!H>r#>UfrDi1w)2|gF=Etz{apKddNMWCQr6Z9A4<#Tx?$20 z?rR*fy8vznc+DW?C7=L3v{aP;YuV!aJ?0)-j>Ko&srJ*~t-JSzB=@|Aby%Nsh8W0j z4%kPeuhp7`&Q$ClcRwX6sUZ}Z_c9&4GjeU((CP!Ja}M%S4K^%GnWWJCfPHK8k6fiQ z|7ykZ)shaquf*D{Zz<8FN=bc?YYTiy%~7{^xz5_?jII{kJZoXFBzWrXXQ$1mCfR-1 zgjd~DxE0kZs8Jg7?;ZIYMw?jY6Q^7M{VKh~~Zpfh=_p2+5gd+;xtAw=r~FY8stFMjvi z@*3u;y}-6UYooD=E0c%;y57em9NqNTKNMbeNavILP{BmTa6aM%(BB5PcjVpC)tyiP zFfI!KwDZKr_hO;|_3V;o=k-23X#zYzAN{!%C;V;S{vwY8Xjc`TjXrp=VCXYl`g8Gx zT&(t2X_U^VdMu!~mjU~m-M{UG_IcK0?zW@_YL^6;BwY*PuHWQ(A3wCoA4q4|*H%6k zv}Zdeq|9-amxEWf)!G0PTn9Kk%1?ZF^EEpIp3x2()Zs(h5Zuk0%Z8>XByJJMpP7t+ zXASQJllE#tTfTq)E<gUj}oo~IjGQo@&)euN$nb7~0TwMGA)doB`+z-C= zP1R%U-%Yc1^w>k8?sD<)umg(^6gqwX9*WhjJ$v0YWIk^wZfpY0B~qZ31f}PdT+ofP zJ-hAFtKlwT?Mv7mrpu4~8&vQws8b8s}LV#ga$?HCX=EL5-fGB8!e8h>xy)VY)y{_~j;Yjy1X zE=sVObHcKb{MgCP3czcbc`0aoBjOc@YeHE(lfut(}1Aaiv=xx zeh^z{ysN7IxlonbFgMQitapRkvWeAc*b3M@slycD$~fW*YC+ihjFrf(Jge{chtCp5 z=`i6J+KV4sxH@eLvj0qgYYQeFjfNUxC-(lnlZbT6N0z?ufiPX2DzPPKbxFW3nomm8 z0BukQx`dgrP1mQuw$`sl>IHj8hB z!PnI}RSaEaz213N18;e%#JcO+;9hXIY-jEKrS55=>q!=#8(#RJ*b2K--a{evP}w61 zmdc87S(fY?gtiJtaB?ETa(i!2g~wzBM{5aq4wo(FUA2;JG{jMiS~n(_%f9hZSr_zZ z0KiU*GUMj(dFQrs7Z;V&R2F~q9=f#&RdFe!`!3|w8TVHmXSSSKgx0>Tw3BzTXCAoy z&IdE$-B**;j1WU%yyuih=;7X8O`bUrRgUxQjPPNq2P{05)(hC zsym^*Q5yhD`NYh)WD3;F`1&KZ$Ko1(z%IXBji=qz2UV9a=4aQz;l{|1$FtrkEKr5Q zhj%2pdy?=n|JKx&zi#=vD`kH}j7WdP#%8B61kKXZgMn1?1RnPTmQU=}%TtsFOw0}t zCH<}2ZXedV838n(((t(adlMzne4ykZL?yyT=kkd*Y5$>#BEAgWu22N>YL^13*R2*P z6O^TXWWIz+s0VP$GutG$@~3!(5%-KIF~9Psb$8xGXwQ~{ZoAmq4;rRW=kuyekLnKy z-n9(fKi@3iv3Q;um{S$3Vmv`mZFn@%rNvAK3b-ynrR`(xHT9`~yYxBq4zEHG_bl{R z+o9izl<-9xS!-4NiDT6*b?9rfI#{daCFuFMlfGyEyr+*l^r^DbG+S9T|JgTK*K5{T zWIX~rb`UDa>PUce#w%-`o{2k-{&XF)zcoxsy}G@6;nKb62OQJ+508#UWJXabQpYkA zHsMUmeId6Q&MOh5dYSdZh^iX5=nnfE*S{Q3X6`Lnw3w_41yo}uJh6bCeXg7{*2S5B z;>dRG7W>T|^*-2m{ktE;qTREp;&ayIrHe+R74X1Ge)7{*#Jt#?m-ya<7-8ReELgp^ zVtke{R|RHlR@iu!=VS={L4~2RDmPbNNh;$j1fj2_jr+4-D^oOj>^k0hH=>GCef#s{1uMW$8y51(@t|C1^Cg+v z1{B$72lSM$)2uIPyAnKI84KgbGrf`W+P}EYm=m5d04&r~;%}+cy(5z~%0uBBcR%j} zg#E){+gTMQF#2yi9SX+>bw;QBTACDS8P$j4MUGmS^6MC&=^?`r&w+p`=*PrF*q3J) zcZb*GTYHV#KT1#vFF~cwT3e7O+y4axLae2fo`cZ-3oVIu*46=V?2;eiFR~?ilFl?vHqPyuOmz+8C+uQ1W#n}p$_Y!8{g6XNUzNDr*oYDkO~Ns0Qe%SRi!A>6zD zzD&}IE!Po^e{H&_U@LNeawVP2tFGs(jJ;N-1*O}oH2S4{k z=so~7O8^SaJPlW++D4&L*_REO{q4wipXB%x%w#_EJW@`obinn^;muyCv{@6Uv@vZl zm_=dJV0wM;_3gnghf`FRde?_Ph}Fp{57~T0mXKxZ4|cP)Oa*ztslIub(V}{Wrq?7W z@7!yH7;3fem;0$eW4K1^h|6MthkHt!21&o3-CBIFFB16`o*M1_3pNIG?M&#=c& z&fu>l5d-WhF-rB&Z#Ark{yI^-r1!+3I~s}PEbUaJv;`wGYx(@?xZ_URHjrIy|0K9~ zVVZD-od>momuab?tzwEQ!_0}BH~m;1BdpNe_CxI;zE0x~Z;|SkCXrXjPF>miAG! za~Xtv(UzO!z@~Zi#yrO@q@XHat|?0fHv>^6-z^x3emYqiIJEoLmb}zl)d;&(`<7NY z8zI&PUD0t}V}ChCmwd8H4`CcmaS&6*LzO=_@hQn*;&v8woWPm^V z+`rov>^%<$^GitXlU|dG;$gZv1YSJObGJ8}I6>+-Q#9QL+}$)uf*Mc7&Ut9AH=gQvR7Smh^|Dnb3E3=oveG z&0~az*I-08OpwW&6TfTXBxUTTp1)%dt&j`v!(k#|dI&UL z^5L(pm*rY^M->jdyG)ym_Di)(zz;|;@y;4?u!WnXX88}<5Hy%(mi2Jfn9rmCg$Y3elsE?L)PFcNe z;G5~lvx`p}L=tw37OG%ilsVQCC2tH#MU$UO11AO+ZI-5c`ulWV?|Z&KZnSev6ZBEy%XY0AoIRmtaD_jgrSaJb zS&o{x;ST^`eO@8E7yqRmeb{Dg8W>9qwyAiZh5wDWa&}q89`NPAS4+q{I1FIQ{Bn>EJihxnnD1xQ$pS07W@it*v2^vKrH?mNv;J*rOY*@VUuVmxubB25~ z=g@?Bs{)KdMHtw`EIPm`-3l)p#qD8$gBh3vU_&W|17;;WCf!D_R{)0rMSyCjnQ#b{ zLV#vgsaC~q-MV-2SOBFCbQMNRFu5CerMD=L)5Re{Q}6MAHt->9%@=AODP`Que|hBf z=@r5ux%Vc1=_?lI&n!f75I=kxr;qrCP6WDN47B^|JZWg!c8PvD{~ZVr+IHyLs~e_d zLfH4T=Gf!j2Y8{p0z{dsuUx&7I#G4fs^SHaFZq0q2P7;N5}wiS`nP04+50FC7(dU( z%jYg18QpqqBsny$0+J9``Z$txm`nbq1_dT6 z#4<(jRCH)jWi_{=@b*PBy4{yF|9qLM3T1`G8jT^G+YI!xoSm2n;C2@H1Uq{vM|?LQ z__nmE8=aJq6iy^!-TDY~${OXdP$C>qE6g$G|2sD{%(yeT@H{Qu(JY?#aZ`5fDM8as zJCMam-n?kBe#&qwhjXdmo-x#Qm5yS9ZkBc18?u1@R76|UC-vt8sW-NHZJdv~6M1Rm zkhK-TP-ON&iBY%+M4K@W-D*^=h-N{;6+Cu(d8LrWHHPtac&c}HJWh(xZDs&XlM{q0 zB+FgoWen|z>3i2DKZJy#Og>SoeBbPL^d8?)3%s>UzI%BmkCnz|+tq?6`T%c-r5vf) zm4bAIQ0#(uEIU{!bw#gF7@CVxI6RmbyJI#~G>QJ_LVf7Bt~sb&iY8+EH|#H^ z{jEmte}69tJajj2T#A1rWzIW}ay&|WHMEjcW+K^}30kI}Dgo{)U$^=y`@gowZfw4( zbw2zK;VUmoBEC?0D4|`B*#|=T7g@sT$F>}hO zf;sM6dx(g5A9y&mvAw0|1JZxi0-MUj(&(beUh@AT>P>*zdf%}BlSqhIDkN%cV<$rG zMHdN@+9f0ru{2_-wXGK2zl}X&DQd4Ou}8FtqPnB@YKx*uSEZZoE!F)!zxn^)dCg=D z#>_cqo^zk`+}CwqAG3}Yh7yb@FpKbm0{_dC0MHXaFMm=E$_zaW0mK1PaqM4Ln&NVd zS$aG;@vsoIIoh1%?R1)sxPOj8JLcJN;LRT0FMnOUyZ>|x=3lrzx$$4(d#6{5QgXcD z%L=pqk+HrhViN@8^mJ&6pq!z(JX~@duI(L)}3?OGYG#Fk$Z%-;{C5m?5SrGM?3s(d&@6lE(B zcj`LQ+xWt0Taayl+HcY)1;_xuc}_PnfQR__-v1451B6;tqD0MAH2E4WA-goZnpwHr2B}-2U+AlMfF*0Q-XW&?~ms zn;DV0B}`6`8@UKKBXhmY(#@E;`E0ois9azkE4t76*z7=sbVgZ|1e?7$Vdx4HV#r zaAGf#?^DlXF?mbj9hfc(MxGB2{0rkVf*pAKJ#NVs0oaWhwb$e=azE~bzlQLUELT@i zt;?3Z$39E_e=QB}_wrvk~}@UU0rJ`wf3Oi%KTfjQ*BOu@#28P9nt6sn_WKKOOnIwnv>s07Td1Bx_W!0 zBxdba(+U23-@xg)q6)wrX^+8!L#ReCnJ1Sq|HJ`7?`>_~7aUEozNc_J#qzBGFOgon zM8hh7beH5`*>SJ;3zx#ZKXl&F3Cd-8*lnI`xQf`l5Hz>>oL@+zSAN^rdZ%gXOl4Ppjw1XP}dYHG z{NJz{k*3z&8@_&b7?N0>#kqxFKPMu$=ykip;9*y-y>7$iN;nGK{EG(;pZR(IxYi>X zb9(;&1`{c@CP86JUg7Dnea^Z9VE~S!>-kH*HAae4WqQZ#6(Lszww$!UF?mpbv4xyi z?~*%dTp>FP;FSz5U2ohu=8H}j>UbbM;VW=CEC9R;Rfsi+zM7Nb1F4lwLvn3zi)L+2 z@pVel09$*S{A=~Jf;aFa=Xjp&(Am-9?`NI&Y)vda;&mN6-MjK@Pwk~M>!06`o($UZ zlYc#0zw<(~`LT%kY$d%8yV7cN9Rqe02ZT_6ELXgHdh^|P?VRsZ^BS?;{=>ndE7!Mc zpNX`4?>I6)k$gLav-QTj%30-$pqJ>qn^~(lL2P_0LEh5yN9{Z1f{Sv_ooqBc(-o|S zVncL6p{!2yMqpB$W24&HQs)A~RC0_Okc1Wp>>-I~%j)W>MkG2n$icPpdc%}^C;1khHB$cp;EO>V2(RwBTMbP;_8M6ln{jrT|cI;u<|Zz zXn2@H${!H95zx?_Yd&VJ4(rMPP{S#{;}K8FEKAbvy>eQd2|e{u?P44U+kBPH~;)9EQ_Gte7bn(UT?GGnj83zBk zfHA;?WA{Dtfb>d%*P&D6{@J3R^FD89K7KAfa)t%g%hlxE&WB$=&s@lR`c6!GqHJw< zM$xB3=^US%A{#R?mH|$54Xwlv*M2a6b7oKC$?jKymLGl(I-R(<^XWyM7m)k!f?~JC zoL8MCnURPWyh#L`#vXfvkgq44AL>U&<)vHYp^C9M1XIsgAW@5N{7eq&)O+dT76;Pl zEET^lDySywgh$dv2f}e>&d3aymkdGnmW$SrZ_WUMs{yD>X~0P$?uZGOFm-fY)&i-G z^TKB%N)r(PH!Y1jLuiS0d7aZE>kW}Y%5!D5k9EA(gvhBnkGsQ^u`*`d^qWBKCNl6} z&b2%<8=1}b{x!5+-(*x?KJVN@c6zFN_Wk=$kN+)w2y$Zms3wlX>TARb90_Can8^X0 zj%`%ce$WN5U~yi%Gn@U(&~_>M$ySk1O|>ZSm+sSw7ory1?{)dr)6+Qumu8|WlkfpkLUjFvo7jb+}*TZpEWo6@QGg1YjMm`0$@l$j5F=X^~Y)qJWB0&L2;)~$SBOLA_P zzT+{?P^)v{`6k4*xPL~I@7{m9aiauU@S;|%;2Ur9o(K*&9!YFMOcGBBdnCps^t?h&1_Z{D;&KbQIOL z9Z=QSC2b)OVW-POOr@{s76MdN*i47ASeBIoK+J*PYZD;xgk;*}+SMBdB2@qw+}&UsKS5GV9%_SHh}LJ*Ges|N>JBp{>9UN8D&|W zTTymQfADp~ozPR4F1Eo=OQ?@lvYSApJfz=^?Qz)#oHAH|Wxoo2vdwN&^8JOxgG(h3 zW6mD6p8fAo_e#;VQ^&l%^qY2kZC|FgS4D9K?^3!ZY%VpWSB1B8EL`fP3H0i@jobQ$GlP3IVfq3Zj#>&-Gx15bg{`Y2qu`SO^E6>1qJ8+0~2HIJzs7+y&=F^XyO z$G4x#@4K?$CIr~|!$BOn0r_ zv)jJu<$(d|Bbw4tz9C`jmkxbJPPY#kroEC|f> zNbF&2N!&C7a^>sF6(L#j5r}KE2C`?cow9jEZPdQdl5v#_S3DuH)&8t9h}FR~udv7# z;}`K=o>5jn3;A(zr=lG<;)0?^R2D=%6{gF}K)ko_OfBw(bGZb(T1MvkiSTVSdz&BC z4ZTH5z>r8R;+oAGVrf9Myj|~M;8{(t*c|=d+OIPeZU>0t8JeX9bedTZy|mx=GxV3! zCh+kV+81TAHe8XG2(&-G+7;r?Kmbb)fqOEsKW%GC3E9&&{(vds&_{?^;3u`7DIvD# z9ewbrm(o1B%*d!pj?7wrrp8t!2Cj(xLQVn%(X~i8`2UG;@@|=hz7Kb0HI-s_ANEZd z)vV31oCUrZ07rTkiN-eX#uGwBHKQqeKNh6F8CBcG{iVD3@K(_-x-AC)1{{*Ldv0Z< zv8Rk9PcH{9!Hs^&VD($oQhy@AGBd0QxB3a*XgVFac zs{kWrAFf;f{*0s3DrzoH(#2bt&k?Yr2LAE7m70E zFiL$Iju2qnHV5iH&~I|sGvm+`>9N1x36Uj3;9y&x2n?OdY{Uwk@S6btErD|<0mJcU zi0xs(a>kcFAWqOk-YmYj<8>iO#Nif@9JO?;wRoJU0czRdrj-qI12#s&PDQ{ ztSmProD7^uO&UwH`|S$^CyF4y=_xW*4=z8r^|r(2nF>RA^ZMGWwO4ocx0;?(Qpz?+ zrXI`V(|tMxV^H9mcdL9;L!ViX#ip)!OX{Be#`csA1O(x^Gkf$M;cxj#6Fm#9Hs-H< z{!IP#kK@}z!`u30tx$W~t9Bh!u)y~sfhF4=soAv;bY{DJMQJUE*00q)ySEO=5g}83 zQ?jnx_gcuNotnTnCAWeybWr=@>dYJGF|IK|uU$cwrk}U5n>X6)I~J;%sX7Zji*U(P z7NIF^i+Tb${#cI=u9vjk#oIAk73# zndIR(^q@21`zh_QX2s{~Y@#LN^GIMjxm0iJ-o={AsLl|Mzw+8EVs`yw9d4MztztzX zO#1!)D=oh-`Jtvh$%bw4Xg%&|6KfEQB#J6ZIaHF&-SaL4d|9g64mFQs;0|9D(FtBI zclgRg>F(^bXrUM>GNmt{okMoC%5bCYRiU?!_HOx_G73a@EtcCF;%0C2Gja=FvnDfG z5k_)XH#f=Z_&L4!UtO}aCB3`S0X<2yfSxH)=~mf+fKRRiuCm!go-=Ul8%&h(U#2sj>XnF?D z9J!kG9LZC>v$LmY%@xwl@0v}Z{ZFByN(noJXotA~Mq}xM)pfKKoSHR3wKwcxzNeaq&9 zGCqCS7nY_;mwubvRD?^-$SBDnjo>!Q#(Fm`s}L`U6Lrq7Tit9Q*ll?%fyvl^S){C9H*nu{e{%b%>^E&5KC?j@XcU#&RY3%TXoRHjeBoi z)J%UmRCBP8=tSUUU4E%gQ0TP{0ScV1^qgCk`ZgXX_?Q3NQO)*F7?=87ae~F6-id`v5IgD?;_4_Zu>i zQO;sK{$dxZg6y~kP;C{Sjmnm6Yg^I8bdJnS#q7<0@WtF{{ZxO?xf&mg27N*|R(2a! zM4yy07Q5tkb@N-&fLU=F9C&25BUrsG%mEG4`|KeT`l!^jaAZ`963o%rZ=Jg3KePa? zllSEPzFDi!dB0D}`<^xW>QtGkE5pqK!j{+eRLyP!E1k&Tw&yA3cNcEGL!QyF)V&>R zb@3n2mY=l0lEC~^GoU%LdVV7-D0cYu3WwR*$ma{yBwf$2#$oj99jG|hUS=H3LfWRv zHb)@`0D>J!Z58mkmeZ~5y4E|m*pg1fn-2dz=lebT%4S^gknHND-Wdx<~NHYXM ziw3x4lbPhHHmOmaUuEzyf%QLm{f>fj*He-UHxf=iw`_ z9`+-l;iiJkUkh%s2EkW7lk1Oe#2>go*?;|n?>TGsx8S;G_D+OMb2sGrCc@Q#p;w?0 z$>=c#w5Ia~PV^098Oxz*>>MejHI{S`C3&TjP7k4u#PMpo80gD@t8?;{KXOf2jht#7 zX*JwoJ4iRU1Hat5?T@+jXe5z11$oT8PuouG!jBm`wrHD@rdXyzRN^4BBGwyrk<-q{ zbk-h#5^418h$bkQihpD&*kh`yj-B?|y;KoEBhyBYP^($`vrurQezEFSYDMK9O!8cN zl5LblI$ydsa%|v<;&c_?!Y|0Qf1piLYdd>KLxSVC&z^(8a63?H{6>t3nHtci6pqq8 ztbbrTKoqLR0Zy;r7MNzo0r;WLsUH{Q$MpOs*VwnUY~O}!%4y$Fu2fU`<48XTZG!(UqJYeDo695BH&p0NJXSdCn>pZT~tY5*GO zTo3A>PF`%!E$83_S;7d*0~(!CU&FKVd034%2J#OqdOJ9k#(TpxZy6&UZCPg>0pNHj z(N<76fn1Dnx!^X72+JtEjIHT@di{o!Q7)_2 zYK=L_yxAhXQMa3+6!=VKW=Nx50SP4SG>|$EaYhPS@8WELy;_<%)s8npHx&kgO<{aD54Gj947>++No#bnOD?` zqD&P0?Pj(WL3e7ExLvOw)fHR~&bGM3Hleb8zmom^1W0PT9gI5w=Tclqsg zjMy`zx2j@<0OUvL)Z)n55WJzBpd`4a@>5uV$tsQV=IuaQ)@HWch%E?M)=N!?0?N7N z8xTvkqCIHIjl!5lVR*i7d|>^BQnI9$dIu*baS1}Exk)iBYpx0J7-k`CJYuw>i{<-> zy2Fte_NlUHL?uzz=#tN|U5GO}p3Es?;j&k=^+7%Ix|izX!$#`qUc=r< z&$;QkYaI<6%Ov+K`*AUbr~zne`xwhrf@v;JL~qNQDT%ZK!VunWy+t_FsZU5ZL@!cF znhSrSrn%hDg^#e~&D`wlOy_zGOJ3tf3f1BPOI;qXPGBq)7PTbL3548tPY+lb$f2$F zn5uF3^R3{a8lZ<9F)Yyx6yIG_jr^GNvY-y@!BI@BW1|_hi&3F z)fWryPW?TG)#i%3ej6e883INABJ3={1(aSLXyVB(0V^l0-aiSQQ83 zKL}F_>Oxu2sjhHU#`Hw;`@+15wb(v$S2SdjBR`Vj#jT(4+rBG=hu75W<15+2%)G=J zy=JP%7*O~eS(}|2@eYf~2#0zGSx{;T$TX;38;7ML;ZzBmu$=fos4_brJQu#eE(bNw z@79@(*Q$@D)9~nLzC6f?FRA>lt-}|-uV?>N38QwCM7=?)Xf0?aYwIy+f5@@h{2H_! zz(nC4KbZm?LNmWh=)keZ18FUGNd9X=TWlAZDCuGzz?gvq0r$$qBjP1!Ho zZ`McsQ@*5{`x7^iL_HXod;|`AAykmA4(r z>Y7usnSutbbPMo|2ojSbdXBf_mV{qm(3*`$1UiSM{e&n5^tu8;GdHCv@~DnzURYf$ zi)^RE(q{mJY!W_nQ~)sZ)M(x+HBg{N)?i(2=Jv~X8(&lncp8rmw}fhZ|IhNg?6rF} zj?nwLJG(8b?NJqS)+S+xuu+DFhJNu=1z_C!r-zYGd;dOo>UJ<3qT)HFb4;%z_mErr z`FvlrW-ceqM7q{0Hs)=&(}N+?bY$ zRz%=k^9ZBe`@O;G=9g;5e390wIri|St-bh) zW*<0AOu5xxMR(Z_2P~xPYiC}I1(qB!RDf|!k2L>hfXdP_b_U2q*bov5`Rgzk9K5`t zGtp8=vU0?@YSnE}+gQ)i|GxC~SmARi*FZC zY?*yHXl>{AYJYe?F(=)_cFa)Us28pEzp>;9ez|WC;wJ+_1Um=MS**KoeY0X)U&( z;UREKZ*6e4QHA&n>l&(`C#zJaT?bfznOy_D8ArKKYc22Rq{@EgemWCYb^NEoje9p3 zGLiv;Qbe!zNEs60U_a!}B>I6uQ9+ zZ-R9JU=1F9uYuRdXR(Q%O9AN`t%k1OGmX?8UZ^;|!yV;z-uCKM-I4z%EBf2nj`CzJ zQkhCRJV=6NH5So_VvBW6(-2U093`J0O#*c_F`^BJ0MtmOrB~QWC@`ffBEx;pVydq} z$H*BU>EmNtC{A^TpTpk@p1yj#Nh4#d$OGpOi+mXf+;+%z>pWU+ag>$!P)FSy0IH(K z-}lu0D?GOLRCdF~GlHgFrCQ`Qit|{fiHgb<<;m}UlL1Jn5^Z~`gtIo5KZ%Q0-7+OlIz`RE7{3WOeP3$Kj-d`~pfDN52rspm&m|UO8GpWE z-ZqSBDOH7abj#(lbqdPq6RH6iOVM9}osHdLZY(!j`s7BUu~ zT=JOf^o3IqEF@7)pP4#`=*FfDWyJaU_*s`9>)nFDnjY9C8d1qJxD-Dw5N}*`(}|JGEd+9vBpy0e zsrm03AB(JIuACo$ri*z~Z#`P?Cr*RK5kS%a*d(v9F%!;j$+4wsUIeuTu;OPjRU{~h z8s1F4t5Ym+X*N@p2zf|=3>ZVj3>&@>sfHrp4FaT7X zGXFYw8`A%1?Q($H>jKH$?yqF}{&Q~(Y*hz3 z15YcN@jF{OZHf+Zr@w^{p{>*fJs9M!5&}7_fq8z!7#&7Xv#{#;#JN3ES*NBR*kT)t zF%=re<_e$npP%QWVRm5-6btHvLffw+btxza+ zRzM{xXwS0J6*UOKTPVDgbawtI(_Z-MmBX#Mj2I;ZTcrKsE=bC|hVU+SiRM~!*w2iYj zkXBl0ch$Xlytg$`Bj?-t$^*kSL!kv8(7%+m{`G*mnAlGGW`h~2-7HNd6HD0L_l7Y& zfKU+z^DAQ4&cDjNe9>uq5pSvRW)aiy7alK5g#8_N?7eW)A?|7fruT~OTaO>_Fm(Y* zXOS@;fhRWWmIOX*BPFQ~;99&I-FMa9kmqiv>q|vA7e)8>gJ|o^9)m(fJhddi;^*7% zKYMU``)^%5cG>VPj?bjFwP6eTv3dQ5!PXt2LKzfp9-}X7fH|u{PyAmbZHW*lTiLdT zi+~-E^0#32b+4DCU7sCkbYa9z?vmH#@w=&#oYAe{GP;)(l!!Pyu-Wd@=dfKG zYA?g94^uo%D#j_&!Xjm$zm>#AD|QDQ!NEl5;WSpWi0yhL;9J$)UQ5kwga+Rv&1>(a zL`Z4r4O@Dv$kwMUM-$s@UsB>2wZ>OUBrVb1XK6N^%vR-rSV*S8#b(C-gsy9w=Ep(r z%5})NnaSSama2j|sO&=pt4ZvS*8=BM7&x1lVT1*qNLxHt{^OPWb%laizBzG@)9Jez zrGZk+p7T_4BlfCmWu_#wy8T%DUhGqNrc-I}8OrG-Gz)k5zGcC@RRFVxJDrBr4%*fwX(Nwze zzY`je=rAVpVrC|MD+Um;_9((qd`w=O+AK)=*$I`*iBrE;ul8jSGVsPw+(Y5|Nn?2Sv zE{tkWJ|U<4er&E4(f3neh>-cE^PBc{thL{@9rJ0sLb=MO_GE-QJ785Wisb4FSNW;~ zvHScDk4MDRxjx>jHJ}U(&_8R8kSbRE=l83$CfY4EeCbbi>Q#nsl)m`}CjF?fY5#s1 z@(-EA*Lgw#_6qIOVYA#Wb28K8v*bZ3HRIq*4nwsX<{2FUjOLaCG`l$1+G$wnC(39w zYSI=he9infu{Y9fMY(`jX8GvfgZUT5?D94@4%wtBe9z4d;>1dz%d_z19mj+&$4z%@mOVo1aJm|#48M@}?LpD7_{kMH zkJTIHhvyQ?*ps@87M;W(5U$AAjXed>JYvG5H<~v6&T*~E$(&`E_mzwE911sLeJMRg zkPovklUBaQOM`%Wp{(2DN4k2ILbEGX<&W0^X}Z)*00gbT5S@4J%j_f9i?eiL3=ft( z*n?6ZrUX6@-C}RGQ!?5}-l?R;&=mk*i#A#?xf z*3T@IRh1@Q80H}mEGqu47mb9uMwSD9gZkx;yXmdhH(%J0knR&5f8yayCyZdjQ#o;8 zumz+HvUd4o<`3+JEQ9yS@}+g0nGwH`$W!yYP|RpQRD({9Yh%O8>?*`*1X%ssiB=ha zDvf8LB-t{{#2&5EzPu4S$6vA zUE`kb-c-X$J{d)8e|stlTdWTy&zQ$;mR5s%F-TF5dXL#}960S|HdgArcs;A366Qc10FmHh`fH?`(`0n$+#`M9XUI?J&Y%=&V{QKQgt!%1HrJz_V7y{4z30-pQ zMW(K8AylXz-I!c|{9*Q^PbXA!mj`ubV!iIKzBo~Quc(WUrRDQjmOQdpuTfKmC!qOW znI%1l1@MeNQzd;a>idpBzw4IGo=>32%w$ZmBd3m^Tun!v$!|0E8vghf(j%Js)Y#7?#}m>XoL z9iHD%xF-&<{`u_I_eab%KU@o?xu9C)Nq0J00{x_TOJ`WL-Fo3-}x}EApN4I9Q46fhS7?Vwu&M~uTW0Q*}9ES5bW%xp+h`E9%P5VIhyIwg)+$5ldpY@@~xQt?>z#t zt(cct8w*7EkRr3ERI1&UmOcg!s9@hD1^Vh5ZDv>ECtX%EX9|$y;wlDIJN!ZDzgsYG9_Y1!}`550FZYekTO-$kWHa9n+@Vx8za$* z@Z`5}re_}d(;}=v>+%InsB}#qrTah@o_kxTODt9Yz{7lGSqfhVh8;lG3odnr znPn|EHe6wb9HG+N8C^TZUSFEbWz&q>PxHtqQcy~Uh_d&R~`ZnhIU75)2WO}H^6cw7q$0Eyi>pL<86QkT|SJ=<*7 z2toZcadymRE;jp?JLHhg^VLDQaV1;}YLls|Cy`m|DeR8+(%Pq^EaGB^3+w@q-(th6 z?DV}Cvz(FE)an%n#>eS)*rVmc-%8=Vdt(774Z{2HF3n$upgn=Je_baVjX`8ryL#!& zfSQ5@`Spa_h3GEU%t)YH?8dYqK3T#rk_P8mNs;@uQExp&5=J4~Tz7@;0xTcwAgrw@-gS%L4-*V+w#C2S4|jo)CyV+VynMJ=Y@G^FHS?aRcyc*Va~0O}5C3ALJ`a zyZ~f6*O!ih#96ZP+gl#vIrKcka}$sxPAb*U$j;r|t?Bx>-)wZpoIYCr{x^VWT@86n z+dtcV6p9WG1&rfg048P&D7H7`en~Ubs34y!P4MnR$02FpR-lBA?yGbya5L3-AAun? zyo4w_>?GWd2t;UYP5mbS*ITMzPBo*8wEz{h)s>X_p#t^DlrCP3H@snIww`*M2BE$7 zhuSTxU2_Xo-zfbJQnkj0{AYHPQ9z?9^Y9mlVFlMf`*;tKe)VtC;@4cqU}2Yt zl%&g|dMwNeMk?P*3;RztfjW^Ko}_b|Nw8?nJ_Nim!X{-c0t>Ce^-HtW!+GQPHb}*t%-u zmsLm=IW@{+*Rx?|u1Sk*bG8a-qO)30oA@K!SQMQt(=wEM*C=zqj*HT9sN= zW|hN+qxN*Sa_T0wQ$|fJH^;x`;OMdr_=A^iuM>D^y%30ED^J_uz|a18yuCiw$OomT zI^y2!s|;|@UO&Dtdl%V|w_NOoWy()?vfyndO))IIn(DD_7+VX1!Zup~?ds~Hxp1Ok zUp{n$Q*EY7t<{5SxXxW5!CyK+;-ywky(%0h>*K^YkHjGAW!$17YhFTY*3# zOuTCi{HJa(qV^_xU~Wq)Ss|Y~!|yZ7k!;Sp>jZF1A{oNvR;Bm?EiElrcjiOpeh4FY zfa8THgS}k890>4i?_=N@&;2%SfhjjzG1qEhXRN9O2Pl2CTb*y)Q5WVC91ax@UC24& z7m={@1;6NwUMz^F;p=1xz`;B_hEh8r8fWGM4kwP~vKIJ9B|sc5uc? zM1OJF^V{$k%V{&zG0#U^mqT@>P77ON?l_~`_>2J!n7rB<^a`)l80uVeAU7C8$CKnm z>R4!YThd;w^S`kP`iwP^Oy~81Gr6ko3znGw#o*u{7RA~9waf` zheAY5(nK9XEzT0j6u;Z0q|sWH^0XTG&%t1XnIku}j`a*yv3FQrS6fW8+&QBB0QTd5 z4U_m*Er$ks1b%!d?NMq)MMaJ_YUm9XY;s@CQve!_0Z~&zNy3cH4B%zIb-Gv%k-%aA(EckN^FfF$&pDsAAmIo&y&S8SZyLCS_n8$|=x7kpbXQ-Sw{j+@j$* zkMm3w4W|#SDKOfoA7|AMtIqG~>J#cvRGV~5(F-lAIWt}X;Z>rls){(`Vvl}k?BuQD zK@8f~%p)&B&Q5^oLlz$BEqfnrE1L?jV7k^hXOf{GML(`z9gqLUY|DY$I4%fY52Tq* zECQN9uLfNdUdsm=M0C9|^D6rTOZ=m{SBDp#FJ+&vB&dU{Q4SGh^?7n~%ckNBBaTO^ zh6#wDSdJ2XhDj@Wf?-4Rs<*V&v0VpRqDiS|QZ6C6LaZZc0H>S%s8P}5$&Zp=xaub; z?wnH3Gr7au7vCQ~aJup6-CpU3ABOWD-!~NB^`Ux3Xsc{q6f<$>#z2iUcy)DQ{^s4O zh^XJc*#GX-IcVJ@`z*FSAGgldf)^1YNFmDaCWt&~rj`=MbMQ(FLK#sAT*yzu4tW?0 zhFEx>CC}W(&|Lo=1*xBHr)*`K>s2k}y*8rbc~tjr?P}@bI}Y*Y&S4fzoJTDdGLj_E zRJB=ek`Yz(0$Bt}KP3!Yq0HXtC6bqEM29#4PI6Tg>*rWbK$Vo0qzLa4**WlN2WlA% zaSM7l&r!S`I1De1Y?RQ{?-YE~uMbL)x(0dqO9jyTaGU@UQz7|0C>IOWWX7jwvaU&+ zVv$kHq(N*qg!i`59yZ7hl=OrGp|YjbKH;BxJ!i8#nyE}fl`V1Wh1<`b1b{>@cv*Ib`Ym{UlDp9G%@bi)C8v3zrWvP*_?Oh7(Ld>Z6&iRo9221ZF~Q^ zmWLKyZBNj-3>!6XEd4h0VLdR)Szp9a=!#X^lB+8S)FyQ)VbFo9apKmQOru45$eC6o znb{KPmCTs!VBK2`H1>?9e)5wOy5u2DT`B(ib+>HX!zopr@-C|PpOC{qC!`_YEQ}?n zRBL`+tZY^lA0sJChI5evid(0)e~o4FS~yICAx(>917`+$DYcw8j#kaXDp0N%JQ=LZ zkJzd<877w}uW_xHuQtH!*Wa~`U}Kt{_AKLKW*R6R0IJ*0-H-9igfNY&&cGcho!z{S zmS~$)hLl^8*!|M60%HyEFxcf#)ypNlFx0cL&GP4SeCkGE?uU*nZM6Rf0K#lM&P3N5 zIecUj;bqXp%7&Ko^xJ!JskB8!p!c}?cMN7JjeOgLE2rW zm;aHoB+Wb96S-UVCn2ndOxoFZIy_sb7g;saZH;Xm9clE2TZ{W+&u>knH643h(ZZOK zQ%ED_Ig|SPi#-br0@#2aFiY zLc;4^l33J$gls~hwS(J_tiwaIwOGVueqhAAt%7i+@GdmwXJ+tz3kE^h>R+@5eJt@NH#F4m2e>!O6&J#3#fS=l_ zTJn}->IhXrktV4;XJU5u0tDM7Jy~V|Y#vw#v5)TcTG-7;TZSEm~|5viZho(PcZt zH#ihq@}q{srD^Q=_O#aIw-dEES(@`>3r^0f4NcERz0Dg_CM~93xb+{!3Ve1-Y!)sFrvoDg>+}t+!MwI`=1)uWG@ON2xP@67S zE9^qpgf0Wb<+QPs(|$pz2OK5rjL(28+a9{xZBA16LqT#xdv9jGr{!K0@|Lk)8zMb} z0gJx$t3DrshNmKc?X0*mkJF=a`ctUj$Zmhr7~?YKAi z>g(6%M%p&7 zY3bX3uUCtHUHc>RdO#I{w*q6>k2dYCoBFl#)^Bf>uE9yn@b~7-*c?*RpiLD`lLfb> z=OyQbo>>1_4m_K){KU4l~zNO3GEWq(7mC&U4uvlGt7lI`ceA=!ay;tBmzW zr892%G`U3K%t4ai0JaJ~Q8!~^>;U|>%=s+R_~CA)KSholNMZgh^dhz&JJ~*$BRi|~ z>DCG7z=JuCHvTOM`NGyYUNpSK>6MVKw!b|(*AF64>y?I?A*XYFNY!wCE4qb`p53Tw zhW{z5dg|DjDP&sAao{=j7Gf!cdqQ!cOOmK<^I#yu7FiBf-vF3Wb0%JN;{8n@cjVj2fGsgi?2$1^pG^$s#IsO4@-2Z-aIWszY8+ka=Zc|gWs(O3H1em_h5h(e)%bCaZ(}q>2tA8QjzLX8zc6MfO zc@evS%#W-NVszOnohgWnE8`1_X6T;dHi>g)QjKcwMw%m`)fj9U=-Ur#9YWSOCwC`w zY#yJFE+kc~HgMA4{e>~jY`EQW;yv&3Y=1a}7>o@|{t34@Ek{0JblP3c41I$OoIF}t zA1VR&h4cq+XJg;1OIz?WJ|DT>2U>t=F6UycBe8w6IIZ z3UpR_1jO(dD)68}gVT^VDo?Q31@a~%_7He9(ol)XH_gDcDKdw$tDM@B|Lgoq^)coY)pZflDxumwUm z%GRzlV9SM(x(yi-QGgmi-a7)qaq zUWO$Cfwl=9kw;ytaNOT$K+n3?4%1tTF8m#6?p2)IG_IIjnQ_X%-4ZtL9STtj4o_C; za=urA2jQX`?Q_FMMS$T_s!?2!#VZ)1q`;Ns%Jdj+Wfoc*UeYrlzC%u&mK(J?0c2+n z0INDOE0mKr>pllxnwc3com2qJ=F@uxso_r@IJRN zHtJgIJJgl|7G4SJeV)#H@7MiT4*BI_#T)jxvKJ7}fCbDmi&O43=bv$GVsQ{|Mdu}q zP9RzYGu)J!{K1~>&}y2JbL`i%bNTCw1#?T%DW|Sf7dthEUZ>_Q0{d)U(C4PVHpM6G zakX+*LS(yvoWIo`gNl8L?tSF?%nQbLxVkKjIT&DAzsRsis)l)=zLLX~j{2MqZCTXb zE*!hH^3)yq^mc5gqa&ok3J#tMX^wpQB_QL{G}$&nK`4)t)+$IeB#3YPauBSC)tj%$mZ=D0KpIE(>~ zPR16>3_Cb{Z&dU*a_Y6ifle-Kc%9_V1sNk*|5(pe^rzQ^GFs47dke-G5D1i49)TRx+~( zf{=srach^Gp#qi9&2%yej+god*Vr;G)J)mFDn5tYcDS{!U2J`*GG@B@`CwMSsKH8Z zLGnVdyDC>H=7-fw&f8mp9jnd)pS;gtlR2Ts#7|NKWnim;`X#BCnIEhL6PP`Xi3=0K z1c_GrwmgvfKN}1;&8f@fPz-70<>Q4okP%GFPO;U{MQL2H#r$`TD#IdQy32-|IIqK{}$Qoi1c^OuJwE|EO848md?8gQ_MJ@r8XCQST)(Dj*vE=vH6d6lS-+Uv* zvDLQ%$LlGPH>mzDps(FKMWOLM`Z2i3mFx>osuLIsrSl~UFlc!Mxh*(w{y{2HZnpA_(7cWg!q)bjp4V zd&v>lQla*j*7iI1qWJT6<%|bg547B-G!pBOIqtZ-6K;zj4;7C@NnEJ836BOZfU`Hw zx3f;7-Af`G0BVAPhL?5$Ki?G4{(%ei%G|PLiBGElWc2De%maJ_bec&p!_{9pF=B9)88&DK@)q~m3p_NNXImYbD_3>>% z3eMkDkJjh=z7WAE6bBD0p%9nuv3O;vvf(JTSp-oF>Ibx+O|ZSM&V(&1$Y ze)Sq#rdR*VgNY{%;wDWXlR*W5+w&zTA>d}C{Iz#Hkj@e`^B5W}FGf9=El~G}Z%6$O zuJyHXkg8ivmM0DBQmYJ)y;3xU&l;TzU@?x#^X3blcka##rd9E9f1*a8b4BY~QRsA^P=Vj^suW)yC8XG;fn*HKtB9QXiAuv5n z2Oxe&e((e3h@IFsETli-`JQqFn!$Mj*DgXedrn_J4}1J>Dse%QQ)em1^tQi$l83FL zNFP(f{t8Hv44r(h0dWaL1QJ>K9N{HU{;9ZEk}1!;hgU(>olDBQJV4{JNMWos_HX#i zg2P;>+|X8U0v|w~{xB?9@};7t?d2XXR?Oce66m?4oxb ze*b&r{G+zDrXjnqx$d(e=tP4T>5qS_w?_=gWSj-GEd(B{Uf#nzYUMPpEWE@QZ``XX z(-x3oE|FT=scmW#wIB~EjJVaeVcNK-R;mopL=N*TPF`W9!*FDm!4DGUN|KmoYt z7CjDdZkK@1UZ&iGVk>-{M-ixc5}YMUDP(5qk8uI0SuK|OCp6Bf1(8Ba&OLbVxUV-~ zN<(3#;~R6JTIyKgMiCiXI2vz4-n4RIYxFhJ91&bkzSm96Y<||L$Kno*ue6^~ry{;B zrK`?GXL#AN^FNBz{r2h+`KJ5F>9k?r?fXxje0X?vNi(saU}(@t%=aCV#armdypD;O zZT>d%bcATO*YodIsxYs&-@iM`7edZ?U%YswWmL-{w+=VH;eHodn|b26?8OvJiX$#b z8;UC}05j9alf=s!I_$q}kUo!d?e1@j|OBEnot!ZE5nV0}7fuvBS{;zKKN z7Lik@6D6}HYcyiz`JWhW$yx(kV)1P(gFF<11uZ_MCm0W~zmRM4$chp$KMnMqm)%*J z?^=r3eI?@CB*~?O;Z}1|P4e%zx^3F;I_u764ZZj6>`Eo12rj{(F;&T4eDfTD`^L4j z*tx<4E$BtxZl1Gu&pt7M`_A}NI^HhlU-%bU^!^J;=l~N!U*_xW|9WNLH@wl#MD+|S z>^S>g#%AW>Fo%^pyVJ)tm8J6Nr*Auc8ntXs?0J=iooN@XD21Gh4F4t~_F8~Az|+Jw zG%(P=#MbWZxxqA2&941?d16hDERn%y2h?W|r3#+072g8sJxxaS3A_749joE9-e{An z&QMLQX)2~QAJmKH7%USSV)5_?XTO+WU@KU;1!WTzGzr|snu6)!982IKNvfl{5SAmd zoa-LyPfW(LPS0}+0A6vj@kiIn>3K688l^}$XcwG^*_3kz`d28{`o~{y?Qa`&jAh+( z0UZbaeSTEof`BL7ZF)60@xlKzAI&ec_tLvqG4f5_*^qp}3D2q|?KkHs;WH5d<_fCh zhqnu5K`a!Dk=rQmWTn8p$5*3VpJ*LjyHfE%Y_m*n>$>a{iK)Oz?~GyXFe0gX!}e^> z_)GRv4=+qrM+Y@?c^@}+$g*&^wTeT^m_>SHCuz%q5TU`D4F;u068uwAsE$ub>HPX7 z@3B=-tK&G50OG~g@u-?{;8amAp~T9H1<41hRMbgUB|yUe=mu;IKg2hV74TjLk&IBF z%y;&FpAF5B6^D1eKaJsVOjA-i3vl!5p-N%%y3y8hbdB%Bqy3rBlYKecSJJGob@ZI9;EVXg_8^WSY zD41{0>~rw6s?+s48-ao4QN9O?(?(pLP`ZI-8 zf$*rqxFD84wB{H_B(x_8Ah7}wD4u`in-8(7SyDg<-=N~s8 zKc3g7@FQZp$V8Wt2jzrY`8j1Fd(>GcXv_=iEuOL1PV4o^)Yev+gn9OA)6A^6H~;jg z;T6`kO+>qYAO8v`=0{X-?2?R9cK`0k`56@Rz*Oz)H&R~&6Xq}dMc40)?;wQ%Y5UUo zpZ00B)c!gn#f_Y#^);UNoreI?ib9Ew!ZzKX)*A>d3COSDcmLsMht2--{@SUA@$)qg z2y$rGCf{nw8-AiSr{%;lJsY%eV0Y!Kc)MiiHBT#W|4PK=SDg+U=@+d=mC?H&myi8b zP8pAPh3p0j2NmydOPT3(6O_nyx!L0N2W5Eur7l6x%BcNRi9p2ZkRyPD)Uf?0>1KTk zKDb;%-Fviv57^?tdv+vQ;mZ>TdrF6cY%(iy7>-UKLr(eTCRp_M(;l`Txo4^}s=H`; zL3hj99PF@l1HJEvgIZvT;B54sIbbzs!os@o>07=$rOCs@pM3Y$7ClZ{oFk+du$s0D zxBEQ$Tx37(c7*))Iq{z1?=Py-%7M)-vpG}P_TXDps&K>+AS^PRkrBknsJZv z)aC=lYGP;};*PZnBoVuoA!CCMR>xka&?j5k{$j?BWN3===;y|ff57r6?8X;RnF&!3`3?r`1R3*J)V(1&s;_$bFsvg{{86qow@Z$|Gl(=_oi~tTLhB{$it**}oZF zzaWbXvYX0-f@-s*B~6I|AV?}}R_&qm$*)acOk*TuYcdyqBD~zmDxaW!G>%aZ-p9tY zb(9aEq`+-f=XRHGsJ&pJ*PL!w=g0NfrEwb7N={c`iji0T@(*;ON$R{(-qU%KfVWAC z_fKBgv?8MX7(1o!>+7!{tEDCGO>z1*-Yem2j)X4MGN?XT`5|o#J4AhN7n77kt(X+j zY9$s?p!JkxT4qIsysV`oo67mJe?dZQ(H)2}L+4h9;zuYy`W6&1SDBd|SH*8CiYX~S zU)gxc101k$&WcUwOmlNnraQ_RNH#HIT}6G>tG(~nT><^j=E!PKR~-+T7FJgqO%vs& zwGXkjVL46vY2PLsVQ~3JBtER)Ek4~uiBU7e6nu*r^j5bMaB!eceVPNyk-&*>W03W6 zi*hBnE_Pn~N;3EdUuyZs{^m;s4{8k=7h;kJJ3YD{eCZf}YME6~LZM#E-?Jked*CP7 z#2_ct@9T!Bb0#z7DC(ZOR(FQ{2zKKNFnk#m(8`-*bUC&O5;RrMWQ;F9tsgd(r9_t9 zmcOd8ac+@8HhkS%KG{0tII4peoI?Lz?L!4d+P23GG}nII;_4u-3%p=hh@K1OU$+{F95f5 z)qxv$2W$uC`so@V!17Ww_^;VFNMSn7x-bk?@B2VI8GZa3}Yn1vO&&8&?C*^lk_YL^7%}yq1kI9~KbIy8D5| zp;TdYZPN88@9W7yOuke=+90~pO3m>OS@2f|?F@xO-fE4#aYhw(?iV2MY~@mEX#JBI zM21>X;Etjj4H}+t8um7v0*1|Vl=ShnY|GXI{#J>-;m6eyxS*|(ZDWSHu&vS8-yQ~7 zmrQ7E|7jCI*8gb}vaE{4@QXu$qV3VyBc&r-6Bk#PBjY1AQxhY+G0wu0h&MEHA~-tQ zIXKu7tZnV_1Z!hy$!Tr^AFS!`wFon}=7C@%wZAbcSmn~mRVkN#5NUa0C;4$u8c^{%!@>;-ENzKKV zY+fGO6?i_ZnA1S;BIUw!`WpbKDhi0&M{J6z#4VU9H0gZH5%4s-D)L)*GhEgz6AWP9 zMg85^Zyd+e4g6;pa`S7;Y}MrP^#7)>8plp(l;xi*e;yjY*80}7nq;|?eCC-@w@1;% z3%PUc0ry_<{yA(cHw$U_p4<%0iplvTBX?eo`&6@$vz;{Ct1;}N2X~}xB8Ec_K{l3n zi2(CMn#ElPpJ#b9D1!{XI>~oYrma^HH7(e^<1Zbt&h2T?IsoPAV%nbN7zF3dlwvj0 z2eIQK`9M6y+;BkMP>Uzd2UiFZ_MpZ5%6og;rA6YqdFhKsAUdiM;~$?)!-xEkgSPVo zI$Ao+kNSx!O-(2dF5fa9Ej+h506C219cD$OR^#!AMo(6NoLGMC43$&;+GHOVrX654JXYs$ zXvbY0`FiQs?^`u7@_UOW0<-P-xf6fnPd!yjd-EngC*=O)-sJA&E&Y(qn|D)CPkOS7 za37-c*G%bl6QgH3>|$*If0rQqvkW&xnw+;R%*gv4CseJY4sY3k22h-wOIjtpV2{BC zPrG_sI1FE>;SPaFJkgN+_DCLXo;x)y*SK3a+gCdgRMZeAT%sLFvF#LzQ&nv$6b*GA zowh7_WImD4YN_$z5CC5ZdoKq;N{1~uaiOj?a4wfvM^YVrHglWLYp{zbFe`$9_Q5@! zd+v9KqN<5(*cSC=;hpA4KnmrkbqJ|% z+Yg`r+6hS$7rCVV@F2!!>-U@Z_kYWxb1q$vd~%vgM*N&{i1d);&pqeC!QoI55_2Qw z`9I>~)8|{i|J<|>zHBypVIlufGQ%-9i5c?Q-Gi1POIB*Q?Van*QHn`(9IFT5`0dW6LC>T5eDG|d!zM5PBRLjXK6U6LKRFmArKKfC7dWK ztGwosZiT0@85fRTBa%EA3NAD-CPzmS@5jd3nqw=c#GAGNcyDnwL0H=#Sb!^lWh8Hj zR2Jg-6ixCBaN)OTTFSPv>CXSQwRhoc@90v2tIcKC2YwE zUM?5>yP3WHQ9vr*OnoF0P0d4&wxJGll6W|6+%``CmockARF+(z_`J{)Xv}dWdMO!) zgL}gcIW5V314Sk-uQ--HTYer>8%k>IjuKw5Tk0_(i+n;)t|Mi=LVd#~RBkpzkz$v%G@81v8tNjBU;enlgD4Swxv4Ei(#y zHg!($2DaMlO^2M{YsqSOAK~r-8RrZFDG&(>k6>}2byfYdju{~WWugyIb*~x7*J#b| zJ+W7|w?*qkPnIaNn&mn&>Zf{UA4d5ZIk?ofdfug1h-_KiKBUMf@ zT>+qhx;WDt&%F0o@4Xz(X6yy@jy5ga@UP8!`E~pw2xQ;_XH%6Wm~yZ_IEs1&h(%up z(BnZs1<2V0d7ce`gn2uUGx(7(E(ZO*JZUiQ{OF>RBgJ3&jEgeMdc_JU^lVb1Gy7tE zK&gWD?i~y|P=aP*D}Y8vfXWU43_;cd+dnDomSIH0G0Qu$QmW0m;%3)0|E6_POVVtD z*2lj5kY>5R{)D|g5iL{xCn~UEQ=N`kGCPac8+zxjA{nWWO#ymI`{O%mQd!-)zau=` z)E-YpYFvCIF89%6d#%c;BQ19n|3fXh<8}JgcD{~?n28#vm4Ajd**k~UdDpLKX}i9+ zkFYMhAM;a58{Mz<>;bHJ&1nZCJcIfncfZfOFp?&t^0MUv7DWP3y4(t>^v&6rhn+m) z9CZr|p8$w0;#4-GEVq`STj=cV7jMRASaE!b!xE&_R$>PwlB@Xu^iwWDD&S>#_v9(6 z!;hZVpCq26yHxLhOHDLkR1oX1alH4posSbb)t)0VkLA%oFU61{dJ*GH41DohAzI+E z0$l;7Bm}_Q6*3J5*wE}a^1u_wqNRz&SHa{3Z^qoA)9qnn1$Q`W zdJc8FbfxcXpUU|Yfqi$-y}Wa!5UXuw@s~xH5z`F|=au6`;(E@;x~C=^#%+tvyx_U;jXp6Ul|woCrNY6H;xdcWm%h@}YU zo8o9GL(m=j#G0$*ZGPKUqxl6W5Wi6Bf|Fu30nKO6^sb(pe^kKDH=0NycoS z0q2N-S9eaJ|E*G&LO7`I-LdSJAJmBXajMUfDNEBEJlJ>&O8QK9zcni-dmsrUmGa*O zZWFxwNIa5F@!TcV!mpsIwnh6exKnUG@^Yi5e`#|btG38>u zyLXw%PM$1n;X7zUMsyrym-0#^H&VcRJp4N-03-munFgv9i*@NUdU>|aUS-5R_F8w5 zNIEZc3zK2vOsok&LNdwI5M}AK`5AHxSEy70yR><OR=e?MuXEHf zepV^_Yd>h9oLa7@=dj-0EN9Pj2WzX3V_K1NuSOr4AWkdJa5l6^RRS zV(x9ZVpV>pbt1G+R?RW0p4~-+^@yqTHh&<)wD*-clB+$E{1be93&N@cO*}6W2Ub3o zG%b(?kb(;Vf`)@4Qpp;bVs5sE_}WjsXt~>En%=De$AawNerP@`g+HdudzA6GFsNA4 zfrq|wlgg3lHA*dxU7+5CMMZo7UA7sGs4pj_$t$QO^G#Vc3z4(}7{;+*eSCs8s{tf` zR=fv#`~Cwe=2{v5j+wY=_p~4iruW+Wj`$V$I|%nEP&ZvNts+2E3$lg=OEJRqqK>8d zrS}RqDFNJc6Af<7h$!?+b)&chg>PoB3h$6~SwA;H)KX<`Hl-rbM+fs7-`>O$)&Git zEvF)U71QvFw#vOaf_DIlkFgfVswRm0^iWA+fWz0=qU{g`*lG|V;fL-r`y!ZEd;h;K zwj+b-m%rM)1e=NjYLq9Ye^t2NeC_4<-}CsHhiWx`NPL=MSuzdVD@h8J&k5!o*$gaf ze}l(i)HtPuETpt=8A;`@b@927nm8Ow^WMMa%KU)qqwN&+s&udTKGDpnRmG(xs1Dx9 z;^S+1j}G-C5N)8U5L}%wBf_aA_rgmjLfUK1i5D|@#d8mni3m%hzXIZF{=w&44RwDg zoVMm7#ru`LIgag=VK){VZ3FjKr)Nv5xh$u9^x%SB&Z@F=^~(_Cq7Lq>3dy1Tf@>2) zQ;&1l9_;&HyygVS^hsA>)x*g^xMvn~+4#+I(Fqy!|n(zk{U5IT8i|-EKzgQL%xcgCo!2}YFA_O!HtAm@$%vxqQ+>{H=@+0nr zOdEtWUkZvh39{zBMFFpWxF+DP*{e?A=IiUFm$!@5J7R0S-?sB|mq=xIQHWZ3@oUfh z>OqYq46=)?f0}z?M6SH*gvS)@;ll*`6O~4n5(u*gFP8j2CMZ=4d;5c~U<}Ic9Alj` zy=bo%K7k*f>;?HwJ*1M;dOjK}CNrr_PyN95ULA#oQEvjzb2u`8LkZvvs z-(zOWL%tLlA~yD-_pUZCQlqP!Z)szW$~~gR?VGfng5K2a3kvkz@vq_ZGeHh?Nl+!* z2@mL`#%V^)B-qd6VO=S$8qhmE;aC}!C|)&lv3oMG&+Nm4SGx9~V zI#nh;wsn{mrr7e8fbgS3T&+B4y>?aMzN}mt%6=ewn}RH0#qtTMAvoz z)(cUrOuxs+){`uO4u_!f6lng}yMZ+8h-{gvAn*E+S$dFAltMnHy*y;P^NGQV7L-<+ zXjek~p!Y;qLm^W5ID?5^(85uwz@${3YLQ%_VWJ}hf#b?xH9>s;iefC4XL8nsRx5}d z;DI@5t5lxm>s0P5lX_p-q5GakpZ{q5xLy%S>= z)*z`6sp$w?zhOqGmoupngiO&N*{7Av+f^*DBHAhga9CtLC7r}>45X2V9y||{y{k7x zYxrLC{PGvyW*9m2%kp+t78j{A!D3Z*ME8_w2E!2d?|_4rBcgH+f&n2U19?ne%d1d9 zViKDY|1Vc_`2WO)Q>=3BtZl0q+Q#7sf24n;dt||yst{$(R)`ts+u7P2VOfEiyhrfg zIHT))rvAd8SR2$C6_=A2$NCdR6rf$pAS*uLueX2~u1Dm+%y%#HY3_V@hd(W7?(M6R z#0ICvi}-ZBU4%-KNu%Mx{d7#27$h0yAV)Czn-!RQx90nGQTJ+s)5A#B#o?PbPExX{ z^V~SsUXHbscLs&*;W`@pL}F?LrxM+}f`AX{$Gf{hkzshwH6y8=r|&}KMCKQ&JsFa> z<@aP*nuR#k!52ywzfp5T+PtOnq6uX+d-8w%9m?Gws3N4QZYUE;FK}4g%Z6ZL-uw+E z#c`J&mlp_~`R_hCpm^`UZ$ZIVG#BRH5aP{>3x4L8rwkYW3}lX1xh#k-^RhqMu+^j| zlAF$sDAqX2o&G)Mxn7}fZl|5^$Z~2K-iz)a1>rr!eSBX2VD{&d$cFq%;Lr-5ReY}m z7S12;WJul zjr^UcyX%%s8zMtqj$6-q4jybfDBd!L*b&S85Uoqkf-j>`4AKBYu@?KrVyD*^@m>?+#Yr3cc2HPm;ApE9Gj4r z9I_v@fB1AzK7!c`p{l!v-_Ld^m~f8vEs*c2q zO4macsGA~W6B;)sIRAEqVjtEuMOh75&A*r^CseCAdq-bq9E$`^@g8ZOXEwIHxx+&v zX+Y{ydtV1Rf>i-_$J{(-J)KJT(iT)-RSPmEq$W3!kegF^RTeJ#&K?omacG1-Pf2a~ z-h{yYcEt zDs{rAawz%bEI=7l20AZ>-F<%Y@ZPDPXXE{2r;egxex9>!7TdpnrGC2V^!C|!U3Z^1 z)3QPp5&HNxg0S-f;?20n@((Un{O6k7gNS3lW<2EIs}qnp^bO5q1*OtVWh_ZsFz)?l z-c-$Lg0e|mig#8_#kp1{oC)5zR#q4A7_I=S@J}>j@-VUZTQX|IsoNRrp1!4t3ya}_ zrbVo28)WgedHGO|GMED6O6wm}a=0N-C%K%JcSAw@=+B`rX!YJ{vBw(qjF(d(!8>Jx*x(>brv0GBPIyYq}zp5Vf|C1+NGG5;jLmQ)i84ggIc zpxTKye#kvR8LM{UH}dmsAD)Wm;zg&mougaE#_tzGf86Vn{pg#sqwjJeVv?hJP^b8p z{8XEiqr_l!8v6NotAOtv7`3D3Nc6rkd&`-%z+*LfY0tkn`PMdEyl7Fg2c1Yex9|Oa zx9;prw}Hjt#CQCN;n?x<_b-!To8b8W7Jjx@ruvgWvU~|14^8R|3Mfq1p+#q0cTAjg;cFN6#sp6=!_DQH?>6k+6cyC_jq0Vrz%7VtHNHkAm+t;6 zX6waRiF^trB&2F{@pvxW98@Bg-N;J1F&j1`2xij_k*lq}$Ge|%ELbmjNnnf$LOuEt zj9|T+Ou)PN#xrEWDFD$I_Z|)iQw};#w;#k|_X%TJ+odyhAGO@qAT;M2 z+7nk+V|;(J0i#aS+bSI-G2er^b8nKMiv+rUt>yLRqls zTa8FAxwdIf##0&`IxY>P_Ds4u_~3wh9O_!T)zKTyCsbF z*g&PcG2IV7eAgFu?oZr5FBEpoQR0&_k5bxqe%Hz%L2IA;@*MNHM7Fg}dsk#bbGCJy zoyqAAB*tU47i2Fd@zy8UPgRMUjA3{{1?Qxzw-J1biV%=1UT@gTII{JQ==mWT1Wr^* z1>E^O7|CBEohQku;7LKqnp;GX%j^g=L252{Iv{I(JA8mGxyS>`tNdT3kMW;BuVd5y zA^MvfV<0t!>GkS?7odjkoF%g&KL~T5vIMqx;lPdGdb7Gd5(V{Hx!b%0HlJ=A*u!XU zw`MbQw|EDlF5KKd)ON=eXX*d$ic%4~Y|w%AdNz8df51nz<|)h05PIbx>gKEH$8WVP zbq31z7Mh-ox4MYWojk0t`Br8hC-J%Hi-^pcYhIEC2NztmD?qpRbeiW zXZdJ+61$#ZKIq0Sr*y zTw8yuy#yk{nKeB2nSh%!0f=lQegFXkpE8P1WV_43J>$trk>ZG()1HVF!;2o^o)Uj~D7DI!WoZFS4nIAaJaepn z@#F5tr3Lyqw`<{=w>)kfe;w;KI9DVP^`h`s<;@Ln&BEx+q|I44vGtkm#N`yH_dowd z-yCxryYg)Y+Vty{gg6>os2D+X>=Hp7=f~SSH%^-p&`QG}FLtilUFlB(Y+;O>YCu zVSLZ-&8xAfVse=n^jDuag@UzG+gnXMK$!pxfPvBPhur?YvX#~(KuC*#X| zkA8%KEq!OXnmhyfKlz?@PJgZtrYgnj-?w#=+Bd}q6u%J-eWez;GDN@owVt0ibF#VhvIxHHt?hO^vF9;E z(BI}_Ithu-K@Qz)7nWL3Fh3^G5C3{E?b#R)pQU@?ZB4TzUKx)Q59M3#3J&z!bADix z=D)+yPkW<5-K=`^Z2g<{g7B*fB_aHT{o+EhqeHj?sK$Z!q~wA!a{tWD61eeEdj0-*8SwS)Pc6PR0OKf6MT|9m>^^NspDZ}W?HEp5KdB<9Jn z{el0sf_fWTy1x7hzEf*;BpTf@=ka>7c%s6w%qy$H#@eQIL-|2mWe}MJ(UyoyM2ViC z&5_SgHh%@sU`yA8Oaz+HFi|Jae>{oQ-&A>^-CVu3nu(h!

#Q&DUmtoQUg6tkbuH1qLU=jzm?xBq%E}osyJtmMgJ3RwW|m6C zBL`{KXfW9j;A?`ifZyJp-WXcv!>HXw3n6StFf#t9Ryqq>=-i21TQbCd^1V=eu?;&| z1-eTw0R%?j*l>l_{zPUqW4=@n3n;w{AA5XIZ(&*m0OFh;!UeV!o0o_;{<Hq3~w_Xx!NOGsl>AD3q*JxdqJENM->JNOZT|QUvcfI}H(a)y5&EXuSvdxDXB1F3OT569{+xn~_w)K6S zfsPs=G}`1x?(&hC-{7u*Y;53X!+PfK$i8_Orbf)Z_$Rpz#h>;hTPCp%QW9tTOP-=N{^^uy>;Lh0S_S;Dks|rw#m%r2Ria!_N}Zf$Lwc z^1oRBn{|7xhcF;>Tq;`piG6=mC8I|XBB)l@3Sm(QsP5Mq!59%MeFH0P_0PxpJ^w2F z%PjmwWcVMbr2Ub-eD?ili&5vq$*SoU@Q1sv1Mfxz+K;u~e-Yt66!F>O+g-a-M%Zh% zY*b;LWV9~*OGY98mE~=D8KJQm<6{q~;(#X`C&$8Ma+7CH$sCH)5)!<1_1(TYs3!m& z3Wv}5ha##hu@Q3^PY@=riL6QuzElmM0v-y6Rm)MUJwQS*G1{#hmvV5CT!}Nw=`Q)8 zmTo9QN~{ybHaoNXNf`N~?Jc6lvp~XJ7=9cKQmwTm&RT|7zis?>*=i0|Ut~A^IFKtw z&#)()l#LzS|M_m>onE`J$!z0IjbY-GUX%g;FdUk5+c=li(*#C;U3QEL94Y&<(-m|7 z@W({-lU>0MUH{e)(&CK!?9ZKzg{?0!2F@RHzdJDpdUJR915>8bE;YoLmVBdU+ zbe^z=5JH@i3|>H%%8f$f$T2})y@5ha40@tbsw#~WT-`RhgmvQMRj-z>x+3Ah@6|+m zjFfu!APH8afpTP{fQ)cvy&y@jFV;v(LI40#zXr8mn$W)vaC%EnL4ZlFMo#%1Nh}P2 zFcFJfRJK8!J?BhxpM$v;2Waa5_g`%OpCls3dM%2%bA#HyBgm1M{yAM;JwqEyJDh=` zm5D7DYiI9dPq4Rkb+EN_v}A>C=-XM^V{OfC4ehNR4LE!9LJ&VaFxLyW3{_{N%WZle zmn5>5k;M9#Qe5zJsOX?8MLkjs;8QBep|1jE7oAp~%#Xv)}K36QO5 z&6K0%=_y8OOc)RAX$2=7fgj?Nt{U##+r^6ydN%7Py`S$|@EjPY_NJW%bHgxxHMay#>7|(jkp-M+_JQ@=IPSAJ)n&B~Gu(U8=##8e_vS z37X^)tx+TeC85j)W~HexKs7@EtKtVjk?1Fyyf9KM1HzA`S|R}>5~O!(%B(nv-BgQ8 zGDQDZ0=8-P!CjzmU=Umj@a=B`n3Hm!Pj=r&N)>zk0k5;$?_ccN^F9OtY2V-Z|FK)y zHaI;@UaM=uY%I%9ro(wyQR@KW*v?OZsF&OIUKT#OHJedMk4-8NuSm*sZn@}oCcZ@c z1sF+(J{|1m%H$9^U#JL_d6)l?ge#~~pc{Qu{IXw`IOjNUb)B0N=Y;|Usj7x)rGlz* zXa!h$UN3`ABBFb0i9?%Ofsrr-9JJ<$21O8K9xK#FNy^k4Z)|Y z^DL8%k{OxTSmA(v<*OwrY?`-NWiZFngbd6gE502-NCVvNW2ZVVg#zc06-N8;HJL7(}!^vCHa-UR)-a|20nR~nb0QbycqGhE+#8c!&#Z-zx=~77;hlQ zrkAaIj^oFNvvIDwz*BQL^`A1v`mEUn_1=l=8&6Gt^vfg1`LHTE$GNSU##mfofx|-( z9|aKeojf~wRy#9W#{LyMVwQU-X#E@oBMn=9!`Hh-vH3UTC#?9JS4r!N&&cC>oV8Ea ze&!=n(&rVQFbik`s)~g#F`f5+K z^4FP_-*dB!=OU5fv3^76OARb2J~-u5Y~BHXiW()JIxX-L%_gI`1S%S8V(#kT9O|i6;UD+59E>NR#2l>&WimLwQaXg zA9VUUFkZ8>{4?5Db*Pd5Jyr7#sy}=GdH#cH1v-Op7r)naCoTLO_ko{BBUNsJ>{cUZ zWnL2+Bpsxzmc0K*pG!=0T3S`&c!U-lFJM*V-S>{|=@JL+!V2hw*>7v%b9VGrgp_QpZ4!Iqj?%x9n5N^h&aI`8<|S!m*7t+1$=0YH;`b;DwCgv>F09#_3D^{ zruzSE`TzbeoKI{2t^U`nXU|@G+|RJNl7H%pVJbXD#w1WF>3#og!2w;H8hnbz8K4BU zM$-T0yR^{=IcpCegCwq1m1lOt|ab3E0cXdMhrq1Pp z;N8+fjKl3lXK9ge`uab?;R-~0X28K!D$2>}9azcyeVs$ae&?*@T%=$x*DM>Qf|40; zbBxkx%LsftJy+y=Yhs>Hzvx@ttkE4;Zq-{D*pP@~!gG#Cn;_dgDF{-*kPWe*{p%Y` ze_^L(y96DkE2X_8y7jcD@ullyqDo{Hc5V z`Ct1iIZ=ZD!R~L#w|2GFU4~F^O}_J$wj;fSyZ@Qt%wz=Ojg)Utt&+s|8`%zt3va-8 zqFmw1T+#OQoNYjuK#~`i^&i_uwhkv)Ib-?2ZY>eY};mN^xfIzO9 zSICboF7;uKE4OW|eEGYP&@OL)RSWW`Y3x6|2u7Pe>SVk07Mi_lW_K*{k~sMzs>rzrdXD_W`MjIOKFuDo*O7$}N6z%_7}FazO^ALW3#lKbG?=O5 z{_QS5Czkg}EorrMEj!C~weDY!Fgjt}H5b^aaKYsrQxgQoa+sf#w1J&h#rWwe_3j&6 z?>-^cpSG_30caK^t{Y=cuu*9K8{_i=C%dY;X7VaxRz`cszBk^SZ`0(gCL7td@jD)L z)NMV^!tmGHtfR9?)fHa+%zU+s*;rQkP6kG9Ndr}zcb>e(1#3U3v;R4@Z=XxX`|1=;Z+n{ zsS&Rn_aBF+61ol9Z-RDpM%f?#fgPUp8%WyVzG8MI^-IeorSlK96(xLNY2I z9WIFN-oI1Dm(=yy6(p@3ww^^#M0$uYQK`%qjzo|hNXdL&@|St?SXhyvyenTWeQ0|1 zJ9N>M!v6YFBxTa;(50=Ajs7kdqOx4G{d*dJ;WOle}6inxMNA?R_li_rC>voq#TP z2>TpEF2ZTNE7h3K9={i0!E3D7LKgB*662R6)f1F}<~M(tvX}Ad@>@~Ugw;ZV{%m>#oT)oKaU_ce7D}VpWzakS2=H-TF~+P4-jo;K|OM%o#@K1 zQk(&~)FwZmXHD;Uoo}^&ACNtNpV7qF-Ycp0m+~YxRfy8&xPhezr}&ZpA;=)(ItXVl z{WfDGgyHtIVe#eryWKylmH(@WSZ70=z8d#$8)RhcYWAOodi2JSA$<2=O=LZq!Qdek z@WpZX$C=WZek^SljoXS4oiF~%+RQMiQcMTEvrcwHh0lGxxCc!f~Xnh zibo<&%ZVV+s$EChPh^cZ65aBd*WZY}KPR91@S>LwuG12gXn^dJtR$9vA z7iXppNsSqKWv8T=yv`G*dfFjkr$t+?jt7XBjvuFJ!$lDmfkm%Mvp5n7gVY_JeuiKw zRLOp?<=V;G8sR01Xw4Gtqs(oQPpjf^jMlBVJ{4)(ORe*cyZX2cwWOi9oYc;#;o}mQ zrR!Yo_Pe6XF966BOUnC+!im-F2h4w@9(`;prpsA6(|E zp|7%Nb`w%p8aBEzqHZ9YzgMz)Xpijsq(u7koJ@QFKce0{n$7qBAHNexM2sdxY>im4 zTAONVkfgR4A!5`PL91$XYV3$n)NHGbO;Dp~Q7ww9j+b4fRCO7p)ur1n@ALbf^T|KS zxlc|`&UIb)^S-Xf^D$8G8%9-|Pl7~n!Zqr0F97PDb`4qOGD82Kf3}A&XSge;q#ao8 zzD^lgFRJ9RIh8fi&?o|au+-Htr@%w1znS6ZaU}j_Xd9bbY27Weqg5GF`;NFzMBVV;AEJzs}Uw-5JOhDc#P6(eVu~l1OFP@azJaGHU z9;733ACS1^om`iG?#5V9T&yuwrK?xab~2ZGp%Gi) z7_Hpd21B%hV)gk}wFt1~yUz_K-%SlKeK`M%Qe388At~P)Vy-ua=Tnhy79g0u&k)qd zUJ-{#tBv`;6B|$svsdjTLLvq{3@^*J(HdomRX|~AcYb}f*XNZwW>LZ8g2(xuyZ`K` ziIwffX2=J2i^5E%2O@2&4$^6)86)i*MbZnYi1UD_v_YEOsSn1~NBkkKt3w>NC?{|} zQdB?}RA{CQB>yVZ((`KQ3czOG)*J5FdAUT*B8a?BdbGi^#Y=wGU7>1O6=726S3yEl zJ#3Hi{A0Ld-M5-yM%)|=L?pK)o%dGu?AcZtq@@sYXh#kD>Tf;x9fn$-<3<8l;CzF^3kZbrboYqIicS8eeKBG zQ4`*}uGn3oNr~Ud0%MZ`%4gE`SI>6$xZ9T)PPX@mi3Gnl7UxbNKL1$@BRUdxo^zA= zhsv-pHvs5I^NF!VDP;Fo^ZN!lrAbXs27 z8*wz)s5LoAhplhdzHZ&gOMEI!wz?plk4Yeb$i7w3P^<7wRwgic|F>le^bL2+z}-nN z==4^`@sndu>s3VlyTg;q+C!0WfcyZT$}eSGl%5G6<|O;M5GPtD@D-Jm4XZ5tWvj{6 zxJ;DMBB1X|8lqbg15kY_tbY15rxOp(_DJ*h59f`;C3_^3lY-zGW4}Rx;77~mpnG=~ z3r~Y6mGg9}8{{xHeixPE|72tne2!kF55B#eTjXRNiP3#Ewx?BSG^tl&nfCxTigy#U zbaBCJt$H+3EAZ{vfxby%?zJ9q{!^8wpKYgAjD#PuWxV)!x|!CwHFl=jLo5OGRl&ac zy^4nVcTUO(cuOWH2kg0Y_}3Z|}l2foFoOFFCRaC`??Yy zZNz7A&7>8H3{O6IcABy->Z=^$+vQvU(lvAcjK8@93>Rgh$m{l6HBL({_n!d4h^Z_R=cI_+ zL@Mw7u?iTE>%YbKWDmQ#jEz@yB||4@RML>Ui1=^Hw{fL( z9yxNHrsr;jiZm$KUh1g+n<_gUT4*?NQ{y*aYT1UlgKT|qQX%nGU5~$z&WNd^;3m7^ zMLTPis5l%Ek~w6cO4c~DMinRwOwrE^Z|Df9bGJR1j4yk4ffZtU8gb3G zbXv(?b47LDgDTTp$&_SL^J9dbacDupc70@ZcJNd2zvqPT===jW$nBv*49pRfW-j1h zCfa5#$;a&5!%NLIg))Z!u7B}WX+sP^ZvPpmPw${-!8&l2QjT@?5hV^p)WkX=@W6Px zrh8xpjF?hJ6^As+MnF+H>u;yN>iwOZ8n-D5Ti2MxM+a$9PS)4$!L|F=LE;vr}A2N?cO<=t;O>e?IdE}Z;s=TewiA$|rrByR8sGOm|m zqps6w?00wJStJ-Or!&ry6bSZ6>B#qqpPb3RGTWb{qOMba*Me{i9i#I@o1iY|b2N`o zO6p*^qnqbtDI~|W361etQ8#TvR}b<`{@-?UVem9!b|`d$<59)^*%IvG3t`fpZl0c2 zc?RnezW?FF`3pdjxZ2(y-GZe`L!Os&?_@?kx6&A|H_?zBsKl?=xO+Dp^|T$%wE|_K zZSvn7nwneD#cU&ZxQJHJA$?NNivy0i6?uLKYMQ#-uIblWy%Ve_f-&!wH!*X&d<4ll zEN+Hmh-k;p(z0buu`%q*daeX&!Y-B;L9%Sd9&x3TGC1`atxYiFOjYnaJT0;1U5{K@ z#|0_(_8CR$p;X+>gc})29T)0?8_jt??t}Xy4!`*CW5&dSM5B+Gx7z_z9Oh&+cKD{W zbDcz%(m!pP)|c%HyRyHf=mJhN z%PJOMKgWuiU>2P+6_}q5VZyw8cBX~rWVY6Qp)z3qyT2Bx%(tGO*3o+)riCEZxr1{( zGfVlE_t7Fn-66U@nJ%rQ2|R+$!FA0Vdvs!Qm`QX4ZS5hnWfOe;VA2`hUJEetCvgYJ zlVBYMPFd~&T0bu$=8_qbB3*$OHG+{FHp~oqb?Z`(Bw!&Mb-vM%V9oevnGslfGb8o- z_`GuwbXD!iVTSS4bL+udEs2*ev`GZtxFg%qb^EM(uKW;N0do7pGQM2;Y9=5!2nP?A zB7n!fuYMGuH^0Ard;h}g5mS|YgG=&lGvA(tACxI8dj$TUGjQ?@#0qlZQ0>v=d=d0L@;DA4sT#9Dysd?1j%{S!Ftg z5g;j;fn;7t(|>)va_YL{x1UT3D)@fN{PEMlI9C#PVDI*l8nKK-gpA8Z9y9_KQ>4c+ z{;Ymv00fFgS^q@m2NZP-ogwJNdzMn0Q}Uzy1oMe zk*~`_6#Yg0MPQ|}z>-Y)WP>3V@%iO(wJ$Ec_*`^ zWqP7iPkyMR*zm+Uz7glzsTSPOqesZ&yN9s;fPqBKf4@7nqhg~k-_}2-DDPF}K_#^Y z=I9wY{rS<8-lNn-uCx*R{_XenW}#_&dOiL!$tpe zof8AF{5FpW&^>0|%Cc0S#nRhC!)eli3R9D6jcQ!YN~U|3B&l((fYbsN`XLU50){{# z@S<%H_$OmNWqiiB|J3eaeD*_sw6mCC{P)Q5>xuXg zo$sqlj(cAWZ+zg$`UQ6D=t(p`yg_VGsRZ-#wS$^EA5t6uU1dHeW2D`Rq5;)Wh?74f z!FM6g@yKuj4KO5|0T!0vUl^<$4d~nE!mVU3iHZ1~up6YE7`(M9F4&h-vH<^xh-!jG zN=K+zrDlXXsQ9#t4<1O()_zTdzga5K$eZ2!!spDQFMoS%%u!92w2v_6MO}$%JyyXi z#W1TiHGA-8FUU1QWqjS2w!rZO;I54C;^hJudBf4zy}2ya>c5^k86!Qr<6Zf#jt}`g zu@e#VHx|Q|7T&;3hG?v^vgb(Zt zLHEymy?bopK;T>9mj6a}e-`I-(}vr*+zQoni?LdC-#*kOENN$GHD z*&M%{cH$m*x$9-uq1uuMH~zgW*)i6M-4R3GyB?njdg!dlzPdI$;`MKL|KG*{@ zs|Q%-TCYB8TLrZe#PVy9X~lGXaMJ%;DeX49;P|QVedX<9y_N8^qBk!+MpKQEe2pY7 z;KymQAsCi3JyA4Snu;KAkUNC59c&ff9T=%AiB>RQ%PoZzyg5Knmbz7FDA% zHc=sHRyQ%z5z`MoNB-$y@iXRluQxg9NmYJd&3oH7MJ&AqX|aw|f*>`>6So-pM?dG?vmHgdS#>og@9pglp-yw$ujJqY=2YK$=+D1uEExLF>z%t@tB1}S z8UfjIng#EV_be~#L0_(%9|yD6At}~?r+xi`TGv2V-wmi(R48k_pV)a!=f0us;XcbBnb0fG{t(&c771=J48V1O*_zTFO~q>V}`JJn@& zIt={p)6)F*b(tgPS zs2S2&#M&oKU>qQ4h07DI(6~uJO3P#13T#K_mH{?T_GI<_)eqqZC=&e#KA^Dq3Q3So z|5gtp4-miSZ0Zjp0t+`*yLil~M#-ji;%W$B$h9u1q$?}tz-6K1K(gh`qXO5`=^mll zG&lys6`BEpWbBd{AV?MP^^NSOTiO}py1%n-|L58hCT)KjYIsKL09u@ph%7Vg&N!OI z?c~jSbZQ;~`n!10O?rxlB+`*;IRVFISqcNVN(N!3;s3ED`fdIXjNpd{0Snx!-?FmW3pfdb8M9<+cOhI0wdlE+8}X2AgiP;192KBSA%2U`s~FoK2EH zO`*!4M43Ti06eg~eEi^K@g0h=swLqDk}j5l+5$V&kj%bB?zlgaKm3&OjSy>nPK#9wz6CRMTC(IJD3pd z81m~{aWu71dolJ_1mlv}_i5SvHKl5t2D-_W%X-gvxO7d+(z4Z76XE+k8e5$Le$TTp zHUeOp?rdOWc8&;lxSl@aF@uVOwqsd1$_8KvcWt(;P6AuycnS0e<^?46>xna<6cR-eYETu(H;`$=g0n#V zTrAcRb~{k-?R*VXpq3t!h!_HtjME_j!E$sE&{S-;Zr2mUP*TzL990mS->`a4ylYZk z=g?v|$=yiScf@S%K-`--^>nJFWlUNSYcFwzg@*y?MmRl-rpIUk{AA-CzFR&_eeuOb zHjX^)@_Y+vmK3$5cVXw3Z!W4UDsSWyuPhr67XP7PK_*FYozHCV8y?a&mNLDn$M32y zhy_S5e%*QT{&T{U(8j9ObNQu5-=td}4D0wg>vLE5GP}kJDU8s}!&ln2aceVkD9^Ll z3Yy2_`YMV8*l=v^AWbtFfD4Qmw_8bekdXutI?}}u*ENLodKZgGCCLHEeBH(Yt5GAf zWc&neyPa)kFTjElt6Epj&>6<&&?*N(QSr-Z2ELA(5<=xpI%G6)Jj%QD-P~MT@CQ)= zB9b6&1qS%`vY%0^Q${5eF*sxZoR%s;EWx(BD7-ruYdKnG};8!!E-MQdOO^z5kR=OOP zxE4&nb^YP6si;&B1*30Z;{n7uC~)e)w5uAJxbN=IPi`!HwMv>3D(GGQN-KyZ{htCq z!D-einN}2OMCP!*?3ik8q;vVub&Io8Y89SQ_Bw@GT#v*)6opb&(C1`dOQT9;T^QQFb##T@of;>mFanIs0 zAUS4%kYOHHoCnL=7o{mXBb{xtkpiNji5;+N|9(1@ACX0EW%NFR11x?xI;bD0=XNf9 zF+Jj!@X9Xji$qMpxA9XZo(cy;t)7ScoeLyFvuK8|0ws_@qd+r_=q_51Xe_En9FhV7IL4RBBH0ouzPUKgki$(7zn3TO)iSsPBknhSXMb{>EBz9A-k zIek-aM*WfP1;e?QE(ed!2Y&cddg5HuH#jph+`cUo2Oncz0l?O5O_;D@j{j9*jj|#N zPS;(!h`!FQfocXSP^rXxQWcMeip2&}A}Wl(tpM_}a%dy-qJUdcBJdOtm<9IlFLjiipWpBkpBqVvss6&e?^b2`7EJc|b5x4WL@DDN-? zzS3z=1D49=gjH3IF>axQtp|!);{mq#=8?96-o^`GwoX)v)c%8=jhmb8n00VTLJt$8 zGNR_?q!BQjPHmO4MYHSFuf0!S?)KEYy~GR}>9rV1?>kFz##Z4Lm&y|m6F0zYi{=V6 z3I)+&7>t;~P)L-t$Si~-+6X3vw`Rsq#M?fyi?oLNIx@`h8NmE@B}jU@)L zK+UOGR@;O!2g_*oaCKwEb-IfT_YZQUacr7rL%JTj))^N$-?g|9y-+>1&=q;$&95yp;9u^) zYnQi+WY?OJH<$j%u)`q;BJ!|0J*lWA zz;RxCZczET7~wOK4uXtW^)tpMW#ynx((f2$u?OIE4FZY_*dp5 zZ8ev5t69*KH+NuvR=VFFp@^P0wZnH@N1h(I3kI%+CB2es?tSPkraiLHHY?%rLkKWs z4$#sYr`7ICsnn*QaahVBr}q7<@90&eSE;JEpk{Ulj{Ft)_@rmO;h2{4dt-xWUrP3> zV$FvhccVZ9d~H{aWo=&X72qr1kTTw<2T`S{d zxw@RY5OdTUNAaq)qosl{#T)v`=iDp+p}b47joK?moMayQLj$DUrPuCv?+4mUM1>nO z1E@!`W)UoHpkI&$#cwnybQG`uO~KP=hlMTPcpBaM zGXff%lhz)lZ+&5bosCD4xD~iE-1?tND_S`aB?qwhGC}~*W|{uFe3+kc>Vj9-p`AqOs& zzx2_)Q-9Yt$=F>l^ubkAcD?Lv&-#U9~&nvf>5A)uEI`np#ha>~L z^y%>SZ?9${S)x!!?JTW$FLVW)ZPw%^R!fc1bJLJ&RKTbyqX#4#J*qX~xK+HjuYGUe ztyp0-#;a4Bl7+fr6gOqaPzBOov#9czFgU$J^P%qZ=YpXnKb6+YJG*bLPnA!biM5&K zIm|oc{|&<13PZabR@RWXJ`6_Vu8vTzHtXF5;TWM?o7Wl`qG4tA>%Nn7o#3$ z!Y!)3RBg0~8aJbVUwxl1Ir}KZ?VrknMrF}@9a|YdC@qVB=xhZ8{jZpK>km+nsUaEQ zwbF0$q*`bioRR6QZ6*{9DB3N?X+Gkh4riKoKj3}K4`k*g4~ZQ#=fhw4wY(^ik9`cb z6#9x)Yo?ywrC3dI;EN2f@9f2Iy}uqR{XX5dD?K}+`pwLDqIJn)m({GiI>=c_UtC*z znK*H`-MP-@Ci(l)-6k3Lh7ZHpH83O1Njpi*19XRdH@eoV=MkIYx{eA1Z5b0MT{aN}9|es~vw>&gqCoYXEzd zc9VP4kb^%!MwoR#0jvahB7>pus9i*In2(gMA5q$Oe+W#Jr1tZgH4H1C($kD^Fx2X2 z&?*#I+6wsMG4a7HPv6HBoPxy!>Suf@@>Yp=z3QW4M@LjMKmL~}oW}yV? zn;@3%prc2oN&vpwmh_Oli-Cy){Pro;=(;o%>>jb*IzsTf)Kj=HJwwUj6*0 ze(I;N|BvUW=dkS*R%vLw3}nR?IH)6cwWRb_;w$5gJs4J}Kuc6wHXP`5t;LDkfc+x&vDO0=C7I zWl~SWo6egioud9Y=iJAUAQXeNy>KPoTwvoxhPFU^w!D{xr`qkM-*+T_w>J|Ahmy1( z;lR)NWBvTl6Y&=;!{}#)g%*2H2o19IxwUWP0PY{^Oy9{qD0iuSwxsXWBwy(ks^$-j zp9Zl~O9sB?xb;04e*JE0^Y#4OCr5jUkCu+ejVM>y@LsR`=#!uYu z;s(!}p!By7_nQSSUAXA6RHvr(C!D)m1zV|X9G1Q9kucPpZP~2B9J*|X_sS%vz4CL> zg&=U%9rfVNX+F_{P`xOFNnX^ZE9puH(fbG6tqc#80n*Z0%rk#5hK?f~7dTeeNnn=d zE(x`bS1AGDI1LA=J|J!k5&{TF4jI6XG#bqjEXHn%DFtQNDP85)Ee3e`_nEfq1VAxZ zOVQS`>zxuayH@PV?-s0ihR^goc)U2$2@pXjYWDrmkWCUqot$!AHFpvc{cM;0*ogSD z>hJ5nzde{K3KpB5b@z5nkBesis%Qq1SSi8$DpIBZaG?)J#?E#AJ+t8Vec!Xh(8-2- z3%YOb6XwpI_|l&G@Y2VL8~WO_-V+HfcN`->J1W-PS>siAS3|GY9kMsXWef#eE^;eS z*i72)$j`TO!6+F3eyM^cT)y^5Yf=-O{1vFOi>o1F^DL93Npne*T;N?pkdFg?+45V zJ_JKVTLf`b_xA_TZR^1iH(&*&iC@7TO09?$lq1naqH7V`fkX0yX{4$S%|~Nc00GPI zYHl515#b;d0Z>8Sqr9yj$tN}9>0zO#Mnq%OoqT4bk)Ri3iLXCDaX!zA69iaYSU#n< zo>vReBPW4Sa|j=@JKq2f26Z0*5ql=U{z}9oNqgrK&JHxDkmxj*+Fat>=`{4_aeX=P z%?$-J*JAKtxX*#0M6i);BfGMp2U^<`lrH|pcV~9iryKBxc+Zl(SR=7#Yd`m$h!;a^b?ca8&!0hq;0q4#nin(e@#{8 z+R=B3Z98-ON4g(rtI(&lRu@kYObk6QSV7mjpZIxf7o%lG&Fw%DZ?A5KB5gpkekrW3;vkm?+@|IMa3za$}O|%oPGy+Cwn!l3X zgU|-7U@=^HXR}QUx~@$)MIcCy)N^r#rvI+ZYDH4q|4KA#Kvu*xGC-*W#W7;xh4v-f zqYTnR1f*qiJhLyYZF`{sL#7vW`|Hcvo>QlWW!{|q^KK`3S3nJT2LAN%G|TIxvjR@4 zZTld#kxr$$p?ndmmW%s1^@nwQ%5<~ucil5J45A>QhOREap-^h!$gA-e-Ba(Mbj-uY z7Cl1GCGN#)H-S=a9b67QpW-L3Qg<~jp^_%Czv2TIy2xA4$0F1Ull$o25#)&et6OTgnKF|uXWvHnC=hAc1KIlyroMY}O`528wJ5l)9zi!} z(-|i=Vnuo6)=CBxDLP*avqCoGmnZZ~ahyJY3%CcqKc-$_=<{C#JhtJ7MTAP|9TBuv z{T|&XwL+{t*5LOO)tfPzs-BviFBKaK&;F%r-?-T9DVfEp7?j@3Y$EOP*NcGajyyHv zNTMS{Un{0=zmgvo`!f;Q`w3U0?h>#0J#SMW6&q{_e8PZ^ePszvFTb;mt(kU`(K5Ge zmgO@)j=JjeJfNTG4VHp*0r0tFQxf%KZll914fU6>o?!v?+c^Pd9CcO>Iq}_6l`uE#SULPkL zL?pGqQxiknVocr~J{h(#{W%gF@iS!W!(oETXeZ#KrducVX#YX8D%mFo&@xMZtxp&P9}}7c zNjpqmYjz=4$L+6YSjOVIIG#o6?IU2=SdRZjU|7s7y9wHI_%*eBa@_F z^hKD$9Q#9_h_(P3A=;$^i-Ze-7r;8Hf_e^EGC?wjE4%k-!@0tOpn%4`PB9m%&shce z16phng;Zx0!DY(U<8WZMCa*TmK`U9bk{2k7amnf6Nw)ZI6k(&poVNSk5M_l~Gv0p_ zk30b`7Ehd7?k*KkoMS;T+5Ro=qeU2ukmdg*U9N_p9+sFhFHpogDP%Q+m zc@+gajH+r6mgbHODB`cV3bTa{2xaM}Tfe3_bNHHaazXH`Xj3I)b$*Jjt4<^ZSx!!gUX^!E4J0wudXN< zC{7kOQB!lDAA9Bm@r;(PDKC3htY6t>6rsn7$fDJaWYN;%)+pe-a&uuK{BMm`P0uSY z!Cj+$8pLq~Zw|rXTLOryP(1sDkU5%Q|AlO2t57Jw9`TO^0g_D>vk*N8l#$tEH}7FK z|LQ;8il?WN?5ji4t?kPI-G_Vc*;J`cfYlC2-O4JO4CScQ*K>>0=|>#NnE~^R`pj@_ zy2zF($igfKTl;$;xuKYetD8=CE#4n6T)b^(u9qkP*mMm0sY?#JaBjN}4Y|??+Kzy@ z3jaA7yB}aZalcV>On=|I<@k~&=A0Z8Tw75pJ-f7fFEPnzcKQdtG*6+U#=3@mIRv_R zoE^#_PQ|;3y-48;T2oVTwy#2vTchofl+L$Gd7A_!v9E2vT%WWX=vyg?S)u&xO-XbH zGg5%K@3-NjSxf2Gwa77&?b690%hKD6^63XDaVMd~0h0C`!& z&u(#DPZd3ssJl>N;#0nKZvUQ8`r4JT$fMVO%-%S(dm^tO`$dRJ=tljeHDZ6#@K9-~ z?j#neEDx~WuFg;3qnxsTj-2fc(c9bXG;{FfoA|dM1Q$xp|9d8NxAW-dCgT^!`}QyV zQt!QS$zgq`zOwU7S=!jwL@slF!tRjXM_rn>Qp7+i)haC-DrV)A1tJtn3Sy+&al(N1 zf!3=)>v@gOmD0e8KAsN$z|X3e1&hE8a|WICSud}vX14|A@HFYe(vTxBLch=CB)rRe z3)yF&wsAi6#k%GlJ1HmbUC7o=DcnbiJ*Ep#H0ufYVeme=hN2aFJ_X z=5wNjdsUq4A3b>bo^*6dMdFM|eMZ4?K5b<7qIvhlUz26GQ}djB#(V?|SVH_8nsxfF zK4@I-g2k7c6A5R&or&u9zH@Hu+qrwOnV0{eopWcUw~odSd3Bb5MxETb`SHc8AIV3? z-ewydofEOWkrKH-{xo&_DQVenG)#fpLeG*oNo_yHrOd|0-!8p&DziZ4ySzF~cg-K8 zyUt_^cIIFQ>~VTpF<{uG?c&^6Fr+olRK&fxzMLJ&<24#guZ9x1yo2!;6yC^nD7Xjd- zXJtP5u-?De9f{P3QKn~PxOWu+fUju2qKpM7*0IyS*b4wi-0&}7$=p$;IsVP>V{_Sm zDo;AUu*Tv|$;_K2PMedPjQk+d%?a}*n`1cDz z$|3?X`Mwg#`VvIfj@q>+6-Z~9LEV8N+rsDQnOYk;-VEQ$KB_!T*VuF*PZ&hd(E&e) zgIEmrNalcas?5l3CcMdpKs?|(fs^<0w)YQ1v!Z_7`*n;|ef?f@)80lMS7U~yG_X+c zVFp{^p;NgEI-TL@pD)%k=Ic3m{O6S}nfYH*$BwSj{+!?58E%%`tHzK7Id{=C{TVnMA^AD|5_YbH8hU8YI9w-yf^bvQg)=7rUH~-`$$# zD)0;q3=D*T>uZJ!RadOSEvBBYggrHDsy%+qNZ-!uqt&%tBa>79Q(2$Z7R|Hz)QzhQ zk7n;I_0bU?a&hQeCqFxEQ6@zW4m!qvFF=jm@Me9wiV&-4;*`$AMKW8fG)A%_<>24| zO+5z|1N<68>==(CEI+PT&}~5}dlI+07!l`2UpM9jo|A_hbv(W5q z=g-39PMeF_OL=iI3a}-x?$e!zi7DWZm1R&M-qf*UTKjIu`{l*I^T3OKKQ3h z(*4V*wJR8w&}bl|$;ijU+Zd<1Swr9d$Uo>xz`&uJcV7*8muE9AvB2PodS*!xbwRZ@ z*Yu}HG9Ho=wP33!PynFuMaw!ngQMx~o8vpbjz`_Jmh+B*frW?#)?3?uO`hBfn7XiI z*=Y6Q!f=;RIZSvptYu9Kcn|2+r=c+s&2EiMDv=0jUH_K=0K|O$LzDz#P4Tz50XMDv zzJ4FZSu3~>hh`l9u}wwY*~3apvmIEL61TD4jLH!fRGK13B-nHsWDgWkQxs%KNm1o`2e-e8ByLdAnV<#ZVh#&~1h7RPNx^Qhw%kSpepA}opFYi_N_YUiQ6J!^Uv-%SR zOby$h%13;Wo6F~5hYj>?Cc%Ptq)t<*xHyMA{@3Rx;r{q z+1pw=yEt1}+7c+vlwIdttzB$z%r;B%SO zNo6>qdmwi7@)5Uf+#thIsPIfuzZ&?R>nnKPfSDwJxFPO=`P_i-|B^6=s{$`ccV>Ni zA8hdzgi*~NNaz6qJ~FC6kJLjFU-rzjZ!oE-{8{vb;|d^-Ihp1Ur1F0iIurt!^DO{-_S&W-NhXPMvZbt<0i?rBvV zban0j;*{se5pa47-rIf3Cv7`caAUvwGmMiev2m8Im70tW8lGh{npvPey$^<8z(YU< zD=s_Gs~Ab%(&ez43m@qpNX^-^^&$7(!OhaV*`15hCaKmqKE>KOxwvLi`e-G z&asu*TbyHuO&1hd;=1JJld;QhrT+ZgwzyH|wKDloEDxXi+vwz39r?b|R|5!81n7mn zR;qF8KA1dRIC*0Ifr0B&sqSx(Jd>AptyAY&UE{bS`FJbDiE$}i3(6!r<89%uF0h7EQ&%G=ucl!1yKpT3bo$w*pYx*rpN>twX7 zpuN8;LKO3BFNmKR1x;ML_xD{EcL1|SXN8cmx~Gj*$10|4tWUQR5*hPvcW|?#&~*fTg$)R zKF<3Snr9^J8*kDBnOHsP0lpYHu{ViiVljSU(_nMIXHd}oPn zEyXq-?SWB!P1-y#hOdSy_|J(nAxsO50Xfi7;V;%xge{&sb-&2Z$&s`8C!nhkff_vl z-Lpp#*`za4=c^SH{EB>S(zk`n_olV-Z0q?l-obY2w^A*PcXWkU{e;>Mi$vDYi)g7i z`%9=(K;$tm za6#MQtF;f0Nn~q%A}MwJ*abRNZ9vNh4F&}NOK5^(%Oh?Zy81+M#Wq5#Oz<#6W3W3^ zfQ`}5cqaw8hfX}sJ$*3Gqcw-<+E6cAa^#n?r*IeFR5_Fm66z08r)^!5ilB)~RfK*~ zaWq$YlODZ_2SwyRx2kUC$8-!af%f2-l;FLQ!+Xw6zoFWNs2i^=-M+qOTzpD|wfB$^ zS?qRVnxMR&m$r6eE4_YC`Omk~eQ9*barR2R^ZaEQ1W0!d3e02>I9H z!gZ<>$B@si{kgV$p2Z6XFRQ~o{a&9o7ZA`Oy3w*=5jq^ac%a}LS9luk(G(SAJgJ3~ zZe=mhdQG9V04UZ^_50i{{-53KDfh_SOo;M!ZtdRM-Z^_28+b(xu#)dvrX?U@rqlG| zb$TH=7S7;d>v`lX8U#9AX`L-i&{8vA0E6g}%n1f#`yJ=S*@Zd`If{LY@@9!&*Tx6O zf&MaRA{lo zXV|DvlMt)-4#Dn9obDLqP+|imf)kwg{;c2G z?|xPFe3$PN!L45ck99kMLuOD1vsr}ku`(_dsqc{kXG#*3lVO*|1mH7GuHPkd_n?|Z zrDJ1G3w~FD9o4hEk_naY&x+3Kw_gHkq}G5tIl#jApA8{CtQ*3Q2vvZrs?s0?+~hvh zolj_n0t;EFhoyWI#3?5&xa1kmNVgXkJKZ*{$3=q6EW%!JKcc=3%a_cp8Uxnj08&yLdm)vEZ<|D6qj+d90?}Pq* zIEJmJ`t0K{`zkqjUJrTZ%;ZZrcOvOnnjNA(y)@7fxe-J+K?gremuLj@!v{iwugf_8 z%a2(2eJ`^p>9oFys%lswu5f21+~HZD$u$>TyX;Vv*B$1ai^gA@iY^Pvh!Y6ik3LQX3)&K+IwNr-k+b8H>Oa2Lh` zvjVZqx>2#U4~MI}@{3+v9-X-M%|7zvKhQ6m0eAiyFqb$L;d1Nt=`X6@ZjsksG4#?r zP>}OUw=YSEa%k=@tsVOiL(-!B9k?<-YR@oKaA8FzuY(i*tz$_ad>?ogLr z{-kK&69TuX&={}=-2F6$W+(rilLT2@`dL$^fBD&;oLR#4v!IyD4*I8jh2>Q40k|sY z+T2HFIlW7ypf-=r!Ne0Lv!zaPQ6F!3w9R5b;0C?b4l(GDF|&pedE&Ddri@Ai_hFrtZKZ4nA8@x zTO&A4%s@Xm530o&>*UY^fz)(I@!wyT9)vCSjcT_33BQ|mewDcca*c7cLM~4=fpTTv z=*>Q2F`&xAk|5*YK|)$mchgZ>_-vEFnJjQK;V8%_(6-XqcJ?0QjK}XWb@+;H%wJ-4 zSm)yY>rSdF`KmSp{&g3gl#=!bW>Heq=Bi^K5bt~|s}Een!Aw6FF`gs&_ky zv88sjf3GFp#7wI;uTtzvmjt+{)4$`XmIAQ-LU?X1)F>8``-f~82g0lCg4C@Mjw-Br zGgW{eZ4+Sx&MW~(`V~o3`Tq`!e7iVwnftMD^Kg*X%kAFdzGU$pwdQwpEbH+BqCmYY z0&*<4D$t`+;AVwtdNTcezZnn1&B=iHgib%2}e8cwtuoO3#5N_P&-jZy9tV~-raO2FKR+>Ba9;s>W zoaNq@m8GV(zU}3Y_jkO<@%{x5e{k@O`{ur{>pVZ_{=1@yzPbuP0!%bzqdi}@GgS+-?58ZXnJO)I0 z`M9QUf=n6W9m=zYwW%7as+2$?GPkp^B=p$nW!GCZVAldy)1Pj;?MkV{a5SJ|?`(Dh zWEzH~@Z}%;)@*-$IF^%i&A9e^NN_^C0O_Q~R4e9>0T@$!yoLM0!avXKgvJ{|Idu#Q2mYh3^cx;ga0Uq;rdLyl=2V1#Qt7s9V3X^u{1oK9?>OOgtMQWTo$w zIGvg5Epsm7xYBK0kv6KTJa<8D3DYP#`A|IBoj z+e)3{4I8Pz(|0WbU1}5=8Bm#T3?6fu+VJS<&rVB2iWVL?yX z2kq5DT}M;Z3cgQ+uW~PKbwl+WI-{G15G&Hwe4pGwmE=z3I^(yYT^u_i^uZ;DV?FWYWK|S@) zPEVl!wXDxmkJ`=+_}@6YYpXIB!EapkCtGAYbxN~KLb4E@`mqqxs1y{*M8v8su^cU! zb*uClrmD#!s{iZ05^vx{vwKk8N!z?nc69cFMkpR*)>*=v;UWPBj#20SkbmMoTBn$NATmM(mKL%Vdw=Zk@ohWQTzHh4O5l zEMaa9>C_n^05^J>u!dQy^mm|;rJh1V9)n>q`oS>daj+=@+CRWfhz&wh%VK>v`e5{_ zHQ4`(F_!+XI>Lt713Ol>^Kys4KeqG&b;x}P{rf*aP52@D9V zAWEx2cpzZ~Bb-_!bE4=-k+&EJl^#W~aa-oSEsb)}BRsjCDigMA|8RIqMo#N!-0iQg zr#OK}1yd$k-1%{d5j;?crY7HC)7&Uo@Y~dBeN!7!MZuBcBp;-x=|WR9@X#M9wA#om zTuceqz1CfPRcoH#>B07_7g(L1JVZAt|2=D-5cD}_F%ieMLlv1LL!%FPz%rAHY7h#{>_K|BlO83kJ#-w_-F z;x7vpY6Z}gTzrI8I0L@S(ha(ED`c-A>sKb*HEGjP(bQJ#0$$DMOOD(d7FODP{sbzz?M?Us zwUK|AwB7ctQmMWo68SQ4c<Z#s;o2oa?UU(d-5qdZN?0)dZ?OT5yIFEhlF*FpD_%BUT|8%HdPjyrK+S6Fe zXU&b_-QB#6zD;`p1IM27yTyj#gv>bNzYeVQTs5MTbIu!L$#D7D0aA(Sus=*}4o)m# zD<&1W;Sq|90?H6*D;tAv9&-ttdP5>%nd&8-#J`G{gL9a zrpKKAD6bps`bnGrlloCVc6OLp#vP$WBZLn-p;)@()+^j z!}khjE7b&664&49iCYz=wI_U5X`}nb->W`X7=6B$*EZbka=Bqr<&uK)E&r#j>Pori z%m>03Uz)>sQU58aPlmsdTYQz@mRo&&>}srR#_>j}f%vzn1zA42RgSgT>BtcsJDr zc@j=J6_8}ueSUHOZ=Z?t=c^uf4VK0Wz72OxDg3>&ug_mU|L&Y1N1)@zLO_e1qzy$$ zL^>yPSjDy<`#vSJaExD|KApqt{ATt1e66f>aM9{Sv#+ra)%LZgAVMUrH#aw`$#wIK zmA8BDT~gktI9~09iL7Ho%%v}3AdGW>6^NZmI`BJ{o zu|n)12IlowkDpzzgFmT0_>O*J{oiMkQ<1iz1!tZ~h#OSyA9XHR2$>nVY#?~IKH<$& z5JzEaW}(mh>6P(oV~R<6`L&mY=O|?Jsk>zA`^kOx{`ZvwHkS;)JG9i6nv{)yS;bkD z6_t&1%g8x0!jO&wLH#T}=nhHN{|TUj1-M?_8#ZY$!~h&&7y$mg?;fWo1HuHb{1dfW z(VEzj5b<_86vX3$&;ZAPuo_%kns?1)HwGIBJOXUvd5x_cqKXFM2L!M@zdxUQT$v5< z8?PGul{rqB8mjVLj}3jT$~`oD{B&KA?I%$H_<46@WM|$6e*Tzhe!3uuJvjgdJwPAN z^~PG2KURMUf5$uTm0j8R^75=C=0kTZew{%9{rh+LoMtot5Bg@gy6v_zqo&*Ttuc2) zt!6xAOKLz)*t#q@C!5>N#Ou6;{;y`)IOJsFsJwF4XYO~1@e^ECaKViD%ZS(vEvzpE zHHW1a6urW4zZVPSOOGpCBmm*xp*Le_e;#q`N_#akl$%*`GOI5RJInb>iWK9!#@TjP zLF%z&YG_2 z=hz+^0Qm8rhu2NhgQvhshyP#~KJ2?2{dzY1UhA;4qx(L?>BQ}c-4JFn#b z6KT*CEUx&tkn-W5>w5d8hqvluz7o4U`V3a94Ub8YNvXbUiuaE(^3He5$7lWC(l4a1 zzuVM1@uaCdr1io9?~-I_MfcxXM482#Xq!y+o377ZaZnb-ZyE|kcwdVh!^)qzf{IaC zTIWTE9RHaiGyT54@YpN8m@&obu-Y-x!mdwA&}yCB(_EJJ^b?3=zky?7dEC6M7b;Q_ zpg3Q4;E7c%DsVE|NFZZ?gj=B_n3`(Q<@r)9 z((zL3cM7zJD?r39N92tJkl(=@001m01v(Aq5!~<5?Oepk()zbzG-(cps}AyYFAANy zfBToI<9$oyywHn!a(!(}YrCDEbb=E0=us7?9cz9^Sf~aq-1X{qR%m z!nA<)p!j7yslF_`IBOHAJ#c>FPGLM-lb3{3|JcqN7QtGo(EJmh9llG{% ztriOIIAWZ3gXduO0YNWUDh>A*L*_^v|b<1fnpcq)9a zg+G0pTJjkD=9Hc8|Ljv}pMD^m*?uE0zmeXH%wKlamSa12s&kp_OOba)+%VKDoT>f6 zFY+kNUsYtL`QgpPDr z-Gfk4!^_k6I>y5GRjh$3}612&nF;dSz5; zYn$)FFGVE{6ne;yH7lHkbZB1>E)kE>A^$2iz zxlf$)=aMRQbZ9W|bWMh|Ghp5I1}0;k^aI=Ua%*AYOMkiq;O+Rk8`N~qWbb93!ogj? z;0cTI6-i)^7xHlq7qH|jCmd*dNcty(g3OEuc{IxP)v~i%s4WOhpv?8_b7RG6BQl(T% zy1l%_sSQLnC}8->Z*zK8w4P_W9)5YvNlOpVet433;_ry@%yE-%ZqyutZB03KDz}8B zvw&(&8C`!zl~NY&hbkaG1zFYcO(;acfdqR4oZzK!VXc}J{)5lBs^zZyG)m2 z&{})}cF>uze!+HW`kcK`fCAq4!ornRjfn*Kf$YP_b!HiryhmIhC%@#6R@Vwy4x=f` zN%4Y2epXo^@1j%%({qE{G{k-JD(BVvDs^k#iL|yjI}`#Us|E2fcl?ht`z%M|JuS7# zhfI-jflcVh7WRIWmvL|@hn0DA`y@IHHBg8f5k4zC17=W4K2!?iQ&)PFI+X|6Vbn*x z=wz>%uVuol*39CnPJwp?#(n5j;I_oHzifO2spQ!P?>9vPq`Y$g_OshkW4E4=C8?m}=^uXH`{SK+=QL z7wG|Dn_NxhpHfG9$w_FUQ~N+W&Y9Sdy;gJ-#*TtUA`IQwOswADl_b%OMS(%YyjF|N zvFHl!dj!tvGSRn>^FMD2ts?dQVt(KDyK=5wVBuJ$hioVP<{+4>NgrR!QRyulBwi`? zEgl)L{{lb$`gdYUUso==C`g}5ofeTnK zd*yNsh;8G|isIz*FpQwA#2-5`w3iv@3T;fIWEZV6diGDDPG-AYb-7Qm9iM^fP?hn` z_w2X+SnipQ$`gM^9fE`9?U|R>|sLXGY_Q8}Y~N9f%J04$fpdCv$t- zLw7a|Q|0i)A?45pZ((j?La=qTvp!`{vv;y08_2aEO?;>{-*5Loh9h9KMlC(2`>YW= z6?=p({cLmpFvg)}ym(qMkn_Bnl%u&r#LY7ohvBsg6)>UHidLn!f4uj;3YIUT2X|^q zN(_J$D{V%jOQ?R<*lru6oa|s+*t7KNAurkQ@&~QH^Y+lQPKl-tk>ym%9tD+}KvNY) z9Nu<07{)a&JeO!x@Tw`{0{J%4a`qUB>FfdJV1hK2i1GKbu^RgUy_%4k5WCkd# zvx%FS%S9b>_q6WzYOq8*oOo**=eLFe^luP8!()O9243-}hW4-7liPsBq+vi-E45js zCX7(<^Hx80G9h3`FhyF6cO{1 z_ulppYN*-^nW|=(M~YSSp_&lQ_=u&bl-m^I!mk^hg{pMoGRJUJc`I1)s++1Q9(vDC z+;{Y97xt2Md2S>54k=cXxR!4wK9||lHz`Hq{;IW1plrY z1WLv!=jI>5mA-?Lode)()>z|_B1U7V3KiyV#pm!`W}h$ng=Dbf(7*2qC-VZte}fkL z2QF?B;-ZOPPnDN0TrMcC)iEg0EI!r5G8)e@wjOJP-rW~9t-G7}p_7MSGHl9o=nsUb;_%npPQso)H^aa6 zP=BGKKr(Z<&Rjq6P2pewRU{zMb*(n-`--7b+qCb?&zX_gFAh4^@Qr-!kW+&$uLYY~ zJ3_?Vt{uaTI@3YHQvP-nM%z(TsGu4U5yi8x^YCE%K|T+4qj zx4Y%*PJUV1ZiSEL3yaq$AbsZXq7QTEQ-4PU(KFh(mq|oV5XF2hwje6dKS&3XVkb`c zv+U=WpV4X7Z+Z*M2=*w@o)y#jGL+J)^co-bfcL;f605}<1^w|f_aokxf(E_1U@f)i zN*UDUJ(=cqMrfy5iBVHxqJT~5ImlT4-q7~%5=JAau>#E4quvj^W^lqYHIpF{vYmyL zi5?$r`3t#TawPtM8KZyKUSz(6#oEbsC%Eu4%1dZS(K%>aV?Qw8MTy5TLk^rFre`#R zTyE(iH9}fVhY_Gv%$tMkMMMFjbF$`0jH993tVr<@>DyN#-f{xd6S6Yi4sO0%P9gG9 zP{$L3Pb`%jtVF=qH2Q2jlW4)*_gWhfFy03c=J%f4`+Di?c6VNxPVzVmccG*rf@&25 zA=IXhCT$z1A(Dy1T??D!)ME^$G={HYL1TUqjjux!ZJS*AniyUVb7}gV1-sQYhfl*^ z3=KYfj)<&#A~2ICLRHz+E2hoq1xlM`nAY~RgVO$TW6}L0{nJGfRamR)v{{g#zb=?b zKcEV_nU=;f3g8|xnqjfy-SJ{ZK6;Hv2*v?Gg ziMf8lnrgSy6j)wt5;2-dy`!EY7BH|~26tGxqnq#xojG|JKCZ=q`DiHfbO}$wY zEae|8Hk>c;h!udDl-u;WH2CvoC?tHk6~M><9O3YGyJ1B=MQ$Ly=;pDZRS|CaKu?-$ zk`ktty^IGy4%0q$G>T3>2{lKW!dA;igJq5gL#aUTu{hcj36M!E@5|#qWx0eS;k+s) z$N#XmhE{)tTyh+86hd6{-VQnZAREdzVYD?35y{B6SWwIGR5$fJNdM$eWt}q;g ziomOg4V)tg>4uQoT7@*~T(uE%cQPw0=`_kvG$UEjwO%SI^^ zVMtUEG^(#1oPwpH01vA=k{{Wt#J7EWw1VVf#^OR59RfgXqU;1VdTOj_?QOSMmWx(X z4CF|>7_csW1bBW2BWpSr{2!^QWl@rT8#c9)nv*NPP=990I7ZjnWYySh_)Y-DCK-;_ zu@833$kX5rC+cNJEkM$0e6>Kt))8sXC|VM3fWO;*Q60t>)#Va(2ad13aZOk08>QR! zB{_|#kQ>11j#6xF>kz<0g)bD)&z;RW55Td}07}$hZlkfEB4lcdt%;*(OJ-5BMRJb1 zTp*sIU>lI106>H0(E8P?QmvVWiv`KWv3oPA6cbShUAg3Tjw+agTkrUb70w7VPQRbK z4x1xOpIaL2mmWJ*#g-3n0uz!5ous5|cis*0dkk%7ODgoGU4G)wM8r2#OH&&c4bT^p zt_Kpel=3e2R%K@s;~kA-Bc#sGWRI1ROtZB-G6SV@Uz{&I;~I2eT9GI&+!OMvz2MDT z&3KGqS$eGJB_*a%bIhfC&l$;`f<6t~c3WL{M%<2k@sHM!Z3(_WNonpIP-0aFA___X z?n)L7B@{&T7DlME8m*i~{Y<-H{x+EvDsWxXE@^50DlsoE8h2Nati6>o7$V{5D}9%L zJgrMUCXb_3N3iDT1c&B(pW$b?OW%+8drYTbsj;t9zzlmSIUnR+V#zrow_=1`x#9@7 z7pUgZ7w%?IGD-vxLGv5Gh;GXehr6+xoGCh{ZP$Kqp zj~@T3QcWL!D)i#5ci)CC#wij?6leWzm*Uhk6@1OlI7bE(16$imYHKJa6j^Hp4J^1K zQ3D8b=b(3$LroG&v(eXQR|&P}>JOw7TYHg8tT?dzF190Wra34#d_v zuh0$&EpIJfG$b-f!bTe)`berH*fU_8aJd(;!KL3@zNer}kJSG@ZSlNTgB$IV zYA0hcrDx=N@-D6|l-PtboO{Z5iLWT$IO$x}MfpR3n3OB#*ne}EDPSsgKKy)Y{IPH+ zX(bW`k7`pg*%hh?gr=$nzLL2L2%FX3Jw`Sjrf6tfkujBF%&<>{N}+fWqOVFzfeeDk?_;2^{MhuLgN*$h_?meO$>D92Rpl_`dTSr^+raGyjY={U4yPY*(3MN>2r~(MvWqDxdj~s&Ao(K zR-`u(f&pn~QE6ecY`D?Itj`>W6P9Vt5P(Z%^4I;QOELtIfC&vEZdbBRhO-At4A z?>G0%VeQeKSj^h)>3Le|g7%$bJPx`!(vAx|=&b6{VaLcSa1e2wvWP*d7XxZu4qhq6 z1Lj8fRs%9D)()aDE_6}zW(t{6kzMt`Zv61~_Mi>~d4dga2uSftrZo(gP=aC0c-iEy z^U@;Ol-upa=?+BG)@n=RhfjFgRnF_zBq39k?vuaB1u%k>&vKuULu=9jV2jF>r%_7I;OSxy#doH;hxclA}SIx45&`R1N40^ z#h3+2yRHMy-FQFtIDY1@RgXhtD)^`Ccw z(+%ARF@kU!U$Kf~0}5iJhC0o~Vc;uhI}W2F%d9l85mt$@lJtPU(f%`XQ4grS-XLdt zog_1ol@PI&8cx8bu*RXxXr6 z;r_~3^X&CCtu#YCxfn=XICJ&R7=f)C=5rWPIi(i*MZMtOF`svC38Ov0g4|G)I#lPb z+V#J&367^9zcR?>rg)Qe{h!Qe)p%CJH1vK)tEfupHdA@qG%!)lLcDv@NhLGU)CM}S z24th=FmY%1agDBUOTi;0%e0j?LtVMED~G@lVP4QjBy94{tyLKB1TOr+WWL%AEG0?6 zk87m=m1(;I#+rHB_Dobu+38;NB{&WAzv&!e|DQqh|I<0t+4EMM`N?@bdy*5$5qE;( z=zzzW*pb))Uqm|x_JN5Ng=UL0!8tfl%uR7lWE;GLqm7xVm7VRO*`cD2D`akmS5mw7 zks0i%S*FGx;EJl|$9ZV@hlBYt^`moRId`5^mlTQcRd1sxu-Iz` zzENIXkccoYpJ60Zz1(VN7|6Qmxb~zGnlpD)YP6?Ft}wfMGVyE--KwT)NZ=Q0+7W`d zE1kG4k!<-SH*@)nqgSCsvdWXB%+Z2F_g2q>x2~h24`)C2T$IYaXg7yD9TUyoGP#$Yj!vJ|=sY}I*(j_Ql^OglRt6U23_E1&0n6~kTH1jOjbu=w$BfQdI z5~#xp^I|ru)cQlZ*Ocl%?<_T5fD<%}kO7CiS+1bgXm8u8!C!$~`U=}eyh95hsDI~c znx-u=F88LBk1lfdZFx6>H;+E$z3lP(1&7C7>jlsDMiheis+<@M-W}WDk_)sF!vuwZ z!A^YXTY|WPx}7o8H*t%G<3CZUTqGkXM{KyJmQpN?6?1KH<<=Axg;~pFzMI); zguBkY8H;k`Sf1_j3|wXTP6@bDK&JAbMTsMIE%V>d<;>+mpXdCK8-9QmbzOyGLpj%zaA7Vzv3Y&A7knVEBbqwi-Su{^jN=BjH9<=MOi~ zytff~qv)g*Lh~cl6fUn6-W?8}{6-;Q8ZbJ5iUM_L6|+=_q#wb$Wn=4%#S>vdOP}&a z&$F9624z^_#(B=;-r+ymQSRa*G#T0G#FTW)aj6m_tkOoLAc-51P`P1y6f(^X*bsuY zWZP^iLN3d;`&_XoaSxslQpZW7V)>@;f+QsVyn9s=JG-7}b!`Yyqh#Q4{Os0|e%G{P zJW<|Xa`=&+P1PZh@ht$;`3S4ap91JeAnB3lp+?&0(Gnyq-Ve{4Y%Ou|tSePJZZ?qP zSV;5<*4r?wRD6IXh16EwhE1w&+-V#|Kpl#ToKOyb+&aA*L#vprYP)@{^r_iu7Fb2z zA^5WQE99Tv@5A!re79_jc)Y5GtIrBBIepyP$R8)F1 zi=r{&S}vNzw#Jk@vNgf&nPa$CGj|dCmt``bBEe;qrXRc=aSD=}&bXMYleHFkxsZBH zI$BOA#wZ^Y+m;onXsQH~{jcOC<}J5#_G(Ge$t3@pByRNSb)TWh%GjMa#$1ATqf=u= zNr_%1phHLDQWGAURzgI~LJ;&q_uD|R>60fV__SM&q%_y^;1Ac1SZ$6b-0s3}#X z>yij^z$g107bo6TA^F6Mgb(>2M7 zxdQXX9m?Tn|JpZLBn~gz5e8d?hl>;G&g%Q2e!vTTrpWgGFdg^hrf^e)rz-X ziSCKdjx8JSf4}OY-I;d= zZ`ssNN==C=y4tzzczNa>%vBi@6wV{_)it2QJ6uP#b%#7uqFMA#gN~lK7PeFt8g=p0 z+vF+#A(LII?Q_mXYz&^mc#GRuFXO>K6|%^?@w}6=HepmZ70U;QN#F*{D2CPbR{O`C z`E0P1kyc$yot>+0<-Wb$-8KoQP<`p12LkEb+9~}T2O#wqyE3b|96!Q`5xtV29`at# zqNPwPtof0R3#Uj=^O#fqZEYSMhSvfj(BO}ggmfxo(a<~37`Kwg`)B0%=EGz5M3KvL zI>oocZ;hd-&D~nt=Nnhez*y1%Ll%Og?fJvbeU#L3%<Z0OEZ?GWD28q<%eilP^`Teu@)_+;AM$z8B3Kl6**Uegge3WiV z^!LfMFL1kdTmToK$KZI}2##oY_mGEwi}mRI$H;u_#e>hI0&CV zh^p!zr>F!Bmwiy+AnJo@P31taS@)3d&%BlA^W|->P5Pg6kuN$59)WkfK{B}K5`CRB zPn>8C!Sgq~CU*Zb@BDBy;>PngECEphH-HFo5Rz^MfvFIG7~svg3mKodMa6jd`+&AC zlp>VEPXb*U!YbZNQR+>=4p9u1pY9sDj|jYD~U+!)}*u_LDFACn`QQK7#oLchNndf)iI*&G_LD=pDB z!o;B7+A$0FV>s_Qfpi?_QqUTg8g~g2)a^1pf~ESL`A<-w94}AdF97~;zvmf}M++`FTUT(#17OXZa9fHOK7;JpQnQi@$VxV%PNyu2?;D!YVbecp-q;Z|aD^ za8#m#MjaJO$U#82#}QXmFpvZW?fu6^b`8lkdsA+5%J%gfCM3(7%eChpP%d7Jz3dTH z;F~41bX=X2;+!8+Rpf6vq1b1dYX+MTq5f(J6jJ74IzLT+S1ppN)DAn^j#fr*2}`w{ znvH9nj<5*G4a=KFEOnU#K}z^z+5NNq zatCprX=_i2ijuR>8eit*pIk11TN}dWgX5d}Q;#0p-%pUO$iIUItPa(H6s4y?(5(uzK6AGa`fSWolAnF2K@@Mr{_-ig_ zCg8d9W<#6B;iN?O=*`#9xY92C`)XNK4d1!mKwJpaS#_MT!V38(o!el&oOOW16{E}J z+VC|FI6xKX3wjrbi~>U?;;J*`W}-$yua)OKyQh?xOj_kTWq%kZsSeLnpu_N))@jce zrFT06QZPRG);efP?Yh2HD71h(i70#fIju3SF`TrbfXc zF?CjNd@N(fIdSrIDOk*hA<$VrpN)Wlr_~xoasbAU!0@O06 zm4KmR`E6?|8O9!-ucbREf+h#2wsIgjk3hAtQdo#_Kb%(GUlJMCX&j-NMvJh z;F{Xp|Ctdu{o~AQ^SS2j+0LT-V%qy1vsW63hFXzan1mzId)Js@8J;9xX3L_6sDXg( zlPih;Ue87p7dQs%y600eqOr^ce$b+>sZLT!zp5BXN$Ij{%dD&pAp@$lhcXDiV12eR zLr!2)JWrre6?EaF^NBve-)$AP*4M{_9J1%B~ zFeM1|qu2vok$MNBV}?(#98u0nlI$HQr$y8K7}73y2+rUI8u6M6Iqo>BiOFz=VS3^cVU1CS8C|3hrUC0H;rNWV{4H} zHRHAy=I;3+GaHh5>|;T;WPi($;%PWs$d_P5R6#WvWG8-~s*;7z%|L-3$v>Ui2QBt#wY4xA~`Sp-7{bR0a?@kHQZu;=9A&}q#GkZTW-+Pr+XvIEyU1CT*2wS z_k5D5lype3CtjU}Ds`ddK1syJ*5ZV`HEIY@x>x$|y-G(Zq96sORE=zmrl-2nr*xor zQ?@yTU2A}cx9P#|I(t3MTEIY4@G769hWlD?@*LZ1gqBu|^qsbt&tkJMv*KwY9ZYO{HL+#^%LY!NG?&Xl zhbj|Kn{$1FR%?})Db1WCkKixRgLy>s86+)mkuy$C?1{2p&YErK^@5&{mvX?sIbmnQ zyVOc%-?E#oYMmQRpHI28Nu$m;V8IMu%R<%o=IY%d%&)R26Z^HiJB?;g5)Ovm zHbIS>Y?LK1f@Y7!#j5B!2LuxIzbX&F@&5`f8tg)gLUsGN^r6(D0$bK0&rUrxIz0OC z=ifuYQ-&4}M);G)c6MYFdk3oVs{2Hh4g$<~*q45w+qTD}e7o*LQjCyF>LIXpA#myF zqbJEfm(*Rgg_lU46$?-%LKx-!H;NL5=rh{<#sz zsxY3tz~S6wZ(0*ci0tA;s&(qWfx9XJ9y$+7hX92)EZN#>dYn*ELHV0{PKi~qIqEKs zPo$T1P~Ucm({apZmn>F^)Vb!6&i-J}^7-p`-G`Si_Ff!(-)*_+9W1k8Be#it%UX%b z(-7Es;%iV~nZ5-DB3@xTw8IY!x6!JlQMd0&)Tu9;U5r^ex$jxmQkfqj5*U9vQ1*_B z&F^^|pUD}Wj`>F^@4#}4s&(VJZi2s#RrQ;>TLiDb&+)QKFbga|q(dDlW59>O15i`a zkSiI7gd*L9@TNnn-LF}FG;KYAqp@j(u!uKBARX3^tCV}c@<)A?*-T-<{hR11ejqyB z)IM;mFl6=Z5p37DZxI3r-Xc#G#pn>+RIOKW`(#Oec^u!{e1!rmUW-V1_;=}_NBpgzh}>VYQukpDT0QI4mf$& z3QtB}ie`hty45a<+KH7*U);hL=Fzqcx|kY67KjS3BfzA3B&?6Tbs)dgK)Afq7_dCa zU?zH&qMfEVpz4?9U-vD9`xn0=4_$h%r_>TdzPfj9!R@}h+fa{H$GqcWT+O9?&4`45 z>6XQPtIa9?W@*7j@rw*NKwy&8-70yC-=C6RlU@u^W~0)95ou~Gwb$~l_L!>N(x$7f zK({%N%IL4G1PgHBqa|F!pTKW;V{u@N$R8*PV|7{TUS6)S-i95NI)Vk55I9>feh%Ch z^^_F4Y@agboZua;KJR}J;8hMD1dIWI zD<6;xCXuGAS&TLz?jUjv_}{MBn#kk#Wxcz=xB8{$MB0kY_0%($YHc}rSGqkSkG^Dw z!kvpa86;liYqvivrkSkyshw$w;21a#VqOsd-iEf{m>2ug`%UK%J)%c_nh|tuiM>ap zJiry;p04V>)BJt(zbk((bZC4V`nPeQ{5^&O*AR5+j~l!e#00MJ~p)3}9+$ zy$Ap%RF_KSMJt;vz>DDAu6Tf_sI6{LaS@@b!hZiuBp~ZYfo}q{f1IU5B2ZIV{V?H# zk58QBq`{vNh(`XHsEgatK)Qd>^@+%UrioqmoHY4+?0l(h^?7;Sg=*aj4fVs9&#x>lguyAT3T%O<&kWnr#>w8uX64vQ*vxG zTKT;?5k@)L9y^VnB_9Dn2SCdqo|kAG#i-x?Lr|qd)7MSEr8;Q> z@9vOm+K;D=<5lAHMgVv|zBo?4ZVGCRVQcwmkSOu&I8gsnfF4uA1{Xh#1c@nL{dDH| zmDP?D^1{Gn$Sa}_*;Yk0-A1}_#>`<*N2PYn-!od5H|QJfXi0=8tUpP-=qdCZr-%v1 zucbae-roa|zOzw5g7c}w(@iW2U&$~>?}^jv_b>&`BD--L4tr4nz88*p1%}TiWZv++ zq;;2_5Vw48d)2(4Ops_byu}Jt8=Eu&aN+m6`Iw2i3ipQ9okJfUue!Tp8=!ZkW=PoC z^sZxgU5J4fZR=@&sBhiF*Dt36y05-|*A`$oKb|K`v;k_OV*Mq+=h~DCypPl-WgV-H zN*{1d876OCj8qY$Ri?@^%YOt7GHR9Tk-3clhCt0MF&Cisr_oft6~Q&7S!r#wq0mb2_U$f(u+lHCof?^4 zS9N}J1C1RKU5O1x@OGXIbu&S2O9M73&<#k}->qF!9&$zqH_Vrs^nPqHns}i5Oy$2s z$s6}KoUgCmdK@r#OaJc4Q2oI1mM0UA8?$yN9+B4eGCR;0HC+tkve5vro%K@fq^Xz z1(2$dcHyY46rnU?WXIi#tNDg2OUxT)$mSnBdD(sa`;WukYkd~&K3gZILQ9`#Al3z;nn&VyF=Mi9A^&2f zSY+97-qIOoq*Q9%?O*Cm_wDcg`%^u7&fl!?gPV%G;~Jy(a6CQPb=2d#&pU@+$#?sA zCa~J+`8~ecl5WLre3r-SKc$aX4HI|DqPUy(am;yE5r7_AoP28)+wY&c42}38$b~G3 z5&A2q()%yI{n!Hn>ESXrVwsKykRkv!tr5_Om2!Y@3PMtXp;Df74h61A++%BZw%Qyg z1+mXSYI?}{H${uEox|B!taNbgaUeZT@`r)N?GGRitLxeN^fS`~qA~*g5@^w!nn%u4 zMK2u(bcC;rT~v6*o|b#xt;)CW7Qo>;!?fYPPHQkbi9SUDpfA=br0!@x>Um+@eRGH% z3c&5bxNMzM{9k$!=u79uwt~!{&PJfb<`|dLe>QdH`tN);dVVyLOCP_#qOzbiT8ze; z$G%Ooea1RDN>fRBknMBK#*b!tRs`M$*T}ziqZD5MsMCrrzYWUdx(fu%Ha_i@B~BSVkr{A0+KK4 z|Jm=Ai#KlvA6X3YmHdj5tP&%mV(r=aUjX2Ff6@CN`L99Xv)0t0Q!A%lhJI6tm}}v^ z*L33Xj*cDL<$n5aVwttELx@Pq{bvET&J&Et3bM$nU~8A0#@zo$)O$xI`Tp_$HwcP2 z0tLcVxEC7E)GR^4y%oe6?wwX@Lo3{fTJDvaJ7=M3rHwbvG_~A0vdpZ^w5eIPzI=Y? z_dQ?E;hdYlxW{#0_v?OL&*$S=F&}P^Pf_xqHJ}x})(p6|1w%|U7zU7>+J|JZ@~p>z zX%PkMdObV)=Eb7K9H&R20zTE?#9Ywb3-xZo;5I8QCCAjpEh%1sjT4`oT;;t`KqX{# z$KE?`gvgycY(EajW1*{W;yWDJghso>A*O2e9$d6KX-*pJ1 zM>2AUZ>J9qzTG%T*8fYd|5^~h8}_eW@8ex}zjExK>6YhlvGxIAw< z!WAzcPZ3vF`Lz@j(Z4=F+w)L{dQL&VZ8CgMw)+0#4-c;NO3we5;#azfyt}Qtg)Lew zNW%SnzqwO`p{#0kg-F1wc{-S`1}anVN(o)BsyU;u4F5aNxVP@{kUqbV$3SxqCLRD0 zXs&JR5D1#1CB_~S%{#%AI5}1oJbh29UJo%Pv?Z6D+Q*4RB8cP{YtmkX1U z&&M24;~yQyvH}d)P>|wMV&DHRnU|kK3K6fE_=g>e7H@5Cb@y$fWU7cxA;-)6_yAqn zQg6|hK>;{wqWYHI8pnH3fPHX)FNdrq%@=)+|E))*{4dOv+#1&Qu$Y1kE5X`Y)BT$_ z?W#Au?SrJLX*H<#y8|SbBlE#$0pKOkBJ@A3t~S2@TGZ(8oSKGf zl{X=Jni_DA41oea9uICNx>Bf=I}c4AZgVOl>}-WJ7WF)QVO?y!W>)k3ijSa=GKMQz zkS{GRfs~)`nTj}d-F6;gRQ?NDCW0lJKkq&WfUp7BFnXF=D$J-1I}SY9M@}9s1~fcegT9Gy|ExaYtNjf) ze;4wd7EqyRYW?UA=6e;ZAQf&P__STyJfyd0yIw>+Y_3S2J18qH#w?oUuR6RPfVMUD z_8YVO&W;}=stBza;N0dDmWJtxQ>QCv z*dSmwy!=z&5U9|6UD8w)57q_DoHzD)A9t&Ozy82&&br_g^T#2tat<;C+qm2-if8{^ zsnu4_s;ug&K~g(zH@D0b_-59G*~NnHor{SDU+d}JaY?s+dHoxxC(Iq2unjJEG4e5YFl0*OJ-nNvtdw=;r~y)S^JVV7 zkQNVeT4Fsb!=wF%7J%cgMSe&FL$p9e)HS%Y_5x%j<^@`)=|=La2( zm(dY>AEHclQT6jPM>FWgJ|likv`_972HeT1WFj{yW?hpe3<&7=f+1>!dU8z%HzxPh zHuEWuDKb3`j&YlZ1-@bkrR7SjQTI2ciw`Pd4v&Wd`5uuu=1Rb@BD)rchcl2&aHY~Hs?o~u*UkTf+adUYztfGdl z_-ZprCp4R4ZNw)a@))-^C(r;@Jt()M`~PAYvd+qfOG_xcPdmOZcftYZ_wi*sx6H zzMRNNrm_Pun8{RRf5kWDdKcU0IwL!&T?Lx%i`j*d_ZH$hPQYLBZ`zXXju@2({qkrpBl1^kmT7NLCsspaeYrZihab+#X;}*}#l|PGHVv0~F z_?){mT}kL$LU>H>zmkKe{fmaH}`0GSnc&Xq{N~kQ7ZDEQl6b_p9odC zNV{z9t-!l}jTVIHA_*pkhG?>(dJ9qaOH_c?^n6mSu{_cURjSe&mg&0>A)U#Np znQ(<3vGh2sOJI8Q#)9ajgnt4c*sB}n$ z9#u*1>tuVcx(wtR%nk{0EUow-zT`K3Qu^%fe-<|RN+zs^%tw>8!SQlJ!G4yyKTq%S3Q-NE|MgzTF2Pl8u2co0gV zAbFszCVc&qz_hU3l5Mvm)75!|i%hB-;d2>rKR9qhTRN?|-eNXX4elTnIivRUw>P3Q z1Vx$>Lm1^}ax0bia;z*0^>7>+NnxL+8Wk!M8esiC<#dMF+K#`=%aU^;Vlkupi6~uR zlA{2p;^)uz)6tP*)O=fha(K-Bls?!Ye_{7`9Wit2y}5xXvJ+EyR&8p|EN68Pf!jN)q!tInd~J#?OpC;kE?7c($n2GW;b zg$^|GX{4(ZSs+u_KQ!ZMZX4Q3v(luA{pZ`WWfoh^#NV~&8Qtz>xT$#v*;>c;S}L8w zIcs2w&j*G-8IkjJJBV|j6Os=W2v!`947#$4NIjruIrW#7G=Qa@FQ~g*n&q=>F>jbpxu`Hj983W9=xKp2>gvND z!4#c;wgx3HZ=9ZV7C$O=>`GMQ<$;FTtqWz&hxn0gRn`*pn_>WVl$>KVLl7BM=|SVK z1$a4|0ixd0>GzLpBn3o`w9K6Q0n!&zARbkp4}YMX+Oo4ZK;4=BaBGisS5J=p=)BXY zQ4^7MB3lcN%pm4kn#ONFQDtfIBPlVy%gsh01?w(`ncxRU)?)Zx+oP4Nli==;hZyR; zi6+5(|NUuowinxO38zkIY8N(oNQFCwx^W`gde-0THmZAiYv@#+-$cD~DkZgsQT>5z zQ5m=zzb@v2Q-&ut;N9oLsPH+o*J$)FP}UcrtUFm*+lOtxG6WO zS?OadR8%PH$?f287M9Z&>xl$L=fEM*Y^pl{gzqxKi4PDqjdg!N+qnVA+-h&4N)}hf zSeNem3r;a`Li{c`Ht{O=sTbDn^5)6lYdZ<7O+B`Mmv*h2x}LUA4*f8~wT*=5(ENr=?4b!kP&MG6PZ*I zn*Dac%Q?PyVkOZMelkA%M9$L%=Z@)s0SRL@+Wfo*8a z<+js6X724IWQ1MhWE$g+A7pN0T>@tM)+vU`+zAUu^Ib*@z(EoA{`_eQ^B)_{m8^)Y zhKVDOgg9v7lH|YqF?RZn_dRh}O{VP^pKRu;sx_%tA8-A8GrgiPF11;*o#jl4n$e0Q zq9B>yh0rHe+=R7sS}mZq7}XQX;;lbPW`8V{YK%Ae!w)t}?Sh)s6M;YI^&Rh0@JShO zZ`U&k8~6|Oda*D8v>MApF0gcgRo_IsQ`(eN!;)hJ6N(BBfvtws0fV_4-uL3Pzy%(@ zdR4}TgCbq4VG6^&$hXTf`4V((nxu@u$4_)JM0f2*?E9H%w423jDqd3!YDp27$2H7D zq-U5drbP$|vM@MXM4NUSgbh-1Mne+J>rEe68D>6zzLaG>G%qL`uzT!`U48~VS7d(X zrTAj} z&IP}-ce%GL$H{h!!7g-Krd|8Q*V-y`R(OIUp_saDEcYos@Mep3+xiZBh0=2G6h63a zLLF9SCG9bE019?QLGq|=G`*Q9aI}-Es}tD*L^j`<(ou2(zs+~LvXhnL!nnG74?611 z;d^BN%x>|SL_^lhV!Es7!KWebp2j;k>D@B&_v(6L4f6AFbH6OT7b@gK74f6I!=fF# z7RUik44i?JU(BlY*x*X z$AkO{g=bhnMZyD zA6Nuke(tnb$?XOh=b38udHJ(V-v8D5M^IP7L7u;n@ZI@4oZ_^d z^!e8=>|*vqIdinJ_R*=+uBG5n_w+HaM2eaV!|?TmkF`ax#o^-K=!<+28tab4a1lL( zp7jGH1=JqGbICb&Eq=I}{pn+xfOZ4ugyInRJYD%IWy8eDIef8&r$wtqb9Urd)Gn^ou`z{a5Ze5y$ zOSP7Pi{|?XB0z$Dh7N9`nBFvItKyeU&531a{{t0`jEJv%gq$5I4lLQfE%uBuSmTt% zn*f>{=bV%DlGYv7z&Uhf^u5&s-~S7hQ?K#+F!3c!A;8EfJc^%}rTxy<>wIf)97CRT z<~tv#NPLYTfX;b)V=Oj{F5mczrsje24|n95P%tuZ8rg9$h>C2VvpumZW1r#Z|6qI= z+wTa<@-VzpZSK_e$4UL2c?!uj{NHb1Dtkb?lmY+irA`(OGN;=52Rflqnf&rKE=V%E zLXGJ=?%Y9bd3uCELpkdCyMz4#BvuE39)mX{Q@PE!y%lYPuEMD{SCPrg(Sy7Kd}R@p zHY~j!oq|Ikr_3NYik;lZf6_O-aN}$>iwO5`)-3;JH4N5v_sy zTQcl^l^c5Q-O2^V16E`2)){(J0=L0Qm`pnu$oe*z7>{aany0gQ3M#)DWD;|=7}t>l zGW+bcU+mJ$tzT9Tl{$ALU!}v~AiyB>&$*4U_BY3);-d~k{xlf)_LyBa>>Sp^)Aq` z=H2l&?Yw(srnUD}WsQ$9#a&t%A}wiHwk+lWt}930TUChgmn!fy@#4dCpANm88onSV zt&lR@(E6gZ_RfnrR{edSwoBWtW~cg=RXeay1QkU|ha%gOCWik2-TD|=F7M9&zwe*|0qP62*nKcoq8@g2UBbx2*-RfigR{o#?|NxOM8L#zaj27O0iY1oH!kfl@ctB(4V6Ea%sr9X6p_ z#SUvr(zwl}01pKV$Fd-Nv?^`uTnT>uR_^Jjf2Vn+N+llvd@ngI`~`fORZ+&ZDyhLKWs&RHAwnH6qhZ+aJ^p!zdytXRjT3;!d)eZmcYm-|QiN8v#%)c@)5zF6WhB9VCHm^F>|Pn(x@D#D94MOHT1 z(ueX__P-Ikx_sc!RpiKvypT7C7whBREFThm>giWcCXk~Jf4OK|d-`P4^z|}?=JaZX z+6^l#=(Ecw#o^0tMy-##?4(&b`IAiAPTYf^S>4Me6J94CA@GXydr!J(j`+EdlTJ-F zX{HGCzUhw!!@`1;Pq5bWrMD`-57MK&_K7MHv%7CB=H3G9Xrtyb8&`dV9@95C6QYeM zmYRH7&&w&tiY!Sk0`KMaa2nWZ#7Y9~8?L4kvH{Myx|IL5m~+j7$^yBHl%bpXZL>8PtGVo=zy(BVyc5csqT9r11NT&? zTGtp;FvrV=={`Au3lZ+msSa1|<#(O|I0C|qi++OT!WP)6HSF?diT?`}i`FC9=IL5# zxN7SVy!<9x_$R^uf`<^bE!@)y04f)3gU0UbdOi7LGh%)M*>vjt>yjSbjr5;??H1Bb zlh6Kokbw-(t{4@I^C(_u>(7`D{nEnPZko3$dpN%q(=ccWwzv$MKayZ;D8@luh^Cp?8mzJUbaVcp!6Nqp9)va}`>#qOPK7 z@diT+mtvMBB023OB6mAZgBI;aN3HmLp<^Il74Z3M}x2?;3 z*@w!V_r)4PZok>S1F0nffUfFBF8#J|5X7tk1|kE*Vlm3;2b5ko9GeLxfCbD^D%oZ& zSP++qb>jTkj3d2=pw z_tX64YwuTn?S0J-BE?kspY&v(iB=#;ryx+L5%NkN{!4KVVk*86XJcS{&g^o$NcC>t z`NI3QJ=)9b_L^6M{vABL?fWyajS;0az85e>7*oig5590-VEMK$&I*;pZ?$RkoIh<@ z=iL6xu&m|wX2RL(Eccqu`iVb&NjyzqRKNj^ofu2ZRYXQ7tJj%fH=ft`H2h`E-rjn4 zQVoer;%?4D@i@r{SH3u3faZ*QLJJ9yM@*RI4i|d;XQX>1N#sXDXpygcC2)Zq{bXus zB^d5(u!&D78sM`!^Ga%8pM;zaXKm38E7#w%!c_+W42An0ro&(!|8s>Gmo(r35cg}Q z1%g7MoUlPKH46#&?3M3T+g4@yod0)u>$7cva&g0^HDBMvHh)BVaLx9C*MHp9uRa%I ze3!a@>_wXVswz*5LmVq-6Yy-)iZF5j#;F-^Jn@2p<*6tH1jLwcN6VkzaPrK2f9^l` zXCk8I8kJLb{ysf$Ecxr5_VPpeNosI&j(L}P zW*0+Yp9zsdRA6L;F8A0DbrT$+uKSfpmi_yu7CmCYtyy^lJ@yAr5Bl@HKq^Hz~Ao8 z&=y++B>Nv&vC!7RBLIHdNitft=~7~z^=;)hJVDOd5@soed>@&q{C#X-?7f7z?^6jS z5>`+iW~TN9Sn-7b*xHQgyMKdTZgu^9-*eZYbzX{w^lVYZaOj)l&4~7PYQJApqwjF< z9nrIETi2yJ7n-KRD-Nt>rN`-TXG1y*Cr4dfe!lMO$vF*W+`h5;*Hna%%;G zAYz|MR{rr#(VWX-h1tx8?g-+*l?+B=eN~umHLWca-ImQ;;9u#N*LcVGllQYe4o_bNm*!$P5MhvO7 zk&TRDbu}jWb;AALoqfhsoX1^VKQ}nbY}AAsXS)R&x(NVR#hHj~ z0sy|oPpigU#9VIQ-;o})&c=_p=Fil#;qSKMwwy!{Ujf zvuBrvrm?4cSQaP9I$I~RkF7lrVv3Dk)BMIX(t-!d5`C-GaP^In;uzP&O{t%D9288`{t2C^YZJkXXPMEhRRd-DGJ_ZjJm3S>5DhfQ$`0(jOT>6kjINzAo z^^>DlKfW}4_|pEY)6ZWozBRW?y}Wv1xXALI+}JXq(U1+CT; zuhOhO37qbMvMcfk#AM!lN>vmLk7_Dt*NVSupFvXX>x#!~RVAMx~C z%Cqxdb~Cb19|h_~Al&2M_!DAiVPo8?yufS49$B5SSLFIG2g)W@fdqJj-u5oJry|b{ zM*@`J{BryKO{lz#qJ96~(KkQ7z34f9Fe*_rH5_2TrWc>n-yE1`i#NH|kd&IFXg&4) zB5>@X#1le1K(49h^t|f7qLiBCdeA@UQoMBd z0{<;QG1e(pDO>1>Ol77G%kJ%Iz}C8-4;HxGdEnd9)s7>C&GS}A$9I7OTrLVYcHZc7 z#Oe(vi3c5(lHx-+IV0$mXxGp%O@Rq)7C>)(=KkCWK>3WrpLiZ{Q622N?#?|YB>8Lm zD4<_Q&I5C!v_%1;%WL_x{U^9>nyen>6N6O$Bf=8~%YQ(<16FLpW~Jg=_BIr0*A*gFnMJ8W zQ#y~$j>P=iU6`L{ny;Tq+Zi4liKK~zDjqr?YI24sU~wvQb`OyEo-q~OQ|{G1 zc=cY8*d(3OtP+A6Xy!R4Noc3e#zc=>ClDj%iBgU9E>44)0MH?BT%s?@f=iAJyl44f zbwzZRpb=NJrHw|;4tc5Qis4k@Z!9M&@(&`wDN4#9_zuTXF6Yj$|VMJ5i$$VRI(GI>%t7gvhV zZMq|X6VY&}zE(NDLpBm7Wk1H#5Kh@$bUYx7lfBc=82lWduB>`tm=7nB%I}c}hvUFi z)X2Pj2dAW4C=&VdpnZ~>vJJ4X&~aTn65k3>Yi?F)&@&r!)`DYV)?Krlnr0E7&MAW7 zY$?+Z2Y~heO!;7`7znVoBGQQCuM2AhY^czi?#V4Y=ur2}#qq~{;htK}uWVJ%XpeW8 ze;b&hWrZ1h5L~HjVkSP;mmYAQmpx7Hkk@K2<(aIkJ_4M(Kio^BHEv%n^64laTAfpR zd{)l*yUDz+=tZ9fk#B*k3a5q^2l9@l*;lSkbpDP@@I-D1V_~u5o#_gJQSGvZ-@d!Qq;aBsD`(Jfodarq9gTXi>4SJ`=nR>a` z6SHRRu#f>9ph@I@J_9xi6R43KD4JB2EIOejX>ze@j6CD{h7UkE>cM~{B*z@h8!hNI zKPS>aUgqcR=TLIk2{9+5_22sxx^TUBc}1#zOcXBbX;4h7t~^AHLnjb zon={P4gxH#Rv{H(lJT#|o@>(M#>h+-zX%f=4netQ%7N#awqGrhkBy#x*jifZaPIWS z@JJFc*;vD-6+93DL~!TP zcZ&K~;E0kClys6saB^d)VH^$y9O&^1 zx0xR5A8Q#r@Zz3iP4QU!ZsTDebD#0J$uo8@{T;kwm1ywru_=SK10SLheYroWUP(!E zS~RV=HCKk1IpC)6|NX*c^~!|*{GSoN>7F>-79pvRf5X`J`**1Lmo_Jyev853^uU}q zp+|JdbV5-fjBTIY+z19FMwK46nCc$a(~tGK4?b9D%beu$3cP`-*D8|6)6bAbPL` z%j%}OK^Cpp-p+h&f*6)W_6xO8jf8S0)Dv&Qk!wkU$AMBb;W#=gX^;m4@u#RWl0kR? zhauOlgXJ;Fbl`&{09?$tKc#qD_i^%^uR^ol;P{&SI8sVp!|y%k)xCzbMGNU`85cyq zyx1_3TRWuapGhZ|yx?{<%01`tIp4Pmdn@f#q@T&4!eX=YOXzq~A1t z{%oM6O?V;su4X}jWdA9-J2jLWrVRwys(X%RLd?3D>uXv2eL-0)>UdIn(+z<5vE4QR zMz}3pO*;}OpbxfceLm+&0uXkjZ}psZVH*|C;bAOhi9Sn)nI%u)R8eAZzDry7Nh2wq z2x5B(1Y+rEa6}F;&g*B}r=o-y)RW=@HqOv@?V-!`+5BRHu}LxZ{{7L|KF`aeDVJ}7&^T34NI$Sz-{ksZts2jCv?n& zNVKt~@|qb+L^Fz|84rJ<{Ez45_`8tMW0R1)o|?}g^*&@Ic%68Ydl%Q*SHbBWei-ok z$8x%hy#7IC)|v5-Zcl<`-p&3O*uS0< zVH^JKuXmc_>!LeBEjNOwq>$?d7s|u3EA4h%QIqPJwsyy(Uz1E#wX3cU!)}>UOmpl7 zQ|)7f0ETcH7Ell{hjaL{@SQ0`_mPQ{SaUz<&@~bm0@T6ACK*p}n5>7?k-bm2pBMH_o0Bl8TaeM$wRpDNX?N5 z6IRA!N`wnv8Ro4PE8>@S!f~%()1&G4-c;sDXniQ`&Niw$C3h^X$_8&aEN;#W0D#}x zwbJqB-4PTM1$@tyzonw#&kT+Y1+gFD_gy)Yon;q(eQUp`oB25Ejq~NFGY=Gmt3uk& zS}dlGG_ipczT5$=09+_Wq)H79yb&{ztur^t(_laWa*Omc5}%MTmP}zWi4TL%GcbTC zf)9tU6V?)q2IAY8JePzq+SfFvn&(#nn616Ot3*hDaz@T80S<(CTDB9R3y(17pQsim z4bYGm&+g&`0b%}!-3dS92VjExx@6ecg{P~vr#{?Bm7e6RFScv?1(;-f`dd-E?~r(W zj_Qfaqxy1zaM>3mW=_lFN^Ke#W7g~2(5NKV6 zU*cRalh-Fs5R3q!b@S+soishinksAAU#O=i;1p0T@b|9Qd%m(iB*{xbI?+c()r+6S z2}wYPo(&6oT}l7+JN850?MK5agx|GN4-&FnlMM#=NtSsN(OFhGJY{)J(7!P|&)(Zw zp=F7d-vsP;zz5Nr^ zQ|$#fN~$`sYN*9b$2LPo3qzD*T$PRutgMm5^GZ&N*@|r)(Y%QA#5x3YSOI}!1sKkb zZWd^@)U6$DyM#yvwB=YsSRASfvH}@Sp&{*6^zc;&R}v+(=9qc=Nc?<$8i~iM&x!11`1H^yCvKLS0 z;tEckc6B~wWS)oT!S?=4U0P7E-1+pV?fG&0XW7=aA=*p!J@>ABJ4xCZcbVpon2y`P zUj3o3SCpIoD$Zua2q)WAPTl!JzJYr5VZa+g^2iD}rD}Y1+EJ1NetY>!z4KZPJh;c* zjAs;p0OJ6bSOZ=FL&?HPj%|3-dQoQ;nP;{G$UI%JqAI_`T~Aq4N}3r!G*J5nv!K`79O4L=`v~>t`(1q5#6G=Z2kqn{&`y3+gBUaI_T@6J4J3)(JpDH8n{0R1hH- zN>s1{QiL%OD|pooNyq|lJ+_oAb+4&;Su=J;_ZT<288cy)z|`IkUU{YPL-mo)OO^ds zV(MM6VL~9*=9(l zGXY(r%g3!kF!BRU5dug*_@vc>9jBQG+Gy2`>w7(SqOIYz4Ybime$iGC29ynV8jnvLsQ>ls_u@?WT8@M( zE$ff--lg$_7A{e_ypW>bY7c3p@h*mlcx}pkF6wD(lVwnnmoOlAVAacVI7>I;Np3lP zL+ioQPpi-J-Q2Q$^pi70_`^odzeXMS_*`+zx-9f@nQ!}*`F5E0d}#-5ptGhZ4CcpP z&mj(!U~@o*eE!g3U@i$)Bj+trI*NW6k^2#ob1Z7>Ax&gi(T$MCh06;8eN`KvY`#b0 z?<@dhCM|+Oy|3zCw)b$2mXZgOmuRWPz-~9fJjhOtNUD5DFT9GX>ygc-qbI8+&l;%# zO1y_xW5cKN#S~>{E0PotQQATPBXh(^bsk3()9)84B7^G_+t-8Pa^7HF9 zgNRn~ql!aETYj7N{9ZlJxqX@KLl~Tr)7u=kWz0s)l3N(+@^2>ar1OIEgeR?ycuLv<86zCAP*(=bo6_pnmnt)lgrUF!TMVQn{B5^y$rvu)svkFE`GEklm_p(g-Zy zhOHnmqxj23Srusc{Q!{-Y#%-PIA~BZKBTrK9HZi|ZSlg)?K_l%t;S?<&ys`jZf_I`XPrlcd*0dX ze{S*)aqWM`^~qNg`~kXt0c0^Djld979fh*g81;^jWr?HXMA2gny*Rc958*SGrcFjM zG28~z{YIga88{fMbJ`;Z?GU>2-xC*6NYn>i{h^v@IypR? z>jyZxAU+f|V2eJ#`R^YIG2oX?Yn_BkO0_l7yBtwyVJOZ~n71l!2(=cmomk|L9}YNe z?IdDb70F4@x+3r#al|{@v5MI#IJtMBJ8E@-#6|jUDFA)E0_qH7S-UHz201#g&qsf#Mv{Xv;O$keel=xNA@YeX&JIz$6nOLs5Fs1!QLzh!g1J4}? z@Y^^^Mcme$XGo@%EcgWoHB=X|#~aq>Z}&E%`J^al@&6rB)g%k@vFvv?9|$H@Tjo$) z_A4hw?sE6x1zm22-$WR4f)%UMrGpbBCpSv+>H!zq2-PqTw3d@uJ3(0Js&Kz!OW1Nx z{r_IBufhXrfl7(MMuo!y$y39KO((fxr^oe-Lj*~Qq@&hruQP)$<_WtxwM4U$z*Aif z%7YY zwsQ5d#bB|n!%#Gk1q#QBas8kveJ2-GovR$HMc5(b#1+3&iC(?gg*bwepm?KC=7?oj zxr<%w+nUzAFcnM_vDM0z8eFp$cSMOE=Ia5==)zEW_cs8zcU4Y`M-=OIaUJV4wzdY? zdcH)h>{eK_y(;B;C+J+~qEYI$y+m1}5tP8p$x1{kM28Ucg$^-_KK=dF0%StTuIM%# zc%FYC#I=I%7=vSDU2Ug35n6ciY>yl-NDurQ{2%at*%2^7-e2;@h6W1#Ke5G$U>O0z zKkUzcqQC#?n3$TFIN4d)nev(v*7hbuLt`sDt7FHEi6)j7mSl5tTRR(Tb90i(i=QYQ zG@h85Y8$Yx(91}xln0d^B+KIBxogwUu3R{5=v<^RV^yPHhdBAUPLgbeAvHujimoWg za4|HH9YZmJ0bX3Gmy2m;ae_|N%YJr}kG?~c;`8LGY#iDHKlrj;rNz48h3eyTrLItL zAvDnm3gQeV@p_Zq;67WfkF*`n!6q>{FT^;M(~w97YGP;mmf~`^v?T)X1l&PStCGq^ zv*5#nnbgS?UyRiZqCpy}Gp}z8R)~J%D9VTEI7;n4(Ai2E0&fx%0~SIG0netz(6gEE zu5~h_+zE302r8m!WhHrD&aJjaMouJDRup~&1EGE9V+`>8AhmjGng!tYIeNOeKbl$q zVE27~D+!PV0H4PZ_|)G_g~X%awax_!{5=zu5Bd(v85MsJ{Q^jMZ|`>hEar4HW7QQ% z<|TJV?S55@$ z0nY#!)xUjmS^<^}2M6#tfIC?K&KT) zoIme%L1k_jYX#Tw@Q?I=@=EY^T`T@1Ie>g<`h^Id%LPsiw>Dn>CTpdB&yCbG@Zu$p$*~qro7KE}6HU}}hqAN#m z=}kkSq{jZ8(6C@Ov%_4&2a;4E9TBa}D%qHjRwck!iUyQ&NlXR^1lVmStp(#&qRs51 zK%eUSbumnOC)U48Jf?nU?lv6zWlz!{@eHJjakC`+>Qyd$OBK^P;<=9#lL6fk4xH zL!QqY6e)Pm3Rm4O*RbM-*#w5dt;Z+xATlC0F-HxOE2@#hA-v{DzQMQZn~6vA3>F~= zXESClmwED@$l>jc06)I-MqhPAITXu$2p60afN)nqj4FVMeGbI26sY2Nxt0buf>ScA z^L7)3fbZNNe86yPbC7#b(tO(PPP?7M>AQH%N5mQk5PjHTR}Ml_d2b{m;m4NDPCGsp z_tWr0U5`@0ux()7p|!H{5LN%uMiIa9<&8yQnuK?anYH_<$5w|A1|rfG@L)yugP0lF z?NzI0g!1SVHuJ;~f9U7CD;_EQ_1M?UW(FUl9S3V5CJ`yk<3gQi+EM!`)?>|D;gykDuY@@TzXa}CU(bMkc!w743Rv*sVAA#V5jd)}O z2t;j%*nDaVu#_8!UOAHy*DZ1-M|S9TBfG_CE0KctN?ildljNVTww~M;z@=!Z zV((jh9^0Kd9FSqMQu%h^=Ur*7>0r;tCtAArBR3khG7_kP^MbZvCkq;{TCVTj9#G#< zNZ9$hm%are7&eI|zm(u!DRvJtFLL4j=|=0_Q#O)qf!%U33q|K2Z>(QGw@|5=1Ef3z zjLn;13919?`kZ`s4DsQ)agzrERkoM4){hDpJo#fpuoo3s{q^zz?FvfE^|jSs4Rso; zOlupwv>?!EO9~N;I8jku>$RtK;Cef|Fzdw8bHVraF)|eSiy@*HxK+m-#01X@lt#V` zF5C<9w!e35c@kW7QtFP~t;B?6-;{qmJ53^V=M`T1P_C6H!9iK|-hP~SsP@^r;4}YD zacDk)H+BzaMNAh)iAFWQeCz-9chBqjPved7Ih7=Ic86FmU0x0@#)23<4x*Za#0^;h zpy2W6iRSxjXOy=?c6agZ2Usr&<^KeR^UH?0+T8EOZ08$aP|v88@#c=kE>}##=i_%~ z5~orFBilTXvyy|&uo=0m`bhcO$bJ9?7YcCJ*gcDi|ML3MeLJ-~w)pvl}pCQGC)BXU!A*TMgOwJODX;F0KN$Y z_5nZtnv)*JC*ffFtn}jR0QVao1)tZs6_jujFJ+&tJN+q-%1dQ5&jm?`HSyEGaW4qi zzh}zr4$JNC{RQ35!~UiY@$4)1xs`#Nl3`Y!^$?oMsgb*W8vF~lk~B;i5pgzIv0l0 zTw}dVQ8EsW8Xm4C@Dbj$MV~No#sfUt-p+_+>uSUEPqJOO`LaXXPES7Z;hj9DcumR4 zrsUab^O+Xsu0~0k-<+I^WPBjLhJKx@SNx1V;X$kxDQKRQ1wU`XC5g~Lx_*GaSJi~pu?hlqBpQzv8Rc=y3i7n|eM#CkZqdrRk% zrN*3flA2-boQh+a3S6FV!cE&x7qgbTRoL4Ep!5@={9h~>`FDgOPW63E3q*L#f8?8w z&LC9?rhRNzJXBl@K6GV$Tt(7UK7$U9NAsKB!w>&Xgdml`%#XS#Y3E7dgexhuKj~E6 z9SB5ni zzU@CNx*15v=#qi7#Ap~H?HD19P7x_ZVU*wqX$etMVKf3Fh>R|SkdP2WP*PEmj(5NJ z|Nf8Pr|rY`9M6v3&wXFld7Yu4sSV7Oi63}hB#BV()pDHgL)KTb;exwP)B{J0j?!!jhjP`r;%S|-iu!j>KcUKA>80_IS&@5+8UseoKT5AW*76ZySeLtb$0zpyq!cV4 zoGy!6)r9PUq8J`}NK6rkwX?}il|(x~X_`74s70;yl+VT z7xn(*s?60HU!Qq;h1z{6pqmFF;+%(QnX~e)*t{M;nG9JCEUALR9>UC9u749;Fgk z=G$m&WGk&ZO$^UzoiOhbgdDRN6eQN&x+L|Wu{({4OBPBiGWgMxiW1U<2EFD zjp_#vQQl+hJz~_9pgnfaN+VNsN;u-)(urSxL^pc)RiWuh=;RdKI=*d9WN{ZYGk#Fm4 z?>*Q1PdUk#XffTaa$Lz_VY;F9^FIJ>e~_?JqpSPccSbXJ6L%H}{J8OipHzYbf4tg_ zPJFMK)b%h(bp-ckymI9S&-L3{7*%a-(m0ntqci87t+b*ha|N8eLQiI|)G({hnz8O+ zU3zZFFUTs3Fe|vL0RQ}NH_KC8O09R*7Dg;^2f<~Qe(C%Ca*l5&9U?^fNSWT!(xfO& zTo=Frj#eHG-TFM1QkUCIY6$!5W^buF|2~O6oh+0XDo{*8wJt5s36!zP1z!qC4rQ;T zzU%TTO-?XQ@bI`n8wz0x=^!SE@#O;XIHy;->T}eQ{gnT_rj#OAt31l#{0f6zrk_}R z9=g+|keYA;l6K5+o;p@&w`4M+AU&f+63tLxq3BU>Bd+f+QCUHfq=d!$imh>e3(Mo+ zJwNx6t^IJf)DipViI~vRax4K0g}U2T)AlCGq)_wk`vVCtUDNLXH_O2a`D8L6u2rMl-YW|bOzvnI~wJ1H*J zOyu4RGcRd_I7^rtpnxL}k}>WCM423*=Ub~lw=ltLCbB4FmEWv2zT(LlBwd)6 zHs*zVOxGvMZ^+e+g0O+iHlrPG-}m)1V}jkjIUApRrB!F&L)NX+kL@COJ@O*@}kKSEa31$`d zrv$GI7ElWikXWk}(4O(X4|TW9NB6S=er?c)**)`scS}Zy@E5my0VtN083pnLNSA($ zPNJ--zN8=sZG$x^DDIZd#ua>({8 ze)@03;WgQe7D6$!G3OM4P1DF)fkBq7Rz6#1HnUV)R<8QXQ|$L;5o`+6K0PaSC{E5I zTaRXhL$E(N2g|uco?%1!nmdisj~8r4-!MPF_mBM!<1eOf>LXE^!fX(A?>Tm6Hbm*f zA2mLx%PpyNO;@d;DLimQl)UWB-0m@unrkXp?9#dH?-|oHese>tv{%NtHxy^-vHIq* zR)*D^T@Ap8$r!X;C*@)i{luJFh?&aswd15-lU*Uw)wTqnXOR>j@S z^(|KG&Fi*gYXLBZqPq}(yO^x8jBw1x2iXatM*=4AYH-J-$W6SaV8$3gid4?PBBd@# zboymo5-u7vtg|V(j!0r}klbye=))&Tf)te8on2wKCJe=+yft6G0c&kMwzwCh0oa1e z0rF>-12H`Pr*vMm9#5v5*Y%~$-4Zxzx(T2;PT56|+r+_vxQ;5Mal{+{M?%8YzIExgg)t+rY6l|4lIcd%cCg z-%xhi8hAQ5wKlX+Of{G6O{!;*Gx1<&`-jZ09rlWMoCCKWz47R94S(c2DuAPMe&|0P@-?GI935G#Kmk&!oszuhyw&~<|1MWbrPFH zEeE?p+-58J@JevuS*xaQ`I|XpW8UI2zxw~)FKAt2gAPp~baRJDI;fXiWO5O_1qN@- zL)rRev^;rLgi)AIBJ1*N=7aR;??f( zg}G`qe^Ae|;h_`ae(mpdml2h*QJxMCWIc3Tvdl0|;qZyU4z&5oG^8YfsGk_{s*()GE-qpc+eK8@LN$*RFZijkyP@<@N@Cuzg@CkXKgHh7>*8&B{o*Ms8;b4?5)tDL zky)Rg*o<=E6}JTh=9u(pY+w1V{Dn{TSBSF^?OJ^GEd!>exwMg3i<)GSD0VME*e>}= z>r1D*-olJ(;Oe!qTiHcX9GR57{N(%^-DNYpd~eYs1-K0WfzqnoogukG^}D{ymyEx}Ke z0*|O^As_{!QN`t&N$yiVdrWMAOh=f0xmsS1M$XJ!+Veq%}gkq9q_FE)~1wkhajdH6g z&R~pcs-kKaz9P(ID?VOMc&x?=Q>YY(4c*y6W$E^jU9o(N1fOm%?cZ*eGpe`q$c1YD zv3>hmY-02PD33)NQr(jRp9X)pu~wAGb=yBl2pRFL+{PyE(wi>3dG<2fKGgX5a~28( zw7tN<@1-!kIb~jW{(A(aM}Y;#zBYH{`l4;5D@wWJ&Y zxIuVL`S?#OlT2mQns&XtNY!EmyYNl?g6svBiga%^2+C8$B9aqJY!M&nxG?Ef6Gvcc zhz4+*B0K24FSoVWVa_`uE<6fW8tD18F4x|WGKGP_2_mP@)?VEOhuy9=y#dU?g~WQqo8N(#wQoIk6+ zyk7qz^GG*TySZ_r@ZI+}EdRC~`cF&Sk!NH(>@RP)yw*;QnGZB(-BN1IlT2L^MQD`t zKPwqNBQ zxK|S^>0&DZFY+0^g_*CNrXfKO?8&71JFq`Lqp!4x|5Ri0|cp1OICqC;97QZ%?$=3guk3%%aYlC7fmb*zA*Q0R(Km9Zb@0tuRIydMa z0e%25HLxRWX0QXg2XgYvhGxzTiyk zGke(QJTMyoN?~D}?3qB=$Wf%nr6VzHxRk~K?i7rT6ya%XNs=6%vta<&2zW|+Zb(9E zEEsrHGrFC?kU*)FFPWMEO&pSAq>U|1q%1wJnRIfy@QMwRo_sli2oCE$QQ|8N;QO0C zB&>$ch=hGm{jpFyT|Z4V8a_iV$l{--PXm~e6t}60mi38E3q`U|;wZQUBaSWwu21v3B z6j1ni%!^g$RqtOTwyt|C19g zz%#ilBmpe54D2y68`qeP$r)+4y7eg(ME-RT<-Nr`a&?{ zXb$RLL_=i5Mn06(!dkoP&Sg=!tJ4?TZ&iJ*#@Gf$Wo~8By*=Zi)lX_@?Qu5yRmT=HRM<4D#v&55qhq9 z;qvJR`R_a5m%s}K5yCSmzasV$FYb1;&`Qa?YDtyr_emj>)AIIRjKKijdh>L{+Dh!G z#pZj*!%VyWdr8qpyAyKBzZGyDJMJ5Cook0!W0%`i5(KN^nP4l5bruc%t#LP+0r1$| zK#WS9Cp}e)gbOdM^|~D}Nkv}d95yJ0r~u6nLrb(if2>6hbXLU?5;QDnV{Gn%6adB7 zt>^$q3T9dxVH;gK6&52ZNCk$H15moT)#t5WillHeMSNp|zL}xR4zj|ev(q#pS!n?> z@12_hN=E=tcu+!V%w{&y6aqjl4{I}7;MJAIqpBR=KeZ_FxlX7lNlPpo4RDIHAY7J! z4RLL@9r|LmF8r?W^ia$|m&=t39=^_RWZ^2#Bd@54g+^OK+&gT^4mQYTo_~S~qtH>T z`t7OvUR%!ff?3?u5~^^>|yf_)>{NH;4!CBa{3J_c+|161=A zG)NoUK|nMUVf`axQV^UCj5+(=7zRjx_>eB!fwHD?(oDd< zjBe0b*pw_Xd`#D&T#sowyeY5>io;6Z;)M@IKvsimm+1f1r2y*&ZA zsigsaiZPPmwJ&n|hKYrOihiNnG{n;SW@$Sjjm7wQ62X90e40SeDn;a$^}_*s5Y%8p zSAIq(DncW5F3UF&SNHWwipJ}^05p~gL=sy7-{*^>h*fpuHR%I=H%u*E1F9iBCOD8E z9WAP6^dShYW=6ST9mUjHt?!%n@BP!sB|Vw5CFS#Pza6c5c))T|RgHVnHF1BwY^+%tiz=PSJdXU#n9jtGhwPr*^N5ws55F8& z|8+=_6jsjcM0J9+9huf6^*Qd%c+>T00B!?7b{}7h zjhu;iAU7~RKH@4^>jL*B_*w3`-!d8qOE(KGMKa#!F{onoK4`EgXb@`LEg_yO^M^cd zcDV;qLX-ofCI^=nIh3@lcGHH&f$qFTwh}A5XGfzGh37vszm3&TURotbz2{`MUN(I~ zoFa^Lg4A(e(>>0#PKS=}vRq3kEh=^DeNRp-p!7D22a)P|ExcTAcL;JiqAjPUlZ=8} zH9PDm(QHHFqDiGw9G3|33V@5KUEhE|r7_?b>N$Ph<9GUGs`p#3_fqQI z-|*k>60d#!Ib|kxymuIV|N5WW=B*aoHfP{smfXxeDzr%m;it|NrpJk?+_rafV1X?o z@75r3L>sg41)gHS=4Pp#MD0NpasP|43?9Sr8(qfMh(*@SILWZGkFFn57@nUla-q26 zU7MV5VVQtWa{BzB?;CK zoFXYWBD+phG!OHUI(g}wJ*4NnL?}h=Z=;_~ne!f3(V$cNoszaY$Ket`mu;Qm2Y)Vc zj-Nx6v{itva6XHmO-NDQl)fLMWtr}%PQ^V3tleLW=Px^^OKh&#lP>SUYClV^Ydg0h zKy>E+q{`+#2BlQUT{I8_bPl6CPABqC0DELFcr22l;Fr03(d6c5mWr0?l1g@wFCBbO z$jH36{^t#YXOiM~1wnf7-hx_0l2a`Rj!Vc93IC~?%Sps@k!8HVSR&Q-ZZ~il?d(vP~<{_!h24 z0IoR2CrJ58+Qy+l49wA-6Cihub7Ro>?4bZ5jp8K7T3pplKvEn)HYh{ z(YseANUPa`|J*wV@jI`tG6%iAVB6sumckFax!79Wkw4 z@BA*`;yf0kUNE!wDC{IGCF(-0tPz8YPN!%^*Hg;8C$ym5$EFRs$BBz(PBhlqF4eT7 z*wt2n>GeA|82MdNt^^id-px%u7xW6Ftm z&%^m77isAVn@fg0G|7UG(~?SD5CWNGk(*sN#XF~aGA1gG%KD7plfgj@m$Vj&gB`M) z%CG98o^`Fo{7MLW1yLf~at7JT>&(ayr*6kkWXWWtLf4B7RMBJdYa#yWlA*)3y#&KG-Bq>o|FhF(JyzK@`lL?>fQ)5|?vMKKYpbZg=y)yjlRqVgJPoXf?U%g;WYL%S{XJ^%vy(0J7@=?s7J^IMQZ|;;tq5+P>In zqVjXPIlwa4)L*#{R3o4nz_(Dv`;r}=IhJj}wkqxQiL%=f-$ha`8meyC9MrkW(9n}7 zolrptiSc>7;nM;)^^qovTBC|m%Vu^x%Ml%Q{zMEb6HFyNtoDQnwGg`QqG&L zI!HmZ8u*N!s-)R`Oa*HhdJ_PF)4B-*!EJk<#69RrY6p7NV&jYlE6H^8o~^(V0EAvI z+Eklwq~|aD-Y3WEq2#`qhDWb{5-gXzQ62d z-SpvZkl)+u-wx)Vf9x@z&lRrrQ1j|TD&RUxOL;YvUfcbqTXaZWx8n$A%9R<#g5v4y zOn7N6a*1{|7-<2dPBlbGpvAxR2@9E?RN1mpP{Af%V~b=G9lIR#5=;ScX<#$Rp8Tu4 z7dfcF>JmebkXK?rv78G_R`N`Ls0l+n8>++j1Tl>O!g@6Nm|RE=hoAuHYAVhZOv^2n z*Q^Zy45Bf*hDNUBz1}6ENoVRuk^2(e2gDb;+Rpb={fjW7nm zB)h&cj$Hz|u66-tyryJgrjx-?yN$wO^#ap`0sEBLV=gDQ)k)5WFiF2d=!41d@dm@*XjDyP zCQaX_+F113*5qFLy-N*v9?0$u+T{-J3zOFp+000xzpb|2QUM-9n~iRJSY6tZaT#{Y zY=BqWpDWeW0VJ$xtXzDc^x%j6n-zV*x}EbEFS~#Z7iOT-YdPvQPL;@p&(q;<4HN6b z*rm(g0%8<%Eh=ku726Q7($eu7s4#9A96^YNZPe}#b6xAb6diMN7m%h)1eO^^f{fZ^ z8H|3Xr^73#YjOi>FQXecWZ9*UTWCHpP*BpL?@T4DuU_+Uq%*K*FRTA^y~61mWF6cP z1ZbXer2lMhncEw>?)EUJIX#wzYbhR9;rtY85lgacV23T^AOO_B6|(TxkV-L}woLx^ zNcETO>9>@{bjhH@BRN!@lk}_RXY2IC+fxFFf{|ra;Syj-^ASyHvbw4hfpz3tNqV~V zlBtEYXBjR5?PHuS^w1@M4&52qL(X>pgZ}%buQu#O-J(xQ#hn8P6+GkqeF}GTRujyv6kDt6ftk< zKHPrIPj&^F`U&$E>IT&B)9QJWZQZ12zEQs}3Wa=XAQ`~eYeBYUn7&H2lvrYpGc}py z?Do){0e0#-KKx+&OO$B9tdWPVcF4}#<~6P246-yw>ocnAk*02N45)xzTa0ToosilJ zeqI`Tf%sSJXDD3=?zRgd62Q{twv>NvoFJ}9BVM{zzSleoPGrQ_Atiu&Tbyk#eJx}M zHZ`?+KaAZL~3)e;OiG* zNZaEZPB$fWG+?DMadfut8v&+HKegv7!!hf>t*3sYZAn(wh(Mh(`|I5vx5GymL0bXNZMi~-{>!FB9K3eKmWrGf>`U9+#3 z9%@|3?}wa$*n_A^4)u^PRil>>=}7bpONF`ZzdA=n@%c)RJCC9k@NPxeA~jo~j;S?r z0JSOu-6;#5=KU+Uu%BY@pV@+&waV|Z7i=vB1zLjd$)eh|f!%Xe64S`pr1+t8eT=Jo zu69_sd&8{)?j9yEZ>*$U4WuEdR1QFtVyApp#WIIX>r(w;BEx6oJk~$kq73q8o16#5 zOdW+rEro~lKv08vqwIt;e_5!{Eh}R*6{TkwdE;C8@%HS{1Bhrm*;^0#FjHR=5K{g% z+Hpw^COmV2sE+usV4Y>wf3=`#zzBWK&F1~|!UV35a^9^bMc(vkhQCdWMqb5uBy-!P z+Wg$L4|=Ev+NMnt*?zV+Ea}8u^t?F|N)5aNf^QlQbG%Z_Q6d_^Yy??iE!#)wE*m6+ z(!?9naR6LdzA61muo7w_IR=-LKqEn?qe{g#;`RNsfc}zd5DE$~jj%rkm1I8^O6upD z$Iv<0E-tboh%2R+$*ROiDgZT?dJ1zXjtXCNss+Xpp#veuSyPORS&?(UWTorQS7`BM zOxy#q!nO9rKhkOebm7tT>JBjC&VgTYgYYk`Uc6WM95*K#DdTqA4jn6I(w17vQDQVr z8lSb=;Gk360j-SC%%?rmuDpt0=b_~-VjLS`0k1AnS`lhy$>Llv zj6E{WYdQ|1i9ZFu{LwMiBavr`ojmsrZNSeV& z0MH6z+?_ACbPR&z541uo=(#dJjEwZrm5qfpL{ZXNxx!X9E|^+pjNbjBST#A7x(ush z#C!ID0LGq97926j@974LUM;>ba<0MJ&Ge zLiS*SpVXr#4sqbOrd4mgelSU&#qpqDoQEp2#kNvRvikd}(!G{$ zUXD^2z@xTCy(08BwmAL)BYKTuRqH6(LT8h|SVRZBTLfA-tPhCV`eDHgv#my8+Cxof zVcLZzRRXTHxrH-JdTx4XJ@}^5!~|>(TGhYr zBzUp(%MrTk!kx0ICbV_2Sh&8-(8@Sw5DPlox(zD|R{p0F2*indv&kg+B!yb`J{NSH zB3oWKj zyW5@xxA{u5QhC=jGD*RVF?v!f>6bypGfs5U=EJ~gOSET!r(@p=Y^?LlPxJ?QVw7#8 z0u+A%E8b}G64!sTV19$hKkp`f5o@mXh- z;t~R&LoXiW);!Ard^kq0eNLxMY)aAn?!fQ19g8G!Cem$Lt!CZ+yqaZh2-PoNk_nqf!M)xgSYJ}AeeqHb+UVuNj zqzRI`ZU9;QstrB5smxOuBJ7kgR`A-~bYJR*X1f&3RECSx2rLO5SfEt3JN^GXGh_b? zODL0fY~5icd-;pY>PF@!C@pP`s}{xv8ro{ch8IfOD5L)cA5=6=jnV4rYFAB7FQ6wE zENBzs3znv~y<3EZEUWUn?g@z3!$L33-6qh&jeI_cW{N#ZAjo;aZUF7Dcf{ggn8+w* z-UJ_3xI(V-8Gx;}v(q=>rVVS=rA*GR4uT$>DIf1f5Af}$SA5{8-(9ZhN@~!4ANn#J zUfte_90=5#^tZibZ<~|zbhD|Fj!XXvoW(D&wAF63baJTI5^bs7XvG}RVDRdaGJ)1| z$jw5W@EZ?8g)oocQn~mPauC`X7DKjFVz34PGn@m-Y5^1;qvd*%{Q9x_ASRQ~!Y&Eg zJofA{zc|ui$$CsQZcY_4HDJ_`mCSI1o_n*acw_fEJ;mgo@0Zu_2#ZwlcH@;PRhUr# z!!`wK>7!N$kU?6A&%CjG`&?=7&V+l+&FCZ8ai7}RcB0|iZ`Mo#WcNYKzkL0?XlTr~IZ`7H`b+?inYGT75S!d?4b#A3m9xpM4gMwWc0D6D+0=<^WEW z>;%qQm;U`L$8lIVu9M?K?1i+!mn8{g7s07~aWHcb1% zYSiVO80L&HnvkclP8)+Tkia_ukPOQrp}MzN@3}Nm$Hh@9<%scjqW`I}Y5n z(*|GYz|C6HP`3+yMOJ0MzWI#xSR4~8Kvho8XX^3wV3sQ#UmqL#M-K?2HCRnU9&O#; z7Y<9XThf_Z(0Kdrb!6!|z`cqD+J4K7tvzFhHjE7VNc5}KR3ZqXHTa!dwl*?J`hKA5 zxi3kTSnMqRNfO1LasROQ-(QEGY7O7`&>6;AN8wl3Nol_z{^>$M6bEVZDW!}DC*LJY zgPTQ3geGq`wlZJsvC7yc77I(5nSqp|X}_Hb=#A<>+ul?9XrcQfdQ$R}_R)jUsI+K+ zV8Z|$KDfG^aa4Wx`@=g$K2$Bw2aj!7vi#7rN9`*fd4iC5_~@$s#`E-N8|i7SeU&w+ zdlS3nWF{XEnY1SL3xDJ7Hi2i5-{>)O)5K)%T?e-qPsBHYzK}3)q@O>4LKme9(g2@q zZ}qv%v~RD8;M|~L?}zW7sG{;rIUu{E;jHiWzeKuuzNAYuDwC#!I-0VCB`F^u?Gkp(~i!96u-1@*fQx;{Sz(UyJDX1Yk6Z}`y4n0{Fo z*u4NX-x*GDe(=H-)wpiqV5+@;-Tgs{;HM%%Wi*%> zw>?d3+ZdBf*L&{&vH&{D6v3027o$XWX^bH2N?Z~LKB)QFDffAq3+v}q<$d-Lr2~*Z z{4P2l|5Mpw-ul|E+pZOa3*U+8=yYH3_}hKE?{dx;uV(=~-;J*rDqw@2mIa@E!m8Wq zC;x1;+MK9bZ{f17pTe^t6q?2=;WUDt56SrXD9u_ti@|iLA718ZUJHa#X8`XZxH{BS ziI!lm9g3fQrNQ|byr^f-hV0p;^QEq*@XJ`sj()AzOnQDg=Oa(1-J{;jDLM*Bmue2tC-Bdg7&~PqA84 zy0P|jJp#wt{s0uJ)>~rnwBTJMf9=_G_M^r`6Tt%*hOY|f<3-*+kf`{l+A~a(Suc`0 zlIr+ze_-(MttuOK?3;Jq^k8L00j8wt;?jDNT}c?7U1+4D&(bY=6O-!+*LG}@_g_g_ zW1AK!#X$%jyjC_)X7AN8L9L=c?hS8jCsuyAa}xFayiV-LuWzDM@x3-2IR9#5;1rD> zjXTh+XwuQW`cuqMpQ1JP3}@qAyniPQ(e5f6CQFiE<-pfna`_l{V`0+J5-UppM8WdQ8WoI=DqyAN%N;vq#sBiyH|8AQ^hXsd!2#;PFT_vj5H zuV`R|2aJyh$N&BDo{xA5udei40GCRYS|do8p_T!Weyr6GNz?rbqC4W@f3{nZxkdKoQ4nOj!YGj8h8f!JC> zJq+6=$#`%-g#`db_ZkcxF3Mu%=6KmXC#m~1c&8!;7{?@qfeW%1^pj+S!X2Dui}-qT z#k6b7{^$Xk?^zevvOHwQPuTI>SZ17o%cF4vvIGWM4%t(sy=JG^#sB@WXmiIWt8jb0 zXEJ6L)SHk9;UHiHD$4KPCe6WU9bdJ{Boh-+TAZ&4)#<~+ZEC&s%y=GrEK7BjaYHZ- z3j(K3{Uh*Syj|f+4TP1MzS)UI(S3e>aVythh$-XO!253nLAS(Zo z%jJ`UA1FhML7h@>PFwg02amk){e2OWhD!V`wkc|;mG;dI<^;T#x0$jt@S4R3)uM5=N}pTux6 zU%~Tv4M3kE85Ge4p^LtC$&qnXTi8P7vbMq|rr1d5aa6|ISsb1L@}rwk7(GRoop-5L z?4?7>95ofr9NV3hN(oT#xB;3UfmGUG%;I|--n}gru-`MDA8tPFD(UuU+4||x>MTkI z*mH;n3mUI)aAEIbmb4#!`Muvi(R^fxr^(Z$z-xIqbtl9*N>IIJH?p<1?IRMMxGZCl zC2=SfM;QsORD?i6I*{f1j%qqr1lZHQZ(DZ0WXC)<{FbSjJ7xP~@Z)8$`Zlcv?>kq} z;m;S4L4I@f_}(>1VjTVR;$mN0eGi`F+IQt)#bJnPn4)bv2!~5)C2|zA0cu0pK6Skz zW`Z|Qx0U4EvTqSTo0=hR-V39RCdVsdHJ-t%Yl|jC@Y90&Z}K?IwgvJ>-@(WvF~h%I zCygGYTXpFRjrYg-F$3_jJ*&oLIOGNMYE}2*X%=^2)Db~hS@rFm)v`y~OuXCjn3ukJ z2EHW3WusxX0qHjr*s^PnQI3kz zfRO1o5-CT>r0vf~r#Br~znS4bY%hsAjymERg=@F>0#dthTOYZ`qh*=YrYOX+%L-U z{UIWNxB&3zx`b#?7POdzqbsY{Lt7OjePW3m3kcwnASA4&Q#b&@q*9O2!04bkt=H`#(<@9#Ki~2?wLrMUM6x;c2H6Jml5ERRttWCwa{~|le{&T=sLD6X=!=psA>-(-Z z<-F4pc-;cX@?4e3dyS>*iRwQGhJyJgy_n->McAQ5S?|bw4fE39i^sAKAp&142j#v# zB@~Pvdi`+RU1M>w&sp4c$hoQY@?DS6jDKd1AibNrsSd4gUb|@A-NXRa7y=cw#${`q z#hADmCin_?o!Po2gwxl=eh@t**Bi^^0un4P0a4uqw{iSK`;Jl9tvG{O;yd$D2_;t3 z-bBeO&ebYQYde{K5ch3Umzvw()!Eo;RM^-mOjDVgWBOwBFMB+jtz}_%b&<-p<5ZlS zyTmEhByvsv3Qh{efp&2pWF4ACu-kOwm>1C*5)KC2jY<$DM%2In#PnFwXHx;wo zAd^@ERmhFOUcz2Non9yNI1+|`KPtRYFwCIVpR;}ROyfZXnRzjkK`znb!tr%`TGp}H zKph#297VfOSHqJ0-A6Axvg6rQ=&1B587!nIP)rc(8qR5bPGQ_{$-IjL{*bZ#*o5nC z_@mF71eaFU3m_n!B?feOkPpC)XDE{`4QZgvU}hFwhcey%Vrg zNogGp5UVzKpPw7lx)W3Ue>_f@*b(*xxGtTnj`~;@+4;n;jKH$|2gWB)auQC+n#>~J zR2v3~X5nJ7D`ZDSmxcSGrz2Usj zsg+Ei$mP!4K_V*~(3J7E~63RXKupwduz zKLMm@e)oOSKtOm~!u{Q`nHO!l_wZK1-m$-mtt2(Mi zCKs1fwKUMiCK?(V>W0Q9>Q}F-TrXfiF z01>^3mnToeemQFE7BZ;6ns!4~OsFNBh0a}`OMW891nZWhu307t)7=C1}JOYd`;uOo_oq*KEUl+5dzhR!QCNikyoZmz>mBcV0J(Gp3ChydPKB*>f zCSCj)EETKil~{;Bj{aMHJJLlR5K*OAUSn5T%TPF8G3HXvc)?po;m6Y^po@WNdn>(4 zWFL!<7+Zx1n=cBNpFijK|Msngfv~i51FMsD0`ga(SpEUatD2-AXtEvV*wdMF5Zw5w zm}I2wE8^lxFJoVU6E+kiC+2FJfxkS+78-pAitxBp4YrW3c^S?)i$aj=0l`VO1bqa$UqM$8hbp0SdUrD4srnZ6X` zH4>XHU4et}&_<763O=i5a49@L16Bj)vwh`ga zEzhY&dNL&_vkOu4Nv>qb(v0Hx+BxMAow0F90ZRDo>5Y7bbD+G3-2b1y-9qh0GV7gw zi9q@33kAEr_8c>McUy$Hgnr^qB5T7a6i=2rETYE@Ppj>?;qB+HN2X?r{atp+6E6X= zBo6$=+!hdb;Tm!#-6oJ8TTa#Sku@1;m$HzKEgm%UG7@Ca0EH9)($2lm)$6BH1;Ldq zw8-cq{^y_gs2Y};faW%c!9tL|AL-W54DObkn(x!3vq(QvY?>s2mU1C``)hwnGFT7S z-5;`}b?pK<&e4!??RUCR_|2|b8v1`AEC&TpPn~ymAj!-JVnw$Q#R*?Nq_3>4$uXX! zNY5#Ta6BlnC67i^O9xtekv~zFX}7p}bP_HXF1(J^tkUpbd>O zNZ-Xb1}=IQx6m<4=sHYcOp*Rj2!WO@>5@@WWPD#WvP=D_!&qm`!xYQ*uiOrcB>d7PyXcz@>6+ zqpC}@TjXeXbbf>TX7+nKrdP6LP*IPR57haKp(?=gPtGJW@21}Z52l{em-dHkMe3E? zB~?V-7-SE#WrefIx&nJnx7ADzu~=Z*~BMp09dksbV%?)!$w zIUTC4yfmfXDk(pkoQqxP^D@l@gv(*1AgKl@9a%|m_gxq1J`Z*cSP?o0Z5%-I=*T!I zxmXo>+h%KI!YO|(jwM4{HPd>QKy*A(x|gm?Bj_q9t=UUM-cJVhk#W~r!ABo8-5BS{ zI?oV#)0f8#m&-oxTS9Gmc%nfvF60~O*rEx(=HymBGma$Wv@-O6PUoHu zW5?sLtR+)472ei1g^?V2#OVN2w&0|cD&Zv)-B(c$ktYgGZ8a_M-Xa(Ks3e7xcmF#c z-8CCDyUj=1lauaC?vu!}!sly)$&kwNzUIw?1~t2loyTQ-CwJarUmbBan=#%ke|<$w zf{V@}=Fyvo$(g9I9miDuh<$-%`4rVckoQd8_$CH!JJdw6MIX!T)*XwviNpkfM!DiS z#DwDhNmZ0$sB{qma7g(bp@NB&eZbZdW?wBgUEGsiO)3*s{^vO|VT=GRr_}^ecV~}) zRahz9v#(sglk-ZjT+qxFuq~1lkzpT=?Z=Hvs{UvjdBTQ<&;SeqjTE%@)jA3C?0jx; z7JN|zBeR1v@OGM5S~o74TuOt}zUQRR#;01JZ%w4aYcc`b_Mf4D7NcHIeew=X9&RtF z|6TqA-z`V6T+afTb$iJc;PHYo2dt>$>nGwmYdGcT?44s_KCyolq+oC&$#U|~)dz?! z4|{T#%;=ZpQ-w03*x;a`zp5n45l#7YMlPiHKlcyP)6_ewSW2cUl+h5$Xf&`53{lnd zoGkJ@`NMCNt6SX(I_jsay9Y?WlLM~(iy7=v$&qupzpa*!bqj8+{eWG(jcB3Pb{F}g zLNzRoDPRG3(4opLGn$VSbH9H|wqESreEBg-tzO~PF}WeUZ3G#M2DNhXyTA)eucww? zCvw3Y*qjI?t_rHa)vm6YA6tbE0*Hb2ng%GD34_ZJ^x4x~Boxn4XolJf9xT)&s2KP8 z1>XN>17|1c?l+g zmA`YrrMlrq_piCyZU1Z8F;!mM(?pF5lNs1U6i*k#9{ux8Rk4HUTT3Jc4mX?6LC`Q} z%l{$jE5oAd!glv04MPml4BgTVGNgc@fG`f}(2W5iiptPKNvEQKbO}faC_{*ZAV@a` zk^&+jA)Nhw=bY=i=EvUr;+j2st@S+jbB8!yy$8eMUw_pM$`@{0+zfh^T3ET3KiE}W zP7A$iVV!wxC^M_;F;ONQSh{?lto7`~lC|?Mw|cu; zC^#(xM`Gvc&jsyiYAeH4_HJgEoKRqd7y$CkOUynqzLeVC94X!FH8z$i6ePM^3f^fW zPv2D`*=mqzK*7Klb{gA`y85WC1@c4d44vx5K#X$+j-|7D6$o7630+uXxk!)g&>Gm2J4mfx6KeP z@2aSw2%x{&rNjIlV2+4H5c<^f=Cn9C_^~i+L4z748!KwD39+3AEqmPyi*34EHWFcV zR~kuRC_Cu24+`ibse(QSz6!6pj!^s1&o(m7%KeBNgrpUjz|qT+Vn@?Ql>*}<4J1jl zdbOsWWBLRkSYeelCX7JqRuBtpn16+pma5K_$K=z(FWn0-3cU3|l=R%6l|J$~WCKSH zjf?^b@ru>rRPd}XUt(>Jy78n}-4np3c?bN{{Ui7OZ11a8 zUWFmc*E+vJL>=*zz}X$_4JGl>4ThgG&JkT{YQ9yFI73|wWgkCpfteRXkA~~g9mM{Y zk?It6u1xrGyyMkIio8Nu;19cK>gI^Dj2N+xg&+Re*g72h(>7lY!T;CI(FGuzQxbTd zoLViz!**+1JG_0clt&^w2fSoQGg|VtW0+iR?ZF-Y6d#1?w zRg2p#T8nqV4({ihemb6z(IB++!xx%OBFk6g`x$BwASK}d3cn~n&q-Nr7h538!L25^ zQ?QX(d|1IRBx>BygKMxE?~Z^$7{WC3%L^D41v^@Fxb`k2#ph^~EjMKHMbqG-QDB62DXf(A zAplX=9Pis7)Ko|{pDTE`LJyWL{Iu_-4s#|avqx^|82}XIe%?MwwJsJ4+~St4eA@jC zX2cfr!O_hv1x{>bILUnfE7keM)w|vAiWdeV9=!ZM80XiPsQC2H_yQ9!5w)_{DWI{9;)U5X{2I3R>#Oz{(OyVp>G zt-o;Zsv5MUMrd8x`M5#?w-I@1k?+UO5l>!mR24ibzb~?STu=kEJs_XTbbKm z_fQ~arc5+&-nWsE%=3VA#*>^K2Z2`*V9)V!oX%G3`B1=L`dSaP8_xf8$+jhYBT0)$ zXTgsG&c~@r^TWo+I6Y|%EM8-}oD|BVI&t+9mc8ToR94Xlb4xnsjfNq9P_Lb=NxIf* zqJTgmgJy;747366yzgIRI+MQ=EV<)3&G%W0^(O6JtrqXWrpoE9 z01ca8@E@B0B%F_1g9}V0cC*jwTV7LO1SR3XB!o0yYOfaM*er%)on!2dCDEWB#t8ZB zR91(2z;A=8@4CS9+PSgRGxqHlQ=+#ILqu8029*>TJ^*A#2GZ4dO?=vrX0`5)V&>;c zh*lJ5Ju7R8tc#e`5T#`j1z3!ip+DNc^3DbSR87tnK2K}k+5Qa?g{Z&*t(Fb!jht%| zuBmMM#W||(bm+vncZ_N*(A)9=G(%1o+XbAcIBjh=SyUcIqUlJ({O9R9Y@kM{gW5~A^(IQ*Vk zw<^Q^8{rY2W(bnn#-$esu~-coU^N%7+%)V!fI%l8tQ9msu^ED7r|;6nV4u@ z(z>K!Y;2&esdm}a^qlRS@<>6aW8JKMCUXqd_S*OsroI1`1;a80Mj2E?)Lw%{T=FTU zZgg0LvTjIS7Uj7Hqc@qQ#yWUt9QSh|6mY(XNBy_9tR7!`p1pLdIeb;dGK(Uw7a77^y-44aV7vI{c50V;w7Ubx&f?0MyS^ajj~W#D!9Sr_4h{V4tLI&8h+P7kS>wVJg!MIf>QdX0~e>nGeG>d-L z@f?z48bMytQe=*Q5G=jk_FYcJ-U>}?LgQobKyAYkUYX}5S)S*Gz={_Cs!eVeG5{<< zF=4za!YPCVj$RE{R1!?r9R*fILT|vpXsw{L>c@d0jj_zmEb5Kci;iD0!UmE(KS4S? z3}`u;IPrPG9z1VvAa(P5`qhwMYT}ZuKFGB@)$;-#mF|O2WIxU)+8qYmaDSRO=CR+h z|EZvm-Z$|b>0Z#ofIdnVYDrX-*@OaSAdJ2UStA+S=v6C7f-ra3$kCZigC;^rC_O7$ zagHh{0pK^(EY~1OQ68v42;!Q%@wBwDwa*T3jX6GRvAOP22A ziWG~CDt~C|t{H!cE~Y{8LKJX+AV01@dRsQTVkwby&2K@G2SBp{JFnE2s6EdS`UciW zn#is%Ye~iAV{d4JCjD(Ig!8rQ=P(W2(SqRqql3zg%~1RgsKw`!L{-(j5XcqEPUy}} zEpEK^(&G*x(Ncnyx0Thng?(f2z2}B2#`cyK<>gkk#v$AF^)|mBCx))>BS7-=W9GFt z{*NxTU2W8_^b;-!e0uZGi#wOFPW;HFHOS`q+7>io!0SV7`D#7BOU>Fc@=tJq$4piO z2Tdb~Fn~h~%;vDq*#MjN4f)fnZ_oL|uO+KQn##@iA0~Bxb#h_29Si^|TA8`K@h@+~ zC>vMx6vWw_3Dc;E9uIWoL&jXvha6>5yo;v*h`NBmcV(u93rBy2a_f)OJ{6SY47s1U z$K?C;Q;32X+G&dWl6-Q>%yDVd&F~L77QnqDO+@T7v)(I|BpI{siRNya5J?An=z;TD zgX|GQg*fcb=-8t-Mx4K9z$Ir}=1bScnM?n8=T2N$!?M+m;w-ihp0ClQes#`1fGdYZ* zl=nd|$+*6SBA5-3DXbb6gQ(h}gIjItya6daM?I&J!Mq*|EqEx}g1gc4gv8;O91lEUBHfMHBO2 zza~dd(l3}L8JvbaqSzFjkF&FpdK4RGm8*7xR3N!FZai@!O3BIH|hmZ^%bedpUl? z7L~9HA1~0Y9H!rgM+0a=19aBcw|WS*D0;2v|iqk46s zicVLZ_WM0mGwzlQ86`uG1bXgR$`>ya^rPwZx2&OKnsKZXdMmn@u2H2v&Kql$`!V$H z5e_7|GSs-T-QF41%p1^Z;~Z8Q{>&OzCn`~e*B;4>Wz=WK+33}l7Bu9M@D@^jfFNzY6 ztds2PFLI#)#3^J67#2uDESvX8DYPf6x4^^#3S35N0M_YdMpjF`BWiEMI{U=)h%s!~ z42ehcE$YjVbeG%d60rrgNt<Fwk{5OS(oXQM*{pQq6nSinCtSv6Wb2T9pDm z`-7U8-;r4L<-}h4ljo;E+qc?33})ApKoA7m`|hQs`taEH zt>Dfw4zonHEafrPzOtz=4f8KUR>IAjL~M?{4>=wFAxbS#u$?E=1X}ghYsGffm$R2% zRguCh(EH!3Z*^DZi$%d@g#|Cc4b?-3tw+iV_j}^GbTmt@?ky&M&G`A3BKLilLc@0R z+!tD3UJSP+D5PF#MbqAy&D7}8Z4PIOyE;F`p2g2AEcYs8&c<>?6jwGWTAH_hUk|lm z`IZsHQ6l?|M?P=i;QAFN1?a()w11mgWd_mJ)5owvItxAo@MJQZJlDVQm6=~})8A6R zB#dLKG>2Yr(_V?X^|~jSm(_p3%n+bp zh`ot8cJYdAhuYFp#8(~7u<{$u*x%1>Dv1+Jj#L!Xply@>1K1DiHGRID1MPCft-9hb zLeCS_!2u^o;e;jy9;Ha7F)z2GGY!x~@KH^z98I&Bdf{B#0av;osJN9aZH)Vl*+ zsXV9V?oAK1$vvq;nZ)eGKq+8-_@H_e+|7Coz#$Q(& zE4>>!wG=}u1dW7z;h3S+z|FhN%#5>^Z?}tVK2%*~d021=P|~Evf{X>KVUk`^)6i0WjQ?-L{Q)BP<6+m;PkYVcWhT|3B9|Xrm4|x(q zlhxi=p?f!PupCvne@#hBkb zg6>xQ3m+U|$fJS(M@%Afp6I`MT+S?LkRI^BJ51#lCFf10S;~kacV7}newKsyvkP~H@UftSd#?c z7PdDk=cSrjy*@Rfd*7h%|Av~F;Q^vnA~zw^_w$8AX72Tj*NUW>GeOpeJ}WIyR( z+@=(5Ze`IULBG`NMm@~LQKfM;a(vO?+=rJ!dN7El_PEQ}Uu#ynSfL<kCrr%^U0`I9Zj1ZrzZZ{a z??m4J5^jLfHR46Ot8rkWP%brtc)w!V^nraT^ws_on&$S*NxdD zY3RwJ>CZWlq0OogpI!1iIn7w2~zCzLqzInf~Fp4wfh zvA5`VW+HE6(8AFlZH}pn8Qwokt>%q6^}XgRD&0}SfeQW~O$^O`L( z`on1ShZFRiwQEYDOEqlan5lBs8;tC6Nua37D&5@2=YISBuxCS-rXw=q24S});Y28o zQJ^u8DiXqJYliQwqm&%Q3T3)Movl-n9rqUUE+*+Gv66rq9hf+KVW0Q?CL5lm+(=Cp zK4agaV&&Z)R)?l93rOFbm6jwQ8g_g<1Vssu1OY+7A-iqt$|}4N9?0o;@z!_629z1u zuj|lb@#a5AmrN@8UwvoNO+G3d-#jS!445m#-wc4J?h1!PD;(`vhbB%R`^T<4{kE~y ze)nazhdZ~=rula@Y1w{4YNf1^Ir}fBQ51-61!a6oE`ibeU(xuN=zMrSEgA?{)SPvsh9N?2F4FifR&VPr428u;hawr zZ{TX6Jg6?1?}L!jCyn^9SQp~p)Z9m@bPob!g6EnZo7AvBR?akgMzvmOoMsP*kZ$cc zxmB_|E(f?^gJk8_Mna$_NX-B9w!l*Vmre42gF@86E5Z3*2G2R{9C^-ijyQ*((}FRj ztmmBPOy?Zu?BE^WIcA|*W1c3Wo#ps$DcURX*}%uY&~?~j)gM1+z}!1x`tJc%agMKo zt9e#d+0!7kZ1)k8h<|*4MD$hQG47V%;92P0b=N0Lp4&nm%Sq$Aw4;jwIN4Zgpn*hM z;40*1A17d(Xs}?`~3)osm;W zH8l(+K>#8g^pk3vxG?;Lu;4P-;8=Kf_9pf`^v-pOu~<+M?{kvWPT+l&t&-gL$+Fxf zFc$?z;0&Cgfii`w`ZxR?IL`|&+}yG(KY3jypzLdG{|G4Q^Gh)Bc2vJ7ka(}ADMI*B zF8VWx(e0bI_?B6wi?Ib30WtGcW56SP4GSp~dgnhFR2NdW^O z0DkaIf%0Ux6;TXds`;clh!1{b=de!W6D+3Po@h~3cmR$~$wSs}TIpIEw2LC5#O1Gm z_FP@;fJcq8t@HW(ldaG3^P@8ckK1L0X6y(y-cJvx44wXrSXRikWmMp8Uo~1im`L_% z;AKw*O@(mihA|EQ#p|gx;?#`jik{t4$9P6`Ph4@_o;YPKR3Jn_xfYIL33I8m%7)N0 z&(T7M0-$PRL#F6cMkZuG@Rbsz1=#RJKhd8@zoN670};1(X`v0iogA)Gh$kuqT-wkpu-^Iq8-0 zhiSjMLV!@;&SU#zObOiSdC@?P4-3~e4-2lrn~S$8XZd#(FJBV=_HOX2UuFSQ`<;AW6eqZTCjRNYsC2c>vX3|A8awc1Nk~-65SCQ>D~%09%Y5r@IYuUf8~}{9CDD?{ zbX%?2*Id^{EUOw7o>P+{7!x%avNo8F21^ zUtvZifoZp{z|vRQSSbo09+1t=2a~b+|O170+dOZG&AE4w2UA7i+ z{7_DzUHfc+`Il^_SZx-WJC@PYkiFi_a=56)DA$J4CzKV^`2mISSTppsyn6$IO*Xom zp3B078_wsoE(d7mwN+*3qV$PZd?GpKfS`3y;T!rDLRN3&5^b}SkOkn>WZ%Od0FlgE zlY*RuVaUJ)HT-g$SqAVT`_X~2887LN(vJ%6OBc77spK5K6f}xF`LFl_gzwLt>=ab` zMwgWv+sMHH!f_3hTzuCj=kkS#vh1mS!PAh&p{4Cp|2L@!TW^uQhZ2?b4>NcwJ!5}e zmGqRV;qtv@HkFwXSWU{V_#0z&r#uWU=O9yBlGpLHpPj99RmZRpxXvixy05C70mr^e zFOu`V^1=8-#!JuKX)zWpD+)}z@e|P0W%_IJbv}c+1oC`Ntpd>Oh2}R2hf6@{0az4( zq$$&;q4SN_Lk;iY=ZXH-;nd=QE2D^~AsL!k{pqBRV7@SFwZ0y}mmHUB;{k7mzai}I9t|K%yZ zc;ojEOy5B8F>y{KI=!;K(2gb%XK%Z~w1?Q}y;31|@5h(xB{7w_Nj7W^A+JV?YglL9 zKq}lMvxx2E7Q~K5Zh%cs2TaYR9<%8nm-Dzp3G1)rj9tGBcS`t}z4JcJ(;rd-0#*QZ<@jVTJOpKkFwmIF3_rt!HRuozAULh$p1lemn zO=`1-P7mltk^nsj+o9EjZO3sY9z7|1Q0D_r_r2o#> z{c8kGOra;Uxp#DWZ}2&AOp)gJ!8Ujo4G?VKOdIH%TUj}03PJ$PEeK|peEa#R@B3vcINs8M^tZ$B!#M-0tkl%uU2 zhs4Cwxk#2O>GD|#x5O3EQeOHeM|{YLWMm0fSb{>aN^Y+Pu3#CElKONR7%5c>W{lea zm|cpx09YzhN*e{6H(?*gs|yW`t6G49eX{_UJIVeougGHACXO_jdq?=xR{(vRZ~!M* zY(%tZ;9)>Fz(ytVihNlVcoFj`o|k+UYD3Rx%ju@{a+D(LC}p)@_GmKdHA(B@B5w}H zu#xf2#E4^gd4%0ZN(umQ@8R_9_yKZ*nDMGB>`jYL8gIP&u9jVAGv|3oh!Y(hY{+*O zvoN;ai!HKfHGY>t74eW~JuM6aP3SQE?R5hxPJ*F|CF$9vikwgU# z<@%;T!0aqV7TECjamWn0#CgNMi<(5(>&g;2VYFDd$q!1}W-oAAOaBtS5Dx$>l|)-s zxYM0`=7?H=hO%Zj2MXMdFr&pJnMMo4A-A)Ad{jk?DZ<~Yu*`ms`xRsVBTnM4NjL+V z$naDiKdjA72SABd05TE94rc|;&Vi=@@T7U}pGfb4MR~Pm`lE)gf`9B^VD^iojvvha zdCmO<2C&r*Y{n~jnU9N)ntPJYtMzko=~laMnrsg@EVoCp?B)7(qvDKwX2 zgU46WBCssdf(4Z>npc?htPK99*UGZG;h6+c zxm6^=a*IU3oIx^$b@ln&KsO6LM`KDT!koQeSP}RhD|-8jf@(coVU%6RE5GHd<_E+` zJXsgkBL9jmyO$279N~6b#YNTNFLtM5R@7SmNzRXzhUKnQciq=^P=?T zUiQqwqhE+@xQk(OIdkO-Iz1``gdP>(r2AT`o^|q76NyfLnDUB|27Qf03U=!QQFbI? zHsF>nz{W*|N`_tj!bAnY!GswnPhi@x+nW+#8%R&K9Ir&Baxt3`!i|6>m2OC$D;BgQ zLC_=LzuxU9G&kE4CX`(N4K>d@H}gYw6n2&za^F1)^mvpS{V;)%>=OF++)#86*nt9M z4AF`h*_&v_&fSR(V$=VwEPm1(+t5m=FY z$%Ft={c#JHb3J5I_J;=EmHhjkXUk5~oJuVA4&=XE49#Bdk@_H3?>&mn9c<+;UA7Sm z$dt2Goi!6p3L_eZ;vK`lrnRP20x(2_$*NeWfcRB1@P!h=x1WqFl}A*VwPf^#*MM>E92{ z3=SO`7=ZoOVInCb`54e3{!_O+C3O+#fFxODAR}Sv_BK#+p}h4>r;%1#>fR4MZGhB_lWnLb&VhW5akCJ+j*$jA6_9*dI9?x)MiR0vqjNF5Ymz2lOd7Rhmy#K>UzHUee zAAbE)5-71@+CRm5pC6w5}i26|6zM-kdy?ig}l=LG0=zI)6 z(gh=FfQ=|?&WiOiN`|weiHzl?1h1Z?YBzBKBnt!93Sw@YYte(k%jTNun!*B^0QAyD zQb*yalkRY&Ev15hWF?!^fIY65pE`wFlFp87$+2n2C^%sPi=-<+H$updoZtkCfdc=P z0B9713ftK^93r^F)eGB)s}G-UbnpI6#;9QOC@531g!`VsnH*jPF;KrRojYMjISW&} z&%ZG9mGAEUP0F9I@}4O}s<}@=kbUBMG*9>H3a?C5YUxDhm}R;vxYaPYUjs-NpC!(Q z?eSD3#B_1`8igkwnVY&i?Dt<85_#SGx4PxtM5BSK=jGn(k2SdLvn40QE7D65VVDVO zV9APw4#OOZ7Zo=c>nu(A5b1=L%NO;L6o~Lg;bVlt!dPNETTg!&e(jdh0n{RU$lulspS8tHn4^=N+Dln-$b%z0f%%p{&7?!0l77AF(tq zIPq%C+HY)V5t+^3)K((YCNh2kUFKg{Ho0C0-#L_PX!2|?U~H~hZ1!D7fMhEAHWN)5(L+|CA>hE4si}QUnX6HuzPUg^=^Fw zWLh!q+7f*zS+@kC7=d){pKoSsM-BDc%JuE+@y3;p$k2*kF4vlY6`CK~WL zeF_p*Uf8O2#u?s+-iajn1;C-W1&Bd65z3Gk8YK%NRF8&uJ#wU1S5nD#5)Kz{ey7Me z_Rd?pIj8tt-KPE7>DRO2HQKO=`1y}}jC^&aWnySJ3l%^fN!N{idH%SV6xVQeTW!l= zvE*86{&cenc9)%Qc3QnzzY*t+>t^R~Vl|?7io84@IYsMeO`Rsnk(7kO+T~I)6x1RN z;|e&s)FLoQ7=e*9KJT?zKx7^3gt*w<)i~&D{yB$K40p5W>-@Mu<#$6#P%}0DhZUp% z6wi5oXAYZT*_}6G0Flle(51y1)kLW_FoA8yi*I6`ISB1ADLN-(-Bk0&ugrlF7j#m+ zyRahR=y3s{fkCtwVqi<9U93X;z1+9#8D5{@|#e_D(SayJLdcdLd z`TVWb4am=qd?g>f7yF#rA&OJrR{j-)q0rv$oX&b~j@j8!{Y)}c;3jsN3Yax?57QcW z{Fx(h;^$AF#E$LzTi%&m?%LFk93FS}<0d~E-ZFA^7U4906Y3>ZjSi-(6zaKWEFdSL zT?a|JgO3seXhr5$wLw`o5Kq3S$Z9oO&&dY?RI-RgOe57bkhl3Cs*Tx8uoVKO92{T< z`j!&KJN9p()ktcr2bWHxqzjCoaC*lEk7`_E-w&Ps#Q`uP3ocbDDr(P>QUEE&r&lLoWA5`lwbN7(~>} zi!KmWY%K+l0cGHq33f!8c?mq`+R~&6@A95e-1lY6ZflZ;Z^#b+qWkaJU3e4WA#fGgC4 zdY!$Uqj%Xp#Cv~YJB6s2vH>e0S5d&I z7n)q5A1?}6rs;C{5Shn1Iv%U{nB04cX0O3UttYczTSVjqF}0vZZ|7NivAO}QH=eS` zac_lN8hQXbCMK3p;){b%TfAPiZ;tB!N^23=ewxNY0zZH6*N8^SP^<9i7XFC@kiZ_b zGgJ^t+K>;0ydceuGRWK{_{}wR8T_ygfowo#I_x>0AOMvs1lpH$oE$jCabsZ!K(=jy z%1n75*p(-bU*Y@d%_*7raOVoIz4n*CE=sn#W&*WmeXJAF{%5NnZWP`{4VY(87w(k? zna1*9nRGe|wPD7WK_Tu{YrXyctGXCRLmB}Wom4&{X2;uxj__fdE9OQIi;|Mqm*DNc zstPF;r!Trj0z4k&5YkYB-iL`)_E8f^SG_Ds)ducTNE`P_hX%bEeA=l$`+n!&&>ltv z#wf*MzPv!;e84ceOvj z4I{k$zq&QsoFDxr7t^Vy@z=6A_9_tOC|O;ARYV2orA}9OiLVy)aeq=e*K#XuMse@N zv)5KagMWLU(?hxR`%*O>=%-%E^_)URyuZ?S@Dm3gl_9vZ{e8|26yw|r@wlezN*`_nq};Vu}*jD@d!z*xK^aZ?ORhRxI9!V=U<+k~)rvI&A;bF zS?Mf?PqMd6)`5*GQ&{%+@QoDep_Sri^ixmYF`GRw{gR{)Oghh#Jn0|YTh_U8LDeHF zzBR{)PF0$0>6WU*c997NaBdqwWTHNX%Q8dMp!R^vxt!Tk4Pb$Ediz?QLzmOLCgqj9 zz#!72>8xqWAHcVOG zo!wCCwZ>PYs`yL7e^2yQz|vk-JM<#O%Z?5$Q&V%h-{f5^=ZQN0$|DzhxBW=8Rj}Vo z^|2a{N8Oi7{rd-ZrDp;}ay4l-tb@0lW;Q212)eTDO*tR!o4#r_?!3GJ$u#Mr$iRFb zdwKG3$ITZOU~97@UIn7VsGCS~mre?YX-#AaKY*+ihB}ZmzAF#&CVdok@$TySq4MG|3p%0;fztZG%I;?Q{8lxLJYXcSD)(wy|is>KLhM1Kl?bS$A5J5 zM(U`dSp3dCYfdGv;Foyv3N zwxeMm%8`-+xUeW#lBiwv_1`20Qws>d-iGD6#%^JR9&FCM%laqRCrD+RbrYeYnKbGs zQnc0chk1zN@7GWYu`G5g6UCLF`+r8dkMJKkl@8rsgcDb^7FwMW8t|~QNOZdE-OCC9 z(u0;J!Vd~~?DIfZje_Wb_oZ!xH?ghSn#v0{vP?&!i`Wo_fE6W^DiCcb_2&eLoi~{XD0kko<@nIy^sw)YVZ8s?yDie>90`G^Iyv0&!+bVS-pEYoxB6Linac^J^tFS*hBBH z&lIuQ+xsb^u$)8~6_h7!&9aP}2uT9-+^W|k<()A=d_uh;6xR6&TPWEAyIc3-TOEYR zZWiW8gdi58?LILK-!hx+eywDp=l4&V^d!7lWMO6pY_J&Hr`B^_5|rv4&2xl63Rb^Zm^=g{U#|;E%SW2^^)2{6)sCKzlQ@bi1T6oUnjXUJ3Vy)N!(lMUbnW zJAIKu4#VZoc5S>X$GP|0=Wa-eowfe_GdxQ7?V{nX@p>oKbXp5%ni8xp<@`AN^S9q8 z!q4K_52>ChHcXp%hJZTusP!fA`tMSi$U-ZU!P{o)*AKx=`PdZL?Ypcb6L!pX?eq2UTx1XGe zmkbr9?Hd^)B~t|CN+pCaV~VMvjFX+JggIU4&!TtDlZ&OK12K;jet?aM)$Sros;}liSzaYdy^hs0XTwasfd*MVhXF`>bw( zTv`F%pO}Kql&qg6u9dWU0fqS#sc5*Nev zjT=|(2Gt@$6Z*(XQMY_OvT``8K7n&(Lp#lg*Rr`w zR2D{-HwJS{5~&;ydS?i+gI?`P^T}1&&RLFqt4!ADjCJO;nKQl74Z28+Bpq8lVN91e zz_c^v<$asJ)6ZD&1^pwgSF62ki{x1+#He#5Lbgxk z+1k&8-XVrBnBA}$UTK67d5ywNKi$IQ;9Nu%s@AljPp||z;1X$WT{=%w;n@FsHJT<_ z`J8Ho*Dm8Rb92Kt(B4q4s!E{FtHIo=$j%s~H<@Tt9~D#GK;_>00@g#&lw7Y_Y`-G6?``L}JaKEbMc6`JOem(drN z0}s5MYM~VUXQAPK;4iZ(@m`YCZhTOjTa??wtM4Lz{#&>wA6B~(o;z?fPuQ#sd24z; zaA>k1F~0MPe59eT{QX`K_ytOaJusl3I*|X0pdb{Ug9O84jT-pD#Jc?e#N3*OtDK zvB^dPnX3sAz;ztuAff-NaWXMwe3#$F4C*Zn0}T1%GO4t0DD;fg?Io@Aji(4hlpe~* zgoYNd!L3bk0UkG93L;HMEXT7l@{5HbcYh_aFS}H_^}4KWMKNh@xAs4teRC?i@$-!x zee1suJN9q1Y4w*Gl5$*>G}l|syTnJ&Ce=81SF-czUlfc7-#oo*7=2sO_iqqy?Lh!T z^RuUN?#6}P`Y3>pLoqSUfPjQ7UtQKVaB(MwK`I0Z%w`Ds|EJe@_`j%y2H1^13l)0A z1tJux=Q`(F=j!KrAX0G&yi-1xJ68m+(hj7yENOx!VP1Kt;TzvBM>}z!xZIZSc8UaQ zBrXq)JgxB%7#p*+0O3QY_Xxm7K367pL0Gm`=qJzYjs5mRk&*`IhruyQ=_%?-cXYNWSnu(sogV8RPmSwCLtE<)0VITg3-a3VUAUP-3S$LvN>4`bIt{jg z-)4PGkE35lidM{!U}b8evn=X3&PJf)Ru+7j$hPh1-7iFUqd@S``{~^6*No#aALrQB z-y;2$Ycf`R&n%x;-~D`BQReZ!nAhir#M1z1z#;W>C#0JHJj=YEExm#N4Q={zn{nh~YxrX!7d+M>xI%X6G zHnG8~cNxj-WC@`}bM3-Cf@sY1WNFW$=USwDR}y^YDZD=D{TL4sSWOIl(*AoqUJD@R zE%j<>@;P(vSB)3smm3?g!U1gC5DZxSdLJ=#%8#YFQP_pdRbb+!IffAzZ(z1`HR&7!a;*pGYR5Bc$uz5JO$ zlKh*$6WcrApQ96}vwsgwe4J`$xV?S%{}K3D z&!>B!G1ogRJUu}tFz!`k(Z_S|y3Yqe%TeuW)6H_}apjkIK-|Vx#w)nf6>on9NsN&d z;FA^=ividm`ZI~Kc=MTeDrO%59ohIe{tw2Ja`;b$C1vKpFSAq;+`x*ALg1*;W<&2n znz2~B+1Ry`zfQOHt}5!@e;xp}9H~%f1D>aTkg@A?`CbO^Um5h5Zm&9DuUfiy6j=Et z>f~YZn+^3}Gt;{4s3olf+7OQ76@Ry=3E>;<_U%=l=RWgy&B^TEDmgoeQ?r)8VS6GU zC`RN9xveC54^{sS86{;VQxNh?%tUBip(Csu0*r-oQ-L^0F|Xi?lKEjm(|>i#FXf#% za@(D9G}y07$|l=B7N|@ZjzXe8fl1r*P_ns~b$W%1f(+rQyQ`*?^4q^Z`8EPxJ2f~| zP2NX7`)YSX1h?X%H)CP2DG;kKRVpt2CFc4w4raOVT1sa8sBs@L8R$d^%DkF!f|aSm zoswRK^_rngIcyOLIyG^UE%9aJ0?g?)d@Op|D@=7M>d^?_vo(gT+e-0HdlY+ z8ztFMr?OxB>zs)KbJ(LaAGG-GHS8JS006^0(UuAf*8E{%IuNi2+mI&A=WTJ`ugW5| zjo(6TxCLbROSDeJzP|JP<@=y1iyF7at1q(~SgjIn3xU2u^)tWNe#iO!Q}bLj)G~eO zzB2dj`ULD&>#ODO-y0{RDsPz0evO~HYL}+>yHamLXO^d5e-(J^>_jv&_bl%fn&Y1; zYv9M*h5@3)sjxdfz$;cx6kryMwy7!rqd({3Wa&bn*4C z-~JG>2JoZYAWOwnOe6>4Q`ZW9TB!vCD`0{#pOJ`Bx5oMT=o^H)ZebX zTl8NyrWc9cboyoYGYuk1xk(^j^AD|2pjFdqgSAD&GL&5E~Y?DlNb_lIv)5O>Evs+8%R+D8jCOlab z;u4x?z`gQMT~`zZKSaYGmA-9jJr?jT4J+6Un;AbHot1s_JNrW7=cTvL9k#a~q(qdI zOd)^$d;Iu8nA)XB`Qkky%FDr%mRzcSXUeT{LME#? zo$ozE>sexcL%ru6+S%$Va(&8E86S%VwHX!@w8R9mB0)S$_d1-Lo>rV*D~*WH!&jXVrc`P zgnM2=_VeiKA+3_SCZ>OuDM_kGCH?j9UkN^yta?gfgwJHg#OSfE%b6beBKv`B(OaWC#r zyjY7Cr+CpXzxTbh-pb0o_wTdj?3vkT&px30c*k;S4Xi_68MH$~Y2R%aiiiDikia3M zC#)|`6SsqJXxR5p0ZO80^hWp3j+(O{JU2DfV&FlHp}T!N?nO+sVC8iE+m4hirX_4t zO@K2)3Db?wxR8!yCsNyqjJ_dHVt3Z7gASqHF4$kH8PP{ zPFCTq$KfwH(03fXV5&HmtgHF~d1s*9`iXh!rkd*Q(dh@#ycSn{xkVkRPioRqTs2pw z8sQe!DViEs*ojwY%IK8`d~pE$l=OfsG!!!-1GkdUGzKgh1SSNX=_8cb^aKU@?;)rA*Z3wx;)#y`V*+lryaOQHc|T$m*rCi zD^~T-0w9L@vAgx@-!*mww786Y+zgEszGh`n{S=zgRH%cGdBH7eC9>apsl0iXA@yhz z(o}JKV=zCydN5L{ArmUeHOns45H6ix^nyHJqi-UAKGm*fuM8ze+p8H?&|Hhq%iVMt z?sGhK*)q%j@%4o)e+!S5EE*f&MS|oeQSAmp0c*98-Af;ljh@gLaSx#DK%n}=X?NFq z{tQrB|HGyvWZ^w>11D)4AX#Bi&;#Gf{slUBQC*Y3p=R}r_)*tCHXavP>n`5qTL-EE z;6YQZUh>N@?Px@~Cn3H;xQ^z`%IL6(IPyi@=mk<|DlFe#%{ zTeM*Ol2zuPdRF{+j;+dpg_tYFwEM0RXvANZSY*6<YwySq@Irgs#(!)YB zOM>EToI}1=CrcTC)G!lE;=ZF|g-~L5#pkW@{#uRwE>@h|x{w$-jD(6k%>NQdkkv~# zE>1ts${(i{(<(&KD01Io^*!v|p4;uwrRbV@uaKPlGj5!U?}9=%O8z!Ej=Lw;8jf9w%nzpZmbfJSJ=U}&R38!*Wy^!y zfi!Kyq}+v@=&vA+fBm996;A7W!nkL0fqkeE z#cqWytoazePhdn@$jNiWMyWT-2DxW4cuJzd*+7S2ITtEw0qt;Y3qbADzFpl*Cg7RW zhjFF1Rg1Y!a+`1c)+fi)KxJKNeK@DU-$Cy%EYT>gPp%hrO};8fhv2V3b4kX zoF#sBN)Y`mpeob?tp$t7yY@XzRl6KQ$H)%5sU?YyPDW$*4JSqwX?rDYmp-X&kFF@+n4PW^9nSSo>t5@3;rLNdfBh8%{J$=2 ztaX+4kuKD~Yu~J@td8Q%#7mZJPG7JL?J^MAef$w!3nbHt@`=J;uDfTi`C`*Ds*ul}xY+o-gG5aI@% znS2)G_M3SX>zC?;Yj1wtZw-2VI&Eb)lS#fu6~}f#iRjeB6g-%u62RWZR>iXf)Z!q} z&J|Hek;G@mA1x#u^;xU03+7D}{NXdhg2sN;mTcAS!c)+O(WI%ZA|%g7i+Td#&RtA` zK-R<`y9pO-eN~Kn7Mt`O5&IvV*?ZTU8sN;X1P$3~IOGDoZ*;zx|&ls5Q2PCGw zN%{^h0`|{!5I`cZZMvc`K^JAoeFcv&E=oR~55gsvjPB}-h$D$5{S0%Z{i5XRf0bCe zP1?hbF12#HzV=gw`qyDMPqlPRWV-00J8sbAe53xM`A3P0@{!7-&P(7xb_LO_f!L@c z;`4)Lj+k288AiE;4Q{D+;>2U>oRJSbLR4ymOF@%=-hANg>HBv1lfZLER$5_tw8uKi zhpRi<6VT^=4OYQ&5tnH?|EbwB)w?%-)2i0K85yMcm&5EYV~ zs&soWJnc5}81Jd49Q{f?h;RJE6h_xn8WUcOm^;V-5~%I|F*I?V8mt{Q>75jET2;bzw?MUSH z`+Rqaum< zlZU9RjOBnF(OpkH3SA$(^z}CK^f7-7oV-$cxi~P)71h0-J2ek3qf(qKvPB#?JX+Q9 z#}mYP##O!j`3;26r_Vp(k6ryYzn6>YLTD8AyQY3`kpX-onu7=cf$-Og%03a?lK(Hc zQvZMCiWHJu`Skd8gAPfm@FVFIaU_}YAIZXuBwHkrU;IddMY1b?^@`}WOKK%?CGbTe+nijvl*BFIx_d5;jAFG&P8v z8h%p|xr%TWlQA(K_Ai8}-{i0Wg$n*KgFVY)LE_SC?SZ|(JKPYqI~I1fowVo!F38u0 z3m=2l5X5JMDsyHy+n&FBqKEYt*N<$E-Hr;?WEo6!fs`Wn{-we~`F82zq2)y2bMJq< zFA;r)w=SKi7Rq?<3+1r0hjz6MekTupn(N4uQJB!wksyq1VdI!hH0kNP6se23M`qjnsv(U#7K zVxy;3?mw=jd2@`MTFja!h0iwNZYBZjLLxMRJn%m|xruneb2f3BxVhFcyzqP7Z71Hp zV)>87;-;>niiv|zWryi~|J9A!Yi}L(HFN^ZP(DN1tyINj;U82*$;I%BxgrZ}m~7U$kP3BaJ{}cOx{n8p}_m{M9mAE47F<;N^Baafa0p&<6E-YImiDWuuIJ z_j`AU2*qbJ%0qQR?OZ33pF{p6p){J+=;TguWTBM$(AecxO0O`9XV6<(?H3u=$- z$GSj_T$R+y7}AK$QPWT_<%JJ8f?0vUP27#9q7 z3T+9^v)EO5uGk1ACFrJ80|1Yc-LE3LjkuL3U2>~(&dFtbZ4_4Q`#cOe1HMpXvcR(g zn&alfVue92xUL_T2ejFA9lUr5vU(G;XaPgm#8ls3)Kt#Jd`^%JMdzaCT}t+Lf}oID z*H9@)KyZ}v>u__6CDbT%&iuq|I@qB;I{l23!5=lM)exHCX0WEnDqR|k+$M)=tBcOfx&xatXga>ANgD@z2c=jT;v+Kc?vxy-9f!I%@l*48@(DJ7^sNd%45Y1sy*62M*(Dt29*F3V zuva9=SpBj7J+PkBHDJa@Irj@cqm2%+j!{4hlV3TpZQ5tWSmwk`po>jSIyNNJl)&Qy z6&^8eoYPn8Iv6UtH5^D$AwEOAoL!~@l{WjctLoFi+MZkS2jp+A6)=g`r>#eMXqVl> zChqL7$nRWVgvFnK7J%I}_SE(=E`Qui_;Ele7d)m(DT~qobag1kTTRH5x(K!C*c(1k zJaSny9U+!k^o0EiNW2T8A@ymvx?QghT=l__SZtSBe);*?M&tw%;vF|KQhuN>A7ueZ zNK5nQAWr_KkV-J-gaYWa)XihfLa(WfK>>8dcjSmnd(%)T@g!I>NGYY zYjaW3(fz7V-gt1Ar3Bw8u9`)dQ@QA~{lshfwp37*L8!vT7{X58Ii`YUE31vor=o%i z=mlVN^3B_8tBR}UA8uqVn54&j_()8{DC9^pT)&aA>``|C%m)jdtQC^Ihg$2$j7Ke(%I4wkGtx#e%E zAfsP0Q;RRzO#c}=?#;Q)V;zcR{YEpu@GbajA%nL&o8KLHH2>3l)?XnXEgm-4<9~W_ zj^caVF0yh5!dJ3+}-fNBi zoqy{|;dy-5_HSgiz5mQF^t{aL?)uA98{S*T#o?R0${Y_^-ir>Fwe{_SWu~<~yd3<$ zvIgz#h`0JbOtyV^Xqy|b7Iz$vC10FpLHeIuT}36X>Mr)8UyL`Vg4`eSM?k)NVUvPF z<7vn7h?nS*B`Yn4jkiLhl`1oB#ObK@Rr9;0sM)cl=n?UfYgk?zfBf!ogtlmXz*Y<= zv`boBbIGSmQ|<#_0T{#U0z+;S%2huR?99{v$gEz=P(k9y72*{A)~TD_IZ{szzwnUq z`+QSy@VEDE9bB#ptER`rR<_(|RDKQ=Iq(|16@2_x{cIFG0KU26gf|F03OoYTidq0r ziQKzLGy{P00ULFcUW@OyMvY+-RiPqj!l=U#y+?i6NIwqK?3%hD%A(ITTb7c1)rv+8R4tT_YTyK=(rHYw<{46i1oCi2vC zMm`!hxs>xFGa zhN}uM_VI#{vH>!e!MC3Un+QW;soSI7z9+TM8*3)wr1ZTrbu)4ZCLc!7!sw_~H zYQ0H7cZ#op4t0A#XkkW_!yi51gv3zS(!@~P>uGB-K@c7IE^#dH%gU^O_A-C_%QpBr z`dl~v~T$)GS$Si3$ikOvEUL>$mc(B8)$o>xl42+b75k%Vj0k>!&*)A zK}ENV=QNW5F#1C#_dTkp)PerG^#ZNklxhAn0x_^arnY49~&*4?4nFd zLFt2~RNOcdK_?#m%EYd^7QgQ$rLXmBRsh0-IGYJC33Ax?JOmCYL%;_|96^CnHPzxd z^H9cvsjdu;;jj1l8zbo7_pFScc?A#M9EF93fYq!vNgWlBlzNoO6V*qrGEkWp3sj%H zLY!z2&c??~xp~K~*~1+SxdkKRxs{(<&HOQ!f(PwCw70NXBSK#CsQ`+1(stQ05?N}- zShbw3iFMzFU6Mu6tH`1h#IFu&@!e~D$<_J~&_3N_1e_FZh|DE7H=q%7yIoP(G-4y$ z2{izKA>KF4rAmTs=%&Qs2$)iF#Y}G$pVE1?y2|Ul`-rm8>|p%!J%r!3M#71+Qx}*1 zZ3$l0;SWj;FFV!fx>@?n#8j+dD!>RE{?BM-8-`3$Gz&1d{-|57K{_$p87}U3ZPcC) z!hu_3158Uc6_kn0-pz%Hc%pA7KeSTMgZ{v~Z{P=QyQT+zPo|71vqrytLl#*>AG-Dv z);{uz!P{&^wok%-+Z$=>-8;^nbmd)*+AaFQHvOm6AH}O9o}^tC&NntH$sXFf1f~c> zIK+6@+7sRM(K;)t5BkRWB+5v;^fGRFAd?(UX7MLhxe~d- zC06O-Duf3)leR^q2FT{2pdgdMEzz%5xs3v-h3lZyc1{=M9@8R}<{H@}=-~|-yOD3q zAZ=U?^s?{)vMtS%NGtEtWNk-gTk+!xt}%zx*L8ojkDF;j4!=v@xYQ`+cBNg&;j z4*bL`guWOqeV6kGpk14zMwxlRv^2DKUb95>ZnAeF;b$z|IU#=$j9P0^E5xM5qb8nN2b!$P&>Wv_!Twm~rA2TerR@ zGSVtcHXbsS**OZZKeq)EO(Wb&;mv@=wSh;wq60K=1o+hR)5w9FPhg~2G>i9(j2h4z z&@zkja7ShL=PqzS>CjH|OQV3S1v?Aq`_q>Jd%mkn;gSGzb~?Eyt_1S)yDYbFI%xDm zma+wJ0oc;<=9ePFr=>l53@(FW+ZS~e0_Cov(Ci7_3w1si_y^WS{ctQF)%vx3ejOgv!}F~>a8vv` z*^l z9DqqHk*x8>5w{-`*iYz$k7>J-MuEBd7887xipBv!jj4Y%nTBTlP&(|ez(NiAs$Z~b zv1q@ff8E&Nx5j5){q<)?N`vdN{)<0r%bE`7#W@|5e~#Avo`kk7jIPa_nB2pCKac)3 zq<@KiO@CTV%9E|vxOaTYviGs*H>x?2>iN})z$$wfDPUKGz`4&Y|B!bUUNV0?-`ILUhPP#gr@m&gdkG<$@k_ECaO}CSb9T=7ZaI^!(WZR zbs{YmXfQ+lyicaI_C7?JS~=%?^~p$rV<@9j-mERBL$rHx|1?P<5JHKUr47?IF2WGD zk;fl?m6#4p@8>y#tUI~9O8F^y0QfrbJ@FHx1y0X#t%2NzK5V3%BOGEal}_+S5uJbMX`tg#Z2(ODYX=ad|Y;N=v)UFJ>4_{R~tsjIMi zys+pp_~FEcDW2k`M)m6G6@t2ml98bn9*yzk&UQseg($j3TnI@i3**N0pfYmO0P4M% zRA^dWMHllW0u9=^l+ba36F=3Ci?xk1H_@rJG&B!Gpyc;#^+CIm<9aU$CoTaUBM}76 zv!}xabwt`Sz^C}I(+!A1iGUFeAczbm1+*gN*w^Ee=^-SwzO@;W7+$MseGc526ru!3 zQ3~;O{#{|0#nSVdy@&Aw<~=ETFbl?okF=f}B2SLz=2(Xa)Ylt?O{RcMo7x&1XVcCdXn4zq1h%~(Ps(-2(CtO(^NI7hJ=PxXg^Y%i=#x&qZ0GsWL zg`yRQ7>7&1)`0q&+<(dy9g}wXuI@OF9 z*iIzN3=|qcqkQfKQzVz1+w8|ib7KSLzB0eLXEj;4lTAbF?52YiZ`jCc9Q7IsZO^fpB}w&ivmgD zo~G*DDv?kH(y}YE+jAqdQwF$x;KEv?IRnpK`^)ntR&k;aEcB( za+Kry86Lf#S6N^i0D8{Q9&=v5C|I9kt&ZMxgB~*;rEnj6TGU^hVOVcpmCvCrW zSKgl8gAIkTD4{iIUH$p#Qn(+;(_FKP{cxg})3w@CuXdKh%^FlX{9JmpYIn2I@+xQ| z+4p|c0t0xqZgaYNw4&oC?PtB6y<~=~Om}RW0;X!G`6@K7v2VE^&Y92*VXU4TOEtCtC-?Y_G80TiQ7 zc`MO67myAy$ESF;ZCxmfiaa~~&Jl1kn%;qJUu@#Ylx6ALq;fxAd;OK8!Y0FyB5YjN z5zX9SS}9ClkLkERaG<^S@wmIYD(9GY??8*WQ%fkEKuAwJ=73_)kEL2o^IR{6{UZn` z&9S?>VUPX?#}9=l&yb(t=#Se3Uj;Rco`8UOkMaoUl@6!CeY~(NQKpPRL*o@4~fI?8`>wk`6fJ!9IV zoO&g#;THYTQ@6}jtCv)0YX!Dc1$M?@M{VV7o}r#so=~sg$U!=i4CI)q6ye2mSLvul zmWw5{bNCuOEzQA_jr%{!9ml6@Um^bZiFKBjmO{z1s8MuqYnQNV0o2&Wn>&mgT-GlzaIog9)Uc0Fx3og zmzx^9JB;xW@xE!2@gfh`h3>KYoE!rCW+*HVYxVsxZ}#u_U2)n2y81_4Pa(w8N`EP&?ivwEG%B7rPV zq2QdXC9sFqC9(NLORg3?K(YQ_o7ScX0sc=&GW**#_51^!*@V40Una$;)xGVgOlU~gpDR0QV5(%6&$_jDx*k+MUgoBamKEWgWb`z^~*d z+;=iiPf~Kk%O#iB2hD!aKYCsA&Pk~VhoG>e3+LdcO1n{cF-$j&)EYmPWKz+_$qoe* zJv%K*F6ko$X5j~bZiSbk22q2(biX0mz_|Upif=c!6E8)!&Mlk-BIio<;tNJ{X7d6I z5hS@T>v~eNXu!$K9m?#9in_?)9q{VOUYT9|T3%pjeGcOH3sQ~GX`K~A$Eie)OIv&R z5?`u4MAi9k(}r>+c{*w$XJsa_M3Uj>C#yNxGLxm=27>t7_JSA92O`xS>-T#yi+5fq zIN^%8f3PRv>AqupfbWTa06nD4ej-gMs0C2-GpyTYkbno0qFhYFdx{MTR34}z7TW4e zga?NB^nos%(0=$8sN^iRw~aRst{4wwz39hK%fCV!M8qJ z)t?_q9LZ-mTsd*yp#d01%MbS#%{5@kt~=Z0A3!8uXbM^2IR}AG?@rduzb;U*?mZ0ro9T*e1%L=0v$00k3(+@EKZbKSGQ*ad~`=+7^$db-h&2zM%D zg)I@V^fQM5uR;iMAfSp0NYlDor~TA9n-cehGuTlD1l}|E7R+a@t`f>JZ+0)c0DIq8 z@vd!Os|lAU8n$z=l(aF3vVB{%6i^hH#UN&a@Eb!c68nyTu{v&;ZWt)y`T>tcPWp<# zsG}cT(MD2NiP#@6-}%)#?md3(;0_bW+r;ZuT0)b@g_V^QNa?RFRzL5`O=RfFF3x@5 zw(rumXLi4tf+o|W@;tYk#G`7!ieRk1A3=-CTu;AIp`4YmpdS2I3ussQDyz0cln}a`xLtq747^a zIN&sDS-(0qS6kuNTeK$V3@7(Dq|uB50O!AS@SgY=A+qc+SC~A)yA9BmDgt-VcL-y% zIQ9z(xKdTVE}p(AJ?3zSHhzms3>_6)n5MKB+7>qbQ3R=D>3Bd93XwekE@NMU?40cjXi+k?8sr(Rp{>m zhPpua#Y|R@HZ;~hd0gFNdmLjP)%&}9<)VhbGVHl#gHNWl zOgLT+4=wO2EetQaD3Qa*DyKAPMP_+!ZhBK3ZPvGUWZCRySI686mX6E#`C`Y=%$gBr zLdfgY+A$s`pbIMbhxT%1#td2L=P6ijW1XE?dn-%?P5osrPZ4zcvPoNIP*H^m!U6Os zS}YRZ?9z0O&Wm0+Z`HhnO_w>b0I$gl{JnI6<3=fX5qLB2UlvcF@Xn)E{5MvdZ!;Ls*RN}o4c~Sq<+f= zLu?sG{(41DwfP<@dMz zl#9BFd&g_7^r6gcxIHL0;7dVRfFS|pz|rVhewv6Q8q+e<7uF`O-7ZpH5MI9ufGDU( z#Bf(dSvOhc7aJ)qnrwZ$bjGb?$jVntBIFM~P4y6iR);Br2=vD(LcM7NTxAd8~X*h~OB zjipKm4XDwnt8}EiTpddpGt|ddZY;l`MvqP=62q7w8>bt~1{z=}`lz^bT)(4iL@#7g z?O2&dfU%Dgk{2M&=&VbRpR6_I$1RzuHzlZ=E;p1 zeR;PFz_1{_SVnM#+@h40ImXf8VuCMN))dZ8HZOcFP9a6D>m&9}&;l`gDV*``IU=nc zpu#gw?WxP^v*YRW{lDvR+Q>ixM`a9rr`BgQ)Z1Jivn^ZSjXDF*-qMmK%F|LNdslpb zNMQ={wgXJ$Ws-z|AG26UU|U_ryY;}WKoV{4!&PBXVS#=;Nd7IpF5tUx-t7WcG0D7I zI&6;#ydo#V#-7oGpg%P6I*X zz}uSpmtG7g=hbR3X+cW0QczNtqho_p<&@pjQmYRIf&ino#~r|h$)}q2!J4|ISe7B` zf3I$pW&F<(>aUXu2r1CrJJm5#JI2u<3Zh5!D>8`9aI<9E{h zNxfQ=YP{GMe`^E&Q?lLOaVcT@b#SW9e8sEGdZuX8BwWT++prZ*CCDYY%v9xd7;L3spCKH4{rt5wxW7H*y--on0_4-e(Do|klN)Bmr`kTD6 z$X;rJgTwT7=+Xp}<(2n~lOl|FngetENqeSjD4#y1y&_HxhBmRrZhh=uIb!-8$QafVaND`aW z@yR=E`Uk7NdSeh6HotS=GrxeajA~TVu~3|8WV_M@FS@3y)K-6T5u_<%oP<)#0RqWu zfFxtsLW#s|2?SJbtbl&T$ZT9JbAn{~Y?VUJoJ;!9ph3433J{v$S{SuIC5v%$<`yC% z%+eed|7w)mB~U1bG52dy(ssM2&n8>`o-|8-riuAib@2R+JC$siWPIQTUJhME8*Vv4 zP@%K|uqF7`Gt6E9>`fh0W_b;d{jJ@(#giKN0#n*T%$wI`>0uOJ7wr~#k~;Qx%3@kC ztWg?sJ)b?{_NM~lEv>9IF<%%~EFjrS&3nyshMFT?mI2wYcEFH5{?`}C{p&xR`wtKv zpcZfT3Q2~%B(t{7s*1QvFf~ijRz(2-yku@PTrXm5FlhVud^Z#;sW%Ad`$>;O?Ot2B zm)+D2gQ&AeR85?0DT}MdMrnFoz8cD*x9C9Q=wJWri<@RD#)`t0$C4AQi^k*~FToh| zai))E`2L+CF~MG$DbT>jSv70=Z?2TT0qb;B85yV2-XV+i!ah2ccY6a*n5CPk|V9T=dubcP{ zJE|@9-{Y6`J$xNNe0^r~(==%debDi5JTa5L@x{fp=e^~PSxZyNS$~21{5wBZ_rb=E zzafb0qu>{XUpp0pdEf4f6Yo9m*69|!VAj-&a;j#>{BO~=X>SA2kR^+{0?#JdZ9oqJ zvX`(>`8Hw<9_OcNDnRe6ste};5V@hr1q{?E8KN<`E%zIJ zF}TunNo{QyabJa{^kDP-%0wjuKE>trAPYQpa;-Qxk{D^fB_{QH6OT-~r}G_GwLcir zQ^zNUCEl3fRl#!*_Q)Zpbs1re=Un>Jf@ggX7UldyJy+XDeA@cMgBdnT3m>>KJ`|6_ z-s~-jfgU>;@&jfmpN6x4X>AuvplpJ0F~)sGcfQEDjWq|Tg4$uP| zc7Ki~HgLD>=T#dTrqcGpfzOpt=1KTJEi;f_&SH-jn|gy^e!z*$C=bi8hV_o$Lnpgs zuSx?!{vwy<1OABJ+ra0+`@5Y@e(+$Q>Go6Qb}e($tc$3P2&r&Zt`SbD;(-AFQl z4$^x6@$tGWXU~|S&$5FvXFkFjT2?4~-gWWE_@>!+qL+31(1Q!+3{Xdn_5aOFq7opR zESWS~HR1-L)c_Y;8~`k#c>~A@V_DS(Rlm~uhxzYFy&kz_o);TSZ8K@ATAW|2x~iPZ z=jRYWcQRcubLY2cO%|H!i{alutt)sjg zt;pZk`4;b~FQP+1D-S%K-KgPff*ggjbJvgdeqNN*;ov#{26$1{cyY*XyX(}s(W%*N zJKsbU98-@^!o%*+u4^DvxpeSx#{hql`Zg+$iw2zt`xP}4z1!=p+;oWCCwh4dbV2=f zOaM(bI&!WCYQBw?9w?$a-%2w7UqKh~UqOc`<98Vx3w>wN@R|lpQHm6&B0cgTlJn2s zAN%bjzX<>3L9tG`wQLqT17D|@Q>v^sAfNKHEir)2^WcrK zmnSlKC{x*a5Nj_eb2GS9Q3xvI5mTX1;HS-ZXv$)L=c@u|5P-DPQqdOY=H^z=a{MP^ zFQ0@CFSfYaPj2$19#tpSe~#`4-Yrj({&H-fn9vt__$El87dc#czjgd|LRRE*KXO93 zfj@4rZCUOy=-8@W!#nO$dq;33)cEo!i}+K>Smsg1oqzzYdr5479e zNYvLeSE$}4d)PohX3iVBmbkbCo7B4x`a%fz`D`SG^qY;Yrn_d>p)!T~s`vOk`KM7i z_SpfOS+2=F0LhG4=1fXREc@vENRy#Rwhv>XfGJzDs}cUNf+EVfGZ)%Sv8A{+ajbwb zv2eBkb`7T~NYyO4fuUA+W>)tt0YN6i&Aar3G9XR)=w3c`t#&PeFvlknM= zI*N%epk?xD-}Z^m1noZX;$hFVGy;}Fk8d}}gw{}Ylgc@Y&YGr|<|w$;TCe2!^Nb>Y zJWabgibyPfWqeXIM1+7Ocjh}~P8!XrsFhAu8Wk~Mm*Qxqa081J8DPtJNF4LRD+Y5R zQJ)}8;uli7b==V4PO-h@err?JCp-7xCMqzEj3-xQ|B31e^28dPl&%DRn{MBX#-hm#-)m5JC#kzZpK*&GG7lM>~VaXtN|~i)b-E zHB6S*ak+jIpDau}R~hibN9x=26#W7s8U zLU~(6(hnh!eS1a&VEl4m;D3%`iURn+j53Py6lZ=$cGs>KGNJe0x}16{Eh$LhLBa{S zQ^O>Vc&|#LIFxBX65^&6usE8MbmYm)t z?q_>rtLf{;y-@>J^5YC3V2mYw_Pa_gsp-5h115j5+)JL^r$pcb0SAPV77{6btA|7?yzk;X`lLF_%I-s>)eJvkgkJMHlN zXtJ5QP}x^z2B@+P=x(T&lDuC4$O;45Xf}g>5eNrc10T3ViEybR0S@OSPbE}v?phrH(ea!_)QHSYozLRrel5L$ z8O$G-Zd7_SH97J}-tXGhDoyN~OX5%G0LRVaqua;${ckXqSLepxf^ z%07z1I*qM_!TtE;C=F#Wk++rEoa8~jr)z5$XNHZ+0_?1xsf4Qtf{xAKfuqS(sQy>} zVfugMhb)r(&{|C5r9)b#f{ zm&DJSF|X2pqIllxdFspN6##g_$8GcawJ&47Dw-KS7)TENB~yqFB-gKl6;-^SN^r5 z3)E)wl~NWXR-#egk!;D~SOt8$a^EAM7h!IhpWBp_07Ln>t zz>g(O?vI0%tiI9!c?#4Y>%TA-#E{V_d4+ZxsQVtdI)d9ulCoVA;*yzg>WxHoRsogK zWCrlEZBrux5eH>Q?%=a(cTP9j?Kr~;;cTgmlL-aJ^~B^7puLyNGvwuSj#pPE zzUoE%LADrxcX<)$G4zg`;pu6oPkk+A`95`zwBEVia!^kl105evL8bG<98$U1N&w)3 zLx9$(%-wk1#eg$5WLE7M;T+y8^+(jiq{23-&w;#Yr8P=xzr6GH8sWw>6vPocrV*R_kvcm${30vsY)l8`_nw@D# z7kdn2LmFM@*GLwGMo=~a8 z=Q?02oVfF7KM$T4L{lo1WB-Ql%N>iM1!q}UTLDPDKi~m&f~NkgzBjA-LhZ8pAJC1c zs-Z^AV&39}0L>_!_J%3+UrXTGlEi}y#d!v$1y%$L2#3nGqr^+3tLtwL&Ky`Hk)2Fb zT2OSj5}kB6UX`#_m1oY4f;8bHM6GTWI3YT$Ohu)@)=IBF%t8U=awj^~dqE zEz+|g>j9`lAPe6A+H~a6viI=YkeH|csolmx1nA`DOV@Ut77)-J!^|9X07S@`7f~Nv zXJtH6d_P=~cer%!duWoRgt;PVgw`scu#ypxkdpwyMULAbBW;?gmMyWv@K>QC!Z zcksSr>izMxQakCD>%%P-1~mjq>$A7S zeg=y8lym&BKY2p*G7()nr3jjMJXrHpc4(`G};q69(G`uSXvsLfp8;f}>T*L-irwxry(Xp5dlptC22Ee|o z!201zSa_);b!QZFO^ng^#Fq&Ybv6vcD8^{^9~3i-#&=IJDRY)b#1vI0z6vVst+<7# z%V>0-fHeMX#p%A0vDmJD2gE6Q0|h(GC)2hE_}?GhX@LsRQd&z12)A z^AA5-Hg)!m0A$w-d0RxM4&!@+4^dGULUKX9uGReikEpMXit-KGUO>8)Zj_LYr8@*c z2@w#H?haYHLqb~V4w3Gq8);ZVy1Q9AR{DGRz2AG@-Lq$({d4EsGjrY7%v_ULa$tdM z#1>)gzQz!{1&zh@niX+llZdTt9TujYIli326J5{}>66-jN3{s3IJ`#jXVTbgO2)uy z3u#GYPIg0Y$;odB5nFm6=HDCw|L!>KZui#k9BNncX{tCCpf)}nAxH;CJ~2%1mZFtb z1u?X3r1)uKQ!c0Z?y;8G)(F`~4>&=sKVgd<@_8Wwo5~Mfec8*zHhu9n9-XU{GssBh z!q71eWr-bi_24CEwS0i|#pYlvE6AFx!-Vg2yb=fVRgblTAR?t0&7HY@JDyg*$y$O` z2~wB_J#ybCja6s15Hz~#J`4mZDH5{F3%a_|(Eaojy(RHc9HNY=2OpTd)&rp3$Q9-G zV*$38akwct1O!WXv#TXUaG%ML+X2N^F5ch zyeGGx>D1?SQx!brU(`ZbPmKi`th)|r4h|^ug^%SFUrK9Y$@gDLPh%ST_{R}xYQq3T zWBfbZ`bVja8tWVR*pH@I7~%5axFCgjh6|JN{#u54?lL?Opwm{kbf5rCQ9Kfg0-#mhdWi$5+5J#qO|S z_39Wv8Ga@<^qS!1no3Z;p>;UI9PM+J$<>WKWmyQYz=#(F!uVd>+1I=0s4s7BK=Qq$ z_#eTRhSvR#_3)Jq?GXP^_~v(6#kVy;w5Tm=_0TE^FJ~)h7|i}i4RFQnHO zf8O=zbTmR?SAQnsbCZEpJ`=}m4A*uG^R1{B84z2%FNe2+ zvs?Wmf7D4ue<@>+GK*@=HSaDNnQGZu5J@`^44YRMCcd6$M9~0Y)lBdP;&59J|6iX{FZyQFbGi|X63`D zp^qbXrD(&{)VQ{iNR75ZTxfJQFo67Udf9ou>~UqU+mIEhU5Oa&^jnK<&X{Dui>%nX zZ_MoSdDi1LCFrFXf=a)h-Kl}A7sRL=i1Or zAi4Zeo85w?W#PwSIwVk`>Cmo~=kg2aBpkiAHJmY>Hh#wq zK*mg0mc(&D*Wlt)+);?h#&vTUpl;^bAc70|%mfW+-J`#4om4dU>AtU6vqgM|XiXD2 zch0nD`HHn4?WTOY>r_vF5Gxf8s#WsAa{VgV zeN8$sjCUOLryY=Cr2(vk0$2+e6dH<+cmSAf=AUAy+2-Eb_o)egd$4rD9hM7!r}_9a z0B8X^{aH2l1)+FFhB*!?DB=nKWf~*Wx7&Yw24|myLn2$&XY6ZFNhW?-*U_5fz{#&x z50dSRl927go3G?+wEvuf?8GQQ@7edbmE+uPl0V|W8lWA+M3^uss*1fM0=F*CFf`WY z6??XYNB(9*dlBK3)`EoRYSp3nx7=K|F|Rw`&gxqTK&NB%9C<4~ej*j_KnY28n%Kxw zHR!XC!*GXO=Bvcnrut;sO$@gc1r!umDNQrXgr!uawe=1#gfbT?_KF<@8KlkV+%%Wj z98NcCrf+lOEcqQAdx0U;L9`_udnL*U_|mbcdJ3P$jH4kZe1`UTWZW>ywVKZ3Zyx1Z zEmgel6cPmpOCqGD0eu&`@dvzdPDFk(l-S0$ADL1^8YA-= zXJBOTUb@G;e}tP}gj{l>8w86InTsJlTxOFV%_dwrPH1{eeQ!Hof7hll3rhL$0ab6# z!EB1K%fFam*5XF^0p)sVSn>Dd%A>Djl%CFIdRgNug3pkUy}Ssqj1&#KhP`vxhY?Q8 zPpis8l-oKN7ce}eteKSih%6zU!6m1d>mKIO)7nJ6vE!v7TbBOP@_-idhtEk@Hc=(V z#tn1zG|lIZV$grCy-;YEmNXvem!OW zU4_-n)4@(`c~sU#eVHRf^ZRd)mtWshx=!YbAH-;>4}H|q`-pcm*l*bK4V9hf11gih z^_NO)N3%&oaz+A*-QKx|S2Oeb-Kf~#wR;l^nTj&w2E%HrOY%hv_RU27zSi@;+*WCP z^THu6vXwG<^q3r~L@2s-5bYzw2h<6i`lc2GOUb$ zl$#asY%mtkX#JBj`C)tiuGwUCzG?L++H2h0f9Yh*Bdjb-qW7qZ_QYaz3wAhtN`|0p z*eOVNNegk=EI{qt6B54q$(G7VmUH0hgZ=EMf))-4BbNIIGC-b*T~Pn~uY=U8Kf)Uz zf}SYa)>D*k{5p|eIIJnGa|Qv4h011CK2L}Oe7?cz4X^ebW#bOzwrg+C-KkoYYNcpj zQ)zxrpxBRh=B{O|YML>qggrvNmX06lSmjlTmOtXtSpP8NGft3xqa3EGfco6O$K+Zx7<@Y6lUi93!a9?)A@*KYAkEk}Omm z`T0Q6U#<^%{jvrlFyK#ihc4>>u7&yef2@Wyz-l0^KTJ?PvI8S6+yIyH3g9=M7!6iH z2ZR=QVtiz63tpTAnBqM$ zFhz8!R)IZ}q?7=R-Tr-U+A04EBH#MOsdC_IxJWc<@QAbe*0(!eEVKFPzTFM=RQAe z&Q~T7rKyP%kr#hExwl#HH6P9OH{uJhj)-wzDqnj~rP^|rqKhD*A*Ob?-8$}Qdmd8{ zr@czDL#(bK=-{q79pCqHxORE2b*}Z<8}5^=QTw^MpetYRE_mRGUtH=O-|g49VXstU zU7saY$p#~whoit=7Qu(f^NDsh13*}O$LzZ+wm)a8zJKy(R=23!Hhz|35IW$!v$*sB zl~|}`GcS-1|I4Y%X%(Os)AqlNpyv7cgztEOwn;k4=zFKbY&Vf`&(_7*8i8c&F5mfi ztu3Hm-d50bd8w-Z?c@in{a?9$xuq9Tvuu->CJ83d7^qV2RA#|ehGaRtDu#yBIM2q% zu>P#YrJA&Tvzx%ohGb`nP*bFrVaz&gGMncDP(%)%LD&ncvMo z{HSV29FqSttBo@M&h?aKdqq(pT(r;DnWwz;nw8bDq}5rTze^)Ot4G`6cpbq+i@T(N zzvJtB*WAJ;V8R`pA1l3#Het zj;~bn%WotP%}EKvpyM7Njg!ISYed1x4toa53{IbWG2b4v{U3cxpGokD=Ps*!ntHC^ zzZBzILs6U~Paekr0^L$VXA;i;W*aR`>M||TrNgBd-op!(I4F2)z;==@Zrv60IturT0Sqsl{ z=JS09XMLZlx*Gqo>5Lyw?deTPe=oUDJMZ#T%!{?HH{s{{y65*ag9Vdcm4T(gjsfHQKX#agG^XNuK-lET~zIvXZpS)h-`sK}8Znmm>d7_}%w zC>luoz}XV(#=ZNGxJab0-^RN+;!Axp7NXlgE-2C{y6zXQx~3+}6FR$|Eudhmx;eK# z6@FuWgMtFMB)Z+p$rSiU`*FjmEGO+Me_sq>n)Dd)bX+_F%hBFr#Y7v#xH6ePX+ z{E#396Qz>ZMK)hLJSTg`yc%apPY>g{Y&WoLk>6~#%URU(SzPU}IG?o9VEhLGwS*S( zjCYX&D#|>Wf+cS4g3}CMA@m5V;x_fnW(2L`D6*!CUa+(%@}XT)Vxp z>w^F(df{e(L*XR}xcIr{mNT&gS?ZGiKD!){1oepYyqrgamg?EDi7sfp{(@%iM}Qv`i7rp{9u8vMbPKf>Kv z-?LENzW(t^g`weDp{+D?Surth2fsBdagH(LUv<_FjCaf-R5H~B8Np;{EY?5EUA*km zl|F6~u`c^y_FfDSTb}73v)-&j5cTmv9-L9Gv*DbQZ>1Q0RDXD3ku?uZC z)f_hc@U^D8AN)?Q%_ZvVups6Q&;p%T)^JH2xyxk-Kfmj~drC2FKw!BmWqvbzGDpQi zP40^H0Y)r%ls=MK&`{TY=h@qlEx?fo)p_31(zG-Z`OHPvZVR9 zk~V`11q~Ao=b3M?*dDR_f7c?}bAN1h~c@1zIMC@ICO-BGBkL_Go-LI(P6jmev zvs%vE->Is+itVaTaiq*0P`G)ih+F47pP0rguUwM2XZTh?CJT;R8yWWcgy&2~gSdwd z-Ym1sKZS=pzMI7f^?a=ihJv<^Xt>K?Pr*!4U~dCbcfWBi);=$o&MJSY+R3Rm*buq7gEN3YNbsezrIs6T3=Dys82#t*G)v9^D$tNM{hUH5w-!V6@XD=5Xk?FwPcBUQZyyX$TdHL zoFQpWI;hn0ryH9rAK2hB*ShG4;UeCm%bL)olDWBwv4!j{n7mKibOJ>YeUczf`88R{*$uXeX_0oS4K6P2^T)^P@4RbMqSsNWYLC;2f`Y4 zt%XM)+ap~@rKz!V5;52(x4pjKk62E}$xFwQlgqdoQQ3{lddg{j_bWsr*Y_;TTV4lU zS@#Rr53ays%61(;a|^F<6Ltl?(X|ErHp&lGFKr31eH9c4LCb&-VxPe2JYv)aX)UN10Q+&x!;zA~PJ`oX>4fSv!b-Imikt-6^3F#H&lp45G*GEl+}^ z|8Nble6Qv;V4CQ&4tFso?@{~V)RW)wCoerJoiVQ=#f89@-frmS7hzNFeSf62KOI6i z6hBi%aI{LW%blj*1dnz*n-8acKQ~onHY@VwDS9VZf>wdrNBr0bDZb%L-^?6nc+Gz; zF3N@Hv+F%8t{$s7%<$}Bt>LePma@4fkH!8YQHGSso%U$jv|5$$lQPAfNJx0xZWhaCMNP2M_m&^t9fsh#(A#s{JIeG8phxG-g0 zPWw)zcChJM~ z0XV=2!18R|b3YrM_bF~X>>FerB$Cvo4}`bOS>}uO@fkf4M&&Bbkw-pOvvBi;qyjxH zv%kV6`7|&bmZn5@L0{?`UjY^IQ_fg&o{66UZtI-n!i+wkNQ}-?w??0T*f6F!ieJBNg zlrj)1@>5(&;cz^DGS6r%zDIzk+jF48@vlw-lU{`05R%mL%g(0QsF(r(=TezgsXTci za(BLmJ5KbMk|7xz{}ip&&SOgRJU^5Ymxbg>X>2K}st>3zSXO;1I(@@~+=tmH|DHTN z$BOuUlxqZ@=7Gt0w8%$h>Qxff!Z`E(=?@GAF%UauH^Jn)fxY$Qz~!pkO5!RD-wCA* ziJ%aVY<*t8khFC6Lbo{COc5_l#y6_IIqAPyKu*F5A21smSuHy?W*$Y)FKtI)lNmUg z492jnhue|$ zvU{u!RWC%}WGnWO|Ju?U(=_zdlLi4akm7@J(07Gm)beNl*{BElbR~w%=x-7Ogv}FS z+TgKgyo1(A3AL@V6{XBCHtGe2hC!L77q2Wl(2H~}>gvBc{WF?mY=|p9Zk*9*GJ8Y% zn*@zM)_4iktd!rhlGP1Oy9U;=rKwo}){?VgW#wj?RDiV%$XGAD;o$z2yPjXD?ax_N z$$5NU_cPbn6O79TQ9kG!!*Yko1wXQ&iZMh-~5hZqX7z=Nh_ z;p;h}1E#cRqAM-_aj37HZpQ^IMx^`>C7OLlFcv4Y?{oaBBht}a)sV8>42FnC^3U)W zcGlxYS2enbPVfDT?k_p@2noD6s(3#gHyF7=$K;qIdtj~)>AZK~+pCagtA7}zN@CeK zK!zym8}__JZ*V{XT}c1Gkz(ZkCUxg0EZNqx7Zh~r>{%HPAaNl!D@My>QzD1tH&G}}^NzAVw4($EAZ>43%V+njMx zT%4xu z{!WOIZyirT)Vjb%g zPV{usS*dP!G1)1L&oMGK9r;^VR-Bsh&Kw!&vUU(|Pv70Zkr-OYDu<}(rO^mE8k&lN z_YEeG2dy)XZ>m2Mm?<9)4!vfiNXKXT8>Ljt|3-tL*K|tgdHh$Tu?S)jy9*gPZJy{C zmUJo!X4Rzqc}?gfrHf$Gk#W=kXJJLnw7jE0r)USKToq?r`~+{df`y6ZJ-wv~P4RRK zRI>g-chR^<$B&igE5kS_qiy?+NNVNa+AF`JIWBM`{&Y!I=P>e&L-lCs0dJVm{DZ~* zaos;$o0VlVU+sp96$x#I0%k2hYQ9_PFReot(T4%p=GQZrNnO%MY2I`SfrhRmB)Bjs zx|ONS0OUNo-#vhl90LstKoBiW9F_ltwDwpX2>OZ}cPrr&ei$&S#U(H|DUF=V;l~C? zapMB3Za{`DXS}xquzOt>+ZRqN?w)0dS@P8@cDffL5ht6@zKMMpsl8SDRc)1*jK6xj zhr{Au;!p(cr}L5hp2W2`?%|~f`BJQ?Zpwrd59Ws3I&5!n3%)oWEIe7zTvFe%-Su#| z!iW2yDRj*EA!JL=b_{SYCJ*nqvZ^hPc$-fO@KQK`9))~stIOf?_1+NJKU!CslDKJK zOB}$>=<3k$(}f}@^N5;W?xDM?F;IpM@jz>h@7k(t^&|XqK407Rcap{^8^3=B1-lICF*||JrjOq9$NS}HN?6w{s~_3o}V^<@k^*!%Pf$sp2a9n%ZN%) z6RC> z`BAIF{SS}B`w^t^X#HJORkrfotWkip5 zx@W5%T=te%P(;9L00@Kv*rykuUtWkFh40OmK?*&(8$8+|4ftIaNZH7Z1Pnn6{|k#7RU(wzmFxAXO0`CUTyb2~c&7 zvj|y7S9|ey$!X`oD0^UEpZ?&2-vQS~oL_hfLg56)gea%lH@U+c$0yBVhq6ZQ_cE#u zj`P+$56tg9)eF$;meb=VCIgNh44*qCQ*gS2C^n9#8GY+i>wonfWu2M}AosHCV6To= z-BVsZ^6SRpfVevxS7|0%j7z|d#D*&~=^;V!OGpe-nZ&#=L54Vhnrd*%0mp^UQ!B)5 za7!2)%mV%If{gO%v;j`CQQ9;ft|q^xiykV#C`2rotn}OUZb^K#^H~Y*LCAE?T1^s% zPYM6VmNxZf__cYZlcek8blYUCRc;1I_rAv+;*BGRVo`kBBI`_gJ|I)2_vun6dSIzn z9F`o5?Ec==Mb>qsp~d-dQ>y2vcx1T+y|*>PJZ=8;6=C%-W#5oYJ^H>Eu=sXx;9AJn zLekyfZh52aJtnwMXXNY= z{Yd#iNb1l*fO$cpzFS>A&(x?|FFZ8-OAj5#Nby%|xK2ptD>Z__+yzs$!SfXV1 z#&1T|>(by=pAJ%%x*#n~`?BcqYMeu~iDz-8DFxU=v8 zmto3oXx!{m{3%Gpd4v7y*I&T9imQRXXHei_hix02lv-6t`Ri?|{HS1GvoR%fT4zuS z%FztVpL01#8Z3<2B{nbXAU1hv1`n6Y$C)0BYZM@e`%YDeo4@cfl>k33Pb}W?1&A+b zmHXd0?4rdSpQu#Mpm;J?oxk;A+{a^LV)$|+KxD2gr&C?hXXMDdNmX1a(_C3ucESgD z!$SpFN)b!sw|&mJN-kJ_!Cl_Cdc7zR1BnZP2+ZkZxgwPkVaD>qk<4e2){r@8)(J3kuJ$;J!5b3Ui%H2l-(J zX)dK$mI;1pU9gy*<*8IHr+vUV(Q!t>2EY878(<6~0%C9)$G^6Tr-pd$%`ROjG0~^T z1^RnKI>?;Jw2sciuTVgA{#-F?pyh9v5Z^%0k-CJ;%j=s0t`yaBMa3l zX&anRz#|^lSe-B!PH6<&Unxe6JPI zK+gcTT}JkVTacBVH>2`J`? z@_PPX|8Dg1-u{ajfctpy|4ZfkCCf2nHKSBHD}M07&G+A&v!-6`AtVGhMLZ9Ik!kX< z{r;L2x*|Nu?XdEQa1@yc?#}@oy-PmZ^eDkmO0^$veysq_MzW89w$(pwMN%*7x0|GU z>`%=O+4w8N5M5;Df+(vzy%!0mnLN>Fp@O}oX8y$7B&BShxAn@zDie{6mN6qjKV2Pt z#Pom4MgKVdL4($Sx-nK2?>gSJM51zCZg7sv(jkFZhf|BYg}V zd2jpsGNn#8-uqx0oH;1$!*8Q6m{Syo$OieX7q8BzN=Ug%8@y75fz@`+d*M&@!$3bI4iUjvQRRYRSJz(PK*yhAvGo{8N=J zX%uo@e+;^Z+9jDiBB);=lDSHknra`1;W14ylJHx6V356ilm)?4YBC?VV{ZwIt`{Gy5Hrs$JR&r&G4rZG?5`%k=2FqV z6FAT#%*8)sY9ZJNY>}MM3uW)G(2@IdG3=&fYSl*Y0O%cQ#-levocg zsRR@fAv@FSi>M7%oTnSdXiyY)OZo6$vLGB~d<8Y%=iDFyq9>d5Wf&j+54Z2&mb<=8 z{6y{}@yzlXtO&>e{Mi6N2o*x*NvuL^1!fjgrkhB%e$AZ!(i-{Nr^i+WZC!f#mlSM& z6|t0FZmDQpG1v34{)lx@m>BnO^TyBDeL~p$QjJGGc5+kkP5+Fv#lmHZ)n^z6e}^hX ztJpg9E+(YiebhE(;Og4$b`OH`F4b5J!R@w>Z9U-K!41a`kaaT=%4|~bu<%C6c0oL! zHdBrhlj_@a^RxqN4HQXj++kQ|lbWjj4^cQAjLDc9wK4lu8afwrJFgV9ygY1pKe^EP znRYePO-uCnwA?6)-xn6SIGp5)|>@Tje=I?Ta#}r1k_t`K_XuW3!s6`1YuLPrUXtR z;wJNGp3*wU)T1<-*m(pNFumWVVW^a>NQ@bB($fXj{fwzLNh?J8Kec}b#C)z>)t8^_hjE-q^z>T# ziE#5-$#3yU@TNu6T^_}EB!`x=P!^G6vI0yT50+OSiP1&~1^Y#$^=0mngz(C1OWWx# z#4j>G1e(o!EBCuc;I+HND9E;>Mi7oCu(+Aa=kpjOfTaP30Slv=W)7b@7-X;Sa`9J6UtyoylAc&*zpZr|i2`-UE{)Zyb^ zVH1L|shMJY>00@gCQ4GWm8}?ih72vcdN-FdWQDmr%aeJ|LiT9F#i>qW^_g>WGhINY zG?-6zcxY^{C*y;oE6A$(CdKlCHUiOLmTYti z`q_hnuGDc#S6ZYR@rYz@!M=r3--M`_R8jsWnnRE9Kd3LzDWLSJnv}oiyqaZ43^bhc#Shu+r^EiQlcBxcobO{ zJu00V3MRfvbr~nMO8I_EtWEe;xC$qsut}4t>6Bo-WIXRRw7)x@DaqM^mtvcJ5=P^G z7y7t${!r0-l`hWbb*5!;MKwK%qpXLM(dM~4XxSkN(E)2k+?b!G6jXW+w>kj^X^M#iSHPUR@D%)yX&3QLo5hAW*cB{z!e)f)PAik-nGZk|X*wX^L$1t&ns(uk=N9&|w`4DfJ2kd{2 z4_Cl5IaK0GZ>}`gHf3UJ>*&N?9YGem+#a{1Mv@{HYFh>U_OO28|K{lmUeD1v-+2Kv z4w9TXYn`~EcTrj?pOW|!GQEr;kCF#Wk@6HpqV*a2^~5cHsg2gEs1$k}HuKp3N-r?G z>6|KF@!1*pUifL2u`Kkp6*P*UAwXu5!`h54n*uLIeG(}Twm+_nH}*$gv6m1+sQ>wO zc1ftxxz@jXXUFLik(Be;fyATS@HC-Dx)=TJXuRbk17BZ@nwMG;(@L4MyNKtXYLvFQn2B8x{_CkNJj285=_8H1@ z@Ew_3_&@PInF)Z;gvwI%^|rR<+ujwJr~f+#ne_Eepvj?dL7v{vL^ z{q!gH(!{VA)EdV5M>29I6T_$2IZ~SxFnN5aEGwPT_H0hG*~pw4(OizIx$vGJUtC6N{vKU5%x9oXq&xF2Iqz+ASb>)JjdvUJb9vm*AbWLG|-KTpa+<*D|aD#G4{j-4NygUbB3#=zs8E#s7_wc|W zywfvah;cdZr_A2da*PkYt;3BTxY4+JZLEcx0LK`z>nq5B9AY5CzEFISF(oNhNw5XI zz{UMF`Ng?tid~-M%aq2voDwbr$i~czV()|Y&{!AT2=A_9N`nVhn*tt$;)td$YHOdo z$s}slU1}>j);ZY_rdkP6%JE%UIlaC#3Au(`8B}72Z=O(b!$_8^Rto0oEpCRHSPB!E z3lg8c7X9C5LIl@o?dST3l>E9vDzk zmO84xucq4B)!)#c3fG4o=RQv>Ug!xn`WTgZKzy&Ltk`OKDMvCwt}IuP*azAA7ABL} z5iF5F_YR~T*zduF`2~3m%bwouY~Gk)(TBSL#rUAa3+fy|L3XON?e+#8UCW)4}wFVTky&8Lr$kTy1G^}I=K_KO1~asIn=cvy@Exf z3z}%*qK~eepM*I0uO$T-U&l1H4 z_tdzNq>*B^Ff_tDqQdBg+~}JU>8XBbh+q^Hzh*!NviR)d?E5_~06 z#f(wyOh3c~kKK_({^RY=e(^xy{&kn5uj{-wugjjEDrBoy2YlSpGbMWPN5b&)=%3D+ z%3KgTcZYvhYd{el)j?~IBZy1)mhUiHg)T#e45T02(j2tB^Ix06uUNL`Ki+PREx17S zsmTsBK4@2`4-BUkzvBUnQ7P)%dM`R|5K&NH;x_RqO6+ia@uX4ymsx^E|2v!R$~w&{ zIrU3>#yqbgdy^$S`96Q5K;37MKs#;$KL4)ib-b^v6HBc5lnn$CUi)w|M%WSQb6(}R zxq-%Vw!%`iX-w0XL+S1h3*u@*?VbpEtse#(p6HUUmD3eb#}8iWEu+-gYfeZRACN=z z`{Sx=)V;{;vmQ*xBcF4{iltXT@C0pd(yhEaa|;%_|E47;C@s$wKZf&@+INr;(a^ zONKA%k3?b}A05C$G|irxex=Ucj+VwgXS^LrSgffp9Zk{>!9Q(fd&Q#yZ>_K(?=n1! zv~>%$b*?`k?wRbLan~GreuNVt&Wk<9_>!OfkP{v`aNhfw%f}!^h~Rb%1@jl z30p5{#KhR$932OCm{#%8NNDX1JAEwBhcKm)quc`#d zmPWq&s}ORkTjE{hl`)~_sV1!2ET8?I*#0>I{j(1>^7%Sz`!2=s(m`95pDrh(7lk79 zBi7ZoQg!m#3tjtnae!9jA(c};K3I!+^XA)Q8sGa2->=y* z{W%QTHCD}qxR3-FjSDBBiWark?RK>o2nM-51i2(a%yqA$_CzhH5NuPnf9`p)A+?~S zE>3|pam!mYq#f(8m0%rGu@moSRabiC{^ywX+I_W^s<1$`aam+Ta$q%e$elVedaCs)owSHK(V4$JpnPHqfD$$6Gp(fShT2(;lMlU9oPeD`uU$b~d1MCp zZ8`Is@Ch}&xSLBe!h{y0U*#E$TiFfSIPfr(k_`<(4HPXd5Omu#u7US3n&Nj;@v*Ba z4OyypNsduR$A`J9@R#_sB#FO*AC1B*rpsI33pe77s5if-URGB$Xg$6l^%|8xku^Yl zyQSRD)>!dQ#qTz3a1b&$6{k+sNm{?LIEQJ>S$02`oO>$nMu(z35>;djb3B62_L$65 zh#6*X+)&fxp@Ybt(K@j6_@m==I8J{_M`ah2+)p7dtwpU1_=&t-fb?VqO;RQs^d3?6 zr{V^Fhe_ZtKAIQBF)A-b^$xRpjuA+)olFp zTA3xju2iOw*5cXVKUm4(o34MtBHnd`k;q~dCfk$5X|lyC3QdydK_Z69nGSZWt<6+F zK~mGL)wyHmL`Xdd#m>~Hr};-GWHpDCa%h??IPn~ORmZMf-DGq>m|5HrKf+aS_w*dY zGnV9Z<%)`PARk8R9&zfYXA$Yw_9nX5mt2pLh=9iKjcL(^yILKD7#`kqJ#%uzO>HtO zMla|nM0;DhBW2DwgH7tB^T7HJSL}*?2Z@YIiW`&z`r|+Z=;w#rr7@}0P@mw@^7n9T zs?*lYyE%FRJy=)eKcy(lKT(?V1Hlq70_dcq@$?Q{f4$VD8_{e1!m4F7+R^|cT65<5 zS68l@i#1=dekqY%_fn3AQT=AWJ+n=loZ+TQ$!y%aPXX`mxp6aexoi5q)Y>kN-!1yaE1c_HTl9(npl*N7P5; zN0ejW3+)PV3E$h?JKUuSSrk)FH$)c$AnAX}B@`NTNKL}uFH<9iSO>MXN6Y!j0UKhpRWH zFY5PKmYTj?dGuWw+U6#yqHmAW;+S)zkQr>A#qo3?-E5FGU6Eu@1~&Mxy~!#9&2P-G2{F?abQv)meG|`UeNotp!y1Hj8fY)D-+Z^@WYL{lWdnk=&GaKs84_0S5g2JLh)9RaEzcukeERYRpKa zYj*fca*RH~A~ri~XACP$c^1qvSSsX`Jb%v3y9u;VT*v^Y#t`TQ28fk~#l<{4LKV@m z38$RhcV7vS6>LmH9uf9RM=sv}P5YeJ3)5RjJVKdirzxD6~eGp)EM5q%f;ea(Ijw2P7J&+;43z_1R2Ixa)K zFZdy(&-zle9j0#~f~M0QATjhx!`V=NG(5CtPzc%`9*CWn9x3q|H`Wul0uL|NP(M5V zVDVJWIfx2b*l5m&{cefBYXRpSDS3yLP>|z4oZxlMKU%c`t zU3WbG-R+W3St&65i$053Kukbwy-O=>Ml?@E>SiS_M1@-ZoE;B#@kNU+uXp%ME{`CW zqB5hE^0&C{Rc&;9MFIU2M_OKQe4mJl1dK{YP!=LF7&-$?*4^0)V!L{jmf)wJ)wW?| z2|J&27oHEnhcXh9b8hOrR|Fi*LR3@#At8M;}-|K8B40s zlCY73`Gk>Uevyv^F*ZxJvp5lfX%K0qZ$|`y9-lXzB+2C>-F$>v*c879Mz~(k3;60R;Aq?B)bagTS4Kz9PzBnzazc-*4G&- zy}IV#*M-C8(PFUbk8UG;KC*&@-v>!n^A9BXjto#XckI~AH_@i<2W84Y6ZrKZNmE4z z$RVeQW!W`=xY@RhA0XB>HF*IqD3ss0fE&74piv4YPTcPW^ckO5RJrd(2si6D&1>No zwuog;xpK}1eC``#{B6$uX7y(ux0I-th&QjI{Y%ad{TR<<8WhQvB}SYO!tMXBsH=`^ z>V4a13>XS*D&dfc`cpz_>5xz`i7(P1FhV9G-912l41}e985xTh=NK=jM@n4 z24Qr(XZ$|z`=0%?|IX(+&vW0;bzjdN5}~urI>HDe{re~6`Vc)mOSVa0Kd=6y-<-HE zHNE?j)bb#>XUSJ7lR26u7ZuRHXsIRw(|=pdWWN;?w9;R+Ii*=0C*?&~Y*Ip}DlY@+ z6~1yB`|%JI2cQa|P$%ZkU`71_R(LxAFb9mXU|HChFxI!x;DTS_(pwZ_q;BUXDuiH% zRh}=3%YqJn$n1PlQCVP76oGImk$3@)~n&K^vp|Nfj*A~#%0y9e(*mE(Em#|7bg zpC>y9BNrcEc;QRAAO6*7TJe10+I^<&#OnZ-xr#9=h^Bzk8oN`8{diW$7&&Tbt@`ds6g+<>W8E z&da~wN2DsLL^Hjbi>&h8I#XU37=Yf;6?!9QglK*Jk1jot&Mre?YViTM+$tMAI$k$I z7X^kJh2V$>snCV-G51jBv!O&K=n~MufooQN_VZRLGb7Jo@Ab|2KD|ir8#E@4cs%SQ zb%RC^2V<(&$F-T?q?MPufMK>VSlbH#ANHQ?cH#aif0VzGv*g%auBL+=D65FgS?{e> zGTa;xkn4|g6D8aEYe2VTd zbut&Picn39zW%yZhTi&XRYvAu?uEi+|F9(_`Qi^8MnJYhX`1#GA&@|Vva13skXX@< z@P3z^a6fmIhI^wB+;>0$Ol>DhC4^V%o5_+j!8#f1sJ%HZ?W592>kI1Ch|V&8P6lZf z4F3$Kt`l5937hch68Hh!scCH(r;)?Rgh0y7lWP~6pX>~gOOywKkL+x^izq^#7%|7gGB!{waXpQ*2CaSv?tGu`H;gk_FFtHKWReK+fp z>mFm|*F$6MItFfW)pM4)McXbHo(X-t)?szW3O|C2*O(C&ig)d~|(LjxaXkU(L@TDAD& z3^7Z!i;tpz_Bsqpz~t{=97sW%X6#pg8A>Y;`)R$o^g7t6*F}y(e9knZ{n0}KuekDv zh#z|+m+W5ix$iY9R@o1a_rZ61kKFh@FjP~I%`mB@3z0NCmOmBDfBL=XZxxKqR>tG! zer^vQc)MNezN5<4k-c%QGdED=txD<27=of&td@bxzvz1sT|Tm*!o1>f+MOfXUI240 z!jc+a_Oq8~D1Y=QfW+GNK^0+e42oA33uV&aLxEPGaq~*Q9M}^L zjGMdL*eJzEnfK3-pcK#)$s)%JiY+p6hF?$i%@ zf2^AOO8q(@+HII=Hsd9Bg6QVdY`zzb))Dp)=fm0a5&yhkLmM$P!GeMLlI8eGl9&6p zMog)y1E(!O@$W`_N+ss4RfUn2%UOR!?cdjVEeM87mj>@-&0etL9^9K@m81R=V@ zhCN0h{(F#>*hs$f)i#DAD2ACE3prxIId%+c%Y&J!^SzJp$GreAOg;O9`FRQ1AZ*aj z0rQXJOJy=Oh1qL@2oGt4L3Q4~Dh0pnY}ZhMb8-5+$q81iGDh92bi<^mqWs=`1kcTd z>(6^nU}O8DPxA$;yy|}UmDB}jzr6NwTmG{UWa(WO-q^htY4~f4+exJKcr!l3h()1@ z_P}O&0Qx8$&og|69@-0`XqR}|Z?0|U-&2)SR1_Ys51uF(Fbjge_-O58(va@g z(JF0uom<^t@WBg%Dv>-MB;iH%vl6DlSsrn2Y7HSj%h*t76MOlF54~aDy>$Wap!H+O z8f^2gqH+O3@14{+$Z{L2=6+&=B0VPZzE0Ih-hgM}*bVn%+V;cg}SyTZiIQU(a2t|!T z03s_Rz;jy?!@z28fYJxYc7gc9`dQTS3h27`h&i7af*|3zCJ6KdowFlD*Na&$L}J4G z;WqDc@u8;QFIjMN6uD{#h29;D{z1{-#!0cx>e(mX1YUM9EAx)bPVz|NQW)Qzi@%^P zd&Rx#)K) zl_CO)c`$6lA2PWVPyoI$F-TdekjeZ}zJt`nvNFkTQPv-qkot#H%mFdf$snaqxtT$b zK$&&dUPgkpONU&wb*e>DZZ(mUa~^5RQFXKH4+k!D;9==wAqC|{j#;Y&)mK%Cr4|;G zr$~awpSQTZ{8OAl^eaNdj>yzdV@_c`xJb~(h%o6&zW-^jE7jYU z4gvk0X@I$ zFIU)y>W*FV;fh#O-!%Z?i)1qc%oU5Ld!Se=G!`NTu4i4;o{FDqKSS(}z7WbdCJhf2t%5Yj8@_sL=q7mLUSX{2UZdBI`6M{4B0fFD z^}*2IBD^_?RXFL?b2a)zw?Rc3ozUBVH^QXX>w*$@y6TmNUon+}Xcf{KLz*=5JU*w5 zxC8O`RJOXa+V0JyleCc@c)Mg);J6|%kVTVBq#rnkVeO6cf6R?!{Pb>HYYmlk-Elw| zvc|nHu7JGd9I?zXyU~!jEg&L@vB=N~I1uu4+@0L!xBT#sUuw@wDRWdD9*g@fBn616 zA^;)_fQ81gcY^v9OiYywMTh@agkW}x{eKZc8^p97)qEH6XJme5VrXt`dYIbR()Ea8 z%d;p+_ z2|YJ@jB;*kZhBab@aNA-hUiY_}|Q2*6BF|4@;dT2-qIF0bJ92i<9o?sk6J*`rwRB%7# zyVR3z@QYnlm7l{{3iic+n|hrdBGoxfdoVwh?pk>_+Cp9T>d=Km!QVZ_1Tv}^i4g*-F}2d564}&@afJ~*sGlpBO4}(U7X!un5tXXud{}mYNNXVO~r${nTt+F zUo3qQJ15jYS(B!h6jQL(rWxFwvZgPIVPl7iS(Q78L+KuVa^vS~E2xdNQFnWElRbnP zB8Cl7Y=w}|3IK>TG!;yIH9O*v7D8vrj`~N4Ocb<|sYf{gMGvGLVV3V*82kAG6C--o zP*W1Dlm7N%A!xTwL@oML+(@+28@RK5nA5CtQ*HcInr#`009`s^^;Vl%IrUym-hwTf za78#(UvPI0eX=i%cSP;YfnicPV& znC4R1!G0_3hjzsyO0y;{-Ln$0?C7(U?X<4zJ(0TmaG-kPrdMZjK$`6<(O>rcYu~R` z=cmd?(^%Ad^x+eQ7YUwz_>|%(s*;tGS81v9v?YgCa4BZy@+0}wz`)(9DBS4x{T?FK zSEI)}lfWrr8M%ro-1N)uPME~_)I*!eh#WHMNn*iw7yxDET|sjKa8)#!2@rs90RCjK zwH6YP8fAE^Y6aILZ?*L_IEQb7dYPL+D1uJi?&`PdDQAR7m)JnK*n)(Pj0BSp(`nF{_t}eJSs8cW)YQ6^n-Nixw|yaafVL}$IWalpMaZAq*8A%E zVQ#H$LrRuokLWD3?#-@Kn>Ofhk)%Hwxcq6joqRgk@i1;0jf@YVa$*toin4$iK!#!= z0u);y(jFba0S5q9fCLUw0Q)1Vw@UZxPPY~&|3+2FLgHKme&#r#P;T~ApB25N6*kClEYtV&EK8eN=|Fwt8@q; z`eQNMi(f-xGK5po3Lh`9YFMSxi zv@^c{iu0oHkhWx?0~_2R`ReM5X_^Z85$H z@N7R$8NUN|VII`6+Zr1CG^{@4r%{IvT+UJ+{}|m$`Lec-@|@PA@C|>kgFFeRADlA{ zj-ZS6?8Vxex`p~-l>&5BmX5S-)+~oJCbiTzl`9sYf;DyRfhOY2ti=EnB!^Wc`ou#z1pEmt>MFKl*WiBO8&ynpifn;p;d zevS!e9JNMzdpX;zp5&zDkHIC{a{1wVmMdS%CBJx@p&{{E{$i}a>6H@zFFVNP*+HuW z=ePo5yr9>~jN0?^b`3sCf{xmI%q2QiY|e;gCYj0&oOQvff+Jf*&%}lPO0W0#I=8%| z-KSf0Fgwwi@N|{ZWw#G@*=X6_RyHNAz1GApM%>8EwEtvH`OOg*oqg*}(i;s&N2DHi zOqOF6I>dHK?ae@?@568M?{#;#qDckD-NZ|G1k>x%qUkQ@q=R0})tuCLJWPF!Vii2J zy|U>^t8J!@{m1i z!mTo-Uizc%VfBY{_34ylftc$U(*11YzQKQTY_xZ?orSW;-zf=;Cd{q3SwFglJ0n7z zj+;%(Z{yUL)AB20P024K(K~L{yXC-aIL&o5OM;d?>Ya!ERJjLsuT{%b+|Ou1|0AI? zraX-gk&(FaGxh$|3h#`5!sJkQ52Tt8i5*((Q!B)N)otN>vIOX?IPtNgK(`6Hm(kN= zWPk_&Qs57CHe!sUak(&fi_yIXlu!NU_Ien9Jx1n-q>PQ(t}{e5t+Pp_x-#FH?zXY{ zz5xQSMG$?~bjW?Bs2Y}G`GGQ-KKoUmH3}L1+Y{-Tgb{pV@gYwO4{>?{KZE}`rW4j&C3aTWFZXb7bj(N;js|3aA@A?>9;O0WeW_ovqmWJRoe&8@Y z=bMvIvTIn?Nm8w|?>H%BFF5srl_4>PU7|0B=DFli%Y@p<7zd%8Edh!>6)a@7p7l57*B%Ye5P>~KfiuhjL048z9ufxjIJ zS7Zpbo;kFh6m>QVr{mk0G8KFf!HMAXGK8`}@@jwoQbuIeD@0n=X7)&^zpkEqz@*er zn`~=m%G!njonjS;qt$1gKS0L&n2t)CJwy7!lZGQaaL^41!mJuxBePeB@s7 z$fW{ZuMA^zg|pAK-a*EL@~^d;N-qBjym-;0-+%|I(IFaVH>G9%-JxWB!8B5}O~!O& z_s}7?^SY?HW7X;(nf1obv=6gNhU0H`-#Cx1P^R{kT(wp5vqRe*cPfY64udi=FMFS) zX4Y`Dtf?5Td{3pX^1G%#G-Gev;MN?)hqIUg{-anHFrrWe(BTl!ph7_%PkiBMairO| zm#r&TkC<7V5znPdA`Du>c*yT4yr-w%fn&lS-Qntz$=XrVzqS^;>U}ciBMt{6r<6+N dEP&I3dbkb$_aQeo!^ki!xUI3{5G)J;{s-5+YJmU% literal 0 HcmV?d00001 diff --git a/Resources/Audio/Misc/attributions.yml b/Resources/Audio/Misc/attributions.yml index 9b3cb64ae73..a7349a445be 100644 --- a/Resources/Audio/Misc/attributions.yml +++ b/Resources/Audio/Misc/attributions.yml @@ -28,6 +28,11 @@ copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/blob/2f63c779cb43543cfde76fa7ddaeacfde185fded/sound/effects/ratvar_reveal.ogg" +- files: ["cryo_warning.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/blob/00cf2da5f785c110b9930077b3202f1a4638e1fd/sound/machines/cryo_warning.ogg" + - files: ["epsilon.ogg"] license: "CC-BY-SA-3.0" copyright: "Made by dj-34 (https://github.com/dj-34)" diff --git a/Resources/Audio/Misc/cryo_warning.ogg b/Resources/Audio/Misc/cryo_warning.ogg new file mode 100644 index 0000000000000000000000000000000000000000..06cdebc9447fcc718583e72eda346b7de0f580a0 GIT binary patch literal 22347 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 PD=gAtf-&s8*OveeKXX~C literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 15878a4017d..9c906bd1a1c 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -239,6 +239,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset + lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg - type: entity id: NutimovCircuitBoard From 27978c37eb678790206b4e78036e058a31155886 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 03:42:13 +0000 Subject: [PATCH 092/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0269f58ee5c..958d731aa7f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Meteors now leave behind asteroid rocks on impact. - type: Add - id: 7021 - time: '2024-08-01T02:55:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30419 - author: PixelTheAertist changes: - message: The Social Anxiety trait is now renamed to "Stutter" @@ -3913,3 +3906,14 @@ id: 7520 time: '2024-10-17T03:21:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32808 +- author: Kickguy223 + changes: + - message: As an AI, Having a Lawboard inserted into your AI Upload Computer will + now Play a sound cue + type: Add + - message: As an AI, Having the Antimov Lawboard uploaded will play an appropriate + sound cue + type: Add + id: 7521 + time: '2024-10-17T03:41:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32625 From e975dbc17fa5a9f244c31bc31671d8c35ce9a417 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 04:01:58 +0000 Subject: [PATCH 093/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 958d731aa7f..fa5a4176e41 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: PixelTheAertist - changes: - - message: The Social Anxiety trait is now renamed to "Stutter" - type: Tweak - id: 7022 - time: '2024-08-01T02:58:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29898 - author: Plykiya changes: - message: Adds hand labelers to the PTech, ChemDrobe, and LawDrobe. @@ -3917,3 +3910,10 @@ id: 7521 time: '2024-10-17T03:41:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32625 +- author: Callmore + changes: + - message: Prefered item quick store locations can be created again. + type: Fix + id: 7522 + time: '2024-10-17T04:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32480 From 47ade44b83e60547055d18177f6fd343199d09f4 Mon Sep 17 00:00:00 2001 From: scrivoy <179060466+scrivoy@users.noreply.github.com> Date: Thu, 17 Oct 2024 06:34:31 +0200 Subject: [PATCH 094/173] Enhance Vending Machine UI: Adjust Minimum Height for better User Experience (#32851) set FancyWindow MinHeight to 210 --- Content.Client/VendingMachines/UI/VendingMachineMenu.xaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml index 913b07a8f65..44b1ff95e7f 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml @@ -2,7 +2,8 @@ xmlns="https://spacestation14.io" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls" - xmlns:co="clr-namespace:Content.Client.UserInterface.Controls"> + xmlns:co="clr-namespace:Content.Client.UserInterface.Controls" + MinHeight="210"> From 636ed4e69e09e83d1ffd27376eae1b688ee107b7 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Thu, 17 Oct 2024 13:06:07 +0200 Subject: [PATCH 095/173] Change the window titlebar to show the joined server (#32547) * Change the window titlebar to show the joined server Requires https://github.com/space-wizards/RobustToolbox/pull/5475/ * Totally not a webedit * Can you tell what cvar I copied? * And this kids is why we don't webedit * Reviews --------- Co-authored-by: metalgearsloth --- Content.Client/Entry/EntryPoint.cs | 9 +++ .../Managers/TitleWindowManager.cs | 62 +++++++++++++++++++ Content.Client/IoC/ClientContentIoC.cs | 2 + Content.Shared/CCVar/CCVars.cs | 6 ++ 4 files changed, 79 insertions(+) create mode 100644 Content.Client/GameTicking/Managers/TitleWindowManager.cs diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index eaea6b01eca..602c13149b1 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -4,6 +4,7 @@ using Content.Client.DebugMon; using Content.Client.Eui; using Content.Client.Fullscreen; +using Content.Client.GameTicking.Managers; using Content.Client.GhostKick; using Content.Client.Guidebook; using Content.Client.Input; @@ -70,6 +71,7 @@ public sealed class EntryPoint : GameClient [Dependency] private readonly IReplayLoadManager _replayLoad = default!; [Dependency] private readonly ILogManager _logManager = default!; [Dependency] private readonly DebugMonitorManager _debugMonitorManager = default!; + [Dependency] private readonly TitleWindowManager _titleWindowManager = default!; public override void Init() { @@ -140,6 +142,12 @@ public override void Init() _configManager.SetCVar("interface.resolutionAutoScaleMinimum", 0.5f); } + public override void Shutdown() + { + base.Shutdown(); + _titleWindowManager.Shutdown(); + } + public override void PostInit() { base.PostInit(); @@ -160,6 +168,7 @@ public override void PostInit() _userInterfaceManager.SetDefaultTheme("SS14DefaultTheme"); _userInterfaceManager.SetActiveTheme(_configManager.GetCVar(CVars.InterfaceTheme)); _documentParsingManager.Initialize(); + _titleWindowManager.Initialize(); _baseClient.RunLevelChanged += (_, args) => { diff --git a/Content.Client/GameTicking/Managers/TitleWindowManager.cs b/Content.Client/GameTicking/Managers/TitleWindowManager.cs new file mode 100644 index 00000000000..18ce16f634c --- /dev/null +++ b/Content.Client/GameTicking/Managers/TitleWindowManager.cs @@ -0,0 +1,62 @@ +using Content.Shared.CCVar; +using Robust.Client; +using Robust.Client.Graphics; +using Robust.Shared; +using Robust.Shared.Configuration; + +namespace Content.Client.GameTicking.Managers; + +public sealed class TitleWindowManager +{ + [Dependency] private readonly IBaseClient _client = default!; + [Dependency] private readonly IClyde _clyde = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IGameController _gameController = default!; + + public void Initialize() + { + _cfg.OnValueChanged(CVars.GameHostName, OnHostnameChange, true); + _cfg.OnValueChanged(CCVars.GameHostnameInTitlebar, OnHostnameTitleChange, true); + + _client.RunLevelChanged += OnRunLevelChangedChange; + } + + public void Shutdown() + { + _cfg.UnsubValueChanged(CVars.GameHostName, OnHostnameChange); + _cfg.UnsubValueChanged(CCVars.GameHostnameInTitlebar, OnHostnameTitleChange); + } + + private void OnHostnameChange(string hostname) + { + var defaultWindowTitle = _gameController.GameTitle(); + + // Since the game assumes the server name is MyServer and that GameHostnameInTitlebar CCVar is true by default + // Lets just... not show anything. This also is used to revert back to just the game title on disconnect. + if (_client.RunLevel == ClientRunLevel.Initialize) + { + _clyde.SetWindowTitle(defaultWindowTitle); + return; + } + + if (_cfg.GetCVar(CCVars.GameHostnameInTitlebar)) + // If you really dislike the dash I guess change it here + _clyde.SetWindowTitle(hostname + " - " + defaultWindowTitle); + else + _clyde.SetWindowTitle(defaultWindowTitle); + } + + // Clients by default assume game.hostname_in_titlebar is true + // but we need to clear it as soon as we join and actually receive the servers preference on this. + // This will ensure we rerun OnHostnameChange and set the correct title bar name. + private void OnHostnameTitleChange(bool colonthree) + { + OnHostnameChange(_cfg.GetCVar(CVars.GameHostName)); + } + + // This is just used we can rerun the hostname change function when we disconnect to revert back to just the games title. + private void OnRunLevelChangedChange(object? sender, RunLevelChangedEventArgs runLevelChangedEventArgs) + { + OnHostnameChange(_cfg.GetCVar(CVars.GameHostName)); + } +} diff --git a/Content.Client/IoC/ClientContentIoC.cs b/Content.Client/IoC/ClientContentIoC.cs index e643552f70b..370188e3c61 100644 --- a/Content.Client/IoC/ClientContentIoC.cs +++ b/Content.Client/IoC/ClientContentIoC.cs @@ -5,6 +5,7 @@ using Content.Client.DebugMon; using Content.Client.Eui; using Content.Client.Fullscreen; +using Content.Client.GameTicking.Managers; using Content.Client.GhostKick; using Content.Client.Guidebook; using Content.Client.Launcher; @@ -57,6 +58,7 @@ public static void Register() collection.Register(); collection.Register(); collection.Register(); + collection.Register(); } } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 66c3bc6cd0e..23a61756dc4 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -436,6 +436,12 @@ public static readonly CVarDef public static readonly CVarDef GameEntityMenuLookup = CVarDef.Create("game.entity_menu_lookup", 0.25f, CVar.CLIENTONLY | CVar.ARCHIVE); + ///

+ /// Should the clients window show the server hostname in the title? + /// + public static readonly CVarDef GameHostnameInTitlebar = + CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); + /* * Discord */ From a26ead4f1d1c900c42b670df60823af09be04c1f Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 11:07:15 +0000 Subject: [PATCH 096/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fa5a4176e41..97a2e80f757 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Adds hand labelers to the PTech, ChemDrobe, and LawDrobe. - type: Add - id: 7023 - time: '2024-08-01T02:59:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29958 - author: Ko4erga changes: - message: Added a cutter machine for crafting patterned steel tiles, concrete and @@ -3917,3 +3910,11 @@ id: 7522 time: '2024-10-17T04:00:52.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32480 +- author: Myra + changes: + - message: The game's title bar window will display the name of the server you have + joined (unless disabled). + type: Add + id: 7523 + time: '2024-10-17T11:06:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32547 From 72b2319310b06a82e5b514dd9487396a6a48a596 Mon Sep 17 00:00:00 2001 From: Thomas <87614336+Aeshus@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:01:32 -0500 Subject: [PATCH 097/173] Sanitize shorthand emotes throughought the whole message (#28645) * Rename ChatSanitizationManager to ChatEmoteSanitizationManager The prior name was kind of confusing as there's a emote one and then now there's also chat expansion happening in the accent system, so knowing which I actually need to edit is useful. So, I just need to keep myself not confused. * Rename smileyToEmote and remove punctuation duplicates The name SmileyToEmote is just... Bad. Plus, I needed to remove the punctuation duplicates as that would break any kind of regex parsing that I tried. * Switch to regex from checking end of string I also changed from System.Globalization to ILocalizationManager. Writing that regex was definitely an experience. * Document regex and the manager * Rename it back * Simplify regex --- .../Chat/Managers/ChatSanitizationManager.cs | 78 ++++++++++++++----- .../Chat/Managers/IChatSanitizationManager.cs | 5 +- Content.Server/Chat/Systems/ChatSystem.cs | 4 +- 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/Content.Server/Chat/Managers/ChatSanitizationManager.cs b/Content.Server/Chat/Managers/ChatSanitizationManager.cs index 634d8cdefab..b0d28eae75c 100644 --- a/Content.Server/Chat/Managers/ChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/ChatSanitizationManager.cs @@ -1,17 +1,19 @@ using System.Diagnostics.CodeAnalysis; -using System.Globalization; +using System.Text.RegularExpressions; using Content.Shared.CCVar; using Robust.Shared.Configuration; namespace Content.Server.Chat.Managers; +/// +/// Sanitizes messages! +/// It currently ony removes the shorthands for emotes (like "lol" or "^-^") from a chat message and returns the last +/// emote in their message +/// public sealed class ChatSanitizationManager : IChatSanitizationManager { - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - - private static readonly Dictionary SmileyToEmote = new() + private static readonly Dictionary ShorthandToEmote = new() { - // I could've done this with regex, but felt it wasn't the right idea. { ":)", "chatsan-smiles" }, { ":]", "chatsan-smiles" }, { "=)", "chatsan-smiles" }, @@ -75,7 +77,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "kek", "chatsan-laughs" }, { "rofl", "chatsan-laughs" }, { "o7", "chatsan-salutes" }, - { ";_;7", "chatsan-tearfully-salutes"}, + { ";_;7", "chatsan-tearfully-salutes" }, { "idk", "chatsan-shrugs" }, { ";)", "chatsan-winks" }, { ";]", "chatsan-winks" }, @@ -88,9 +90,12 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "(':", "chatsan-tearfully-smiles" }, { "[':", "chatsan-tearfully-smiles" }, { "('=", "chatsan-tearfully-smiles" }, - { "['=", "chatsan-tearfully-smiles" }, + { "['=", "chatsan-tearfully-smiles" } }; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly ILocalizationManager _loc = default!; + private bool _doSanitize; public void Initialize() @@ -98,29 +103,60 @@ public void Initialize() _configurationManager.OnValueChanged(CCVars.ChatSanitizerEnabled, x => _doSanitize = x, true); } - public bool TrySanitizeOutSmilies(string input, EntityUid speaker, out string sanitized, [NotNullWhen(true)] out string? emote) + /// + /// Remove the shorthands from the message, returning the last one found as the emote + /// + /// The pre-sanitized message + /// The speaker + /// The sanitized message with shorthands removed + /// The localized emote + /// True if emote has been sanitized out + public bool TrySanitizeEmoteShorthands(string message, + EntityUid speaker, + out string sanitized, + [NotNullWhen(true)] out string? emote) { + emote = null; + sanitized = message; + if (!_doSanitize) - { - sanitized = input; - emote = null; return false; - } - input = input.TrimEnd(); + // -1 is just a canary for nothing found yet + var lastEmoteIndex = -1; - foreach (var (smiley, replacement) in SmileyToEmote) + foreach (var (shorthand, emoteKey) in ShorthandToEmote) { - if (input.EndsWith(smiley, true, CultureInfo.InvariantCulture)) + // We have to escape it because shorthands like ":)" or "-_-" would break the regex otherwise. + var escaped = Regex.Escape(shorthand); + + // So there are 2 cases: + // - If there is whitespace before it and after it is either punctuation, whitespace, or the end of the line + // Delete the word and the whitespace before + // - If it is at the start of the string and is followed by punctuation, whitespace, or the end of the line + // Delete the word and the punctuation if it exists. + var pattern = + $@"\s{escaped}(?=\p{{P}}|\s|$)|^{escaped}(?:\p{{P}}|(?=\s|$))"; + + var r = new Regex(pattern, RegexOptions.RightToLeft | RegexOptions.IgnoreCase); + + // We're using sanitized as the original message until the end so that we can make sure the indices of + // the emotes are accurate. + var lastMatch = r.Match(sanitized); + + if (!lastMatch.Success) + continue; + + if (lastMatch.Index > lastEmoteIndex) { - sanitized = input.Remove(input.Length - smiley.Length).TrimEnd(); - emote = Loc.GetString(replacement, ("ent", speaker)); - return true; + lastEmoteIndex = lastMatch.Index; + emote = _loc.GetString(emoteKey, ("ent", speaker)); } + + message = r.Replace(message, string.Empty); } - sanitized = input; - emote = null; - return false; + sanitized = message.Trim(); + return emote is not null; } } diff --git a/Content.Server/Chat/Managers/IChatSanitizationManager.cs b/Content.Server/Chat/Managers/IChatSanitizationManager.cs index c067cf02ee7..ac85d4b4a7a 100644 --- a/Content.Server/Chat/Managers/IChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/IChatSanitizationManager.cs @@ -6,5 +6,8 @@ public interface IChatSanitizationManager { public void Initialize(); - public bool TrySanitizeOutSmilies(string input, EntityUid speaker, out string sanitized, [NotNullWhen(true)] out string? emote); + public bool TrySanitizeEmoteShorthands(string input, + EntityUid speaker, + out string sanitized, + [NotNullWhen(true)] out string? emote); } diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index b173dbbdf97..a14bbd14d54 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -759,8 +759,8 @@ private string SanitizeInGameICMessage(EntityUid source, string message, out str var newMessage = message.Trim(); newMessage = SanitizeMessageReplaceWords(newMessage); - // DeltaV: sanitize first - _sanitizer.TrySanitizeOutSmilies(newMessage, source, out newMessage, out emoteStr); + // Sanitize it first as it might change the word order + _sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr); if (capitalize) newMessage = SanitizeMessageCapital(newMessage); From 05e9c62c75fbf342aae1da236bdde4f31e616ac9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 14:02:41 +0000 Subject: [PATCH 098/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 97a2e80f757..6fd1a7fe4ec 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,15 +1,4 @@ Entries: -- author: Ko4erga - changes: - - message: Added a cutter machine for crafting patterned steel tiles, concrete and - wooden tiles. - type: Add - - message: After rip off patterned tiles you get current pattern, not just steel - tile. - type: Tweak - id: 7024 - time: '2024-08-01T10:26:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30431 - author: NakataRin changes: - message: Added paramedic to the train station. @@ -3918,3 +3907,12 @@ id: 7523 time: '2024-10-17T11:06:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32547 +- author: Aeshus + changes: + - message: Emote shorthands (like "lol" or ":)") sent in chat are detected throughout + the whole message. Note that only the last shorthand in the message will be + emoted. + type: Tweak + id: 7524 + time: '2024-10-17T14:01:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28645 From b48b1c157aeecfb5b4e090259ee8b3fda587dd2d Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:32:59 +0200 Subject: [PATCH 099/173] fix playtime stats window (#32856) --- .../Info/PlaytimeStats/PlaytimeStatsEntry.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs b/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs index aff01800f94..16e8f55a7e2 100644 --- a/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs +++ b/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs @@ -16,19 +16,10 @@ public PlaytimeStatsEntry(string role, TimeSpan playtime, StyleBox styleBox) RoleLabel.Text = role; Playtime = playtime; // store the TimeSpan value directly - PlaytimeLabel.Text = ConvertTimeSpanToHoursMinutes(playtime); // convert to string for display + PlaytimeLabel.Text = playtime.ToString(Loc.GetString("ui-playtime-time-format")); // convert to string for display BackgroundColorPanel.PanelOverride = styleBox; } - private static string ConvertTimeSpanToHoursMinutes(TimeSpan timeSpan) - { - var hours = (int)timeSpan.TotalHours; - var minutes = timeSpan.Minutes; - - var formattedTimeLoc = Loc.GetString("ui-playtime-time-format", ("hours", hours), ("minutes", minutes)); - return formattedTimeLoc; - } - public void UpdateShading(StyleBoxFlat styleBox) { BackgroundColorPanel.PanelOverride = styleBox; From a703816c9b9387b686748a5b57a5e1fc54796b3f Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 17 Oct 2024 21:34:06 +0000 Subject: [PATCH 100/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6fd1a7fe4ec..034eea7b078 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: NakataRin - changes: - - message: Added paramedic to the train station. - type: Add - id: 7025 - time: '2024-08-01T19:59:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30556 - author: marbow changes: - message: Rejoice, detectives! Hand labeler has been added to your closet! @@ -3916,3 +3909,10 @@ id: 7524 time: '2024-10-17T14:01:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/28645 +- author: slarticodefast + changes: + - message: Fixed the playtime stats window not showing entries correctly. + type: Fix + id: 7525 + time: '2024-10-17T21:32:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32856 From f907921a243d8b405edde19a70a6d4ce2a258075 Mon Sep 17 00:00:00 2001 From: Stomf <5dorkydorks@gmail.com> Date: Thu, 17 Oct 2024 21:42:49 -0500 Subject: [PATCH 101/173] Fixes smile's ghost role to not need a raffle, very nice (#32837) * Fixes smile's ghost role to not need a raffle, very nice * a simplier solution --- Resources/Prototypes/Entities/Mobs/NPCs/pets.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 7733f0a4be6..3308baf4d74 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -791,6 +791,7 @@ name: ghost-role-information-smile-name description: ghost-role-information-smile-description rules: ghost-role-information-nonantagonist-rules + raffle: null - type: Grammar attributes: proper: true From ede6a8f8affb078f83b4a0c47169b1a1cf84f709 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 02:43:56 +0000 Subject: [PATCH 102/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 034eea7b078..72829a67c02 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: marbow - changes: - - message: Rejoice, detectives! Hand labeler has been added to your closet! - type: Add - id: 7026 - time: '2024-08-01T20:01:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30501 - author: metalgearsloth changes: - message: Fix some popups playing twice. @@ -3916,3 +3909,10 @@ id: 7525 time: '2024-10-17T21:32:59.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32856 +- author: Thatonestomf + changes: + - message: Smile no longer has a ghost role raffle attached to her + type: Fix + id: 7526 + time: '2024-10-18T02:42:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32837 From d43a64f1de2314dcd4e7f87fe0aa7454581b54ba Mon Sep 17 00:00:00 2001 From: Catofquestionableethics <164375142+Catofquestionableethics@users.noreply.github.com> Date: Fri, 18 Oct 2024 04:08:32 +0100 Subject: [PATCH 103/173] Added relevant tags to several cakes, and changed chem in Spacemans cake (#32830) --- .../Objects/Consumable/Food/Baked/cake.yml | 41 +++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index 448ef0868d6..0b574cdd720 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -135,6 +135,10 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 5 + - type: Tag + tags: + - Cake + - Vegetable - type: entity name: slice of carrot cake @@ -155,6 +159,11 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 1 + - type: Tag + tags: + - Cake + - Vegetable + - Slice # Tastes like sweetness, cake, carrot. @@ -168,7 +177,10 @@ state: brain - type: SliceableFood slice: FoodCakeBrainSlice - + - type: Tag + tags: + - Cake + - Meat - type: entity name: slice of brain cake @@ -178,6 +190,11 @@ components: - type: Sprite state: brain-slice + - type: Tag + tags: + - Cake + - Meat + - Slice # Tastes like sweetness, cake, brains. - type: entity @@ -429,6 +446,10 @@ state: slime - type: SliceableFood slice: FoodCakeSlimeSlice + - type: Tag + tags: + - Cake + - Meat - type: entity name: slice of slime cake @@ -438,6 +459,11 @@ components: - type: Sprite state: slime-slice + - type: Tag + tags: + - Cake + - Meat + - Slice # Tastes like sweetness, cake, slime. - type: entity @@ -498,6 +524,10 @@ state: christmas - type: SliceableFood slice: FoodCakeChristmasSlice + - type: Tag + tags: + - Cake + - Fruit - type: entity name: slice of christmas cake @@ -506,6 +536,11 @@ components: - type: Sprite state: christmas-slice + - type: Tag + tags: + - Cake + - Fruit + - Slice # Tastes like sweetness, cake, christmas. - type: entity @@ -634,7 +669,7 @@ Quantity: 20 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Omnizine #This is a really rare cake with healing stuff and we don't have any of its chems yet + - ReagentId: PolypyryliumOligomers Quantity: 15 - type: entity @@ -654,7 +689,7 @@ Quantity: 4 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Omnizine + - ReagentId: PolypyryliumOligomers Quantity: 3 # Tastes like sweetness, cake, jam. From 4b0f84e50984a80248ffc02aa03f171014d6e98d Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 03:09:39 +0000 Subject: [PATCH 104/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 72829a67c02..55439fd1281 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Fix some popups playing twice. - type: Fix - id: 7027 - time: '2024-08-02T01:33:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30452 - author: WarMechanic changes: - message: Adjusted meteors to have less lethal blast fragments. @@ -3916,3 +3909,12 @@ id: 7526 time: '2024-10-18T02:42:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32837 +- author: Catofquestionableethics + changes: + - message: Spacemans cake now contains Polypyrylium Oligomers instead of Omnizine. + type: Tweak + - message: Slime, Brain and Christmas cakes can now be eaten by Lizards. + type: Fix + id: 7527 + time: '2024-10-18T03:08:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32830 From eeafe8793cccd43ef152a4c26a2ca3929bf56ebd Mon Sep 17 00:00:00 2001 From: Plykiya <58439124+Plykiya@users.noreply.github.com> Date: Thu, 17 Oct 2024 20:28:30 -0700 Subject: [PATCH 105/173] Remove flares and shotgun flares from lathe options (#32563) Remove flares and shotgun flares from lathe recipes --- Resources/Prototypes/Entities/Structures/Machines/lathe.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 084f4840a7a..4edf038e2eb 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -199,7 +199,6 @@ - WetFloorSign - ClothingHeadHatCone - FreezerElectronics - - Flare # Begin Delta-V additions - GoldRing - SilverRing @@ -209,7 +208,6 @@ - type: EmagLatheRecipes emagStaticRecipes: - BoxLethalshot - - BoxShotgunFlare - BoxShotgunSlug - CombatKnife - MagazineBoxLightRifle @@ -812,7 +810,6 @@ runningState: icon staticRecipes: - BoxLethalshot - - BoxShotgunFlare - BoxShotgunPractice - BoxShotgunSlug - ClothingEyesHudSecurity @@ -977,7 +974,6 @@ - MagazineBoxSpecial # End of modified code - BoxLethalshot - - BoxShotgunFlare - BoxShotgunSlug - BoxShellTranquilizer - MagazineBoxLightRifle From 5a67a45e386b374bbe81c6504207de2dce409bc6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 03:29:36 +0000 Subject: [PATCH 106/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 55439fd1281..ccbe921e3d3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: WarMechanic - changes: - - message: Adjusted meteors to have less lethal blast fragments. - type: Tweak - id: 7028 - time: '2024-08-02T05:43:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29199 - author: slarticodefast changes: - message: Fixed borgs not being able to state laws or open other UIs without an @@ -3918,3 +3911,10 @@ id: 7527 time: '2024-10-18T03:08:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32830 +- author: Plykiya + changes: + - message: You can no longer print flares or shotgun flares. + type: Remove + id: 7528 + time: '2024-10-18T03:28:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32563 From 4d4782313fc0af110f77a3ac4eef554caeae9a21 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Fri, 18 Oct 2024 18:40:36 +1300 Subject: [PATCH 107/173] Fix PlantHolder interactions & InteractionSystem assert (#32874) --- Content.Server/Botany/Systems/PlantHolderSystem.cs | 13 ++++++++++--- .../Interaction/SharedInteractionSystem.cs | 3 ++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index b17c2613710..34d6a75bf25 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Botany.Components; -using Content.Server.Fluids.Components; using Content.Server.Kitchen.Components; using Content.Server.Popups; using Content.Shared.Chemistry.EntitySystems; @@ -11,7 +10,6 @@ using Content.Shared.Coordinates.Helpers; using Content.Shared.Examine; using Content.Shared.FixedPoint; -using Content.Shared.Fluids.Components; using Content.Shared.Hands.Components; using Content.Shared.IdentityManagement; using Content.Shared.Interaction; @@ -19,7 +17,6 @@ using Content.Shared.Random; using Content.Shared.Tag; using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -159,6 +156,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (!_botany.TryGetSeed(seeds, out var seed)) return; + args.Handled = true; var name = Loc.GetString(seed.Name); var noun = Loc.GetString(seed.Noun); _popup.PopupCursor(Loc.GetString("plant-holder-component-plant-success-message", @@ -186,6 +184,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs return; } + args.Handled = true; _popup.PopupCursor(Loc.GetString("plant-holder-component-already-seeded-message", ("name", Comp(uid).EntityName)), args.User, PopupType.Medium); return; @@ -193,6 +192,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (_tagSystem.HasTag(args.Used, "Hoe")) { + args.Handled = true; if (component.WeedLevel > 0) { _popup.PopupCursor(Loc.GetString("plant-holder-component-remove-weeds-message", @@ -212,6 +212,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (HasComp(args.Used)) { + args.Handled = true; if (component.Seed != null) { _popup.PopupCursor(Loc.GetString("plant-holder-component-remove-plant-message", @@ -231,6 +232,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (_tagSystem.HasTag(args.Used, "PlantSampleTaker")) { + args.Handled = true; if (component.Seed == null) { _popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User); @@ -286,10 +288,15 @@ private void OnInteractUsing(Entity entity, ref InteractUs } if (HasComp(args.Used)) + { + args.Handled = true; DoHarvest(uid, args.User, component); + return; + } if (TryComp(args.Used, out var produce)) { + args.Handled = true; _popup.PopupCursor(Loc.GetString("plant-holder-component-compost-message", ("owner", uid), ("usingItem", args.Used)), args.User, PopupType.Medium); diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 6f44d3089d1..7f2ecb50f88 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -1372,7 +1372,8 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE if (uidB == null || args?.Handled == false) return; - DebugTools.AssertNotEqual(uidA, uidB.Value); + if (uidA == uidB.Value) + return; if (!TryComp(uidA, out MetaDataComponent? metaA) || metaA.EntityPaused) return; From 32aa590c9519bd863d3f029c9c97eb66ba5f44ba Mon Sep 17 00:00:00 2001 From: Theodore Lukin <66275205+pheenty@users.noreply.github.com> Date: Fri, 18 Oct 2024 16:43:05 +0700 Subject: [PATCH 108/173] Fix warden being and qm being not considered head for tot kill head objective (#32721) * fixed warden being and qm being not considered head for traitor kill head objective * fixed hypothetical warden traitor not getting disk objective * change suggested by deltanedas * cleanup * cleanup * fix * changed as suggested * removed a dot in the comment * removed an empty line * reformulation --- .../Objectives/Systems/KillPersonConditionSystem.cs | 10 ++++------ .../Objectives/Systems/NotCommandRequirementSystem.cs | 7 ++----- .../Revolutionary/Components/CommandStaffComponent.cs | 6 ++---- .../Prototypes/Roles/Jobs/Cargo/quartermaster.yml | 1 + 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index b4de15f2b9a..8dcbf191b36 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -1,9 +1,9 @@ using Content.Server.Objectives.Components; +using Content.Server.Revolutionary.Components; using Content.Server.Shuttles.Systems; using Content.Shared.CCVar; using Content.Shared.Mind; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; using Robust.Shared.Configuration; using Robust.Shared.Random; @@ -17,7 +17,6 @@ public sealed class KillPersonConditionSystem : EntitySystem [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private readonly IConfigurationManager _config = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedJobSystem _job = default!; [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly TargetObjectiveSystem _target = default!; @@ -86,11 +85,10 @@ private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref Obj } var allHeads = new List(); - foreach (var mind in allHumans) + foreach (var person in allHumans) { - // RequireAdminNotify used as a cheap way to check for command department - if (_job.MindTryGetJob(mind, out var prototype) && prototype.RequireAdminNotify) - allHeads.Add(mind); + if (TryComp(person, out var mind) && mind.OwnedEntity is { } ent && HasComp(ent)) + allHeads.Add(person); } if (allHeads.Count == 0) diff --git a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs index 50d747c1a2a..0808dc5bcfd 100644 --- a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs @@ -1,13 +1,11 @@ using Content.Server.Objectives.Components; +using Content.Server.Revolutionary.Components; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; namespace Content.Server.Objectives.Systems; public sealed class NotCommandRequirementSystem : EntitySystem { - [Dependency] private readonly SharedJobSystem _job = default!; - public override void Initialize() { base.Initialize(); @@ -20,8 +18,7 @@ private void OnCheck(EntityUid uid, NotCommandRequirementComponent comp, ref Req if (args.Cancelled) return; - // cheap equivalent to checking that job department is command, since all command members require admin notification when leaving - if (_job.MindTryGetJob(args.MindId, out var prototype) && prototype.RequireAdminNotify) + if (args.Mind.OwnedEntity is { } ent && HasComp(ent)) args.Cancelled = true; } } diff --git a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs index dc16b87300e..79349b25da7 100644 --- a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs +++ b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs @@ -1,11 +1,9 @@ -using Content.Server.GameTicking.Rules; - namespace Content.Server.Revolutionary.Components; /// -/// Given to heads at round start for Revs. Used for tracking if heads died or not. +/// Given to heads at round start. Used for assigning traitors to kill heads and for revs to check if the heads died or not. /// -[RegisterComponent, Access(typeof(RevolutionaryRuleSystem))] +[RegisterComponent] public sealed partial class CommandStaffComponent : Component { diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index 9ce872eb069..02682ed863b 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -22,6 +22,7 @@ weight: 10 startingGear: QuartermasterGear icon: "JobIconQuarterMaster" + requireAdminNotify: true supervisors: job-supervisors-captain canBeAntag: false access: From a8cb319eefcfa8d279a5092903758bfa0fae7ee9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 09:44:12 +0000 Subject: [PATCH 109/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ccbe921e3d3..a123d503c00 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Fixed borgs not being able to state laws or open other UIs without an - active module. - type: Fix - id: 7029 - time: '2024-08-02T05:44:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30299 - author: TropicalHibi changes: - message: Now fs (for sure) and wru (where are you) are changed to their full version @@ -3918,3 +3910,13 @@ id: 7528 time: '2024-10-18T03:28:30.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32563 +- author: pheenty + changes: + - message: QM is now considered an important job. + type: Tweak + - message: QM is now correctly considered head for traitor's kill head objective, + while warden now isn't. + type: Fix + id: 7529 + time: '2024-10-18T09:43:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32721 From 5edeb8e58f1f3978bc1c52a183de6847472988e2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 10:04:18 +0000 Subject: [PATCH 110/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a123d503c00..f6c13583df0 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: TropicalHibi - changes: - - message: Now fs (for sure) and wru (where are you) are changed to their full version - in text - type: Add - id: 7030 - time: '2024-08-02T05:57:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30508 - author: Plykiya changes: - message: Rechargers now show the percent charged of the item it is charging. @@ -3920,3 +3912,11 @@ id: 7529 time: '2024-10-18T09:43:05.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32721 +- author: JIPDawg + changes: + - message: On Salamander the round will now restart after 5 minutes from when the + Evac shuttle arrives at CentCom. + type: Tweak + id: 7530 + time: '2024-10-18T10:03:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32776 From e9638d45b96bbbd81fe796c238be8222b013f197 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:04:45 -0700 Subject: [PATCH 111/173] Fix: Radio jammer now doesn't show setting changes to other players (#32817) * fix * Other fix --- .../Radio/EntitySystems/SharedJammerSystem.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs index 8c5baf93f5d..67af4cc900a 100644 --- a/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs +++ b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs @@ -42,10 +42,12 @@ private void OnGetVerb(Entity entity, ref GetVerbsEvent Date: Fri, 18 Oct 2024 14:55:43 +0200 Subject: [PATCH 112/173] Traitor activation fix for missing PDA (#30359) * Implant the uplink if no PDA is found * comments * tidy up loose ends * Whoops usually I start with the namespace, how did I forget it, shame shame * Consistent data type for starting TC balance, misc changes * Implant briefing, guidebook * Update AutoTraitor, add uplink, codeword and briefing parameters to TraitorRuleComponent, no pda for reinforcements * engine 5c0ce43 * pass pda to AddUplink Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * nicer string handling Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * case typo 1 Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * case typo 2 Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * case typo 3 Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * minor layout changes * removed redundant implant check * minor cleanup --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Rules/Components/TraitorRuleComponent.cs | 21 +- .../GameTicking/Rules/TraitorRuleSystem.cs | 77 ++++++-- .../Components/AutoTraitorComponent.cs | 13 +- .../Traitor/Systems/AutoTraitorSystem.cs | 5 +- Content.Server/Traitor/Uplink/UplinkSystem.cs | 187 +++++++++++------- .../Implants/SharedSubdermalImplantSystem.cs | 38 ++-- .../game-presets/preset-traitor.ftl | 6 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 6 +- .../Prototypes/Entities/Mobs/Player/human.yml | 3 +- Resources/Prototypes/GameRules/roundstart.yml | 9 + .../Guidebook/Antagonist/Traitors.xml | 7 +- 11 files changed, 246 insertions(+), 126 deletions(-) diff --git a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs index 62f92963aa7..6f82aa042f0 100644 --- a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Dataset; +using Content.Shared.FixedPoint; using Content.Shared.NPC.Prototypes; using Content.Shared.Random; using Content.Shared.Roles; @@ -31,6 +32,24 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public ProtoId ObjectiveIssuers = "TraitorCorporations"; + /// + /// Give this traitor an Uplink on spawn. + /// + [DataField] + public bool GiveUplink = true; + + /// + /// Give this traitor the codewords. + /// + [DataField] + public bool GiveCodewords = true; + + /// + /// Give this traitor a briefing in chat. + /// + [DataField] + public bool GiveBriefing = true; + public int TotalTraitors => TraitorMinds.Count; public string[] Codewords = new string[3]; @@ -68,5 +87,5 @@ public enum SelectionState /// The amount of TC traitors start with. ///
[DataField] - public int StartingBalance = 20; + public FixedPoint2 StartingBalance = 20; } diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 44ad00ae170..1987613763b 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -7,6 +7,7 @@ using Content.Server.Roles; using Content.Server.Traitor.Uplink; using Content.Shared.Database; +using Content.Shared.FixedPoint; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; using Content.Shared.NPC.Systems; @@ -75,38 +76,46 @@ public string[] GenerateTraitorCodewords(TraitorRuleComponent component) return codewords; } - public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool giveUplink = true) + public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component) { //Grab the mind if it wasn't provided if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) return false; - var briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + var briefing = ""; + + if (component.GiveCodewords) + briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + var issuer = _random.Pick(_prototypeManager.Index(component.ObjectiveIssuers).Values); + // Uplink code will go here if applicable, but we still need the variable if there aren't any Note[]? code = null; - if (giveUplink) + + if (component.GiveUplink) { // Calculate the amount of currency on the uplink. var startingBalance = component.StartingBalance; if (_jobs.MindTryGetJob(mindId, out var prototype)) - startingBalance = Math.Max(startingBalance - prototype.AntagAdvantage, 0); - - // creadth: we need to create uplink for the antag. - // PDA should be in place already - var pda = _uplink.FindUplinkTarget(traitor); - if (pda == null || !_uplink.AddUplink(traitor, startingBalance, giveDiscounts: true)) - return false; - - // Give traitors their codewords and uplink code to keep in their character info menu - code = EnsureComp(pda.Value).Code; + { + if (startingBalance < prototype.AntagAdvantage) // Can't use Math functions on FixedPoint2 + startingBalance = 0; + else + startingBalance = startingBalance - prototype.AntagAdvantage; + } - // If giveUplink is false the uplink code part is omitted - briefing = string.Format("{0}\n{1}", briefing, - Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp", "#")))); + // Choose and generate an Uplink, and return the uplink code if applicable + var uplinkParams = RequestUplink(traitor, startingBalance, briefing); + code = uplinkParams.Item1; + briefing = uplinkParams.Item2; } - _antag.SendBriefing(traitor, GenerateBriefing(component.Codewords, code, issuer), null, component.GreetSoundNotification); + string[]? codewords = null; + if (component.GiveCodewords) + codewords = component.Codewords; + + if (component.GiveBriefing) + _antag.SendBriefing(traitor, GenerateBriefing(codewords, code, issuer), null, component.GreetSoundNotification); component.TraitorMinds.Add(mindId); @@ -134,6 +143,32 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool return true; } + private (Note[]?, string) RequestUplink(EntityUid traitor, FixedPoint2 startingBalance, string briefing) + { + var pda = _uplink.FindUplinkTarget(traitor); + Note[]? code = null; + + var uplinked = _uplink.AddUplink(traitor, startingBalance, pda, true); + + if (pda is not null && uplinked) + { + // Codes are only generated if the uplink is a PDA + code = EnsureComp(pda.Value).Code; + + // If giveUplink is false the uplink code part is omitted + briefing = string.Format("{0}\n{1}", + briefing, + Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp", "#")))); + return (code, briefing); + } + else if (pda is null && uplinked) + { + briefing += "\n" + Loc.GetString("traitor-role-uplink-implant-short"); + } + + return (null, briefing); + } + // TODO: AntagCodewordsComponent private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, ref ObjectivesTextPrependEvent args) { @@ -141,13 +176,17 @@ private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, r } // TODO: figure out how to handle this? add priority to briefing event? - private string GenerateBriefing(string[] codewords, Note[]? uplinkCode, string? objectiveIssuer = null) + private string GenerateBriefing(string[]? codewords, Note[]? uplinkCode, string? objectiveIssuer = null) { var sb = new StringBuilder(); sb.AppendLine(Loc.GetString("traitor-role-greeting", ("corporation", objectiveIssuer ?? Loc.GetString("objective-issuer-unknown")))); - sb.AppendLine(Loc.GetString("traitor-role-codewords", ("codewords", string.Join(", ", codewords)))); + if (codewords != null) + sb.AppendLine(Loc.GetString("traitor-role-codewords", ("codewords", string.Join(", ", codewords)))); if (uplinkCode != null) sb.AppendLine(Loc.GetString("traitor-role-uplink-code", ("code", string.Join("-", uplinkCode).Replace("sharp", "#")))); + else + sb.AppendLine(Loc.GetString("traitor-role-uplink-implant")); + return sb.ToString(); } diff --git a/Content.Server/Traitor/Components/AutoTraitorComponent.cs b/Content.Server/Traitor/Components/AutoTraitorComponent.cs index ab4bee2f267..a4710afd8eb 100644 --- a/Content.Server/Traitor/Components/AutoTraitorComponent.cs +++ b/Content.Server/Traitor/Components/AutoTraitorComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Traitor.Systems; +using Robust.Shared.Prototypes; namespace Content.Server.Traitor.Components; @@ -9,14 +10,8 @@ namespace Content.Server.Traitor.Components; public sealed partial class AutoTraitorComponent : Component { /// - /// Whether to give the traitor an uplink or not. + /// The traitor profile to use /// - [DataField("giveUplink"), ViewVariables(VVAccess.ReadWrite)] - public bool GiveUplink = true; - - /// - /// Whether to give the traitor objectives or not. - /// - [DataField("giveObjectives"), ViewVariables(VVAccess.ReadWrite)] - public bool GiveObjectives = true; + [DataField] + public EntProtoId Profile = "Traitor"; } diff --git a/Content.Server/Traitor/Systems/AutoTraitorSystem.cs b/Content.Server/Traitor/Systems/AutoTraitorSystem.cs index e9307effbc6..d5a4db591a7 100644 --- a/Content.Server/Traitor/Systems/AutoTraitorSystem.cs +++ b/Content.Server/Traitor/Systems/AutoTraitorSystem.cs @@ -12,9 +12,6 @@ public sealed class AutoTraitorSystem : EntitySystem { [Dependency] private readonly AntagSelectionSystem _antag = default!; - [ValidatePrototypeId] - private const string DefaultTraitorRule = "Traitor"; - public override void Initialize() { base.Initialize(); @@ -24,6 +21,6 @@ public override void Initialize() private void OnMindAdded(EntityUid uid, AutoTraitorComponent comp, MindAddedMessage args) { - _antag.ForceMakeAntag(args.Mind.Comp.Session, DefaultTraitorRule); + _antag.ForceMakeAntag(args.Mind.Comp.Session, comp.Profile); } } diff --git a/Content.Server/Traitor/Uplink/UplinkSystem.cs b/Content.Server/Traitor/Uplink/UplinkSystem.cs index ae809dc4d77..4c0a990b148 100644 --- a/Content.Server/Traitor/Uplink/UplinkSystem.cs +++ b/Content.Server/Traitor/Uplink/UplinkSystem.cs @@ -1,97 +1,136 @@ using System.Linq; using Content.Server.Store.Systems; using Content.Server.StoreDiscount.Systems; +using Content.Shared.FixedPoint; using Content.Shared.Hands.EntitySystems; +using Content.Shared.Implants; using Content.Shared.Inventory; using Content.Shared.PDA; -using Content.Shared.FixedPoint; using Content.Shared.Store; using Content.Shared.Store.Components; +using Robust.Shared.Prototypes; + +namespace Content.Server.Traitor.Uplink; -namespace Content.Server.Traitor.Uplink +public sealed class UplinkSystem : EntitySystem { - public sealed class UplinkSystem : EntitySystem + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly StoreSystem _store = default!; + [Dependency] private readonly SharedSubdermalImplantSystem _subdermalImplant = default!; + + [ValidatePrototypeId] + public const string TelecrystalCurrencyPrototype = "Telecrystal"; + private const string FallbackUplinkImplant = "UplinkImplant"; + private const string FallbackUplinkCatalog = "UplinkUplinkImplanter"; + + /// + /// Adds an uplink to the target + /// + /// The person who is getting the uplink + /// The amount of currency on the uplink. If null, will just use the amount specified in the preset. + /// The entity that will actually have the uplink functionality. Defaults to the PDA if null. + /// Marker that enables discounts for uplink items. + /// Whether or not the uplink was added successfully + public bool AddUplink( + EntityUid user, + FixedPoint2 balance, + EntityUid? uplinkEntity = null, + bool giveDiscounts = false) { - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly StoreSystem _store = default!; - - [ValidatePrototypeId] - public const string TelecrystalCurrencyPrototype = "Telecrystal"; - - /// - /// Adds an uplink to the target - /// - /// The person who is getting the uplink - /// The amount of currency on the uplink. If null, will just use the amount specified in the preset. - /// The entity that will actually have the uplink functionality. Defaults to the PDA if null. - /// Marker that enables discounts for uplink items. - /// Whether or not the uplink was added successfully - public bool AddUplink( - EntityUid user, - FixedPoint2? balance, - EntityUid? uplinkEntity = null, - bool giveDiscounts = false - ) - { - // Try to find target item if none passed - uplinkEntity ??= FindUplinkTarget(user); - if (uplinkEntity == null) - { - return false; - } + // Try to find target item if none passed - EnsureComp(uplinkEntity.Value); - var store = EnsureComp(uplinkEntity.Value); + uplinkEntity ??= FindUplinkTarget(user); - store.AccountOwner = user; - store.Balance.Clear(); - if (balance != null) - { - store.Balance.Clear(); - _store.TryAddCurrency(new Dictionary { { TelecrystalCurrencyPrototype, balance.Value } }, uplinkEntity.Value, store); - } + if (uplinkEntity == null) + return ImplantUplink(user, balance, giveDiscounts); - var uplinkInitializedEvent = new StoreInitializedEvent( - TargetUser: user, - Store: uplinkEntity.Value, - UseDiscounts: giveDiscounts, - Listings: _store.GetAvailableListings(user, uplinkEntity.Value, store) - .ToArray() - ); - RaiseLocalEvent(ref uplinkInitializedEvent); - // TODO add BUI. Currently can't be done outside of yaml -_- - - return true; - } + EnsureComp(uplinkEntity.Value); + + SetUplink(user, uplinkEntity.Value, balance, giveDiscounts); + + // TODO add BUI. Currently can't be done outside of yaml -_- + // ^ What does this even mean? + + return true; + } + + /// + /// Configure TC for the uplink + /// + private void SetUplink(EntityUid user, EntityUid uplink, FixedPoint2 balance, bool giveDiscounts) + { + var store = EnsureComp(uplink); + store.AccountOwner = user; + + store.Balance.Clear(); + _store.TryAddCurrency(new Dictionary { { TelecrystalCurrencyPrototype, balance } }, + uplink, + store); - /// - /// Finds the entity that can hold an uplink for a user. - /// Usually this is a pda in their pda slot, but can also be in their hands. (but not pockets or inside bag, etc.) - /// - public EntityUid? FindUplinkTarget(EntityUid user) + var uplinkInitializedEvent = new StoreInitializedEvent( + TargetUser: user, + Store: uplink, + UseDiscounts: giveDiscounts, + Listings: _store.GetAvailableListings(user, uplink, store) + .ToArray()); + RaiseLocalEvent(ref uplinkInitializedEvent); + } + + /// + /// Implant an uplink as a fallback measure if the traitor had no PDA + /// + private bool ImplantUplink(EntityUid user, FixedPoint2 balance, bool giveDiscounts) + { + var implantProto = new string(FallbackUplinkImplant); + + if (!_proto.TryIndex(FallbackUplinkCatalog, out var catalog)) + return false; + + if (!catalog.Cost.TryGetValue(TelecrystalCurrencyPrototype, out var cost)) + return false; + + if (balance < cost) // Can't use Math functions on FixedPoint2 + balance = 0; + else + balance = balance - cost; + + var implant = _subdermalImplant.AddImplant(user, implantProto); + + if (!HasComp(implant)) + return false; + + SetUplink(user, implant.Value, balance, giveDiscounts); + return true; + } + + /// + /// Finds the entity that can hold an uplink for a user. + /// Usually this is a pda in their pda slot, but can also be in their hands. (but not pockets or inside bag, etc.) + /// + public EntityUid? FindUplinkTarget(EntityUid user) + { + // Try to find PDA in inventory + if (_inventorySystem.TryGetContainerSlotEnumerator(user, out var containerSlotEnumerator)) { - // Try to find PDA in inventory - if (_inventorySystem.TryGetContainerSlotEnumerator(user, out var containerSlotEnumerator)) + while (containerSlotEnumerator.MoveNext(out var pdaUid)) { - while (containerSlotEnumerator.MoveNext(out var pdaUid)) - { - if (!pdaUid.ContainedEntity.HasValue) - continue; - - if (HasComp(pdaUid.ContainedEntity.Value) || HasComp(pdaUid.ContainedEntity.Value)) - return pdaUid.ContainedEntity.Value; - } - } + if (!pdaUid.ContainedEntity.HasValue) + continue; - // Also check hands - foreach (var item in _handsSystem.EnumerateHeld(user)) - { - if (HasComp(item) || HasComp(item)) - return item; + if (HasComp(pdaUid.ContainedEntity.Value) || HasComp(pdaUid.ContainedEntity.Value)) + return pdaUid.ContainedEntity.Value; } + } - return null; + // Also check hands + foreach (var item in _handsSystem.EnumerateHeld(user)) + { + if (HasComp(item) || HasComp(item)) + return item; } + + return null; } } diff --git a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs index 29d74071e88..97deff49260 100644 --- a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs +++ b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs @@ -97,20 +97,36 @@ private void OnRemove(EntityUid uid, SubdermalImplantComponent component, EntGot ///
public void AddImplants(EntityUid uid, IEnumerable implants) { - var coords = Transform(uid).Coordinates; foreach (var id in implants) { - var ent = Spawn(id, coords); - if (TryComp(ent, out var implant)) - { - ForceImplant(uid, ent, implant); - } - else - { - Log.Warning($"Found invalid starting implant '{id}' on {uid} {ToPrettyString(uid):implanted}"); - Del(ent); - } + AddImplant(uid, id); + } + } + + /// + /// Adds a single implant to a person, and returns the implant. + /// Logs any implant ids that don't have . + /// + /// + /// The implant, if it was successfully created. Otherwise, null. + /// > + public EntityUid? AddImplant(EntityUid uid, String implantId) + { + var coords = Transform(uid).Coordinates; + var ent = Spawn(implantId, coords); + + if (TryComp(ent, out var implant)) + { + ForceImplant(uid, ent, implant); + } + else + { + Log.Warning($"Found invalid starting implant '{implantId}' on {uid} {ToPrettyString(uid):implanted}"); + Del(ent); + return null; } + + return ent; } /// diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl index fd3e6b82aa7..cf2f2b11308 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl @@ -26,7 +26,7 @@ traitor-death-match-end-round-description-entry = {$originalName}'s PDA, with {$ traitor-role-greeting = You are an agent sent by {$corporation} on behalf of [color = darkred]The Syndicate.[/color] Your objectives and codewords are listed in the character menu. - Use the uplink loaded into your PDA to buy the tools you'll need for this mission. + Use your uplink to buy the tools you'll need for this mission. Death to Nanotrasen! traitor-role-codewords = The codewords are: [color = lightgray] @@ -36,9 +36,13 @@ traitor-role-codewords = traitor-role-uplink-code = Set your ringtone to the notes [color = lightgray]{$code}[/color] to lock or unlock your uplink. Remember to lock it after, or the stations crew will easily open it too! +traitor-role-uplink-implant = + Your uplink implant has been activated, access it from your hotbar. + The uplink is secure unless someone removes it from your body. # don't need all the flavour text for character menu traitor-role-codewords-short = The codewords are: {$codewords}. traitor-role-uplink-code-short = Your uplink code is {$code}. Set it as your PDA ringtone to access uplink. +traitor-role-uplink-implant-short = Your uplink was implanted. Access it from your hotbar. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 338f664ca2a..6808e440419 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1394,8 +1394,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity id: MobMonkeySyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink @@ -1556,8 +1555,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity id: MobKoboldSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 35cb54b0b1b..c29be592687 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -31,8 +31,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity parent: MobHumanSyndicateAgent diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 829b73deed7..8b72770b647 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -189,6 +189,15 @@ mindRoles: - MindRoleTraitor +- type: entity + id: TraitorReinforcement + parent: Traitor + components: + - type: TraitorRule + giveUplink: false + giveCodewords: false # It would actually give them a different set of codewords than the regular traitors, anyway + giveBriefing: false + - type: entity id: Revolutionary parent: BaseGameRule diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml index eadef874031..34484fe0463 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml @@ -18,12 +18,17 @@ By pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color], you'll see your personal uplink code. [bold]Setting your PDA's ringtone as this code will open the uplink.[/bold] Pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color] also lets you view your objectives and the codewords. + If you do not have a PDA when you are activated, an [color=cyan]uplink implant[/color] is provided [bold]for the full [color=red]TC[/color] price of the implant.[/bold] + It can be accessed from your hotbar. + - [bold]Make sure to close your uplink to prevent anyone else from seeing it.[/bold] You don't want [color=#cb0000]Security[/color] to get their hands on this premium selection of contraband! + [bold]Make sure to close your PDA uplink to prevent anyone else from seeing it.[/bold] You don't want [color=#cb0000]Security[/color] to get their hands on this premium selection of contraband! + + Implanted uplinks are not normally accessible to other people, so they do not have any security measures. They can, however, be removed from you with an empty implanter. From e3ea5954341318d989b36d1aa26607d77ad1a825 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 12:56:51 +0000 Subject: [PATCH 113/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f6c13583df0..7d32b19d673 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Plykiya - changes: - - message: Rechargers now show the percent charged of the item it is charging. - type: Add - id: 7031 - time: '2024-08-02T06:05:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28500 - author: ShadowCommander changes: - message: Rollerbeds now deploy when holding them in hand and clicking on the ground. @@ -3920,3 +3913,12 @@ id: 7530 time: '2024-10-18T10:03:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32776 +- author: Errant + changes: + - message: Players becoming Traitor without a PDA now correctly get the text and + audio notifications, and the code words. They are also given an Uplink Implant, + with the price taken from their starting TC. + type: Fix + id: 7531 + time: '2024-10-18T12:55:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30359 From 31d5291f6292123fbf606de2e6904343d119e9af Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Fri, 18 Oct 2024 05:58:07 -0700 Subject: [PATCH 114/173] Fix: Plushies no longer delete items when recycled (#32838) fix --- .../EntitySystems/SecretStashSystem.cs | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs index 08a69c345f0..af9b768e98b 100644 --- a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs @@ -14,6 +14,8 @@ using Content.Shared.IdentityManagement; using Content.Shared.Tools.EntitySystems; using Content.Shared.Whitelist; +using Content.Shared.Materials; +using Robust.Shared.Map; namespace Content.Shared.Storage.EntitySystems; @@ -35,6 +37,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnDestroyed); + SubscribeLocalEvent(OnReclaimed); SubscribeLocalEvent(OnInteractUsing, after: new[] { typeof(ToolOpenableSystem) }); SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent>(OnGetVerb); @@ -47,12 +50,12 @@ private void OnInit(Entity entity, ref ComponentInit args) private void OnDestroyed(Entity entity, ref DestructionEventArgs args) { - var storedInside = _containerSystem.EmptyContainer(entity.Comp.ItemContainer); - if (storedInside != null && storedInside.Count >= 1) - { - var popup = Loc.GetString("comp-secret-stash-on-destroyed-popup", ("stashname", GetStashName(entity))); - _popupSystem.PopupEntity(popup, storedInside[0], PopupType.MediumCaution); - } + DropContentsAndAlert(entity); + } + + private void OnReclaimed(Entity entity, ref GotReclaimedEvent args) + { + DropContentsAndAlert(entity, args.ReclaimerCoordinates); } private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) @@ -211,5 +214,18 @@ private bool HasItemInside(Entity entity) return entity.Comp.ItemContainer.ContainedEntity != null; } + /// + /// Drop the item stored in the stash and alert all nearby players with a popup. + /// + private void DropContentsAndAlert(Entity entity, EntityCoordinates? cords = null) + { + var storedInside = _containerSystem.EmptyContainer(entity.Comp.ItemContainer, true, cords); + if (storedInside != null && storedInside.Count >= 1) + { + var popup = Loc.GetString("comp-secret-stash-on-destroyed-popup", ("stashname", GetStashName(entity))); + _popupSystem.PopupPredicted(popup, storedInside[0], null, PopupType.MediumCaution); + } + } + #endregion } From b65303cb4e7568ce50181f4e1adec58f05f7d1f2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 12:59:14 +0000 Subject: [PATCH 115/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7d32b19d673..5b474a0f616 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: ShadowCommander - changes: - - message: Rollerbeds now deploy when holding them in hand and clicking on the ground. - type: Add - id: 7032 - time: '2024-08-02T07:05:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30000 - author: slarticodefast changes: - message: The digital audio workstation can now be rotated. @@ -3922,3 +3915,10 @@ id: 7531 time: '2024-10-18T12:55:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/30359 +- author: Beck Thompson + changes: + - message: Plushies will now eject their contents when recycled in the recycler! + type: Fix + id: 7532 + time: '2024-10-18T12:58:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32838 From 95aaa62309595d6ad2c690751e54af518a1b99cc Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Fri, 18 Oct 2024 15:38:16 +0200 Subject: [PATCH 116/173] Merge spider clan charges can be armed again (#32866) to Master (#32881) HOTFIX spider clan charges can be armed again (#32866) * fix ninja bomb component check * remove TryGetRole --- Content.Server/Ninja/Systems/SpiderChargeSystem.cs | 10 ++++++---- Content.Shared/Mind/SharedMindSystem.cs | 13 ------------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs index c916d568d5f..6594d7883bc 100644 --- a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs +++ b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs @@ -1,14 +1,12 @@ using Content.Server.Explosion.EntitySystems; -using Content.Server.GameTicking.Rules.Components; using Content.Server.Mind; using Content.Server.Objectives.Components; using Content.Server.Popups; using Content.Server.Roles; -using Content.Shared.Interaction; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; +using Content.Shared.Roles; using Content.Shared.Sticky; -using Robust.Shared.GameObjects; namespace Content.Server.Ninja.Systems; @@ -19,6 +17,7 @@ public sealed class SpiderChargeSystem : SharedSpiderChargeSystem { [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SpaceNinjaSystem _ninja = default!; @@ -41,7 +40,10 @@ private void OnAttemptStick(EntityUid uid, SpiderChargeComponent comp, ref Attem var user = args.User; - if (!_mind.TryGetRole(user, out var _)) + if (!_mind.TryGetMind(args.User, out var mind, out _)) + return; + + if (!_role.MindHasRole(mind)) { _popup.PopupEntity(Loc.GetString("spider-charge-not-ninja"), user, user); args.Cancelled = true; diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index 162bca495ca..bf0b5f650ad 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -483,19 +483,6 @@ public bool TryGetMind( return false; } - /// - /// Gets a role component from a player's mind. - /// - /// Whether a role was found - public bool TryGetRole(EntityUid user, [NotNullWhen(true)] out T? role) where T : IComponent - { - role = default; - if (!TryComp(user, out var mindContainer) || mindContainer.Mind == null) - return false; - - return TryComp(mindContainer.Mind, out role); - } - /// /// Sets the Mind's UserId, Session, and updates the player's PlayerData. This should have no direct effect on the /// entity that any mind is connected to, except as a side effect of the fact that it may change a player's From be045d067b4720eb2edbe2fb3231d8586d412aac Mon Sep 17 00:00:00 2001 From: Ilya246 <57039557+Ilya246@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:42:13 +0400 Subject: [PATCH 117/173] ghost locator maints loot (#32323) * implement * react to revenants/AI eye * rare maints loot * sprite * description * review Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * do changes * stats * networked --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Shared/Ghost/SpectralComponent.cs | 9 +++ .../Markers/Spawners/Random/maintenance.yml | 1 + .../Entities/Mobs/NPCs/revenant.yml | 1 + .../Entities/Mobs/Player/admin_ghost.yml | 2 +- .../Entities/Mobs/Player/observer.yml | 11 +++- .../Entities/Mobs/Player/replay_observer.yml | 2 +- .../Entities/Objects/Fun/spectral_locator.yml | 58 ++++++++++++++++++ .../Objects/Fun/spectrallocator.rsi/icon.png | Bin 0 -> 600 bytes .../Fun/spectrallocator.rsi/inhand-left.png | Bin 0 -> 384 bytes .../Fun/spectrallocator.rsi/inhand-right.png | Bin 0 -> 359 bytes .../Objects/Fun/spectrallocator.rsi/meta.json | 33 ++++++++++ .../Fun/spectrallocator.rsi/screen.png | Bin 0 -> 274 bytes 12 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 Content.Shared/Ghost/SpectralComponent.cs create mode 100644 Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml create mode 100644 Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png create mode 100644 Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json create mode 100644 Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png diff --git a/Content.Shared/Ghost/SpectralComponent.cs b/Content.Shared/Ghost/SpectralComponent.cs new file mode 100644 index 00000000000..3799951152e --- /dev/null +++ b/Content.Shared/Ghost/SpectralComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Ghost; + +/// +/// Marker component to identify "ghostly" entities. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpectralComponent : Component { } diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index e3a0a96417c..eeae42f2290 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -290,6 +290,7 @@ - id: ResearchDisk5000 - id: PetCarrier - id: DrinkMopwataBottleRandom + - id: SpectralLocator - id: LidSalami weight: 0.05 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index f39f2e8df95..54acea2bfe3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -8,6 +8,7 @@ components: - type: Input context: "ghost" + - type: Spectral - type: MovementSpeedModifier baseWalkSpeed: 6 baseSprintSpeed: 6 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index c16a4c3770d..e6cd62c8ee2 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -1,5 +1,5 @@ - type: entity - parent: [MobObserver, InventoryBase] + parent: [MobObserverBase, InventoryBase] id: AdminObserver name: admin observer categories: [ HideSpawnMenu ] diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 16d4101afc4..9208d4c8a98 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -28,11 +28,13 @@ layer: - GhostImpassable +# shared parent between aghosts, replay spectators and normal observers - type: entity parent: - Incorporeal - BaseMob - id: MobObserver + id: MobObserverBase + abstract: true name: observer description: Boo! categories: [ HideSpawnMenu ] @@ -66,6 +68,13 @@ tags: - BypassInteractionRangeChecks +# proto for player ghosts specifically +- type: entity + parent: MobObserverBase + id: MobObserver + components: + - type: Spectral + - type: entity id: ActionGhostBoo name: Boo! diff --git a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml index ffbc46e94c3..8a01de40809 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml @@ -1,5 +1,5 @@ - type: entity - parent: MobObserver + parent: MobObserverBase id: ReplayObserver categories: [ HideSpawnMenu ] save: false diff --git a/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml new file mode 100644 index 00000000000..930b9c4926d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml @@ -0,0 +1,58 @@ +- type: entity + id: SpectralLocatorUnpowered + parent: BaseItem + name: spectral locator + description: Appears to be a modified anomaly locator. Seems very old. + suffix: Unpowered + components: + - type: Sprite + sprite: Objects/Fun/spectrallocator.rsi + layers: + - state: icon + - state: screen + shader: unshaded + visible: false + map: ["enum.ToggleVisuals.Layer"] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + enum.ToggleVisuals.Layer: + True: { visible: true } + False: { visible: false } + - type: ItemToggle + - type: ProximityBeeper + - type: ProximityDetector + range: 12 + criteria: + components: + - Spectral # reacts to AI eye, intentional + - type: Beeper + isMuted: true + minBeepInterval: 0.25 + maxBeepInterval: 0.5 + beepSound: + path: "/Audio/Items/locator_beep.ogg" + params: + maxDistance: 1 + volume: -8 + +- type: entity + id: SpectralLocator + parent: [ SpectralLocatorUnpowered, PowerCellSlotSmallItem ] + suffix: Powered + components: + - type: PowerCellDraw + drawRate: 1 + useRate: 0 + - type: ToggleCellDraw + +- type: entity + id: SpectralLocatorEmpty + parent: SpectralLocator + suffix: Empty + components: + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b18dfd1c29475a51be2464c9c566caa7b16f2a98 GIT binary patch literal 600 zcmV-e0;m0nP)H|whZJgJGK?yg)x|KX(lMm3;=zypIJsqY$rj~8Nqvq13Yz9WxPKeZ zJ3Ud&XV3ZKx~b#Mv;`vh(vtK#W&;p9K2G%uFn@qqG!uZT%9nmF0P~RaF$DPVKK`SW mR5R7EplRdolR1J50sI981J7-C^#@b{0000Eakt zG3V{Ajeds$M2>x2f6U<0(g|%GJa5;`_CIiKpQHF=W`=J6gNy7M3LDHDIOiQYx-@o% z&zpu=pOh8Ng1r|He!F(z$A8-c<^JdPTAsEQ0@}gAppk4L_w?{bjrGCXQmq22w9Pt$ zx89Pyd(Ve!zFy{z&pIs0Dx`m}0N6#ps?-$x-;6_-waoOte>KG)qS0k@wC1*?wl zu1<|ST+(UX9?JTCSMAzm-Y2(mr>|M&{dHHZt@N7L+K=@g{C#%qcJGs0pK6u|^gXwp zl%2iz?vyIedM%E{`RrHo+pqgehMF9F!5wiXJxpl1nsWIh3tiIyMz8~cM8hnuLnlte zC#wEt4E?>wI$#^;)|`ef8?6Jvbfq`UIIk1Dn|bU1JibF3-)r0>ul?A6|GA^Y+yCD< cfLgzu(e4(@yj*hTVjajdPgg&ebxsLQ04=YmO8@`> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7c34512cb66680b381a3b12614cb7b020530b886 GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#X#z`!Wy>Eakt zG3V{gy@iJiB#wP-*Kv5<#HR5^a>jwVTN=wZ*m_NpOkiG-AaXe%a7V)|ClQ&QG3Uhk zJ~!5U|G)Lp%ecMU?me3bG#6;i>^(X$aboXomj3v%vhYc?iCOU^5%r1p;_vUNcAhl7 z^>+AHmCVg?m9OhEqYcc8Gj~nsOTWu6-BlaveSGt!l8+w+Z*MVkm{fLpZQA9Z@58?P zr(NDzcKYq%+O@nLlRakjl{t9GX^3JkmMV0x3 zY(Dv_qC3mNFCI(N^IPQT@~l2>MZO$R)SrZVS*F?rFF8hkEUE$n>)ebp7Y)- zcIWxs-_DwE<4^B6+rMvPP Date: Fri, 18 Oct 2024 11:24:43 -0400 Subject: [PATCH 118/173] Add Towels (#32235) * Towels * make smoler * Huh, wonder why that didnt fail locally. The curse of CaPiTaLiZaTiOn * Teal swapped for LightBlue for medical. * Appease the linter? * magic? * mimery * lefthandedness --- Resources/Locale/en-US/forensics/fibers.ftl | 4 + .../DeltaV/Loadouts/Miscellaneous/glasses.yml | 17 + .../Entities/Clothing/Multiple/towel.yml | 764 ++++++++++++++++++ .../Loadouts/Miscellaneous/glasses.yml | 18 - .../Loadouts/Miscellaneous/trinkets.yml | 190 +++++ .../Prototypes/Loadouts/loadout_groups.yml | 17 + .../Clothing/Multiple/towel.rsi/NTmono.png | Bin 0 -> 1369 bytes .../Multiple/towel.rsi/equipped-BELT.png | Bin 0 -> 545 bytes .../Multiple/towel.rsi/equipped-HELMET.png | Bin 0 -> 556 bytes .../towel.rsi/equipped-INNERCLOTHING.png | Bin 0 -> 584 bytes .../Clothing/Multiple/towel.rsi/icon.png | Bin 0 -> 284 bytes .../Multiple/towel.rsi/iconstripe.png | Bin 0 -> 1506 bytes .../Multiple/towel.rsi/inhand-left.png | Bin 0 -> 428 bytes .../Multiple/towel.rsi/inhand-right.png | Bin 0 -> 430 bytes .../Clothing/Multiple/towel.rsi/meta.json | 40 + 15 files changed, 1032 insertions(+), 18 deletions(-) create mode 100644 Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml create mode 100644 Resources/Prototypes/Entities/Clothing/Multiple/towel.yml create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/icon.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/iconstripe.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png create mode 100644 Resources/Textures/Clothing/Multiple/towel.rsi/meta.json diff --git a/Resources/Locale/en-US/forensics/fibers.ftl b/Resources/Locale/en-US/forensics/fibers.ftl index 53cfe5e7c12..72eae55e380 100644 --- a/Resources/Locale/en-US/forensics/fibers.ftl +++ b/Resources/Locale/en-US/forensics/fibers.ftl @@ -25,3 +25,7 @@ fibers-white = white fibers-yellow = yellow fibers-regal-blue = regal blue fibers-olive = olive +fibers-silver = silver +fibers-gold = gold +fibers-maroon = maroon +fibers-pink = pink diff --git a/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml new file mode 100644 index 00000000000..479b21d3af9 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml @@ -0,0 +1,17 @@ +- type: loadoutEffectGroup + id: CheapSunglassesTimer + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobMusician + time: 7200 # 2 hours of being a rockstar + +# Cheap Sunglasses +- type: loadout + id: GlassesCheapSunglasses + effects: + - !type:GroupLoadoutEffect + proto: CheapSunglassesTimer + equipment: + eyes: ClothingEyesGlassesCheapSunglasses diff --git a/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml b/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml new file mode 100644 index 00000000000..d3f7dc480ca --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml @@ -0,0 +1,764 @@ +- type: entity + id: BaseTowel + name: base towel + abstract: true + description: If you want to survive out here, you gotta know where your towel is. + parent: [ UnsensoredClothingUniformBase, ClothingHeadBase, ClothingBeltBase ] + components: + - type: Sprite + sprite: Clothing/Multiple/towel.rsi + - type: Clothing + sprite: Clothing/Multiple/towel.rsi + slots: + - BELT + - INNERCLOTHING + - HEAD + femaleMask: UniformTop + equipSound: + unequipSound: + - type: Spillable + solution: absorbed + - type: Absorbent + pickupAmount: 15 + - type: SolutionContainerManager + solutions: + food: + maxVol: 30 + reagents: + - ReagentId: Fiber + Quantity: 30 + absorbed: + maxVol: 30 + - type: Fiber + fiberColor: fibers-white + - type: DnaSubstanceTrace + - type: Item + size: Small + +- type: entity + id: TowelColorWhite + name: white towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EAE8E8" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EAE8E8" + right: + - state: inhand-right + color: "#EAE8E8" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EAE8E8" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EAE8E8" + belt: + - state: equipped-BELT + color: "#EAE8E8" + - type: Fiber + fiberColor: fibers-white + +- type: entity + id: TowelColorPurple + name: purple towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#9C0DE1" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#9C0DE1" + right: + - state: inhand-right + color: "#9C0DE1" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#9C0DE1" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#9C0DE1" + belt: + - state: equipped-BELT + color: "#9C0DE1" + - type: Fiber + fiberColor: fibers-purple + +- type: entity + id: TowelColorRed + name: red towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#940000" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#940000" + right: + - state: inhand-right + color: "#940000" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#940000" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#940000" + belt: + - state: equipped-BELT + color: "#940000" + - type: Fiber + fiberColor: fibers-red + +- type: entity + id: TowelColorBlue + name: blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#0089EF" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#0089EF" + right: + - state: inhand-right + color: "#0089EF" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#0089EF" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#0089EF" + belt: + - state: equipped-BELT + color: "#0089EF" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorDarkBlue + name: dark blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#3285ba" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#3285ba" + right: + - state: inhand-right + color: "#3285ba" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#3285ba" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#3285ba" + belt: + - state: equipped-BELT + color: "#3285ba" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorLightBlue + name: light blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#58abcc" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#58abcc" + right: + - state: inhand-right + color: "#58abcc" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#58abcc" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#58abcc" + belt: + - state: equipped-BELT + color: "#58abcc" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorTeal + name: teal towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#3CB57C" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#3CB57C" + right: + - state: inhand-right + color: "#3CB57C" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#3CB57C" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#3CB57C" + belt: + - state: equipped-BELT + color: "#3CB57C" + - type: Fiber + fiberColor: fibers-teal + +- type: entity + id: TowelColorBrown + name: brown towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#723A02" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#723A02" + right: + - state: inhand-right + color: "#723A02" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#723A02" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#723A02" + belt: + - state: equipped-BELT + color: "#723A02" + - type: Fiber + fiberColor: fibers-brown + +- type: entity + id: TowelColorLightBrown + name: light brown towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#c59431" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#c59431" + right: + - state: inhand-right + color: "#c59431" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#c59431" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#c59431" + belt: + - state: equipped-BELT + color: "#c59431" + - type: Fiber + fiberColor: fibers-brown + +- type: entity + id: TowelColorGray + name: gray towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#999999" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#999999" + right: + - state: inhand-right + color: "#999999" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#999999" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#999999" + belt: + - state: equipped-BELT + color: "#999999" + - type: Fiber + fiberColor: fibers-grey + +- type: entity + id: TowelColorGreen + name: green towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#5ABF2F" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#5ABF2F" + right: + - state: inhand-right + color: "#5ABF2F" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#5ABF2F" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#5ABF2F" + belt: + - state: equipped-BELT + color: "#5ABF2F" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorDarkGreen + name: dark green towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#79CC26" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#79CC26" + right: + - state: inhand-right + color: "#79CC26" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#79CC26" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#79CC26" + belt: + - state: equipped-BELT + color: "#79CC26" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorGold + name: gold towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#F7C430" + - state: iconstripe + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#F7C430" + right: + - state: inhand-right + color: "#F7C430" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#F7C430" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#F7C430" + belt: + - state: equipped-BELT + color: "#F7C430" + - type: Fiber + fiberColor: fibers-gold + +- type: entity + id: TowelColorOrange + name: orange towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EF8100" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EF8100" + right: + - state: inhand-right + color: "#EF8100" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EF8100" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EF8100" + belt: + - state: equipped-BELT + color: "#EF8100" + - type: Fiber + fiberColor: fibers-orange + +- type: entity + id: TowelColorBlack + name: black towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#535353" + right: + - state: inhand-right + color: "#535353" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#535353" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#535353" + belt: + - state: equipped-BELT + color: "#535353" + - type: Fiber + fiberColor: fibers-black + +- type: entity + id: TowelColorPink + name: pink towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#ffa69b" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#ffa69b" + right: + - state: inhand-right + color: "#ffa69b" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#ffa69b" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#ffa69b" + belt: + - state: equipped-BELT + color: "#ffa69b" + - type: Fiber + fiberColor: fibers-pink + +- type: entity + id: TowelColorYellow + name: yellow towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#ffe14d" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#ffe14d" + right: + - state: inhand-right + color: "#ffe14d" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#ffe14d" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#ffe14d" + belt: + - state: equipped-BELT + color: "#ffe14d" + - type: Fiber + fiberColor: fibers-yellow + +- type: entity + id: TowelColorMaroon + name: maroon towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#cc295f" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#cc295f" + right: + - state: inhand-right + color: "#cc295f" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#cc295f" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#cc295f" + belt: + - state: equipped-BELT + color: "#cc295f" + - type: Fiber + fiberColor: fibers-maroon + +- type: entity + id: TowelColorSilver + name: silver towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#d0d0d0" + - state: iconstripe + color: "#F7C430" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#d0d0d0" + right: + - state: inhand-right + color: "#d0d0d0" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#d0d0d0" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#d0d0d0" + belt: + - state: equipped-BELT + color: "#d0d0d0" + - type: Fiber + fiberColor: fibers-silver + +- type: entity + id: TowelColorMime + name: silent towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EAE8E8" + - state: iconstripe + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EAE8E8" + right: + - state: inhand-right + color: "#EAE8E8" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EAE8E8" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EAE8E8" + belt: + - state: equipped-BELT + color: "#EAE8E8" + - type: Fiber + fiberColor: fibers-white + +- type: entity + id: TowelColorNT + name: NanoTrasen brand towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#004787" + - state: iconstripe + color: "#EAE8E8" + - state: NTmono + color: "#EAE8E8" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#004787" + right: + - state: inhand-right + color: "#004787" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#004787" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#004787" + belt: + - state: equipped-BELT + color: "#004787" + - type: Fiber + fiberColor: fibers-regal-blue + +- type: entity + id: TowelColorCentcom + name: centcom towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#29722e" + - state: iconstripe + color: "#F7C430" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#29722e" + right: + - state: inhand-right + color: "#29722e" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#29722e" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#29722e" + belt: + - state: equipped-BELT + color: "#29722e" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorSyndicate + name: syndicate towel + parent: [ BaseTowel, BaseSyndicateContraband ] + components: + - type: Sprite + layers: + - state: icon + color: "#535353" + - state: iconstripe + color: "#940000" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#535353" + right: + - state: inhand-right + color: "#535353" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#535353" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#535353" + belt: + - state: equipped-BELT + color: "#535353" + - type: Fiber + fiberColor: fibers-black + \ No newline at end of file diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml index 41cad93a21f..06283d91816 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml @@ -8,15 +8,6 @@ role: JobLibrarian time: 3600 # 1 hour of being the biggest nerd on the station -- type: loadoutEffectGroup # DeltaV - id: CheapSunglassesTimer - effects: - - !type:JobRequirementLoadoutEffect - requirement: - !type:RoleTimeRequirement - role: JobMusician - time: 7200 # 2 hours of being a rockstar - - type: loadoutEffectGroup id: JensenTimer effects: @@ -51,12 +42,3 @@ proto: JensenTimer equipment: eyes: ClothingEyesGlassesJensen - -# Cheap Sunglasses - DeltaV -- type: loadout # DeltaV - id: GlassesCheapSunglasses - effects: - - !type:GroupLoadoutEffect - proto: CheapSunglassesTimer - equipment: - eyes: ClothingEyesGlassesCheapSunglasses diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 14c1174a7d0..78b5f0bc9ea 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -155,3 +155,193 @@ storage: back: - ClothingNeckGoldAutismPin + +# Towels +- type: loadout + id: TowelColorWhite + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 36000 # 10hr + storage: + back: + - TowelColorWhite + +- type: loadout + id: TowelColorSilver + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 1800000 # 500hr + storage: + back: + - TowelColorSilver + +- type: loadout + id: TowelColorGold + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 3600000 # 1000hr + storage: + back: + - TowelColorGold + +- type: loadout + id: TowelColorLightBrown + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Cargo + time: 360000 # 100hr + storage: + back: + - TowelColorLightBrown + +- type: loadout + id: TowelColorGreen + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Civilian + time: 360000 # 100hr + storage: + back: + - TowelColorGreen + +- type: loadout + id: TowelColorDarkBlue + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Command + time: 360000 # 100hr + storage: + back: + - TowelColorDarkBlue + +- type: loadout + id: TowelColorOrange + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Engineering + time: 360000 # 100hr + storage: + back: + - TowelColorOrange + +- type: loadout + id: TowelColorLightBlue + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Medical + time: 360000 # 100hr + storage: + back: + - TowelColorLightBlue + +- type: loadout + id: TowelColorPurple + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Science + time: 360000 # 100hr + storage: + back: + - TowelColorPurple + +- type: loadout + id: TowelColorRed + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Security + time: 360000 # 100hr + storage: + back: + - TowelColorRed + +- type: loadout + id: TowelColorGray + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobPassenger + time: 360000 # 100hr + storage: + back: + - TowelColorGray + +- type: loadout + id: TowelColorBlack + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobChaplain + time: 360000 # 100hr + storage: + back: + - TowelColorBlack + +- type: loadout + id: TowelColorDarkGreen + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobLibrarian + time: 360000 # 100hr + storage: + back: + - TowelColorDarkGreen + +- type: loadout + id: TowelColorMaroon + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobLawyer + time: 360000 # 100hr + storage: + back: + - TowelColorMaroon + +- type: loadout + id: TowelColorYellow + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobClown + time: 360000 # 100hr + storage: + back: + - TowelColorYellow + +- type: loadout + id: TowelColorMime + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobMime + time: 360000 # 100hr + storage: + back: + - TowelColorMime \ No newline at end of file diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index e29a7abd9c0..1f4318340ec 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -28,6 +28,23 @@ - ClothingNeckTransPin - ClothingNeckAutismPin - ClothingNeckGoldAutismPin + - TowelColorBlack + - TowelColorDarkBlue + - TowelColorDarkGreen + - TowelColorGold + - TowelColorGray + - TowelColorGreen + - TowelColorLightBlue + - TowelColorLightBrown + - TowelColorMaroon + - TowelColorMime + - TowelColorOrange + - TowelColorPurple + - TowelColorRed + - TowelColorSilver + - TowelColorLightBlue + - TowelColorWhite + - TowelColorYellow - AACTablet # DeltaV - GoldRing # DeltaV - SilverRing # DeltaV diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png b/Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png new file mode 100644 index 0000000000000000000000000000000000000000..e293a0e7e9e23ef73016a16f2cf761a622862719 GIT binary patch literal 1369 zcmV-f1*ZCmP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=HYlH({0hW~SlJpz&t634-ORLu?M`1@iz?j+s2 z(_PcEe>SEJSjdvBN05Z^^T!N-;iBRklA7m|bHtTODqJz~cwA-gDW<*OFFu#>{2&k4 z0z)Ji<#@Du>Q~71?S-2U+8*V>&lUF55XA@AvOKSOzYh{}KID{6LuDM3T-@$M-A+U8 zRNO;3?{tNA4C^^O2n<>33P-{`ge3009}&p9lT?faJ&8dtiX8KRAqkzvkdTMZyNxm4 zC+H!`w^?}3{xy3_KG#z&Pr1xzjxhOff%Hi(mm9u!ELTMQxB!az-RGS5oZaUf$Jf=A zkd91Mkd5_MP!TMyJ8wijpcLd2vBy%u!UcT{;(XPwN znU@%66F{hBF|fh@0<4r2^<&9VLsdnSs%ACyphatzoU-PeEw4kanpiTmY-Vo7s*5LA z&u;EsycRBkGf+z|R=ku_D~Ae46}Bq$D_eSnh+=BY2 zxbd&Zg@x`r$OWK#&+P+hef`e0o!GGpS5Bi~_hEf_4eWLOsMX&cUxr?W{*Q*{CcF*& zl|tXz5_lUQ>xS=$=E>0R^l*8^;`IpU_H@5?#QBFKdLADl{H3|@J@LE@y$rn!{YQo- z{`uoC$={^ptj8}b#WVl_0flKpLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~mkDisww zh&W`ZP8LK(9Hojyuu$3xtvZ-o`XMxFNK#xJ1=oUuAB$B77iV1^Tm?b!1H{?ENzp}0 z{9jUN5#zyeKi=JY+`R*YT8XJ<+c=4yx>~vc4i16Q0%fmxyt}itw|~zx`uhPL{c?q@odBW$ z000JJOGiWi%mB;)%-_LZ8UO$Q32;bRa{vGf6951U69E94oEQKA00(qQO+^Rj2@wYo zD=A#95dZ)HFG)l}R9M69&`}KlAPhsn&C~oVs3-71_<`IRculJS;82qF#fZKUoSAk# b0Pw60g3l3-71@L-00000NkvXXu0mjfXX<*U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccb1f26ae0a0380f0ddecd50387a04677ec556d GIT binary patch literal 545 zcmV++0^a?JP)Xi?m<6&CA7kzj4IkN<1(kdhgO zaU6*u0ssI200000fZywKxrEZsbhSaoaqNED!iQlXt#wgu?mCn6%PHCbzmzO$$RX>iUt9S#SY=XrUYrfJum?)yF)H$DH$n8XJ0yP`(vJN03^4@2Yi0|*sd!Jo= zZTw9-z*0dX<=Ia@ma@zMGgP}0000000000@GsR2CHy2^>0;Nz2iNO0JRXnb_1=RM z>w>T2<#K%HeT$@qVQ4ZR5XFIrEso@i&jxR|+p+^nslXU(Iv)_lvq_~?_|D~6)B)C7 zI-k#Uzu!Z8GTU-KAWBb%l~Q4zXY$@J=ajp2fRwV+T9fzw)2_$%Z!tJEj$;=uwX_Iv z@l8f#(p^Zqqm>wIi_Uxd?se##Yc?E_T6bZss=GiOM)2N~G3F)r?=*+>^{)Q|qTKm> j{EcX__*cgVfWPAdSPxfvvE&Rc00000NkvXXu0mjf%ar*< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..769f67b9a0ccf96242fcf57fd71914dd621ed23b GIT binary patch literal 556 zcmV+{0@MA8P))(z6E!o$r;jc7uQ_CHS}?9TEw*3V&y2A%@!tsNu>X4q9_XQ z`PmqW=L{=#U3a2H$nvCC_u5&u2L2ptZ&@3@D1?IsvKsLDC8cA^dm4Y1=jn zA#6VTbzQ?4gP*a45Zmtor_(8W=J!_!AwWtADJA;8hf)ec2&^rBh7WT*9xuk2>%CtT z1?G8%b8giHd|Uxy5q@L!5fKp)5fKp)5fKr6xa4=~k9vT6o(*_)E?H{8JkPN#3-UZi zUDp8qc5C-8Lf3Vdct&6x$7@c@vLxklNC~KvLRppofU+!MtwlU2u~%#ScJLttSZnWc zN0r7ZD2;o--|5GeN%*lJd%^na}LHu;iz0IS{Id_-arjNnf u*7Uoyq~9?oA|fIpA|fIpA|fJsKYsvleiaGx$2jKz0000_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..6105c8aba12f30720162c4b84efec239d14f43b4 GIT binary patch literal 584 zcmV-O0=NB%P)ryNGU-G0cBZ&wRXCO z29Fv1tGH!Z!tHj8nuMQNF}?^){J~pmK?o7`TfqrnjKO}te-eSoD+d^3(kDPEwOI%F z`jRBza5%gbk=p^jzJFH(7-Kj!V9O3bO~4jw0BRB3q63l_K>(PRo3*NN%mid}fG=i^ zbvR}Mvh4%>CD8>}N`clIB>`INX~yT**!a7UFE>q7oX_VG0DyB2j4@D3P5bbsX_7w- z4Z{GO^C=nb^Dqoi@uLL0B+L_oSp@y~IW!OiK@bE%5ClOG1VMZ)i{7I6XZ0BU0c*$I zEfFGwfcyOpr_*T?mO2TpM*sj;Ih6TXaIkOS(vE~J#;3g3L@Q#VP@HS~S|lmuf8NGb6eC3DUE zCxsAoC#bbXYmS)n%7thfA=ixH29DJnkwU{R=0DiB?I@+pYX8UM0lo&Tr%{3+{tmwf W=)WVn4kF6{0000Lk|z2UhtGOXcR~Obi^cNq zaoUT+Fii5?wypb_fPjf;ewTAri#QF~d%rm^rKm*QRq$02cLYBR7I>YU^P$A;TX63^ zh-fjaZwW||GvH_Nv-fue#&HAyF!KiR3M|l43YZy9)4UY8A9WW(05dNjdmXQbFob}V zl1`xSdk0{OF@lKZqG!M|J1HfpqyG%MuA2ZL#<+p37f}tan)u8j+7r=&)vLG`k!Zk| ie?}sr1zRi@i{t^Oca^Rn3Amg90000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHlH@21MgLjFECES?#Bz8>%noMxbHQX*W<9#Q zrfUAmgbfy0lJ5bW>Bc{QPxluN%9&k=YAL7WafBQ)7c|UYN8VTRVPE&brwjK_c6aY! zm;|+4w_48l0(*RU;1+}Gv)$S0VLOga$IYRv$SYcZOcHj!>=cfpJg!E{rjM!ClWIEy zcPi%;z25NVWZk<*Lr|#HBSs1H5E8$yc4Z*z3{p^MTuBt;Xj@p!p%U>Y6A1G3dbis9 zM}eM1zO~$I_3y1$;&VB6d8K7K8lmxS2gUcr-x5CrmU~A0+>z<#>aECgcAIltZ&yNs zqUp>i?{4a>XE3lra@mh16vY|Q)?G4+`QjVkbl-eMX_SdUWjYGfsnDdc>qZSJ1|AG1 z%-mSE&A=#glZz7yO;*tBVqn&II4}#s_grYl%{yKrL*z~v$^>VGM?Ng>SDl|JZqBwO zB5!xCkQc9+i!>Iwb;T$Ep?SE)E%2=z{QhD7V5)*(+%g+pu=skpsF7agmTb;~aS`>k zD#&R+4j>U?MAIkIdbA< z#@+-FQIaUwV0{5r2odu~gJBMpC^5tsQ`BfK=2()XkYY+n)7s>UiUy6ERMj+VF|lCL zlBt$#UfZeXVvVZ@P!4jXxtiMcjqh8bs?I&J1z?$i#|H{}!5=uqQLYK_x7HCUbM z%>}LPBrawk#(_Xw7XeIYUd+5v2)xKGWjQ+ zpRP08ax{yMI+FitUhXpw)X^F?ogEZg&S}*l>nrk25`E}sN$@)KY9YKVT`Hw3lixY| zVn$CQB<#M^+AuGpt>!3eocD#_soh5%pRFGp$-w5!dn)_~ckX-g`Em5)=znq~6Tdw0 z57_++nO(Be@+GMY0004nX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ?)7;6+4JH zWT;LSL`58>ibb$c+6t{Ym|XfHG-*guTpR`0f`cE6RRitwOXs{#9AZUDAwDM_Gw6cEk6f2se&bwlSm2o< zBb}Th4iSrm7M5F>6%Cbmia4yO8s!Tamle)ioYhi=HSWn@7|dzQDX!BTMhuIHBLNXI zD%d~?79zB2q?kz3e$>N1Lere~bWu zU7%jI?eAmTuAcz@XW&X}`pY$7=9BblQwtvfz1zUWbyJh~fXf|V@JW{p$&vgtg?t`( zKcjET0t2@|_o~}lV;`pvK$^N*x&aOjfzbkGuX((?v$eN>&ouh`0UiBvg{++bq5uE@ z24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2j~eA5*!}T ztaju8004$bL_t(o!|l>B4#OZ21i&SVxYy9p@fsdWM|T}RIT~D9irm=5$VstN1AD6j zAR;3AF}M1`TI*0%2LL(e)AR4u;bw*q!Z5Q-1>Nd!5rLT@rQ{x2K`CYIp|jz)1~@hr z5yTkXBcE^&_uixTKGpd40H4jjX?*mWy`ZXStt|;BBBH;r0T-A?afbCgnE(I)07*qo IM6N<$f?v3@A^-pY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8b4428ae6d16a528c5f32b5a7102684e28a387 GIT binary patch literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU@Z1@aSW-r_4bzSx)ucy)(71) zy$-8wNi$s6q`HAksyggo(weQ)JwbHZa z1VVHjY7Xyz<+#|bZ9x{}vBERwSe6u>oA~|T-G5#y4f>RIPYdN~I;{CO)jz6!{=K3m zk=WO+TSFG#xT~)B>QvHV=6x%ffr3|=grc(3dN|8V9Zn0le)9dWs=PLZW5FGMAFKcN T&%TLY1v$vm)z4*}Q$iB}hiAW% literal 0 HcmV?d00001 diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef955ba5f843e678007f4a8ef37ed2af8312bd0 GIT binary patch literal 430 zcmV;f0a5;mP)@}?M(FTm; zi2MDHVHghCgmqrw6bVS}zi(x|&(?DaRmzvwzPr}iw{08Mf8Rnlukh0ZOw)vAS)QMd zY@dZ~t}RngZdKIY_S)?7j71%}*-Sv{1>vy7KO`XOS0Ege5E1{Y1e|7I Date: Fri, 18 Oct 2024 21:20:04 +0200 Subject: [PATCH 119/173] Allow strip removing items if you're holding something (#32750) You were already able to strip more items at once from somebody than you could hold, and they would drop to the floor. This matched the behavior in SS13. Annoyingly, however, you were not allowed to *start* a stripping action if you're holding something. This just feels like an annoying paper cut, so this is no longer a thing. --- Content.Shared/Strip/SharedStrippableSystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Strip/SharedStrippableSystem.cs b/Content.Shared/Strip/SharedStrippableSystem.cs index e1c3d8ef0d8..7afe503275a 100644 --- a/Content.Shared/Strip/SharedStrippableSystem.cs +++ b/Content.Shared/Strip/SharedStrippableSystem.cs @@ -103,7 +103,7 @@ private void OnStripButtonPressed(Entity strippable, ref St if (userHands.ActiveHandEntity != null && !hasEnt) StartStripInsertInventory((user, userHands), strippable.Owner, userHands.ActiveHandEntity.Value, args.Slot); - else if (userHands.ActiveHandEntity == null && hasEnt) + else if (hasEnt) StartStripRemoveInventory(user, strippable.Owner, held!.Value, args.Slot); } @@ -135,7 +135,7 @@ private void StripHand( if (user.Comp.ActiveHandEntity != null && handSlot.HeldEntity == null) StartStripInsertHand(user, target, user.Comp.ActiveHandEntity.Value, handId, targetStrippable); - else if (user.Comp.ActiveHandEntity == null && handSlot.HeldEntity != null) + else if (handSlot.HeldEntity != null) StartStripRemoveHand(user, target, handSlot.HeldEntity.Value, handId, targetStrippable); } From 3a196cb4150ab7300de52c8cec0a7c873908c440 Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 18 Oct 2024 19:21:12 +0000 Subject: [PATCH 120/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 39 ++++++++++++------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5b474a0f616..e117972a960 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,28 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: The digital audio workstation can now be rotated. - type: Tweak - id: 7033 - time: '2024-08-02T10:02:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30571 -- author: slarticodefast - changes: - - message: Added potassium iodide. It gives you short term radiation protection - and can be found in radiation treatment kits. - type: Add - - message: Added haloperidol. It removes most stimulating/hallucinogenic drugs from - the body and makes you drowsy. - type: Add - - message: Added the drowsiness status effect. It blurs your vision and makes you - randomly fall asleep. Drink some coffee or cola to remove it. - type: Add - - message: Chloral hydrate now makes you drowsy instead of forcing you to sleep - instantly. - type: Tweak - id: 7034 - time: '2024-08-02T17:12:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27454 - author: Blackern5000 changes: - message: Winter boots no longer have ugly outlines @@ -3922,3 +3898,18 @@ id: 7532 time: '2024-10-18T12:58:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32838 +- author: Ilya246 + changes: + - message: Spectral locator, rare maintenance loot that lets you know if any ghosts + are nearby. + type: Add + id: 7533 + time: '2024-10-18T13:42:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32323 +- author: PJB3005 + changes: + - message: You can now start removing items via stripping while holding something. + type: Tweak + id: 7534 + time: '2024-10-18T19:20:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32750 From 61025a7d00f3529bea9a92aecfd66eeb2f383e0e Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Fri, 18 Oct 2024 19:40:17 -0700 Subject: [PATCH 121/173] Scalpels now cut like knives (#32858) * im so tired * silly me * yeah * Update Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- .../Prototypes/Entities/Objects/Specific/Medical/surgery.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 9b6da25eb7d..5b0c97dc837 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -68,6 +68,10 @@ components: - type: Sharp butcherDelayModifier: 1.5 # Butchering with a scalpel, regardless of the type, will take 50% longer + - type: Tool + qualities: + - Slicing + speedModifier: 0.66 # pretend the sixes go on forever :) - type: Utensil types: - Knife From 7ea34b95c863c55481afef7fe85176cdac31f5c2 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 19 Oct 2024 02:41:23 +0000 Subject: [PATCH 122/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index e117972a960..1360fb664d3 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Blackern5000 - changes: - - message: Winter boots no longer have ugly outlines - type: Tweak - id: 7035 - time: '2024-08-02T23:05:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30350 - author: lzk228 changes: - message: Figurines will say phrases on activation. @@ -3913,3 +3906,10 @@ id: 7534 time: '2024-10-18T19:20:05.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32750 +- author: Beck Thompson + changes: + - message: Scalpels and shivs now work as knives! + type: Add + id: 7535 + time: '2024-10-19T02:40:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32858 From d523b1f79fafd4736a2ef86e206bcced705eec12 Mon Sep 17 00:00:00 2001 From: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com> Date: Sat, 19 Oct 2024 12:28:49 +0200 Subject: [PATCH 123/173] exponential backoff for admin logs db update (#32865) * exponential backoff for admin logs db update * Update Content.Server/Database/ServerDbBase.cs --------- Co-authored-by: Pieter-Jan Briers --- Content.Server/Database/ServerDbBase.cs | 37 +++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index b750c13e212..c85b774e381 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -875,10 +875,41 @@ public async Task UpdateAdminRankAsync(AdminRank rank, CancellationToken cancel) public async Task AddAdminLogs(List logs) { + const int maxRetryAttempts = 5; + var initialRetryDelay = TimeSpan.FromSeconds(5); + DebugTools.Assert(logs.All(x => x.RoundId > 0), "Adding logs with invalid round ids."); - await using var db = await GetDb(); - db.DbContext.AdminLog.AddRange(logs); - await db.DbContext.SaveChangesAsync(); + + var attempt = 0; + var retryDelay = initialRetryDelay; + + while (attempt < maxRetryAttempts) + { + try + { + await using var db = await GetDb(); + db.DbContext.AdminLog.AddRange(logs); + await db.DbContext.SaveChangesAsync(); + _opsLog.Debug($"Successfully saved {logs.Count} admin logs."); + break; + } + catch (Exception ex) + { + attempt += 1; + _opsLog.Error($"Attempt {attempt} failed to save logs: {ex}"); + + if (attempt >= maxRetryAttempts) + { + _opsLog.Error($"Max retry attempts reached. Failed to save {logs.Count} admin logs."); + return; + } + + _opsLog.Warning($"Retrying in {retryDelay.TotalSeconds} seconds..."); + await Task.Delay(retryDelay); + + retryDelay *= 2; + } + } } protected abstract IQueryable StartAdminLogsQuery(ServerDbContext db, LogFilter? filter = null); From aeeb4749f8cf500139c615bde867e9d899254d90 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 19 Oct 2024 16:51:29 +0200 Subject: [PATCH 124/173] HOTFIX submodule update (#32897) Update submodule This fixes an important memory leak. --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index d1d43f834b8..32bca7cfd41 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit d1d43f834b8845da698ef1898e8191ab159ee367 +Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af From 1d0897225701ede43f9aeb24a8fd88761f1bb746 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 19 Oct 2024 14:52:37 +0000 Subject: [PATCH 125/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1360fb664d3..30c9c421355 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: lzk228 - changes: - - message: Figurines will say phrases on activation. - type: Add - id: 7036 - time: '2024-08-03T14:06:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30455 - author: JoelZimmerman changes: - message: Dank pizza is now cooked with cannabis leaves instead of ambrosia vulgaris. @@ -3913,3 +3906,10 @@ id: 7535 time: '2024-10-19T02:40:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32858 +- author: PJB3005 + changes: + - message: Fix more performance issues on long-running game servers, hopefully. + type: Fix + id: 7536 + time: '2024-10-19T14:51:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32897 From 30fef5fa1b10204a433236d4dfd5eb41110fc54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Lindert?= Date: Sat, 19 Oct 2024 17:31:45 +0200 Subject: [PATCH 126/173] Fix for low zombie blood (#32532) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix for low zombie blood Co-authored-by: Łuaksz --- Content.Server/Body/Systems/BloodstreamSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 18790e7326b..198123cc5fd 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -472,7 +472,7 @@ public void ChangeBloodReagent(EntityUid uid, string reagent, BloodstreamCompone return; } - var currentVolume = bloodSolution.RemoveReagent(component.BloodReagent, bloodSolution.Volume); + var currentVolume = bloodSolution.RemoveReagent(component.BloodReagent, bloodSolution.Volume, ignoreReagentData: true); component.BloodReagent = reagent; From 098542540028a95e5b1d0871007707c6e635a0c8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 19 Oct 2024 15:32:52 +0000 Subject: [PATCH 127/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 30c9c421355..9f0641fc64e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: JoelZimmerman - changes: - - message: Dank pizza is now cooked with cannabis leaves instead of ambrosia vulgaris. - type: Tweak - id: 7037 - time: '2024-08-03T14:07:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30430 - author: Ian321 changes: - message: Help menus now include the linked guides. @@ -3913,3 +3906,10 @@ id: 7536 time: '2024-10-19T14:51:29.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32897 +- author: insoPL + changes: + - message: Zombies once again have zombie blood. + type: Fix + id: 7537 + time: '2024-10-19T15:31:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32532 From 920c92f4ebea16a33cb406351f3d587c99362fe5 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Sat, 19 Oct 2024 19:46:31 -0700 Subject: [PATCH 128/173] MMIs and positronic brains now talk like pAIs in plushies (#32914) * commit * spacing fix --- .../Prototypes/Entities/Objects/Specific/Robotics/mmi.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml index 5155e70cca4..33eabbb60b5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml @@ -49,6 +49,10 @@ guides: - Cyborgs - Robotics + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash - type: entity parent: MMI @@ -127,3 +131,7 @@ guides: - Cyborgs - Robotics + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash From 2d65095e95d3007d0443229dadf7110bbabaf70f Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 20 Oct 2024 02:47:38 +0000 Subject: [PATCH 129/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9f0641fc64e..1cf8195bcf7 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Ian321 - changes: - - message: Help menus now include the linked guides. - type: Fix - id: 7038 - time: '2024-08-04T03:32:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30462 - author: DrSmugleaf changes: - message: The Toggle Internals verb no longer shows up in the context menu if no @@ -3913,3 +3906,11 @@ id: 7537 time: '2024-10-19T15:31:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32532 +- author: Beck Thompson + changes: + - message: When MMIs and positronic brains are inserted into plushies, their names + will be updated to the plushies name (Exactly the same way pAIs do). + type: Add + id: 7538 + time: '2024-10-20T02:46:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32914 From f34874123014b7d6ef2d74a0792d36bca1e839d3 Mon Sep 17 00:00:00 2001 From: Calecute <34964590+Calecute@users.noreply.github.com> Date: Sun, 20 Oct 2024 00:41:44 -0300 Subject: [PATCH 130/173] Blunt damage will do stamina damage on wide attacks (#32422) Fix: blunt damage will now do stamina damage on wide attacks. --- Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 9b15e5f8a08..767b5c4ef62 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -670,6 +670,12 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero) { + // If the target has stamina and is taking blunt damage, they should also take stamina damage based on their blunt to stamina factor + if (damageResult.DamageDict.TryGetValue("Blunt", out var bluntDamage)) + { + _stamina.TakeStaminaDamage(entity, (bluntDamage * component.BluntStaminaDamageFactor).Float(), visual: false, source: user, with: meleeUid == user ? null : meleeUid); + } + appliedDamage += damageResult; if (meleeUid == user) From 83174f60a377888ce61b52499010087b7f6b6347 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 20 Oct 2024 03:42:50 +0000 Subject: [PATCH 131/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1cf8195bcf7..aee53e1d2e4 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: DrSmugleaf - changes: - - message: The Toggle Internals verb no longer shows up in the context menu if no - breathing tool is equipped and internals are off. - type: Tweak - id: 7039 - time: '2024-08-04T03:34:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30622 - author: Mervill changes: - message: Rotten Meat can be collected in trash bags and deleted by the recycler @@ -3914,3 +3906,10 @@ id: 7538 time: '2024-10-20T02:46:31.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32914 +- author: Calecute + changes: + - message: wide attacks that deal blunt damage will now deal stamina damage. + type: Fix + id: 7539 + time: '2024-10-20T03:41:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32422 From dc392cadc1dfbed0727396d6d1ec58905ff64f89 Mon Sep 17 00:00:00 2001 From: Jajsha <101492056+Zap527@users.noreply.github.com> Date: Sat, 19 Oct 2024 23:43:17 -0400 Subject: [PATCH 132/173] Fix starting gear multiple storage fills and tests (#32718) * fix things * maybe fix everything --- .../Tests/Roles/StartingGearStorageTests.cs | 14 +++++++------- .../Station/SharedStationSpawningSystem.cs | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Content.IntegrationTests/Tests/Roles/StartingGearStorageTests.cs b/Content.IntegrationTests/Tests/Roles/StartingGearStorageTests.cs index f8060edb2b4..3b2935258a7 100644 --- a/Content.IntegrationTests/Tests/Roles/StartingGearStorageTests.cs +++ b/Content.IntegrationTests/Tests/Roles/StartingGearStorageTests.cs @@ -35,15 +35,16 @@ await server.WaitAssertion(() => { foreach (var gearProto in protos) { - var backpackProto = ((IEquipmentLoadout) gearProto).GetGear("back"); - if (backpackProto == string.Empty) - continue; - - var bag = server.EntMan.SpawnEntity(backpackProto, coords); var ents = new ValueList(); foreach (var (slot, entProtos) in gearProto.Storage) { + ents.Clear(); + var storageProto = ((IEquipmentLoadout)gearProto).GetGear(slot); + if (storageProto == string.Empty) + continue; + + var bag = server.EntMan.SpawnEntity(storageProto, coords); if (entProtos.Count == 0) continue; @@ -59,9 +60,8 @@ await server.WaitAssertion(() => server.EntMan.DeleteEntity(ent); } + server.EntMan.DeleteEntity(bag); } - - server.EntMan.DeleteEntity(bag); } mapManager.DeleteMap(testMap.MapId); diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index 102c967a223..03bfd3e3663 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -150,6 +150,7 @@ public void EquipStartingGear(EntityUid entity, IEquipmentLoadout? startingGear, foreach (var (slot, entProtos) in startingGear.Storage) { + ents.Clear(); if (entProtos.Count == 0) continue; From 0b504cf5450e23c96013f87dfea14cdb1bd51f5b Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 20 Oct 2024 16:46:22 +0200 Subject: [PATCH 133/173] System to automatically restart server after certain uptime. (#32814) --- .../ServerUpdates/ServerUpdateManager.cs | 65 +++++++++++++++---- Content.Shared/CCVar/CCVars.cs | 15 +++++ .../en-US/server-updates/server-updates.ftl | 1 + 3 files changed, 69 insertions(+), 12 deletions(-) diff --git a/Content.Server/ServerUpdates/ServerUpdateManager.cs b/Content.Server/ServerUpdates/ServerUpdateManager.cs index f4e54984e9b..bf18428e25b 100644 --- a/Content.Server/ServerUpdates/ServerUpdateManager.cs +++ b/Content.Server/ServerUpdates/ServerUpdateManager.cs @@ -12,9 +12,13 @@ namespace Content.Server.ServerUpdates; /// -/// Responsible for restarting the server for update, when not disruptive. +/// Responsible for restarting the server periodically or for update, when not disruptive. /// -public sealed class ServerUpdateManager +/// +/// This was originally only designed for restarting on *update*, +/// but now also handles periodic restarting to keep server uptime via . +/// +public sealed class ServerUpdateManager : IPostInjectInit { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IWatchdogApi _watchdog = default!; @@ -22,23 +26,43 @@ public sealed class ServerUpdateManager [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IBaseServer _server = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly ILogManager _logManager = default!; + + private ISawmill _sawmill = default!; [ViewVariables] private bool _updateOnRoundEnd; private TimeSpan? _restartTime; + private TimeSpan _uptimeRestart; + public void Initialize() { _watchdog.UpdateReceived += WatchdogOnUpdateReceived; _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; + + _cfg.OnValueChanged( + CCVars.ServerUptimeRestartMinutes, + minutes => _uptimeRestart = TimeSpan.FromMinutes(minutes), + true); } public void Update() { - if (_restartTime != null && _restartTime < _gameTiming.RealTime) + if (_restartTime != null) { - DoShutdown(); + if (_restartTime < _gameTiming.RealTime) + { + DoShutdown(); + } + } + else + { + if (ShouldShutdownDueToUptime()) + { + ServerEmptyUpdateRestartCheck("uptime"); + } } } @@ -48,7 +72,7 @@ public void Update() /// True if the server is going to restart. public bool RoundEnded() { - if (_updateOnRoundEnd) + if (_updateOnRoundEnd || ShouldShutdownDueToUptime()) { DoShutdown(); return true; @@ -61,11 +85,14 @@ private void PlayerManagerOnPlayerStatusChanged(object? sender, SessionStatusEve { switch (e.NewStatus) { - case SessionStatus.Connecting: + case SessionStatus.Connected: + if (_restartTime != null) + _sawmill.Debug("Aborting server restart timer due to player connection"); + _restartTime = null; break; case SessionStatus.Disconnected: - ServerEmptyUpdateRestartCheck(); + ServerEmptyUpdateRestartCheck("last player disconnect"); break; } } @@ -74,20 +101,20 @@ private void WatchdogOnUpdateReceived() { _chatManager.DispatchServerAnnouncement(Loc.GetString("server-updates-received")); _updateOnRoundEnd = true; - ServerEmptyUpdateRestartCheck(); + ServerEmptyUpdateRestartCheck("update notification"); } /// /// Checks whether there are still players on the server, /// and if not starts a timer to automatically reboot the server if an update is available. /// - private void ServerEmptyUpdateRestartCheck() + private void ServerEmptyUpdateRestartCheck(string reason) { // Can't simple check the current connected player count since that doesn't update // before PlayerStatusChanged gets fired. // So in the disconnect handler we'd still see a single player otherwise. var playersOnline = _playerManager.Sessions.Any(p => p.Status != SessionStatus.Disconnected); - if (playersOnline || !_updateOnRoundEnd) + if (playersOnline || !(_updateOnRoundEnd || ShouldShutdownDueToUptime())) { // Still somebody online. return; @@ -95,16 +122,30 @@ private void ServerEmptyUpdateRestartCheck() if (_restartTime != null) { - // Do nothing because I guess we already have a timer running..? + // Do nothing because we already have a timer running. return; } var restartDelay = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.UpdateRestartDelay)); _restartTime = restartDelay + _gameTiming.RealTime; + + _sawmill.Debug("Started server-empty restart timer due to {Reason}", reason); } private void DoShutdown() { - _server.Shutdown(Loc.GetString("server-updates-shutdown")); + _sawmill.Debug($"Shutting down via {nameof(ServerUpdateManager)}!"); + var reason = _updateOnRoundEnd ? "server-updates-shutdown" : "server-updates-shutdown-uptime"; + _server.Shutdown(Loc.GetString(reason)); + } + + private bool ShouldShutdownDueToUptime() + { + return _uptimeRestart != TimeSpan.Zero && _gameTiming.RealTime > _uptimeRestart; + } + + void IPostInjectInit.PostInject() + { + _sawmill = _logManager.GetSawmill("restart"); } } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 23a61756dc4..a8965aa93c4 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -32,6 +32,21 @@ public sealed class CCVars : CVars public static readonly CVarDef DefaultGuide = CVarDef.Create("server.default_guide", "NewPlayer", CVar.REPLICATED | CVar.SERVER); + /// + /// If greater than 0, automatically restart the server after this many minutes of uptime. + /// + /// + /// + /// This is intended to work around various bugs and performance issues caused by long continuous server uptime. + /// + /// + /// This uses the same non-disruptive logic as update restarts, + /// i.e. the game will only restart at round end or when there is nobody connected. + /// + /// + public static readonly CVarDef ServerUptimeRestartMinutes = + CVarDef.Create("server.uptime_restart_minutes", 0, CVar.SERVERONLY); + /* * Ambience */ diff --git a/Resources/Locale/en-US/server-updates/server-updates.ftl b/Resources/Locale/en-US/server-updates/server-updates.ftl index 72047432bb5..ae775c99314 100644 --- a/Resources/Locale/en-US/server-updates/server-updates.ftl +++ b/Resources/Locale/en-US/server-updates/server-updates.ftl @@ -1,2 +1,3 @@ server-updates-received = Update has been received, server will automatically restart for update at the end of this round. server-updates-shutdown = Server is shutting down for update and will automatically restart. +server-updates-shutdown-uptime = Server is shutting down for periodic cleanup and will automatically restart. From 9d86bebda31a4ed6a93334c17ff1cdcaaa1425e7 Mon Sep 17 00:00:00 2001 From: Stomf <5dorkydorks@gmail.com> Date: Sun, 20 Oct 2024 22:43:14 -0500 Subject: [PATCH 134/173] Mutetoxin buff (#32915) * Fixes smile's ghost role to not need a raffle, very nice * a simplier solution * Mute toxin buffed to be more like glue * buffed the toxin even more * Update Resources/Prototypes/Entities/Mobs/NPCs/pets.yml Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Resources/Prototypes/Reagents/narcotics.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index ca4c613dae4..beeefcb8797 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -366,6 +366,9 @@ - !type:GenericStatusEffect key: Muted component: Muted + type: Add + time: 10 + refresh: false - type: reagent id: NorepinephricAcid From 71ae63bc7cbf7cfa5b04a957c5d775c9f6852641 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 21 Oct 2024 03:44:23 +0000 Subject: [PATCH 135/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index aee53e1d2e4..80739c28ebc 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Mervill - changes: - - message: Rotten Meat can be collected in trash bags and deleted by the recycler - type: Tweak - id: 7040 - time: '2024-08-04T10:13:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30594 - author: DrSmugleaf changes: - message: Fixed the client sometimes falsely showing the red color flash effect @@ -3913,3 +3906,12 @@ id: 7539 time: '2024-10-20T03:41:44.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32422 +- author: Thatonestomf + changes: + - message: Mute toxin now mutes even after is metabolized, similar to glue + type: Tweak + - message: Mute toxin is now even more powerful at muting people + type: Tweak + id: 7540 + time: '2024-10-21T03:43:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32915 From d590f5fa08d7b977f2fc3dfb7161fd5ed16c9082 Mon Sep 17 00:00:00 2001 From: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com> Date: Mon, 21 Oct 2024 05:50:05 +0200 Subject: [PATCH 136/173] prevent typing sound from playing when AI interacts with consoles (#32906) * prevent typing sound from playing when AI interacts with consoles * cleanup --- .../Sound/Components/EmitSoundOnUIOpenComponent.cs | 6 ++++++ Content.Shared/Sound/SharedEmitSoundSystem.cs | 5 ++++- Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml | 1 + Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 1 + .../Machines/Computers/base_structurecomputers.yml | 3 +++ Resources/Prototypes/tags.yml | 3 +++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs index a979a6ec50e..65848cb5e57 100644 --- a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Whitelist; using Robust.Shared.GameStates; namespace Content.Shared.Sound.Components; @@ -8,4 +9,9 @@ namespace Content.Shared.Sound.Components; [RegisterComponent, NetworkedComponent] public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent { + /// + /// Blacklist for making the sound not play if certain entities open the UI + /// + [DataField] + public EntityWhitelist Blacklist = new(); } diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index 8040910dc3c..3e051fff317 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -58,7 +58,10 @@ public override void Initialize() private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) { - TryEmitSound(uid, component, args.User); + if (_whitelistSystem.IsBlacklistFail(component.Blacklist, args.User)) + { + TryEmitSound(uid, component, args.User); + } } private void OnMobState(Entity entity, ref MobStateChangedEvent args) diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index e6cd62c8ee2..fc4f9efdd52 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -18,6 +18,7 @@ - CanPilot - BypassInteractionRangeChecks - BypassDropChecks + - NoConsoleSound - type: Input context: "aghost" - type: Ghost diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 9c906bd1a1c..c9164b14d13 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -374,6 +374,7 @@ tags: - HideContextMenu - StationAi + - NoConsoleSound # Hologram projection that the AI's eye tracks. - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index e961cf94d3c..d79348bfa61 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -62,6 +62,9 @@ volume: -1 variation: 0.10 pitch: 1.10 # low pitch keyboard sounds feel kinda weird + blacklist: + tags: + - NoConsoleSound - type: ContainerContainer containers: board: !type:Container diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 1928318593f..5473b8c341a 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -987,6 +987,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoConsoleSound + - type: Tag id: NozzleBackTank From 3515ca85b1215c8374363380edc970eac5cc7845 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 21 Oct 2024 03:51:13 +0000 Subject: [PATCH 137/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 80739c28ebc..def88caf62b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: DrSmugleaf - changes: - - message: Fixed the client sometimes falsely showing the red color flash effect - when attacking something that they can't, like allied xenonids. - type: Fix - id: 7041 - time: '2024-08-05T03:14:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30661 - author: Killerqu00 changes: - message: Sleeper agents event no longer occurs when evacuation is called. @@ -3915,3 +3907,10 @@ id: 7540 time: '2024-10-21T03:43:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32915 +- author: MendaxxDev + changes: + - message: Fixed typing sound playing when AI or admin ghosts interacted with consoles. + type: Fix + id: 7541 + time: '2024-10-21T03:50:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32906 From b8c54c70f6c31375eede615e14ed628fc34e886a Mon Sep 17 00:00:00 2001 From: No Elka <125199100+NoElkaTheGod@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:44:43 +0300 Subject: [PATCH 138/173] Let station AI use long range fax machines (#32929) * Change stuff * Gotcha boss --- .../Prototypes/Entities/Structures/Machines/fax_machine.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index 9bbf278e72d..db1ca9e7d5e 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -34,6 +34,7 @@ interfaces: enum.FaxUiKey.Key: type: FaxBoundUi + - type: StationAiWhitelist - type: ApcPowerReceiver powerLoad: 250 - type: Faxecute From 14a2f2fbc37c54b0633c1d21b58de68a0fa72319 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 21 Oct 2024 12:45:49 +0000 Subject: [PATCH 139/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index def88caf62b..ad42ad2a9b6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Killerqu00 - changes: - - message: Sleeper agents event no longer occurs when evacuation is called. - type: Tweak - id: 7042 - time: '2024-08-05T03:17:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30646 - author: Cojoke-dot changes: - message: Mice can now use combat mode with a 0 damage attack @@ -3914,3 +3907,10 @@ id: 7541 time: '2024-10-21T03:50:06.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32906 +- author: NoElkaTheGod + changes: + - message: Station AI can now interact with long range fax machines. + type: Tweak + id: 7542 + time: '2024-10-21T12:44:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32929 From 6c93cb9ba4f209cf814ebc651838e816b351443f Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 22 Oct 2024 05:40:44 +0000 Subject: [PATCH 140/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ad42ad2a9b6..5903887b9ca 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Cojoke-dot - changes: - - message: Mice can now use combat mode with a 0 damage attack - type: Tweak - id: 7043 - time: '2024-08-05T03:26:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30487 - author: TheShuEd changes: - message: Nanotrasen has introduced recruitment rules. Characters under the age @@ -3914,3 +3907,17 @@ id: 7542 time: '2024-10-21T12:44:43.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32929 +- author: Southbridge + changes: + - message: Box Station's window between the containment room and TEG has been upgraded + to plasma. + type: Fix + - message: Box Station's Engineering storage room air alarm has been properly connected + to nearby devices. + type: Fix + - message: Box Station's Janitorial disposal chute has been replaced with a working + one. + type: Fix + id: 7543 + time: '2024-10-22T05:39:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32950 From 6a8a703a7840c34c25cc0b32e488ad7cc12191ce Mon Sep 17 00:00:00 2001 From: Moomoobeef <62638182+Moomoobeef@users.noreply.github.com> Date: Tue, 22 Oct 2024 02:00:28 -0700 Subject: [PATCH 141/173] Ammo boxes now have sprites for being parially filled! (#32930) Initial Commit Created new sprites for all the partial fills and modified the ammo-case ymls to accomodate the new stages --- .../Guns/Ammunition/Boxes/antimateriel.yml | 4 ++-- .../Guns/Ammunition/Boxes/caseless_rifle.yml | 6 +++--- .../Guns/Ammunition/Boxes/light_rifle.yml | 4 ++-- .../Weapons/Guns/Ammunition/Boxes/magnum.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/pistol.yml | 2 +- .../Weapons/Guns/Ammunition/Boxes/rifle.yml | 4 ++-- .../Boxes/anti_materiel.rsi/mag-1.png | Bin 210 -> 155 bytes .../Boxes/anti_materiel.rsi/mag-2.png | Bin 0 -> 162 bytes .../Boxes/anti_materiel.rsi/mag-3.png | Bin 0 -> 210 bytes .../Boxes/anti_materiel.rsi/magb-1.png | Bin 2476 -> 553 bytes .../Boxes/anti_materiel.rsi/magb-2.png | Bin 0 -> 570 bytes .../Boxes/anti_materiel.rsi/magb-3.png | Bin 0 -> 569 bytes .../Boxes/anti_materiel.rsi/meta.json | 14 +++++++++++++- .../Boxes/caseless_rifle.rsi/mag-1.png | Bin 2556 -> 552 bytes .../Boxes/caseless_rifle.rsi/mag-2.png | Bin 0 -> 653 bytes .../Boxes/caseless_rifle.rsi/mag-3.png | Bin 0 -> 850 bytes .../Boxes/caseless_rifle.rsi/mag10-1.png | Bin 2402 -> 550 bytes .../Boxes/caseless_rifle.rsi/mag10-2.png | Bin 0 -> 643 bytes .../Boxes/caseless_rifle.rsi/mag10-3.png | Bin 0 -> 793 bytes .../Boxes/caseless_rifle.rsi/magb-1.png | Bin 2139 -> 543 bytes .../Boxes/caseless_rifle.rsi/magb-2.png | Bin 0 -> 541 bytes .../Boxes/caseless_rifle.rsi/magb-3.png | Bin 0 -> 2139 bytes .../Boxes/caseless_rifle.rsi/meta.json | 18 ++++++++++++++++++ .../Boxes/light_rifle.rsi/mag-1.png | Bin 2599 -> 546 bytes .../Boxes/light_rifle.rsi/mag-2.png | Bin 0 -> 645 bytes .../Boxes/light_rifle.rsi/mag-3.png | Bin 0 -> 887 bytes .../Boxes/light_rifle.rsi/magb-1.png | Bin 2425 -> 543 bytes .../Boxes/light_rifle.rsi/magb-2.png | Bin 0 -> 541 bytes .../Boxes/light_rifle.rsi/magb-3.png | Bin 0 -> 2139 bytes .../Boxes/light_rifle.rsi/meta.json | 12 ++++++++++++ .../Ammunition/Boxes/magnum.rsi/mag-1.png | Bin 204 -> 129 bytes .../Ammunition/Boxes/magnum.rsi/mag-2.png | Bin 0 -> 156 bytes .../Ammunition/Boxes/magnum.rsi/mag-3.png | Bin 0 -> 171 bytes .../Ammunition/Boxes/magnum.rsi/meta.json | 6 ++++++ .../Ammunition/Boxes/pistol.rsi/mag-1.png | Bin 2547 -> 553 bytes .../Ammunition/Boxes/pistol.rsi/mag-2.png | Bin 0 -> 861 bytes .../Ammunition/Boxes/pistol.rsi/meta.json | 3 +++ .../Guns/Ammunition/Boxes/rifle.rsi/mag-1.png | Bin 213 -> 160 bytes .../Guns/Ammunition/Boxes/rifle.rsi/mag-2.png | Bin 0 -> 164 bytes .../Guns/Ammunition/Boxes/rifle.rsi/mag-3.png | Bin 0 -> 170 bytes .../Ammunition/Boxes/rifle.rsi/magb-1.png | Bin 2277 -> 543 bytes .../Ammunition/Boxes/rifle.rsi/magb-2.png | Bin 0 -> 541 bytes .../Ammunition/Boxes/rifle.rsi/magb-3.png | Bin 0 -> 2139 bytes .../Guns/Ammunition/Boxes/rifle.rsi/meta.json | 12 ++++++++++++ 44 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-3.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml index 28157ef3450..8fe03f3c6e1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml index 98ad35b70d2..3af2b7affbb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: mag10 - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -61,7 +61,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml index d5fb4360a82..bcd56c1d64a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index 018d812e3f5..6ccf0a1e2a2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -19,7 +19,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml index fbd20446906..e081d574d7a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 3 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml index 7a5f5d27ca6..98e063e297f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -19,7 +19,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -40,7 +40,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png index 1784e7f62362b27f1e9b8614bd602746862d5267..6a141b7efb1fa6e64321ccc07ec2ebcff70a6ff3 100644 GIT binary patch delta 126 zcmcb_IGb^TN;zY3kh>GZx^prw85kHsJzX3_B3hFZBv=^2sE+_y1 delta 182 zcmbQuc!_a>O8rbv7srqY_v93bgaZ}_z8UveC77_dIYWqwmIHHHFa2Mx`!xMT*S`}C zi+-2IE8j|X(RNw4<$~^(3A>Ly2%mLe!^&#LIefFdV{DzLFn4Uca3XBh!#fX`^C--k z5}VNZ$@flY!oU4mGauUbEbCtjH{_rP1B2lnLw+45IZL2D44$rjF6*2UngE^K BHi7^E literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png new file mode 100644 index 0000000000000000000000000000000000000000..1784e7f62362b27f1e9b8614bd602746862d5267 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJnVv3=ArbD$DG~_>EDn4#?y*WR zVR3VY5EU&4=CWS;zg+ie`iZW8Cm0s}E{j*bmF%MJvTn---7OP#AA1l!>%fMU)r@oa zW_!ojI!|Hl*m&VY*sOEX>4Tx04R~O$p&@-d%v72tN;K2Ur9tk zR9J=W(lHHyKoCUH2{sM^v}{Enlr#vy00yqX6cvu}0U?V8iX+?nCt&i6kpKYr;ArIM zBHtu0yaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cmh31F z{AU%j1SBCI%K-%E%no|_6T+^ntnBQ*T{ZoA?J7fJEFeM(L|A|PcZdJrVy!hKEj72C zBd*j^jNvyi`~C44QI}u=zj%5Xy2IX!I#2S#MjG-6|klU z=86UOI4%=I>C?C5@GMaSx~6!=3l+N!03wX7m<$ORh?ztwQ!LDd2sl>o(=l_F!~+bF z24%x6If-PDQ`yJHH-%1LR=%1cFDF2<6j0NogRGP^WyD*B3-zF)Nma8Jt=hC_$ti2j zxn$R=UVo&dq9vD7YH6icsi|tswbWW$?Twp2#x%6tN~^84-Z5xT9kx39cQgzhGSbkI zM;Udr(I?zzrl~W}GV5%!8=Dv;AXv6y)tdE13$C=%(v??Pb+y$ud~M54TX)`N*WGr1 zuy(Whm90uS>r>L_bZ>Qp}CX~6XbHD&VLyg<3wP*I0JBKcFtm@l-QYb&SGN; z0^Pza)yXk(#=u}&#JcIh-6wN@$y)%r-{pqa;H&SAJ}e^2GYd;91maXaC@gBttp9V9@D}a#*E4uQ@UB)U1u-L z_8c4OSwr|+-^!<)h36g$MKA~gkDa{7>Up$~ud={$w9chLQXqA6s26z01$oI%qcw)c%$ z&4c6vQXtY}nUdhD2-8zP-_4+!Woi1?bY*2d0NHFd~!nWhS0D5yCy8Ce~bf%gp32+jo(iU9Ggz6q5)_4pzjLi|wI)4|=b32P+Un8j>xMP{{3&TrV+5IOV8^B_3z5pQ3 zFqCrLV%saS=G-|Qx^5&f??uCWZZ;Ft#3F`9h&Yx!Fs)eHz@%4HEb)UgI70Q7#k#dev#hK3yk7n-m4RJHwkzAw)2+UoR2Tg`1)p0fQV2@s$xuzO4d;0cb zy5^X3LMb3>2s%&L;G7PYkbfVr)Vliu93(<06H>C_isC$>s-Z&^aRzBE`MQ?jF^53_ zAQ81eTEsb%tFo%eLQ?rqxm3Tg)9%*RSgl?aMleMeV*?NlNJFNIwFLt-iZyxx9FPgq z>5#LMHzR~ES27}(XB=P+ht1*w?Tf@FjFcN-ZzR7++L3oR{~k+Pxqs4!X%wJfwnmPS zzXk?xmfS7)n)%I|zq{n{WzD6j%K7!B&t7V>&=!u(ZE2xoOECvFJ;JmCTmfZFT! z5JAp=+}nmHAS5r|{n`CFc3wM&&))71wLm;N;+977ePF?#I(%qh)4-Xf55&k7%ncAB z{V$NKQwc@gHL`rfi5znL$8qvphVOpx+t9bljRRK;{{u;UEHgL3J{*xD6#{siu{d@C zf45KIYXATM24YJ`L;(K){{a7>y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G` z2jm4A3@sl3$jUDO009?CL_t(o!(%*f-~huw0w#t52BQubb-<_tMjbHV4q(A2*;-df z6-%m{`pI(u0|Ns?T8IGy>$Lg*_4ODSf2OTsV6fI;U?7Ek!OoCz=tcny{IX_X_-iZ8 z@cYhFhF^xHv8j>>jclbEWGq}6tPDwK5A9q415+kFWw1KDfZ^DA28LtjNn_LF9wRIKL00000NkvXX Hu0mjfkLKS( diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png new file mode 100644 index 0000000000000000000000000000000000000000..50ea7c47ff3ddef9428fc888a913d03f4c54903d GIT binary patch literal 570 zcmV-A0>%A_P)EX>4Tx04R}tkv&MmKpe$iQ%glEB6d)5$WWauii$W&6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi`{MF0Z`p%-HkGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5ia4UE8s!UF zmle)ioYiubHSft^7|LtQX|B^8LL7@oAPEsNs@Omo7NWFjq?kz2e$2x^==hW5lF79J zMvi$@ph9x|;D7MDTeC1Z;UpV2qvfWBLxYt`+oxsTHaAVXa(-2exN zz(|p@*F4_c+1}f~XPW)}0Fwf8w7;AxtN;K2a7jc#R9J;$U>F6XU=)mkQ7{UK02?$I z{@)K{_+QGv@E;eOT(g;|=}?+E;FmQ6!(T6HhTlfG*)(;4k*zd?jD;(Ml_736O&vf> zz(|au0wae1R)!1=$Ie6e*w_=!5ogvY7zLwX6pVsVFbdEC07WV(eb9>nF8}}l07*qo IM6N<$g3^ioQ~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png new file mode 100644 index 0000000000000000000000000000000000000000..94a2272c80048506e931774b2a3fa041b1eee9ee GIT binary patch literal 569 zcmV-90>=G`P)EX>4Tx04R}tkv&MmKpe$iQ%glEB6d)5$WWauii$W&6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi`{MF0Z`p%-HkGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5ia4UE8s!UF zmle)ioYiubHSft^7|LtQX|B^8LL7@oAPEsNs@Omo7NWFjq?kz2e$2x^==hW5lF79J zMvi$@ph9x|;D7MDTeC1Z;UpV2qvfWBLxYt`+oxsTHaAVXa(-2exN zz(|p@*F4_c+1}f~XPW)}0Fwf8w7;AxtN;K2Z%IT!R9J;$U>F6XU=)mkQ7{UK02?$I z{@)K{_+QGv@SjvRA+wq2;Q@*r@XMNk;jfo8!*3(f*;H|Wk*zd?jD;(Ml_BYDsyKj_ zfRPwQ1x5`2tqd6$j-7|_NnuYoN1Pp_U=)mkQ7{Td!N>&wwq-*fUcKXC00000NkvXX Hu0mjfYr6k{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json index a72e24594e3..b2728ab02bb 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/983ad377d25729357b7ff8025f8014bd2f6ae9f7/icons/obj/ammo.dmi , base and mag-1 by Alekshhh", + "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/983ad377d25729357b7ff8025f8014bd2f6ae9f7/icons/obj/ammo.dmi, base and mag-1 by Alekshhh", "size": { "x": 32, "y": 32 @@ -16,8 +16,20 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "magb-1" + }, + { + "name": "magb-2" + }, + { + "name": "magb-3" } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png index edcbdbd3851ab7af6cf2198f1d629c723e233154..c9f029f32a3f3b60421403eb401f88ff6434a890 100644 GIT binary patch delta 141 zcmew(ynaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cmgFW3 z{bv>$g}6?Rp3S5IdqGs)lBT?W%2qc%F3a#MiImCwLMI zCMH(&6Z3h}XZ*qwx^DpZ?7iR@ADZzS9G9SnS>*+%dpya@I6t?c4;m$U?o97Bn)B%h zpYStV)ofqZ^?zIf;3~IK4^vJL69?erv#j7&`~-bHcf(y{j}xpdm^wlncxj1%xTTy{ z>dDeR?MxFYX4<4^i6-$GtE|*$vQv=#PDUEI@!|?@CYWOk(^Hpp_HDi&HmlfqCCsD* zVPNj#9bN~1_WmHq%-uYtSf5xyFLJMe8qSQ7zN-0`A zPjzL@Dt}s3wQAE|x#lXhRIRnP+8Z@S8k5jU(^gw+y<^j!J7jgt?-&>~c;q3Y3>|f} z(I?zz<|(sGoprX^7cE{$0b!M;tFE^CP8+VY^OjwR!&%Awuwbf6$Bn{iRBzC~BN1)HvLOYGCD^9#u?SC@YZ|h`%3IsS88V?o z7y}k}#T;A9rlRCYmfM~Nc=CXrTNO|Ivwv@3sFrx^u#wb|#H-rGK&|26HbylZo4EJyc~!>$J-}p~`xEt{z^18%IjTu<$HC%Ta_0IKCE-ghJf5s1#MSP5!V03?cR`sdyEXr)N~n<4aCBq@ zRX`nFNxR~V83sqYJZb1*?eHNRM}P3dD&V{g5bUhV@H%aP@djH%Z8ICrKAfo|?S%tA zjziws+xONCSFjAEXY?orpm5&3K+X_HsL7nbA-KPS2rwX6YziW1Plzb(h+wOGDrmQ- zCpjkrzSMaRM2huhtl@Au4wu#jw7_xz(6)9IA#F#6+ zaL=xD?qXIDMAoA(O|nR9zoh!t-FMq?I$EJv;R7(5!Gyx(%&Hl|A*G{OS*qBZP;K-v zTY*!p=xGDF5Plxk(H}6Gmvghv(%{7T9!AMimvr%kxwPZ#o*HX;H9OpP9|ewV@o`>= zK5pOybu=9HBx;2uq$rP5NPl8Z?Jd>C@LiYv+G8Of;=5-=)sUoa^8LsY+}@Om2iA_= z8^gB|xNoS75IGx_qxB0tL3Tv<0ti3^lv|D+z8+9D-Ldsn~%BC<8|ID&J|S@fB=Z%bF)^zIxF|49Y$ zNf3L!yvaaGjpBG0kBj9s@gr9~Le;74i@_5#&0*6l;A;=$guQV-T!DzHK3(C9@01^D z!;en00v@9M??Vs0RI60 zpuMM)00009a7bBm001r{001r{0eGc9b^rhX2XskIMF->s83zpwYM^i=0004cNklJxBs!7{`AnttEk5A5)W%ZWRu3xF&%heN4Hu6m119Ed>$S7QI7b;7u)wO@au0 za4iQWoPQ1Bpw||(x7c8>WNG@IlFL1C!@azBzu*1udEwCtg#yDYA44urz!UHUJOS4N zLKp~P3`al+gUiE@`sDjvy+sxa6DyP+%puZ#c7MigP40_D8&|K1_*7#DI6j+0ib(j& z_G8O4QshS0`}+k#7_4t5$)q9x&DhOqup?Yn@o7LkU|SZ!wFeC#lZw>a!Dr6rmElTF zXj>KlW7lYl0h?kC!lB<_6}a*#kQENKg5>>A`2901bs71(3RJ3PD%CRa`0Ae`wKtdw zs8hjv5;#3M0$_Ll0Dz4SiPZAyZ~#qpDwfA;Yo&EPn{Onb0(aE|^5vq9h$`Gw0-X~1 kF88kj-bCaHcmn;_Cv)|y`7+u~jQ{`u07*qoM6N<$f-PADJpcdz diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png new file mode 100644 index 0000000000000000000000000000000000000000..84725cfd32184f4ac0afd44571cbeceeb5217096 GIT binary patch literal 653 zcmV;80&@L{P)EX>4Tx04R}tkv&MmKpe$iQ%glE4t7v+$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9UwF+Of|bE09CV$ zR6HhTbE{(T6#)z)h!DmkX6lLbVg{b$>mEM7-bHzq_qjhuuaY+z;1h}Gm~L3a8^kl4 zmd<&fILu0tLVQjsb!v*z~J+Q;bwkfE-YZ-9eC zV6;ft>mKj!?(FT~Gp+u90BwG=_66w(R2Mna zWrp4S>HWPxnzY@w`{VLc>c{XwbOh27sIeiH=LN;Sph^Oj1oGR%`R=&y;v~3x0B}95 nsCbF)^K$DR&KP5iF#vc2nearQ1CCgx00000NkvXXu0mjfx7H{l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png new file mode 100644 index 0000000000000000000000000000000000000000..532baa546b3c5bbf7bd40806509774e04ddfd482 GIT binary patch literal 850 zcmV-Y1FigtP)EX>4Tx04R}tkv&MmKpe$iQ%glE4t7v+$WR@`f~bh2RIvyaN?V~-2a`*`ph-iL z;^HW{799LotU9+0Yt2!bCVPL58BE>hzEl0u6Z503ls?%w0>9UwF+Of|bE09CV$ zR6HhTbE{(T6#)z)h!DmkX6lLbVg{b$>mEM7-bHzq_qjhuuaY+z;1h}Gm~L3a8^kl4 zmd<&fILu0tLVQjsb!v*z~J+Q;bwkfE-YZ-9eC zV6;ft>mKj!?(FT~Gp+u90BwFOG`lnwngvI7q%=(PpyE!SYLsF~iY zf&}-68}4}S{r&E__l`$141-~2WTet#DaOOf0;8(%_}GJBa$^1yn-x#jeblm~@ z4J*^5dd3l zYJvf%=G5T;n(9<6KdYU!=IfbUtph4>=wT1Y#YGztRXFs}fz~wsXjI_?5$HGncOdZu cJb^*w8*}xm`75O2-2eap07*qoM6N<$f?oTFcK`qY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png index da73a5f853b4fae82b1a4579c36665f83e3b973e..8b49392b77de26554c51dae3d1cbff5021ab6cd4 100644 GIT binary patch delta 139 zcmaDPw2Wnf@?>W=VJ3}A#e#w1aB^>EX>4U6ba`-PAZ2)IW&i+q+U-|caw9hk z{O2ihgdso>(3Sbz=zUNLJ}>x z=6v9jYN}*-D98CZ+jyjX-ygdEh4+X4aQ_FPi_!A=n&&m%(0?y)6Et1@?Xf>-zt$<& zLh*Rmntf+~9+#2VLQH3Wyxv2-CRl!Voa;;dTK0CVr}v})V+ht`3N$(LvF~*5#OK%W z72Ju%2jVik7u=cSNBqJax)%W6pPukLZkF*I9Opu}W928DuKp-b{e0hs9xRG<-iGMg}V2n}(AfdqQ0^AZ?JhGFM3qmBOibsu{{390HR=27l){ z*FIKeAh5iyq6(ph6>!)#3NU7CDYs#!j`OkzH-;ZK=;)5T$qQh+*T@~AIwejyjYcq} zud@1q{*4EaxOrXcNM;J_b6vOfQC#m0py6hv=Sg`6*n@0gD=Pq0#8q7x8cri~oAJP^ zs}6W`nLe@F;z0{&z@zJ;BHDOF>3Bc;10(KrgSMu0%DGXR#iwb)v}7qp+d44eYzW*xN->F;qs@%tW!0K;yM0i|N| zxsGrG+p*!th;~HPM2Bb`0{Tbkqb*34xVDk+27e2Na4F&vX2{zx3yITYPJaL>!-J@; zSWx5>{1oWGPE^UeiK$tw{n9+Af1>vORc+(o$}kEJqtMp`7qHxCFBM162Y!p$MAk1F zQD8s-1(70UOwb0PkVX~=cE~z}tpj32hXR%214o~=K;+t^H}D;TTpyhQQ@0+ijzR{C zlL3s&5xgTe*Q|I9kF?7(CVxQA9ah3UUu3ZGom3VPq^|0)WjB@O2*9J9!dNRxJg;yF zg%_uOI6B?SBpd?jpIA>yIGBKNXQ)D%>Ihi;b+YMtSSwk9|x7>)k9m* zj~ytRn?w)Z9ez{l|9_!>c_GGcfExY=Ed{Nu3cM*_ks%cVc$~2~b^(94PvC0+000JJ zOGiWi{{a60|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rf1sM!FAhRuF zga7~mK1oDDR9M4fJaFIu!$1Nih5-hn4j7sa*f77Ap|!4XU>vYvel3HwvC6=N0J7z2 zAqG?l1*U=WIY|z{WjTK}LV;t>Svg><^n;>pPbmuaPII^ z24sg=8>Nb!F)EWuIBa)Q|qJxit~ zgfcKNFfgz^?EFv2@~ij1FjP17Q!fM<7#J9?UOvyjz`($uty|8hBhSF_aPSMPtpStgKcIZ25S24ICtT8IHWcaUp2Sq?yV2&}B2 lNo_dVDjs#fr~?=10RTn~;$2)KT2KH0002ovPDHLkV1frQx2gaD diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png new file mode 100644 index 0000000000000000000000000000000000000000..80e504f560e71393f82e30b32974cafc621898cb GIT binary patch literal 643 zcmV-}0(||6P)EX>4Tx04R}tkv&MmKpe$iQ%glEB6d)5$WWauii$W&6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi`{MF0Z`p%-HkGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5ia4UE8s!UF zmle)ioYiubHSft^7|LtQX|B^8LL7@oAPEsNs@Omo7NWFjq?kz2e$2x^==hW5lF79J zMvi$@ph9x|;D7MDTeC1Z;UpV2qvfWBLxYt`+oxsTHaAVXa(-2exN zz(|p@*F4_c+1}f~XPW)}0Fwf8w7;AxtN;K2xk*GpR9J;$U>F6XU=)mkQ7{Sy7%-Bm zVfCa$IQ!_?I}8&R9)|N*B{Td#@koo|pOi2ovN%4#M5+VuS?*Vwz>pRFk->`P@PA^> zAqhJ(_ df>AJX0RT0;Xd6z}ZuEX>4Tx04R}tkv&MmKpe$iQ%glEB6d)5$WWauii$W&6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi`{MF0Z`p%-HkGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5ia4UE8s!UF zmle)ioYiubHSft^7|LtQX|B^8LL7@oAPEsNs@Omo7NWFjq?kz2e$2x^==hW5lF79J zMvi$@ph9x|;D7MDTeC1Z;UpV2qvfWBLxYt`+oxsTHaAVXa(-2exN zz(|p@*F4_c+1}f~XPW)}0Fwf8w7;AxtN;K3Pf0{UR9J=Wma$92Kop0+l;FSN(oMxe zxAuRK4s~*Amke$W;!xsHap=^&OWbwH?h*)vE>%IY6@pOR9E9v~C?}zi+~s-_3i(Yp zg!g^-c<+c61OZj1Q7OF^*joYLbGg60sz$)~T)OS15qN2VEZph0jC4U+!1T>a3FN^| zbU`ZcUpE)Aik@N>_H76j;e7T}yhw0h% zfXj;?Es;Wj(Rj-2=}ih>FP?b`Kgo)8+fAhb)#^YVT%4`bp_QGDodmYKU=j{st9~eo znuLR74YTn*7iVw|z`@5PmBFJpVKkmf>ne8uAbNiV;OOMWIzEK;Vk4ppFD;NKGJAN` zf@=$8MRad2qP&JtoaDXEX>4Tx04R~Ok_C1Falf1@tN;K2RY^oa zR9J=W&Y=x}KoAAd384#U0u;g14<*qDp5SNz33VKnL!H>5=9w`+n*~Wyfw?E0OOxJ> zx?Pow#tzzH%KGaA0N1`|jZ&A4wgce)RFWh~F&>H<7vj7Ty{iBK002ovPDHLkV1nz# BIv@Z5 delta 1737 zcmV;)1~&Ph1ltghBYy=>dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U-|uk{c-u z{m&`(2uMN*j>BhFZm`GS2edu5XOc-~^JBLv-EKpJ5R#sF&~E(wZMwg3u~>3JEyWz8 z#}#tOTu@2=T&E--_W!>4>caa|ySsNVngpes*ElZuf_8lyV1MCiug~qy+NCF5ipW1r zEoSW zxC`D_3rTn%KX(t^2LZg-UgGC(mdRTXX+TcU%y(O8&zskLm@HxDPLO1R zGTJyk-0rpEtM`+lIaiv~3h^ygu!~oI!Hk96`iB$%p?`VBRCj#Iox;Cf3s?byy2G5{ zVDa^+s7i0SB^zh)>L42YSubS$Qh*R)ZiO)5rAXeGjR;ZnfRlL5jWI@BmX%L4=mkKiL@_{65On)t!S+Z;;NeW3*OqNp0sbtOq8dH~Jww!X#rC`z$3Un377c^9^QbW}mtJPF< zEe+|@LemzTwbXJeox5~Ufa|eaPd)cCXdsnF7&_vxkwzY6BG;zOFm=XhGtE599kmP9 zXVhMi`!Q;Cp~f4iC1-D_q1o)Ff)<_V!VHLUAb%ik3jriFFU)+R5O^WCF!Pzk33v-u z>H??JLJSCoL9CPR*u5e5UECa^`>VL|N65Ja-S0roE$AMQdym@(sP(exRyIIu6(Xi! zNWt=(!52>W`LCAl-zxZ{=s&M$BGq!i67ATC)Y|A_F{id!9LLiS=|(0a<-&DX#JK90 z#D7l;xUZ<#UAPJM1e{ftweIKKTKekJbetmrE0)@Ntes2sqc(@PQf9>p>r&@PRwP@9 zvvsVp9tIS&IO+f`OxhMU2{=IXS$dm+AylYWb(T6-ELX)*D?}ATXQd0u;%u01?O@BdW4N?&cs)&b1=;HKX$lZ(wE8LgNzg{yxsX4su@_^?$)2 z_wgtl_w+lJs?l2KlcG4p?MyA}gW)ROYs0O)uZ3NSDYU6vMjvMtl`(LhS%{su6TXg` z#^;5GE$eBa4f+WI_mMHURH_kTg}@(SN|HD`FG9!!WOxGE86$aIX&uUz9kB_rAJ z0kKIaBeI_e9|4HovSAhA-gI2sc1Q8I9u#?f#jTFxfPe4IdD(GnIAOTWbXtnys5>q= zs@y#I0SqstyH#ceP4p6%)?MNhRo`qX$=|$L($5yHc6U0yFLcxUnbq!B%wpeG*R;;R zAVt_b@a2Wrtn_s!f760xM{T8oU&%%~w1UUX-(-&{je?`1<=8=S&EE#PYa~7oKn&Pj zA_%be7OjUvhjGFA`7Z2!$G-nZ(f?7A%sE{Lv$%f%cgLsM0dfc5KFGOQ*uc+%+2j7vf$*& zgOr89y+_v>0t3UzvYeQZ!kQ@T9pTAYY5JR^_ z-&l`my%g64*epX16?Df@r5r%F9NiJP#Hm&rlIkl`^bi#S_a0qmxcBHfP09hr(SE_G f14bP%;vE10JTa*gdcSQJ00000NkvXXu0mjfZ-+a$ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd938dce0bef410c8cd7f9897c7d089989ac4df GIT binary patch literal 541 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 delta 2201 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png new file mode 100644 index 0000000000000000000000000000000000000000..31c1c6b5c7629ee6eda42b89a9acbb81d8b489f6 GIT binary patch literal 887 zcmV--1Bm>IP)EX>4Tx04R}tkv&MmKpe$iQ%glEB6d)5$WWauii$W&6^me@v=v%)FuC+YXws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi`{MF0Z`p%-HkGxbDzAp_6xbq^n3@1i`*``n+STgjUY@QK8;OgAjzb>itw zOXs{#9A+g+AwDM_HRyuGk6f2se&bwpSm2pqBa@mV4ik&THkR9%l?;`5ia4UE8s!UF zmle)ioYiubHSft^7|LtQX|B^8LL7@oAPEsNs@Omo7NWFjq?kz2e$2x^==hW5lF79J zMvi$@ph9x|;D7MDTeC1Z;UpV2qvfWBLxYt`+oxsTHaAVXa(-2exN zz(|p@*F4_c+1}f~XPW)}0Fwf8w7;AxtN;K3tw}^dR9J=WmcL5^VH}5_lc>q4wIPVW zAu1yZT8^Arf);CQI4HzPYG??tK?tG-BN`$KqrX6e7F!evocxhoL`xLeCIq(Bat-!I zTIzc$h;Sb`jyt~hKF@pa_kJkxc$`kg)=|18U&8n)M> z(W;1P0RewWT{Aa)_apM=b@AqPnHK127M@NPSlZGkixhAUmTPj~5(6i3sWBDVk5Mgn zI$2=0gi>9fyG2SwY6)cEhNfa@>d!UK$?|sPaYz@x1Y zJ@5fkz-Qd5VpPG!UKZX^06@=Y7+*b70HOyz17OCjR;;<0wGfbngJcir`3!nKL+W`< z=^vR=9@3?M>kLh;fZyE1VuL0(^%w#;rtJU-332@UoGiSdfd2T7{+PwHJXKdDmiT00 zzSlIop@2Ua0$_J%6M%`nzcr3&JF!HuDL6>>fIk?*9}JOw`e1$IwPxM^WyusAOuPwy zC+JxN;OuY+fa6e+?9&H3r{|`}YD%D51ZWE0vOqi1y?;cOfF;nbd;yZ`-3k5doK*k- N002ovPDHLkV1mj`lgt1B literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png index 7fbc8f50acfb6980076b3a1a891d142f9df7708d..39e05c721147d7bd6501ac0372632365ccbe9bd0 100644 GIT binary patch delta 147 zcmV;E0BryH5}yQ+BNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Or3Q8Zalf1@tN;K2RY^oa zR9J=W&Y=x}KoAAd384#U0u;g14<*qDp5SNz33VKnL!H>5=9w`+n*~Wyfw?E0OOxJ> zx?Pow#tzzH%KGaA0N1`|jZ&A4wgce)RFWh~F&>H<7vj7Ty{iBK002ovPDHLkV1fr} BI#d7v delta 2033 zcmVBYy^AdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ccI+w+ z{bv+C1SBB@!x68wdImlG-e6ZHspOF#eI`-AmcPPqk9 z{GeL4=KVZwBX2>%S3lkFq23cbzjNpQalger+3sPlB0Vf^I3A*`d3mv_6>w~fa&4VzK z3Bu^``0fs`9e;X%5VY0~bD~(DSivsd@dYzBbNfF=fqxKMH>P^Tk-Siq0Na+bsm43Gxp z0V_F)WRO#M>&6_TGnSRFZlo6wp^~vk3J7wLm6E26^;Qr<9#k}`YF5*tRXs~iS#!>o zcb;++OMj-8&8%28FH%y`l8cp6YVpcdkj6CBT&l>a>#OwcXTvv(o)lwo3+wv z^N#T8scX;Odg-Pl~tENS-V;N z$l5D&-?K(HYkY{>U09gKOK-ItP<)j3`}nOIfZmpUU@VR5%Bj0A_yEg#_ckQA$gP_< zwSzHobZ~HO>*|a7>+TBH1khc5%qshBPGcwvg72DYqp7is{Xe zl73{yJ1fGg89?TV*?9l~gt;=aSJMmM*3w89C%drTZFoF<(Y|rJA13zu&3^^wAhp$wu%a{SC3-noI zHB@qHC@`M$;xA@>F)94ftdEllmJKkP@1UqF8hBmU&Gdoh9HPGw;^7(N--dYG3vup5 zB3aYk-LUPtVvW+gK0y$s(8NA_FMmZlOL5CT{f|Zcn1H|>*l^41@bJU&pN2PlS`s11 zQPVYS>6NEz=a+Cy?V#rW6SMHkys%Ax{PR#j7Y+&&Yol*Qhngdy)jl<&oN?^`0sTXf z=vwWYV{YJAQJzqr^pp4S{Qy)Ggk^>GVNP`~^agNtn%xgBB~Q;a;d~N~+kb%Rr`wO5 z=);m*(2ML6@W4QUkU%1WwrxkZJ-$zIP~i>fh*2rEQl-UXCMu%c2o6iA*YO?0b{wVI zC1aC#x~C}auv-Di=Dsbcc}_{*X}hXe07ybr4W(6A#slTW%*aP+KkoDQ&)Ngo z?8w<$`0QvInX_aZFm7wHX@3rQgN$1qPE%sTaq^gdy=xq!6XOK=X$;*MU`!o_0Mg?f z#~D=6mx~YWXk8J@f%9?k@-Y3mhv9bdl8v~vvIJn)2}*(V1Mo(mM9&wHc)GT!dO~hH z6d*1&Gs1>(g$T~DpR;$z@K)irHv@*)D6p*~CbvB>gGLO0i7c;r)qfK`hZP&P-JB2{ zwVwLo`j&R8Ut^+{K=52u#8pwCmXI}(OB+h?6W}{j1UV&3UCW9L8~{EDGwd#?!ds`= zQ3zbs%2m0@i=Oa}qJH*TOhOgWusS33)uIQNQL=yVHv9oRU$*}U`g;T!PG~j!7hcF6 zN?ePls{jB2g=s@WP?0GO0(hLUICcSlw@=_}00006VoOIv0RI600RN!9r;`8x010qN zS#tmYE+YT{E+YYWr9XB6000McNlirukQ@RZUVg`55JR`bKvRxry%g64*epX16?Df@r5r%F9NiJP#HsE8 zVuPOQ4!Cgr5rcuI97z@u8x=%3;KrSs3^(rFq)9=;1XG P00000NkvXXu0mjfOr6qN diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8fd938dce0bef410c8cd7f9897c7d089989ac4df GIT binary patch literal 541 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 M)78&qol`;+0NmI)$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json index 67af0dcd27b..bb09b47a524 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json @@ -16,6 +16,12 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "cap" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png index f32f6862662f7dd4fd6015c775256e02439fdb2e..43d1f0f5f71c53b309d385fef54bcf908453841a 100644 GIT binary patch delta 158 zcmew?ypm;tvM6Iqrn7T^r?ay{K~a8MW=<*tgT}55aXEG7^F@rO>Xk|XaTf~!PC{x JWt~$(699`hJX8Px delta 2149 zcmV-r2%7h)1oIP+BYy^2dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U-|SlH@23 z{pS>O1cVTR;{Xy7dxJgxJg_sXGrOj@t7anhXY5R4V=SciBq4(T_dhHAfg|NwLl&*2 zl@f8}mRst$sqs3lmSR5FbENwfo?rUI^F=}zqvh+d_&vU(Uw=M6(0uog*Z!dMmQ!y* z6kn$1J@dY|Tgh7xr>mdt=g{sCdilYe`=915_F>lBb5?+10(qQ5awd-Fny#7n`gi;V z*Tl33GUGmBTCPi(~lap z^>l=v@LS93T7Q07*K-MgtK3FCOgVQLH~=S~&k9b(UvRJIY&dJ|ae_62sUyUJheipA zFUn-pX_23H(u9gRc~Z0~P2j%!Dr;(K0(b)aIB6vf+}OB+l?mn;-RY?doq5}y50h2Q zY=n`CAPgM8p5eXYyXT9bwYHlR#rnhwdZq1OP-8Q6U$&w z4$Kt>_BbvPL+Hb|`0&h80*2;z#S5w30ss-_7AONR&J+u=P@$+PDG_k2;HN|L#5oNx zKoTSwv`m?~fSj84-1tW6j7^fRZlo6wAzWBNP2&!-a+X{WZxt@ogRo=~DWX!PNiSS- zky475oqwmgvSt-6s#>*auUvDLTB_DsTkS11MjDgQO4C+bYrSLAo;zf9jPK|eY4FHH zMj1NlXroWK&&*S1nL6uivs*GYq<~<>)T%Y>P7YV{?Bd1Mt2gfpzP5PfC95o5b+y%> ztlg}>vi8p0uUVs;wRDKuW!aZO&q)oYQ7*a~50T zz$^(`$|lEXGX@5;Q<6nb?mn3NOWp#|{VH$iGv>mk?w?>TZ0des?q}XUVa@tUw|ofN zQ3ya{wo&|&zEz9VC`DwKr; z6^pkvkwygZfQv3^3u(ONmBV;qp!$XZ#D8G$zaaRgX+N79-fjJ=sa0SJok$}#yu)a)G^O^fKo>8P1%+ZYhfg*)qfR}mvr9@q}pY9HJ!E`>188vCxX#4%9GzV zF8qq%w#1>2Qz=s0s+xVRPVNQyeaX&R$adP0&N$TVx?^?U-x8b6z2w@kg|t{7uOJ)6 zP%TJr1!=JGqZ_`D4`^7ZvSipHa=>;gO%jOru6by=tu(AGE`2zXD6qb7u;?6I`hUhH z9ALf&%S#&$9Nb4P-Ax()KMp?_MuJ++}^=(jt@FSaNm;Og*k!IW_DR_9*V?kE{+ z>u^ZKu!&(xCP;DItU7#QlenFvwy?(Ihh6cz#XJ2Rve{bF272NO&GD9!2R}Xj-N<2Y&fCf#@JzMEKkr1D%6+7U|bj@^!Im+{A8{Rv<+dc&$Q0-t# zg3{h*L40on;0`^4ndaC7^PO-yHq&p}Bz!ad#D4|-KLsK1mo?n{2?*`aJ^#c|?vWuC z0(hLUICTMkVjsri00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6 z000McNliruUvhYSaX z4;c<5>tmso<@$OM_C=^81ZEIdzA#c+5FuNR3@%=OVj#*POw_dee}XNXt*-~cTOAx| z;{be?qlW_39e~Sn#s!B-vYf0$xT!UZA*aul;Xjgv$QF}gImscgsWpqi&7KX#=jcI? zZ28d}3=G}}sFVmd%&%pzkh}KZA;jSSl>WE>Z=L&$;Sf?SC)xoU=GQV}clap-qkbae(X)5pz97|dqH@92%jX#w7#J9|b;}ubG>SoO)t3V@Uxg5B9`8)%%&#&J9Lbl}u6XDhSUl?Ys zxqw%`x~ZR{%8aPmu(hs`fq{X6AuYrJlGx7Pp^D`sSI01iFfcGs#d4~&2S(e3qYfB# b0Hpu`(M!n$dS!0q00000NkvXXu0mjfn%D>k diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d6d61f5dbfb5be2a3b2ce127791c574801f9ee8 GIT binary patch literal 861 zcmV-j1ETziP)EX>4Tx04R}tkv&MmKpe$iQ%glE4ptCR$WWauh>AE$6^me@v=v%)FuC*#nlvOS zE{=k0!NHHks)LKOt`4q(Aou~|}?mh0_0Yam~RI_UWP&La) z#baVNw<-o-5x@XK@MA<`rk+SIX5cx#?&0I>U6f~epZjz4DtVIuK9P8i>4rtTK|Hf* z>74h8!>lAJ#OK8023?T&k?XR{Z=8z`3p_JyWK#3QVPdh^!Ey()lA#h$6Gs$PqkJLj zvch?bvs$UK);;+PLwRi_&2^f?h+_!}Bq2gZ4P{hdAxf)8iis5M$2|N)jz38*nOtQs zax9<<6_Voz|AXJ%nuV!JHz^bY0x!1xF$x5Cfo9#dzmILZc>?&Kfh(=;uQq_$Ptxmc zEpi0(Z37qAZB5<-E_Z;zCtWfmNAlAY3I*W(jJ_!c^xpzKYi@6?eVjf38R}~J1~@nb z#)_1^?(y#K&ffk#)9UXBIXZHX+~_Q>0004$Nkl9o+#ZmkO^#iDF z-HH&*E)L=#$slyl!7d%7AT6#sl!B8>AQZavpOPX{C_+0H3hm-_4mIIO zvAIiA3MD@XTsV&Bxi@bvA-b+(mDyM+JrD>4)=FTMmN81p!s|kQ!K0Dsxcw)w{h)KL zC5s+JESydI9b6&{Jpw13Dv~{pMyA)REH6i39^8sm1>Xh!gOidW1P44cVI`Zv`Mm_n z09mjI91yHPC7Z$V(WZS*6=|mQEWG*&oVYYOw?Mh5A|CEgIT54z+>m}X#xo+KaBhKe zQN>}%pr@A#`n5O2!yPz9SRr0Gmw*%AFa}^n##;x-=Z2o(fJ+mWiz-q|5-z^< z;ZYbaB*2QWJ2!h1&v3w{3C-RFg_qXc`RkjUXE?z5HOy)k0Dx2?1^}qmyS~7=1)L%P ne1QuKEF=fp~00000NkvXXu0mjfj~IKP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json index 6237fcbe6fe..dd1e88cffcb 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json @@ -13,6 +13,9 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, { "name": "incendiarydisplay" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png index 0c642312083785774bb82898564cc2ff2b77fb9e..4d7eb62cbf22aca58d8e433140f253c51aa5a422 100644 GIT binary patch delta 131 zcmcc0xPWnjN)2Oikh>GZx^prw85kI%JY5_^B3hFZBv=M)};}Flzv*IZa&x9TOH#<}% gG}S?kVBE^c(5bJam+UY17HA8Dr>mdKI;Vst0N8{vf&c&j delta 185 zcmZ3$c$IO2O8qQP7srqY_v93bgaZ}_z8UveC77_dIl~AKu12Nswf}2(ub;T2Js{P6 zOJcd0$AA0sADYeanM}^1?=;!6EL$|#6{7z=Ig-bgW!18PxggR{w_TuwL4(h+aK7kY z!FRirG(?+wDn$TKmI>< zJ5--y7Awzopr E06PRZy8r+H literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png new file mode 100644 index 0000000000000000000000000000000000000000..68bb5da7bed97a104b75f1a8f92a8bd88a4aa308 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}DV{ElArY;~ z2@gTe~DWM4fkght{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png index a3d15b76e6954d1d7874caf2dc30773f5e6a6394..39e05c721147d7bd6501ac0372632365ccbe9bd0 100644 GIT binary patch delta 132 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 Date: Tue, 22 Oct 2024 09:01:37 +0000 Subject: [PATCH 142/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5903887b9ca..c493b3660e9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: TheShuEd - changes: - - message: Nanotrasen has introduced recruitment rules. Characters under the age - of 20 are no longer allowed to take on the role of head. - type: Tweak - id: 7044 - time: '2024-08-05T04:25:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30347 - author: foboscheshir changes: - message: added missing mime mask sprites for Vox - scared and sad. @@ -3921,3 +3913,10 @@ id: 7543 time: '2024-10-22T05:39:34.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32950 +- author: Moomoobeef + changes: + - message: Ammo-boxes no longer appear empty when only one bullet is removed. + type: Fix + id: 7544 + time: '2024-10-22T09:00:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32930 From 87b100b703b3838b5aa960588426f1cd241005b5 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:03:42 +0200 Subject: [PATCH 143/173] Syringe gun! (#32112) * Init testing * copyright * oops * Tracking the embed entity uid * testing stuff for gradual injection * work * weh * god save me * bleh * Yippee! * Again * Mini syringe ammo * cleaning up * mini syringes have a texture for fill amount * -3 cool points :( * hitboxes * init cleanup * much needed fixes * Fixes --- .../SolutionInjectWhileEmbeddedComponent.cs | 24 +++++++ .../SolutionInjectOnEventSystem.cs | 7 ++ .../SolutionInjectWhileEmbeddedSystem.cs | 60 ++++++++++++++++++ .../Chemistry/InjectOverTimeEvent.cs | 13 ++++ .../EmbeddableProjectileComponent.cs | 18 ++++-- .../Projectiles/SharedProjectileSystem.cs | 4 ++ .../Weapons/Guns/Gunshots/attributions.yml | 7 +- .../Weapons/Guns/Gunshots/syringe_gun.ogg | Bin 0 -> 9476 bytes .../Entities/Objects/Specific/chemistry.yml | 60 ++++++++++++++++++ .../Objects/Weapons/Guns/pneumatic_cannon.yml | 37 +++++++++++ Resources/Prototypes/tags.yml | 3 + .../Specific/Chemistry/syringe.rsi/meta.json | 9 +++ .../Chemistry/syringe.rsi/minisyringe1.png | Bin 0 -> 5346 bytes .../Chemistry/syringe.rsi/minisyringe2.png | Bin 0 -> 5371 bytes .../Chemistry/syringe.rsi/minisyringe3.png | Bin 0 -> 5378 bytes .../Chemistry/syringe.rsi/syringeproj.png | Bin 257 -> 5589 bytes .../Cannons/syringe_gun.rsi/inhand-left.png | Bin 0 -> 337 bytes .../Cannons/syringe_gun.rsi/inhand-right.png | Bin 0 -> 341 bytes .../Guns/Cannons/syringe_gun.rsi/meta.json | 22 +++++++ .../Cannons/syringe_gun.rsi/syringe_gun.png | Bin 0 -> 446 bytes 20 files changed, 257 insertions(+), 7 deletions(-) create mode 100644 Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs create mode 100644 Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs create mode 100644 Content.Shared/Chemistry/InjectOverTimeEvent.cs create mode 100644 Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe2.png create mode 100644 Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png diff --git a/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs new file mode 100644 index 00000000000..0f10e2a4492 --- /dev/null +++ b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + + +namespace Content.Server.Chemistry.Components; + +/// +/// Used for embeddable entities that should try to inject a +/// contained solution into a target over time while they are embbeded into. +/// +[RegisterComponent, AutoGenerateComponentPause] +public sealed partial class SolutionInjectWhileEmbeddedComponent : BaseSolutionInjectOnEventComponent { + /// + ///The time at which the injection will happen. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate; + + /// + ///The delay between each injection in seconds. + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(3); +} + diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs index d56fded024a..f15edcf0672 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Body.Systems; using Content.Server.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Events; using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -29,6 +30,7 @@ public override void Initialize() SubscribeLocalEvent(HandleProjectileHit); SubscribeLocalEvent(HandleEmbed); SubscribeLocalEvent(HandleMeleeHit); + SubscribeLocalEvent(OnInjectOverTime); } private void HandleProjectileHit(Entity entity, ref ProjectileHitEvent args) @@ -49,6 +51,11 @@ private void HandleMeleeHit(Entity entity, ref M TryInjectTargets((entity.Owner, entity.Comp), args.HitEntities, args.User); } + private void OnInjectOverTime(Entity entity, ref InjectOverTimeEvent args) + { + DoInjection((entity.Owner, entity.Comp), args.EmbeddedIntoUid); + } + private void DoInjection(Entity injectorEntity, EntityUid target, EntityUid? source = null) { TryInjectTargets(injectorEntity, [target], source); diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs new file mode 100644 index 00000000000..2baeba9da15 --- /dev/null +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs @@ -0,0 +1,60 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Events; +using Content.Shared.Inventory; +using Content.Shared.Popups; +using Content.Shared.Projectiles; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Collections; +using Robust.Shared.Timing; + +namespace Content.Server.Chemistry.EntitySystems; + +/// +/// System for handling injecting into an entity while a projectile is embedded. +/// +public sealed class SolutionInjectWhileEmbeddedSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly BloodstreamSystem _bloodstream = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly TagSystem _tag = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.UpdateInterval; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var injectComponent, out var projectileComponent)) + { + if (_gameTiming.CurTime < injectComponent.NextUpdate) + continue; + + injectComponent.NextUpdate += injectComponent.UpdateInterval; + + if(projectileComponent.EmbeddedIntoUid == null) + continue; + + var ev = new InjectOverTimeEvent(projectileComponent.EmbeddedIntoUid.Value); + RaiseLocalEvent(uid, ref ev); + + } + } +} diff --git a/Content.Shared/Chemistry/InjectOverTimeEvent.cs b/Content.Shared/Chemistry/InjectOverTimeEvent.cs new file mode 100644 index 00000000000..ca5ab4213ff --- /dev/null +++ b/Content.Shared/Chemistry/InjectOverTimeEvent.cs @@ -0,0 +1,13 @@ +namespace Content.Shared.Chemistry.Events; + +/// +/// Raised directed on an entity when it embeds in another entity. +/// +[ByRefEvent] +public readonly record struct InjectOverTimeEvent(EntityUid embeddedIntoUid) +{ + /// + /// Entity that is embedded in. + /// + public readonly EntityUid EmbeddedIntoUid = embeddedIntoUid; +} diff --git a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs index 008b7c2ced4..e4125945d26 100644 --- a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs +++ b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs @@ -13,37 +13,43 @@ public sealed partial class EmbeddableProjectileComponent : Component /// /// Minimum speed of the projectile to embed. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public float MinimumSpeed = 5f; /// /// Delete the entity on embedded removal? /// Does nothing if there's no RemovalTime. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public bool DeleteOnRemove; /// /// How long it takes to remove the embedded object. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public float? RemovalTime = 3f; /// /// Whether this entity will embed when thrown, or only when shot as a projectile. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public bool EmbedOnThrow = true; /// /// How far into the entity should we offset (0 is wherever we collided). /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public Vector2 Offset = Vector2.Zero; /// /// Sound to play after embedding into a hit target. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public SoundSpecifier? Sound; + + /// + /// Uid of the entity the projectile is embed into. + /// + [DataField, AutoNetworkedField] + public EntityUid? EmbeddedIntoUid; } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 1b7d6d6f991..85e75d6d291 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -71,6 +71,8 @@ private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent componen TryComp(uid, out var physics); _physics.SetBodyType(uid, BodyType.Dynamic, body: physics, xform: xform); _transform.AttachToGridOrMap(uid, xform); + component.EmbeddedIntoUid = null; + Dirty(uid, component); // Reset whether the projectile has damaged anything if it successfully was removed if (TryComp(uid, out var projectile)) @@ -127,8 +129,10 @@ private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableP } _audio.PlayPredicted(component.Sound, uid, null); + component.EmbeddedIntoUid = target; var ev = new EmbedEvent(user, target); RaiseLocalEvent(uid, ref ev); + Dirty(uid, component); } private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args) diff --git a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml index 7c46974818a..89db045c96d 100644 --- a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml +++ b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml @@ -26,4 +26,9 @@ - files: ["ship_duster.ogg", "ship_friendship.ogg", "ship_svalinn.ogg", "ship_perforator.ogg"] license: "CC0-1.0" copyright: "Created by MIXnikita for Space Station 14" - source: "https://github.com/MIXnikita" \ No newline at end of file + source: "https://github.com/MIXnikita" + +- files: ["syringe_gun.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from vgstation" + source: "https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730" \ No newline at end of file diff --git a/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg b/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2132808ecdc37a11856fbe10774236ffbb5a6954 GIT binary patch literal 9476 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 F{||ulwNwBA literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index c7fb68c9d7a..4c31d700905 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -391,6 +391,66 @@ - Syringe - Trash +- type: entity + name: mini syringe + parent: Syringe + description: A regular syringe, reshaped to fit inside of a gun. + id: MiniSyringe + components: + - type: Sprite + sprite: Objects/Specific/Chemistry/syringe.rsi + layers: + - state: minisyringe1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - state: syringeproj + - type: SolutionContainerVisuals + maxFillLevels: 3 + fillBaseName: minisyringe + inHandsMaxFillLevels: 3 + inHandsFillBaseName: -fill- + - type: EmbeddableProjectile + offset: "-0.1,0" + minimumSpeed: 3 + removalTime: 0.25 + embedOnThrow: false + - type: SolutionInjectWhileEmbedded + transferAmount: 1 + solution: injector + updateInterval: 2 + - type: SolutionInjectOnEmbed + transferAmount: 2 + solution: injector + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.2 + density: 5 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + projectile: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + hard: false + mask: + - Impassable + - BulletImpassable + - type: Projectile + deleteOnCollide: false + onlyCollideWhenShot: true + damage: + types: + Piercing: 5 + - type: Tag + tags: + - Syringe + - Trash + - SyringeGunAmmo + - type: entity parent: BaseSyringe id: PrefilledSyringe diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 1d18c2b0500..63a7acd2576 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -103,6 +103,43 @@ containers: storagebase: !type:Container ents: [] + +- type: entity + name: syringe gun + parent: BaseStorageItem + id: LauncherSyringe + description: Load full of poisoned syringes for optimal fun. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Cannons/syringe_gun.rsi + layers: + - state: syringe_gun + - type: Storage + maxItemSize: Normal + grid: + - 0,0,2,0 + whitelist: + tags: + - SyringeGunAmmo + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + - FullAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/syringe_gun.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/empty.ogg + clumsyProof: true + - type: ContainerAmmoProvider + container: storagebase + - type: Item + size: Normal + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] # shoots bullets instead of throwing them, no other changes - type: entity diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 5473b8c341a..1c02d7f3d03 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1303,6 +1303,9 @@ - type: Tag id: Syringe +- type: Tag + id: SyringeGunAmmo + - type: Tag id: Spellbook diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json index 1495eccd7a6..0c29f3e3fb1 100644 --- a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json @@ -57,6 +57,15 @@ { "name": "syringe2" }, + { + "name": "minisyringe1" + }, + { + "name": "minisyringe2" + }, + { + "name": "minisyringe3" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png new file mode 100644 index 0000000000000000000000000000000000000000..66c49a744cdf0d198ca46d7ec4223ae4c08d5529 GIT binary patch literal 5346 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png new file mode 100644 index 0000000000000000000000000000000000000000..71d3bad044a03e00c9ba8121e17e4cff6018b21d GIT binary patch literal 5378 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png index 7819a48c6615c15c509e9d02952b74d9f8439bd8..5faf746ae3aaad62de818aab2cd36a9c0716641c 100644 GIT binary patch literal 5589 zcmeHKX;f3!77kKo0a0*zC?U`y+ROq)|E6QitJ_yE+TC0_l9A_;V{^d2 zvHInwx12w%s&~&TZqIwPbkc^%N_bw&g3HH>$PaoKcJs2I`=nQXG`iGwOm5uSJHId6 zPRS5Ou4=Pf`&hSA7`9&D+Tw6gIpN5(&U$X<89Uc!n+rx1jBmMy(R(Yi{hWE@{rBG< zRrSlGEBtNEa~^&{N);8XYGekj-tOh$6#U2TVUw(_gdw#-E5;zz6Zbs2Yd7TA+4+Z@ z=VV9E+Ut`3)gn);lga5Bt-Q_8@^;)4Pj+5-MfBnXc7Id5PkQ0mI_cWpZ=3h+YZfF& zOQ(iDI$UyU))SYJeoF+MxhShXjMjY2jpcCqhSQl-&EGCCBX<3~S-LU*pgiD3=~T(Y ztx=cD<16AD>JF65-UnA`mvh~Bx9zO|#J8d*-U_R4a&wrkx(-j5#Hz1-yfNNS9Lqa(r$x(FGw$tL9=TO{rcqjSj`2%SX<6l^ybYTuap>ihYAAMG>b_PwFRudec1RzHKq+)L^4KQSvd-xE#kc6wPRr`dm(^27MA1U*QW|RKUP!n7use6#j)tzz8crr_T1jzqS*sy?=~1=> zEnRf9;bmQQL)Ss8hi5Evl3PN;3(oCM_YJKzHw2c#6!xBF^P76M*>kcx#>5-! z&sR?R>9OxcN%=8?i~G7+(d8?om%7fyepzq0=Y2gQo;pQ!F)=+zZrHQwg=4W++Pz~+ zr)aTFb=z4_(Xl&I=0ke5@VsAH!y3Wa=ht@>PHWgYv}<{t zZU*P$R>#&YlIeGozX-PtgA^y&GN#Cx0Er@Bth@pN)wOq{Uu0|zLU9Wlc@ zKA`oM2liqC*3dRFYaL>N7O!;=c%qz4#Jt@hF^fiW2_KwI@CMRX>Cg z{$Of%vwPde(w>V`D@wB0WPGQ(*?Od;A?%@L?u!@8j!DPP!d~BlE>19+g z7_h*80D#J%(YRz9gUsMj&F#UeL^5El*7d6h^rRXgEtO88QB|rz7CL=M@@s!@w9rL@ z%ZnO;>NH6hf`%lcYQ2}aQ*C0B&fI5`4#lTTaVN^;R1lQOv$@SQu_S!J2A5HxRB25X zINBU3Lk4i#BrMT{ks(wx5mkXebby&Y2(MSlUmwt*{opHq3Iw22slRrboz64kIikjSREdEHX>Zz@HF0nF~H_gp1JRGCwmav0A5x z)Ch`G0dk5G@W3(}#AC|YWH}E)$t)SfB|~gEgUn%anSLmn#X(@68ATYT1eE|Knn#6G z$p94#VF9>|L+0?Hkm7DAaaNYg5|JGRQNgY1H;8a5`#i}JrkY?>E#+s z1aN)#Kc)2qDsFE}&%{v7=)b8}dqwMe5) z0aYBY4>PFW>i!MDK86`e1Xb%aZwuWV(kF}AMFe8*n*$ddxG$*#7iNE!;Dz)ze)_ZT zZ}b4D-#d9Hec#LVUaogi;GMwlv+KQF@1(#xf!}A>|4lCY*RR~D8vNg9058;^IiYjF z%eXZ>eOfU1JwiC(+CF>?c(T)m&ejnKPPO>g;*_RX1}1IvVo8Wihuv@|&wrdN3ZR0i zCF0<~$e7v(8~yF;XhW^q%fI}@dhtpL6rQ@RrszpXUV_Xa>YBf|h0Cvd7Qq*7fJ?8fk8QeIQ2M)Jc4(9^IAe=))w<2RJ(dOw3tK_-@y6nw zPWed1PqB|Ky5xl3cWTRDV6}h9?)5R5v6JTT36w`Rw?w0VOItDj3W$dw4w)IeH)vkg FzX9(%I#2)r delta 211 zcmV;^04)F2D}e%#BO3q#b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1(OjK7=M;YL_t(o zNA1)x3dA4~1<=`THl);jVwDW&^f!V@z~!z`%=c<-g*>=vj7gb<|RR0Cp+(u^@EqAv*{8uaeH$_oGh N002ovPDHLkV1h*+Sk?dl diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b59a4d52682c1a0f290c8751b524b1eb04fa2f04 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|O(o zr;B4q#hkad4EdTI1RO3NJakQ3Kr3o}1Lw3VF6(Okhmw0*m&P2L#8@GkZ3wDax^L4r?g`I}SH9kyGd)}KliH5C*DKDxzRzvw{+Y?fZ_BE_PVJ_58G$9XV-3sUGBheYLCwo=;brR<;~lL*dJ97*N@tj!Nl#I8T5}?; z_2>UrXW#w4x2!sw2WTt1RLY9Mo@}UVj2?5r}BG_R+E^>(QF!@0ssC{VeNPHZ6Orl)|>3ySaV$ zMRL6Hjtef7ay;+nzWK&`-&xDHe%E=oe)joe-`0I!|A&3W0*iSycJ=Ek!v39g%9hLd hF>k-|ZFZoU)#7d}nUb|HE`b7&!PC{xWt~$(69AhukQV>| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json new file mode 100644 index 00000000000..dae584eb812 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13 at f91dfe2e0dba1b7a8b9a0fa18251340920979a62, held sprite by ScarKy0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "syringe_gun" + }, + { + "name": "inhand-left", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png new file mode 100644 index 0000000000000000000000000000000000000000..972714d1c71f2fc95c69fece78e47569596df0cb GIT binary patch literal 446 zcmV;v0YUzWP)T z$h|u$ExPE+g#`;L#t^B+XrV?7f*ogKQff?^M4EIn2QrzNT<-mH=4SzO76;$}9DoCG zfM9@PkwDXO-cSU{ryztT(RDqC7!m}5_+$S9(Bk`hyEtor2&0iRwIL}uvijI+HvQ2j zm-V`On9mbY(=ZK^saoBk?fEZ=KnE5p6`;{_`VuX^vIHETws2c2`9oFK9EdWtNk)_` z>&DuzRIJlA`E4^3#>AI{q} zjoAAk6o9S!*Zoi7LSYT^=DJgSFnFO)Z)&on#RCD{B*YtEUBiK3VgUask_fl`e zmZ+^y6ynZ>kl1H3ONdw(5!(wFZ4+rI_D$%yk_o`1{p{~&z3!0!St=1g8cu|s0=P#p oP5VOuvM3x0kd-(92bep+HV!Z literal 0 HcmV?d00001 From 831e646030de824a757a994a75a6423677fad1ff Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 22 Oct 2024 13:04:49 +0000 Subject: [PATCH 144/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c493b3660e9..2c245f88271 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: foboscheshir - changes: - - message: added missing mime mask sprites for Vox - scared and sad. - type: Add - id: 7045 - time: '2024-08-05T06:09:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30607 - author: SlamBamActionman, PolarTundra changes: - message: Thief's Syndie Kit now comes with a Radio Jammer, a lighter and a Syndicate @@ -3920,3 +3913,10 @@ id: 7544 time: '2024-10-22T09:00:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32930 +- author: ScarKy0 + changes: + - message: Added the syringe gun and it's respective ammo. Currently Admeme only. + type: Add + id: 7545 + time: '2024-10-22T13:03:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32112 From 3801465585d7e5b806574c8d213a816e47b4a67a Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:49:39 +0200 Subject: [PATCH 145/173] Adding intellicard functionality. (#32347) * init * im so confused * clean * sprite update * :| * further attempts * be blessed for it works * Very prestigious pAI * cleaning up * Intellicard in RD locker * PAIn't * .Clear()n't * .Clear()n't for real this time * Cleaning up * Whoopsie Daisy --- .../StationAi/SharedStationAiSystem.cs | 8 +++++ .../UserInterface/IntrinsicUISystem.cs | 10 ++++++ Resources/ConfigPresets/DeltaV/deltav.toml | 1 + .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 29 ++++++++++++++++-- .../Objects/Devices/ai_card.rsi/base.png | Bin 4432 -> 6812 bytes .../Objects/Devices/ai_card.rsi/empty.png | Bin 4292 -> 6697 bytes .../Objects/Devices/ai_card.rsi/full.png | Bin 5121 -> 7638 bytes RobustToolbox | 2 +- 9 files changed, 47 insertions(+), 4 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index baef62c3da9..7eef20cebd8 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -285,6 +285,8 @@ private void OnAiMapInit(Entity ent, ref MapInitEvent ar private bool SetupEye(Entity ent) { + if (_net.IsClient) + return false; if (ent.Comp.RemoteEntity != null) return false; @@ -299,8 +301,11 @@ private bool SetupEye(Entity ent) private void ClearEye(Entity ent) { + if (_net.IsClient) + return; QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; + Dirty(ent); } private void AttachEye(Entity ent) @@ -330,6 +335,8 @@ private void OnAiInsert(Entity ent, ref EntInsertedIntoC if (_timing.ApplyingState) return; + SetupEye(ent); + // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); @@ -351,6 +358,7 @@ private void OnAiRemove(Entity ent, ref EntRemovedFromCo { _eye.SetTarget(args.Entity, null, eyeComp); } + ClearEye(ent); } private void UpdateAppearance(Entity entity) diff --git a/Content.Shared/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs index 2d8c5d14801..b16492b8355 100644 --- a/Content.Shared/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(InitActions); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnActionToggle); } @@ -21,6 +22,15 @@ private void OnActionToggle(EntityUid uid, IntrinsicUIComponent component, Toggl args.Handled = InteractUI(uid, args.Key, component); } + private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args) + { + foreach (var actionEntry in component.UIs.Values) + { + var actionId = actionEntry.ToggleActionEntity; + _actionsSystem.RemoveAction(uid, actionId); + } + } + private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { foreach (var entry in component.UIs.Values) diff --git a/Resources/ConfigPresets/DeltaV/deltav.toml b/Resources/ConfigPresets/DeltaV/deltav.toml index 9f4705092b1..8b98868b7d7 100644 --- a/Resources/ConfigPresets/DeltaV/deltav.toml +++ b/Resources/ConfigPresets/DeltaV/deltav.toml @@ -33,6 +33,7 @@ alert.min_players_sharing_connection = 2 [server] id = "deltav" rules_file = "DeltaVRuleset" +uptime_restart_minutes = 2880 # 48h [discord] rich_main_icon_id = "deltav" diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index e53579afccb..2a0cb8e1208 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -273,6 +273,7 @@ children: - !type:NestedSelector # DeltaV tableId: LockerFillResearchDirectorDeltaV + - id: Intellicard - id: BoxEncryptionKeyScience - id: CircuitImprinterMachineCircuitboard - id: ClothingBeltUtilityFilled diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index c9164b14d13..9f7e206c249 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -71,6 +71,26 @@ title: comms-console-announcement-title-station-ai color: "#2ed2fd" +- type: entity + id: AiHeldIntellicard + description: Components added / removed from an entity that gets inserted into an Intellicard. + categories: [ HideSpawnMenu ] + components: + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Binary + - type: ActiveRadio + channels: + - Binary + - Common + - type: ActionGrant + actions: + - ActionAIViewLaws + - type: UserInterface + interfaces: + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface # Ai - type: entity @@ -82,7 +102,8 @@ - type: StationAiHolder slot: name: station-ai-mind-slot - locked: true + locked: false + disableEject: true whitelist: tags: - StationAi @@ -256,13 +277,16 @@ # Items - type: entity id: Intellicard - name: Intellicard + name: intellicard description: A storage device for AIs. parent: - BaseItem - AiHolder suffix: Empty components: + - type: ContainerComp + proto: AiHeldIntellicard + container: station_ai_mind_slot - type: Sprite sprite: Objects/Devices/ai_card.rsi layers: @@ -361,7 +385,6 @@ enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface - type: ComplexInteraction - - type: DoorRemote - type: Actions - type: Access groups: diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png index 244183c078c3d580cda31d0431ced9150a7cf7c9..535f5a48e99f6bf7fb5e384259378c9f21082c70 100644 GIT binary patch literal 6812 zcmd5>TWB3s6rH5Tq=z(yHmIo8+XpIYW$rmM=gd^lv`w*5h_)0-MKSj=LnBtB4chj{ zv`wXAMJ*}?MbwIdA3>@g1!-+JHaW-8aVBsbd|$x$)zh53M&vr#3Rh-^C9OL_oYK4t`e?O6t+`D3Ix`o z2$|!loPwb%RL%)pN8$}YAz;M02t{D$L_r~ls96}wA~}<&Eb7aG43wZbMjpThs)>il zMH7?DHIotyAo7}%7bOsULZZQuFbAQc+vde+rzna1a$2bQsi9jIF2mi5zP@5 zk15oLvPF)EJXHGPfdX3|XkUtls0g2aXi*7;C>qX-kpsMiLM)ZTWL9~+NP=iS;*n+o z8i*|-$EB}qNb?bd0L)^h2n&Zx7mP?VQUW2-&j=zJ;?j}y((JYCpcGvO2?&@hLRf4> zVsy+9=*sZms85|VJd2`Jj$eXLjHwVN*Rw^c4r$A;>VbaqE$o)(v*aftGP&VoHED2}HhwHnjRir$W1x4FI zCp_YWGscI45C!6z&X`Va&h;8Gj%~GDX8LtWq#xB5DNOh#xkC&!Q>uDw^XSZQi7hii zsP{J(7Xh!UO8Ka43b|gKK2^&PRRCch=~K1jKQ0J(M+RLDL=5PJK-|dx)B_xqO(%G1 zm+5^L*EqP*4s&ph*$@XYNHm>E$aAtQsd(s&V9_A~1Jpu#GQDwO=!*bi3fM@=X4PX! z3~?USYcSn0LUY#>JR?FC8Njx1OG+1JI$ z6mtqv^zyK&Vv%kZCYo@A3lGCdTA;c^R3$YU{;} z8WCeUm^;!EEpvxa5~&6lC1MhY=v@O4eNw3KshU1n>5rjG;agA0M8F;#KlKRyjndlN zvub1ip2EQOEz1_$8@^wD{>*>g_}JLDgV+4laV%K>Z1d>R32TX5^3EH_KcBeo#KBf? z@$uD%#xt+HzG7$7fdlU~KfnE^kgI{$1a)&7FtmceQTnvpR2SdFbhGd*6|e?|(cgESesO%HzprPw^H*!{p2Lgo zI#lS+EWd8ymY$DVZryc9_t8x2$cMYzj*PAu8SQ$td0=p-_5R~+BNONEwT^FNOTX^O zsH+D4z0lwH?!4RQH!Zc!uNld=?tAIj=C<~~J2PW^|Jm-1_Q_9gTiE%;;@$1v{BU#k vC%x9_kE3sXvA3=3#KD2Cea)Sg_4A@9m#%wY#e4YIgVnpXuV-xaz^?xR&po7i literal 4432 zcmeHKdr%X19$$12&o1Gq!oMKz-D(7_8{4~yO6+) z8pPgtR!=;9jcu{E_-Ko?w#*HsqoUxz**PD0^`>XVO3|VRC)2ZMTfB0=4ezk_YavbVi1Qt58|_5Zu};9R*?@>4$wh z=VD74Sgi0dFcV;15ES^k$9^NK4U2sIC?>J$Kw?}6oBvjV_}FQFqkh1eDs#V9_5SI? z%X|X77b&~yI$332v$G{aUX}Xu^rdU<&(#&)zZ2cLx?i95HhSwpnQ?B<{ii>v-P4_4 z@a|UYcmFt$ySe?%H?Lku+O=}m!HiaIpDI>+?T+z$%eklGkI#MaT3Pw*vmdTJb2{tm zEeDG!+UMF|9PHS0{-&&KRpa;3niTilO^(9Ov!;RMU;J|E`s;>j`8o&+t7gq+yVYzS z%Liof>ZU!W>^6JMOKbCwW-d?chkI&{5T731Vc5Ss_FM+LqUnCoS6ykvT{ZR126^M0 zh%K@2%u`%yA)4h|KcBz-gX-EhUfvrh%qw2-MfJx+h6k^;ZF&@z@zEuR0EeA8#L)TH zQ}zu{$=;1b`W+jb$LcPjcW-}q=AXB}82a^2cg3wCA!@~v+OX6;hI3*Y(hb+$Y!WXG zwJ&&KUrdkCv#dIP@#fx^{;v|g+|f4c^3J$#`;8m76*N3N^;t*5Z%(vp+H*5MNiIxo zZt!*YG+ckB;l?vt$P@J^dz*7~e~8&%vnm{+wYlcRSZ7m7{lU(zimtY_yWePf|M=(U zWl0^g;_Zv@&4X#*n11zvG0|U}VJ#ZG@Tat;!B)i;_S1hqI_2@_K*Ji}(XSuxO2Hmk zE8jVuxjQ(R;@f!hTCeGIJ|b>Y*Ag?oIBlO@A$#C{Xv-|>jg5Oz`0~1`S5A2WY!;7PMD^Z4E(j9tBBrPDT;%_(0!5 zkTEUbBdHQbgq@6=^_q|eADu;DmNp^lbT-W9Gc(0(b|uf`SLQgV$`T5vk+f8~F+czS z4Hgh}!YZY1rhGquXay61FhmAb#BJwP& zMj^nP2`LsuAE8wG{eFdCqu_YAQibEV5>qSHY7|(YLWNf(1E^O>k|0JfEQ~<$tWRV) zFDzk_POeNeAqddJWAS->HrqJ7R~Tgh@SzNlKBY>5DLo$LWDh~iEC(Q?0sWwd-~dyq z%wq(ujHj5)a>gqrO@^SUaerSKUm8k>rj$%6;{m1uSXDJ;$tPZl5c@}gfSvol?35o_#E=)sfQ*bBhR2lTB76gYnDT+c} zIHlF-7_G+1=t595MXcg@4++Z2dPp~;^m*MOg+w@!Znv5cwE~-v*h@*#1suQ(uwI(; z3lk~_>tXUmQsPskS8Mbbj_Y-}TBXPF38NPnUI4u)p{g*2MjO&dg&{yXfLc=OQ~(f? zgKP*h&yXU=J2Kp=(+UOv`wtyJqN`76a2Vp6Rat8(s2= zk156r{sH;Hr_w7gHx7W$tZ?V*EDJO&{a!zPycS5F@MW(TAZT8@bcXF)F)slKBSfn$ zGomkYe&oWW+SN}4f#|W-lI|#Iql)6@Bqd^be_1?mW!P}1vC&muC-bd$yb2vrnx5Tm z>vYkBEB|wOurDkp>%E%NijA}0UV=djujRKYcFW$g$24sVy65y{yy z?Bi$Xg@=otJodf2p!`ts(KWN5?^{;$v*FxhmU~N5XJ^lmJw2;ZUenyMaJU^0eij|P z*GAz3=HT+&XW7WP#qn`bRac|q g&)vN>7n8?<1IlWm!V?ox>i`dsH8aQ3m{GL#zrOQGZU6uP diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png index 7e61f368de294ae506cdab73e818f0f594bb260c..a62b9263d52ce1637458bc3f14dc63bc12852b59 100644 GIT binary patch literal 6697 zcmd5=O=ule6rMC%?Ij69YYDZB7jdDunYs7Qy)!OKYLl8QEVa6@;v)0j%wV8u(3G|+ zNFoSDshb8tcP%bN2rhy<5kcurOa&L}##Je}&@QCA_B(fG-pqaPCGRI~^CrAI_wRh? z`_4J{2Ik_)6EBRjL(FlU@%g!#Q+U_#n|^dJ+V?M=UB_$R(%k8H9cSVv`i-nTJMo0$ zjQqAd`|9$k=v-~-oww7)Gf8dv!ctO8&M&48qn6d^;T~tw*MSO^a`DJehCD(ipb;MG zyRPR-)0zP{tr=VMjP{s^!$6=%KRkhf21+sSW%Jl&9xp=AM>ij{pph@s?S(M+zyr(^ zcmb3<5*}uVUT)9Ayd%gn7QB38l*?0LpsUjA`Top3TH1#nqoy9`(?k_d>sV?;FZSU_ zaGnVGLd(q`W`q=xaG414;sT+-2A`&cMk_?2AHlGs6%sR_F1r=}yoQ{=)-k<{OUn(1 zQJbZ=#uf8j6{u88{DkQdK>=z&6oKSK8Zl@lj~uaUn~Q%r&cXjXdO82*lEcs#A3O*= zCK@8u2&M9rP<7>N$z8>juQUoP5i#PC*6a0@bIgZI(u}W#FJs}#7%33giy~w)(2<6r zFLWdmUn;x-CB|_#>fNMKsE6YQMS43*1h}JV6RVJW;*dlUVh1!L* z5J5=5EN6XqC(PfZ;fTh6hJ; z>r~-c7M)i76236%1`nXDKC0;5z+vHO*M??!T#8sklIkKvwIUPPo(GrQKyXuP5e5;- z5H;s1&6F=2WTrG017o02SKFB26wvWO+2s3CE1a_;oTU#x^iiuwd8!(kj)O^f#z_RI zCx}9U__i}cVy5vK*WG<2*i#2w_o6>Y;(w(r_7wQvKZ)u zN!(*D#6b)aO?MLVT%1ZOAG#x0c1cLOlXP{ldT?PFiUb*J;2;%;)yx$!#C_DS!B+d( zRvxO}Tlt!`7Wr&D{T5iqd#SibdD>)@U8S^O%-b$|JAT;-t+x50txgTre=tC0a=Wv9 zFpRqMD0j3l>PJioLcJCsd$FIGYRX#)cU&JQZKH6H0y?3{QZL_G3Ixy;0OciEmvo@HR;gnWt>5w&>a<8M^ z11iPXTz8L=&7&Okz-TKmB?$F;0J06X8r@%@-o)74?k^+TS8t=7(I8@M2g4(+&@w!X zibxH>s1Q>?WbYn;=#xT+Pu29v%6tsfn!YkKk+8qtOK;*k`{ntWqp!TN(pZ>$`07IN z(TihaclLc9UHNKsee?Ri(dgtezkYJ~hxp558^=Gto;j&$P-?})r z|C`HCO>c}I`ToLl-%d=9uWUY+HQ!CS?D&sQ6XbzU_k6Ls`QOUa$j86jo<4cw=#^`a z{J!?*%O8HQuyOjxp*>fpT+^I6hOMhFxoq!Y$9d~Bac=d_*;(*&=4VgLtUtf7dKc8U BcxnIu literal 4292 zcmeHKeQ?v}8CR0!%Ui-=X$Wa^6QboSlVw?oE$b`-u?_LHPTj=Kpkqs9Np@5s%ScM> zWI!`$3Zq?tru1mLcC3R!*TBXKy_8S_Bs~~y(=7!$$_O;1(C)(EC~dl#mc6p`dF$OS zck6$#PnPt2{GR9ez0dQW-(PymmSh?74G;unxl5hp;0}XpVMZGG{rQu1d%^9kM&DAc zoQ=R?MGlCy0<1NJ1z3oR0SJnID0$Cib;94fHJDRy6x%RkJ^9M1EP72={qJ{NotfRC zSswf9^HoQrCikMZ{Rd8O%$7cEYiIL5Y00d+@txqwukO9;X6YZ-cU5J6@bH-*uKagK z*Zb$^&zadC^uIa#q5A6Bw3Ca?v-2-W^G=nQQq!JJW)3$WIIDbp?BJz4a;K;5d4-;H ztg34Ih2F|Tn@rbA)^;QLDJR+tJ?Blqr}~;n=?h|;GOg-F2UE~wwcoYu-O%M#4hTwG zCpsKnx5F`95Gdo@-E!tUO&r@yVN=*gUCHZM*?c=7>9L9T!QiXGcd^fdHz z7GM67=zr?Z52nmIo}BNUX_)F#|uh|PCEhX;i>u$OWYpsh=)!= zP?W-PFF^J7Y$CvY1b3YEaP4tpVCC`9PMNFI({no+M2}DNGAHtM z{IQ7SDJy3qP|7N>C`oc0$^sEeP$t4^4Fqu9VjctK4yhU&;shNEfEz`C!*f=%%|?(Y zVJ#w2lC%0ziX#Y==XeWiu@qT(KRX8EenkXb$<~g|N{8YB6i1N(jud#12o*p{fiQ!- zC_l>bCacBb=ZS!oi$n1oy;xQx7A&VIu|WX~hk|j1PB^{D>t+zM(KIUY*0NdvIDi=t zL%bYOM^!#i5-K!S=M%S@2`g^GNdhNHTM<5LR4FJb=tUhBHyH^suF)5U2IT;1S-n#M zKwJ*0p&g3AYO>;!OlY({65w!;l6whj`lhp(OYBH0wiK6i$A5PI`Gi}BTaT9GC zV=wb!py7X6>*E946N_Fdsvv$tT$Grp3Snj9E%90_#)k=p<6}XyT%rV(trz%so&YPM z;%eAXPyqYKP{R((#cyba0B^=AB0!;5oW(&i1Z*h9lSL@c2Pna6v9UHb(N81jsvOWF ztRgH50v-WZph4qY!E=X}YTo#4A~k}(4uCS$M4_XU5ePO^ET-=m!`0fc|Kh_QHyE?U z0KbF`Y+Ya{#74HlA-+Ja-{xm%9lp&FFgzJ#Li|qBHA&Zm7?_apWOq%{H6aEjWIWkj z|2Mh}qlYOW1pWadknc>o9DgqFrsh>KHm1~!0 z_MJYK_72f#zcVE-cB{$A zT&!7@oSNfZ_=^j<5OiqD^%n+{IzBec-QJXJus;ZGf8)FDdn%ue&1i1~p&_@c%(=Iu HdhLGz@YfZx diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png index 59131c8c0aafc5f647d4409168265f23cc05e667..69a1825d91db90a67d6f57f2815d9f3581ecc43a 100644 GIT binary patch literal 7638 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 diff --git a/RobustToolbox b/RobustToolbox index 32bca7cfd41..d1d43f834b8 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af +Subproject commit d1d43f834b8845da698ef1898e8191ab159ee367 From 1ff1c12c6658830f925499ae60a824372697c1dd Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 22 Oct 2024 13:50:46 +0000 Subject: [PATCH 146/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2c245f88271..8b88f5ac81d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,17 +1,4 @@ Entries: -- author: SlamBamActionman, PolarTundra - changes: - - message: Thief's Syndie Kit now comes with a Radio Jammer, a lighter and a Syndicate - codeword. - type: Add - - message: Thief's Agent ID has been moved from the Syndie Kit to the Chameleon - Kit. - type: Tweak - - message: The Syndicate pAI has been removed from the Thief's Syndie Kit. - type: Remove - id: 7046 - time: '2024-08-05T08:03:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30446 - author: EmoGarbage404 changes: - message: Being cold now slows down your character. @@ -3920,3 +3907,13 @@ id: 7545 time: '2024-10-22T13:03:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32112 +- author: ScarKy0, Fildrance + changes: + - message: Using an intellicard on the AI core now swaps the AI between the core + and intellicard. (You can evac with the AI!) + type: Add + - message: Added an intellicard to the RD's locker. + type: Add + id: 7546 + time: '2024-10-22T13:49:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32347 From 5cde3c7cde68aaa33a854f58688c703811f371ca Mon Sep 17 00:00:00 2001 From: Southbridge <7013162+southbridge-fur@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:01:18 -0400 Subject: [PATCH 147/173] Add Nuclear Cola centrifuge recipe (#32441) * Initial implementation * currently it crashes on load, don't know why, maybe changing the products will provide some insight * I was overlooking part of the yaml formatting. --- Resources/Prototypes/Recipes/Reactions/drinks.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml index 9bbd07848a8..2353099df56 100644 --- a/Resources/Prototypes/Recipes/Reactions/drinks.yml +++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml @@ -768,6 +768,20 @@ products: NuclearCola: 5 +- type: reaction + id: NuclearColaBreakdown + source: true + requiredMixerCategories: + - Centrifuge + reactants: + NuclearCola: + amount: 10 # assuming we loose all o2 released as gas in the centrifugal process + products: + Ipecac: 2 + Water: 2 + Sugar: 2 + Uranium: 1 + - type: reaction id: Patron requiredMixerCategories: From f1d0568cd73af44eac376523b7628041bdb32f33 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 22 Oct 2024 17:02:25 +0000 Subject: [PATCH 148/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 8b88f5ac81d..395e4363253 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Being cold now slows down your character. - type: Add - id: 7047 - time: '2024-08-05T08:07:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29692 - author: EmoGarbage404 changes: - message: The biogenerator has been recolored and renamed to the "biocube fabricator." @@ -3917,3 +3910,10 @@ id: 7546 time: '2024-10-22T13:49:39.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32347 +- author: Southbridge + changes: + - message: Nuclear Cola can now be broken down in a centrifuge. + type: Add + id: 7547 + time: '2024-10-22T17:01:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32441 From a554fb5eb60a2a9bfcdde54fb252ac4120830dd0 Mon Sep 17 00:00:00 2001 From: BramvanZijp <56019239+BramvanZijp@users.noreply.github.com> Date: Wed, 23 Oct 2024 01:36:51 +0200 Subject: [PATCH 149/173] Several Ninja Suit power cell upgrade fixes. (#32902) * Fix several jank issues with space ninja cell upgrades. * Rework the code to comply with maintainer request. * Fix some naming convention & formatting errors. * Change from a custom check to an item whitelist to avoid power cages from fitting. * Make the EntityUid of GetCellScore non nullable. * Remove a line from a previous solution to the above problem I forgot to remove. * Fix the magic number issue. --- .../Ninja/Systems/NinjaSuitSystem.cs | 30 +++++++++++++++++-- .../Locale/en-US/ninja/ninja-actions.ftl | 2 ++ .../Entities/Clothing/OuterClothing/suits.yml | 3 ++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs index 244b7adf036..20674dda879 100644 --- a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs +++ b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs @@ -22,6 +22,9 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + // How much the cell score should be increased per 1 AutoRechargeRate. + private const int AutoRechargeValue = 100; + public override void Initialize() { base.Initialize(); @@ -59,15 +62,26 @@ private void OnSuitInsertAttempt(EntityUid uid, NinjaSuitComponent comp, Contain return; // no power cell for some reason??? allow it - if (!_powerCell.TryGetBatteryFromSlot(uid, out var battery)) + if (!_powerCell.TryGetBatteryFromSlot(uid, out var batteryUid, out var battery)) + return; + + if (!TryComp(args.EntityUid, out var inserting)) + { + args.Cancel(); return; + } + + var user = Transform(uid).ParentUid; // can only upgrade power cell, not swap to recharge instantly otherwise ninja could just swap batteries with flashlights in maints for easy power - if (!TryComp(args.EntityUid, out var inserting) || inserting.MaxCharge <= battery.MaxCharge) + if (GetCellScore(inserting.Owner, inserting) <= GetCellScore(battery.Owner, battery)) + { args.Cancel(); + Popup.PopupEntity(Loc.GetString("ninja-cell-downgrade"), user, user); + return; + } // tell ninja abilities that use battery to update it so they don't use charge from the old one - var user = Transform(uid).ParentUid; if (!_ninja.IsNinja(user)) return; @@ -76,6 +90,16 @@ private void OnSuitInsertAttempt(EntityUid uid, NinjaSuitComponent comp, Contain RaiseLocalEvent(user, ref ev); } + // this function assigns a score to a power cell depending on the capacity, to be used when comparing which cell is better. + private float GetCellScore(EntityUid uid, BatteryComponent battcomp) + { + // if a cell is able to automatically recharge, boost the score drastically depending on the recharge rate, + // this is to ensure a ninja can still upgrade to a micro reactor cell even if they already have a medium or high. + if (TryComp(uid, out var selfcomp) && selfcomp.AutoRecharge) + return battcomp.MaxCharge + (selfcomp.AutoRechargeRate*AutoRechargeValue); + return battcomp.MaxCharge; + } + private void OnEmpAttempt(EntityUid uid, NinjaSuitComponent comp, EmpAttemptEvent args) { // ninja suit (battery) is immune to emp diff --git a/Resources/Locale/en-US/ninja/ninja-actions.ftl b/Resources/Locale/en-US/ninja/ninja-actions.ftl index f01f02a60e5..b3e295b7a29 100644 --- a/Resources/Locale/en-US/ninja/ninja-actions.ftl +++ b/Resources/Locale/en-US/ninja/ninja-actions.ftl @@ -1,6 +1,8 @@ ninja-no-power = Not enough charge in suit battery! ninja-revealed = You have been revealed! ninja-suit-cooldown = The suit needs time to recuperate from the last attack. +ninja-cell-downgrade = The suit will only accept a new power cell that is better than the current one! +ninja-cell-too-large = This power source does not fit in the ninja suit! ninja-research-steal-fail = No new research nodes were stolen... ninja-research-steal-success = Stole {$count} new nodes from {THE($server)}. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 2c4d165cbe4..4417fae13d2 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -197,6 +197,9 @@ name: power-cell-slot-component-slot-name-default startingItem: PowerCellSmall disableEject: true + whitelist: + tags: + - PowerCell - type: entity parent: ClothingOuterBase From bab746c40a5972a76bad6f11fc3431d3cfeb7dad Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 22 Oct 2024 23:37:58 +0000 Subject: [PATCH 150/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 395e4363253..bd7b58d07fa 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: The biogenerator has been recolored and renamed to the "biocube fabricator." - type: Tweak - id: 7048 - time: '2024-08-06T10:51:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30696 - author: Errant changes: - message: Vox can be nukies and ninjas again. @@ -3917,3 +3910,18 @@ id: 7547 time: '2024-10-22T17:01:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32441 +- author: BramvanZijp + changes: + - message: The Space Ninja Suit will now give an error popup if you are trying to + install a cell that is not better compared to the current cell. + type: Add + - message: When comparing which power cell is better when trying to swap them, the + Space Ninja's Suit will now also consider if the power cells have self-recharge + capability. + type: Tweak + - message: You can no longer fit weapons-grade power cages into the space ninja + suit. + type: Fix + id: 7548 + time: '2024-10-22T23:36:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32902 From 9079cd7e2e841aa9f2b9d2ef3ee0a9fbdf84bd4f Mon Sep 17 00:00:00 2001 From: UBlueberry <161545003+UBlueberry@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:51:49 -0400 Subject: [PATCH 151/173] In-hand apprasial tool sprite (#32849) * golden apprasial tool when * thanks evan. very cool --- .../appraisal-tool.rsi/equipped-BELT.png | Bin 176 -> 223 bytes .../Tools/appraisal-tool.rsi/inhand-left.png | Bin 0 -> 307 bytes .../Tools/appraisal-tool.rsi/inhand-right.png | Bin 0 -> 306 bytes .../Tools/appraisal-tool.rsi/meta.json | 28 +++++++++++------- 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-right.png diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png index 877a76785e862f54f04209692d0e02774266a644..e80c4fa942b00905df702f4ea3fb91c7eb543d02 100644 GIT binary patch delta 195 zcmdnMc%N~CNGZx^prw85kJqJzX3_D(1YswUPIb1CK-CVXjDpTCT8;HPP+8 zLB{Of3%2AGg+waMDY1IGmr>_*UOfv?6T_TM`N41ZI-CDCyE-ZId8+I?j_+d5^VYk& zxYXFckM6E?)|z>^Rvx61fgyoodY;g;)U~Rc|5dlB)jHVlyLT6C;het2lY!yE9{EOh p>75hrR__3+~6@vd$@?2>@u@MIrzI delta 148 zcmcc5xPftkN sDEPgy#PrjwEl=*;`3+JC0e@~Xue0L4JEwFq?_rRLr>mdKI;Vst0BmD7FaQ7m diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..19d43a58d253de9febe529fee811a3d181e658da GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`NCfzVxB_WS z4GmXk=a8VF%*;$FDXD97gcYv`Ir>s9%a`Nh|1V3F9LjCH-v6+g{YspLS!Yk< z&(9${F0%1$-gz)m==u%!<98CRk44ofy`glX(f`NCfzVxB_WS z4GmXk=a8VF%*;$FDXD97gcYyeP&@?71QQ&E%Mc8`xXJG6U(;>$O`WJzWnop zjssVIPi9b6xlp@rdWB2Ey6@t}2`xH%_uskieq{2(`m(*YZY~|Q@9Qm Date: Tue, 22 Oct 2024 23:52:55 +0000 Subject: [PATCH 152/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index bd7b58d07fa..abe3b2066f6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Errant - changes: - - message: Vox can be nukies and ninjas again. - type: Tweak - id: 7049 - time: '2024-08-06T10:58:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29783 - author: slarticodefast changes: - message: Fixed borgs, animals and aghosts being able to enter cryosleep. @@ -3925,3 +3918,10 @@ id: 7548 time: '2024-10-22T23:36:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32902 +- author: UBlueberry + changes: + - message: The appraisal tool now has in-hand sprites! + type: Fix + id: 7549 + time: '2024-10-22T23:51:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32849 From deaf6526375a07f08eb6339846787e40ad01a183 Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Wed, 23 Oct 2024 07:49:58 -0500 Subject: [PATCH 153/173] Visualized regions for NavMapControl (#31910) * Atmospheric alerts computer * Moved components, restricted access to them * Minor tweaks * The screen will now turn off when the computer is not powered * Bug fix * Adjusted label * Updated to latest master version * Initial commit * Tidy up * Add firelocks to the nav map * Add nav map regions to atmos alerts computer * Added support for multiple region overlay sets per grid * Fixed issue where console values were not updating correctly * Fixing merge conflict * Fixing merge conflicts * Finished all major features * Removed station map regions (to be re-added in a separate PR) * Improved clarity * Adjusted the color saturation of the regions displayed on the atmos alerts computer --- .../AtmosAlertsComputerWindow.xaml.cs | 51 +++ .../Pinpointer/NavMapSystem.Regions.cs | 303 ++++++++++++++++++ Content.Client/Pinpointer/NavMapSystem.cs | 47 +++ Content.Client/Pinpointer/UI/NavMapControl.cs | 19 +- .../Consoles/AtmosAlertsComputerSystem.cs | 91 +++++- Content.Shared/Pinpointer/NavMapComponent.cs | 66 +++- .../Pinpointer/SharedNavMapSystem.cs | 91 +++++- .../en-US/atmos/atmos-alerts-console.ftl | 2 +- .../Structures/Doors/Firelocks/firelock.yml | 1 + 9 files changed, 649 insertions(+), 22 deletions(-) create mode 100644 Content.Client/Pinpointer/NavMapSystem.Regions.cs diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs index f0b7ffbe119..64068d6dbbf 100644 --- a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs @@ -23,6 +23,7 @@ public sealed partial class AtmosAlertsComputerWindow : FancyWindow { private readonly IEntityManager _entManager; private readonly SpriteSystem _spriteSystem; + private readonly SharedNavMapSystem _navMapSystem; private EntityUid? _owner; private NetEntity? _trackedEntity; @@ -47,6 +48,7 @@ public AtmosAlertsComputerWindow(AtmosAlertsComputerBoundUserInterface userInter RobustXamlLoader.Load(this); _entManager = IoCManager.Resolve(); _spriteSystem = _entManager.System(); + _navMapSystem = _entManager.System(); // Pass the owner to nav map _owner = owner; @@ -179,6 +181,9 @@ public void UpdateUI(EntityCoordinates? consoleCoords, AtmosAlertsComputerEntry[ // Add tracked entities to the nav map foreach (var device in console.AtmosDevices) { + if (!device.NetEntity.Valid) + continue; + if (!NavMap.Visible) continue; @@ -270,6 +275,34 @@ public void UpdateUI(EntityCoordinates? consoleCoords, AtmosAlertsComputerEntry[ else MasterTabContainer.SetTabTitle(0, Loc.GetString("atmos-alerts-window-tab-alerts", ("value", activeAlarmCount))); + // Update sensor regions + NavMap.RegionOverlays.Clear(); + var prioritizedRegionOverlays = new Dictionary(); + + if (_owner != null && + _entManager.TryGetComponent(_owner, out var xform) && + _entManager.TryGetComponent(xform.GridUid, out var navMap)) + { + var regionOverlays = _navMapSystem.GetNavMapRegionOverlays(_owner.Value, navMap, AtmosAlertsComputerUiKey.Key); + + foreach (var (regionOwner, regionOverlay) in regionOverlays) + { + var alarmState = GetAlarmState(regionOwner); + + if (!TryGetSensorRegionColor(regionOwner, alarmState, out var regionColor)) + continue; + + regionOverlay.Color = regionColor.Value; + + var priority = (_trackedEntity == regionOwner) ? 999 : (int)alarmState; + prioritizedRegionOverlays.Add(regionOverlay, priority); + } + + // Sort overlays according to their priority + var sortedOverlays = prioritizedRegionOverlays.OrderBy(x => x.Value).Select(x => x.Key).ToList(); + NavMap.RegionOverlays = sortedOverlays; + } + // Auto-scroll re-enable if (_autoScrollAwaitsUpdate) { @@ -298,6 +331,24 @@ private void AddTrackedEntityToNavMap(AtmosAlertsDeviceNavMapData metaData, Atmo NavMap.TrackedEntities[metaData.NetEntity] = blip; } + private bool TryGetSensorRegionColor(NetEntity regionOwner, AtmosAlarmType alarmState, [NotNullWhen(true)] out Color? color) + { + color = null; + + var blip = GetBlipTexture(alarmState); + + if (blip == null) + return false; + + // Color the region based on alarm state and entity tracking + color = blip.Value.Item2 * new Color(154, 154, 154); + + if (_trackedEntity != null && _trackedEntity != regionOwner) + color *= Color.DimGray; + + return true; + } + private void UpdateUIEntry(AtmosAlertsComputerEntry entry, int index, Control table, AtmosAlertsComputerComponent console, AtmosAlertsFocusDeviceData? focusData = null) { // Make new UI entry if required diff --git a/Content.Client/Pinpointer/NavMapSystem.Regions.cs b/Content.Client/Pinpointer/NavMapSystem.Regions.cs new file mode 100644 index 00000000000..4cc775418ec --- /dev/null +++ b/Content.Client/Pinpointer/NavMapSystem.Regions.cs @@ -0,0 +1,303 @@ +using Content.Shared.Atmos; +using Content.Shared.Pinpointer; +using System.Linq; + +namespace Content.Client.Pinpointer; + +public sealed partial class NavMapSystem +{ + private (AtmosDirection, Vector2i, AtmosDirection)[] _regionPropagationTable = + { + (AtmosDirection.East, new Vector2i(1, 0), AtmosDirection.West), + (AtmosDirection.West, new Vector2i(-1, 0), AtmosDirection.East), + (AtmosDirection.North, new Vector2i(0, 1), AtmosDirection.South), + (AtmosDirection.South, new Vector2i(0, -1), AtmosDirection.North), + }; + + public override void Update(float frameTime) + { + // To prevent compute spikes, only one region is flood filled per frame + var query = AllEntityQuery(); + + while (query.MoveNext(out var ent, out var entNavMapRegions)) + FloodFillNextEnqueuedRegion(ent, entNavMapRegions); + } + + private void FloodFillNextEnqueuedRegion(EntityUid uid, NavMapComponent component) + { + if (!component.QueuedRegionsToFlood.Any()) + return; + + var regionOwner = component.QueuedRegionsToFlood.Dequeue(); + + // If the region is no longer valid, flood the next one in the queue + if (!component.RegionProperties.TryGetValue(regionOwner, out var regionProperties) || + !regionProperties.Seeds.Any()) + { + FloodFillNextEnqueuedRegion(uid, component); + return; + } + + // Flood fill the region, using the region seeds as starting points + var (floodedTiles, floodedChunks) = FloodFillRegion(uid, component, regionProperties); + + // Combine the flooded tiles into larger rectangles + var gridCoords = GetMergedRegionTiles(floodedTiles); + + // Create and assign the new region overlay + var regionOverlay = new NavMapRegionOverlay(regionProperties.UiKey, gridCoords) + { + Color = regionProperties.Color + }; + + component.RegionOverlays[regionOwner] = regionOverlay; + + // To reduce unnecessary future flood fills, we will track which chunks have been flooded by a region owner + + // First remove an old assignments + if (component.RegionOwnerToChunkTable.TryGetValue(regionOwner, out var oldChunks)) + { + foreach (var chunk in oldChunks) + { + if (component.ChunkToRegionOwnerTable.TryGetValue(chunk, out var oldOwners)) + { + oldOwners.Remove(regionOwner); + component.ChunkToRegionOwnerTable[chunk] = oldOwners; + } + } + } + + // Now update with the new assignments + component.RegionOwnerToChunkTable[regionOwner] = floodedChunks; + + foreach (var chunk in floodedChunks) + { + if (!component.ChunkToRegionOwnerTable.TryGetValue(chunk, out var owners)) + owners = new(); + + owners.Add(regionOwner); + component.ChunkToRegionOwnerTable[chunk] = owners; + } + } + + private (HashSet, HashSet) FloodFillRegion(EntityUid uid, NavMapComponent component, NavMapRegionProperties regionProperties) + { + if (!regionProperties.Seeds.Any()) + return (new(), new()); + + var visitedChunks = new HashSet(); + var visitedTiles = new HashSet(); + var tilesToVisit = new Stack(); + + foreach (var regionSeed in regionProperties.Seeds) + { + tilesToVisit.Push(regionSeed); + + while (tilesToVisit.Count > 0) + { + // If the max region area is hit, exit + if (visitedTiles.Count > regionProperties.MaxArea) + return (new(), new()); + + // Pop the top tile from the stack + var current = tilesToVisit.Pop(); + + // If the current tile position has already been visited, + // or is too far away from the seed, continue + if ((regionSeed - current).Length > regionProperties.MaxRadius) + continue; + + if (visitedTiles.Contains(current)) + continue; + + // Determine the tile's chunk index + var chunkOrigin = SharedMapSystem.GetChunkIndices(current, ChunkSize); + var relative = SharedMapSystem.GetChunkRelative(current, ChunkSize); + var idx = GetTileIndex(relative); + + // Extract the tile data + if (!component.Chunks.TryGetValue(chunkOrigin, out var chunk)) + continue; + + var flag = chunk.TileData[idx]; + + // If the current tile is entirely occupied, continue + if ((FloorMask & flag) == 0) + continue; + + if ((WallMask & flag) == WallMask) + continue; + + if ((AirlockMask & flag) == AirlockMask) + continue; + + // Otherwise the tile can be added to this region + visitedTiles.Add(current); + visitedChunks.Add(chunkOrigin); + + // Determine if we can propagate the region into its cardinally adjacent neighbors + // To propagate to a neighbor, movement into the neighbors closest edge must not be + // blocked, and vice versa + + foreach (var (direction, tileOffset, reverseDirection) in _regionPropagationTable) + { + if (!RegionCanPropagateInDirection(chunk, current, direction)) + continue; + + var neighbor = current + tileOffset; + var neighborOrigin = SharedMapSystem.GetChunkIndices(neighbor, ChunkSize); + + if (!component.Chunks.TryGetValue(neighborOrigin, out var neighborChunk)) + continue; + + visitedChunks.Add(neighborOrigin); + + if (!RegionCanPropagateInDirection(neighborChunk, neighbor, reverseDirection)) + continue; + + tilesToVisit.Push(neighbor); + } + } + } + + return (visitedTiles, visitedChunks); + } + + private bool RegionCanPropagateInDirection(NavMapChunk chunk, Vector2i tile, AtmosDirection direction) + { + var relative = SharedMapSystem.GetChunkRelative(tile, ChunkSize); + var idx = GetTileIndex(relative); + var flag = chunk.TileData[idx]; + + if ((FloorMask & flag) == 0) + return false; + + var directionMask = 1 << (int)direction; + var wallMask = (int)direction << (int)NavMapChunkType.Wall; + var airlockMask = (int)direction << (int)NavMapChunkType.Airlock; + + if ((wallMask & flag) > 0) + return false; + + if ((airlockMask & flag) > 0) + return false; + + return true; + } + + private List<(Vector2i, Vector2i)> GetMergedRegionTiles(HashSet tiles) + { + if (!tiles.Any()) + return new(); + + var x = tiles.Select(t => t.X); + var minX = x.Min(); + var maxX = x.Max(); + + var y = tiles.Select(t => t.Y); + var minY = y.Min(); + var maxY = y.Max(); + + var matrix = new int[maxX - minX + 1, maxY - minY + 1]; + + foreach (var tile in tiles) + { + var a = tile.X - minX; + var b = tile.Y - minY; + + matrix[a, b] = 1; + } + + return GetMergedRegionTiles(matrix, new Vector2i(minX, minY)); + } + + private List<(Vector2i, Vector2i)> GetMergedRegionTiles(int[,] matrix, Vector2i offset) + { + var output = new List<(Vector2i, Vector2i)>(); + + var rows = matrix.GetLength(0); + var cols = matrix.GetLength(1); + + var dp = new int[rows, cols]; + var coords = (new Vector2i(), new Vector2i()); + var maxArea = 0; + + var count = 0; + + while (!IsArrayEmpty(matrix)) + { + count++; + + if (count > rows * cols) + break; + + // Clear old values + dp = new int[rows, cols]; + coords = (new Vector2i(), new Vector2i()); + maxArea = 0; + + // Initialize the first row of dp + for (int j = 0; j < cols; j++) + { + dp[0, j] = matrix[0, j]; + } + + // Calculate dp values for remaining rows + for (int i = 1; i < rows; i++) + { + for (int j = 0; j < cols; j++) + dp[i, j] = matrix[i, j] == 1 ? dp[i - 1, j] + 1 : 0; + } + + // Find the largest rectangular area seeded for each position in the matrix + for (int i = 0; i < rows; i++) + { + for (int j = 0; j < cols; j++) + { + int minWidth = dp[i, j]; + + for (int k = j; k >= 0; k--) + { + if (dp[i, k] <= 0) + break; + + minWidth = Math.Min(minWidth, dp[i, k]); + var currArea = Math.Max(maxArea, minWidth * (j - k + 1)); + + if (currArea > maxArea) + { + maxArea = currArea; + coords = (new Vector2i(i - minWidth + 1, k), new Vector2i(i, j)); + } + } + } + } + + // Save the recorded rectangle vertices + output.Add((coords.Item1 + offset, coords.Item2 + offset)); + + // Removed the tiles covered by the rectangle from matrix + for (int i = coords.Item1.X; i <= coords.Item2.X; i++) + { + for (int j = coords.Item1.Y; j <= coords.Item2.Y; j++) + matrix[i, j] = 0; + } + } + + return output; + } + + private bool IsArrayEmpty(int[,] matrix) + { + for (int i = 0; i < matrix.GetLength(0); i++) + { + for (int j = 0; j < matrix.GetLength(1); j++) + { + if (matrix[i, j] == 1) + return false; + } + } + + return true; + } +} diff --git a/Content.Client/Pinpointer/NavMapSystem.cs b/Content.Client/Pinpointer/NavMapSystem.cs index 9aeb792a429..47469d4ea79 100644 --- a/Content.Client/Pinpointer/NavMapSystem.cs +++ b/Content.Client/Pinpointer/NavMapSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Shared.Pinpointer; using Robust.Shared.GameStates; @@ -16,6 +17,7 @@ private void OnHandleState(EntityUid uid, NavMapComponent component, ref Compone { Dictionary modifiedChunks; Dictionary beacons; + Dictionary regions; switch (args.Current) { @@ -23,6 +25,8 @@ private void OnHandleState(EntityUid uid, NavMapComponent component, ref Compone { modifiedChunks = delta.ModifiedChunks; beacons = delta.Beacons; + regions = delta.Regions; + foreach (var index in component.Chunks.Keys) { if (!delta.AllChunks!.Contains(index)) @@ -35,6 +39,8 @@ private void OnHandleState(EntityUid uid, NavMapComponent component, ref Compone { modifiedChunks = state.Chunks; beacons = state.Beacons; + regions = state.Regions; + foreach (var index in component.Chunks.Keys) { if (!state.Chunks.ContainsKey(index)) @@ -47,13 +53,54 @@ private void OnHandleState(EntityUid uid, NavMapComponent component, ref Compone return; } + // Update region data and queue new regions for flooding + var prevRegionOwners = component.RegionProperties.Keys.ToList(); + var validRegionOwners = new List(); + + component.RegionProperties.Clear(); + + foreach (var (regionOwner, regionData) in regions) + { + if (!regionData.Seeds.Any()) + continue; + + component.RegionProperties[regionOwner] = regionData; + validRegionOwners.Add(regionOwner); + + if (component.RegionOverlays.ContainsKey(regionOwner)) + continue; + + if (component.QueuedRegionsToFlood.Contains(regionOwner)) + continue; + + component.QueuedRegionsToFlood.Enqueue(regionOwner); + } + + // Remove stale region owners + var regionOwnersToRemove = prevRegionOwners.Except(validRegionOwners); + + foreach (var regionOwnerRemoved in regionOwnersToRemove) + RemoveNavMapRegion(uid, component, regionOwnerRemoved); + + // Modify chunks foreach (var (origin, chunk) in modifiedChunks) { var newChunk = new NavMapChunk(origin); Array.Copy(chunk, newChunk.TileData, chunk.Length); component.Chunks[origin] = newChunk; + + // If the affected chunk intersects one or more regions, re-flood them + if (!component.ChunkToRegionOwnerTable.TryGetValue(origin, out var affectedOwners)) + continue; + + foreach (var affectedOwner in affectedOwners) + { + if (!component.QueuedRegionsToFlood.Contains(affectedOwner)) + component.QueuedRegionsToFlood.Enqueue(affectedOwner); + } } + // Refresh beacons component.Beacons.Clear(); foreach (var (nuid, beacon) in beacons) { diff --git a/Content.Client/Pinpointer/UI/NavMapControl.cs b/Content.Client/Pinpointer/UI/NavMapControl.cs index 413b41c36a6..90c2680c4a7 100644 --- a/Content.Client/Pinpointer/UI/NavMapControl.cs +++ b/Content.Client/Pinpointer/UI/NavMapControl.cs @@ -48,6 +48,7 @@ public partial class NavMapControl : MapGridControl public List<(Vector2, Vector2)> TileLines = new(); public List<(Vector2, Vector2)> TileRects = new(); public List<(Vector2[], Color)> TilePolygons = new(); + public List RegionOverlays = new(); // Default colors public Color WallColor = new(102, 217, 102); @@ -228,7 +229,7 @@ protected override void KeyBindUp(GUIBoundKeyEventArgs args) { if (!blip.Selectable) continue; - + var currentDistance = (_transformSystem.ToMapCoordinates(blip.Coordinates).Position - worldPosition).Length(); if (closestDistance < currentDistance || currentDistance * MinimapScale > MaxSelectableDistance) @@ -319,6 +320,22 @@ protected override void Draw(DrawingHandleScreen handle) } } + // Draw region overlays + if (_grid != null) + { + foreach (var regionOverlay in RegionOverlays) + { + foreach (var gridCoords in regionOverlay.GridCoords) + { + var positionTopLeft = ScalePosition(new Vector2(gridCoords.Item1.X, -gridCoords.Item1.Y) - new Vector2(offset.X, -offset.Y)); + var positionBottomRight = ScalePosition(new Vector2(gridCoords.Item2.X + _grid.TileSize, -gridCoords.Item2.Y - _grid.TileSize) - new Vector2(offset.X, -offset.Y)); + + var box = new UIBox2(positionTopLeft, positionBottomRight); + handle.DrawRect(box, regionOverlay.Color); + } + } + } + // Draw map lines if (TileLines.Any()) { diff --git a/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs index d9a475dbfb7..2d35ae59731 100644 --- a/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs +++ b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs @@ -1,15 +1,19 @@ using Content.Server.Atmos.Monitor.Components; using Content.Server.DeviceNetwork.Components; +using Content.Server.DeviceNetwork.Systems; +using Content.Server.Pinpointer; using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.Consoles; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Monitor.Components; +using Content.Shared.DeviceNetwork.Components; using Content.Shared.Pinpointer; +using Content.Shared.Tag; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; -using Robust.Shared.Player; +using Robust.Shared.Timing; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -21,6 +25,12 @@ public sealed class AtmosAlertsComputerSystem : SharedAtmosAlertsComputerSystem [Dependency] private readonly AirAlarmSystem _airAlarmSystem = default!; [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly TransformSystem _transformSystem = default!; + [Dependency] private readonly NavMapSystem _navMapSystem = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly DeviceListSystem _deviceListSystem = default!; private const float UpdateTime = 1.0f; @@ -38,6 +48,9 @@ public override void Initialize() // Grid events SubscribeLocalEvent(OnGridSplit); + + // Alarm events + SubscribeLocalEvent(OnDeviceTerminatingEvent); SubscribeLocalEvent(OnDeviceAnchorChanged); } @@ -81,6 +94,16 @@ private void OnGridSplit(ref GridSplitEvent args) } private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent component, AnchorStateChangedEvent args) + { + OnDeviceAdditionOrRemoval(uid, component, args.Anchored); + } + + private void OnDeviceTerminatingEvent(EntityUid uid, AtmosAlertsDeviceComponent component, ref EntityTerminatingEvent args) + { + OnDeviceAdditionOrRemoval(uid, component, false); + } + + private void OnDeviceAdditionOrRemoval(EntityUid uid, AtmosAlertsDeviceComponent component, bool isAdding) { var xform = Transform(uid); var gridUid = xform.GridUid; @@ -88,10 +111,13 @@ private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent com if (gridUid == null) return; - if (!TryGetAtmosDeviceNavMapData(uid, component, xform, gridUid.Value, out var data)) + if (!TryComp(xform.GridUid, out var navMap)) return; - var netEntity = EntityManager.GetNetEntity(uid); + if (!TryGetAtmosDeviceNavMapData(uid, component, xform, out var data)) + return; + + var netEntity = GetNetEntity(uid); var query = AllEntityQuery(); while (query.MoveNext(out var ent, out var entConsole, out var entXform)) @@ -99,11 +125,18 @@ private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent com if (gridUid != entXform.GridUid) continue; - if (args.Anchored) + if (isAdding) + { entConsole.AtmosDevices.Add(data.Value); + } - else if (!args.Anchored) + else + { entConsole.AtmosDevices.RemoveWhere(x => x.NetEntity == netEntity); + _navMapSystem.RemoveNavMapRegion(gridUid.Value, navMap, netEntity); + } + + Dirty(ent, entConsole); } } @@ -209,6 +242,12 @@ private List GetAlarmStateData(EntityUid gridUid, Atmo if (entDevice.Group != group) continue; + if (!TryComp(entXform.GridUid, out var mapGrid)) + continue; + + if (!TryComp(entXform.GridUid, out var navMap)) + continue; + // If emagged, change the alarm type to normal var alarmState = (entAtmosAlarmable.LastAlarmState == AtmosAlarmType.Emagged) ? AtmosAlarmType.Normal : entAtmosAlarmable.LastAlarmState; @@ -216,14 +255,45 @@ private List GetAlarmStateData(EntityUid gridUid, Atmo if (TryComp(ent, out var entAPCPower) && !entAPCPower.Powered) alarmState = AtmosAlarmType.Invalid; + // Create entry + var netEnt = GetNetEntity(ent); + var entry = new AtmosAlertsComputerEntry - (GetNetEntity(ent), + (netEnt, GetNetCoordinates(entXform.Coordinates), entDevice.Group, alarmState, MetaData(ent).EntityName, entDeviceNetwork.Address); + // Get the list of sensors attached to the alarm + var sensorList = TryComp(ent, out var entDeviceList) ? _deviceListSystem.GetDeviceList(ent, entDeviceList) : null; + + if (sensorList?.Any() == true) + { + var alarmRegionSeeds = new HashSet(); + + // If valid and anchored, use the position of sensors as seeds for the region + foreach (var (address, sensorEnt) in sensorList) + { + if (!sensorEnt.IsValid() || !HasComp(sensorEnt)) + continue; + + var sensorXform = Transform(sensorEnt); + + if (sensorXform.Anchored && sensorXform.GridUid == entXform.GridUid) + alarmRegionSeeds.Add(_mapSystem.CoordinatesToTile(entXform.GridUid.Value, mapGrid, _transformSystem.GetMapCoordinates(sensorEnt, sensorXform))); + } + + var regionProperties = new SharedNavMapSystem.NavMapRegionProperties(netEnt, AtmosAlertsComputerUiKey.Key, alarmRegionSeeds); + _navMapSystem.AddOrUpdateNavMapRegion(gridUid, navMap, netEnt, regionProperties); + } + + else + { + _navMapSystem.RemoveNavMapRegion(entXform.GridUid.Value, navMap, netEnt); + } + alarmStateData.Add(entry); } @@ -306,7 +376,10 @@ private HashSet GetAllAtmosDeviceNavMapData(EntityU var query = AllEntityQuery(); while (query.MoveNext(out var ent, out var entComponent, out var entXform)) { - if (TryGetAtmosDeviceNavMapData(ent, entComponent, entXform, gridUid, out var data)) + if (entXform.GridUid != gridUid) + continue; + + if (TryGetAtmosDeviceNavMapData(ent, entComponent, entXform, out var data)) atmosDeviceNavMapData.Add(data.Value); } @@ -317,14 +390,10 @@ private bool TryGetAtmosDeviceNavMapData (EntityUid uid, AtmosAlertsDeviceComponent component, TransformComponent xform, - EntityUid gridUid, [NotNullWhen(true)] out AtmosAlertsDeviceNavMapData? output) { output = null; - if (xform.GridUid != gridUid) - return false; - if (!xform.Anchored) return false; diff --git a/Content.Shared/Pinpointer/NavMapComponent.cs b/Content.Shared/Pinpointer/NavMapComponent.cs index d77169d32ed..b876cb20fe2 100644 --- a/Content.Shared/Pinpointer/NavMapComponent.cs +++ b/Content.Shared/Pinpointer/NavMapComponent.cs @@ -27,6 +27,50 @@ public sealed partial class NavMapComponent : Component /// [ViewVariables] public Dictionary Beacons = new(); + + /// + /// Describes the properties of a region on the station. + /// It is indexed by the entity assigned as the region owner. + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary RegionProperties = new(); + + /// + /// All flood filled regions, ready for display on a NavMapControl. + /// It is indexed by the entity assigned as the region owner. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary RegionOverlays = new(); + + /// + /// A queue of all region owners that are waiting their associated regions to be floodfilled. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Queue QueuedRegionsToFlood = new(); + + /// + /// A look up table to get a list of region owners associated with a flood filled chunk. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary> ChunkToRegionOwnerTable = new(); + + /// + /// A look up table to find flood filled chunks associated with a given region owner. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary> RegionOwnerToChunkTable = new(); } [Serializable, NetSerializable] @@ -51,10 +95,30 @@ public sealed class NavMapChunk(Vector2i origin) public GameTick LastUpdate; } +[Serializable, NetSerializable] +public sealed class NavMapRegionOverlay(Enum uiKey, List<(Vector2i, Vector2i)> gridCoords) +{ + /// + /// The key to the UI that will be displaying this region on its navmap + /// + public Enum UiKey = uiKey; + + /// + /// The local grid coordinates of the rectangles that make up the region + /// Item1 is the top left corner, Item2 is the bottom right corner + /// + public List<(Vector2i, Vector2i)> GridCoords = gridCoords; + + /// + /// Color of the region + /// + public Color Color = Color.White; +} + public enum NavMapChunkType : byte { // Values represent bit shift offsets when retrieving data in the tile array. - Invalid = byte.MaxValue, + Invalid = byte.MaxValue, Floor = 0, // I believe floors have directional information for diagonal tiles? Wall = SharedNavMapSystem.Directions, Airlock = 2 * SharedNavMapSystem.Directions, diff --git a/Content.Shared/Pinpointer/SharedNavMapSystem.cs b/Content.Shared/Pinpointer/SharedNavMapSystem.cs index 3ced5f3c9ed..37d60dec28a 100644 --- a/Content.Shared/Pinpointer/SharedNavMapSystem.cs +++ b/Content.Shared/Pinpointer/SharedNavMapSystem.cs @@ -3,10 +3,9 @@ using System.Runtime.CompilerServices; using Content.Shared.Tag; using Robust.Shared.GameStates; +using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Shared.Pinpointer; @@ -16,7 +15,7 @@ public abstract class SharedNavMapSystem : EntitySystem public const int Directions = 4; // Not directly tied to number of atmos directions public const int ChunkSize = 8; - public const int ArraySize = ChunkSize* ChunkSize; + public const int ArraySize = ChunkSize * ChunkSize; public const int AllDirMask = (1 << Directions) - 1; public const int AirlockMask = AllDirMask << (int) NavMapChunkType.Airlock; @@ -24,6 +23,7 @@ public abstract class SharedNavMapSystem : EntitySystem public const int FloorMask = AllDirMask << (int) NavMapChunkType.Floor; [Robust.Shared.IoC.Dependency] private readonly TagSystem _tagSystem = default!; + [Robust.Shared.IoC.Dependency] private readonly INetManager _net = default!; private static readonly ProtoId[] WallTags = {"Wall", "Window"}; private EntityQuery _doorQuery; @@ -57,7 +57,7 @@ public static Vector2i GetTileFromIndex(int index) public NavMapChunkType GetEntityType(EntityUid uid) { if (_doorQuery.HasComp(uid)) - return NavMapChunkType.Airlock; + return NavMapChunkType.Airlock; if (_tagSystem.HasAnyTag(uid, WallTags)) return NavMapChunkType.Wall; @@ -81,6 +81,57 @@ protected bool TryCreateNavMapBeaconData(EntityUid uid, NavMapBeaconComponent co return true; } + public void AddOrUpdateNavMapRegion(EntityUid uid, NavMapComponent component, NetEntity regionOwner, NavMapRegionProperties regionProperties) + { + // Check if a new region has been added or an existing one has been altered + var isDirty = !component.RegionProperties.TryGetValue(regionOwner, out var oldProperties) || oldProperties != regionProperties; + + if (isDirty) + { + component.RegionProperties[regionOwner] = regionProperties; + + if (_net.IsServer) + Dirty(uid, component); + } + } + + public void RemoveNavMapRegion(EntityUid uid, NavMapComponent component, NetEntity regionOwner) + { + bool regionOwnerRemoved = component.RegionProperties.Remove(regionOwner) | component.RegionOverlays.Remove(regionOwner); + + if (regionOwnerRemoved) + { + if (component.RegionOwnerToChunkTable.TryGetValue(regionOwner, out var affectedChunks)) + { + foreach (var affectedChunk in affectedChunks) + { + if (component.ChunkToRegionOwnerTable.TryGetValue(affectedChunk, out var regionOwners)) + regionOwners.Remove(regionOwner); + } + + component.RegionOwnerToChunkTable.Remove(regionOwner); + } + + if (_net.IsServer) + Dirty(uid, component); + } + } + + public Dictionary GetNavMapRegionOverlays(EntityUid uid, NavMapComponent component, Enum uiKey) + { + var regionOverlays = new Dictionary(); + + foreach (var (regionOwner, regionOverlay) in component.RegionOverlays) + { + if (!regionOverlay.UiKey.Equals(uiKey)) + continue; + + regionOverlays.Add(regionOwner, regionOverlay); + } + + return regionOverlays; + } + #region: Event handling private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentGetState args) @@ -97,7 +148,7 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG chunks.Add(origin, chunk.TileData); } - args.State = new NavMapState(chunks, component.Beacons); + args.State = new NavMapState(chunks, component.Beacons, component.RegionProperties); return; } @@ -110,7 +161,7 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG chunks.Add(origin, chunk.TileData); } - args.State = new NavMapDeltaState(chunks, component.Beacons, new(component.Chunks.Keys)); + args.State = new NavMapDeltaState(chunks, component.Beacons, component.RegionProperties, new(component.Chunks.Keys)); } #endregion @@ -120,22 +171,26 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG [Serializable, NetSerializable] protected sealed class NavMapState( Dictionary chunks, - Dictionary beacons) + Dictionary beacons, + Dictionary regions) : ComponentState { public Dictionary Chunks = chunks; public Dictionary Beacons = beacons; + public Dictionary Regions = regions; } [Serializable, NetSerializable] protected sealed class NavMapDeltaState( Dictionary modifiedChunks, Dictionary beacons, + Dictionary regions, HashSet allChunks) : ComponentState, IComponentDeltaState { public Dictionary ModifiedChunks = modifiedChunks; public Dictionary Beacons = beacons; + public Dictionary Regions = regions; public HashSet AllChunks = allChunks; public void ApplyToFullState(NavMapState state) @@ -159,11 +214,18 @@ public void ApplyToFullState(NavMapState state) { state.Beacons.Add(nuid, beacon); } + + state.Regions.Clear(); + foreach (var (nuid, region) in Regions) + { + state.Regions.Add(nuid, region); + } } public NavMapState CreateNewFullState(NavMapState state) { var chunks = new Dictionary(state.Chunks.Count); + foreach (var (index, data) in state.Chunks) { if (!AllChunks!.Contains(index)) @@ -177,12 +239,25 @@ public NavMapState CreateNewFullState(NavMapState state) Array.Copy(newData, data, ArraySize); } - return new NavMapState(chunks, new(Beacons)); + return new NavMapState(chunks, new(Beacons), new(Regions)); } } [Serializable, NetSerializable] public record struct NavMapBeacon(NetEntity NetEnt, Color Color, string Text, Vector2 Position); + [Serializable, NetSerializable] + public record struct NavMapRegionProperties(NetEntity Owner, Enum UiKey, HashSet Seeds) + { + // Server defined color for the region + public Color Color = Color.White; + + // The maximum number of tiles that can be assigned to this region + public int MaxArea = 625; + + // The maximum distance this region can propagate from its seeds + public int MaxRadius = 25; + } + #endregion } diff --git a/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl index a1640c5e9d5..470a8f86952 100644 --- a/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl +++ b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl @@ -25,7 +25,7 @@ atmos-alerts-window-warning-state = Warning atmos-alerts-window-danger-state = Danger! atmos-alerts-window-invalid-state = Inactive -atmos-alerts-window-no-active-alerts = [font size=16][color=white]No active alerts -[/color] [color={$color}]situation normal[/color][/font] +atmos-alerts-window-no-active-alerts = [font size=16][color=white]No active alerts -[/color] [color={$color}]Situation normal[/color][/font] atmos-alerts-window-no-data-available = No data available atmos-alerts-window-alerts-being-silenced = Silencing alerts... diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index bbff3cb43ec..a4cb78e67b7 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -115,6 +115,7 @@ color: Red enabled: false castShadows: false + - type: NavMapDoor - type: entity id: Firelock From e52a4a1ee9c51a8e7bb80c46b23152bb8dffc2dd Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 23 Oct 2024 12:51:06 +0000 Subject: [PATCH 154/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index abe3b2066f6..7b3850e5276 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: slarticodefast - changes: - - message: Fixed borgs, animals and aghosts being able to enter cryosleep. - type: Fix - id: 7050 - time: '2024-08-06T11:00:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30574 - author: Flareguy changes: - message: Most hats are now automatically displaced on vox to look more fitting. @@ -3925,3 +3918,12 @@ id: 7549 time: '2024-10-22T23:51:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/32849 +- author: chromiumboy + changes: + - message: The atmospheric alerts computer has been upgraded to visually indicate + the rooms of the station that are being monitored by its air and fire alarm + systems + type: Tweak + id: 7550 + time: '2024-10-23T12:49:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31910 From 6a533f2feacd7f610f401c41f65f70028f2c321e Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 02:36:25 +0100 Subject: [PATCH 155/173] :trollface: --- .../Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs | 7 +++++-- .../DeltaV/StationEvents/Events/ParadoxClonerRule.cs | 2 +- Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs | 2 +- Resources/Prototypes/Catalog/Fills/Lockers/heads.yml | 2 +- RobustToolbox | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs index 64068d6dbbf..5416f73e709 100644 --- a/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs +++ b/Content.Client/Atmos/Consoles/AtmosAlertsComputerWindow.xaml.cs @@ -340,11 +340,14 @@ private bool TryGetSensorRegionColor(NetEntity regionOwner, AtmosAlarmType alarm if (blip == null) return false; + // DeltaV: fix client until upstream does // Color the region based on alarm state and entity tracking - color = blip.Value.Item2 * new Color(154, 154, 154); + var output = blip.Value.Item2 * new Color(154, 154, 154); if (_trackedEntity != null && _trackedEntity != regionOwner) - color *= Color.DimGray; + output *= Color.DimGray; + + color = output; return true; } diff --git a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs index bc05225f3ea..27129e49e9a 100644 --- a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs +++ b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs @@ -67,7 +67,7 @@ private bool TrySpawnParadoxAnomaly(EntityUid spawner, [NotNullWhen(true)] out E mindContainer.Mind is {} mindId && !_role.MindIsAntagonist(mindId) && _role.MindHasRole(mindId, out var role) && - role?.Comp.JobPrototype is {} job) + role?.Comp1.JobPrototype is {} job) { candidates.Add((uid, mindId, job, profile)); } diff --git a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs index 1f7d7314d5b..bee14cc2778 100644 --- a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs +++ b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs @@ -107,7 +107,7 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU if (HasComp(args.Used)) return; - if (!TryComp(args.Used, out MetaDataComponent meta)) + if (!TryComp(args.Used, out MetaDataComponent? meta)) return; if (HasComp(args.User)) diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 2a0cb8e1208..5329c957b5a 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -273,7 +273,7 @@ children: - !type:NestedSelector # DeltaV tableId: LockerFillResearchDirectorDeltaV - - id: Intellicard + #- id: Intellicard # DeltaV: temporarily removed until AI is enabled - id: BoxEncryptionKeyScience - id: CircuitImprinterMachineCircuitboard - id: ClothingBeltUtilityFilled diff --git a/RobustToolbox b/RobustToolbox index d1d43f834b8..32bca7cfd41 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit d1d43f834b8845da698ef1898e8191ab159ee367 +Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af From a2281c892e5fed8ba58087f7ad7475748ca28abe Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 02:39:27 +0100 Subject: [PATCH 156/173] early merge of #32940 --- .../Chat/Managers/ChatSanitizationManager.cs | 2 +- Content.Server/Chat/Systems/ChatSystem.cs | 7 +++-- Content.Shared/Chat/SharedChatSystem.cs | 29 +++++++++++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Content.Server/Chat/Managers/ChatSanitizationManager.cs b/Content.Server/Chat/Managers/ChatSanitizationManager.cs index b0d28eae75c..0c78e45f86e 100644 --- a/Content.Server/Chat/Managers/ChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/ChatSanitizationManager.cs @@ -35,7 +35,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { ":D", "chatsan-smiles-widely" }, { "D:", "chatsan-frowns-deeply" }, { ":O", "chatsan-surprised" }, - { ":3", "chatsan-smiles" }, //nope + { ":3", "chatsan-smiles" }, { ":S", "chatsan-uncertain" }, { ":>", "chatsan-grins" }, { ":<", "chatsan-pouts" }, diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index a14bbd14d54..4c88e8cc5a4 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -756,8 +756,9 @@ private bool CanSendInGame(string message, IConsoleShell? shell = null, ICommonS // ReSharper disable once InconsistentNaming private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true) { - var newMessage = message.Trim(); - newMessage = SanitizeMessageReplaceWords(newMessage); + var newMessage = SanitizeMessageReplaceWords(message.Trim()); + + GetRadioKeycodePrefix(source, newMessage, out newMessage, out var prefix); // Sanitize it first as it might change the word order _sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr); @@ -769,7 +770,7 @@ private string SanitizeInGameICMessage(EntityUid source, string message, out str if (punctuate) newMessage = SanitizeMessagePeriod(newMessage); - return newMessage; + return prefix + newMessage; } private string SanitizeInGameOOCMessage(string message) diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index e5944ec30ae..414c26d6c7a 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -85,6 +85,35 @@ public SpeechVerbPrototype GetSpeechVerb(EntityUid source, string message, Speec return current ?? _prototypeManager.Index(speech.SpeechVerb); } + /// + /// Splits the input message into a radio prefix part and the rest to preserve it during sanitization. + /// + /// + /// This is primarily for the chat emote sanitizer, which can match against ":b" as an emote, which is a valid radio keycode. + /// + public void GetRadioKeycodePrefix(EntityUid source, + string input, + out string output, + out string prefix) + { + prefix = string.Empty; + output = input; + + // If the string is less than 2, then it's probably supposed to be an emote. + // No one is sending empty radio messages! + if (input.Length <= 2) + return; + + if (!(input.StartsWith(RadioChannelPrefix) || input.StartsWith(RadioChannelAltPrefix))) + return; + + if (!_keyCodes.TryGetValue(input[1], out _)) + return; + + prefix = input[..2]; + output = input[2..]; + } + /// /// Attempts to resolve radio prefixes in chat messages (e.g., remove a leading ":e" and resolve the requested /// channel. Returns true if a radio message was attempted, even if the channel is invalid. From 931b808276a908f875d2d192ca52b7076958cf2e Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 04:29:15 +0100 Subject: [PATCH 157/173] :trollface: --- Resources/Locale/en-US/deltav/job/job-names.ftl | 7 +++++++ .../Entities/Objects/Misc/identification_cards.yml | 8 ++++---- Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml | 6 +++--- .../Objects/Devices/Misc/identification_cards.yml | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Resources/Locale/en-US/deltav/job/job-names.ftl b/Resources/Locale/en-US/deltav/job/job-names.ftl index fd07a977912..c6202ecc7a0 100644 --- a/Resources/Locale/en-US/deltav/job/job-names.ftl +++ b/Resources/Locale/en-US/deltav/job/job-names.ftl @@ -26,24 +26,31 @@ job-alt-title-pizzaiolo = Pizzaiolo job-alt-title-practical-nurse = Practical Nurse job-alt-title-resident = Resident +job-alt-title-senior-physician = Senior Physician job-alt-title-clinician = Clinician job-alt-title-life-support = Life Support Technician job-alt-title-plasma-scientist = Plasma Scientist +job-alt-title-senior-engineer = Senior Engineer job-alt-title-electrician = Electrician job-alt-title-mechanic = Mechanic job-alt-title-deck-worker = Deck Worker job-alt-title-inventory-associate = Inventory Associate +job-alt-title-mail-carrier = Mail Carrier + job-alt-title-prospector = Prospector job-alt-title-excavator = Excavator +job-alt-title-senior-researcher = Senior Researcher job-alt-title-lab-technician = Lab Technician job-alt-title-xenoarch = Xenoarchaeologist job-alt-title-roboticist = Roboticist +job-alt-title-senior-officer = Senior Officer + job-alt-title-jester = Jester job-alt-title-fool = Fool diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 34fc96af2a7..54e721e94e5 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -758,7 +758,7 @@ - state: default - state: idseniorengineer - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Engineer + jobTitle: job-alt-title-senior-engineer jobIcon: JobIconSeniorEngineer - type: entity @@ -771,7 +771,7 @@ - state: default - state: idseniorresearcher - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Researcher + jobTitle: job-alt-title-senior-researcher jobIcon: JobIconSeniorResearcher - type: entity @@ -784,7 +784,7 @@ - state: default - state: idseniorphysician - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Physician + jobTitle: job-alt-title-senior-physician jobIcon: JobIconSeniorPhysician - type: entity @@ -797,7 +797,7 @@ - state: default - state: idseniorofficer - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Officer + jobTitle: job-alt-title-senior-officer = Senior Officer jobIcon: JobIconSeniorOfficer - type: entity diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index 78b5f0bc9ea..fc4e689084f 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -196,7 +196,7 @@ - !type:JobRequirementLoadoutEffect requirement: !type:DepartmentTimeRequirement - department: Cargo + department: Logistics # DeltaV: Logistics replaces Cargo time: 360000 # 100hr storage: back: @@ -256,7 +256,7 @@ - !type:JobRequirementLoadoutEffect requirement: !type:DepartmentTimeRequirement - department: Science + department: Epistemics # DeltaV: Epistemics replaces Science time: 360000 # 100hr storage: back: @@ -344,4 +344,4 @@ time: 360000 # 100hr storage: back: - - TowelColorMime \ No newline at end of file + - TowelColorMime diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml index d44f7c12083..39dcca3b7ac 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml @@ -48,7 +48,7 @@ - sprite: DeltaV/Objects/Misc/id_cards.rsi state: nyanomailcarrier - type: IdCard - jobTitle: Mail Carrier + jobTitle: job-alt-title-mail-carrier - type: entity parent: IDCardStandard From 3e3f971c1217f3fba4b01be2c87244c12bbd736b Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 09:09:54 +0100 Subject: [PATCH 158/173] :trollface: --- .../Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs | 7 ------- Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs | 2 -- .../Entities/Objects/Misc/identification_cards.yml | 2 +- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs index 1b7f0361434..63a06e9fdc8 100644 --- a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs @@ -1,23 +1,16 @@ using Content.Shared.Actions; using Content.Shared.Abilities.Psionics; -using Content.Shared.StatusEffect; using Content.Shared.Popups; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; -using Content.Shared.Mind; using Content.Shared.Actions.Events; namespace Content.Server.Abilities.Psionics { public sealed class MetapsionicPowerSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Initialize() { diff --git a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs index 1b5fd78a6d7..b753ffdd9ef 100644 --- a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs +++ b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs @@ -1,9 +1,7 @@ -using Content.Shared.FixedPoint; using Content.Shared.NPC.Prototypes; using Content.Shared.Whitelist; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; namespace Content.Shared.DeltaV.Recruiter; diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 54e721e94e5..802b5c79b58 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -797,7 +797,7 @@ - state: default - state: idseniorofficer - type: IdCard # DeltaV - Change senior job titles - jobTitle: job-alt-title-senior-officer = Senior Officer + jobTitle: job-alt-title-senior-officer jobIcon: JobIconSeniorOfficer - type: entity From cb4b4d636cdfb96a666d214b9e5b4497d5666a00 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 09:18:01 +0100 Subject: [PATCH 159/173] untroll centcomm --- Resources/Maps/DeltaV/centcomm.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Resources/Maps/DeltaV/centcomm.yml b/Resources/Maps/DeltaV/centcomm.yml index 0ed4baac959..6b6fead7565 100644 --- a/Resources/Maps/DeltaV/centcomm.yml +++ b/Resources/Maps/DeltaV/centcomm.yml @@ -28459,13 +28459,6 @@ entities: - type: Transform pos: -17.485325,-31.461966 parent: 1668 -- proto: NetworkConfigurator - entities: - - uid: 1461 - components: - - type: Transform - pos: 13.484868,-12.584605 - parent: 1668 - proto: NitrogenCanister entities: - uid: 5413 From 9f535fa813a8ba129c50b78eace85a4398ccb3a4 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Thu, 24 Oct 2024 09:25:29 +0100 Subject: [PATCH 160/173] dont spawn ghost locator --- .../Prototypes/Entities/Markers/Spawners/Random/maintenance.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index eeae42f2290..2ef16c6ec18 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -290,7 +290,7 @@ - id: ResearchDisk5000 - id: PetCarrier - id: DrinkMopwataBottleRandom - - id: SpectralLocator + #- id: SpectralLocator # DeltaV: no ghost locator - id: LidSalami weight: 0.05 From 76a59ccaa3f4879394d86663e89f24aa21b6ba10 Mon Sep 17 00:00:00 2001 From: hyphenationc <36931471+hyphenationc@users.noreply.github.com> Date: Wed, 23 Oct 2024 23:41:03 -0400 Subject: [PATCH 161/173] adds Meat Tag to FoodMeatSnake (#32965) --- Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 000f21db3f4..612f7da0472 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -525,6 +525,7 @@ - type: Tag tags: - Raw + - Meat - type: Sprite state: snake - type: SolutionContainerManager From 772ddf0a1e65d2dc67b3de734e8c6f58ae7335e9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 24 Oct 2024 03:42:11 +0000 Subject: [PATCH 162/173] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7b3850e5276..c4edb358ab6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Flareguy - changes: - - message: Most hats are now automatically displaced on vox to look more fitting. - type: Tweak - id: 7051 - time: '2024-08-06T13:12:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30699 - author: Errant changes: - message: Medical Mask sprite now works on vox. @@ -3927,3 +3920,10 @@ id: 7550 time: '2024-10-23T12:49:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31910 +- author: hyphenationc + changes: + - message: Snake meat is now properly considered Meat, so Lizards can eat it. + type: Fix + id: 7551 + time: '2024-10-24T03:41:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32965 From 7364ae43319375d0a5ad99e4145fbdc806b0b93b Mon Sep 17 00:00:00 2001 From: Thomas <87614336+Aeshus@users.noreply.github.com> Date: Thu, 24 Oct 2024 00:10:13 -0500 Subject: [PATCH 163/173] Fix Emote Chat Sanitizer (#32940) * Fix bug? * Fix :) * aaaa * AAAA!!! * comment * Nicer code * What's a pull requestWhat's a pull request? From dcc41988c4b15cf0df11b11cda3aca00bbc40ab0 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:41:23 +0200 Subject: [PATCH 164/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 6afd3f2ff3a..75248d6b8f5 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ps3moira - changes: - - message: Added Two New Round-End Sounds - type: Add - - message: Lobby Round-End Sounds - type: Remove - id: 118 - time: '2023-11-02T01:00:16.0000000+00:00' - author: leonardo-dabepis changes: - message: Technical Assistant now has a 4 hour playtime requirement. @@ -3682,3 +3674,11 @@ id: 617 time: '2024-10-23T07:04:54.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2034 +- author: deltanedas + changes: + - message: Merged the past few weeks changes from upstream, report any bugs related + to your character menu or objectives! + type: Add + id: 618 + time: '2024-10-24T08:41:03.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2036 From 7ab6ff12a29dd9326acc0ea5c70b8d375893f3f7 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:54:35 +0000 Subject: [PATCH 165/173] use LocalizedJobTitle in crew manifest (#2037) localize Co-authored-by: deltanedas <@deltanedas:kde.org> --- Content.Server/StationRecords/Systems/StationRecordsSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index 80c88917c02..e416effbdd8 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -159,7 +159,7 @@ public void CreateGeneralRecord( { Name = name, Age = age, - JobTitle = card?.Comp.JobTitle ?? jobPrototype.LocalizedName, // DeltaV + JobTitle = card?.Comp.LocalizedJobTitle ?? jobPrototype.LocalizedName, // DeltaV JobIcon = card?.Comp.JobIcon ?? jobPrototype.Icon, // DeltaV JobPrototype = jobId, Species = species, From 99d913b7ad3cf75fdd639e5901a5573e195eb30d Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Thu, 24 Oct 2024 14:54:54 +0200 Subject: [PATCH 166/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 75248d6b8f5..4de148484f5 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: leonardo-dabepis - changes: - - message: Technical Assistant now has a 4 hour playtime requirement. - type: Tweak - id: 119 - time: '2023-11-02T16:15:06.0000000+00:00' - author: Colin-Tel changes: - message: Updated Asterisk Station with various fixes, a slot for an atmos technician, @@ -3682,3 +3676,10 @@ id: 618 time: '2024-10-24T08:41:03.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2036 +- author: deltanedas + changes: + - message: Fixed the crew manifest. + type: Fix + id: 619 + time: '2024-10-24T12:54:35.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2037 From 2ed25cd0b022d433a86e7c68313302692cbaa078 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:19:45 +0000 Subject: [PATCH 167/173] make martyr module disarmable (#1960) * add dud self destruct item * add ExplosivePayload tag to explosive payload * make martyr module disarmable --------- Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../Specific/Robotics/borg_modules.yml | 14 +++++++++++ .../Objects/Weapons/Throwable/grenades.yml | 9 ++++++++ .../Graphs/utilities/borg_modules.yml | 23 +++++++++++++++++++ Resources/Prototypes/DeltaV/tags.yml | 3 +++ .../Entities/Objects/Devices/payload.yml | 4 ++++ .../Specific/Robotics/borg_modules.yml | 3 +++ 6 files changed, 56 insertions(+) create mode 100644 Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml create mode 100644 Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml index 9491cc6f329..ce70c9ac4c8 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -94,3 +94,17 @@ - type: ItemBorgModule items: - WeaponEnergyGunMiniRecharging + +# Syndicate modules +- type: entity + parent: BorgModuleMartyr + id: BorgModuleMartyrDud + name: unfinished martyr cyborg module + description: This unfinished module has a large space for an explosive payload, with "boom" helpfully scribbled under it. + components: + - type: ItemBorgModule + items: + - SelfDestructSeqDud + - type: Construction + node: start + defaultTarget: live diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml new file mode 100644 index 00000000000..418b1437082 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml @@ -0,0 +1,9 @@ +# if you try to use an unfinished martyr module it does next to no damage, but still has a good scare +- type: entity + parent: SelfDestructSeq + id: SelfDestructSeqDud + components: + - type: Explosive + totalIntensity: 1 + canCreateVacuum: false + deleteAfterExplosion: false # prevent borg having an empty hand diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml new file mode 100644 index 00000000000..deb3007a9e7 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml @@ -0,0 +1,23 @@ +- type: constructionGraph + id: BorgModuleMartyr + start: start + graph: + - node: start + entity: BorgModuleMartyrDud + edges: + - to: live + steps: + - tag: ExplosivePayload + name: explosive payload + - tool: Screwing + doAfter: 2 + - node: live + entity: BorgModuleMartyr + edges: + - to: start + completed: + - !type:GivePrototype + prototype: ExplosivePayload + steps: + - tool: Prying + doAfter: 2 diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index 90d59dcd26a..212ce68c672 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -48,6 +48,9 @@ - type: Tag id: DockShipyard +- type: Tag + id: ExplosivePayload + - type: Tag id: ForensicBeltEquip diff --git a/Resources/Prototypes/Entities/Objects/Devices/payload.yml b/Resources/Prototypes/Entities/Objects/Devices/payload.yml index 160f0c58e79..44a816a18fa 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/payload.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/payload.yml @@ -48,6 +48,10 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Tag # DeltaV: add ExplosivePayload tag to it + tags: + - ExplosivePayload + - Payload - type: entity name: chemical payload diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 722e9d0a1ee..2846410943d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -634,3 +634,6 @@ - SelfDestructSeq - type: BorgModuleIcon icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-martyr-module } + - type: Construction # DeltaV: construction for adding explosive payload to the dud version + graph: BorgModuleMartyr + node: live From 318aa4540b6ef58b5e9fed8958fe00685b9cea73 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:20:05 +0200 Subject: [PATCH 168/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 4de148484f5..9e1e4c60d4a 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Colin-Tel - changes: - - message: Updated Asterisk Station with various fixes, a slot for an atmos technician, - and a familiar parallax... - type: Tweak - id: 120 - time: '2023-11-02T20:38:51.0000000+00:00' - author: FluffiestFloof changes: - message: Removed starvation! @@ -3683,3 +3676,11 @@ id: 619 time: '2024-10-24T12:54:35.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2037 +- author: deltanedas + changes: + - message: Martyr cyborg modules can now be disarmed with a crowbar to yield its + explosive payload. + type: Tweak + id: 620 + time: '2024-10-24T15:19:46.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1960 From f1c3e2e853816e09f98b55af43e71c2a0327a8f2 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Thu, 24 Oct 2024 23:21:24 +0000 Subject: [PATCH 169/173] add robotics access and mapping stuff (#2028) * add Robotics access * add robotics doors for mapping * add blast doors * add lockable button * add it to AA * add access to mysta/scientist * add roboticist job spawn --------- Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../deltav/prototypes/access/accesses.ftl | 1 + Resources/Prototypes/Access/misc.yml | 1 + Resources/Prototypes/Access/research.yml | 1 + .../Prototypes/DeltaV/Access/epistemics.yml | 4 +++ Resources/Prototypes/DeltaV/Access/misc.yml | 1 + .../DeltaV/Entities/Markers/Spawners/jobs.yml | 13 +++++++++ .../Devices/Electronics/door_access.yml | 8 ++++++ .../Structures/Doors/Airlocks/access.yml | 27 ++++++++++++++++++ .../Structures/Doors/Airlocks/airlocks.yml | 11 +++++++ .../Structures/Doors/Shutter/blast_door.yml | 16 +++++++++++ .../Structures/Doors/Windoors/windoor.yml | 9 ++++++ .../Entities/Structures/Wallmounts/switch.yml | 7 +++++ .../Objects/Tools/access_configurator.yml | 1 + .../Roles/Jobs/Science/research_director.yml | 1 + .../Roles/Jobs/Science/scientist.yml | 2 ++ .../DeltaV/Markers/jobs.rsi/meta.json | 5 +++- .../DeltaV/Markers/jobs.rsi/roboticist.png | Bin 0 -> 1457 bytes 17 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml create mode 100644 Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png diff --git a/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl b/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl index 07a6659b05b..abf10217cb0 100644 --- a/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl +++ b/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl @@ -5,3 +5,4 @@ id-card-access-level-prosecutor = Prosecutor id-card-access-level-clerk = Clerk id-card-access-level-justice = Justice id-card-access-level-corpsman = Corpsman +id-card-access-level-robotics = Robotics diff --git a/Resources/Prototypes/Access/misc.yml b/Resources/Prototypes/Access/misc.yml index 417d2cdb028..4617797bb51 100644 --- a/Resources/Prototypes/Access/misc.yml +++ b/Resources/Prototypes/Access/misc.yml @@ -49,3 +49,4 @@ - Prosecutor # DeltaV - Add Prosecutor access - Clerk # DeltaV - Add Clerk access - Corpsman # DeltaV - Add Corpsman access + - Robotics # DeltaV: Robotics access diff --git a/Resources/Prototypes/Access/research.yml b/Resources/Prototypes/Access/research.yml index f0de2c93db4..70785ce89a2 100644 --- a/Resources/Prototypes/Access/research.yml +++ b/Resources/Prototypes/Access/research.yml @@ -12,3 +12,4 @@ - ResearchDirector - Research - Mantis # DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml + - Robotics # DeltaV: Robotics access diff --git a/Resources/Prototypes/DeltaV/Access/epistemics.yml b/Resources/Prototypes/DeltaV/Access/epistemics.yml index 8ccee35e709..2803ccdbaa3 100644 --- a/Resources/Prototypes/DeltaV/Access/epistemics.yml +++ b/Resources/Prototypes/DeltaV/Access/epistemics.yml @@ -1,3 +1,7 @@ - type: accessLevel id: Mantis name: id-card-access-level-mantis # Custom access level for the Mantis so they can have their own locker and maybe doors + +- type: accessLevel + id: Robotics + name: id-card-access-level-robotics diff --git a/Resources/Prototypes/DeltaV/Access/misc.yml b/Resources/Prototypes/DeltaV/Access/misc.yml index 495e4cb456d..364b1ab4c2d 100644 --- a/Resources/Prototypes/DeltaV/Access/misc.yml +++ b/Resources/Prototypes/DeltaV/Access/misc.yml @@ -24,6 +24,7 @@ - Salvage - Cargo - Research + - Robotics # would be silly if they couldn't go to robo - Service - Maintenance - External diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml index 4f671e14b28..e5d36ce9fdd 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml @@ -79,3 +79,16 @@ state: security - sprite: DeltaV/Mobs/Silicon/chassis.rsi state: security_e + +- type: entity + parent: SpawnPointJobBase + id: SpawnPointRoboticist + name: roboticist + components: + - type: SpawnPoint + job_id: Scientist # TODO: change to Roboticist after merged + - type: Sprite + layers: + - state: green + - sprite: DeltaV/Markers/jobs.rsi + state: roboticist diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml index ce4e63e30fb..6f7450cc8f5 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml @@ -125,3 +125,11 @@ components: - type: AccessReader access: [["Clerk"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsRobotics + suffix: Robotics, Locked + components: + - type: AccessReader + access: [["Research"]] # Uses research access until the job is added diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml index 753f7cec457..d07778081e9 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml @@ -154,6 +154,15 @@ - type: GridFill path: /Maps/Shuttles/DeltaV/sub_escape_pod.yml +- type: entity + parent: AirlockRobotics + id: AirlockRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + #Add airlocks from upstream roles - type: entity parent: AirlockServiceLocked @@ -360,6 +369,15 @@ containers: board: [ DoorElectronicsPsychologist ] +- type: entity + parent: AirlockRoboticsGlass + id: AirlockRoboticsGlassLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + # Maintenance Hatches - type: entity parent: AirlockMaintRnDLocked @@ -471,6 +489,15 @@ containers: board: [ DoorElectronicsSecurityLawyer ] +- type: entity + parent: AirlockMaintRnDLocked + id: AirlockMaintRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + # Command-locked External airlocks. These don't exist upstream for some reason. - type: entity parent: AirlockExternal diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml index 93a8cec851a..12ec20ec951 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -8,6 +8,12 @@ - type: PaintableAirlock department: Justice +- type: entity + parent: AirlockScience + id: AirlockRobotics + suffix: Robotics + # TODO: make a sprite for it + # Glass - type: entity @@ -20,3 +26,8 @@ - type: PaintableAirlock department: Justice +- type: entity + parent: AirlockScienceGlass + id: AirlockRoboticsGlass + suffix: Robotics + # TODO: make a sprite for it diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml index 30f718cf42b..c6046ec68ac 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml @@ -109,3 +109,19 @@ components: - type: AccessReader access: [["Command"], ["Armory"]] + +- type: entity + parent: BlastDoor + id: BlastDoorUnlinkedRobotics + suffix: Robotics + components: + - type: AccessReader + access: [["Robotics"]] + +- type: entity + parent: BlastDoorOpen + id: BlastDoorUnlinkedRoboticsOpen + suffix: Open, Robotics + components: + - type: AccessReader + access: [["Robotics"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml index d770d620c68..3a144cdc202 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml @@ -79,6 +79,15 @@ containers: board: [ DoorElectronicsMantis ] +- type: entity + parent: WindoorSecure + id: WindoorSecureRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + #Add windoors from upstream roles - type: entity parent: WindoorSecure diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml new file mode 100644 index 00000000000..adb5f1f5b71 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml @@ -0,0 +1,7 @@ +- type: entity + parent: LockableButton + suffix: Robotics + id: LockableButtonRobotics + components: + - type: AccessReader + access: [["Robotics"]] diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml index 7455bc81b7b..8a06868ee03 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml @@ -55,6 +55,7 @@ - Reporter #Delta V: Add Reporter Access - Research - ResearchDirector + - Robotics # DeltaV: Robotics access - Salvage - Security - Service diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index 9cbd6a3fde1..691778e65bf 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -23,6 +23,7 @@ - ResearchDirector - Mantis # DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml - Chapel # DeltaV - Chaplain is in Epistemics + - Robotics # DeltaV - Robotics access - External # DeltaV - AI satellite access - Cryogenics special: # Nyanotrasen - Mystagogue can use the Bible diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index 0f1ec0ec7a3..193f59bd571 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -14,6 +14,8 @@ access: - Research - Maintenance + extendedAccess: # DeltaV: Scientists get robotics access on lowpop + - Robotics - type: startingGear id: ScientistGear diff --git a/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json b/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json index a7534b9ee5b..73c7764df0a 100644 --- a/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json +++ b/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "made by Floofers", + "copyright": "made by Floofers. roboticist.png created by deltanedas (github) for DeltaV.", "size": { "x": 32, "y": 32 @@ -45,6 +45,9 @@ }, { "name": "mobster" + }, + { + "name": "roboticist" } ] } diff --git a/Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png b/Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png new file mode 100644 index 0000000000000000000000000000000000000000..4199496274fc5324c51f5556ed6d680c5846c54a GIT binary patch literal 1457 zcmV;i1y1^jP)m^;^85lyrvI8h6 zC_qR^2s%1Ckdu>xoF6u0Y+UBNU9$gdfJn%M`OZK5`h%AaBOo9^5~r4~$yD~Yn|O?; z_hT-JyJSE#A@)C3d?6SN1|%mZZ$o?Y|8HZAY^7Nx_Wx*{2 z!p{e>Pxd0VKU;^atSr9znmroc-*S2buKv;qcj2;u=;&x6VV?>&uXN(Q=55lr*eCHh z3;h2-0}1=0Fx_t&{FMr5&s@g*$Y5B8Es}UdLKuckX5@XpRmfXj#pCga&ZF1yK3Tr22%DHLakO4A;MtB40#TeXA4k|T8s{wFlm~PB;GeN zip%f-6Gm}yF!(d@Ti)j4`)}VyMMVXV z!#QAZa8Tl@-mMweghK-~DRNafZ~7S7 z7K;UoyL+JtDyD}8Tc%b(i{}yh`Hwt)s*exi_CC$4WN4HU#Ouh!xX%DhGIsTH5;CDc z03RoDlgY&UE&em{$;p%~6O9NWS*%vV z%nA;H#QXdEd7m<{@#}K{{cJ$-G|v{q>nIBjGeGGNUKGehJz0q*P#Yf~FNvGYW}bo4 zWlONMu#k_@Va0Icw|k;&J_&cW>N%g&42T#TESk`1yD&K2`fAbfOU!@>5~o*>;*=3V zQpO0xN4$=R;SZRb12Si@{{J2?Oj%YtNJ z?CL34ToI9x5zUb@`1<<7!d}5y@S&O@!*K{@eSMf*S&4xG_P}lk;qf$2fPEf~6M_FyGegjkgBvXV{Wo8z`(U1H*WT;uV(bRsG*Efq2{GofN1pzCj3$C`EP>`ah& z?a7mvJ9jQ-`TL9U6ZhB5(9?t5++688Jw09Or>3Uz_RG3DJPiH?E2zfXN{b!w00000 LNkvXXu0mjf0x`Gc literal 0 HcmV?d00001 From ae963bab29f6d7a8ba32d818d24953d8433113a2 Mon Sep 17 00:00:00 2001 From: Solaris <63768197+Solaris7518@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:39:16 -0500 Subject: [PATCH 170/173] Solaris midi fix (#2041) * midi fix Signed-off-by: Solaris <63768197+Solaris7518@users.noreply.github.com> * Midi Fixer * I had triple check that this was the right file, sorry lads --------- Signed-off-by: Solaris <63768197+Solaris7518@users.noreply.github.com> --- .../Audio/MidiCustom/space-station-14.sf2 | Bin 1466112 -> 1043712 bytes .../Instruments/instruments_percussion.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Audio/MidiCustom/space-station-14.sf2 b/Resources/Audio/MidiCustom/space-station-14.sf2 index 54c6eb619633b5df214a0c4d2556b022c2c29aef..8dcfce94729b68ff3c11583d461784a9414462f8 100644 GIT binary patch delta 27046 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 delta 452149 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

    pw_Zxgnk~ZNvWF)7SdykXY-F;6^TJ?T6L0 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�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 Date: Fri, 25 Oct 2024 01:39:35 +0200 Subject: [PATCH 171/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 9e1e4c60d4a..671e55db145 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: FluffiestFloof - changes: - - message: Removed starvation! - type: Remove - id: 121 - time: '2023-11-05T19:24:51.0000000+00:00' - author: FluffiestFloof changes: - message: Cat Ears have been moved from the Syndicate Uplink into the AutoDrobe. @@ -3684,3 +3678,11 @@ id: 620 time: '2024-10-24T15:19:46.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/1960 +- author: Solaris7518 + changes: + - message: Fixed almost every midi being completely ruined by a recent change from + upstream. You're welcome, my fellow musicians. + type: Fix + id: 621 + time: '2024-10-24T23:39:16.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2041 From 1c46732b192ffec669e9740227dbf5bba7b90daf Mon Sep 17 00:00:00 2001 From: Milon Date: Fri, 25 Oct 2024 02:15:01 +0200 Subject: [PATCH 172/173] fix playtime formatting (#32974) (#2038) Fixed playtime formatting Co-authored-by: stalengd --- .../Info/PlaytimeStats/PlaytimeStatsEntry.cs | 3 ++- .../Info/PlaytimeStats/PlaytimeStatsWindow.cs | 3 +-- .../ContentLocalizationManager.cs | 21 +++++++++++++++++++ .../DepartmentTimeRequirement.cs | 3 ++- .../OverallPlaytimeRequirement.cs | 3 ++- .../JobRequirement/RoleTimeRequirement.cs | 3 ++- Resources/Locale/en-US/_lib.ftl | 3 +++ .../Locale/en-US/info/playtime-stats.ftl | 3 +-- .../Locale/en-US/job/role-requirements.ftl | 1 - 9 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs b/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs index 16e8f55a7e2..632ad8de4ac 100644 --- a/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs +++ b/Content.Client/Info/PlaytimeStats/PlaytimeStatsEntry.cs @@ -1,3 +1,4 @@ +using Content.Shared.Localizations; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; @@ -16,7 +17,7 @@ public PlaytimeStatsEntry(string role, TimeSpan playtime, StyleBox styleBox) RoleLabel.Text = role; Playtime = playtime; // store the TimeSpan value directly - PlaytimeLabel.Text = playtime.ToString(Loc.GetString("ui-playtime-time-format")); // convert to string for display + PlaytimeLabel.Text = ContentLocalizationManager.FormatPlaytime(playtime); // convert to string for display BackgroundColorPanel.PanelOverride = styleBox; } diff --git a/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs b/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs index 1a530d950f9..98241b2ccab 100644 --- a/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs +++ b/Content.Client/Info/PlaytimeStats/PlaytimeStatsWindow.cs @@ -104,8 +104,7 @@ private void PopulatePlaytimeData() { var overallPlaytime = _jobRequirementsManager.FetchOverallPlaytime(); - var formattedPlaytime = overallPlaytime.ToString(Loc.GetString("ui-playtime-time-format")); - OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", formattedPlaytime)); + OverallPlaytimeLabel.Text = Loc.GetString("ui-playtime-overall", ("time", overallPlaytime)); var rolePlaytimes = _jobRequirementsManager.FetchPlaytimeByRoles(); diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index ad8890ae0fd..e60ca74a37f 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -36,6 +36,7 @@ public void Initialize() _loc.AddFunction(culture, "LOC", FormatLoc); _loc.AddFunction(culture, "NATURALFIXED", FormatNaturalFixed); _loc.AddFunction(culture, "NATURALPERCENT", FormatNaturalPercent); + _loc.AddFunction(culture, "PLAYTIME", FormatPlaytime); /* @@ -141,6 +142,16 @@ public static string FormatDirection(Direction dir) return Loc.GetString($"zzzz-fmt-direction-{dir.ToString()}"); } + /// + /// Formats playtime as hours and minutes. + /// + public static string FormatPlaytime(TimeSpan time) + { + var hours = (int)time.TotalHours; + var minutes = time.Minutes; + return Loc.GetString($"zzzz-fmt-playtime", ("hours", hours), ("minutes", minutes)); + } + private static ILocValue FormatLoc(LocArgs args) { var id = ((LocValueString) args.Args[0]).Value; @@ -229,5 +240,15 @@ private static ILocValue FormatUnits(LocArgs args) return new LocValueString(res); } + + private static ILocValue FormatPlaytime(LocArgs args) + { + var time = TimeSpan.Zero; + if (args.Args is { Count: > 0 } && args.Args[0].Value is TimeSpan timeArg) + { + time = timeArg; + } + return new LocValueString(FormatPlaytime(time)); + } } } diff --git a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs index 34fb5259d6d..86a64d10989 100644 --- a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Preferences; using JetBrains.Annotations; using Robust.Shared.Prototypes; @@ -50,7 +51,7 @@ public override bool Check(IEntityManager entManager, var deptDiffSpan = Time - playtime; var deptDiff = deptDiffSpan.TotalMinutes; - var formattedDeptDiff = deptDiffSpan.ToString(Loc.GetString("role-timer-time-format")); + var formattedDeptDiff = ContentLocalizationManager.FormatPlaytime(deptDiffSpan); var nameDepartment = "role-timer-department-unknown"; if (protoManager.TryIndex(Department, out var departmentIndexed)) diff --git a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs index baeabab0f1a..d08c3176547 100644 --- a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using JetBrains.Annotations; @@ -28,7 +29,7 @@ public override bool Check(IEntityManager entManager, var overallTime = playTimes.GetValueOrDefault(PlayTimeTrackingShared.TrackerOverall); var overallDiffSpan = Time - overallTime; var overallDiff = overallDiffSpan.TotalMinutes; - var formattedOverallDiff = overallDiffSpan.ToString(Loc.GetString("role-timer-time-format")); + var formattedOverallDiff = ContentLocalizationManager.FormatPlaytime(overallDiffSpan); if (!Inverted) { diff --git a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs index 98c560e1383..6fd4c0b564b 100644 --- a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using Content.Shared.Roles.Jobs; @@ -37,7 +38,7 @@ public override bool Check(IEntityManager entManager, playTimes.TryGetValue(proto, out var roleTime); var roleDiffSpan = Time - roleTime; var roleDiff = roleDiffSpan.TotalMinutes; - var formattedRoleDiff = roleDiffSpan.ToString(Loc.GetString("role-timer-time-format")); + var formattedRoleDiff = ContentLocalizationManager.FormatPlaytime(roleDiffSpan); var departmentColor = Color.Yellow; if (entManager.EntitySysManager.TryGetEntitySystem(out SharedJobSystem? jobSystem)) diff --git a/Resources/Locale/en-US/_lib.ftl b/Resources/Locale/en-US/_lib.ftl index c901d0f461e..5c6f73af66f 100644 --- a/Resources/Locale/en-US/_lib.ftl +++ b/Resources/Locale/en-US/_lib.ftl @@ -31,3 +31,6 @@ zzzz-fmt-power-joules = { TOSTRING($divided, "F1") } { $places -> [4] TJ *[5] ??? } + +# Used internally by the PLAYTIME() function. +zzzz-fmt-playtime = {$hours}H {$minutes}M \ No newline at end of file diff --git a/Resources/Locale/en-US/info/playtime-stats.ftl b/Resources/Locale/en-US/info/playtime-stats.ftl index 85508c1d09c..b4925176a76 100644 --- a/Resources/Locale/en-US/info/playtime-stats.ftl +++ b/Resources/Locale/en-US/info/playtime-stats.ftl @@ -2,9 +2,8 @@ ui-playtime-stats-title = User Playtime Stats ui-playtime-overall-base = Overall Playtime: -ui-playtime-overall = Overall Playtime: {$time} +ui-playtime-overall = Overall Playtime: {PLAYTIME($time)} ui-playtime-first-time = First Time Playing ui-playtime-roles = Playtime per Role -ui-playtime-time-format = %h\H\ %m\M ui-playtime-header-role-type = Role ui-playtime-header-role-time = Time diff --git a/Resources/Locale/en-US/job/role-requirements.ftl b/Resources/Locale/en-US/job/role-requirements.ftl index 767aa614f9d..2b6af7b1d2e 100644 --- a/Resources/Locale/en-US/job/role-requirements.ftl +++ b/Resources/Locale/en-US/job/role-requirements.ftl @@ -4,7 +4,6 @@ role-timer-overall-insufficient = You require [color=yellow]{$time}[/color] more role-timer-overall-too-high = You require [color=yellow]{$time}[/color] less overall playtime to play this role. (Are you trying to play a trainee role?) role-timer-role-insufficient = You require [color=yellow]{$time}[/color] more playtime with [color={$departmentColor}]{$job}[/color] to play this role. role-timer-role-too-high = You require[color=yellow] {$time}[/color] less playtime with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) -role-timer-time-format = %h\H\ %m\M role-timer-age-too-old = Your character must be under the age of [color=yellow]{$age}[/color] to play this role. role-timer-age-too-young = Your character must be over the age of [color=yellow]{$age}[/color] to play this role. role-timer-whitelisted-species = Your character must be one of the following species to play this role: From eafd2782a52dedde54e1aa0ee0d36e2390b180f1 Mon Sep 17 00:00:00 2001 From: Delta-V bot <135767721+DeltaV-Bot@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:15:20 +0200 Subject: [PATCH 173/173] Automatic changelog update --- Resources/Changelog/DeltaVChangelog.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 671e55db145..4b051af5d1c 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,10 +1,4 @@ Entries: -- author: FluffiestFloof - changes: - - message: Cat Ears have been moved from the Syndicate Uplink into the AutoDrobe. - type: Tweak - id: 122 - time: '2023-11-06T14:39:49.0000000+00:00' - author: FluffiestFloof changes: - message: Removed the carp suit bundle from the syndicate uplink. @@ -3686,3 +3680,10 @@ id: 621 time: '2024-10-24T23:39:16.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/2041 +- author: MilonPL + changes: + - message: Fixed playtime stats and requirements not showing up correctly. + type: Fix + id: 622 + time: '2024-10-25T00:15:01.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2038