From 3c06b8757266562761bbe99edfd68380782a76d3 Mon Sep 17 00:00:00 2001 From: Morb <14136326+Morb0@users.noreply.github.com> Date: Fri, 7 Apr 2023 16:17:30 -0700 Subject: [PATCH] Use chat emotes for disease (#15134) * Use chat emote system for disease * Use chat emotes in prototypes * Fix sound path * Fix prototype ids * Update Content.Server/Disease/DiseaseSystem.cs Co-authored-by: Flipp Syder <76629141+vulppine@users.noreply.github.com> --------- Co-authored-by: Flipp Syder <76629141+vulppine@users.noreply.github.com> --- Content.Server/Disease/DiseaseSystem.cs | 14 ++--- .../Disease/Effects/DiseaseSnough.cs | 17 +++--- .../Assorted/UncontrollableSnoughComponent.cs | 13 ++--- .../Assorted/UncontrollableSnoughSystem.cs | 5 +- .../Disease/Events/AttemptSneezeCoughEvent.cs | 4 +- Resources/Audio/Effects/Diseases/license.txt | 8 --- .../Audio/Voice/Human/female_cough_1.ogg | Bin 0 -> 16792 bytes .../Audio/Voice/Human/female_cough_2.ogg | Bin 0 -> 17231 bytes .../Human/female_sneeze_1.ogg} | Bin .../Human/female_yawn_1.ogg} | Bin Resources/Audio/Voice/Human/license.txt | 9 ++++ .../Human/male_cough_1.ogg} | Bin .../Human/male_cough_2.ogg} | Bin .../Human/male_sneeze_1.ogg} | Bin .../yawn1.ogg => Voice/Human/male_yawn_1.ogg} | Bin .../Diseases => Voice/Human}/snore1.ogg | Bin .../Diseases => Voice/Human}/snore2.ogg | Bin .../Diseases => Voice/Human}/snore3.ogg | Bin Resources/Locale/en-US/disease/disease.ftl | 7 --- Resources/Prototypes/Diseases/infectious.yml | 49 +++++------------- .../Prototypes/Diseases/noninfectious.yml | 8 +-- Resources/Prototypes/Diseases/zombie.yml | 6 +-- .../Prototypes/SoundCollections/disease.yml | 38 +++++++++----- .../Prototypes/Traits/inconveniences.yml | 5 +- Resources/Prototypes/Voice/disease_emotes.yml | 45 ++++++++++++++++ .../Prototypes/Voice/speech_emote_sounds.yml | 32 ++++++++++++ 26 files changed, 150 insertions(+), 110 deletions(-) create mode 100644 Resources/Audio/Voice/Human/female_cough_1.ogg create mode 100644 Resources/Audio/Voice/Human/female_cough_2.ogg rename Resources/Audio/{Effects/Diseases/sneeze1.ogg => Voice/Human/female_sneeze_1.ogg} (100%) rename Resources/Audio/{Effects/Diseases/yawn2.ogg => Voice/Human/female_yawn_1.ogg} (100%) rename Resources/Audio/{Effects/Diseases/cough1.ogg => Voice/Human/male_cough_1.ogg} (100%) rename Resources/Audio/{Effects/Diseases/cough2.ogg => Voice/Human/male_cough_2.ogg} (100%) rename Resources/Audio/{Effects/Diseases/sneeze2.ogg => Voice/Human/male_sneeze_1.ogg} (100%) rename Resources/Audio/{Effects/Diseases/yawn1.ogg => Voice/Human/male_yawn_1.ogg} (100%) rename Resources/Audio/{Effects/Diseases => Voice/Human}/snore1.ogg (100%) rename Resources/Audio/{Effects/Diseases => Voice/Human}/snore2.ogg (100%) rename Resources/Audio/{Effects/Diseases => Voice/Human}/snore3.ogg (100%) create mode 100644 Resources/Prototypes/Voice/disease_emotes.yml diff --git a/Content.Server/Disease/DiseaseSystem.cs b/Content.Server/Disease/DiseaseSystem.cs index 93a1cab5a3..0366ee2e8a 100644 --- a/Content.Server/Disease/DiseaseSystem.cs +++ b/Content.Server/Disease/DiseaseSystem.cs @@ -32,7 +32,6 @@ namespace Content.Server.Disease /// public sealed class DiseaseSystem : EntitySystem { - [Dependency] private readonly AudioSystem _audioSystem = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly ISerializationManager _serializationManager = default!; [Dependency] private readonly IRobustRandom _random = default!; @@ -42,6 +41,7 @@ namespace Content.Server.Disease [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly InventorySystem _inventorySystem = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; public override void Initialize() { base.Initialize(); @@ -265,7 +265,7 @@ namespace Content.Server.Disease { if (TryComp(uid, out var carrier)) { - SneezeCough(uid, _random.Pick(carrier.Diseases), string.Empty, null); + SneezeCough(uid, _random.Pick(carrier.Diseases), string.Empty); } } @@ -418,21 +418,17 @@ namespace Content.Server.Disease /// and then tries to infect anyone in range /// if the snougher is not wearing a mask. /// - public bool SneezeCough(EntityUid uid, DiseasePrototype? disease, string snoughMessage, SoundSpecifier? snoughSound, bool airTransmit = true, TransformComponent? xform = null) + public bool SneezeCough(EntityUid uid, DiseasePrototype? disease, string emoteId, bool airTransmit = true, TransformComponent? xform = null) { if (!Resolve(uid, ref xform)) return false; if (_mobStateSystem.IsDead(uid)) return false; - var attemptSneezeCoughEvent = new AttemptSneezeCoughEvent(uid, snoughMessage, snoughSound); + var attemptSneezeCoughEvent = new AttemptSneezeCoughEvent(uid, emoteId); RaiseLocalEvent(uid, ref attemptSneezeCoughEvent); if (attemptSneezeCoughEvent.Cancelled) return false; - if (!string.IsNullOrEmpty(snoughMessage)) - _popupSystem.PopupEntity(Loc.GetString(snoughMessage, ("person", Identity.Entity(uid, EntityManager))), uid); - - if (snoughSound != null) - _audioSystem.PlayPvs(snoughSound, uid); + _chatSystem.TryEmoteWithChat(uid, emoteId); if (disease is not { Infectious: true } || !airTransmit) return true; diff --git a/Content.Server/Disease/Effects/DiseaseSnough.cs b/Content.Server/Disease/Effects/DiseaseSnough.cs index 957836df30..8ee12c18ba 100644 --- a/Content.Server/Disease/Effects/DiseaseSnough.cs +++ b/Content.Server/Disease/Effects/DiseaseSnough.cs @@ -1,6 +1,7 @@ +using Content.Shared.Chat.Prototypes; using Content.Shared.Disease; using JetBrains.Annotations; -using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Disease { @@ -12,16 +13,10 @@ namespace Content.Server.Disease public sealed class DiseaseSnough : DiseaseEffect { /// - /// Message to play when snoughing + /// Emote to play when snoughing /// - [DataField("snoughMessage")] - public string SnoughMessage = "disease-sneeze"; - - /// - /// Sound to play when snoughing - /// - [DataField("snoughSound")] - public SoundSpecifier? SnoughSound; + [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string EmoteId = String.Empty; /// /// Whether to spread the disease through the air @@ -31,7 +26,7 @@ namespace Content.Server.Disease public override void Effect(DiseaseEffectArgs args) { - EntitySystem.Get().SneezeCough(args.DiseasedEntity, args.Disease, SnoughMessage, SnoughSound, AirTransmit); + EntitySystem.Get().SneezeCough(args.DiseasedEntity, args.Disease, EmoteId, AirTransmit); } } } diff --git a/Content.Server/Traits/Assorted/UncontrollableSnoughComponent.cs b/Content.Server/Traits/Assorted/UncontrollableSnoughComponent.cs index bd36c6fa25..546af9bb51 100644 --- a/Content.Server/Traits/Assorted/UncontrollableSnoughComponent.cs +++ b/Content.Server/Traits/Assorted/UncontrollableSnoughComponent.cs @@ -1,4 +1,5 @@ -using Robust.Shared.Audio; +using Content.Shared.Chat.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Traits.Assorted; @@ -9,14 +10,10 @@ namespace Content.Server.Traits.Assorted; public sealed class UncontrollableSnoughComponent : Component { /// - /// Message to play when snoughing. + /// Emote to play when snoughing /// - [DataField("snoughMessage")] public string SnoughMessage = "disease-sneeze"; - - /// - /// Sound to play when snoughing. - /// - [DataField("snoughSound")] public SoundSpecifier? SnoughSound; + [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string EmoteId = String.Empty; /// /// The random time between incidents, (min, max). diff --git a/Content.Server/Traits/Assorted/UncontrollableSnoughSystem.cs b/Content.Server/Traits/Assorted/UncontrollableSnoughSystem.cs index 5797e219f2..3c69030993 100644 --- a/Content.Server/Traits/Assorted/UncontrollableSnoughSystem.cs +++ b/Content.Server/Traits/Assorted/UncontrollableSnoughSystem.cs @@ -27,7 +27,8 @@ public sealed class UncontrollableSnoughSystem : EntitySystem { base.Update(frameTime); - foreach (var snough in EntityQuery()) + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ent, out var snough)) { snough.NextIncidentTime -= frameTime; @@ -38,7 +39,7 @@ public sealed class UncontrollableSnoughSystem : EntitySystem snough.NextIncidentTime += _random.NextFloat(snough.TimeBetweenIncidents.X, snough.TimeBetweenIncidents.Y); - _diseaseSystem.SneezeCough(snough.Owner, null, snough.SnoughMessage, snough.SnoughSound, false); + _diseaseSystem.SneezeCough(ent, null, snough.EmoteId, false); } } } diff --git a/Content.Shared/Disease/Events/AttemptSneezeCoughEvent.cs b/Content.Shared/Disease/Events/AttemptSneezeCoughEvent.cs index 6a1d9816bf..cb2f99220c 100644 --- a/Content.Shared/Disease/Events/AttemptSneezeCoughEvent.cs +++ b/Content.Shared/Disease/Events/AttemptSneezeCoughEvent.cs @@ -1,5 +1,3 @@ -using Robust.Shared.Audio; - namespace Content.Shared.Disease.Events; /// @@ -7,4 +5,4 @@ namespace Content.Shared.Disease.Events; /// Set Cancelled to true on event handling to suppress the sneeze /// [ByRefEvent] -public record struct AttemptSneezeCoughEvent(EntityUid uid, string SnoughMessage, SoundSpecifier? SnoughSound, bool Cancelled = false); +public record struct AttemptSneezeCoughEvent(EntityUid Uid, string? EmoteId, bool Cancelled = false); diff --git a/Resources/Audio/Effects/Diseases/license.txt b/Resources/Audio/Effects/Diseases/license.txt index 16aa10dbd9..412660da57 100644 --- a/Resources/Audio/Effects/Diseases/license.txt +++ b/Resources/Audio/Effects/Diseases/license.txt @@ -1,11 +1,3 @@ -cough1.ogg taken from freesound (deleted user) -cough2.ogg taken from https://freesound.org/people/Harris85/sounds/208761/ -sneeze.ogg taken from https://freesound.org/people/sherby168/sounds/540771/ beepboop.ogg taken from https://freesound.org/people/Fidjo20/sounds/503526/ monkey1.ogg taken from https://freesound.org/people/TRAVELcandies/sounds/423396/ monkey2.ogg taken from https://freesound.org/people/Archeos/sounds/325549/ -sneeze2.ogg taken from https://freesound.org/people/InspectorJ/sounds/352177/ -vomiting.ogg taken from https://freesound.org/people/vikuserro/sounds/246308/ -yawn1.ogg taken from https://freesound.org/people/ckvoiceover/sounds/401338/ user ckvoiceover CC-3.0 -yawn2.ogg taken from https://freesound.org/people/Reitanna/sounds/252239/ user reitanna CC-0 -snore1, snore2, snore3.ogg taken from https://freesound.org/people/mattyharm/sounds/432995/ user mattyharm CC-0 diff --git a/Resources/Audio/Voice/Human/female_cough_1.ogg b/Resources/Audio/Voice/Human/female_cough_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3509dcb0acb9481444f285f2052b7b9eba27a678 GIT binary patch literal 16792 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

m3RY+1wlppk?YTs%QM0f=IY02bGesBity4BsHe z!R>(s#+|k@6c_nSY?fZF!Q|p|7m3BT#eLhkP%giAE*pAMkSH9cmE)kT(udDRq==2o z$_wF@MXX~Eg=G`frZ@CbRC>cuw!RH;G^3E+!_TDXv%9l-2q$3zO8nVim=?JrOHJP@BDNzdbaU65WXq+) zN9`k?Lnm7zOqWcr$e?kD53dzAt61C`YIt!rD$8efx(UiB@-V@e_dqVepEbI{!^zikFlkGWL#4a5a6${!$pcZD*_lI;N(8m!LzI&2 z?QUk^o2ynLyVmd&kAT&YSKxYK2T&39=`P5O##EdbX|OJn@YH!QRg+4z;-TX?eG1dm zN|^SDNF)s_3wLzmCrBiqZ(_yp(#VnF;U)qdyGOGe8_%!G?{9&--1;V_KYQX*>?o7s zPlm|NHZ3I!+t|yhk249c`K$zJ$ulz(yE$4dOpz`#Otnd{w3=isufwd^WPY3w5+g^% zYe5+@>Sgm`T9T|D1slqg4~pD}M>&avnGq|?5H@grHkpsoCTc43w}+8&K4@z4U|1m( zO5MPy4B>{L8a?qvk=d+65E35V+Za!P3h}F8iT>EBCbN!wlKeE)yw};GP&Ob>QEZgI z-QGk;TfKae6e&D_){z0jU5oZMANzB|r)am28Xfzrl!0h^)H7G-@rUd*RV;&GN0hXl z(=F2%3JaWOAvVoAyO9BlGcj4|8${^U9p5G(GRhC}2)lC(U0z4l2 zEXDNrXeZteP8(Lqsm-cuq$pb_cZhi;BQhLZr>m>>Ira~^pd!iQyhsJ^U~;FlbF8&~ zhLfytjO+%{hk!>F>ETh%?vyH8kR1iJ;bK-KS%=7AOLdBgbPZmd+T3u+GQ|!Yzam{X z==o5)JX2guT#f;87OpHXdF6q`au9j{{(sSW83P06(=fJ(!NK4(aWQQ#=2$I;)^M{R zrSjUX%4=yQyl@mLpWOq;u($V9*^?9*Il+{BDfhFoErjIhK_cR79UM@16 zH7rWyDmHS&N4isJj?)x|sk%y(F!1Q~t>id-UZTnL??Q~p8_ny^05DkPHZqt}FwDCO z=oB^MuQqwlxdXazAjCFw%w>`oDU6(NHKVFdvwBAtZUl15i*STCyVb-^j z;F3t#68XW*OiOl0p-?P(wEkG0L84FH`r40wUg_-B+fi`IQY7xK%(cx8y+c>Zvb54Z z3@WCzr0c7wAMSkyqry?uRxwioXqr_&%#J;at&&y^5(JLeorlH=2|r&A+{WOPL_au` znIHtn)|`^Z`>!-rU1zNm@>2% zCV-ibs>)BKQNnZ8EFEAGe#A|}5$8~r>0~E;xpH#+FM)ou4Gzc-XcTiynuRxsfD9` zoXuRTm#H@yt5)l-UeiPN)e&ExZ!)$rqh{Ugk%{d*W3Qwy?bb{?4q+~|bO#RWzYqW} z*`0@()K7H&^>A`muX0{U^rvIG01FEr!5@f|Dx}}=RWPj+a@gGEK%CPQjaO$s(^DLI zYFL*D#v8uP)r-g!-X z0h`?9TBASa_Rne`0=5}1G!@(4daS>f>%oqbr$^x!C8w&ElK z0R@8*><%}GqYfL_067q|^TMpc{TWmFR>`Rpeuwf%eL<>bklhpo$CcpPc%RZ;dr_-D zF=?~rP$#d2p@AQvrm<#j3JlXkQD9fnExN$`Jn@8=@@s!FZ-#37sWFIKbS;f4bYCqR z2rRGDY??pkEW&!GN7PV8#~Px=W;Eq{^o~CbRfwwev6FJ?^KUhGZpft`=?aHx<|Z#n zecE@F*{)F5yn$hd({}Y*st7Dzit>Dqy=Yo6iBZ`IWa#E{8GOzDh9>G|P6pPz>UQhu z5HRC6#YQOv;7ToevA0^*Q8ETPr#DI`U%z~|if`@>N2`{H4`QsrrBSR|URiT;2G&nK zE3%8`mWN_Fl=g}&g`a7YReX3+*>bJ0MO$$shw^#NtT*P^pPUn`_fD|{r!OEMI)t=( z?Ku0~J8pKdZuYf^-jGQo3_azemBZ%w;=4$-;`kP=L6=bBXR#wvj=8B^Is>PwX!jwd zE&M{GMIjbVk`aZXWX;vQfF6$W3)_~u(nJ0`>~WeaDJCMsa;7e7c2-Vo?$U|FVF%pb zge#xZGHT(RueqN@38$BJH)X!55kUx zZI+GB0vMe=0+uPs5d@Y4U7aF!b$sY)Z-$sq9jYQlrN^g{<$64kWpX_6iKXPUp%Gal z3omP9qGG0K>w(9&smhWyrYNW!l(^LZIDbRCnF7ACOo!Uub{8s=;^gK(9Ko4}Cp@5# zs+$Pz4o!Ro)%0xiBtAL|UBMd(9#PP-y`sBR*Q!u9>;i3k@VtGbkco~#qZ6EK3>^s@ z!TrO&e&xXL1&3%n_zn-Itp$gz6@jsxS}?ihj@G4nlT$+@-5p~~?RQ(cZmm9C!M0oP zf4yfby9zMx0M%~Umj2#cHtV4zcep^GH_B$gY@Ge&bGR#2BuyK*zA8^xPxuw}*kN5E zDZ5TR?9QtF9WlTmoQkoUTl1|6bQ;rwW&o5@~dK;8laQ>VqG8@O5)@OKX{o z=?!)gm$HKt%Whf1S=LJ06t&g}i^*V?eNOq#^qfphsGH%c7x**-X>WkBbNTswWoRVwn{%rO0zPo5D zk-+y!Q}Z)LCJzGYL((fCN80G0nB?M<&riQ<8mrMb)O4YYGO#~qki*F+=S9gOtXE5F z{l&VelDbgYHT+ngtVY&z>4$=} z(AOtK$E}p~P_%KsTdx$-9Cz(2Sd6>n-Fc;buqxj8!<`$i=j?BJZJb!~E04w!;$feA z?@(Xbo{KizH}LM&X7*?fcicy}VzhJc>(`#SoI8618hO)M=Q2k}qfq1LthITSy3N@O z#-g$65$mRvtn{+hvMjXtrQ8jY)RSY)P4CC`_tisoYiM87u8^h~$qh#%m`iFfeyWr+ z_(iR{8HnjZ`PkJVsIXW$Pn8<6!D>WCJYP<$fvqg>*Axp=HO$vHnC|6G^eOjIcbu&; zgy$fTmA9)zmyHg3a7p02m|lwwVEPLze_n+x#sS+C5~6(!#YB9NCPS-=#~v(QJgGUH z@-^ya7Gdn{1M2h)Ea@+SBmUL=QpeRH^7SM1^2|hI?iKEl2lcg@)&c}(bfLC(oIVPY z(B4+iPBoK=4t;}+iXIISpg(V%shH5TLBaei3Be|VJqA~V5Ijt!9QC+8FZuz|__N@y z&Csg;S4tHXN!mS@xtf?(y1M{(gsWc7k4)4h+A$7l;MEV>?Y{jf2D`I_`pEq8&Qq<= zp+^4@Ke(K(h%^`XIFu7*2|JHDdG*o72xe%)ofo%emRO%tS3VV*T*_PfsBTu5=33Ws zFPcxeWd&aiZ_IV;Z*ozt-vo{r56yReQ}8?&=9k5mD!e>ae#@7BNKsJ?q0}Yjq}!C+ zLOlUd&WO`djq?-sDI_OQ6cjLr6U0|&!8}HNO4R9{rk6OBRq8Z*a@3TLHLmkto!@5= z;d{E`bGy`n6rCm(!4`77kNLdoL1VULs5nBWA|*DlQ1N!L7X4#j1~bJn`_FX4dSULq zTOU?7-o91;e&xr~(p|?0m$5rCQ}@gVPQ!J-sJY%6^oVm$(0O`)pF_&+%*pRJgQi-G zO#LzB+*Gy2iW6VT#4q`0xJYylXs#YytL0V4yld;VP4=P(XhvHCOS<}$8K@=VzE)|g zUp)jNBiY5{?barhXdJ|cuQJwT zUTFAmhoAez3hwX~1L2O~4!L{!BUb0qGPwpFa@h?*o>pCTpL08_ATNYbD$OB|Ayn7z zw^bKD{By&Ihk3K#%kz@qx7m|7A7{M^c=XxeUh|P;J@iEn{&6`c*#l4fD&nKddZB|f zfzaXlo$AY$Kyeg)P^?zrs?DM>XQ$8DH*8eVDe!BwUI@oI+fR3>HCz~>?cImKJ~MI9 zc;?yN*zH0~PIh#*a)_Rw^iR=@r&`!ZM5wI2vtIA}Oh7=A5!qz_mFa1W2pJt`mN%O2 zEp$C+)&F3ex^vv3VnnE*x_ohTO1IbKF6(PMYvAswA204X=;F+$>x~?*UVNmlwszZm zdYHI>bC~>I=SJYCqJiZ%N=%E^r*# zYjkxM=_lr(6VHE|nReZtYyc^d5i@Car(cs>0~&7bSs!k=29$Z?G<(VmI;@u*%Y38+bwhd-0o=o zrm3QufP#qN+NiwJa#F(EKi=lBexekw;>m2g*#SGk^`9d_N*CMKmg2kr^bD@fUwv~0 z{$O@gY~hBo|K%B06x4c2x!R!VxLS_`;MNAC3YM6>A4agX&`|9BtXax1N(c&gjStH; z4|_>^L!z(ap)vz7UTyGfTCCe^grvFtiL|ENaf#Chi*pCh?vMM6sdNYuvr^!=?Nz`2 zv8*a`nbZ|GNBjO`=U=5pz5Z<6`Tf$#zuIn&xt?JX3C+g?&R@9Wjv~2qu4D}5B!?Y! zY-+7JdGSWs!nOpDNXp>C^ydd|el{_P{Vj9FuYzm-db}5?{we;&W%}c`@P8^7$}dm- zamB-E(~i;}_w%jP**{iBuJF^mx}CbXVl%QoW&V_fn!Fei0-V<~SyrMQX%>MEr%(x< zM{bOc8i*)-V6Q`D^bJA;49{^HyY3!*T82*XK^QH%-cal5NH%+4-9R=p^uihDkniWb zsdb9oZ!>+0w|G*$*}U5^?S@Sg@v7Gi@MAYBAa+E+Ghv|x zYu85F&BkU|ga9;tmvA~U)`U4(o~(fx4-RBx_7NWjbl(NXLPTPMJ>T8EAI5iFkKBqg+nY$=pfHp|XsrfIcKcuE=4rV)e-U z>9B0*b`lRk61T&{6DV551o0_+wu4!^6fox7HLS-lPPLFymr^5TR+@Ae3ftW@0+13THlbbNj{ch+!L?GRN=;Oxt$H<|hSmh-F!fce zOS8ymo}~{a15NC!MvG-SZHJ?xW5s0p&N5_=k{&rNq8_A!$?*j&93se9Nw zmJ_~G&POG{hz>!Gh8mh^NTxIA{S2nx_e2b&lOKe$sXpX_Fo6$~^;x*Qrp!QiQHOJB zZEdY#t{`B&ck_{UN6?oe9xij^M2O-n=ahA;`!K??NHN^m`gxb5KYt}fHq10sg+bP}Z;&G8$Invvuvxf9kG*wK<@lK{H znN)poYBD0dCz2CxW+^_kp~p>EsbF=(R;q}GNRj7yPQv8MLqO-$ATJ_{t(&K9kOMB} z*ry-`q9RMM_FkjVv!$>mG#_romQF{CbfF>?wH;MK(}~Da8= zj|SsX)ntf>XjS7FMu&7`IsjjQ1e-EOvG9%{AXc8mX;q;RFOpp2eR<>O7CjXC|(Aaz`2qi?kIZ z_^CFs#HnSBMk7M7W3M^0`et-o|M_OC+!P6uzzcbKXataN5`{eGYO79Rs1FYOG{3?gqV>eT`wUM}p4&xYdZGpgaPR_grARo{6+#E&h>)Ia*37RDJB@kTfYyq>yBAj6m|A ztAGM<^3cwNCLv-dDz-2_DnutBXHZ{4go7{?)O>j`UV~sy7Bx zJRTT6U;bG?ad`Axhq8kg%Bodk+g^81 znCiR&AvcjHJ6Yx5_(~ylopOF*GqLI5?zuuHTVYW_#*NKno4x=)?%OTpx<`sR%;njc z_Zp=LnZ5LIBkEf@y1>4%e7zE~5m4uPF+{R;d;!X*E-J(Ib-hX~LBZ5i`)K&v6hZs* z`=@H!E?EGeV#Kg{s zDoH4$WmjH)YOrB7KNjxgFqI#)U1Aa~HbomRO)VI~`FC(Ql4TKGSxR!bVPLC0FWF@( zvdPdc5BSeAMZm9BieJkVTl*#CHqHjiJ-t7*I6X5t(KWIZS>MnwHZa_Mf8>$;dEl63 zn_kxCPm8|WoTUbh&z<}J5Xgo@SnayWC;;ky#XocfbwmDDMNrMWRI1LgJ|9sTn22~6 za>GTSN3XZq$w=8P70`l{rz{$Q81)ENb|VcP-bc$+$I(RGV+`VA(w8|r)YIg5wUaB4 z>gtH69xl4i)z$4i@B8Y(gM3rvaPgo)PihIo3%l%FjFG@)S_=oQS=ZI_eb;ZgxvLr^ zn**nA2|z>QeRR>&;aG+XHFM@p&if(1oej`lg6zhN30;_B2U;c7X#-{NZy8yoyiSxz zE@d+&wd8*|ZSVX^{#$-$e$jY19r?m?$F=i8UVIL8MR zRNyLQB;k}S^#(tgawu8`F;FTeFW%Qn3>qAH4-=mfO`I-$n8t1&t(DWGzkUrYPMlRT z!Ipmy9bFj>yg`WcPg%)luqwFzN#pCWICqH=AR8&4peqx$m{k&i&5KA^a>-NkYBU=d zd{t;QK=qg3rsp039kEIB=k~o&mQb0l8r`H@Wjkd|+Vl-hy~EqX<>Z73YGK_mh)J96 z;k4+vHmM-g)0y~`ZNR09^Lj+(B~6*}$Zf*O40E;a76l-KJG)59b{E|A-xM1$jkrN3 z2xSUrZbs&dr?FLWt8C0UEjMi)dJJz|ov7ooR_kz0=ZR&P2+((YtVyd(HDdmt-{}CW zNc>KqbW~S_5#*z$lByW-)Fqs*RY=#zo1blSl%S*O(!*EMdp1`*j}P&xw@(77rh@9` z)OMHE(d;Mc4KN4I%uhtOvJo7+ic4drCy)B&7a6UhWK-KB6!q79{jtpxeTCD=JJi$O zZ;K6HkZ-aszS2y&0~EJ)Bo8h3yAl8VT;6!XSN~?CT;}zC8iLFsKbWvD z2-BvIe<_}QErx59dqv$IH%z`N1|tvqsBrujOrJSOz389zr3D#8ir6F7%*w0A`Scb> zyoLdDHh`jbHibA8~F`mGqITp4t#?H+S4r`8va&)w8SK$$Xftybdh zEh=nlUK87)Gr2YgAAFb$5yR{I#k%P?NN9u0-6_&I+ksx`SSBhRF5(vH?9wYP6Bl3V zxX3LRvZH4$cV}( z{WDqXiFY&;(%HHmE~8X-T%%3o!+SvJ2Z;3LeTRZX(5bp2bjQ|JZ&SBiQrc|oI4()P z;aT>bktETVYnAKLmii)l%qgew8M38C zsscO6JcWc3O$kQ%xouqmPu0~v<{=#D=!PHc2QJJ zqVWx?8k;;-a?3&(8C0ru$5JSUn>?iK#ZR&h><>EesygyUgs!g>4byEbs#=4WS9xBc zehCmkL||JpE#R?-Vr_c;Zr5L_y&2=gcvw=Hy1RJRC(BLixl*dX|LCNW3WLJtHB7bV z%a0Ur?W_uC@%KW8FNVG@2UHmTnnR+%5&w=s(?N}l;%lRk84;X=sD1aLK+Hm>UU_TS z8u|kQ$$Aj)qabTLQ;5FwgaEML*38-z|5J&WmLW}X;`}4Pn}yj&`PEftw~@0Q zp{kWCYEwQO7L`;<)^f5ud-RC=i)_+imo6vj6U)m+m6L#@%(g-MYe6A@OCL06Nf z0uCx{zBtcIs7D=5U{{dVXta7;aV5m^DWT}%)V%P+um7^SH!@O+05aTF>hd)c70fy~ za@rm_;-uUP9HYW5e1-xYWDifd1I5M#(bn3RW2_eg1!U_iL}X`M9uk;2rw(z^bp}!t z4z-Y-iT16OEgjBD68BRhGoEsCNz4%G@ekP|b~1w2Q!SirspIk+%KW^w$oEZSr5qJM z*PBUB2iKZVDh-0s1*txxxGBMidI?NFUpuYznw7rNk;{+_t9>b6r7N5XoWV71MpW;M z#m|2qwR`{g*<9PR^pmG|znoB?9VYa-e%$c8ccr>tvN4)lJk{o+ES$V{2f~9bC^o|7jZSF|yxyhIIx|+{F~_rBT9l)h zfD5r{eS@@Ke2r9Elx7D}eiq-LaX1>Dh|OY~-pf0(1E;@J#pZ<-hQ04wXE`f0!fqay9vB;(6((w1H26 zJm$T!cdbZAAwDAqU>HrT><9Q(%2Wt~S5+-`oa&!@3ZPAhH`IIik8u~dK(JPo`WRC| z{)5YhByh0pnzAKYj4Im}shxCe4R0cATPJGnUS@)o0y+p(;e}o++q2Cl} zv-El)23r*mw>{TVIHRBL@0KN(<%78&si0hV^*P$J!W%}eWic|a2Gx=DAckG%J-*rf z3bbayS4rsYBUruM(hKes`o|xdEMpR; zXvG?53wRc`XBDq`ZSF5vq392hUA{2Sx=D2-qgfb|I7OC(IyCKVl%wgGn!X|@$7l(4 zBBsV$+%$ySACj6p>w-x{Z`0RDZW^YGAFejIWsqD1#*>mNN!#8`gnfP6fm92)M-rc} z=hY_jYURNlH&s=dJ<3Mq7@KUE$qfV^mWi*`ld&s}%YJ6P9;t;C_TfmwwIfmKn}FK( zYHLo4bZ#7v)vMqtM~Gyruw-JHheGTngkw^;3_t!;`-jXl5e!XiC~vijD#d$A%M`; zUE9pRempZ@Zy+?Vpe{T*Q}3!X%&TZ}r$|wB;w5ZV#e4J|Or!LjG^WKwDJ*L(MJT*4 zc|HScSIRRfk`{E+8#l+wzg_y=b-t@}dv^?EB8cI>N=N~z;#DcEdM2dBVq@&zn> zh9x5@->t%LWizNS|8}mUoz7bLV7S_IdTC1uHP73eRB?^7h6!uj)7xmzG;Io|Fd75T zGqF)?+~M$c7-KIEEert`ZKnhfhXuT@rSXL=>xDX^9;=>mYLDB%tc+@{%yEGYgrWvq z+s}?H6h=hAwIv&}f&%)m6w9t&Y`=x(Ju|h&78-@x(Btd>g4h%2p_8ak6U6Fj!i7fp z2Ws4zrX2`At>NWUSZw;I`ezL0Mqi>4$p|9&Z{$qGYA--%Diw)p2$8Xw2H9 zgdOcqBRpRu>97pg?&UceYSx$dkHqW{Em|ytU%AYUo?i9Nkn9dv&am{On zjP~4oIKFD(ptWIPq_}T5&^0U5a5j=_FDF5a@HJgjz1w^oR@Io%RyOn>wE@b4&rM&a1?c7`cL=jsc{CDQIubboQ z16-Qu(ngOaW(X%5>o~Sb3gp@_g$J8>N)K|Tn03_GUQ8wbEXP#vaiYjb-JBA6L=Aj{{#}th`3b zadu|su!dS*j#H+5b*0SxkuC+!7pDt)T@G~KyKSQ;EhYFw-*G3X3!mYghh)XZjYrQu zleMP7t7{!nIDY)&u0)f{2VUS|n7?z|l?mI+U#mFgf~V0c@|)JN@$xijr`*&;Y_m~T z+%c6|1tZ?JO)Yx%`@P0mx{>Zy%c=)qn zkTT^h<&Ovd9D8)mqviS^Wm20%vc-Ga^xbL-wq^V|q&W5HWZLD!2c~D(7i>F>ih?e* z%=~p@^+*5u&P*`Mn|8Q+Ui)#`lELK@K^>kybCk)8XD(fiXI8YmTwH&5VuMyOQeSeZ zg2dgcPLVD2qpo&AP?L#bQO`?`ySZzwxC!*)JDR7MdSO=Iy=U?D3mdNr7%11EDVXf@ zBT}QxpvbWD%j3Hq9yx4$+V=db;Lk_Q5oelr7Lr&&R&loz)%U)-VSV*N$+xoIpT1xp z9o7eqsP*MM0AKn!|NJ<&+u3nLBjNs)1HHuH>-4>nD#G`Qf3$ z@WE5$7sD5hG@pLC#L6zd@gn`)5m@T#g8JyCdmE^b;kvPFm)xm^aTY?tNke(A4!@76 z3t57vxVF;Pb_wwKH1Nc^Tt#SQ{tl|xn457Rx<1x$nDsYANUf!_R8Z(f@>64hDnL*e zAa}ufDGx<1N|bBWYaQK_=QOi$cr3XfQS$+!m>HkocQ&hN!l|R(`JKlf7*-i8Gp82g!Jp68!10CF`TcU9yML zo^O!OfG+o_+`T~4!g4zu8U3VtJe3(3e0ZwBbKT%SZ*b*M1mkP%KtuqvodOv^{IX3=?D=PC6Jz>NY1?oYn|Q+Kh7i#>St<1^mk;`^q2r|ji_ z&WwqxnbhmF2%01YoP#clMOUf~3e<`fuD>jTG&cAx+C1@C4#;kngvhc~r(Y_t+m)ytJ+M=d zc5X>uRzFwxDqfXrGidkWIe2F@W7F0j?i{%me=e=9OEE literal 0 HcmV?d00001 diff --git a/Resources/Audio/Voice/Human/female_cough_2.ogg b/Resources/Audio/Voice/Human/female_cough_2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..32b2372a7845a56d03596542fd7aaef68150f620 GIT binary patch literal 17231 zcmc({dpuj|+AzGFL(w1zjZP3Ggpr^nw3|335h_6{N;iohN(WIhZTHOMRL9grgo34A0)HMw#ve2KpXPt1a#SVjvkVrOckoDcDCSR)hbkX3a+OmDnE!Je zU>=n0bR+&--|yf5uS25tk&G)?8p%ydaypffh)m(K7$1lu$w<62-r4!Mvnvu!=fq!N zbI&It{m*A{Gd???$~m8jIjBNK<0B0e(U+kDcmn{O2({PfWS0@9j4k~O~ToMgYhNA>6`^Y1aN>LMVt=JAUp2V@|xhMmFc@kFt>$FRHkd&fVnb{ z9brZp?qjKb2Ic@R2Nqb8-U0`6QUsW5J;nmwekx(RDo;&PzT|31AAb>KcViu@w)f+ ze?LD~iv$257ab2*`;Q7BmgZ)@b#%jM9TOtLz}JE}?<<$(ZDOw2u$RI*d?1#8`{Bg< zCzpTtr~)Ve#KGK)awbs_%X}8h&M&+Z#s^V=JPslA zp+pb{OfXUrorGzwW|d$j5j-Vs5}Buq-)*P}Axuk!A%q!JQyKjnrXLnY?b$M6clNK= z^1k)Ku=%(N`2R|*KZpTj7^-O&F92UKANGN021pO_ku9+Bpe-Q$>8QXARG<(wEyR*5 zyk>h3&fxog!Nw6Q5vdQ}rT+C@>OWRE|9HoFxWb94;ymt8jaiL}d2r$XdwyU&TOG(Q zdk#t+JV|9zlFkR^2vh(lklo~7@{9!Pqs)dWwB=SMUaV@lSkqd3^aBW}7*J~9kuCY4 zHWag}nOom-pzOA`l4f~ZTXIb^_y7M?ZM19$0Br!Um`q0mrXwcP54iduVWb*>1OQ(e z!aoB$DRd12d0h6p_j5Gu*oCmussB*|2y$>t^1Q%v8WaVXsqi8%y9WOso(FjW{X5kysQ=Jj61oXPiNp zM6O1iqsm2aP)08iBcL|GH}N3SoAdL6Fc zaW88be!F=Q>R%*z=3b+9FK@>OW?53RBese*ZaZ|QAoX0mT}^0At9{Cm0lhyd0>Hhu z;l^D$53al-R-L#P7SU=SZK}{^YW}A@+wRgqX*;pXa<+a)?i6m?c4)l-tM;GrAtV2X z1z6uI%i99ZDOl{ zhUt{8;_V$LR-(vku?HX?b2($ois6<5P;{s&iC7?I0pxcjE^X6$3 zGth@ZFtQTRo92t?69;~kf?>~lXj#hcAGp~vIzJ*?G@2yKs3;R?9)J>*iDP) z<(4;mFjG0Gg2^82sSj+Eg|5Lce_BM$10gEd$Uh8ZS;jq(y}Yd}2$bG|v|_HcU8?7{ zwY{9dKQR8^rQ!_$U*xI*p*ec(*0r#!8Ybon!vm*|g!qs!R|Iq&OBswv!GO8~bPr6p zI#lz6@}!_8OgL}X@(d}(P?jzcBkv2h9E0c6>B*g3J`N(2-j7;_v!QgZyuX>gBL#2y zbN%x^BzZsldPTEHNI!=QzyxD#WUDMbeWM1voiLaE>>;aSb+}P5GCnBlb0Rv$>`ZCT zswx0AM*u_mDUlZ6OOvqO3xZ0(`zYwG`JkXD;Q66o!qX?V!q|LJp7960SRNE?zPx!K zh#6byv4hM9;i`F1;zTWY3wqUg+%^Jq+B*km5K9ov4ggv|*k?fboOVF&M*{_0%LIBH z&Yt%{%jh#6kh;833dNXM=Cg}9V6^@KStebgzpVvHqd`_`&RK%*Oz9k7jn{1yfgp|( z+qDqO18#fVcKjf9qN=FU9uGS<2GeiC=FfSU1(9Vk__@@1j}|(J7I_Xdfe3mDW+Li( z1t^s$K5o@qCZg|DvD$GDQ~~Ny1khlZQX6Np*OBIW^Mf4Df0VU-rcZ46t4bs2|t?sSgDpXBZhs z3gqkn4ov^200Z9tPXQe)uKW`NBLlldiu@zSK}8_dgWt!B!1O~7Ol%Gw{#o#$A`#vG z&)W~s;RhHX+=ui(^gbg0N$;Q{F#9JQ0PKFyXA$L4&obZP>mh?Hx<;XmmJTY}Uj@6`nukz99n1I3N zC>TX}*jZLqCwGXzux_%U2^yB_7Cw$XEQU^4-Ontrf(ez$6#54Fe)2Tgai_VQukO$G%tY;#`M z2`$TLhq^0k$#ZV+pMcR(>;0(C{+;^E2euTRWYZjd`S4w^?Li4Q80TJ}cz^W3@Xnl( zV{UBn4xcFr zgyYun_?A-S1t_5fmJtqyarydD9Uc!>=_O!q0#yef5N*KOJJeYX(A9?q=&KV{A&3nC zP&2?A!C}O_JSy--c9B2_Ff@Y64#hx;>U&mGPje30o%c!~)wb9GoiKQK1DjyD(+F5e z#Nzhun?q9zYn!`2{t9Rtm>GNkKmxx40Ev`cl$5Y-k9Bg!yB>2Vc%Aen`UQaASOs*^ z2SijL5HR)zkAr&%kC6krnvSZC9SP`JD!f4A9T)qsq%0#7qLcGRR2|rDtRRl`v|fEEI=aYdBIV8p z9O<8WWmOqc8r~N*<0N^?c1?QFQhJ4w#90VPYNFPh{V%aa(`@q`%QfYjBL+Ms8SZ;{ zLj%aj(hg|^BGW!zegq)#++2&3d)JyT zjtn@xe$_deL2wn4OBdjUZVMM=53`%<&%OM+ub~l+)#7RiFxb30v zUw~9n(Q#zZZ+S-+BOL?dtUA$DTVDg2sswF3QQ`}w6+sbHq?t_m7Jr2P&xaVmO^qB?>1EE!vW-g5TbOS172s zuNNsz7H?VD@TuI|7c(=t1Jf*AGduZ=VOCUB{VjMeF&7LKbsZNjDwC6P=GhE={Je=J z-g+w8cp&xRv4(fGCLR^sGkrd@@4a}sKE665nbje7%VU1}MI}CqRV?I~d&p!CaZ>K* z4RtT8ko(#5wT;s8{N-XKg$PBB2t=}QtCA&sqW~Jg(IDTDR+BjsVvAtWiYu_EjILm> zT0ZAed7c4qS&;(ODeh*2Ljfx9Sx3GrnVu*nBF%yBtEDo=5Eq6EZxz61 zSc5un0KmFrHLr6f=3PA-qC5}D%Ou$GG4H4NuvFiFL9xVLo5)?jK6X)*3IgO+CsbotBrqi9`(M>t&8 zgbuMO)&r*S6n`>#8f}nZhO)GABvirdrSlXBSqMcL6LqXESox9OE(ryRqRR4SnQW^^ z8Y^iMp}14_`79jF>6T%yjSAJbi&1y#AUPaLo2%h>Ag^Tell@I-0RaNBH*}6XTf*wq zgM4PKB`LPe#XdZUj-I(&*r>ijsk6o`H*%m$6D0`$>3D=@V^N;7ah^Rcf*8?g@YWJAMouL!cq zR674AoGmP1*&Duz)C`xRGzX=?l{bE}oKSGY4VZ=*dimJo+qLGWso0y8=l~bcE4EA4H{Y|CWV!S&lCE2L`ak8DUG;B|u zR!btrvVweS`=p_JuCx+Mb+Y9qGSC4I!{&}4%d?`6r6VeI!UXyVg0ZboeGknw!jxQL zHO1qpHb&EEs+6M<2a{IvpT(2xsTI_5Ig(`46i=}P#z zKE?A9L=d0e-z;hp?h;+GKJ_ViHd7U;&W553_nqVn-Whd$e&n;~3moFO{_JrX%DWpA z>isZcHk`y{Si^FDJbwmC3>W2Tk8Q%6RdfCDMU^3*B2KPfiX;->TCH129qXY_PYEbvTpNiq#1IWJ^nn)WKq`teq2-X=OyszV+|No}Vi<>( z^dX0eok_NJnS@v^e^`@$pS4k8qX8g5N8m7}J{K3uQCGRT!{tjI(e8PVgvGShYL$%# zXX=1#)zQ6|ogsjC&iAfrK4`fVo8vv8a*P70V$vCVP_^l`Y3Fc)F+t|6dOfn!K63wQ zUu3Fz^D`vHA>Wy9^$x+ysT5-auZ;#|4VPUk8X(r#h4>B^Tj|8dVk?}gO4r9?r&!_2 zWmWR4q-9)b8HXq`zFH#IrqS3V)w9NKRsQ!~-rrm^HQ&kj*RKmn_PoZWn}4L}?_b;t zulI1;y07e~ee*mtF=+!H#EsvJyXBS9YBhPWw0MuXtMK&Nuk=$qqa4oVU4xTsNBwHn zaOCykd<3gzj2LxR*ai(soJ@|)8kDy8c%YB;eZ9M=T$G!kW<9*#-kSUAr?4YwZns!J zTq>Pw{Ko9Uo#YoY)$9w(V%t31AfByU*3k!hKQb3tU^ol)7L~2(z4X4GB~}u3%rjoA zTuLxaIK9DdoLx_T*?44QZMP3zI*tuHlHxUa89V2nxZ#nIXic^>aYO{wZMXz^>j2XV zxW9iP%0#3=d<|V9b|4M>huopPbmSaS=nveTd>IxXdwR%uT5|0)j>I@s&6?3r2gTK`K5WGU@WsHqwIFI($~wy_s!{kfqaK(e(2PGXbI;M)Z2<;bjItKbIWDNEZTxh=5(WPx=dT~GW#qt zAPev#rIqEowY_H6JP*u}VwDNy%ba92C0Mv`z^Tq;cepSjbr-HcXtr7Ka4l1;iD;%1 z-?9fBzJ9fEF;>Qyp;Rd%V>FGI{FuscK?AHbHkW?Nh1Q|exgcXkEA?Sn!UgsqU$l8e;clD5T_aMRa9Z$Iu{w-qmyiQ{ry z?XB3j^foAZ92dNl)T2FG8=|Z))j3)cdgC4o_mJZ%hc(t65}9?gLywBCeeZo1tB#6O z8PW}XowdFa5-gJfQYKm0;itn4Fc(cmW-3MMH^HM| z^ex**FN0pA9G1vy##Q_JYuSTJg+XNinRyh2ImAp;=5bhOkuFn2VRq=e} zv%`Aid*@!HoKX3FztM8C8r*z#&@~=c!?7bfUbVETUB%{x3r#}DJ zYu`L+|MzH}_9pp0&0zSko}tXVWvXo1a`NkObVKK0N`gsov&Jjf8$kl@>cu`7)5#?d zRgC44N{=O~0%rqXnk{^GTJ7n8_5H<5nm<2W$-cP{2^J9WGY;5N5oU3{4ME8jWu3~Q zW;?Pl6xlLO1c|U@%~#NRx58jk*igm%D#)d6v^!7#G3c^b4sYz^0A26}=!w+cU63gCsf_EdxLnu2T?i z$h71|F&I&qSHdkzrS_330)*)J>08%!HCvnSy~}aZV}AaZuaPrPrfL_rG9v3@tZekU zQ{acHf=@4vv*xdG%f_5r%8VOSzOrlgB;N`9hi0nQ<^PrSJgmZGn8+o-FTkc#Y7Su< zfp^)vm50>04!B!cS*kAT7kvK;<7BctznaYcp&^~{z4O3GW<$6DG74ojjv%SfKr#ZY zo(n6_;Yug0czy|)PS>R?1GCc-@GIOv4s#LZ7eX3k?l|UM2Z1+kKN}ZL~Z$r)gGEzNpbW zV4ga$v}^vf;B80N`tB|(VLsk|n*vJi?t_w&$=?dNhx%AQ^h=(m-;LW)?OY3XUq;c; zj&tgf?R`80rB7~$zKuo&kgxC!q}WtQmyS_yj}M&>yB?EfsHKyeooTOQL@7`O_|_`A z!KO4@vr9wdma_y$<;qqDrwkMKiXEY^f81|e6ClhK^bVBMxZjrFN6a>F#NTHzJSQU) z@oM`SAe`*$~0 z>Yuq;Diacl-atu)=OY424V5pvhBSMCp)8_GI)VNwQ>S#Cb=*$1C`Q)OO73;Eh;&kW0#B*-=$W*;sh(!%HW7n$KN_1)PeE6*{ z$p)QJH~}5^W?jh;yB@}l-*+Vd2$AjhX0$308~e2#rK0bCagdR*;y$+qrLhDTHKOC# zpD)Djuh*~TknMb{OG_4?uS5QeQMGT?SL`7Df`b#t-)y~)AaUInz zu)qJbs7$CYq~UeQ%|_Gn9M2sqwluG-E5M~@N+K^;RiIfxJCIRv+uA>)Tkh=W-~4`z zK7lt|M$2EUr^qQbv*Hfy=}ARE5qTJ#?|AhDoXqkjlbZ)-`GZ*baG)&3>zuV-(b@O$ zc=9$P^SiICY|JLd1q279n(!oDOF+gI5JQPmdOcDLztbiR{z}5)3Ki_fP1}t^zU%qA z!PwJ@VOM*J{fUo5mQe!B-vs7>DFU=lpG`v@W8LefyZ~1Z%7xH40vVjOW2HydnG`-| zr6bFQA?OkzO+=C|r5og0FHUJwdOk5_XWA94;36s%(LJnr^Cj`I)rT~MyXd6-M8`@` zG;A-rx^IPV<7Zza+Zsn3(rDV?xLpH?RbqD(?Y!M7ouvt8t@G=P4ht>mkJdVWO7RU|FgrM`0o^?98@g$KB8EPX$ zia0t<=GmIcG5UZ9+0#hv9!MGd|v?p<>8%Bsr%?ckD<&T_HyGk6miaM0q_E}xK z+Y3^Cf*E-ZJ%^~PtDDHc)@XJnPmU-s&5X0kifBlL=uikd`9rgMTk>G<-GcYOhj`B4 zeo=S+u-?yyy<$%_pK#f9Qlw{A7Obh0w=@7^+NP_|h)*pwpT3a}FR02z7O}@^4Sl{g z&!l&1m=&)0czME3_#A#T(#ey6$BWrcHnaYM<|Y6BCl`)@i=38a>zG-NAhRBt!hd#A z{YtbyK7#K&&Y!dZu8S0C@Kt~cSgipOJH70hQ%yOS;#u;-Iq=m+v(rOa?H><4LnzFw)Os|PBG%<41y?5IVJ3Hh3RBm2}PscMF&@CW{bVA@%n+gjCOv<@>QK2(yNKl{85FgkBC7iM#3*ltk?TV{n)rj<6Zcgc{^$Ll$v<+}lgG0r*0kY4GymfLuan z7Kc;Dgni2|AmpZiM!m^ZJ(l;v$xyzwWcqYbb|@uqFEny&sV`Z)?(cF&?i3|V zXuRs}Z?sXi1#j=8o{PCN`gPEy<3YT6d?JaD8CeXWu)VYXva6o@?dL{SxPg3&S5%#q z#rd)o{z_S7f~`=Pg_~^E!B^z`m#f<{X4ZdVhVoET_5CDasCq{YX&mP7Um>u^nptb( zT>{N{;SpsWvyyNm!nF9=K~VtD9tGx)Aq(C00p&s!B-N-%xs6 z-JY-2t(}(N)TUMI=Z1?i5#?!6B9|{^Fxprqvl+y$C2we?obP-78(l~P>a-B$54&BB z(iIY=7-dg1iJu%~cEY4QRLpykY-kb;TP(>BZG|c}H3;fSHwT@KI0K7V)4Qx|Z@0ev z^2u$YY1jr|Uwd5A)a|SOUtgTNa%@|{^Sc%^N1SXuX1<}ER-QQ1HtpP-bgj;wpftZX zn|O)vwCI^_uWCuY#QLW#w_y9G{m3#frU2^Sy@7{E{XKhH`kj|%d|WHAmJ~A3FpmO1vo=#qM7gY!B!7 ziF=ofkc8fD1hb<9Td>69GhC$;@y8N&5PLILBw=J13Z+x^w?!hem7XOJyi;Kp3TdVC5yo9wOm-wva(MPEC&8sV;3Q+@s#?)dY)AePEojcL z8cCaZHi*$0oNr}xeSuP5#i+2=D2eG{5mE}w8HLMoIC0FqARE#&O?2FrSoA%NsqDjQ z5r@Z>RU7?}9y=1_OX4~bI=Wm}7I9jy-yJRc=k*9254=w60)eX+QIT!u}|X5 z>}%9vNY`G-jZ2U3QauT6F{H3teNr8gY700FK1P$Phwg=byrf+v2}N=*a3Qlqv_$pH zX&c|`ZX1nruhplzIAUzK$TgLrJ#Zm%%6p!?bRV|zZlL|~ZY}N7Q`eiL%{~^oDz9H^ zX_5@Co_Kkb!g2mWeigp4=NH}Mfx7K9D7ke)^WNW&f9dvisr@|=^%vM0eWhx_H+Nfk zkNz^zwQnO6&T~>Xe82gv?=P7e_w~F3f-YQ;mPf=XllU_VGjJ1%9`IEGPOc6Z%{$vx z0?EKU#R4mTbEE%bS@?@psSJ{qxqHji-r8x9#ns!zjHTk=7?Xo-p-Kf8K|ht!@Yj%VPaFZ+G%&LDX)r27#X^FWdFBMfH;KK zR|B-*r+{s3YIucvw)QV;$et*sOte(HM9q#T#=$k!)9tNvtvnBd^MDhfCc-yf=c0TS z(ZQyUW{Ac@JH0Y@H{6ocUQDRkN!ihHIF`3FP}zz)sEkbB^Vnj-J~ZGj?Is=J@o zkM~{_X#98{&{yvszN`)$%hCpeNPY|vY;twv##tw~FseOAyI2Jg5Hcor-_IoCe1rve z`XV!h6S+Ywj0Q~Vr$0rupIwjdg1ecpnW@_nYfCdL>_+(W?j~x&w~zkyP0)>Rc;=EN z&PJaFqx0^?rr5rF@qR78`#c`4-%WWk`|qG1>QVbT^`yTZ{W1gA1b8Qx)m4t^+m#)b z^SjEVtTIDSVDsuHLnk&T@bOguplro_`7^&}DNxH}KE*~*YlOY-D>2GW;|B<+PcyB| zCX112Rt8XMo@=om%9HP#)*6mawFyhNveK70ms2qzEkZxJ$P#I5B{0f?Tp<=+Ja6Np zSSB$@Q#>^?ldRj*SFP#aLMvvS&xWdc^X)M~MYJnIVilwXV;NMteLIp*wvs}D+6h;^V#haDOOfVGEGodt>v*K+J6>Kt`?z1c zg+I+9pP!}xcwd;No6}-Xb4*mM49g*LjNE;%?M%%a@xp+k%1FyTpuea<^hns7Yc#9w zJa-6ND`%^36xCyGv+M&aAlrn|U^XLuutJ?ML-)#}Fq{v}KRi?yiYVT5HnZbEY8m#S z&;3wHXudpO=pzalBL~XkNh4W!gRu*pe8gXjSP6GiI$6UkBUQ25>`$NRAU zptLD>UzN^EwUH3h>F4D<^^rui2Kz{Cfq$z0sB5Z^pu5Njqm`jvMjq1_rdN{)rs~LK>{Ef= zqN3CvpE*$1ZeG-W2>Cp1!64`6Er6)6W$}|HfIqioRSv{xmDTp2lRdKE*Yu|04BEdN ze=;{b7lBJX*6*%+d-QxYOOGV=eVRXl6q5>z8(5Yzs-Yw`cY$rmMI|fh$BagmoJx9P zWQipq_DaN_gct9TL?Etd?Xu>}l`6q%K7=ZVS*IoHRh@OgiC+d6%91yH5>flLSAM$b zJzHh`Nt$QvjE?t4R=jwf#<`$eM9oIl`A*`Sihtfn${nSeb>|JO-)xIL{*JYZNZ?>i zdAM_8)yNm{Wvlkml^%LK6Wi>>s3-?cK5&2oaMIi_I+}nc-JSLeFJY2Iehw@j7zsyC8G@`wVIdPhM;lXkxmDLj&Xz#a}{@07T|ltJ<%fY zFfLhX=~Cll${S-bbCO}^xa}EA`G8Mz@3Rm|q9R(V5OI|_Q_?bIFZ##qTaROWY-f%+ zoFQ4lk6g1Ki!DUwV_w`jSvLH+cz%oJq~(@$;nZzpR?@4x-zi^1e@^!}t~}ODPV8rv z#d~bKvWjXtE4LzTi7F?X+u@-|;0*g#iHe45w_A4By8bdW`&?(=)+2G28dRf1*qG~{ zVdW#zS)xHTrjfc!`91^+p^`tckkhjmP%8&Eu+5b#i#=4am0~x=hs|p!7~EC3@R|cC zz76{wFS->3)SmMh{?m7F$Qv=bjk6{6*M5<87^^u~?1C6(&udQm<=xCFPm>~Pacjc* zx>(3hI>cK^^0f|PMRg=3Cj{heZ~V5?^mv0_LhASn`SqmDy@WFN^CTA`e|0Ka8s(A@uwumutc)Uwr%kz026br9 z&a<*$D7?ydF=WcpuNY1^O#XVI zVmK|2*ER&}b(f8$m9EnU~`+^o!6-FNQ2 zYQffQZb4O*R%j0*p>0ohUibcfz@6iTqeu57QL650-&88SUMwx?#0-4XOY$^dqBc#l zC<>IHDMf8&Nu8CpaYY+A8^8)TR0+p%Pysdu-p0%8>y?anBMP&#@Ad>T*INgMAz>;h zq9dl!bmeSr@14-|1?A#0=AlBa`^EZSrZ4bYJc1&yL7Wtfw8SDzklzlKhFk2c~An!NE<1|f;B9gFDq zT<{($c4`(b+Y$iHtTf9Otdt96DzPs_;~9fXz}BON!2Q~SMV!lIUHs>-))|6tbsLNB8k!^vx$8w zTEJJ$={9PB@w{tSJkUT)Ef-#pRnjTAkRX+(@%Riv2)c;;{ZP0P^En;&ZR>qz)w46`SDT_OOoG&@~K6Z z(6EKt7qH6stjcO_w{0bI*5|6$1eY5`)=Pl@0`1dJd`*e5GI3LdUwUX6_Fwl;|9GtV zYoDKtdCu46ogA#M^=yLv;**L)MI}cK-o0Jjr$^C)E8-MO0LkNFY{S`;dt$jk)fK)j zmeXf3)y7&Z^4J|6@OdO?s(tu{)~lGI%hehut7u>l9gA%;R0W2H)UC@=Fl#!6DXT_$ z!wW(jg0Y6QnVuyIxU)vzYMdBSs!@zYG-1E_WHDyG@0o<{U3lx(t;l7+olJObU+|H8 zb4tqV{lVz!-%@|@ewn_soUVI6fo?@RWU-I!ZWhgi3%UD# zo6cMZl7T-3V>V7{c_t!h^}r@yNMXle+bY^f+ld zh26;2>(a^&R&q-8eN3!*>ju{JS${sKLiP197Kk+kzGC3YDiEz{A1}_`FTL!58=!(I z+$|ko5~CGo6=I-O5*8<5Ap9Gjfg8j~4o$LKh|%awa9;CRR8uacWs$SbdUdkwQv2&~ zul;+_kbH}%0U+swLJa;&4f_{?4 z1-iMTT=SS?VsK$rfZtq0{Okc!0OCEoT0c0Ya(@ zbpLM072Lxrb%K*iVVlD|E)3HStDxYyfCH(JD^sP*(UnxYqS0(;Gc?zR zEpb0shDP?)K{}tw7!Dh7vAq){c-+y!ow+3m(^TCeIp9y}a<(k?ri0tMFq6ij7(2 z+$9cNL6ZFP_lseO)}oF}|2*1|(zK>WF70UdG4w#C{~XUBT`z}CY`*LGjmr-%)zWm- z!uQ=caz;1xuZ`0@(bH54JS^rA)PML{Z~hHSqKuhd%99KFxZy-IAX z9z$t{J$My6f7`|M#7l1Ubbg3iec)%9lEC{r?mOv^{&oACKgx7B(gjPqW=5zOXVQf9 zEn(?cMSbRHvLD2++JgeSGX9zH`ow1^B=@s(*g-ZSU5fhR#+R-kUGQ{38pfDa1ID23 z;krE(H>NGev6vsu=51Py3tJjh+ZsAhhl+#V z`c2942((aC3FwGt!A~H&`PK{}ji&L?jLjd9L`}0eoJ`D)4)ChY#Q)&uIwg&Y0Jjht zSC7`)d2`R$hQ_5%aH|J2U{%_#MON;V5*oflRihY!DGQStO=oUQ`{gcVBXxyw)zos` zrc8o?%~CljfV-X!E#L;mAp%Me1;A7+hB|I#(PANGRORR2ag9LMV0&bd*s7{Y)WVi4 zwo_M#HL0525|IcG%R@?Wef!C#$I$IZ$t~UBn%V3M$?~~B7=L4XBF{&$dLBKGe^~EY z)QX)!@j)gj5~>Z&C0BNQ0I=HYPJu}!HOG#iQ1Y765NmL=?OnWudDP!H zgv{(vACpihQ5l&%dhb~FQT*{ZUvPcSN?~R1ko+nH(6RLiU1@6$HrC2&d7ONRza(Au z5m4O0EsFM3so~y~whcHEA3^UyRpX3o$p+<=fMT@41YqK4q+Oz4H4na!@8pZH!R!$3(Oxfb8iWx}Ht7@)?1cq=&_nfM*W=sbd*FNB zq8Be}ODnfh7@kLf-%WkRV@dkJ^xxq#r~n>7I`3Vim?FGvwP>8pt9=}`55r=Pt2~eO z&&Q6V>-5zm)qZ%&6@!3@9@Jrcai!eE!dI8$@o74ynCwfBQoLd%C6oI0NEKkzUWMgw zxMq79ajPWdl@f{u-)=NRIj)QDxHcgsPRPGxTDaB(oKBd`EfZ3wYq3$uw(OhSfQ@b2 ziu>a8+*%&aO_RR?|^D#0e(C#z1Y?02~`Wt9<5!&Adn)tgXNnt);_ z46&tS{0H<3luefh1RlE$G?Hgc4clY8J4uf3U#zyyOt7@xbLKc@a<-|Q8M`AV?w?f4 zajm-d&qu~JTQgGeyXe0%dpS;er5@L;xzL^;7HWT!r(2UUnIV@TOS$*L{UY@VCu25l zCP=<)r6*M3;Kh&KC*GOuH@t3>@bX>l%7=H6Y;lSI?MNr(BJ9Mj(TECga`h=V;NIinC>P&K@rSQBw|Pf+p?03`pJ=9stGS?lD{s+b!M5@k#jgv z^dmpqYWcj4U1Px(C+PDQ`B>{&?ovXJxy9A^{mv7)H~#n+grk1pc)|Ny?{AZjecr^{ zl~gttt^V?8^MZxmIHt43{laK`-_OIdsbOaWd!G=PlM`V)-eB;wZ+c9*hlSpqFkd#- zypC5cScoXKLW2LmTm&p)Qfzy$%OTJ=<1R9vjgkUObu z!xD1sSawu8Gaf#dp-i$~80QZ-Z?g)HNuD{r`+a%=jQAq<1Rmf{@u~#Wo>d$NzukTF zyO@7s)zkfc*mvW7aV+JchT+d0h%@&(Jp-D|3Ad(tzFO7%x#Lm2q50*VXWSE)1ByxW z>V5a_^m!FNZfbpKT)p@E;PBN9VMaaqUf(HpSzoCwyES+(UwY&M?rMM(cJdfq2)_A; z^hcmvP|oRBKxjxK{4$*^s}^=asJB;|3zi#AZWDCX$OEt7(e)z+XCQ2MaHXe*Z1KMORH#+O#dn#umED{QDo(%*3tk zzjORi=i^QY^~$e6*9aa5Uvz-m#DI45{kxh9d2QF7yI)nMmsDit=p>r8xRXs=yKOL5 z(^HCse$@F+2KW_Izrqml96gQGT+h!Dg*bG&`&T2Wo|Do0RO^Jqr75CYu`WK)Qz59Q zOx|Xio5)tE@gdK;jus8uM8M*ss7%JG<<=gJjgS*Y;jqvD;gTnKnmqK?$t}nIa)YLr z=+6>rKNeXY>T3$l z4d+MkH2@Rfj@DQ2V$bG^rR=}`dA;K!508jv2CLqTnD3B_`fK8{vpY$;G$J?|?Q9$3 z$q*s$Gb?)FO-+W5vsv?Hk+zU(aqri=?rG-N=+OgCsykmQoUNx>#aWT_eEUAuIQQ3_ z?DpN1YmP9Br{7Hs5_Yhip|wo;kh!{^+fe;Oy{neGuQgkqB$`*k#fONsE-v1d(TxT=CW&_7OqqLNMVlTZH538kE?iX-=V6JC}YNCLv8ma(W2Yn%pAGJvQPgx1%t4 zC-W5KCfFT@*975a+^$s`$~6B{wQP2q_ssn2D{*;~S(FejjZ;c>;be z#fv!9_~eWBnopnc=T`msfI-~YZIz8(`M%v2_1^c7(vYb?Ly)ta0ISk?g9<*7SyriW z(zd2)LS3^ifGzPzrp7LCT^Gb%FAcl9s4`Tcm_-G=)9owE^5O}QywEriUNM4%Ex1~M z{|R8)?%=Xt7`U&!;2Jy`jWwMe&j{bHZd#1r{+?#>)2rTRlV5+W>_JpEPrWW(|L2e3 zo_BShe|BJ%3%smE94@Np|S99Nie_#-ka&NW1_sy@3 oC%!(~pLp~{@;xu5a_-#|&#$5zw0?Zz>3K47a@NHq5u^|NKZRPD!~g&Q literal 0 HcmV?d00001 diff --git a/Resources/Audio/Effects/Diseases/sneeze1.ogg b/Resources/Audio/Voice/Human/female_sneeze_1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/sneeze1.ogg rename to Resources/Audio/Voice/Human/female_sneeze_1.ogg diff --git a/Resources/Audio/Effects/Diseases/yawn2.ogg b/Resources/Audio/Voice/Human/female_yawn_1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/yawn2.ogg rename to Resources/Audio/Voice/Human/female_yawn_1.ogg diff --git a/Resources/Audio/Voice/Human/license.txt b/Resources/Audio/Voice/Human/license.txt index 51c969fd0e..d24b2874e4 100644 --- a/Resources/Audio/Voice/Human/license.txt +++ b/Resources/Audio/Voice/Human/license.txt @@ -14,3 +14,12 @@ manlaugh_1 manlaugh_2 wilhelm_scream womanlaugh +female_cough_1.ogg taken from https://freesound.org/people/OwlStorm/sounds/151213/ +female_cough_2.ogg taken from https://freesound.org/people/thatkellytrna/sounds/425777/ and cropped +male_cough_1.ogg taken from freesound (deleted user) +male_cough_2.ogg taken from https://freesound.org/people/Harris85/sounds/208761/ +female_sneeze_1.ogg taken from https://freesound.org/people/sherby168/sounds/540771/ +male_sneeze_1.ogg taken from https://freesound.org/people/InspectorJ/sounds/352177/ +male_yawn_1.ogg taken from https://freesound.org/people/ckvoiceover/sounds/401338/ user ckvoiceover CC-3.0 +female_yawn_1.ogg taken from https://freesound.org/people/Reitanna/sounds/252239/ user reitanna CC-0 +snore1, snore2, snore3.ogg taken from https://freesound.org/people/mattyharm/sounds/432995/ user mattyharm CC-0 diff --git a/Resources/Audio/Effects/Diseases/cough1.ogg b/Resources/Audio/Voice/Human/male_cough_1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/cough1.ogg rename to Resources/Audio/Voice/Human/male_cough_1.ogg diff --git a/Resources/Audio/Effects/Diseases/cough2.ogg b/Resources/Audio/Voice/Human/male_cough_2.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/cough2.ogg rename to Resources/Audio/Voice/Human/male_cough_2.ogg diff --git a/Resources/Audio/Effects/Diseases/sneeze2.ogg b/Resources/Audio/Voice/Human/male_sneeze_1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/sneeze2.ogg rename to Resources/Audio/Voice/Human/male_sneeze_1.ogg diff --git a/Resources/Audio/Effects/Diseases/yawn1.ogg b/Resources/Audio/Voice/Human/male_yawn_1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/yawn1.ogg rename to Resources/Audio/Voice/Human/male_yawn_1.ogg diff --git a/Resources/Audio/Effects/Diseases/snore1.ogg b/Resources/Audio/Voice/Human/snore1.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/snore1.ogg rename to Resources/Audio/Voice/Human/snore1.ogg diff --git a/Resources/Audio/Effects/Diseases/snore2.ogg b/Resources/Audio/Voice/Human/snore2.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/snore2.ogg rename to Resources/Audio/Voice/Human/snore2.ogg diff --git a/Resources/Audio/Effects/Diseases/snore3.ogg b/Resources/Audio/Voice/Human/snore3.ogg similarity index 100% rename from Resources/Audio/Effects/Diseases/snore3.ogg rename to Resources/Audio/Voice/Human/snore3.ogg diff --git a/Resources/Locale/en-US/disease/disease.ftl b/Resources/Locale/en-US/disease/disease.ftl index 1a2de90acc..f738851a73 100644 --- a/Resources/Locale/en-US/disease/disease.ftl +++ b/Resources/Locale/en-US/disease/disease.ftl @@ -1,12 +1,5 @@ disease-cured = You feel a bit better. disease-sick-generic = You feel sick. -disease-sneeze = {CAPITALIZE($person)} sneezes. -disease-cough = {CAPITALIZE($person)} coughs. -disease-screech = {CAPITALIZE($person)} screeches. -disease-yawn = {CAPITALIZE($person)} yawns. -disease-meow = {CAPITALIZE($person)} meows. -disease-hiss = {CAPITALIZE($person)} hisses. -disease-beep= {CAPITALIZE($person)} beeps. disease-eaten-inside = You feel like you're being eaten from the inside. disease-banana-compulsion = You really want to eat some bananas. disease-beat-chest-compulsion = {CAPITALIZE(THE($person))} beats {POSS-ADJ($person)} chest. diff --git a/Resources/Prototypes/Diseases/infectious.yml b/Resources/Prototypes/Diseases/infectious.yml index 6138549afb..d6b7a9e051 100644 --- a/Resources/Prototypes/Diseases/infectious.yml +++ b/Resources/Prototypes/Diseases/infectious.yml @@ -11,8 +11,7 @@ probability: 0.025 - !type:DiseaseSnough probability: 0.025 - snoughSound: - collection: Sneezes + emote: Sneeze cures: - !type:DiseaseBedrestCure maxLength: 20 @@ -33,9 +32,7 @@ visualType: Medium - !type:DiseaseSnough probability: 0.025 - snoughMessage: disease-cough - snoughSound: - collection: Coughs + emote: Cough - !type:DiseaseHealthChange probability: 0.015 damage: @@ -60,8 +57,7 @@ probability: 0.025 - !type:DiseaseSnough probability: 0.025 - snoughSound: - collection: Sneezes + emote: Sneeze - !type:DiseaseHealthChange probability: 0.015 damage: @@ -82,9 +78,7 @@ probability: 0.025 - !type:DiseaseSnough probability: 0.025 - snoughMessage: disease-cough - snoughSound: - collection: Coughs + emote: Cough - !type:DiseaseHealthChange probability: 0.05 damage: @@ -105,9 +99,7 @@ amount: 0.5 - !type:DiseaseSnough probability: 0.02 - snoughMessage: disease-beep - snoughSound: - collection: RobotBeeps + emote: RobotBeep cures: - !type:DiseaseJustWaitCure maxLength: 900 @@ -144,23 +136,17 @@ # Screeches - spreads disease - !type:DiseaseSnough probability: 0.01 - snoughMessage: disease-screech - snoughSound: - collection: MonkeyScreeches + emote: MonkeyScreeches stages: - 0 - !type:DiseaseSnough probability: 0.02 - snoughMessage: disease-screech - snoughSound: - collection: MonkeyScreeches + emote: MonkeyScreeches stages: - 1 - !type:DiseaseSnough probability: 0.04 - snoughMessage: disease-screech - snoughSound: - collection: MonkeyScreeches + emote: MonkeyScreeches stages: - 2 # monkey accent chance when speaking @@ -220,9 +206,7 @@ type: Add - !type:DiseaseSnough probability: 0.025 - snoughMessage: disease-yawn - snoughSound: - collection: Yawns + emote: Yawn - type: disease id: BleedersBite @@ -259,9 +243,7 @@ probability: 0.025 - !type:DiseaseSnough probability: 0.025 - snoughMessage: disease-cough - snoughSound: - collection: Coughs + emote: Cough - !type:DiseaseHealthChange probability: 0.05 damage: @@ -287,14 +269,10 @@ amount: 1 - !type:DiseaseSnough probability: 0.01 - snoughMessage: disease-meow - snoughSound: - collection: CatMeows + emote: CatMeow - !type:DiseaseSnough probability: 0.01 - snoughMessage: disease-hiss - snoughSound: - collection: CatHisses + emote: CatHisses cures: - !type:DiseaseBodyTemperatureCure min: 420 ## Reachable with a flamer @@ -312,8 +290,7 @@ component: ScrambledAccent - !type:DiseaseSnough probability: 0.01 - snoughSound: - collection: Sneezes + emote: Sneeze - !type:DiseasePopUp probability: 0.02 message: disease-think diff --git a/Resources/Prototypes/Diseases/noninfectious.yml b/Resources/Prototypes/Diseases/noninfectious.yml index 91d691fcc5..d66f2ae02d 100644 --- a/Resources/Prototypes/Diseases/noninfectious.yml +++ b/Resources/Prototypes/Diseases/noninfectious.yml @@ -31,9 +31,7 @@ type: Add - !type:DiseaseSnough probability: 0.025 - snoughMessage: disease-yawn - snoughSound: - collection: Yawns + emote: Yawn - !type:DiseaseHealthChange probability: 0.02 damage: @@ -60,9 +58,7 @@ probability: 0.01 - !type:DiseaseSnough probability: 0.10 - snoughMessage: disease-cough - snoughSound: - collection: Coughs + emote: Cough - !type:DiseasePopUp probability: 0.03 diff --git a/Resources/Prototypes/Diseases/zombie.yml b/Resources/Prototypes/Diseases/zombie.yml index be6122d7c9..018fbc82e2 100644 --- a/Resources/Prototypes/Diseases/zombie.yml +++ b/Resources/Prototypes/Diseases/zombie.yml @@ -15,9 +15,7 @@ amount: 1 - !type:DiseaseSnough probability: 0.01 - snoughMessage: disease-cough - snoughSound: - collection: Coughs + emote: Cough - !type:DiseaseAddComponent comp: ZombifyOnDeath cures: @@ -32,4 +30,4 @@ cureResist: 1 #no cure. Death is your cure. effects: - !type:DiseaseAddComponent - comp: ZombifyOnDeath \ No newline at end of file + comp: ZombifyOnDeath diff --git a/Resources/Prototypes/SoundCollections/disease.yml b/Resources/Prototypes/SoundCollections/disease.yml index b4299e0c85..a9e6c4694a 100644 --- a/Resources/Prototypes/SoundCollections/disease.yml +++ b/Resources/Prototypes/SoundCollections/disease.yml @@ -1,14 +1,24 @@ - type: soundCollection - id: Sneezes + id: MaleSneezes files: - - /Audio/Effects/Diseases/sneeze1.ogg - - /Audio/Effects/Diseases/sneeze2.ogg + - /Audio/Voice/Human/male_sneeze_1.ogg - type: soundCollection - id: Coughs + id: FemaleSneezes files: - - /Audio/Effects/Diseases/cough1.ogg - - /Audio/Effects/Diseases/cough2.ogg + - /Audio/Voice/Human/female_sneeze_1.ogg + +- type: soundCollection + id: MaleCoughs + files: + - /Audio/Voice/Human/male_cough_1.ogg + - /Audio/Voice/Human/male_cough_2.ogg + +- type: soundCollection + id: FemaleCoughs + files: + - /Audio/Voice/Human/female_cough_1.ogg + - /Audio/Voice/Human/female_cough_2.ogg - type: soundCollection id: CatMeows @@ -32,14 +42,18 @@ - /Audio/Effects/Diseases/beepboop.ogg - type: soundCollection - id: Yawns + id: MaleYawn + files: + - /Audio/Voice/Human/male_yawn_1.ogg + +- type: soundCollection + id: FemaleYawn files: - - /Audio/Effects/Diseases/yawn1.ogg - - /Audio/Effects/Diseases/yawn2.ogg + - /Audio/Voice/Human/female_yawn_1.ogg - type: soundCollection id: Snores files: - - /Audio/Effects/Diseases/snore1.ogg - - /Audio/Effects/Diseases/snore2.ogg - - /Audio/Effects/Diseases/snore3.ogg + - /Audio/Voice/Human/snore1.ogg + - /Audio/Voice/Human/snore2.ogg + - /Audio/Voice/Human/snore3.ogg diff --git a/Resources/Prototypes/Traits/inconveniences.yml b/Resources/Prototypes/Traits/inconveniences.yml index 54fbd252cc..b74dfb2fb0 100644 --- a/Resources/Prototypes/Traits/inconveniences.yml +++ b/Resources/Prototypes/Traits/inconveniences.yml @@ -7,10 +7,7 @@ - DiseaseCarrier components: - type: UncontrollableSnough - snoughSound: - collection: Sneezes - params: - variation: 0.2 + emote: Sneeze timeBetweenIncidents: 0.3, 300 - type: trait diff --git a/Resources/Prototypes/Voice/disease_emotes.yml b/Resources/Prototypes/Voice/disease_emotes.yml new file mode 100644 index 0000000000..af93025cae --- /dev/null +++ b/Resources/Prototypes/Voice/disease_emotes.yml @@ -0,0 +1,45 @@ +- type: emote + id: Sneeze + category: Vocal + chatMessages: [sneezes] + +- type: emote + id: Cough + category: Vocal + chatMessages: [coughs] + chatTriggers: + - cough + - coughs + +- type: emote + id: CatMeow + category: Vocal + chatMessages: [meows] + +- type: emote + id: CatHisses + category: Vocal + chatMessages: [hisses] + +- type: emote + id: MonkeyScreeches + category: Vocal + chatMessages: [screeches] + +- type: emote + id: RobotBeep + category: Vocal + chatMessages: [beeps] + +- type: emote + id: Yawn + category: Vocal + chatMessages: [yawns] + chatTriggers: + - yawn + - yawns + +- type: emote + id: Snore + category: Vocal + chatMessages: [snores] diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index ea9f50237b..cb63c7b297 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -8,6 +8,22 @@ collection: MaleScreams Laugh: collection: MaleLaugh + Sneeze: + collection: MaleSneezes + Cough: + collection: MaleCoughs + CatMeow: + collection: CatMeows + CatHisses: + collection: CatHisses + MonkeyScreeches: + collection: MonkeyScreeches + RobotBeep: + collection: RobotBeeps + Yawn: + collection: MaleYawn + Snore: + collection: Snores - type: emoteSounds id: FemaleHuman @@ -18,6 +34,22 @@ collection: FemaleScreams Laugh: collection: FemaleLaugh + Sneeze: + collection: FemaleSneezes + Cough: + collection: FemaleCoughs + CatMeow: + collection: CatMeows + CatHisses: + collection: CatHisses + MonkeyScreeches: + collection: MonkeyScreeches + RobotBeep: + collection: RobotBeeps + Yawn: + collection: FemaleYawn + Snore: + collection: Snores - type: emoteSounds id: UnisexReptilian -- 2.51.2