From 2d42fbc61bded4e71d2d78d709941bcc35336c0e Mon Sep 17 00:00:00 2001 From: Guti Date: Sat, 4 Jan 2025 06:57:41 +0100 Subject: [PATCH] Virus timers --- code/__defines/diseases.dm | 7 ++- code/controllers/subsystems/supply.dm | 14 ++++- code/datums/diseases/_MobProcs.dm | 1 + code/datums/diseases/_disease.dm | 18 ++++++ code/datums/diseases/advance/advance.dm | 18 ++++-- .../diseases/advance/symptoms/stimulant.dm | 2 +- code/datums/diseases/appendicitis.dm | 2 +- code/datums/diseases/food_poisoning.dm | 2 +- code/datums/diseases/gbs.dm | 1 + code/game/machinery/pandemic.dm | 15 ++++- code/modules/events/disease_outbreak.dm | 7 +-- tgui/packages/tgfont/dist/tgfont.css | 53 ------------------ tgui/packages/tgfont/dist/tgfont.eot | Bin 4240 -> 0 bytes tgui/packages/tgfont/dist/tgfont.woff2 | Bin 2040 -> 0 bytes 14 files changed, 68 insertions(+), 72 deletions(-) delete mode 100644 tgui/packages/tgfont/dist/tgfont.css delete mode 100644 tgui/packages/tgfont/dist/tgfont.eot delete mode 100644 tgui/packages/tgfont/dist/tgfont.woff2 diff --git a/code/__defines/diseases.dm b/code/__defines/diseases.dm index 97f0025228..ac34e469b5 100644 --- a/code/__defines/diseases.dm +++ b/code/__defines/diseases.dm @@ -5,9 +5,10 @@ #define HIDDEN_PANDEMIC (1<<1) //Disease Flags -#define CURABLE (1<<0) -#define CAN_CARRY (1<<1) -#define CAN_RESIST (1<<2) +#define CURABLE (1<<0) +#define CAN_CARRY (1<<1) +#define CAN_RESIST (1<<2) +#define CAN_NOT_POPULATE (1<<3) //Spread Flags #define SPECIAL (1<<0) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 9dbefd3684..c75909e493 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -119,7 +119,19 @@ SUBSYSTEM_DEF(supply) EC.contents[EC.contents.len]["quantity"] = cashmoney.worth EC.value += EC.contents[EC.contents.len]["value"] - + if(istype(A, /obj/item/reagent_containers/glass/bottle/vaccine)) + var/obj/item/reagent_containers/glass/bottle/vaccine/sale_bottle = A + if(istype(CR, /obj/structure/closet/crate/freezer)) + EC.contents = list( + "error" = "Error: Product was improperly packaged. Send conents in freezer crate to preserver contents for transport." + ) + else if(sale_bottle.reagents.reagent_list.len != 1 || sale_bottle.reagents.get_reagent_amount(REAGENT_ID_VACCINE) < sale_bottle.volume) + EC.contents = list( + "error" = "Error: Tainted product in batch. Was opened, contaminated, or was full. Payment rendered null under terms of agreement." + ) + else + EC.contents[EC.contents.len]["value"] = 5 + EC.value += EC.contents[EC.contents.len]["value"] // Make a log of it, but it wasn't shipped properly, and so isn't worth anything else diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 6505817fb5..1c4f1ac2d1 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -36,6 +36,7 @@ /mob/proc/AddDisease(datum/disease/D, respect_carrier = FALSE) var/datum/disease/DD = new D.type(1, D, 0) + DD.start_cure_timer() viruses += DD DD.affected_mob = src active_diseases += DD diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 492884b12a..b596f4dcbe 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -42,6 +42,7 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease)) var/allow_dead = FALSE var/infect_synthetics = FALSE var/processing = FALSE + var/has_timer = FALSE /datum/disease/Destroy() affected_mob = null @@ -147,6 +148,23 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease)) remove_virus() qdel(src) +/datum/disease/proc/start_cure_timer() + if(has_timer) + return + if(!(disease_flags & CURABLE)) + return + has_timer = TRUE + addtimer(CALLBACK(src, PROC_REF(check_natural_immunity)), (1 HOUR) + rand( -20 MINUTES, 30 MINUTES), TIMER_DELETE_ME) + +/datum/disease/proc/check_natural_immunity() + if(!(disease_flags & CURABLE)) + return + if(prob(rand(10, 15))) + has_timer = FALSE + cure() + return + addtimer(CALLBACK(src, PROC_REF(check_natural_immunity)), rand(5 MINUTES, 10 MINUTES), TIMER_DELETE_ME) + /datum/disease/proc/IsSame(datum/disease/D) if(ispath(D)) return istype(src, D) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index ecf4ff22fc..f2be67bf46 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -1,10 +1,19 @@ GLOBAL_LIST_EMPTY(archive_diseases) GLOBAL_LIST_INIT(advance_cures, list( - REAGENT_ID_SODIUMCHLORIDE, REAGENT_ID_SUGAR, REAGENT_ID_ORANGEJUICE, - REAGENT_ID_SPACEACILLIN, REAGENT_ID_GLUCOSE, REAGENT_ID_ETHANOL, - REAGENT_ID_LEPORAZINE, REAGENT_ID_IMPEDREZENE, REAGENT_ID_HEPANEPHRODAXON, - REAGENT_ID_SILVER, REAGENT_ID_GOLD + REAGENT_ID_SPACEACILLIN, + REAGENT_ID_ORANGEJUICE, + REAGENT_ID_ETHANOL, + REAGENT_ID_GLUCOSE, + REAGENT_ID_COPPER, + REAGENT_ID_LEAD, + REAGENT_ID_LITHIUM, + REAGENT_ID_RADIUM, + REAGENT_ID_MERCURY, + REAGENT_ID_BLISS, + REAGENT_ID_MUTAGEN, + REAGENT_ID_PHORON, + REAGENT_ID_SACID )) /datum/disease/advance @@ -13,6 +22,7 @@ GLOBAL_LIST_INIT(advance_cures, list( form = "Advance Disease" agent = "advance microbes" max_stages = 5 + disease_flags = CAN_NOT_POPULATE spread_text = "Unknown" viable_mobtypes = list(/mob/living/carbon/human) diff --git a/code/datums/diseases/advance/symptoms/stimulant.dm b/code/datums/diseases/advance/symptoms/stimulant.dm index 665fad2a6d..4861a44240 100644 --- a/code/datums/diseases/advance/symptoms/stimulant.dm +++ b/code/datums/diseases/advance/symptoms/stimulant.dm @@ -36,7 +36,7 @@ Bonus if(3, 4) L.jitteriness += 10 else - if(L.reagents.get_reagent_amount(REAGENT_ID_HYPERZINE < 10)) + if(L.reagents.get_reagent_amount(REAGENT_ID_HYPERZINE) < 10) L.reagents.add_reagent(REAGENT_ID_HYPERZINE, 5) if(prob(30)) L.jitteriness += 15 diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index 6b38902b6d..6b9266718f 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -9,7 +9,7 @@ viable_mobtypes = list(/mob/living/carbon/human) desc = "If left untreated the subject will become very weak, and may vomit often." severity = MINOR - disease_flags = CAN_CARRY|CAN_RESIST + disease_flags = CAN_CARRY|CAN_RESIST|CAN_NOT_POPULATE visibility_flags = HIDDEN_PANDEMIC required_organs = list(/obj/item/organ/internal/appendix) bypasses_immunity = TRUE diff --git a/code/datums/diseases/food_poisoning.dm b/code/datums/diseases/food_poisoning.dm index 1cd43b25f2..bfb9aa445a 100644 --- a/code/datums/diseases/food_poisoning.dm +++ b/code/datums/diseases/food_poisoning.dm @@ -11,7 +11,7 @@ viable_mobtypes = list(/mob/living/carbon/human) desc = "Nausea, sickness, and vomitting." severity = MINOR - disease_flags = CURABLE + disease_flags = CURABLE|CAN_NOT_POPULATE virus_heal_resistant = TRUE /datum/disease/food_poisoning/stage_act() diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm index 0c61fd309b..10f7bc0011 100644 --- a/code/datums/diseases/gbs.dm +++ b/code/datums/diseases/gbs.dm @@ -9,6 +9,7 @@ agent = "Gravitokinetic Bipotential SADS+" viable_mobtypes = list(/mob/living/carbon/human) severity = BIOHAZARD + disease_flags = CAN_NOT_POPULATE /datum/disease/gbs/stage_act() if(!..()) diff --git a/code/game/machinery/pandemic.dm b/code/game/machinery/pandemic.dm index ea490d10ca..2969831188 100644 --- a/code/game/machinery/pandemic.dm +++ b/code/game/machinery/pandemic.dm @@ -12,6 +12,12 @@ var/selected_strain_index = 1 var/obj/item/reagent_containers/beaker = null +// PanDEMIC Bottle +/obj/item/reagent_containers/glass/bottle/vaccine + icon_state = "bottle10" + possible_transfer_amounts = (list(5, 10, 15)) + volume = 15 + /obj/machinery/computer/pandemic/Initialize(mapload) . = ..() update_icon() @@ -68,7 +74,7 @@ icon_state = "pandemic[(beaker)?"1":"0"][!(stat & NOPOWER) ? "" : "_nopower"]" /obj/machinery/computer/pandemic/proc/create_culture(name, bottle_type = "culture", cooldown = 50) - var/obj/item/reagent_containers/glass/bottle/B = new/obj/item/reagent_containers/glass/bottle(loc) + var/obj/item/reagent_containers/glass/bottle/vaccine/B = new/obj/item/reagent_containers/glass/bottle/vaccine(loc) B.icon_state = "bottle10" B.pixel_x = rand(-3, 3) B.pixel_y = rand(-3, 3) @@ -146,8 +152,13 @@ atom_say("Unable to synthesize requested antibody.") return - var/obj/item/reagent_containers/glass/bottle/B = create_culture(vaccine_name, REAGENT_ID_VACCINE, 200) + var/obj/item/reagent_containers/glass/bottle/vaccine/B = create_culture(vaccine_name, REAGENT_ID_VACCINE, 200) B.reagents.add_reagent(REAGENT_ID_VACCINE, 15, list(vaccine_type)) + if(beaker && beaker.reagents && length(beaker.reagents.reagent_list)) + beaker.reagents.remove_reagent(REAGENT_ID_BLOOD, 5) + if(!length(beaker.reagents.reagent_list)) + update_tgui_static_data(ui.user) + if("eject_beaker") eject_beaker() update_tgui_static_data(ui.user) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index be8ee51f25..e753d19c22 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -1,11 +1,6 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) /datum/event/disease_outbreak var/datum/disease/chosen_disease - var/list/disease_blacklist = list( - /datum/disease/advance, - /datum/disease/food_poisoning, - /datum/disease/gbs // Terrible. It's only in the code to scare people. - ) var/static/list/transmissable_symptoms = list() var/static/list/diseases_minor = list() var/static/list/diseases_moderate_major = list() @@ -85,7 +80,7 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) /datum/event/disease_outbreak/proc/populate_diseases() for(var/candidate in subtypesof(/datum/disease)) var/datum/disease/CD = new candidate - if(is_type_in_list(CD, disease_blacklist)) + if(CD.disease_flags & CAN_NOT_POPULATE) continue switch(CD.severity) if(NONTHREAT, MINOR) diff --git a/tgui/packages/tgfont/dist/tgfont.css b/tgui/packages/tgfont/dist/tgfont.css deleted file mode 100644 index 568f178c2e..0000000000 --- a/tgui/packages/tgfont/dist/tgfont.css +++ /dev/null @@ -1,53 +0,0 @@ -@font-face { - font-family: 'tgfont'; - src: - url('./tgfont.woff2?958b912b123580c55529f68c4e2261bd') format('woff2'), - url('./tgfont.eot?958b912b123580c55529f68c4e2261bd#iefix') - format('embedded-opentype'); -} - -i[class^='tg-']:before, -i[class*=' tg-']:before { - font-family: tgfont !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.tg-air-tank-slash:before { - content: '\f101'; -} -.tg-air-tank:before { - content: '\f102'; -} -.tg-bad-touch:before { - content: '\f103'; -} -.tg-image-minus:before { - content: '\f104'; -} -.tg-image-plus:before { - content: '\f105'; -} -.tg-nanotrasen-logo:before { - content: '\f106'; -} -.tg-non-binary:before { - content: '\f107'; -} -.tg-prosthetic-leg:before { - content: '\f108'; -} -.tg-sound-minus:before { - content: '\f109'; -} -.tg-sound-plus:before { - content: '\f10a'; -} -.tg-syndicate-logo:before { - content: '\f10b'; -} diff --git a/tgui/packages/tgfont/dist/tgfont.eot b/tgui/packages/tgfont/dist/tgfont.eot deleted file mode 100644 index a72d5ca58978491b243b306e13d16a0ec26668c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4240 zcmd^CTWp-g6`t#V-TimHx8G}f*K4o6f8yBd__m9k#G%MIff9ir38Az~*Y^4n*1N{L zh6F)Ctx#1+Y09mrEfPYg5)`RZa*KrONI%|E`m`@R0Vk zvpX|q&YYS5%sJnjnYkP$efq@D(Y}QCHy77S8`sXhe-5kY0qpN4B5A*gvCvuu@wrIpg*R7~hF@*Lvyv z22GO}(XZN>YH7Xv@~eYegar42x4luTH{N;v;|d`mw8^iO?o`c=a{Jo$-`TXk8pYU6 z0iOf8x%v0{&V~;EgV?PRPY+&sP6?@c``XUqY#O7nh_;(BC0YUUEI2AD=UMm>vZI_GMs$kR_vf}PkLba?j`a`lQvtc>&9BX4*~V1o5=^DT74^TU%N@~>?n`X;hjsn zJo2eO5V`;v#P=cerK{~Z7r<4s52J=vz!#)|wptbVO&c?kCRHWct(7v!3am~eI#z9B zoQ+Pk_W$=3@D1>4+YGQuQ`u12SJm*F$_j%`_(EmnlP0XHva)Uyeo|RsrwNOytWed& z-c%VDCruz(Wre|}*~;(&X~KUhD?c{Xw~>`+kWP}f=?s0H8SEr`gP-Ov@ZSnV2Q?d1 z+ei0-3Xv2!033`U$dIC|YyG*&qg3~bh4DnJm>Z@2o)+t+iSfdumvC6FSU5@x#aSAn z9;AC_f`L9aaPub}pfj-+jKUgWlZQ8&5*LBWGeGo(Im6{DX=&&)W%WH$KZk7wQt zbPlA=Xg3#@m=T7x&qyUj$dEy**@pP5_50}OG2a4TqUV37?li_laVDc7&XTxA?jpKxJDPxqol-8)Kq+2CZJ_B%8_7E9CdS?cDzJS`leYS01N zuZ6fn)AT5vMV>4qda16Zsj~JcEhgN=EX~pL&i-_If9li01JfgiLUi`b%zXOt^cDNt z!=Lb?d2;(ixVx`A>=&C4-p3i2FI$ddeID+T`xB1^91#zk4<)$8CCy9-+jT`zx2Aed zeccMtAbmfS8cL;xelb0lyZgYIpMH0+a{tvq8o8@7^%HJthd&JWgwVkBxEq# zucc@#p^R{ZPUgILc4}fAXw&<1N9dkT9dK0GEV$VzV6&I{1xYSCSRA@Q)Vz22?SQ^5ya(4o(UFtR#=5-IAYsYAhszb;NNq#WZDlus(s1IeBN zBqYx>_Lp7adyG9#Ij6_(Wt={*1n>DO3sFsSMyJ2RRL#@{Mn%S*Ka!u3>!bsi*{`lZ z#W8G}160e#eKVu*CUe>NctPJqlJAG9{!zecVya(zH%WD=nU*Q_v}W|i94B_jMx-$e z*)xKj{X!2uS-eJDw#O7i>A^W&Aj!XSxIi%W%);pJW9;ZLVsT?2+SD_(!@)ii-Q2K|HE{sjvPY#icYE>aTgZp^>gS*I(Cjnp%oF4k zd4zle4}>xv1?z-F)j<+Vi+BvcgKx5NplFs&0g@gt=;bDhg|q_U#8l1$rrZe}-hh?| ztZ6uQ)G^~tOy#K?-xUHPfxuqiRMno_s!Kh?iH_`%w3A6EdOBp+)V}0UIvgA5>vkf# zrOSAP88WU}!U_wMa>ZprF{`R%h=thlpJ?Owq%bjGGo$^#bZ{xSS40v&nEz zXEK%uC%ddf^pI^vd)-*N)3MEfVW%vebp-9`jHywPh)AhxmZX@R8-i1=X)_v+3~?(u zW3UK1HC^iMI^3=mhDf;e;sAB?#;)+CUL(sG3>v^NY3hJx|oV&(m8UueZ`){$#yX;ux@7^&hq+ z%wHx;xHm133n=U42|R$u!ENASoI&2i!*?CjeEXSP#^bmGIzu-6zH=DA2uc4my49jLDqHnXwN$M&HcRz#b)-^Tsae%pb!1_! sTH3te!1(pXYPqqtI8rIE*!9|0b*Vi;i&hgj^$XRdwMDqmAFq`DH%Y7&Jpcdz diff --git a/tgui/packages/tgfont/dist/tgfont.woff2 b/tgui/packages/tgfont/dist/tgfont.woff2 deleted file mode 100644 index 4dffb0f83cea77ede74e3000e3f1c3c2c3586e8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2040 zcmV2eg}a@8&M5WluuHJ?2ChJPF%+}+O8~B zOUFiH+6waG%+2?R6yEpqZ1exzd$|S}=&D$iF3LqWQ;Y>{fbRXsPI=(D+`lo!S4*sy z_*%dLg<)W)7SOUiZ{26Ib<%oJc=j((1sxP8@e0q}`ZBk^U{LUbD_slS#EfIa%t}bh zm35irFsQ^K?SvP4<6mfkqTn7*UR+(ma z+&wr6wu7k4kc^>>N5HR(4xxYuruS@2PBLOjGnCyipy))P0G;7w07dqXp9nTX0HYBo zCmLOK`QX8y;7=Hp06imMGhmweiGeRPGHqA$r76lA;wz7oM^A&%}%p5$Jkon zIH%EJwC>7gS`+K7y`zVVhvEk;DT;y1$w6+yg1<_)vcOeY&3P<$DRHmcjH3ALC>rcemK|M37{~iwHnJei`Oc`jxE>#?4gJ z2#LH!l=Wp4zjV1Nxn5wDy@1Hz;c_ldr!)SAGO0d^gap7>HGUDoKr?_K4(&B+yU-A3 z9D;<(mqG`IBG_s|yLp}AIEi3S9tl86y?DPgIGE?B(~&8Ca5kBv^lGF4pp=wpHX1?> zSs6kSfsQ9+K@owlw0%&Opm1jU1?xQdqkg479IOS^0nt}J&h(4C)rG`T?Ks+k*)A(T zwe9n~hnbg|3KyiRfI~O;cskQXgjSiPTC_;&^)%?jHMxmZvX$M9!yP@zOIt;jw5aNK zO`0&BwLZ7k=tUIUK&E@p^_TUoGAZ9bMaKbUCO4X(d(r!)?XC?tHk)$-ztI1#5CcDt zM7B5`fmb-}Eu}Ch4lK<&>ijxz&C7zVreUZZi^tROG8RguTxXhwL^^~mjDuk|y91PH zy>*(_jY?V>JDmNc&*1T=p?T-Lp?_CO;`Qj zM%wTR9~^pvgKax_i`~dbMuorro%YCtYXb%vKbwII7{YK&ZavRPV`Ep_KW_>;>k;Z^`pe z9fwFIwvq}mg!TPeapgX4;_+abbx+o#jKnm}(JAJ|M>IYC;HT_mG(Y2f)_Je<9{;)) z&m)Q)@AC}rXu+PGj9-FqBqtFknj}e$35d!4)9QiuJ5^!_J`6c=9?n9&6@7?QVJA8) z;iUOE6Zcj0JNC8lG`5|%umgF%ZFTtP!*y_FEhH|9L=A_s_nWDo)}3l(a*ulb-mUs#&a^gm@Wlmr zeQg<9Y;xbyd9R;xX+y_zC%(NGsoUt858T=z^yk;zeDK(%drm+7QuG^1Tqu9{trwR? zAo2vy@J>8xh)@rzyf9+8o9=Q~&aaRT#?EvQdmhNX2m+}hJfn+_k}kzkFgzLShUs>` zB&-fnZyrzLx%?+z`7$x-uXN`w+Me9dUyyX>%m2GpQ?2#tH&X&pufn37fY#^ zb<3(r_`DT+<8P*$RT=DC-FToB`!ONU6`YNI$)9pNLQd5GzjSp6Q?Fo2D*CYhfA+=k z(SJLwcn-YKUKOx7fJw@I0IPZcqSD2CTy(fgIsouxuJ{5j11lybJjP6MlE9#*=3r(O zD*~?M%2Nmwn*p&1V#aKAAZg(T14H=nW-8v(H%wpC?a^6IXj zu5Z`7-Tt%#xxC62=mPu{GTk^S6g+H`Nd4{f(|nplr3w887nE};%Qf|oT!M>q2|oCm zy-co&{8B}0+)sE1^&Pg{)b4s*vZ)p;1l#FLt&@1^T!J+Ux7Bltq5NeXF5Xs@GpF3@ zyH#G%5@19SgD5f}BQhZ~ViAWd$O^V;NG;Vxd81U@6t$o!cwFN?7() WR)j=lo3@wi3wbwC{>lOX0002$P~p%3