From 3cf3268c76592d6405ec5203d307967ba4d0d168 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 1 Jun 2019 22:52:03 +0100 Subject: [PATCH 01/22] New non-harmful medicinal darts. --- .../projectiles/ammunition/special/syringe.dm | 7 ++++ .../projectiles/guns/misc/syringe_gun.dm | 12 +++++++ .../reagents/reagent_containers/syringes.dm | 34 +++++++++++++++--- icons/obj/dart.dmi | Bin 0 -> 323 bytes icons/obj/guns/projectile.dmi | Bin 35700 -> 36029 bytes tgstation.dme | 24 ++++++------- 6 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 icons/obj/dart.dmi diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index 4a2a354ca6..62a6e2e88e 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -59,3 +59,10 @@ S.forceMove(D) D.injector = S ..() + +/obj/item/ammo_casing/syringegun/dart + name = "syringe gun spring" + desc = "A high-power spring that throws syringes." + projectile_type = /obj/item/projectile/bullet/dart/syringe + firing_effect_type = null + harmful = FALSE diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index cc1b321e3a..2e125f80b1 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -102,3 +102,15 @@ else to_chat(user, "[src] cannot hold more syringes!") return FALSE + +/obj/item/gun/syringe/dart + name = "dart gun" + desc = "A compressed air gun, designed to fit medicinal darts for application of medicine for those patients just out of reach." + icon_state = "dartgun" + item_state = "dartgun" + materials = list(MAT_METAL=2000, MAT_GLASS=500) + suppressed = TRUE //Softer fire sound + +/obj/item/gun/syringe/dart/Initialize() + ..() + chambered = new /obj/item/ammo_casing/syringegun/dart(src) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index b2b7ab88a7..430d7e5d5d 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -14,6 +14,7 @@ var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun materials = list(MAT_METAL=10, MAT_GLASS=20) container_type = TRANSPARENT + var/Sname = "syringe" /obj/item/reagent_containers/syringe/Initialize() . = ..() @@ -72,7 +73,7 @@ if(SYRINGE_DRAW) if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "The syringe is full.") + to_chat(user, "The [Sname] is full.") return if(L) //living mob @@ -137,8 +138,8 @@ return if(L.reagents.total_volume >= L.reagents.maximum_volume) return - L.visible_message("[user] injects [L] with the syringe!", \ - "[user] injects [L] with the syringe!") + L.visible_message("[user] injects [L] with the [Sname]!", \ + "[user] injects [L] with the [Sname]!") if(L != user) log_combat(user, L, "injected", src, addition="which had [contained]") @@ -147,7 +148,7 @@ var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) reagents.reaction(L, INJECT, fraction) reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.") + to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The [Sname] now contains [reagents.total_volume] units.") if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT) mode = SYRINGE_DRAW update_icon() @@ -158,7 +159,7 @@ var/rounded_vol if(reagents && reagents.total_volume) rounded_vol = CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15) - var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") + var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "[Sname][rounded_vol]") filling_overlay.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling_overlay) else @@ -262,3 +263,26 @@ /obj/item/reagent_containers/syringe/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") + +/obj/item/reagent_containers/syringe/dart + name = "medicinal dart" + desc = "A non-harmful dart that can administer medication from a range. Unable to hold any caustic or toxic chemicals without disintegrating" + volume = 20 + amount_per_transfer_from_this = 20 + icon = 'icons/obj/dart.dmi' + Sname = "dart" + //harmful = FALSE + +/obj/item/reagent_containers/syringe/dart/afterattack(atom/target, mob/user , proximity) + ..() + for(var/datum/reagent/R in src.reagents.reagent_list)//(!R == /datum/reagent/fermi) || + if((!R == /datum/reagent/medicine) || (!R == /datum/reagent/consumable)) + qdel(src) + to_chat(user, "The dart dissolves under the caustic nature of the chems!") + +/obj/item/reagent_containers/syringe/dart/bluespace + name = "bluespace dart" + desc = "A non-harmful dart that can administer medication from a range, with extended 60u capacity. Unable to hold any caustic or toxic chemicals without disintegrating" + amount_per_transfer_from_this = 20 + volume = 60 + //harmful = FALSE diff --git a/icons/obj/dart.dmi b/icons/obj/dart.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fd6be8ab14cf7524e410885b383fd496c380e35d GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Ge3`kp<+&O zSV2+g_bqMz%R#PuCoey8o?uLO|*J_e<;{JTt#yE*~w OVDNPHb6Mw<&;$TXka+U| literal 0 HcmV?d00001 diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index e4a39903b338e2d77286bd06b9e3be7cec729306..5ed5a434baecc7aa7deaf309ff31babe08087e2e 100644 GIT binary patch delta 15260 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 diff --git a/tgstation.dme b/tgstation.dme index f2cef76dd9..c9098249b0 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2505,22 +2505,10 @@ #include "code\modules\research\designs\AI_module_designs.dm" #include "code\modules\research\designs\biogenerator_designs.dm" #include "code\modules\research\designs\bluespace_designs.dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_all_misc.dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_cargo .dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_engi.dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_medical.dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sci.dm" -#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sec.dm" #include "code\modules\research\designs\computer_part_designs.dm" #include "code\modules\research\designs\electronics_designs.dm" #include "code\modules\research\designs\equipment_designs.dm" #include "code\modules\research\designs\limbgrower_designs.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_all_misc.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_cargo.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_engi.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_medical.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_sci.dm" -#include "code\modules\research\designs\machine_desings\machine_designs_service.dm" #include "code\modules\research\designs\mecha_designs.dm" #include "code\modules\research\designs\mechfabricator_designs.dm" #include "code\modules\research\designs\medical_designs.dm" @@ -2538,6 +2526,18 @@ #include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm" #include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm" #include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_all_misc.dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_cargo .dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_engi.dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_medical.dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sci.dm" +#include "code\modules\research\designs\comp_board_designs\comp_board_designs_sec.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_all_misc.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_cargo.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_engi.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_medical.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_sci.dm" +#include "code\modules\research\designs\machine_desings\machine_designs_service.dm" #include "code\modules\research\machinery\_production.dm" #include "code\modules\research\machinery\circuit_imprinter.dm" #include "code\modules\research\machinery\departmental_circuit_imprinter.dm" From 0fa445c1534d482d2df2578ae9319217e457a63f Mon Sep 17 00:00:00 2001 From: Fermi Date: Sun, 2 Jun 2019 03:24:01 +0100 Subject: [PATCH 02/22] Fixes and test. --- .../projectiles/ammunition/special/syringe.dm | 6 +- .../projectiles/guns/misc/syringe_gun.dm | 1 + .../projectile/bullets/dart_syringe.dm | 50 ++++++++++++- .../reagents/reagent_containers/syringes.dm | 70 ++++++++++++++---- icons/obj/dart.dmi | Bin 323 -> 903 bytes icons/obj/guns/projectile.dmi | Bin 36029 -> 36031 bytes 6 files changed, 108 insertions(+), 19 deletions(-) diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index 62a6e2e88e..331ad67837 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -61,8 +61,8 @@ ..() /obj/item/ammo_casing/syringegun/dart - name = "syringe gun spring" - desc = "A high-power spring that throws syringes." - projectile_type = /obj/item/projectile/bullet/dart/syringe + name = "dart gun air canister" + desc = "A small canister of compressed gas." + projectile_type = /obj/item/projectile/bullet/dart/syringe/dart firing_effect_type = null harmful = FALSE diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 2e125f80b1..be9b2c2410 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -110,6 +110,7 @@ item_state = "dartgun" materials = list(MAT_METAL=2000, MAT_GLASS=500) suppressed = TRUE //Softer fire sound + can_unsuppress = FALSE /obj/item/gun/syringe/dart/Initialize() ..() diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 023c3b9090..a94fa6f227 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -9,12 +9,14 @@ create_reagents(50) reagents.set_reacting(FALSE) -/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE) +/obj/item/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE, skip = FALSE) if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) // not completely blocked if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() + if(skip == TRUE) + return reagents.reaction(M, INJECT) reagents.trans_to(M, reagents.total_volume) return TRUE @@ -37,3 +39,49 @@ /obj/item/projectile/bullet/dart/syringe name = "syringe" icon_state = "syringeproj" + +//I am in a mess of my own making +/obj/item/projectile/bullet/dart/syringe/dart + name = "Smartdart" + icon_state = "syringeproj" + damage = 0 + +/obj/item/projectile/bullet/dart/syringe/dart/on_hit(atom/target, blocked = FALSE) + message_admins("Dart landed!") + if(iscarbon(target)) + var/mob/living/carbon/M = target + if(blocked != 100) // not completely blocked + if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. + ..(target, blocked, TRUE) + message_admins("Checking reagents") + for(var/datum/reagent/R in reagents.reagent_list) //OD prevention time! + message_admins("Reagent: [R]") + if(istype(R, /datum/reagent/medicine)) //Is this a medicine? + message_admins("Is a medicine") + if(M.reagents.has_reagent(R.id)) + message_admins("reagent found! with new") + var/datum/reagent/medicine/Rm = locate(R) in M + if(R.overdose_threshold == 0) //Is there a possible OD? + M.reagents.add_reagent(R.id, R.volume) + else + var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - Rm.volume) -1) + M.reagents.add_reagent(R.id, transVol) + target.visible_message("\The [src] beeps!") + return TRUE + else + if(!R.overdose_threshold == 0) + var/transVol = CLAMP(R.volume, 0, R.overdose_threshold-1) + M.reagents.add_reagent(R.id, transVol) + else + M.reagents.add_reagent(R.id, R.volume) + target.visible_message("\The [src] beeps!") + to_chat("You feel a tiny prick, and turn around to see a smartdart embedded in your butt.") + return TRUE + + else + blocked = 100 + target.visible_message("\The [src] was deflected!", \ + "You see a [src] bounce off you, booping sadly!") + + target.visible_message("\The [src] fails to land on target!") + return TRUE diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 430d7e5d5d..592d092cc8 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -14,7 +14,6 @@ var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun materials = list(MAT_METAL=10, MAT_GLASS=20) container_type = TRANSPARENT - var/Sname = "syringe" /obj/item/reagent_containers/syringe/Initialize() . = ..() @@ -73,7 +72,7 @@ if(SYRINGE_DRAW) if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, "The [Sname] is full.") + to_chat(user, "The syringe is full.") return if(L) //living mob @@ -138,8 +137,8 @@ return if(L.reagents.total_volume >= L.reagents.maximum_volume) return - L.visible_message("[user] injects [L] with the [Sname]!", \ - "[user] injects [L] with the [Sname]!") + L.visible_message("[user] injects [L] with the syringe!", \ + "[user] injects [L] with the syringe!") if(L != user) log_combat(user, L, "injected", src, addition="which had [contained]") @@ -148,7 +147,7 @@ var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) reagents.reaction(L, INJECT, fraction) reagents.trans_to(target, amount_per_transfer_from_this) - to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The [Sname] now contains [reagents.total_volume] units.") + to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.") if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT) mode = SYRINGE_DRAW update_icon() @@ -159,7 +158,7 @@ var/rounded_vol if(reagents && reagents.total_volume) rounded_vol = CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15) - var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "[Sname][rounded_vol]") + var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") filling_overlay.color = mix_color_from_reagents(reagents.reagent_list) add_overlay(filling_overlay) else @@ -265,23 +264,64 @@ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") /obj/item/reagent_containers/syringe/dart - name = "medicinal dart" - desc = "A non-harmful dart that can administer medication from a range. Unable to hold any caustic or toxic chemicals without disintegrating" + name = "medicinal smartdart" + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action." volume = 20 amount_per_transfer_from_this = 20 icon = 'icons/obj/dart.dmi' - Sname = "dart" + item_state = "dart_0" //harmful = FALSE /obj/item/reagent_containers/syringe/dart/afterattack(atom/target, mob/user , proximity) - ..() - for(var/datum/reagent/R in src.reagents.reagent_list)//(!R == /datum/reagent/fermi) || - if((!R == /datum/reagent/medicine) || (!R == /datum/reagent/consumable)) - qdel(src) - to_chat(user, "The dart dissolves under the caustic nature of the chems!") + + if(busy) + return + if(!proximity) + return + if(!target.reagents) + return + + var/mob/living/L + if(isliving(target)) + L = target + if(!L.can_inject(user, 1)) + return + + switch(mode) + if(SYRINGE_DRAW) + + if(reagents.total_volume >= reagents.maximum_volume) + to_chat(user, "The dart is full!") + return + + if(L) //living mob + to_chat(user, "You can't draw blood using a dart!") + return + + else //if not mob + if(!target.reagents.total_volume) + to_chat(user, "[target] is empty!") + return + + if(!target.is_drawable()) + to_chat(user, "You cannot directly remove reagents from [target]!") + return + + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares? + + to_chat(user, "You soak the [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.") + if (reagents.total_volume >= reagents.maximum_volume) + mode=!mode + update_icon() + + if(SYRINGE_INJECT) + src.visible_message("The smartdart gives a frustrated boop! It's ready and full; You need to shoot someone with it!") + +/obj/item/reagent_containers/syringe/dart/attack_self(mob/user) + return /obj/item/reagent_containers/syringe/dart/bluespace - name = "bluespace dart" + name = "bluespace smartdart" desc = "A non-harmful dart that can administer medication from a range, with extended 60u capacity. Unable to hold any caustic or toxic chemicals without disintegrating" amount_per_transfer_from_this = 20 volume = 60 diff --git a/icons/obj/dart.dmi b/icons/obj/dart.dmi index fd6be8ab14cf7524e410885b383fd496c380e35d..50ba4fc1ab0b860d29236487f71be333701e4675 100644 GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGo?NuQWB`&GO$wiq3C7Jno3=9=> zg2M`mO22;zF8KKMiI%sn*10q1gExd4Tr__0Nawtd=E(pc$L!IgGahGs&TBLlba@MT z2Z`p0PT`rd!y?$Iy9>zX*=cdPOQ<+lF=q#tbCZ@2=WNFo(-vP(O)nkw6&l9++NL{M zrW>WQhTDs?ipTrwF=$i+yJ$EUazt*--NNz!Y}{A^(K7Z+G<1S#I-wW$#sI zzw*@2Pe;>h_y5>koUGn`^iX48`YUFO5&;D^#w7ei7VDYt#dr3Vo!!^}e~(_mt!TBf z4?nY}{QprGELmSu_GsDO)J=;Y-~Rn^@~-$J&sGQ8z15w(efs{cW(zy(m3KeRKmR^v z|9$;!?9GkReC>HQa@)Q9W`E50@4s{U_54X7#+>4HUw>?6I^<~a{X_1HPtrTyKQ^~x zK9qe~_I+2a{QirQ4F2q=0}MF?ni+5r4b_`;PM@w1HT3=Uwk-7aPPY9WvO=40=H%Y4 zp1(YER!Zcw+uxn`7ngJLzMuMd@At|Z`8#Fp`WuAq{a%zSoPNJs#YE~pi`N8+a}8oM zf*w1q-1xVjkx_Srmg%FQ@wmNfa1xDqqyZUR{lFV5Z@85nZN&d&N@s4Przs^as zz{qK9*Z$3|zMbwgKlgS8OGhFf#I1)vGbUBoIh?V#l^1x|xxJ*Y{$F=@|J0AW<^HdH z_>;lVMqZ(f+t5(Q`KW>e57QA0qUX=Lj*}^i>{vACfMRKxhU5IY_?p*Q7x@2vU%yN0 zb$xm+-;b()Pw(XI-&a*E`g-%mr*9)-*6^0+_#E2UGHr6$)DUU+O|uWmC@i~Zv?V4l zCth}=5gUIFM~A9)nAfVT`W~~5?Z@0Wl_Kv7={i2$v@zFd+mS~CJLf)H$8ojvz{3C9 oi!7LTSX??_6oSopIK|GySNd|czopr0BOH@$^ZZW delta 261 zcmZo?Kg={i+{uB3nSp^pTq@rdNJ$6ygt#6!a3E~mW0{2M?(XhUQBeg21)ZIpO21`* z;!a*yC4kBpOM?7@862M7NCR?;CaN0OGZgjo?yxWpGQMo=r7-8wq$86;6oOAWbaor7 zZeAgA!tBW-A8oHQzO5S`YVmNcGEmK76TJ4o#5MBZ)$^=xEE%pdT0d~NlWhVT7vbsR z7~;{HoFKuvI6-6q6Qj`29wsL*FE1vS&yo^TL|7XS98u-z)bBf{@BV0V9`njNphAlT zk)EbN2Z;$$(}eWaUTmDSsKT=7=lUgaeTSCcX}kCvGtFUINYbNtwN>o1bAR~ zFtA_a%R8EM71G(Ve>Z=sY5QjFS{gp7bvf>7cYNssN9k?MIS)FQBpl7mPpQ9t{WE9d zf;aoy$4ao8@#w4Rd(pEMRgyRJoM?LWD6vlLR{R{D40etm`};hf`^+^T=03Ew{Xw40 zrCUWdHMOg@c(GQyigFxvA^#PhcQjT|M!+41Tl)=pET4Y7tf;KaIXb_d%rk$Y&8eev zx9h~>%~x()?6mO300aXpGP-_K+1dqNa%S&>&QSwAd=ogevGsnH~Dm9 z9tXqcrF(*l8Sn5st~R3Gh=p%-8O~eKw#nVLVhcuKD$zP$-vNXv_&FJ1m?<;GqvU+@ zaqVN^rY#u-g^8{009iz*f<;@>{Ce>5EOCVnXRL}d6%Qc}dFP$H$t@Z5?Ty`o9;>PE zXs)Q^jD^~G=ho-z>ssqmfp59mpE5RN|NI@Mu*E8>(0qF^QCd)7UQ1bzB^S}qDD?p+ zX6x;4d4~X6TzwsG=`k!sIgl>J4u5&Ms!a0*C~tQC2X=%6=-Y>r*tInIQs>5xsd4OG z({%5<(mkc9uOAA`NMC<+ebe-VO? zjCNPVts+wn_9w?C7~Af$9seo@y~T_wayysWOC7i zryT{y9)0~9dDj*UEujNqJ|>5a>UYIt4reaMo?)hz#C+<%_Nk_(p-0}t;HjW;RR6gc zIT0}YFA#4noF(+I8$MMecbJZ>jV$*b$D7=9a&mI4+e)e#bWX_}Hdd3x0y2tMVkH0T zw+@I_ZMDZi{)#6W05bGI4QSaYF|FAIzZUZFEqSJZvc~(QlNx#Ojuz@|{HKoy2vOO1!S_lPrtTA2cq>}obQqj z7ET=*J)JQMlK-%vB_%btvdIzZmbnReu8W zr065H_TpS{+WzrFDk8FWxXH0VT`LCZ?t>YOv^DnQ^Faf;k zE5B?_zblOyHeGo@+Ko#eE#In^!3H9tVQtu$KUQ2f6FA--2Am@(7+8T zmQ@ezmf6q$K{9y>8q_`746?xx9v#pD_^(YBoiOuB8sIRwA6XYM{U^N$*RDbcVwiCJ zm?-WagGfkpo=Zt#y?{jO!2`4Z_a^v%H5SQt*rrQh#4Q1$=DCwk))pzWoZ)*9&^Zh} zV7hsw?a;x3IIpQ+o~AKbWcik>?(>FAV3GFDqhu zM@zt>ulSe$O6avVL~==pz7QL)HTz;U%iWbwdY;~&nn?2NqwYy(ORK2dRdJ&yJ@c^V z7ZBy>`3V3Om2@N|`tz?sq>BMfYj)Xmq5kSjtJZ@~D`VQ#gLI!D+mxbjB`&tj}K6(J@cnpdb zHtXKIwlZjD^@MFJ8s4xOP#PEyycy-U*9)fYldA2qyxP$0GwZUMmpoV#MrSQd%cxdNJj`Zw$;}jmmZ;Q z2n}vdvgd#qKXaSEIjA&OR+86>cnH^VlWU~p``OFM$`MuFq?V&3v|dQ~ZLK|ef2}r5 zxQr49L(fj+G$aDH&g2?OB0V|A(=UQB{a9LB6 zEw3!fma1`(l<>(dY~UkFkxu1Zkxwm`gW|!lo{g&gy@^_vGxKvdTIs`?aaVrcntFN> znVI+0wY0Kxb1`LPWY)K~q}9}j>+0)aKrWb@yCkx_yi7$)d(@*ygu$~qJCdPU_#r+X zvv52tE{?1M{LPgR`j6xoK1Mvt=QM-Z0+};tb-^F_r2!!Yup0Sx$ zpj@6kW0d>{q_xfp#-~VNv@FFIQ-RC~hp6eDm!&%BDR$a3LOcSCLXER<%Zbd>OJyY` zb2r%k-)$0Kn*r;4ZW^m%BqJMljLZ8)Y+YRw&PAU- z#e*zQ->T2Itm1;lW+TT}NyFORzo(-;G=7TG&n%5SpG;ihc-&g>>Cc;DF?Fp3QzI)h z%|cAgEoAd35Mb{E#C-aMTR6_vq@ti8<>@IpkR}eY3rghVa$X|M#h!GhcF?PBXG zQCv|Y$x^w#ogma+>D;Hu8N+z`RO0ll(_$1VuBsKiWvblLn7Zn`FTd|4 z*eO6m0BDi6pPvguP8VGG&==^7tl;2}<2BkTw!J)MBr`LN&zY1pq)5d>ic2k=`C z{8TB`EbQQ(hnV?yqB4se8W5}I_YrIX5~5c7YUyH4=xVdCHf<4OI;W|X|98J}O~7gs zpZxz`^K;Mu4s3rQ8$rcbUHgQf=i%@_JO2UAPQ?Ji=HfrKGXv(UJF3T+NS zPDvTgTy~xaYUaLb-EcuePS)zACcx(0^#64>j-E+SBXx7Hu^W)foy!~$>k0Qf)Rlf_ zQ(NE0_Y1O|M$5dqV6AJS^Q`j2KwA5Szpj~ExaOt5RG@_6ap0gFHwE$A9(?l% z)d%lIQ@{USScyVo{+H=e>G*%G--{RbchMg}Rxl(G=U>n9fA1+0Ybl)MhDANq)JbOw zxj?68A{K&fY@bd$X!QleO|asa_&mdU(T-^kmx~4&I(p*Sm+hq>Zxw_0HY0Z^q~_i6 zx|+-T_lvQr@MmsXZZnet8h=MRSDSyyJ@tew$tl@bT)y!mhE z_BB7u2{_f)i+f}37{vIw{c_fb`+{R7h31u8Hs)GCGjlXvy)|fK;vgf%@45m$F*rch z7g*n3$FG+vfb6eXR}=%@miLI3rr}+0gVa~6*%feN+AL$P;Q6N&;uE-5pPc^#wT)rmyw#<7g9Icb=znvzl*7;sXwHq z9mkIo$`&-m$rH$mb~n`4imXDz`!xJI^ykC}>gwvi{mv~1jE1~CedVIULPgErfv@s@ zzpvaLQRMDeNi>XNO>;*}5ws(z1{^oX9#qFf{+Z+;_HY z#X(KeOYZ01XhECXx2`j|Un*e`V*%)J(MkaYnEKr3vZY-?`m{4m%=-HJ_G|Am6_sfD z7~Ia^S5~^8?HgA=P*zrc$4M%bv%PIg2luAh+1atzHN+<%fB}a`M~$Z)uiv6(L@KJQ z(UB>{SXnt)$?*x8s$LDw0Kh}jS!L$&#B+$HQ0x_zsX zxH^Z1h`tsU4v&oZWo6wzJ~_$!@&#vhb{0U6jJ!I?IXHM15gF-Wxw=*&S**#-&W@*9 zNdEZoW2@T=eebnHycdS@2$B7e-f~cx#se1e=9rutVefO}?!CwS{pfd%4>ecKE;ky` zaClqoBow&nbMn(fYS+0GOy58x0Cqc>J4W}Dp}LZX+59sBQQ_=KV=Fmu|0aU&&SB%(J^whR4}M)zl<^$zWRV!xyISL7|rp0U>2gr zAwGc#!=40!7(@qZSFr)*rzsdl12~A*ezV>LPW#K+XN?D)v_o4b-&5$Pf6rw5^+n*9 zBA{LY?g<GdV2PjlsF z!zHUOFLo;P4JxD+{Kw%=SOU8VFsC&-*k%0rgxU!LO#QYmI~M+ws1zv z8Ci4Z&K(|M;YWA*7FT1_(;3U3u_~-u>6~V3+-WjE zfjbdob7!54LCm>@g}t12rY}<(d5epe)bc7ljDGjkPS$P-nNEE-7j{{X89W|l2q59U z{upMH5S!gP)h!Q58XE+;_lXj#L^V;%tV`uss%zq(EyQCC7Pp zi`7_92X?%pSPGqoGc(U5BV{j)_u$d!Z?Q5gaUPzxXmUZw9tYdbrrY1FV<4oa|LR$L z<{JEt6GgVKZxn1qZKd@My1pNsB&B`#N*7R6_Y>653u~qO8jR+|Pg*z^y^a=_J?aq*YrBabj zbiNSwIyFDw__&tvxej=Nw*S>z-tf(}oIz7x@L6m-TJ8zVogk>YSGl$Gq_^zd zHQ)Irx0vI41r^NT;|D)O8|N&+=&#n6u`L9D#n*i~QfP*up;pc21#MHsJsXrlVz;;8 zj~}uxI8MA&Dsa>C;y;w*Q;YQSh?~pRElAcaAQ5IbQK9_y(cs48`pIla7Kfa(l(j8& zeA7tnq@d?4uQ82(yN$l%Y0py)?2GmdwDn<$#bqx=QLC(8lrm%RXp!;p^P>a8UZ)%! zZ4~L0+7^#YJ32b3sHj>XR}xYgM$}a}ZzoEO8R;%0wLew|95`2sa=tDc2lV^}(VkR( zX!?$7+7|*B+7mC@vu?T75t6l!h?2r@?$U`yMs6i$?&Wu7D!X1AY>5VE>u}9cu1(FX z*E)P%;|7q;E=nB@Kf+`_iDh#`#%N7`rP8F%T?RauSfh%JSIQqX_V&hyTy@Avt*EFG zcwZ-l1wa|jK|Vc1|M+$(qfbPHOaWvcA@2gLHoEfr&~1nI-mCceSnv>QE%=7$GdXYw zp7H}FYDfK-DToApz&Y}{df|B4l#xRy0ZE zWOFZD`($n^ro1p!yDQm*dkEvNLr7=Anx2TzkLSG{2;#Oga%i{-YN;N9*PcqNf+ia9 zwk~NYJ$xPt^N%z{(M?z^NanVKf{^$L?1p|q$4~l@-}}~Dgk#+$kb~?9uaIasDS(k> zG1-tBDYUg^%=hV~mR4{O3Ts|D<8OTNSg;__&-~YYe1f~7%I`-^8xA3jx#SGSK=i(e zxiLCdN1t26YM;3Jv)R>l1%O(wAEnP%AGNAfuZi{hO6O-z3t`N{C-=``av|BfQthKg z$DZQQb@$qs8(3Jr2P-_J=3-NgoOaS2W{b5v#(ZSyqp*%`GI31w^9o>MTg9%4aPa*! zKhKW?(JoMO75l|~Nl*=A;VEjLvcS=ulr9~lutF2uU@v40d4&KU7nYWGUG6n=pLWn& z!I|7kI!V~kHoAJR#HJv#{cd@A@M3)!lIusRpJ>|{wxAwj+pIB=7hrSmP`#_VX_28VT-Isgiu{@QduncJgdD?3{QBI&}57OF@-L>hJ@hO~{3iH8)Agpn}~Bay_B^rQQWEzCr@OxOD-9?i4>H1rbWy%Nir zboO5PZLnXUCkpy|{$Os5+Ms@CSRohCvv~Y7Zg5TEK3J_J7jzF_sV0l-CWKXCD>`~G zazY^GQd+P%@C8CzJUssb=0nkTip{8j1N=nCo51g4CfaD8q5%TC?A1gI*z@LH}~gfc9BZ>p})`%&e#!j)wmJWfG?_Cg^9TKZXaZx zln|%!eA>5o%Z^+vJB+7?1@VX69|?m}mxX)QApAhq`r7I+)>myY@i$#wz{R^&{|yg5 z#@^?Bgqxe2``t&kf6QG0qkXyu^TYT_N&o;Y->!dJJ7YNQMw{vOOtGB??2k(Opjm_h z;-TO|>W%A|?@0to!r*h}cf08-2WDZJX9z+LUt-{7Pbj1s+# z`r{xz_yWh82>;+B;H>muazw;6G((lB{fdc#g%T$Wz$In~h3NE{uT{?);m1UR$0zxN zAUB2K?{xRyF`+9-(zLoBt$8uoYJBH_QgRB<5J(>)^>DL!8lJVOFLLbPMjSAvuf;Qn zfi$$!cHML)9Fr!ZX_-5eRG^;?@p5#j_X^3roY$pcW7XB7i%NhQMUE;F2CqbjHHJ16 z^k_!(2B$2;f3T7v3^tsxu&@BYZRQhhTg*9Ds*B>f4&x429u#7A@GoUj6JfyVui624(lt?Ay zvK=pXXFq8Pc+%X9CJ`ayB*Eat4&U{!B@$y?A!(-=4xO0ID>DsYgPDCG$Ujl@CuinAx6fMSPR( zbnVh@{_t(~ig;&Fo7sN8k%pG4SFGJ9)bRWGuNF;H^tbIh^@!Y9xY+2BKg02h1vvr! zBTJuqv__!9owsVfc0zuQX%zIN$NAhi;Xn8!HZD}fPspCWTf(TPPU80^8gMY%o?_LP zC9lHu*zDz%@bRhn?R#u!8PPpVcx(lYebF|_Yj4AG6q8tcusp*ALKCOF2;%QMLu7Lsd+ow-N{EUVKvr&#AD5kRYVJhqVW@d&(WY7(Bpt;@gHJ{Niy;(91p zOv>$BK*(#&Z^bIwQ4GVn!jxm?qCL1+%Dv|1C6iB+d-xi-)YsT0C(yzu!p_RvQ*5&| zfcKpIkSL&1S_6Q@t5`PC$y+?&_RmP|q2&N_l92#mNW*>J)0?fQ#@k|*%!qEIDbxBi*(cXi>94In)Clv(n(SCX1%woV=%sm%Vm?jy2HPTiK3N8_Poi0=s z>(aIo9l^OlRP%ftd8+Zc^HDvH22TrgqJys^BY*4wtEhvT3%l9_scpnI{q{gZ*1N5C zMX&RVlwqWbiwQqX8R6vtC7lc>*DvX7WB{voiyqVO>FJJQf$N*=OJe~V5c(gUo7=6L zZ3ZRm=Y06lk=TsxLk{{x1x>6%4$YqyX>qi<9?v&r!oS=&PWJ-HYMoU34MXn+>ck}V zpM^JALDL4V(@p2@{F;<&e872`Tl?OL+}FMC%_Y5{;wt0{S{4zkhgSj)Jp4?Y;T83r zm9`M$xryJ0^3Sf z@NGFxF2{aEMD|57=C7ZJPEe|=qGA3%AbD}2ucaiH7NPqqz5H)XAEvp zlg)QMqb!plQ^Os*C_6qm8C+E*IE8A$@8?g=zmabC`6>Rp0CdeIR4)nkxh9%E&9?iY zTWo!PO5mJ-^9O8R&ChwfR9>x_i3>z@nDB`^FVX!?fKE7K=b5Y!Cvo> zyC{gNMo{if8hY6a8s0)@yT0_>Pkf#yfq_q@_{p-2{SKralg34zUTsYjM~WM71}j#a z)LzJ^a0s=%2Pf+ZFKKHt-{q)fSTC)?k0Jsu#`Rt@-|V|T93wD8II72C=pK7cYX811B&_UWvoVaHb(Q&Wx=N7NZD+yx~8V4FNt`7 zXMK75dXLPVo14y!7#E0Fow~&;dT4ug4reCbzn-pxXQ;*#Uqz+4szXioEQ6B$HCSFA zkKhyXv8$X>!avWAeDC*kPOT0VJg`l8>zBDHhvyHR=999Pd0#jII368woo`6J(cQU{ za8b#dOj;6TsoLw8eX1k3TH$!7`)gusGuV^#-z#v*fK&MC-72$$Wi8TRSl`KQN7hEH z*19HGs4OkK;`(M+erA5tznW zqg?5ebleD4caM^S$06Z2<(y5CJO-$=07_`-WfXE&Ds%)#p$|wRAlIeku`#iZj*gK) z8uvi#GR{{SjwI@zkr>zgN8##*T;GP~!M5EwHoMh7ELMRU+oScIde!w%BYl(G%QYpd&R_L|$9Oa0{XJZRO9`wP#iIRO_}*QEqqdl(n+ z)}vYGrB3>q$LnR~BB%<3WKYIZFVS9S50x-I#1`W4nd_f+u(-ImsJTIH!2mEavgAP5 z>vX%d)gSxYj@&fb>R&(pKe|FPWTBTFhV7aP1N7dXbpXgU2axs_rG3ZeWIp!jm4pkr zlCm);|LD0gCQkyFu+XnJdX!_UEbd&a)&@eshr=Hrlln#Yjb3h#8PLA=A&Kc$kr|Ag z$Rn8vJ2Y%4#<|9l?&I@(5THl__IEo4Nu9}(bes6J|FQuk~h?e^4Cn1xBFdz zJF%i^QD@7AC_15}sZVyroeB7>V!ZZ!u>(_;pHd5@`GJ0Dkh9vummc`#*0wjJMcL~8 zJFd$zx92<)WIXm_dWKOKj|&)+VG7CO4_}ihc}4N<8Db!Vf`XFp;fpN7snowPOmn#@ z3veqcDndRCb;q)ruPydsh~JLbA?!j##icP zo+mqKX(dkb0%2Q6YgqoU)YQ~0_+(h{jg-0Ns7jFc8H)9hT#>n3yrjcGuTf3kA8KcCJ)3~mDFvzb zY8ZWkU*awlhi%oaTRo5XESy$);XH`&evmVQYQU#weHxHL<6r_Q3=GgP$D`xb?NOLY zez@WTS=8bNHa#YrWt!o#?E~TXfJ*u<#~d`t|0!+-QCM#bPaRptg*0&|(SKnZId}1H zhd-A{*ar=UY%1MP#;bqm1m?Y)z?cV6r;?AN)FnoS^FC~%J7fJ!5f#^ZTM$4&V`UVm zAs`KZc2m`-v+x^DODgn2K3lfi%u_Fb?G3{JCMMZ$OiaAL-Py3>h0FEDz+Vke+Js_* z5;GvsVk?+kT}^o^@1-|~mwTc`x%NFY;tDgHkq0gAt*jV{SYoV84jTU>^!+n@w4sQ< zp+`}Fu$j?CNU`? zQ6uL!vrwh#vgB)7f)40O9K`6-3|0USKo-%3c$K>i1u7t1npdGE%|z=vJMX>p zp~CH4gaHLNDHGxX$Z)Nj?LMDm4Y67r1*D%y%&lo+Wth5H?9_hFVHVQpFG8F@f`_~kS=pFI z-mP~&iW9XqM6^wwJ=t?ebCVdV->t)IzMS3r5e0}WmQay?^%3ajj%jk)P0!~&F!hd6 zdU)mBCug=+YZJju;1|M@riKG<45}i8(2E?tSe9=M1)BSS67@6V${PG{^ZBKPT2Vos zSo6ILfjNfr`zHvNSZf18P?j0(Pk^ak=DOT86kB8SJuJXQ@rm61M4u@jH0Pc@culy} z8Zcz|A#vCFHn?o?DPkDd`llWwB`xhg-=QsTZDj=|hyizKFEwC+jm3`ASI0kjY%IMP zZR0{{Ltg7bdkz#;PaIyGS*IG!yr0yE4x(Bww>oKDHlyuF#DnJ$`is5&T#;0B6{`Il zN4TUnU%H=2VCo$46Ca~rFSmJ*C5jU|p76CkM(C?A(-`B%;yR#`EZ6v+RVBdW?7vF2 z_h)8q4p#qEeF<`!C?;@($s0_YGv_ zyy1>-H=!bpw2d6UCO7HlG(vx@82GEFtN2}Je8%9BPwCUr;OHfEm^NM_ZV9etlGWCr z){j&);t+A75)X8DdvwQ>q7U5@YiqEQFWkv1AG4c>UV?RpsxAn>5DNPv!0n&7Syc~; zn^9(ITdKI#cGDC*OLYZz-hS>D&T_(tf^@wE;{tIERK@LLbZhSeuKKs|as~;U(H);S ze2#D(wQMMXf?Fvr1JXsev5RyX#%|AKAr0e5X8rdMrgrgd{Jsrokyx(~GOc1QSo=90 z=YlNfSo?G>DVofzbAN-?d%^p+ggp56Uw3x~`;2 z(bDp#be8%(hyVk$x$X~)iEkPhH(j>HzzekmDI3H)EM6w1q5gg-$)8^c03HYga5lALO0|87AMR9s@P~8| z_h8~a4tVvmtLWIUtEPmaMQ_zPbc1frM!D@_p0fcMdVb>=ZFs?N*%BV2KA$dI=ItLJ z9>QGSnW(3UJ-+^qNrYgak55>oaZ8kI6vuE%uchhZ8?-MLprQ(lpa1m>pFi1{M{mHL zt;F)nT`vGaE4+UFTG%rEl67nT`t0a@bF$eNLUTaapRh|tggfDYE&@I>+IUOwl#`R3 zdIS9QvT*!`qN<#Y4cpC1`d)hzYZ~z%EB%|5UQED!XRwqPa9@e$4lb(v?s>9(Adr)n zXEK~6^Rhtw*WooM-m3FGlip~IvgXul!J_MGu&XNlMqm}|(apWxYKJd!zIlX{`ipf( zm%WP4gBLz2Cl9!IQ(GVpoXl!~GP-#jMFVp27QD=O1IunA@ED(OSw2f^CwQ8$+|iW+ zgW0}Uvu^>nBA?$v&BjAr{m;EGy|^4}Lp)@h-q7<*1Qs+20+Ke5rESz6=Aq!QO$H11 zv%Cz6pgwhS086d|$v&uBdA^)O-F4I1!ggE8zs*QWYDDOwXSDC?PxNct1sfd+rYgJP zQuIPWVKh|Tc?=+D?YpMRV*%ufEc0&jnmxp92#eznQSjX@bYIxZl_Z?PJY+R4Apt_? z2+UmfLKUn(+;5ih*yY|HnNEH$Dxz!nc;fV22XNe-nTcG_lKFPwZ)IXUQi99_u=HNP zZgIWJAOakR$z^IzpYDO7xM7N2L({3`$0t#YWJ_lG^g`R(QC)lDp({Zy2Pc*D9)yDo z)B(+Ta;gY$^>{4YW0+g3C`AwV&3f-~1aHu%Pt*@sS^ar~cDEUs8f)&H-oyK-IQe6E z8mr+_Iy0vt;Kb$Z{A%WR)y6Nje2S>BK>+AxO;{@BF^z|lgEyc%iJ_NN=bC<=rSSN} zyyaE5NuEn|z}pUYpS4%-@abWIgC=0jD&8~?fuK!dqnZz$?5Dq_B827;0E^h&Lc)3`wR zb#l4`Vu2*~?EG`S!Smx@nLb*ma{kV$2xbWO*~_}Q2>~r1J`#TE1T<(2<}@N4#>9I( zJ$)V}E6&-bkMHl7vByTaY$#S4tTE_jvVtuCNnvl?h{nkcbN8LfZZk0s`1{;g#c zv$qhcGF$nj;D*gcO^%U;P*;GUAm;Lj`nxUp2VK`PdQd%}Jxee1IdXhWqr58mH`(PP zTQQ^JvAL(Fj!u}{_glg|)HF=^Lsl`MI2f3HS^DCQ2l-vQt=7Qld05o;ev0aJw95i< z22^IMHCx%;j$h2aLo`BYRJJ1LcrN_B-AIu=umNa9xK+a&kW; zgzOtUQfa&qA*bpOEH-*Z6F*F%eFi)D+U7@+!%QA%>@~kaSP> zTXr0l4H*?%OK-gR7HC-~L)<+go?sSTmlxFf$S|US{f1y4ux#s4?!;qUsV<%*>T#fr zg~C=>a!KxO2;7byVA2pmSDIQN`v~is`}r$aZ`$k$u;4X+nU?Ga8hD(J0z1nMR6~cok`C0RKq9r~=zqb+i8mn;pPNXcU0AnW=M&wq5p0vGsi3FKl?c^{N1#6p}{JA@J?a4vwm)Js?LysSVu|S^pmBA zj10iv-~W4`1AKG-VnyJ99<=`%0u_vGXKIKcq{`n)c#^%9)zAFL-S=W}9~U#a&0S|M z)a<`YC^E#e%wu>Vfn7!oS&E4Q&a6qoA{(Ih((TfZnA@{-X_MyosUhcFN$B? zhLV;k*;+Pp4|5%ep<01@wV9>8d} zxNCn7!GP%7YYNV(d+&ZJv5PtI+1FCSkm-k@M>JgV5@EA6me1C0^^k zgal(rDe{iI{O%jZ>QxvH_&YwBB>%NQ!}j)H#3s79IDl-J${Sz?4!u8LE?jJld&=d$n|L#y&Bd_Z{E=l*KEgD}d?MBb~3Q#DZv^BiNxAwO(}8T#=-ku-DYoumlWm6#uA?~bTw zXg<^b|+x3IlVH@ctR+bx`^zeDMM6yTpZy78R!6RmnX zXTv>-F7-EEAYhW=1XV)7gAPg=70SJ| zC)1;|%zyFp{>J1%!K&Fi+QIB3?R+k-J{*^PQcs%omEFoLHJXDvOy2RQL6DT9=08$1 zXX%9PSLM-e)Z4C4#Ry_(3BiGW>2mEhDe4;HyE8E!<>p0TWwh>fQs)8un0~LVTTP2b z#9X*cyA7X>J?fGw$IFZgZHT%;EQPHF!YNG;mO9F`Iqa3A50a(x&8TY* zrXCg!@2?&3NaR*}R6Ka{VOcX{w7}Pb*Ds;fvlC={F3O}RZ>K7DiMmTC3@|l318+j) zG1jexp~Ji0zi$3FG33*px#=ayUnfLgbukt*&2c~2@t8DBS}X9Tkr+uf>6GCpO#M+p zt^Oo2=uY&Vw!wQm^~t+Ns>_()<~bie#DpO6Wje(#3zo_)8ef_33&0uP?XU5Yp8Asf z2Gcs-AR-^?rM@m%@4jv5waU(^V)f?07HWEVdG?3sh-K(PMflomxB>l5*|p0N*<^?n ztlPhQN5SvTwdtsKr4t=n;hu`8YEFOp;_-5zzsmr9=tQLKpxnfelA4?@FjK83HN(` zQ(vLM66JvhL~g!n;YB-2I%DHK!VT~6gQ%QcTucDH)3LNJ)nwDVR*A2WJnJoK-6n5l zVuFN#>xJP?2gdU_nv}JgMYm-R4=7$8y#g~K@D@R>^?wHQO}>?9 zH_G>uZ4qZ*7o#P|`JYO?&wE~>3RCTTBy_a2ZHFtp#^1DG>gcfDg@>{pW#VHHt7h3F zz0DH{7y0O#A}JNNxCL%jgPM&yo1fgbc3qn3>x-DLke8QVI>^a+z=8W+`}-@D;jGYk z$Gn4+cm4Hw3tmh9h_q18gu*Ahk3II2(iZ)q5T{@j2R@DMXu=5oG;Jx)>VRRb6@| z*!%ORWY2a?_n$vz!gQG@@r|g>!t-6X=J4@Ceb5uN7~G_#b7CIx7ry+V26~O}5!Yi2 zm3-0&-fy2i$Z10xejzXKJ8K`Tkn5+Ad&u{N{^{yXs_(71nojcc$0SIZ&3O&xL;i{? z(Q^|i`VzQ88NGmlx>cg#!Yd^s0c|2)Kc@jOD{>(aI3)YKF}G_rY&rvafQ z0-<*Xi8X4dXAhTkwKX)zA&{3}>S65&1n6FrL?EB{Eeun!&RskF1LbbMxaB&lv_X3_ R^#g$Zzixl`)7u0UmW)4IZv*2uXV4rc1sHKj}+vJu2*2fMI$J;VB!7BTr{q^*R`Ze z73Y;XbyXf)o`Ivj?Tn(Uts=gvENjDsx{q(eo7EATq3tj0H1!-Rx|Bj@!)( zrh|joLQ(fRj-Oy~#Xaq>wCMLaq&*R(+0T9Fcy=8iff%se$hh#9@4w!9G4stA(a_>_j9!_EzwaA*lEA$eBtOmK#|I+ z_nkZ?rR>#m!=}(C!g<`CbUG#fcCGg#E>|*E!zk?RW!9O6((Bj!6Jy{HdvU z-Dln3wM?cTh>>+-U5g=qpGiN@=W9fwqw!qCNKf zxa)9GBgc=N(A0=keufmT5<*@4jzl1h|La4I6;MyIa(IqK3d4nO<79nZxxiDv9}%3E zas4@*raR`vq0W}yNUUcKY=@w>l6Hm1{ytP5MB5cD#enRxtE_%+4<_DJQFbQ9E)KLvu}`_0s1fI zdN$@qI;dl%9smn!T>l>DU$@}@cK`q3mdO_7*Y-(@Y7*^a7Hf!`_+MH0dj&9^5eGL^ zxLg*^V!4|TyRS{p+ z{<&z`{E=|JL1%02#+A+@Mp2jC={DxSef1dOT1lX%rzbSwqAa!nR~g@`pnHl7jEuP} z(D{$C{ByZfr_X6nY2Fr!y&N$*^$&`*+Mi6M`lizf2}_KHf$0A|zkQf!71OEt+4Z zvKBzAMX(WUy!V3ND@=kxl_lv<4Qg>zRKi|0=5*x&U$~z=BN_=L+g2Qf<^}+{ac3{V ztiM|OQt}TXNHuNv*N!qIDhXxZ+K#r70D_FMM>Ha?p#v;pW0w!Cg!S}>Jmx;<%Lb{+ z|7TBpZ=VA_!^7P+S$ZxjtDd*Un7}HjR6&2(jM!`h8?MD0fnsvwzL0+g`8&=eA_5qh zon^PStkU~3zTOVnKYB=PWo;ck%*)GbDsb`B@!;X*RZ)>2v&!%=Mf7?}&3STiOzwD_ z6*>EV4zlFjh(RiCu#eZd0Y>Y&xXD0qm9p~A+O1su_3J?hb9^zI$Ue&cXO0g3NfJ^Q zK@E&=%F)teGP1H_M@MIZl-ggtJ=g`g)M`XD-F*vpQL2Xib~1(wLV86`jQTHUcX*lsUcg5mVLVnedaV3QvoBRqapeE?f>hj-@})FQ&Jh4<;6VO z8T4(p<*+$u0qWEKErk->@-mXPCd6ij!eUB)yRYmClB44mH)lf z@AZf4Aic@IwF~z@+EqUM!F$e}bok{(-e%HPzYC-(V|*f(R#wYe-8{$1*8(cJ?LpOi zfRxfWJ^jM@{P`KOE=I7IUm+l%r?pn&2#ie3tjEc}av?nRFvL5c{k*(v21t2$2!w`( zjoKVwi zG9c*ZT0|@1_h9%AhRZ!XeBw4Nhl{+wZ|1vI|Hv~UySbkCDy*;K_-fduTzsxU^@F^{+ z{{c2O4>vcguTPPWpZ`mCHXtr8&dSOvWn;qvWY^d0HiKQ(Rc7w)zZkis30jkFl!En3 zA>>2nAjSUl>C*^8uUMD)Ul5vihL$0aRXCASF;l{7^eT9H90h>!uCCHhAQ7Y;2rV$A zNckH=D4d*{{v47E>4M0&{ugcs=$HUmnck{k%h19&0L#o2h;<9ZQ8&r438HIts$&!c z1<9Z(_4M`qgwF86g9jb>`f_ri{qGheVDOK|4plRTLn^AOLI2>F3D$oFI}~dHCnWbq zzvRImD?AX2Fqn4McXBj2e?9CiASPBX*F`ISr!F=r$i2aP+tE>?hcSC7C?J4-hwUiP zg5|P!8%(z41=8i`=Nq2X&F=q8=Ra(*AWOY1uX?r__fa(ozxdsx83c?Sn<*(2+-bgM z0v8`1zIpvxB0hg}6LMH4fBOvN%1mxA5fyYb!Aay_5vr=P4B4({e{Ux7N3p2T4K=Mi zyK2OdI@-Vhwzsz{bU9W|-@ixwnxDTikiu(zDhq085D^h)Sbd+}ubACmacQ0DFs+;A z;o%AV^-HV8plLoP@D8am9YG|{_zzO)$e4`Soz5h|wPJ=PL_1FiYfzW>SDal!T7t$Ur=&hfRg3uY-i{BX1csO~ z(+1H?wIlIk{OEux#-~a+k8zT3A9qXo0b+9IasOCv_PlarLq@s`&PA(!S`j07GP*Nm zSoO&!dGz{#{iAb=TQ5ck36|xoxk~_`npza;jgtsY=tIs8ax8QN#{2OCwSLud?cz@S z#kDmi389m~3j6aX=t8sLDbkYV^-D8zb7cD(O6VdcCjRU9Eyy{2`uD(Gu!b^ajn}WE zBd3hR1@V4_{QW#Aa{{E~<;fsx6N%oM_CQ#Bm(@|ASZO@laK&hm3UZkTOmzd>+B7-+ z1Ep+LGVXc?`>mkvwTmYX%gcZMlyN~Ny&oyk0-p#`;{iwY+Qs9~T2FPz{;_d)h9hdI zOB#0fXv3?Ts|6gqyeRnlKF^hVaw+WY6DLHT{D}?Gyy|X(Q#XnG1sfN3zyQsCl&VzQdpmghSUER9n)P-1GirS;z}asqS-=?G1}P3+9D2%83`(qD3M zZ+B?^qt&+!U=Eibk56T|t)@AvnIA)8`|`&LbS_U4^8Yz;OBiJRo*NQ*(9%g0KwhW( ze{Z9DfQV#`5-x4`xymsF)cn!k2d_%Ftn21I(#)B^R!c||xM4q&VqkVY74|t}1wV6{ z(6|w6=x5P|H()#sk?V-cm5=PRFa0^~<$*HGpnoBlmCjm3g&gpHq~X0Vx#~T$(GpM<2c~nFU$Go@>RW z#u9b?t4&y7Wn-fVAO)&vGU8Bfx_A;Zp)loyj{Uofut1*r=(l)dXKx)HqZ*+_(6S5MIuoP7Vq);9LBHGV zMPK{r(N+-=5zD*`E~_GA%|TB1rMaQccAnQt1WSckJGu)tz@nDv{?bH4V}(C!-=Vfj zs*B`hX+i=Cd9>W|G$Xzw!|p<4-xGhTL5=KPFKqZ-ba@pVE@4}vkJ{vqR^G!F%Fesd zo$N4*Dt#oh;ZjI&TW%(_fiXZ1X8VRfD6g)khXq^?-Q5B($#N5}%(qTXavs`vF$XW@ zI=gydA=ES!q5sR|9v5AXzfB)4f32{%c-#M2|ALn7)^tfFY9#obhx>y$KN{aXo^;Oz z?`2DImNU;eOVg>h2%7}0MVhl+_miWHz2kX&i))lG@;hk(V12~)xz8psd~~>L~&t*yWlcJ|R z9`L()qFy}F)6)a%G?#`fhrXo4Lz9L%u`wMD6FjjM*F%$dIb$G))W1_PD=mwQX7RRS zuX(cEDCo4z-vEGJWWiy_w^Dq2wx&RZ)4WKQodC>mSwzlDRDMeFSyt$*{osncs)WZV{a_UQJqc=}a`dMKw z2SHBtUz@IlbkEDN_=F=WdwXFU-MNyj@~Fv~nRt<%$bith9TK2ks|=fr^Q=d!R2$=5 z#?sOf0Qe|z9R;YOOrCupQ_ENT1P?+44yaSQtgo+oC*#L9=hy{Q{@P@&3)m;3zO%)g z*yQ-R92;tB)C4_PBj4!|TL2Nr=zuFYh!0TK3SzdF5c&kC_2#Rj8OFE;i+CN;o%#IO zv+n*(I`xfC{ORDTZu=i}`p;G(Hw$J+4t^KndZpUs-HTqUxWj&Hw%!)F$)mQ<4Ghw} zdgedo8TuV}I&-;khqCgw2of<}nQQR1z3-rf0RSEF^0~BDPN#j#MuAbnhmsPI1M={^ z95Lh{xkj#7cHJ1_u{}CR`aY=kLGTo1j-hpK&JdCYy2p>vY=$#mNJ~qvJrED>G;izZ zcz-$PR2O`fIDW``adq=tiLtD?S?uiMA~IOH{%UPwL+;H;1Q9~i>DlG2Ra|_=`yDq@ z;S1b%;lxU$K_Mz{pb9>y_=;$(0$o}2x!M926O4jimYVJ3Pz0xBl;Q}7zduX-h5x(~p6qh!65CvV1&kV)XxjNNly63! zJ0#VU(*dKX<5{#n)vo0jv^gcdyq(;uoVlyF#S4#kk)pi`o7fJ7QxFS10}?<7 z#y>YxG+%sF_(4(VKwYT1-msRLKuY`Rlcw3Dts|kNl;ZARYwtH-@G?F2#S1@8GX9LD zm?MdglFqWBqocE_AThc%egjDHL;hrR*NlP)T z7^GSt`|4GkSG0EV3j>F=Rt%kVM@hD?`9pB}u|6^wD8H@*LH~8Iys6m9iM2#?7850F zDSoR3x3a1S(O=bt*4JtPF5k%(bYLFkR5RVErai3m*20~oLUrP9@;vNn3&t>_X>NFB zudoaM&S{QNOzQPx9{3shlJC6fw?3-pxMIJ4P<6>;$TOEJGL0ejK#+LklE;N4HA%y?|r|nbBEmR<~K!% zoXq!(S5z|BhHV;$P}W1FxRv-gD{tOEs_(BuC%%7M#6llO>b3bpxNQ z#+R!$Y~~vJ(J*>DZ8UBK|0q)+c6@!j6iE(RJr z@lS6JjSmsKD+MS)Ltt(W8)c3E1@k(a5Jab@h*Eh`QZ2D$7XTaID=I3|(;PRGF6g&u zOEysm3GZOKA;6lrQ3RS_8DK+)lA22SYhu#-EixJm@Y1wu~1EB{$qThEzIJ80|C<};DD{s@J2 zU(5tkzawKhK+m1p{W7)dvc=Ve1kmDR>c;guOWU~)e6ISS^>_cJgikeP7HN6&F+hmm z5b{X2+WDOh+yo5K@f|pj+@#RbMF9RU2w@jn?K)q7E~_~E-KDf(O@A#fflETJTS;v# zNP5_E51%HhYjJ_Xx|B-QM+LO(r*1agD(GF&v4^Llx!c3|U-;}iaD1zCrA$5em}$-I zbk}Y=;Y^}>aje`#R{9wzwLaE}42{vOPYBrImfFF&pLgq3{WFdF4VH_>=XCXfgl(o( zGnRRbkT>K{&!6=dQ!g&qtpkkDZ9whd2oK@8ILb_Urc0nBkSp&c)>f71bK)q{15NDT zVRX*z%YF8&{zltd>^d$ziv8CP|X5bZ}=qWJT}5ipUVWw(&0;oNv(Ig~|J{NT|a!KuAEVF74xM9Z;zwp8sO=-2V8q`L1syPzqFTa+j!^=VK zC6$=5kZ9xeW>EJJNh zLc@R;q*}uAUOz2=QVk9Ql(Ky~9;oDfbRV4A1IA)Y;Z0W^lzHGeV=n~S?-%W=l8H9D zQ?TcgiPoncx>4`AQ_#p~>oSp4;Av^j|U}&8Iv>OM*niAVx$*POfel)bI}t zA+v+|2y3C8!2@1uwTLZYu8P5j@sWjAgZJ&?GKY6(89L7=QEArC5+Y1$uq&P zJ-wC^2gK0!KGZ-XcNo$)Mv@HiqD~-pfwU&qzh5lHPELYej#ur=23R!fR=1v3? zm=(2U+9l*kcmiF1@71^w&10Kq=jTX(Q_HP~-$m2n!#ZFDau|z>o^Tj7l013s^PC}D zck6U3Rz6^CLoM$R>V{$Rc`5$K@_lq6n@h=)aS;-$PN!rCZbXnhl0jt-Nvk8+i4Vxi z!jpo*lU{k}{hBEs%2wX~U6(-?i8Rt5gxLOtR}B}}Z2tFOG`Qw!i2;wwrf;ah#58O$OyWqV|xHS@_#R9+#(NqYDL zb+<4q0-&&$dLfz9tT*}L6o?|_hImBa=)m^iF(w0R&KPRn{g_N+(M8|mpmq!KIw>X= z;pn%|s^N-%I|eHTy}M&+!`hc`$`drCr)P$=-=b?+$;*sRUf2Xwj^HzMH8`KLhmiuN zl-Cb;LS{V=o_k>V3|G>9CCmiWun zY2asWuCB>XX6Vb6o$#e~TQhxj*qAY~$t|Mhk+@M>kIqhf8oZrveY!HEs{_O>L``g> zCU|RkClTjS`)jcZVAqbz>`;rMip4h&nYOmikqp%ZVG zpz%AB{<9Q}ANrcCUJRCf@}WN9<9g$Hlil9rVLqG3J>e9Xq*oTsABcXf1`pH~AJl3u z46=C3b7UFfJYSZ(*Q>Dp^zj^F)PRdzz3Mrm_Rk?H6jNN73gCfly8rC%Yn<>9W)mG? zI$VZQhCE%>L}&OY=FZdOprh`V&sVWwl;;mMtaxpwcLJZxj&^att$Z+PaNE=LVj7FD zU@>sef-49t#OJZ&wH5u{S&D?-9Gz>H6n$xayaFeqc))Z`*h|tXVUy^qH*XcN8>q15 zJARa!l;kRYPxUZ(n*&(NS^UP}cHe@2L{%{Ku*LcE$Nk?nUJC}sPU|1Sk>tj1$jMjz z157eZi)@~}-~CijSpb)js#fMUOkRx|!E2?1{Q$$3R0x3de6mI?*IRgosEd-n_}zC0 zGUM6i1{$1Kho>ib_nU)hqclMhf-TtUNGLb}Onh3$gli7nw3aqDZ84u}sQW;Ev2EzA ze@8I(M}4G83*kFkc~OBJJl_iZx2vp0E(@GH7)*1^C>uAUzkfe*%G#e@je zBna`yeYpR%^Y~;MIUweIk0P-f_DV1v!tAWAO^9l;O z*RN>rj>2G5^#z5+#i!g9PFhfe*VfK1uJmwlWNy4+SMo9p!zedH(Z&Z{2Yrt4@xMQn zTwrLPNe}8T&-!szaDU2A`&fnOV!`oq{>!%YDU%(uXVChWPj(%Stxp{;XO~H`E)L6} z-n>Li5Oo3gWfvy?9?T|-kZAjsS03ST3rB>A$ncUgm<3hJun{N3{JH7g7(6$k-w9Lv zdfssLGL1v<=T)&M{+|iZO?FiwS89B^ym^BH_q14~T=8b*STU0^T?Z{19g5dhZS%$P z2R4*|#;+gpg_i{|L4-7c+{lHqVeM1)iS3&=?;=LN&T1B@UPa$EZ&O9f#kxbwCFCLl z+&!(sM-$_jZf-&gv)$1RjDMyL;u)e2zwz9Z@tdAMJiQY?4+JBXGiy(*c^Qn$MmCX{ zS$G75DMoI-j^nRAH@#!%L!@ks^rAW@I0Uur$Ug`M{ zr)1X^;<=s&k4A*Tr*4>T!3m+aWQ&`xmT81QdZjceB-4xBLsLy3wg5>F@>a)t6TVal z?+~X--3|-NXb_z;8l5x}4f?&mzhA%hNy&Ms6$y&>pa&z7Ms~JyE0_q^3OdFrFX{ju ze0xVe!T~ALX=#zWWlea1y2&AR zOAY8S#YrvX3>XA7cfP$-+`ayH(^8HB>#ok;da&CLXifAq!UU#$XALedmqk_sX6>^)GHIp ztJF0btXrweG)vkT`1RVmZ5Sz7E_U)5;2kWDg$G}cmv>H97MKO1b&qTcA|P4(@MgLK zNlok+RhgL>T2UnwilY|a5z(*C$@%#>T2wxk=KQzV#M~T*aeLB6ni68nmAXPm#lAfh zw}PXFd;D?Lc5bQU;`C^R>=Ls(gfP=67m{?2Z>NXqkJr}MzqGWNfS<1hIh4)t1JLliC!#fE)iaC37l9&pi6%gTpc zkP_O#A3b_Rvk9=44PW4*qx_zoec@mB5c~G3?@#DHPD7bWa`Op)+MtQoZE^7lIVp&oEUKV5X9z9DZj)1e&T>x7h>_;Das)1GII2~CsTcyStx_Ui@(iw zw?8Be%Jsc|{m`ApiFx|g|42`^a@12k<_fKtYyYANc*wcwCl?T)8$H20bsll0G_1rZ zV@!DZ^e}hDU+;$caMk{;=jY8|OM1Yz*Yeve-z_Q}^ckzy`m}&5wIsc1q1$tq7A;Jv z#kl%xlMy@^{5(rl%Uig;0H z9{QGpXE5H8K1=C>~4Ke}z0I0f`mqNbb#3NS5vG?bUS*Sa#cK zz`m~t#DirKz!z{7bHVZbIU37+lSKv<02%wA4}R4CQkccl7A!T)i5arI6DInb&(Pm= z67be6xVC?~J|csH%TW<--NVwem}-n`7{95^$|Gs_i#0_#7F(UZ`0WUphUUlAf~J&u z+DMY)GRdjGW_52u$0S6x00l@Mv~~wQJuS@r7?{gL#t?tyUswO2dGvw`sgIwL1}k$= zQAi`yE&;d{4hHzll~zef-<&STWit}`D)I&rIXIpNuisrChK+hTDNKo|#L5S?seQ(O zEopcfpUY)brYtf%d^L<;7Dp#oUuv;mf1l!j1WZMXZ++?#e+ooI{PF%852Cz%vXvZHwnoHlPuzHw3~YAr z?6LKsQs+HMPj+^Us(~B+r3H@jjr=8I*2>&pA6m$a#(ur>9^V|NS?IbxU)b22z^;p6 z#%yh0tBnzVN^>D_xt`ns?xkOUc>z*K%jIra9(YZ$gexph0Kxo{3!B==OC3FDJ5_pE z@=hhm#}3S3N9)31XTyf-s0$FuH8Tv2rXDZ?^pgQc@Q#5l0lO+VanHRiBR?ZimxuJ-_{7C!(3q6dsAxn?xGnnOcyR$3AHpc8&8^2wUIZtEEvU3WF`tS&mq-SsUDTB!(Zl!J#nHL}ZK>JR zw^H$Y?eyu_o+k8NI;kI@vA_ww=I8m`E_4^&_b#Sp9cLdN($a3^!1ugi>`9n-+owTK zHZhfwmA%^g#Y79RzE9u?xmuw8bi%{c2FqRq{H0*kwxG1u$!Cio*R$QWOf=It-d+h^ zhIjXFZA%=akvS;hP%e|U@|nm=WT29!4V2FMq{e5yPSm!1$88I2GhTI+EGH{7?>WqE z9{2Bl$-R^UwA<~1ijf~Ok0IO=)eEF9Ey&&%<0B83qLiibJext>h_q6izxZzGdbUZW zsB?E*2C5On{j{Q4s->(bBV3G#{BD>p6+b#Bp>JtotcPP$+(!vN0VlhlH5aTF+;wa+$mKasKhyLsy1t*Y-y~182 z!`YJiFfBP!lO*SbsuN!1yLB%9Hp%r3(mQ5-1XngKp4Lphw6Qf3u#1Ngw|y0&>CnzutCGuWzIYRy7?U z>cZ8u5RxsIi!|O{8j*Ax4_3rl4O)`A8bx`J95q2pW_D~-)03%#sCqb85C=#`Xkky| zQp&w}`%3+Af}QGgA=PrcXIL2-IMXjszvvhViDNf)tiNJ0&{Mm1`Bqg`$<2ZRsOzc& zK>dF0{r+*P7jOA8Av<8|{_6=%S~B?yaClSqV@3o^mX~UH4XO0yO1H6f-aUQayBc7F zFDp{n=GfZp0q3)fbA^uBFwp1jgNe}1!t;6roDX@O>YL$noD?2-$0y2fauR4nno9~? zfwyZ-L#NN8j}oK3_Z+rg!0b1g)(E)8#UnbxBvS-(Q z#hi&~pL%8q@^Ov~XzXN+SNdYNW9$8muVP;C<+|t@8D+%+pyxyB6x~5+b~(a%Uzr%$*w8$059$Ee+>1y<_jTJh zerJ@Qrp4Fq_!3cAfFuCODUy&rV2sPZIlY zm9qC7XODfl$lK4(_=t#!+sI{YHt^&0bps;;>6u8&Lw_`(d0oiMKm}mCP}wd5UgJ1g z`4I2vo>dkKKr~CbO3Q5#B0&LOdr>cfUNT+RMmaV@GxYhZ8=jkV*Vurc1>w=jh~vqu z+xxdkNNnBn5{pnhhk1NV`H8F3d~Kq?U8nHY?tVvP^fdrPlCFDyJ+*$KfgT!an2C>j zjsie*0HkAALaEV@hKgvYz4jkFzOC2%CUQtkYFBF2o)-G7K7C6_VF91O)`4TQwns0-$$?Hi6%{+g-AY9_-U#{1q+cF9Bz_uj_Y;v8`9*W zJ6UJg!0GJl6ynnl+VSK!ccN^bGF}IsA;n@Ea2F zZDNQv$j%P?^tlv76KzD#Vv)95Cx$(%>h8a*iFvlw?H=tt3_(^SV=WI2MbAd!WM=gc zH8x6Qu^vHOF-1j!@tvij%jp*nU0$C16GpqD5hH15YWC_&*uUC~EUpgV8%^5Mb8+EW z=)EyX-g|?#B=xBlhl8K$&k#swcab(n4)A%GOqMeog{%z!`M35khje=E9sdxgADn4Z9^Nv=%-aFdJ?4}sQCVm7}% zOY)kAq)`Fs6q1q0yu_D&*|f5Z#oy#-1nVQ#_We zZ8?A9k@!6h7jO%aJ`iR%5&CV_zUvmU&|P_lJUvl-+JU)0%IMvrfpW3>3@O)UBJ?tuL9CzOQqZgAe%5pP|erfm~093oXY=6V#R2ba^%PC4akf+&%WG z<_BPw^L*TPA+idn+^4eE=B*7XS||Yg{`T;?XZvu)SdCVe2V6-;w`hy)xxciq@oXiO zw7bcO@6Tk(BouI}4>eNPjQ;Y4@SE0?bP0dTA3uJKY`Z%PQM2+StWYfi#&^38E7u-_ zV2ut>@E05m<9n)1Z;|G>&u(9E;3FKrD)#mqxx3V%q9lM0vrUPoi|(s%IXh26Mf^Ss ziZzi!8qY=xhaILOSHd%04pLjbRM-`F7oBbTloi!?M%Vi`+x{Q-VJTH=9|iO42K_uk zQoCChZUdEmGd{8TEE`JHd|ABj`km}04w&8{IxKLG4f*~yitFk6Bl<$UWzGGFjo@zXQ6pGSgEmF*Rlv!7FVy=MxMSGq|b%7!xSq{E(`o~ubMH;+rS z*?oL{D?Ja5qhezj85vP1C@4VkM~}{@V`5^=J3l-$rzud&>Uwz@L&;ETq@}g?`mJor z=FvUN?{p)%o4Eq?U?mC(#1`XUn#yU#%E5v9*8H<<_I2#n+KHWXnpHLYBXNR_qviG$ zxcVviLX*ze@Xdj*!Z*F(y1P@Fr8B$wi_Q^2#pHD(1FzjXZ z$WRf2a{#KAf`aoP0@PH(gTaivSzU#mxAzYWNLzWcjZB~cJt=lOV#sve{WbXMP0TM4 zqSNNv?MqR|Xq2cZLf5N*1^oQ%%xpC01vxb}31}1>9lc!Fa{J@x_oA`IG{F2wT_e4P zY01C$@uU@$OH(cw_s$#mxD%`v9Ynx3os;rpHo_DYS0rM zrWykS@!|_yE7RRcl6q(jcqAm76uWI)A!F9*u_ z@nK#&x!HMZgR)QsQH)QKS%jOY=6#`ER0!u86s+VuM347fkHGThH+2;U2TmlUq{z;9 zPq?50r|5WJda2gxVCg($ZK3K*-H9;NKr>fAkcj28OuQAzg{?eFH za8ZllWNz5fW2bd+^~lo)Yr%!w@_bpmx)R2ghdY4dcjbTuEdB89uiW@-QN^-2&*X?$ zX0E-CZDKr0iETteRwdTx15mczP(Ed@byaa#AO*}D!)R}oFfO-CB_Ddlo2?5catI2N zK{huzIT^DMpOgAly=LPPnM7~4q7;}DfV=kw14%iOcqOtqsvZ^Ab?#B(yw=`464f@2 zv)O6~>*v3{%$vlo}ZiGH4gWEqi_)fSh4ev@q5Ffh5wqBBBRlpS{{ax(V3htbhb;raG zQ1%`ZE@@&rTM{7kXG7KsJ@JCDQ67C=g*A!NwWKCb0m_mbG&rFa*f2Erm)ECT+1M}= zF_U``e@nn`3JXaLF}3D>PW&uwaO>b8=BskYd4XeDIb&?&<)6xK8rgM=QC`}-b6M%) z@$XqTYb;RU%?nC$9qkl@<)PwzgTZxW#6Td?OssTc7Ew8oYPLuw*OTk5K|8X<<zx(f;a zK}N_g71Oi~$?f0xi%OJQ$C?s#3EY=A*J0c&QU|wTkiix6g=CqKyVX$^6_SE0C&q)O zVESX?8YR%K!W}BVh35<@{B`gD@MV%+&qGD@9}^SNphC99Cjt(W?61*1S62zi7GqN@ z$Pz|81mPfKFu})F$22!NHTb5H9OdJh`DF{?`eU@&7M8GY+q|m{O=nIMM+~;h0VF+fV#LiLI~ei!zAnRW?gKm zBeNAK{3ujQqKAJdSB{R)B^=IWy7y+o&U{}tzTWxe>Y7lyk7t^tn5pi7`z?qN9f6J8 zAEu!F=x_M8a>>wer%6HBQLn>{(9|_i;`az^CLs}#4|z&S=8)$FA=S!KyzVoyJ}HRw zub}tnSYHvSwlB}>eyP6mTg@uFXR*G41k##$NJUNUS~>0GN4iWk1%=ieAo4ML-u=1w zt;yXf`t^Eg)*o?vKW6cF!RgQ5L8rwEdI%_W=3Eg2K8?PpuPZ+Ycbv=H#CFSoWeI_F zP{M;?Wa;MaMb#B?wuBTi462@xkwHe41}tzOFB%IA%QT7}D$NU`Glg^xiWkUrCOzEU z+9Eh@xMC6H1?ms)=gEGB2~Z*yy;sh#kJ9zo(sU`Z#!}rXaZm~0tgb$H2WjYd?(1(p z^y}&CQ+~1zRfag=Pbd7c^1o5a&I|a3c!}Zm&GF5ra`;KNS@eq@a3G=*!s}h0rC2V?SFv1KKQsY6+iKzB4gH5O%R}YA>U>ON>gG zrB2Kmcu;mwq5S2|CW|2yG67{gG`H@$Q`<^xk1m^6U*5fL55R T!-UrkKtC^Es6H=~F%9}3{fex~ From fd22dbfc0db50770d60e16bfcc9035de840ff7a3 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sun, 2 Jun 2019 03:59:52 +0100 Subject: [PATCH 03/22] More fixes. Need to check over merging math. --- .../projectiles/ammunition/special/syringe.dm | 2 +- .../projectile/bullets/dart_syringe.dm | 13 +++--- .../reagents/reagent_containers/syringes.dm | 37 ++++++++++++++---- icons/obj/syringe.dmi | Bin 4379 -> 4730 bytes 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index 331ad67837..a4107fa6a2 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -61,7 +61,7 @@ ..() /obj/item/ammo_casing/syringegun/dart - name = "dart gun air canister" + name = "used air canister" desc = "A small canister of compressed gas." projectile_type = /obj/item/projectile/bullet/dart/syringe/dart firing_effect_type = null diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index a94fa6f227..74049fb7c9 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -64,20 +64,21 @@ if(R.overdose_threshold == 0) //Is there a possible OD? M.reagents.add_reagent(R.id, R.volume) else - var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - Rm.volume) -1) + var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - Rm.volume) -1) //Doesn't work + message_admins("Merge: Adding [transVol], OD: [R.overdose_threshold], curvol [Rm.volume]") M.reagents.add_reagent(R.id, transVol) - target.visible_message("\The [src] beeps!") - return TRUE else if(!R.overdose_threshold == 0) var/transVol = CLAMP(R.volume, 0, R.overdose_threshold-1) M.reagents.add_reagent(R.id, transVol) else M.reagents.add_reagent(R.id, R.volume) - target.visible_message("\The [src] beeps!") - to_chat("You feel a tiny prick, and turn around to see a smartdart embedded in your butt.") - return TRUE + + + target.visible_message("\The [src] beeps!") + to_chat("You feel a tiny prick, and turn around to see a smartdart embedded in your butt.") + return TRUE else blocked = 100 target.visible_message("\The [src] was deflected!", \ diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 592d092cc8..43f79d1f4c 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -265,12 +265,12 @@ /obj/item/reagent_containers/syringe/dart name = "medicinal smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." volume = 20 amount_per_transfer_from_this = 20 - icon = 'icons/obj/dart.dmi' - item_state = "dart_0" - //harmful = FALSE + //icon = 'icons/obj/dart.dmi' + icon_state = "empty" + item_state = "syringe_empty" /obj/item/reagent_containers/syringe/dart/afterattack(atom/target, mob/user , proximity) @@ -320,9 +320,30 @@ /obj/item/reagent_containers/syringe/dart/attack_self(mob/user) return +/obj/item/reagent_containers/syringe/update_icon() + cut_overlays() + var/rounded_vol + + rounded_vol = "empty" + if(reagents && reagents.total_volume) + if(volume/reagents.total_volume == 1) + rounded_vol="full" + + icon_state = "[rounded_vol]" + item_state = "syringe_[rounded_vol]" + if(ismob(loc)) + var/mob/M = loc + var/injoverlay + switch(mode) + if (SYRINGE_DRAW) + injoverlay = "draw" + if (SYRINGE_INJECT) + injoverlay = "ready" + add_overlay(injoverlay) + M.update_inv_hands() + /obj/item/reagent_containers/syringe/dart/bluespace name = "bluespace smartdart" - desc = "A non-harmful dart that can administer medication from a range, with extended 60u capacity. Unable to hold any caustic or toxic chemicals without disintegrating" - amount_per_transfer_from_this = 20 - volume = 60 - //harmful = FALSE + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." + amount_per_transfer_from_this = 50 + volume = 50 diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi index f77735fc3ee6b3efda50efd9ec5b005fb0f63f44..80e681399a6af01fc3a28012975ff7bf1f44a03d 100644 GIT binary patch literal 4730 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 df^?`MoE!l=CP$^P Date: Thu, 6 Jun 2019 23:23:53 +0100 Subject: [PATCH 04/22] DEBUG --- code/modules/projectiles/projectile/bullets/dart_syringe.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 74049fb7c9..caac71f947 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -65,6 +65,7 @@ M.reagents.add_reagent(R.id, R.volume) else var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - Rm.volume) -1) //Doesn't work + message_admins("DEBUG: R.vol [R.volume], R.OD [R.overdose_threshold], Rm.vol: [Rm.volume], trans: [transVol]") message_admins("Merge: Adding [transVol], OD: [R.overdose_threshold], curvol [Rm.volume]") M.reagents.add_reagent(R.id, transVol) else From 2888e1b30be02f9b7a0b6af5e87523bb1d69c260 Mon Sep 17 00:00:00 2001 From: Fermi Date: Fri, 7 Jun 2019 00:12:11 +0100 Subject: [PATCH 05/22] Dartgun functions as intended. --- .../projectiles/projectile/bullets/dart_syringe.dm | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index caac71f947..58b76c78a2 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -47,26 +47,18 @@ damage = 0 /obj/item/projectile/bullet/dart/syringe/dart/on_hit(atom/target, blocked = FALSE) - message_admins("Dart landed!") if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) // not completely blocked if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..(target, blocked, TRUE) - message_admins("Checking reagents") for(var/datum/reagent/R in reagents.reagent_list) //OD prevention time! - message_admins("Reagent: [R]") if(istype(R, /datum/reagent/medicine)) //Is this a medicine? - message_admins("Is a medicine") if(M.reagents.has_reagent(R.id)) - message_admins("reagent found! with new") - var/datum/reagent/medicine/Rm = locate(R) in M if(R.overdose_threshold == 0) //Is there a possible OD? M.reagents.add_reagent(R.id, R.volume) else - var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - Rm.volume) -1) //Doesn't work - message_admins("DEBUG: R.vol [R.volume], R.OD [R.overdose_threshold], Rm.vol: [Rm.volume], trans: [transVol]") - message_admins("Merge: Adding [transVol], OD: [R.overdose_threshold], curvol [Rm.volume]") + var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.id)) -1) //Doesn't work M.reagents.add_reagent(R.id, transVol) else if(!R.overdose_threshold == 0) From 000b930811b456e98dd4dd409f29eb9a8dceae02 Mon Sep 17 00:00:00 2001 From: Fermi Date: Fri, 7 Jun 2019 00:19:28 +0100 Subject: [PATCH 06/22] Added Medolier (needs sprite) --- code/game/objects/items/storage/belt.dm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 57c77e5983..a77cd13f23 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -541,6 +541,25 @@ /obj/item/ammo_casing/shotgun )) +/obj/item/storage/belt/medolier + name = "medolier" + desc = "A medical bandolier for holding smartdarts." + icon_state = "medolier" + item_state = "medolier" + +/obj/item/storage/belt/medolier/ComponentInitialize() + . = ..() + GET_COMPONENT(STR, /datum/component/storage) + STR.max_items = 18 + STR.display_numerical_stacking = TRUE + STR.can_hold = typecacheof(list( + /obj/item/projectile/bullet/dart/syringe/dart + )) + +/obj/item/storage/belt/medolier/full/PopulateContents() + for(var/i in 1 to 8) + new /obj/item/projectile/bullet/dart/syringe/dart(src) + /obj/item/storage/belt/holster name = "shoulder holster" desc = "A holster to carry a handgun and ammo. WARNING: Badasses only." From 65b218d4c370de13d6edb4dc167d960db0706ea0 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 00:31:14 +0100 Subject: [PATCH 07/22] Spritework. --- .../projectiles/guns/misc/syringe_gun.dm | 6 ++++++ icons/obj/clothing/belts.dmi | Bin 11301 -> 11695 bytes 2 files changed, 6 insertions(+) diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index be9b2c2410..84dc637df1 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -115,3 +115,9 @@ /obj/item/gun/syringe/dart/Initialize() ..() chambered = new /obj/item/ammo_casing/syringegun/dart(src) + +/obj/item/gun/syringe/dart/attackby(obj/item/A, mob/user, params, show_msg = TRUE) + if(istype(A, /obj/item/reagent_containers/syringe/dart)) + ..() + else + return FALSE diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index dc5dde9cb6fe4134fda496caa108578f221bf5ca..3e56574fbf486ac08cc7cd9958f2d3a59811ebf3 100644 GIT binary patch literal 11695 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 literal 11301 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 From f44b9048af562c8f0a742f964d60b08c4cf4a3e8 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:00:51 +0100 Subject: [PATCH 08/22] Added to vendors/tech. --- code/game/objects/items/storage/belt.dm | 4 +-- .../research/designs/medical_designs.dm | 30 +++++++++++++++++++ code/modules/research/techweb/all_nodes.dm | 4 +-- code/modules/vending/medical.dm | 6 ++-- code/modules/vending/medical_wall.dm | 3 +- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index a77cd13f23..00788a2d7c 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -553,12 +553,12 @@ STR.max_items = 18 STR.display_numerical_stacking = TRUE STR.can_hold = typecacheof(list( - /obj/item/projectile/bullet/dart/syringe/dart + /obj/item/reagent_containers/syringe/dart )) /obj/item/storage/belt/medolier/full/PopulateContents() for(var/i in 1 to 8) - new /obj/item/projectile/bullet/dart/syringe/dart(src) + new /obj/item/reagent_containers/syringe/dart/(src) /obj/item/storage/belt/holster name = "shoulder holster" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 7224d0e4e8..a446255260 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -92,6 +92,36 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/medicinalsmartdart + name = "Medicinal Smartdart" + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." + id = "medicinalsmartdart" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2000, MAT_PLASTIC = 200, MAT_METAL = 500) + build_path = /obj/item/reagent_containers/syringe/dart + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/bluespacesmartdart + name = "bluespace smartdart" + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." + id = "medicinalsmartdart" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 2000, MAT_PLASTIC = 500, MAT_METAL = 500, MAT_BLUESPACE = 500) + build_path = /obj/item/reagent_containers/syringe/dart/bluespace + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/smartdartgun + name = "dart gun" + desc = "A compressed air gun, designed to fit medicinal darts for application of medicine for those patients just out of reach." + id = "smartdartgun" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 1500, MAT_PLASTIC = 1000, MAT_METAL = 1500) + build_path = /obj/item/gun/syringe/dart + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/bluespacebodybag name = "Bluespace Body Bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index e25dced31c..e7ee01086f 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -69,7 +69,7 @@ display_name = "Advanced Biotechnology" description = "Advanced Biotechnology" prereq_ids = list("biotech") - design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced","harvester","holobarrier_med") + design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced","harvester","holobarrier_med","smartdartgun","medicinalsmartdart") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -228,7 +228,7 @@ display_name = "Applied Bluespace Research" description = "Using bluespace to make things faster and better." prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo") + design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo", "bluespacesmartdart") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) export_price = 5000 diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 5ff07cc842..d546fcbfc3 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -30,7 +30,9 @@ premium = list(/obj/item/storage/box/hug/medical = 1, /obj/item/reagent_containers/hypospray/medipen = 3, /obj/item/storage/belt/medical = 3, - /obj/item/wrench/medical = 1) + /obj/item/wrench/medical = 1, + /obj/item/storage/belt/medolier/full = 2, + /obj/item/gun/syringe/dart = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical @@ -41,4 +43,4 @@ /obj/machinery/vending/medical/syndicate_access name = "\improper SyndiMed Plus" - req_access = list(ACCESS_SYNDICATE) \ No newline at end of file + req_access = list(ACCESS_SYNDICATE) diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 018eb09d86..514bbd8730 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -10,7 +10,8 @@ /obj/item/reagent_containers/medspray/styptic = 2, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/pill/charcoal = 2, - /obj/item/reagent_containers/medspray/sterilizine = 1) + /obj/item/reagent_containers/medspray/sterilizine = 1, + /obj/item/reagent_containers/syringe/dart = 10) contraband = list(/obj/item/reagent_containers/pill/tox = 2, /obj/item/reagent_containers/pill/morphine = 2) premium = list(/obj/item/reagent_containers/medspray/synthflesh = 2) From c6c98b539d9d6db90ba81f00e864ddb631d2680d Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:22:43 +0100 Subject: [PATCH 09/22] Minor bug fix. --- code/modules/reagents/reagent_containers/syringes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 43f79d1f4c..bfbf135e6f 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -320,7 +320,7 @@ /obj/item/reagent_containers/syringe/dart/attack_self(mob/user) return -/obj/item/reagent_containers/syringe/update_icon() +/obj/item/reagent_containers/syringe/dart/update_icon() cut_overlays() var/rounded_vol From 9fcbac0323563063bb783b2b633fd06a6d353230 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:23:57 +0100 Subject: [PATCH 10/22] Lil flavour. --- code/modules/projectiles/guns/misc/syringe_gun.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index 84dc637df1..26e66b1987 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -120,4 +120,5 @@ if(istype(A, /obj/item/reagent_containers/syringe/dart)) ..() else + to_chat(user, "You can't put the [A] into \the [src]!") return FALSE From 42d0ab48250b70bd2ceb90b11dcdbd79a51ee8d8 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:31:21 +0100 Subject: [PATCH 11/22] Comment cleanup. --- code/modules/projectiles/projectile/bullets/dart_syringe.dm | 6 +++--- code/modules/reagents/reagent_containers/syringes.dm | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 58b76c78a2..23db5c3245 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -49,7 +49,7 @@ /obj/item/projectile/bullet/dart/syringe/dart/on_hit(atom/target, blocked = FALSE) if(iscarbon(target)) var/mob/living/carbon/M = target - if(blocked != 100) // not completely blocked + if(blocked != 100) if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..(target, blocked, TRUE) for(var/datum/reagent/R in reagents.reagent_list) //OD prevention time! @@ -58,7 +58,7 @@ if(R.overdose_threshold == 0) //Is there a possible OD? M.reagents.add_reagent(R.id, R.volume) else - var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.id)) -1) //Doesn't work + var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.id)) -1) M.reagents.add_reagent(R.id, transVol) else if(!R.overdose_threshold == 0) @@ -70,7 +70,7 @@ target.visible_message("\The [src] beeps!") - to_chat("You feel a tiny prick, and turn around to see a smartdart embedded in your butt.") + to_chat("You feel a tiny prick as a smartdart embeds itself in you with a beep.") return TRUE else blocked = 100 diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index bfbf135e6f..39a372c381 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -268,7 +268,6 @@ desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." volume = 20 amount_per_transfer_from_this = 20 - //icon = 'icons/obj/dart.dmi' icon_state = "empty" item_state = "syringe_empty" @@ -307,7 +306,7 @@ to_chat(user, "You cannot directly remove reagents from [target]!") return - var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares? + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) to_chat(user, "You soak the [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.") if (reagents.total_volume >= reagents.maximum_volume) From 26e55a7a4207209f7e89de5a54690a01de949b52 Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:40:13 +0100 Subject: [PATCH 12/22] Swapped stacking to FALSE --- code/game/objects/items/storage/belt.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 00788a2d7c..298d96c4b7 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -551,7 +551,7 @@ . = ..() GET_COMPONENT(STR, /datum/component/storage) STR.max_items = 18 - STR.display_numerical_stacking = TRUE + STR.display_numerical_stacking = FALSE STR.can_hold = typecacheof(list( /obj/item/reagent_containers/syringe/dart )) From b6788cdd64d5e3d167e537b1ec01a4dfd206e4ba Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 01:45:32 +0100 Subject: [PATCH 13/22] Updated projectile sprite. --- code/game/objects/items/storage/belt.dm | 4 ++-- .../projectile/bullets/dart_syringe.dm | 2 +- icons/obj/projectiles.dmi | Bin 117152 -> 117301 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 298d96c4b7..27c3d76655 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -550,14 +550,14 @@ /obj/item/storage/belt/medolier/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) - STR.max_items = 18 + STR.max_items = 12 STR.display_numerical_stacking = FALSE STR.can_hold = typecacheof(list( /obj/item/reagent_containers/syringe/dart )) /obj/item/storage/belt/medolier/full/PopulateContents() - for(var/i in 1 to 8) + for(var/i in 1 to 10) new /obj/item/reagent_containers/syringe/dart/(src) /obj/item/storage/belt/holster diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 23db5c3245..92865a3a55 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -43,7 +43,7 @@ //I am in a mess of my own making /obj/item/projectile/bullet/dart/syringe/dart name = "Smartdart" - icon_state = "syringeproj" + icon_state = "dartproj" damage = 0 /obj/item/projectile/bullet/dart/syringe/dart/on_hit(atom/target, blocked = FALSE) diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index d276655ae865826e683ca252490d67ed04f56df3..bff1b631c32526c742238e42a1405e905ce9274e 100644 GIT binary patch delta 1777 zcmVF$xgqetU_Q$6WZ9)``gzU0Jok$(++aw& zbkKumTNQpg+unKB-)>qJemmO#_0F^YcB9Hq_OoXILM?=1Bwma2`jSie-v;OPJedy* zJpJY>_f9&5sZ!)5NnFb0StmpfQF?Qhs(+2})vXYb2hYg<#Sr+1fl8UuhtF7b0dsBc z%B}%WuS5f1Vd$K}3=S~-=Mwo(3*?qIS^4%eR>J`t1{vWMPLSmx1#s=RrI6DUk+KSQHRiQFGKISR0j=a^<&=OwttW3 z*EvguPjCoPrAW0l9-8lC=wY6XpBe%cgL!B$pKY-G)KYb?&0W!XfZ{tx8Nl`S4|MXo z!cX?IZvajV4O-45SpXIe_@QIYl~DWWfg)VvKN1xTQ4Fa(qalg5fM3-6o4Wkax7^KP<$a0 zjWW>R&zH@F**VacvF%x1a_iPDd-m*EjWde)lmbvXUOXOW?t>2w{WD%$UVq;8JYx~@ z0R^CsBoYam9G%|xx%s(wyQ(UAmdi2u)?35}1`hOmCYwEUV7`pUj~{#9hKP7a0q7&i z(P`3)v(5V^dmGF+>BU)+$s`kI+;&?C#s>zPho0`|^y$-{_C-Xxg96ZJlF4KmC&#qs;PCmc=AdOfo#<@4&Y->NBJbBXA_C%z$6o5VxU7Ur{>1OyfUVk1Z zQ&UrWR)Fnt@7}$(wkIO3r2zCZdmE@#fN!+7cZ%ovb{ zX7vZ~Mm_jyV}J|wr+>U*jF}3D!}Rv{QYaL#^+o5d>td}n#&};0bwULwBL1fU^r7VF z^!Au*&H(j3e2g(MfLty|p-{jWgSD1mFi5FX^1OXOK_?q`8BFNYi;v2q~kcAv|B6`_I)P1z7D{H1Fjbok$>Y&n_>G%dU3Wn{+CXt zw~YZVv}pl^<2aN`CCcS8)oK-MEw1ZQEEb7GBA%6?*#j;)xO3+YLy3e}-4Ky3q6*L_ z8rz^XVlJ6XelZ!QZp>O1yk8Pwj4{PrE*Ewj2Wu^rN`+V~))6xyi^bwmcR@saLKUD- ztgWrR5HQWH(SI5fV%oGG&~cndG#WLbP{@SCVbdw$Cn9nfssMdz!HhFzZd{WW4MS7vlHLP0%8E5q}?30Q$)M+`DFCbozzUUXzV$ zeLS$+PJ)2#72rQ_+&I#8fHRqq`tRUw^IkzH;y(&NpXtVMJFKJL3FbolzM094*gu>< zV`eg{0!92v0Vuw6)H}g6_W#^@ZA;@K(lQD_@tsbn0Ke=iBL1QP6yG`O3Q$D4g91=| zM?ohdtv;Xt6yIp<^(i9K3JO5!c<~b_c(Al|=${c0*^2^DI^M;L7d6R5L|X2Df#G>E T;My=P00000NkvXXu0mjfT*G8p delta 1627 zcmV-h2Bi75ln0=b2aqHI!?7i{0u`mF=w3X(J&C8+m+BueSwq&eNfwlY^#Zr`0s)V} zf5gUB-EkcMp1Je59*SQXGf`@25E6ir1%&_r1@K8kK~xgD78_eC5(1m9(`D(>?FP-J ztF9_4Wm&Oc1DiyMg*QABmf27V7&qHk6=W_5DmkJF1j~-cb|&L_-os)ZUN@)?T>BdNPK?6wmM&rzmoh3Z?c<5QYiPY$Zv@w)p;h4CiYD8xZ@p zLTR(gjs=2C`HP3HD*EffKeLvm>yVfpCHrAObIM@Wzv0t8=Xm~(-?PcLe>fy)Ql;6N z4=s<8y;)}a?}k{zU~U@B_uJgQYiS0T^Y7?BK#8138NluS`?~pE;U~TH48Zy9l;t^( z6=0>$51nm)@s-c=+WG@8SeVaFwF2T-^bb7H80NE6mstMvPXOfp_F(;Ac)R^!f4IE7 zw*Kl-#~|Tb_}PWBB66}Ef4B-%0~>DwPfBzy`$Ireh7oL!io$8BGM z(@SM{ms~Dq6@nsim}uNvFCro`U`hKilKxNyI??e0N6*Jd5g=WZX7Js_7add2qcsx!rnFOF#tI=pQ*xBB`udRs4 zK@@-y(+Rjv5JKySe>S&W{q=iXTa;b7a)okv??oEvbefl6dg&33NJOGY0T?lEVF_jy zyW!V){dtm{J9qBT3Q$C(9}2)Iv)6!D1^D8_?fI7DIH%(AxB~>WTCHk~xf=w*^uy>} z6`+U=f&wsND(!_Z-p{K*TCYTX-w(ZiYwd@LMB=w2BO|2Ke`$7hc5q!c)o3(Eo6Tlm zj0yd41yz6|G6)L5h?xa^=vIFKFSdiPH3zuTZWRt=%(-MT$>``Pl}ZKM-gF)W0oGb$ zO!$jWRRM~~ASeJM$eUT*8*|+ipy7v)F(wUADwU{IDi~w1))J4$snu$s_YWxOL}VZo zfDz;umYDUtf7Y|_@7)s^@+OEzqtUJWI@O-Fw)+~=ahy>4tyU^M+Z4C90JzcTenAmA z*>o6og!qM}?);zc`+Md9S02&^2*+`#)oRr1b(+m4)>?ufpjxexN~J<8L5p|p^wsYA z_3LCanXrZ-B11$KU_^9|LF>ev=XpOZhH0C%mX+|ge?%B#Otn-hB^}4XT1%tRAe~Mh zi<4)n)#{@jf`~+fD!_=?*x0x)V7f=6br!@tr2T-7RZH1jiy_ucmDb-uUf1BdM<2xwJ+ z>Gtz~u3ptXKoR-X6o3&kjNx`vItfNZ20;NRk)xAfL}U;YfD$>X07YaF6o3*rssKe~ z5EOtCISM)v83YBOL`LVVPZ5zpPyouYH+kw5EjLzIkNi6#B8O1`%CUF;{P`2V^+QAk Z??-WiHE;{qotgju002ovPDHLkV1k}JB2oYV From 3bb1a8dd00c1befaefc817ce6f2c68bdde0b1ade Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 8 Jun 2019 02:19:39 +0100 Subject: [PATCH 14/22] OOPS. --- code/modules/research/designs/medical_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index a446255260..73d8dc3170 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -105,7 +105,7 @@ /datum/design/bluespacesmartdart name = "bluespace smartdart" desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." - id = "medicinalsmartdart" + id = "bluespacesmartdart" build_type = PROTOLATHE materials = list(MAT_GLASS = 2000, MAT_PLASTIC = 500, MAT_METAL = 500, MAT_BLUESPACE = 500) build_path = /obj/item/reagent_containers/syringe/dart/bluespace From 84c3c104cde97d0928210f53ff99ec4c9e3ee260 Mon Sep 17 00:00:00 2001 From: Thalpy <33956696+Thalpy@users.noreply.github.com> Date: Sat, 8 Jun 2019 06:32:12 +0100 Subject: [PATCH 15/22] Pointed out that a message could be misinterpreted as lewd. --- code/modules/reagents/reagent_containers/syringes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 39a372c381..4f8dd2c416 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -314,7 +314,7 @@ update_icon() if(SYRINGE_INJECT) - src.visible_message("The smartdart gives a frustrated boop! It's ready and full; You need to shoot someone with it!") + src.visible_message("The smartdart gives a frustrated boop! It's fully saturated; You need to shoot someone with it!") /obj/item/reagent_containers/syringe/dart/attack_self(mob/user) return From 17403bd0594a63189bcc420c43c596e29ab6819b Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 13 Jun 2019 00:58:54 +0100 Subject: [PATCH 16/22] Non-functioning EMP code for review (revert before merging.) --- code/modules/projectiles/ammunition/special/syringe.dm | 8 ++++++++ .../projectiles/projectile/bullets/dart_syringe.dm | 3 ++- code/modules/reagents/reagent_containers/syringes.dm | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index a4107fa6a2..47ae266e45 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -66,3 +66,11 @@ projectile_type = /obj/item/projectile/bullet/dart/syringe/dart firing_effect_type = null harmful = FALSE + +/obj/item/ammo_casing/syringegun/dart/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + ..() + var/obj/item/gun/syringe/SG = loc + var/obj/item/reagent_containers/syringe/dart/S = SG.syringes[1] + if(S.emptrig == TRUE) + var/obj/item/projectile/bullet/dart/syringe/dart/D = BB + D.emptrig = TRUE diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 92865a3a55..6493e0f015 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -45,6 +45,7 @@ name = "Smartdart" icon_state = "dartproj" damage = 0 + var/emptrig = FALSE /obj/item/projectile/bullet/dart/syringe/dart/on_hit(atom/target, blocked = FALSE) if(iscarbon(target)) @@ -55,7 +56,7 @@ for(var/datum/reagent/R in reagents.reagent_list) //OD prevention time! if(istype(R, /datum/reagent/medicine)) //Is this a medicine? if(M.reagents.has_reagent(R.id)) - if(R.overdose_threshold == 0) //Is there a possible OD? + if(R.overdose_threshold == 0 || emptrig == TRUE) //Is there a possible OD? M.reagents.add_reagent(R.id, R.volume) else var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.id)) -1) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 4f8dd2c416..78cf518ec9 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -270,6 +270,7 @@ amount_per_transfer_from_this = 20 icon_state = "empty" item_state = "syringe_empty" + var/emptrig = FALSE /obj/item/reagent_containers/syringe/dart/afterattack(atom/target, mob/user , proximity) @@ -341,6 +342,10 @@ add_overlay(injoverlay) M.update_inv_hands() +/obj/item/reagent_containers/syringe/dart/emp_act(severity) + emptrig = TRUE + ..() + /obj/item/reagent_containers/syringe/dart/bluespace name = "bluespace smartdart" desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." From fe6296b58acd441f9ce6ee05ccfc13f8d37ec5c0 Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 19 Jun 2019 00:17:18 +0100 Subject: [PATCH 17/22] Added crafting recipies as per Bhijin's request. --- code/game/objects/items/storage/belt.dm | 4 +-- code/modules/crafting/recipes.dm | 33 +++++++++++++++++++ .../research/designs/medical_designs.dm | 6 ++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 27c3d76655..4e496826a9 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -550,14 +550,14 @@ /obj/item/storage/belt/medolier/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) - STR.max_items = 12 + STR.max_items = 16 STR.display_numerical_stacking = FALSE STR.can_hold = typecacheof(list( /obj/item/reagent_containers/syringe/dart )) /obj/item/storage/belt/medolier/full/PopulateContents() - for(var/i in 1 to 10) + for(var/i in 1 to 16) new /obj/item/reagent_containers/syringe/dart/(src) /obj/item/storage/belt/holster diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index ca10d5092f..3691002e0b 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -761,3 +761,36 @@ /datum/reagent/water = 15) time = 40 category = CAT_MISC + +/datum/crafting_recipe/smartdart + name = "Medical smartdart" + result = /obj/item/reagent_containers/syringe/dart + reqs = list(/obj/item/stack/sheet/metal = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/sheet/plastic = 1) + time = 10 + category = CAT_WEAPONRY + subcategory = CAT_AMMO + +/datum/crafting_recipe/medolier + name = "Medolier" + result = /obj/item/storage/belt/medolier + reqs = list(/obj/item/stack/sheet/metal = 2, + /obj/item/stack/sheet/cloth = 3, + /obj/item/stack/sheet/plastic = 4) + time = 30 + category = CAT_WEAPONRY + subcategory = CAT_AMMO + +/datum/crafting_recipe/smartdartgun + name = "Smart dartgun" + result = /obj/item/storage/belt/medolier + reqs = list(/obj/item/stack/sheet/metal = 15, + /obj/item/stack/sheet/glass = 10, + /obj/item/tank/internals = 1, + /obj/item/reagent_containers/glass/beaker = 1, + /obj/item/stack/sheet/plastic = 10, + /obj/item/stack/cable_coil = 2) + time = 150 //It's a gun + category = CAT_WEAPONRY + subcategory = CAT_WEAPON diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 73d8dc3170..48cc2826b9 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -97,7 +97,7 @@ desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." id = "medicinalsmartdart" build_type = PROTOLATHE - materials = list(MAT_GLASS = 2000, MAT_PLASTIC = 200, MAT_METAL = 500) + materials = list(MAT_GLASS = 100, MAT_PLASTIC = 100, MAT_METAL = 100) build_path = /obj/item/reagent_containers/syringe/dart category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL @@ -107,7 +107,7 @@ desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." id = "bluespacesmartdart" build_type = PROTOLATHE - materials = list(MAT_GLASS = 2000, MAT_PLASTIC = 500, MAT_METAL = 500, MAT_BLUESPACE = 500) + materials = list(MAT_GLASS = 250, MAT_PLASTIC = 250, MAT_METAL = 250, MAT_BLUESPACE = 250) build_path = /obj/item/reagent_containers/syringe/dart/bluespace category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL @@ -117,7 +117,7 @@ desc = "A compressed air gun, designed to fit medicinal darts for application of medicine for those patients just out of reach." id = "smartdartgun" build_type = PROTOLATHE - materials = list(MAT_GLASS = 1500, MAT_PLASTIC = 1000, MAT_METAL = 1500) + materials = list(MAT_GLASS = 500, MAT_PLASTIC = 1000, MAT_METAL = 500) build_path = /obj/item/gun/syringe/dart category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL From 724ec93166de75264b65be6fc97a8122b5e5b43d Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 19 Jun 2019 00:24:02 +0100 Subject: [PATCH 18/22] oops --- code/modules/crafting/recipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index c1026ed871..655f42e5d7 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -804,7 +804,7 @@ /datum/crafting_recipe/smartdartgun name = "Smart dartgun" - result = /obj/item/storage/belt/medolier + result = /obj/item/gun/syringe/dart reqs = list(/obj/item/stack/sheet/metal = 15, /obj/item/stack/sheet/glass = 10, /obj/item/tank/internals = 1, From 095ea1243b3557fa625bfdf40cf7948e4fcbc101 Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 19 Jun 2019 00:39:38 +0100 Subject: [PATCH 19/22] Fits better. --- code/game/objects/items/storage/belt.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 4e496826a9..beb62d0ed1 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -550,7 +550,7 @@ /obj/item/storage/belt/medolier/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) - STR.max_items = 16 + STR.max_items = 15 STR.display_numerical_stacking = FALSE STR.can_hold = typecacheof(list( /obj/item/reagent_containers/syringe/dart From fec1df2098ee0be98e794e5e9115c56605a1ac0d Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 19 Jun 2019 00:52:45 +0100 Subject: [PATCH 20/22] Rephrasal for understanding. --- code/modules/reagents/reagent_containers/syringes.dm | 4 ++-- code/modules/research/designs/medical_designs.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index ef4fb9edae..cc83eb28f6 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -262,7 +262,7 @@ /obj/item/reagent_containers/syringe/dart name = "medicinal smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using it's smart nanofilter technology only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented." volume = 20 amount_per_transfer_from_this = 20 icon_state = "empty" @@ -345,6 +345,6 @@ /obj/item/reagent_containers/syringe/dart/bluespace name = "bluespace smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using it's smart nanofilter technology only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented. Has an extended volume capacity thanks to bluespace foam." amount_per_transfer_from_this = 50 volume = 50 diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c962a86a30..3a7ef68903 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -94,7 +94,7 @@ /datum/design/medicinalsmartdart name = "Medicinal Smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using it's smart nanofilter technology only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented." id = "medicinalsmartdart" build_type = PROTOLATHE materials = list(MAT_GLASS = 100, MAT_PLASTIC = 100, MAT_METAL = 100) @@ -104,7 +104,7 @@ /datum/design/bluespacesmartdart name = "bluespace smartdart" - desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient, only medicines are administered to the patient using a smart nanofilter and capillary action with a built in safety for OD. Has an extended volume capacity thanks to bluespace foam." + desc = "A non-harmful dart that can administer medication from a range. Once it hits a patient using it's smart nanofilter technology only medicines contained within the dart are administered to the patient. Additonally, due to capillary action, injection of chemicals past the overdose limit is prevented. Has an extended volume capacity thanks to bluespace foam." id = "bluespacesmartdart" build_type = PROTOLATHE materials = list(MAT_GLASS = 250, MAT_PLASTIC = 250, MAT_METAL = 250, MAT_BLUESPACE = 250) From e0cada79659bbde02f57dac07dede68ec6d294c3 Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 19 Jun 2019 01:08:23 +0100 Subject: [PATCH 21/22] Quick fix for a runtime --- code/modules/projectiles/ammunition/special/syringe.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index 47ae266e45..4d4dd7bcc1 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -69,6 +69,8 @@ /obj/item/ammo_casing/syringegun/dart/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() + if(!SG.syringes.len) + return var/obj/item/gun/syringe/SG = loc var/obj/item/reagent_containers/syringe/dart/S = SG.syringes[1] if(S.emptrig == TRUE) From 88ec4e336ef6e8d496960a7921927052db9c36e6 Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 20 Jun 2019 03:34:49 +0100 Subject: [PATCH 22/22] Small oops. --- code/modules/projectiles/ammunition/special/syringe.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm index 4d4dd7bcc1..d5cba6936f 100644 --- a/code/modules/projectiles/ammunition/special/syringe.dm +++ b/code/modules/projectiles/ammunition/special/syringe.dm @@ -69,9 +69,9 @@ /obj/item/ammo_casing/syringegun/dart/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") ..() + var/obj/item/gun/syringe/SG = loc if(!SG.syringes.len) return - var/obj/item/gun/syringe/SG = loc var/obj/item/reagent_containers/syringe/dart/S = SG.syringes[1] if(S.emptrig == TRUE) var/obj/item/projectile/bullet/dart/syringe/dart/D = BB